ルール・ベースの決定サービスを Web サービスとして実現する

ルールのアジリティーを SOA の柔軟性と組み合わせる

JRules を利用すると、決定サービスを Web サービスとして公開することができますが、その際に新たなコーディングをする必要がありません。この記事では、ビジネス決定サービスを Web サービスとして公開し、ビジネス・ルールのアジリティーと SOA の柔軟性とを組み合わせる方法について説明します。ここで説明する方法は、SOA 対応の他の製品にも容易に統合することができます。

Yang Chen Ming, Consultant, IBM Corporation

Yang Chen MingYang Chen Ming は主に Business Rule Management System と JEE を中心として 6 年間の経験があります。過去 4 年間、彼は ILOG JRules 製品群に関する業務に深く関わってきました。



2010年 6月 24日

はじめに

IBM WebSphere ILOG JRules は最先端の BRMS (Business Rule Management System: ビジネス・ルール管理システム) であり、設計から開発、テスト、デプロイメント、実行、保守に至るまで、ビジネス・ルールのあらゆる側面をカバーする包括的な機能セットを備えています。

Web サービスはアプリケーション同士がプラットフォームやプログラミング言語に依存せずに通信を行える技術です。また Web サービスは、標準化された XML メッセージングを利用してネットワーク経由でアクセスされる一連の操作を記述するソフトウェア・インターフェースでもあります。Web サービスは広く使われており、大部分の SOA (Service Oriented Architecture) で中心的な役割を果たしています。

JRules には HTDS (Hosted Transparent Decision Server) と呼ばれる機能が導入されています。この機能を利用すると、決定サービスを Web サービスとして公開することができますが、その際、新たなプログラムのコーディングは必要ありません。


インストールと構成

この記事で紹介するサンプルを実行するためには、以下の製品を適切にインストールして構成する必要があります。

  • IBM WebSphere ILOG JRules V7.0.x

インストールが終わると、以下の操作が行えるはずです。

  • JRules のインストーラーに付属している Rule Studio の起動。
  • Rule Execution Server コンソールのホームページ、http://localhost:8080/res/ の表示。この機能は JRules に最初から付属している Tomcat サーバー・インスタンスによって実現されています。JRules を他のアプリケーション・サーバー (WebSphere や Oracle WebLogic など) で実行するためには、追加の構成が必要です。

JRules のバンドルやコンポーネントのうち、以下に挙げるものは、この記事のサンプルを実行する上では必要ありません。

  • Rule Team Server (ルール・チーム・サーバー) バンドル
  • Decision Validation Service (決定検証サービス)
  • Rule Solutions for Office (オフィス用ルール・ソリューション)

シナリオの概要

このビジネス・シナリオは非常に単純です。Java EE による Web ベースの融資見積もりアプリケーションがあるとします。このアプリケーションは顧客情報を入力すると決定サービスを呼び出し、融資の申し込みの内容が条件を満たしていれば融資金利を決定します。ここでは単純にするために、融資金額と申請者の年齢によって融資金利を決定します。重要なエンティティーは、Customer (顧客) と Loan (融資) の 2 つです。

JRules の XOM (Execution Object Model) は、ベースとなるオブジェクト・モデルとして JRules が実際に実行する際に使用するオブジェクト・モデルであり、この XOM をモデリングする方法には 2 通りの方法があります。ドメイン・オブジェクトのモデリングは Java または XML のいずれかで行います。この例では XML による XOM を使います。

図 1. XML_Customer
XML_Customer
図 2. XOM_Loan
XOM_Loan

ルール・プロジェクトで実装されるルールには、Loan Value (融資限度額) と Young Applicant (若年齢制限) という 2 つがあります。これらのルールはそれぞれ、Eligibility (適格性) と Rating ((年齢による) 区分け) というサブパッケージにカテゴリー分けされます。

リスト 1. Eligibility.Loan Value というルール
if
    the advance amount of the loan of 'the customer' is more than 100000
then
    set the decision of the loan of 'the customer' to "Declined";
else
    set the decision of the loan of 'the customer' to "Accepted";
    set the rate of the loan of 'the customer' to 5.5;
リスト 2. Rating.Young Applicant というルール
if
    the age of 'the customer' is less than 21
then
    set the rate of the loan of 'the customer' to 6.5;

協調型のルールフローにより、Eligibility パッケージのルールと Rating パッケージのルールが連結されます。

図 3. ルールフロー
ルールフロー

RuleSet パラメーターにより、決定サービスとして呼び出されるルールセットのデータ・インターフェースが定義されます。この決定サービスは、すべての顧客からの入力に対して、適切な融資金利がいくらかを決定することができます。決定された融資金利は、customer.getLoan().getRate() を実行することによって、更新されたカスタマー・オブジェクトの中に入れて返されます。

