题
我过程中使用的定义,语言的使用从Boss工作流程的发动机:jBPM.
我想整合一个非常简单 过程 定义图:基本上,我有一个主要处理定义(simple/processdefinition.xml),包括:
- 一开始节点,
- 一工艺国家节点,
- 结束节点。
在这里的定义是图:
<process-definition
xmlns="urn:jbpm.org:jpdl-3.2"
name="simple">
<start-state name="start">
<transition name="to_state" to="process-state">
<action name="action" class="com.sample.action.MessageActionHandler">
<message>
Going to the sub-state!
</message>
</action>
</transition>
<event type="node-leave">
<action class="com.sample.action.MessageActionHandler">
<message>
Start.
</message>
</action>
</event>
</start-state>
<process-state name="process-state">
<sub-process name="subsimple" binding="late"/>
<variable access="read,write" name="message" mapped-name="message"> </variable>
<event type="node-enter">
<action class="com.sample.action.MessageActionHandler"></action>
</event>
<transition to="end" name="to_end"></transition>
</process-state>
<end-state name="end">
<event type="node-enter">
<action class="com.sample.action.MessageActionHandler">
<message>
End.
</message>
</action>
</event>
</end-state>
</process-definition>
在工艺国家节点我定义的一个 子的过程 图(subsimple/processdefinition.xml)含有:
- 一开始节点,
- 一个国家节点,
- 结束节点。
在这里的定义是图:
<process-definition
xmlns="urn:jbpm.org:jpdl-3.2"
name="subsimple">
<start-state name="start">
<transition name="to_state" to="first">
<action name="action" class="com.sample.action.MessageActionHandler">
<message>Going to the first state!</message>
</action>
</transition>
<event type="node-leave">
<action class="com.sample.action.MessageActionHandler">
<message>
Start.
</message>
</action>
</event>
</start-state>
<state name="first">
<event type="node-enter">
<action class="com.sample.action.MessageActionHandler">
<message>
In first state !!
</message>
</action>
</event>
<transition name="to_end" to="end">
<action name="action" class="com.sample.action.MessageActionHandler">
<message>
About to go out of sub-process !
</message>
</action>
</transition>
</state>
<end-state name="end">
<event type="node-enter">
<action class="com.sample.action.MessageActionHandler">
<message>
End.
</message>
</action>
</event>
</end-state>
</process-definition>
这里是的 ActionHandler 分配给每一个活动和过渡:
public class MessageActionHandler implements ActionHandler {
private static final long serialVersionUID = 1L;
String message;
public void execute(ExecutionContext context) throws Exception {
context.getContextInstance().setVariable("message", message);
System.out.println(context.getContextInstance().getVariable("message"));
}
}
最终,这里是的 主要的类 从我开始整个过程:
public class testJBPM {
public static void main(String[] args) {
ProcessDefinition processDefinition = ProcessDefinition
.parseXmlResource("simple/processdefinition.xml");
// Create an instance of the process definition.
ProcessInstance instance = new ProcessInstance(processDefinition);
// Move the process instance from its start state to the first state.
instance.signal();
// Move the process instance to the end state.
instance.signal();
}
}
当我阅读Boss论坛上,我确定 binding=late
在分过程结合在主要流程定义。然后我试着不同的方式来instanciate的过程定义的子的过程,但我总是得到以下的例外时,试图进入国家/次过程中的节点:
Exception in thread "main" org.jbpm.JbpmException: can't create a process instance when processDefinition is null
at org.jbpm.graph.exe.ProcessInstance.<init>(ProcessInstance.java:128)
at org.jbpm.graph.exe.ProcessInstance.<init>(ProcessInstance.java:92)
at org.jbpm.graph.exe.Token.createSubProcessInstance(Token.java:624)
at org.jbpm.graph.node.ProcessState.execute(ProcessState.java:164)
at org.jbpm.graph.def.Node.enter(Node.java:319)
at org.jbpm.graph.def.Transition.take(Transition.java:151)
at org.jbpm.graph.def.Node.leave(Node.java:394)
at org.jbpm.graph.node.StartState.leave(StartState.java:70)
at org.jbpm.graph.exe.Token.signal(Token.java:195)
at org.jbpm.graph.exe.Token.signal(Token.java:140)
at org.jbpm.graph.exe.ProcessInstance.signal(ProcessInstance.java:271)
at com.sample.main.testJBPM.main(testJBPM.java:21)
任何人都可以得到我的建议就如何管理分处理定义和使用?
解决方案
我最终找到一种方法通过自己:
第一,只有一个
instance.signal();
必要的冲动整个进程的线索main()
.然后,一个接口,将实施以允许jBPM搜索和instanciate所需要的子程序:
public class DbSubProcessResolver implements SubProcessResolver { private static final long serialVersionUID = 1L; public ProcessDefinition findSubProcess(Element subProcessElement) { String name = subProcessElement.attributeValue("name").replaceAll( "\\.", ""); ProcessDefinition subProcessDefinition = ProcessDefinition .parseXmlResource(name + "/processdefinition.xml"); return subProcessDefinition; } }
最终,jBPM配置文件已被指定地图的jBPM框架内解决程序的实施之一:
<jbpm-configuration> <bean name="jbpm.sub.process.resolver" class="com.sample.resolver.DbSubProcessResolver" /> </jbpm-configuration>
...它工作好了!
不隶属于 StackOverflow