第14章 Seam と JBoss Rules


Seam では、Seam コンポーネントまたは jBPM プロセス定義から JBoss Rules (Drools) の ルールベースの呼び出しが容易になります。

14.1. ルールをインストールする

最初のステップは、 Seam コンテキスト変数で org.drools.RuleBase のインスタンスを使用可能にすることです。 テスト目的で、 Seam はクラスパスから静的なルール一式をコンパイルする組み込みコンポーネントを提供しています。 このコンポーネントは components.xml を使ってインストールできます。
<drools:rule-base name="policyPricingRules">
  <drools:rule-files>
    <value>policyPricingRules.drl</value> 
  </drools:rule-files> 
</drools:rule-base>
Copy to Clipboard Toggle word wrap
このコンポーネントは、 DRL (.drl) 一式、 またはデシジョンテーブル (.xls) ファイルからルールをコンパイルし、 Seam APPLICATION コンテキストに org.drools.RuleBase のインスタンスをキャッシュします。 ルール駆動型アプリケーションには複数のルールベースのインストールが必要となる可能性が高いので留意してください。
Drools DSL を使用したい場合は DSL 定義も指定する必要があります。
<drools:rule-base name="policyPricingRules" dsl-file="policyPricing.dsl"> 
  <drools:rule-files> 
    <value>policyPricingRules.drl</value> 
  </drools:rule-files> 
</drools:rule-base>
Copy to Clipboard Toggle word wrap
RuleBaseConfiguration でカスタムの結果例外ハンドラを登録する場合はそのハンドラを記述する必要があります。 次のサンプルで示します。
@Scope(ScopeType.APPLICATION)
@Startup
@Name("myConsequenceExceptionHandler")
public class MyConsequenceExceptionHandler 
       implements ConsequenceExceptionHandler, Externalizable {
  public void readExternal(ObjectInput in) throws IOException, 
                                           ClassNotFoundException { }

  public void writeExternal(ObjectOutput out) throws IOException { }

  public void handleException(Activation activation, 
                              WorkingMemory workingMemory,
                              Exception exception) {
    throw new ConsequenceException( exception, activation.getRule() );
  }
}
Copy to Clipboard Toggle word wrap
次にこれを登録します。
<drools:rule-base name="policyPricingRules" 
                  dsl-file="policyPricing.dsl" 
                  consequence-exception-handler=
                    "#{myConsequenceExceptionHandler}">
  <drools:rule-files>
    <value>policyPricingRules.drl</value>
  </drools:rule-files>
</drools:rule-base>
Copy to Clipboard Toggle word wrap
ほとんどのルール駆動型アプリケーションでは、 ルールは動的にデプロイ可能でなければなりません。 RuleBase の管理に Drools RuleAgent を使用すると便利です。 RuleAgent は Drools ルールサーバー (BRMS) またはローカルファイルレポジトリにあるホットデプロイルールのパッケージに接続することができます。 RulesAgent 管理の RuleBase も components.xml で設定が可能です。
<drools:rule-agent name="insuranceRules" 
        configurationFile="/WEB-INF/deployedrules.properties" />
Copy to Clipboard Toggle word wrap
プロパティファイルにはその RulesAgent に固有のプロパティが含まれます。 Drools サンプルディストリビューションからの設定ファイルの例を示します。
newInstance=true 
url=http://localhost:8080/drools-jbrms/org.drools.brms.JBRMS/package/
           org.acme.insurance/fmeyer 
localCacheDir=/Users/fernandomeyer/projects/jbossrules/drools-examples/ 
               drools-examples-brms/cache 
poll=30 
name=insuranceconfig
Copy to Clipboard Toggle word wrap
また、 設定ファイルを避けコンポーネントで直接オプションを設定することも可能です。
<drools:rule-agent name="insuranceRules" 
        url="http://localhost:8080/drools-jbrms/org.drools.brms.JBRMS/
                    package/org.acme.insurance/fmeyer" 
        local-cache-dir="/Users/fernandomeyer/projects/jbossrules/
                          drools-examples/drools-examples-brms/cache" 
        poll="30" 
 configuration-name="insuranceconfig" />
Copy to Clipboard Toggle word wrap
次に、 各対話に対して org.drools.WorkingMemory インスタンスを使用可能にする必要があります (各 WorkingMemory は現在の対話に関連する fact を蓄積します)。
<drools:managed-working-memory name="policyPricingWorkingMemory" 
        auto-create="true" rule-base="#{policyPricingRules}"/>
Copy to Clipboard Toggle word wrap
ruleBase 設定プロパティでルールベースに対して policyPricingWorkingMemory を参照している点に注目してください。
イベントリスナーを WorkingMemory に追加することで、ルール実行やアサートされるオブジェクトなど、ルールエンジンのイベントを通知する方法を追加することもできます。
<drools:managed-working-memory name="policyPricingWorkingMemory" 
                               auto-create="true" 
                               rule-base="#{policyPricingRules}">
  <drools:event-listeners>
    <value>org.drools.event.DebugWorkingMemoryEventListener</value>
    <value>org.drools.event.DebugAgendaEventListener</value>
  </drools:event-listeners>
</drools:managed-working-memory>
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat