아는 사람 Activiti 워크 플로우

I. 배경

  이 회사는 최근 프로젝트 연구와 고객의 초점은 주로이 있음을 발견했을 때, 감옥 프로젝트 AB 도어 시스템을받은 대부분의 기능은 AB 문 프로세스에서 프로젝트 승인 프로세스 및 문서 흐름 상태입니다. 이 회사의 주요 사업은 공정 제어를위한 코드를 사용하여 상태 표에 공정에 설정된 후, 그냥이 프로젝트를 기반으로하기 전에 통합 과정에서 문제의 통합 프로세스의 프레임 워크와 지식에 기록 된 프로젝트에 워크 플로우 프레임 워크를 통합됩니다.

두, jBPM을 가진 Activiti 비교

  선택은 시장 점유율과 jBPM을 주로 Activiti에있어서, 워크 플로를 겪고있다. 이 경우, 우리는 프로젝트가 처음 소개 된 이후, 주요 고려 사항은 지역 사회에보다 적극적이고 문제에 직면 할 때 늦은 확장, 두 개의 프레임 워크 중 하나를 선택합니다.

기술 구성 요소 활동 jBPM을
ORM 프레임 워크 Mybatis3 Hibernate3은
지속성 표준 아니오 EJB JPA 사양
트랜잭션 관리 MyBatis로 봄 통합 업무 / 제공 Bitronix / JTA 기반 트랜잭션 관리
데이터베이스 연결 JDBC / 데이터 소스 JDBC / 데이터 소스
봄 지원 자연 지원 Spirng 기본값은 봄에 대한 지원을 제공하지 않습니다
지원되는 데이터베이스 오라클 / SQLServer에 / MySQL을 / H2 / 메모리 데이터베이스 오라클 / SQLServer에 / MySQL을 / 메모리 데이터베이스
디자인 패턴 명령 모드 / 관찰자 모드 아니오
내부 통신 서비스 룸 서비스 API 호출 아파치 미나에 따라 비동기 통신
통합 인터페이스 SOAP / 뮬 / 편안하고 소식 통신
지원되는 형식 프로세스 BPMN2 / XPDL / JPDL 等 만 BPMN2 XML을 지원합니다
핵심 엔진 PVM 프로세스 가상 머신 Drools가
기술 이전 jBPM3 / jBPM4 Drools가 흐름
플러그인 도구 IDEA의 actiBPM / 이클립스 이클립스 디자이너 / 제공 Activit 탐색기 기반의 REST 스타일 이클립스 플러그인 애플리케이션 관리 및 웹을 제공
업데이트주기 에 대해 게시 두 달마다 한 번 때때로

 

  프레임 워크는 5,6,7 Activiti 몇 가지 다른 버전, 안정성 및 지역 사회에 따라하는 프로젝트로, 우리가 Activiti6.X을 선택 워크 플로우 위의 프로젝트 요구 사항에 따라, 우리는 Activiti을 선택했습니다.

셋째, 워크 플로 파운데이션

3.1 어떤 시간 BPM

  비즈니스 프로세스 관리의 약어입니다 BPM 비즈니스 프로세스 관리. 포괄적 인 관리의 측면을 통합하는 비즈니스 기업의 다양한 달성하기 위해 설정됩니다. BPM은 논리적으로 관련 활동의 집합입니다, BPM이 먼저 진화 워크 플로우 및 엔터프라이즈 애플리케이션 통합에 의해 통합 된, 그것은 종이없는 사무실의 요구를 충족하는 것이 었습니다.

3.2 워크 플로우 라이프 사이클

  다섯 가지 주요 단계의 완벽한 워크 플로우 수명주기 :

  1. 정의 : 프로세스 정의는, 모든 프로세스는 항상 처음부터 정의된다. 주요 작업은 요구 사항을 수집하고 프로세스 정의로 변환하는 것입니다.

  2, 게시 : 자원의 흐름, 주요 작업 흐름 정의 파일 / 사용자 지정 양식 / 듣기 작업 등의 플랫폼에 정의 된 후 개발자는 포장 및 해제됩니다.

  3 수행 : 프로세스 엔진이 상기 정의 된 경로 비즈니스에 의해 수행되는 프로세스의 특정 흐름에 따라.

  4. 모니터링 각 태스크의 수집 결과는 다른 처리 결과에 따라 수행 될 것이다.

  5, 최적화 : 비즈니스 프로세스가 완료 이번에는 필요성은 프로세스 또는 재 설계를 최적화하는 것입니다.

어떤 시간 BPMN 3.3

  즉, 2011 년에 2.0으로 발행 된 비즈니스 프로세스 모델링 표기법, 조직에 의해 게시 BPMN 표준이라는 비즈니스 프로세스 모델링 표기법 짧은, 후에는 일반적으로 시장에서이 버전의 규격을 사용한다.

  BPMN이 흐름도에 기초하여 정의 비즈니스 클래스 기술 흐름도 절단 작업의 그래픽 모델을 작성하면서 업무 처리를 행한다. 즉 비즈니스 프로세스 모델 그래픽 오브젝트 네트워크 다이어그램 포함하는 제어 활동을 처리하고 조작 순서를 정의.

