jbpm中各种handler如何使用spring里面的bean?
如果处理简单的流程,task,里面的class 直接使用我们自己定义的handler就可以了(当然要实现AssignmentHandler),就算是要要添加角色名称直接使用<roleName>xxxxx</roleName>就ok了.(不用自己添加set方法去给roleName赋值,jbpm回自己赋值的,这就是实现AssignmentHandler的好处之一)
但是如果流程复杂了,需要使用spring管理的bean怎么办?可以使用spring_module里面的方案,说明如下:
Another important feature of Spring Modules jBPM integration is allowing Spring configured beans to be reused inside jBPM actions. This allows one to leverage Spring container capabilities (bean lifecycles, scoping, injection, proxying just to name a few) in a transparent way with jBPM. Consider the following Spring application context:
<beans>
<!-- Spring bean visible inside jBPM processed -->
<bean id="jbpmAction" class="org.MyJbpmActionHandler" singleton="true">
<property name="someProp" ref="anotherBean"/>
...
</bean>
..
</beans>
and jBPM process definition:
<?xml version="1.0" encoding="UTF-8"?>
<process-definition name="simpleWorkflow">
<start-state>
<transition to="myState">
</transition>
</start-state>
<state name="myState">
<transition to="end">
<action name="myAction" config-type="bean"
class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy">
<targetBean>jbpmAction</targetBean>
<factoryKey>jbpmConfiguration</factoryKey>
</action>
</transition>
</state>
<end-state name="end"/>
</process-definition>
例子:
jbpm流程定义文件:
<?xml version="1.0" encoding="UTF-8"?>
<process-definition
xmlns="urn:jbpm.org:jpdl-3.2" name="assignmentHandler3_01">
<start-state name="开始">
<transition name="提价给角色" to="角色审批"></transition>
</start-state>
<task-node name="角色审批">
<task name="角色审批">
<assignment class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy">
<targetBean>myAssignmentHandler3</targetBean>
</assignment>
</task>
<transition name="角色审批完成" to="完成"></transition>
</task-node>
<end-state name="完成"></end-state>
</process-definition>
package cn.edu.hbmy.oa.manager.handler;
import java.util.List;
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.taskmgmt.def.AssignmentHandler;
import org.jbpm.taskmgmt.exe.Assignable;
import cn.edu.hbmy.oa.manager.UserManager;
import cn.edu.hbmy.oa.manager.impl.BaseAutowire;
public class MyAssignmentHandler3 implements AssignmentHandler {
//public class MyAssignmentHandler3 extends BaseAutowire implements AssignmentHandler {
private String roleName;
private UserManager userManager;
@Override
public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception {
if(roleName == null){
throw new RuntimeException("角色名称不可以是空");
}
List<?> rolesName = userManager.searchUserOfRole(roleName);
if(rolesName.isEmpty()){
throw new RuntimeException("角色[" + roleName+ "]还没有被分配给用户");
}
String[] role_name = rolesName.toArray(new String[rolesName.size()]);
assignable.setPooledActors(role_name); //将角色下面的用户设置未流程实例的审批人
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
}
这个方法虽然好,遗憾的是不能再jbpm的流程定义的xml文件里想原来那样直接提交roleName属性,但是可以再在spring的配置文件里面通过property属性添加roleName的值了
<bean id="myAssignmentHandler3" class="cn.edu.hbmy.oa.manager.handler.MyAssignmentHandler3">
<property name="roleName" value="系统管理员"></property>
<property name="userManager" ref="userManager"></property>
</bean>
如果我们直接把jbpm的handler交给spring 管理,再利用spring依赖注入来注入spring的bean,那样是不行的,
因为jbpm自己也会创建一个handler,spring也去创建一个,二者创建的不是同一个,jbpm还是会去调用自己创建的handler,
最终给人的错觉是注入成功,其实会导致空指针异常,
还有就是如果我们把jbpm的handler里面的需要注入的bean设置为static,功能上可以实现的,不过还是创建了2个不同的handler,这样浪费内存,不大好,因此使用spring_module的方法为佳!
分享到:
相关推荐
2. **项目源代码(全,不含jar包).rar**:这可能是一个完整的JBPM项目源代码,包含了流程定义、服务实现、配置文件等,用于展示如何在实际项目中使用JBPM和Spring进行流程管理。 3. **sql.rar**:这个压缩包可能...
1. **引入依赖**:首先,要在Spring应用中使用jbpm,你需要在项目中引入jbpm的相关库,包括jbpm的jar包和Spring对jbpm的支持库。这通常通过Maven或Gradle的依赖管理来实现。 2. **配置jbpm数据源**:jbpm需要一个...
在企业级应用开发中,流程管理引擎JBPM(JBoss Business Process Management)与Spring框架的结合使用是常见的一种技术方案。JBPM是一个灵活、强大的业务流程管理工具,而Spring框架则以其优秀的依赖注入(DI)和...
1. **事务边界**:在Spring中,确保jBPM4的操作与数据库操作处于同一事务范围内,以保证数据一致性。 2. **日志和异常处理**:利用Spring的日志管理和AOP切面,对jBPM4的异常进行统一处理,提高系统的健壮性。 3. **...
首先,我们需要在Spring配置文件中定义JBPM的相关bean,包括流程引擎、工作内存、流程定义仓库等。这些bean是Spring与JBPM交互的基础,通过它们可以启动流程实例、执行任务以及查询流程状态。 其次,创建流程定义...
在Spring中,我们可以使用`jbpmDeployer` bean来部署这些流程定义文件。 3. **任务服务**:集成后,我们可以通过Spring的`JbpmTaskService`来操作任务,例如查询任务、领取任务、完成任务等。 4. **流程实例管理**...
8. **spring-modules-jbpm31.jar**:这个 JAR 文件很可能是 Spring 与 JBPM 3.1 版本的集成组件,包含了必要的桥接和适配器类,以便于在 Spring 环境中使用 JBPM。 9. **readme.txt**:这个文件通常包含集成指南、...
标题中的“spring与JBPM整合ppt”指的是将Spring框架与JBPM(Business Process Management,业务流程管理)系统相结合,以实现更加高效、灵活的企业级应用流程管理。在本PPT中,我们预计会探讨以下几个核心知识点: ...
Jbpm4.4整合Spring Hibernate4后,适用于各种需要业务流程管理的场景,如审批流程、订单处理、客户服务等。通过这种整合,开发者可以快速构建出具有强大流程管理能力的应用,并且能方便地与其他Spring生态中的组件...
在Spring中配置jbpm4,主要涉及以下几点: 1. 配置jbpm的数据源,使其与Hibernate共用,以确保事务的一致性。 2. 注册jbpm的SessionFactory,使Spring能够管理SessionFactory的生命周期。 3. 配置jbpm的JobExecutor...
jbpm5.4与Spring MVC的集成是企业级应用开发中的常见组合,它结合了jbpm(业务流程管理)的强大功能和Spring MVC的灵活控制层架构。以下将详细阐述这一集成涉及的关键知识点: 1. **jbpm5.4**:jbpm是一个开源的...
jbpm4.4 ibatis-spring 整合
4. **bsh.jar**:BeanShell脚本引擎,允许在流程定义中使用简单的脚本来控制流程走向或进行数据处理。 #### 四、Spring配置 接下来是Spring配置方面的内容。这部分内容展示了Spring如何配置事务管理器和Hibernate...
文档是原创,本人从网络上获取了前辈很多知识,觉着有义务反馈给网络,如果觉着文档没用或资源分要的太多,请不要乱喷,毕竟西辛辛苦苦占用工作时间写的,并不是要那点分,只不过想体现一下文档的价值
Spring框架则是Java开发中的核心组件,用于依赖注入和管理bean,它在企业级应用中广泛使用。EXT是基于JavaScript的UI库,主要用于创建富客户端应用程序。当将这三者结合在一起时,可以构建出功能强大且用户友好的...
Jbpm的库文件(如jbpm-jpdl.jar, jbpm-runtime.jar等)需要添加到项目的类路径中,同时Spring的相关库(如spring-core.jar, spring-context.jar, spring-tx.jar等)也不能少。 整合步骤通常包括以下部分: 1. **...
jbpm4.0实例(整合spring2.5+ext3.0+hibernate)
将jbpm4集成到Spring中,可以实现灵活的业务流程自动化,提高开发效率。 在"提前试用spring 集成 jbpm4"这个主题中,我们主要关注的是如何将这两个强大的工具结合在一起,以实现更高效、更灵活的业务流程控制。首先...
5. **流程启动与控制**:Spring中可以通过jbpm的流程服务接口启动新的流程实例,参与到流程的执行中。例如,调用`RuntimeEngine`的`startProcessInstanceByKey()`方法启动流程,`TaskService`的`claim()`和`complete...