2015-05-01 4 views
5

In meinem Projekt gibt es eine bestehende old.jpdl.xml-Definition. Es funktioniert gut. Jetzt möchte ich eine andere new.jpdl.xml-Definition ausführen. Nach der Bereitstellung der EAR-Datei habe ich versucht, new.jpdl.xml mit neuer ProcessDefinitionId mit Hilfe von unten Code zu lesen.Wie bekomme ich ProcessDefinition mit jpdl für JBPM 4.4?

Ich glaube, dass ich Deployment-Schritte vermisse. Kann mir jemand sagen, wie man new.jpdl.xml bereitstellt oder liest?

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

Es scheint, als würde Ihre Frage hier nicht viele Ansichten bekommen. Sie können versuchen, im [Offiziellen JBPM-Forum] (https://developer.jboss.org/en/jbpm/content) Fragen zu stellen. – Mike

+0

Hallo Mike, ich habe die Lösung dieses Problems. Danke für die Hilfe. Ich werde dieses Forum für andere Fragen verwenden. –

Antwort

3

Ich erstellte einen Stapeljob, um jpdl-Datei bereitzustellen. JBPM api fügt die Werte nach erfolgreicher Bereitstellung intern in JBPM4_XXX-Tabellen ein. Unterhalb der Klasse habe ich die neue jpdl-Datei deployt. Für die Übergabe der Werte von jpdl name und key habe ich die Federabhängigkeit verwendet. Schließlich funktionierten diese Schritte erfolgreich.

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); 
     } 
} 
Verwandte Themen