네, Activiti 소개

4.1 Activiti 무엇입니까

  Activiti은 비즈니스 사용자, 개발자, 시스템 관리자 경량 워크 플로우 비즈니스 관리 플랫폼을 대상으로, 그 핵심은 빠른 자바 개발, 안정적인 BPMN2.0 프로세스 엔진의 사용이다. 서버, 클러스터, 클라우드 서비스 : Activiti 같은 자바 프로그램의 모든 유형에서 실행할 수있는 라이센스 ApacheV2에 따라 배포됩니다. 완벽하게 봄과 통합 Activiti, 미니멀 한 디자인을 기반으로 작성됩니다.

4.2 Activiti 기능

  1, 데이터 지속성 : Activiti 디자인은 빠르고, 간단하고있다. 일반적으로 시스템의 병목 현상은 주로 Activiti는 MyBatis로를 사용하기로 결정이 상황에, 명령은 최적의 SQL 문을 통해 실행, 대화 형 애플리케이션과 데이터베이스에 반영됩니다.

  2, 엔진 서비스 인터페이스 : 체인 API 프로그래밍 스타일을 지원하면서 Activiti 엔진, 일곱 서비스 인터페이스 ProcessEngine 통해 사용할 수 있습니다 제공합니다.

서비스 인터페이스 효과
RepositoryService , 삭제, 배포 자원의 흐름을 읽어와 같은 창고 프로세스를 관리하기위한 창고 서비스를 처리
IdentifyService 신원 서비스, 사용자 관리 및 그룹 사이의 관계를 조회 할 수 있습니다
RuntimeService 런타임 서비스, 핸들 인스턴스를 실행하는 모든 작업 및 프로세스 등
TaskService 태스크 서비스는 같은 수신, 처리 및 기타 등의 쿼리 작업을 관리하기위한 할당
FormService 양식 서비스, 독서 및 작업 프로세스 관련 양식 데이터에 대한
HistoryService 역사 서비스, 모든 기록 데이터를 찾을 수 있습니다
ManagementService 엔진 관리 서비스 및 특정 비즈니스 관련이 가능한 쿼리 엔진 구성, 데이터베이스 및 기타 작업

 

  3, 프로세스 디자이너 : Activiti 팀 설계를 기반으로 BPMN2.0 사양 디자이너 -eclipse 디자이너, 또한이 Signavio 회사는 Activiti Activiti 모델러 웹 기반 프로세스 디자이너를 사용자 정의합니다.

  (4), 봄에 대한 기본 지원 : 현재의 사업 개발은 기본적으로 인해 봄의 Activiti 기본 지원에, 자신의 시스템을 개발하기 위해 스프링을 기반으로합니다, 봄은 그렇게 쉽게 통합 될 수있다.

  5, 런타임 및 이력 데이터 분리 : 필요한 경우 운영 및 히스토리 데이터의 분리, 성능 데이터는 실행 시간을 단축 할 수 있습니다, 히스토리 데이터, 우리는 질의에 갔다.

4.3 Activiti 응용 프로그램

  1, 시스템 통합 : 규칙 엔진과 ESB / 통합 통합 / 기존 플랫폼 (프로젝트도 요구를) 포함

  다른 제품에 사용되는 2 : 기업 애플리케이션에서 프레스코의 ECM 제품은 주로 문서 관리 / 협력 / 기록 관리 / 지식 관리 / 웹 콘텐츠 관리와 관련된.

4.4 Activiti 프레임 조립체

  가장 중요한 것은, Activiti 엔진 외부 도구와 구성 요소에 추가됩니다.

모델링 Runtion 조치
활동 모델러 Activiti 엔진 활동 Exproler
디자이너 활동 자산 나머지
Activiti 킥 스타트

 

  다음으로, 상기 구성 요소는 간략하게 설명된다 :

  1, Activiti 엔진 : 코어 모듈 BPMN2.0 사양의 분석 / 실행 / 생성 / 관리 기능을 제공합니다 (작업 - 프로세스 인스턴스) / 검색어 기록 및 보고서 등을 생성합니다.

  2, Activiti 모델러 : 모델 디자이너, 비 Activiti 개발. 요구 사양 프로세스 정의를 변환하십시오.

  3, Activiti 디자이너 : 디자이너의 Activiti 모델러 기능과 유사.

  4, Activiti Exproler : 창고 / 사용자 / 그룹을 관리하는 등 공정 / 작업 핸들을 시작하기 위해.

  5 Activiti REST : 클라이언트가 JSON REST API와 방식에 엔진을 상호 작용할 수 있습니다 제공하는 REST 스타일의 서비스는, 계약은 크로스 플랫폼 / 크로스 언어를 가지고있다.

다섯째, 빌드 및 테스트 개발 환경 Activiti

