如何使用JBpd 4.4的jpdl获取ProcessDefinition?

时间:2015-05-01 17:29:23

标签: java jboss jbpm jpdl

在我的项目中有一个现有的old.jpdl.xml定义。它工作正常。 现在我想运行另一个new.jpdl.xml定义。 在部署了ear文件之后,我尝试使用新的ProcessDefinitionId在下面的代码的帮助下阅读new.jpdl.xml。

我相信我缺少部署步骤。有人可以指导我,如何部署或阅读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;
    }

1 个答案:

答案 0 :(得分:3)

我创建了一个批处理作业来部署jpdl文件。成功部署后,JBPM api会在内部将值插入JBPM4_XXX表中。我在类下面用过部署新的jpdl文件。为了传递jpdl名称和键的值,我使用了spring依赖。 最后,这些步骤成功运作。

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