摘要: 随着jBPM4.0GA版本的发布,使用jBPM4的人也开始多起来,虽然我们已经翻译了jBPM-4的用户手册和开发指南,但jBPM4的官方文档内容还是不够全面,虽然理论知识比较丰富,但是缺少实践教授内容。我们推出的《每天一课,jBPM4》是jBPM4第一份系列视频教程,手把手教您学会jBPM4,并将jBPM4应用在工作流管理平台中,同时我们还会提供视频课程里的源代码。
阅读全文
posted @
2009-07-29 18:04 卡宴 阅读(3098) |
评论 (7) |
编辑 收藏
摘要: 这2天我们忙着做了下jBPM4和Spring Security的专题页面,提供了不少关于jBPM4和Spring Security的技术资料和示例。
阅读全文
posted @
2009-07-28 14:02 卡宴 阅读(1690) |
评论 (4) |
编辑 收藏
摘要: 在oa里我们实现一套权限管理,包括资源管理、角色管理、用户管理、菜单管理以及组织机构管理,整套权限采用的是RBAC的模型。下面给大家分享下效果,同时也提供源码下载,希望大家多提建议。
阅读全文
posted @
2009-07-22 11:56 卡宴 阅读(2519) |
评论 (6) |
编辑 收藏
摘要: 鉴于各位都非常期待PDF的版本,我便把用户指南提供给大家下载,希望大家能够多多反馈,这样才能提高我们的翻译质量,对大家更是有好处。开发指南的内容更丰富些,如果有感兴趣帮忙校稿的朋友可以联系我们O(∩_∩)O哈哈~
阅读全文
posted @
2009-07-15 01:14 卡宴 阅读(1938) |
评论 (10) |
编辑 收藏
开发文档更新到了jBPM4的GA版本,这次开发文档变更非常大,添加了好几章,并且原来的部分章节也改了名字,具体细节可以查看修改日志。不过架构那章更新的并不多,和jBPM4实际的架构还有些区别,所以这部分大家最好看jBPM4的源码。(用户指南的翻译见上一篇博客)
posted @
2009-07-14 00:28 卡宴 阅读(3331) |
评论 (11) |
编辑 收藏
posted @
2009-07-09 10:35 卡宴 阅读(1468) |
评论 (4) |
编辑 收藏
最近一直在整流程控制台,发现还是有不少成就感的,尤其昨天又实现了动画回放流程。这可是忽悠领导的最佳手段啊,我先给大家看一下我们控制台的规划和进度(提供源码下载地址
):
-------------------------------------------------近期
* 细化task的生命周期,重新整理task操作
* 流程实例历史
* 表格方式查看流程历史
------------------------------------------------- 远景
* 流程仿真
* 修改流程图
* 细粒度权限控制
* 回退
* 会签
* 委派
* swimlane
* BI
* BAM
* 仪表盘
-------------------------------------------------ChangeLog
* 2009-07-01
* [DONE] 实现动画方式回放流程
* [DONE] 实现deployment的suspend, resume(CR1显示已暂停定义列表时出现问题,trunk下已修正,等待GA)
* [DONE] 实现processInstance的suspend, resume, end(CR1和trunk里,都没有暴露suspend和resume方法)
* [DONE] 实现personalTasks, groupTasks, take task, cancel task
* 2009-06-29
* [DONE] 登陆页面,登录名和密码为1/1
* [DONE] 添加start和signal,complete task时,添加变量
* [DONE] 整合web流程设计器,可以直接发布流程定义
* [DONE] 国际化
* 2009-06-01 and before
* [DONE] 发布xml格式的流程定义
* [DONE] 流程定义管理(list, start, delete)
* [DONE] 显示流程图(只在Process Instance详细信息中可显示)
* [DONE] 流程实例管理(list, signal, view, delete)
* [DONE] 任务管理(list, complete)
* [DONE] 追踪流程图(显示Process Instance的当前位置)
* [DONE] 多流向选择
* [DONE] 用户权限(user, group, membership的CRUD功能)
* [DONE] 报表(most active process)
呵呵,现在实现的功能毕竟还是有限,我们的功能规划在一定程度上可能有些局限,希望大家能给多提提建议,认为控制台里还可以加些什么功能。这可是开源的啊,大家为了自己也要多提出建议来,O(∩_∩)O哈哈~
下面是我们控制台一些功能的视频演示,包括流程设计和发布,动画回放流程等。
大家可以看看视频:
http://www.family168.com/bbs/dispbbs.asp?boardid=6&Id=473
截图请看:
http://www.family168.com/bbs/dispbbs.asp?boardid=6&Id=463
svn的下载地址:
http://jbpmside.googlecode.com/svn/trunk
posted @
2009-07-02 12:34 卡宴 阅读(1137) |
评论 (4) |
编辑 收藏
摘要: 我们的控制台现已实现了流程管理、流程监控、流程建模和仿真以及报表等,建模和仿真是使用js做了一个web设计器jPDL整合在控制台中。
阅读全文
posted @
2009-06-29 14:11 卡宴 阅读(1651) |
评论 (1) |
编辑 收藏
要知道如何将jBPM4与Spring整合,可以先了解jBPM4的IOC容器,如果不了解的可以先看ronghao的这篇文章
http://www.javaeye.com/topic/381607,是介绍jBPM4的IOC容器的。下面我们介绍jBPM与Spring整合的2种方式:
第一种:手工将SessionFactory放入jBPM4中。
第1步:更改jbpm.spring.default.cfg.xml配置文件,将下面的部分注释掉
<!--
<hibernate-configuration>
<cfg resource="jbpm.hibernate.cfg.xml" />
</hibernate-configuration>
<hibernate-session-factory />
-->
注释的部分是在jBPM4中创建了sessionFactory,而我们只需要一个sessionFactory。既然要将jBPM4与Spring的整
合,那就希望由Spring来统一管理sessionFactory和事务,在Spring的配置文件中构造一个sessionFactory。
ProcessEngine是jBPM4的Facade模式,一切由它与外部交互,
第2步:在Spring配置文件中写一个bean:
<bean id="processEngine" class="com.family168.jbpm.ProcessEngineFactoryBean">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
第3步:在ProcessFactoryBean中注入SessionFactory:
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
第4步:在ProcessFactoryBean中创建一个SpringConfiguration,然后将sessionFactory放入
SpringConfiguration中,再从SpringConfiguration得到processEngine,代码如下:
public void afterPropertiesSet() {
SpringConfiguration cfg = new SpringConfiguration(jbpmConfigurationLocation);
cfg.setApplicationContext(applicationContext);
cfg.setSessionFactory(sessionFactory);
this.processEngine = cfg.buildProcessEngine();
}
然后我们的工作就可以开展了,可以从processEngine得到所有的service。比如:
ProcessEngine processEngine = (ProcessEngine) ctx.getBean("processEngine");
RepositoryService repositoryService = processEngine.getRepositoryService();。
第2种:获得Hibernate的SessionFactory。
第1步:与第一种方式的第1步一样。
第2步:更改jbpm.tx.spring.cfg.xml配置文件:
将
<standard-transaction-interceptor/>
改成 <spring-transaction-interceptor current="true" />
然后将
<transaction/>
<hibernate-session/>
改成 <hibernate-session current="true"/>
这部分修改是将jBPM4创建的spring事务和hibernate的session改成从当前的ThreadLocal中获得session和事务。
第3步:在Spring配置文件中写bean,processEngine和template:
<bean id="jbpmConfiguration" class="org.jbpm.pvm.internal.cfg.SpringConfiguration">
<constructor-arg value="jbpm/jbpm.cfg.xml" />
</bean>
<bean id="processEngine" factory-bean="jbpmConfiguration" factory-method="buildProcessEngine" />
<bean id="jbpmTemplate" class="com.family168.jbpm.JbpmTemplate">
<property name="processEngine" ref="processEngine"/>
<property name="dataSource" ref="dataSource"/>
</bean>
processEngine直接使用factory-bean指向jbpmConfiguration,也就是
org.jbpm.pvm.internal.cfg.SpringConfiguration,并从SpringConfiguration的
buildProcessEngine中获得。
jbpmTemplate主要是控制事务,在processEngine外面创建事务,这样使用的时候会先调用jbpmTemplate,再调用processEngine,否则它会说事务没有启动。在jbpmTemplate中注入processEngine:
public void setProcessEngine(ProcessEngine processEngine) {
this.processEngine = processEngine;
}
这里我的理解是我们在上面已经将事务改成从当前的Threadlocal中获得,所以jBPM4是必须当前有事务,如果我没有创建事务的话,在使用
processEngine时就会说事务没有启动。所以我们就封装了一个jbpmTemplate,如果我的理解有误还请大家指出。
第1种整合方式的例子下载
http://www.family168.com/,第2种整合方式之后可以看我们的jBPM-Side里的控制台。
posted @
2009-06-29 13:27 卡宴 阅读(1473) |
评论 (0) |
编辑 收藏
7.6. 流程同步
为了进行流程同步建模,在执行中这是一个父子树形结构。 这个想法是执行主路径是树的根。 流程的主路径也被称作流程实例。 当在给定流程定义上启动或创建一个新流程实例时, 执行便被创建。
现在,因为执行的主路径和流程实例是相同对象, 这保证了用法的简单, 在没有同步情况的简单流程下。
基本执行结构的UML类图
图 7.6. 基本执行结构的UML类图
为了建立执行的多同步路径,活动实现比如一个分支或切分 创建子执行, 使用ActivityExecution.createExecution方法。 活动实现比如结合或合并可以停止流程的这些同步路径, 通过调用执行同步的stop方法。
只有叶子执行可以激活,非叶子执行应该不是激活的。 这个执行的树形结构没有坚持一个同步或结合行为的特殊类型。 它从事着分支或和切分 和结合或和合并来使用执行树结构, 用任何方式,他们想定义期望的同步行为。 这里我们看一个同步执行的例子。
执行的同步路径
图 7.7. 执行的同步路径
这里有执行的一个付款和一个发货路径。 在这种情况,水平线上的活动展示了分支和结合。这个执行显示了三个执行。 执行的主路径不是激活的(显示成灰色) 执行的付款和发货路径是激活的,分别指向了 bill和ship活动。
从事活动行为的实现,是他们想使用的执行结构。 假设多个任务必须在执行进行之前完成。 活动行为可以为这个产生一系列子执行。
或者可以选择,任务组件可以支持任务组, 分配给单独的执行。在那种情况, 任务组件成为同步任务的响应,
因此把这个责任移动到执行树形结构范围之外。
7.7. 异常处理器
在所有分配到流程的代码中,像 Activity,EventListeners和 Condition,可能分配给异常处理器。
这可以想成是把这些实现的方法实现包含在try-catch块中。 但是为了构建更多可复用的构建块, 为了委派类和异常处理逻辑,
异常处理器可以添加到核心流程模型中。
一个异常处理器可以分配给任何流程元素。 当一个异常发生在一个委派类中,一个匹配的异常处理器就会被找到。 如果找到了一个这样的异常处理器,它会有一个处理这个异常的机会。
如果一个异常处理器处理完成,没有出现问题,然后这个异常会 被认为是处理了,就会在委派代码调用后继续。 比如,一个转移有三个动作,第二个动作抛出一个异常, 这个异常被异常处理器处理,然后
编写自动活动,异常处理器提醒是很容易的。 默认是任意执行。没有方法需要在执行中调用。
所以如果一个自动活动抛出一个异常,被异常处理器处理, 这个执行会在这个执行后继续执行。这对于控制流向活动
就会有一个更大的困难。它们可能需要包含try-finally块 来调用执行中对应的方法,在异常处理器
获得一个机会来处理异常。比如,如果活动是等待状态, 然后发生了一个异常,这里就会有一个风险,线程会跳出
execution.waitForSignal()的调用, 导致执行在这个活动以后继续执行。
TODO: exceptionhandler.isRethrowMasked
TODO: transactional exception handlers
TODO: we never catch errors
7.8. 流程修改
TODO: 流程修改
7.9. 锁定和流程状态
一个执行的状态不是激活就是锁定。 一个激活的执行不是执行就是等待外部触发器。 如果一个执行不是STATE_ACTIVE,那么它就是被锁定。 一个锁定的执行是只读的,不能接受任何外部触发器。
当一个新执行被创建时,它是STATE_ACTIVE。 为了把状态修改成锁定状态,使用lock(String)。一些STATE_*常量 被提供了,它们演示了最常用的锁定状态。 但是在图片中的'...'状态展示了任何字符串 都可以作为状态提供给lock方法。
执行的状态
图 7.8. 执行的状态
如果一个执行被锁定,修改执行的方法会 抛出一个PvmException,信息会引用真实的锁定状态。
触发事件,更新变量,更新优先级,添加注释 不会当做是修改执行。 子节点的创建和删除也不会检测,
这意味着那些方法可以被外部API客户和活动行为调用, 即使执行在锁定状态。
确保比较getState()和STATE_*常量时 使用.equals,不要使用'==',因为如果执行从持久存储加载。 会创建一个新字符串,而不是使用常量。
一个执行实现会被锁定:
* 当它结束
* 当它暂停
* 在异步延续过程中
更多的,锁定可以被活动实现使用, 让执行在等待状态下只读,然后为这个执行传递 的外部实例就像这样:
* 一个人员任务
* 一个服务调用
* 一个等待状态当探测器检测一个文件的出现时就结束
在这些情况,策略是外部实例应该获得 执行的完全控制,因为它想要控制什么应该允许,什么不应该。 为了获得那种控制,他们锁定了执行,所以所有内部交互 必须通过外部实例传递。
一个创建外部实例的主要原因是, 它们可以在执行已经执行过还存在。比如, 在服务调用的情况,定时器可以导致执行获得超时转移。
当响应在超时后到达,服务调用实例应该 确认它没有signal这个执行。所以服务调用可以看做 一个活动实例(活动实例)
是对活动每个执行的唯一实例。
外部实例它们自己负责管理执行锁定。 如果定时器和客户端应用结果是选择 外部实例,而不是直接选择执行,然后在理论上是不必要的。 它是从事活动行为实现,无论它希望 执行锁定还是解锁。
posted @
2009-06-26 12:05 卡宴 阅读(1078) |
评论 (0) |
编辑 收藏