5.1 다운로드 Activiti

  Activiti에서 그것을 압축 해제 다운로드 버전 6.0, 우리는 디렉토리 구조를 설명 할 수 있습니다.

  1, 데이터베이스 : "activiti [데이터베이스 유형]으로 명명, Activiti 엔진 / 삭제 / SQL 스크립트의 세 가지 유형을 업그레이드 테이블이 포함 된 폴더 생성 [스크립트 유형이 생성 | 드롭 | upgradestep] [기타] .... "SQL 업그레이드 스크립트는 xx.to.yy.를 포함

  2, 문서 :이 디렉토리의 javadoc (개발 문서) / 사용 설명서 (프로세스 정의 방식과 관련) (사용 설명서) / XSD를 포함

  3、libs:包含Activiti引擎的各个模块包。

  4、wars:一些可以独立运行的项目,用来熟悉Activiti操作。activiti-explorer.war / activiti-rest.war。

5.2 配置环境

  1、安装JDK并配置环境变量。

  2、安装Ant

  3、安装Maven

  以上三个环境的安装方法到对应官方网站下载安装包,并按照官方文档说明来安装。

5.3 配置文件介绍

  1、Activiti配置文件,我们首先开看一个标准的Activiti配置文件内容。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4   xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd">
 5 
 6   <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
 7    <property name="databaseType" value="h2" />
 8    <property name="databaseSchemaUpdate" value="true" />
 9    <property name="jobExecutorActivate" value="false" />
10    <property name="history" value="full" />
11   </bean>
12 
13 </beans>

  对Spring熟悉的同学一看该配置文件就知道这是一个普通的Spring配置文件,从这也可体现出Activiti对Spring的原生支持。

  关于相关的配置见下图:

  2、Maven配置,在Maven项目的pom文件中引入依赖

<dependency>
  <groupId>org.activiti</groupId>
  <artifactId>activiti-engine</artifactId>
  <version>6.0.0</version>
</dependency>

5.4 一个简单的实例

  下面我们就使用一个请假流程来对Activit做简单的实战。由请假人发起,部门领导审批,完成。

  首先我们需要创建流程图:

  这就是流程图设计器的界面,流程设计总是从start开始且只有一个入口,总是由End结束可有多个结束。中间就是任务、结果、流程线等,关于各个节点后续再做介绍,基于此流程图我们来看看代码时如何实现的。

 1 /**
 2  * 该实例测试简单流程包含审批和审批结果
 3  * @throws Exception
 4  */
 5 @Test
 6 public void testStartProcess2() throws Exception {
 7     // 1 创建流程引擎,使用内存数据库
 8     ProcessEngine processEngine = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration().buildProcessEngine();
 9 
10     // 2 部署流程定义文件
11     RepositoryService repositoryService = processEngine.getRepositoryService();
12 //        String bpmnFileName = "leave2.bpmn";
13     String bpmnFileName = "leave2.bpmn.xml";
14     repositoryService.createDeployment().addInputStream("leave2.bpmn", this.getClass().getClassLoader().getResourceAsStream(bpmnFileName)).deploy();
15 
16     // 3 验证已部署的流程定义
17     ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult();
18     assertEquals("leave2", processDefinition.getKey());
19 
20     // 4 启动流程并返回流程实例
21     RuntimeService runtimeService = processEngine.getRuntimeService();
22 
23     Map<String, Object> variables = new HashMap<>();
24     variables.put("applyUser", "employee1"); //申请人名称
25     variables.put("days", 3); //请假天数
26 
27     ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave2", variables);
28     assertNotNull(processInstance);
29     System.out.println("pid=" + processInstance.getId() + ", pdid=" + processInstance.getProcessDefinitionId());
30 
31     TaskService taskService = processEngine.getTaskService();
32     Task deptLeaderTask = taskService.createTaskQuery().taskCandidateGroup("deptLeader").singleResult(); //查询deptLeader组未签收的任务
33     assertNotNull(deptLeaderTask);
34     assertEquals("领导审批", deptLeaderTask.getName());
35     taskService.claim(deptLeaderTask.getId(), "leaderUser"); //签收此任务归用户leaderUser所有
36 
37     variables = new HashMap<>();//.clear(); //处理结果
38     variables.put("approved", true); //设置审批通过
39 
40     taskService.complete(deptLeaderTask.getId(), variables); //设置审批结果
41 
42     deptLeaderTask = taskService.createTaskQuery().taskCandidateGroup("deptLeader").singleResult(); //由于任务已经完成,此时查询任务应该为空
43     assertNull(deptLeaderTask);
44 
45     // 获取历史记录
46     HistoryService historyService = processEngine.getHistoryService();
47     long count = historyService.createHistoricProcessInstanceQuery().finished().count(); //已经完成的流程实例数
48     assertEquals(1, count);
49 }

  运行结果:

1 pid=4, pdid=leave2:1:3
2 applyUser:employee1, days:3, approval:true

추천

출처www.cnblogs.com/chuanqi1415583094/p/12198180.html