jbpm中各种handler如何使用spring里面的bean方法02

这是对上一篇的同样问题的更好的方法:

 

package cn.edu.hbmy.oa.manager.impl;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.access.BeanFactoryLocator;
import org.springframework.beans.factory.access.BeanFactoryReference;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springmodules.workflow.jbpm31.JbpmFactoryLocator;

public class BaseAutowire {

	
	public BaseAutowire() {
		((AutowireCapableBeanFactory)retrieveBeanFactory())
				.autowireBeanProperties(this,
						AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE,true);
	}

	protected BeanFactory retrieveBeanFactory(){
		
		BeanFactoryLocator beanFactoryLocator = new JbpmFactoryLocator();
		BeanFactoryReference beanFactoryReference = beanFactoryLocator.useBeanFactory(null);
		BeanFactory beanFactory = beanFactoryReference.getFactory();
		
		return beanFactory;
	}
}

 

 <?xml version="1.0" encoding="UTF-8"?>

<process-definition
  xmlns="urn:jbpm.org:jpdl-3.2"  name="assignmentHandler5">
   <start-state name="开始">
      <transition name="提价给角色" to="角色审批"></transition>
   </start-state>
   <task-node name="角色审批">
   		<task name="角色审批">
   			<assignment  class="cn.edu.hbmy.oa.manager.handler.MyAssignmentHandler5">
   				 <roleName>系统管理员</roleName>
   			</assignment>
   		</task>
      <transition name="角色审批完成" to="完成"></transition>
   </task-node>
   <end-state name="完成"></end-state>
</process-definition>
 

 

public class MyAssignmentHandler5 extends BaseAutowire implements AssignmentHandler {
	private String roleName; //jbpm来注入
	
	@Override
	public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception {

		if(roleName == null){
			throw new RuntimeException("角色名称不可以是空");
		}
		UserManager userManager = (UserManager)retrieveBeanFactory().getBean("userManager");  //获取sprig管理的bean
		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); //将角色下面的用户设置未流程实例的审批人
	}
 

}
 

这个方法可以不需要再spring的配置文件中添加什么了,而且比上一篇的方法好.

你可能感兴趣的:(handler)