第5回 デモアプリケーションを使って JBoss BRMS を理解する

コラム/第5回 デモアプリケーションを使って JBoss BRMS を理解する

Hitachi Solutions

2015年1月30日

第5回 デモアプリケーションを使って JBoss BRMS を理解する

Red Hat JBoss Middleware

前回の Red Hat JBoss BRMS 超入門では、Red Hat JBoss BRMS の概要をご紹介しました。今回は、サンプルアプリケーションを使って、BRMS の内部を見ていきます。

準備

デモアプリケーションを動かすために、事前に以下を準備しておいてください。

※利用する JBoss BRMS は brms-coolstore-demo で指定のバージョンを使ってください。

インストール

Coolstore デモプロジェクトは、次のようなディレクトリ構成になっています。

brms-coolstore-demo/

├ installs/

Red Hat JBoss BRMS のインストーラを配置するディレクトリ

├ projects/

ウェブショッププロジェクト用のディレクトリ

├ support/

デモアプリケーションの利用するファイルを配置するディレクトリ

├ target/

init.sh を実行することで作成される実行環境用のディレクトリ

├ docs/

クイックスタートガイドなど説明資料のディレクトリ

└ init.sh|init.bat

環境構築用スクリプト

init.sh(Windowsの場合はinit.bat)を実行すると、 JBoss BRMS の管理コンソールであるビジネスセントラルのユーザとして erics と alan が作成されています。これらのユーザと権限は、JBoss EAPのアプリケーションbrms-coolstore-demo/target/jboss-eap-6.1/standalone/configuration/ディレクトリのapplication-roles.properties、application-users.properties に定義されています。

ユーザ パスワード 説明
erics jbossbrms1! 管理者権限を持つユーザ。ユーザやリポジトリ管理、および、ルールの作成・更新など、すべての操作が実施可能です
alan jbossbrms1! ビジネスアナリスト権限を持つユーザ。ルールの作成・更新はできませんが、ビルドとデプロイは実施可能です

表 1 インストール時に作成されるユーザ

ユーザの管理およびロールに関しては、『Red Hat JBoss BRMS 6.0 スタートガイド』を参照してください。

下記の手順に従って、ウェブショップアプリケーションの実行環境を構築しましょう。

  1. brms-coolstore-demo/installs ディレクトリに JBoss BRMS 6 のインストーラのJARファイルを配置します
  2. init.sh を実行して、デモアプリケーションの環境を構築します

デモアプリケーションの実行

JBoss EAP 上にJBoss BRMSのビジネスセントラルとウェブショップアプリケーションがデプロイされています。JBoss EAP をstandaloneモードで起動することで、ビジネスセントラルとウェブショップアプリケーションを利用することが可能になります。

1.JBoss BRMSの起動
JBoss EAP をstandaloneモードで起動します

% brms-coolstore-demo/target/jboss-eap-6.1/bin/standalone.sh

2.ビジネスセントラルへのログイン
erics ユーザでログインします

図 1 ログイン画面

図 1 ログイン画面

3.ルールのビルドとデプロイ
左上の「オーサリング」メニューから「プロジェクトオーサリング」を選択します。次に「ツール」メニューから「プロジェクトエディタ」を選択します。 ブラウザ右側のプロジェクトエディタの上部にある「ビルド&デプロイ」ボタンをクリックし、ビジネスルールをデプロイします。 最後に「ビルド成功」と表示されれば、ビルド&デプロイの成功です。

図 2 プロジェクトのビルドとデプロイ

図 2 プロジェクトのビルドとデプロイ

4.ウェブショップアプリケーションの表示
http://localhost:8080/brms-coolstore-demo/ にアクセスし、ウェブショップアプリケーションを表示します。 左側のペインでアイテムを選択し、「Add To Cart」ボタンをクリックすると、右側のペインのShopping Cartが更新される仕組みです。

図 3 ウェブショップアプリケーション画面

図 3 ウェブショップアプリケーション画面

デモアプリケーション

ウェブショップアプリケーションでは、JBoss BRMS を利用した開発で使われる様々な機能が盛り込まれています。ビジネスセントラルのプロジェクトエクスプローラで、それらを確認することが可能です。

図 4 プロジェクトエクスプローラ

図 4 プロジェクトエクスプローラ

今回は、ショッピングカートに追加されたアイテムの金額を計算するルール「Total Shopping Cart Items」について詳しく見ていきます。
ビジネスルールは<条件>と<アクション>の2つの要素で構成されています。この2つの要素が「図:エンジンの処理フロー」のように、ルールの評価(ファクトとルールのマチング)とアクションの実行(アジェンダの実行)という2つのフェーズで実行されます。

when
  <条件>
then
  <アクション>

エンジンの処理フロー

図 5 ルールエンジンの処理フロー

図 5 ルールエンジンの処理フロー

「Total Shoppping Cart Items」ルールでは、ショッピングカートとショッピングカートに登録されたアイテムが存在する場合に評価され、アクションとして合計金額、値引き金額を計算します。
 処理を順番に見て行きましょう。

    01  package com.redhat.coolstore
    02
    03  rule "Total Shopping Cart Items"
    04      ruleflow-group "pricing-rules"
    05      no-loop true
    06      when
    07          $sc : ShoppingCart( )
    08          $sci : ShoppingCartItem( shoppingCart == $sc )
    09      then
    10          $sc.setCartItemTotal( $sc.getCartItemTotal() + ($sci.getPrice() *
                $sci.getQuantity()));
    11          $sc.setCartItemPromoSavings($sc.getCartItemPromoSavings() +
                ($sci.getPromoSavings() * $sci.\getQuantity()));
    12      update($sc);
    13      retract($sci);

- 条件の評価

7行目の「$sc: ShoppingCart()」では、ショッピングカートが存在していることをチェックし、<アクション>で処理するために変数 $sc にバインドしています。
8行目では、$sc にバインドされたショッピングカートに関連づけられたアイテムを変数 $sci にバインドしています。このようにルールエンジンに渡されたファクトを変数にバインドすることで<アクション>で処理することが可能となります。

- アクションの定義

10行目の「$sc.setCartItemTotal()」では、アイテムの金額と数量をショッピングカートの合計金額に追加しています。
11行目の「$sc.setCartItemPromoSavings()」では、アイテムの値引き金額をショッピングカートの値引き金額に追加しています。
計算の後には、ルールを評価するための重要な update($sc) と retract($sci)が実行されています。

- ショッピングカートの更新update($sc)

ワーキングメモリに登録されたショッピングカートのファクトに変更があったことをルールエンジンに通知し、ショッピングカートが再評価されるようにします。

- アイテムの取消 retract($sci)

計算が終わったアイテムはワーキングメモリに登録されたアイテムを削除し、評価対象から除外されます。

処理のイメージ

図 6 ルール実行イメージ

図 6 ルール実行イメージ

最後に

実際の DRL のソースコードとその動作を照らし合わせることで、ルールの評価や実行の仕組みを見ていきました。複数のルールを評価する仕組みについては、また、別の機会でご紹介していきます。

著者紹介

レッドハット株式会社
JBossサービス事業部
ソリューションアーキテクト 大溝 桂 様

サン・マイクロシステムズにてC言語/Java言語を利用した基幹業務システムの開発などを経験後、2012年にレッドハット株式会社に入社。パートナを担当するプリセールスエンジニアとして、JBoss Middlewareの拡販とパートナ企業の技術者育成に従事。

Red Hat コンテンツ一覧

関連商品・キーワード