📄 jbpmhandlerproxy.java
字号:
/** * Created on Jan 23, 2006 * * $Id$ * $Revision$ */package org.springmodules.workflow.jbpm31;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.jbpm.context.exe.ContextInstance;import org.jbpm.graph.def.ActionHandler;import org.jbpm.graph.exe.ExecutionContext;import org.jbpm.graph.exe.Token;import org.jbpm.graph.node.DecisionHandler;import org.jbpm.taskmgmt.def.AssignmentHandler;import org.jbpm.taskmgmt.def.TaskControllerHandler;import org.jbpm.taskmgmt.exe.Assignable;import org.jbpm.taskmgmt.exe.TaskInstance;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.access.BeanFactoryLocator;import org.springframework.beans.factory.access.BeanFactoryReference;/** * Handler that allow retrieval of beans defined in the Spring container from * within jBPM. The class implements the family of jBPM handler interfaces * namely: ActionHandler, AssignmentHandler, DecisionHandler, * TaskControllerHandler. The class can be used through jBPM delegation * facilities, for example: * * <pre> * <action config-type="beanName" class="org.springframework.workflow.jbpm.SpringHandler"> * <beanName>SpringJbpmAction</beanName> * <factoryKey>myFactoryInstance<factoryName> * </action> * </pre> * * where beanName represents a jBPM actionHandler defined inside Spring * container using it's capabilities (IoC, AOP, etc). The optional factoryKey * parameter is used to specify the key under which the bean factory can be * found; if there is only one JbpmFactoryLocator inside the classloader, * factoryKey can be skipped. * * @author Costin Leau * */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); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -