Hi,

I have an issue where I signal my token into the <<end-state>> node at the end 
of a process, then get a message org.hibernate.SessionException: Session is 
closed!


I have a class which signals a token to move the process from one <<task-node>> 
to the <<end-state>> node. 

The <<end-state>> node has a action handler which is invoked on node-enter, 
once the token.signal(); is initiated {TAG 1} (from the <<task-node>> prior), 
this works fine. However once this action handler is complete {TAG 2}. And the 
token.signal(); is completed {TAG 3}. The token is now in the <<end-state>> 
{TAG 4} and the jbpmContext.close(); is completed [TAG 5]. Once the Context is 
closed and my class is finished (there is no more code to implement) {TAG 6} I 
receive a 
org.hibernate.SessionException: Session is closed! stacktrace.

Below is a trace from the terminal.

  | 15:24:03,054 INFO  [STDOUT] PartTwoMDB: onMessage: Begining Token token = 
processInstance.getRootToken();
  | 15:24:03,054 INFO  [STDOUT] PartTwoMDB: onMessage: Completed Token token = 
processInstance.getRootToken();
  | 15:24:03,054 INFO  [STDOUT] PartTwoMDB: onMessage: Begining token.signal(); 
{TAG 1}
  | 15:24:03,061 WARN  [ProxyWarnLog] Narrowing proxy to class 
org.jbpm.graph.node.EndState - this operation breaks ==
  | 15:24:03,068 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining jndi = new InitialContext(); THIS IS THE 
"SendMessageToQueueBackForPartOne" ACTION HANDLER WITHIN THE <<end-state>> {TAG 
2}
  | 15:24:03,069 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed jndi = new InitialContext();
  | 15:24:03,069 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining conFactory = (ConnectionFactory)jndi.lookup('ConnectionFactory');
  | 15:24:03,069 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed conFactory = (ConnectionFactory)jndi.lookup('ConnectionFactory');
  | 15:24:03,069 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining connection = conFactory.createConnection();
  | 15:24:03,089 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed connection = conFactory.createConnection();
  | 15:24:03,089 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  | 15:24:03,089 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  | 15:24:03,089 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining Queue queue = (Queue) jndi.lookup('queue/jbpmQueueOne');
  | 15:24:03,089 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed Queue queue = (Queue) jndi.lookup('queue/jbpmQueueOne');
  | 15:24:03,090 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining producer = session.createProducer(queue);
  | 15:24:03,090 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed producer = session.createProducer(queue);
  | 15:24:03,090 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining ProcessInstance processInstance = context.getProcessInstance();
  | 15:24:03,090 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed ProcessInstance processInstance = context.getProcessInstance();
  | 15:24:03,090 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining Token token = context.getProcessInstance().getRootToken();
  | 15:24:03,090 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed Token token = context.getProcessInstance().getRootToken();
  | 15:24:03,090 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining ContextInstance contextInstance = (ContextInstance) 
processInstance.getInstance(ContextInstance.class);
  | 15:24:03,090 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed ContextInstance contextInstance = (ContextInstance) 
processInstance.getInstance(ContextInstance.class);
  | 15:24:03,091 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining processInstanceIDLong = 
(Long)contextInstance.getLocalVariable('distributedProcessID', token);
  | 15:24:03,091 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed processInstanceIDLong = 
(Long)contextInstance.getLocalVariable('distributedProcessID', token);
  | 15:24:03,091 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
processInstanceIDLong is ****209****
  | 15:24:03,091 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining processInstanceID = processInstanceIDLong.longValue();
  | 15:24:03,092 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed processInstanceID = processInstanceIDLong.longValue();
  | 15:24:03,092 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining bandName = (String)contextInstance.getVariable('bandName', token);
  | 15:24:03,092 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed bandName = (String)contextInstance.getVariable('bandName', token);
  | 15:24:03,092 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
bandName is ****The Shockers****
  | 15:24:03,092 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining DistributedObject distributedObject = new DistributedObject();
  | 15:24:03,092 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed DistributedObject distributedObject = new DistributedObject();
  | 15:24:03,093 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining distributedObject.processID = processInstanceID;
  | 15:24:03,093 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed distributedObject.processID = processInstanceID;
  | 15:24:03,093 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining distributedObject.processID = processInstanceID;
  | 15:24:03,093 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed distributedObject.processID = processInstanceID;
  | 15:24:03,093 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining XStream xstream = new XStream();
  | 15:24:03,103 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed XStream xstream = new XStream();
  | 15:24:03,104 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining xstream.alias('distributedObject', DistributedObject.class);
  | 15:24:03,104 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed xstream.alias('distributedObject', DistributedObject.class);
  | 15:24:03,104 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining String xml = xstream.toXML(distributedObject);
  | 15:24:03,105 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed String xml = xstream.toXML(distributedObject);
  | 15:24:03,105 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
