jbpm5用户指南

charliewx 贡献于2016-06-29

作者   创建于2011-04-13 08:14:00   修改者charlie  修改于2016-06-24 11:03:00字数21398

文档摘要:介绍jBPM5的各种组件。组件将带您快速的了解业务流程的生命周期和阶段。这些阶段包括建模、部署、执行和监视。
关键词:

 jBPM 用户指南 目 录 jBPM 用户手册 - 1 - 第一章 概述 - 3 - 第二章 安装 - 8 - 第三章 流程 - 10 - 第四章 BPMN2.0 - 21 - 第五章 API - 22 - 第六章 人工任务 - 23 - 第七章 领域 - 规范流程 - 33 - 第八章 持久化 - 34 - 第九章 控制台 - 39 - 第十章 监视 - 42 - 第一章  概述 本章节将介绍jBPM5的各种组件。组件将带您快速的了解业务流程的生命周期和阶段。这些阶段包括建模、部署、执行和监视。 1. 建模 jBPM 允许用户通过图形的方式修改业务流程。用户和开发者可通过三种方式修改BPMN2.0业务流程定义。 1.1. Drools Flow for eclipse插件 Drools Flow支持创建,调试流程。 1.2. jBPM5 for eclipse 插件 目前仍在开发中,仅支持创建流程。完成后的版本将完全支持BPMN2.0规范。 1.3. 基于WEB的Oryx编辑器(EXT 实现) Oryx编辑器整合到Guvnor,它是一个存储流程的知识库。Oryx编辑器支持查看、更新和创建流程。 2. 部署 Guvnor 是一个知识库,用来存储流程、域模型、业务规则等。它提供一个基于WEB的控制台用来查找、修改和测试你的知识库内容。 3. 执行 3.1. 流程引擎 流程引擎是一个基于JAVA语言开发轻量级工作流引擎。 v 内置支持BPMN 2.0规范的流程 v 插件化的数据持久层与事务配置 v 审计和历史日志记录 v 基于通用的流程引擎 目前流程引擎还没有实现BPMN 2.0所有结点类型与属性,但大部分通用的结点类型已支持。 下图列出所有jBPM5已支持的元素: 下面列出所有BPMN 2.0 定义的元素: 流程对象 事件 * Start Event (None, Conditional, Signal, Message, Timer) * End Event (None, Terminate, Error, Escalation, Signal, Message, Compensation) * Intermediate Catch Event (Signal, Timer, Conditional, Message) 立即捕获事件 * Intermediate Throw Event (None, Signal, Escalation, Message, Compensation) * Non-interrupting Boundary Event (Escalation, Timer) 非中断边界事件 * Interrupting Boundary Event (Escalation, Error, Timer, Compensation) 活动 * Script Task (Java 、 MVEL) JAVA或MVEL脚本表达式语言 * Task * Service Task * User Task * Business Rule Task * Manual Task * Send Task * Receive Task * Reusable Sub-Process (Call Activity) 可复用的子流程 * Embedded Sub-Process 嵌入的子流程 * Ad-Hoc Sub-Process 点对点的子流程 * Data-Object 关口 * 分支 * Exclusive (Java, MVEL or XPath expression language) 排斥 * Inclusive (Java, MVEL or XPath expression language) 包含 * Parallel 并行 * Event-Based * 合并 * Exclusive 排斥 * Parallel 并行 * Lanes 数据 * Java type language * Process properties * Embedded Sub-Process properties * 活动properties 连接对象 * Sequence flow 时序流 3.2. 人工任务服务 WS-HT 人工任务服务是BPM业务流程管理的解决方案一个重要组成部分。 某些任务可以自动执行而不需要与人交互,但有些任务需要与人交互。jBPM5中的 actors代表人的抽象,也就是说不一定是人,可以是阿猫阿狗。jBPM5默认提供了一个与actors交互的实现,WS-HT。WS-HT也支持组设置,升级,分配规则等。 3.3. 监视 流程监听器Process listeners可监听流程引擎运行时环境发生的各种事件,如流程实例启动、结点实例完成等。这些信息可用来创建历史日志进行报表静态分析或供BAM业务活动监控进行动态分析。 3.3.1. 基于WEB的流程管理控制台 http://localhost:8080/jbpm-console 用户名/密码:krisv/krisv 通过此控制台可以管理流程实例。进入流程Overview可以启动流程,查看流程,停止流程。进入个人任务可以进行流程操作。进入报表可以查看流程报表。 第二章  安装 参考 http://w26.iteye.com/blog/998431 Guvnor的使用: http://localhost:8080/drools-guvnor 使用视频: http://people.redhat.com/kverlaen/install-guvnor-jbpm.swf 若有安装问题,可这样子: Email: jbpm-dev@lists.jboss.org IRC: #jbpm at irc.codehaus.org jBPM用户论坛 http://community.jboss.org/en/jbpm?view=discussions FAQ: 1. 脚本不能下载组件? 检查网络,或直接手动下载后放到 jbpm-installer/lib 文件夹。 2. 下载的组件不能解压? 文件有问题,重新下载。 3. 清除安装? ant clean.demo 4. 重新启动报异常? 手动人工服务结束进程,再重新启动。这是脚本缺陷导致的。 5. 控制台或Guvroy 报错? 检查${jboss.home}/server/default/log。如不能解决,发到论坛。 第三章  流程 v 业务流程是一张流程图表,描述一系列执行步骤的顺序。它由多个结点组成,结点之间互相连接。 v 结点代表总流程的一个步骤, v 箭头代表结点之间的连接,它指定如何从一个结点流向另外一个结点。 v BMPN2.0 已经预定义了一组结点元素。 本章节介绍如何定义和使用结点。 1. 创建流程 创建流程有三种方式: v Eclipse BPMN2.0图形编辑器插件 v 文本编辑器 v 直接创建通过流程API 流程文件扩展名:bpmn bpmn2。 图形编辑器插件需要打开属性面板配置元素属性。 XML形式: API 方式: 为了屏蔽内部API,不推荐使用。 重要的流程已经定义在org.jbpm.workflow.core 和org.jbpm.workflow.core.node包中。你可以通过工厂来创建流程。示例在 源码包的junit tests中。 package org.jbpm.process; import org.jbpm.JbpmTestCase; import org.jbpm.ruleflow.core.RuleFlowProcessFactory; public class ProcessFactoryTest extends JbpmTestCase { public void testProcessFactory() { RuleFlowProcessFactory factory = RuleFlowProcessFactory.createProcess("org.drools.process"); factory // header .name("My process").packageName("org.drools") // nodes .startNode(1).name("Start").done() .actionNode(2).name("Action") .action("java", "System.out.println(\"Action\");").done() .endNode(3).name("End").done() // connections .connection(1, 2) .connection(2, 3); factory.validate().getProcess(); } } 更多代码: http://github.com/krisv/jbpm/tree/master/jbpm-bpmn2/src/test/resources/ 2. 使用流程 2.1. 创建知识库 KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource("MyProcess.bpmn2"), ResourceType.BPMN2 ); KnowledgeBase kbase = kbuilder.newKnowledgeBase(); 2.2. 创建会话启动流程 流程启动需要显式调用 startProcess 方法。 StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); ksession.startProcess("com.sample.hello"); 参数 com.sample.hello 代表流程ID。 startProcess(String processId, Map parameters) 方法的Map参数可传入额外的参数,这些参数是键值对。注意这些参数将被复制到流程实例,作为流程的顶级变量。顶级变量是指变量的作用或是顶级的。 2.3. 结点类型的细节解释 流程有如下属性: ID: 惟一 NAME: 显示名称 VERSION: 版本 Package: 命名空间 Variables: 变量,用于传递数据 Swimlanes: 泳道(专用通道),指定执行人工任务的actor Connection Layout连接布局 Manual : 人工 Shortest path : 最短路径 Manhattan : 曼哈顿 BMPN 支持结点类型如下: 开始事件与结束事件, 一个流程必须有一个开始事件,一个或多个结束事件。结束事件的Terminate如果为TRUE,那么将结束整个流程,否则若有多个结束事件只会结束对应结束事件的路径。如T2-E2. | - T1 - E1(Terminate=false) S - + | - T2 - E2(Terminate=false) Rule Task 代表需要执行一组规则集。规则定义在多个分离的文件中,格式要求为Drools rule format。规则可以成为标准规则流组的一部分通过在头部使用ruleflow-group属性。 ruleflow-group的执行可认为是一个队列。新来的必须等前面的执行完才会执行。 Diverging Gateway 分支结点,一进多出。Gateway 不好翻译,所以省略。 AND parallel 与,并行, 两个都要满足(同步) XOR or exclusive 异或,排斥,只选择其中一个 OR or inclusive 或,包含,至少只要有一个满足即可(不同步) Converging Gateway 合并结点,多进一出。 AND parallel 与,并行, 两个都要满足(同步) XOR or exclusive 异或,排斥,只选择其中一个 Reusable Sub-Process 可复用子流程 Wait for completion 等待完成 On-entry and on-exit actions:绑定入口与出品action. Parameter in/out mapping: in表示输入参数 out 表示输入参数和返回,只有当Wait for completion为true时,out 才可以使用。 Script Task 代表一个可执行的脚本。支持Java , MVEL 方言。脚本绑定到Action. Action: 绑定的Action. Timer Event 定时器事件 Timer delay 延迟时间ms Error Event 异常事件 FaultName 异常处理器名 FaultVariable 异常变量 .Message Event 消息事件, 没有输入 EventType 监听事件类型 VariableName 事件数据 Scope internal 流程内部事件 external 外部事件 .User Task 用户任务(人工任务) ActorId 责任人,多个人用逗号“,”分隔 GroupId 组,多个组用逗号“,”分隔 Skippable 表示这个任务是否可忽略,即不执行就结束。 Swimlane 泳道 On.entry /on-exit actions: 绑定入口、出口Action Parameter mapping 传入参数 Result mapping 返回结果 Content: 任务数据 .Sub-Process 子流程 .Multiple Instances 多实例子流程,特殊的子流程,允许执行多次 Service Task(Work Item node)代表一个抽象的任务。可通过它扩展任务。 Additional parameters 扩展参数定义 Data 变量,顶级、子级,继承树 约束:包括代码约束和规则约束 Actions Action 可以访问全局,流程变量,知识库上下文预定义变量,访问运行时,启动流程,分发事件,插入数据。 Events 事件类型 - 事件监听(消息事件) - 事件处理(action) 事件分发: 内部事件 流程管理 外部事件 action Timers 定时器 更新流程 // create the session and start the process "com.sample.process" KnowledgeBuilder kbuilder = ... StatefulKnowledgeSession ksession = ... ProcessInstance processInstance = ksession.startProcess("com.sample.process"); // add a new version of the process "com.sample.process2" kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(..., ResourceType.BPMN2); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); // migrate process instance to new version Map mapping = new HashMap(); // top level node 2 is mapped to a new node with id 3 mapping.put("2", 3L); // node 2, which is part of composite node 5, is mapped to a new node with id 4 mapping.put("5.2", 4L); WorkflowProcessInstanceUpgrader.upgradeProcessInstance( ksession, processInstance.getId(), "com.sample.process2", mapping); 第四章  BPMN2.0 目前jBPM5没有完全实现BPMN2.0规范。因此本章略过。 第五章  API 本章是代码,前面已经贴过,不再多说。讲解了知识库、会话、流程的关系及如何创建。 第六章  人工任务 人工任务规范 http://download.boulder.ibm.com/ibmdl/pub/software/dw/specs/ws-bpel4people/WS-HumanTask_v1.pdf jBPM5 使用UserTask结点表示人工任务(需要与actor交互的任务)。UserTask 任务结点支持定义任务类型、actors和任务关联的数据。通过 Task Service 可管理UserTask。 为了使用人工任务,你必须定义UserTask结点。一个UserTask 表示一个需要actor执行的自动化任务。人工任务其实可以简单认为是任何类型的外部服务。外部服务需要被调用,可看成特殊类型的work item实现。 人工任务惟一的特色是支持泳道来简化给用户分配任务。 UserTask 结点属性: * Id: 结点惟一标识 * Name: 结点名称 * TaskName: 任务名称 * Priority: 优先级(整数) * Comment: 任务注释 * ActorId: actor, 多个使用逗号","分隔 * Skippable: 任务可跳过(不执行就结束) * Content: 任务关联的数据 * Swimlane: 泳道,可以简化分配多个人工任务给同一个actor * Wait for completion: 是否等待人工任务执行完成,若为False,则创建完人工任务后继续流程。 * On-entry and on-exit actions: 绑定入口、出品事件处理器-action * Parameter mapping: 参数 * Result mapping: 结果 * Timers: 定时器 * ParentId: 父人工服务ID 1. 泳道 说明:这个译法对于大家来讲,不明白怎么回事?但名词而已,纯靠前辈误导,慢慢误导就理解了。 使用泳道前必须在流程定义属性中配置泳道的集合。 多个人工任务使用同一泳道,第一个人工任务执行时,将会指定一个actorId. 后面的人工任务即使显式指定actorId,,也不会起作用,而是使用第一个人工任务的actorId。当然我们使用泳道就没必要再指定actorId,第一个除外。 试想,有这样一个场景,公司有2个部门,HR部与IT部;流程定义了2个泳道HR、IT;流程定义中包含4个人工任务,前两个人工任务需要与HR部经理交互,后两个人工任务需要与IT部经理交互。当我们指定前两个人工任务的actorId 时,需要分配两次。后面两个也是如此。现在极端情况发生了,HR经理与HT经理调岗,我们是不是得去修改流程定义下所有人工服务的actorId?而通过使用泳道,只需要修改第一个和第三个的actorId。 泳道与actorId是一对多的关系,也就是说,一个人工任务可指定给多个actor来处理。 泳道的实质是什么,实质就是把人工任务进行分类,并绑定actor列表。 2. 人工任务管理组件 人工任务与其它外部服务类似,可作为work itme的扩展被实现和调用。流程仅包含人工任务执行所必要的抽象描述。 work item handler是这个抽象描述的标准实现。用户使用我们可拔插的work item handler方式完成底层的实现。 我们也提供了一个WS-HumanTask 规范的管理组件。通过它来管理任务的生命周期(创建,获取,完成,任务状态持久化)。同时也支持国际化、日历、各种分配类型,代理和生死线。 3. 人工任务生命周期 当一个流程实例的人工任务结点被触发,人工任务实例将被创建。当创建完成后,人工任务进入Created 状态。 当人工任务的Wait for completion 属性为 False时,流程会立即继续执行,否则要等待任务完成或终止。 进入Created 状态,任务将显示所有负责执行的actors。等待他们来获取任务。一旦有一个actor 获取任务,任务进入 Reserved 状态。用户决定开始执行任务,此时任务进入 InProgress 状态。任务开始执行,执行完成后,用户必须完成任务。此时用户进入 Completed 状态。用户也可以决定任务已经失败,此时任务进入 Failed 状态。 上面介绍的正常的生命周期,其它包括: Delegating /forwarding 任务, 分配任务给另外一个 actor 来处理 Revoking 回滚任务 Temporarly suspending and resuming 临时挂起或继续任务 Stopping a task in progress 停止正在执行的任务 Skipping 跳过(不执行) 4. 链接人工任务管理组件和引擎 4.1. 注册 work item handler work item handler的功能是翻译抽象的work item(如人工任务)为规范的调用。 我们已经实现了个work item handler ,它在包jbpm-human-task中: org.jbpm.process.workitem.wsht.WSHumanTaskHandler 注册代码示例: StatefulKnowledgeSession ksession = ...; ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new WSHumanTaskHandler()); 若需要持久化会话内容,应该使用org.jbpm.process.workitem.wsht.CommandBasedWSHumanTaskHandler 它们都默认使用Mina来提供C/S通信传输。 http://mina.apache.org 更快速的实现HornetQ 也是可行的。 人工任务客户端使用如下的生命周期管理方法: 5. 启动人工任务管理组件 前提: 数据表users ,groups 中数据已经配置好。你可能通过如下代码来添加用户和组: taskSession.addUser(user) taskSession.addGroup(group) 确保数据库相关表中至少有一个Administrator用户和 administrator 角色。我们提供的evaluation评审示例中会自动加载两个用户和组配置文件: jbpm-installer\task-service\resources\org\jbpm\ LoadUsers.mvel LoadGroups.mvel 启动任务管理组件示例: EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.task"); TaskService taskService = new TaskService(emf, SystemEventListenerFactory.getSystemEventListener()); MinaTaskServer server = new MinaTaskServer( taskService ); Thread thread = new Thread( server ); thread.start(); 任务管理组件使用JPA来存储任务数据,因此需要配置persistence.xml 下面是任务管理组件使用 Hibernate 和 H2 数据库存的示例: org.hibernate.ejb.HibernatePersistence org.jbpm.task.Attachment org.jbpm.task.Content org.jbpm.task.BooleanExpression org.jbpm.task.Comment org.jbpm.task.Deadline org.jbpm.task.Comment org.jbpm.task.Deadline org.jbpm.task.Delegation org.jbpm.task.Escalation org.jbpm.task.Group org.jbpm.task.I18NText org.jbpm.task.Notification org.jbpm.task.EmailNotification org.jbpm.task.EmailNotificationHeader org.jbpm.task.PeopleAssignments org.jbpm.task.Reassignment org.jbpm.task.Status org.jbpm.task.Task org.jbpm.task.TaskData org.jbpm.task.SubTasksStrategy org.jbpm.task.OnParentAbortAllSubTasksEndStrategy org.jbpm.task.OnAllSubTasksEndParentEndStrategy org.jbpm.task.User H2数据库实际上是hsqldb 2.0+ 版本. 你也可以通过jbpm-human-task源码包 src/test/java目录下的org.jbpm.task.RunTaskService类来启动任务服务器,它会自动加载 LoadUsers.mvel 和 LoadGroups.mvel 配置文件 。 6. 与任务管理组件交互 最终用户不可能直接通过底层AP来管理任务,因此开发者需要使用API来实现与任务管理组件交互。 示例: TaskClient client = new TaskClient(new MinaTaskClientConnector("client 1", new MinaTaskClientHandler(SystemEventListenerFactory.getSystemEventListener()))); client.connect("127.0.0.1", 9123); // adding a task BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler(); Task task = ...; client.addTask( task, null, addTaskResponseHandler ); long taskId = addTaskResponseHandler.getTaskId(); // getting tasks for user "bobba" BlockingTaskSummaryResponseHandler taskSummaryResponseHandler = new BlockingTaskSummaryResponseHandler(); client.getTasksAssignedAsPotentialOwner("bobba", "en-UK", taskSummaryResponseHandler); List tasks = taskSummaryResponseHandler.getResults(); // starting a task BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler(); client.start( taskId, "bobba", responseHandler ); // completing a task responseHandler = new BlockingTaskOperationResponseHandler(); client.complete( taskId, users.get( "bobba" ).getId(), null, responseHandler ); 7. 人工任务管理接口 1)Eclipse 插件 配置URL、端口: Window -> Preferences and select Drools Task 127.0.0.1:9123 2)基于WEB的控制台 第七章  领域 - 规范流程 本章讲解如何开发领域规范流程服务-邮件通知。这个示例应该自己去动手实践。 不翻译的原因是让英文有难度的尝试去挑战下,其实并没有想象的这么难。而且内容也不是很多。 第八章  持久化 jBPM5 允许持久存储一些信息,如流程运行时状态、历史信息等。 1. 运行时状态 jBPM 支持插件化的持久策略。jBPM默认不会持久化流程运行时状态。运行时流程实例仅包含执行所必要的信息,不包括历史信息。 jBPM 支持 binary persistence mechanism 二进制数据的持久机制。 Safe Points 安全点,当流程从一个状态转换到另个状态,叫做安全点,它将触化流程和受其影响的其他流程进行持久化。 2. 配置持久化 使用Hibernate 来作为JPA持久层的实现和 H2数据库,你也可以选择其它方案。 1)配置依赖包 Drools runtime 其它: 1. jbpm-persistence-jpa (org.jbpm) 2. drools-persistence-jpa (org.drools) 3. persistence-api (javax.persistence) 4. hibernate-entitymanager (org.hibernate) 5. hibernate-annotations (org.hibernate) 6. hibernate-commons-annotations (org.hibernate) 7. hibernate-core (org.hibernate) 8. dom4j (dom4j) 9. jta (javax.transaction) 10.btm (org.codehaus.btm) 11.javassist (javassist) 12.slf4j-api (org.slf4j) 13.slf4j-jdk14 (org.slf4j) 14.h2 (com.h2database) 15.commons-collections (commons-collections) 2)配置引擎 // create the entity manager factory and register it in the environment EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.jbpm.persistence.jpa" ); Environment env = KnowledgeBaseFactory.newEnvironment(); env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf ); // create a new knowledge session that uses JPA to store the runtime state StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env ); int sessionId = ksession.getId(); // invoke methods on your method here ksession.startProcess( "MyProcess" ); ksession.dispose(); 重新创建Session // recreate the session from database using the sessionId ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( sessionId, kbase, null, env ); 3) 配置persistence.xml org.hibernate.ejb.HibernatePersistence jdbc/processInstanceDS org.drools.persistence.session.SessionInfo org.jbpm.persistence.processinstance.ProcessInstanceInfo org.jbpm.persistence.processinstance.WorkItemInfo 部署到包的META-INF目录 4)配置数据源h2.ds jdbc/testDS1 jdbc:h2:file:/NotBackedUp/data/process-instance-db org.h2.jdbcx.JdbcDataSource sa sasa 5)配置事务边界 1. 每个请求一个事务,默认行为。 2. 自定义事务 // create the entity manager factory and register it in the environment EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.jbpm.persistence.jpa" ); Environment env = KnowledgeBaseFactory.newEnvironment(); env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf ); env.set( EnvironmentName.TRANSACTION_MANAGER, TransactionManagerServices.getTransactionManager() ); // create a new knowledge session that uses JPA to store the runtime state StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env ); // start the transaction UserTransaction ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" ); ut.begin(); // perform multiple commands inside one transaction ksession.insert( new Person( "John Doe" ) ); ksession.startProcess( "MyProcess" ); // commit the transaction ut.commit(); 3. 历史日志 历史运行日志是引擎执行时基于事件生成。 jbpm-bam 模板包含事件监听器和存储流程相关的信息到数据库。 数据库包含两张表: ProcessInstanceLog: 包括流程实例ID, 流程定义ID, 流程实例的开始结束时间 NodeInstanceLog:流程实例的节点为执行信息。 启用历史日志 StatefulKnowledgeSession ksession = ...; JPAWorkingMemoryDbLogger logger = new JPAWorkingMemoryDbLogger(ksession); // invoke methods one your session here logger.dispose(); addFilter :过滤日志内容 配置 persistence.xml org.hibernate.ejb.HibernatePersistence jdbc/processInstanceDS org.drools.persistence.session.SessionInfo org.jbpm.persistence.processinstance.ProcessInstanceInfo org.jbpm.persistence.processinstance.WorkItemInfo org.jbpm.process.audit.ProcessInstanceLog org.jbpm.process.audit.NodeInstanceLog org.jbpm.process.audit.VariableInstanceLog 第九章  控制台 http://localhost:8080/jbpm-console krisv/krisv 1. 添加流程/任务表单 表单可以完成流程启动,人工交互。 通过使用 freemarker 动态创建表单。 创建表单模板{processId}.ftl com.sample.evaluation.ftl 示例:

