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

前
 
次
 

11 SOAアプリケーションでのデシジョン・コンポーネントの使用

この章では、Oracle Business Rulesをサポートするデシジョン・コンポーネントについて説明します。また、デシジョン・コンポーネントの使用方法について、ルールおよびルールセットを、複数のビジネス・プロセスから起動できる再利用可能なサービスとして公開するメカニズムとして説明します。

デシジョン・コンポーネントは、コンポジット内で使用でき、かつBPELコンポーネントに接続できるSCAコンポーネントです。それ以外に、デシジョン・コンポーネントはHuman WorkflowでのMediatorおよび拡張ルーティング・ルールの動的ルーティング機能に使用されます。

この章の内容は次のとおりです。

11.1 デシジョン・コンポーネントの概要

デシジョン・コンポーネントは、基礎となるデシジョン関数にルール・セッションをラップするWebサービスです。

デシジョン・コンポーネントは、次の要素で構成されています。

11.2 デシジョン・コンポーネントの使用

Oracle JDeveloperとRules Designerを使用すると、これらのツールにより必須のメタデータおよびWSDL操作すべてが自動的に生成されます。デシジョン・コンポーネントは、次の方法でSOAコンポジット・アプリケーションに統合できます。

この統合には、次のメリットがあります。

11.2.1 デシジョン・コンポーネント・メタデータの使用

デシジョン・コンポーネントは、次のファイルで定義されています。

通常、これらのファイルの生成およびメンテナンスにはOracle JDeveloperを使用します。

11.2.1.1 デシジョン・サービス・メタデータ(.decs)ファイル

コンポジット内のすべてのデシジョン・コンポーネントには、1つのビジネス・ルール・メタデータ・ファイルが含まれています。ビジネス・ルール・メタデータ・ファイルにより、コンポーネントのビジネス・ルール・ディクショナリの場所およびデシジョン・コンポーネントによって公開されるデシジョン・サービスに関する情報が提供されます。

1つのデシジョン・コンポーネントは、1つ以上のデシジョン・サービスを公開します。たとえば、CreditRatingデシジョン・コンポーネントは、2つのサービス、CheckEligibilityおよびCalculateCreditRatingを公開します。Oracle Fusion Middleware 11g リリース1(11.1.1)では、デシジョン・サービス・メタデータにはWebサービスとして公開されるデシジョン関数名が含まれます。Oracle SOA Suiteの以前のリリースから移行されたプロジェクトに対し、デシジョン・サービス・メタデータは、10.1.3.xで使用された相互作用のパターンによっては、より多くの情報を保持していることが一般的です。

ビジネス・ルール・メタデータ・ファイル(business_rule_name.decs)では、ビジネス・ルールとデザインタイムおよびバックエンドOracle Rules Engineとの相互作用に関与するコンポーネント間の規定が定義されます。

このファイルは、SOAコンポジット・アプリケーションの場合、Oracle JDeveloperの「アプリケーション・ナビゲータ」の「SOAコンテンツ」領域にあります。表11-1に、デシジョン・サービスの.decsファイルの最上位レベル要素を示します。

表11-1 デシジョン・メタデータ・ファイル(.decs)の最上位レベル要素

要素 説明

ruleEngineProvider

business_rule_name.decsファイルのruleEngineProvider要素には、使用するルール・ディクショナリに関する次のような詳細が含まれています。

<ruleEngineProvider name="OracleRulesSDK" provider="Oracle_11.0.0.0.0">
    <repository type="SCA-Archive">
        <path>AutoLoanComposite/oracle/rules/AutoLoanRules.rules</path>
    </repository>
</ruleEngineProvider>

デシジョン・コンポーネントの場合、リポジトリ・タイプはSCA-Archiveに設定されます。これは、ルール・ディクショナリがサービス・コンポーネント・アーキテクチャのアーカイブにあることを示します。パスは相対で、解釈は次のように異なります。

  • デザインタイム - パスはOramds:/で始まります。ルール・ディクショナリはメタデータ・サービス(MDS)APIによりオープンされます。したがって、ディクショナリへのフルパスは次のようになります。

    Oramds:/AutoLoanComposite/oracle/rules/AutoLoanRules.rules
    
  • ランタイム(ビジネス・ルール・サービス・エンジン) - ビジネス・ルール・サービス・エンジンでは、Oracle Business Rules SDKのRuleRepository APIを使用してMDS内に置かれたルール・ディクショナリがオープンされます。たとえば、パスからコンポジット名接頭辞(AutoLoanComposite)が削除され、メタデータ・マネージャではoracle/rules/AutoLoanRules.rulesがコンポジット・ホーム・ディレクトリへの相対パスにあるものとみなされます。

