Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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;
    }
like image 391
Adeeb Cheulkar Avatar asked Oct 20 '22 12:10

Adeeb Cheulkar


1 Answers

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);
        }
}
like image 141
Adeeb Cheulkar Avatar answered Nov 01 '22 11:11

Adeeb Cheulkar