在我的项目中,有一个现有的old.jpdl.xml定义。一切正常。
现在,我想运行另一个new.jpdl.xml定义。
部署耳文件后,我尝试在以下代码的帮助下使用new 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;
    }

最佳答案

我创建了一个批处理作业以部署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);
        }
}

09-11 17:26