如何获取JBPM节点类型

JBPM节点均是继承于Node,ProcessDefinition与Node是OneToMany的关系,ProcessDefinition与StartState是ManyToOne的关系。
在操作流程时,有时候需要依据节点类型作相应的处理,那么如何获取节点类型呢?
	protected void getNodeType(ProcessDefinition processDefinition){
		List<Node> nodes = processDefinition.getNodes();
		for(Node node : nodes){
			if (node instanceof TaskNode){
				// TODO 
			} else if (node instanceof Decision){
				// TODO 
			} else if (node instanceof StartState){
				// TODO 
			} else if (.....) {
			  .....
			} 
		}
	}


这样的处理方式常规看是没有问题,但是不见得代码是稳健的,一定就可以获取节点类型。
其原因是延时加载。流程定义的StartState就是延时加载的,运行过程中有些节点也是延时对象。可以通过获取延时对象,然后再参与运算:

			if (node instanceof HibernateProxy){
				HibernateProxy hiberanteProxy = (HibernateProxy)node;
				LazyInitializer lazyInitializer = hiberanteProxy.getHibernateLazyInitializer();
				node = (Node)lazyInitializer.getImplementation();
			}



你可能感兴趣的:(jbpm)