9 ルール対応の非SOA Java EEアプリケーションの作成

Oracle JDeveloperを使用して、ルール対応非SOA Java Enterprise Edition (EE)アプリケーションを作成します。Oracle Business Rulesを使用してJava EEアプリケーションとして動作するサンプル・アプリケーションJava Servletを確認します(SOAコンポジットなしのOracle Business Rulesの使用方法を説明します)。

Oracle Business Rules固有のサンプルとSOAのサンプルのソースコードは、Oracle SOA Suiteのサンプルおよびチュートリアル・ページからオンラインで入手できます。

9.1 等級サンプル・アプリケーションの概要

等級アプリケーションは、Java Servlet内Oracle Business Rulesのサンプル使用を示しています。サーブレットでは、Rules SDKデシジョン・ポイントAPIが使用されます。

このサンプルは、次のことを示しています。

  • データ・モデルの入力データ、出力データおよびファクトを定義するXSDスキーマを使用した、Oracle Business Rulesディクショナリへのルールの作成。この場合、ファイルgrades.xsdでXSDスキーマを指定します。

  • 入力である各テスト・スコアについて、等級の判別にOracle Business Rulesを使用するサーブレットの作成。

  • 入力であるテスト・スコアを提供して、データを等級サーブレットに送信するためのテスト・ページの作成。

  • アプリケーションのデプロイと実行、テスト値の送信および出力の表示。

もう1つの例があります。詳細は、「レンタカー・サンプル・アプリケーションとプロジェクトを開く方法」を参照してください。

9.2 等級サンプル・アプリケーション用のアプリケーションとプロジェクトの作成

次のステップに従って、等級サンプル・アプリケーションを作成できます。

ノート:

スクリーン・ショットは、前のバージョンを反映していますが、内容は現在のリリースにも当てはまります。

等級サンプル・アプリケーション用のアプリケーションおよびプロジェクトを作成する手順は、次のとおりです。

  • Fusion Webアプリケーション(ADF)を作成します。

  • アプリケーション内でプロジェクトを作成します。

  • データ・モデルの入力、出力およびオブジェクトを定義するスキーマを追加します。

  • プロジェクト内でOracle Business Rulesディクショナリを作成します。

9.2.1 等級サンプル・アプリケーション用のFusion Webアプリケーションの作成方法

Oracle Business Rulesで作業しJava EEアプリケーションを作成するには、まずOracle JDeveloperでアプリケーションを作成する必要があります。

Fusion Webアプリケーション(ADF)を作成するには:

  1. アプリケーションを作成します。そのためには、「アプリケーション・ナビゲータ」で「新規アプリケーション」を選択するか、または「アプリケーション」メニューのリストから「新規アプリケーション」を選択します。

  2. 「アプリケーションの名前付け」ダイアログで、図9-1に示すようにアプリケーションのオプションを入力します。

    1. 「アプリケーション・テンプレート」領域で「Fusion Web Application」を選択します。

    2. 「アプリケーション名」フィールドで、アプリケーション名を入力します。たとえば、GradeAppと入力します。

    3. 「ディレクトリ」フィールドで、ディレクトリ名を指定するか、またはデフォルトを使用します。

    4. 「アプリケーション・パッケージの接頭辞」フィールドに、アプリケーション・パッケージの接頭辞を入力します。たとえば、com.example.gradesと入力します。

      この接頭辞とそれに続くピリオドは、アプリケーションの初期プロジェクトで作成されるオブジェクトに適用されます。

    図9-1 GradeAppアプリケーションの追加

    図9-1の説明が続きます
    「図9-1 GradeAppアプリケーションの追加」の説明
  3. 「終了」をクリックします。アプリケーションを作成すると、図9-2に示すようなファイルのサマリーがOracle JDeveloperに表示されます。

図9-2 GradeAppという新しい等級アプリケーション

図9-2の説明が続きます
「図9-2 GradeAppという新しい等級アプリケーション」の説明

9.2.2 アクセス可能なADF Facesページの開発方法

Oracleソフトウェアには、http://www.oracle.com/accessibility/standards.htmlにある標準の解説を使用した、Web Content Accessibility Guidelines (WCAG) 1.0 Level AAの標準が実装されています。

ADF Facesのユーザー・インタフェース・コンポーネントには、視覚的および身体的な障害のあるユーザーのために、組込みのアクセシビリティ・サポートが用意されています。スクリーン・リーダーのような非視覚的なメディアへのレンダリングを行うWebブラウザなどのユーザー・エージェントにより、コンポーネントのテキスト説明が読み上げられ、障害を持つユーザーに有益な情報が提供されます。アクセス・キー・サポートは、キーボードのみを使用してコンポーネントやリンクにアクセスする代替の方法を提供します。ADF Facesのアクセシビリティ監査ルールにより、アクセス可能なHTMLマークアップを使用して、アクセス可能なイメージ、表、フレーム、フォーム、エラー・メッセージおよびポップアップ・ウィンドウの作成が指示されています。

アクセシビリティを考慮したADF Facesページの開発方法の詳細は、『Oracle ADF FacesによるWebユーザー・インタフェースの開発』アクセシビリティを考慮したADF Facesページの開発に関する項を参照してください。

9.2.3 Gradesプロジェクトの作成方法

等級サンプル・アプリケーションでは、ModelまたはViewControllerプロジェクトは使用しません。等級サンプル・プロジェクト用にアプリケーションでプロジェクトを作成します。

