0 Replies Latest reply on Mar 13, 2006 11:04 AM by Barbu Constantinescu

    How to save a Process Instance from org.jbpm.db.JbpmSession

    Barbu Constantinescu Newbie

      Hello,

      I need to save a ProcessInstance from org.jbpm.db.JbpmSession. I obtained an error as follows: java.lang.UnsupportedOperationException: use JbpmContext.save(ProcessInstance) instead

      Below there are the source code:

      package wse.test.jbpm;
      
      import junit.framework.TestCase;
      
      import org.jbpm.db.JbpmSessionFactory;
      import org.jbpm.db.JbpmSchema;
      import org.jbpm.db.JbpmSession;
      import org.jbpm.graph.def.ProcessDefinition;
      import org.jbpm.graph.exe.ProcessInstance;
      
      public class JBPMProcessDefinitionTestC extends TestCase
      {
       public void testJbpmSessionFactory()
       {
      
       // Get a JBPM session connected to a database.
       // create a process definition (from XML) and store it to the database.
       JbpmSessionFactory jbpmSessionFactory = JbpmSessionFactory.getInstance();
       JbpmSchema jbpmSchema = new JbpmSchema(jbpmSessionFactory.getConfiguration());
       jbpmSchema.createSchema();
      
       JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSessionAndBeginTransaction();
       ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
       "<process-definition name='B'>" +
       " <start-state name='start'>" +
       " <transition to='one' />" +
       " </start-state>" +
       " <state name='one'>" +
       " <transition to='end' />" +
       " </state>" +
       " <end-state name='end' />" +
       "</process-definition>"
       );
       jbpmSession.getGraphSession().saveProcessDefinition(processDefinition);
       jbpmSession.commitTransactionAndClose();
      
       // Get a JBPM session connected to a database.
       // Reload the previously save definition from the database.
       // start a process instance, move one step, save it to the database.
       jbpmSession = jbpmSessionFactory.openJbpmSessionAndBeginTransaction();
       processDefinition = jbpmSession.getGraphSession().findLatestProcessDefinition("B");
       ProcessInstance processInstance = new ProcessInstance(processDefinition);
       assertEquals("start", processInstance.getRootToken().getNode().getName());
       processInstance.signal();
       jbpmSession.getGraphSession().saveProcessInstance(processInstance);
       jbpmSession.commitTransactionAndClose();
      


      The eclipse Failure Trace show:

      java.lang.UnsupportedOperationException: use JbpmContext.save(ProcessInstance) instead at org.jbpm.db.GraphSession.saveProcessInstance(GraphSession.java:250)
       at cwe.test.jbpm.JBPMProcessDefinitionTestB.testJbpmSessionFactory(JBPMProcessDefinitionTestB.java:58)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
       at java.lang.reflect.Method.invoke(Unknown Source)
       at junit.framework.TestCase.runTest(TestCase.java:154)
       at junit.framework.TestCase.runBare(TestCase.java:127)
       at junit.framework.TestResult$1.protect(TestResult.java:106)
       at junit.framework.TestResult.runProtected(TestResult.java:124)
       at junit.framework.TestResult.run(TestResult.java:109)
       at junit.framework.TestCase.run(TestCase.java:118)
       at junit.framework.TestSuite.runTest(TestSuite.java:208)
       at junit.framework.TestSuite.run(TestSuite.java:203)
       at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
       at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
       at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
      


      I worked with: eclipse 3.1.2, jbpm-starters-kit-3.1, hibernate-3.1, jboss-4.0.4RC1, jdk1.5.0_06, junit-3.8.1 on XP SP1

      Thanks,
      Barbu