jboss 4.0.2 ejb 2.1 ejb-ql order by problem
dankes Sep 8, 2005 7:13 AMHi,
I try to order the result of the finder by id. But it won't order; it is always the same ordering, whatever I do or specify in the ejb-ql. First I used JBoss 3.2 and tried to order the result of the finder by overriding the ejb-ql by jboss-ql. It did not work for me and after I've read somewhere that ejb 2.1 supported "order by" I changed to JBoss 4.0.2. But the problem remains. I've searched the forum and the internet for a possible solution, but with no luck so far. Can anyone help me with this?
Specs:
- JBoss 4.0.2
- JDK1.5.0_01
- XDoclet 1.2.3
- Eclipse
Libs I use from jboss/client:
- axis-ws4ee.jar
- jbossall-client.jar
- jboss-j2ee.jar
- jboss-jaxrpc.jar
- jboss-saaj.jar
- jnp-client.jar
- log4j.jar
EntityBean:
/**
* Entitybean for an agent
*
* @ejb.bean
* cmp-version = "2.x"
* jndi-name = ".../Agent"
* name = "Agent"
* primkey-field = "id"
* type = "CMP"
* view-type = "local"
*
* @ejb.finder
* signature = "java.util.Collection findAll()"
* query = "select object(a) from Agent as a"
*
* @ejb.finder
* signature = "java.util.Collection findAllLike(java.lang.String lastname)"
* query = "select object(a) from Agent as a where a.lastname like ?1 order by a.id asc"
*
OR
* @ejb.finder
* signature = "java.util.Collection findAllLike(java.lang.String lastname)"
* query = "Overridden by jbosscmp-jdbc.xml"
*
* @jboss.query
* signature = "java.util.Collection findAllLike(java.lang.String lastname)"
* query = "select object(a) from Agent as a where a.lastname like ?1 order by a.id asc"
*
*/
public abstract class AgentBean implements EntityBean {
/**
* ejbCreate method with valueobject
*
* @param agent AgentData
* @return Returns null
* @throws CreateException
*
* @ejb.create-method
*/
public Object ejbCreate(AgentData agent) throws CreateException {
try {
setId(Sequencer.getInstance("Agent").next());
} catch (SQLException e) {
throw new CreateException("Failed to create primary-key");
} catch (NamingException e) {
throw new CreateException("Failed to create primary-key");
}
return null;
}
/**
* Empty ejbPostCreate method
*
* @param agent AgentData
* @throws CreateException
*/
public void ejbPostCreate(AgentData agent) throws CreateException {
}
/**
* Accessor for the primary-key (id)
*
* @return Returns the primary-key (id)
*
* @ejb.interface-method
* @ejb.persistence
* @ejb.pk-field
*/
public abstract Integer getId();
/**
* Mutator for the primary-key (id)
*
* @param id Integer
*/
public abstract void setId(Integer id);
/**
* Accessor for the lastname
*
* @return Returns the lastname
*
* @ejb.interface-method
* @ejb.persistence
* jdbc-type = "VARCHAR"
* sql-type = "VARCHAR(255)"
*/
public abstract String getLastname();
/**
* Mutator for the lastname
*
* @param lastname The lastname
*
* @ejb.interface-method
*/
public abstract void setLastname(String lastname);
}
ejb-jar.xml:
<?xml version="1.0" encoding="UTF-8"?> <ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" version="2.1"> <description>[CDATA[No Description.]]</description> <display-name>Generated by XDoclet</display-name> <enterprise-beans> ... <session > <description>[CDATA[]]</description> <ejb-name>AgentManager</ejb-name> <local-home>com.aristomusic.cougar.interfaces.AgentManagerLocalHome</local-home> <local>com.aristomusic.cougar.interfaces.AgentManagerLocal</local> <ejb-class>com.aristomusic.cougar.session.manager.AgentManagerBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> ... <entity > <description>[CDATA[]]</description> <ejb-name>Agent</ejb-name> <local-home>interfaces.AgentLocalHome</local-home> <local>interfaces.AgentLocal</local> <ejb-class>.interfaces.AgentCMP</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.Integer</prim-key-class> <reentrant>false</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>Agent</abstract-schema-name> <cmp-field > <description>[CDATA[Accessor for the primary-key (id)]]</description> <field-name>id</field-name> </cmp-field> <cmp-field > <description>[CDATA[Accessor for the lastname]]</description> <field-name>lastname</field-name> </cmp-field> <primkey-field>id</primkey-field> <query> <query-method> <method-name>findAll</method-name> <method-params> </method-params> </query-method> <ejb-ql>[CDATA[select object(a) from Agent as a]]</ejb-ql> </query> <query> <query-method> <method-name>findAllLike</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </query-method> <ejb-ql>[CDATA[select object(a) from Agent as a where a.lastname like ?1 order by a.id asc]]</ejb-ql> </query> OR <query> <query-method> <method-name>findAllLike</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </query-method> <ejb-ql>[CDATA[Overridden by jbosscmp-jdbc.xml]]</ejb-ql> </query> <!-- Write a file named ejb-finders-AgentBean.xml if you want to define extra finders. --> </entity> ...
build.xml:
<property file="${basedir}/ant-global.properties" />
<property file="${basedir}/build.properties" />
<path id="xdoclet.classpath">
<pathelement location="${basedir}/bin" />
<pathelement location="${basedir}/lib/jboss-j2ee.jar" />
<fileset dir="${xdoclet.path}/lib/">
<include name="*.jar" />
</fileset>
</path>
<target name="XDoclet">
<taskdef classpathref="xdoclet.classpath" classname="xdoclet.modules.ejb.EjbDocletTask" name="ejbdoclet" />
<delete dir="${build.bindir}/*" />
<delete>
<fileset dir="${build.sourcedir}/META-INF">
<include name="ejb-jar.xml" />
<include name="jboss.xml" />
<include name="jbosscmp-jdbc.xml" />
</fileset>
</delete>
<delete>
<fileset dir="${build.sourcedir}/com/aristomusic/cougar/interfaces">
<include name="*.java" />
</fileset>
</delete>
<ejbdoclet ejbSpec="2.1" destDir="${build.sourcedir}">
<dataobject destDir="${build.sourcedir}" />
<fileset dir="src" includes="**/*Bean.java" />
<deploymentdescriptor destDir="src/META-INF" />
<jboss Version="4.0" datasource="java:/DefaultDS" datasourceMapping="mySQL" destDir="src/META-INF" />
<packagesubstitution packages="entity,session.manager,session.process" substituteWith="interfaces" />
<utilobject localproxies="true" kind="physical" />
<homeinterface />
<localhomeinterface />
<localinterface />
<remoteinterface />
<entitycmp destDir="src">
<PackageSubstitution packages="entity" substituteWith="interfaces" />
</entitycmp>
</ejbdoclet>
</target>
<target name="Compile" depends="XDoclet">
<mkdir dir="${basedir}/${build.bindir}" />
<javac srcdir="${build.sourcedir}" destdir="${build.bindir}" debug="on">
<classpath>
<fileset dir="${basedir}">
<include name="*.jar" />
<include name="lib//*.jar" />
</fileset>
</classpath>
</javac>
</target>