リファレンス global

globalの宣言でJavaからdroolsに変数を渡すことができます。globalでわたすとworkingMemoryにはinsertされないです。staticな変数やルールのthenの中のアクションで必要な変数をわたす、何かルールでの処理結果の戻しとかが主な目的です。よく見かけるのはhibernateのSessionを渡してルールの中で処理させる、といったところですかね。以下はシンプルな例です。

global java.util.List list

と宣言した場合にJavaからは

List list = new ArrayList();
list.add("test");
ksession.setGlobal("list", list);
ksession.insert(person);
ksession.fireAllRules();

とするとlistを渡せます。

System.out.println(list.size());

ルールのthenの中で上記のようにその変数をそのまま指定できます。注意事項はWhenの中でglobal変数を利用するときはイミュータブルであることを確認しないといけないそうです。具体的にどの処理を踏まえてそう注意してるのかが確認してませんが、メモということで。