当前位置:文档之家› JBPM指南(培训机构专用)

JBPM指南(培训机构专用)

JBPM指南(培训机构专用)
JBPM指南(培训机构专用)

第1介绍

JBOSS jBPM是一个灵活的、可扩展的工作流管理系统。JBOSS jBPM拥有直观的流程语言,用任务、异步的等待状态、定时器、自动化动作…等来表示业务流程图,把这些操作绑定在一起,JBOSS jBPM就拥有了非常强大和可扩展的控制流机制。

JBOSS jBPM只有最小的依赖,可以象使用java库一样非常容易的使用它。另外,也可以通过把它部署在J2EE集群应用服务器中,用在吞吐量极为关键的环境中。

JBOSS jBPM可被配置为任何数据库,并且可以部署到任何应用服务器。

1.1 概述

核心工作流和BPM功能被打包为一个简单的java库,这个库包括一个存储到数据库、从数据库更新和获取流程信息的服务。

图1.1 JBOSS jBPM组件概观

1.2 JBOSS jBPM入门套件

入门套件是一个包含了所有jBPM组件的下载包,包括:

l Jbpm-server,一个预配置好的jboss应用服务器。

l Jbpm-designer,图形化设计jBPM流程的eclipse插件。

l Jbpm-db,jBPM数据库兼容包(见下文)。

l Jbpm,核心jbpm组件,包括库和本指南。

l Jbpm-bpel,JBOSS jBPM BPEL扩展参考。

预配置好的JBOSS应用服务器安装了下列组件:

l核心的jBPM组件,被打包为了一个服务档案。

l一个包括jBPM库表的集成数据库:默认的hypersonic数据库包含了jBPM表,另外还包含一个流程。

l jBPM控制台web应用程序,可以由流程参与者使用,也可以由jBPM管理员使用。

l jBPM调度程序,用于定时器执行。调度程序在入门套件中被配置为一个servlet,这个servlet 将产生一个线程来监视和执行定时器。

l jBPM命令执行器,用于命令的异步执行。命令执行器也被配置为一个servlet,这个servlet 将产生一个线程来监视和执行命令。

l一个流程实例,已经被部署到了jBPM数据库中。

1.3 JBOSS jBPM图形化流程设计器

JBOSS jBPM还包括一个图形化设计工具,这个设计器是一个创作业务流程的图形化工具。

JBOSS jBPM图形化流程设计器是一个eclipse插件,可以独立安装的设计器已经在开发目标中。

图形化设计器非常重要的特性是它同时支持业务分析者和技术开发者,这使的业务流程建模可以平滑的转换到实际实现。

插件可以被用作本地更新设置(普通的zip文件),通过标准的eclipse软件更新机制安装。另外还有一个包,你可以直接把它解压到eclipse主目录里。

1.4 JBOSS jBPM核心组件

JBOSS jBPM核心组件是普通java(J2SE)软件,用来管理流程定义和流程实例执行的运行时环境。

JBOSS jBPM是一个java库,因此,它可以被用在任何java环境,例如web应用、swing 应用、EJB、webservice…等,jBPM库还可以被打包为无状态会话EJB,这允许被作为集群部署,并且适用于极高的吞吐量。无状态会话EJB按照J2EE1.3规范编写,因此它可以部署到任何应用服务器。

JBOSS jBPM核心组件被打包为一个简单的java库文件,依赖于你所使用的功能,jbpm-3.0.jar库对第三方库有些依赖,如hibernate、dom4j和其他,这些在“第5章部署”TODO中有清晰的说明。

为了持久化,jBPM内部使用hibernate,除了传统的O/R影射之外,hibernate还解决了不同数据库之间的SQL方言(dialect)问题,使jBPM可以方便的在当前所有数据库上移植。

JBOSS jPBM API可以从你的项目中任何定制的java软件中访问,例如你的web应用、你的EJB、你的webservice组件、你的消息驱动bean,或者其他java组件。

1.5 JBOSS jBPM控制台web应用程序

jBPM控制台web应用程序服务于两个目的。首先,它作为与由流程执行所产生的运行时任务相交互的一个重要的用户接口;其次,它是一个管理和监控控制台,允许检查和操纵运行时实例。

1.6 JBOSS jBPM身份组件

JBOSS jBPM可以与任何包含用户或其他组织信息目录的公司集成,但是对于没有组织信息组件可用的项目,JBOSS jBPM包含了它自己的组件。身份组件所使用的模型比传统的

servlet、ejb和portlet(译者注:portlet是portal中最重要的组件,与servlet类似,portlet 是部署在容器中用来生成动态内容的web组件。)模型更丰富。

更多信息,请看“11.11 身份组件”。TODO

1.7 JBOSS jBPM调度程序

JBOSS jBPM调度程序是一个用来监视和执行定时器的组件,它在流程执行期间被调度。

定时器组件软件被打包进核心的jbpm库,但是它需要被部署进下列环境之一:要么配置调度程序servlet去产生监视线程,要么用调度程序的main方法启动一个独立的JVM。1.8 JBOSS jBPM数据库兼容包

JBOSS jBPM数据库兼容包是一个包含能使jBPM在你所选择的数据库上运行的所有信息、驱动程序和脚本的下载包。

1.9 JBOSS jBPM BPEL扩展

JBOSS jBPM BPEL 扩展是一个独立的扩展包,它扩展了jBPM,使之支持BPEL(Business Process Execution Language商业流程执行语言),BPEL本质上是一个xml脚本语言,用来根据其他web服务(web services)编写web 服务(web services)。

第3章指南

这个指南将向你展示如何用jpdl创建基本的流程以及如何使用API管理运行期的执行。

这个指南的形式是解释一组示例,每个示例集中于一个特殊的主题,并且包含大量的注释,这些例子也可以在jBPM下载包的目录src/java.examples中找到。

最好的学习方法就是建立一个工程,并且通过在给定例子上做不同的变化进行实验。

对eclipse用户来说可以如下方式开始:下载jbpm-3.0-[version].zip并且解压到自己的系统,然后执行菜单“File”-->“Import…”-->“Existing Project into Workspace”,然后点击“Next”,浏览找到jBPM根目录,点击“Finish”。现在,在你的工作区中就有了一个jbpm.3工程,你可以在src/java.examples/…下找到本指南中的例子,当你打开这些例子时,你可以使用菜单“Run”-->“Run As…”-->“JUnit Test”运行它们。

jBPM包含一个用来创作例子中展示的XML的图形化设计器工具,你可以在“2.1 下载概述”中找到这个工具的下载说明,但是完成本指南不需要图形化设计器工具。

3.1 Hello World 示例

一个流程定义就是一个有向图,它由节点和转换组成。Hello world流程有三个节点,下面来看一下它们是怎样组装在一起的,我们以一个简单的流程作为开始,不用使用设计器工具,下图展示了hello world流程的图形化表示:

图3.1 hello world流程图