Gradesプロジェクトを作成するには:

  1. GradeAppアプリケーションで、「アプリケーション・ナビゲータ」の「アプリケーション」メニューから「新規プロジェクト」を選択します。

  2. 「新規ギャラリ」の「項目」領域で、「汎用プロジェクト」を選択します。

  3. 「OK」をクリックします。

  4. 「プロジェクトの名前付け」ページで、図9-3に示すように値を入力します。

    1. 「プロジェクト名」フィールドに名前を入力します。たとえば、Gradesと入力します。

    2. ディレクトリ名を入力または参照するか、デフォルトを使用します。

    3. 「プロジェクト・テクノロジ」タブを選択します。

    4. 「使用可能」領域で「ADFビジネス・コンポーネント」をダブルクリックして、この項目を「選択済」領域に移動します。これにより、図9-3に示すようにJavaも「選択済」領域に追加されます。

      図9-3 等級アプリケーションへの汎用プロジェクトの追加

      図9-3の説明が続きます
      「図9-3 等級アプリケーションへの汎用プロジェクトの追加」の説明
  5. 「終了」をクリックします。これにより、Gradesプロジェクトが追加されます。

9.2.4 Gradesプロジェクト内でのXMLスキーマの追加方法とJAXBクラスの生成方法

Gradesサンプル・アプリケーションを作成するには、次に示すサンプルのgrades.xsdスキーマのように、grades.xsdファイルを使用する必要があります。スキーマ・ファイルをローカルで作成し保存してから、Oracle JDeveloperを使用してファイルをプロジェクトにコピーできます。

<?xml version= '1.0' encoding= 'UTF-8' ?>
<xs:schema targetNamespace="http://example.com/grades"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"     
        xmlns:tns="http://example.com/grades"
        attributeFormDefault="qualified" elementFormDefault="qualified" 
        xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        jaxb:extensionBindingPrefixes="xjc" 
        jaxb:version="2.0">        
        
    <xs:element name="TestScore">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" type="xs:string"/>
                <xs:element name="testName" type="xs:string"/>
                <xs:element name="testScore" type="xs:double"/>
                <xs:element name="testCurve" type="xs:double"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="TestGrade">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="grade" type="tns:Grade"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="Grade">
        <xs:restriction base="xs:string">
            <xs:enumeration value="A"/>
            <xs:enumeration value="B"/>
            <xs:enumeration value="C"/>
            <xs:enumeration value="D"/>
            <xs:enumeration value="F"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

XMLスキーマをGradesプロジェクトに追加するには:

  1. サンプルのgrades.xsdスキーマのスキーマ・ファイルを、ローカル・ファイルとしてgrades.xsdという名前を付けて保存します。
  2. 「アプリケーション・ナビゲータ」で、「Grades」プロジェクトを選択します。
  3. 右クリックしてコンテキスト・メニューから「新規」を選択します。
  4. 「新規ギャラリ」で、「すべてのテクノロジ」タブを選択します。
  5. 「カテゴリ」領域で、「一般」を開いて「XML」を選択します。
  6. 「項目」領域で「XMLスキーマ」を選択します。「OK」をクリックします。
  7. 「XMLスキーマの作成」ダイアログで、「ファイル名」フィールドにgrades.xsdと入力します。
  8. 「XMLスキーマの作成」ダイアログの「ディレクトリ」フィールドで、図9-4に示すようにxsdディレクトリをGradesプロジェクトのパス名に追加します。

    図9-4 xsdディレクトリのGradesプロジェクトへのスキーマの追加

    図9-4の説明が続きます
    「図9-4 xsdディレクトリのGradesプロジェクトへのスキーマの追加」の説明

    「OK」をクリックします。

  9. grades.xsdファイルで、「ソース」タブをクリックします。
  10. 図9-5に示すように、前の例に示すスキーマをGradesプロジェクトのgrades.xsdにコピーします。

    図9-5 Gradesプロジェクトのgrades.xsdスキーマ・ファイル

    図9-5の説明が続きます
    「図9-5 Gradesプロジェクトのgrades.xsdスキーマ・ファイル」の説明
9.2.4.1 等級スキーマからJAXB 2.0コンテンツ・モデルを生成する方法

等級スキーマからJAXB 2.0コンテンツ・モデルを生成するには:

  1. 「アプリケーション・ナビゲータ」のGradesプロジェクトで、「リソース」を開き、grades.xsdを選択します。
  2. 右クリックし、コンテキスト・メニューの「JAXB 2.0コンテンツ・モデルの生成」を選択します。
  3. 「XMLスキーマからのJAXB 2.0コンテンツ・モデル」ダイアログで「OK」をクリックします。

9.2.5 Gradesプロジェクト内でのOracle Business Rulesディクショナリの作成方法

Oracle JDeveloperでプロジェクトを作成した後、Gradesプロジェクト内でビジネス・ルールを作成します。

ビジネス・ルールをOracle JDeveloperで使用する手順は、次のとおりです。

  • ビジネス・ルールをプロジェクトに追加し、grades.xsdスキーマをインポートします。

  • 入力変数と出力変数を作成します。

  • プロジェクト内でOracle Business Rulesディクショナリを作成します。

