Drools-rules-writing
よだれ-ルールの記述
Hello Worldプロジェクト(Sample.drl)に記述されているデフォルトルールが表示されている場合は、ここで説明する多くのキーワードが使用されています。
Sample.drl
- パッケージ-すべてのルールはパッケージ名で始まります。 パッケージは、ルールのネームスペースとして機能します。 パッケージ内のルール名は一意である必要があります。 ルールのパッケージは、Javaのパッケージに似ています。
- Import statement -ルールを適用するファクトが何であれ、それらのファクトをインポートする必要があります。 たとえば、com.sample.DroolsTest.Message;上記の例では。
- ルール定義-ルール名、条件、および結果で構成されます。 Droolsキーワードは* rule、when、then、および *end です。 上記の例では、ルール名は「Hello World」と「GoodBye」です。 when 部分はルールの両方の条件であり、 then 部分は結果です。 ルール用語では、 when 部分はルールのLHS(左側)とも呼ばれ、 then 部分はルールのRHS(右側)とも呼ばれます。
ここで、Droolsのロードとルールの実行に使用されるJavaファイルで使用される用語を見ていきましょう。
知識ベース
ナレッジベースは、ルール、プロセス、および内部タイプのコレクションを管理するインターフェースです。 パッケージ org.drools.KnowledgeBase に含まれています。 Droolsでは、これらは一般に*ナレッジ定義*または*ナレッジ*と呼ばれます。 ナレッジ定義は*ナレッジパッケージ*にグループ化されます。 ナレッジ定義は追加または削除できます。 ナレッジベースの主な目的は、作成に費用がかかるため、保存して再利用することです。 ナレッジベースは、ナレッジセッションを作成する方法を提供します。
ナレッジセッション
ナレッジセッションは、ナレッジベースから取得されます。 これは、Drools Engineと対話するためのメインインターフェイスです。 ナレッジセッションは2つのタイプにすることができます-
- ステートレスナレッジセッション
- ステートフルナレッジセッション
ステートレスナレッジセッション
ステートレスナレッジセッションは、推論を利用せず、最も単純なユースケースを形成するステートレスセッションです。 ステートレスセッションは、関数のように呼び出してデータを渡し、結果を受け取ることができます。 ステートレスセッションの一般的な例は次のとおりです-
- 検証
- この人は住宅ローンの資格がありますか?
- 計算
- 住宅ローンのプレミアムを計算します。
- ルーティングとフィルタリング
- メールなどの受信メッセージをフォルダーにフィルターします。
- 宛先に着信メッセージを送信する
ステートフルナレッジセッション
ステートフルセッションはより長く存続し、時間の経過とともに反復的な変更を可能にします。 ステートフルセッションの一般的な使用例には、次のものがあります-
- モニタリング
- 半自動購入のための株式市場の監視と分析。
- 診断
- 障害発見、医療診断
- ロジスティクス
- 荷物の追跡と配達のプロビジョニング
ナレッジビルダー
KnoledgeBuilderインターフェースは、ナレッジ定義(ルール、プロセス、タイプ)からKnowledgePackageを構築します。 パッケージ org.drools.builder.KnowledgeBuilder 内に含まれています。 知識の定義はさまざまな形式にすることができます。 ビルドに問題がある場合、KnowledgeBuilderは、 hasErrors および getError の2つのメソッドを通じてエラーを報告します。
次の図はプロセスを説明しています
上記の例では、ステートレスナレッジセッションの簡単な例を取り上げているため、セッションにファクトを挿入し、fireAllRules()メソッドが呼び出されて出力が表示されます。
ステートフルナレッジセッションの場合、ルールが実行されると、ステートフルナレッジセッションオブジェクトはメソッド* dispose()*を呼び出してセッションを解放し、メモリリークを回避する必要があります。