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>

Reply via email to