hi Ingo,

yeah, you want to update the templates, you might consider adding the ejb.value-object tags into the EJB, take a look at the xdoclet documentation

   * http://xdoclet.sourceforge.net/xdoclet/valueobjects.html
   * http://xdoclet.sourceforge.net/xdoclet/tags/ejb-tags.html

I did it once for a project, using entity beans, I attached the velocity template to this email

please note I added class and method level aspects for the value-objects and also for security (ejb.permission)

I hope this is what you meant (I am not sure) and it will be helpful for you, this template was used for AndroMDA 2.1.2

-- Wouter


Hello,

is  there  a  way  to  get the dependency source class from the target
class ?

I have the following scenario:

--------------------                   -------------------
| <<EntityClient>> |                   | <<EntityCient>> |
--------------------                   -------------------
|   AddressClient  |                   |  PersonClient   |
--------------------                   -------------------
         |                                      |
         |                                      |
        \|/                                    \|/
--------------------                   -------------------
|    <<Entity>>    |/ (composition) /\ |    <<Entity>>   |
-------------------- 1 ------------ 1  -------------------
|     Address      |\               \/ |      Person     |
--------------------                   -------------------

Now  if  i  generate the Java code for "PersonClient" i want to create
the dependent class "AdressClient". Is there a way to do that ?

I am using andromda-2.1.2.


best regards

Ingo Bruell

---
<[EMAIL PROTECTED]>
<ICQ# 40377720>
Oldenburg  PGP-Fingerprint: CB01 AE12 B359 87C4 BF1C  953C 8FE7 C648 169E E5FC
Germany    PGP-Public-Key available at pgpkeys.mit.edu




------------------------------------------------------- This SF.Net email is sponsored by The 2004 JavaOne(SM) Conference Learn from the experts at JavaOne(SM), Sun's Worldwide Java Developer Conference, June 28 - July 1 at the Moscone Center in San Francisco, CA REGISTER AND SAVE! http://java.sun.com/javaone/sf Priority Code NWMGYKND _______________________________________________ Andromda-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/andromda-user




/*
 * JETeam, Java Enterprise TeamWork
 *
 * Distributable under the GPL license.
 * See terms of licence at http://www.gnu.org
 *
 * $Source: /cvsroot/jeteam/mda/andromda/EntityBean.vsl,v $
 * $Date: 2003/05/28 22:03:21 $
 * $Author: draftdog $
 * $Revision: 1.12 $
 */
#set ($packagename = $transform.findPackageName(${class.package}))
package $packagename;

import javax.ejb.CreateException;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;

import java.util.Collection;
import java.util.Date;

#macro ( generateDocumentation $item $indent)
#foreach ( $tgv in $item.taggedValues )
#if ($tgv.tag == "documentation")
#set ($paras = $transform.formatHTMLStringAsParagraphs($tgv.value))
#foreach ( $par in $paras )
${indent}*
${indent}* <p>
#foreach ( $line in $par.lines )
${indent}* $line
#end
${indent}* </p>
#end
#end
#end
#end
#set ($primKey = $transform.getPrimaryKeyAttribute($class))
#set ($primKeyTypeName = $transform.findFullyQualifiedName($primKey.type))
#foreach ( $assocLink in $class.associationLinks )
#set ($adata = $transform.getAssociationData($assocLink))
#if ($adata.target.navigable == "true")
#set ($class2 = $adata.target.type)
#if ($class2)
#set ($class2packagename = $transform.findPackageName(${class2.package}))
#if ($class2packagename != $packagename)
import ${class2packagename}.$transform.getComponentInterfaceName(${class2});
import ${class2packagename}.$transform.getHomeInterfaceName(${class2});
#end
#end
#end
#end
#foreach ( $dep in $class.dependencies )
#set ($class2 = $transform.findClassById($dep.targetType))
#if ($class2)
#set ($class2packagename = $transform.findPackageName(${class2.package}))
#if ($class2packagename != $packagename)
import ${class2packagename}.$transform.getComponentInterfaceName(${class2});
import ${class2packagename}.$transform.getHomeInterfaceName(${class2});
#end
#end
#if ($transform.getStereotype($dep.id) == "exception")
#set ($defaultException = $class2)
#end
#end