ビジネス層にビジネス・ルール・ディクショナリを作成するには:

  1. 「アプリケーション・ナビゲータ」で、「Grades」プロジェクトを選択します。
  2. 右クリックし、コンテキスト・メニューで「新規...」を選択し、「すべてのテクノロジ」タブを選択します。
  3. 「新規ギャラリ」の「カテゴリ」領域で、「ビジネス層」を開いて「ビジネス・ルール」を選択します。
  4. 「新規ギャラリ」の「項目」領域で、「ビジネス・ルール」を選択します。「OK」をクリックします。

    図9-6に示すように、Oracle JDeveloperで「ビジネス・ルールの作成」ダイアログが表示されます。

    図9-6 「ビジネス・ルールの作成」ダイアログでのGradesへのビジネス・ルールの追加

    図9-6の説明が続きます
    「図9-6 「ビジネス・ルールの作成」ダイアログでのGradesへのビジネス・ルールの追加」の説明
  5. 「名前」フィールドに、ディクショナリを指定する名前を入力します。たとえば、GradingRulesと入力します。
  6. 入力を追加するには、「追加」ボタンの横にあるリストから「入力」を選択します。
  7. 「タイプ・チューザ」で「プロジェクトのスキーマ・ファイル」フォルダを開き、grades.xsdを開きます。図9-7に示すように、入力「TestScore」を選択します。

    図9-7 TestScore要素を使用した「タイプ・チューザ」ダイアログ

    図9-7の説明が続きます
    「図9-7 「TestScore要素を使用した「タイプ・チューザ」ダイアログ」の説明
  8. 「タイプ・チューザ」ウィンドウで「OK」をクリックします。「ビジネス・ルールの作成」ダイアログが表示されます。
  9. 「ビジネス・ルールの作成」ダイアログで、入力と同様の手順で出力を追加するには、「出力」を選択して、grades.xsdスキーマから要素TestGradeを追加します。

    その結果、図9-8に示すような「ビジネス・ルールの作成」ダイアログが表示されます。

    図9-8 gradesの入力と出力が表示されている「ビジネス・ルールの作成」ダイアログ

    図9-8の説明が続きます
    「図9-8 gradesの入力と出力が表示されている「ビジネス・ルールの作成」ダイアログ」の説明

    「OK」をクリックします。図9-9に示すように、Oracle JDeveloperでGradingRulesディクショナリが作成されます。

  10. 「ファイル」メニューで「すべて保存」を選択し、作業内容を保存します。

図9-9 新しい等級ルール・ディクショナリ

図9-9の説明が続きます
「図9-9 新しい等級ルール・ディクショナリ」の説明

新しいディクショナリのビジネス・ルール検証ログ領域に、検証警告がいくつか表示されることに注意してください。これらの検証警告メッセージは、後のステップでディクショナリを変更するとクリアされます。

9.3 等級サンプル・アプリケーション用のデータ・モデル要素とルールの作成

次のステップに従って、等級サンプル・アプリケーション用のデータ・モデル要素とルールを作成します。

等級サンプル・アプリケーション用にデータ・モデルとビジネス・ルールを作成する手順は、次のとおりです。

  • 等級用値セットを作成します。

  • 等級用デシジョン表の追加によるルールの作成

  • デシジョン表の分割およびルールに対するアクションの追加

  • デフォルトのデシジョン関数名の変更

9.3.1 等級サンプル・アプリケーション用の値セットの作成方法

この例では、ファクト・タイプと値セットを関連付けます。これは、(デシジョン表の条件について)デシジョン表の各セルについて値の描画方法を指定する値セットを定義する必要があるデシジョン表の使用をサポートしています。

等級サンプル・アプリケーション用の値セットを作成するには:

  1. ルール・デザイナで、「値セット」ナビゲーション・タブを選択します。
  2. 「値セットの作成」ボタンの横にあるリストから「範囲リスト」を選択します。
  3. 値セットに対して、「名前」フィールド内をダブルクリックし、デフォルト名を選択します。
  4. Grade Scaleと入力し、[Enter]を押してその値セット名を受け入れます。
  5. 「値セット」表で、Grade Scale値セットのアイコンをダブルクリックし、「値セットの編集」ダイアログを表示します。
  6. 「値セットの編集」ダイアログで「追加」をクリックして値を追加し、「追加」を3回クリックしてさらに3つの値を追加します。
  7. 最上位エンドポイントについて「エンドポイント」フィールドに90と入力し、[Enter]を押して新しい値を受け入れます。
  8. 次の値について「エンドポイント」フィールドに80と入力し、[Enter]を押して新しい値を受け入れます。同様に、次の2つの値について「エンドポイント」フィールドに値70および60を入力します。
  9. 値ごとに、「含まれるエンドポイント」フィールドのチェック・ボックスをそれぞれ選択します。
  10. 対応する各範囲について、各値の「エイリアス」フィールドに値A、B、C、DおよびFをそれぞれ入力して変更します(各エイリアスを追加するたびに[Enter]を押します)。

9.3.2 値セットをファクト・プロパティに関連付ける方法

デシジョン表を作成する準備のため、グローバル値セットをデータ・モデル内のファクト・プロパティに関連付けることができます。これにより、デシジョン表の作成時に、デシジョン表の「条件」領域にある条件セルで値セットを使用できるようになります。

値セットをファクト・プロパティに関連付けるには:

  1. Rules Designerで、「ファクト」ナビゲーション・タブを選択します。
  2. 「ファクト」ナビゲーション・タブで、「XMLファクト」タブを選択します。
  3. TestScoreファクトの「XMLファクト」アイコンをダブルクリックします。「XMLファクトの編集 -」ダイアログが表示されます。
  4. 「XMLファクトの編集 -」ダイアログで「testScore」プロパティを選択します。
  5. 「値セット」フィールドで、リストから「Grade Scale」を選択します。
  6. 「OK」をクリックします。

9.3.3 等級サンプル・アプリケーション用のデシジョン表の追加方法

デシジョン表で、入力ファクトを処理して出力ファクトを生成するか、暫定的な結論を生成するため、ルールを作成します。暫定的な結論は、Oracle Business Rulesにより他のルールを使用するか別のデシジョン表内でさらに処理できます。

このアプリケーションでルールにデシジョン表を使用するには、テスト・スコアを表すファクトで作業します。次に、デシジョン表を使用して、テスト・スコアに基づいて等級を生成するルールを作成します。

等級アプリケーション用のデシジョン表を追加するには:

  1. ルール・デザイナで、「ルールセット」リストの下の「Ruleset_1」を選択します。
  2. 「Ruleset_1」で、「概要」タブの「デシジョン表」領域から「作成」をクリックします。これにより、DecisionTable_1が作成されます。「ビジネス・ルール検証」ログ領域に表示される警告メッセージは無視できます。これらの警告メッセージは、後のステップで削除します。
  3. デシジョン表DecisionTable_1で、「追加」ボタンをクリックし、リストから「条件」を選択します。
  4. デシジョン表で、「<条件の編集>」をダブルクリックします。次に、変数ナビゲータで、「TestScore」を開いて「testScore」を選択します。これにより、条件C1の式TestScore.testScoreが入力されます。

