ヘッダーをスキップ
Oracle® Fusion Middleware Oracle SOA Suite開発者ガイド
11gリリース1 (11.1.1.7)
B56238-10
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

26 宣言コンポーネントおよびタスク・フローの使用

この章では、Oracle Business Rulesの様々な宣言コンポーネントおよびタスク・フローを使用して、高性能で保守しやすい対話型の多層アプリケーションを開発する方法について説明します。ここでは、Oracle Business Rulesエディタの宣言コンポーネントおよびOracle Business Rulesディクショナリ・エディタの宣言コンポーネントとタスク・フローを使用する方法について説明します。また、ADFベースのWebアプリケーションをローカライズする方法についても説明します。

この章では、次の項目について説明します。

26.1 宣言コンポーネントおよびタスク・フローの概要

宣言コンポーネントは再利用可能なコンポジット・ユーザー・インタフェース(UI)コンポーネントで、他の既存のApplication Development Framework (ADF) Facesコンポーネントで構成されています。ここでは、複数のJSFページが含まれているアプリケーションを考えてみます。特定ページの複数の部分では、一連の固有のコンポーネントが使用されます。このシナリオで、一連のコンポーネントのいずれかに変更を加えた場合、通常は、該当するページの複数の部分にその変更を複製する必要があります。このアプローチでは、ページの構造とレイアウトの一貫性を維持することが困難です。一方、一連の指定コンポーネントで構成した宣言コンポーネントを定義すると、そのコンポジット宣言コンポーネントを複数の場所またはページで再利用できます。このため、宣言コンポーネントによって、時間の節約とページ間の一貫性が確保されます。これは、コンポーネントに変更を加えると、そのコンポーネントを使用しているJSFページが自動的に更新されるためです。

ADFタスク・フローは、アプリケーションに制御フローを指定する際、モジュラおよびトランザクション・メソッドを提供する再利用可能なコンポーネントです。再利用可能な一連のタスク・フローは、アプリケーションを単一の大きなJSFページ・フローとして表現する代替手段として使用でき、これによって、モジュール性が提供されます。各タスク・フローには、アプリケーションの全体的なナビゲーション計画の一部が含まれています。タスク・フローのノードはアクティビティと呼ばれます。ナビゲーションとは別に、タスク・フロー・アクティビティは、マネージドBeanでメソッドをコールしたり、特定のページを起動せずに別のタスク・フローをコールすることもできます。このため、表示されているページとは独立してビジネス・ロジックを起動できるため、再利用が容易になります。

26.2 Oracle Business Rulesエディタの宣言コンポーネントの使用

この項では、Oracle Business Rulesエディタの宣言コンポーネントについて説明します。ルール・エディタ・コンポーネントを使用してアプリケーションを作成および実行し、アプリケーションをデプロイする方法についても説明します。また、この項では、サポートされているタグや、アプリケーションのローカライズ・プロセスのリストも示します。

26.2.1 Oracle Business Rulesエディタ・コンポーネントの概要

Oracle Business Rulesエディタは、ADFベースのWebアプリケーションに埋め込むことができる宣言コンポーネントです。このコンポーネントによって、ルール編集のユーザー・インタフェースが表示され、ルール編集に関連付けられているすべてのイベントが処理されます。ルール・エディタでは、ルールの作成と編集にRules SDK2 APIが使用されます。


注意:

ルール・エディタをルール・ディクショナリ・エディタと混同しないでください。ルール・エディタは、指定したルールセット内のルールを編集するために使用されます。実際には、ルール・エディタはルール・ディクショナリ・エディタに埋め込まれています。ルール・ディクショナリ・エディタの詳細は、第26.3項「Oracle Business Rulesディクショナリ・エディタの宣言コンポーネントの使用」を参照してください。


ルール・エディタを使用すると、単一のルールセットの一部であるルールとデシジョン表を編集できます。RuleSetModelオブジェクトを指定する必要があります。このオブジェクトは、ルール・エディタ・コンポーネントへのパラメータとして、Rules SDKルールセット・オブジェクトを囲むラッパーです。複数のルールセットを変更する必要がある場合は、複数のルール・エディタ・コンポーネントを(ルールセットごとに1つ)インスタンス化する必要があります。

ルール・エディタ・コンポーネントは、次の機能を実行します。


注意:

コンポーネント・ユーザーは、すべての編集が完了した後、ルールセットを保存する必要があります。


26.2.2 ルール・エディタ・コンポーネントを使用したサンプル・アプリケーションの作成および実行方法

この項では、ルール・エディタ・コンポーネントを使用してサンプル・アプリケーションを作成および実行するための手順を示します。

ルール・エディタ・コンポーネントを使用してADFベースのWebアプリケーションを作成するための前提条件は、使用しているコンピュータでOracle SOA SuiteとOracle JDeveloperのインストールが実行されていることです。

ルール・エディタを使用してサンプル・アプリケーションを作成する手順は、次のとおりです。

最初のタスクはサンプル・アプリケーションの作成です。

次の手順に従います。

  1. Oracle JDeveloperを開きます。

  2. 「ファイル」メニューから、「新規」「汎用アプリケーション」の順に選択し、アプリケーションを作成します。

  3. 図26-13に示すように、「アプリケーション名」フィールドにアプリケーションの名前(useRulesDCAppなど)を入力し、「次へ」をクリックします。

    図26-13 汎用アプリケーションの作成

    汎用アプリケーション
    「図26-13 汎用アプリケーションの作成」の説明

  4. 図26-14に示すように、「プロジェクト名」フィールドにuseRulesDCと入力し、「プロジェクト・テクノロジ」タブで「ADF Faces」が選択されていることを確認します。

    図26-14 プロジェクトの作成

    プロジェクトの作成
    「図26-14 プロジェクトの作成」の作成

  5. 「終了」をクリックしてプロジェクトを作成します。

  6. Oracle JDeveloperの「アプリケーション・ナビゲータ」で「useRulesDC」プロジェクトを右クリックし、「プロジェクト・プロパティ」を選択して「プロジェクト・プロパティ」ダイアログ・ボックスを表示します。

    「プロジェクト・プロパティ」ダイアログ・ボックスでは、次の手順に従います。

    1. 左側のパネルから「JSPタグ・ライブラリ」をクリックします。

    2. 「追加」をクリックし、図26-15に示すように、「タグ・ライブラリの選択」ダイアログ・ボックスの「拡張機能」リストから「ADF Faces Components」を選択し、「OK」をクリックします。

      図26-15 タブ・ライブラリの選択

      タグ・ライブラリの選択
      「図26-15 タブ・ライブラリの選択」の説明

    3. 左側のパネルから「ライブラリとクラスパス」をクリックし、「ライブラリの追加」ボタンをクリックして「ライブラリの追加」ダイアログ・ボックスを表示します。

    4. 図26-16に示すように、「拡張機能」リストから「Oracle Rules」および「Oracle Rules Editor Component」をクリックし、「OK」をクリックします。

      図26-16 Oracle RulesおよびOracle Rules Editorコンポーネントの選択

      Oracle RulesおよびOracle Rules Editorコンポーネントの選択
      「図26-16 Oracle RulesおよびOracle Rules Editorコンポーネントの選択」の説明

      これにより、Rules SDKおよびRules Editorコンポーネント・タグ・ライブラリがプロジェクトに追加されます。

    5. 「OK」をクリックして「プロジェクト・プロパティ」ダイアログ・ボックスを閉じます。

  7. Oracle JDeveloperの「ファイル」メニューから、「すべて保存」を選択してプロジェクトを保存します。

必要なすべてのタグ・ライブラリが追加されたことを確認する必要があります。

  1. Oracle JDeveloperの「アプリケーション・ナビゲータ」で「useRulesDC」プロジェクトを右クリックし、「プロジェクト・プロパティ」を選択して「プロジェクト・プロパティ」ダイアログ・ボックスを表示します。

  2. 図26-17に示すように、左側のパネルから「JSPタグ・ライブラリ」をクリックし、すべてのタグ・ライブラリが追加されているかどうかを確認します。

    図26-17 必要なタグ・ライブラリの確認

    必要なタグ・ライブラリの確認
    「図26-17 必要なタグ・ライブラリの確認」の説明

RuleSetModelオブジェクトを作成する手順は、次のとおりです。

ルール・エディタ・コンポーネントには、oracle.bpel.rulesdc.model.impl.RuleSetModelオブジェクトが必要です。コンポーネントでは、このオブジェクトを使用して、ルールセット内のルールやデシジョン表を読み取ります。したがって、次のタスクは、RuleSetModelオブジェクトを作成するSomeBean.javaと呼ばれるマネージドBeanの作成です。