XStreams has converted the distributedObject to the following 
xml<distributedObject>
  |   <processID>209</processID>
  |   <bandName>The Shockers</bandName>
  | </distributedObject>
  | 15:24:03,105 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining textMessage = session.createTextMessage(xml);
  | 15:24:03,105 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed textMessage = session.createTextMessage(xml);
  | 15:24:03,106 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Begining producer.send(textMessage);
  | 15:24:03,108 INFO  [STDOUT] SendMessageToQueueBackForPartOne: execute: 
Completed producer.send(textMessage);
  | 15:24:03,108 INFO  [STDOUT] SendMessageToQueueBackForPartOne: 
execute/finally: jndi != null: Begining jndi.close();
  | 15:24:03,108 INFO  [STDOUT] SendMessageToQueueBackForPartOne: 
execute/finally: jndi 1= null: Completed jndi.close();
  | 15:24:03,108 INFO  [STDOUT] 
*******************SendMessageToQueueBackForPartOne - COMPLETED 
************************* HERE THE ACTION HANDLER HAS COMPLETED {TAG 2}
  | 15:24:03,108 INFO  [STDOUT] PartTwoMDB: onMessage: Completed 
token.signal(); {TAG 3}
  | 15:24:03,108 INFO  [STDOUT] PartTwoMDB: onMessage: Current Node 
EndState(end-state1) {TAG 4}
  | 15:24:03,108 INFO  [STDOUT] PartTwoMDB: onMessage(): Begining 
jbpmContext.close();
  | 15:24:03,119 INFO  [STDOUT] PartTwoMDB: onMessage(): Completed 
jbpmContext.close(); {TAG 5}
  | 15:24:03,121 INFO  [STDOUT] *******************PartTwoMDB - COMPLETED 
************************* {TAG 6}
  | 15:24:03,122 WARN  [arjLoggerI18N] 
[com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator_2] 
TwoPhaseCoordinator.beforeCompletion - failed for [EMAIL PROTECTED]
  | org.hibernate.SessionException: Session is closed!
  |     at 
org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:49)
  | 

If i manually move from the <<task-node>> to the <<end-state>> there is no 
error.

