本文讲述了Java JBPM 入门教程!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:
JBPM (Java Business Process Management),业务流程管理,是 Jboss(现已被 Redhat 收购)旗下的开源工作流引擎,是覆盖了业务流程管理,工作流,服务协议等领域的一个开源的,灵活的,易扩展的可执行流程语言框架。主要解决一些复杂,易变化等工作流程问题。
工作流介绍(workflow)
工作流就是工作需要遵循一定流程,需要经过层层节点,级别才能完成的。它有三个要素:a. 这个过程要做什么,这是事情的主题;b. 要经过多少个步骤,这是这类事情的特点;c. 每个步骤都由谁来做,做什么,怎么做,这是事情节点的内容。例如一些物资的审批问题,请假的审批问题,需要经过多道关卡才能完成事,JBPM 会使其变的非常简单。当然了解决工作流的问题,不仅仅有 JBPM,还有 OSWorkFlow, 国内的普元工作流等。
再来看一下工作流的理论知识吧,当然这个不仅仅 JBPM 是这样,所有的工作流工具都是用的这些知识,所以还是非常核心的。
流程定义(ProcessDefinition)
基于有向图对业务进行描述,图是由节点(活动)和转移(Transition)构成的,节点是有类型的,节点的类型决定了到达该节点做的事情,不同的节点做的事情不一样,转移描述了一个流向或路径,转移表示了 from … to .. 的关系。这里相当于我们创建了一个类。
流程实例(ProcessInstance)
流程实例就是流程定义的具体化,一个流程定义会有多个流程实例,相当于对上边的类进行了实例化。
流程变量(Process variable)
流程变量保存了上下文信息,流程变量采用 Map 结构存储,采用键值对的方式,流程变量是流程实例的一部分,流程变量的生命周期是随着流程实例的消亡而消亡的,流程变量的值在此流程中的任何节点都可以读取和修改(和 ThreadLocal 类似)。
任务节点(Task)
当流程到达该节点将会创建任务实例(TaskInstance)分别分配给参与者,(只要有人参与活动,一般就使用任务节点,因为要分配给人处理)。
起始节点(Start)
流程定义中必须有一个起始节点,而且只能有一个。
结束节点(End)
流程定义中可以没有结束节点,也可以有多个结束节点。
决策节点(Decision)
决策节点是由流程自动决策的,不需要人为干预,该节点相当于 if…else... 决策节点可以嵌入 Java 代码或使用脚本语言进行判断。
分支节点(Fork)
将一个路径可以分解为多个并发的子路径(并发任务,会签),只有所有的子路径到达联合节点(Join),主路径才会继续执行事件(Event),当流程离开、到达某个节点或执行转移的时候,都会触发事件的。
其实细细想想,这些东西和 UML 中的活动图的画法是非常类似 ActivityDiagram 的,就连那些画图的图表都是类似的。
流程图样例
Xml:
<?xml version="1.0" encoding="UTF-8"?>
<process name="Physical" xmlns="http://jbpm.org/4.4/jpdl">
<start g="275,57,48,48" name="开始">
<transition g="-71,-17" name="to 填写体检表" to="填写体检表"/>
</start>
<task g="256,141,92,52" name="填写体检表">
<assignment-handler class="com.test.jbpm.assignTask.SetUserTask">
</assignment-handler>
<transition to="fork"/>
</task>
<fork g="275,217,80,40" name="fork">
<assignment-handler class="com.test.jbpm.assignTask.SetUserTask">
</assignment-handler>
<transition g="455,242:-71,-17" name="to 内科体检" to="内科体检"/>
<transition g="170,243:-71,-17" name="to 外科体检" to="外科体检"/>
</fork>
<task g="124,278,92,52" name="外科体检">
<assignment-handler class="com.test.jbpm.assignTask.SetUserTask">
</assignment-handler>
<transition g="170,380:-47,-17" name="to join" to="join"/>
</task>
<end g="283,614,48,48" name="结束"/>
<task g="409,277,92,52" name="内科体检">
<assignment-handler class="com.test.jbpm.assignTask.SetUserTask">
</assignment-handler>
<transition g="455,378:-71,-17" name="to join" to="join"/>
</task>
<join g="281,357,80,40" name="join">
<assignment-handler class="com.test.jbpm.assignTask.SetUserTask">
</assignment-handler>
<transition to="回收体检表"/>
</join>
<task g="261,454,92,52" name="回收体检表">
<assignment-handler class="com.test.jbpm.assignTask.SetUserTask">
</assignment-handler>
<transition g="-71,-17" name="to 自动打印体检报告" to="自动打印体检报告"/>
</task>
<task g="260,533,92,52" name="自动打印体检报告">
<assignment-handler class="com.test.jbpm.assignTask.SetUserTask">
</assignment-handler>
<assignment-handler class="com.test.jbpm.assignTask.AutoTask">
</assignment-handler>
<transition g="-71,-17" name="to 结束" to="结束"/>
</task>
</process>
效果图:
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
想高效系统的学习Java编程语言,推荐大家关注一个微信公众号:Java圈子。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Java入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!