[jboss-jira] [JBoss JIRA] Commented: (JBREM-962) Remote classloading does not work with Isolated EARs

Ron Sigal (JIRA) jira-events at lists.jboss.org
Fri Jun 20 01:16:37 EDT 2008


    [ http://jira.jboss.com/jira/browse/JBREM-962?page=comments#action_12418069 ] 
            
Ron Sigal commented on JBREM-962:
---------------------------------

org.jboss.remoting.marshal.MarshallerLoaderHandler, which is the ServerInvocationHandler for the classloader Connector, now is able to search org.jboss.mx.loading.HeirarchicalLoaderRepository3s, which allows it to find scoped classes.  In order to make it possible to inform the MarshallerLoaderHandler about the HeirarchicalLoaderRepository3s to be search, a <repositories> section has been added to the MBean Connector definition.  This section should be added to the Connector for which the "loaderport" parameter is defined.  A client connected to such a Connector will be able to connect to the associated  classloader Connector and download classes from any of the repositories listed in the <repository> section.

For example, to allow an EJB3 to get scoped classes in an EAR where the jboss-app.xml is

   <!DOCTYPE jboss-app PUBLIC "-//JBoss//DTD J2EE Application 1.4//EN" "http://www.jboss.org/j2ee/dtd/jboss-app_4_0.dtd"> 
   <jboss-app> 
       <loader-repository>jboss.remoting:loader=titan.ear</loader-repository>
   </jboss-app>

the EJB3 Connector should look something like the following:

   <mbean code="org.jboss.remoting.transport.Connector"
          name="jboss.remoting:type=Connector,name=DefaultEjb3Connector,handler=ejb3">
      <depends>jboss.aop:service=AspectDeployer</depends>
      <attribute name="Configuration">
         <config>
            <invoker transport="socket">
               <attribute name="serverBindAddress">${jboss.bind.address}</attribute>
               <attribute name="serverBindPort">3873</attribute>
               <attribute name="loaderport" isParam="true">3883</attribute>
            </invoker>
            
            <repositories>
               <repository>jboss.remoting:loader=titan.ear</repository>
            </repositories>
            
            <handlers>
               <handler subsystem="AOP">org.jboss.aspects.remoting.AOPRemotingInvocationHandler</handler>
            </handlers>
         </config>
      </attribute>
   </mbean>

That is, the classloader Connector is informed about the HeirarchicalLoaderRepository3 with ObjectName "boss.remoting:loader=titan.ear".

> Remote classloading does not work with Isolated EARs
> ----------------------------------------------------
>
>                 Key: JBREM-962
>                 URL: http://jira.jboss.com/jira/browse/JBREM-962
>             Project: JBoss Remoting
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 2.2.2.SP4
>         Environment: EAP4.3
>            Reporter: Magesh Kumar B
>         Assigned To: Ron Sigal
>             Fix For: 2.2.2.SP8
>
>
> When user has enabled isolation in a ear file containing an EJB3 jar file, the implementation classes are not serialized and a ClassNotFoundException is thrown. I have attached a sample called HelloEJB3.zip that contains all files needed for deploying this test case. Using EAP4.3 do "ant deploy" and then do "ant test".
> When the jboss-app.xml is removed the application client works fine. This fails in the isolated mode with the below exception:
> Caused by: java.lang.ClassNotFoundException: org.jboss.ejb3.user.UserImpl
>     at org.jboss.remoting.serialization.ClassLoaderUtility.loadClass(ClassLoaderUtility.java:82)
>     at org.jboss.remoting.loading.RemotingClassLoader.loadClass(RemotingClassLoader.java:76)
>     at java.lang.ClassLoader.loadClassInternal(Unknown Source)
>     at java.lang.Class.forName0(Native Method)
>     at java.lang.Class.forName(Unknown Source)
>     at org.jboss.remoting.loading.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:174)
>     at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
>     at java.io.ObjectInputStream.readClassDesc(Unknown Source)
>     at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
>     at java.io.ObjectInputStream.readObject0(Unknown Source)
>     at java.io.ObjectInputStream.readObject(Unknown Source)
>     at org.jboss.aop.joinpoint.InvocationResponse.readExternal(InvocationResponse.java:122)
>     at java.io.ObjectInputStream.readExternalData(Unknown Source)
>     at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
>     at java.io.ObjectInputStream.readObject0(Unknown Source)
>     at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
>     at java.io.ObjectInputStream.readSerialData(Unknown Source)
>     at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
>     at java.io.ObjectInputStream.readObject0(Unknown Source)
>     at java.io.ObjectInputStream.readObject(Unknown Source)
>     at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObjectVersion2_2(JavaSerializationManager.java:239)
>     at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:133)
>     at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:120)
>     at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedRead(MicroSocketClientInvoker.java:919)
>     at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:613)
>     at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
>     at org.jboss.remoting.Client.invoke(Client.java:1634)
>     at org.jboss.remoting.Client.invoke(Client.java:548)
>     at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
>     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>     at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
>     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>     at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
>     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>     at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
>     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>     at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107) 

-- 
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