ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Business Rulesユーザーズ・ガイド
11gリリース1 (11.1.1.7)
B55917-06
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

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

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

この章の項目は、次のとおりです。

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

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

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

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

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

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 Fusion Middleware Oracle Application Development Framework 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クラスの生成方法

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

例9-1 grades.xsdスキーマ

<?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. 例9-1に示すスキーマ・ファイルを、grades.xsdというローカル・ファイルとして保存します。

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

  3. 右クリックしてコンテキスト・メニューから「新規」を選択します。

  4. 「新規ギャラリ」で、「すべてのテクノロジ」タブを選択します。

  5. 「カテゴリ」領域で、「一般」を開いて「XML」を選択します。

  6. 「項目」領域で「XMLスキーマ」を選択します。

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

  8. 「XMLスキーマの作成」ダイアログで、「ファイル名」フィールドにgrades.xsdと入力します。

  9. 「XMLスキーマの作成」ダイアログの「ディレクトリ」フィールドで、図9-4に示すようにxsdディレクトリをGradesプロジェクトのパス名に追加します。

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

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

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

  11. grades.xsdファイルで、「ソース」タブをクリックします。

  12. 図9-5に示すように、例9-1に示すスキーマをGradesプロジェクトのgrades.xsdにコピーします。

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

    図9-5の説明が続きます
    「図9-5 Gradesプロジェクトのgrades.xsdスキーマ・ファイル」の説明

等級スキーマから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. 「新規ギャラリ」の「カテゴリ」領域で、「ビジネス層」を開いて「ビジネス・ルール」を選択します。

  5. 「新規ギャラリ」の「項目」領域で、「ビジネス・ルール」を選択します。

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

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

    図9-6の説明が続きます
    「図9-6 「ビジネス・ルールの作成」ダイアログでのGradesへのビジネス・ルールの追加」の説明

  7. 「名前」フィールドに、ディクショナリを指定する名前を入力します。たとえば、GradingRulesと入力します。

  8. 入力を追加するには、「追加」アイコンの横にあるリストから「入力」を選択します。

  9. 「タイプ・チューザ」で「プロジェクトのスキーマ・ファイル」フォルダを開き、grades.xsdを開きます。

  10. 図9-7に示すように、入力「TestScore」を選択します。

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

    図9-7の説明が続きます
    「図9-7 「TestScore要素を使用した「タイプ・チューザ」ダイアログ」の説明

  11. 「タイプ・チューザ」ウィンドウで「OK」をクリックします。「ビジネス・ルールの作成」ダイアログが表示されます。

  12. 「ビジネス・ルールの作成」ダイアログで、入力と同様の手順で出力を追加するには、「出力」を選択して、grades.xsdスキーマから要素TestGradeを追加します。

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

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

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

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

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

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

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

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

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

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

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

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

等級サンプル・アプリケーション用のバケット・セットを作成する手順は、次のとおりです。

  1. Rules Designerで、「バケットセット」ナビゲーション・タブを選択します。

  2. 「バケットセットの作成」アイコンの横にあるリストから、「範囲リスト」を選択します。

  3. バケット・セットについて、「名前」フィールドをダブルクリックしてデフォルト名を選択します。

  4. Grade Scaleと入力し、[Enter]を押してバケット・セット名を受け入れます。

  5. 「バケットセット」表でGrade Scaleバケット・セットのバケット・アイコンをダブルクリックすると、図9-10に示すような「バケットセットの編集」ダイアログが表示されます。

    図9-10 Grade Scaleバケット・セット

    図9-10の説明が続きます
    「図9-10 Grade Scaleバケット・セット」の説明

  6. 「バケットセットの編集」ダイアログで、 「バケットの追加」をクリックしてバケットを追加します。

  7. 「バケットの追加」を3回クリックし、さらに3つのバケットを追加します。

  8. 最上位エンドポイントについて「エンドポイント」フィールドに90と入力し、[Enter]を押して新しい値を受け入れます。

  9. 次のバケットについて「エンドポイント」フィールドに80と入力し、[Enter]を押して新しい値を受け入れます。

  10. 同様に、次の2つのバケットについて「エンドポイント」フィールドに値70および60を入力します。

  11. バケットごとに、「含まれるエンドポイント」フィールドのチェック・ボックスをそれぞれ選択します。

  12. 図9-11に示すように、対応する各範囲について、各値の「エイリアス」フィールドに値A、B、C、DおよびFをそれぞれ入力して変更します(各別名を追加するたびに[Enter]を押します)。

    図9-11 等級値が追加されたGrade Scaleバケット・セット

    図9-11の説明が続きます
    「図9-11 等級値が追加されたGrade Scaleバケット・セット」の説明

