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
{
}
}
