0

私はこのような単純なルールを持っています:

rule "First Rule" //You do not talk about Fight Club
when
    MyInp(id=="1")
then
    insert(new MyOut(true));
end

私が欲しいのは、作成された MyOut オブジェクトを Java クラスから取得することです。これを行う方法はありますか、またはグローバル変数を渡してルール内で更新する必要がありますか?

4

1 に答える 1

0

ステートレス セッションを使用すると、挿入したファクトを変更したり、更新したグローバルを登録したりできます。

ステートフル セッションがある場合は、さらにいくつかのオプションがあります。

よだれのステートフル セッションからファクトをフェッチする

ステートレス セッション中にワーキング メモリに存在していたものを調べる一般的な方法を探している場合は、

StatelessKnowledgeSession ksession = 
        kbase.newStatelessKnowledgeSession();
TrackingWorkingMemoryEventListener listener = 
        new TrackingWorkingMemoryEventListener();
ksession.addEventListener(listener);

List<Object> facts = new ArrayList<Object>();
facts.add(myRequestFact);

ksession.execute(facts);

List<ObjectInsertedEvent> insertions = listener.getInsertions();

デバッグや監査の目的には便利ですが、リクエストから実際の結果を取得する手段としてはお勧めしません。トラッキング WorkingMemoryEventListener のサンプル コード (私による) は、次の場所にあります。

https://github.com/gratiartis/sctrcd-payment-validation-web/blob/master/src/main/java/com/sctrcd/drools/util/TrackingWorkingMemoryEventListener.java

于 2013-11-14T23:39:22.513 に答える