package org.jbpm.graph.exe; import junit.framework.TestCase; import org.jbpm.context.exe.ContextInstance; import org.jbpm.db.JbpmSession; import org.jbpm.db.JbpmSessionFactory; import org.jbpm.graph.def.ProcessDefinition; import org.jbpm.jpdl.xml.JpdlXmlReader; public class ScriptDbTest extends TestCase { private static JbpmSessionFactory JBPM_SESSION_FACTORY = JbpmSessionFactory.buildJbpmSessionFactory(); public static JbpmSessionFactory getJbpmSessionFactory() { return JBPM_SESSION_FACTORY; } public void testInVariableScopingScript() { ProcessDefinition processDefinition = JpdlXmlReader.parse( "" + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + "" ); JbpmSession jbpmSession = getJbpmSessionFactory().openJbpmSession(); jbpmSession.beginTransaction(); jbpmSession.getGraphSession().saveProcessDefinition(processDefinition); jbpmSession.commitTransaction(); jbpmSession.close(); // Simulate a real application that would signal to the process instance in different sessions/transactions between states jbpmSession = getJbpmSessionFactory().openJbpmSession(); jbpmSession.beginTransaction(); ProcessInstance processInstance = new ProcessInstance(processDefinition); ContextInstance contextInstance = processInstance.getContextInstance(); contextInstance.setVariable("vara", new Integer(1)); processInstance.signal(); assertEquals("a", processInstance.getRootToken().getNode().getName()); jbpmSession.getGraphSession().saveProcessInstance(processInstance); jbpmSession.commitTransaction(); jbpmSession.close(); long processInstanceId = processInstance.getId(); // Simulate a real application that would signal to the process instance in different sessions/transactions between states jbpmSession = getJbpmSessionFactory().openJbpmSession(); jbpmSession.beginTransaction(); processInstance = jbpmSession.getGraphSession().loadProcessInstance(processInstanceId); contextInstance = processInstance.getContextInstance(); processInstance.signal(); assertEquals("b", processInstance.getRootToken().getNode().getName()); // Variable 'varb' should be available to the script in state 'b' assertEquals(new Integer(2), contextInstance.getVariable("varc")); jbpmSession.commitTransaction(); jbpmSession.close(); } }