5

私のプロジェクトには、既存の old.jpdl.xml 定義があります。正常に動作しています。次に、別の new.jpdl.xml 定義を実行します。ear ファイルをデプロイした後、以下のコードを使用して 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;
    }
4

1 に答える 1

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);
        }
}
于 2015-05-05T17:28:10.493 に答える