ルール検証ログを表示すると、警告メッセージが表示されます。これらの警告メッセージは、後のステップでデシジョン表を変更すると削除されます。

9.3.4 デシジョン表にアクションを追加する方法

デシジョン表にアクションを追加するには:

新しいGradeファクトをアサートするため、デシジョン表にアクションを追加します。

  1. デシジョン表で、「追加」ボタンをクリックしてリストから「アクション」を選択し、「Assert New」を選択します。
  2. 「アクション」領域で、「新規アサート」をダブルクリックします。

    これにより、「アクション・エディタ」ダイアログが表示されます。

  3. 「アクション・エディタ」ダイアログの「ファクト」領域で「TestGrade」を選択します。
  4. 「アクション・エディタ」ダイアログのgradeプロパティの「プロパティ」表で、「パラメータ化」チェック・ボックスおよび「定数」チェック・ボックスを選択します。

    これにより、各ルールで等級を個別に設定するよう指定したことになります。

  5. 「アクション・エディタ」ダイアログで、「常に選択」チェック・ボックスを選択します。
  6. 「アクション・エディタ」ダイアログで「OK」をクリックします。
  7. 「ファイル」メイン・メニューから「すべて保存」を選択し、作業内容を保存します。

次に、デシジョン表にルールを追加し、ルールごとにアクションを指定します。

9.3.5 等級サンプル・アプリケーション用のデシジョン表でのルールの追加方法

デシジョン表の分割操作を使用して、デシジョン表の条件行に関連付けられた値セットに関するルールを作成できます。これにより、値ごとに1つルールが作成されます。

デシジョン表を分割するには、デシジョン表で、「表の分割」ボタンをクリックし、リストから「表の分割」を選択します。分割操作により、考慮されないセルが表から消去されます。図9-10に示すように、これで表にはすべての範囲を対象とする5つのルールが表示されています。

これらのステップでは、欠落している式があるアクション・セルに関する検証警告が生成されます。これらの問題は、後のステップで各ルールに対するアクションを定義する際に修正します。

図9-10 表分割操作を使用した等級用デシジョン表の分割

図9-10の説明が続きます
「図9-10 表分割操作を使用した等級用デシジョン表の分割」の説明

デシジョン表内のルールごとにアクションを追加するには:

デシジョン表の「アクション」領域で、各アクション・セルのTestGradeに関連付けられているgradeプロパティの結果の値を指定します。各gradeプロパティに可能な選択肢は、有効な等級です。このステップでは、各ルールについて値を入力します。入力した値は、デシジョン表の各ルールを構成する条件に対応します。

  1. 図9-11に示すように、「アクション」領域でルール「R1」のアクション・セルをダブルクリックします。

    図9-11 等級デシジョン表へのアクション・セル値の追加

    図9-11の説明が続きます
    「図9-11 等級デシジョン表へのアクション・セル値の追加」の説明
  2. リストで、アクション・セルに対応する値を選択します。たとえば、「Grade.F」を選択します。
  3. 残りの各アクション・セルで、TestScoreのD、C、BおよびAに該当する値を選択します。

9.3.6 等級サンプル・アプリケーション用のデシジョン関数名の変更方法

Rules SDKデシジョン・ポイントでデシジョン関数を使用するときに指定する名前は、ディクショナリ内のデシジョン関数の名前と一致する必要があります。名前を一致させるために、デシジョン関数を任意の名前に変更できます。この例では、デフォルトのデシジョン関数をGradesDecisionFunctionという名前に変更します。

デシジョン関数の名前を変更するには:

  1. 「アプリケーション・ナビゲータ」のGradesプロジェクトで、「リソース」フォルダを開き、ディクショナリGradingRules.rulesをダブルクリックします。
  2. 「デシジョン関数」ナビゲーション・タブを選択します。
  3. 図9-12に示すように、「デシジョン関数」表の「名前」フィールドでデシジョン関数名を編集し、値GradesDecisionFunctionを入力して[Enter]を押します。

図9-12 ルール・デザイナでのデシジョン関数名の変更

図9-12の説明が続きます
「図9-12ルール・デザイナでのデシジョン関数名の変更」の説明

9.4 Rules SDKコールを含む等級アプリケーションのサーブレットの追加

等級サンプル・アプリケーションには、Rules Engineを使用するサーブレットが含まれています。

このサーブレットをOracle Business Rulesで追加するには、重要なRules SDKメソッドを理解する必要があります。したがって、ルール・デザイナで作成したOracle Business Rulesディクショナリを使用する手順は、次のとおりです。

  • サーブレットのinitルーチンで1度実行する初期化ステップの作成

  • Rules SDKデシジョン・ポイントAPIを使用したサーブレットのserviceルーチンの作成

  • サーブレット・コードをプロジェクトに追加するステップの実行

Rules SDKデシジョン・ポイントAPIの詳細は、「スタンドアロン(非SOA/BPM)シナリオでのルールの使用」を参照してください。

9.4.1 Gradesプロジェクトへのサーブレットの追加方法

「HTTPサーブレット作成」ウィザードを使用して、Gradesプロジェクトにサーブレットを追加します。