开始性能评审


用户名:
创建任务表单模板{taskName}.ftl Performance Evaluation.ftl示例:

员工评审


${task.descriptions[0].text}

评审意见:
总体性能:

可用性:
初步可显示
健壮
通信能力好

表单提交的数据将添加参结果参数MAP。 注意,JBOSS WAR应用LIB目录需要 jbpm-gwt-form.jar包。 2. REST 接口 查看暴露的REST接口 http://localhost:8080/gwt-console-server/rs/server/resources 示例: 关闭任务 http://localhost:8080/gwt-console-server/rs/task/{taskId}/close 启动流程实例 http://localhost:8080/gwt-console-server/rs/process/definition/${id}/new_instance http://localhost:8080/gwt-console-server/rs/process/definition/2/new_instance 查看流程实例 http://localhost:8080/gwt-console-server/rs/process/definition/com.sample.evaluation/instances 获取数据集 http://localhost:8080/gwt-console-server/rs/process/instance/${id}/dataset http://localhost:8080/gwt-console-server/rs/process/instance/1/dataset 第十章  监视 1. 报表 通过使用BIRT报表来定义数据集、创建报表、包含报表、预览报表和导出报表。 数据集一般是流程的历史日志,也可添加其他数据源。 1. 直接介入 通过CEP 复杂事件处理 和 MVEL 脚本来动态监视流程。 示例: declare ProcessStartedEvent @role( event ) end dialect "mvel" rule "Number of process instances above threshold" when Number( nbProcesses : intValue > 1000 ) from accumulate( e: ProcessStartedEvent( processInstance.processId == "com.sample.order.OrderProcess" ) over window:size(1h), count(e) ) then System.err.println( "WARNING: Number of order processes in the last hour above 1000: " + nbProcesses ); end

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档