/**
#generateDocumentation ($class " ")
 *
 * @ejb.bean
 *     name="$class.name" type="CMP" cmp-version="2.x"
 *     local-jndi-name="${packagename}/${class.name}/LocalHome"
 *     jndi-name="${packagename}/${class.name}/Home"
 *     view-type="local"
 *     primkey-field="$primKey.name"
 * @ejb.interface
 *     generate="local,remote"
 *     remote-class="${packagename}.${class.name}"
 *     local-class="${packagename}.${class.name}Local"
 * @ejb.home
 *     generate="local"
 *     local-class="${packagename}.${class.name}LocalHome"
 * @ejb.pk
 *     generate="false"
 *     class="java.lang.String"
 * @ejb.finder
 *     signature="${packagename}.${class.name}Local findByPrimaryKey(java.lang.String 
pk)"
 *     unchecked="false"
 *     role-name="${class.name},${class.name}.findByPrimaryKey"
 * @ejb.finder
 *     signature="java.util.Collection findAll()"
 *     unchecked="false"
 *     role-name="${class.name},${class.name}.findAll"
#foreach ( $att in $class.attributes )
#set ( $attstereotype = $transform.getStereotype($att.id) )
#set ( $atttypename = $transform.findFullyQualifiedName($att.type) )
#if ( ($attstereotype=="FinderAttribute") || ($attstereotype=="FinderRangeAttribute") )
 * @ejb.finder
 *     signature="java.util.Collection 
findBy${str.upperCaseFirstLetter(${att.name})}(${atttypename} ${att.name})"
 *     query="SELECT OBJECT(o) FROM ${class.name} o WHERE o.${att.name} = ?1"
 *     unchecked="false"
 *     
role-name="${class.name},${class.name}.findBy${str.upperCaseFirstLetter(${att.name})}"
#end
#if ( $attstereotype == "FinderRangeAttribute" )
#if ( $atttypename == "java.util.Date" )
 * @ejb.finder
 *     signature="java.util.Collection 
findInRange${str.upperCaseFirstLetter(${att.name})}(${atttypename} low, ${atttypename} 
high)"
 *     query="SELECT OBJECT(o) FROM ${class.name} o WHERE ((o.${att.name} > ?1) AND 
(o.${att.name} < ?2)) OR (o.${att.name} = ?1) OR (o.${att.name} = ?2)"
 *     unchecked="false"
 *     
role-name="${class.name},${class.name}.findInRangeBy${str.upperCaseFirstLetter(${att.name})}"
#else
 * @ejb.finder
 *     signature="java.util.Collection 
findInRange${str.upperCaseFirstLetter(${att.name})}(${atttypename} low, ${atttypename} 
high)"
 *     query="SELECT OBJECT(o) FROM ${class.name} o WHERE o.${att.name} BETWEEN ?1 AND 
?2"
 *     unchecked="false"
 *     
role-name="${class.name},${class.name}.findInRangeBy${str.upperCaseFirstLetter(${att.name})}"
#end
#end
#end
 * @ejb.util
 *     generate="physical"
 * @ejb.value-object
 *     name="$class.name" match="*" instantiation="eager"
#foreach ( $dep in $class.dependencies )
#if ($transform.getStereotype($dep.id) == "ejbref")
 #set ($class2 = $transform.findClassById($dep.targetType))
 * @ejb.ejb-ref
 *     ejb-name="${class2.name}"
 *     view-type="$transform.getEjbRefViewType(${class2})"
 *     ref-name="ejb/${class2.name}BeanRef"
#end
#end
 *
 * @ejb.persistence
 *     table-name="$class.name"
 *
 * @jboss.persistence
 *     create-table="true"
 *     remove-table="false"
 *     tuned-updates="true"
 *     read-only="false"
 *
 * @struts.form
 *     name="Edit"
 *     include-all="true"
 *
#foreach ( $tgv in $class.taggedValues )
#if ($tgv.tag != "documentation")
#if ($tgv.tag == "---")
    #set ($tag = "")
#else
    #set ($tag = $tgv.tag)
#end
 * $tag    $tgv.value
#end
#end
 *
############################# finder methods ###################################
#foreach ( $op in $class.operations )
#if ($transform.getStereotype($op.id) == "FinderMethod")
 * @ejb:finder signature="$transform.getOperationSignature($op)"
#set($viewtype = "")
#set($viewtype = $transform.findTagValue($op.taggedValues, "@uml2ejb.viewType"))
#if($viewtype == "local" || $viewtype == "remote" || $viewtype == "both")
 *     view-type="$viewtype"
#end
#set($querystring = "")
#set($querystring = $transform.findTagValue($op.taggedValues, "@uml2ejb.query"))
#if($querystring == 0 || $querystring == "")
#set($querystring = "SELECT DISTINCT OBJECT(c) FROM $class.name AS c")
#if($op.parameters.size() >0 )
#set($querystring = "${querystring} WHERE")
#foreach($prm in $op.parameters)
#set($querystring="${querystring} c.$prm.name = ?$velocityCount")
#if($velocityCount != $op.parameters.size())
#set($querystring = "${querystring} AND")
#end
#end
#end
#end
 *     query="$querystring"
#end##if op.stereotype = "FinderMethod"
#end##foreach operation
 *
 */