Oracle JDeveloperでGradesプロジェクトにサーブレットを追加するには:

  1. 「アプリケーション・ナビゲータ」で、「Grades」プロジェクトを選択します。
  2. Gradesプロジェクトを右クリックし、コンテキスト・メニューから「新規」を選択します。
  3. 「新規ギャラリ」で、「すべてのテクノロジ」タブを選択します。
  4. 「新規ギャラリ」の「カテゴリ」領域で、「Web層」を開いて「サーブレット」を選択します。
  5. 「新規ギャラリ」の「項目」領域で、「HTTPサーブレット」を選択します。「OK」をクリックします。

    Oracle JDeveloperによって「HTTPサーブレット作成 - ようこそ」ページが表示されます。

  6. 「次へ」をクリックします。

    これにより、「Webアプリケーション」ページが表示されます。

  7. サーブレット2.5\JSP 2.1 (Java EE 1.5)を選択して「次へ」をクリックします。

    「HTTPサーブレット作成 - ステップ1/3: サーブレット情報」ページが表示されます。

  8. 図9-13に示すように、「HTTPサーブレット作成 - ステップ1/3: サーブレット情報」ページで次のように値を入力します。
    • クラス: GradesServlet

    • パッケージ: com.example.grades

    • 作成するコンテンツ・タイプ: HTML

    • ヘッダー・コメントの生成: 選択解除

    • メソッドの実装: 「service()」は選択、他のすべてのチェック・ボックスの選択は解除

    図9-13 「HTTPサーブレット作成 - ステップ1/3: サーブレット情報」

    図9-13の説明が続きます
    「図9-13 「HTTPサーブレット作成 - ステップ1/3: サーブレット情報」」の説明

    「次へ」をクリックします。

    図9-14に示すように、「HTTPサーブレット作成 - ステップ2/3: マッピング情報」ダイアログが表示されます。

    図9-14 「HTTPサーブレット作成 - ステップ2 / 3: マッピング情報」

    図9-14の説明が続きます
    「図9-14 「HTTPサーブレット作成 - ステップ2 / 3: サーブレット情報」」の説明
  9. このダイアログを次のように構成します。
    • 名前: GradesServlet

    • URLパターン: /gradesservlet

    完了後、「終了」をクリックします。

    JDeveloperによりプロジェクトに「Webコンテンツ」フォルダが追加され、GradesServlet.javaファイルが作成されて、図9-15に示すようにエディタでファイルが開かれます。

    図9-15 生成されたGradesServlet.java

    図9-15の説明が続きます
    「図9-15 生成されたGradesServlet.java」の説明
  10. 次の等級サンプル・アプリケーションに示すように、生成されたサーブレットをソースと置き換えます。
    package com.example.grades;
     
    import java.io.IOException;
    import java.io.PrintWriter;
     
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import oracle.rules.rl.exceptions.RLException;
    import oracle.rules.sdk2.decisionpoint.DecisionPoint;
    import oracle.rules.sdk2.decisionpoint.DecisionPointBuilder;
    import oracle.rules.sdk2.decisionpoint.DecisionPointInstance;
    import oracle.rules.sdk2.exception.SDKException;
    import oracle.rules.sdk2.repository.DictionaryFQN;
     
    public class GradesServlet extends HttpServlet {
     
        private static final String CONTENT_TYPE = "text/html";
        private static final String DICT_PKG = "com.example.grades";
        private static final String DICT_NAME = "GradingRules";
        private static final DictionaryFQN DICT_FQN =
            new DictionaryFQN(DICT_PKG, DICT_NAME);
        private static final String DF_NAME = "GradesDecisionFunction";
     
        private DecisionPoint m_decisionPoint = null; // init in init()
     
        public void init(ServletConfig config) throws ServletException {
            super.init(config);
            
            try {
                
                // specifying the Decision Function and Dictionary FQN
                // load the rules from the MDS repository.
                m_decisionPoint = new DecisionPointBuilder()
                                    .with(DF_NAME)
                                    .with(DICT_FQN)
                                    .build();
            } catch (SDKException e) {
                System.err.println("Failed to build Decision Point: " +
                                   e.getMessage());
                throw new ServletException(e);
            }
        }
     
        public void service(HttpServletRequest request,
                            HttpServletResponse response) throws ServletException,
                                                                 IOException {        
            // retrieve parameters
            String name = request.getParameter("name");
            String strScore = request.getParameter("testScore");
     
            // open output document
            StringBuilder doc = new StringBuilder();        
            addHeader(doc);
     
            // create TestScore object to assert
            final TestScore testScore = new TestScore();
            testScore.setName(name);
            
            try {
                testScore.setTestScore(Integer.parseInt(strScore));
            } catch (NumberFormatException e){ /* use default val */ }                
     
            // get DecisionPointInstance for invocation
            DecisionPointInstance point = m_decisionPoint.getInstance();
            
            // set input parameters
            point.setInputs(new ArrayList() {{ add(testScore); }});
     
            // invoke decision point and get result value
            TestGrade testGrade = null;        
            try {
                
                // invoke the decision point with our inputs
                List<Object> result = point.invoke();
                if (result.size() != 1){
                    error(doc, testScore.getName(), "bad result", null);                
                }
                // decision function returns a single TestGrade object
                testGrade = (TestGrade)result.get(0);
            } catch (RLException e) {
                error(doc, testScore.getName(), "RLException occurred: ", e);
            } catch (SDKException e) {
                error(doc, testScore.getName(), "SDKException occurred", e);
            } 
            
            if (testGrade != null){
                // create output table in document
                openTable(doc);
                addRow(doc, testScore.getName(), strScore, testGrade.getGrade());
                closeTable(doc);
            }
     
            addFooter(doc);
     
            // write document
            response.setContentType(CONTENT_TYPE);
            PrintWriter out = response.getWriter();
            out.println(doc);
            out.close();
        }
     
     
        public static void addHeader(StringBuilder doc) {
            doc.append("<html>");
            doc.append("<head><title>GradesServlet</title></head>");
            doc.append("<body>");
            doc.append("<h1>Test Results</h1>");
        }
     
        public static void addFooter(StringBuilder doc) {
            doc.append("</body></html>");
        }
     
        public static void openTable(StringBuilder doc) {
            doc.append("<table border=\"1\"");
            doc.append("<tr>");
            doc.append("<th>Name</th>");
            doc.append("<th>Score</th>");
            doc.append("<th>Grade</th>");
            doc.append("</tr>");
        }
     
        public static void closeTable(StringBuilder doc) {
            doc.append("</table>");
        }
        
        public static void addRow(StringBuilder doc, String name, String score, Grade grade){
            doc.append("<tr>");
            doc.append("<td>"+ name +"</td>");
            doc.append("<td>"+ score +"</td>");
            doc.append("<td>"+ grade.value() +"</td>");
            doc.append("</tr>");
        }
     
        public static void error(StringBuilder doc, String name, String msg, Throwable t){
            doc.append("<tr>");
            doc.append("<td>"+ name +"</td>");
            doc.append("<td colspan=2>"+ msg + " " + t +"</td>");
            doc.append("</tr>");
        }
    }
    

