Drools SubProcess out映射失败 - 我做错了什么?

时间:2009-10-02 03:47:06

标签: subprocess drools drools-flow

我创建了两个“Hello World”进程,为子进程节点提供了一个旋转。我无法将subProcess的输出返回到主进程。我希望有人可以告诉我我做错了什么,因为我找不到任何文件或例子来说明为什么我的工作不起作用。

在我的主要过程中,我有以下内容(请注意,我已经剪断了页眉,页脚以及位置x,y,高度,宽度属性):

 ... snip...

 <header>
   <variables>
     <variable name="name" >
      <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
       <value>World</value>
     </variable>
     <variable name="length" >
       <type name="org.drools.process.core.datatype.impl.type.IntegerDataType" />
       <value>0</value>
     </variable>
   </variables>
 </header>

 ... snip...

 <subProcess id="4" name="SubHello"
             processId="subhello" waitForCompletion="true" >
 <mapping type="in" from="name" to="name" />
 <mapping type="out" from="length" to="length" />
</subProcess>

 ... snip...

这是简单的subhello SubProcess,它只接受输入并将其打印出来,然后获取输入长度以将其返回:

 ... snip...

 <header>
   <variables>
     <variable name="name" >
      <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
       <value></value>
     </variable>
     <variable name="length" >
       <type name="org.drools.process.core.datatype.impl.type.IntegerDataType" />
       <value></value>
     </variable>
   </variables>
 </header>

 <nodes>
   <start id="1" name="Start" />
   <end id="2" name="End" />
   <actionNode id="3" name="Action" >
       <action type="expression" dialect="mvel" >
System.out.println(name + ", " + length + ", in SubProcess, before");
length = name.length;
System.out.println(length + ", in SubProcess, after");
       </action>
   </actionNode>
 </nodes>

 ... snip...

这是根据我对文档和示例的解释。所需变量在主进程和子进程上声明,然后只使用subProcess in / out映射元素来设置from和to属性。

问题是......当name没有问题地传递给子进程时,试图让length回到主进程失败。 subProcess中的length已成功修改。但退出时,主进程中的length没有改变。

我做错了什么?指针和解释非常感谢。感谢。

1 个答案:

答案 0 :(得分:2)

问题是您的操作不会更改长度变量。它只是改变你动作中的局部变量长度。要更改变量的值,请使用kcontext.setVariable(“length”,name.length());

您还应该更新到最新的Drools 5.1 M1版本,因为它包含了在子进程完全同步的情况下解决out映射问题的修复(如您的示例中所示)。

Kris Verlaenen