如何在JBPM的Action中访问Spring中的JavaBean
2009-03-26 14:29
323 查看
如果你希望在Jbpm的Action中,访问到spring中的bean:
1、 spring中按照通常的方法来定义action,该注入什么bean 就注入什么bean,如:
2、 在JBPM的流程定义中,使用JbpmHandlerProxy类即可
下面的代码就是spring-modules中的JbpmHandlerProxy的代码,可以参考一下:
1、 spring中按照通常的方法来定义action,该注入什么bean 就注入什么bean,如:
<beans> <!-- Spring bean visible inside jBPM processed --> <bean id="jbpmAction" class="org.MyJbpmActionHandler" singleton="true"> <property name="someProp" ref="anotherBean"/> ... </bean> .. </beans> |
<?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> </action> </transition> </state> <end-state name="end"/> </process-definition> |
public class JbpmHandlerProxy implements ActionHandler, AssignmentHandler, DecisionHandler, TaskControllerHandler { private static final Log logger = LogFactory.getLog(JbpmHandlerProxy.class); private String factoryKey; /** * Spring beanName name. */ private String targetBean; /** * @return Returns the beanName. */ public String getTargetBean() { return targetBean; } /** * @param targetBean The beanName to set. */ public void setTargetBean(String bean) { this.targetBean = bean; } /** * @return the bean factory key */ public String getFactoryKey() { return factoryKey; } /** * @param factoryKey the bean factory key */ public void setFactoryKey(String factoryKey) { this.factoryKey = factoryKey; } /** * Retrieves the bean factory. * * @return */ protected BeanFactory retrieveBeanFactory() { BeanFactoryLocator factoryLocator = new JbpmFactoryLocator(); BeanFactoryReference factory = factoryLocator.useBeanFactory(factoryKey); if (factory == null) throw new IllegalArgumentException("no beanFactory found under key=" + factoryKey); try { return factory.getFactory(); } finally { factory.release(); } } /** * Find the beanName inside the Spring container. * * @return */ protected Object lookupBean(Class type) { return retrieveBeanFactory().getBean(getTargetBean(), type); } /** * @see org.jbpm.graph.node.DecisionHandler#decide(org.jbpm.graph.exe.ExecutionContext) */ public String decide(ExecutionContext executionContext) throws Exception { DecisionHandler handler = (DecisionHandler) lookupBean(DecisionHandler.class); if (logger.isDebugEnabled()) logger.debug("using Spring-managed decisionHandler=" + handler); return handler.decide(executionContext); } /** * @see org.jbpm.graph.def.ActionHandler#execute(org.jbpm.graph.exe.ExecutionContext) */ public void execute(ExecutionContext executionContext) throws Exception { ActionHandler action = (ActionHandler) lookupBean(ActionHandler.class); if (logger.isDebugEnabled()) logger.debug("using Spring-managed actionHandler=" + action); action.execute(executionContext); } /** * @see org.jbpm.taskmgmt.def.AssignmentHandler#assign(org.jbpm.taskmgmt.exe.Assignable, * org.jbpm.graph.exe.ExecutionContext) */ public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception { AssignmentHandler handler = (AssignmentHandler) lookupBean(AssignmentHandler.class); if (logger.isDebugEnabled()) logger.debug("using Spring-managed assignmentHandler=" + handler); handler.assign(assignable, executionContext); } /* * (non-Javadoc) * @see org.jbpm.taskmgmt.def.TaskControllerHandler#initializeTaskVariables(org.jbpm.taskmgmt.exe.TaskInstance, * org.jbpm.context.exe.ContextInstance, org.jbpm.graph.exe.Token) */ public void initializeTaskVariables(TaskInstance taskInstance, ContextInstance contextInstance, Token token) { TaskControllerHandler handler = (TaskControllerHandler) lookupBean(TaskControllerHandler.class); if (logger.isDebugEnabled()) logger.debug("using Spring-managed taskControllerHandler=" + handler); handler.initializeTaskVariables(taskInstance, contextInstance, token); } /* * (non-Javadoc) * @see org.jbpm.taskmgmt.def.TaskControllerHandler#submitTaskVariables(org.jbpm.taskmgmt.exe.TaskInstance, * org.jbpm.context.exe.ContextInstance, org.jbpm.graph.exe.Token) */ public void submitTaskVariables(TaskInstance taskInstance, ContextInstance contextInstance, Token token) { TaskControllerHandler handler = (TaskControllerHandler) lookupBean(TaskControllerHandler.class); if (logger.isDebugEnabled()) logger.debug("using Spring-managed taskControllerHandler=" + handler); handler.submitTaskVariables(taskInstance, contextInstance, token); } } |
相关文章推荐
- spring如何可以同时访问静态资源和Action
- 如何告诉spring初始化指定配置文件中的javabean
- 普通javaBean如何获取到spring托管对象
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- spring如何可以同时访问静态资源和Action
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- 如何在java对象里访问Spring中已加载的property内容
- SPRING IN ACTION 第4版笔记-第二章-003-以Java形式注入Bean、@Bean的用法
- 如何使用java代码来访问managed-bean 的属性?
- java 如何在listener(监听器) 中使用Spring容器管理bean
- Java - Spring中如何使用注解来配置Bean?有哪些相关的注解?
- 如何在java对象里访问Spring中已加载的property内容
- Spring如何管理Java普通类(Java类获取Spring容器的bean)
- Spring 如何通过 Java 代码装配 bean?
- Java中如何获取Spring中配置的bean
- Action中如何通过@Autowired自动注入spring bean ?
- liferay5.2.2中的action如何调用Spring中的bean?
- SPRING IN ACTION 第4版笔记-第二章WIRING BEANS-008-在XML配置文件中引入JAVA配置文件 <import> 、<bean>
- 【Spring in action】自动化装配Bean、通过Java代码及xml装配Bean
- 关于Java Web Spring 框架下将静态文件放于WEB-INF下如何访问