[jboss-jira] [JBoss JIRA] Commented: (JBAS-3850) One to many relationships throwing a Excetion

Alexey Loubyansky (JIRA) jira-events at jboss.com
Mon Nov 13 07:16:41 EST 2006


    [ http://jira.jboss.com/jira/browse/JBAS-3850?page=comments#action_12346767 ] 
            
Alexey Loubyansky commented on JBAS-3850:
-----------------------------------------

I guess the collection contains nulls. Is that possible?

> One to many relationships throwing a Excetion
> ---------------------------------------------
>
>                 Key: JBAS-3850
>                 URL: http://jira.jboss.com/jira/browse/JBAS-3850
>             Project: JBoss Application Server
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: CMP service
>    Affects Versions: JBossAS-4.0.5.GA
>         Environment: Windows XP, JBoss 4.0.5GA, JBoss 4.0.4GA and JBoss 3.2.8.SP1
> AMD Sempron 3000+
> 2.00 GHz
> 512 Mb RAM
>            Reporter: Santiago de la Nava Santos
>         Assigned To: Alexey Loubyansky
>
> Hi all,
> I'm having a similar problem with one to many relationship, CMP persistence and EJB 2 specification. I have tested the problem at versions 3.2.8.SP1, 4.0.4.GA and 4.0.5.GA, and they all throws the same Exception. I have an ExperimentEJB that is related to many ConfigurationEJB. When I try to add the ConfigurationEJB Collection to ExperimentEJB, the system throws this exception:
> 11:07:01,323 ERROR [LogInterceptor] RuntimeException in method: public abstract void softiam.services.ejbs.experiment.Ex
> periment.setConfiguration(java.util.Collection) throws java.rmi.RemoteException:
> java.lang.NullPointerException
>         at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge.getRelatedPrimaryKey(JDBCCMRFieldBridge.java:1862)
>         at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge.setInstanceValue(JDBCCMRFieldBridge.java:857)
>         at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge.setValue(JDBCCMRFieldBridge.java:723)
>         at org.jboss.ejb.plugins.cmp.bridge.EntityBridgeInvocationHandler$FieldSetInvoker.invoke(EntityBridgeInvocationH
> andler.java:170)
>         at org.jboss.ejb.plugins.cmp.bridge.EntityBridgeInvocationHandler.invoke(EntityBridgeInvocationHandler.java:105)
>         at org.jboss.proxy.compiler.Runtime.invoke(Runtime.java:76)
>         at softiam.services.ejbs.experiment.ExperimentEJB$Proxy.setConfiguration(<generated>)
>         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:585)
>         at org.jboss.invocation.Invocation.performCall(Invocation.java:359)
>         at org.jboss.ejb.EntityContainer$ContainerInterceptor.invoke(EntityContainer.java:1187)
>         at org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor.invoke(JDBCRelationInterceptor.java:87)
>         at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke(EntitySynchronizationInterceptor.java:284)
>         at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:158)
>         at org.jboss.ejb.plugins.EntityReentranceInterceptor.invoke(EntityReentranceInterceptor.java:126)
>         at org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke(EntityInstanceInterceptor.java:276)
>         at org.jboss.ejb.plugins.EntityLockInterceptor.invoke(EntityLockInterceptor.java:104)
>         at org.jboss.ejb.plugins.EntityCreationInterceptor.invoke(EntityCreationInterceptor.java:68)
>         at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:63)
>         at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:121)
>         at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:350)
>         at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:181)
>         at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:168)
>         at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:205)
>         at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:136)
>         at org.jboss.ejb.EntityContainer.internalInvoke(EntityContainer.java:527)
>         at org.jboss.ejb.Container.invoke(Container.java:954)
>         at sun.reflect.GeneratedMethodAccessor79.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
>         at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
>         at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
>         at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
>         at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
>         at org.jboss.invocation.local.LocalInvoker$MBeanServerAction.invoke(LocalInvoker.java:169)
>         at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:118)
>         at org.jboss.invocation.InvokerInterceptor.invokeLocal(InvokerInterceptor.java:209)
>         at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:195)
>         at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:61)
>         at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:70)
>         at org.jboss.proxy.ejb.EntityInterceptor.invoke(EntityInterceptor.java:112)
>         at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
>         at $Proxy57.setConfiguration(Unknown Source)
>         at softiam.services.ui.gwtui.server.SoftIAMServiceImpl.experimentConfigurationSet(SoftIAMServiceImpl.java:212)
>         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:585)
>         at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:260)
>         at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:147)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>         at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
>         at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
>         at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
>         at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
>         at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
>         at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java
> :664)
>         at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
>         at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
>         at java.lang.Thread.run(Thread.java:595)
> I have checked all the deployment descriptors and are ok:
> * ejb-jar.xml ------------------------------------------------------------------------------------------------------------------------------------------------------------------->
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
> <ejb-jar>
>   <display-name>SoftiamEJBs</display-name>
>   <enterprise-beans>
>     <session>
>       <display-name>SessionControlEJB</display-name>
>       <ejb-name>SessionControlEJB</ejb-name>
>       <home>softiam.services.ejbs.sessioncontrol.SessionControlHome</home>
>       <remote>softiam.services.ejbs.sessioncontrol.SessionControl</remote>
>       <ejb-class>softiam.services.ejbs.sessioncontrol.SessionControlEJB</ejb-class>
>       <session-type>Stateful</session-type>
>       <transaction-type>Container</transaction-type>
>     </session>
>     <entity>
>       <ejb-name>ExperimentEJB</ejb-name>
>       <home>softiam.services.ejbs.experiment.ExperimentHome</home>
>       <remote>softiam.services.ejbs.experiment.Experiment</remote>
>       <ejb-class>softiam.services.ejbs.experiment.ExperimentEJB</ejb-class>
>       <abstract-schema-name>experiments</abstract-schema-name>
>       <prim-key-class>java.lang.Long</prim-key-class>
>       <primkey-field>experimentId</primkey-field>
>       <reentrant>True</reentrant>
>       <cmp-field>
>          <field-name>experimentId</field-name>
>       </cmp-field>
>       <cmp-field>
>          <field-name>user</field-name>
>       </cmp-field>
>       <cmp-field>
>          <field-name>coupling</field-name>
>       </cmp-field>
>       <cmp-field>
>                <field-name>state</field-name>
>       </cmp-field>
>       <cmp-field>
>                <field-name>experimentIndex</field-name>
>       </cmp-field>
>       <cmp-field>
>                <field-name>name</field-name>
>       </cmp-field>
>       <cmp-field>
>                <field-name>description</field-name>
>       </cmp-field>
>       <cmp-field>
>                <field-name>creationTime</field-name>
>       </cmp-field>
>       <cmp-field>
>                <field-name>operationTime</field-name>
>       </cmp-field>
>       <query>
>         <query-method>
>           <method-name>findExperiments</method-name>
>           <method-params>
>             <method-param>java.lang.String</method-param>
>           </method-params>
>         </query-method>
>         <ejb-ql>
>           SELECT OBJECT(e)
>                  FROM experiments e
>                  WHERE e.user=?1
>         </ejb-ql>
>       </query>
>       <query>
>         <query-method>
>           <method-name>findExperiments</method-name>
>           <method-params>
>             <method-param>java.lang.String</method-param>
>             <method-param>java.lang.String</method-param>
>           </method-params>
>         </query-method>
>         <ejb-ql>
>           SELECT OBJECT(e)
>                  FROM experiments e
>                  WHERE e.user=?1 AND e.coupling=?2
>         </ejb-ql>
>       </query>
>       <query>
>         <query-method>
>           <method-name>findRunningExperiments</method-name>
>           <method-params></method-params>
>         </query-method>
>         <ejb-ql>
>           SELECT OBJECT(e)
>                  FROM experiments e
>                  WHERE e.state=1
>         </ejb-ql>
>       </query>
>       <query>
>         <query-method>
>           <method-name>findNotStartedExperiments</method-name>
>           <method-params></method-params>
>         </query-method>
>         <ejb-ql>
>           SELECT OBJECT(e)
>                  FROM experiments e
>                  WHERE e.state=0
>         </ejb-ql>
>       </query>
>       <persistence-type>Container</persistence-type>
>     </entity>
>     <entity>
>           <ejb-name>ConfigurationEJB</ejb-name>
>           <home>softiam.services.ejbs.configuration.ConfigurationHome</home>
>           <remote>softiam.services.ejbs.configuration.Configuration</remote>
>           <ejb-class>softiam.services.ejbs.configuration.ConfigurationEJB</ejb-class>
>           <abstract-schema-name>configurations</abstract-schema-name>
>           <prim-key-class>softiam.services.ejbs.configuration.ConfigurationPK</prim-key-class>
>           <reentrant>True</reentrant>
>           <cmp-field>
>              <field-name>experimentId</field-name>
>           </cmp-field>
>           <cmp-field>
>              <field-name>coupling</field-name>
>           </cmp-field>
>           <cmp-field>
>              <field-name>module</field-name>
>           </cmp-field>
>           <cmp-field>
>              <field-name>parameter</field-name>
>           </cmp-field>
>           <cmp-field>
>              <field-name>type</field-name>
>           </cmp-field>
>           <cmp-field>
>              <field-name>singleValue</field-name>
>           </cmp-field>
>           <cmp-field>
>              <field-name>rangeInitial</field-name>
>           </cmp-field>
>           <cmp-field>
>               <field-name>rangeEnd</field-name>
>           </cmp-field>
>           <cmp-field>
>               <field-name>rangeIncrement</field-name>
>           </cmp-field>
>           <cmp-field>
>               <field-name>rangeCombine</field-name>
>           </cmp-field>
>           <cmp-field>
>               <field-name>multipleValues</field-name>
>           </cmp-field>
>           <cmp-field>
>               <field-name>multipleCombine</field-name>
>           </cmp-field>
>           <persistence-type>Container</persistence-type>
>     </entity>
>   </enterprise-beans>
>   <relationships>
>     <ejb-relation>
>        <ejb-relation-name>experiment-configuration</ejb-relation-name>
>        <ejb-relationship-role>
>            <description>experiment</description>
>            <ejb-relationship-role-name>ExperimentRole</ejb-relationship-role-name>
>            <multiplicity>One</multiplicity>
>            <relationship-role-source>
>                 <description>experiment</description>
>                 <ejb-name>ExperimentEJB</ejb-name>
>            </relationship-role-source>
>            <cmr-field>
>                 <description>configuration</description>
>                 <cmr-field-name>configuration</cmr-field-name>
>                 <cmr-field-type>java.util.Collection</cmr-field-type>
>            </cmr-field>
>       </ejb-relationship-role>
>       <ejb-relationship-role>
>            <description>configuration</description>
>            <ejb-relationship-role-name>ConfigurationRole</ejb-relationship-role-name>
>            <multiplicity>Many</multiplicity>
>            <cascade-delete />
>            <relationship-role-source>
>                <description>configuration</description>
>                <ejb-name>ConfigurationEJB</ejb-name>
>            </relationship-role-source>
>       </ejb-relationship-role>
>    </ejb-relation>
> </relationships>
> </ejb-jar>
> jboss.xml --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
> <?xml version="1.0"?>
> <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN"
> "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
> <jboss>
>   <enterprise-beans>
>     <session>
>       <ejb-name>SessionControlEJB</ejb-name>
>       <jndi-name>SessionControlEJB</jndi-name>
>     </session>
>     <entity>
>           <ejb-name>ExperimentEJB</ejb-name>
>           <jndi-name>ExperimentEJB</jndi-name>
>     </entity>
>     <entity>
>               <ejb-name>ConfigurationEJB</ejb-name>
>               <jndi-name>ConfigurationEJB</jndi-name>
>     </entity>
>   </enterprise-beans>
>   <relationships>
>      <ejb-relation>
>           <ejb-relation-name>experiment-configuration</ejb-relation-name>
>           <foreign-key-mapping />
>           <ejb-relationship-role>
>               <ejb-relationship-role-name>ExperimentRole</ejb-relationship-role-name>
>               <key-fields />
>           </ejb-relationship-role>
>           <ejb-relationship-role>
>               <ejb-relationship-role-name>ConfigurationRole</ejb-relationship-role-name>
>               <key-fields />
>           </ejb-relationship-role>
>       </ejb-relation>
>   </relationships>
> </jboss>
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
> The code that add the data to the relationship is like this:
> * This is part of the function that generates the collection for the relationship:
> public static Vector generateConfiguration(long experimentId, ConfigurationHome configurationHome,CouplingInfo coupling) throws RemoteException, CreateException{
> 			...
> 			while(it2.hasNext())
> 			{
> 				ParameterInfo parameter=(ParameterInfo)it2.next();
> 				ConfigurationInfo configurationInfo=parameter.getConfigurationInfo();
> 				Configuration config=configurationHome.create(new Long(experimentId),coupling.getName(),module.getName(),parameter.getName());
> 				...
> 				configurations.add(config);
> 			}
> 			return configurations;
> }
> * This is part of the code that add the collection generated by the previous function:
>   			Experiment exp=(Experiment)session.getAttribute("currentExperiment");
>   			ConfigurationHome configurationHome=this.softIAMInit.getConfigurationHome();
>                         // This is the setter for the relationship
>   			exp.setConfiguration((Collection)(ConfigurationControl.generateConfiguration(experimentId,configurationHome,coupling)));

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list