1) When using the entityCMP under EJB spec 2.0 We should iqnore the
relations tag and there is no need to re-create the persistant fields
2) I've added support for the declared-sql clause in jboss. The tag
syntax is the same as the finder, so
@ejb:finder signature="Transferhead findCurrent(int
company_id,java.lang.String application,java.lang.String module)"
query="SELECT object(t) FROM transferhead t WHERE t.company_id=?1"
result-type="Remote"
@jboss:declared-sql signature="Transferhead findCurrent(int
company_id,java.lang.String application,java.lang.String module)"
where="company_id={0} and application={1} and module={2}"
order="datestamp desc" other="limit 1"
The current options are where,order and other
/**
* Generated CMP layer for <XDtEjb:ejbName/>. Do not edit!
*/
package <XDtPackage:packageOf><XDtEjbCmp:entityCmpClass/></XDtPackage:packageOf>;
<XDtClass:importedList/>
<XDtClass:classComment indent="0"/>
public <XDtEjbCmp:ifUsingCmp2>abstract </XDtEjbCmp:ifUsingCmp2>class
<XDtClass:classOf><XDtEjbCmp:entityCmpClass/></XDtClass:classOf>
extends <XDtClass:fullClassName/>
implements javax.ejb.EntityBean<XDtClass:ifHasClassTag tagName="ejb:bean"
paramName="remote-business-interface">, <XDtClass:classTagValue tagName="ejb:bean"
paramName="remote-business-interface"
/></XDtClass:ifHasClassTag><XDtClass:ifHasClassTag tagName="ejb:bean"
paramName="local-business-interface">, <XDtClass:classTagValue tagName="ejb:bean"
paramName="local-business-interface" /></XDtClass:ifHasClassTag>
{
<XDtEjbCmp:ifNotUsingCmp2>
private boolean dirty;
<XDtEjbBmp:ifUseSoftLocking>
public int version = 0;
</XDtEjbBmp:ifUseSoftLocking>
</XDtEjbCmp:ifNotUsingCmp2>
<XDtEjbDataObj:ifIsWithDataContainer>
private <XDtEjbDataObj:dataObjectClass/> dataHolder;
</XDtEjbDataObj:ifIsWithDataContainer>
<XDtEjbCmp:ifNotUsingCmp2>
<XDtEjbPersistent:forAllPersistentFields>
<XDtMethod:ifHasMethod name="<XDtMethod:getterMethod />"
parameters="<XDtMethod:methodType />">
<XDtMethod:ifIsAbstract>
public <XDtMethod:methodType/> <XDtMethod:propertyName/>;
</XDtMethod:ifIsAbstract>
</XDtMethod:ifHasMethod>
</XDtEjbPersistent:forAllPersistentFields>
<XDtEjbBmp:ifUseSoftLocking>
public int getVersion()
{
return this.version;
}
public void setVersion( int version )
{
this.version = version;
makeDirty();
<XDtEjbDataObj:ifIsWithDataContainer>
dataHolder = null;
</XDtEjbDataObj:ifIsWithDataContainer>
}
</XDtEjbBmp:ifUseSoftLocking>
<XDtEjbPersistent:forAllPersistentFields>
public <XDtMethod:methodType/> <XDtMethod:getterMethod/>()
<XDtMethod:exceptionList/>
{
<XDtMethod:ifIsAbstract>
return this.<XDtMethod:propertyName/>;
</XDtMethod:ifIsAbstract>
<XDtMethod:ifIsNotAbstract>
return super.<XDtMethod:getterMethod/>();
</XDtMethod:ifIsNotAbstract>
}
<XDtMethod:ifHasMethod name="<XDtMethod:setterMethod/>"
parameters="<XDtMethod:methodType/>">
public void <XDtMethod:setterMethod/>( <XDtMethod:methodType/>
<XDtMethod:propertyName/> ) <XDtMethod:exceptionList
method="<XDtMethod:setterMethod/>"/>
{
<XDtMethod:ifIsAbstract>
this.<XDtMethod:propertyName/> = <XDtMethod:propertyName/>;
</XDtMethod:ifIsAbstract>
<XDtMethod:ifIsNotAbstract>
super.<XDtMethod:setterMethod/>(<XDtMethod:propertyName/>);
</XDtMethod:ifIsNotAbstract>
makeDirty();
<XDtEjbDataObj:ifIsWithDataContainer>
dataHolder = null;
</XDtEjbDataObj:ifIsWithDataContainer>
}
</XDtMethod:ifHasMethod>
</XDtEjbPersistent:forAllPersistentFields>
</XDtEjbCmp:ifNotUsingCmp2>
<XDtEjbCmp:ifUsingCmp2>
<XDtEjbBmp:ifUseSoftLocking>
public abstract int getVersion();
public abstract void setVersion( int version );
</XDtEjbBmp:ifUseSoftLocking>
</XDtEjbCmp:ifUsingCmp2>
<XDtEjbDataObj:ifIsWithDataContainer>
<XDtEjbDataObj:ifIsWithDataMethod>
public void setData( <XDtEjbDataObj:dataObjectClass/> dataHolder )
{
<XDtEjbBmp:ifUseSoftLocking>
if( getVersion() != dataHolder.getVersion() )
throw new IllegalStateException( "Wrong version. Had " + getVersion() + ",
got " + dataHolder.getVersion() );
</XDtEjbBmp:ifUseSoftLocking>
try
{
<XDtEjbPersistent:forAllPersistentFields not-pk="true">
<XDtMethod:ifHasMethod name="<XDtMethod:setterMethod/>"
parameters="<XDtMethod:methodType/>">
<XDtMethod:setterMethod/>( dataHolder.<XDtMethod:getterMethod/>() );
</XDtMethod:ifHasMethod>
</XDtEjbPersistent:forAllPersistentFields>
<XDtMethod:forAllMethods>
<XDtEjbDataObj:ifIsAggregate>
if( <XDtMethod:getterMethod/>() != null )
<XDtMethod:getterMethod/>().setData(
dataHolder.<XDtMethod:getterMethod/>() );
</XDtEjbDataObj:ifIsAggregate>
</XDtMethod:forAllMethods>
dataHolder = null;
}
catch (Exception e)
{
throw new javax.ejb.EJBException(e);
}
}
public <XDtEjbDataObj:dataMostSuperObjectClass/> getData()
{
if( dataHolder == null )
{
try
{
dataHolder = new <XDtEjbDataObj:dataObjectClass/>();
<XDtEjbPersistent:forAllPersistentFields>
<XDtMethod:ifHasMethod name="<XDtMethod:setterMethod/>"
parameters="<XDtMethod:methodType/>">
dataHolder.<XDtMethod:setterMethod/>( <XDtMethod:getterMethod/>() );
</XDtMethod:ifHasMethod>
</XDtEjbPersistent:forAllPersistentFields>
<XDtMethod:forAllMethods>
<XDtEjbDataObj:ifIsAggregate>
if( <XDtMethod:getterMethod/>() != null )
dataHolder.<XDtMethod:setterMethod/>(
<XDtMethod:getterMethod/>().getData() );
</XDtEjbDataObj:ifIsAggregate>
</XDtMethod:forAllMethods>
<XDtEjbBmp:ifUseSoftLocking>
dataHolder.setVersion(getVersion());
</XDtEjbBmp:ifUseSoftLocking>
}
catch (Exception e)
{
throw new javax.ejb.EJBException(e);
}
}
return dataHolder;
}
</XDtEjbDataObj:ifIsWithDataMethod>
</XDtEjbDataObj:ifIsWithDataContainer>
<XDtEjbDataObj:forAllSuperSetData>
<XDtEjbDataObj:ifIsWithDataContainer>
<XDtEjbDataObj:ifIsWithDataMethod>
public void setData( <XDtEjbDataObj:generateDataObjectClass/> dataHolder )
{
<XDtEjbBmp:ifUseSoftLocking>
if( getVersion() != dataHolder.getVersion() )
throw new IllegalStateException( "Wrong version. Had " + getVersion() + ",
got " + dataHolder.getVersion() );
</XDtEjbBmp:ifUseSoftLocking>
try
{
<XDtEjbPersistent:forAllPersistentFields not-pk="true">
<XDtMethod:ifHasMethod name="<XDtMethod:setterMethod/>"
parameters="<XDtMethod:methodType/>">
<XDtMethod:setterMethod/>( dataHolder.<XDtMethod:getterMethod/>() );
</XDtMethod:ifHasMethod>
</XDtEjbPersistent:forAllPersistentFields>
<XDtMethod:forAllMethods>
<XDtEjbDataObj:ifIsAggregate>
if( <XDtMethod:getterMethod/>() != null)
<XDtMethod:getterMethod/>().setData(
dataHolder.<XDtMethod:getterMethod/>() );
</XDtEjbDataObj:ifIsAggregate>
</XDtMethod:forAllMethods>
dataHolder = null;
}
catch (Exception e)
{
throw new javax.ejb.EJBException(e);
}
}
</XDtEjbDataObj:ifIsWithDataMethod>
</XDtEjbDataObj:ifIsWithDataContainer>
</XDtEjbDataObj:forAllSuperSetData>
<XDtEjbCmp:ifNotUsingCmp2>
<XDtMethod:forAllMethods>
<XDtMethod:ifHasMethodTag tagName="ejb:relationship">
<XDtMethod:forAllMethodTags tagName="ejb:relationship">
public <XDtMethod:methodType/> <XDtMethod:getterMethod/>()
{
try
{
javax.naming.InitialContext jndiContext = new javax.naming.InitialContext();
Object ref = jndiContext.lookup( <XDtMethod:methodTagValue
tagName="ejb:relationship" paramName="home"/>.COMP_NAME );
<XDtMethod:methodTagValue tagName="ejb:relationship" paramName="home"/> home
= (<XDtMethod:methodTagValue tagName="ejb:relationship" paramName="home"/>)
javax.rmi.PortableRemoteObject.narrow( ref, <XDtMethod:methodTagValue
tagName="ejb:relationship" paramName="home"/>.class );
java.util.Collection c = home.<XDtMethod:methodTagValue
tagName="ejb:relationship" paramName="method"/>(<XDtMethod:methodTagValue
tagName="ejb:relationship" paramName="params"/>);
return c;
}
catch (Exception e)
{
throw new javax.ejb.EJBException(e);
}
}
</XDtMethod:forAllMethodTags>
</XDtMethod:ifHasMethodTag>
</XDtMethod:forAllMethods>
</XDtEjbCmp:ifNotUsingCmp2>
<XDtEjbCmp:ifNotUsingCmp2>
public boolean isModified()
{
return dirty;
}
protected void makeDirty()
{
dirty = true;
}
</XDtEjbCmp:ifNotUsingCmp2>
public void ejbLoad() <XDtMethod:exceptionList method="ejbLoad"/>
{
<XDtMethod:ifHasMethod name="ejbLoad">
<XDtMethod:ifIsNotAbstract>
super.ejbLoad();
</XDtMethod:ifIsNotAbstract>
</XDtMethod:ifHasMethod>
<XDtConfig:ifConfigParamNotEquals paramName="EjbSpec" value="2.0">
dirty = false;
</XDtConfig:ifConfigParamNotEquals>
<XDtEjbDataObj:ifIsWithDataContainer>
dataHolder = null;
</XDtEjbDataObj:ifIsWithDataContainer>
}
public void ejbStore() <XDtMethod:exceptionList method="ejbStore"/>
{
<XDtMethod:ifHasMethod name="ejbStore">
<XDtMethod:ifIsNotAbstract>
super.ejbStore();
</XDtMethod:ifIsNotAbstract>
</XDtMethod:ifHasMethod>
<XDtEjbBmp:ifUseSoftLocking>
setVersion( getVersion() + 1 );
</XDtEjbBmp:ifUseSoftLocking>
<XDtEjbCmp:ifNotUsingCmp2>
dirty = false;
</XDtEjbCmp:ifNotUsingCmp2>
}
public void ejbActivate() <XDtMethod:exceptionList method="ejbActivate"/>
{
<XDtMethod:ifHasMethod name="ejbActivate">
<XDtMethod:ifIsNotAbstract>
super.ejbActivate();
</XDtMethod:ifIsNotAbstract>
</XDtMethod:ifHasMethod>
}
public void ejbPassivate() <XDtMethod:exceptionList method="ejbPassivate"/>
{
<XDtMethod:ifHasMethod name="ejbPassivate">
<XDtMethod:ifIsNotAbstract>
super.ejbPassivate();
</XDtMethod:ifIsNotAbstract>
</XDtMethod:ifHasMethod>
<XDtEjbDataObj:ifIsWithDataContainer>
dataHolder = null;
</XDtEjbDataObj:ifIsWithDataContainer>
}
public void setEntityContext(javax.ejb.EntityContext ctx) <XDtMethod:exceptionList
method="setEntityContext"/>
{
<XDtMethod:ifHasMethod name="setEntityContext"
parameters="javax.ejb.EntityContext">
<XDtMethod:ifIsNotAbstract>
super.setEntityContext(ctx);
</XDtMethod:ifIsNotAbstract>
</XDtMethod:ifHasMethod>
}
public void unsetEntityContext() <XDtMethod:exceptionList
method="unsetEntityContext"/>
{
<XDtMethod:ifHasMethod name="unsetEntityContext">
<XDtMethod:ifIsNotAbstract>
super.unsetEntityContext();
</XDtMethod:ifIsNotAbstract>
</XDtMethod:ifHasMethod>
}
public void ejbRemove() <XDtMethod:exceptionList method="ejbRemove"
append="javax.ejb.RemoveException"/>
{
<XDtMethod:ifHasMethod name="ejbRemove">
<XDtMethod:ifIsNotAbstract>
super.ejbRemove();
</XDtMethod:ifIsNotAbstract>
</XDtMethod:ifHasMethod>
<XDtMethod:forAllMethods>
<XDtEjbDataObj:ifIsAggregate>
try
{
if( <XDtMethod:getterMethod/>() != null )
<XDtMethod:propertyName/>.remove();
}
catch (java.rmi.RemoteException e)
{
throw new javax.ejb.EJBException(e);
}
</XDtEjbDataObj:ifIsAggregate>
</XDtMethod:forAllMethods>
}
<XDtMerge:merge file="entitycmp-custom.j">
</XDtMerge:merge>
}
<?xml version="1.0" encoding="<XDtConfig:configParameterValue
paramName='Xmlencoding'/>"?>
<XDtConfig:ifConfigParamEquals paramName="Version" value="2.4">
<!DOCTYPE jaws PUBLIC "-//JBoss//DTD JAWS 2.4//EN"
"http://www.jboss.org/j2ee/dtd/jaws_2_4.dtd">
</XDtConfig:ifConfigParamEquals>
<XDtConfig:ifConfigParamEquals paramName="Version" value="3.0">
<!DOCTYPE jaws PUBLIC "-//JBoss//DTD JAWS 3.0//EN"
"http://www.jboss.org/j2ee/dtd/jaws_3_0.dtd">
</XDtConfig:ifConfigParamEquals>
<jaws>
<datasource><XDtConfig:configParameterValue paramName="Datasource"/></datasource>
<type-mapping><XDtConfig:configParameterValue
paramName="Typemapping"/></type-mapping>
<enterprise-beans>
<XDtEjbCmp:forAllCmpEntityBeans>
<XDtEjb:ifIsAConcreteEJBean>
<entity>
<XDtMerge:merge file="jaws-db-settings-{0}.xml">
<ejb-name><XDtEjb:ejbName/></ejb-name>
<XDtClass:ifHasClassTag tagName="jboss:table-name">
<table-name><XDtClass:classTagValue tagName="jboss:table-name"
paramName="table-name" paramNum="0"/></table-name>
</XDtClass:ifHasClassTag>
<XDtClass:ifHasClassTag tagName="jboss:create-table">
<create-table><XDtClass:classTagValue tagName="jboss:create-table"
paramName="create" paramNum="0"/></create-table>
</XDtClass:ifHasClassTag>
<XDtClass:ifHasClassTag tagName="jboss:remove-table">
<remove-table><XDtClass:classTagValue tagName="jboss:remove-table"
paramName="remove" paramNum="0"/></remove-table>
</XDtClass:ifHasClassTag>
<XDtClass:ifHasClassTag tagName="jboss:tuned-updates">
<tuned-updates><XDtClass:classTagValue tagName="jboss:tuned-updates"
paramName="tune" paramNum="0"/></tuned-updates>
</XDtClass:ifHasClassTag>
<XDtClass:ifHasClassTag tagName="jboss:read-only">
<read-only><XDtClass:classTagValue tagName="jboss:read-only"
paramName="read-only" paramNum="0"/></read-only>
</XDtClass:ifHasClassTag>
<XDtClass:ifHasClassTag tagName="jboss:time-out">
<time-out><XDtClass:classTagValue tagName="jboss:time-out"
paramName="time-out" paramNum="0"/></time-out>
</XDtClass:ifHasClassTag>
<XDtClass:ifHasClassTag tagName="jboss:select-for-update">
<select-for-update><XDtClass:classTagValue tagName="jboss:select-for-update"
paramName="select-for-update" paramNum="0"/></select-for-update>
</XDtClass:ifHasClassTag>
<XDtClass:ifHasClassTag tagName="jboss:pk-constraint">
<pk-constraint><XDtClass:classTagValue tagName="jboss:pk-constraint"
paramName="pk-constraint" paramNum="0"/></pk-constraint>
</XDtClass:ifHasClassTag>
</XDtMerge:merge>
<XDtMerge:merge file="jaws-{0}.xml">
<XDtMethod:forAllMethods>
<XDtMethod:ifDoesntHaveMethodTag tagName="jboss:not-persisted-field">
<XDtMethod:forAllMethodTags tagName="ejb:persistent-field">
<cmp-field>
<field-name><XDtMethod:propertyName/></field-name>
<XDtMethod:ifHasMethodTag tagName="jboss:column-name">
<column-name><XDtMethod:methodTagValue tagName="jboss:column-name"
paramName="name" paramNum="0"/></column-name>
</XDtMethod:ifHasMethodTag>
<XDtMethod:ifHasMethodTag tagName="jboss:sql-type">
<sql-type><XDtMethod:methodTagValue tagName="jboss:sql-type"
paramName="type" paramNum="0"/></sql-type>
</XDtMethod:ifHasMethodTag>
<XDtMethod:ifHasMethodTag tagName="jboss:jdbc-type">
<jdbc-type><XDtMethod:methodTagValue tagName="jboss:jdbc-type"
paramName="type" paramNum="0"/></jdbc-type>
</XDtMethod:ifHasMethodTag>
</cmp-field>
</XDtMethod:forAllMethodTags>
</XDtMethod:ifDoesntHaveMethodTag>
</XDtMethod:forAllMethods>
<XDtClass:forAllClassTags tagName="jboss:cmp-field">
<cmp-field>
<field-name><XDtClass:classTagValue tagName="jboss:cmp-field"
paramName="field-name"/></field-name>
<column-name><XDtClass:classTagValue tagName="jboss:cmp-field"
paramName="column-name"/></column-name>
</cmp-field>
</XDtClass:forAllClassTags>
<XDtConfig:ifConfigParamGreaterOrEquals paramName="EjbSpec" value="2.0">
<XDtType:ifIsOfType type="javax.ejb.EntityBean">
<XDtEjbCmp:ifEntityIsCmp>
<XDtClass:forAllClassTags tagName="jboss:declared-sql">
<XDtClass:ifHasClassTag tagName="jboss:declared-sql" paramName="signature">
<query>
<query-method>
<method-name><XDtClass:classTagValue tagName="jboss:declared-sql"
paramName="signature" delimiter=" (" tokenNumber="1"/></method-name>
<method-params>
<XDtParameter:forAllParameterTypes paramName="signature">
<method-param><XDtParameter:currentToken/></method-param>
</XDtParameter:forAllParameterTypes>
</method-params>
</query-method>
<XDtClass:ifHasClassTag tagName="jboss:declared-sql" paramName
="result-type-mapping">
<result-type-mapping><XDtClass:classTagValue tagName ="jboss:declared-sql"
paramName="result-type-mapping" values ="Local,Remote"/></result-type-mapping>
</XDtClass:ifHasClassTag>
<declared-sql>
<XDtClass:ifHasClassTag
tagName="jboss:declared-sql" paramName="where">
<where>
<![CDATA[
<XDtClass:classTagValue tagName="jboss:declared-sql"
paramName="where"/>
]]>
</where>
</XDtClass:ifHasClassTag>
<XDtClass:ifHasClassTag
tagName="jboss:declared-sql" paramName="order">
<order>
<![CDATA[
<XDtClass:classTagValue tagName="jboss:declared-sql"
paramName="order"/>
]]>
</order>
</XDtClass:ifHasClassTag>
<XDtClass:ifHasClassTag
tagName="jboss:declared-sql" paramName="other">
<other>
<![CDATA[
<XDtClass:classTagValue tagName="jboss:declared-sql"
paramName="other"/>
]]>
</other>
</XDtClass:ifHasClassTag>
</declared-sql>
</query>
</XDtClass:ifHasClassTag>
</XDtClass:forAllClassTags>
</XDtEjbCmp:ifEntityIsCmp>
</XDtType:ifIsOfType>
</XDtConfig:ifConfigParamGreaterOrEquals>
<XDtClass:forAllClassTags tagName="jboss:finder-query">
<finder>
<name><XDtClass:classTagValue tagName="jboss:finder-query"
paramName="name"/></name>
<query><![CDATA[<XDtClass:classTagValue tagName="jboss:finder-query"
paramName="query"/>]]></query>
<XDtClass:ifHasClassTag tagName="jboss:finder-query" paramName="order">
<order><XDtClass:classTagValue tagName="jboss:finder-query"
paramName="order"/></order>
</XDtClass:ifHasClassTag>
<XDtClass:ifDoesntHaveClassTag tagName="jboss:finder-query"
paramName="order">
<order></order>
</XDtClass:ifDoesntHaveClassTag>
</finder>
</XDtClass:forAllClassTags>
</XDtMerge:merge>
</entity>
</XDtEjb:ifIsAConcreteEJBean>
</XDtEjbCmp:forAllCmpEntityBeans>
</enterprise-beans>
</jaws>