2015-05-01 7 views
5

W moim projekcie istnieje istniejąca definicja old.jpdl.xml. Działa dobrze. Teraz chcę uruchomić kolejną definicję new.jpdl.xml. Po wdrożeniu pliku ear starałem się przeczytać new.jpdl.xml przy użyciu nowego ProcessDefinitionId za pomocą poniższego kodu.Jak uzyskać ProcessDefinition za pomocą jpdl dla JBPM 4.4?

Uważam, że brakuje mi kroków związanych z wdrażaniem. Czy ktoś może mnie prowadzić, jak wdrożyć lub przeczytać new.jpdl.xml?

public String getProcessInstanceID(ProcessEngine processEngine, 
      FlowControl flowcontrol, String processDefinitionID) 
    { 
     String processInstanceID = null; 
     log.debug("Entering method - getProcessInstanceID"); 
     ProcessDefinitionQuery pdq = processEngine.getRepositoryService() 
       .createProcessDefinitionQuery(); 
     pdq.deploymentId(processDefinitionID); 
     ProcessDefinition procDef = pdq.uniqueResult(); 

     if (null == procDef) 
     { 
      log.error("Process Definition could not be found for the deployment ID: " 
        + processDefinitionID); 
     } 

     Map<String, Object> variables = new HashMap<String, Object>(); 
     variables.put("flowcontrol", flowcontrol); 

     ProcessInstance processInstance = processEngine.getExecutionService() 
       .startProcessInstanceByKey(procDef.getKey(), variables); 

     log.debug("Process Instance ID:" + processInstance.getId()); 
     processInstanceID = processInstance.getId(); 
     log.debug("Exiting method - getProcessInstanceID"); 
     return processInstanceID; 
    } 
+0

Wygląda na to, że Twoje pytanie nie zawiera wielu wyświetleń. Możesz spróbować zapytać na [Oficjalnym forum JBPM] (https://developer.jboss.org/en/jbpm/content). – Mike

+0

Cześć Mike, mam rozwiązanie tego problemu. Dziękuję za pomoc. Będę używał tego forum do innych zapytań. –

Odpowiedz

3

Utworzono zadanie wsadowe do wdrożenia pliku jpdl. Api JBPM wewnętrznie wstawia wartości do tabel JBPM4_XXX po pomyślnym wdrożeniu. Poniżej klasy użyłem do wdrożenia nowego pliku jpdl. Do przekazywania wartości nazwy i klucza jpdl użyłem zależności sprężynowej. Ostatecznie te kroki zadziałały pomyślnie.

public class JBPMDeploymentService extends BatchService { 

      /** 
      * Logger for Batch service 
      */ 
      protected static final Logger log = Logger.getLogger(NAPSJBPMDeploymentService.class); 

      private Map<String, String> jpdlMap = new HashMap<String, String>(); 

      private Map<String, String> procInstMap = new HashMap<String, String>(); 

      public void doService() throws NAPSBatchException 
      { 
       log.info("Entering into doService Method of JBPMDeploymentService ..."); 
       String approvalFlow = getJpdlFileType(); 

       String jpdlXML = getJPDLxml(approvalFlow); 

       String procInst = getProcessInstanceKey(approvalFlow); 

       // constructs the ProcessEngine 
       ProcessEngine processEngine = new Configuration().setResource("naps.jbpm.cfg.xml").buildProcessEngine(); 

       // retrieve the needed services 
       RepositoryService repositoryService = processEngine.getRepositoryService(); 
       ExecutionService executionService = processEngine.getExecutionService(); 



       repositoryService.createDeployment() 
       .addResourceFromClasspath(jpdlXML) 
       .deploy(); 
       //executionService.startProcessInstanceByKey(procInst); 

      } 

    /** 
     * @return the jpdlMap 
     */ 
     public Map<String, String> getJpdlMap() { 
      return jpdlMap; 
     } 

     /** 
     * @param jpdlMap the jpdlMap to set 
     */ 
     public void setJpdlMap(Map<String, String> jpdlMap) { 
      this.jpdlMap = jpdlMap; 
     } 

     /** 
     * @param jpdlKey 
     * @return jpdl xml name 
     */ 
     private String getJPDLxml(String jpdlKey) 
     { 
      return jpdlMap.get(jpdlKey); 
     } 

     /** 
     * @return the procInstMap 
     */ 
     public Map<String, String> getProcInstMap() { 
      return procInstMap; 
     } 

     /** 
     * @param procInstMap the procInstMap to set 
     */ 
     public void setProcInstMap(Map<String, String> procInstMap) { 
      this.procInstMap = procInstMap; 
     } 

     /** 
     * @param procInstKey 
     * @return process Instance key 
     */ 
     private String getProcessInstanceKey(String procInstKey){ 
      return this.procInstMap.get(procInstKey); 
     } 
} 
Powiązane problemy