バケット・セットをファクト・プロパティに関連付ける手順は、次のとおりです。

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

  1. Rules Designerで、「ファクト」ナビゲーション・タブを選択します。

  2. 「ファクト」ナビゲーション・タブで、「XMLファクト」タブを選択します。

  3. TestScoreファクトの「XMLファクト」アイコンをダブルクリックします。「XMLファクトの編集 -」ダイアログが表示されます。

  4. 「XMLファクトの編集 -」ダイアログで「testScore」プロパティを選択します。

  5. 「バケットセット」フィールドで、リストから「Grade Scale」を選択します。

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

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

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

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

等級アプリケーション用のデシジョン表を追加する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブから「Ruleset_1」を選択します。

  2. Ruleset_1で、「追加」アイコンをクリックし、リストから「デシジョン表の作成」を選択します。これにより、DecisionTable_1が作成されます。「ビジネス・ルール検証」ログ領域に表示される警告メッセージは無視できます。これらの警告メッセージは、後のステップで削除します。

  3. デシジョン表DecisionTable_1で、「追加」アイコンをクリックし、リストから「条件」を選択します。

  4. デシジョン表で、「<条件の編集>」をダブルクリックします。次に、変数ナビゲータで、「TestScore」を開いて「testScore」を選択します。これにより、条件C1の式TestScore.testScoreが入力されます。

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

デシジョン表にアクションを追加する手順は、次のとおりです。

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

  1. デシジョン表で、「追加」アイコンをクリックしてリストから「アクション」を選択し、「Assert New」を選択します。

  2. 「アクション」領域で「assert new」をダブルクリックします。

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

  3. 「アクション・エディタ」ダイアログの「ファクト」領域で「TestGrade」を選択します。

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

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

  5. 「アクション・エディタ」ダイアログで、「常に選択」チェック・ボックスを選択します。

  6. 「アクション・エディタ」ダイアログで「OK」をクリックします。

  7. 「ファイル」メイン・メニューから「すべて保存」を選択し、作業内容を保存します。

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

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

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

デシジョン表を分割する手順は、次のとおりです。

  1. デシジョン表を選択します。

  2. 「表の分割」アイコンをクリックし、リストから「表の分割」を選択します。

    分割操作により、考慮されないセルが表から消去されます。図9-12に示すように、これで表にはすべての範囲を対象とする5つのルールが表示されています。

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

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

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

デシジョン表内のルールごとにアクションを追加する手順は、次のとおりです。

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

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

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

    図9-13の説明が続きます
    「図9-13 等級デシジョン表へのアクション・セル値の追加」の説明

  2. リストで、アクション・セルに対応する値を選択します。たとえば、「Grade.F」を選択します。

  3. 残りの各アクション・セルで、TestScoreのD、C、BおよびAに該当するバケットの値を選択します。

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

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

デシジョン関数の名前を変更する手順は、次のとおりです。

  1. 「アプリケーション・ナビゲータ」のGradesプロジェクトで、「リソース」フォルダを開き、ディクショナリGradingRules.rulesをダブルクリックします。

  2. 「デシジョン関数」ナビゲーション・タブを選択します。

  3. 図9-14に示すように、「デシジョン関数」表の「名前」フィールドでデシジョン関数名を編集し、値GradesDecisionFunctionを入力して[Enter]を押します。

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

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

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

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

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

Rules SDKデシジョン・ポイントAPIの詳細は、第7章「Rules SDKデシジョン・ポイントAPIの使用」を参照してください。

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

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

