javajbossjbpmjpdl

How to get ProcessDefinition using jpdl for JBPM 4.4?


In my project there is an existing old.jpdl.xml definition. It is working fine. Now I want to run another new.jpdl.xml definition. After deployment of ear file I tried to read new.jpdl.xml using new ProcessDefinitionId with help of below code.

I believe that I am missing deployment steps. Can someone guide me, how to deploy or read 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;
    }

Solution

  • I created a batch job to deploy jpdl file. JBPM api internally inserts the values into JBPM4_XXX tables after successful deployment. Below class I have used to deploy the new jpdl file. For passing values of jpdl name and key, I have used spring dependency. Finally these steps worked successfully.

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