前の例には、MDSリポジトリを使用してディクショナリにアクセスするOracle Business Rulesデシジョン・ポイントが含まれています。詳細は、「本番環境でのデシジョン・ポイントの使用に関する必知事項」を参照してください。

等級サンプル・アプリケーションに示すようにサーブレットを追加するときは、次の点に注意します。

  • init()メソッドでは、Oracle Business Rules用にサーブレットでRules SDKデシジョン・ポイントAPIが使用されます。デシジョン・ポイントAPIの使用方法の詳細は、「スタンドアロン(非SOA/BPM)シナリオでのルールの使用」を参照してください。

  • DecisionPointBuilder()では、次に示すように、デシジョン関数名を含む引数が必要であり、本番環境でMDSリポジトリ内のディクショナリにアクセスするためのディクショナリFQNが必要です。

                m_decisionPoint = new DecisionPointBuilder()
                                    .with(DF_NAME)
                                    .with(DICT_FQN)
    

    デシジョン・ポイントAPIの使用方法の詳細は、「スタンドアロン(非SOA/BPM)シナリオでのルールの使用」を参照してください。

9.5 等級サンプル・アプリケーション用HTMLテスト・ページの追加

次のステップに従って、等級サンプル・アプリケーション用のHTMLテスト・ページを作成します。

等級サンプル・アプリケーションには、「Rules SDKコールを含む等級アプリケーションのサーブレットの追加」で作成したサーブレットを起動するために使用するHTMLテスト・ページが含まれています。

サーブレットにHTMLページを追加するには、「HTMLファイルの作成」ウィザードを使用します。

HTMLテスト・ページを追加するには:

  1. 「アプリケーション・ナビゲータ」で、Gradesプロジェクトの「Webコンテンツ」フォルダを選択します。
  2. 「Webコンテンツ」フォルダのプロジェクトを右クリックし、コンテキスト・メニューから「新規」を選択します。
  3. 「新規ギャラリ」で、「すべてのテクノロジ」タブを選択します。
  4. 「新規ギャラリ」の「カテゴリ」領域で、「Web層」を開いて「HTML」を選択します。
  5. 「新規ギャラリ」の「項目」領域で「HTMLページ」を選択します。「OK」をクリックします。

    Oracle JDeveloperで「HTMLファイルの作成」ダイアログが表示されます。

  6. 図9-16に示すように、このダイアログを次のように構成します。
    • ファイル名: index.html

    • ディレクトリ: C:\JDeveloper\mywork\GradeApp\Grades\public_html

    図9-16 「HTMLファイルの作成」ダイアログ

    図9-16の説明が続きます
    「図9-16 「HTMLファイルの作成」ダイアログ」の説明

    「OK」をクリックします。

    JDeveloperによりindex.htmlが「Webコンテンツ」フォルダに追加され、エディタが開きます。

  7. index.htmlのエディタで、「ソース」タブをクリックします。
  8. 次のHTMLテスト・ページ例のHTMLコードをコピーし、index.htmlファイルのコンテンツに貼り付けて置き換えます。form要素では、action属性に図9-14で指定したURLパターンが使用されていることに注意してください。
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"></meta>
        <title>Test Grade Example Servlet</title>
      </head>
      <body>
        <form name="names_and_scores" 
              method="post" 
              action="/grades/gradesservlet" >
              <p>Name: <input type="text" name="name" /></p>
              <p>Test Score: <input type="text" name="testScore"/></p>
           <input type="submit" value="Submit">
        </form>
      </body>
    </html>
    
  9. 「ファイル」メイン・メニューから「すべて保存」を選択し、作業内容を保存します。

9.6 デプロイメントのための等級サンプル・アプリケーションの準備

ビジネス・ルールは、Oracle JDeveloperでデプロイメント・プロファイルの作成対象となるアプリケーションの一部としてデプロイされます。

アプリケーションのデプロイ先はOracle WebLogic Serverです。

9.6.1 等級サンプル・アプリケーション用のWARファイルの作成方法

JDeveloperをOracle WebLogic Serverとともに使用して、GradeAppサンプル・アプリケーションをデプロイします。