public void testHelloWorldProcess() {

// 这个方法展示了一个流程定义以及流程定义的执行。

// 这个流程定义有3个节点:一个没有命名的开始状态,

// 一个状态“s”,和一个名称为“end”的结束状态。

// 下面这行是解析一段xml文本到ProcessDefinition对象(流程定义)。// ProcessDefinition把一个流程的规格化描述表现为java对象。

ProcessDefinition processDefinition =

ProcessDefinition.parseXmlString(

"" +

" " +

"" +

" " +

" " +

"" +

" " +

" " +

""

);

// 下面这行是创建一个流程定义的执行。创建后,流程执行有一个

// 主执行路径(=根令牌),它定位在开始状态。

ProcessInstance processInstance =

new ProcessInstance(processDefinition);

// 创建后,流程执行有一个主执行路径(=根令牌)。

Token token = processInstance.getRootToken();

// 创建后,主执行路径被定位在流程定义的开始状态。

assertSame(processDefinition.getStartState(), token.getNode());

// 让我们开始流程执行,通过它的默认转换离开开始状态。

token.signal();

// signal方法将会把流程阻塞在一个等待状态。

// 流程执行进入第一个等待状态“s”,因此主执行路径现在定位

// 在状态“s”。

assertSame(processDefinition.getNode("s"), token.getNode());

// 让我们发送另外一个信号,这将通过使用状态“s”的默认转换

// 离开状态“s”,恢复流程执行。

token.signal();

// 现在signal方法将返回,因为流程示例已经到达结束状态。

assertSame(processDefinition.getNode("end"), token.getNode()); }

3.2 数据库示例

jBPM的特性之一就是在流程等待状态时,拥有把流程的执行持久化到数据库中的能力。下面的例子将向你展示怎样存储一个流程实例到数据库,例子中还会出现上下文。分开的方法被用来创建不同的用户代码,例如,一段代码在web应用中启动一个流程并且持久化执行到数据库,稍后,由一个消息驱动bean从数据库中加载流程实例并且恢复它的执行。

有关jBPM持久化的更多信息可以在“第7章持久化”找到。

public class HelloWorldDbTest extends TestCase {

static JbpmConfiguration jbpmConfiguration = null;

static {

// 在“src/config.files”可以找到象下面这样的一个示例配置文件。

// 典型情况下,配置信息在资源文件“jbpm.cfg.xml”中,但是在这里// 我们通过XML字符串传入配置信息。

// 首先我们创建一个静态的JbpmConfiguration。一个JbpmConfiguration

// 可以被系统中所有线程所使用,这也是为什么我们可以把它安全的设置// 为静态的原因。

jbpmConfiguration = JbpmConfiguration.parseXmlString(

"" +

//jbpm-context机制分离了jbpm核心引擎和来自于外部环境的服务。

" " +

"

" factory='org.jbpm.persistence.db.DbPersistenceServi ceFactory' />" +

" " +

// 同样,jbpm使用的所有资源文件在jbpm.cfg.xml中被提供。

"

" value='hibernate.cfg.xml' />" +

"

" value='org/jbpm/calendar/jbpm.business.calendar.prop erties' />" +

"

" value='org/jbpm/graph/def/jbpm.default.modules.prop erties' />" +

"

" value='org/jbpm/db/hibernate/jbpm.converter.properti es' />" +

"

" value='org/jbpm/graph/action/action.types.xml' />" + "

" value='org/jbpm/graph/node/node.types.xml' />" +

"

" value='org/jbpm/context/exe/jbpm.varmapping.xml' />" +

""

);

}

public void setUp() {

jbpmConfiguration.createSchema();

}

public void tearDown() {

jbpmConfiguration.dropSchema();

}

public void testSimplePersistence() {

// 在下面调用的3个方法之间,所有的数据通过数据库被传递。

// 在这个测试中,这3个方法被依次执行,因为我们想要测试一个

// 完整的流程情景。但是实际上,这些方法表示了对服务器的不同

// 请求。

// 因为我们以一个干净的空数据库开始,所以我们首先必须部署流程。

// 事实上,这只需要由流程开发者做一次。

deployProcessDefinition();

// 假设在一个web应用中当用户提交一个表单时我们起动一个流程

// 实例(=流程执行)…

processInstanceIsCreatedWhenUserSubmitsWebappForm();

// 然后,一个异步消息到达时继续执行。

theProcessInstanceContinuesWhenAnAsyncMessageIsReceived(); }

public void deployProcessDefinition() {

// 这个测试展示了一个流程定义以及流程定义的执行。

// 这个流程定义有3个节点:一个没有命名的开始状态,

// 一个状态“s”,和一个名称为“end”的结束状态。

ProcessDefinition processDefinition =

ProcessDefinition.parseXmlString(

"" +

" " +

" " +

" " +

" " +

" " +

" " +

" " +

""

);

// 查找在上面所配置的pojo持久化上下文创建器。

JbpmContext jbpmContext =

jbpmConfiguration.createJbpmContext();

try {

// 部署流程定义到数据库中。

jbpmContext.deployProcessDefinition(processDefinition);

} finally {

// 关闭pojo持久化上下文。这包含激发(flush)SQL语句把流程// 定义插入到数据库。

jbpmContext.close();

}

}

public void processInstanceIsCreatedWhenUserSubmitsWebappForm() { // 本方法中的代码可以被放在struts的actiong中,或JSF管理

//的bean中。

//查找在上面所配置的pojo持久化上下文创建器。

JbpmContext jbpmContext =

jbpmConfiguration.createJbpmContext();

try {

GraphSession graphSession = jbpmContext.getGraphSession();

ProcessDefinition processDefinition =

graphSession.findLatestProcessDefinition("hello world");

// 使用从数据库中获取的流程定义可以创建一个流程定义的执行

// 就象在hello world例子中那样(该例没有持久化)。

ProcessInstance processInstance =

new ProcessInstance(processDefinition);

Token token = processInstance.getRootToken();

assertEquals("start", token.getNode().getName());

// 让我们起动流程执行

token.signal();

// 现在流程在状态's'。

assertEquals("s", token.getNode().getName());

// 现在流程实例processInstance被存储到数据库,

// 因此流程执行的当前状态也被存储到数据库。

jbpmContext.save(processInstance);

// 以后我们可以从数据库再取回流程实例,并且通过提供另外一个

// 信号来恢复流程执行。

} finally {

// 关闭pojo持久化上下文。

jbpmContext.close();

}

}

public void theProcessInstanceContinuesWhenAnAsyncMessageIsReceived() { // 本方法中的代码可以作为消息驱动bean的内容。

// 查找在上面所配置的pojo持久化上下文创建器。

JbpmContext jbpmContext =

jbpmConfiguration.createJbpmContext();

try {

GraphSession graphSession = jbpmContext.getGraphSession();

// 首先,我们需要从数据库中取回流程实例。

// 有几个可选方法来分辨出我们在这里所要处理的流程实例。

// 在这个简单的测试中,最容易的方式是查找整个流程实例列表,

// 这里它应该只会给我们一个结果。

// 首先,让我们查找流程定义。

ProcessDefinition processDefinition =

graphSession.findLatestProcessDefinition("hello world");

// 现在我们搜索这个流程定义的所有流程实例。

List processInstances =

graphSession.findProcessInstances(processDefinition.getId() );

// 因为我们知道在这个单元测试中只有一个执行。

// 在实际情况中, 可以从所到达的信息内容中提取processInstanceId

// 或者由用户来做选择。

ProcessInstance processInstance =

(ProcessInstance) processInstances.get(0);

// 现在我们可以继续执行。注意:processInstance 将委托信号

// 到主执行路径(=根令牌)。

processInstance.signal();

// 在这个信号之后,我们知道流程执行应该到达了结束状态。

assertTrue(processInstance.hasEnded());

// 现在我们可以更新数据库中的执行状态。

jbpmContext.save(processInstance);

} finally {

// 关闭pojo持久化上下文。

jbpmContext.close();

}

}

}

3.3 上下文示例:流程变量

流程变量包含了流程执行期间的上下文信息,流程变量与一个java.util.Map相似,它影射变量名称和值,值是java对象,流程变量作为流程实例的一部分被持久化。为了让事情简单,在这里的例子中我们只是展示使用变量的API,而没有持久化。

有关变量的更多信息可以在“第10章上下文”中找到。

// 这个例子仍然从hello world流程开始,甚至没有修改。ProcessDefinition processDefinition =

ProcessDefinition.parseXmlString(

"" +

" " +

" " +

" " +

" " +

" " +

" " +

" " +

""

);

ProcessInstance processInstance =

new ProcessInstance(processDefinition);

// 从流程实例获取上下文实例,用来使用流程变量。

ContextInstance contextInstance =

processInstance.getContextInstance();

// 在流程离开开始状态之前,我们要在流程实例的上下文中

// 设置一些流程变量。

contextInstance.setVariable("amount", new Integer(500)); contextInstance.setVariable("reason", "i met my deadline");

// 从现在开始,这些流程变量与流程实例相关联。现在展示由用户代码通过// API访问流程变量,另外,这些代码也可以存在于动作或节点的实现中。// 流程变量被作为流程实例的一部分也被存储到数据库中。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(

"" +

" " +

"" +

" " +

" " +

"" +

"

class='org.jbpm.tutorial.taskmgmt.NappyAssignmentHandler ' />" +

"" +

"" +

" " +

" " +

""

);

// 创建一个流程定义的执行。

ProcessInstance processInstance =

new ProcessInstance(processDefinition);

Token token = processInstance.getRootToken();

// 让我们起动流程执行,通过默认转换离开开始状态

token.signal();

// signal方法将会把流程阻塞在一个等待状态,

// 在这里,就是阻塞在task-node。

assertSame(processDefinition.getNode("t"), token.getNode());

// 当执行到达task-node,一个'change nappy'任务被创建,并且

// NappyAssignmentHandler 被调用,来决定任务将要分配给谁。

// NappyAssignmentHandler 返回'papa'。

// 在一个实际环境中,将使用org.jbpm.db.TaskMgmtSession中的方法// 从数据库获取任务。因为我们不想在这个例子中包含复杂的持久化,

// 所以我们仅使用这个流程实例的第一个任务实例(我们知道,在这个

// 测试情景,只有一个任务)。

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 定制动作示例

动作是一种绑定你自己的定制代码到jBPM流程的机制。动作可以与它自己的节点(如果它们与流程的图形化表示是相关的)相关联。动作也可以被放置在事件上,如执行转换、离开节点或者进入节点;如果那样的话,动作则不是图形化表示的一部分,但是在流程执行运行时,当执行触发事件时,它们会被执行。

我们先看一下将要在我们的例子中使用的动作实现:MyActionHandler,这个动作处理实现实际上没有做任何事…仅仅是设置布尔变量isExecuted为true。变量isExecuted是一个静态变量,因此它可以在动作处理的内部访问(即内部方法中),也可以从动作(即在动作类上)验证它的值。

有关动作的更多信息可以在“9.5 动作”中找到。

// MyActionHandler 是一个在jBPM流程执行期间可以执行用户代码的类。

public class MyActionHandler implements ActionHandler {

// 在每个测试之前(在setUp方法中), isExecuted 成员被设置为false。

public static boolean isExecuted = false;

// 动作将设置isExecuted为true,当动作被执行之后,单元测试会

// 展示。

public void execute(ExecutionContext executionContext) { isExecuted = true;

}

}

就象前面所提示那样,在每个测试之前,我们将设置静态域

MyActionHandler.isExecuted为false。

// 每个测试都将以设置MyActionHandler的静态成员isExecuted

// 为false开始。

public void setUp() {

MyActionHandler.isExecuted = false;

}

我们将会在转换上开始一个动作。

public void testTransitionAction() {

// 下面的流程与hello world 流程不同。我们在从状态“s”到

// 结束状态的转换上增加了一个动作。这个测试的目的就是展示

// 集成java代码到一个jBPM流程是多么的容易。

ProcessDefinition processDefinition =

ProcessDefinition.parseXmlString(

"" +

" " +

"" +

" " +

" " +

"" +

"

class='org.jbpm.tutorial.action.MyActionHandler' />" + "" +

" " +

" " +

""

);

// 让我们为流程定义起动一个新的执行。

ProcessInstance processInstance =

new ProcessInstance(processDefinition);

// 下面的信号会导致执行离开开始状态,进入状态“s”。

processInstance.signal();

// 这里我们展示MyActionHandler还没有被执行。

assertFalse(MyActionHandler.isExecuted);

// ... 并且执行的主路径被定位在状态“s”。

assertSame(processDefinition.getNode("s"),

processInstance.getRootToken().getNode());

// 下面的信号将触发根令牌的执行,令牌将会执行带有动作的转换,

// 并且在调用signal方法期间动作经会被执行token。

processInstance.signal();

// 我们可以看到MyActionHandler在调用signal方法期间被执行了。

assertTrue(MyActionHandler.isExecuted);

}

下一个例子展示了相同的动作,但是现在动作分别被放置在了enter-node和leave-node 事件上。注意,节点与转换相比有更多的事件类型,而转换只有一个,因此动作要放置在节点上应该放入一个event元素中。

ProcessDefinition processDefinition =

ProcessDefinition.parseXmlString(

"" +

" " +

" " +

" " +

" " +

"" +

"

class='org.jbpm.tutorial.action.MyActionHandler' />" + "" +

"" +

"

class='org.jbpm.tutorial.action.MyActionHandler' />" + "" +

" " +

" " +

" " +

""

);

ProcessInstance processInstance =

new ProcessInstance(processDefinition);

assertFalse(MyActionHandler.isExecuted);

//下面的信号会导致执行离开开始状态,进入状态“s”,

// 因此状态's' 被进入,动作被执行。

processInstance.signal();

assertTrue(MyActionHandler.isExecuted);

// 我们重新设置MyActionHandler.isExecuted。MyActionHandler.isExecuted = false;

// 下一个信号将会触发执行离开状态's',因此动作将被执行。processInstance.signal();

// 请看

assertTrue(MyActionHandler.isExecuted);

第5章部署

