Pregunta

Me crearon dos procesos "Hello World" para dar el sub-nodos de un torbellino. Estoy teniendo problemas para conseguir la salida del subproceso de nuevo al proceso principal. Estoy esperando que alguien me puede iluminar en lo que estoy haciendo mal ya que no puedo encontrar ninguna documentación o ejemplos que arrojan luz sobre por qué el mío no funciona.

En mi proceso principal, tengo el siguiente (nota que he corté encabezados, pies de página y los posicionales x, y, altura, anchura atributos):

 ... 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...

Y aquí es el simple subproceso subhello, que simplemente toma la entrada y lo imprime, y luego se pone la longitud de entrada para volver de nuevo a cabo:

 ... 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...

Esto es según como interpreté el doc y ejemplos. Las variables necesarias son declarados tanto en el proceso principal y el sub-proceso, a continuación, sólo tiene que utilizar el subproceso de elementos de entrada / salida de mapeo para establecer el desde y hacia atributos.

El problema es .... mientras name de conseguir pasado en al subproceso sin ningún problema, tratando de conseguir length volver al proceso principal ha fallado. El length en el subproceso se modificó con éxito. Pero al salir, length en el proceso principal no cambió.

¿Qué estoy haciendo mal? Punteros y explicaciones son muy apreciados. Gracias.

¿Fue útil?

Solución

El problema es que su acción no cambia la variable de longitud. Simplemente cambia la longitud variable local dentro de su acción. Para cambiar el valor de la variable, utilice kcontext.setVariable ( "longitud", name.length ());

También debe actualizar a la última versión 5.1 Drools M1, ya que incluye una solución para un problema con las asignaciones a cabo en caso de que el subproceso forma totalmente sincrónica (como es el caso en su ejemplo).

Kris Verlaenen

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top