decisionService

デシジョン・サービスは、ビジネス・ルールのWebサービス(SOA)イネーブラです。Webサービスという意味ではサービスであるため、サービス指向アーキテクチャ(SOA)にビジネス・ルールをもたらします。11g リリース1(11.1.1.7)では、デシジョン・サービスはサービスのメタデータおよびWSDL規定で構成されます。

business_rule_name.decsファイルのdecisionService要素では、Webサービスとして公開されるビジネス・ルールを記述するメタデータを定義します。

通常、デシジョン・サービスには、次の要素が含まれています。

  • ターゲット・ネームスペース。

  • バックエンドOracle Rules Engineへの参照(ルール・ディクショナリへのリンクです)。OracleRulesSDKruleEngineProvider要素に示したOracle Rules Engineプロバイダの名称と一致する参照名であることに注意してください。

  • 名称(次の例ではCreditRatingService)。

  • 使用するディクショナリ名およびルールセットに関する追加情報。

  • サポート対象の操作(パターン)のリスト。

操作(パターン)とは別に、操作のパラメータ型(ファクト・タイプ)が指定されています(後で実行時に検証されます)。したがって、各デシジョン・サービスでは強い型指定を持つ規定が公開されます。


11.2.1.2 SCAコンポーネント・タイプ(.componentType)ファイル

SCAのbusiness_rule_name.componentTypeファイルは、各デシジョン・コンポーネントとともに組み込まれています。このファイルには、ビジネス・ルール・サービス・コンポーネントにより公開されるサービスがリストされます。次の例では、2つのサービスCreditRatingServiceおよびLoanAdvisorServiceが公開されています。

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Generated by Oracle SOA Modeler version 1.0 at [5/24/07 9:27 AM]. -->
<componentType xmlns="http://xmlns.oracle.com/sca/1.0">
  <service name="CreditRatingService">
    <interface.wsdl
interface="http://xmlns.oracle.com/creditrating/Rating#wsdl.interface(IDecisionSer
vice)"/>
  </service>
  <service name="LoanAdvisorService">
    <interface.wsdl
interface="http://xmlns.oracle.com/loanoffer/Advisor#wsdl.interface(IDecisionServi
ce)"/>
  </service>
</componentType>

11.2.1.3 composite.xml内のデシジョン・コンポーネント・エントリ

デシジョン・コンポーネントに対してcomposite.xml内にエントリが作成されます。次に例を示します。

<component name="OracleRules1">
     <implementation.decision src="OracleRules1.decs"/>
</component>

ビジネス・ルール・サービス・エンジンでは、サービス・エンジンに対するリクエストを処理するためにこの実装タイプからの情報が使用されます。SCAの視点からは、デシジョン・コンポーネントは新しい実装タイプです。

11.2.2 デシジョン関数を公開するデシジョン・コンポーネントの使用

デシジョン・サービスを使用すると、Oracle Business Rulesデシジョン関数をサービスとして公開できます。デシジョン関数は、Java EEアプリケーションやBPELプロセスからルールをコールするためのRL Languageプログラミングを使用せずに、宣言的に構成される関数です。

例11-1に、サービスとして公開されるOracle Business Rulesデシジョン関数のメタデータを定義する、business_rule_name.decsファイルのdecisionServices要素を示します。

例11-1 デシジョン関数実行用のdecisionService

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<decisionServices xmlns="http://xmlns.oracle.com/bpel/rules" name="PurchaseItems">
    <ruleEngineProvider name="OracleRulesSDK" provider="Oracle_11.0.0.0.0">
        <repository type="SCA-Archive">
            <path>PurchasingSampleProject/oracle/rules/com/example/PurchaseItems.rules</path>
        </repository>
    </ruleEngineProvider>
    <decisionService targetNamespace="http://xmlns.oracle.com/PurchaseItems/PurchaseItems_DecisionService_ValidatePurchasesDF" 