jBPM是一个嵌入式BPM引擎,这意味着你可以象安装一个独立的软件产品并集成一样把jBPM嵌入到你自己的java工程中,可以这样做的一个主要方面就是最小化的依赖,本章讨论jbpm库及其依赖。

5.1 Java运行环境

jBPM3要求J2SE1.4.2+

第6章配置

jBPM配置由java类org.jbpm.JbpmConfiguration来描述,获取JbpmConfiguration 的最简单方式是使用单态实例方法JbpmConfiguration.getInstance()。

如果你想从另外一个源加载配置,你可以使用JbpmConfiguration.parseXxxx方法。static JbpmConfinguration jbpmConfiguration = JbpmConfinguration.getInstance();

JbpmConfiguration是线程安全的,因此可以在一个静态成员中维护,所有的线程都可以把JbpmConfiguration作为一个JbpmContext对象的工厂来使用。JbpmContext表示一个事务,在一个上下文块中JbpmContext使服务可用,上下文块如下:

JbpmContext jbpmContext =

jbpmConfiguration.createJbpmContext();

try {

// This is what we call a context block.

// Here you can perform workflow operations

} finally {

jbpmContext.close();

}

JbpmContext使一组服务和配置为jBPM可用,这些服务在jbpm.cfg.xml配置文件中被配置,并且使jBPM无论运行在任何java环境中这些服务都可用。

下面是JbpmContext的一个典型配置,就象你在src/config.files/jbpm.cfg.xml中看到的那样:

factory='org.jbpm.persistence.db.DbPersistenceServiceFactory' />

factory='org.jbpm.msg.db.DbMessageServiceFactory' />

factory='org.jbpm.scheduler.db.DbSchedulerServiceFactory' />

factory='org.jbpm.logging.db.DbLoggingServiceFactory' />

factory='org.jbpm.security.authentication.DefaultAuthenticationServ iceFactory' />

value='hibernate.cfg.xml' />

value='org/jbpm/calendar/jbpm.business.calendar.properties' />

value='org/jbpm/graph/def/jbpm.default.modules.properties' />

value='org/jbpm/db/hibernate/jbpm.converter.properties' />

value='org/jbpm/graph/action/action.types.xml' />

value='org/jbpm/graph/node/node.types.xml' />

value='org/jbpm/jpdl/par/jbpm.parsers.xml' />

value='org/jbpm/context/exe/jbpm.varmapping.xml' />

/>

class='org.jbpm.taskmgmt.impl.DefaultTaskInstanceFactoryImpl' singleton='true' />

class='org.jbpm.jpdl.el.impl.JbpmVariableResolver' singleton='true' />

在这个配置中你可以看到三部分:

l第一部分使用一组服务实现配置jbpm上下文,这些配置的可选项在以后描述特定服务实现的章节中做了描述。

l第二部分是所有配置资源的引用映射,如果你想要定制某些配置文件,这些资源引用可以被修改。

典型情况下,你可以在jbpm-3.x.jar中拷贝一个默认的配置,并且把它放在classpath中的某个位置,然后在这个文件中修改引用为你自己定制版本的配置文件。

l第三部分是在jbpm中使用的一些别名配置,这些配置选项在包含特定主题的章节中做了描述。

缺省配置的一组服务被定位于一个简单的web应用环境和最小的依赖,持久化服务将获得一个jdbc连接,所有其他服务将会使用这个相同的连接来完成它们的服务,因此,工作流的所有操作都被集中到一个JDBC连接的一个事务中,不再需要事务管理器。

JbpmContext包含为大多流程操作所提供的方便方法:

public void deployProcessDefinition(ProcessDefinition

processDefinition) {...}

public List getTaskList() {...}

public List getTaskList(String actorId) {...}

public List getGroupTaskList(List actorIds) {...}

public TaskInstance loadTaskInstance(long taskInstanceId) {...}

public TaskInstance loadTaskInstanceForUpdate(long taskInstanceId) {...}

public Token loadToken(long tokenId) {...}

public Token loadTokenForUpdate(long tokenId) {...}

public ProcessInstance loadProcessInstance(long processInstanceId) {...}

public ProcessInstance loadProcessInstanceForUpdate(long processInstanceId) {...}

public ProcessInstance newProcessInstance(String processDefinitionName) {...}

public void save(ProcessInstance processInstance) {...}

public void save(Token token) {...}

public void save(TaskInstance taskInstance) {...}

public void setRollbackOnly() {...}

记住,XxxForUpdate方法将记录所加载的对象为自动保存的,因此不需要再调用save 方法。

指定多个jbpm上下文是可能的,但是你必须确保每个jbpm上下文的name属性必须是唯一的,可以使用JbpmConfiguration.createContext(String name)获取命名的上下文。

service元素定义了一个服务名称和此服务的服务工厂,服务将只会在使用JbpmContext.getServices().getService(String name)请求时被创建。

工厂也可以被作为一个元素来指定,而不是用属性。那样可以用于在工厂对象中注入一些配置信息,负责解析XML的组件创建和装配被调用的对象工厂。

6.1 配置属性

jbpm.byte.block.size:文件附件和二进制变量被存储到数据库,不是作为blob,而是作为一个固定大小的二进制对象列表,这可以方便用于不同数据库并且提高jBPM的全面嵌入能力,这个参数控制了固定长度块的大小。

jbpm.task.instance.factory:定制任务实例的创建方式,在这个属性中指定一个全类名,当你想要定制TaskInstance bean并且向它添加新的属性时,这是有必要的。请参考“11.10 定制任务实例”,指定的类必须实现org.jbpm.tskmgmt.TaskInstanceFactory。

jbpm.variable.resolver:定制jBPM在JSF表达式中寻找第一个术语的方式。

jbpm.msg.wait.timout:定制消息缓存的时间。

6.2 配置文件

下面是对在jBPM中定义的所有配置文件的简短描述。

6.2.1 Hibernate.cfg.xml文件

这个文件包含hibernate配置,并且引用hibernate映射资源文件。

位置:hibernate.cfg.xml文件如果不另外在jbpm.properties文件的

jbpm.hibernate.cfg.xml属性中指定,则jBPM工程中的默认hibernate配置文件在目录src/config.files/hibernate.cfg.xml。

6.2.2 Hibernate查询配置文件

这个文件包含jBPM会话org.jbpm.db.*Session中所使用的hibernate查询。

位置:org/jbpm/db/hibernate.queries.hbm.xml。

6.2.3 节点类型配置文件

这个文件包含了XML节点元素到节点实现类的映射。

位置:org/jbpm/graph/node/node.types.xml。

6.2.4 动作类型配置文件

这个文件包含了XML动作元素到动作实现类的映射。

位置:org/jbpm/graph/action/action.types.xml。

6.2.5 业务日历配置文件

包含了业务时间和空闲时间的定义。

位置:org/jbpm/calendar/jbpm.business.calendar.properties。

6.2.6 变量映射配置文件

指定了流程变量(java对象)的值怎样转换到用于存储到jbpm数据库中的变量实例。

位置:org/jbpm/context/exe/jbpm.varmapping.xml。

6.2.7 转换器配置文件

指定了id到类名的映射。id被存储到数据库,

