[jboss-user] [JBoss jBPM] - jBPM and Message Driven Beans

new4jboss do-not-reply at jboss.com
Tue Jan 30 05:43:53 EST 2007


Hi all,
I'm facing jBPM for the first time and just when i was about to start coding my application i faced an issue that i couldn't find any answer in the last two days.

I'm using jBPM-3.1.3 as lib's (jbpm-3.1.3.jar and jbpm-identity-3.1.3.jar) inside my Enterprise Application (.ear) deployed in a SJSAS 8.1 2005Q1. 
For the database I'm using Oracle 9i with the Oracle JDBC driver, 9.2.0.8 version. Hibernate connects through a datasource defined in the SJSAS.

Here is my scenario:

processdefinition.xml

  | <?xml version="1.0" encoding="UTF-8"?>
  | <process-definition xmlns=""  name="suspension.par">
  |    <start-state name="start">
  |       <transition name="" to="node1"></transition>
  |    </start-state>
  |    <node name="node1">
  |       <action class="my.package.SendRequest"/>
  |       <transition name="" to="state1"></transition>
  |    </node>
  |    <state name="state1">
  |       <transition name="" to="end1"></transition>
  |    </state>
  |    <end-state name="end1"></end-state>
  | </process-definition>
  | 

I have a jsp that creates a new ProcessInstance:

  | JbpmContext jbpmContext = JbpmConfiguration.getInstance().getCurrentJbpmContext();
  | //creates a new process instance
  | ProcessInstance processInstance = jbpmContext.newProcessInstance("suspension.par");
  | jbpmContext.save(processInstance);
  | //starts the workflow
  | processInstance.signal();
  | 

As this point the workflow instance has received a signal to move forward to "node1" where it calls the my.package.SendRequest. This ActionHandler sends a request to a Message Driven Bean (MDB) through a queue.

Thats where the problem reveals itself, and lets see if I can explain here what is happening.

Since the creation of the process instance was responsibility of the jsp, so lets assume that the signal sent inside this jsp makes the MDB receiving the request before the jsp call to jbpmContext.close().

>From what i understood the database "writing" occurs when  we call  jbpmContext.close(), so nothing was written to the database as for the time of MDB receiving the request.

In the request that the MDB is receiving is the processInstanceId that is used to load the ProcessInstance from the database. But when i try to do that:

  | org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [org.jbpm.graph.exe.ProcessInstance#644]
  |         at org.hibernate.impl.SessionFactoryImpl$1.handleEntityNotFound(SessionFactoryImpl.java:375)
  |         at org.hibernate.proxy.AbstractLazyInitializer.checkTargetState(AbstractLazyInitializer.java:79)
  |         at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:68)
  |         at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
  |         at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:140)
  |         at org.jbpm.graph.exe.ProcessInstance$$EnhancerByCGLIB$$f514ef34.signal(<generated>)
  |         at my.package.ResponseMDBean.onMessage(ResponseMDBean.java:88)
  |         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 com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:983)
  |         at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:147)
  |         at com.sun.ejb.containers.MessageBeanContainer.deliverMessage(MessageBeanContainer.java:956)
  |         at com.sun.ejb.containers.MessageBeanListenerImpl.deliverMessage(MessageBeanListenerImpl.java:42)
  |         at com.sun.enterprise.connectors.inflow.MessageEndpointInvocationHandler.invoke(MessageEndpointInvocationHandler.java:130)
  |         at $Proxy25.onMessage(Unknown Source)
  |         at com.sun.messaging.jms.ra.OnMessageRunner.run(OnMessageRunner.java:187)
  |         at com.sun.enterprise.connectors.work.OneWork.doWork(OneWork.java:45)
  |         at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(Unknown Source)
  | 


Can anyone help me on this please?
Thanks in advance,
Délio Guerra

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4008214#4008214

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4008214




More information about the jboss-user mailing list