Activiti组件介绍与API1Activiti组件介绍activiti项目由三种类型的组件组成,分别是:专用工具(DedicatedTools)、存储内容(St具oredContent)、协作工(CollaborationTool)。1.1专用工具(DedicatedTools)组件此类组件,包括(内容管理)Alfresco、建模器(ActivitiModeler)、设计器(ActivitiDesigner(Eclipseplugin))、管理及监控(Activitiprobe)、任务管理(ActivitiExplorer)五个工具组件。Alfresco—为Alfresco公司的企业级内容管理产品Alfresco是Alfresco公司的内容管理产品的名称(同时也是公司名称),它是一个开源的、企业级的内容管理系统,功能包括:文档管理、协作、记录管理、知识库管理、Web内容管理等功能。被infoWorld评为了2010年的最佳开源应用程序。现在Alfresco公司作为Activiti项目的主要赞助厂商,自然会将其内容管理产品与Activiti进行深入的集成。实际上流程中的所有资源,包括流程本身,都是被内容管理产品所管理的资源。ActivitiModeler—建模器Activiti建模器是基于开源的Signavio流程编辑器的一个定制版本,它提供了对BPMN2.0图形化规范的支持,建模后的流程以文件格式进行存储。在后端提供导入导出BPMN2.0流程定义文件的功能。此建模器的优点是,它是基于web浏览器的。其设计器界面如下图所示:ActivitiDesigner—Eclipse插件形式的设计器此组件提供了Eclipse的插件,可以使得开发人员,在Eclipse开发工具中,进行流程的建模。建模功能上与Signavio相同。Activitiprobe—管理及监控组件它是一个对流程引擎运行期实例提供管理及监控的web应用程序。包含部署的管理、流程定义的管理、数据库表的检视、日志查看、事务的平均执行时间、失败多次的工作等功能。其示意界面如下:这是一个对于数据库表记录的查看界面,基本上是一个demo级别的,没有多大意义。ActivitiExplorer—任务管理组件它是一个web的应用程序,提供任务管理功能和对基于历史数据的统计分析及流程实例的检查而产生的报表功能。如下图所示:1.2存储内容(StoredContent)组件此类组件包含:文档仓库(DocumentsRepository)、模型仓库(ModelRepository)、SVN仓库(SVNRepository)、MVN仓库(MVNRepository)、Activiti引擎(ActivitiEngine)。其中文档仓库、SVN仓库、MVN仓库三个组件是为协作工具(ActivitiCycle)提供底层的支撑。例如BPM开发过程中的文档,采用Alfresco文档仓库进行存储,采用SVN进行版本管理,采用MVN(maven)作为项目构建和管理工具。模型仓库(ModelRepository)实际上就是Activiti建模器的后端存储组件,它负责对Activiti建模器建模后的流程定义文件进行存储管理。ActivitiEngine—ActivitiBPM的核心引擎运行时核心组件,解析流程定义文件(.bpmn20.xml文件),将其转化为纯粹的内存Java对象,以供运行时各个功能使用;Activiti引擎,基于流程虚拟机(PVM)进行构建(关于PVM的详细介绍,参见8.1.2章节),是Activiti项目的绝对的底层核心组件。它可以直接运行原生的BPMN2.0规范格式的流程定义。是业内目前第一个,也是唯一的一个从建模到执行,完全按照BPMN2.0规范进行实现的BPM项目。这也是笔者选择它作为BPM开源产品介绍的最直接原因。Activiti引擎具备三个重要的特性。首先就是事件监听器。这个特性允许引擎可以直接执行一个动作(即为流程图中的某个特定的事件,定义的一段java代码或脚本)。这意味着,开发人员可以利用特定的技术细节来装饰完善一个流程,而这个细节不会在流程图中显示。此特性提高了业务人员与技术人员之间的协作,而业务人员不用面对流程图中的技术问题。第二个特性是定制活动。Activiti引擎实现了对BPMN的支持,有很多可直接使用的活动类型。但是业务人员仍旧有可能需要一些与这些已定义的活动不匹配的活动类型。在这种情景下,开发人员可以采用java代码编写一个定制的活动,用来实现业务人员所描述的复杂行为。这个功能应该说是非常好用的功能,因为对于商业产品来讲,活动类型都是定义好的。是一个封装的黑盒子,是不可能提供定制功能的。另一个创新的特性是,它提供了对某些冗长的BPMN规范进行实现的快捷方式或捷径。例如采用比BPMN的XML格式更紧凑的XML描述格式。而这种XML格式不是Activiti的专有扩展,它可以被转换为有效的BPMNXML。所以说,Activiti的流程定义,并不是百分百的BPMN的XML格式。1.3协作工具(CollaborationTool)组件ActivitiCycle完全是一种新类型的BPM组件。它是一个用来促进业务人员、开发人员和IT操作人员协作的web应用程序。目前,大多数的BPM产品都关注于怎样将业务人员创建的分析流程模型转换为可执行流程模型。实际的情况就是,这些BPM产品为业务人员和开发人员提供独立的工具,但是对于他们之间的协作并没有提供很好的支持。在现实的场景中,业务文档有业务人员所持有,而软件程序由开发团队所管理,被部署的软件应用则被IT管理人员所管理。三者之间不能很好的协作。我们可以想象这样一个场景,业务经理用文档来维护需求和visio格式的流程图,开发人员管理可执行的流程和大量的java源文件,IT维护人员管理部署在tomcat中的.war文件和存储在Activiti数据库中的流程。ActivitiCycle首先分为左右两个区域,左侧区域是所有交付物的浏览器,这些交付物存储在仓库中。包括:·一个网络驱动器,例如Vision图,图片,word文档,excel图表等;·一个业务模型仓库,例如Signavio建模器中包含的BPMN流程模型;·一个SVN仓库,包含java源文件和可执行的BPMN流程;·一个包含业务文档的maven仓库;·Activiti实例,包含一系列被部署的各个版本的交付组件;右侧区域,则分为上中下三个部分,分别是左侧选中交付物的具体明细(包含查看、设定所有人、增加关联链接)、工作区域和讨论区。现在业务分析员、开发人员和维护人员,可以在为他们自己提供的区域内,利用相关工具进行工作,而ActivitiCycle则负责组织他们的协作。2ActivitiAPI1.ProcessEngineprocessEngine=ProcessEngines.getDefaultProcessEngine();2.3.RuntimeServiceruntimeService=processEngine.getRuntimeService();4.RepositoryServicerepositoryService=processEngine.getRepositoryService();5.TaskServicetaskService=processEngine.getTaskService();6.ManagementServicemanagementService=processEngine.getManagementService();7.IdentityServiceidentityService=processEngine.getIdentityService();8.HistoryServicehistoryService=processEngine.getHistoryService();9.FormServiceformService=processEngine.getFormService();通过ProcessEngineBuilder读取activiti的配置文件,就可以生成流程引擎实例。通过流程引擎实例processEngine,我们就可以通过getXXXService()取得各种包含workflow/BPM方法的service。RepositoryService:提供方法获取各种流程和部署文件的信息.TaskService:提供对任务相关的各种操作identityService:管理用户和用户组。FormService:获取或者绑定数据到流程实例上RuntimeService:提供操作部署文件,流程文件和流程实例的方法.ManagementService:提供管理员对流程引擎的监控,和流程引擎服务应用无关。HistoryService:提供正在执行和过去执行的各种流程实例信息Activiti.cfg.xml文件内必须包含一个Id为’processEngineConfiguration’的bean。processEngineConfiguration对象可以通过解析xml文件得到也可以通过java代码得到ProcessEngineConfigurationprocessEngineConfiguration=ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();processEngineConfiguration.setJdbcDriver(com.mysql.jdbc.Driver);processEngineConfiguration.setJdbcUrl(jdbc:mysql://localhost:3306/activiti?autoReconnect=true);processEngineConfiguration.setJdbcUsername(root);processEngineConfiguration.setJdbcPassword(0000);processEngineConfiguration.setDatabaseSchemaUpdate(true);processEngineConfiguration.setJobExecutorActivate(false);ProcessEngineprocessEngine=processEngineConfiguration.buildProcessEngine();System.out.println(processEngine.toString());要根据你在build.*.properties文件指定的属性来创建数据的配置文件,在setup文件内运行antcfg.create,可以在setup/build/activiti.cfg内找到生成的配置文件。processEngine以及那些服务对象都是线程安全的。ProcessEngines.getDefaultProcessEngine()会在第一次被调用时初始并构建processengine,接下来对该方法的调用返回的都是同一个流程引擎。利用ProcessEngines.init()、ProcessEngines.destroy()可以正确创建、关闭流程引擎。流程初始化:xml文件中流程定义的id属性(这个id接下来可以通过RuntimeService的startProcessInstanceByKey方法来启动该流程定义的一个新流程实例。这个方法总是选取流程定义的最新部署版本)作为流程定义的key属性;xml文件中流程定义的name属性作为流程定义的name属性,如果不指定name属性,那么id属性作为name;带有特定key的流程第一次被部署时,被分配的版本号为1,同一key值的流程定义的后续部署,版本号会被设置为比当前最大的部署版本号大1的值,key属性用来区分流程定义;流程定义的id属性被设置