この章では、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のサンプル・ページからオンラインで入手できます。
等級アプリケーションは、Java Servlet内Oracle Business Rulesのサンプル使用を示しています。サーブレットでは、Rules SDKデシジョン・ポイントAPIが使用されます。このサンプルは、次のことを示しています。
データ・モデルの入力データ、出力データおよびファクトを定義するXSDスキーマを使用した、Oracle Business Rulesディクショナリへのルールの作成。この場合、ファイルgrades.xsd
でXSDスキーマを指定します。
入力である各テスト・スコアについて、等級の判別にOracle Business Rulesを使用するサーブレットの作成。
入力であるテスト・スコアを提供して、データを等級サーブレットに送信するためのテスト・ページの作成。
アプリケーションのデプロイと実行、テスト値の送信および出力の表示。
等級サンプル・アプリケーション用のアプリケーションおよびプロジェクトを作成する手順は、次のとおりです。
Fusion Webアプリケーション(ADF)を作成します。
アプリケーション内でプロジェクトを作成します。
データ・モデルの入力、出力およびオブジェクトを定義するスキーマを追加します。
プロジェクト内でOracle Business Rulesディクショナリを作成します。
Oracle Business Rulesで作業しJava EEアプリケーションを作成するには、まずOracle JDeveloperでアプリケーションを作成する必要があります。
Fusion Webアプリケーション(ADF)を作成する手順は、次のとおりです。
アプリケーションを作成します。そのためには、「アプリケーション・ナビゲータ」で「新規アプリケーション」を選択するか、または「アプリケーション」メニューのリストから「新規アプリケーション」を選択します。
「アプリケーションの名前付け」ダイアログで、図9-1に示すようにアプリケーションのオプションを入力します。
「アプリケーション・テンプレート」領域で「Fusion Web Application」を選択します。
「アプリケーション名」フィールドに、アプリケーション名を入力します。たとえば、GradeApp
と入力します。
「ディレクトリ」フィールドで、ディレクトリ名を指定するか、またはデフォルトを使用します。
「アプリケーション・パッケージの接頭辞」フィールドに、アプリケーション・パッケージの接頭辞を入力します。たとえば、com.example.grades
と入力します。
この接頭辞とそれに続くピリオドは、アプリケーションの初期プロジェクトで作成されるオブジェクトに適用されます。
「終了」をクリックします。アプリケーションを作成すると、図9-2に示すようなファイルのサマリーがOracle JDeveloperに表示されます。
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ページの開発に関する項を参照してください。
等級サンプル・アプリケーションでは、ModelまたはViewControllerプロジェクトは使用しません。等級サンプル・プロジェクト用にアプリケーションでプロジェクトを作成します。
Gradesプロジェクトを作成する手順は、次のとおりです。
GradeAppアプリケーションで、「アプリケーション・ナビゲータ」の「アプリケーション」メニューから「新規プロジェクト」を選択します。
「新規ギャラリ」の「項目」領域で、「汎用プロジェクト」を選択します。
「OK」をクリックします。
「プロジェクトの名前付け」ページで、図9-3に示すように値を入力します。
「プロジェクト名」フィールドに名前を入力します。たとえば、Grades
と入力します。
ディレクトリ名を入力または参照するか、デフォルトを使用します。
「プロジェクト・テクノロジ」タブを選択します。
「使用可能」領域で「ADF Business Components」をダブルクリックして、この項目を「選択済」領域に移動します。これにより、図9-3に示すようにJavaも「選択済」領域に追加されます。
「終了」をクリックします。これにより、Gradesプロジェクトが追加されます。
等級サンプル・アプリケーションを作成するには、例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プロジェクトに追加する手順は、次のとおりです。
例9-1に示すスキーマ・ファイルを、grades.xsd
というローカル・ファイルとして保存します。
「アプリケーション・ナビゲータ」で、「Grades」プロジェクトを選択します。
右クリックしてコンテキスト・メニューから「新規」を選択します。
「新規ギャラリ」で、「すべてのテクノロジ」タブを選択します。
「カテゴリ」領域で、「一般」を開いて「XML」を選択します。
「項目」領域で「XMLスキーマ」を選択します。
「OK」をクリックします。
「XMLスキーマの作成」ダイアログで、「ファイル名」フィールドにgrades.xsd
と入力します。
「XMLスキーマの作成」ダイアログの「ディレクトリ」フィールドで、図9-4に示すようにxsd
ディレクトリをGradesプロジェクトのパス名に追加します。
「OK」をクリックします。
grades.xsd
ファイルで、「ソース」タブをクリックします。
等級スキーマからJAXB 2.0コンテンツ・モデルを生成する手順は、次のとおりです。
「アプリケーション・ナビゲータ」のGradesプロジェクトで、「リソース」を開き、grades.xsdを選択します。
右クリックし、コンテキスト・メニューの「JAXB 2.0コンテンツ・モデルの生成」を選択します。
「XMLスキーマからのJAXB 2.0コンテンツ・モデル」ダイアログで「OK」をクリックします。
Oracle JDeveloperでプロジェクトを作成した後、Gradesプロジェクト内でビジネス・ルールを作成します。
ビジネス・ルールをOracle JDeveloperで使用する手順は、次のとおりです。
ビジネス・ルールをプロジェクトに追加し、grades.xsd
スキーマをインポートします。
入力変数と出力変数を作成します。
プロジェクト内でOracle Business Rulesディクショナリを作成します。
ビジネス層にビジネス・ルール・ディクショナリを作成する手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、「Grades」プロジェクトを選択します。
右クリックしてコンテキスト・メニューから「新規」を選択します。
「すべてのテクノロジ」タブを選択します。
「新規ギャラリ」の「カテゴリ」領域で、「ビジネス層」を開いて「ビジネス・ルール」を選択します。
「新規ギャラリ」の「項目」領域で、「ビジネス・ルール」を選択します。
「OK」をクリックします。図9-6に示すように、Oracle JDeveloperで「ビジネス・ルールの作成」ダイアログが表示されます。
「名前」フィールドに、ディクショナリを指定する名前を入力します。たとえば、GradingRules
と入力します。
入力を追加するには、「追加」アイコンの横にあるリストから「入力」を選択します。
「タイプ・チューザ」で「プロジェクトのスキーマ・ファイル」フォルダを開き、grades.xsd
を開きます。
図9-7に示すように、入力「TestScore」を選択します。
「タイプ・チューザ」ウィンドウで「OK」をクリックします。「ビジネス・ルールの作成」ダイアログが表示されます。
「ビジネス・ルールの作成」ダイアログで、入力と同様の手順で出力を追加するには、「出力」を選択して、grades.xsd
スキーマから要素TestGrade
を追加します。
その結果、図9-8に示すような「ビジネス・ルールの作成」ダイアログが表示されます。
「OK」をクリックします。図9-9に示すように、Oracle JDeveloperでGradingRulesディクショナリが作成されます。
「ファイル」メニューで「すべて保存」を選択し、作業内容を保存します。
新しいディクショナリのビジネス・ルール検証ログ領域に、検証警告がいくつか表示されることに注意してください。これらの検証警告メッセージは、後のステップでディクショナリを変更すると削除されます。
等級サンプル・アプリケーション用にデータ・モデルとビジネス・ルールを作成する手順は、次のとおりです。
等級用のバケット・セットの作成
等級用デシジョン表の追加によるルールの作成
デシジョン表の分割およびルールに対するアクションの追加
デフォルトのデシジョン関数名の変更
この例では、バケット・セットをファクト・タイプに関連付けます。これは、(デシジョン表の条件について)デシジョン表の各セルについて値の描画方法を指定するバケット・セットを定義する必要があるデシジョン表の使用をサポートしています。
等級サンプル・アプリケーション用のバケット・セットを作成する手順は、次のとおりです。
Rules Designerで、「バケットセット」ナビゲーション・タブを選択します。
「バケットセットの作成」アイコンの横にあるリストから、「範囲リスト」を選択します。
バケット・セットについて、「名前」フィールドをダブルクリックしてデフォルト名を選択します。
Grade Scale
と入力し、[Enter]を押してバケット・セット名を受け入れます。
「バケットセット」表でGrade Scaleバケット・セットのバケット・アイコンをダブルクリックすると、図9-10に示すような「バケットセットの編集」ダイアログが表示されます。
「バケットセットの編集」ダイアログで、 「バケットの追加」をクリックしてバケットを追加します。
「バケットの追加」を3回クリックし、さらに3つのバケットを追加します。
最上位エンドポイントについて「エンドポイント」フィールドに90と入力し、[Enter]を押して新しい値を受け入れます。
次のバケットについて「エンドポイント」フィールドに80と入力し、[Enter]を押して新しい値を受け入れます。
同様に、次の2つのバケットについて「エンドポイント」フィールドに値70および60を入力します。
バケットごとに、「含まれるエンドポイント」フィールドのチェック・ボックスをそれぞれ選択します。
図9-11に示すように、対応する各範囲について、各値の「エイリアス」フィールドに値A、B、C、DおよびFをそれぞれ入力して変更します(各別名を追加するたびに[Enter]を押します)。
バケット・セットをファクト・プロパティに関連付ける手順は、次のとおりです。
デシジョン表を作成する準備のため、グローバル・バケット・セットをデータ・モデル内のファクト・プロパティに関連付けることができます。これにより、デシジョン表の作成時に、デシジョン表の「条件」領域にある条件セルでバケット・セットを使用できるようになります。
Rules Designerで、「ファクト」ナビゲーション・タブを選択します。
「ファクト」ナビゲーション・タブで、「XMLファクト」タブを選択します。
TestScoreファクトの「XMLファクト」アイコンをダブルクリックします。「XMLファクトの編集 -」ダイアログが表示されます。
「XMLファクトの編集 -」ダイアログで「testScore」プロパティを選択します。
「バケットセット」フィールドで、リストから「Grade Scale」を選択します。
「OK」をクリックします。
デシジョン表で、入力ファクトを処理して出力ファクトを生成するか、暫定的な結論を生成するため、ルールを作成します。暫定的な結論は、Oracle Business Rulesにより他のルールを使用するか別のデシジョン表内でさらに処理できます。
このアプリケーションでルールにデシジョン表を使用するには、テスト・スコアを表すファクトで作業します。次に、デシジョン表を使用して、テスト・スコアに基づいて等級を生成するルールを作成します。
等級アプリケーション用のデシジョン表を追加する手順は、次のとおりです。
Rules Designerで、「ルールセット」ナビゲーション・タブから「Ruleset_1」を選択します。
Ruleset_1で、「追加」アイコンをクリックし、リストから「デシジョン表の作成」を選択します。これにより、DecisionTable_1が作成されます。「ビジネス・ルール検証」ログ領域に表示される警告メッセージは無視できます。これらの警告メッセージは、後のステップで削除します。
デシジョン表DecisionTable_1で、「追加」アイコンをクリックし、リストから「条件」を選択します。
デシジョン表で、「<条件の編集>」をダブルクリックします。次に、変数ナビゲータで、「TestScore」を開いて「testScore
」を選択します。これにより、条件C1の式TestScore.testScore
が入力されます。
ルール検証ログを表示すると、警告メッセージが表示されます。これらの警告メッセージは、後のステップでデシジョン表を変更すると削除されます。
デシジョン表にアクションを追加する手順は、次のとおりです。
新しいGradeファクトをアサートするため、デシジョン表にアクションを追加します。
デシジョン表で、「追加」アイコンをクリックしてリストから「アクション」を選択し、「Assert New」を選択します。
「アクション」領域で「assert new」をダブルクリックします。
「アクション・エディタ」ダイアログが表示されます。
「アクション・エディタ」ダイアログの「ファクト」領域で「TestGrade」を選択します。
「アクション・エディタ」ダイアログで、プロパティgradeの「プロパティ」表で「パラメータ化」チェック・ボックスおよび「定数」チェック・ボックスを選択します。
これにより、各ルールで等級を個別に設定するよう指定したことになります。
「アクション・エディタ」ダイアログで、「常に選択」チェック・ボックスを選択します。
「アクション・エディタ」ダイアログで「OK」をクリックします。
「ファイル」メイン・メニューから「すべて保存」を選択し、作業内容を保存します。
次に、デシジョン表にルールを追加し、ルールごとにアクションを指定します。
デシジョン表の分割操作を使用して、デシジョン表の条件行に関連付けられたバケット・セットに関するルールを作成できます。これにより、バケットごとに1つルールが作成されます。
デシジョン表を分割する手順は、次のとおりです。
デシジョン表を選択します。
「表の分割」アイコンをクリックし、リストから「表の分割」を選択します。
分割操作により、考慮されないセルが表から消去されます。図9-12に示すように、これで表にはすべての範囲を対象とする5つのルールが表示されています。
これらのステップでは、欠落している式があるアクション・セルに関する検証警告が生成されます。これらの問題は、後のステップで各ルールに対するアクションを定義する際に修正します。
デシジョン表内のルールごとにアクションを追加する手順は、次のとおりです。
デシジョン表の「アクション」領域で、各アクション・セルのTestGradeに関連付けられているgradeプロパティの結果の値を指定します。各gradeプロパティに可能な選択肢は、有効な等級です。このステップでは、各ルールについて値を入力します。入力した値は、デシジョン表の各ルールを構成する条件に対応します。
図9-13に示すように、「アクション」領域でルール「R1」のアクション・セルをダブルクリックします。
リストで、アクション・セルに対応する値を選択します。たとえば、「Grade.F」を選択します。
残りの各アクション・セルで、TestScoreのD、C、BおよびAに該当するバケットの値を選択します。
Rules SDKデシジョン・ポイントでデシジョン関数を使用するときに指定する名前は、ディクショナリ内のデシジョン関数の名前と一致する必要があります。名前を一致させるために、デシジョン関数を任意の名前に変更できます。この例では、デフォルトのデシジョン関数をGradesDecisionFunction
という名前に変更します。
デシジョン関数の名前を変更する手順は、次のとおりです。
「アプリケーション・ナビゲータ」のGradesプロジェクトで、「リソース」フォルダを開き、ディクショナリGradingRules.rulesをダブルクリックします。
「デシジョン関数」ナビゲーション・タブを選択します。
図9-14に示すように、「デシジョン関数」表の「名前」フィールドでデシジョン関数名を編集し、値GradesDecisionFunction
を入力して[Enter]を押します。
等級サンプル・アプリケーションには、Rules Engineを使用するサーブレットが含まれています。
このサーブレットをOracle Business Rulesで追加するには、重要なRules SDKメソッドを理解する必要があります。したがって、Rules Designerで作成したOracle Business Rulesディクショナリを使用する手順は、次のとおりです。
サーブレットのinit
ルーチンで1度実行する初期化ステップの作成
Rules SDKデシジョン・ポイントAPIを使用したサーブレットのservice
ルーチンの作成
サーブレット・コードをプロジェクトに追加するステップの実行
Rules SDKデシジョン・ポイントAPIの詳細は、第7章「Rules SDKデシジョン・ポイントAPIの使用」を参照してください。
HTTPサーブレット作成ウィザードを使用して、Gradesプロジェクトにサーブレットを追加します。
Oracle JDeveloperでGradesプロジェクトにサーブレットを追加する手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、「Grades」プロジェクトを選択します。
Gradesプロジェクトを右クリックし、コンテキスト・メニューから「新規」を選択します。
「新規ギャラリ」で、「すべてのテクノロジ」タブを選択します。
「新規ギャラリ」の「カテゴリ」領域で、「Web層」を開いて「サーブレット」を選択します。
「新規ギャラリ」の「項目」領域で、「HTTPサーブレット」を選択します。
「OK」をクリックします。
図9-15に示すように、Oracle JDeveloperでHTTPサーブレット作成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。
図9-16に示すように、「Webアプリケーション」ページが表示されます。
サーブレット2.5\JSP 2.1 (Java EE 1.5)を選択して「次へ」をクリックします。
「HTTPサーブレット作成 - ステップ1/3: サーブレット情報」ページが表示されます。
図9-17に示すように、「HTTPサーブレット作成 - ステップ1/3: サーブレット情報」ページで次のように値を入力します。
クラス: GradesServlet
パッケージ: com.example.grades
作成するコンテンツ・タイプ: HTML
ヘッダー・コメントの生成: 選択解除
メソッドの実装: 「service()」は選択、他のすべてのチェック・ボックスの選択は解除
「次へ」をクリックします。
図9-18に示すように、「HTTPサーブレット作成 - ステップ2/3: マッピング情報」ダイアログが表示されます。
このダイアログを次のように構成します。
名前: GradesServlet
URLパターン: /gradesservlet
「終了」をクリックします。
JDeveloperによりプロジェクトに「Webコンテンツ」フォルダが追加され、GradesServlet.java
ファイルが作成されて、図9-19に示すようにエディタでファイルが開かれます。
例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.4項「Rules SDKコールを含む等級アプリケーションのサーブレットの追加」で作成したサーブレットを起動するために使用するHTMLテスト・ページが含まれています。
サーブレットにHTMLページを追加するには、HTMLファイルの作成ウィザードを使用します。
HTMLテスト・ページを追加する手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、Gradesプロジェクトの「Webコンテンツ」フォルダを選択します。
「Webコンテンツ」フォルダのプロジェクトを右クリックし、コンテキスト・メニューから「新規」を選択します。
「新規ギャラリ」で、「すべてのテクノロジ」タブを選択します。
「新規ギャラリ」の「カテゴリ」領域で、「Web層」を開いて「HTML」を選択します。
「新規ギャラリ」の「項目」領域で「HTMLページ」を選択します。
「新規ギャラリ」で「OK」をクリックします。
Oracle JDeveloperで「HTMLファイルの作成」ダイアログが表示されます。
図9-20に示すように、このダイアログを次のように構成します。
ファイル名: index.html
ディレクトリ: C:\JDeveloper\mywork\GradeApp\Grades\public_html
「OK」をクリックします。
JDeveloperによりindex.html
が「Webコンテンツ」フォルダに追加され、エディタが開きます。
index.html
のエディタで、「ソース」タブをクリックします。
例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>
「ファイル」メイン・メニューから「すべて保存」を選択し、作業内容を保存します。
ビジネス・ルールは、Oracle JDeveloperでデプロイメント・プロファイルの作成対象となるアプリケーションの一部としてデプロイされます。アプリケーションのデプロイ先はOracle WebLogic Serverです。
JdeveloperをOracle WebLogic Serverとともに使用して、GradeAppサンプル・アプリケーションをデプロイします。
等級サンプル・アプリケーション用のWARファイルを作成する手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、「Grades」プロジェクトを選択します。
Gradesプロジェクトを右クリックし、コンテキスト・メニューから「プロジェクト・プロパティ」を選択します。プロジェクトの「プロジェクト・プロパティ」ダイアログが表示されます。
図9-21に示すように、「プロジェクト・プロパティ」ナビゲータで「デプロイ」項目を選択します。
「プロジェクト・プロパティ」ダイアログで、「新規」をクリックします。
デプロイメント・プロファイルの作成ダイアログが表示されます。
「デプロイメント・プロファイルの作成」ダイアログの「アーカイブ・タイプ」で、リストから「WARファイル」を選択します。
図9-22に示すように、「デプロイメント・プロファイルの作成」ダイアログの「名前」フィールドにgrades
と入力します。「名前」の値には、例9-3でform
要素のaction
属性に指定したパッケージ値を使用することに注意してください。
「OK」をクリックします。
「WARデプロイメント・プロファイルのプロパティの編集」ダイアログが表示されます。
「WARデプロイメント・プロファイルのプロパティの編集」ダイアログで「一般」を選択し、図9-23に示すように「一般」ページを構成します。
「WARファイル」をC:\JDeveloper\mywork\GradeApp\Grades\deploy\grades.war
に設定します。
「Webアプリケーションのコンテキスト・ルート」領域で、「Java EE Webコンテキスト・ルートを指定」を選択します。
「Java EE Webコンテキスト・ルートを指定」のテキスト入力領域に、grades
と入力します。
「デプロイメント・クライアントの最大ヒープ・サイズ[単位:MB]」で、リストから「自動」を選択します。
「WARデプロイメント・プロファイルのプロパティの編集」ダイアログで「OK」をクリックします。
図9-24に示すように、JDeveloperによりgrades (WAR File)
というデプロイメント・プロファイルが作成されます。
「プロジェクト・プロパティ」ダイアログで、「OK」をクリックします。
Weblogicアプリケーション・ファイルにルール・ライブラリを追加する手順は、次のとおりです。
GradeAppアプリケーションで、「アプリケーション・ナビゲータ」で「アプリケーション・リソース」を開きます。
「ディスクリプタ」および「META-INF」を順に開き、weblogic-application.xmlをダブルクリックして開きます。
oracle.rules
ライブラリの参照をweblogic-application.xml
ファイルに追加します。図9-25に示すように、次の行を追加します。
<library-ref> <library-name>oracle.rules</library-name> </library-ref>
weblogic-application.xml
ファイルを保存します。
MDSデプロイメント・ファイルを追加する手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、「GradeApp」アプリケーションを選択します。
GradeAppアプリケーションを右クリックし、コンテキスト・メニューから「アプリケーションのプロパティ」を選択します。
「アプリケーションのプロパティ」ダイアログが表示されます。
図9-26に示すように、「アプリケーションのプロパティ」ナビゲータで「デプロイ」項目を選択します。
「アプリケーションのプロパティ」ダイアログで、「新規」をクリックします。
デプロイメント・プロファイルの作成ダイアログが表示されます。
図9-27に示すように、このダイアログを次のように構成します。
アーカイブ・タイプ: MARファイル
「名前」: metadata1
「OK」をクリックします。
図9-28に示すように、「MARデプロイメント・プロファイルのプロパティの編集」ダイアログが表示されます。
「メタデータ・ファイル・グループ」項目を開き、「ユーザー・メタデータ」項目を選択します。
「追加」をクリックします。
「コントリビュータの追加」ダイアログが表示されます。
「コントリビュータの追加」ダイアログの「参照」ボタンをクリックし、GradingRules.rules
ディクショナリ・ファイルがあるプロジェクトのディレクトリにナビゲートします。
この例では、C:\JDeveloper\mywork\GradeApp\Grades
にナビゲートし、「選択」をクリックします。
「コントリビュータの追加」ダイアログで、「OK」をクリックしてダイアログを閉じます。図9-29に示すように、「MARデプロイメント・プロファイルのプロパティの編集」ダイアログが表示されます。
図9-29 「MARデプロイメント・プロファイルのプロパティの編集 - ユーザー・メタデータ」
「MARデプロイメント・プロファイルのプロパティの編集」ダイアログで、「メタデータ・ファイル・グループ」および「ユーザー・メタデータ」項目を順に開いて「ディレクトリ」を選択します。
図9-30に示すように、「ディレクトリ」ページが表示されます。
oracleディレクトリのチェック・ボックスを選択します。これにより、GradingRules.rulesディレクトリが選択され、MARに含まれます。
「OK」をクリックします。
図9-31に示すように、JDeveloperによりmetadata1 (MAR File)
というアプリケーション・デプロイメント・プロファイルが作成されます。
「アプリケーションのプロパティ」ダイアログで、「OK」をクリックします。
等級サンプル・アプリケーションにEARファイルを追加します。
等級サンプル・アプリケーションにEARファイルを追加する手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、「GradeApp」アプリケーションを選択します。
右クリックしてコンテキスト・メニューから「アプリケーションのプロパティ」を選択します。
「アプリケーションのプロパティ」ダイアログで、「デプロイ」を選択して「新規」をクリックします。デプロイメント・プロファイルの作成ダイアログが表示されます。
図9-32に示すように、このダイアログを次のように構成します。
アーカイブ・タイプ: EAR
名前: grades
「OK」をクリックします。「EARデプロイメント・プロファイルのプロパティの編集」ダイアログが表示されます。
図9-33に示すように、「EARデプロイメント・プロファイルのプロパティの編集」ダイアログのナビゲータで、「アプリケーション・アセンブリ」を選択します。
図9-33 「EARデプロイメント・プロファイルのプロパティの編集 - アプリケーション・アセンブリ」
このダイアログを次のように構成します。
「metadata1」チェック・ボックスを選択します。
「Grades.jpr」項目を開き、「grades」チェック・ボックスを選択します。
「EARデプロイメント・プロファイルのプロパティの編集」ダイアログで「OK」をクリックします。
図9-34に示すように、JDeveloperによりgrades(EAR File)
というアプリケーション・デプロイメント・プロファイルが作成されます。
「OK」をクリックして「アプリケーションのプロパティ」ダイアログを閉じます。
「ファイル」メイン・メニューから「すべて保存」を選択し、作業内容を保存します。
これで、等級サンプル・アプリケーションをOracle WebLogic Serverにデプロイして実行できるようになりました。
等級サンプル・アプリケーションをデプロイする手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、GradeAppアプリケーションを選択します。
GradeAppアプリケーションを右クリックしてコンテキスト・メニューから 「デプロイ」→「grades」→「至」を選択し、既存の接続または「接続の作成」を選択してデプロイ用の接続を作成します。これで、指定のOracle WebLogic Serverへのデプロイが開始します。
デプロイの進行に伴い、Oracle JDeveloperで「デプロイメント構成」ダイアログが表示されます。
図9-32に示すように、「デプロイメント構成」ダイアログで、次の値を入力します。
「リポジトリ名」フィールドで、リストから「mds-soa」を選択します。
「パーティション名」フィールドにgradesと入力します。
「デプロイメント構成」ダイアログ」ダイアログで「OK」をクリックします。
等級サンプル・アプリケーションをデプロイしたら、アプリケーションを実行できます。
等級サンプル・アプリケーションを実行する手順は、次のとおりです。
Webブラウザで次のサイトをポイントします。
http://サーバー名:ポート/grades/
図9-36に示すように、テスト・サーブレットが表示されます。
名前とテスト・スコアを入力して「送信」をクリックします。図9-37に示すような結果が戻されます。
サーブレットを初めて実行した場合、結果が戻されるまでに遅延が生じることがあります。サーブレットが初めて起動されると、サーブレットの初期化中にランタイムによってディクショナリがロードされ、ルール・セッション・プールが作成されます。以降の起動ではこのような手順が実行されないため、実行速度が大幅に増します。