org.jbpm.db.hibernate.ConverterEnumType被用来映射id到单态对象。

位置:org/jbpm/db/hibernate/jbpm.converter.properties。

6.2.8 缺省模块配置文件

指定哪个模块被缺省添加到一个新的流程定义ProcessDefinition。

位置:org/jbpm/graph/def/jbpm.default.modules.properties。

6.2.9 流程档案解析器配置文件

指定流程档案解析的解析器。

位置:org/jbpm/jpdl/par/jbpm.parsers.xml。

6.3 对象工厂

对象工厂可以依照bean的xml配置文件创建对象,配置文件指定了对象将被怎样创建、配置以及组装到一起形成一个完整的对象图。对象工厂可以注入配置和其他bean到一个bean 中。

在最简单的形式中,对象工厂可以从这样一个配置中创建基本类型和java bean:

class="org.jbpm.taskmgmt.exe.TaskInstance"/>

hello world

42

true

10.2

Activiti工作流入门详解完整教学教程

Activiti入门教程详解完整教程 1.A ctiviti介绍 Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理,工作流,服务协作等领域的一个开源,灵活的,易扩展的可执行流程语言框架。 Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss JBPM的项目架构师,它的特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。 1.1工作流引擎 ProcessEngine对象,这是Activiti工作的核心。负责生成流程运行时的各种实例及数据,监控和管理流程的运行。 1.2BPMN 业务流程建模与标注(Business Process Model and Notation,BPMN),描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)

2.准备环境 2.1Activiti软件环境 1)JDK1.6或者更高版本 2)支持的数据库有:h2,mysql,oracle,mysql,db2等 3)支持Activiti运行的jar包,可以通过maven依赖引入 4)开发环境为Eclipse3.7或者以上版本,myeclipse为8.6版本2.2安装流程设计器(eclipse插件) 1)打开Help →Install New Software →Add 输入Name: Activiti Designer Location: https://www.doczj.com/doc/eb9713484.html,/designer/update/ 输入完成后,单击OK按钮等待下载完成后安装。 安装完成后在菜单选项中会出现Activiti的目录选项

jBPM开发入门指南(1)

环境准备 1、安装JDK 所有 JAVA 开发第一个需要安装的,没什么好说的。记得把系统变量 JAVA_HOME 设上。 2、安装Ant Ant 是使用 jBPM 必须的一个工具。 jBPM 中的很多操作都要用到 Ant 。 安装方法: ( 1 )先下载:https://www.doczj.com/doc/eb9713484.html,/dist/ant/binaries/,选一个如: apache-ant-1.6.5-bin.zip 。 ( 2 )解压到 D:\ant (当然其他目录也可以)。 ( 3 )设置如下系统变量: ANT_HOME=d:\ant 。 ( 4 )把 %ANT_HOME%\bin 加入到系统变量 PATH 中。 3、安装Eclipse Eclipse 不是开发 jBPM 必须的工具,但它是对 jBPM 开发很有帮助的工具,特别是 jBPM 提供了一个 Eclipse 插件用来辅助开发 jBPM 。关于 Eclipse 的安装不赘述了,本文用的版本是: Eclipse3.2 安装jBPM jBPM 的下载地址:https://www.doczj.com/doc/eb9713484.html,/products/jbpm/downloads ●JBoss jBPM 是jBPM 的软件包 ●JBoss jBPM Starters Kit 是一个综合包,它包括了jBPM 软件包、开发插件、一个配置好了的基于JBoss 的jBPM 示例、一些数据库配置文件示例。 ●JBoss jBPM Process Designer Plugin 是辅助开发jBPM 的Eclipse 插件。 ●JBoss jBPM BPEL Extension jBPM 关于BPEL 的扩展包 本指南选择下载:JBoss jBPM Starters Kit 。下载后解压到D:\jbpm-starters-kit-3.1 ,目录下含有五个子目录: ●jbpm jBPM 的软件包 ●jbpm-bpel 只含有一个网页

jbpm和shark工作流引擎对比

jbpm和shark工作流引擎对比 Xpdl:xml process definition language? Bpel:Business Process execution language? Jpdl:JBoss Jpbm Process definition language.

三亠 -出 1 (shark '^ B f Q M ) “tpcrfwwr 一 WfPmcrw 寥w ^C C E 王亍s- l t l l c -p =8 fe. n 2 Q ? su E wurhlt 1: 纟 - ory "&□.At vnsMk - uriflg jiubkd ehbunKk F t h 4- B c pruccan ^y t l i w &s.g n a l l l ) ^d 」2=-l £.x n ??=e *§9 mzr W n^ecIH ?- 一 dcunptF: nrinm 4 二-ring priority 二- 3g S u s - =Hat proc? uatm: FnxcfsFtl =J4lllh_og u cum- sutci) r M ^J C I F E J ,&d ?rcwinwO umin ?Ej ?r i - Mlm 一as- M K C d n i ) 亍 m E p whi fpenu =一一 —Jtiap :Tun??lu^::u~c 一 g JH*【 c.s-y 』。.:乂 ring bvi-yfuunc: ■王 £ l k .3 ?"『ring -2 l -x 2n : s z i n ? 2l -=^l -5-^ -]C 3.=V\3&dscBtAud r 卫 mmF. 二? H 4U ? ^u d l ,u n - ^urw sWtc : ?3a w daU “ NmeV flocs d H n : A . l _ ? I g 工 i ?亍1 £ ? ? 2 ??f& V j.i I s v v p g .gnugEvcfltAJidh ^evnerc-JJCy: ctring *l 3c c s l - 5 -il r g d remircc ndmc : K 3

工作流与JBPM开发实例精解

1.工作流与JBPM 开发实例 前几天发了一篇文章,没几个人看也没人留言,看来我这功夫差的还是远啊,今天来一个实际点的吧。可能上回的废话太多。说说这个jbpm应该怎么来用。 首先当你想学一个框架的时候一定是你要有项目来用他了,OK,那么你项目当中的流程是什么你应该清楚吧,那么当你清楚了这些的时候我们就开始我们这个最简单的例子吧。 假如我们现在有这么一个例子,公司员工想报销点出差费,那么他要将他的申请提交给他的第一级领导——部门主管去审批,然后部门主管审批完了之后还要交给这个部门主管的上级公司老总进行审批。那么针对这个简单的流程,我们应该从哪里下手呢? 首先第一件事情就是写流程定义文件,那么这个文件我们用什么来写呢,他就是一个符合某个语法的xml文件,幸运的是jbpm给我们提供了一个集成的开发环境让我们来用。 首先去官网上下一个jbpm-jpdl-suite-3.2.GA包,解压后你会发现他里面有一个designer文件夹,那个里面就是我们写流程定义文件的开发环境,他是一个eclipse的插件,但是好像他给我们的那个eclipse版本有问题,建议大家从新下一个eclipse-SDK-3.2.1-win32.zip这个版本的eclipse,然后覆盖他给我们提供的那个。 准备工作做完了,那么我们就开始吧,首先我们打开解压目录下的designer 文件夹中的designer.bat文件,他弹出一个eclipse,然后我们就用这个东西来开发我们的流程定义文件了。 打开之后你就会看见一个他的小例子,不过我们不去用他,我们自己新建一个工程。右键-new-other-jBoss jbpm-process project。这个时候你会看见他弹出一个对话框,输入你的工程名字,然后点击next,这个时候你会发现他已经把jbpm加载进去了,记住要选中Generate simple ......。 工程建立完了,我们开始建立我们的流程定义文件。在工程里面你会发现src/main/jpdl这个source folder,然后你会看见他里面已经有了一个流程定义文件了,但是我们不去用他的,我们自己建立一个,右键src/main/jpdl,然后new-other-jBoss jbpm-process definition。这个时候他就会弹出一个对话框,起一个你要写的流程定义文件的名字输入进去,OK,可以了。这个时候你打开你建立的那个文件夹,里面就有processdefinition.xml文件,ok,打开他。 在右面的图里面你就可以看到一张什么都没有的白纸,我们看看这部分左面的那些东西,什么start啊,end啊,tasknode啊,fork啊,join啊。那我们来解释一下这是个什么东西呢,我们看看我们的需求,员工要写一个报销单,然

Activiti工作流入门详解完整教程

A c t i v i t i工作流入门详 解完整教程 Prepared on 24 November 2020

Activiti入门教程详解完整教程 1.Activiti介绍 Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理,工作流,服务协作等领域的一个开源,灵活的,易扩展的可执行流程语言框架。 Activiti基于Apache许可的开源BPM平台,创始人TomBaeyens是JBossJBPM 的项目架构师,它的特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。 1.1工作流引擎 ProcessEngine对象,这是Activiti工作的核心。负责生成流程运行时的各种实例及数据,监控和管理流程的运行。 1.2BPMN 业务流程建模与标注(BusinessProcessModelandNotation,BPMN),描述流程的基本符号,包括这些图元如何组合成一个业务流程图(BusinessProcessDiagram) 2.准备环境 2.1Activiti软件环境 1)或者更高版本 2)支持的数据库有:h2,mysql,oracle,mysql,db2等 3)支持Activiti运行的jar包,可以通过maven依赖引入 4)开发环境为或者以上版本,myeclipse为版本 安装流程设计器(eclipse插件) 1)打开HelpInstallNewSoftwareAdd