等級サンプル・アプリケーション用のWARファイルを作成するには:

  1. 「アプリケーション・ナビゲータ」で、「Grades」プロジェクトを選択します。

  2. Gradesプロジェクトを右クリックし、コンテキスト・メニューから「プロジェクト・プロパティ」を選択します。プロジェクトの「プロジェクト・プロパティ」ダイアログが表示されます。

  3. 図9-17に示すように、「プロジェクト・プロパティ」ナビゲータで「デプロイ」項目を選択します。

    図9-17 「プロジェクト・プロパティ」 - 「デプロイ」

    図9-17の説明が続きます
    「図9-17 「プロジェクト・プロパティ」 - 「デプロイ」」の説明
  4. 「プロジェクト・プロパティ」ダイアログで、「新規」をクリックします。

    「デプロイメント・プロファイルの作成」ダイアログが表示されます。

  5. 「デプロイメント・プロファイルの作成」ダイアログの「アーカイブ・タイプ」で、リストから「WARファイル」を選択します。

  6. 図9-18に示すように、「デプロイメント・プロファイルの作成」ダイアログの「名前」フィールドにgradesと入力します。「名前」の値には、「等級サンプル・アプリケーション用HTMLテスト・ページの追加」のステップ8form要素のaction属性に指定したパッケージ値を使用することに注意してください。

    図9-18 WARファイルの「デプロイメント・プロファイルの作成」ダイアログ

    図9-18の説明が続きます
    「図9-18 WARファイルの「デプロイメント・プロファイルの作成」ダイアログ」の説明
  7. 「OK」をクリックします。

    「WARデプロイメント・プロファイルのプロパティの編集」ダイアログが表示されます。

  8. 「WARデプロイメント・プロファイルのプロパティの編集」ダイアログで「一般」を選択し、図9-19に示すように「一般」ページを構成します。

    1. 「WARファイル」C:\JDeveloper\mywork\GradeApp\Grades\deploy\grades.warに設定します。

    2. 「Webアプリケーションのコンテキスト・ルート」領域で、「Java EE Webコンテキスト・ルートを指定」を選択します。

    3. 「Java EE Webコンテキスト・ルートを指定」のテキスト入力領域に、gradesと入力します。

    4. 「デプロイメント・クライアントの最大ヒープ・サイズ[単位:MB]」で、リストから「自動」を選択します。

    図9-19 WARデプロイメント・プロファイルのプロパティの編集 - 一般

    図9-19の説明が続きます
    「図9-19 WARデプロイメント・プロファイルのプロパティの編集 - 一般」の説明
  9. 「WARデプロイメント・プロファイルのプロパティの編集」ダイアログで「OK」をクリックします。

    図9-20に示すように、JDeveloperによりgrades (WAR File)というデプロイメント・プロファイルが作成されます。

    図9-20 「プロジェクト・プロパティ」 - 作成されたデプロイメント・プロファイル

    図9-20の説明が続きます
    「図9-20 「プロジェクト・プロパティ」 - 作成されたデプロイメント・プロファイル」の説明
  10. 「プロジェクト・プロパティ」ダイアログで、「OK」をクリックします。

9.6.2 等級サンプル・アプリケーションへのルール・ライブラリの追加方法

Weblogicアプリケーション・ファイルにルール・ライブラリを追加するには:

  1. GradeAppアプリケーションで、「アプリケーション・ナビゲータ」で「アプリケーション・リソース」を開きます。
  2. 「ディスクリプタ」および「META-INF」を順に開き、weblogic-application.xmlをダブルクリックして開きます。
  3. oracle.rulesライブラリの参照をweblogic-application.xmlファイルに追加します。図9-21に示すように、次の行を追加します。
    <library-ref>
        <library-name>oracle.rules</library-name>
    </library-ref>
    

    図9-21 WebLogicディスクリプタへのOracle Rulesライブラリの参照の追加

    図9-21の説明が続きます
    「図9-21 WebLogicディスクリプタへのOracle Rulesライブラリの参照の追加」の説明
  4. weblogic-application.xmlファイルを保存します。

9.6.3 等級サンプル・アプリケーションへのMDSデプロイメント・ファイルの追加方法

MDSデプロイメント・ファイルを追加するには:

  1. 「アプリケーション・ナビゲータ」で、「GradeApp」アプリケーションを選択します。
  2. GradeAppアプリケーションを右クリックし、コンテキスト・メニューから「アプリケーションのプロパティ」を選択します。

    「アプリケーションのプロパティ」ダイアログが表示されます。

  3. 図9-22に示すように、「アプリケーションのプロパティ」ナビゲータで「デプロイ」項目を選択します。

    図9-22 「アプリケーションのプロパティ」 - 「デプロイ」

    図9-22の説明が続きます
    「図9-22 「プロジェクト・プロパティ」 - 「デプロイ」」の説明
  4. 「アプリケーションのプロパティ」ダイアログで、「新規」をクリックします。

    「デプロイメント・プロファイルの作成」ダイアログが表示されます。

  5. 図9-23に示すように、このダイアログを次のように構成します。
    • アーカイブ・タイプ: MARファイル

    • 名前: metadata1

    図9-23 MARファイルの「デプロイメント・プロファイルの作成」ダイアログ

    図9-23の説明が続きます
    「図9-23 MARファイルの「デプロイメント・プロファイルの作成」ダイアログ」の説明

    「OK」をクリックします。

    図9-24に示すように、「MARデプロイメント・プロファイルのプロパティの編集」ダイアログが表示されます。

    図9-24 「MARデプロイメント・プロファイルのプロパティの編集 - MARオプション」

    図9-24の説明が続きます
    「図9-24 「MARデプロイメント・プロファイルのプロパティの編集 - MARオプション」」の説明
  6. 「メタデータ・ファイル・グループ」項目を開き、「ユーザー・メタデータ」項目を選択して「追加」をクリックします。

    「コントリビュータの追加」ダイアログが表示されます。

  7. 「コントリビュータの追加」ダイアログの「参照」ボタンをクリックし、GradingRules.rulesディクショナリ・ファイルがあるプロジェクトのディレクトリにナビゲートします。

    この例では、C:\JDeveloper\mywork\GradeApp\Gradesにナビゲートし、「選択」をクリックします。

  8. 「コントリビュータの追加」ダイアログで、「OK」をクリックしてダイアログを閉じます。図9-25に示すように、「MARデプロイメント・プロファイルのプロパティの編集」ダイアログが表示されます。

    図9-25 「MARデプロイメント・プロファイルのプロパティの編集 - ユーザー・メタデータ」

    図9-25の説明が続きます
    「図9-25 「MARデプロイメント・プロファイルのプロパティの編集 - ユーザー・メタデータ」」の説明
  9. 「MARデプロイメント・プロファイルのプロパティの編集」ダイアログで、「メタデータ・ファイル・グループ」および「ユーザー・メタデータ」項目を順に開いて「ディレクトリ」を選択します。

    図9-26に示すように、「ディレクトリ」ページが表示されます。

    図9-26 「MARデプロイメント・プロファイルのプロパティの編集 - ディレクトリ」

    図9-26の説明が続きます
    「図9-26 「MARデプロイメント・プロファイルのプロパティの編集 - ディレクトリ」」の説明
  10. 「oracle」ディレクトリ・チェック・ボックスを選択します。これにより、GradingRules.rulesディレクトリが選択され、MARに含まれます。

    「OK」をクリックします。

    図9-27に示すように、JDeveloperによりmetadata1 (MAR File)というアプリケーション・デプロイメント・プロファイルが作成されます。

    図9-27 「アプリケーションのプロパティ」 - 「デプロイ」 - MAR

    図9-27の説明が続きます
    「図9-27 「アプリケーションのプロパティ」 - 「デプロイ」 - MAR」の説明

    「アプリケーション・プロパティ」ダイアログの「OK」をクリックします。