図 4. RuleSet パラメーター
RuleSet パラメーター

JRules で最初から利用可能な統合オプションには、Web サービス、J2SE、ローカル/リモート EJB モードなど、数多くあります。この記事では、この決定サービスを Web サービスとして実現する方法を学びます。この、(上で説明したすべての成果物で構成される) LoanRules というルール・プロジェクトが既に作成されているものとすると、次に行う必要があるのは以下の内容です。

  1. RuleApp プロジェクトを作成し、LoanRules を RuleApp アーカイブにパッケージ化する。
  2. 組み込みの Tomcat サーバー用の RES (Rule Execution Server: ルール実行サーバー) 構成を作成する。
  3. RuleApp アーカイブを Tomcat にデプロイする。
  4. この決定サービスの WSDL ファイルを生成して検証する。
  5. Web サービス・クライアントを実行し、この Web サービスを呼び出す。

詳細な説明

ステップ 1. RuleApp プロジェクトを作成し、LoanRules を RuleApp アーカイブにパッケージ化する

「New Project (新規プロジェクト)」ウィザードを使って新規 RuleApp プロジェクトを作成し、作成した RuleApp プロジェクトから RuleApp アーカイブを生成します。

図 5. 新規 RuleApp を作成する
新規 RuleApp を作成する

ルール・プロジェクト「LoanRules」を指定し、RuleApp プロジェクトに追加します。こうすることで、「LoanRules」で定義されるルールが RuleApp アーカイブに含まれるということを JRules に伝えています。

図 6. ルール・プロジェクト「LoanRules」を追加する
ルール・プロジェクト「LoanRules」を追加する

それ以外の設定はすべてデフォルトを受け入れ、「Finish (完了)」をクリックします。これで RuleApp プロジェクト「LoanRuleApp」の準備が整いました。

ステップ 2. Tomcat サーバー用の RES 構成を作成する

このステップは RuleApp を RES (Rule Execution Server: ルール実行サーバー) にデプロイする際のオプションですが、RES 構成を保存して将来使えるようにしておくことは、推奨されるシステマチックな方法です。開発環境、テスト環境、本番環境用に一連の RES 構成があった方が、はるかに容易にターゲット RES を切り替えることができます。

図 7. 新しい RES 構成プロジェクトを作成する
新しい RES 構成プロジェクトを作成する

Tomcat サーバーに対する適切な構成を入力し、この Tomcat インスタンス上で実行される RES コンソール用のユーザーとパスワードを指定します。接続が適切かどうか、「Test Connection (接続のテスト)」ボタンをクリックして確認します。

図 8 Tomcat サーバーを構成する
図 8 Tomcat サーバーを構成する

それ以外の設定はすべてデフォルトを受け入れ、「Finish (完了)」をクリックします。これで RES 構成プロジェクトが用意できました。このプロジェクトは、ステップ 1 で作成した RuleApp プロジェクトが適切なデプロイメントを行うために使われます。

ステップ 3. RuleApp アーカイブを Tomcat にデプロイする

LoanRuleApp プロジェクト・フォルダーの「archive.xml」ファイルをダブルクリックします。

図 9. RuleApp プロジェクトを開く
RuleApp プロジェクトを開く

パネルの左下に「Deploy (デプロイ)」リンクがあることに注意してください。このリンクをクリックすると、バージョン管理ポリシーを選択するよう促されます。今回は初めて RuleApp をデプロイするので、「Increment RuleApp major version (RuleApp のメジャー・バージョンのインクリメント)」を選択します。

図 10. 新しいバージョンをデプロイする
新しいバージョンをデプロイする

最初のラジオ・ボタンをクリックし、「Tomcat」を選択します。こうすることで JRules に対し、このルールを Tomcat サーバーにデプロイすることを伝えます。「Finish (終了)」をクリックしてウィザードを終了します。

図 11. RuleApp をサーバーにデプロイする
RuleApp をサーバーにデプロイする

コンソール・パネルには、デプロイメントが成功したことを示す冗長なメッセージが出力されます。

図 12. RuleApp がデプロイされたことを示すメッセージ
RuleApp がデプロイされたことを示すメッセージ

ステップ 4. 決定サービスの WSDL ファイルを生成して検証する

Tomcat の RES コンソールにログオンします。デフォルトの URL は http://localhost:8080/res です。必要に応じてホスト名またはポートを変更します。デフォルトのユーザー名とパスワードは resAdmin です。

ログインしたら、「Explorer (エクスプローラー)」タブをクリックします。すると、デプロイされた RuleApp の一覧が表示されます。この例では、「LoanRuleApp」という名前の RuleApp がバージョン 1.0 として表示されているはずです。