public abstract class ${class.name}Bean implements EntityBean {

    // --------------- attributes ---------------------
#foreach ( $att in $class.attributes )
#set ($atttypename = $transform.findFullyQualifiedName($att.type))

   /**
#generateDocumentation ($att "    ")
    *
#if ($transform.getStereotype($att.id) == "PrimaryKey")
    * @ejb.pk-field
#end
#set ($attcolumnname = $str.toDatabaseAttributeName(${att.name}, "_"))
#set ($attjdbctype   = $transform.findAttributeJDBCType($att))
#set ($attsqltype    = $transform.findAttributeSQLType($att))
    * @ejb.persistence
    *     column-name="$attcolumnname"
    *       jdbc-type="$attjdbctype"
    *        sql-type="$attsqltype"
    *
    * @ejb.interface-method view-type="local"
    * @ejb.transaction      type="Required"
    * @ejb.permission
    *     unchecked = "false"
    *     role-name = "InternalUser"
    */
    public abstract $atttypename get${str.upperCaseFirstLetter(${att.name})}();

   /**
    * @ejb.interface-method view-type="local"
    * @ejb.transaction      type="Required"
    * @ejb.permission
    *     unchecked = "false"
    *     role-name = "InternalUser"
    */
    public abstract void set${str.upperCaseFirstLetter(${att.name})}(${atttypename} 
newValue);

#end

    // ------------- relations ------------------

#set ($sep = "_")
#set ($suffix = "_FK")
#foreach ( $assoc in $class.associationLinks )
    #set ($adata = $transform.getAssociationData($assoc))
    #set ($sourcetype = $adata.source.type)
    #set ($targettype = $adata.target.type)
    #set ($targettypename = $transform.findFullyQualifiedName($targettype))
#if ($adata.target.navigable == "true")
   /**
#generateDocumentation ($adata.target.end "    ")
##    * multiplicity:     $adata.multiplicities
##    * source navigable: $adata.source.navigable
##    * target navigable: $adata.target.navigable
    *
    * @ejb.interface-method view-type="local"
    * @ejb.transaction      type="Required"
    * @ejb.relation
#if ($adata.name != "")
    *    name="$adata.name"
#else
    *    name="$adata.id"
#end
    *    role-name="$adata.source.roleName"
#if ($adata.isOne2Many())
#if ($adata.source.navigable == "false")
    *    target-ejb="$targettype.name"
    *    target-role-name="$adata.target.roleName"
#end
    *
#set($foreignKeyColumn = "${str.toDatabaseAttributeName($adata.source.roleName, 
$sep)}$suffix")
#set ($foreignKeyAtt = $transform.getPrimaryKeyAttribute($sourcetype))
    * @jboss.target-relation
    *     related-pk-field="${foreignKeyAtt.name}"
    *            fk-column="${foreignKeyColumn}"
    * @ejb.permission
    *     unchecked = "false"
    *     role-name = "InternalUser"
    */
    public abstract Collection 
get${str.upperCaseFirstLetter($adata.target.roleName)}();

