jBPM4
jBPM 4.1 发布了
jbpm4正式版发布了
jBPM 4.0 Is Out !
jBPM 4 is ready.
http://downloads.sourceforge.net/jbpm/jbpm-4.0.zip
There is an extremely easy-to-set-up demo included. Step by step instructions to get started quickly.jBPM 4 is a very important milestone for jBPM.
jBPM4与Spring的集成
现在流行抱大腿,不过对眼光的要求也高。要不就如高也,即使四眼,一样无用。对Java企业开发而言,Spring的腿则是一定要抱的。而所谓抱Spring的腿,无外乎三点:
一是通过Spring暴露出服务,将服务配置到Spring的IOC容器里;
二是在自己的运行环境里访问到Spring的IOC容器,能够轻松使用Spring容器里所配置的服务;
三是对于具有事务管理特性的项目来说,将事务管理与Spring的事务管理进行合并。
下面分别讨论:
一、 通过Spring暴露服务
还记得在jBPM4的运行期环境里提到的JbpmConfiguration吗?它是整个jBPM4的入口,并且是整个应用独此一份的。通过它可以获取processEngine,并藉此获得工作流引擎所提供的各种服务:
ProcessEngine processEngine = new Configuration()
.buildProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
ExecutionService executionService = processEngine.getExecutionService();
TaskService taskService = processEngine.getTaskService();
HistoryService historyService = processEngine.getHistoryService();
ManagementService managementService = processEngine.getManagementService();
通过Spring暴露这些服务,配置如下:
jBPM4的运行期环境
万物生长靠太阳,儿童的生长离不开土壤、空气和水,当然,也离不开绿坝娘的调教。应用程序也是如此,离不开数据库连接、事务、日志、消息等,这些,共同构成了应用程序的运行期环境。
理想中的环境是什么样子的哩。好吧,一句话,召之即来,挥之即去,当需要某个服务时,ok,打个响指,该服务就准备好被调用了,调用完毕后也不用费心费力地擦屁股,不必老是提心吊胆有好事者追问:你擦了吗,确定擦了?真的确定擦了?直接丢弃给环境降解处理,自然又环保,还有个好名声叫专注领域逻辑。
一、 运行期环境就是一个餐馆
1、 提供必要的服务
作为一个餐馆,必须有厨师做饭我吃,必须有桌子和椅子。作为运行期环境同样如此,我要发消息,你得提供我发消息的Service,我要获取节点任务,你得扔给我TaskService。
2、 提供获取这些服务的统一方式
好吧,我不会亲自到厨房告诉厨师我想吃什么(因为我担心这样一来我会吃不下去),我也不会亲自到收银台给钱。这些服务有一个统一的获取方式:服务员。我想吃什么和结账,告诉服务员即可。关键是这一方式要统一,要足够简单。Spring最懒,把服务给你全部注入了,当然你也可以握住BeanFactory的纤纤细手,一个一个的get。
3、 提供特定于我线程不安全的服务
我点了一盘鱼香肉丝,隔壁也点了一盘鱼香肉丝,结果服务员让我们吃同一盘鱼香肉丝。我立刻跳起来:靠,你们的服务不是线程安全的吗?!Hibernate的Session正是属于这么一种情况,需要环境进行隔离,我的唯一职责就是吃饭!我的领域逻辑是如何优美的进餐!为此还要不断重构我吃饭的姿势哩。
好不容易吃完饭,付完款,正准备离场。服务员风度翩翩地走到我的身旁,我以为还有打折券供应,结果是:服务员小姐轻启朱唇:先生,麻烦您把吃剩的盘子清洗完毕。
崩溃!
像数据库连接的打开,关闭、事务的打开、提交等都属于运行期环境应该做的事情。
4、 其他的七七八八
杂事不少,例如统一的事件机制、权限拦截等等。
二、 jBPM4的运行期环境
好吧,先来看看如何建立jBPM4的运行期环境:
EnvironmentFactory environmentFactory = new DefaultEnvironmentFactory();
...
Environment environment = environmentFactory.openEnvironment();
try {
... everything available in this block ...
} finally {
environment.close();
}
两个关键的类:EnvironmentFactory和Environment。
EnvironmentFactory是全局的,在整个应用程序中保持一个实例即可。
Environment则是每次方法调用则要new一个。
看看Environment的主要方法:
public abstract Object get(String name);
public abstract <T> T get(Class<T> type);
jbpm4 beta2 发布了
今天我在jboss官方网站上看到jbpm4 beta2发布了。http://www.jboss.org/jbossjbpm/jbpm_downloads/
jBPM与国内流程应用的落差
Topic分享者介绍:荣浩,现Thoughtworks咨询师,曾任东方易维工作流产品经理,有3年的工作流产品研发经验和企业应用实施经验,OPUG及jBPM-side核心成员,出版及发表作品:《企业级AJAX》中文译者之一;《Spring Recipes》中文译者之一;软件世界 2008.10 如何走出工作流困境;程序员 2009.2 收购、巨头、山寨及其他;程序员 2009.4 工作流系统,掰掰洋葱。
在本Topic中,荣浩,主要讲到了wfms系统在国内应用的现状,jBPM4的变化,jBPM本身与国内流程应用的落差,如何填补这个落差,最后讲到了jBPM-side的规划。关于这个Topic现场讨论的不是很多,希望感兴趣的人,能在此继续提问和讨论。
Jbpm4的IOC容器
和Jbpm3一样,Jbpm4实现了自己的IOC容器。以现在的眼光看来,应用程序里一个IOC容器几乎是居家必备的,否则,又要平白多出一坨一坨的工厂类和单态类来。
一、 Jbpm4 IOC容器介绍
IOC容器的目的是管理组件和实现组件之间的解耦。和Spring里的BeanFactory对应,Jbpm4里的接口是Context,具体实现则是WireContext。Context实际在Jbpm4里有更多的含义,它与Environment一起,共同构成了代码运行的运行期环境。在这个环境里可以获取系统的组件,更为重要的是提供了数据库连接(session)和事务(这个稍后会讲)。
先来看看Context接口的核心方法:
Object get(String key);
<T> T get(Class<T> type);
很明显,提供两种从容器里获取组件的方法,一种是通过name,一种是通过type。
对于IOC容器来说,一般情况下都会提供一种加载的方式,比如从xml文件进行加载、从资源文件进行加载。Jbpm4透过WireParser具备从xml加载的能力。
此外,WireContext通过一个Map缓存初始化后的组件。
二、 Jbpm4 IOC容器实现
容器的实现有五个关键类和接口,分别是:WireParser、Binding、Descriptor、WireDefinition和WireContext。

