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