MyBatisActiviti工作流

 1.Activiti与jbpm对比

MyBatis 1

Activiti5以Spring进行发动机配置与各个Bean的保管,综合应用IoC和AOP技术,使用CXF作为Web
Services实现的根底,使用MyBatis进行底层数据库ORM的管住,预先提供Bundle化包会于容易的与OSGi进行集成,通过和Mule
ESB的合并与针对性表服务(Web
Service、RESTful等)的接口可以构建完善的SOA应用;jBPM5使用jBoss.org社区的多数零件,以Drools
Flow为主干组件作为流程引擎的主干构成,以Hibernate作为数据持久化ORM实现,采用基于JPA/JTA的不过插拔的持久化和事情控制标准,使用Guvnor作为流程管理仓库,能够和Seam、Spring、OSGi等并。

内需指出的凡Activiti5是在jBPM3、jBPM4的底蕴及提高而来之,是原jBPM的继承,而jBPM5尽管与事先的jBPM3、jBPM4没有最好死关系,且舍弃了中重视的PVM(流程虚拟机)思想,转而挑选jBoss自身产品Drools
Flow作为流程引擎的中心实现,工作流最为关键之“人机交互”任务(类似于审批走)则是因为独立的同块“Human
Task Service”附加到Drools Flow上贯彻,任务的询问、处理等表现经Apache
Mina异步通信机制形成。

上下对比:

从技术结合来拘禁,Activiti最充分之优势是利用了PVM(流程虚拟机),支持除了BPMN2.0标准以外的流程格式,与外表服务来绝妙的合力量,延续了jBPM3、jBPM4良好的社区支撑,服务接口清晰,链式API更为优雅;劣势是持久化层没有以JPA规范。

 jBPM最老的优势是采取了Apache
Mina异步通信技术,采用JPA/JTA持久化方面的正规化,以功能齐全的Guvnor作为流程仓库,有RedHat(jBoss.org于红帽收购)的专业化支持;但其劣势也异常扎眼,对己技术依赖过窘迫且目前只支持BPMN2。

 2.Activiti简介

 ①Activiti介绍

    Activiti 作为一个遵循 Apache
许可的工作流和业务流程管理起来源平台,其基本是冲 Java 的超快速、超稳定的
BPMN 2.0 流程引擎,强调流程服务之可嵌入性和而扩展性

 ②逻辑结构设计 (Activiti运用到的表都是ACT_开头的。)

ACT_RE_*:

  ‘RE’表示repository(存储),RepositoryService接口所操作的阐发。带此前缀的阐发包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。

    ACT_RU_*:

      ‘RU’表示runtime,运行时表-RuntimeService。这是运作时之阐发存储方流程变量,用
 户任务,变量,职责(job)等运行时的数目。Activiti只存储实例执行中
的周转时数,当流程实例结束时,将去除这些记录。这就保证了这些运行时的表小且快。

   ACT_ID_*:

      ‘ID’表示identity
(组织机构),IdentityService接口所操作的申。用户记录,流程中行使及之用户与组。这些发明包含标识的信,如用户,用户组,等等。

   ACT_HI_*:

      ‘HI’表示history,历史数据表,HistoryService。就是这些发明包含着流程实行之历史有关数据,如结束的流程实例,变量,任务,等等

   ACT_GE_*:

全局通用数据与安装(general),各种情形还利用的多寡。

 3.eclipse上安装插件

  在help>Install New
Software>add

    添加上Activiti BPMN 2.0
designer – http://activiti.org/designer/update/

 4.Activiti核心API介绍

  ①.ProcessEngine (activiti核心的API是ProcessEngine类,其他具备的好像都是出于外只要来)

      RepositoryService(部署流程定义): Activiti
中各一个不等版本的业务流程的定义都待采取一些概念文件,部署文件和支持数据
( 例如 BPMN2.0 XML 文件,表单定义文件,流程定义图像文件等
),这些文件还存储在 Activiti 内建的 Repository 中。Repository Service
提供了针对 repository 的存取服务。

      RuntimeService(执行管理,包括启动,查询,删除流程定义):在 Activiti
中,每当一个流程定义为启动同不善后,都见面变卦一个遥相呼应的流程对象实例。Runtime
Service
提供了开行流程、查询流程实例、设置获取流程实例变量等效果。此外其还提供了针对流程安排,流程定义跟流程实例的存取服务。

      TaskService(用于管理流程任务,可以从夫看似中取任务之音讯):在 Activiti