図 13. RuleApp が RES コンソールに表示された状態
RuleApp が RES コンソールに表示された状態

「LoanRuleApp」をクリックし、RuleApp ビューに入ります。このビューで、LoanRuleApp のカスタム・プロパティーを編集します。下の方にある「RuleSet」パネルを見ると、「LoanRules」という名前の行があります。これが LoanRuleApp に含まれるルールセットです。

図 14. 「RuleApp」ビュー
「RuleApp」ビュー

「LoanRules」をクリックし、RuleSet ビューに入ります。

図 15. 「RuleSet」ビュー
「RuleSet」ビュー

「Get HTDS WSDL for this ruleset version (このルールセット・バージョンの HTDS WSDL を取得)」というリンクが表示されています。このリンクをクリックすると、この決定サービスに対する WSDL ファイルが生成され、この WSDL ページに移動します。この Web サービスのエンドポイントの URL は、http://localhost:8080/DecisionService/ws/LoanRuleApp/1.0/LoanRules/1.0?WSDL です。

図 16. 生成された WSDL
生成された WSDL

Step 5a. SOAPUI を使って Web サービスを呼び出し、Web サービス・クライアントをシミュレートする

このステップでは SOAPUI を Web サービス・クライアントとして使用し、上記の Web サービスをテストします。