below is the code moving the token.


  | package com.distributed.jbpm.mdb;
  | 
  | import javax.ejb.MessageDriven;
  | import javax.ejb.ActivationConfigProperty;
  | 
  | 
  | import javax.jms.Message;
  | import javax.jms.MessageListener;
  | import javax.jms.TextMessage;
  | 
  | 
  | import org.jbpm.JbpmConfiguration;
  | import org.jbpm.JbpmContext;
  | 
  | import org.jbpm.context.exe.ContextInstance;
  | import org.jbpm.graph.exe.ProcessInstance;
  | import org.jbpm.graph.exe.Token;
  | 
  | import com.thoughtworks.xstream.XStream;
  | 
  | 
  | 
  | @MessageDriven(activationConfig =
  |     {
  |             @ActivationConfigProperty(propertyName="acknowledgeMode", 
propertyValue = "Auto-acknowledge"),
  |             @ActivationConfigProperty(propertyName="destinationType", 
propertyValue="javax.jms.Queue"),
  |             @ActivationConfigProperty(propertyName="destination", 
propertyValue="/queue/jbpmQueueTwo")
  |     })
  | 
  | public class PartTwoMDB implements MessageListener
  | {
  |     static JbpmConfiguration jbpmConfiguration = 
JbpmConfiguration.getInstance();
  |     
  |     long distributedProcessInstanceID;
  |     
  |     
  |     
  |     public void onMessage(Message inMessage)
  |     {
  |             System.out.println("PartTwoMDB: onMessage: Started");
  |             TextMessage textMessage = null;
  |             try
  |             {
  |                     if(inMessage instanceof TextMessage)
  |                     {
  |                             textMessage = (TextMessage) inMessage;
  |                             System.out.println("PartTwoMDB: onMessage: 
Message received: "+ textMessage.getText());
  |                             
  |                             System.out.println("PartTwoMDB: onMessage: 
Begining XStream xstream = new XStream();");
  |                             XStream xstream = new XStream();
  |                             System.out.println("PartTwoMDB: onMessage: 
Completed XStream xstream = new XStream();");
  |                             
  |                             System.out.println("PartTwoMDB: onMessage: 
Begining xstream.alias('distributedObject', DistributedObject.class);");
  |                             xstream.alias("distributedObject", 
DistributedObject.class);
  |                             System.out.println("PartTwoMDB: onMessage: 
Completed xstream.alias('distributedObject', DistributedObject.class);");
  |                             
  |                             System.out.println("PartTwoMDB: onMessage: 
Begining String xml = textMessage.getText();");
  |                             String xml = textMessage.getText();
  |                             System.out.println("PartTwoMDB: onMessage: 
Completed String xml = textMessage.getText();");
  |                             
  |                             System.out.println("PartTwoMDB: onMessage: 
Begining DistributedObject distributedObject = 
(DistributedObject)xstream.fromXML(xml);");
  |                             DistributedObject distributedObject = 
(DistributedObject)xstream.fromXML(xml);
  |                             System.out.println("PartTwoMDB: onMessage: 
Completed DistributedObject distributedObject = 
(DistributedObject)xstream.fromXML(xml);");
  |                             System.out.println("PartTwoMDB: onMessage: 
distributedObject: "+ distributedObject.processID);
  |                             
  |                             
  |                             
  |                             System.out.println("PartTwoMDB: onMessage: 
Begining JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();");
  |                             JbpmContext jbpmContext = 
jbpmConfiguration.createJbpmContext();
  |                             System.out.println("PartTwoMDB: onMessage: 
Completed JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();");
  |                             try
  |                             {
  |                                     
  |                                     
  |                                     System.out.println("PartTwoMDB: 
onMessage: Begining ProcessInstance processInstance = 
jbpmContext.newProcessInstance('processTwo');");
  |                                     ProcessInstance processInstance = 
jbpmContext.newProcessInstance("processTwo");
  |                                     System.out.println("PartTwoMDB: 
onMessage: Completed ProcessInstance processInstance = 
jbpmContext.newProcessInstance('processTwo');");
  |                                     
  |                                     System.out.println("PartTwoMDB: 
onMessage: Current Node " + processInstance.getRootToken().getNode());
  |                                     System.out.println("PartTwoMDB: 
onMessage: Current running process " + processInstance.getId());
  |                                     
  |                                     System.out.println("PartTwoMDB: 
onMessage: Begining ContextInstance contextInstance = (ContextInstance) 
processInstance.getInstance(ContextInstance.class);");
  |                                     ContextInstance contextInstance = 
(ContextInstance) processInstance.getInstance(ContextInstance.class);
  |                                     System.out.println("PartTwoMDB: 
onMessage: Completed ContextInstance contextInstance = (ContextInstance) 
processInstance.getInstance(ContextInstance.class);");
  |                                     
  |                                     distributedProcessInstanceID = 
distributedObject.processID;
  |                                     
  |                                     System.out.println("PartTwoMDB: 
onMessage: Begining contextInstance.setVariable('distributedProcessID', 
distributedProcessInstanceID);");
  |                                     
contextInstance.setVariable("distributedProcessID", 
distributedProcessInstanceID);
  |                                     System.out.println("PartTwoMDB: 
onMessage: Completed contextInstance.setVariable('distributedProcessID', 
distributedProcessInstanceID);");
  |                                     
  |                                     System.out.println("PartTwoMDB: 
onMessage: Begining contextInstance.setVariable('bandName', 'The Shockers');");
  |                                     contextInstance.setVariable("bandName", 
"The Shockers");
  |                                     System.out.println("PartTwoMDB: 
onMessage: Completed contextInstance.setVariable('bandName', 'The Shockers');");
  |                                     
  |                                     System.out.println("PartTwoMDB: 
onMessage: Begining Token token = processInstance.getRootToken();");
  |                                     Token token = 
processInstance.getRootToken();
  |                                     System.out.println("PartTwoMDB: 
onMessage: Completed Token token = processInstance.getRootToken();");
  |                                     
  |                                     System.out.println("PartTwoMDB: 
onMessage: Begining token.signal();");
  |                                     token.signal();
  |                                     System.out.println("PartTwoMDB: 
onMessage: Completed token.signal();");
  |                                     
  |                                     System.out.println("PartTwoMDB: 
onMessage: Current Node " + processInstance.getRootToken().getNode());
  |                                     
  |                                     
  |                                     
  |                                     
  |                             }
  |                             finally
  |                             {
  |                                     System.out.println("PartTwoMDB: 
onMessage(): Begining jbpmContext.close();");
  |                                     jbpmContext.close();
  |                                     System.out.println("PartTwoMDB: 
onMessage(): Completed jbpmContext.close();");
  |                                     
System.out.println("*******************PartTwoMDB - COMPLETED 
*************************");
  |                             }
  |                             
  |                     }
  |                     else
  |                     {
  |                             System.out.println("PartTwoMDB: onMessage(): 
Message of wrong type: " + inMessage.getClass().getName());
  |                     }
  |             }
  |             catch (Throwable t)
  |             {
  |                     System.out.println("PartTwoMDB: Throwable cought");
  |                     t.printStackTrace();
  |             }
  |             
  |     }
  | }
  | 


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

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4135368
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to