現在、jbpm/drools の使用を開始しており、「ビジネス ルール タスク」を使用して DRL からいくつかのプロセス変数を変更しようとしました。タイプ「MyCustomObject」の変数「var」を宣言したプロセスで次のことを試しました。
この質問とこの推奨事項の結果に従って、ruleflow-group「testgroup」を実行し、次の onEntry スクリプトを持つタスクを作成しました。
kcontext.getKnowledgeRuntime().insert(kcontext.getProcessInstance());
私の DRL は次のようになります。
import mypackage.MyCustomObject;
import org.kie.api.runtime.process.WorkflowProcessInstance;
rule "generate object"
ruleflow-group "testgroup"
when
//some stuff applies
then
insert(new MyCustomObject());
end
rule "modify variable"
ruleflow-group "testgroup"
when
$process: WorkflowProcessInstance()
$obj: MyCustomObject()
then
WorkflowProcessInstance $p = (WorkflowProcessInstance)kcontext.getKieRuntime().getProcessInstance($process.getId());
$p.setVariable( "var", $obj);
System.out.println("Value of object in memory: "+$obj);
System.out.println("Value of object in variable:+$p.getVariable("var"));
retract($process);
end
ビジネス ルール タスクの後に、単純なスクリプト タスクを配置しました。
if(var != null) {
System.out.println("var: "+var);
} else{
System.out.println("var is null!");
}
私が得た出力は次のとおりです(注:MyCustomObjectはtoStringをオーバーライドしません):
メモリ内のオブジェクトの値: MyCustomObject@XYZ
変数内のオブジェクトの値: MyCustomObject@XYZ
var が null です。
この時点で、何が悪かったのかわかりません。出力からわかるように、ワーキング メモリ内の ProcessInstance は変数を正しく設定していますが、その値はプロセス自体には存在しません (したがって、他のノードがアクセスするため)。
追加情報:
現在、JBoss EAP 6.4 でワークベンチ バージョン 6.4.0.Final を使用しており、別の EAP 6.4 インスタンスで実行されている KieExecutionServer (6.4.0.Final) にコンテナーをデプロイしています。
任意の提案をいただければ幸いです。