本文转自:http://java.csdn.net/page/75dcd30c-156f-4bec-ae5f-814db3f848d0
jBPM 是一个非常优秀的开源工作流引擎,虽然他不是一个一站式的工作流平台,不过它已经为我们提供了比较丰富的底层操作,为了满足特定的项目需求,我们一般需要对其进行二次开发,才能适用于具体的业务需求。
其中一个主要的扩展点是针对 TaskNode 进行的用户的分配。TaskNode 是 jBPM 中一个非常重要的概念,一个任务节点可以包含若干个任务,不同的任务可以由不同的人来完成,任务实例被分配给 actorId 来完成,其中指定到人的分配工作就是 Assignment 要处理的,这也是我们需要定制的功能,为了实现用户的分配,我们需要实现 AssignmentHandler 接口,接口原型如下。
public interface AssignmentHandler extends Serializable { void assign(Assignable assignable, ExecutionContext executionContext) throws Exception; }
通常用代码实现的话,我们可以让一个类实现这个接口,并在 swimlane 或者 tasknode 中的 assignment 指定该类。但是,这样的灵活性是显然不够的,在系统的使用过程中,分配策略会不断的进行调整,因此我们需要更为灵活的解决方案,jBPM 本身可以使用基于 Bean Shell 的脚本来写分配策略,但是 Bean Shell 不是那么强大,我们需要更为强大的解决方案,因此,我们选用了已经被 JBoss 收为旗下的 JBoss Drools 4.0 规则引擎 (在 3.0 的时候曾经改名为 JBoss Rules,4.0 又改回来了)
jBPM 和 Drools 虽然同在 JBoss 旗下,不过他们目前并没有很好的进行整合,所以我们还是要利用它们系统系统的一些功能来做整合,同样也是实现 AssignmentHandler 接口,不过另外我们利用了 jBPM 里面的一个小小的技巧。看一下这段配置:AgentAssignmentRule 红色标注的这段配置,我们可以理解为,在 RulesAssignmentHandler 这个类里有一个 ruleName 这样的属性,在初始化这个类的时候,jBPM 会把配置中 ruleName 的值 set 给 RulesAssignmentHandler 中 ruleName 的属性。
public class RulesAssignmentHandler implements AssignmentHandler {
protected String ruleName;
public String getRuleName() {
return ruleName;
}
public void setRuleName(String ruleName) {
this.ruleName = ruleName;
}
protected RuleBase readRule(String ruleName) throws Exception {
// 到 classes 下的 /rules 下加载相应的文件
String rulePath = "/rules/" + ruleName + ".drl";
Resource resource = new ClassPathResource(rulePath);
Reader reader = new InputStreamReader(resource.getInputStream());
PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl(reader);
Package pkg = builder.getPackage();
RuleBase ruleBase = RuleBaseFactory.newRuleBase(); ruleBase.addPackage(pkg);
return ruleBase;
}
protected void initRuleContextData(ExecutionContext executionContext, WorkingMemory workingMemory) {
ContextInstance ci = executionContext.getContextInstance(); Map vars = ci.getVariables();
workingMemory.insert(ci);
workingMemory.insert(vars);
}
public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception {
RuleBase ruleBase = readRule(ruleName);
WorkingMemory workingMemory = ruleBase.newStatefulSession();
// 为了简便操作,我只是拿了放入 ExecuteContext 中的 variable 进行逻辑处理i
nitRuleContextData(executionContext, workingMemory); workingMemory.insert(assignable);
workingMemory.fireAllRules();
}
}
对应的 AgentAssignmentRule.drl 文件内容如下,假定 ExecutionContext 中有 price 这个 variable,我们判定当这个值 > 5000 的时候,我们将此任务分配给 senior_agent 来处理。
package org.agilejava.workflow
import java.util.Map;
import org.jbpm.taskmgmt.exe.Assignablerule
rule "Assign Agent"
when
a : Assignable()
Map(this['price'] >= 5000)
then
a.setActorId("senior_agent");
end
就这样,我们就完成了最为简单的 jBPM 和 Drools 的整合,当然这种方式只是简单的利用了 jBPM 的一些特性来做的,我们每次都得指定这个 RulesAssignmentHandler,还是很麻烦的,更好的方式就是我们改写 ProcessDefinition.xml 的 parser,让 Drools 的规则定义成为和 swimlane, actor-id, expression 这样的分配方式同样级别的,让 Drools 成为 jBPM 的一等公民,这个以后研究好了再来和大家分享。
分享到:
相关推荐
【标题】"请假工作流JBPM整合SSH2完整实例"涉及了多个IT领域的关键技术,主要集中在企业级应用开发上。JBPM(Java Business Process Management)是用于业务流程管理的开源框架,而SSH2则指的是Spring、Struts和...
SpringBoot整合Drools是一项将规则引擎Drools与微服务框架SpringBoot结合的技术实践,旨在利用Drools的强大规则处理能力,为SpringBoot应用提供灵活的业务逻辑决策支持。以下将详细介绍这一整合过程中的关键知识点。...
本文将深入探讨如何将Spring 3.2与jBPM 6整合,以实现高效、灵活的企业级业务流程自动化。 Spring是一个开源的Java平台,它为构建企业级应用提供了全面的框架支持,包括依赖注入、AOP(面向切面编程)、数据访问、...
jbpm还提供了对业务规则的支持,可以利用 Drools 这个规则引擎来处理业务逻辑。 在jbpm工作流整合中,关键步骤包括: 1. **环境设置**:安装并配置jbpm所需的JDK、Maven以及相关的数据库(如MySQL或H2)。这些是...
- **规则引擎**:jbpm4集成了Drools规则引擎,使得流程决策可以根据预定义的业务规则动态调整。 2. **Struts2**: - **MVC架构**:Struts2通过Action、Result和Interceptor实现Model-View-Controller模式,解耦...
开发Drools和jBPM 如果要构建或参与kiegroup项目,请。 通过正确设置您的开发环境,它将为您和我们节省大量时间。 它解决了可能会破坏您的开发的所有已知陷阱。 它还描述了所有准则,技巧和窍门。 如果您希望将拉取...
4. **规则集成**:JBPM与Drools规则引擎紧密集成,可以在流程中嵌入复杂的业务决策,根据预定义的规则进行流程决策。 5. **监控和报表**:JBPM提供了一个用户友好的监控平台,可以实时查看流程实例的状态、跟踪任务...
**jbPM4.4与SSH整合详解** jbPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于业务流程的建模、执行和监控。版本4.4是jbPM的一个重要里程碑,提供了强大的流程定义和执行能力。SSH...
5. **规则引擎集成**:jbPM集成了Drools规则引擎,可以在流程中嵌入业务规则,实现规则驱动的业务流程。 6. **事务管理**:jbPM支持JTA事务管理,确保流程操作的原子性和一致性。 ### 四、jbPM 3.2 教程学习资源 ...
- **规则集成**: jbPM与Drools规则引擎紧密集成,允许在流程中嵌入决策逻辑。 ### 2. 设计与部署 - **流程建模**: 使用jbPM Designer,一个基于Eclipse的插件,进行图形化流程设计。 - **流程部署**: 将设计的流程...
由于这个压缩包不包含jbpm.jar,可能意味着用户需要自行获取这个核心组件,并且根据项目需求,将这些jar文件与jbpm.jar整合到一起。同时,描述中提到的“另外还有两个文件由于空间限制,无法上传”,可能指的是...
在"drools集成springboot demo"项目中,我们首先需要了解如何配置drools和SpringBoot的整合。这通常涉及到以下几个步骤: 1. **依赖管理**:在`pom.xml`文件中,我们需要引入drools和SpringBoot的相关依赖。drools...
**jbpm5.1学习资源整合** jbpm5.1是一个基于Java的企业级工作流管理系统,由JBoss公司开发,主要用于管理业务流程。本资源集合包含了jbpm5.1的中文和英文学习文档,旨在帮助开发者深入理解和应用这个强大的工具。 ...
同时,jbpm也是KIE(Knowledge-Intensive Enterprise)平台的一部分,与其他组件如Drools、OptaPlanner等有深度整合。 在《jbpm开发指南》中,你将深入学习如何实际操作jbpm进行流程开发: 1. **环境搭建**:包括...
jbpm集成了Drools规则引擎,允许在业务流程中嵌入决策逻辑。通过规则定义,业务流程可以根据条件自动执行不同的分支,提高流程的智能化水平。 5. **事件处理** jbpm支持事件驱动的流程,允许响应特定的系统或业务...
5. **服务封装**:jbpm 5.0支持服务组件的封装,可以通过服务代理将外部系统整合进流程中,如Web服务、EJB或任何其他可调用的服务。 6. **工作流建模工具**:jbpm提供了基于Eclipse的建模工具,使得开发者可以图形...
【jbpm jar java】——深入理解jbpm与Java的整合应用 jbpm,全称是JBoss Business Process Management,是一款开源的工作流管理系统,主要用于处理业务流程的建模、执行和监控。jbpm的设计目标是提供一个灵活且强大...
Drools整合方面,文档可能包含了如何将Drools集成到不同的环境和框架中,例如通过CDI(上下文依赖注入)集成到应用程序中,以及与Spring框架的整合。同时,也可能介绍了Drools与Android平台、Apache Camel等技术的...
2. **规则引擎整合**:jBPM集成了Drools规则引擎,允许在流程中嵌入复杂的业务规则。 3. **数据库持久化**:jBPM支持多种数据库,如MySQL、Oracle,实现流程实例和变量的持久化存储。 通过这个入门实例,开发者...
同时,熟悉Maven或Gradle等构建工具来管理依赖也是必要的,因为它们可以帮助整合kie-drools-wb的相关jar包到项目中。 总的来说,kie-drools-wb是Drools工作流平台的重要组成部分,为业务规则的开发和管理提供了高效...