6 Replies Latest reply on Dec 5, 2007 7:03 AM by sowmyayellamilli

    TaskInstance and ProcessInstance not ending

    sowmyayellamilli

      Hi ,

      In my processDefinition the taskNode before End-State is not ending....and so the process is not ending...I mean if I have 2 TaskNodes the one before end-state is not ending....If I have 1 taskNode that one is also not ending

      Here is the processDefinition:

      <?xml version="1.0" encoding="UTF-8" ?>
      <process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="ManagerAllocation">
       <swimlane name="Agent">
       <assignment class="com.expeditor.workallocation.ManagerAssignmentHandler">
       <domainTable>AgentTrans</domainTable>
       </assignment>
       </swimlane>
       <swimlane name="QcAgent">
       <assignment class="com.expeditor.workallocation.QCAssignmentHandler">
       <domainTable>AgentTrans</domainTable>
       <qcDomainTable>QcTrans</qcDomainTable>
       </assignment>
       </swimlane>
       <start-state name="Start">
       <transition name="To Process Maintanence Request" to="Process Maintanence Request" />
       </start-state>
       <task-node name="Process Maintanence Request">
       <task name="Process Maintanence Request" swimlane="Agent">
       </task>
       <transition name="To Perform QC" to="Perform QC" ></transition>
       </task-node>
       <task-node name="Perform QC">
       <task name="Perform QC" swimlane="QcAgent" >
       </task>
       <transition name="To End Process" to="End Process"></transition>
       </task-node>
       <end-state name="End Process" />
       </process-definition>
      



      Any Help Please....

        • 1. Re: TaskInstance and ProcessInstance not ending
          kukeltje

          Can you make a minimal unittest with embedded processdefinition that demonstrates the problem?

          • 2. Re: TaskInstance and ProcessInstance not ending
            sowmyayellamilli

            ok, i'll try and get back to you.. Thanx a lot for ur reply

            • 3. Re: TaskInstance and ProcessInstance not ending
              sowmyayellamilli

              Hi,
              I tried the unit Test..... all were successful , but the thing is...

              when i run the test case for Websale Example...even that processInstance didn't end
              even after passing the end state...and the taskinstance before the end-state 'Fix web order data' didn't end (but it started)

              (I mean ending when I see END_ column in JBPM_TASKINSTANCE & JBPM_PROCESSINSTANCE tables.... isn't?)

              everything else was fine with it..

              Please kindly help me out...

              • 4. Re: TaskInstance and ProcessInstance not ending
                kukeltje

                ??? You tried your own unittest? Or did you run the jbpm unit tests? What I asked was to *create* a unittest which demonstrated *your* problem, so I can try to reproduce.

                • 5. Re: TaskInstance and ProcessInstance not ending
                  sowmyayellamilli

                  ok i'll get back to u with my unit test ...
                  meanwhile, i am not able to understand why websale also behaved the same way...websale unit test which i executed was like this:

                  /*
                   * JBoss, Home of Professional Open Source
                   * Copyright 2005, JBoss Inc., and individual contributors as indicated
                   * by the @authors tag. See the copyright.txt in the distribution for a
                   * full listing of individual contributors.
                   *
                   * This is free software; you can redistribute it and/or modify it
                   * under the terms of the GNU Lesser General Public License as
                   * published by the Free Software Foundation; either version 2.1 of
                   * the License, or (at your option) any later version.
                   *
                   * This software is distributed in the hope that it will be useful,
                   * but WITHOUT ANY WARRANTY; without even the implied warranty of
                   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
                   * Lesser General Public License for more details.
                   *
                   * You should have received a copy of the GNU Lesser General Public
                   * License along with this software; if not, write to the Free
                   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
                   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
                   */
                  package org.jbpm.websale;
                  
                  import java.util.HashMap;
                  import java.util.List;
                  import java.util.Map;
                  
                  import junit.framework.TestCase;
                  
                  import org.jbpm.JbpmConfiguration;
                  import org.jbpm.JbpmContext;
                  import org.jbpm.context.exe.ContextInstance;
                  import org.jbpm.graph.def.ProcessDefinition;
                  import org.jbpm.graph.exe.ProcessInstance;
                  import org.jbpm.identity.Entity;
                  import org.jbpm.identity.hibernate.IdentitySession;
                  import org.jbpm.identity.xml.IdentityXmlParser;
                  import org.jbpm.persistence.db.DbPersistenceServiceFactory;
                  import org.jbpm.svc.Services;
                  import org.jbpm.taskmgmt.exe.TaskInstance;
                  import org.jbpm.taskmgmt.exe.TaskMgmtInstance;
                  
                  public class WebsaleTest extends TestCase {
                  
                   JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
                   DbPersistenceServiceFactory dbPersistenceServiceFactory = (DbPersistenceServiceFactory) jbpmConfiguration.getServiceFactory(Services.SERVICENAME_PERSISTENCE);
                  
                   JbpmContext jbpmContext;
                  
                   ProcessInstance processInstance = null;
                   ContextInstance contextInstance = null;
                   TaskMgmtInstance taskMgmtInstance = null;
                   long processInstanceId = -1;
                  
                   public void setUp() {
                   dbPersistenceServiceFactory.createSchema();
                   deployProcess();
                   jbpmContext = jbpmConfiguration.createJbpmContext();
                   }
                  
                   public void tearDown() {
                   jbpmContext.close();
                   // dbPersistenceServiceFactory.dropSchema();
                   jbpmContext = null;
                   }
                  
                   public void newTransaction() {
                   jbpmContext.close();
                   jbpmContext = jbpmConfiguration.createJbpmContext();
                   }
                  
                   public void deployProcess() {
                   JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
                   try {
                   ProcessDefinition processDefinition =
                   ProcessDefinition.parseXmlResource("processdefinition.xml");
                   jbpmContext.deployProcessDefinition(processDefinition);
                   } finally {
                   jbpmContext.close();
                   }
                   }
                  
                   public void loadIdentities() {
                   JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
                   try {
                   Entity[] entities = IdentityXmlParser.parseEntitiesResource("hsqldb/identity.db.xml");
                   IdentitySession identitySession = new IdentitySession(jbpmContext.getSession());
                   for (int i=0; i<entities.length; i++) {
                   identitySession.saveEntity(entities);
                   }
                   } finally {
                   jbpmContext.close();
                   }
                   }
                  
                   public TaskInstance createNewProcessInstance() {
                   processInstance = jbpmContext.newProcessInstanceForUpdate("websale");
                   processInstanceId = processInstance.getId();
                   contextInstance = processInstance.getContextInstance();
                   taskMgmtInstance = processInstance.getTaskMgmtInstance();
                   return processInstance.getTaskMgmtInstance().createStartTaskInstance();
                   }
                  
                   public void reloadProcessInstance() {
                   processInstance = jbpmContext.loadProcessInstanceForUpdate(processInstanceId);
                   contextInstance = processInstance.getContextInstance();
                   taskMgmtInstance = processInstance.getTaskMgmtInstance();
                   }
                  
                   public void testWebSaleOrderTaskParameters() {
                   TaskInstance taskInstance = createNewProcessInstance();
                   assertEquals("Create new web sale order", taskInstance.getName());
                   assertEquals(0, taskInstance.getVariables().size());
                   }
                  
                   public void testPerformWebSaleOrderTask() {
                   jbpmContext.setActorId("user");
                   // create a task to start the websale process
                   TaskInstance taskInstance = createNewProcessInstance();
                  
                   Map taskVariables = new HashMap();
                   taskVariables.put("item", "cookies");
                   taskVariables.put("quantity", "lots of them");
                   taskVariables.put("address", "46 Main St.");
                  
                   taskInstance.addVariables(taskVariables);
                   taskInstance.end();
                  
                   assertEquals("cookies", contextInstance.getVariable("item"));
                   assertEquals("lots of them", contextInstance.getVariable("quantity"));
                   assertEquals("46 Main St.", contextInstance.getVariable("address"));
                   assertEquals("user", taskMgmtInstance.getSwimlaneInstance("buyer").getActorId());
                   }
                  
                   public void testEvaluateAssignment() {
                   jbpmContext.setActorId("user");
                   // create a task to start the websale process
                   TaskInstance taskInstance = createNewProcessInstance();
                   taskInstance.setVariable("item", "cookies");
                   taskInstance.end();
                   jbpmContext.save(processInstance);
                   processInstanceId = processInstance.getId();
                  
                   newTransaction();
                  
                   List sampleManagersTasks = jbpmContext.getTaskMgmtSession().findTaskInstances("manager");
                   assertEquals(1, sampleManagersTasks.size());
                  
                   TaskInstance evaluateTaskInstance = (TaskInstance) sampleManagersTasks.get(0);
                   assertEquals("manager", evaluateTaskInstance.getActorId());
                   assertEquals("Evaluate web order", evaluateTaskInstance.getName());
                   assertNotNull(evaluateTaskInstance.getToken());
                   assertNotNull(evaluateTaskInstance.getCreate());
                   assertNull(evaluateTaskInstance.getStart());
                   assertNull(evaluateTaskInstance.getEnd());
                   }
                  
                   public void testEvaluateOk() {
                   TaskInstance taskInstance = createNewProcessInstance();
                   taskInstance.end();
                   jbpmContext.save(processInstance);
                  
                   newTransaction();
                  
                   TaskInstance evaluateTaskInstance = (TaskInstance) jbpmContext.getTaskMgmtSession().findTaskInstances("manager").get(0);
                   evaluateTaskInstance.end("OK");
                   jbpmContext.save(evaluateTaskInstance);
                  
                   newTransaction();
                  
                   List sampleShippersTasks = jbpmContext.getTaskMgmtSession().findTaskInstances("shipper");
                   assertEquals(1, sampleShippersTasks.size());
                  
                   TaskInstance waitForMoneyTaskInstance = (TaskInstance) sampleShippersTasks.get(0);
                   assertEquals("shipper", waitForMoneyTaskInstance.getActorId());
                   assertEquals("Wait for money", waitForMoneyTaskInstance.getName());
                   assertNotNull(waitForMoneyTaskInstance.getToken());
                   assertNotNull(waitForMoneyTaskInstance.getCreate());
                   assertNull(waitForMoneyTaskInstance.getStart());
                   assertNull(waitForMoneyTaskInstance.getEnd());
                   }
                  
                   public void testUnwritableVariableException() {
                   testEvaluateAssignment();
                   newTransaction();
                   List sampleManagersTasks = jbpmContext.getTaskMgmtSession().findTaskInstances("manager");
                   TaskInstance evaluateTaskInstance = (TaskInstance) sampleManagersTasks.get(0);
                   evaluateTaskInstance.end();
                  
                   newTransaction();
                  
                   processInstance = jbpmContext.getGraphSession().loadProcessInstance(processInstanceId);
                   contextInstance = processInstance.getContextInstance();
                   // so the cookies should still be in the item process variable.
                   assertEquals("cookies", contextInstance.getVariable("item"));
                   }
                  
                   public void testEvaluateNok() {
                   testEvaluateAssignment();
                   newTransaction();
                  
                   List sampleManagersTasks = jbpmContext.getTaskMgmtSession().findTaskInstances("manager");
                   TaskInstance evaluateTaskInstance = (TaskInstance) sampleManagersTasks.get(0);
                   evaluateTaskInstance.setVariable("comment", "wtf");
                   evaluateTaskInstance.end("More info needed");
                   jbpmContext.save(evaluateTaskInstance);
                  
                   newTransaction();
                  
                   List sampleUserTasks = jbpmContext.getTaskMgmtSession().findTaskInstances("user");
                   assertEquals(1, sampleUserTasks.size());
                   TaskInstance fixWebOrderDataTaskInstance = (TaskInstance) sampleUserTasks.get(0);
                   assertEquals("user", fixWebOrderDataTaskInstance.getActorId());
                   assertEquals("wtf", fixWebOrderDataTaskInstance.getVariable("comment"));
                   }
                  
                   public void testMoreInfoNeeded() {
                   jbpmContext.setActorId("user");
                  
                   // create a task to start the websale process
                   TaskInstance taskInstance = createNewProcessInstance();
                   taskInstance.end();
                   jbpmContext.save(processInstance);
                  
                   newTransaction();
                  
                   TaskInstance evaluateTaskInstance = (TaskInstance) jbpmContext.getTaskMgmtSession().findTaskInstances("manager").get(0);
                   evaluateTaskInstance.end("More info needed");
                   jbpmContext.save(evaluateTaskInstance);
                  
                   newTransaction();
                  
                   List sampleUserTasks = jbpmContext.getTaskMgmtSession().findTaskInstances("user");
                   assertEquals(1, sampleUserTasks.size());
                  
                   TaskInstance fixWebOrderDataTaskInstance = (TaskInstance) sampleUserTasks.get(0);
                   assertEquals("user", fixWebOrderDataTaskInstance.getActorId());
                   assertEquals("Fix web order data", fixWebOrderDataTaskInstance.getName());
                   assertNotNull(fixWebOrderDataTaskInstance.getToken());
                   assertNotNull(fixWebOrderDataTaskInstance.getCreate());
                   assertNull(fixWebOrderDataTaskInstance.getStart());
                   assertNull(fixWebOrderDataTaskInstance.getEnd());
                   }
                   }
                  


                  i didn't change anything in the processdefinition or any of the classes that came with this example accept this test case...

                  i'll make a test case for my process definition....and get back to u...



                  • 6. Re: TaskInstance and ProcessInstance not ending
                    sowmyayellamilli

                    Hi,
                    I am really happy to say that my problem was solved....

                    the problem was with our database connections...

                    we were using a single connection pool for accessing two different schemas...and so we introduced 2 connection pools in place of that which solved the problem.....

                    there was NO PROBLEM with the JPDL or JBPM

                    anyway...thanx a lot for ur concern towards the problem