Hello,

after some more hours of debugging here some new info about the problem:

Seems that only finder methods are affected. The ejbQL

select distinct object(r) from Rasse as r order by r.rassenName asc

becomes

SELECT R.name, T0.name FROM voelkertab R LEFT JOIN parteientab T0 ON
(T0.name = R.refseite) WHERE R.name = ?

I tried this SQL statement with my MySQL server and it works ;) so no
problem from the database.

XD5 generates the following openejb-jar stuff:

...
<entity>
        <ejb-name>Partei</ejb-name>
        <local-jndi-name>ejb/wowdb/Partei</local-jndi-name>
        <table-name>parteientab</table-name>
        <cmp-field-mapping>
                <cmp-field-name>parteiName</cmp-field-name>
                <table-column>name</table-column>
        </cmp-field-mapping>
        <primkey-field>parteiName</primkey-field>
        <prefetch-group>
                <group>
                        <group-name>Default</group-name>
                        <cmp-field-name>parteiName</cmp-field-name>
                </group>
                <group>
                        <group-name>All</group-name>
                        <cmp-field-name>parteiName</cmp-field-name>
                </group>
                <entity-group-mapping>
                        <group-name>All</group-name>
                </entity-group-mapping>
        </prefetch-group>
        <query>
                <query-method>
                        <method-name>findAll</method-name>
                        <method-params />
                </query-method>
                <group-name>All</group-name>
        </query>
</entity>
<entity>
        <ejb-name>Rasse</ejb-name>
        <local-jndi-name>ejb/wowdb/Rasse</local-jndi-name>
        <table-name>voelkertab</table-name>
        <cmp-field-mapping>
                <cmp-field-name>rassenName</cmp-field-name>
                <table-column>name</table-column>
        </cmp-field-mapping>
        <primkey-field>rassenName</primkey-field>
        <prefetch-group>
                <group>
                        <group-name>Default</group-name>
                        <cmp-field-name>rassenName</cmp-field-name>
                </group>
                <group>
                        <group-name>All</group-name>
                        <cmp-field-name>rassenName</cmp-field-name>
                        <cmr-field>                                             
                                <cmr-field-name>partei</cmr-field-name>
                                <group-name>All</group-name>
                        </cmr-field>
                </group>
                <entity-group-mapping>
                        <group-name>All</group-name>
                </entity-group-mapping>
        </prefetch-group>
        <query>
                <query-method>
                        <method-name>findAll</method-name>
                        <method-params />
                </query-method>
                <group-name>All</group-name>
        </query>
</entity>
...

This will end in:

[SQLQueryBuilder] CMP [Entity logical name=[Rasse]; physical
name=[Rasse]] - entity load command compiled to [PrefetchQueryCommand
[JDBCQueryCommand sql=[SELECT R.name, T0.name FROM voelkertab R LEFT
JOIN parteientab T0 ON (T0.name = R.refseite) WHERE R.name = ?]]]
Deployer operation failed: Unable to initialize EJB named 'Rasse': null
org.apache.geronimo.common.DeploymentException: Unable to initialize EJB
named 'Rasse': null
        at
org.openejb.deployment.CMPEntityBuilder.createBean(CMPEntityBuilder.java:208)
        at
org.openejb.deployment.CMPEntityBuilder.buildBeans(CMPEntityBuilder.java:120)
        at
org.openejb.deployment.OpenEJBModuleBuilder.addGBeans(OpenEJBModuleBuilder.java:525)
        at
org.openejb.deployment.OpenEJBModuleBuilder$$FastClassByCGLIB$$11bd7b20.invoke(<generated>)
        at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
        at
org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38)
        at
org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:122)
        at
org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:817)
        at
org.apache.geronimo.gbean.runtime.RawInvoker.invoke(RawInvoker.java:57)

I'll now try to exchange the group-name. Maybe that makes Geronimo load
my ear :/


D. Strauss schrieb:
> Hello, ejbQL profs ^^
> 
> seems that I missunderstood my ejbQL knowledge. I setup some ejbs and
> wanted to create some finder methods (ejb-jar.xml). Unfortunately,
> Geronimo (or OpenEJB?) ends in an exception that I can't figure out what
> it wants to tell me.
> 
> 
> 
> Caused by: org.tranql.ql.QueryException: Finder [Finder
> method=[findAll]; EJB-QL=[select distinct object(r) from Rasse as r, in
> (r.partei) as p order by p.parteiName asc,r.rassenName asc]]
>         at
> org.tranql.sql.EJBQLToPhysicalQuery.buildFinder(EJBQLToPhysicalQuery.java:143)
>         at
> org.tranql.sql.EJBQLToPhysicalQuery.buildFinders(EJBQLToPhysicalQuery.java:90)
>         ... 36 more
> Caused by: org.tranql.ql.QueryException: Parser, lexer or Tree-walker
> exception
>         at
> org.tranql.sql.EJBQLToPhysicalQuery.getEJBQLQuery(EJBQLToPhysicalQuery.java:235)
>         at
> org.tranql.sql.EJBQLToPhysicalQuery.buildFinder(EJBQLToPhysicalQuery.java:130)
>         ... 37 more
> Caused by: org.tranql.ql.MalformedNodeException: Path used must end with
> a multi valued CMR field
>         at org.tranql.ql.DerivedTable.getEntityType(DerivedTable.java:61)
>         at org.tranql.ql.DerivedTable.<init>(DerivedTable.java:36)
>         at
> org.tranql.ejb.parser.EJBQL21Compiler.collection_member_declaration(EJBQL21Compiler.java:473)
>         at
> org.tranql.ejb.parser.EJBQL21Compiler.from_clause(EJBQL21Compiler.java:201)
>         at
> org.tranql.ejb.parser.EJBQL21Compiler.ejbql(EJBQL21Compiler.java:115)
>         at
> org.tranql.sql.EJBQLToPhysicalQuery.getEJBQLQuery(EJBQLToPhysicalQuery.java:233)
>         ... 38 more
> 
> 
> So, basically, the ejbQL
>       select distinct object(r) from Rasse as r, in (r.partei) as p order by
> p.parteiName asc,r.rassenName asc
> is wrong. However, the ejbQL
>       select distinct object(r) from Rasse as r order by r.rassenName asc
> works.
> 
> Does anyone know what "Path used must end with a multi valued CMR field"
> mean?
> 
> Or is this somehow related to the prefetch system by Geronimo?
> 
> Best regards
> 
> Dirk
> 
> 

Reply via email to