CMR field "is not a cmr field". What did I do wrong?
caidence Aug 11, 2005 1:09 PMI have this really really simple and small project with some CMR relationships, but when I try to create a simple EJB-QL query, JBoss says that my CMR field "is not a cmr field". I don't know why, I did everything my books told me. I have my code below, and this is the error it gives me:
org.jboss.deployment.DeploymentException: Error compiling EJB-QL statement 'SELECT OBJECT(osp) FROM OptimizationStaticParameter AS osp WHERE osp.optimization.name = ?1 AND osp.optimization.timestamp = ?2 AND osp.parameterName = ?3'; - nested throwable: (org.jboss.ejb.plugins.cmp.ejbql.UnknownPathException: In path field is not a cmr field: at line 2, column 71. Encountered: "optimization" after: "osp.")
The CMR relationship is a Unidirectional one-to-many relationship. OptimizationBean contains between 0 and N OptimizationStaticParameterBeans. ("An Optimization contains Static-Parameters")
Everything is REALLY simple, and it was built from the bottom up. It deploys OK if the EJB-QL queries are removed.
This seems very simple to me, and everything I have read says I am doing this right. Can someone glance and see what I did wrong? I desperately need this to continue!
Thanks to anyone!!
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/ejb-jar_2_1.xsd" version="2.1"> <enterprise-beans> <entity> <ejb-name>OptimizationEJB</ejb-name> <local-home>com.flytrading.trading.ejb.OptimizationHomeLocal</local-home> <local>com.flytrading.trading.ejb.OptimizationLocal</local> <ejb-class>com.flytrading.trading.ejb.OptimizationBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.Object</prim-key-class> <reentrant>False</reentrant> <abstract-schema-name>Optimization</abstract-schema-name> <cmp-field><field-name>name</field-name></cmp-field> <cmp-field><field-name>timestamp</field-name></cmp-field> <cmp-field><field-name>comment</field-name></cmp-field> <security-identity><use-caller-identity/></security-identity> </entity> <entity> <ejb-name>OptimizationStaticParameterEJB</ejb-name> <local-home>com.flytrading.trading.ejb.OptimizationStaticParameterHomeLocal</local-home> <local>com.flytrading.trading.ejb.OptimizationStaticParameterLocal</local> <ejb-class>com.flytrading.trading.ejb.OptimizationStaticParameterBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.Object</prim-key-class> <reentrant>False</reentrant> <abstract-schema-name>OptimizationStaticParameter</abstract-schema-name> <cmp-field><field-name>parameterName</field-name></cmp-field> <cmp-field><field-name>value</field-name></cmp-field> <cmp-field><field-name>optimization</field-name></cmp-field> <security-identity><use-caller-identity/></security-identity> <query> <query-method> <method-name>ejbSelectUnique</method-name> <method-params> <method-param>java.lang.String</method-param> <method-param>java.util.Date</method-param> <method-param>java.lang.String</method-param> </method-params> </query-method> <ejb-ql> SELECT OBJECT(osp) FROM OptimizationStaticParameter AS osp WHERE osp.optimization.name = ?1 AND osp.optimization.timestamp = ?2 AND osp.parameterName = ?3 </ejb-ql> </query> </entity> </enterprise-beans> <relationships> <ejb-relation> <ejb-relation-name>Optimization-OptStaticParam</ejb-relation-name> <ejb-relationship-role> <ejb-relationship-role-name> Optimization-may-have-StaticParams </ejb-relationship-role-name> <multiplicity>One</multiplicity> <relationship-role-source> <ejb-name>OptimizationEJB</ejb-name> </relationship-role-source> </ejb-relationship-role> <ejb-relationship-role> <ejb-relationship-role-name> OptStaticParam-belongs-to-Optimization </ejb-relationship-role-name> <multiplicity>Many</multiplicity> <relationship-role-source> <ejb-name>OptimizationStaticParameterEJB</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>optimization</cmr-field-name> </cmr-field> </ejb-relationship-role> </ejb-relation> </relationships> <assembly-descriptor> <security-role> <role-name>everyone</role-name> <description> This role represents everyone who is allowed full access to the system. </description> </security-role> <method-permission> <role-name>everyone</role-name> <method> <ejb-name>OptimizationEJB</ejb-name> <method-name>*</method-name> </method> <method> <ejb-name>OptimizationStaticParameterEJB</ejb-name> <method-name>*</method-name> </method> </method-permission> <container-transaction> <method> <ejb-name>OptimizationEJB</ejb-name> <method-name>*</method-name> </method> <method> <ejb-name>OptimizationStaticParameterEJB</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>
jboss.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd"> <jboss> <enterprise-beans> <entity> <ejb-name>OptimizationEJB</ejb-name> <jndi-name>OptimizationHomeRemote</jndi-name> <local-jndi-name>OptimizationHomeLocal</local-jndi-name> </entity> <entity> <ejb-name>OptimizationStaticParameterEJB</ejb-name> <jndi-name>OptimizationStaticParameterHomeRemote</jndi-name> <local-jndi-name>OptimizationStaticParameterHomeLocal</local-jndi-name> </entity> </enterprise-beans> <resource-managers> </resource-managers> </jboss>
jbosscmp-jdbc.xml:
<jbosscmp-jdbc> <defaults> <unknown-pk> <unknown-pk-class>java.lang.Integer</unknown-pk-class> <jdbc-type>INTEGER</jdbc-type> <sql-type>SERIAL</sql-type> <auto-increment/> </unknown-pk> </defaults> <entity> <ejb-name>OptimizationEJB</ejb-name> <cmp-field> <field-name>id</field-name> <column-name>id</column-name> <auto-increment/> </cmp-field> <entity-command name="postgresql-fetch-seq"/> </entity> <entity> <ejb-name>OptimizationStaticParameterEJB</ejb-name> <cmp-field> <field-name>id</field-name> <column-name>id</column-name> <auto-increment/> </cmp-field> <entity-command name="postgresql-fetch-seq"/> </entity> </jbosscmp-jdbc>
A reduced version of OptimizationStaticParameterBean.java:
abstract public class OptimizationStaticParameterBean implements EntityBean { /* ... EJB Standard Callback ... EJB Create / PostCreate Methods ... */ /* * CMP Persistence Fields * --------------------------------------------------------------- */ abstract public String getParameterName(); abstract public void setParameterName(String name); abstract public String getValue(); abstract public void setValue(String value); /* * CM-Relationship Fields * ---------------------------------------------------------------- */ abstract public OptimizationLocal getOptimization(); abstract public void setOptimization(OptimizationLocal opt); /* * Select methods * ---------------------------------------------------------------- */ abstract public OptimizationStaticParameterLocal ejbSelectUnique(String optName, java.util.Date optTimestamp, String paramName) throws FinderException; }