jboss jbpm30相关资料综合概述_第1页
jboss jbpm30相关资料综合概述_第2页
jboss jbpm30相关资料综合概述_第3页
jboss jbpm30相关资料综合概述_第4页
jboss jbpm30相关资料综合概述_第5页
已阅读5页,还剩94页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JBoss jBPM 3.0 Workflow and BPM 实践 目录 Chapter1.介绍第一章:介绍第一章:介绍JBoss jBPM 是一个复杂的可扩展的工作流管理系统. JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,自动操作等等.把这些操作绑在一起, JBoss jBPM 就有了最强大和易扩展性的控制流机制. JBoss jBPM 只有最小的倚赖性可以很容易的作为java库来使用.当然它也可以用在吞吐量极为关键的J2EE 群应用服务器环境中. JBoss jBPM 可以同任何数据库配置可以部署在任何应用服务器上. 1.1.综述核心工作流和BPM 功能被封状作为一个简单的Java库.这个库包括在jBPM数据库中存储,更新和检索流程信息的服务 Figure1.1.JBoss jBPM 组件一览 1.2.JBoss jBPM新手工具箱 新手工具箱是包含了jBPM所有组件包在一个可下载的包里. 这个包包括: jbpm-server , 预先配置的jboss 应用服务器. jbpm-designer , jBPM流程图形化设计器的eclipse插件 . jbpm-db ,jBPM 数据库兼容包 (参看下面). jbpm , 核心jbpm组件包括库和本手册. jbpm-bpel ,JBoss jBPM BPEL 扩展参考. 预配置的JBoss 应用服务器有下列安装组件: 核心jBPM 组件 , 打包作为JBoss服务档案 一个包括所有jBPM 表格的完整数据库 : 默认的 hypersonic 数据库包含所有的jBPM表格和已经定义的流程. jBPM 控制台web应用程序 这个可以用来为jBPM管理员. jBPM调度程序 所有定时器的执行. 调度程序在新手工具箱里配置成了一个servlet.这个Servlet会为产生一个线程来监视每个定时器的执行. 一个流程例子 已经发布进了jBPM 数据库. 1.3.JBoss jBPM 图形化流程设计器 JBoss jBPM 也包括一个图形化的流程设计工具. 这个设计器是用来创作商业流程的 JBoss jBPM 图形设计器是一个Eclipse插件. 独立安装版本的设计器工具已经在开发路线图里了. 图形化设计工具最重要的特性是它同时支持业务分析员和技术开发人员. 这样就可以在业务流程建模和实际执行之间平滑转换. 插件可用做为本地的update site(Eclipse 纯粹的zip文件),用做符合Eclipse软件更新机制的安装包. 当然你也可以把它展开到你的Eclipse的安装目录. 1.4.JBoss jBPM核心组件 JBoss jBPM 核心组件是纯粹的Java(J2SE)软件,来处理流程定义和运行时的流程实例执行. JBoss jBPM 是一个Java库. 因此,它可以用在任何java环境比如web 应用程序,Swing应用程序,EJB,Web Service等等. jBPM 库可以被打包作为sateless session EJB(无状态会话EJB). 这可以用做集群的发布具有极高的吞吐量可伸缩性. 无状态会话EJB根据J2EE 1.3规范重新写过所以可以发布到任何应用服务器上. JBoss jBPM 核心组件被打包成一个简单的Java库文件.依赖你所使用的功能性,库 jbpm-3.0.jar及一些相关的第三方的库比如 . hibernate, dom4j 等等.这些相关性在有清晰的描述永久性方面, jBPM内部使用hibernate. 除了传统的O/R 映射外, hibernate也分析不同数据库系统的SQL方言 ,这使jBPM在当前所有的数据库上都可以移植. JBoss jBPM API 可以从项目中任意编写的Java软件访问,比如Web应用程序,EJB,或web Service组件,消息bean或其他java组件. 1.5.JBoss jBPM控制台web应用程序 jBPM 控制台web应用程序是为两个目的服务的.首先,它作为流程执行运行时间任务生成的中央用户接口. 其次, 它也是一个管理和监视控制台允许检查和操作运行中的流程实例. 1.6.JBoss jBPM 身份组件 JBoss jBPM可以集成进任何包含公司用户和组织信息的目录. 对项目来说从那里得到组织信息组件不是容易得到的, JBoss jBPM就包含这个组件. 身份组件使用的模型比通常的servlet,ejb和门户模型跟富有. 更多信息可参考1.7.JBoss jBPM调度程序 JBoss jBPM 调度程序是用来监视和运行已经计划到时执行流程的定时器的组件. 定时器组件被打包在核心jbpm库中, 但是它需要被发布到下面的任一环境中: 要不你把调度程序Servlet来产生监视线程或者就必须用独立的JVM来调用调度程序的main方法. 1.8.JBoss jBPM 数据库兼容包 JBoss jBPM 数据库兼容包包括所有支持数据库的相关信息,JDBC驱动程序和数据库初始化脚本. 1.9.JBoss jBPM BPEL扩展 JBoss jBPM BPEL扩展是独立的扩展包用来支持BPEL(Business Process Execution Language 商业流程执行语言). BPEL的基本要素是 xml Scripting语言用来写其他web server的web services. JBoss jBPM 3.0 第二章:开始 第二章 开始第二章 开始本章将带你如何获得JBoss jBPM的第一步并且提供立即运行的初始提示 .2.1.下载包一览下面是当前可用的不同jBPM包清单. 这些包中的每一个都包含一个或多个可下载的文件. 同这些文件一起的包含一个描述它的内容及相关安装的指示 所有下面下载的描述都可以在.上找到2.1.1.jBPM 3这是主要的发行包,包括了主要核心引擎和数个额外的你使用jBPM的时候可能用得上的包.下载这个包的文件从..新手工具箱如果你想尽快开始运行jBPM,那么这就是你想下载的文件.工具箱包含了所有jBPM的模块以及图形化的设计工具在一个单独下载的文件里名字为: jbpm-starters-kit-.zip. 展开这个压缩文件到目录下阅读readme.html 获取更多信息.有了这个工具箱,你可以立即开始进入..核心引擎和身份组件下载文件名为jbpm-.zip 包含jBPM 核心引擎也包含角色和组管理的身份组件. 开始工作前, 展开文件到一个目录下,然后 jbpm-文件夹下找到包含重要的参考信息的readme.html文件.数据库扩展如果你想改变jBPM的默认数据库( Hypersonic HSQLDB), 你需要下载这个包.文件名为jbpm-db-.zip 包含你改变数据库需要的各种资源. 包含, 数据库建立脚本, hibernate 属性文件及数据库JDBC驱动程序. 如何操作的步骤包含在 readme.html 文件里,它在你展开这个压缩包的最上层的目录下.2.1.2.jBPM 流程设计器The second package contains the downloads related to the jBPM Graphical Proces Designer. The designer enables you to author your process definitions and to easily deploy them. You can find these downloads.The designer is a plug-in for the Eclipse platform which is available for download either as a zipped Eclipse feature or as a zipped Eclipse update site. There is no difference in content, the only difference is in the way you have to do the installation..Eclipse 更新站点If you want to be absolutely sure that the designer installation goes smoothly, we recommend to use the update site mechanism together with a new Eclipse installation. Of cource the Eclipse version should match the downloaded update site archive. To obtain the Process Designer Update Site, you should download the file jbpm-gpd-site-.zip. Then follow the instructions in the readme.html file included in the archives root folder to succesfully install the GPD..Eclipse 特性If you are tired of each time having to do a fresh Eclipse installation and you are willing to cope with some possible issues, you can try the feature download. In this case installation is as easy as extracting the archive into your Eclipse installation (make sure the included plugins and features folders end up in the same location of your Eclipse installation) overwriting the files and folders with the same name that are possibly already present. This installation is very easy, but you could run into incompatibility issues when you overwrite plugins already present in your installation because of other features that you did install. Though they have the same name it could happen that the versions of these colliding plugins are not equal, hence the possible incompatibilities. Download the file jbpm-gpd-feature-.zip to obtain the GPD feature. The installation instructions are repeated in the readme.html file.2.1.3.jBPM BPEL 扩展第三个也是最后一个包包含jBPM BPEL 扩展. 它只包含一个文件: jbpm-bpel-.zip. 你可以找到这个包.要开始BPEL扩展,在doc目录下找到Users Guide .2.2.JBoss jBPM 项目号码簿 : JBoss is the company that backs this project with professional support, training and consultancy services. user guide: is the document youre reading and serves as the main entry point into the project. : description of the downloadables : sourceforge download page for jBPM : get in contact with the community, ask questions and discuss jBPM : extra information, mostly provided by the community : for submitting bugs and feature requests : shows what to expect in the next versions : mailing lists are used for announcements javadocs: part of the download in the doc/javadoc directory. : the details of how to get the jBPM sources from CVS2.3.公开的CVS访问另外,你可以通过JBoss jBPM cvs服务器 得到jBPM服务器的信息如下 Connection type: pserver User: anonymous Password: Host: Port: 2401 (which is the default) Repository path: /cvsroot/jbpm Label: :pserver::/cvsroot/jbpm第三章.讲座第三章.讲座这个讲座将展示如何建造一个jpdl和如何使用API的方法来管理运行时的执行.这个讲座的方式是解释一系列的例子. 每个例子将集中关注特别的主题和额外的说明. 这些例子可以在jBPM包的examples目录下找到.最好的方法就是学着来建立一个Project实验所给的例子.eclipse 用户注意:下载jbpm-3.0-version.zip并且解压缩到系统.然后从菜单 File - Import. - Existing Project into Workspace.点 Next 然后浏览jBPM根目录然后点击 Finish. 现在你的有了jbpm 3 project了. 你可以发现这个讲座目录在目录 src/java.examples/. . 你打开这些例子后,可以运行它们Run - Run As. - JUnit TestjBPM 包括一个图形设计器来产生例子中的XML. 你可以从这里下载和学习有关图形设计器的说明3.1.Hello World 例子一个流程 是有一个定向图(directed graph)来定义,由节点和变换组成. hello world流程有3个节点.如下看如何组合起来, 我们先开始一个简单的流程不使用图形设计器. 下面的图形表示hello world 流程: Figure3.1. hello world 流程图public void testHelloWorldProcess() / 这个方法展现流程定义和流程执行的定义 / 流程定义有3个节点. / 一个未命名的开始状态start-state,一个状态 s / 一个结束状态名字为end. / 下面行解析一个xml text为一个ProcessDefinition对象(流程定义) / ProcessDefinition 把流程定义形式描述为java对象 ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( + + + + + + + + ); / 下一行建立了一个流程执行定义. /在构造后,流程执行有一个主要的执行路径 / (= root token 根令牌) 此时位置在start-state处 ProcessInstance processInstance = new ProcessInstance(processDefinition); / 在构造后流程执行有一个主要的执行路径 / (= roottoken 根令牌) . Token token = processInstance.getRootToken(); / 构造后, 位置处于流程定义执行路径start-state的位置 assertSame(processDefinition.getStartState(), token.getNode(); / 现在开始流程执行,离开start-state 结束默认的转换(transition) token.signal(); / 这个signal方法将会阻塞直到流程执行进入 wait 状态 / 流程执行在状态s 进入第一个 等待状态 / 因此执行主路径现在位置在 状态s assertSame(processDefinition.getNode(s), token.getNode(); / 我们再送另外一个信号signal. 这将继续执行离开状态s 结束默认的转换(transition) token.signal(); / 现在信号signal方法将返回,因为流程实例到达了end-state 结束状态 assertSame(processDefinition.getNode(end), token.getNode();3.2.数据库例子jBPM一个基本的特性是当流程处于等待状态时候可以把流程执行 永久化到数据库中 . 下一个例子想你展示了如何存储一个流程实例到jBPM数据库中. 例子给出一个将会发生的上下文.分开的方法用来建立不同部分的用户代码. 比如一部分用户代码在web 应用程序中开始一个流程并永久化执行到数据库中.然后,message drive bean从数据库中载入流程实例并继续它的执行 jBPM 永久化的更多内容可以参看.public class HelloWorldDbTest extends TestCase / 我们在每个应用程序中需要一个JbpmSessionFactory. 因此我们把它放在一个静态变量中 / JbpmSessionFactory 在test 方法中来建立一个 JbpmSessions. static JbpmSessionFactory jbpmSessionFactory = JbpmSessionFactory.buildJbpmSessionFactory(); static / 因为HSQLDBin-memory数据库是干净的数据库, / 在我们开始测试前,我们需要建立table. / The next line creates the database tables and foreign key / constraints. jbpmSessionFactory.getJbpmSchema().createSchema(); public void testSimplePersistence() / 在3个方法调用下面方法中间,所有数据被写入数据库 / 在单元测试中,这3个方法被正确执行在每个方法之后 / 因为我们想完成测试流程场景 / 但在实际中这些方法代表着server不同的请求 / 因为我们开始的数据库是个干净的数据库,我们需要首先发布流程在里面 / 在真实中,这个是由流程开发人员完成的 deployProcessDefinition(); / 假定我们想开始流程实例(= 流程执行) / 当用户提交一个Web表单的时候. processInstanceIsCreatedWhenUserSubmitsWebappForm(); / 然后,到达的异步消息将继续执行 theProcessInstanceContinuesWhenAnAsyncMessageIsReceived(); public void deployProcessDefinition() /定义一个流程,包括三个及点,一个未命名的start-state,一个状态s /一个结束状态 end-state名字end. ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( + + + + + + + + ); / 打开新的永久层会话 JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession(); / 并且在永久层会话上开启事务 jbpmSession.beginTransaction(); / 保存流程定义到数据库中 jbpmSession .getGraphSession() .saveProcessDefinition(processDefinition); / 提交事务 jbpmSmitTransaction(); / 关闭会话. jbpmSession.close(); public void processInstanceIsCreatedWhenUserSubmitsWebappForm() / 这个方法里的代码可以放在structs action或JSF管理bean 里 / 打开一个新的永久层会话 JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession(); / 启动事务. jbpmSession.beginTransaction(); / 查询数据库得到我们在上面步骤发布的流程定义 ProcessDefinition processDefinition = jbpmSession .getGraphSession() .findLatestProcessDefinition(hello world); / 有了从数据库中的得到的processDefinition, /我们就可以建立流程执行定义比如hello world 例子(它没有永久化). ProcessInstance processInstance = new ProcessInstance(processDefinition); Token token = processInstance.getRootToken(); assertEquals(start, token.getNode().getName(); / 开始流程执行 token.signal(); / 流程在状态s. assertEquals(s, token.getNode().getName(); / 流程实例被保存在数据库 / 所以当前流程执行的状态被保存进数据库 . jbpmSession .getGraphSession() .saveProcessInstance(processInstance); / The method below will get the process instance back out / of the database and resume execution by providing another / external signal. / web应用程序动作结束出,事务被提交. jbpmSmitTransaction(); / 关闭jbpmSession. jbpmSession.close(); public void theProcessInstanceContinuesWhenAnAsyncMessageIsReceived() / 这个代码可以包含在message driven bean中. / 打开新的永久性的会话. JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession(); / 永久化会话上开始事务 / 说明它也可能使用应用服务器的DataSource的JDBC连接 jbpmSession.beginTransaction(); GraphSession graphSession = jbpmSession.getGraphSession(); / First, we need to get the process instance back out of the database. / There are several options to know what process instance we are dealing / with here. The easiest in this simple test case is just to look for / the full list of process instances. That should give us only one / result. So lets look up the process definition. ProcessDefinition processDefinition = graphSession.findLatestProcessDefinition(hello world); / 现在,我们搜索这个流程定义的所有流程实例. List processInstances = graphSession.findProcessInstances(processDefinition.getId(); / We know that in the context of this unit test there is / only one execution. In real life, the processInstanceId can be / extracted from the content of the message that arrived or from / the user making a choice. ProcessInstance processInstance = (ProcessInstance) processInstances.get(0); / 我们可以继续执行. 说明流程实例委托信号到执行主路径(= the root token) processInstance.signal(); / 在singal后, 我们知道流程执行应该到 end-state assertTrue(processInstance.hasEnded(); / 现在我们可以更新执行状态到数据库中 graphSession.saveProcessInstance(processInstance); / MDB结束, 事务被提交. jbpmSmitTransaction(); / jbpmSession被关闭. jbpmSession.close(); 3.3.上下文例子: 流程变量在流程执行时候流程变量包含上下文信息. 流程变量同java.util.Map相似映射名字到值,值可能是个java对象 . 流程变量被永久化作为流程实例的一部分. 为了让事情简单,这个例子中我们仅仅展示使用变量的API而没有永久化.关于变量的更多信息可以参看 / 这个例子也是从hello world 流程开始. / 甚至没有修改.ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( + + + + + + + + );ProcessInstance processInstance = new ProcessInstance(processDefinition); / 从流程实例中为流程变量获得上下文实例 ContextInstance contextInstance = processInstance.getContextInstance(); / 在开始之前流程离开了start-state, / 我们准备设置一些流程变量在流程实例上下文中 .contextInstance.setVariable(amount, new Integer(500);contextInstance.setVariable(reason, i met my deadline); / 从现在开始,这些变量同流程实例关联 / 流程变量可以从用户代码中通过下面展示的API来访问 / 可可以在动作Action和节点的实现中访问 / 流程变量也作为流程实例的一部分保存进数据库 .processInstance.signal(); / 访问变量通过contextInstance. assertEquals(new Integer(500), contextInstance.getVariable(amount);assertEquals(i met my deadline, contextInstance.getVariable(reason);3.4.任务分派例子在下个例子里我们将要展示你怎么才能分派一个任务给一个用户.因为jBPM工作流引擎和组织模型是分开的,一种用来计算参与者表达语言总是受限的. 因此,你不得不指定AssignmentHandler的实现来计算任务的参与者. public void testTaskAssignment() / 这个流程展示基于hello world 流程. / 状态节点被task-node代替.task-node在JPDL中是表示一个等待状态并且 / 产生一个在流程继续执行前要完成的任务 ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( + + + + + + + + + + + ); / 产生一个流程执行定义. ProcessInstance processInstance = new ProcessInstance(processDefinition); Token token = processInstance.getRootToken(); / 开始流程执行,完整默认的转换后离开start-state . token.signal(); / signal 方法将被阻塞知道流程执行进入等待状态. / 在这个case中是指task-node. assertSame(processDefinition.getNode(t), token.getNode(); / 当执行到达task-node, 任务change nappy / 被建立并且NappyAssignmentHandler 被调用来决定任务将分派给睡 /NappyAssignmentHandler 返回papa / 在真实环境中, 任务将会从数据库中获取,通过or g.jbpm.db.TaskMgmtSession. / 因此这个例子中我们不想包括复杂的永久化 / 我们只是得到这个流程实例的第一个task-实例 (we know there is only one in this test / 我们知道在这个测试场景中这里只有一个). TaskInstance taskInstance = (TaskInstance) processInstance .getTaskMgmtInstance() .getTaskInstances() .iterator().next(); / 现在,我们检查taskInstance实际分配给了papa. assertEquals(papa, taskInstance.getActorId() ); /现在,我们期望papa完成了他的任务并且标记任务是完成的 taskInstance.end(); / 因为这是最后(唯一的)要做的任务,这个任务的完成触发 / 流程实例的继续执行. assertSame(processDefinition.getNode(end), token.getNode();3.5.客户化动作例子动作action是绑定你自己的定制java代码和jBPM流程的一种机制. 动作可以同它自己的节点关联起来 (如果它们在流程图表示中相关).动作也可以放在事件even

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论