page contents

Java JBPM 入门教程

本文讲述了Java JBPM 入门教程!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2023-07-LTHeiON464a4c9b272c3c.png本文讲述了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>


效果图:

attachments-2023-07-jzPDUlh464a4c926018eb.png

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Java编程语言,推荐大家关注一个微信公众号:Java圈子。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Java入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2023-03-2AoKIjPQ64014b4ad30a3.jpg

  • 发表于 2023-07-05 09:39
  • 阅读 ( 148 )
  • 分类:Java开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1300 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章