WireParser读取xml文件,同时WireParser会加载一系列的Binding(默认从jbpm.wire.bindins.xml文件读取加载)。
Binding负责根据xml里元素的tag将xml元素转换为对应的Descriptor。
Descriptor负责初始化对象。它们被添加到WireDefinition。
WireDefinition被WireParser返回给WireContext。WireContext创建对象时会访问WireDefinition里的Descriptor,同时将初始化对象的任务委托给Descriptor自身。
需要注意的是:Jbpm4在初始化对象时有着四种策略,分别是:延迟创建和初始化、延迟创建和立刻初始化、立刻创建和延迟初始化、立刻创建和立刻初始化。
立刻创建:在WireContext创建完毕后对象就已经创建。
延迟创建:调用WireContext的get方法获取该对象时才创建该对象。
初始化:一般完成对象属性的注入等操作。
三、 Jbpm4 IOC容器在Jbpm4里的应用
IOC容器在Jbpm4里最重要的作用就是加载Jbpm的总的配置文件(默认是jbpm.cfg.xml),这也是整个Jbpm应用的起点。大概扫一下这个配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<jbpm-configuration xmlns="http://jbpm.org/xsd/cfg">
<process-engine-context>
JBoss组织的Koen Aers在上周的EclipseCon2009大会上讲到了:执行BPMN
上周在加利福尼亚州的圣克拉拉举行的EclipseCon 2009大会之后举行的团体聚会上,JBoss组织的Koen Aers交付了一个讨论BPMN和我们怎样看待在jBPM上执行BPMN模型的话题:执行BPMN,且在http://www.jboss.org/feeds/post/executing_bpmn上提交了ppt的slides,我下载了其pdf版本,并且做了简单翻译,见本贴附件。
jBPM4任务管理:参与模式一瞥
原文地址:http://www.jboss.org/feeds/post/jbpm_task_management_a_look_at_the_participation_model
jBPM 任务管理:参与模式一瞥
Posted on 2009-03-30 09:41:00.0 by Heiko Braun
Since 4.0.0 Beta1
重新回顾jBPM中的任务管理模型,引进了一个新的概念:任务参与。参与模型描述了identies(用户或组)和任务在实际完成中的参与类型:
示例1:用户和业务管理员参与
在此与这个模型非常适合的一个通常的案例是在一个实际执行任务的用户和一个业务管理员监控进展情况之间的区别。依赖于参与类型,某些规则将实际起作用,而其它的将确保任务在给定的约束内被执行(例如,优先级,预定日期等)。
示例2:具有不同的参与类型的任务利益相关者
另一个例子可能是利益相关者监控任务的实际输出,或者是在一个任务上互相协作的不同参与者之间的委托。在这个案例中,一个任务的发起人,一个候选人执行这个工作并且最终的与受者可能是不同的参与类型。
The TaskService API已经反映了那些变化: