Problem with CMR (1:1)
aragorn94 Feb 23, 2003 11:00 AMI have problem with CMR fields (no problem on deploy) : errors at runtime when calling setter or getter methods on a CMR field.
I tried to resolved the problem from other thread in forum but didn't find the trick (i think my deployment file are correct).
The relation is a 1:1 between a User en a UserInfo
The generated tables are :
user ( email, password, info)
userinfo ( infoid, dept, firstname, lastname, ...)
Here is the relation in ejb-jar.xml :
<ejb-relation >
<ejb-relation-name>UserHasUserInfo</ejb-relation-name>
<!-- bidirectional -->
<ejb-relationship-role >
<ejb-relationship-role-name>UserHasUserInfo</ejb-relationship-role-name>
One
<relationship-role-source >
<ejb-name>User</ejb-name>
</relationship-role-source>
<cmr-field >
<cmr-field-name>userInfo</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role >
<ejb-relationship-role-name>UserInfoPartOfUser</ejb-relationship-role-name>
One
<cascade-delete/>
<relationship-role-source >
<ejb-name>UserInfo</ejb-name>
</relationship-role-source>
</ejb-relationship-role>
</ejb-relation>
Here is the relation in jbooscmp-jdbc.xml :
<ejb-relation>
<ejb-relation-name>UserHasUserInfo</ejb-relation-name>
<foreign-key-mapping/>
<ejb-relationship-role>
<ejb-relationship-role-name>UserHasUserInfo</ejb-relationship-role-name>
<key-fields/>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>UserInfoPartOfUser</ejb-relationship-role-name>
<key-fields>
<key-field>
<field-name>infoId</field-name>
<column-name>info</column-name>
</key-field>
</key-fields>
</ejb-relationship-role>
</ejb-relation>
Source calling EJB :
User user = userHome.create(email, password);
UserInfo info = infoHome.create(firstName, middleName,
lastName, email, dept, workPhone, extention,
homePhone, isEmployee);
user.setUserInfo(info); // Here is the error
Beginning of trace :
17:05:26,259 ERROR [LogInterceptor] TransactionRolledbackException, causedBy:java.lang.ClassCastException
at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge.setInstanceValue(JDBCCMRFieldBridge.java:551)
at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge.setValue(JDBCCMRFieldBridge.java:483)
at org.jboss.ejb.plugins.cmp.bridge.EntityBridgeInvocationHandler.invoke(EntityBridgeInvocationHandler.java:126)
at org.jboss.proxy.compiler.Runtime.invoke(Runtime.java:59)
at fr.free.banks.UserCMP$Proxy.setUserInfo()
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.jboss.ejb.EntityContainer$ContainerInterceptor.invoke(EntityContainer.java:1194)
at org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor.invoke(JDBCRelationInterceptor.java:95)
at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke(EntitySynchronizationInterceptor.java:297)
at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:186)
at org.jboss.ejb.plugins.EntityReentranceInterceptor.invoke(EntityReentranceInterceptor.java:90)
at org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke(EntityInstanceInterceptor.java:163)
at org.jboss.ejb.plugins.EntityLockInterceptor.invoke(EntityLockInterceptor.java:107)
at org.jboss.ejb.plugins.EntityCreationInterceptor.invoke(EntityCreationInterceptor.java:69)
at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:107)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:178)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:60)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:130)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:204)
at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:493)
at org.jboss.ejb.Container.invoke(Container.java:712)
at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:1058)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:98)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:102)
at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:77)
at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:80)
at org.jboss.proxy.ejb.EntityInterceptor.invoke(EntityInterceptor.java:116)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:76)
at $Proxy81.setUserInfo(Unknown Source)
at fr.free.banks.UserManagementBean.addUser(UserManagementBean.java:94)