1

私はDrools Expert、現在、drools の Sample プロジェクトから、コンソールに何かを出力することしかできません。今、私は drools を Web プロジェクトに統合しました。それは成功しました。ユーザーのページへのインタラクションに応じて、何かをコンソールに出力することができました。

現在、私のルールは次のようになっています。

rule "A test Rule"

    when
        m: FLTBean ( listeningScore == 1, test : listeningScore  )
    then
        System.out.println( test );

end

では、それを Web ページに印刷したい場合はどうすればよいでしょうか。どうすればいいですか?return一部の値を Java ページに戻し、それをページにレンダリングするために使用する必要がありますか?

4

1 に答える 1

1

Web ページに何かを表示するには、API を使用して Drools を呼び出し、Web アプリケーションでレンダリングできる出力を取得する必要があります。

したがって、Java コード内で出力を取得する方法を検討する必要があります。これにはいくつかの方法があります。

たとえば、リクエストの検証などの単純なアクションを実行する場合は、挿入したリクエストを操作するだけです。例えば:

rule "IBAN doesn't begin with a country ISO code."
    no-loop
when
    $req: IbanValidationRequest($iban:iban, $country:iban.substring(0, 2))
    not Country(isoCode == $country) from countryList
then
    $req.reject("The IBAN does not begin with a 2-character country code. '" + $country + "' is not a country.");
    update($req);
end

その例では、挿入した事実に対して「拒否」メソッドを呼び出しています。これにより、挿入されたファクトが変更されるため、ルールの実行後に Java コードにオブジェクトが作成され、拒否されたかどうかを示すフラグが設定されます。この方法は、ステートレス ナレッジ セッションに適しています。すなわち

  1. Java コード - API 経由でリクエスト ファクトを挿入
  2. Drools ルール - リクエスト ファクトを変更します (フラグの拒否、注釈、プロパティの設定など)。
  3. Java コード - 事実を見て、何が行われたかを確認してください

このインタラクションを実行する方法を示す次のコード例は、次のフル コラスから取得したものです。

https://github.com/gratiartis/sctrcd-payment-validation-web/blob/master/src/main/java/com/sctrcd/payments/validation/payment/RuleBasedPaymentValidator.java

// Create a new knowledge session from an existing knowledge base
StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
// Create a validation request
PaymentValidationRequest request = new PaymentValidationRequest(payment);
// A stateless session is executed with a collection of Objects, so we
// create that collection containing just our request. 
List<Object> facts = new ArrayList<Object>();
facts.add(request);

// And execute the session with that request
ksession.execute(facts);

// At this point, rules such as that above should have been activated.
// The rules modify the original request fact, setting a flag to indicate 
// whether it is valid and adding annotations to indicate if/why not.
// They may have added annotations to the request, which we can now read.

FxPaymentValidationResult result = new FxPaymentValidationResult();
// Get the annotations that were added to the request by the rules.
result.addAnnotations(request.getAnnotations());

return result;

ステートフル セッションでの代替手段は、ルールによってファクトをワーキング メモリに挿入することです。ルールを実行した後、API を介してセッションをクエリし、1 つ以上の結果オブジェクトを取得できます。KnowledgeSession の getObjects() メソッドを使用して、セッション内のすべてのファクトを取得できます。特定のプロパティを持つファクトを取得するための getObjects(ObjectFilter) メソッドもあります。以下にリンクされているプロジェクトには、KnowledgeEnvironment および DroolsUtil クラスでこれらのメソッドを使用する例があります。

または、サービスをグローバル変数として挿入することもできます。その後、ルールはそのサービスのメソッドを呼び出すことができます。

Web アプリケーション内で Drools を使用する方法の例として、私は最近、Drools ルールを呼び出して応答を取得するための REST API を提供するこの Web サイトをノックアップしました。

https://github.com/gratiartis/sctrcd-payment-validation-web

Maven がインストールされている場合は、すぐに試してコードをいじることができるはずです。

于 2013-10-23T14:35:47.667 に答える