输入Name:ActivitiDesigner designer/update/ 输入完成后,单击OK按钮等待下载完成后安装。 安装完成后在菜单选项中会出现Activiti的目录选项 设置eclipseactivit插件的画流程图选项 打开菜单Windows-->Preferences-->Activiti-->Save下流程图片的生成方式 勾选上Createprocessdefinitionimagewhensavingthediagram操作,勾选上这个操作后在画流程图后保存eclipse会自动生成对应的流程图片。 准备开发环境 Activiti依赖 在eclipse左边工作栏右键New选择创建MavenProject项目,创建一个名为ActivitiTest的项目 点击Finish完成。 右键项目选择Properties,选择ProjectFacets勾选上图中的选项,点击Apply,再点击OK 然后将项目转换成web项目,右键项目选择Properties,在ProjectFacets中做如下勾选,然后点击Appy应用和OK确定 然后右键项目Properties,选择DeploymentAssembly,将test相关目录Remove掉之保留main下面需要发布的内容,如下图 然后点击Appply和OK 然后在文件中添加以下依赖

jBPM4.4详细讲解

jBPM4.4 一、什么是jBPM JBPM是一个扩展性很强的工作流系统,百分百用JAVA语言开发,持久层采用Hibernate实现,理论上说,只要Hibernate支持的数据库JBPM都支持。同时它还能被部署在任何一款JAVA应用服务器上。 java Business Process Management :工作流,工作流引擎 注:记得j小写,因为j代表java,与Log4j中j一样 工作流管理系统不止一中,如还有Intaliol BPMS …但JBoss jBPM灵活性且扩展性高。 jBPM项目于2002.3由Tom Baeyens 发起,2003.12发布1.0版本,2004年10.18发布 2.0,并在这天加入了JBOSS组织-→被RedHat公司 二、能干什么 提供工作流的实现,帮助更好的进行BPM 三、jBPM有什么,简介jBPM的Service API 各种服务 1:ProcessEngine:流程引擎。并不负责具体的业务,而是用于获取各种Service。 2:RepositoryService:流程资源服务的接口,如流程定义发布、查询、删除等。 3:ExecutionService:用于操作流程实例的服务,可以进行流程实例发布、查询、流程推进、设置流程变量等操作。 4:TaskService:用于操作人工任务的服务,可以进行任务创建、查询、获取、提交完成、保存、删除等操作。 5:HistoryService:用于操作流程历史的服务,提供对流程历史库(就是已经完成的流程实例)的操作。比如:历史流程实例,历史活动实例等。 6:IdentityService:用于操作用户、用户组以及成员关系的服务 7:ManagementService:流程管理控制服务的接口,只提供异步工作(Job)相关的执行和查询操作。 四、Myeclipse8.5 搭配开发环境 1.jbpm-4.4.zip 下载完 2.myeclipse→help→Myeclipse Configuration Center →add……. 3.找到\jbpm- 4.4\install\src\gpd\jbpm-gpd-site.zip 安装这个插件 4.记得不要联网安装,不要选source文件 5.安装完后window→JBoss jBPM→runtime Location→add 添加jbpm的路径 6.添加lib下所有jar包,如果你使用的是tomcat6.0则:要把 Juel-api.jar ,juel-impl.jar,juel-engine.jar 拷到tomcat lib 下并把原来的el-api.jar删掉 项目中就不要再导上面三个包 五、修改配置文件 1、将example中的下列配置文件拷贝到java项目的src目录下: jBPM.cfg.xml、jBPM.hibernate.cfg.xml、jBPM.mail.properties、 jBPM.mail.templates.xml、process_forms.css 2、在以上配置文件中的jBPM.hibernate.cfg.xml,实际上就是我们熟悉的 hibernate.cfg.xml,这里,要修改为连接我们的数据库。 oracle.jdbc.driver.OracleDriver

jbpm数据库说明

jBPM,全称是Java Business Process Management,是一种基于J2EE 的轻量级 工作流管理系统。 一、介绍下大背景工作流的应用市场部分内容就不提了。首先提一下目前工作流域 的两种主流方向 1、workflow 。 代表osworkflow 等。 workflow 的特点为:其主要侧重于对流程的处理模型方面,也就是说它关注的重心是流程的处理 2、BPM商业逻辑流程模型 BPM的重心为商业逻辑流程模型的处理 其中以JBPM为代表 这是两者最大的区别,也就是切入点不同。不过对我们实际应用来说,选哪个区别都不是很大说到工作流就要提到WFM组织,这个组织是国际上一些厂商组成的一个工作流的组织,该组织给出了一个他们自己定义的工作流的定义,及XPDL语义。 该定义将工作流的定义包括为至少以下五部分内容: 1、工作流过程活动 2、转移信息 3、参与者声明 4、外部应用程序声明 5、相关数据 并给出了标准的语法来描述上述元数据 1:workflow process 2:activity 3:transition 4:application 5:date field 由于JBPM不符合上述语法定义,因此JBPM是不符合该WFM规范的不过上述每部分内容在JBPM都有自己的定义来描述 二、JBPM流程的一个基本的处理步骤 1、加载(发布)流程定义 2、启动流程 3、处理任务 4、记录流程的相关状态 1、加载(发布)流程定义 这个意思是,我们通过jbpm 的designer 插件,或者是用其他工具,制定出processDefinition (可以是String ,可以是包文件,也可以是流数据等),然后将其加载到应用中的过程。这个加载可以是写入内存中,或者是直接 写入数据库等 2、启动流程

