2 Replies Latest reply on Oct 13, 2009 3:33 AM by Massimo Di Fant

    Process archive classes:ClassNotFoundException

    Massimo Di Fant Newbie

      Hi all,
      I have installed JBpm 3.2.3 on JBoss 4.2.3.GA and I have created the following simple process:

      <?xml version="1.0" encoding="UTF-8"?>
      <process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="sample">
       <start-state name="start">
       <transition to="a-node"></transition>
       </start-state>
      
       <node name="a-node">
       <event type="node-enter">
       <action name="node-enter"
       class="sample.process.NodeHandler"></action>
       </event>
       <transition to="end"></transition>
       </node>
      
       <end-state name="end"></end-state>
      </process-definition>


      where NodeHandler is the delegation class where I need to invoke an EJB method (the EJB is already deployed in JBoss):

      public class NodeHandler implements ActionHandler {
       private static final String MANAGER_HOME_JNDI = "ejb/Manager";
      
       @Override
       public void execute(ExecutionContext context) throws Exception {
       Properties env = new Properties();
       // ... setting Context.INITIAL_CONTEXT_FACTORY, Context.PROVIDER_URL, Context.URL_PKG_PREFIXES ...
      
       InitialContext context = null;
       try {
       context = new InitialContext(env);
       Object homeObject = context.lookup(Constants.MANAGER_HOME_JNDI);
       ManagerHome home = (ManagerHome) PortableRemoteObject.narrow(homeObject, ManagerHome.class);
       Manager manager = home.create();
       // ... invoking manager business methods...
       } finally {
       if (context != null) {
       try {
       context.close();
       } catch (Exception e) {
       // ignored
       }
       }
       }
       }
      }
      

      In the process archive are present all needed classes like NodeHandler and, of course, the home / remote interfaces of the EJB. The directory structure is the following:

      sample.par
       |
       +- processdefinition.xml
       +- gpd.xml
       +- processimage.jpg
       |
       + classes
       +- sample
       +- manager
       +-- intefaces
       +-- Manager.class // EJB Remote Interface
       +-- ManagerHome.class // EJB Home Interface
       +- process
       +-- NodeHandler.class
      

      I deploy this process archive into Jbpm by the console without any warning or errors. But when I create a process instance and I signal the instance (to move from "start" node to "a-node") I obtain the exception reported at the end.

      I have looked into JBPM_BYTEARRAY / JBPM_BYTEBLOCK tables and there is a row that refers to class ManagerHome.

      So why Jbpm cannot find them?

      There is some other way to use an EJB into Jbpm action delegation classes?

      Regards.


      javax.naming.CommunicationException [Root exception is java.lang.ClassNotFoundException: sample.manager.interfaces.ManagerHome (no security manager: RMI class loader disabled)]
      at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:786)
      at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
      at javax.naming.InitialContext.lookup(InitialContext.java:392)
      at sample.process.sample.NodeHandler.execute(NodeHandler.java:37)
      at org.jbpm.graph.def.Action.execute(Action.java:122)
      at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:259)
      at org.jbpm.graph.def.GraphElement.executeActions(GraphElement.java:215)
      at org.jbpm.graph.def.GraphElement.fireAndPropagateEvent(GraphElement.java:185)
      at org.jbpm.graph.def.GraphElement.fireEvent(GraphElement.java:169)
      at org.jbpm.graph.def.Node.enter(Node.java:302)
      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:597)
      at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:173)
      at org.jbpm.graph.def.Node_$$_javassist_80.enter(Node_$$_javassist_80.java)
      at org.jbpm.graph.def.Transition.take(Transition.java:151)
      at org.jbpm.graph.def.Node.leave(Node.java:393)
      at org.jbpm.graph.node.StartState.leave(StartState.java:70)
      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:597)
      at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:173)
      at org.jbpm.graph.def.Node_$$_javassist_80.leave(Node_$$_javassist_80.java)
      at org.jbpm.graph.exe.Token.signal(Token.java:192)
      at org.jbpm.graph.exe.Token.signal(Token.java:140)
      at org.jbpm.jsf.core.action.SignalActionListener.handleAction(SignalActionListener.java:52)
      at org.jbpm.jsf.core.impl.JbpmActionListenerWrapper.processAction(JbpmActionListenerWrapper.java:82)
      at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
      at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:771)
      at javax.faces.component.UICommand.broadcast(UICommand.java:372)
      at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)
      at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:755)
      at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
      at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
      at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
      at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
      at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
      at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
      at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
      at java.lang.Thread.run(Thread.java:619)
      Caused by: java.lang.ClassNotFoundException: sample.manager.interfaces.PollerManagerHome (no security manager: RMI class loader disabled)
      at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:535)
      at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
      at org.jboss.system.JBossRMIClassLoader.loadProxyClass(JBossRMIClassLoader.java:82)
      at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
      at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
      at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1531)
      at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1493)
      at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
      at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
      at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
      at java.rmi.MarshalledObject.get(MarshalledObject.java:142)
      at org.jnp.interfaces.MarshalledValuePair.get(MarshalledValuePair.java:72)
      at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:710)
      ... 57 more