最初に、新しい SOAPUI プロジェクトを作成します。そのためにはウィザードのダイアログ・ボックスで WSDL の URL を指定します (http://localhost:8080/DecisionService/ws/LoanRuleApp/1.0/LoanRules/1.0?WSDL)。オプションとして、入力される XML がどんな構造かを調べるために、「Create sample requests for all operations? (すべての操作に対するサンプル・リクエストの作成)」にチェックを入れます。

図 17. 「New soapUI Project」ウィザード
「New soapUI Project」ウィザード

続いて、SOAPUI の左側にあるリクエスト用のテキストボックスに下記の XML を貼り付けます。顧客の DOB (誕生日) の後に「Z」があることに注意してください。この Z は UTC (Coordinated Universal Time: 協定世界時) と同じタイムゾーンであることを意味しています。

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:dec="http://www.ilog.com/rules/DecisionService" 
xmlns:loan="http://ilog.com/loan" 
xmlns:par="http://www.ilog.com/rules/param" 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header>
   </soapenv:Header>
   <soapenv:Body>
      <dec:DecisionServiceRequest>
         <par:inputCustomer>
            <loan:Customer>
               <loan:ID>AB1265H</loan:ID>
               <loan:Salary>35000</loan:Salary>
               <loan:Dob>1960-01-01Z</loan:Dob>
               <loan:Security/>
               <loan:Loan>
                  <loan:AdvanceAmount>100000</loan:AdvanceAmount>
                  <loan:Term>36</loan:Term>
                  <loan:PaymentFrequency>1</loan:PaymentFrequency>
                  <loan:ID>AB1265H</loan:ID>
                  <loan:Product/>
               </loan:Loan>
            </loan:Customer>
         </par:inputCustomer>
      </dec:DecisionServiceRequest>
   </soapenv:Body>
</soapenv:Envelope>

XML による SOAP 入力メッセージの例

「Run (実行)」ボタンをクリックすると、XML 形式による SOAP のレスポンス・メッセージが右側に表示されます。このメッセージには、ビジネス上の決定に関する情報があるはずです。この情報は、「Loan Accepted with the rate of 5.5 percent (利率 5.5 パーセントで融資が受け入れられた) という内容です。

リスト 3. XML 出力
<Loan>
    <AdvancedAmount>1000000.0</AdvancedAmount>
    <Term>36</Term>
    <Rate>5.5</Rate>
    <RepaymentAmount xsi:null="true"/>
    <Decision>Accepted</Decision>

この段階での SOAPUI GUI は図 18 のスクリーン・ショットのようになるはずです。

図 18. SOAPUI のスクリーン・ショット
SOAPUI のスクリーン・ショット

ステップ 5b. Apache Axis クライアントを実行して Web サービスを呼び出す

上級の開発者であれば、SOAPUI を利用する代わりに Apache Axis クライアントを実装し、この Web サービスをテストしたいかもしれません。例えば、ここではこの Web サービスを .NET アプリケーションを使って検証します。

ここでは ServiceLocator クラスと PortType クラスを使ってサービスを呼び出します。この 2 つのクラスは WSDL2Java Ant ターゲットによって自動生成されます。

DecisionServiceLoanRules_ServiceLocator service 
    = new DecisionServiceLoanRules_ServiceLocator();
DecisionServiceLoanRules_PortType port 
    = service.getDecisionServiceSOAPlocalhost();

DecisionServiceRequest request = new DecisionServiceRequest();
DecisionServiceResponse response = null;

InputCustomer customerWrapper = new InputCustomer();
Customer customer = new Customer();

Axis ServiceLocator と portType のインスタンスを初期化する

続いて Customer 型の入力データとして、以下の値のセットを設定します。特に注目すべき値として、この顧客の DOB (誕生日) は 1960年 1月 1日であり、融資金額は $100,000 です。

customer.setID("AB1265H");
customer.setSalary(35000.00);
customer.setDob(new Date(60,1,1));
Loan loan = new Loan();
loan.setAdvanceAmount(100000.00);
loan.setTerm(36);
loan.setPaymentFrequency(1);
loan.setProduct(new Product());
customer.setLoan(loan);

入力データに追加する

最後のステップは、決定サービスを呼び出し、融資金利を出力することです。決定内容が融資の申し込みの却下である場合には、Customer.Loan.Decision 属性が「Declined (却下)」に設定されます。

response = port.executeDecisionService(request);			
InputCustomer customerWrapperReturned 
    = response.getInputCustomer();
System.out.println("The decision is " + 
    customerWrapperReturned.getCustomer().getLoan().getDecision());
System.out.println("The rate is " + 
    customerWrapperReturned.getCustomer().getLoan().getRate());

出力データを抽出して表示する

次に、クライアントを実行します。すると、返された結果が画面に表示されます。融資は受け入れられる見込みであり、提示された融資金利は 5.5 パーセントです。最初の出力メッセージ、「Unable to find required class... (必要なクラスが見つかりません...)」は MIME ライブラリーが見つからないために表示されており、この場合のテストには無関係なので、ここでは無視します。

図 19. Java コンソールに出力される内容
Java コンソールに出力される内容

まとめ

JRules は RuleApp が適切にデプロイされると自動的に Web サービスを生成してホストします。そのため、JRules によるアジリティーと Web サービスによる柔軟性とを組み合わせることができます。この機能は、他の IBM 製品 (WebSphere Process Server、WebSphere Enterprise Service Bus、WebSphere Message Broker など) ともスムーズに統合することができます。

参考文献

学ぶために

  • IBM WebSphere ILOG JRules v7 Information Center は WebSphere ILOG JRules v7 に関するドキュメントをすべて 1 ヶ所で入手できる Web ポータルであり、WebSphere MQ 環境のインストール、構成、使用、カスタマイズに関する概念、タスク、参照情報などが用意されています。
  • Getting started は JRules の主なトピックの大部分をカバーした包括的なチュートリアルです。
  • JRules v7 の新機能について学んでください。この技術資料には JRules v7 に導入された新機能が詳細に説明されています。
  • WebSphere ILOG JRules v7 の無料の試用版をダウンロードしてください。この試用版の使用期間中は Windows 版と Linux 版のインストールに関し、制限付きながらオンライン・サポートを受けることができます。
  • developerWorks の WebSphere application connectivity ゾーンを調べてください。WebSphere アプリケーション・コネクティビティー (従来の WebSphere ビジネス・インテグレーション) に関するハウツー記事、ダウンロード、チュートリアル、教育資料、製品情報などが用意されています。
  • developerWorks の WebSphere business process management ゾーンを調べてください。WebSphere BPM に関するハウツー記事、ダウンロード、チュートリアル、教育資料、製品情報などが用意されています。
  • developerWorks の SOA and web services ゾーンを訪れ、スキルを磨くためのリソースを入手してください。
  • さまざまな IBM 製品や IT 業界の話題に焦点を絞った developerWorks の Technical events and webcasts で最新情報を入手してください。
  • 無料の developerWorks Live! ブリーフィングに出席し、IBM の製品やツール、また IT 業界のトレンドに関する最新情報を入手してください。
  • SOA の話題を Twitter でフォローしてください。
  • developerWorks On demand demos をご覧ください。初心者のための製品インストール方法やセットアップのデモから、上級開発者のための高度な機能に至るまで、多様な話題が解説されています。

製品や技術を入手するために

  • 皆さんの目的に最適な方法で IBM 製品を評価してください。製品の試用版をダウンロードする方法、オンラインで製品を試す方法、クラウド環境で製品を使う方法、あるいは SOA Sandbox で数時間を費やし、サービス指向アーキテクチャーの効率的な実装方法を学ぶ方法などがあります。

議論するために

  • My developerWorks コミュニティーに参加してください。開発者向けのブログ、フォーラム、グループ、ウィキなどを利用しながら、他の developerWorks ユーザーとやり取りしてください。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=SOA and web services
ArticleID=500861
ArticleTitle=ルール・ベースの決定サービスを Web サービスとして実現する
publish-date=06242010