   /**
    * @ejb.interface-method view-type="local"
    * @ejb.transaction      type="Required"
    * @ejb.permission
    *     unchecked = "false"
    *     role-name = "InternalUser"
    */
    public abstract void 
set${str.upperCaseFirstLetter($adata.target.roleName)}(Collection 
${adata.target.roleName});
#end
#if ($adata.isMany2Many())
#if ($adata.source.navigable == "false")
    *         target-ejb="$targettype.name"
    *    target-multiple="yes"
    *   target-role-name="$adata.target.roleName"
#end
    *
#set($foreignKeyColumn = "${str.toDatabaseAttributeName($adata.target.roleName, 
$sep)}$suffix")
#set ($foreignKeyAtt = $transform.getPrimaryKeyAttribute($targettype))
    * @jboss.relation
    *    related-pk-field="${foreignKeyAtt.name}"
    *    fk-column="${foreignKeyColumn}"
#set ($joinTableName = 
$str.toDatabaseAttributeName($str.toRelationName(${adata.source.roleName},${adata.target.roleName},"_"),
 ""))
    * @jboss.relation-table
    *    table-name="${joinTableName}"
    * @weblogic.relation
    *       join-table-name = "${joinTableName}"
    *    foreign-key-column = "${foreignKeyColumn}"
    * @resin-ejb.relation
    *     sql-table = "${joinTableName}"
    *    sql-column = "${foreignKeyColumn}"
#if ($adata.source.navigable == "false")
    *
#set($foreignKeyColumn = "${str.toDatabaseAttributeName($adata.source.roleName, 
$sep)}$suffix")
#set ($foreignKeyAtt = $transform.getPrimaryKeyAttribute($sourcetype))
    * @jboss.target-relation
    *    related-pk-field = "${foreignKeyAtt.name}"
    *           fk-column = "${foreignKeyColumn}"
#end
    * @ejb.permission
    *     unchecked = "false"
    *     role-name = "InternalUser"
    */
    public abstract Collection 
get${str.upperCaseFirstLetter($adata.target.roleName)}();

   /**
    * @ejb.interface-method view-type="local"
    * @ejb.transaction      type="Required"
    * @ejb.permission
    *     unchecked = "false"
    *     role-name = "InternalUser"
    */
    public abstract void 
set${str.upperCaseFirstLetter($adata.target.roleName)}(Collection 
${adata.target.roleName});
#end
#if ($adata.isOne2One() || $adata.isMany2One())
#if ($adata.source.navigable == "false")
#if ($adata.isMany2One())
    *    target-multiple="yes"
#end
    *    target-ejb="$targettype.name"
    *    target-role-name="$adata.target.roleName"
#end
    *
#set($foreignKeyColumn = "${str.toDatabaseAttributeName($adata.target.roleName, 
$sep)}$suffix")
#set ($foreignKeyAtt = $transform.getPrimaryKeyAttribute($targettype))
    * @jboss.relation  related-pk-field="${foreignKeyAtt.name}"
    *                         fk-column="${foreignKeyColumn}"
    * @ejb.permission
    *     unchecked = "false"
    *     role-name = "InternalUser"
    */
    public abstract ${targettypename}Local 
get${str.upperCaseFirstLetter($adata.target.roleName)}();

   /**
    * @ejb.interface-method view-type="local"
    * @ejb.transaction      type="Required"
    * @ejb.permission
    *     unchecked = "false"
    *     role-name = "InternalUser"
    */
    public abstract void 