ruleEngineProviderReference="OracleRulesSDK" name="PurchaseItems_DecisionService_ValidatePurchasesDF">
        <catalog>PurchaseItems</catalog>
        <pattern name="CallFunctionStateless">
            <arguments>
                <call>com.example.PurchaseItems.ValidatePurchasesDF</call>
            </arguments>
        </pattern>
        <pattern name="CallFunctionStateful">
            <arguments>
                <call>com.example.PurchaseItems.ValidatePurchasesDF</call>
            </arguments>
        </pattern>
    </decisionService>
</decisionServices>

この場合、デシジョン関数ValidatePurchasesDF自体は、PurchaseItems.rulesファイルで全体が指定されています。

詳細は、第6章「デシジョン関数の使用」を参照してください。

11.2.3 デシジョン・コンポーネントとのステートフルな相互作用の使用

ステートフルなデシジョン・サービスを提供するには、デシジョン関数を作成し、そのデシジョン関数をステートレスでないように指定します。そのためには、デシジョン関数の「ステートレス」チェック・ボックスの選択を解除します。

デシジョン・コンポーネントとのステートフルな相互作用については、次の詳細に注意してください(図11-2も参照)。

  • キャッシュからのルール・セッションおよびプールからのルール・セッションは相互排他です。

    • ルール・セッション・プールは、単純でステートレスな相互作用専用です。

    • ルール・セッション・キャッシュでは、デシジョン・サービス・リクエスト間でルール・セッションの状態が維持されます。

11.2.4 デシジョン・コンポーネントとのステートフルな相互作用に関する必須情報

ビジネス・ルール・サービス・エンジンで実行されるデシジョン・コンポーネントでは、ステートフルな操作とステートレスな操作のいずれかがサポートされます。「ビジネス・ルールの作成」ダイアログの「セッションのリセット」(ステートレス)チェック・ボックスを使用して、これら2つの操作モードを切り替えることができます。

「セッションのリセット」チェック・ボックスを選択すると、ステートレスな操作が指定されます。

「セッションのリセット」(ステートレス)チェック・ボックスが選択されていない場合、基礎となるOracle Business Rulesオブジェクトは、(操作の終了時にルール・セッション・プールに戻されないように)別の場所にあるビジネス・ルール・サービス・エンジンのメモリー内に保持されます。このオプションが必要な場合にのみステートフルな操作を使用してください(ステートフルな操作を使用すると実行時にエラーが発生する場合があり、そのエラーによってサービス・エンジンのメモリーが大量に使用される場合があります)。

「セッションのリセット」(ステートレス)チェック・ボックスが選択されていない場合、デシジョン・コンポーネントがその後使用されると、キャッシュされたRuleSessionオブジェクトはcallFunctionStatefulの起動以降のすべての状態情報とともに再利用され、callFunctionStateless操作の終了後、解放されてルール・セッション・プールに戻されます。

11.3 デシジョン・サービスのアーキテクチャ

デシジョン・サービスは、サービスの記述のみで構成されます。他のすべてのアーティファクトは、図11-1に示すようにデシジョン・コンポーネント内で共有されます。

図11-1 デシジョン・サービスのアーキテクチャ

図11-1の説明が続きます
「図11-1 デシジョン・サービスのアーキテクチャ」の説明

ランタイムの中心部分は、ツリー構造で編成されたデシジョン・サービス・キャッシュです。各デシジョン・コンポーネントは、そのキャッシュのサブツリーを(コンポジット識別名(DN)、コンポーネントおよびサービス名に応じて)所有します。この点では、デシジョン・コンポーネントのデシジョン・サービスは次のデータを共有していることになります。

図11-2に、デシジョン・サービス・リクエスト中の、ステートレスなルール・セッションおよびステートフルなルール・セッションとルール・セッション・プールの相互作用、およびステートフルなルール・セッションとステートフルなルール・セッション・キャッシュの相互作用を示します。

図11-2 デシジョン・サービス・リクエストに対するステートレスおよびステートフルなルール・セッションの使用方法

図11-2の説明が続きます
「図11-2 デシジョン・サービス・リクエストに対するステートレスおよびステートフルなルール・セッションの使用方法」の説明