网站备案成功后怎么弄,网站引流推广怎么做,开发一个简单的小程序,推广搜索引擎http://wenku.baidu.com/view/bb7364ad4693daef5ff73d32.html 1. 初识Activiti 1.1. 工作流与工作流引擎 工作流#xff08;workflow#xff09;就是工作流程的计算模型#xff0c;即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其… http://wenku.baidu.com/view/bb7364ad4693daef5ff73d32.html 1. 初识Activiti 1.1. 工作流与工作流引擎 工作流workflow就是工作流程的计算模型即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行从而实现某个预期的业务目标或者促使此目标的实现”。我的理解就是将部分或者全部的工作流程、逻辑让计算机帮你来处理实现自动化 所谓工作流引擎是指workflow作为应用系统的一部分并为之提供对各应用系统有决定作用的根据角色、分工和条件的不同决定信息传递路由、内容等级等核心解决方案。 例如开发一个系统最关键的部分不是系统的界面也不是和数据库之间的信息交换而是如何根据业务逻辑开发出符合实际需要的程序逻辑并确保其稳定性、易维护性和弹性。 比如你的系统中有一个任务流程一般情况下这个任务的代码逻辑、流程你都要自己来编写。实现它是没有问题的。但是谁能保证逻辑编写的毫无纰漏经过无数次的测试与改进这个流程没有任何漏洞也是可以实现的但是明显就会拖慢整个项目的进度。 工作流引擎解决的就是这个问题如果应用程序缺乏强大的逻辑层势必变得容易出错信息的路由错误、死循环等等。 1.2. BPMN2.0规范 BPMNBusiness Process Model and Notation--业务流程模型与符号。 BPMN是一套流程建模的标准主要目标是被所有业务用户容易理解的符号支持从创建流程轮廓的业务分析到这些流程的最终实现知道最终用户的管理监控。 通俗一点其实就是一套规范画流程模型的规范。流程模型包括流程图、协作图、编排图、会话图。详细信息请google。 1.3. Activiti概述 1.3.1. Activiti由来 学习过Activiti的朋友都知道Activiti的创始人也就是JBPM也是一个优秀的BPM引擎的创始人从Jboss离职后开发了一个新的BPM引擎Activiti。所以Activiti有很多地方都有JBPM的影子。所以据说学习过JBPM的朋友学起Activiti来非常顺手。 由于本人之前没有工作流及JBPM的相关基础刚开始学习Activiti的时候可以说是无比痛苦的根本不知道从何下手这里也建议大家先进行工作流及BPMN2.0规范的学习有了一定的基础后再着手学习Activiti。 1.3.2. Activiti简介 Activiti是一个开源的工作流引擎它实现了BPMN 2.0规范可以发布设计好的流程定义并通过api进行流程调度。 Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台其核心是基于 Java 的超快速、超稳定的 BPMN2.0 流程引擎强调流程服务的可嵌入性和可扩展性同时更加强调面向业务人员。 Activiti 流程引擎重点关注在系统开发的易用性和轻量性上。每一项 BPM 业务功能 Activiti 流程引擎都以服务的形式提供给开发人员。通过使用这些服务开发人员能够构建出功能丰富、轻便且高效的 BPM 应用程序。 1.4. 文档说明 以上部分对工作流、BPMN、Activiti的概念做了一个简单的介绍目的是了解Activiti究竟是什么能做些什么…及在学习Activiti之前需要了解的知识与技术。其中大部分文字来自Copy网上的各种资料与文档通过总结而来的。具体的更详细的内容需自己google参考一些官方的文档与手册。 本文档之后内容如下 1) 下载与使用 2) 核心组件与说明 3) 入门示例 4) Eclipse中的Activiti插件的使用 本文档旨在为初学Activiti的朋友提供入门级别的参考不会对其原理及其结构进行深层次的探究更多是因为目前自身理解还不是很透彻只是为大家理清思路方便以后更深层次的学习。本文档还有一个重要的特点那就是根据自己看官方手册的经验教大家如何看手册从而更有效率由于是初学很多术语或解释难免理解有偏差所以一定要看官方提供的文档与手册那才是学习的最佳途径 2. 开始学习 2.1. 必要的准备 2.1.1. 下载与了解目录 下载Activiti下载路径也就是官方网站的地址http://activiti.org/download.html。下载后解压我所使用的是5.12版本的Activiti更新速度飞快几乎每两个月就会有一个更新的小版本看到如下目录 1) database里面存放的是Activiti使用到的数据库信息的sql文件它支持的数据库类型如下图使用时只需执行你自己的数据库类型的文件即可。如你的数据库是mysql那么就执行activiti.mysql.create.*.sql即可。 2) docs毫无疑问api文档是也。 3) libs使用Activiti所需要的所有的jar包和源文件。 4) wars官方给我们提供的示例Demo通过使用Demo可以更加快速的了解Activiti。 2.1.2. 其他准备 使用Activiti首先当然要有jdk了6版本就可以了。其次要有一款IDE我们当然会使用Eclipse这里使用Juno版本。然后web容器当然也要有这里使用Tomcat6.0版本。然后就是Activiti的Eclipse插件了这个后面再介绍。 2.1.3. 一分钟入门见用户手册 所谓的一分钟入门就是通过运行你下载的包里的wars文件夹里的activiti-explorer.war文件以便更快的了解Activiti。将文件拷贝至Tomcat的webapps目录启动tomcat输入http://localhost:8080/activiti-explorer。然后你就可以开整了总算是有一点微小的进展了。 这里需要说明的就是这个Demo默认采用的是h2内存数据库如果想用你自己的数据库就需要修改web应用WEB-INF/classes目录下的db.properties。然后按上面说的把database里的create文件夹里的数据库文件导入你自己的数据库如果没有修改db.properties就不用导入了。 Demo的具体解释与数据库配置的具体信息详见官方手册手册已经说的很清楚了。这里需要重点了解activiti.cfg.xml的配置以及如何构建ProcessEngine配置文件构建方式、代码构建方式。 对Demo的使用介绍在官方文档的后面才开始介绍这里建议应用跑起来之后先自己试试手可看后面介绍Demo如何使用的章节看看如何跑一个流程、整个流程是怎么流的、并随时关注数据库表里的数据的变化等对以后的学习很有帮助 2.2. 核心组件介绍 2.2.1. 关键对象 1. Deployment流程部署对象部署一个流程时创建。 2. ProcessDefinitions流程定义部署成功后自动创建。 3. ProcessInstances流程实例启动流程时创建。 4. Task任务在Activiti中的Task仅指有角色参与的任务即定义中的UserTask。 5. Execution执行计划流程实例和流程执行中的所有节点都是Execution如UserTask、ServiceTask等。 2.2.2. 服务接口 1. ProcessEngine流程引擎的抽象通过它我们可以获得我们需要的一切服务。 2. RepositoryServiceActiviti中每一个不同版本的业务流程的定义都需要使用一些定义文件部署文件和支持数据(例如BPMN2.0 XML文件表单定义文件流程定义图像文件等)这些文件都存储在Activiti内建的Repository中。RepositoryService提供了对 repository的存取服务。 3. RuntimeService在Activiti中每当一个流程定义被启动一次之后都会生成一个相应的流程对象实例。RuntimeService提供了启动流程、查询流程实例、设置获取流程实例变量等功能。此外它还提供了对流程部署流程定义和流程实例的存取服务。 4. TaskService: 在Activiti中业务流程定义中的每一个执行节点被称为一个Task对流程中的数据存取状态变更等操作均需要在Task中完成。TaskService提供了对用户Task 和Form相关的操作。它提供了运行时任务查询、领取、完成、删除以及变量设置等功能。 5. IdentityService: Activiti中内置了用户以及组管理的功能必须使用这些用户和组的信息才能获取到相应的Task。IdentityService提供了对Activiti 系统中的用户和组的管理功能。 6. ManagementService: ManagementService提供了对Activiti流程引擎的管理和维护功能这些功能不在工作流驱动的应用程序中使用主要用于Activiti系统的日常维护。 7. HistoryService: HistoryService用于获取正在运行或已经完成的流程实例的信息与RuntimeService中获取的流程信息不同历史信息包含已经持久化存储的永久信息并已经被针对查询优化。 现在至少要知道有这些对象和接口。并结合Activiti Api这一章节来看你就会对部署流程、启动流程、执行任务等操作有一个基本的概念。之后编写一个简单的单元测试主要为了测试activiti.cfg.xml配置的是否正确流程是否可以被部署即可。 至于与Spring的集成一定要熟悉基于Spring配置Activiti以及事务的处理。 3. 入门示例参考手册中10分钟教程 3.1. 概述 下面开始编写一个示例。这个Demo为一个“月度报表申请”流程。由“sales(销售)”组的用户制作月度报表提交给“management(经理)”组的用户经理审批该报表最后结束。流程图如下 这个Demo完成之后我们会进行两个测试。一个是代码中的单元测试就是跑一遍流程看一下流程在跑的过程中输出的信息一个是我们将编辑好的bpmn20.xml文件通过我们之前一分钟入门的示例activiti-explorer应用导入进去查看它的流程图并完整执行一遍流程。 在编写这个Demo之前至少要了解Activiti与Spring如何集成、XxxService各自的任务与作用并完成上一章的Demo。 3.2. 流程文件xxx.bpmn20.xml 首先我们就来编写这个流程的bpmn20.xml文件。 definitions iddefinitions targetNamespacehttp://activiti.org/bpmn20 xmlns:activitihttp://activiti.org/bpmn xmlnshttp://www.omg.org/spec/BPMN/20100524/MODEL process idfinancialReport nameMonthly financial report reminderprocess startEvent idtheStart / sequenceFlow idflow1 sourceReftheStart targetRefwriteReportTask / userTask idwriteReportTask nameWrite monthly financial report documentation Write monthly financial reportfor publication to shareholders. /documentation potentialOwner resourceAssignmentExpression formalExpressionsales/formalExpression /resourceAssignmentExpression /potentialOwner /userTask sequenceFlow idflow2 sourceRefwriteReportTask targetRefverifyReportTask / userTask idverifyReportTask nameVerify monthly financial report documentation Verify monthly financial reportcomposed by the accountancy department. This financial report is goingto be sent to all the company shareholders. /documentation potentialOwner resourceAssignmentExpression formalExpressionmanagement/formalExpression /resourceAssignmentExpression /potentialOwner /userTask sequenceFlow idflow3 sourceRefverifyReportTask targetReftheEnd / endEvent idtheEnd / /process /definitions 这里对部分代码进行解释。 1) 文件的开头部分这里的id对于Activiti来说 应该叫做key。创建流程实例时会根据此id来得到这个流程。 2) 开始流程。 3) 顺序流就是连接各个节点的指向线 sourceRef和targetRef分别为起始节点和目标节点。 4) 描述用户任务 id为该用户任务的标识。 documentation为该用户任务的描述。 5) 分配用户 可以把任务分配给指定的用户也可以分配给指定的组并且可以有多个详见用户手册。 3.3. Spring配置文件 这里配置了数据源、事务管理、流程引擎及几个必要的xxxService。这里数据源使用的是dbcp。数据库信息就配置成你自己本地数据库的信息如果不会配置。 bean iddataSource classorg.apache.commons.dbcp.BasicDataSource destroy-methodclose property namedriverClassName valuecom.mysql.jdbc.Driver / property nameurl valuejdbc:mysql://localhost:3306/activiti/ property nameusername valueroot/ property namepassword valueroot/ property nameinitialSize value20 / property namemaxActive value50/ property namemaxIdle value20/ property nameminIdle value10/ /bean bean idtransactionManager classorg.springframework.jdbc.datasource.DataSourceTransactionManager property namedataSource refdataSource/property /bean bean idprocessEngineConfiguration classorg.activiti.spring.SpringProcessEngineConfiguration property namedataSource refdataSource / property nametransactionManager reftransactionManager / property namedatabaseSchemaUpdate valuetrue / property namejobExecutorActivate valuefalse / /bean bean idprocessEngine classorg.activiti.spring.ProcessEngineFactoryBean property nameprocessEngineConfiguration refprocessEngineConfiguration / /bean bean idrepositoryService factory-beanprocessEngine factory-methodgetRepositoryService / bean idruntimeService factory-beanprocessEngine factory-methodgetRuntimeService / bean idtaskService factory-beanprocessEngine factory-methodgetTaskService / bean idhistoryService factory-beanprocessEngine factory-methodgetHistoryService / bean idmanagementService factory-beanprocessEngine factory-methodgetManagementService / tx:annotation-driven transaction-managertransactionManager / 注bpmn20.xml文件中用到了两个用户组sales、management是因为我们启动Tomcat运行activiti-explorer应用初始化时自动就会往数据库里添加一些数据其中用户组的表中就会添加几条记录其中就包括这两个组所以不用管它怎么来的总之数据库里有这两个组就对了。而应用默认使用的是内存数据库服务一停止数据也就没有了。所以为了进行单元测试需要按前面讲的修改数据库配置的方法 把activiti-explorer应用的数据库配置改成你自己的本地数据库的信息我使用的是Mysql数据库。再启动tomcat运行应用目的就是为了让数据库有数据这时你的本地数据库就有数据了可以编写测试用例进行单元测试了。 3.4. 编写测试用例 1) 读取Spring配置文件注入流程所需的Service 2) 编写测试方法 Test public void monthtest() { // 部署流程定义 repositoryService.createDeployment().addClasspathResource(myProcess.bpmn20.xml).deploy(); // 启动流程实例 String procId runtimeService.startProcessInstanceByKey(financialReport).getId(); // 获得第一个任务 ListTask tasks taskService.createTaskQuery().taskCandidateGroup(sales).list(); for (Task task : tasks) { System.out.println(Following task is available for sales group: task.getName()); // 认领任务这里由foozie认领因为fozzie是sales组的成员 taskService.claim(task.getId(), fozzie); } // 查看fozzie现在是否能够获取到该任务 tasks taskService.createTaskQuery().taskAssignee(fozzie).list(); for (Task task : tasks) { System.out.println(Task for fozzie: task.getName()); // 执行(完成)任务 taskService.complete(task.getId()); } // 现在fozzie的可执行任务数就为0了 System.out.println(Number of tasks for fozzie: taskService.createTaskQuery().taskAssignee(fozzie).count()); // 获得第二个任务 tasks taskService.createTaskQuery().taskCandidateGroup(management).list(); for (Task task : tasks) { System.out.println(Following task is available for accountancy group: task.getName()); // 认领任务这里由kermit认领因为kermit是management组的成员 taskService.claim(task.getId(), kermit); } // 完成第二个任务结束流程 for (Task task : tasks) { taskService.complete(task.getId()); } // 核实流程是否结束,输出流程结束时间 HistoricProcessInstancehistoricProcessInstance historyService.createHistoricProcessInstanceQuery() .processInstanceId(procId).singleResult(); System.out.println(Process instance end time: historicProcessInstance.getEndTime()); } 3) 运行示例Demo完成。这就是一个最简单的流程通过这个流程了解到Activiti中流程是怎么流的我们怎么控制它。 3.5. 导入activiti-explorer 1) 单元测试完成后我们可以将该bpmn20.xml文件导入之前我们部署的activiti-explorer应用中点击流程的流程设计工作区点击导入将刚才我们编写的文件导入进去。 2) 导入之后在右上角点击部署。 3) 在已部署流程定义中我们可以看到这个流程及它的流程图。 4) 点击启动流程该流程就会被启动再点击任务中列队就会有该任务了而且是分配给sales的这正是我们定义流程时所分配给的用户组啊。注意现在只有sales组的用户才可以看到此任务 5) sales组的用户进入之后点击“签收”该任务就分配给该用户了然后该用户就可以进行处理也就是在代办任务和受邀里。 6) 进去之后点击完成任务该任务就流到下一个节点也就是流转到management组中去了要由management组的用户去处理。 7) 于是这时候队列中management组就有一个新的任务了等待management组的成员来“签收”并完成任务。该流程也就结束了。 8) 此时就可以查看历史任务了就是我们这里的“已归档”。用户完成的任务会在这里显示。 这就是整个Demo的编写、测试过程。这样一个小小的流程基本能够体现出Activiti的功能及使用方法。 4. Eclipse中的Activiti插件 Activiti有一个Eclipse插件Activiti Eclipse Designer可用于图形化建模、测试、部署 BPMN 2.0的流程。这样就不用我们自己去编写繁琐的流程文件了。具体安装方法见手册。 4.1. 安装 打开 Help- Install New Software.在如下面板中 , 点击 Add 按钮, 然后填入下列字段: Name: Activiti BPMN 2.0 designer Location: http://activiti.org/designer/update/ 然后一步步的安装就可以了。 4.2. 使用 至于如何使用文档中介绍的非常详细这里基于我初次使用的经验强调几点 1) 安装之后将“保存bpmn文件时创建图片文件”勾选上。这样你每次保存bpmn文件时会为你自动创建图片文件。 2) 节点的所有属性可在properties控制台中设置。 3) 在使用设计器之前先去钻研BPNM2.0规范吧了解BPNM结构可参看用户手册才能画出符合逻辑且完美的流程图。 该例为使用Activiti Eclipse Designer设计的“请假”流程图。