set${str.upperCaseFirstLetter($adata.target.roleName)}(${targettypename}Local 
${adata.target.roleName});
#end


#end
#end

   // --------------- getter/setter for value objects ------------

   /**
    * @ejb.interface-method view-type="local"
    * @ejb.transaction      type="Required"
    * @ejb.permission
    *     unchecked = "false"
    *     role-name = "InternalUser"
    */
#set ($qualname = $transform.findFullyQualifiedName($class))

    public ${qualname}Data get${class.name}Data ()
    {
        ${qualname}Data result = new ${qualname}Data 
$transform.getAttributesAsList($class, false, true);
        return result;
    }

   /**
    * @ejb.interface-method view-type="local"
    * @ejb.transaction      type="Required"
    * @ejb.permission
    *     unchecked = "false"
    *     role-name = "InternalUser"
    */
    public void set${class.name}Data (${qualname}Data value)
    {
#foreach ( $att in $class.attributes)
#if ($transform.getStereotype($att.getId()) != "PrimaryKey")
         set${str.upperCaseFirstLetter(${att.name})} 
(value.get${str.upperCaseFirstLetter(${att.name})}());
#end
#end
    }

    // ---------------- business methods  ----------------------

#foreach ( $op in $class.operations)
#if ($transform.getStereotype($op.id) != "FinderMethod")
   /**
#generateDocumentation ($op "    ")
    *
    * @ejb.interface-method view-type="local"
    * @ejb.transaction      type="Required"
    * @ejb.permission
    *     unchecked = "false"
    *     role-name = "InternalUser"
    */
#set ($msig = $transform.getOperationSignature($op))
#if ($defaultException)
    $op.visibility abstract ${msig}
        throws $defaultException.name;
#else
    $op.visibility abstract ${msig};
#end
#end
#end

   // ---------------- create methods with separate attributes --------------------

   /**
    * @ejb.create-method
    * @ejb.transaction type="Required"
    * @ejb.permission
    *     unchecked = "false"
    *     role-name = "InternalUser"
    */
    public $primKeyTypeName ejbCreate $transform.getAttributesAsList($class, true, 
false)
           throws CreateException
    {
#foreach ( $att in $class.attributes)
#if ($transform.getStereotype($att.getId()) != "PrimaryKey")
        set${str.upperCaseFirstLetter(${att.name})} (${att.name});
#end
#end

        String primaryKey = ${class.name}Util.generateGUID(this);
        set${str.upperCaseFirstLetter(${primKey.name})} (primaryKey);
        return null;  // should not return primaryKey for CMP: see EJB spec,
                      // chapter 10.5.2 "Bean Provider�s entity bean instance�s view"
    }

    public void ejbPostCreate $transform.getAttributesAsList($class, true, false)
           throws CreateException
    {
    }

   // ---------------- create methods using value object --------------------

   /**
    * @ejb.create-method
    * @ejb.transaction type="Required"
    * @ejb.permission
    *     unchecked = "false"
    *     role-name = "InternalUser"
    */
    public $primKeyTypeName ejbCreate (${qualname}Data data)
           throws CreateException
    {
#foreach ( $att in $class.attributes)
#if ($transform.getStereotype($att.getId()) != "PrimaryKey")
        set${str.upperCaseFirstLetter(${att.name})} ( 
data.get${str.upperCaseFirstLetter(${att.name})}() );
#end
#end

        String primaryKey = ${class.name}Util.generateGUID(this);
        set${str.upperCaseFirstLetter(${primKey.name})} (primaryKey);
        return null;  // should not return primaryKey for CMP: see EJB spec,
                      // chapter 10.5.2 "Bean Provider�s entity bean instance�s view"
    }

    public void ejbPostCreate (${qualname}Data data)
           throws CreateException
    {
    }

   // ------------------------- remove method -------------------------------

   /**
    * @ejb.transaction           type="Required"
    * @ejb.permission
    *     unchecked = "false"
    *     role-name = "InternalUser"
    */
   public void ejbRemove () throws javax.ejb.RemoveException
   {
   }

}

Reply via email to