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>