jBPM源码分析(1)

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()函数中创建流程实例之前读取流程定义。创建完流程实例后,要确保该子流程实例能启动并执行。
 
3. 删除某个流程实例时,若该流程有父流程实例或者子流程实例,此时如果只简单的删除该流程实例,则对其父(或子)流程实例进行数据库操作时会有问题。因为与该流程相关的一些保存在数据库中的对象已被删除。我的一种解决方法是:在父流程实例中保存所有子流程实例的ID,修改父流程实例引用子流程实例(或流程定义)的有关对象的地方(方法是不存对象,而是存其ID,需要对象时再从数据库加载);当删除流程实例时,首先删除所有属于该流程实例的子流程实例。 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值