中业务流程定义着之各级一个行节点被叫作一个
Task,对流程中之数存取,状态变更等操作都用在 Task 中得。Task
Service 提供了针对用户 Task 和 Form
相关的操作。它提供了运行时任务查询、领取、完成、删除以及变量设置等功能。

       IdentityService(组织部门管理):Activiti
中置了用户与组管理的功用,必须利用这些用户以及组的音信才能够获得到对应的
Task。Identity Service 提供了对 Activiti 系统被的用户以及组的管住效能。

       ManagementService:Management Service 提供了针对性
Activiti
流程引擎的治本暨维护功能,这些意义不在工作流驱动之应用程序中采取,主要用来
Activiti 系统的平凡保护。

       HistoryService(记录工作流程的历史记录,包含流程变量查询,流程查询,流程实施对象查询):
History Service 用于取正在运作或早已成功的流程实例的信息,与 Runtime
Service
中取的流水线信息不同,历史信息包含已持久化存储的万古信息,并就被针对查询优化。

        FormService(任务表单管理): Activiti
中之流程及状态 Task 均可以提到业务有关的数码。通过采用 Form Service
可以存取启动和得任务所需要的表单数据而根据需要来渲染表单。

 MyBatis 2

 

②ProcessDefinition(流程定义对象)

   可以起这个近乎吃获资源文件等等

③ProcessInstance(流程定义之履行实例)

     代表流程定义之实施实例,一个流水线实例包含这一个流水线方面的具备的节点,那么我们得透过这个近乎获取到全方位工艺流程中时抱有信息,一个流水线实例表示一个流水线从开到了之无比老流程分支,即一个流水线就来一个流水线实例。

④Execution

activiti中因故这目标描述流程实施的诸一个节点。在未曾起的动静下,Execution即为ProcessInstance。流程按流程定义的平整执行同一不好的长河就可以表示执行对象Execution。

查看源代码即可发现,ProcessInstance集成了Execution。

以单线流程中Execution即为ProcessInstance,但是在起情况,即产生分支流程的状下,每一样长达流程就闹一个Execution了。

总结:

   * 一个流水线中,流程实行对象(Execution)可以来差不多只,但是流程实例对象(ProcessInstance)只能发出一个。

   * 当流程按流程定义之平整仅实行同一浅的当儿,流程实施对象(Execution)即为流程实例对象(ProcessInstance)。

 5.Activiti Demo

1>创建流程引擎对象 

    ProcessEngine processEngine = ProcessEngineConfiguration   

            .createProcessEngineConfigurationFromResource(“activiti.cfg.xml”)   

          .buildProcessEngine();   

2>部署流程定义

    RepositoryService repositoryService = processEngine.getRepositoryService();   

3>创建流程实例            

RuntimeService runtimeService = processEngine.getRuntimeService(); 

4>部署相关的流水线安排  

repositoryService.createDeployment()   

             .addClasspathResource(“Interview.bpmn”)   

              .deploy(); 

5>获取流程实例  

 String procId = runtimeService.startProcessInstanceByKey(“流程ID”).getId();

6>获取任务

TaskService taskService = processEngine.getTaskService();

①//取人力资源部组或者只要操作的职责  

 List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup(“人力资源部”).list();

for (Task task : tasks) {

    //设置张三代办 claim it   

       taskService.claim(task.getId(), “张三”); 

 //审核张三时的收获的天职数  

 tasks = taskService.createTaskQuery().taskAssignee(“张三”).list();   

 for (Task task : tasks) {    

        //张三行任务 

         taskService.complete(task.getId());   

  }   

或者  

②//获取张三可能要操作的职责 

List<Task> tasks taskService.createTaskQuery().taskAssignee(“张三”).list();

 for (Task task : tasks) {    

        //张三推行任务 

         taskService.complete(task.getId());   

  }  

7>HistoryService historyService = processEngine.getHistoryService();

    HistoricProcessInstance historicProcessInstance = historyService

            .createHistoricProcessInstanceQuery()

            .processInstanceId(processId).singleResult();

    //流程结束时间

    historicProcessInstance.getEndTime();

网站地图xml地图