9.6.4 等級サンプル・アプリケーションへのEARファイルの追加方法

等級サンプル・アプリケーションにEARファイルを追加します。

等級サンプル・アプリケーションにEARファイルを追加するには:

  1. 「アプリケーション・ナビゲータ」で、「GradeApp」アプリケーションを選択します。
  2. 右クリックしてコンテキスト・メニューから「アプリケーションのプロパティ」を選択します。
  3. 「アプリケーションのプロパティ」ダイアログで、「デプロイ」を選択して「新規」をクリックします。「デプロイメント・プロファイルの作成」ダイアログが表示されます。
  4. 図9-28に示すように、このダイアログを次のように構成します。
    • アーカイブ・タイプ: EAR

    • 名前: grades

    図9-28 EARファイルの「デプロイメント・プロファイルの作成」ダイアログ

    図9-28の説明が続きます
    「図9-28 EARファイルの「デプロイメント・プロファイルの作成」ダイアログ」の説明
  5. 「OK」をクリックします。「EARデプロイメント・プロファイルのプロパティの編集」ダイアログが表示されます。
  6. 図9-29に示すように、「EARデプロイメント・プロファイルのプロパティの編集」ダイアログのナビゲータで、「アプリケーション・アセンブリ」を選択します。

    図9-29 「EARデプロイメント・プロファイルのプロパティの編集 - アプリケーション・アセンブリ」

    図9-29の説明が続きます
    「図9-29 「EARデプロイメント・プロファイルのプロパティの編集 - アプリケーション・アセンブリ」」の説明
  7. このダイアログを次のように構成します。
    • 「metadata1」チェック・ボックスを選択します。

    • 「Grades.jpr」項目を開き、「grades」チェック・ボックスを選択します。

  8. 「EARデプロイメント・プロファイルのプロパティの編集」ダイアログで「OK」をクリックします。

    図9-30に示すように、JDeveloperによりgrades(EAR File)というアプリケーション・デプロイメント・プロファイルが作成されます。

    図9-30 「アプリケーションのプロパティ」 - 「デプロイ」 - EAR

    図9-30の説明が続きます
    「図9-30 「プロジェクト・プロパティ」 - 「デプロイ」 - EAR」の説明
  9. 「OK」をクリックして「アプリケーション・プロパティ」ダイアログを閉じます。
  10. 「ファイル」メイン・メニューから「すべて保存」を選択し、作業内容を保存します。

9.7 等級サンプル・アプリケーションのデプロイと実行

これで、等級サンプル・アプリケーションをOracle WebLogic Serverにデプロイして実行できるようになりました。

9.7.1 等級サンプル・アプリケーションのデプロイ方法

等級サンプル・アプリケーションをデプロイするには:

  1. 「アプリケーション・ナビゲータ」で、「GradeApp」アプリケーションを選択します。
  2. GradeAppアプリケーションを右クリックしてコンテキスト・メニューから 「デプロイ」→「grades」→「至」を選択し、既存の接続または「接続の作成」を選択してデプロイ用の接続を作成します。これで、指定のOracle WebLogic Serverへのデプロイが開始します。
  3. デプロイの進行に伴い、Oracle JDeveloperで「デプロイメント構成」ダイアログが表示されます。
  4. 図9-28に示すように、「デプロイメント構成」ダイアログで、次の値を入力します。
    • 「リポジトリ名」フィールドで、リストから「mds-soa」を選択します。

    • 「パーティション名」フィールドにgradesと入力します。

    図9-31 リポジトリおよびパーティションを使用したMDSの「デプロイメント構成」ダイアログ

    図9-31の説明が続きます
    「図9-31 リポジトリおよびパーティションを使用したMDSの「デプロイメント構成」ダイアログ」の説明
  5. 「デプロイメント構成」ダイアログ」ダイアログで「デプロイ」をクリックします。

9.7.2 等級サンプル・アプリケーションの実行方法

等級サンプル・アプリケーションをデプロイしたら、アプリケーションを実行できます。

等級サンプル・アプリケーションを実行するには:

  1. Webブラウザで次のサイトをポイントします。

    http://サーバー名:ポート/grades/

    図9-32に示すように、テスト・サーブレットが表示されます。

    図9-32 等級サンプル・アプリケーションのサーブレット

    図9-32の説明が続きます
    「図9-32 等級サンプル・アプリケーションのサーブレット」の説明
  2. 名前とテスト・スコアを入力して「送信」をクリックします。図9-33に示すような結果が戻されます。

サーブレットを初めて実行した場合、結果が戻されるまでに遅延が生じることがあります。サーブレットが初めて起動されると、サーブレットの初期化中にランタイムによってディクショナリがロードされ、ルール・セッション・プールが作成されます。以降の起動ではこのようなステップが実行されないため、実行速度が大幅に増します。

図9-33 結果を含む等級サンプル・アプリケーションのサーブレット

図9-33の説明が続きます
「図9-33 結果を含む等級サンプル・アプリケーションのサーブレット」の説明