JBPM工作流表结构的详解

注:红色的表为经常使用的表.这里不使用JBPM自己的权限角色定义. 整体说明: JBPM4_DEPLOYMENT 流程定义表 JBPM4_DEPLOYPROP 流程定义属性表 JBPM4_EXECUTION 流程实例表 JBPM4_HIST_ACTINST 流程活动(节点)实例表 JBPM4_HIST_DETAIL 流程历史详细表 JBPM4_HIST_PROCINST 流程实例历史表 JBPM4_HIST_TASK 流程任务实例历史表 JBPM4_HIST_VAR 流程变量(上下文)历史表 JBPM4_ID_GROUP 组表 JBPM4_ID_MEMBERSHIP 用户角色表 JBPM4_ID_USER 用户表 JBPM4_JOB 定时表 JBPM4_LOB 存储表 JBPM4_PARTICIPATION 参与者表 JBPM4_SWIMLANE 泳道表 JBPM4_TASK 任务表 JBPM4_VARIABLE 上下文表 红色的表为经常使用的表.这里不使用JBPM自己的权限角色定义. 发布一个流程deploy后 jbpm4_deployment新增一条记录 jbpm4_deployprop新增三条记录 jbpm4_lob 新增一条记录 开始一个流程startProcessInstanceByKey后 jbpm4_execution新增一条记录 jbpm4_hist_actinst 新增一条记录 jbpm4_hist_procinst新增一条记录 jbpm4_hist_task新增一条记录 jbpm4_task 新增一条记录 流程定义相关的布署信息就存储在(1)JBPM4_DEPLOYMENT、(2) JBPM4_DEPLOYPROP及(3)JBPM4_LOB中。上传一个包含png和jpdl.xml的zip包后,JBPM4_DEPLOYMENT多一条记录 JBPM4_DEPLOYPROP 多三条,

Activiti5基于jBPM4的开源工作流系统10分钟入门指南

https://www.doczj.com/doc/eb9713484.html, 觉得activiti设计得简单而强大,尝试翻译一下他的10分钟入门指南: 10分钟入门指南 通过一个(非常简单的)业务流程,介绍一些基本的Activiti工作流感念和API接口。 使用案例 这个用例叫干脆(straightfoward):有一个公司,暂且叫它BPMCorp。在BPMCorp内部,会计部门每个月都要写一份财务报告给公司的股东。但在发送给所有股东之前必须经过上级部门的批准。下面涉及的所有文件及代码片段均可以通过Activiti分发的examples范例包中找到,请查看包 https://www.doczj.com/doc/eb9713484.html,ertask的内容。 流程图 如上所述的业务流程可以使用Activiti的可视化流程编辑器 Activiti Modeler查看及编辑。使用BPMN2.0的标准符号则如下图所示: 这里没有什么特殊的东西,图中看到的是一个none start event(左边的圆圈),其次是两个user tasks:"撰写财务报告"和”批准财务报告",以 none end event (右边边框加粗型的圆圈)结束。XML表示 上述业务流程的XML表示形式如下所示(FinancialReportProcess.bpmn20.xml). 流程中包含一些主要的元素(通过点击链接可以查看更详细的BPMN 2.0 元素的说明): ?none start event 让我们认识到要开始一个流程。 ?user tasks声明一个基于用户操作的流程任务. 注意第一个任务是分派用户组accountancy的, 而第二个任务是分派到用户组management的. 查看分派用户任务章节可以得到更多怎样分派任务到用户或组的信息。

jBPM 4.4 入门指南

1.工作流与工作流管理系统 1.1. 工作流(Work Flow) 工作流就是工作流程的计算机模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。通俗的说,流程就是多个人在一起合作完成某件事情的步骤,把步骤变成计算机能理解的方式就是工作流。 公司内采用纸张表单,手工传递的方式,一级一级审批签字,工作效率低下,对于统计报表功能则不能实现。而采用工作流软件,使用者只需在电脑上填写有关表单,会按照定义好的流程自动往下跑,下一级审批者将会收到相关资料,并可以根据需要修改、跟踪、管理、查询、统计、打印等,大大提高了效率,实现了知识管理,提升了公司的核心竞争力。 作为一个成熟稳定的工作流产品,不仅提供日常办公和关键业务流程智能化管理,而且能根据公司的特殊实际要求轻松方便地随时定制各种流程,并可实现不同角色不同的跟踪、查询、统计、打印等强大功能 1.2.工作流管理系统(Workflow Management System) 工作流管理系统(WfMS)的主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。工作流管理系统是定义、创建、执行工作流的系统,应能提供以下三个方面的功能支持: 1.定义工作流:包括具体的活动、规则等 2.运行控制功能:在运行环境中管理工作流过程,对工作流过程中的活动进行调度 3.运行交互功能:指在工作流运行中,WfMS与用户(活动的参与者)及外部应用程 序工具交互的功能。 一、定义工作流 二、执行工作流

jBPM

