怎么获取JBPM节点类型
如何获取JBPM节点类型
JBPM节点均是继承于Node,ProcessDefinition与Node是OneToMany的关系,ProcessDefinition与StartState是ManyToOne的关系。
在操作流程时,有时候需要依据节点类型作相应的处理,那么如何获取节点类型呢?
这样的处理方式常规看是没有问题,但是不见得代码是稳健的,一定就可以获取节点类型。
其原因是延时加载。流程定义的StartState就是延时加载的,运行过程中有些节点也是延时对象。可以通过获取延时对象,然后再参与运算:
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(); }