分析jBPM源码的方法
分析jBPM源码的方法
jBPM中有三处我认为不妥的地方:
1. 在identity模块中,org.jbpm.identity.assignment.ExpressionAssignmentHandler.java的87行。如果表达式结果为Group时,应用pull分派模式,此时将Group中的每个成员加入到流程实例的pooledActors。但原来的代码将entity的name加入pooledActors显然不行,更正如下:
else if (entity instanceof Group)
{
// put the group in the pool
Set users = ((Group) entity).getUsers();
String[] actorIds = new String[users.size()];
int i = 0;
Iterator iter = users.iterator();
while (iter.hasNext())
{
actorIds[i] = ((User) iter.next()).getName();
i++;
}
assignable.setPooledActors(actorIds);
}
2. 子流程调用的问题。在org.jbpm.graph.def.node.ProcessState.java中,对流程定义进行解析时(read()函数中),若读取到已指定的子流程名和版本号,原来代码中在此处读取subProcessDefinition,进行保存。这就要求所有子流程定义必须在父流程定义之前进行部署,这样不太合理。删掉loadProcessDefinition()的相关代码,在ProcessState的execute()函数中创建流程实例之前读取流程定义。创建完流程实例后,要确保该子流程实例能启动并执行。