3 Replies Latest reply on Aug 19, 2007 5:16 PM by karstendausb

    Problem accessing CommandServiceBean from external client

    karstendausb

      Hello,

      I am encountering problems accessing jbpm 3.2.1. on jboss, and I don't understand what is going wrong.

      I am using the following sample code:

      Properties props = new Properties();
      props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
      props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming.client");
      props.setProperty(Context.PROVIDER_URL, "jnp://localhost:1099");
      props.setProperty("j2ee.clientName", "jboss-client-test");
      
      InitialContext initialContext = new InitialContext(props);
      Object homeref = initialContext.lookup("ejb/CommandServiceBean");
      
      RemoteCommandServiceHome remoteCommandServiceHome = (RemoteCommandServiceHome) avax.rmi.PortableRemoteObject.narrow(homeref, RemoteCommandServiceHome.class);
      
      RemoteCommandService remoteCommandService= remoteCommandServiceHome.create();
      


      Trying the sample command
      VariablesCommand vc=new VariablesCommand();
      Object result=remoteCommandService.execute(vc);
      

      seems to work well, at least the server logs

      ==> jboss-4.0.4.GA/server/default/log/server.log <==
      2007-08-11 22:03:39,389 DEBUG [org.jbpm.ejb.impl.CommandServiceBean] handing over the command execution to the command service
      2007-08-11 22:03:39,390 DEBUG [org.jbpm.configuration.JbpmContextInfo] creating jbpm context with service factories '[tx, message, scheduler, logging, persistence, authentication]'
      2007-08-11 22:03:39,390 DEBUG [org.jbpm.JbpmContext] creating org.jbpm.JbpmContext@135df99
      2007-08-11 22:03:39,390 DEBUG [org.jbpm.ejb.impl.CommandServiceBean] executing org.jbpm.command.VariablesCommand@1eaf3fa
      2007-08-11 22:03:39,390 DEBUG [org.jbpm.JbpmContext] closing JbpmContext
      


      But when I try to use any other Command which utilizes AbstractGetObjectBaseCommand , like GetProcessDefinitionsCommand for example:
      GetProcessDefinitionsCommand vc=new GetProcessDefinitionsCommand();
      Object result=remoteCommandService.execute(vc);
      


      an exception is thrown which includes the following segment:

      Caused by: java.io.InvalidClassException: org.jbpm.command.AbstractGetObjectBaseCommand; local class incompatible: stream classdesc serialVersionUID = 4676683671013111655, local class serialVersionUID = -7037309091658557544
      


      The full stacktrace is shown below (nothing in the logs on server side).
      I doublechecked that both (client and server) use the same jbpm-jpdl-version (3.2.1). The server is a Jboss 4.0.4 GA with an unmodified jbpm-ear.

      Anybody seen this behaviour before? I am not an ejb nor an rmi expert, so I don't understand where the problem is. There are many entries in the forum concerning classcastexceptions, but this topic does not seem to be covered?

      Thanks in advance,

      Karsten

      Here is the full stacktrace:
      java.rmi.MarshalException: MarshalException; nested exception is:
       org.jboss.invocation.JBossLazyUnmarshallingException: getArguments failed
       at org.jboss.ejb.Container.invoke(Container.java:1004)
       at sun.reflect.GeneratedMethodAccessor107.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.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:819)
       at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:420)
       at sun.reflect.GeneratedMethodAccessor106.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
       at sun.rmi.transport.Transport$1.run(Transport.java:153)
       at java.security.AccessController.doPrivileged(Native Method)
       at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
       at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
       at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
       at java.lang.Thread.run(Thread.java:595)
      Caused by: org.jboss.invocation.JBossLazyUnmarshallingException: getArguments failed
       at org.jboss.invocation.MarshalledInvocation.getArguments(MarshalledInvocation.java:513)
       at org.jboss.ejb.Container.invoke(Container.java:918)
       ... 20 more
      Caused by: java.io.InvalidClassException: org.jbpm.command.AbstractGetObjectBaseCommand; local class incompatible: stream classdesc serialVersionUID = 4676683671013111655, local class serialVersionUID = -7037309091658557544
       at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:546)
       at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1552)
       at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1466)
       at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1552)
       at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1466)
       at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1699)
       at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
       at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
       at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
       at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
       at org.jboss.invocation.MarshalledValue.get(MarshalledValue.java:91)
       at org.jboss.invocation.MarshalledInvocation.getArguments(MarshalledInvocation.java:509)
       ... 21 more
      






        • 1. [SOLVED] Re: Problem accessing CommandServiceBean from exter
          karstendausb

          Mea culpa...that was a personal eclipse specific problem and was not specifically jbpm-related.

          • 2. Re: Problem accessing CommandServiceBean from external clien

            Hi,

            I'm experiencing a similar problem -- but mine is: org.jbpm.context.exe.VariableContainer; local class incompatible.

            Would you mind sharing what changes you made in Eclipse? I copied over the jbpm-jpdl.jar file from the exploded EAR file under jboss AS, but I still get the same error.

            Thanks!

            jeff

            • 3. Re: Problem accessing CommandServiceBean from external clien
              karstendausb

               

              "dajevu" wrote:

              I'm experiencing a similar problem -- but mine is: org.jbpm.context.exe.VariableContainer; local class incompatible.

              Would you mind sharing what changes you made in Eclipse? I copied over the jbpm-jpdl.jar file from the exploded EAR file under jboss AS, but I still get the same error.


              Local class incompatible might indicate that different class files are used in two java vms (the one running the client-app and the one running jboss-as for example).
              This shouldn't be a problem if a class declares a static final attribute serialVersionUid. The command classes in jbpm don't have this attribute. If classes do not specify this attribute compile time matters.

              In my case, I accidently had put another project which also contained the jbpm-jpdl-source on the build path of the client project (both "projects" being in the same eclipse workspace of course). This caused that the jpdl-jar - which was also on the build path of the client project - was ignored (as projects have a higher class loading precedence in eclipse). I didn't make any modifications to the jbpm source, but compile time was different (as the jbpm classes in the workspace were compiled by eclipse - in opposite to the jbpm-jpdl-jar used on the server side).

              Hope this helps,

              Karsten