Oracle JDeveloperでGradesプロジェクトにサーブレットを追加する手順は、次のとおりです。

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

  2. Gradesプロジェクトを右クリックし、コンテキスト・メニューから「新規」を選択します。

  3. 「新規ギャラリ」で、「すべてのテクノロジ」タブを選択します。

  4. 「新規ギャラリ」の「カテゴリ」領域で、「Web層」を開いて「サーブレット」を選択します。

  5. 「新規ギャラリ」の「項目」領域で、「HTTPサーブレット」を選択します。

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

    図9-15に示すように、Oracle JDeveloperで「HTTPサーブレット作成」ウィザードの「ようこそ」ページが表示されます。

    図9-15 「HTTPサーブレット作成」ウィザード - 「ようこそ」

    図9-15の説明が続きます
    「図9-15 「HTTPサーブレット作成」ウィザード - 「ようこそ」」の説明

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

    図9-16に示すように、「Webアプリケーション」ページが表示されます。

    図9-16 「HTTPサーブレット作成」ウィザード - 「Webアプリケーション」

    図9-16の説明が続きます
    「図9-16 「HTTPサーブレット作成」ウィザード - 「Webアプリケーション」」の説明

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

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

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

    • クラス: GradesServlet

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

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

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

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

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

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

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

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

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

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

  11. このダイアログを次のように構成します。

    • 名前: GradesServlet

    • URLパターン: /gradesservlet

  12. 「終了」をクリックします。

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

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

    図9-19の説明が続きます
    「図9-19 生成されたGradesServlet.java」の説明

  13. 例9-2に示すように、生成されたサーブレットをソースと置き換えます。

    例9-2 等級アプリケーションのサーブレットを使用したビジネス・ルール

    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>");
        }
    }
    

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

例9-2に示すサーブレットを追加する場合、次のことに注意してください。

  • init()メソッドでは、Oracle Business Rules用にサーブレットでRules SDKデシジョン・ポイントAPIが使用されます。デシジョン・ポイントAPIを使用する方法の詳細は、第7章「Rules SDKデシジョン・ポイントAPIの使用」を参照してください。

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

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

    デシジョン・ポイントAPIを使用する方法の詳細は、第7章「Rules SDKデシジョン・ポイントAPIの使用」を参照してください。

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

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

9.5.1 GradesプロジェクトへのHTMLテスト・ページの追加方法

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

HTMLテスト・ページを追加する手順は、次のとおりです。

  1. 「アプリケーション・ナビゲータ」で、Gradesプロジェクトの「Webコンテンツ」フォルダを選択します。

  2. 「Webコンテンツ」フォルダのプロジェクトを右クリックし、コンテキスト・メニューから「新規」を選択します。

  3. 「新規ギャラリ」で、「すべてのテクノロジ」タブを選択します。

  4. 「新規ギャラリ」の「カテゴリ」領域で、「Web層」を開いて「HTML」を選択します。

  5. 「新規ギャラリ」の「項目」領域で「HTMLページ」を選択します。

  6. 「新規ギャラリ」で「OK」をクリックします。

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

  7. 図9-20に示すように、このダイアログを次のように構成します。

    • ファイル名: index.html

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

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

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

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

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

  9. index.htmlのエディタで、「ソース」タブをクリックします。

  10. 例9-3のHTMLコードをコピーし、index.htmlファイルのコンテンツに貼り付けて置き換えます。

    form要素では、action属性に図9-18で指定したURLパターンが使用されていることに注意してください。

    例9-3 HTMLテスト・ページ

    <!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>
    
  11. 「ファイル」メイン・メニューから「すべて保存」を選択し、作業内容を保存します。

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

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

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

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

等級サンプル・アプリケーション用のWARファイルを作成する手順は、次のとおりです。

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

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

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

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

    図9-21の説明が続きます
    「図9-21 「プロジェクト・プロパティ」 - 「デプロイ」」の説明

  4. 「プロジェクト・プロパティ」ダイアログで、「新規」をクリックします。

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

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

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

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

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

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

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

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

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

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

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

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

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

    図9-23の説明が続きます
    「図9-23 WARデプロイメント・プロファイルのプロパティの編集 - 一般」の説明

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

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

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

    図9-24の説明が続きます
    「図9-24 「プロジェクト・プロパティ」 - 作成されたデプロイメント・プロファイル」の説明

  10. 「プロジェクト・プロパティ」ダイアログで、「OK」をクリックします。

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

