3 Replies Latest reply on Jun 11, 2009 8:23 PM by Ronald van Kuijk

    Help- Database empties on restarting & making call to workfl

    Gautam Naik Newbie

      Hi,
      I am using jbpm 3.2.6.sp1 and facing a very big problem, when i restart the jbpm workflow engine and make any calls to engine the database is cleared. Ithink i am going wrong somewhere while starting and fetching the process Instance. Plz Help.

      The sequence of tasks that i follow :-
      I have created an RMI interface to interact the engine.

      1. I start the workflow engine:-

      main(){
       jbpmConfiguration = JbpmConfiguration.getInstance("jbpm.cfg.xml");
       deploy("processdefinition.xml");
      }
      
      
      public String deploy(String resourceName) throws RemoteException {
       System.out.println("-------Inside Deploy--------");
       ProcessDefinition processDefinition = null;
       String processId = "";
       JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
       try {
       processDefinition = ProcessDefinition.parseXmlResource(resourceName);
       jbpmContext.deployProcessDefinition(processDefinition);
       } finally {
       jbpmContext.close();
       }
       processId = String.valueOf(processDefinition.getId());
       System.out.println("....Process Definition " + processDefinition.getName() + " Deployed....");
       System.out.println("-------Out of Deploy--------");
       return processId;
       }


      2. Through RMI interface i give call to create a process Instance of deployed processdefinition.

      public String StartExecution(String processDefinitionKey, String inExecutionKey, String actorId, Map<String, Object> localParameters, Map<String, Object> parameters) throws RemoteException {
       JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
       String executionKey = "";
       try {
       GraphSession graphSession = jbpmContext.getGraphSession();
       ProcessDefinition processDefinition = graphSession.findLatestProcessDefinition(processDefinitionKey);
       if (processDefinition != null) {
       ProcessInstance processInstance = processDefinition.createProcessInstance();
       if (processInstance != null) {
       if (inExecutionKey == null || inExecutionKey.equalsIgnoreCase("")) {
       executionKey = processDefinitionKey + ":" + processInstance.getId();
       } else {
       executionKey = inExecutionKey;
       }
       processInstance.setKey(executionKey);
       System.out.println("Execution Key : " + executionKey);
       ContextInstance contextInstance = processInstance.getContextInstance();
       if (parameters != null) {
       contextInstance.setVariables(parameters);
       }
       if (localParameters != null) {
       contextInstance.setTransientVariables(localParameters);
       }
       Token token = processInstance.getRootToken();
       System.out.println("Root Node : " + token.getNode().getName());
       if (actorId != null) {
       if (LdapHelper.isValidUser(actorId)) {
       contextInstance.setVariable(INITIATOR, actorId);
       token.signal();
       } else {
       System.out.println(actorId + " is not present in LDAP");
       throw new ResourceNotFoundException(actorId + " is not present in LDAP");
       }
       } else {
       token.signal();
       }
       jbpmContext.save(processInstance);
       } else {
       System.out.println("Process Instance not found");
       }
       } else {
       System.out.println("Process defn not found");
       }
       } finally {
       jbpmContext.close();
       }
       System.out.println("-------Out of Create ProcessInstance--------");
       jbpmConfiguration.startJobExecutor();
       return executionKey;
       }


      3. Stop the workflow engine by stopping the RMI server.

      4. Start the workflow engine again but with deploy.

      main(){
       jbpmConfiguration = JbpmConfiguration.getInstance("jbpm.cfg.xml");
      }


      5. At this point the database has values present.

      6. Now i try to fetch the current state of the processInstance started, But it fails saying process definition not found.

      public String VWFGetCurrentNodeName(String processDefinitionKey, String executionKey) throws RemoteException {
       JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
       String currentNodeName = "";
       try {
       GraphSession graphSession = jbpmContext.getGraphSession();
      //CLEARS THE DATABASE ON EXECUTING THIS LINE.
       ProcessDefinition processDefinition = graphSession.findLatestProcessDefinition(processDefinitionKey);
       if (processDefinition != null) {
       ProcessInstance processInstance = jbpmContext.getProcessInstance(processDefinition, executionKey);
       if (processInstance != null) {
       Token token = processInstance.getRootToken();
       currentNodeName = token.getNode().getName();
       } else {
       System.out.println("Process Instance not found");
       }
       } else {
       System.out.println("Process defn not found");
       }
       } finally {
       jbpmContext.close();
       }
       System.out.println("Current Node : " + currentNodeName);
       return currentNodeName;
       }



      Plz Guide me..

      Regards,
      Gautam.