次の手順に従います。

  1. Oracle JDeveloperを開きます。

  2. 「ファイル」メニューから「新規」を選択して、「新規ギャラリ」ダイアログ・ボックスを表示します。

  3. 「新規ギャラリ」ダイアログ・ボックスの「カテゴリ」パネルから、「一般」の下にある「Java」を選択します。

  4. 「項目」「Javaクラス」が選択されていることを確認し、「OK」をクリックして「Javaクラスの作成」ダイアログ・ボックスを表示します。

  5. 図26-18に示すように、Javaクラスの名前(SomeBean.javaなど)を入力して「OK」をクリックし、プロジェクトにJavaクラスを作成します。

    図26-18 Javaクラスの作成

    Javaクラスの作成
    「図26-18 Javaクラスの作成」の説明

  6. SomeBean.javaで、RuleSetModelオブジェクトを返すメソッドを指定します。ここにルール・ファイルの場所を指定する必要があります。SomeBean.javaファイルの例を次に示します。

    package userulesdc;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Reader;
    
    import java.io.Writer;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import oracle.bpel.rulesdc.model.impl.RuleSetModel;
    import oracle.rules.sdk2.dictionary.RuleDictionary;
    import oracle.rules.sdk2.exception.SDKException;
    import oracle.rules.sdk2.exception.SDKWarning;
    import oracle.rules.sdk2.ruleset.RuleSet;
    import oracle.rules.sdk2.ruleset.RuleSetTable;
    
    public class SomeBean {
        private static final String RULES_FILE = "<your rules file here>";
        private RuleSetModel ruleSetModel = null;
    
        public RuleSetModel getRuleSetModel() {
            if (ruleSetModel != null)
                return ruleSetModel; 
                //cache ruleSetModel instead of re-creating it each time
    
             Reader reader = null;
            try {
                reader =
                        new FileReader(new File(RULES_FILE));
            } catch (FileNotFoundException e) {
                //LOG.severe(e);
                System.err.println(e);
            }
    
            RuleDictionary dict = null;
    
            try {
                dict = RuleDictionary.readDictionary(reader, null);
            } catch (SDKException e) {
                System.err.println(e);
            } catch (FileNotFoundException e) {
                System.err.println(e);
            } catch (IOException e) {
                System.err.println(e);
            }
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException ioe) {
                }
            }
    
            //get the ruleSetTable from the RuleDictionary object
            RuleSetTable ruleSetTable = dict.getRuleSetTable();
    
            //get the first ruleSet from the ruleSetTable
            RuleSet ruleSet = ruleSetTable.get(0);
            //create a RuleSetModel object and pass this to the rulesDC
    
            ruleSetModel = new RuleSetModel(ruleSet) ;
            return ruleSetModel;
        }
    
         //refer to Rules SDK documentation for saving a dictionary also
         //because this code does not take care of saving linked dictionaries
         public static boolean saveDictionary(RuleDictionary dict,
                                             String ruleFileName) {
            Writer writer = null;
            try {
                writer = new FileWriter(new File(ruleFileName));
                dict.writeDictionary(writer);
    
            } catch (SDKException e) {
                System.err.println(e);
                return false;
            } catch (FileNotFoundException e) {
                System.err.println(e);
                return false;
            } catch (IOException e) {
                System.err.println(e);
                return false;
            } finally {
                if (writer != null) {
                    try {
                        writer.close();
                    } catch (IOException ioe) {
                        return false;
                    }
                }
            }
            return true;
        }
    
        public static void updateDictionary(RuleDictionary dict) {
            if (dict == null)
                return;
    
            List<SDKWarning> warnings = new ArrayList<SDKWarning>();
            try {
                dict.update(warnings);
                if (!warnings.isEmpty()) {
                    for (int i = 0; i < warnings.size(); i++)
                        System.out.println("warnings: " +
                                           warnings.get(i).getLocalizedMessage());
                }
            } catch (SDKException sdkEx) {
                sdkEx.printStackTrace();
            }
        }
    
        //You can call this method from your "Save" button
        public void saveDictionary() {
    
         RuleDictionary dict = this.getRuleSetModel().getRuleSet().getDictionary();
            if (dict != null) {
                //update the dictionary before saving it
                updateDictionary(dict);
                saveDictionary(dict, RULES_FILE);
            }
        }
    
    //call the validation method on the ruleSetModel to update the Validation Panel 
    
        public void validate() {
            if (this.ruleSetModel == null)
                return;
            
            this.ruleSetModel.validate();
    
  7. faces-config.xmlファイルを概要モードで開き、「マネージドBean」の下の「+」ボタンをクリックして「マネージドBeanの作成」ダイアログ・ボックスを表示します。

  8. 図26-19に示すように、「Bean名」フィールドにsomeBeanと入力し、「スコープ」リストで「セッション」を選択して、SomeBean.javaを指し示します。

    図26-19 Bean名とスコープの指定

    Bean名とスコープの指定
    「図26-19 Bean名とスコープの指定」の説明

    ADF/JSFフレームワークによって、ユーザー・インタフェースを表示するSomeBean.javaへの複数のコールが実行されます。たとえば、someBean.ruleSetModelは複数回コールされます。しがたって、RuleSetModelオブジェクトは、コールの都度再作成せずに、一度に作成してキャッシュし、返すほうが効率的です。

ルール・エディタ・コンポーネント・タグの.jspxファイルを作成する手順は、次のとおりです。

次のタスクは、ルール・エディタ・コンポーネント・タグを挿入する.jspxファイルの作成です。

次の手順に従います。

  1. Oracle JDeveloperを開きます。

  2. 「ファイル」メニューから「新規」を選択して、「新規ギャラリ」ダイアログ・ボックスを表示します。

  3. 「新規ギャラリ」ダイアログ・ボックスの「カテゴリ」パネルから、「Web層」の下にある「JSF」を選択します。

  4. 「項目」「JSFページ」を選択し、「OK」をクリックして「JSFページの作成」ダイアログ・ボックスを表示します。

  5. 図26-20に示すように、「JSFページの作成」ダイアログ・ボックスで、「ファイル名」にuseRulesDC.jspxと入力します。

    図26-20 JSFページ・ファイルの作成

    JSFページ・ファイルの作成
    「図26-20 JSFページ・ファイルの作成」の説明

    図26-21に示すように、Oracle JDeveloperの「コンポーネント・パレット」にRulesCompLibが表示されます。

    図26-21 「コンポーネント・パレット」のルール・エディタ・コンポーネント・ライブラリ

    「コンポーネント・パレット」のルール・エディタ・コンポーネント・ライブラリ
    「図26-21 「コンポーネント・パレット」のルール・エディタ・コンポーネント・ライブラリ」の説明

    これは、サンプル・アプリケーションの作成時にルール・エディタ・コンポーネント・タグ・ライブラリを追加したためです。

  6. RulesCompLibを選択し、Rulesdcタグを表示します。Rulesdcタグは、.jspxファイルにドラッグ・アンド・ドロップできます。.jspxファイルには、次のように、Rulesdcタグを手動で追加することもできます。

    <?xml version='1.0' encoding='UTF-8'?>
    <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
              xmlns:f="http://java.sun.com/jsf/core"
              xmlns:h="http://java.sun.com/jsf/html"
              xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
              xmlns:rdc="http://xmlns.oracle.com/bpel/rules/editor">
      <jsp:directive.page contentType="text/html;charset=UTF-8"/>
      <f:view>
         <af:document title="Sample Rules Editor App" id="d1">
          <af:form id="f1">
            <af:panelStretchLayout id="psl1" inlineStyle="margin:15px;"
                                   partialTriggers="cb1 cb3">
              <f:facet name="center">
                <rdc:rulesdc rulesetModel="#{someBean.ruleSetModel}"
                             viewOnly="false" discloseRules="true"
                             genericAction="true" genericPattern="true"
                             dtColumnPageSize="6" id="r1" dateStyle="yyyy-MM-dd"
                             timeStyle="HH-mm-ss"></rdc:rulesdc>
              </f:facet>
              <f:facet name="top">
                <af:panelGroupLayout id="pgl2" layout="horizontal">
                  <af:commandButton text="Save Dictionary"
                                    action="#{someBean.saveDictionary}" id="cb1"/>
                  <af:spacer width="10" height="10" id="s5"/>
                  <af:commandButton text="Validate" id="cb3"
                                    action="#{someBean.validate}"
                                    partialSubmit="true"/>
                </af:panelGroupLayout>
              </f:facet>
            </af:panelStretchLayout>
          </af:form>
        </af:document>
      </f:view>
    </jsp:root>
    

oracle.rulesおよびoracle.soa.rules_editor_dc.webapp共有ライブラリを参照する手順は、次のとおりです。

.jspxファイルを作成した後は、weblogic-application.xmlファイルからoracle.rulesおよびoracle.soa.rules_editor_dc.webapp共有ライブラリを参照する必要があります。

次の手順に従います。

  1. Oracle JDeveloperで、「アプリケーション・リソース」「ディスクリプタ」「META-INF」の順に参照し、weblogic-application.xmlファイルを開きます。

  2. 図26-22に示すように、次の行を追加してoracle.rules共有ライブラリを参照します。

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

    図26-22 oracle.rules共有ライブラリの参照

    oracle.rules共有ライブラリの参照
    「図26-22 oracle.rules共有ライブラリの参照」の説明

  3. Oracle JDeveloperで、次のようにします。

    1. 「ファイル」メニューから「新規」を選択して、「新規ギャラリ」ダイアログ・ボックスを表示します。

    2. 「新規ギャラリ」ダイアログ・ボックスで、「カテゴリ」パネルの「一般」にある「デプロイメント・ディスクリプタ」を選択します。

    3. 「項目」の下の「WebLogicデプロイメント・ディスクリプタ」を選択し、「OK」をクリックして、「WebLogicデプロイメント・ディスクリプタの作成」ダイアログ・ボックスを表示します。

    4. リストから「weblogic.xml」を選択し、「終了」をクリックします。

    5. Oracle JDeveloperで、weblogic.xml「概要」モードで、左側のパネルから「ライブラリ」を選択します。

    6. 図26-23に示すように、ライブラリ名にoracle.soa.rules_editor_dc.webappと入力します。

      図26-23 ルール・エディタ・コンポーネント・ライブラリの追加

      ルール・エディタ・コンポーネント・ライブラリの追加
      「図26-23 ルール・エディタ・コンポーネント・ライブラリの追加」の説明

    7. 「すべて保存」をクリックします。

  4. oracle.rules共有ライブラリを埋込みOracle WebLogic Serverにデプロイします。

    1. Oracle WebLogic Server管理コンソール(http://host:port/console/login/LoginForm.jsp)を起動します。

    2. Oracle JDeveloperで埋込みWeblogic Serverが実行されていることを確認します。

    3. 「デプロイメント」を選択し、「インストール」をクリックして、「アプリケーション・インストール・アシスタント」ページを表示します。

    4. 図26-24のように、次のものを選択し、「終了」をクリックします。

      JDEV_INSTALL/jdeveloper/soa/modules/oracle.rules_11.1.1/rules.jar
      

      図26-24 oracle.rules共有ライブラリのデプロイ

      oracle.rules共有ライブラリのデプロイ
      「図26-24 oracle.rules共有ライブラリのデプロイ」の説明

  5. oracle.soa.rules_editor_dc.webapp共有ライブラリをOracle WebLogic Serverにデプロイします。

    1. WebLogic Consoleで、「デプロイメント」を選択し、「インストール」をクリックして、「アプリケーション・インストール・アシスタント」ページを表示します。

    2. 次のものを選択し、「次へ」をクリックします。

      JDEV_INSTALL/jdeveloper/soa/modules/oracle.soa.rules_editor_dc.webapp_
      11.1.1/oracle.soa.rules_editor_dc.webapp.war
      
    3. 図26-25に示すように、「このデプロイメントをライブラリとしてインストールする」を選択し、「終了」をクリックします。

      図26-25 oracle.soa.rules_editor_dc.webapp共有ライブラリのデプロイ

      oracle.soa.rules_editor_dc.webapp共有ライブラリのデプロイ
      「図26-25 oracle.soa.rules_editor_dc.webapp共有ライブラリのデプロイ」の説明

      図26-26に示すように、oracle.soa.rules_editor_dc.webappがデプロイメントのリストに追加されます。

      図26-26 デプロイメント・リストに追加されたoracle.soa.rules_editor_dc.webapp

      追加されたoracle.soa.rules_editor_dc.webapp
      「図26-26 デプロイメント・リストに追加されたoracle.soa.rules_editor_dc.webapp」の説明

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

最後のタスクは、サンプル・アプリケーションの実行です。

  1. サンプル・アプリケーションを実行するには、Oracle JDeveloperで、useRulesDC.jspxファイルを右クリックします。

  2. 「実行」を選択します。

    図26-27に示すように、Webブラウザでサンプル・アプリケーションが開始します。

    図26-27 サンプル・アプリケーションの実行

    サンプル・アプリケーションの実行
    「図26-27 サンプル・アプリケーションの実行」の説明

26.2.3 スタンドアロンOracle WebLogic Serverへのルール・エディタ・アプリケーションのデプロイ方法

アプリケーションEARファイルをスタンドアロンOracle WebLogic Serverにデプロイする準備が整った場合は、次の手順を実行します。

  1. Oracle WebLogic Server管理コンソール(http://host:port/console/login/LoginForm.jsp)を起動します。

  2. デプロイメント・リストにoracle.rulesが表示されていることを確認します。

  3. デプロイメント・リストにoracle.soa.rules_editor_dc.webappが表示されていることを確認します。

  4. これが表示されない場合は、「インストール」をクリックし、次のファイルを選択します。

    JDEV_INSTALL/jdeveloper/soa/modules/oracle.soa.rules_editor_dc.webapp_
    11.1.1/oracle.soa.rules_editor_dc.webapp.war
    
  5. Oracle JDeveloperを開きます。

  6. 「アプリケーション・ナビゲータ」でプロジェクト名を右クリックし、「プロジェクト・プロパティ」を選択します。

  7. 左側のパネルから「ライブラリとクラスパス」を選択し、「ライブラリの追加」をクリックします。

  8. 図26-28に示すように、「ライブラリの追加」ダイアログ・ボックスで、「Oracle Rules Editor Component」を選択して「OK」をクリックします。

    図26-28 Oracle Rules Editorコンポーネントの追加

    Oracle Rules Editorコンポーネントの追加
    「図26-28 Oracle Rules Editorコンポーネントの追加」の説明

    この手順では、これらのライブラリを参照できますが、これらのライブラリがデフォルトでデプロイされることはありません。したがって、JARはプロジェクトWARファイルには組み込まれていません。

  9. デプロイする必要があるプロジェクト(EARファイルを作成する場所)で、次の手順を実行します。

    1. 次の行をweblogic-application.xmlに追加します。

      <library-ref>
         <library-name>oracle.rules</library-name>
      </library-ref>
      
    2. 次の行をプロジェクトWARファイルのweblogic.xmlに追加します。

      <library-ref>
         <library-name>oracle.soa.rules_editor_dc.webapp</library-name>
      </library-ref>
      
    3. EARファイルをOracle WebLogic Serverにデプロイします。

EARの作成方法の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Java EE開発者ガイド』のデプロイメントのためのEARファイルの作成方法に関する項を参照してください。

26.2.4 ルール・エディタ・コンポーネントのカスタム権限に関する必知事項

ロールベースの認可について、Rules DCはカスタムJAAS権限を実装しています(oracle.adf.share.security.authorization.ADFPermissionクラスを拡張し、ADFセキュリティで権限を使用できるようにします)。

ルール・エディタ・アプリケーションでADFセキュリティがサポートされている場合は、ロールベースの認証および認可がサポートされていることになりますが、この場合、セキュリティはカスタムJAAS権限を実装して施行します(oracle.adf.share.security.authorization.ADFPermissionクラスを拡張してADFセキュリティで権限が使用されるようにします)。アプリケーション要件に基づいてユーザー・ロールに次の権限を付与してADFセキュリティ・ポリシーを作成する必要があります。

  • oracle.rules.adf.permission.AddRulePermission: 「ルールの追加」ボタンが表示されます。この権限が付与されていない場合、「ルールの追加」ボタンはユーザーに表示されません。

  • oracle.rules.adf.permission.DeleteRulePermission: 「ルールの削除」ボタンが表示されます。この権限が付与されていない場合、「ルールの削除」ボタンはユーザーに表示されません。

  • oracle.rules.adf.permission.EditRulePermission: ルールセット内のルールについて「ルールの編集」ボタンが表示されます。この権限が付与されていない場合、ルールは表示のみとなります。

  • oracle.rules.adf.permission.AddDTPermission: 「デシジョン表の追加」ボタンが表示されます。この権限が付与されていない場合、「デシジョン表の追加」ボタンはユーザーに表示されません。

  • oracle.rules.adf.permission.DeleteDTPermission: 「デシジョン表の削除」ボタンが表示されます。この権限が付与されていない場合、「デシジョン表の削除」ボタンはユーザーに表示されません。

  • oracle.rules.adf.permission.EditDTPermission: ルールセット内のデシジョン表について「デシジョン表の編集」ボタンが表示されます。この権限が付与されていない場合、デシジョン表は表示のみとなります。

  • oracle.rules.adf.permission.RulesEditorPermission: 前述の権限をすべてtrueに設定するグローバル権限。

たとえば、「ルールの削除」権限をロールに付与するには、アプリケーションのjazn-data.xmlファイルに次のコードを指定します。

<grant>
  <grantee>
     <principals>
      <principal>
       <class>oracle.security.jps.service.policystore.ApplicationRole</class>
       <name>role2</name>
      </principal>
     </principals>
   </grantee>
   <permissions>
    <permission>
      <class>oracle.rules.adf.permission.DeleteRulePermission</class>
      <name>DeleteRulePermission</name>
      <actions>access</actions>
    </permission>
  </permissions>
</grant>

AddRulePermissionまたはDeleteRulePermissionなど、個々の権限を使用しない場合は、jazn-data.xmlファイルにRulesEditorPermissionを設定し、グローバル権限を設定します。

26.2.5 ルール・エディタ・コンポーネントのサポートされているタグに関する必知事項

この項では、ルール・エディタ・コンポーネントでサポートされているタグおよび属性のリストを示します。

表26-1に、サポートされているファセットのリストを示します。

表26-1 ルール・エディタ・コンポーネントのサポートされているファセット

名前 説明 コメント

patternDisplay

特定のユーザー・インタフェースを表示するために使用します。このファセットを使用して、ルールの条件とパターンを(拡張モードで)表示します。これは、ルールのIF部分に相当します。

リリース11.1.1.7に対しては非推奨です。12cで削除されます。

actionDisplay

特定のユーザー・インタフェースを表示するために使用します。このファセットを使用して、ルール・アクションを表示します。これは、ルールのTHEN部分に相当します。

リリース11.1.1.7に対しては非推奨です。12cで削除されます。


表26-2に、サポートされている属性のリストを示します。

表26-2 ルール・エディタ・コンポーネントのサポートされている属性

名前 タイプ 必須 デフォルト値 ELのサポート 説明

dateStyle

java.lang. String

いいえ

ロケールから取得

はい

指定すると、その日付スタイルがすべてのinputDateコンポーネントで使用されます(例: yyyy.MM.dd)。

decimalSeparator

java.lang. Character

いいえ

ロケールに基づく

はい

小数セパレータを指定します。これは数値書式に使用されます。指定した場合、この属性はロケールに基づく小数セパレータをオーバーライドします。

disableRuleSetName

java.lang. Boolean

いいえ

false

はい

trueの場合、編集可能なルールセット名が無効になります。この属性は、displayRuleSetNametrueに設定されている場合のみ使用されます。

discloseRules

java.lang. Boolean

いいえ

false

はい

trueの場合は、ルールセット内のすべてのルールが展開されます。falseの場合は、すべてのルールが縮小されます。リリース11.1.1.7に対しては非推奨です。12cで削除されます。ifThenPreferences属性を使用し、isDiscloseRules()をオーバーライドします。

displayRuleSetEffDate

java.lang. Boolean

いいえ

true

はい

trueの場合、ルール・エディタ・コンポーネントには、ルールセットの有効日を表示するためのユーザー・インタフェースが表示されます。

displayRuleSetName

java.lang. Boolean

いいえ

true

はい

編集可能なルールセット名がデフォルトで表示されます。これをfalseに設定することで、非表示にできます。

dtAddActionMenuDDC

java.lang.String

いいえ


はい

genericDTAddActionMenuがtrueの場合にのみ使用されます。デシジョン表ツールバーで追加メニュー項目を指定するコンテキスト・パスなどのDDC (動的宣言コンポーネント)を渡します。たとえば、/userulesdc/decisiontable/dtAddActionMenu.jsffです。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dtPreferences属性を使用し、getDtAddActionMenuDDC()をオーバーライドします。

dtActionNameCustomizer

oracle.bpel.rulesdc
.model.interfaces.A
ctionNameCustomizer

いいえ


はい

デシジョン表ヘッダーでアクション名およびアクション・パラメータ名を指定するために使用されます。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dtPreferences属性を使用し、getDtActionNameCustomizer()をオーバーライドします。

dtActionParamCellDDC

java.lang.String

いいえ


はい

genericDTActionParamがtrueの場合にのみ使用されます。コンシューマは、デシジョン表のアクション・パラメータ・セルに表示されるUIを指定するコンテキスト・パスなどDDC (動的宣言コンポーネント)を渡す必要があります。たとえば、/userulesdc/decisiontable/actionParamCell.jsffです。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dtPreferences属性を使用し、getDtActionParamCellDDC()をオーバーライドします。

dtEditActionDDC

java.lang.String

いいえ


はい

genericDTEditActionがtrueの場合にのみ使用されます。コンシューマは、デシジョン表でアクション行を編集するときに表示されるアクション・エディタ・ブラウザに表示されるアクションUIを指定するコンテキスト・パスなどDDC (動的宣言コンポーネント)を渡す必要があります。たとえば、/userulesdc/decisiontable/actionEditor.jsffです。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dtPreferences属性を使用し、getDtEditActionDDC()をオーバーライドします。

dtColumnPageSize

java.lang. Integer

いいえ

5

はい

デシジョン表に一度に表示する列数を指定します。この属性は、ルールがコラムの場合のみ機能します。リリース11.1.1.7に対しては非推奨です。12cで削除されます。

dtHeight

java.lang. Integer

いいえ

16

はい

デシジョン表に一度に表示する行数。行数が指定の高さを超える場合は、スクロール・バーが表示されます。リリース11.1.1.7に対しては非推奨です。12cで削除されます。

dtPreferences

oracle.bpel.rulesdc
.model.decisiontabl
e.interfaces.Decisi
onTablePrefs

いいえ

oracle.bpel
.rulesdc.mo
del.decisio
ntable.impl
.DecisionTa
blePrefsImp
l

はい

デシジョン表プリファレンスを指定するために使用されます。コンシューマは、次のデフォルトの実装を拡張し、必要なプリファレンスのみをオーバーライドできます。

oracle.bpel.rulesdc
.model.decisiontabl
e.impl.DecisionTabl
ePrefsImpl

genericAction

java.lang. Boolean

いいえ

true

はい

trueの場合、ルール・エディタ・コンポーネントには、THEN部分(アクション)を表示するためのユーザー・インタフェースが表示されます。falseの場合、actionDisplayファセットはルール・エディタ・コンポーネントに渡す必要があります。ファセットにはユーザー定義のユーザー・インタフェースを含める必要があります。ファセットには、ActionModelへのアクセス権があります。リリース11.1.1.7に対しては非推奨です。12cで削除されます。ifThenPreferences属性を使用し、isGenericAction()をオーバーライドします。

genericDTAddActionMenu

java.lang.Boolean

いいえ

true

はい

trueの場合、デシジョン表ツールバーに、汎用のアクションの追加メニューが表示されます。falseの場合、dtAddActionMenuDDC属性を使用してアクションの追加メニューを指定します。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dtPreferences属性を使用し、isGenericDTAddActionMenu()をオーバーライドします。

genericDTActionParam

java.lang.Boolean

いいえ

true

はい

trueの場合、デシジョン表のアクション・パラメータ・セルに汎用UIが表示されます。falseの場合、dtActionParamCellDDC属性を使用してアクション・パラメータ・セルUIを指定します。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dtPreferences属性を使用し、isGenericDTActionParam()をオーバーライドします。

genericDTEditAction

java.lang.Boolean

いいえ

true

はい

trueの場合、デシジョン表でアクション行を編集するときに表示されるアクション・エディタ・ブラウザに汎用アクションUIが表示されます。falseの場合、dtEditActionDDC属性を使用して編集アクションUIを指定します。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dtPreferences属性を使用し、isGenericDTEditAction()をオーバーライドします。

genericPattern

java.lang. Boolean

いいえ

true

はい

trueの場合、ルール・エディタ・コンポーネントには、条件とパターンのIF部分を(拡張モードで)表示するためのユーザー・インタフェースが表示されます。falseの場合、patternDisplayファセットはルール・エディタ・コンポーネントに渡す必要があります。ファセットにはユーザー定義のユーザー・インタフェースを含める必要があります。ファセットには、RuleModelおよびSimpleTestModelへのアクセス権があります。

groupingSeparator

java.lang. Character

いいえ

ロケールに基づく

はい

グループ化セパレータを指定します。これは数値書式に使用されます。指定した場合、この属性はロケールに基づくグループ化セパレータをオーバーライドします。

ifThenPreferences

oracle.bpel.rulesdc
.model.interfaces.I
fThenPreferences

いいえ

oracle.bpel
.rulesdc.mo
del.impl.If
ThenPrefere
ncesImpl

はい

IF/THEN UIプリファレンスを指定するために使用されます。コンシューマは、次のデフォルトの実装を拡張し、必要なプリファレンスのみをオーバーライドできます。

oracle.bpel.rulesdc
.model.impl.IfThenP
referencesImpl

locale

java.util. Locale

いいえ

Locale.getDefault()

はい

ローカライズに使用します。

resourceManager

oracle.bpel.rulessh
areddc.model.interf
aces.ResourceManage
rInterface

いいえ


はい

翻訳UIのリソース・マネージャを指定するために使用されます。詳細は、第26.6項「翻訳の使用」を参照してください。

ruleModel

java.lang. String

いいえ

oracle.
bpel.rulesd
c.model.
impl.
RuleModel

はい

デフォルトのRuleModelのカスタマイズに使用します。RuleModelクラスを拡張して、特定のメソッドをオーバーライドできます。リリース11.1.1.7に対しては非推奨です。12cで削除されます。ifThenPreferences属性を使用し、getRuleModel()をオーバーライドします。

rulesetModel

oracle.bpel.
rulesdc.model.
interfaces.
RuleSetInterface

はい

-

ELのみ

Rules SDKルールセット・オブジェクトを囲むラッパー。ルール・エディタ・コンポーネントJARファイル(adflibRulesDC.jar)の一部として提供されるRuleSetModelオブジェクトを使用できます。

rulesPageSize

java.lang. Integer

いいえ

5

はい

ページに表示するルール数を指定します。IF/THENルールのページ区切りに使用します。リリース11.1.1.7に対しては非推奨です。12cで削除されます。ifThenPreferences属性を使用し、getRulesPageSize()をオーバーライドします。

showDTButtons

java.lang. Boolean

いいえ

true

はい

デシジョン表の追加リンクおよび削除リンクがデフォルトで表示されます。これをfalseに設定することで、非表示にできます。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dtPreferences属性を使用し、isShowDTButtons()をオーバーライドします。

showValidationPanel

java.lang. Boolean

いいえ

true

はい

検証パネルがデフォルトで表示されます。これをfalseに設定することで、非表示にできます。

simpleTestModel

java.lang. String

いいえ

oracle.
bpel.rulesd
c.model.
impl.
SimpleTestM
odel

はい

デフォルトのSimpleTestModelのカスタマイズに使用します。SimpleTestModelクラスを拡張して、特定のメソッドをオーバーライドできます。リリース11.1.1.7に対しては非推奨です。12cで削除されます。ifThenPreferences属性を使用し、getSimpleTestModel()をオーバーライドします。

timeStyle

java.lang. String

いいえ

ロケールから取得

はい

指定すると、その時刻スタイルがすべてのinputDateコンポーネントで使用されます(例: HH:mm:ss)。

timezone

java.util. TimeZone

いいえ

TimeZone.
getDefault
()

はい

ローカライズに使用します。

viewOnly

java.lang. Boolean

いいえ

true

はい

trueの場合は、viewOnlyモードで、ルールセット内の既存のルールを表示できます。falseの場合は、編集モードで、ルールを新規に追加したり、既存のルールを編集できます。

vldnPanelCollapsed

java.lang.Boolean

いいえ

false

はい

検証パネルがデフォルトで縮小されているかどうかを指定するために使用されます。

vldnTabTitle

java.lang.String

いいえ


はい

検証パネルのタイトルを指定するために使用されます。


26.3 Oracle Business Rulesディクショナリ・エディタの宣言コンポーネントの使用

この項では、Oracle Business Rulesディクショナリ・エディタの宣言コンポーネントについて説明します。ルール・ディクショナリ・エディタ・コンポーネントを使用してアプリケーションを作成および実行し、アプリケーションをデプロイする方法についても説明します。また、この項では、サポートされているタグや、アプリケーションのローカライズ・プロセスのリストも示します。

26.3.1 Oracle Business Rulesディクショナリ・コンポーネントの概要

Oracle Business Rulesディクショナリ・エディタは、ADFベースのWebアプリケーションに埋め込むことができるコンポジット宣言コンポーネントです。Rules SDK2 APIを使用することで、グローバル、バケットセット、ルールセットなどのビジネス・ルール・メタデータ・アーティファクトを編集できます。


注意:

ルール・ディクショナリ・エディタをルール・エディタと混同しないでください。ルール・エディタでは、指定したルールセット内のルールを編集します。実際には、ルール・エディタはルール・ディクショナリ・エディタに埋め込まれています。ルール・エディタの詳細は、第26.2項「Oracle Business Rulesエディタの宣言コンポーネントの使用」を参照してください。


ルール・ディクショナリ・エディタのタスク・フローでは、ルール・ディクショナリ・エディタ・コンポーネントを使用してアプリケーションを作成します。通常は、ルール・ディクショナリ・エディタ・コンポーネントまたはルール・ディクショナリ・エディタのタスク・フローのいずれかを使用します(両方は使用しません)。ルール・ディクショナリ・エディタのタスク・フローの詳細は、第26.4項「Oracle Business Rulesディクショナリ・エディタのタスク・フローの使用」を参照してください。

ルール・ディクショナリ・エディタ・コンポーネントは、次の機能を実行します。

  • グローバル・エディタを使用して、final属性がtrueに設定されているグローバルまたは変数を編集します(図26-29を参照)。

    図26-29 グローバル・エディタ

    図26-29の説明が続きます
    「図26-29 グローバル・エディタ」の説明

    グローバル・エディタで、名前、説明、値を作成、削除、編集し、バケットセットを変更し、タイプを変更し、グローバル・ファイナルを作成できます。グローバルの検証がサポートされています。

  • バケットセット・エディタを使用して、バケットセットを編集します(図26-30を参照)。

    図26-30 バケットセット・エディタ

    図26-30の説明が続きます
    「図26-30 バケットセット・エディタ」の説明

    バケットセット・エディタでは、バケットセットおよびバケットセット内のバケットのCRUD(作成、読取り、更新および削除)操作を実行できます。バケットセットの検証もサポートされています。

  • ルールセットを編集します(図26-31を参照)。

    図26-31 ルールセットの編集

    図26-31の説明が続きます
    「図26-31 ルールセットの編集」の説明

    ルール・ディクショナリ・エディタで編集できるのは、選択したルールセット内のルールのみです。ルールセットを作成または削除することはできません。

26.3.2 ルール・ディクショナリ・エディタ・コンポーネントを使用したサンプル・アプリケーションの作成および実行方法

この項では、ルール・ディクショナリ・エディタ・コンポーネントを使用してサンプル・アプリケーションを作成および実行するための手順を示します。

ルール・ディクショナリ・エディタ・コンポーネントを使用してADFベースのWebアプリケーションを作成するための前提条件は、使用しているコンピュータでOracle SOA SuiteとOracle JDeveloperのインストールが実行されていることです。

ルール・ディクショナリ・エディタを使用してサンプル・アプリケーションを作成する手順は、次のとおりです。

最初のタスクはサンプル・アプリケーションの作成です。

次の手順に従います。

  1. Oracle JDeveloperを開きます。

  2. 「ファイル」メニューから、「新規」「汎用アプリケーション」の順に選択し、アプリケーションを作成します。

  3. 図26-32に示すように、「アプリケーション名」フィールドにアプリケーションの名前(useRuleDictDCAppなど)を入力し、「次へ」をクリックします。

    図26-32 汎用アプリケーションの作成

    汎用アプリケーションの作成
    「図26-32 汎用アプリケーションの作成」の説明

  4. 図26-33に示すように、「プロジェクト名」フィールドにuseRuleDictDCと入力し、「プロジェクト・テクノロジ」タブで「ADF Faces」が選択されていることを確認します。

    「終了」をクリックしてプロジェクトを作成します。

    図26-33 プロジェクトの作成

    プロジェクトの作成
    「図26-33 プロジェクトの作成」の説明

  5. Oracle JDeveloperの「アプリケーション・ナビゲータ」で「useRuleDictDC」プロジェクトを右クリックし、「プロジェクト・プロパティ」を選択して「プロジェクト・プロパティ」ダイアログ・ボックスを表示します。

    「プロジェクト・プロパティ」ダイアログ・ボックスでは、次の手順に従います。

    1. 左側のパネルの「JSPタグ・ライブラリ」をクリックします。

    2. 「追加」をクリックし、図26-34に示すように、「タグ・ライブラリの選択」ダイアログ・ボックスの「拡張機能」リストから「ADF Faces Components」を選択し、「OK」をクリックします。

      図26-34 タブ・ライブラリの選択

      タブ・ライブラリの選択
      「図26-34 タブ・ライブラリの選択」の説明

    3. 左側のパネルから「ライブラリとクラスパス」をクリックし、「ライブラリの追加」ボタンをクリックして「ライブラリの追加」ダイアログ・ボックスを表示します。

    4. 図26-35に示すように、「拡張機能」リストから「Oracle Rules」および「Oracle Rules Dictionary Component」をクリックし、「OK」をクリックします。

      図26-35 Oracle RulesおよびOracle Rules Dictionary Componentの選択

      Oracle RulesおよびOracle Rulesディクショナリ・エディタの選択
      「図26-35 Oracle RulesおよびOracle Rules Dictionary Componentの選択」の説明

      これにより、Rules SDKおよびルール・ディクショナリ・エディタのタグ・ライブラリがプロジェクトに追加されます。

    5. 「OK」をクリックして「プロジェクト・プロパティ」ダイアログ・ボックスを閉じます。

  6. Oracle JDeveloperの「ファイル」メニューから、「すべて保存」を選択してプロジェクトを保存します。

必要なすべてのタグ・ライブラリが追加されたことを確認する必要があります。

  1. Oracle JDeveloperの「アプリケーション・ナビゲータ」で「useRuleDictDC」プロジェクトを右クリックし、「プロジェクト・プロパティ」を選択して「プロジェクト・プロパティ」ダイアログ・ボックスを表示します。

  2. 図26-36に示すように、左側のパネルの「JSPタグ・ライブラリ」をクリックし、すべてのタグ・ライブラリが追加されているかどうかを確認します。

    図26-36 ルール・ディクショナリ・エディタに必要なタグ・ライブラリの確認

    必要なタグ・ライブラリの確認
    「図26-36 ルール・ディクショナリ・エディタに必要なタグ・ライブラリの確認」の説明

RuleDictionaryModelオブジェクトを作成する手順は、次のとおりです。

ルール・ディクショナリ・エディタ・コンポーネントには、oracle.bpel.ruledictionarydc.model.impl.RuleDictionaryModelオブジェクトが必要です。コンポーネントでは、このオブジェクトを使用して、ディクショナリからグローバル、バケットセットおよびルールセットの情報を読み取ります。したがって、次のタスクは、RuleDictionaryModelオブジェクトを作成するSomeBean.javaという名前のマネージドBeanの作成です。

次の手順に従います。

  1. Oracle JDeveloperを開きます。

  2. 「ファイル」メニューから「新規」を選択して、「新規ギャラリ」ダイアログ・ボックスを表示します。

  3. 「新規ギャラリ」ダイアログ・ボックスの「カテゴリ」パネルから、「一般」の下にある「Java」を選択します。

  4. 「項目」「Javaクラス」が選択されていることを確認し、「OK」をクリックして「Javaクラスの作成」ダイアログ・ボックスを表示します。

  5. 図26-37に示すように、Javaクラスの名前(SomeBean.javaなど)を入力して「OK」をクリックし、プロジェクトにJavaクラスを作成します。

    図26-37 Javaクラスの作成

    Javaクラスの作成
    「図26-37 Javaクラスの作成」の説明

  6. SomeBean.javaで、RuleDictionaryModelオブジェクトを返すメソッドを指定します。ここにルール・ファイルの場所を指定する必要があります。SomeBean.javaファイルの例を次に示します。

    package useruledictdc;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Reader;
    
    import java.io.Writer;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import oracle.bpel.ruledictionarydc.model.impl.RuleDictionaryModel;
    
    import oracle.rules.sdk2.dictionary.DictionaryFinder;
    import oracle.rules.sdk2.dictionary.RuleDictionary;
    import oracle.rules.sdk2.exception.SDKException;
    import oracle.rules.sdk2.exception.SDKWarning;
    
    public class SomeBean {
        private RuleDictionaryModel ruleDictModel;
        private static final String RULES_FILE1 =
            "C:\\scratch\\asuraj\\system\\rules\\OrderBookinRules.rules";
    
        public SomeBean() {
            super();
        }
    
        public RuleDictionaryModel getRuleDictModel() {
            if (ruleDictModel != null)
                return ruleDictModel; 
                  //cache ruleDictModel instead of re-creating it each time
    
            ruleDictModel = new RuleDictionaryModel(getRuleDictionary());
            return ruleDictModel;
        }
    
        public RuleDictionary getRuleDictionary() {
    
            Reader reader = null;
            try {
                reader = new FileReader(new File(RULES_FILE1));
            } catch (FileNotFoundException e) {
                //LOG.severe(e);
                System.err.println(e);
            }
            RuleDictionary dict = openRulesDict(reader, null);
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException ioe) {
                }
            }
    
            return dict;
        }
    
        private static RuleDictionary openRulesDict(Reader reader,
                                                    DictionaryFinder finder) {
            RuleDictionary dict = null;
    
            try {
                dict = RuleDictionary.readDictionary(reader, finder);
            } catch (SDKException e) {
                System.err.println(e);
            } catch (FileNotFoundException e) {
                System.err.println(e);
            } catch (IOException e) {
                System.err.println(e);
            } 
            catch (IllegalArgumentException e) {
                System.err.println(e);
            } finally {
    
            }
    
            return dict;
        }
    
        //refer to Rules SDK documentation for saving a dictionary also
        //because this code does not take care of saving linked dictionaries
    
        public static boolean saveDictionary(RuleDictionary dict,
                                             String ruleFileName) {
    
            if (dict == null || ruleFileName == null)
                return false;
    
            if (dict.isTransactionInProgress())
                System.out.println("Transaction in progress, cannot save dictionary");
    
            Writer writer = null;
            try {
                writer = new FileWriter(new File(ruleFileName));
                dict.writeDictionary(writer);
    
            } catch (SDKException e) {
                System.err.println(e);
                return false;
            } catch (FileNotFoundException e) {
                System.err.println(e);
                return false;
            } catch (IOException e) {
                System.err.println(e);
                return false;
            } finally {
                if (writer != null) {
                    try {
                        writer.close();
                    } catch (IOException ioe) {
                        return false;
                    }
                }
            }
            return true;
        }
    
        public static void updateDictionary(RuleDictionary dict) {
            if (dict == null)
                return;
    
            List<SDKWarning> warnings = new ArrayList<SDKWarning>();
            try {
                dict.update(warnings);
                for (SDKWarning warning : warnings)
                    System.out.println("warnings: " +
                                       warning.getLocalizedMessage());
            } catch (SDKException sdkEx) {
                sdkEx.printStackTrace();
            }
        }
    
        //You can call this method from your "Save" button
    
        public void saveDictionary() {
    
            RuleDictionary dict = this.getRuleDictModel().getRuleDictionary();
    
            if (dict != null) {
                if (dict.isModified())
                    updateDictionary(dict);
                if (!dict.isTransactionInProgress())
                    saveDictionary(dict, RULES_FILE1);
            }
        }
             //call validation method on the ruleDictModel to update Validation Panel
    
        public void validate() {
            if (this.ruleDictModel == null)
                return;
    
            this.ruleDictModel.validate();
        }
    }
    
  7. faces-config.xmlファイルを概要モードで開き、「マネージドBean」の下の「+」ボタンをクリックして「マネージドBeanの作成」ダイアログ・ボックスを表示します。

  8. 図26-38に示すように、「Bean名」フィールドにsomeBeanと入力し、「スコープ」リストで「セッション」を選択して、SomeBean.javaを指し示します。

    図26-38 Bean名とスコープの指定

    Bean名とスコープの指定
    「図26-38 Bean名とスコープの指定」の説明

    ADF/JSFフレームワークによって、ユーザー・インタフェースを表示するSomeBean.javaへの複数のコールが実行されます。たとえば、someBean.ruleDictModelは複数回コールされます。しがたって、RuleDictModelオブジェクトは、コールの都度再作成せずに、一度に作成してキャッシュし、返すほうが効率的です。

ルール・ディクショナリ・エディタ・コンポーネント・タグの.jspxファイルを作成する手順は、次のとおりです。

次のタスクは、ルール・ディクショナリ・エディタ・コンポーネント・タグを挿入する.jspxファイルの作成です。

次の手順に従います。

  1. Oracle JDeveloperを開きます。

  2. 「ファイル」メニューから「新規」を選択して、「新規ギャラリ」ダイアログ・ボックスを表示します。

  3. 「新規ギャラリ」ダイアログ・ボックスの「カテゴリ」パネルから、「Web層」の下にある「JSF」を選択します。

  4. 「項目」で「JSFページ」を選択し、「OK」をクリックして「JSFページの作成」ダイアログ・ボックスを表示します。

  5. 図26-39に示すように、「JSFページの作成」ダイアログ・ボックスで、「ファイル名」にuseRuleDictDC.jspxと入力します。

    図26-39 JSFページ名の指定

    JSFページ名の指定
    「図26-39 JSFページ名の指定」の説明

    図26-40に示すように、Oracle JDeveloperの「コンポーネント・パレット」にRuleDictionaryDCが表示されます。

    図26-40 「コンポーネント・パレット」のルール・ディクショナリ・エディタ・ライブラリ

    「コンポーネント・パレット」のルール・ディクショナリ・エディタ・ライブラリ
    「図26-40 「コンポーネント・パレット」のルール・ディクショナリ・エディタ・ライブラリ」の説明

    これは、サンプル・アプリケーションの作成時にRules Dictionary Componentを追加したためです。

  6. RuleDictionaryDCを選択してruleDictionaryDCタグを表示します。RuleDictionaryDCタグは、.jspxファイルにドラッグ・アンド・ドロップできます。.jspxファイルには、次のように、RuleDictionaryDCタグを手動で追加することもできます。

    <?xml version='1.0' encoding='UTF-8'?>
    <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
              xmlns:f="http://java.sun.com/jsf/core"
              xmlns:h="http://java.sun.com/jsf/html"
              xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
              xmlns:rddc="http://xmlns.oracle.com/bpel/rules/dictionaryEditor">
      <jsp:directive.page contentType="text/html;charset=UTF-8"/>
      <f:view>
           <af:document id="d1" title="Sample Rule Dictionary App">
          <af:form id="f1">
            <af:panelStretchLayout id="psl1" inlineStyle="margin:15px;"
                                   partialTriggers="cb2 cb3">
              <f:facet name="center">
                <rddc:ruleDictionaryDC ruleDictModel="#{someBean.ruleDictModel}"
                                       dtColumnPageSize="6" id="rddc1"
                                       viewOnly="false" dateStyle="yyyy-MM-dd"
                                       timeStyle="HH-mm-ss"
                                       discloseRules="true"
                                       showValidationPanel="true"/>
              </f:facet>
              <f:facet name="top">
                <af:panelGroupLayout id="pgl1" layout="horizontal">
                  <af:commandButton text="Save Dict" id="cb2"
                                    action="#{someBean.saveDictionary}"/>
                  <af:spacer width="10" height="10" id="s1"/>
                  <af:commandButton text="Validate" id="cb3"
                                    action="#{someBean.validate}"/>
                </af:panelGroupLayout>
              </f:facet>
            </af:panelStretchLayout>
          </af:form>
        </af:document>
      </f:view>
    </jsp:root>
    

oracle.rulesおよびoracle.soa.rules_dict_dc.webapp共有ライブラリを参照する手順は、次のとおりです。

.jspxファイルを作成した後は、weblogic-application.xmlファイルからoracle.rulesおよびoracle.soa.rules_editor_dc.webapp共有ライブラリを参照する必要があります。

次の手順に従います。

  1. Oracle JDeveloperで、「アプリケーション・リソース」「ディスクリプタ」「META-INF」の順に参照し、weblogic-application.xmlファイルを開きます。

  2. 図26-41に示すように、次の行を追加してoracle.rules共有ライブラリを参照します。

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

    図26-41 oracle.rules共有ライブラリの参照

    oracle.rules共有ライブラリの参照
    「図26-41 oracle.rules共有ライブラリの参照」の説明

  3. Oracle JDeveloperで、次のようにします。

    1. 「ファイル」メニューから「新規」を選択して、「新規ギャラリ」ダイアログ・ボックスを表示します。

    2. 「新規ギャラリ」ダイアログ・ボックスで、「カテゴリ」パネルの「一般」にある「デプロイメント・ディスクリプタ」を選択します。

    3. 「項目」の下の「WebLogicデプロイメント・ディスクリプタ」を選択し、「OK」をクリックして、「WebLogicデプロイメント・ディスクリプタの作成」ダイアログ・ボックスを表示します。

    4. リストから「weblogic.xml」を選択し、「終了」をクリックします。

    5. 図26-42に示すように、Oracle JDeveloperにおいて、weblogic.xml「概要」モードで、左側のパネルから「ライブラリ」を選択し、「ライブラリ名」としてoracle.soa.rules_dict_dc.webappと入力します。

      図26-42 Rules Dictionary Componentライブラリの追加

      ルール・エディタ・コンポーネント・ライブラリの追加
      「図26-42 Rules Dictionary Componentライブラリの追加」の説明

  4. 「すべて保存」をクリックします。

  5. oracle.rules共有ライブラリを埋込みOracle WebLogic Serverにデプロイします。

    1. WLSコンソール(http://host:port/console/login/LoginForm.jsp)を起動します。Oracle JDeveloperで埋込みWeblogic Serverが実行されていることを確認します。

    2. 「デプロイメント」を選択し、「インストール」をクリックして、「アプリケーション・インストール・アシスタント」ページを表示します。

    3. 図26-43に示すように、<JDEV_INSTALL>/jdeveloper/soa/modules/oracle.rules_11.1.1/rules.jarを選択し、「終了」をクリックします。

      図26-43 oracle.rules共有ライブラリのデプロイ

      oracle.rules共有ライブラリのデプロイ
      「図26-43 oracle.rules共有ライブラリのデプロイ」の説明

  6. oracle.soa.rules_dict_dc.webapp共有ライブラリをOracle WebLogic Serverにデプロイします。

    1. WebLogic Consoleで、「デプロイメント」を選択し、「インストール」をクリックして、「アプリケーション・インストール・アシスタント」ページを表示します。

    2. <JDEV_INSTALL>/jdeveloper/soa/modules/oracle.soa.rules_dict_dc.webapp_11.1.1/oracle.soa.rules_dict_dc.webapp.warを選択し、「次へ」をクリックします。

    3. 図26-44に示すように、「このデプロイメントをライブラリとしてインストールする」を選択し、「終了」をクリックします。

      図26-44 oracle.soa.rules_editor_dc.webapp共有ライブラリのデプロイ

      oracle.soa.rules_editor_dc.webapp共有ライブラリのデプロイ
      「図26-44 oracle.soa.rules_editor_dc.webapp共有ライブラリのデプロイ」の説明

      図26-45に示すように、oracle.soa.rules_dict_dc.webappがデプロイメントのリストに追加されます。

      図26-45 デプロイメント・リストに追加されたoracle.soa.rules_dict_dc.webapp

      追加されたoracle.soa.rules_editor_dc.webapp
      「図26-45 デプロイメント・リストに追加されたoracle.soa.rules_dict_dc.webapp」の説明

ルール・ディクショナリ・エディタ・サンプル・アプリケーションを実行する手順は、次のとおりです。

最後のタスクは、サンプル・アプリケーションの実行です。

サンプル・アプリケーションを実行するには、Oracle JDeveloperで、useRuleDictDC.jspxファイルを右クリックして「実行」を選択します。図26-46に示すように、Webブラウザでサンプル・アプリケーションが開始します。

図26-46 ルール・ディクショナリ・エディタ・サンプル・アプリケーションの実行

ルール・ディクショナリ・エディタ・サンプル・アプリケーションの実行
「図26-46 ルール・ディクショナリ・エディタ・サンプル・アプリケーションの実行」の説明

26.3.3 スタンドアロンOracle WebLogic Serverへのルール・ディクショナリ・アプリケーションのデプロイ方法

アプリケーションEARファイルをスタンドアロンOracle WebLogic Serverにデプロイする準備が整った場合は、次の手順を実行します。

  1. Oracle WebLogic Server管理コンソール(http://host:port/console/login/LoginForm.jsp)を起動し、oracle.rulesがデプロイメント・リストに表示されていることを確認します。

  2. デプロイメント・リストにoracle.soa.rules_dict_dc.webappが表示されていることを確認します。

  3. 表示されていない場合は、「インストール」をクリックしてJDEV_INSTALL/jdeveloper/soa/modules/oracle.soa.rules_dict_dc.webapp_11.1.1/oracle.soa.rules_dict_dc.webapp.warファイルを選択します。

  4. Oracle JDeveloperを開きます。

  5. 「アプリケーション・ナビゲータ」でプロジェクト名を右クリックし、「プロジェクト・プロパティ」を選択します。

  6. 左側のパネルから「ライブラリとクラスパス」を選択し、「ライブラリの追加」をクリックします。

  7. 図26-47に示すように、「ライブラリの追加」ダイアログ・ボックスで、「Oracle Rules Dictionary Component」を選択して「OK」をクリックします。

    図26-47 Oracle Rules Dictionary Componentの追加

    Oracle Rules Dictionary Componentの追加
    「図26-47 Oracle Rules Dictionary Componentの追加」の説明

    この手順では、これらのライブラリを参照できますが、これらのライブラリがデフォルトでデプロイされることはありません。したがって、JARファイルはプロジェクトwarファイルには組み込まれていません。

  8. デプロイする必要があるプロジェクト(EARファイルを作成する場所)で、次の手順を実行します。

    1. 次の行をweblogic-application.xmlに追加します。

      <library-ref>
         <library-name>oracle.rules</library-name>
      </library-ref>
      
    2. 次の行をプロジェクトWARファイルのweblogic.xmlに追加します。

      <library-ref>
         <library-name>oracle.soa.rules_dict_dc.webapp</library-name>
      </library-ref>
      
    3. EARファイルをOracle WebLogic Serverにデプロイします。

26.3.4 ルール・ディクショナリ・エディタ・コンポーネントのサポートされている属性に関する必知事項

この項では、ルール・ディクショナリ・エディタ・コンポーネントでサポートされている属性のリストを示します。

表26-3に、サポートされている属性のリストを示します。

表26-3 ルール・ディクショナリ・エディタのサポートされている属性

名前 タイプ 必須 デフォルト値 ELのサポート 説明

dateStyle

java.lang.String

いいえ

ロケールから取得

はい

指定すると、その日付スタイルがすべてのinputDateコンポーネントで使用されます(例: yyyy.MM.dd)。

decimalSeparator

java.lang. Character

いいえ

ロケールに基づく

はい

小数セパレータを指定します。これは数値書式に使用されます。指定した場合、この属性はロケールに基づく小数セパレータをオーバーライドします。

dfActionListener


いいえ


はい

リリース11.1.1.7で導入されましたが非推奨です。12Cで削除されます。dfEditorPrefsを使用し、getDfActionListener()をオーバーライドします。

dfEditorPrefs

oracle.bpel.ruledict
ionarydc.model.inter
faces.DFEditorPrefer
ences

いいえ

oracle.bpel
.ruledictio
narydc.mode
l.impl.DFEd
itorPrefere
ncesImpl

はい

デシジョン関数エディタのプリファレンスを指定するために使用されます。コンシューマは、次のデフォルトの実装を拡張し、必要なプリファレンスのみをオーバーライドできます。

oracle.bpel.ruledict
ionarydc.model.impl.
DFEditorPreferencesI
mpl

dfListener

oracle.bpel.decision
funceditordc.listene
r.DecisionFuncListen
er

いいえ


はい

リリース11.1.1.7で導入されましたが非推奨です。12Cで削除されます。dfEditorPrefsを使用し、getDfListener()をオーバーライドします。

dfServiceNameCustomizer


いいえ


はい

11.1.1.7で導入されましたが非推奨です。12Cで削除されます。dfEditorPrefsを使用し、getDfServiceNameCustomizer()をオーバーライドします。

disableDFName

java.lang. Boolean

いいえ

false

はい

trueの場合、「デシジョン関数エディタ」ウィンドウの「デシジョン関数名」が無効になります。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dfEditorPrefsを使用し、isDisableDFName()をオーバーライドします。

disableInputOps

java.lang. Boolean

いいえ

false

はい

「デシジョン関数エディタ」ウィンドウの「入力」表における追加、編集および削除操作が無効になります。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dfEditorPrefsを使用し、isDisableInputOps()をオーバーライドします。

disableOutputOps

java.lang. Boolean

いいえ

false

はい

「デシジョン関数エディタ」ウィンドウの「出力」表における追加、編集および削除操作が無効になります。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dfEditorPrefsを使用し、isDisableOutputOps()をオーバーライドします。

disableRuleSetName

java.lang. Boolean

いいえ

false

はい

trueの場合、編集可能なルールセット名が無効になります。この属性は、displayRuleSetNametrueに設定されている場合のみ使用されます。リリース11.1.1.7に対しては非推奨です。12cで削除されます。rulesEditorPrefsを使用し、isDisableRuleSetName()をオーバーライドします。

discloseRules

java.lang. Boolean

いいえ

false

はい

trueの場合は、ルールセット内のすべてのルールが公開または展開されます。falseの場合は、すべてのルールが縮小されます。リリース11.1.1.7に対しては非推奨です。12cで削除されます。rulesEditorPrefsを使用し、getIfThenPreferences().isDiscloseRules()をオーバーライドします。

displayAddDF

java.lang. Boolean

いいえ

true

はい

「デシジョン関数の追加」ボタンが表示されます。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dfEditorPrefsを使用し、isDisableAddDF()をオーバーライドします。

displayDeleteDF

java.lang. Boolean

いいえ

true

はい

「デシジョン関数の削除」ボタンが表示されます。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dfEditorPrefsを使用し、isDisableOutputOps()をオーバーライドします。

displayRuleSetName

java.lang. Boolean

いいえ

true

はい

編集可能なルールセット名がデフォルトで表示されます。falseに設定すると、この名前を非表示にできます。リリース11.1.1.7に対しては非推奨です。12cで削除されます。rulesEditorPrefsを使用し、isDisableDeleteDF()をオーバーライドします。

displayWSCheck

java.lang. Boolean

いいえ

true

はい

trueの場合、「デシジョン関数エディタ」ウィンドウに「ルール・サービスとして呼出し」チェック・ボックスが表示されます。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dfEditorPrefsを使用し、isDisplayWSCheck()をオーバーライドします。

displayWSName

java.lang. Boolean

いいえ

true

はい

trueの場合、「デシジョン関数エディタ」ウィンドウにデシジョン・サービス名が表示されます。サービス名は、「ルール・サービスとして呼出し」が選択されている場合のみ意味があります。リリース11.1.1.7に対しては非推奨です。12cで削除されます。dfEditorPrefsを使用し、isDisplayWSName()をオーバーライドします。

dtColumnPageSize

java.lang. Integer

いいえ

5

はい

デシジョン表に一度に表示する列数。この属性は、ルールがコラムの場合のみ機能します。リリース11.1.1.7に対しては非推奨です。12cで削除されます。

dtHeight

java.lang. Integer

いいえ

16

はい

デシジョン表に一度に表示する行数。行数が指定の高さを超える場合は、スクロール・バーが表示されます。リリース11.1.1.7に対しては非推奨です。12cで削除されます。

groupingSeparator

java.lang. Character

いいえ

ロケールに基づく

はい

グループ化セパレータを指定します。これは数値書式に使用されます。指定した場合、この属性はロケールに基づくグループ化セパレータをオーバーライドします。

locale

java.util.Locale

いいえ

Locale. get Default()

はい

ローカライズに使用します。

resourceManager

oracle.bpel.rulessha
reddc.model.interfac
es.ResourceManagerIn
terface

いいえ


はい

翻訳UIのリソース・マネージャを指定するために使用されます。詳細は、第26.6項「翻訳の使用」を参照してください。

ruleDictModel

oracle.bpel.
ruledictionarydc.
model.interfaces.Rul
eDictionaryInterface

はい

-

ELのみ

Rules SDKディクショナリ・オブジェクトを囲むラッパー。ルール・ディクショナリ・エディタ・コンポーネントJARファイル(adflibRuleDictionaryDC.jar)の一部として提供されるRuleDictionaryModelオブジェクトを使用できます。

rulesEditorPrefs

oracle.bpel.ruledict
ionarydc.model.inter
faces.RulesEditorPre
ferences

いいえ

oracle.bpel
.ruledictio
narydc.mode
l.impl.Rule
sEditorPref
erencesImpl

はい

ルール・エディタのプリファレンスを指定するために使用されます。コンシューマは、次のデフォルトの実装を拡張し、必要なプリファレンスのみをオーバーライドできます。

oracle.bpel.ruledict
ionarydc.model.impl.
RulesEditorPreferenc
esImpl

rulesPageSize

java.lang. Integer

いいえ

5

はい

ページに表示するルール数を指定します。IF/THENルールのページ区切りに使用します。リリース11.1.1.7に対しては非推奨です。12cで削除されます。rulesEditorPrefsを使用し、getIfThenPreferences().getRulesPageSize()をオーバーライドします。

selectedRulesetIdx

java.lang.String

いいえ


はい

デフォルトで選択されるルールセット索引を指定するために使用されます。selectedRulesetIdxを指定する場合、それによってselectedTab属性がオーバーライドされます。

selectedTab

java.lang.String

いいえ

-

はい

指定のタブ名(GLOBALSBUCKETSETSDESC_FUNCSまたはルールセットの名前)に切り替えます。

showDTButtons

java.lang. Boolean

いいえ

true

はい

デシジョン表の「追加」および「削除」ボタンが表示されます。リリース11.1.1.7に対しては非推奨です。12cで削除されます。rulesEditorPrefsを使用し、getDecisionTablePreferences().isShowDTButtons()をオーバーライドします。

showRSButtons

java.lang.Boolean

いいえ

true

はい

「ルールセットの追加」および「ルールセットの削除」ボタンを表示します。リリース11.1.1.7で導入されましたが非推奨です。12Cで削除されます。rulesEditorPrefsを使用し、isShowRSButtons()をオーバーライドします。

showValidationPanel

java.lang. Boolean

いいえ

true

はい

検証パネルがデフォルトで表示されます。falseに設定すると、このパネルを非表示にできます。

timeStyle

java.lang.String

いいえ

ロケールから取得

はい

指定すると、その時間スタイルがすべてのinputDateコンポーネントで使用されます(例: HH:mm:ss)。

timezone

java.util. TimeZone

いいえ

TimeZone. getDefault()

はい

ローカライズに使用します。

viewOnly

java.lang. Boolean

いいえ

true

はい

trueの場合は、表示専用モードで、既存のディクショナリ・データを表示できますが、データは編集できません。falseの場合は、編集モードで、既存のディクショナリ・データを編集できます。

vldnPanelCollapsed

java.lang.Boolean

いいえ

false

はい

検証パネルがデフォルトで縮小されているかどうかを指定するために使用されます。

vldnTabTitle

java.lang.String

いいえ

ローカライズ済テキスト

「ビジネス・ルール検証 - ログ」

はい

検証パネルのタイトルを指定するために使用されます。


26.4 Oracle Business Rulesディクショナリ・エディタのタスク・フローの使用

この項では、Oracle Business Rulesディクショナリ・エディタのタスク・フローについて説明します。ルール・ディクショナリ・エディタのタスク・フローを使用してアプリケーションを作成および実行し、アプリケーションをデプロイする方法についても説明します。

26.4.1 Oracle Business Rulesディクショナリ・タスク・フローの概要

Oracleルール・ディクショナリ・エディタのタスク・フローは、基本的にはルール・ディクショナリ・エディタの宣言コンポーネントを囲むラッパーです。このタスク・フローは、タスク・フローが必要なADFベースのWebアプリケーションで、宣言コンポーネントのかわりに使用されます。ルール・ディクショナリ・エディタ・コンポーネントの詳細は、第26.3項「Oracle Business Rulesディクショナリ・エディタの宣言コンポーネントの使用」を参照してください。

26.4.2 ルール・ディクショナリ・エディタのタスク・フローを使用したサンプル・アプリケーションの作成および実行方法

この項では、Oracleルール・ディクショナリ・エディタのタスク・フローを使用してサンプル・アプリケーションを作成および実行するための手順を示します。

Oracleルール・ディクショナリ・エディタのタスク・フローを使用してADFベースのWebアプリケーションを作成するための前提条件は、使用しているコンピュータでOracle SOA SuiteとOracle JDeveloperのインストールが実行されていることです。

Oracleルール・ディクショナリ・エディタのタスク・フローを使用してサンプル・アプリケーションを作成する手順は、次のとおりです。

最初のタスクはサンプル・アプリケーションの作成です。

次の手順に従います。

  1. Oracle JDeveloperを開きます。

  2. 「ファイル」メニューから、「新規」「汎用アプリケーション」の順に選択し、アプリケーションを作成します。

  3. 図26-48に示すように、「アプリケーション名」フィールドにアプリケーションの名前(useRuleDictTaskFlowAppなど)を入力し、「次へ」をクリックします。

    図26-48 汎用タスク・フロー・アプリケーションの作成

    汎用タスク・フロー・アプリケーションの作成
    「図26-48 汎用タスク・フロー・アプリケーションの作成」の説明

  4. 図26-49に示すように、「プロジェクト名」フィールドにuseRuleDictTaskFlowと入力し、「プロジェクト・テクノロジ」タブで「ADF Faces」が選択されていることを確認します。

    図26-49 タスク・フロー・プロジェクトの作成

    タスク・フロー・プロジェクトの作成
    「図26-49 タスク・フロー・プロジェクトの作成」の説明

  5. 「終了」をクリックしてプロジェクトを作成します。

  6. Oracle JDeveloperの「アプリケーション・ナビゲータ」で「useRuleDictTaskFlow」プロジェクトを右クリックし、「プロジェクト・プロパティ」を選択して「プロジェクト・プロパティ」ダイアログ・ボックスを表示します。

    「プロジェクト・プロパティ」ダイアログ・ボックスでは、次の手順に従います。

    1. 左側のパネルから「JSPタグ・ライブラリ」を選択します。

    2. 「追加」をクリックし、図26-50に示すように、「タグ・ライブラリの選択」ダイアログ・ボックスの「拡張機能」リストから「ADF Faces Components」を選択し、「OK」をクリックします。

      図26-50 タスク・フロー・アプリケーションのタブ・ライブラリの選択

      タスク・フロー・アプリケーションのタブ・ライブラリの選択
      「図26-50 タスク・フロー・アプリケーションのタブ・ライブラリの選択」の説明

    3. 左側のパネルから「ライブラリとクラスパス」を選択し、「ライブラリの追加」をクリックして「ライブラリの追加」ダイアログ・ボックスを表示します。

    4. 図26-51に示すように、「ライブラリ」リストでOracle RulesおよびOracle Rules Dictionaryタスク・フローを選択し、「OK」をクリックします。これにより、Rules SDKおよびルール・ディクショナリ・タスク・フローのJARがプロジェクトに追加されます。

      図26-51 Rules SDKおよびルール・ディクショナリ・タスク・フローの追加

      タスク・フロー・プロジェクトへのRules SDKの追加
      「図26-51 Rules SDKおよびルール・ディクショナリ・タスク・フローの追加」の説明

    5. 「OK」をクリックして「プロジェクト・プロパティ」ダイアログ・ボックスを閉じます。

  7. Oracle JDeveloperの「ファイル」メニューから「すべて保存」をクリックし、プロジェクトを保存します。

  8. soaComposerTemplates.jarに定義されているoracle.integration.console.metadata.model.share.MetadataDetailsインタフェースを実装するJavaクラスを作成しますMetadataDetailsインタフェースの詳細は、I.1項「MetadataDetailsインタフェース」を参照してください。

    次の手順に従います。

    1. Oracle JDeveloperを開きます。

    2. 「ファイル」メニューから「新規」を選択して、「新規ギャラリ」ダイアログ・ボックスを表示します。

    3. 「新規ギャラリ」ダイアログ・ボックスの「カテゴリ」パネルから、「一般」の下にある「Java」を選択します。「項目」「Javaクラス」が選択されていることを確認し、「OK」をクリックして「Javaクラスの作成」ダイアログ・ボックスを表示します。

    4. Javaクラスの名前(MyMetaDataDetailsなど)を入力します。

    5. 図26-52に示すように、「オプション属性」の下の「実装」ボックスにMetadataDetailsインタフェースを追加し、「OK」をクリックして、プロジェクトにJavaクラスを作成します。

      図26-52 MetadataDetailsインタフェースを実装するJavaクラスの作成

      MetadataDetailsの実装
      「図26-52 MetadataDetailsインタフェースを実装するJavaクラスの作成」の説明

      MyMetaDataDetails.javaファイルのサンプル・コンテンツを次に示します。

      package useruledicttaskflow;
      
      import java.io.BufferedReader;
      import java.io.FileNotFoundException;
      import java.io.FileOutputStream;
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.InputStreamReader;
      import java.io.OutputStreamWriter;
      import java.io.UnsupportedEncodingException;
      import java.io.Writer;
      
      import java.net.MalformedURLException;
      import java.net.URL;
      
      import oracle.integration.console.metadata.model.share.MetadataDetails;
      import oracle.integration.console.metadata.model.share.RelatedMetadataPath;
      
      public class MyMetaDataDetails implements MetadataDetails {
          public MyMetaDataDetails() {
              super();
          }
      
          private static final String RULES_FILE1 =
              "file:///<path of Rules file>";
      
          public String getDocument() {
              URL url = null;
              try {
                  url = new URL(RULES_FILE1);
                  return readFile(url);
              } catch (IOException e) {
                  System.err.println(e);
              }
              return "";
          }
      
          public void setDocument(String string) {
              URL url = null;
      
              try {
                  url = new URL(RULES_FILE1);
              } catch (MalformedURLException e) {
                  System.err.println(e);
                  return;
              }
              Writer writer = null;
              try {
                  //os = new FileWriter(url.getPath());
                  writer =
                     new OutputStreamWriter(new FileOutputStream(url.getPath()),
                    "UTF-8");
             } catch (FileNotFoundException e) {
                  System.err.println(e);
                  return;
              } catch (IOException e) {
                  System.err.println(e);
                  return;
              }
              try {
                  writer.write(string);
              } catch (IOException e) {
                  System.err.println(e);
              } finally {
                  if (writer != null) {
                      try {
                          writer.close();
                      } catch (IOException ioe) {
                          System.err.println(ioe);
                      }
                  }
              }
          }
      
          private String readFile(URL dictURL) {
              InputStream is;
              try {
                  is = dictURL.openStream();
              } catch (IOException e) {
                  System.err.println(e);
                  return "";
              }
              BufferedReader reader;
              try {
                 reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
              } catch (UnsupportedEncodingException e) {
                  System.err.println(e);
                  return "";
              }
              String line = null;
              StringBuilder stringBuilder = new StringBuilder();
              String ls = System.getProperty("line.separator");
              try {
                  while ((line = reader.readLine()) != null) {
                      stringBuilder.append(line);
                      stringBuilder.append(ls);
                  }
              } catch (IOException e) {
                  System.err.println(e);
                  return "";
              } finally {
                  try {
                      reader.close();
                  } catch (IOException e) {
                      System.err.println(e);
                  }
              }
              return stringBuilder.toString();
          }
      
      public String getRelatedDocument(RelatedMetadataPath relatedMetadataPath) {
              String currPath =
                  RULES_FILE1.substring(0, RULES_FILE1.indexOf("oracle/rules"));
              String relatedDoc =
                  currPath + "oracle/rules/" + relatedMetadataPath.getValue();
      
              URL url = null;
              try {
                  url = new URL(relatedDoc);
                  return readFile(url);
              } catch (IOException e) {
                  System.err.println(e);
              }
              return "";
          }
      }
      
  9. oracle.integration.console.metadata.model.share.NLSPreferencesインタフェースを実装するMyNLSPreferencesと呼ばれるJavaクラスを作成します。このインタフェースはsoaComposerTemplates.jarに定義されています。

    NLSPreferencesインタフェースの詳細は、I.2項「NLSPreferencesインタフェース」を参照してください。

    次のMyNLSPreferences.javaのサンプルでは、NLSPreferencesインタフェースを実装します。

    package useruledicttaskflow;
    
    import java.util.Locale;
    import java.util.TimeZone;
    
    import oracle.integration.console.metadata.model.share.NLSPreferences;
    
    public class MyNLSPreferences implements NLSPreferences {
        private static final String DATE_STYLE = "yyyy-MM-dd";
        private static final String TIME_STYLE = "HH-mm-ss";
        
        public MyNLSPreferences() {
            super();
        }
    
        public Locale getLocale() {
            return Locale.getDefault();
        }
    
        public TimeZone getTimeZone() {
            return TimeZone.getTimeZone("America/Los_Angeles");
        }
    
        public String getDateFormat() {
            return DATE_STYLE;
        }
    
        public String getTimeFormat() {
            return TIME_STYLE;
        }
    }
    
  10. MetadataDetailsおよびNLSPreferencesの実装を返すMyBean.javaというマネージドBeanを作成します。また、oracle.integration.console.metadata.model.share.MetadataDetailsModeオブジェクトを返し、toggleMode()saveDictionary()saveNoValidateDictionary()validate()などのイベント・ハンドラも提供します。

    次に、MyBean.javaファイルのサンプルを示します。

    package useruledicttaskflow;
    
    import javax.el.ELContext;
    import javax.el.ExpressionFactory;
    import javax.el.MethodExpression;
    
    import javax.faces.context.FacesContext;
    import javax.faces.event.PhaseId;
    
    import oracle.adf.view.rich.component.rich.fragment.RichRegion;
    
    import oracle.integration.console.metadata.model.share.MetadataDetails;
    import oracle.integration.console.metadata.model.share.MetadataDetailsMode;
    import oracle.integration.console.metadata.model.share.NLSPreferences;
    
    public class MyBean {
        private MyMetaDataDetails details = null;
        private MetadataDetailsMode mode = MetadataDetailsMode.VIEW;
        private RichRegion regionComp;
        private NLSPreferences nlsPrefs;
    
        public MyBean() {
            super();
        }
    
        public MetadataDetails getMetaDataDetails() {
            if (details != null)
                return details;
    
            details = new MyMetaDataDetails();
            return details;
        }
    
        public MetadataDetailsMode getDetailsMode() {
            return mode;
        }
    
        public void toggleMode() {
            if (mode.equals(MetadataDetailsMode.EDIT))
                mode = MetadataDetailsMode.VIEW;
            else
                mode = MetadataDetailsMode.EDIT;
        }
    
        public void saveDictionary() {
            if (regionComp == null)
                return;
            FacesContext fc = FacesContext.getCurrentInstance();
            ExpressionFactory ef = fc.getApplication().getExpressionFactory();
            ELContext elc = fc.getELContext();
            MethodExpression me =
                ef.createMethodExpression(elc, "doMetadataUpdate", String.class,
                                          new Class[] { });
            regionComp.queueActionEventInRegion(me, null, null, false, -1, -1,
                                                PhaseId.ANY_PHASE);
        }
    
        public void saveNoValidateDictionary() {
            if (regionComp == null)
                return;
            FacesContext fc = FacesContext.getCurrentInstance();
            ExpressionFactory ef = fc.getApplication().getExpressionFactory();
            ELContext elc = fc.getELContext();
            MethodExpression me =
                ef.createMethodExpression(elc, "doNoValidateMetadataUpdate",
                                          String.class, new Class[] { });
            regionComp.queueActionEventInRegion(me, null, null, false, -1, -1,
                                                PhaseId.ANY_PHASE);
        }
    
        public void validate() {
            if (regionComp == null)
                return;
            FacesContext fc = FacesContext.getCurrentInstance();
            ExpressionFactory ef = fc.getApplication().getExpressionFactory();
            ELContext elc = fc.getELContext();
            MethodExpression me =
                ef.createMethodExpression(elc, "doValidate", String.class,
                                          new Class[] { });
            regionComp.queueActionEventInRegion(me, null, null, false, -1, -1,
                                                PhaseId.ANY_PHASE);
        }
    
        public void setRegionComp(RichRegion regionComp) {
            this.regionComp = regionComp;
        }
        public RichRegion getRegionComp() {
            return regionComp;
        }
    
        public NLSPreferences getNlsPrefs() {
            if (nlsPrefs != null)
                return nlsPrefs;
    
            nlsPrefs = new MyNLSPreferences();
            return nlsPrefs;
        }
    }
    
  11. faces-config.xmlファイルを概要モードで開き、「マネージドBean」の下の「+」ボタンをクリックして「マネージドBeanの作成」ダイアログ・ボックスを表示します。

  12. 図26-53に示すように、「Bean名」フィールドにMyBeanと入力し、「スコープ」リストでsessionを選択して、MyBean.javaを指し示します。

    図26-53 タスク・フロー・アプリケーションでのBean名とスコープの指定

    Bean名とスコープの指定
    「図26-53 タスク・フロー・アプリケーションでのBean名とスコープの指定」の説明

ルール・ディクショナリ・エディタのタスク・フローを.jspxファイルに追加する手順は、次のとおりです。

次のタスクは、ルール・ディクショナリ・エディタ・コンポーネント・タグを挿入する.jspxファイルの作成です。

次の手順に従います。

  1. Oracle JDeveloperを開きます。

  2. 「ファイル」メニューから「新規」を選択して、「新規ギャラリ」ダイアログ・ボックスを表示します。

  3. 「新規ギャラリ」ダイアログ・ボックスの「カテゴリ」パネルから、「Web層」の下にある「JSF」を選択します。

  4. 図26-54に示すように、「項目」「JSFページ」を選択し、「OK」をクリックして「JSFページの作成」ダイアログ・ボックスを表示します。

    図26-54 ルール・ディクショナリ・エディタのタスク・フローを挿入するJSFページ・ファイルの作成

    JSFページ・ファイルの作成
    「図26-54 ルール・ディクショナリ・エディタのタスク・フローを挿入するJSFページ・ファイルの作成」の説明

  5. 図26-55に示すように、「JSFページの作成」ダイアログ・ボックスで、「ファイル名」にuseRuleDictTaskFlow.jspxと入力します。

    図26-55 タスク・フローのJSFページ名の指定

    タスク・フローのJSFページ名の指定
    「図26-55 タスク・フローのJSFページ名の指定」の説明

    図26-56に示すように、Oracle JDeveloperの「コンポーネント・パレット」にadflibRuleDictionaryTaskFlow.jarが表示されます。

    図26-56 「コンポーネント・パレット」のルール・ディクショナリ・タスク・フローJAR

    「コンポーネント・パレット」のルール・ディクショナリ・タスク・フローJAR
    「図26-56 「コンポーネント・パレット」のルール・ディクショナリ・タスク・フローJAR」の説明

    これは、サンプル・アプリケーションの作成時にOracle Rules Dictionaryタスク・フローの共有ライブラリを追加したためです。

  6. adflibRuleDictionaryTaskFlow.jarを選択して、「コンポーネント・パレット」の「リージョン」rule-dict-flow-definitionが使用可能になるようにします。図26-57に示すように、rule-dict-flow-definitionリージョンを.jspxファイルにドラッグ・アンド・ドロップすると、必要なすべてのパラメータを指定できます。

    図26-57 リージョンのドラッグ・アンド・ドロップ

    リージョンのドラッグ・アンド・ドロップ
    「図26-57 リージョンのドラッグ・アンド・ドロップ」の説明

    次に、タスク・フローが追加されたuseRuleDictTaskFlow.jspxファイルのサンプルを示します。

    <f:view>
        <af:document id="d1">
          <af:form id="f1">
            <af:panelStretchLayout id="psl1" inlineStyle="margin:8px;">
              <f:facet name="top">
                <af:menuBar id="mb1">
                  <af:commandMenuItem text="Toggle Mode" id="cmi1"
                                      action="#{MyBean.toggleMode}"
                                      partialSubmit="true"/>
                  <af:commandMenuItem text="Save Dict" id="cmi2"
                                      action="#{MyBean.saveDictionary}"
                                      partialSubmit="true"/>
                  <af:commandMenuItem text="Save Dict No Validate" id="cmi3"
                                      action="#{MyBean.saveNoValidateDictionary}"
                                      partialSubmit="true"/>
                  <af:commandMenuItem text="Validate" id="cmi4"
                                      action="#{MyBean.validate}"
                                      partialSubmit="true"/>
                </af:menuBar>
              </f:facet>
              <f:facet name="center">
                <af:region value="#{bindings.rulesdictflowdefinition1.regionModel}"
                             id="r2" binding="#{MyBean.regionComp}"
                             partialTriggers="::cmi1 ::cmi2 ::cmi3 ::cmi4"/>
              </f:facet>
            </af:panelStretchLayout>
          </af:form>
        </af:document>
      </f:view>
    

    前述のサンプルでは、次のボタンをページに表示するためのコード・スニペットがあります。

    • トグル・モード: Oracle SOAコンポーザの読取り専用モードと編集可能モードを切り替えます。

    • ディクショナリの保存: ディクショナリを(検証付きで、または検証なしで)保存します。

pagedef.xmlファイルを編集する手順は、次のとおりです。

タスク・フローを.jspxファイルに追加した後、useRuleDictTaskFlowPageDef.xmlファイルを編集する必要があります。pagedef.xmlファイルは、ルール・ディクショナリ・タスク・フローを.jspxページにドロップすると作成されます。

次に、pagedef.xmlファイルのサンプルと、ルール・ディクショナリ・タスク・フローに渡す必要があるすべてのパラメータを示します。

<?xml version="1.0" encoding="UTF-8" ?>
<pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel"
                version="11.1.1.55.99" id="useRuleDictTaskFlowPageDef"
                Package="useruledicttaskflow.pageDefs">
 <parameters/>
  <executables>
    <variableIterator id="variables"/>
    <taskFlow id="rulesdictflowdefinition1"
   taskFlowId= "/WEB-INF/rule-dict-flow-definition.xml#rules-dict-flow-definition"
   activation="deferred"
   xmlns="http://xmlns.oracle.com/adf/controller/binding">
 <parameters>
        <parameter id="details" value="#{MyBean.metaDataDetails}"
                   xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
        <parameter id="mode" value="#{MyBean.detailsMode}"
                   xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
        <parameter id="dtHeight" value="10"
                   xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
        <parameter id="selectedTab" value="Ruleset_1"
                   xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
        <parameter id="dtColumnPageSize" value="6"
                   xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
        <parameter id="nlsPrefs" value="#{MyBean.nlsPrefs}"
                   xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
        <parameter id="discloseRules" value="true"
                   xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
      </parameters>
    </taskFlow>
  </executables>
  <bindings/>
</pageDefinition

oracle.rulesおよびoracle.soa.rules_dict_dc.webapp共有ライブラリを参照する手順は、次のとおりです。

次のタスクは、weblogic-application.xmlファイルからoracle.rulesおよびoracle.soa.rules_dict_dc.webapp共有ライブラリを参照することです。

共有ライブラリの参照方法は、第26.3.2項「ルール・ディクショナリ・エディタ・コンポーネントを使用したサンプル・アプリケーションの作成および実行方法」を参照してください。

タスク・フロー・サンプル・アプリケーションを実行する手順は、次のとおりです。

最後のタスクは、埋込みOracle WebLogic Serverでのサンプル・アプリケーションの実行です。

  1. サンプル・アプリケーションを実行するには、Oracle JDeveloperで、useRulesDictTaskFlow.jspxファイルを右クリックします。

  2. 「実行」を選択します。

    図26-58に示すように、Webブラウザでサンプル・アプリケーションが開始します。

    図26-58 ルール・ディクショナリ・エディタのタスク・フロー・サンプル・アプリケーションの実行

    ルール・ディクショナリ・エディタのタスク・フロー・サンプルの実行
    「図26-58 ルール・ディクショナリ・エディタのタスク・フロー・サンプル・アプリケーションの実行」の説明

26.4.3 スタンドアロンOracle WebLogic Serverへのルール・ディクショナリ・エディタのタスク・フロー・アプリケーションのデプロイ方法

アプリケーションEARファイルをスタンドアロンOracle WebLogic Serverにデプロイする準備が整った場合は、次の手順を実行します。

  1. Oracle WebLogic Server管理コンソール(http://host:port/console/login/LoginForm.jsp)を起動します。

  2. デプロイメント・リストにoracle.rulesが表示されていることを確認します。

  3. デプロイメント・リストにoracle.soa.rules_dict_dc.webappが表示されていることを確認します。

  4. 表示されていない場合は、「インストール」をクリックしてJDEV_INSTALL/jdeveloper/soa/modules/oracle.soa.rules_dict_dc.webapp_11.1.1/oracle.soa.rules_dict_dc.webapp.warファイルを選択します。

  5. デプロイする必要があるプロジェクト(EARファイルを作成する場所)で、次の手順を実行します。

    1. 次の行をweblogic-application.xmlに追加します。

      <library-ref>
         <library-name>oracle.rules</library-name>
      </library-ref>
      
    2. 次の行をプロジェクトWARファイルのweblogic.xmlに追加します。

      <library-ref>
         <library-name>oracle.soa.rules_dict_dc.webapp</library-name>
      </library-ref>
      
    3. EARファイルをOracle WebLogic Serverにデプロイします。

26.5 ADFベースのWebアプリケーションのローカライズ

ルール・エディタ・コンポーネント、ルール・ディクショナリ・エディタ・コンポーネントまたはルール・ディクショナリ・エディタのタスク・フローを使用して作成されたアプリケーションは、ローカライズできます。

次の手順に従います。

  1. ルール・エディタ・コンポーネントを使用するプロジェクトのfaces-config.xmlを変更します。faces-config.xmlファイルには、使用可能なリソース・バンドルをサポートするために、次のコードを<application>タグ内に指定する必要があります。

    <locale-config>      <default-locale>en</default-locale>
          <supported-locale>en</supported-locale>
          <supported-locale>ar</supported-locale>
          <supported-locale>cs</supported-locale>
          <supported-locale>da</supported-locale>
          <supported-locale>de</supported-locale>
          <supported-locale>el</supported-locale>
          <supported-locale>es</supported-locale>
          <supported-locale>fi</supported-locale>
          <supported-locale>fr</supported-locale>
          <supported-locale>hu</supported-locale>
          <supported-locale>it</supported-locale>
          <supported-locale>iw</supported-locale>
          <supported-locale>ja</supported-locale>
          <supported-locale>ko</supported-locale>
          <supported-locale>nl</supported-locale>
          <supported-locale>no</supported-locale>
          <supported-locale>pl</supported-locale>
          <supported-locale>pt-BR</supported-locale>
          <supported-locale>pt</supported-locale>
          <supported-locale>ro</supported-locale>
          <supported-locale>ru</supported-locale>
          <supported-locale>sk</supported-locale>
          <supported-locale>sv</supported-locale>
          <supported-locale>th</supported-locale>
          <supported-locale>tr</supported-locale>
          <supported-locale>zh-CN</supported-locale>
          <supported-locale>zh-TW</supported-locale>
    </locale-config>
    
  2. ブラウザ言語をロケールに合わせて変更します。

  3. ブラウザで提供されるロケールをオーバーライドし、特定のロケールでユーザー・インタフェースを表示できます。このためには、ロケールを属性としてコンポーネントに渡し、そのコンポーネントを使用しているアプリケーションのf:viewタグを変更します。

    <f:view locale="#{someBean.locale}">
    

    ここで指定するロケールは、locale属性を使用してコンポーネントに渡した内容と同じである必要があります。

26.6 翻訳の使用

この機能は、ビジネス・ルールWeb UIの別名の翻訳をサポートしています。ロケールに従った別名を設定できます。ビジネス・ルールWeb UIで「変換」タブまたはリソース・エディタ・ポップアップを介して様々なロケール向けに別名の翻訳を編集することもできます。

26.6.1 再利用可能なルールUI ADFタスク・フロー・コンポーネントのコンシューマに対する翻訳の有効化

別名の翻訳をサポートするために、再利用可能なルールUI ADFタスク・フロー・コンポーネントのコンシューマは、ルールUI ADFタスク・フローをコールする際に、追加のパラメータとしてロケール固有のリソース・アーティファクトを提供することが必要になります。ただし、これらの追加のパラメータはオプションであり、コンシューマが拡張翻訳サポートを使用する場合にのみ必要です。

追加パラメータは次のとおりです。

property-name: relatedDetails
property-class: oracle.integration.console.metadata.model.share.IRelatedMetadataDetails

例26-1 ルールWeb UI ADFタスク・フローにrelatedDetailsパラメータを渡すサンプル・コード

<taskFlow id="rulesdictflowdefinition1"
              taskFlowId="/WEB-INF/rule-dict-flow-definition.xml#rules-dict-flow-definition"
              activation="deferred" Refresh="default"
              RefreshCondition="${MyBean.refreshReqd}"
              xmlns="http://xmlns.oracle.com/adf/controller/binding">
 <parameter id="relatedDetails"
                   value="#{MyBean.relatedMetadataDetails}"/>
</taskflow>

コンシューマは、oracle.integration.console.metadata.model.share.IRelatedMetadataDetailsの実装を渡す必要があります。

IRelatedMetadataDetailsの実装には、リポジトリからリソース・バンドルをロードするためのコードおよびユーザーがルール・アプリケーションに対する変更をコミットするときにバンドル・ファイルを保存するためのコードが含まれます。

例26-2 oracle.integration.console.metadata.model.share.IRelatedMetadataDetailsの実装を渡すサンプル・コード

public class MyRelatedMetadataDetails implements IRelatedMetadataDetails {
 
  private static final Locale[] LOCALES = { Locale.US, Locale.FRENCH };
 
  private static final String RESOURCE_PATH =
    "file:///C:/scratch/sumit/system/rules/";
  private static final String RESOURCE_BASE = "SimpleRule";
 
  public MyRelatedMetadataDetails() {
    super();
  }
 
  public String getDocument(IRelatedMetadataPath relatedPath) {
    String resourceSuffix = relatedPath.getValue();
    try {
      return loadResource(resourceSuffix);
    } catch (IOException e) {
      return "";
    }
  }
 
  private static String loadResource(String resourceSuffix) throws IOException {
 
    FileInputStream fis = null;
    FileChannel fc = null;
    try {
      URL url = new URL(RESOURCE_PATH + RESOURCE_BASE + resourceSuffix);
      fis = new FileInputStream(url.getFile());
      fc = fis.getChannel();
      ByteBuffer bb = ByteBuffer.allocate((int)fc.size());
      fc.read(bb);
      bb.rewind();
      return Charset.defaultCharset().decode(bb).toString();
    } finally {
      if (fis != null) {
        fis.close();
      }
      if (fc != null) {
        fc.close();
      }
    }
  }
 
  public void createDocument(IRelatedMetadataPath relatedPath,
                             String document) {
    try {
      storeResource(relatedPath.getValue(), document);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
  public void saveDocument(IRelatedMetadataPath path, String document) {
    try {
      storeResource(path.getValue(), document);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
  private static void storeResource(String resourceSuffix,
                                    String document) throws IOException {
    FileOutputStream fos = null;
    FileChannel fc = null;
    try {
      URL url = new URL(RESOURCE_PATH + RESOURCE_BASE + resourceSuffix);
      fos = new FileOutputStream(url.getFile());
      fc = fos.getChannel();
      ByteBuffer bb = ByteBuffer.allocateDirect(1024);
      bb.clear();
      bb.put(Charset.defaultCharset().encode(document));
      bb.flip();
      while (bb.hasRemaining()) {
        fc.write(bb);
      }
    } finally {
      if (fos != null) {
        fos.close();
      }
      if (fc != null) {
        fc.close();
      }
    }
  }
 
  public IRelatedMetadataPathFinderFactory getFinderFactory() {
    return new RelatedMetadataPathFinderFactory();
  }
 
  public List<IRelatedMetadataPath> getExisting(IRelatedMetadataPathFinder finder) {
 
    List<IRelatedMetadataPath> paths = new ArrayList<IRelatedMetadataPath>();
    for (Locale locale : LOCALES) {
      paths.add(RelatedResourceMetadataPath.buildFromLocale(locale));
    }
    return paths;
  }
 
  public class RelatedMetadataPathFinderFactory implements IRelated`MetadataPathFinderFactory {
 
    public IRelatedMetadataPathFinder getResourceFinder() {
      return new RelatedMetadataPathFinder();
    }
  }
 
  public class RelatedMetadataPathFinder implements IRelatedMetadataPathFinder {
 
    public String getType() {
      return null;
    }
 
    public IRelatedMetadataPath matches(oracle.integration.console.metadata.model.share.MetadataPath srcPath,
                                        oracle.integration.console.metadata.model.share.MetadataPath matchPath) {
      return null;
    }
  }
 
}

コンシューマは、dictionaryName + "Translations_" + locale.toString() + ".xml"規則を使用して、リソース・バンドル・ファイルの名前を構築する必要があります。

26.6.2 ルールWeb UIアプリケーションのコンシューマに対する翻訳の有効化

別名の翻訳をサポートするために、ルールWeb UIアプリケーションのコンシューマは、ルール・ディクショナリDCまたはルールDCに属性を渡す必要があります。この属性は、タイプoracle.bpel.rulesshareddc.model.interface.ResourceManagerInterface.javaのインスタンスを受け入れるresourceManagerです。ただし、これらの追加のパラメータはオプションであり、コンシューマが拡張翻訳サポートを使用する場合にのみ必要です。

例26-3 ルール・ディクショナリDCにresourceManager属性を渡すサンプル・コード

<rddc:ruleDictionaryDC ruleDictModel="#{SomeBean.ruleDictModel1}"
  id="rddc1"
   resourceManager="#{SomeBean.resourceManager}">
  </rddc:ruleDictionaryDC>

ResourceManagerInterfaceの実装は、oracle.bpel.rulesshareddc.model.impl.ResourceManagerとして提供されています。コンシューマは、ResourceManagerのインスタンスを作成し、それを対応するUIコンポーネントに渡すことができます。

例26-4 resourceManagerのインスタンスを作成し、それをUIコンポーネントに渡すサンプル・コード

public ResourceManagerInterface getResourceManager() {
    if (resourceManager == null) {
      resourceManager =
          new ResourceManager(loadResources(), ruleDictionary);
    }
    return resourceManager;
  }
 
  private Map<Locale, String> loadResources() {
 
    Map<Locale, String> resourceMap = new HashMap<Locale, String>();
 
    for (Locale locale : LOCALES) {
      try {
        URL url =
          new URL(RULES_FILE_PATH + "Translations_" + locale.toString() +
                  ".xml");
        String content =
          new Scanner(new File(url.getFile()), "UTF-8").useDelimiter("\\A").next();
        resourceMap.put(locale, content);
      } catch (IOException e) {
        resourceMap.put(locale, "");
        LOG.severe("Failed to load resource:" + e.getMessage());
      }
    }
    if (!resourceMap.keySet().contains(getLocale())) {
      resourceMap.put(getLocale(), "");
    }
    return resourceMap;
  }
 
  private void storeResources(Map<Locale, String> resourceMap) {
    for (Locale locale : resourceMap.keySet()) {
      try {
        URL url =
          new URL(RULES_FILE_PATH + "Translations_" + locale.toString() +
                  ".xml");
        BufferedWriter out = new BufferedWriter(new FileWriter(url.getFile()));
        out.write(resourceMap.get(locale));
        out.close();
      } catch (IOException e) {
        LOG.severe("Failed to store resource:" + e.getMessage());
      }
    }
  }

注意:

コンシューマは、保存されているリソース・バンドルすべてをリポジトリからロードする必要があり、java.util.Map (resourceMap)を構築する必要があります。その場合、リソース・バンドルのjava.util.Localeは、キーととして保持され、リソース・バンドル・ファイルの内容はjava.lang.Stringタイプの値として保持されます。


コンシューマは、dictionaryName + "Translations_" + locale.toString() + ".xml"規則を使用して、リソース・バンドル・ファイルの名前を構築する必要があります。

コンシューマは、アプリケーション内でユーザーが変更をコミットするたびに、これらのリソース・バンドルをリポジトリに保存する必要があります。