jbpm开发手册内容摘要:

ransition to=distribute document / /start state name=distribute document / start name=plan transition to=make planning / /start state name=make planning / /group /process 下面的场景将在有足够的时间的时候执行: MapString, Object variables = new HashMapString, Object()。 (time, plenty)。 ProcessInstance pi = executionService .startProcessInstanceByKey(GroupMultipleEntries, variables)。 assertNotNull((distribute document))。 下面的场景将在没有足够的时间的时候执行: MapString, Object variables = new HashMapString, Object()。 (time, running out)。 ProcessInstance pi = executionService .startProcessInstanceByKey(GroupMultipleEntries, variables)。 assertNotNull((make planning))。 . group同步 这个场景演示了,一个 group 如何用来创建同步流程。 当一个流程到达一个group,每个没有进入转移的活动都会被启动。 所以第一个活动不一定是开始活动。 group 会通过默认转移退出, 当所有包含的工作都已经完成的时候。 图 . group 同步实例流程 process name=GroupConcurrency xmlns= start transition to=evaluate project / /start group name=evaluate project start transition to=distribute document / /start state name=distribute document transition to=collect feedback / /state state name=collect feedback transition to=document finished / /state end name=document finished / start transition to=make planning / /start state name=make planning transition to=estimate budget / /state state name=estimate budget transition to=planning finished / /state end name=planning finished / transition to=public project announcement / /group state name=public project announcement / /process 下面的场景会演示的是, 所有的等待 state 活动通过一种随机次序被 signal, 直到所有所有的工作都完成: ProcessInstance pi = executionService .startProcessInstanceByKey(GroupConcurrency)。 String documentExecutionId = pi .findActiveExecutionIn(distribute document).getId()。 String planningExecutionId = pi .findActiveExecutionIn(make planning).getId()。 pi = (documentExecutionId)。 assertNotNull((collect feedback))。 assertNotNull((make planning))。 pi = (planningExecutionId)。 assertNotNull((collect feedback))。 assertNotNull((estimate budget))。 pi = (planningExecutionId)。 assertNotNull((collect feedback))。 pi = (documentExecutionId)。 assertNotNull((public project announcement))。 . group秘密 group 也可以让你在 group 边界创建转移。 所以有可能让一个转移从一个 group外部的活动 直接连接到 group 内部, 不用使用 group 边界上的开始活动。 也可以让 group 内部的活动直接连接到 group 外部的活动。 但是 shhhhhhhhh。 不要告诉任何人,因为这是不符合 BPMN 的。 . 规则发布器 规则发布器是一个 jBPM 和 Drools 之间方便的集成方式。 它创建了一个KownledgeBase 基于所有的 .drl 文件, 包含在业务归档部署文件里。 KnowledgeBase 会被保存在资源缓存里。 所以一个 KnowledgeBase 是被维护正在内存的 processenginecontext 中。 像是 rules decision 活动需要 依赖这个 KnowledgeBase。 . java 活动 java 活动的目标一般是用来调用一个 java 方法, 就像在用户手册里说的那样。 开发指南里的这一章 特别介绍如何使 用 java 活动 调用 ejb 会话 bean。 特别对于这个目的,可能要使用到 ejbjndiname 属性。 它的名字对应的属性指定了 ejb 的 jndi 名称, 这是需要调用方法的 ejb。 参考下面的 ejb: package。 import。 @Stateless public class CalculatorBean implements CalculatorRemote, CalculatorLocal { public Integer add(Integer x, Integer y) { return x + y。 } public Integer subtract(Integer x, Integer y) { return x y。 } } 和下面的流程定义: 图 . The ejb method invocation example process process name=EJB start transition to=calculate / /start java name=calculate ejbjndiname=CalculatorBean/local method=add var=answer argint value=25//arg argint value=38//arg transition to=wait / /java state name=wait / /process 如你所期待的,执行这个节点会调用 ejb 的 add 方法, ejb 对应在CalculatorBean/local 这个 jndi 名称下。 结果会被保存在 变量 answer 中。 实例在下面的测试代码中。 public void testEjbInvocation() throws Exception { String executionId = executionService .startProcessInstanceByKey(EJB) .getProcessInstance() .getId()。 assertEquals(63, (executionId, answer))。 } . rulesdecision 活动 rulesdecision 是一个自动活动,它会选择一个外向转移, 基于规则的执行。 rulesdecision 的规则会被作为业务归档的一部分进行发布。 那些规则可以在规则定义中使用所有流程变量作为全局变量。 ruledecision 活动会使用无状态的知识会话 在 knowledgebase 之上。 execution 到达 rulesdecision 就会运行在无状态的 drools 知识会话之上。 让我们参考下一个例子,了解实际中它是如何工作的。 我们会启动这个RulesDecision 流程。 图 . 规则决策示例流程 process name=RulesDecision start transition to=isImportant / /start rulesdecision name=isImportant transition name=dunno to=analyseManually / transition name=important to=processWithPriority / transition name=irrelevant to=processWhenResourcesAvailable / /rulesdecision state name=analyseManually / state name=processWithPriority / state name=processWhenResourcesAvailable / /process 下面的 会被包含在 业务归档发布包中。 global amount。 global product。 global oute。 rule LessThen3IsIrrelevant when eval(amount 3) then (irrelevant)。 end rule MoreThen24IsImportant when eval(amount 24) then (important)。 end rule TwelveTempranillosIsImportant when eval(product == Tempranillo) eval(amount 12) then (important)。 end 首先你看到 amount 和 product 都已经定义为全局变量。 那些会被rulesdecision 处理, 使用期待的名称获取流程变量。 oute 是一个特殊的全局变量, 它用来确定最终会使用哪个转移。 而且,如果规则没有指定 oute,就会使用默认的转移。 所以,让我们启动一个新流程实例,然后设置两个变量 product 和 amount,使用指定的值 shoe 和 32: MapString, Object variables = new HashMapString, Object()。 (amount, 32)。 (product, shoe)。 ProcessInstance processInstance = (RulesDecision, variables)。 在启动流程实例方法返回之后, 流程实例会到达 processWithPriority 简单来说,一个新的 RulesDecision 流程实例。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。