Weblogicアプリケーション・ファイルにルール・ライブラリを追加する手順は、次のとおりです。

  1. GradeAppアプリケーションで、「アプリケーション・ナビゲータ」で「アプリケーション・リソース」を開きます。

  2. 「ディスクリプタ」および「META-INF」を順に開き、weblogic-application.xmlをダブルクリックして開きます。

  3. oracle.rulesライブラリの参照をweblogic-application.xmlファイルに追加します。図9-25に示すように、次の行を追加します。

    <library-ref>
        <library-name>oracle.rules</library-name>
    </library-ref>
    

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

    図9-25の説明が続きます
    「図9-25 WebLogicディスクリプタへのOracle Rulesライブラリの参照の追加」の説明

  4. weblogic-application.xmlファイルを保存します。

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

MDSデプロイメント・ファイルを追加する手順は、次のとおりです。

  1. 「アプリケーション・ナビゲータ」で、「GradeApp」アプリケーションを選択します。

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

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

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

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

    図9-26の説明が続きます
    「図9-26 「プロジェクト・プロパティ」 - 「デプロイ」」の説明

  4. 「アプリケーションのプロパティ」ダイアログで、「新規」をクリックします。

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

  5. 図9-27に示すように、このダイアログを次のように構成します。

    • アーカイブ・タイプ: MARファイル

    • 「名前」: metadata1

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

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

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

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

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

    図9-28の説明が続きます
    「図9-28 「MARデプロイメント・プロファイルのプロパティの編集 - MARオプション」」の説明

  7. 「メタデータ・ファイル・グループ」項目を開き、「ユーザー・メタデータ」項目を選択します。

  8. 「追加」をクリックします。

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

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

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

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

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

    図9-29の説明が続きます
    「図9-29 「MARデプロイメント・プロファイルのプロパティの編集 - ユーザー・メタデータ」」の説明

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

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

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

    図9-30の説明が続きます
    「図9-30 「MARデプロイメント・プロファイルのプロパティの編集 - ディレクトリ」」の説明

  12. oracleディレクトリのチェック・ボックスを選択します。これにより、GradingRules.rulesディレクトリが選択され、MARに含まれます。

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

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

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

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

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

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

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

等級サンプル・アプリケーションにEARファイルを追加する手順は、次のとおりです。

  1. 「アプリケーション・ナビゲータ」で、「GradeApp」アプリケーションを選択します。

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

  3. 「アプリケーションのプロパティ」ダイアログで、「デプロイ」を選択して「新規」をクリックします。「デプロイメント・プロファイルの作成」ダイアログが表示されます。

  4. 図9-32に示すように、このダイアログを次のように構成します。

    • アーカイブ・タイプ: EAR

    • 名前: grades

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

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

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

  6. 図9-33に示すように、「EARデプロイメント・プロファイルのプロパティの編集」ダイアログのナビゲータで、「アプリケーション・アセンブリ」を選択します。

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

    図9-33の説明が続きます
    「図9-33 「EARデプロイメント・プロファイルのプロパティの編集 - アプリケーション・アセンブリ」」の説明

  7. このダイアログを次のように構成します。

    • 「metadata1」チェック・ボックスを選択します。

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

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

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

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

    図9-34の説明が続きます
    「図9-34 「プロジェクト・プロパティ」 - 「デプロイ」 - 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-32に示すように、「デプロイメント構成」ダイアログで、次の値を入力します。

    • 「リポジトリ名」フィールドで、リストから「mds-soa」を選択します。

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

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

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

  5. 「デプロイメント構成」ダイアログ」ダイアログで「デプロイ」をクリックします。

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

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

等級サンプル・アプリケーションを実行する手順は、次のとおりです。

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

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

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

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

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

  2. 名前とテスト・スコアを入力して「送信」をクリックします。図9-37に示すような結果が戻されます。

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

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

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