Как получить ProcessDefinition, используя jpdl для JBPM 4.4?
В моем проекте есть существующее определение old.jpdl.xml. Работает нормально. Теперь я хочу запустить другое определение new.jpdl.xml. После развертывания файла ear я попытался прочитать new.jpdl.xml, используя новый ProcessDefinitionId с помощью приведенного ниже кода.
Я считаю, что мне не хватает шагов развертывания. Может кто-нибудь подсказать мне, как развернуть или прочитать 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 ответ
Решение
Я создал пакетное задание для развертывания файла jpdl. API JBPM внутренне вставляет значения в таблицы JBPM4_XXX после успешного развертывания. Ниже класс я использовал для развертывания нового файла jpdl. Для передачи значений имени и ключа jpdl я использовал пружинную зависимость. Наконец эти шаги сработали успешно.
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);
}
}