jbpm中join的setDiscriminator(true)问题
fengshujuan
2007-05-15
JbpmConfiguration config1 = JbpmConfiguration.getInstance();
JbpmContext ctx = config1.createJbpmContext(); Node node = processInstance.getProcessDefinition().getNode("Join_Request"); Join join_Request = (Join)node; join_Request.setDiscriminator(true); 并且在最后调用了 ctx.save(processInstance); ctx.save(taskInstance); ctx.close(); 我在程序中调用了上述代码,按道理讲,只要有一个分支到达join,就会引起流程向下流转,可是在实际的实践中我发现,join还是默认的等待 所有分支到达。 难道我忘了save什么?还是我的代码有问题? |
|
fengshujuan
2007-05-18
这个问题解决了,感谢“吴大愚”的帮助和指点。
解决办法为: 看src/java.jbpm/org.jbpm.graph.node.Join.hbm.xml文件,会发现里面没有有关isDiscriminator的说明。也就是说join节点保存的时候不会保存这个信息。 join_Request.setDiscriminator(true);这条语句应该是在你的流程实例运行到join节点前设置,而不是在一开始的时候设置,不然当运行到join节点的时候从数据库中重新读取join节点的实例的isDiscriminator应该还是默认值false。 我在流程定义文件中加入了 <join name="join" > <event type="node-enter"> <script> org.jbpm.graph.node.Join join= (org.jbpm.graph.node.Join)node; join.setDiscriminator(true); </script> </event> <transition to="end" /> </join> |
|
oisiv
2007-05-22
我也采用类似方法
<join name="并发完成"> <event type="node-enter"> <action name="并发设置" class="tw.com.erpsoft.glm.workflow.action.SetDiscriminatorForJoinNodeActionHandler"></action> </event> <transition name="并发完成" to="完成"></transition> </join> 不过,发现流程虽然完成了,但另外分支的任务对象依然存在,没有被取消。该任务的所属用户依然可以看到该任务。 |
|
noodledai
2007-06-12
oisiv 写道 我也采用类似方法
<join name="并发完成"> <event type="node-enter"> <action name="并发设置" class="tw.com.erpsoft.glm.workflow.action.SetDiscriminatorForJoinNodeActionHandler"></action> </event> <transition name="并发完成" to="完成"></transition> </join> 不过,发现流程虽然完成了,但另外分支的任务对象依然存在,没有被取消。该任务的所属用户依然可以看到该任务。 我也有这种问题出现,请问有哪位大侠给指示一下啊? |
|
youngliuus
2007-06-14
从Token的代码来看,他的确会将它上面的所有任务,和所有子Token上的任务设置为cancel状态啊。
冒昧的问一句,你在显示任务列表是是否有condition iscancelled_=0? |
|
gsccnu
2007-06-15
我最近想通过fork和join做一个互斥的例子,已经有了一部分思路。
但是看到join时,有点困惑, // write to all child tokens that the parent is already reactivated Iterator iter = parentToken.getChildren().values().iterator(); while ( iter.hasNext() ) { ((Token)iter.next()).setAbleToReactivateParent( false ); } 这里只是将childToken的一个属性设置为false,我还不知道它是如何将所有childToken结束掉的,还有楼上所说的设置Task cancel部分,能否告诉这部分代码在什么地方? |
|
youngliuus
2007-06-15
Token的end方法会调用cancelTaks;我的是3.1.2的版本。在Token.java,line214.
同样在这个end方法中, // end all this token's children if (children != null) { Iterator iter = children.values().iterator(); while (iter.hasNext()) { Token child = (Token) iter.next(); if (!child.hasEnded()) { child.end(); } } } 会结束childToken. |
|
gsccnu
2007-06-15
非常感谢你的回答。
我想到我的问题在出哪里了,由于我在实验时,join下直接就是end state。 所以我想,在join中,可能只是做了setAbleToReactivateParent( false )。但是当parantToken到达end state时,由于自身被end所以同时end了其他childToken。 现在我条件有限,晚上我会在join和end state间加上task node。 另外,我在Token的end中没有看到cancelTask。而且,在TaskInstance中的cancel method是下面这样的 public void cancel() { this.isCancelled = true; this.isOpen = false; end(); } 如果TaskInstance的isOpen被设置成false,那么用户就不应该还能看见该TaskInstance了。望赐教..... |
相关讨论
相关资源推荐
- 微软将发布Silverlight 2浏览器插件测试版
- 微软Silverlight==跨浏览器、跨客户平台的技术
- Silverlight 2.0 RTW 正式版发布(附下载地址)!
- 转微软:HTML5还很遥远 Silverlight是最佳选择
- 关于微软Silverlight,你应该知道的10件事
- 走近Silverlight - 微软Silverlight上海开发团队Blog第二篇
- silverlight读取mysql_silverlight访问数据库
- 稳压罐sw16_三维3D设计图纸_包括零件图_机械3D图可修改打包下载_三维3D设计图纸_包括零件图_机械3D图可修改打包下载.zip
- 基于递推最小二乘法的永磁同步电机参数辨识及其MATLAB仿真
- 零起点Python大数据与量化交易