jBPM-jPDL学习笔记—框架设计简介(一) 概述: jBPM(JBoss Business Process Management业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。 jPDL是构建于jBPM框架上的流程语言之一。在jPDL中提供了任务(tasks)、待处理状态(wait states)、计时器(timers)、自动处理(automated actions)…等术语,并通过图型化的流程定义,很直观地描述业务流程。 jPDL可以部署于Java语言的任何应用环境下,JavaSE Application(Swing/SWT)、JavaEE Application(Application Server) jPDL分发包组成 目前jPDL的最新版本是3.2.2,您可以在以下地址: https://www.doczj.com/doc/eb9713484.html,/jbossjbpm/jpdl_downloads/ 获得官方下载包。下载包分为两种,一种是标准包(jbpm-jpdl-3.2.2.zip)只有20M左右;一种是套件包(jbpm-jpdl-suite-3.2.2.zip)将近80M。两者最大的区别是套装包自带一个已经配置好的jboss服务,下载解压缩后,可直接运行。 jPDL的核心程序包(jbpm-jpdl.jar) 它是一个典型的jar文件,它涵盖对流程定义和运行时流程实例上下文环境的操作API。在最简化的业务流程样例中,jPDL将流程定义存储与XML格式的定义文件中,在运行时载入内存,在内存里记录完整的业务实例和执行过程的环境变量,并完成全部操作。显然,在实际应用中,流程信息必须被持久化的存储于数据库中。jPDL使用了Hibernate作为其对象持久化的API。 Graphical Process Designer插件(jbpm-jpdl-designer-3.1.2.zip) 它是一个基于Eclipse的图型编辑插件。使用它可以对业务流程进行可视化的定制,而无须手动编辑XML文件。该插件还提供了流程定义上传功能,可以将新定义的流程发布到在线运行的jPDL系统上。

jbpm工作流入门教程

jbpm工作流入门教程 1.jBPM的简单介绍 jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储。 参考 https://www.doczj.com/doc/eb9713484.html,/products/jbpm 2.jBPM和myeclipse的冲突 当eclipse安装了myeclipse和jBPM时候,可能有冲突,具体表现在jBPM 的流程设计器不能在eclipse中使用。 3.Hibernate连接mysql数据库的一般参数 下面的配置参数,根据需要可以修改: jbpmtest是mysql中的schema的名字; GBK是字符集,可以根据需要修改; username=root,mysql数据库的用户名是root; password=mysql,mysql数据库的用户密码是mysql; hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.connection.driver_class=com.mysql.jdbc.Driver hibernate.connection.url=jdbc:mysql://localhost/jbpmtest?useUnicode=true&characterEncoding= GBK

https://www.doczj.com/doc/eb9713484.html,ername=root hibernate.connection.password=mysql hibernate.show_sql=true hibernate.c3p0.min_size=1 hibernate.c3p0.max_size=3 4.Hibernate连接Oracle数据库的一般参数 hibernate.dialect=org.hibernate.dialect.Oracle9Dialect hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver hibernate.connection.url=jdbc:oracle:thin:@localhost:1521:orcl https://www.doczj.com/doc/eb9713484.html,ername =jbpm hibernate.connection.password=jbpm 5.为jBPM创建数据库表等内容 5.1.为mysql创建数据库以及数据内容 JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().dropSchema(); JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().createSchema(); 这2个语针对mysq有效. 5.2.为oralce创建数据库以及数据内容 JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().dropSchema();

JBPM源码浅析

JBPM源码浅析 关键字: jbpm workflow 工作流 离职啦,工作交接中,记录一下。 就如同了解Servlet规范、Servlet容器设计和实现一样,学会一种workflow 的建模、引擎设计和实现也是必备的。工作流这东西是业务系统的一个核心模块,现在的大多数企业业务系统大多数是业务驱动的,如新闻行业采编发、制造业的采供销、金融保险的审批等,协同OA就不用说了。BPM、ESB、SOA现在很火啊! 下面的总结肯定欠成熟,70%合理就不错啦,看到这篇blog的朋友,一定要批判接受哦。 当前我指的JBPM是3.2版本,因为从JBPM2.0到3.0,其API从package到class 都完全重新设计了,以及其背后的建模思想和架构。在2.0版本里,是按照Spring+Hibernate那种Transaction Script方式组织的,OO的概念比较弱,里面是大量的interface、impl、service。而3.0版本,完全按Domain Model方式组织,Hibernate透明持久化,它是我见到的O/R Mapping最优雅的应用。 在当前的3.2版本里,其整体架构可以这么去理解:领域对象,如ProcessDefinition、ProcessInstance、Node、Token、Transition等,都是Rich Model,里面的方法主要是处理业务,以及建立领域对象之间的关联,持久化则完全放在XXXSession中,如TaskMgmtSession,GraphSession等,也可以认为这些XXXSession是DAO,负责处理持久化。另外, org.jbpm.persistence.db.DbPersistenceService这些类相当于最底层的数据库Helper类。总之,JBPM的技术架构非常清晰易懂,也是非常典型的Domain Driven Design,在这种架构中,分层的概念被弱化了。 上面是从架构的角度看待JBPM设计,其引擎设计和实现,则隐藏在架构下。了解其引擎设计思想,我的建议是,先仔细读读JBPM的User Guide第四章Graph Oriented Programming,专门探讨流程建模的理论,里面附带了一个微型的JBPM 实现,几乎包括流程建模的绝大部分,如顺序流、并行、分支等: https://www.doczj.com/doc/eb9713484.html,/jbpm/gop/jbpm.gop.zip,我建议研读JBPM源码前,先把这个理解透,JBPM的流程引擎核心代码和它非常相似,包括类名,只是扩展了一些。 我用代码统计工具统计了一下,JBPM源码总共4w多行,除去注释和空行,约2万6千行。需要我们hack的核心、比较难、代码多的类约40个(共400多),反正它花了我整四天的时间,现在基本都弄清楚了。我主要是通过一个请假流程的部署、创建、任务执行来动态debug、静态查看的。JBPM源码中最难读懂的那部分是引擎调度,也就是org.jbpm.graph相关的几个包,最重要的是GraphElement和其子类Transition等、Node及其子类Fork等、ExecuteContext 和Token。而引擎调度这部分, JBPM附带了一个微型JBPM实现,我在前面介绍

2020年(BPM业务流程管理)jbpm工作流全程笔记

(BPM业务流程管理)jbpm工作流全程笔记

1.工作流 <1>工作流(Workflow):就是自动运作的业务过程部分或整体,表现为参与者对文件、信息或任务按照规程采取行动,并令其在参与者之间传递。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。工作流是针对工作中具有固定程序的常规活动而提出的一个概念。通过将工作活动分解成定义良好的任务、角色、规则和过程来进行执行和监控,达到提高生产组织水平和工作效率的目的。 <2>工作流就是工作流程的计算机化,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。 <3>通俗的说,就是多个人在一起合作完成某件事情。 <4>工作流可实现业务或公文的申请、审批、会签、登记、操作等环节的管理,可将工作过程进行记录,便于日后检查。并实现数据的规范化录入、查询、统计和存档。OA(办公自动化)主要技术之一就是工作流。 2.工作流管理系统(WorkflowManagementSystem,WfMS) <1>主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。 <2>工作流管理系统是定义、创建、执行工作流的系统,应能提供以下三个方面的功能支持: ①定义工作流:包括具体的活动、规则等; ②运行控制功能:在运行环境中管理工作流过程,对工作流过程中的活动进行调度; ③运行交互功能:指在工作流运行中,WfMS与用户(活动的参与者)及外部应用程序工具交互的功能。 3.JBPM,全称是JavaBusinessProcessManagement <1>JBPM是一种基于J2EE的轻量级工作流管理系统,jBPM是公开源代码项目,官方主页为:http:///jbossjbpm <2>Jbpm的使用 **步骤 *编写流程定义(定义规则); *部署流程定义到系统中; *执行流程(使用指定的流程定义); ①编写流程定义 举例:员工报销费用的流程描述:员工需要先填写报销单据;交给其经理进行审批;审批(通过)后到财务去领款。 以上流程由三个步骤组成,每个步骤即是一个任务,分别由一个角色执行。应该使用jBPM提供的JPDL (jBPMProcessDefinitionLanguage)来描述这个流程,这样使用了jBPM的系统才能看的懂。jPDL:是一种直观的流程语言,可以使用任务、等待状态、定时器、自动化动作等等图形化地表示流程。jPDL 认为一个商务流程可以被看作是一个UML状态图。

相关主题
文本预览
相关文档 最新文档