連載
» 2010年11月18日 00時00分 公開

急速なビジネスの変化に対応できる「BRMS」の常識企業システムの常識をJBossで身につける(終)(3/4 ページ)

[佐脇愛史, 相原淳, 多田丈晃, 上川伸彦,株式会社ビーブレイクシステムズ]

クライアントアプリをインポート

 JBoss Toolsを起動し、メニュー[ファイル]→[インポート]を選択してください。表示された画面のツリーから[一般]の[既存プロジェクトをワークスペースへ]を選択し、[次へ]ボタンを押下します。

図10 インポート種別の選択 図10 インポート種別の選択

 次に、インポートするプロジェクトの選択です。[ルートディレクトリの選択]のラジオボタンが選択されている状態で、右にある[参照]ボタンを押下します。ファイルセレクタが開くので、ダウンロードしたサンプルディレクトリを選択してください。

図11 インポートするプロジェクトの選択 図11 インポートするプロジェクトの選択

 サンプル内にあるEclipseプロジェクトが一覧表示されるので、その中から「mortgage-client」のみにチェックを入れ、[完了]ボタンを押下します。

 プロジェクトをインポート後、「mortgage-client」のlibにある「drools-core」「drools-api」で始まるjarファイルが、JBossアプリケーションサーバ上にある「server\default\deploy\drools-guvnor.war\WEB-INF\lib」の中の「drools-core」「drools-api」のバージョンと同じであることを確認してください。もし、異なる場合は、JBossアプリケーションサーバ上の両方のファイルを「mortgage-client」のlibにコピーしてください。

サンプルを動かしてみよう

 これで、サンプルを動かす準備はできました。JBossアプリケーションサーバを起動し、先ほどインポートしたクライアントアプリケーションを実行します。サンプルのクライアントプロジェクトの「src/com/notidots/MortgageApplicationTest.java」を右クリックします。表示されたメニューから「実行」の「Javaアプリケーション」を選択してください。

 アプリケーションが実行され、JBoss Toolsのコンソールビューに以下のように表示されていればサンプルは正常に実行できています。

図12 サンプルの実行結果 図12 サンプルの実行結果

Droolsのサンプルの中身を探る

 サンプルはローン審査のアプリケーションです。クライアントアプリで設定された値に従い、Guvnor上のビジネスルールを動かし、結果を得ています。

サンプルのローン審査アプリの概要

 まず、全体を把握するため、サンプルの概念図を表します。

図13 サンプルの概念図 図13 サンプルの概念図

 個別の内容については追って説明していきます。いまのところは、クライアントアプリがルールを取得して動作することが分かると思います。一度サンプルの解説を読み終えて、再度概念図を見ていただければ理解が深まります。

 ここからは、クライアントアプリのソースを追いかけて、その流れを理解していきます。

// 【1】ルールの取得
RuleAgent agent = RuleAgent.newRuleAgent("/mortgageapproval.properties");
RuleBase rb = agent.getRuleBase();
 
// 【2】モデルの取得
FactType appType = rb.getFactType("mortgages.LoanApplication");
FactType incomeType = rb.getFactType("mortgages.IncomeSource");
 
Object application = appType.newInstance();
Object income = incomeType.newInstance();
 
// 【3】入力値の設定
appType.set(application, "amount", 25000);
appType.set(application, "deposit", 1500);
appType.set(application, "lengthYears", 20);
 
incomeType.set(income, "type", "Job");
incomeType.set(income, "amount", 65000);
 
// 【4】実行と結果出力
rb.newStatelessSession().execute(new Object[] {application, income});
 
System.out.println(application);
コード2 MortgageApplicationTest.javaのメインメソッド

 上から順に概要ごとに解説します。

【1】ルールの取得

 RuleAgentのnewRuleAgentメソッドを使用して、指定したプロパティファイルに応じたルールを取得します。ここで使用しているpropertiesファイルを見ると接続方法が分かります。

図14 サンプルのプロパティファイル 図14 サンプルのプロパティファイル

 ここで肝心なのは「url」の値です。Guvnor上で管理しているルールは、以下のフォーマットに従ってURLで表現されます。

http://【サーバのアドレス】/drools-guvnor/org.drools.guvnor.Guvnor/packages/【パッケージ名】/【スナップショット名】

 このURLを使用して、Guvnorからルールをサンプルアプリケーションが取得しにいくことでロードしています。そのほかの設定値の役割については以下のとおりです。

設定名 役割
newInstance 設定値はtrue/falseで、trueである場合、ルールに変更があるか確認。変更があれば新しいルールを使用。ただし、すでに動作中のものには反映されない
poll ルールに変更があるかのチェック頻度を数値(単位は秒)で設定
name ログ出力時に出力される名前を設定
表2 RuleAgentで使用するpropertiesファイルの設定値

 Guvnorから取得したルールを持つRuleAgentから、Guvnor上で管理しているルール全般となるルールベースを取得しているのが、次のRuleAgentのgetRuleBaseメソッドです。

【2】モデルの取得

 ここではGuvnor上で定義したModelを取得しています。Modelは構造体のようなデータの固まりです。Droolsの概念上は「fact mode」lと呼ばれているものですので、単なる構造体ではなく、表現する事実を反映した適切なデータの集合を指します。では、Guvnor上のModelを確認します。

図15 Guvnor上のModel設定 図15 Guvnor上のModel設定

 Guvnor上でNavigateメニューにある「Knowledge Bases」セクションを開き、ツリー「Packages/mortgages/Model」を選択します。右側に定義済みのモデルの一覧が表示されるので、その中の「MortgageModel」をダブルクリックしてください。クライアントソースで取得しているモデルとその内容が表示されます。この画面からモデルの追加、編集、削除できます。

【3】入力値の設定

 先ほど取得したモデルに入力値を設定します。サンプルではモデルの内容についてはルールベースを取得するまで分かりません。そのため、FactTypeを経由して以下の構文で値を設定します。

factType.set([設定するモデルのインスタンス], [モデルの属性名の文字列], [設定したい値]);

【4】実行

 最後に入力値を設定したモデルを基にルールを実行します。まず、ルールベースからステートレスセッションを取得しています。

 Droolsには2種類のセッションが存在します。1つは1度のルール実行で一連の処理が完結する場合のステートレスセッションです。もう1つは複数回のルール実行を必要とする場合のステートフルセッションです。セッションやステートレス/フルについては、以下の記事を参照してください。

発掘! Webの“あるある”問題点−ステートの常識
Webアプリの常識をJSPとStrutsで身につける(6)
Webアプリを作る際に、ブラウザの仕組みに起因するさまざまな問題点を、どうやって解決するかを考えていますか?
Java Solution」フォーラム 2009/1/21

 次ページでは、サンプルソースでルールを実行するときには、どのようなルールが実行されるのかを、Guvnor上で確認してみます。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。