One to Many relationship problem
carole.d Dec 14, 2001 4:57 AMHi All,
I'm trying to implement a One to Many relationship between two CMP 2.0 entities the devise bean and gprd bean ,I'm using JBoss3.0.0 alpha version .
The jar file containing the beans is deployed correctly but when I try to access the CMR field deviseCMR using gprd.getDeviseCMR() I got the following
error:
/***************** error on the JBoss console*****************************************/
java.rmi.ServerException: null
Embedded Exception
null; nested exception is:
javax.ejb.EJBException: null
Embedded Exception
null
javax.ejb.EJBException: null
Embedded Exception
null
at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge.getValue(JDBCCMRFieldBridge.java:404)
at org.jboss.ejb.plugins.cmp.bridge.EntityBridgeInvocationHandler.invoke(EntityBridgeInvocationHandler.java:111)
at org.jboss.proxy.ProxyCompiler$Runtime.invoke(ProxyCompiler.java:89)
at demo.ejbent.gprd.GprdBean$Proxy.getDeviseCMR(Unknown Source)
at java.lang.reflect.Method.invoke(Native Method)
at org.jboss.ejb.EntityContainer$ContainerInterceptor.invoke(EntityContainer.java:1002)
at org.jboss.ejb.plugins.cmp.jdbc.JDBCReadAheadInterceptor.invoke(JDBCReadAheadInterceptor.java:100)
at org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor.invoke(JDBCRelationInterceptor.java:134)
at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke(EntitySynchronizationInterceptor.java:308)
at org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke(EntityInstanceInterceptor.java:201)
at org.jboss.ejb.plugins.EntityLockInterceptor.invoke(EntityLockInterceptor.java:132)
at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:98)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:156)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:65)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:131)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:166)
at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:447)
at org.jboss.ejb.Container.invoke(Container.java:528)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1555)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1523)
at org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke(JRMPContainerInvoker.java:411)
at java.lang.reflect.Method.invoke(Native Method)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:241)
at sun.rmi.transport.Transport$1.run(Transport.java:142)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:139)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:443)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:643)
at java.lang.Thread.run(Thread.java:484)
java.lang.NullPointerException
at org.jboss.ejb.plugins.local.BaseLocalContainerInvoker.getEntityEJBLocalObject(BaseLocalContainerInvoker.java:226)
at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge.getValue(JDBCCMRFieldBridge.java:399)
at org.jboss.ejb.plugins.cmp.bridge.EntityBridgeInvocationHandler.invoke(EntityBridgeInvocationHandler.java:111)
at org.jboss.proxy.ProxyCompiler$Runtime.invoke(ProxyCompiler.java:89)
at demo.ejbent.gprd.GprdBean$Proxy.getDeviseCMR(Unknown Source)
at java.lang.reflect.Method.invoke(Native Method)
at org.jboss.ejb.EntityContainer$ContainerInterceptor.invoke(EntityContainer.java:1002)
at org.jboss.ejb.plugins.cmp.jdbc.JDBCReadAheadInterceptor.invoke(JDBCReadAheadInterceptor.java:100)
at org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor.invoke(JDBCRelationInterceptor.java:134)
at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke(EntitySynchronizationInterceptor.java:308)
at org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke(EntityInstanceInterceptor.java:201)
at org.jboss.ejb.plugins.EntityLockInterceptor.invoke(EntityLockInterceptor.java:132)
at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:98)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:156)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:65)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:131)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:166)
at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:447)
at org.jboss.ejb.Container.invoke(Container.java:528)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1555)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1523)
at org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke(JRMPContainerInvoker.java:411)
at java.lang.reflect.Method.invoke(Native Method)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:241)
at sun.rmi.transport.Transport$1.run(Transport.java:142)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:139)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:443)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:643)
at java.lang.Thread.run(Thread.java:484)
/************************************************************************/
Here is the implementation :
the ejb-jar .xml is :
/*******************************************************************/
<ejb-jar>
<enterprise-beans>
The Demo EJB
<ejb-name>DeviseEJB</ejb-name>
demo.ejbent.devise.DeviseHome
demo.ejbent.devise.Devise
<ejb-class>demo.ejbent.devise.DeviseBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
False
<cmp-version>2.x</cmp-version>
<abstract-schema-name>DeviseBean</abstract-schema-name>
<cmp-field>
<field-name>devise_Id</field-name>
</cmp-field>
<cmp-field>
<field-name>devi_Lib</field-name>
</cmp-field>
<cmp-field>
<field-name>devi_Taux</field-name>
</cmp-field>
<cmp-field>
<field-name>devi_Abreviation</field-name>
</cmp-field>
<cmp-field>
<field-name>devi_Symbole</field-name>
</cmp-field>
<cmp-field>
<field-name>devi_DateModif</field-name>
</cmp-field>
<primkey-field>devise_Id</primkey-field>
Find with id greater
<query-method>
<method-name>findByDeviTaux</method-name>
<method-params>
<method-param>java.lang.Double</method-param>
</method-params>
</query-method>
<ejb-ql>
<![CDATA[WHERE devi_Taux = ?1]]>
</ejb-ql>
The Gprd EJB
<ejb-name>GprdEJB</ejb-name>
demo.ejbent.gprd.GprdHome
demo.ejbent.gprd.Gprd
<ejb-class>demo.ejbent.gprd.GprdBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
False
<cmp-version>2.x</cmp-version>
<abstract-schema-name>GprdBean</abstract-schema-name>
<cmp-field><field-name>gprdId</field-name></cmp-field>
<cmp-field><field-name>raysId</field-name></cmp-field>
<cmp-field><field-name>fourId</field-name></cmp-field>
<cmp-field><field-name>gprdLib</field-name></cmp-field>
<cmp-field><field-name>devId</field-name></cmp-field>
<cmp-field><field-name>respId</field-name></cmp-field>
<primkey-field>gprdId</primkey-field>
</enterprise-beans>
<ejb-relation>
<ejb-relation-name>DeviseGprd</ejb-relation-name>
<ejb-relationship-role>
<ejb-relationship-role-name>Devise-has-gprds</ejb-relationship-role-name>
One
<relationship-role-source>
<ejb-name>DeviseEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>gprds</cmr-field-name>
<cmr-field-type>java.util.Collection</cmr-field-type>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>Gprd-belongto-Devise</ejb-relationship-role-name>
Many
<relationship-role-source>
<ejb-name>GprdEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>deviseCMR</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
</ejb-relation>
<assembly-descriptor>
<container-transaction>
<ejb-name>DeviseEJB</ejb-name>
<method-name>*</method-name>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<container-transaction>
<ejb-name>GprdEJB</ejb-name>
<method-name>*</method-name>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
/******************************************************************/
the jbosscmp-jdbc.xml is the following
/******************************************************************/
<?xml version="1.0" encoding="UTF-8"?>
<jbosscmp-jdbc>
java:/DefaultDS
false
<create-table>true</create-table>
<remove-table>true</remove-table>
<tuned-updates>true</tuned-updates>
<read-only>false</read-only>
<time-out>300</time-out>
<select-for-update>false</select-for-update>
<pk-constraint>true</pk-constraint>
<relation-mapping-style>foreign-key</relation-mapping-style>
<enterprise-beans>
<ejb-name>DeviseEJB</ejb-name>
<table-name>Devise</table-name>
<create-table>false</create-table>
<cmp-field>
<field-name>devise_Id</field-name>
<column-name>devi_Id</column-name>
</cmp-field>
<cmp-field>
<field-name>devi_Lib</field-name>
<column-name>devi_Lib</column-name>
</cmp-field>
<cmp-field>
<field-name>devi_Taux</field-name>
<column-name>devi_Taux</column-name>
</cmp-field>
<cmp-field>
<field-name>devi_Abreviation</field-name>
<column-name>devi_Abreviation</column-name>
</cmp-field>
<cmp-field>
<field-name>devi_Symbole</field-name>
<column-name>devi_Symbole</column-name>
</cmp-field>
<cmp-field>
<field-name>devi_DateModif</field-name>
<column-name>devi_DateModif</column-name>
</cmp-field>
Find all orders with the specified status
<query-method>
<method-name>findByDeviTaux</method-name>
<method-params>
<method-param>java.lang.Double</method-param>
</method-params>
</query-method>
<declared-sql>
devi_Taux={0}
devi_Id ASC
</declared-sql>
<ejb-name>GprdEJB</ejb-name>
<table-name>Gprd</table-name>
<create-table>false</create-table>
<cmp-field>
<field-name>gprdId</field-name>
<column-name>gprd_Id</column-name>
</cmp-field>
<cmp-field>
<field-name>raysId</field-name>
<column-name>rays_Id</column-name>
</cmp-field>
<cmp-field>
<field-name>fourId</field-name>
<column-name>four_Id</column-name>
</cmp-field>
<cmp-field>
<field-name>gprdLib</field-name>
<column-name>gprd_Lib</column-name>
</cmp-field>
<cmp-field>
<field-name>devId</field-name>
<column-name>devi_Id</column-name>
</cmp-field>
<cmp-field>
<field-name>respId</field-name>
<column-name>resp_Id</column-name>
</cmp-field>
</enterprise-beans>
<ejb-relation>
<ejb-relation-name>DeviseGprd</ejb-relation-name>
<foreign-key-mapping>
<ejb-relationship-role>
<ejb-relationship-role-name>Devise-has-gprds</ejb-relationship-role-name>
<foreign-key-fields/>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>Gprd-belongto-Devise</ejb-relationship-role-name>
<foreign-key-fields>
<foreign-key-field>
<field-name>devise_Id</field-name>
<column-name>devi_Id</column-name>
</foreign-key-field>
</foreign-key-fields>
</ejb-relationship-role>
</foreign-key-mapping>
</ejb-relation>
</jbosscmp-jdbc>
/***********************************************************************/
here is the remote interface of the Gprd bean :
/***********************************************************************/
package demo.ejbent.gprd;
import java.rmi.*;
import javax.ejb.*;
import java.math.*;
import java.sql.*;
import java.util.*;
import demo.ejbent.devise.*;
import demo.ejbent.resp.*;
public interface Gprd extends EJBObject
{
public Integer getGprdId() throws RemoteException;
public BigDecimal getRaysId() throws RemoteException;
public Integer getFourId() throws RemoteException;
public String getGprdLib() throws RemoteException;
public Integer getDevId() throws RemoteException;
//CMRs field
public Devise getDeviseCMR()throws RemoteException;
public void setDeviseCMR(Devise d)throws RemoteException;
public Resp getResp()throws RemoteException;
public void setResp(Resp r)throws RemoteException;
}
/***************************************************************************/
Is there anything missing in this code ?
Any suggestion is welcomed ....
thanx !