Droolsのサブプロセスアウトマッピングが失敗しました - 私が間違っているのでしょうか?
-
19-09-2019 - |
質問
私は、サブプロセスが旋回ノード与えるために、2つの「Hello World」のプロセスを作成しました。私はトラブルのメイン処理に戻ってサブプロセスからの出力を得ることを抱えています。私は誰かが私は私が動作しない理由に光を当てる任意のドキュメントや例を見つけることができないように私が間違ってやっているものに私を啓発することができます願っています。
私のメインのプロセスでは、私は以下の(私は、ヘッダー、フッターを切り取らきたノート、および位置の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
のサブプロセスであり、
... 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...
これは私がドキュメントと例を解釈する方法のとおりです。必要な変数は、その後、ちょうどからと属性に設定する/アウトマッピング要素でサブプロセスを使用し、メインプロセスとサブプロセスの両方で宣言されています。
name
が戻ってメイン処理に失敗したlength
を取得しようと、問題なくサブプロセスに渡されてしまっている間、問題が....あります。サブプロセス内length
は正常に変更されました。しかし、終了時に、メインプロセスにおけるlength
は変更されませんでした。
私が間違って何をしているのですか?ポインタと説明ははるかに高く評価されています。おかげます。
解決
問題は、あなたの行動は、長さ変数を変更しないということです。それは単にあなたのアクション内のローカル変数の長さを変更します。変数の値を変更するには、kcontext.setVariable( "長さ"、name.lengthを())を使用し、
それはサブプロセスが完全に同期している場合にはアウトマッピングとの問題に対する修正が含まれて(あなたの例の場合のように)あなたはまた、最新のDrools 5.1 M1のリリースに更新する必要があります。
クリスVerlaenen