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が使用されます。

ノート:

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

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

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

ノート:

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

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

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

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

ルール・エディタを使用してサンプル・アプリケーションを作成するには:

  1. Oracle JDeveloperを開きます。

  2. 「file」メニューから、「新」を選択します。

  3. 図26-7に示すように、「ADF Fusion Webアプリケーション」を選択して、新しいアプリケーションを作成します。

    図26-7 Fusion Webアプリケーションの作成

    図26-7の説明が続きます
    「図26-7 Fusion Webアプリケーションの作成」の説明
  4. 図26-8に示すように、「アプリケーション名」フィールドにアプリケーションの名前(useRulesDCAppなど)を入力し、「次へ」をクリックします。

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

    図26-8の説明が続きます
    「図26-8 汎用アプリケーションの作成」の説明
  5. 他のすべてにはデフォルトを使用します。

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

  7. 「ViewController」プロジェクトを右クリックして、「プロジェクト・プロパティ」を選択します。

  8. 左側のメニューで「ライブラリとクラスパス」を選択します。

    1. 「ライブラリの追加」ボタンをクリックします。

    2. 「拡張機能」リストから「Oracle Rules」および「Oracle Rules Dictionary Component」をクリックし、「OK」をクリックします。これにより、図26-9に示すように、コンポーネント・タグ・ライブラリRules SDKおよびRules ADFがプロジェクトに追加されます。

    3. もう一度「OK」をクリックして、「プロジェクト・プロパティ」を終了します。

    図26-9 ライブラリの追加

    図26-9の説明が続きます
    「図26-9 ライブラリの追加」の説明

    ノート:

    「拡張機能」リストに「Oracle Rules」および「Oracle Rules Dictionary Component」が表示されない場合は、JDeveloper内でSOA/BPMプロジェクトを開いて、必要なライブラリをロードしてください。

  9. 「すべて保存」をクリックして、プロジェクトを保存します。

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

    1. 「ViewController」プロジェクトを右クリックして、「プロジェクト・プロパティ」を選択します。

    2. 左側のメニューで「JSPタグ・ライブラリ」を選択し、すべてのタグ・ライブラリが追加されたかどうかを確認します(図26-10)。

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

    図26-10の説明が続きます
    「図26-10 必要なタグ・ライブラリの確認」の説明
26.2.2.1 RuleSetModelオブジェクトの作成方法

ルール・エディタ・コンポーネントには、oracle.bpel.rulesdc.model.impl.RuleSetModelオブジェクトが必要です。

RuleSetModelオブジェクトを作成するには:

  1. Javaクラス(SomeBean.javaなど)をプロジェクトに作成します。
  2. Oracle JDeveloperを開きます。
  3. 「ファイル」メニューから、「新規」を選択して「Javaクラス」を作成します。
  4. SomeBean.javaで、RuleSetModelオブジェクトを返すメソッドを指定します。ルール・ファイルの場所およびパスを指定する必要があります。SomeBean.javaファイルの例を次に示します。
    package view;import java.io.BufferedReader;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.Serializable;
    
    import java.net.MalformedURLException;
    import java.net.URL;
    
    import oracle.bpel.rulesdc.model.decisiontable.impl.DecisionTablePrefsImpl;
    import oracle.bpel.rulesdc.model.decisiontable.interfaces.DecisionTablePrefs;
    import oracle.bpel.rulesdc.model.impl.IfThenPreferencesImpl;
    import oracle.bpel.rulesdc.model.impl.RuleSetModel;
    import oracle.bpel.rulesdc.model.interfaces.IfThenPreferences;
    import oracle.bpel.rulessharedutils.impl.RulesSharedUtils;
    
    import oracle.rules.sdk2.decisionpoint.DecisionPointDictionaryFinder;
    import oracle.rules.sdk2.dictionary.DictionaryFinder;
    import oracle.rules.sdk2.dictionary.RuleDictionary;
    import oracle.rules.sdk2.exception.SDKException;
    import oracle.rules.sdk2.ruleset.RuleSet;
    import oracle.rules.sdk2.ruleset.RuleSetTable;
    
    public class SomeBean {
        //on windows
        private static final String RULES_FILE1 =
     "file:///D:/scratch/asuraj/system_MAIN/rules_files/ApprovalRules.rules";
        /*
         * on linux
        private static final String RULES_FILE1 =   
     "file:////scratch/asuraj/backup/rules_files/ApprovalRules.rules";
        */
        private RuleSetModel ruleSetModel = null;
        
        private boolean viewOnly = true;
        private DecisionTablePrefs dtPrefs;
    
        private IfThenPreferences ifThenPrefs;
        
        public SomeBean() {
            super();
        }
        
        public RuleSetModel getRuleSetModel() {
            if (ruleSetModel != null)
                return ruleSetModel;
            ruleSetModel = new RuleSetModel(getRuleSet());
            System.out.println("ruleSetModel = " + ruleSetModel); 
            return ruleSetModel;
        }
        
        public RuleSet getRuleSet() {
    
            RuleDictionary dict =
                openRulesDict(RULES_FILE1, new DecisionPointDictionaryFinder());
            if (dict == null)
                return null;
    
            RuleSetTable ruleSetTable = dict.getRuleSetTable();
            if (ruleSetTable == null || ruleSetTable.isEmpty())
                return null;
    
            return ruleSetTable.get(0);
        }
        
        public void saveDictionary() {
    
            RuleDictionary dict = null;
            String rulesFile = null;
    
            if (this.ruleSetModel == null)
                return;
            dict = this.ruleSetModel.getRuleSet().getDictionary();
           
    
            if (dict == null)
                return;
    
            if (dict.isModified())
                RulesSharedUtils.updateDictionary(dict);
            if (!dict.isTransactionInProgress())
                saveDictionary(dict, RULES_FILE1);
        }
        
        public void validate() {
            if (this.ruleSetModel == null)
                return;
    
            this.ruleSetModel.validate();
        }
        
        //utility methods
        
        public static RuleDictionary openRulesDict(String fileName,
     DictionaryFinder finder) {
            URL url = null;
            try {
                url = new URL(fileName);
            } catch (MalformedURLException e) {
                System.err.println(e);
                return null;
            }
            RuleDictionary dict = null;
    
            try {
                dict = readFromDisk(url, finder);
            } catch (Exception e) {
                System.err.println(e);
                return null;
            }
            return dict;
        }
        
        public static RuleDictionary readFromDisk(URL dictURL, DictionaryFinder
     finder) {
            BufferedReader buf = null;
            try {
                buf = new BufferedReader(new
     InputStreamReader(dictURL.openStream(), "UTF-8"));
                return RuleDictionary.readDictionary(buf, finder);
            } catch (SDKException e) {
                System.err.println(e);
            } catch (IOException e) {
                System.err.println(e);
            } finally {
                if (buf != null)
                    try {
                        buf.close();
                    } catch (IOException e) {
                        System.err.println(e);
                    }
            }
    
            return null;
        }
        
        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");
    
            try {
                writeToDisk(dict, new URL(ruleFileName));
            } catch (MalformedURLException e) {
                System.err.println(e);
                return false;
            } catch (Exception e) {
                System.err.println(e);
                return false;
            }
            return true;
        }
    
        public static void writeToDisk(RuleDictionary dic, URL dictURL) {
            OutputStreamWriter writer = null;
            try {
                writer = new OutputStreamWriter(new
     FileOutputStream(dictURL.getPath()), "UTF-8");
                dic.writeDictionary(writer);
            } catch (IOException e) {
                System.err.println(e);
            } catch (SDKException e) {
                System.err.println(e);
            } finally {
                if (writer != null)
                    try {
                        writer.close();
                    } catch (IOException e) {
                        System.err.println(e);
                    }
            }
        }
    
        public void toggleMode() {
            viewOnly = !viewOnly;
        }
    
        public boolean isViewOnly() {
            return viewOnly;
        }
    
        public DecisionTablePrefs getDtPreferences() {
            if (dtPrefs == null)
                dtPrefs = new DTPreferences();
            return dtPrefs;
        }
    
        public IfThenPreferences getIfThenPreferences() {
            if (ifThenPrefs == null)
                ifThenPrefs = new MyIfThenPrefs();
            return ifThenPrefs;
        }
        public class MyIfThenPrefs extends IfThenPreferencesImpl implements
     Serializable {
    
            @Override
            public boolean isGenericAction() {
                return true;
            }
    
            @Override
            public boolean isGenericCondition() {
                return true;
            }
        }
        
        public class DTPreferences extends DecisionTablePrefsImpl implements
     Serializable {
    
            @Override
            public boolean isShowDTButtons() {
                return true;
            }
        }
    }
    
  5. adfc-config.xmlのSomeBean.javaを指します(Bean名はsomeBeanで、スコープはsessionです)。adfc-config.xmlの例を次に示します。
    <?xml version="1.0" encoding="UTF-8" ?>
    <adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2">
      <managed-bean id="__1">
        <managed-bean-name>someBean</managed-bean-name>
        <managed-bean-class>view.SomeBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
      </managed-bean>
    </adfc-config>
    
  6. ADF/JSFフレームワークによって、SomeBean.javaへのコールが複数回実行され、ユーザー・インタフェースがレンダリングされます。たとえば、someBean.ruleSetModelが複数回コールされます。そのため、毎回再作成するのではなく、ruleSetModelを一度作成したら、それをキャッシュして返すことは、より効率的です。
26.2.2.2 .jspxファイルの作成方法

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

ルール・エディタ・コンポーネント・タグを含めるための.jspxファイルの作成には:

  1. Oracle JDeveloperを開きます。
  2. 「ファイル」メニューから、「新規」を選択し、次に「JSF」を選択します。
  3. 「JSFページ」を選択して、「OK」をクリックします。
  4. ドキュメント・タイプに「JSP XML」を選択します。
  5. ファイル名にrulesEditor.jspxを入力します。「OK」をクリックします。
  6. JDeveloperの「コンポーネント」ウィンドウに「RulesEditor」が表示されます。
  7. 「RulesEditor」を選択すると、「Rulesdc」タグが表示されます。
  8. 「rulesdc」タグをJSPXファイルにドラッグ・アンド・ドロップします。次のようにして、「rulesDC」タグを手動でjspxファイルに追加することもできます。
    <?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: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="rulesEditor" id="d1">
                <af:form id="f1">
                    <af:panelGridLayout id="pgl1" inlineStyle="margin:15px;" styleClass="AFStretchWidth"
                                        partialTriggers="cb1 cb3 cb4">
                        <af:gridRow id="gr2">
                            <af:gridCell marginStart="5px" marginEnd="5px" width="100%" halign="stretch" id="gc1">
                                <af:panelGroupLayout id="pgl2" layout="horizontal">
                                    <af:commandButton text="Save Dict" action="#{someBean.saveDictionary}" id="cb1"/>
                                    <af:spacer width="10" height="10" id="s2"/>
                                    <af:commandButton text="Validate" id="cb3" action="#{someBean.validate}"
                                                      partialSubmit="true"/>
                                    <af:spacer width="10" height="10" id="s8"/>
                                    <af:commandButton text="Toggle Mode" id="cb4" action="#{someBean.toggleMode}"
                                                      partialSubmit="true"/>
                                </af:panelGroupLayout>
                            </af:gridCell>
                        </af:gridRow>
                        <af:gridRow height="100%" id="gr1">
                            <af:gridCell marginStart="5px" marginEnd="5px" width="100%" halign="stretch" valign="stretch"
                                         id="gc2">
                                <rdc:rulesdc rulesetModel="#{someBean.ruleSetModel}" id="r1"
                                             ifThenPreferences="#{someBean.ifThenPreferences}"
                                             dtPreferences="#{someBean.dtPreferences}" viewOnly="#{someBean.viewOnly}"
                                             disableVerbalRules="false"></rdc:rulesdc>
                            </af:gridCell>
                        </af:gridRow>
                    </af:panelGridLayout>
                </af:form>
            </af:document>
        </f:view>
    </jsp:root>
    
26.2.2.3 Oracle Rules共有ライブラリの参照方法

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

oracle.rulesおよびoracle.soa.rules_dict_dc.webapp共有ライブラリを参照するには:

  1. Oracle JDeveloperで、「アプリケーション・リソース」から「ディスクリプタ」を開き、次に「META-INF」を開きます。weblogic-application.xmlファイルを編集して、次の行を追加します(これによってoracle.rules共有ライブラリが参照されます)。

    <library-ref>
        <library-name>oracle.rules</library-name>
    </library-ref>
    
  2. Oracle JDeveloperで、次のようにします。

    1. 「ファイル」メニューから、「新規」を選択し、次に「デプロイメント・ディスクリプタ」を選択します。

    2. 「WebLogicデプロイメント・ディスクリプタ」を選択し、リストから「weblogic.xml」を選択します。

    3. 「version 12.1.2」を選択して、「終了」をクリックします。

    4. weblogic.xmlの「概要」モードで、左側から「ライブラリ」を選択し、oracle.soa.rules_dict_dc.webappをライブラリ名として追加します。weblogicogic.xmlファイルの例を次に示します。

      <?xml version = '1.0' encoding = 'UTF-8'?>
      <weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app
      http://xmlns.oracle.com/weblogic/weblogic-web-app/1.5/weblogic-web-app.xsd"
      xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
        <library-ref>
          <library-name>oracle.soa.rules_dict_dc.webapp</library-name>
        </library-ref>
      </weblogic-web-app>
      
    5. 「すべて保存」をクリックします。

      ノート:

      共有ライブラリoracle.rulesおよびoracle.soa.rules_dict_dc.webappは、埋込みWLSサーバーにデプロイされている必要があることに注意してください。

  3. すべての共有ライブラリは、埋込みWLSのweblogicコンソールを使用してデプロイされる必要があります。

    1. WLSコンソール(http://host:port/console/login/LoginForm.jsp)を起動して、ログインします。

    2. 「デプロイメント」をクリックします。

      共有ライブラリoracle.rulesおよびoracle.soa.rules_dict_dc.webappが、図26-11に示すようにデプロイされているかどうかを確認します。

      図26-11 デプロイメント

      図26-11の説明が続きます
      「図26-11 デプロイメント」の説明
  4. これらの共有ライブラリがデプロイされていない場合は、手動でデプロイします。

    WLS埋込みサーバーを起動するには:

    1. JDeveloperを開きます。

    2. 図26-12に示すように、「実行」を選択して、次に「サーバー・インスタンスの起動」を選択します。

      図26-12 埋込みWLSの起動

      図26-12の説明が続きます
      「図26-12 埋込みWLSの起動」の説明

    共有ライブラリがすでにデプロイされている場合は、このステップをスキップします。

    ノート:

    共有ライブラリをデプロイできるように、JDeveloper上でWLS埋込みサーバーが実行中である必要があります。

  5. oracle.rules共有ライブラリをWLSにデプロイするには:

    1. WLSコンソール(http://host:port/console/login/LoginForm.jsp)を起動して、ログインします。

    2. 「デプロイメント」を選択して「インストール」をクリックします。

    3. 「<SOA_INSTALL>/soa/soa/modules/oracle.rules_11.1.1/rules.jar」を選択します。

    4. 「次へ」をクリックし、「終了」をクリックします。

  6. oracle.soa.rules_dict_dc.webapp共有ライブラリをWLSにデプロイするには:

    1. WLSコンソールで、「デプロイメント」を選択し、「インストール」をクリックします。

    2. 「<SOA_INSTALL>/soa/soa/modules/oracle.soa.rules_dict_dc.webapp_11.1.1/oracle.soa.rules_dict_dc.webapp.war」を選択します。

    3. 「次へ」をクリックし、「終了」をクリックします。

    4. 「このデプロイメントをライブラリとしてインストールする」を選択します。

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

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

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

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

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

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

    これにより、図26-13に示すように、サンプル・アプリケーションがブラウザで開始されます。

    図26-13 ルール・エディタの実行

    図26-13の説明が続きます
    「図26-13 ルール・エディタの実行」の説明

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

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

  1. 共有ライブラリが、スタンドアロンWLSのWebLogicコンソールを使用してデプロイされているかどうかを確認します。

    1. WLSコンソール(http://host:port/console/login/LoginForm.jsp)を起動して、ログインします。

    2. 「デプロイメント」をクリックします。共有ライブラリoracle.rulesおよびoracle.soa.rules_dict_dc.webappが、図26-11に示すようにデプロイされているかどうかを確認します。

  2. 共有ライブラリがデプロイされていない場合は、前述のステップを参照して共有ライブラリを手動でデプロイします。

  3. ルール・エディタ・コンポーネントを使用するプロジェクトで、次の手順を実行します。

    1. 「Oracle Rules Dictionary Component」「ライブラリとクラスパス」に含めます。

    これによってこれらのライブラリがデフォルトでデプロイされることはないため、JARはプロジェクトのWARファイルには含まれません。

  4. デプロイするプロジェクト(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>
      
  5. WLSでEARファイルをデプロイします。

EARの作成方法の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』デプロイメントのための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ファイルに次のコードを指定します。

<policy-store>
    <applications>
      <application>
        <name>UseRuleDictDCWtPerm</name>
        <app-roles>
          <app-role>
            <name>Admin</name>
            <class>oracle.security.jps.service.policystore.ApplicationRole</class>
            <display-name>Admin</display-name>
            <members>
              <member>
                <name>admin</name>
                <class>oracle.security.jps.internal.core.principals.JpsXmlUserImpl</class>
              </member>
            </members>
          </app-role>
          <app-role>
            <name>BusinessUser</name>
            <class>oracle.security.jps.service.policystore.ApplicationRole</class>
            <display-name>BusinessUser</display-name>
            <members>
              <member>
                <name>buser</name>
                <class>oracle.security.jps.internal.core.principals.JpsXmlUserImpl</class>
              </member>
            </members>
          </app-role>
        </app-roles>
        <jazn-policy>
          <grant>
            <grantee>
              <principals>
                <principal>
                  <class>oracle.security.jps.service.policystore.ApplicationRole</class>
                  <name>Admin</name>
                </principal>
              </principals>
            </grantee>
            <permissions>
              <permission>
                <class>oracle.rules.adf.permission.RulesEditorPermission</class>
                <name>RulesEditorPermission</name>
                <actions>access</actions>
              </permission>
            </permissions>
          </grant>
        </jazn-policy>
      </application>
    </applications>
  </policy-store>

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

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

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

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

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

名前 タイプ 必要 デフォルト値 ELをサポートしているかどうか 説明

rulesetModel

oracle.bpel.rulesdc
.model.interfaces.R
uleSetInterface

はい

ELのみ

Rules SDKルールセット・オブジェクトのラッパーです。ユーザーは、ルール・エディタ・コンポーネントの一部として提供されているRuleSetModelオブジェクトを使用できます。

ruleModel

java.lang.String

いいえ

oracle.bpel.
rulesdc.mode
l.impl.RuleM
odel

はい

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

simpleTestModel

java.lang.String 

いいえ

oracle.bpel
.rulesdc.mo
del.impl.Si
mpleTestMod
el

はい

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

viewOnly

java.lang.Boolean

いいえ

true

はい

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

genericPattern

java.lang. Boolean

いいえ

true

はい

非推奨であり使用されません。

genericAction

java.lang.Boolean 

いいえ

true

はい

非推奨であり使用されません。

locale

java.util.Locale

いいえ

Locale.getDe
fault()

はい

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

timezone

java.util.TimeZone

いいえ

TimeZone.get
Default()

はい

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

displayRuleSetEffDate

java.lang.Boolean

いいえ

true

はい

非推奨であり使用されません。

discloseRules

java.lang.Boolean

いいえ

false

はい

非推奨であり使用されません。

displayRuleSetName

java.lang.Boolean

いいえ

false

はい

非推奨であり使用されません。

disableRuleSetName

java.lang.Boolean

いいえ

false

はい

非推奨であり使用されません。

dtColumnPageSize

java.lang. Integer

いいえ

5

はい

非推奨であり使用されません。

dtHeight

java.lang. Integer

いいえ

16

はい

非推奨であり使用されません。

dateStyle

java.lang.String

いいえ

ロケールから取得

はい

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

timeStyle

java.lang.String

いいえ

ロケールから取得

はい

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

showValidationPanel

java.lang.Boolean

いいえ

true

はい

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

showDTButtons

java.lang.Boolean

いいえ

true

はい

非推奨であり使用されません。

rulesPageSize

java.lang.Integer

いいえ

5

はい

非推奨であり使用されません。

decimalSeparator

java.lang. Character

いいえ

ロケールに基づく

はい

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

groupingSeparator

java.lang.Character

いいえ

ロケールに基づく

はい

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

disableVerbalRules

java.lang.Boolean

いいえ

true

はい

trueの場合、言語化UIを無効化します。

vldnPanelCollapsed

java.lang.Boolean

いいえ

false

はい

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

vldnTabTitle

java.lang. String

いいえ

-

はい

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

genericDTAddActionMenu

java.lang.Boolean

はい

true

はい

trueの場合、デシジョン表ツールバーに、汎用のアクションの追加メニューが表示されます。falseの場合、コンシューマは、dtAddActionMenuDDC属性を使用してアクションの追加メニューを指定する必要があります。非推奨。dtPreferences属性を使用し、isGenericDTAddActionMenu()をオーバーライドします。

genericDTEditAction

java.lang.Boolean

いいえ

true

はい

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

genericDTActionParam

java.lang.Boolean

いいえ

true

はい

trueの場合、デシジョン表のアクション・パラメータ・セルに汎用UIが表示されます。falseの場合、コンシューマは、dtActionParamCellDDC属性を使用してアクション・パラメータ・セルUIを指定する必要があります。非推奨。dtPreferences属性を使用し、isGenericDTActionParam()をオーバーライドします。

dtAddActionMenuDDC

jjava.lang.String

いいえ

-

はい

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

dtEditActionDDC

java.lang. String

いいえ

-

はい

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

dtActionParamCellDDC

java.lang. String

いいえ

-

はい

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

dtActionNameCustomizer

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

いいえ

-

はい

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

dtPreferences

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

いいえ

oracle.bpel.
rulesdc.mode
l.decisionta
ble.impl.Dec
isionTablePr
efsImpl

はい

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

ifThenPreferences

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

いいえ

oracle.bpel.
rulesdc.mode
l.impl.IfThe
nPreferences
Impl

はい

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

resourceManager

joracle.bpel.ruless
hareddc.model.inter
faces.ResourceManag
erInterface

いいえ

-

はい

翻訳UIのリソース・マネージャを指定するために使用されます。変換に関する項を参照してください。

verbalRuleGotoDSLListener

oracle.bpel.rulessh
areddc.model.interf
aces.VerbalRuleGoto
LinkListener

いいえ

-

はい

動詞ルールで「フレーズに移動」リンクがクリックされると、リスナー・オブジェクトがトリガーされます。

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

Oracle Business Rulesディクショナリ・エディタの宣言コンポーネントの概要を説明します。

ルール・ディクショナリ・エディタ・コンポーネントを使用してアプリケーションを作成および実行し、アプリケーションをデプロイする方法を学習します。また、サポートされているタグや、アプリケーションのローカライズ・プロセスの概要も説明します。

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

ルール・ディクショナリ・エディタ・コンポーネントはADF宣言コンポーネントであり、Rules SDK2 APIを使用して、ルールセット、値セット、グローバル、デシジョン関数などのBusiness Rulesメタデータ・アーティファクトを編集できます。

ルール・ディクショナリ・エディタ・コンポーネントを、主に指定したルールセット内でルールの編集に使用されるルール・エディタ・コンポーネントと混同しないでください。ルール・ディクショナリ・コンポーネントは、グローバル、値セット、ルールセットなどの編集が可能なコンポジット・コンポーネントです。ルール・ディクショナリ・エディタのタスク・フローでは、ルール・ディクショナリ・エディタ・コンポーネントを使用します。

ルール・ディクショナリ・エディタ・コンポーネントには、次の機能があります。

  • ルールセットおよびルールセット内の一般的なルール、動詞ルールおよびデシジョン表でのCRUD (作成/読取り/更新/削除)操作

  • ビジネス・フレーズ(言語化で使用される)でのCRUD (作成/読取り/更新/削除)操作

  • 値セットでのでのCRUD (作成/読取り/更新/削除)操作

  • グローバル/変数でのCRUD (作成/読取り/更新/削除)操作

  • デシジョン関数でのCRUD (作成/読取り/更新/削除)操作

  • RLファクトおよびXMLファクトでのCRUD (作成/読取り/更新/削除)操作、およびその他すべてのファクト・タイプの表示

  • リンクされたディクショナリの表示。

  • ユーザー定義の変換のサポート

  • すべてのディクショナリ・コンポーネントのカット/コピー/ペースト

  • ディクショナリの異なるバージョンの比較およびマージ(diff/mergeのサポート)

  • デシジョン表のExcelへのエクスポート

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

ルール・ディクショナリ・エディタ・コンポーネントでは、次のことが実行できます。

これらの機能およびタブの詳細は、『Oracle Business Process Managementによるビジネス・ルールの設計』を参照してください。

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

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

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

ルール・ディクショナリ・エディタ・コンポーネントを使用してサンプル・アプリケーションを作成するには:

  1. Open JDeveloperを開いて、図26-26に示すように、「ファイル」メニューから、「新規」を選択し、次に「ADF Fusion Webアプリケーション」を選択して新しいアプリケーションを作成します。

    図26-26 Fusion Webアプリケーションの作成

    図26-26の説明が続きます
    「図26-26 Fusion Webアプリケーションの作成」の説明
  2. 図26-27に示すように、「アプリケーション名」フィールドにアプリケーションの名前(たとえば、UseRuleDictDCApp)を入力し、「次へ」をクリックします。

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

    図26-27の説明が続きます
    「図26-27 汎用アプリケーションの作成」の説明
  3. 他のすべてにはデフォルトを使用します。

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

  5. 「ViewController」プロジェクトを右クリックして、「プロジェクト・プロパティ」を選択します。左側のメニューで「ライブラリとクラスパス」を選択します。

    1. 「ライブラリの追加」をクリックします。

    2. 「拡張機能」リストから「Oracle Rules」および「Oracle Rules Dictionary Component」を選択し、「OK」をクリックします。これにより、図26-28に示すように、コンポーネント・タグ・ライブラリRules SDKおよびRules ADFがプロジェクトに追加されます。

      図26-28 ライブラリの追加

      図26-28の説明が続きます
      「図26-28 ライブラリの追加」の説明

      ノート:

      「拡張機能」リストに「Oracle Rules」および「Oracle Rules Dictionary Component」が表示されない場合は、JDeveloper内でSOA/BPMプロジェクトを開いて、必要なライブラリをロードしてください。

    3. もう一度「OK」をクリックして、「プロジェクト・プロパティ」を終了します。

  6. 「すべて保存」をクリックして、プロジェクトを保存します。

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

    1. 「ViewController」プロジェクトを右クリックして、「プロジェクト・プロパティ」を選択します。

    2. 左側のメニューで「JSPタグ・ライブラリ」を選択し、図26-29に示すように、すべてのタグ・ライブラリが追加されたかどうかを確認します。

      図26-29 JSPタグ・ライブラリ

      図26-29の説明が続きます
      「図26-29 JSPタグ・ライブラリ」の説明
26.3.2.1 RuleDictionaryModelオブジェクトの作成方法

ルール・ディクショナリ・エディタ・コンポーネントには、RuleDictionaryModelオブジェクトを作成するために、oracle.bpel.ruledictionarydc.model.impl.RuleDictionaryModelオブジェクトが必要です。

RuleDictionaryModelオブジェクトを作成するには:

  1. プロジェクトにJavaクラス(たとえばSomeBean.java)を作成するには、「ファイル」メニューから、「新規」を選択し、次に「Javaクラス」を選択します。
  2. SomeBean.javaで、RuleDictionaryModelオブジェクトを返すメソッドを指定します。このルール・ファイルの場所およびパスを指定する必要があります。SomeBean.javaの例を次に示します。
    package view;
     
    import java.io.BufferedReader;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.Serializable;
     
    import java.net.MalformedURLException;
    import java.net.URL;
     
    import oracle.bpel.ruledictionarydc.model.impl.RuleDictionaryModel;
    import oracle.bpel.ruledictionarydc.model.impl.RulesEditorPreferencesImpl;
    import oracle.bpel.ruledictionarydc.model.interfaces.RulesEditorPreferences;
    import oracle.bpel.rulesdc.model.decisiontable.impl.DecisionTablePrefsImpl;
    import oracle.bpel.rulesdc.model.decisiontable.interfaces.DecisionTablePrefs;
    import oracle.bpel.rulesdc.model.impl.IfThenPreferencesImpl;
    import oracle.bpel.rulesdc.model.interfaces.IfThenPreferences;
    import oracle.bpel.rulessharedutils.impl.RulesSharedUtils;
     
    import oracle.rules.sdk2.decisionpoint.DecisionPointDictionaryFinder;
    import oracle.rules.sdk2.dictionary.DictionaryFinder;
    import oracle.rules.sdk2.dictionary.RuleDictionary;
    import oracle.rules.sdk2.exception.SDKException;
     
    public class SomeBean {
        private RuleDictionaryModel ruleDictModel;
        private RulesEditorPreferences rulesEditorPrefs;
        private boolean viewOnly = true;
     
        //on windows
        //private static final String RULES_FILE1 =
     "file:///D:/scratch/asuraj/system_MAIN/rules_
     files/insurancequoteproject/CarInsuranceRules.rules";
        
        // on linux
        private static final String RULES_FILE1 =
        "file:////scratch/asuraj/backup/rules_files/ApprovalRules.rules";
        
        public SomeBean() {
            super();
        }
     
        public RuleDictionaryModel getRuleDictModel() {
            if (ruleDictModel != null)
                return ruleDictModel;
     
        ruleDictModel = new RuleDictionaryModel(openRulesDict(RULES_FILE1, new
        DecisionPointDictionaryFinder()));
        return ruleDictModel;
        }
     
        public void saveDictionary() {
            RuleDictionary dict = null;
    
     
            if (this.ruleDictModel == null)
                return;
            dict = this.ruleDictModel.getRuleDictionary().getDictionary();
     
     
            if (dict == null)
                return;
     
            if (dict.isModified())
                RulesSharedUtils.updateDictionary(dict);
            if (!dict.isTransactionInProgress())
                saveDictionary(dict, RULES_FILE1);
        }
     
        public void validate() {
            if (this.ruleDictModel == null)
                return;
     
            this.ruleDictModel.validate();
        }
     
        public void toggleMode() {
            viewOnly = !viewOnly;
        }
     
        public boolean isViewOnly() {
            return viewOnly;
        }
     
        public RulesEditorPreferences getRulesEditorPrefs() {
            if (rulesEditorPrefs == null)
                rulesEditorPrefs = new MyRulesEditorPrefs();
            return rulesEditorPrefs;
        }
     
        //utility methods
     
        public static RuleDictionary openRulesDict(String fileName, DictionaryFinder finder) {
            URL url = null;
            try {
                url = new URL(fileName);
            } catch (MalformedURLException e) {
                System.err.println(e);
                return null;
            }
            RuleDictionary dict = null;
     
            try {
                dict = readFromDisk(url, finder);
            } catch (Exception e) {
                System.err.println(e);
                return null;
            }
            return dict;
        }
    
        public static RuleDictionary readFromDisk(URL dictURL, DictionaryFinder
     finder) {
            BufferedReader buf = null;
            try {
                buf = new BufferedReader(new
     InputStreamReader(dictURL.openStream(), "UTF-8"));
                return RuleDictionary.readDictionary(buf, finder);
            } catch (SDKException e) {
                System.err.println(e);
            } catch (IOException e) {
                System.err.println(e);
            } finally {
                if (buf != null)
                    try {
                        buf.close();
                    } catch (IOException e) {
                        System.err.println(e);
                    }
            }
            return null;    }    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");
    
            try {
                writeToDisk(dict, new URL(ruleFileName));
            } catch (MalformedURLException e) {
                System.err.println(e);
                return false;
            } catch (Exception e) {
                System.err.println(e);
                return false;
            }
            return true;
        }
    
        public static void writeToDisk(RuleDictionary dic, URL dictURL) {
            OutputStreamWriter writer = null;
            try {
                writer = new OutputStreamWriter(new
     FileOutputStream(dictURL.getPath()), "UTF-8");
                dic.writeDictionary(writer);
            } catch (IOException e) {
                System.err.println(e);
            } catch (SDKException e) {
                System.err.println(e);
            } finally {
                if (writer != null)
                    try {
                        writer.close();
                    } catch (IOException e) {
                        System.err.println(e);
                    }
            }
        }
    
        public class MyRulesEditorPrefs extends RulesEditorPreferencesImpl
     implements Serializable {
    
            private DecisionTablePrefs dtPrefs;
            private IfThenPreferences ifThenPrefs;
    
            @Override
            public DecisionTablePrefs getDecisionTablePreferences() {
                if (dtPrefs == null)
                    dtPrefs = new DTPreferences();
                return dtPrefs;
            }
    
            @Override
            public IfThenPreferences getIfThenPreferences() {
                if (ifThenPrefs == null)
                    ifThenPrefs = new MyIfThenPrefs();
                return ifThenPrefs;
            }
    
            @Override
            public boolean isShowRSButtons() {
                return true;
            }
        }
    
        public class MyIfThenPrefs extends IfThenPreferencesImpl implements
     Serializable {
    
            @Override
            public boolean isGenericAction() {
                return true;
            }
    
            @Override
            public boolean isGenericCondition() {
                return true;
            }
        }    public class DTPreferences extends DecisionTablePrefsImpl implements
     Serializable {
    
            @Override
            public boolean isShowDTButtons() {
                return true;
            }
        }
    }
    
  3. adfc-config.xmlのSomeBean.javaを指します(Bean名はsomeBeanで、スコープはsessionです)。たとえば、adfc-config.xmlです。
  4. 「項目」「Javaクラス」が選択されていることを確認し、「OK」をクリックして「Javaクラスの作成」ダイアログ・ボックスを表示します。
    <?xml version="1.0" encoding="UTF-8" ?>
    <adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2">
      <managed-bean id="__1">
        <managed-bean-name>someBean</managed-bean-name>
        <managed-bean-class>view.SomeBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
      </managed-bean>
    </adfc-config>
    
  5. ADF/JSFフレームワークによって、SomeBean.javaへのコールが複数回実行され、ユーザー・インタフェースがレンダリングされます。たとえば、someBean.ruleDictModelが複数回コールされます。そのため、毎回再作成するのではなく、ruleDictModelを一度作成したら、それをキャッシュして返すことは、より効率的です。
26.3.2.2 ルール・ディクショナリ・エディタ・コンポーネントの.jspxファイルの作成手順

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

ルール・ディクショナリ・エディタ・コンポーネント・タグの.jspxファイルを作成するには:

  1. Oracle JDeveloperを開きます。
  2. 「ファイル」メニューから、「新規」を選択し、次に「JSF/Facelets」を選択します。
  3. 「JSFページ」を選択して、「OK」をクリックします。
  4. ドキュメント・タイプに「JSP XML」を選択します。
  5. ファイル名にruleDictEditor.jspxを入力します。「OK」をクリックします。
  6. JDeveloperの「コンポーネント」ウィンドウに「RuleDictionaryDC」が表示されます(図26-30を参照)。

    図26-30 「コンポーネント」ウィンドウ

    図26-30の説明が続きます
    「図26-30 「コンポーネント」ウィンドウ」の説明
  7. 「RuleDictionaryDC」を選択すると、「RuleDictionaryDC」タグが表示されるはずです。「RuleDictionaryDC」タグをJSPXファイルにドラッグ・アンド・ドロップします(図26-31)。

    図26-31 ルール・ディクショナリのDCタグ

    図26-31の説明が続きます
    「図26-31 ルール・ディクショナリのDCタグ」の説明

    次のようにして、「RuleDictionaryDC」タグを手動でjspxファイルに追加することもできます。

    <?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: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 title="ruleDictEditor" id="d1">
                <af:form id="f1">
                    <af:panelGridLayout id="pgl1" inlineStyle="margin:15px;" styleClass="AFStretchWidth"
                                        partialTriggers="cb2 cb3 cb6">
                        <af:gridRow id="dc_gr1" marginTop="5px" marginBottom="5px">
                            <af:gridCell marginStart="5px" marginEnd="5px" width="100%" halign="stretch" id="gc1">
                                <af:panelGroupLayout id="pgl3" layout="horizontal">
                                    <af:button text="Save Dictionary" id="cb2" action="#{someBean.saveDictionary}"/>
                                    <af:spacer width="10" height="10" id="s1"/>
                                    <af:button text="Validate" id="cb3" action="#{someBean.validate}"/>
                                    <af:spacer width="10" height="10" id="s3"/>
                                    <af:button text="Toggle Mode" id="cb6" action="#{someBean.toggleMode}"/>
                                </af:panelGroupLayout>
                            </af:gridCell>
                        </af:gridRow>
                        <af:gridRow height="100%" id="gr2">
                            <af:gridCell width="100%" halign="stretch" valign="stretch" id="gc2">
                                <!-- Content -->
                                <rddc:ruleDictionaryDC ruleDictModel="#{someBean.ruleDictModel}" id="rddc1"
                                                       rulesEditorPrefs="#{someBean.rulesEditorPrefs}"
                                                       viewOnly="#{someBean.viewOnly}" disableVerbalRules="false"/>
                            </af:gridCell>
                        </af:gridRow>
                    </af:panelGridLayout>
                </af:form>
            </af:document>
        </f:view>
    </jsp:root>
    
26.3.2.3 oracle.rulesおよびoracle.soa.rules_dict_dc.webapp共有ライブラリの参照方法

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

oracle.rulesおよびoracle.soa.rules_dict_dc.webapp共有ライブラリを参照するには:

  1. JDeveloperで、「アプリケーション・リソース」から「ディスクリプタ」を選択し、次に「META-INF」を選択します。weblogic-application.xmlファイルを編集して、次の行を追加します(これによってoracle.rules共有ライブラリが参照されます)。

    <library-ref>
        <library-name>oracle.rules</library-name>
    </library-ref>
    
  2. JDeveloperで、「ファイル」「新規」、次に「デプロイメント・ディスクリプタ」の順に選択します。

    1. 「WebLogicデプロイメント・ディスクリプタ」を選択し、次にリストから「weblogic.xml」を選択します。

    2. 「version 12.1.2」を選択して、「終了」をクリックします。

    3. weblogic.xmlの「概要」モードで、左側から「ライブラリ」を選択し、oracle.soa.rules_dict_dc.webappをライブラリ名として追加します。weblogic.xmlファイルの例を次に示します。

      <?xml version = '1.0' encoding = 'UTF-8'?>
      <weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app
      http://xmlns.oracle.com/weblogic/weblogic-web-app/1.5/weblogic-web-app.xsd"
      xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
        <library-ref>
          <library-name>oracle.soa.rules_dict_dc.webapp</library-name>
        </library-ref>
      </weblogic-web-app>
      
    4. 「すべて保存」をクリックします。

    ノート:

    共有ライブラリoracle.rulesおよびoracle.soa.rules_dict_dc.webappは、埋込みWLSサーバーにデプロイされている必要があることに注意してください。

  3. 共有ライブラリが、埋込みWLSのweblogicコンソールを使用してデプロイされていることを確認します。

    1. WLSコンソール(http://host:port/console/login/LoginForm.jsp)を起動して、ログインします。

    2. 「デプロイメント」をクリックして、共有ライブラリoracle.rulesおよびoracle.soa.rules_dict_dc.webappが、図26-32に示すようにデプロイされているかどうかを確認します。

      図26-32 デプロイメント

      図26-32の説明が続きます
      「図26-32 デプロイメント」の説明
  4. 共有ライブラリがデプロイされていない場合は、次の手順を参照して共有ライブラリを手動でデプロイします。

    1. WLS埋込みサーバーを起動するには、図26-33に示すように、JDeveloperで「実行」を選択して、次に「サーバー・インスタンスの起動」を選択します。

      図26-33 サーバー・インスタンスの起動

      図26-33の説明が続きます
      「図26-33 サーバー・インスタンスの起動」の説明

      共有ライブラリがすでにデプロイされている場合は、この手順をスキップします。

      ノート:

      共有ライブラリをデプロイできるように、JDeveloper上でWLS埋込みサーバーが実行中である必要があります。

  5. oracle.rules共有ライブラリをWLSにデプロイするには:

    1. WLSコンソール(http://host:port/console/login/LoginForm.jsp)を起動して、ログインします。

    2. 「デプロイメント」を選択して「インストール」をクリックします。

    3. 「<SOA_INSTALL>/soa/soa/modules/oracle.rules_11.1.1/rules.jar」を選択して、「次へ」および「終了」をクリックします。

  6. oracle.soa.rules_dict_dc.webapp共有ライブラリをWLSにデプロイするには:

    1. WLSコンソールで、「デプロイメント」を選択し、「インストール」をクリックします。

    2. 「<SOA_INSTALL>/soa/soa/modules/oracle.soa.rules_dict_dc.webapp_11.1.1/oracle.soa.rules_dict_dc.webapp.war」を選択します。

    3. 「次へ」をクリックし、「終了」をクリックします。

    4. 「このデプロイメントをライブラリとしてインストールする」を選択します。

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

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

26.3.2.4 ルール・ディクショナリ・エディタ・サンプル・アプリケーションの実行方法

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

ルール・ディクショナリ・エディタ・サンプル・アプリケーションを実行するには:

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

    これにより、図26-34に示すように、サンプル・アプリケーションがブラウザで開始されます。

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

図26-34の説明が続きます
「図26-34 ルール・ディクショナリ・エディタ・サンプル・アプリケーション」の説明

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

アプリケーションのEARファイルをスタンドアロンWLSにデプロイする準備ができたら、次のステップに従ってすべてが順調に動作することを確認します。

  1. 共有ライブラリが、スタンドアロンWLSのweblogicコンソールを使用してデプロイされていることを確認します。

    1. WLSコンソール(http://host:port/console/login/LoginForm.jsp)を起動して、ログインします。

    2. 「デプロイメント」をクリックして、共有ライブラリoracle.rulesおよびoracle.soa.rules_dict_dc.webappが、図26-11に示すようにデプロイされているかどうかを確認します。

  2. 共有ライブラリがデプロイされていない場合は、前述の手順を参照して共有ライブラリを手動でデプロイします。

  3. ルール・ディクショナリ・エディタ・コンポーネントを使用するプロジェクトで、「Oracle Rules Dictionary Component」を「ライブラリとクラスパス」に含めます。これによってこれらのライブラリがデフォルトでデプロイされることはないため、JARはプロジェクトのWARファイルには含まれません。

  4. 最後にデプロイするプロジェクト(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>
      
  5. これで、EARファイルをWLSにデプロイでき、動作させることができます。

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

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

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

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

名前 タイプ 必要 デフォルト値 ELをサポートしているかどうか 説明

ruleDictModel

oracle.bpel.ruledict
ionarydc.model.inter
faces.RuleDictionary
Interface

はい

-

ELのみ

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

viewOnly

java.lang.Boolean

いいえ

true

はい

viewOnlyモードで、ユーザーは、既存のディクショナリ・データを表示できますが、編集はできません。falseの場合(つまり「編集」モードで)、ユーザーは、ディクショナリを編集できます。

locale

java.util.Locale

いいえ

Locale.getD
efault()

はい

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

timezone

java.util.TimeZone

いいえ

TimeZone.ge
tDefault() 

はい

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

ruleModel

java.lang.String

いいえ

oracle.bpel
.rulesdc.mo
del.impl.Ru
leModel

はい

デフォルトのRuleModelのカスタマイズに使用します。ユーザーは、RuleModelクラスを拡張して、特定のメソッドをオーバーライドできます。非推奨。rulesEditorPrefsを使用し、getIfThenPreferences().getRuleModel()をオーバーライドします。

simpleTestModel

java.lang.String

いいえ

oracle.bpel
.rulesdc.mo
del.impl.Si
mpleTestMod
el 

はい

デフォルトのSimpleTestModelのカスタマイズに使用します。ユーザーは、SimpleTestModelクラスを拡張して、特定のメソッドをオーバーライドできます。rulesEditorPrefsを使用し、getIfThenPreferences().getSimpleTestModel()をオーバーライドします。

selectedTab

java.lang.String

いいえ

-

はい

指定のタブ名(GLOBALS、FACTS、VALUESETS、LINKS、DESC_FUNCS、DSL_DEFNS、TESTS、TRANSLATIONSまたはルールセットの名前)に切り替えます。

selectedRulesetIdx

java.lang.String

いいえ

-

はい

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

dtColumnPageSize

java.lang.Integer

いいえ

5

はい

非推奨であり使用されません。

dtHeight

java.lang.Integer

いいえ

16

はい

非推奨であり使用されません。

dateStyle

java.lang.String

いいえ

ロケールから取得

はい

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

timeStyle

java.lang.String

いいえ

ロケールから取得

はい

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

showValidationPanel

java.lang.Boolean

いいえ

true

はい

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

discloseRules

java.lang.Boolean

いいえ

false

はい

非推奨であり使用されません。

displayRuleSetName

java.lang.Boolean

いいえ

true

はい

非推奨であり使用されません。

disableRuleSetName

java.lang.Boolean

いいえ

false

はい

非推奨であり使用されません。

showDTButtons

java.lang.Boolean

いいえ

true

はい

非推奨であり使用されません。

disableDFName

java.lang.Boolean

いいえ

false

はい

trueの場合、デシジョン関数エディタのポップアップでデシジョン関数名が無効化されます。非推奨。dfEditorPrefsを使用し、isDisableDFName()をオーバーライドします。

displayWSName

java.lang.Boolean

いいえ

true

はい

trueの場合、デシジョン関数エディタのポップアップで、デシジョン・サービス名が表示されます。サービス名は「ルール・サービスとして呼出し」がチェックされている場合にのみ有効になります。非推奨。dfEditorPrefsを使用し、isDisplayWSName()をオーバーライドします。

displayWSCheck

java.lang.Boolean

いいえ

true

はい

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

disableInputOps

java.lang.Boolean

いいえ

false

はい

デシジョン関数エディタのポップアップの「入力」表で、追加、編集および削除の各操作が無効になります。非推奨。dfEditorPrefsを使用し、isDisableInputOps()をオーバーライドします。

disableOutputOps

java.lang.Boolean

いいえ

false

はい

デシジョン関数エディタのポップアップの「出力」表で、追加、編集および削除の各操作が無効になります。非推奨。dfEditorPrefsを使用し、isDisableOutputOps()をオーバーライドします。

displayAddDF

java.lang.Boolean

いいえ

true

はい

「デシジョン関数の追加」ボタンが表示されます。非推奨。dfEditorPrefsを使用し、isDisableAddDF()をオーバーライドします。

displayDeleteDF

java.lang.Boolean

いいえ

true

はい

「デシジョン関数の削除」ボタンが表示されます。非推奨。dfEditorPrefsを使用し、isDisableDeleteDF()をオーバーライドします。

rulesPageSize

java.lang.Integer

いいえ

5

はい

非推奨であり使用されません。

decimalSeparator

java.lang.Character

いいえ

ロケールに基づく

はい

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

groupingSeparator

java.lang.Character

いいえ

ロケールに基づく

はい

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

vldnPanelCollapsed

java.lang.Boolean

いいえ

false

はい

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

vldnTabTitle

java.lang.String

いいえ

ローカライズされたテキスト:ビジネス・ルール検証 - ログ

はい

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

resourceManager

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

いいえ

-

はい

翻訳UIのリソース・マネージャを指定するために使用されます。変換に関する項を参照してください。

rulesEditorPrefs

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

いいえ

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

はい

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

dfEditorPrefs

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

いいえ

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

はい

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

showRSButtons

java.lang.Boolean

いいえ

true

はい

非推奨であり使用されません。

dfListener

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

いいえ

-

はい

デシジョン関数エディタの更新の通知に使用します。非推奨。dfEditorPrefsを使用し、getDfListener()をオーバーライドします。

dfActionListener

oracle.bpel.ruledict
ionarydc.listener.De
cisionFuncActionList
ener 

いいえ

-

はい

デシジョン関数が追加または削除された際の通知に使用します。非推奨。dfEditorPrefsを使用し、getDfActionListener()をオーバーライドします。

dfServiceNameCustomize

oracle.bpel.decision
funceditordc.listene
r.DecisionFuncServic
eNameCustomizer

いいえ

-

はい

デシジョン関数のサービス名のカスタマイズに使用します。非推奨。dfEditorPrefsを使用し、getDfServiceNameCustomizer()をオーバーライドします。

dictVersionInfo

oracle.bpel.ruledict
ionarydc.model.inter
faces.DictVersionInf
o 

いいえ

-

はい

比較用にディクショナリ・バージョンのリストを取得するための差分またはマージで使用します。非推奨。dfEditorPrefsを使用し、getDfServiceNameCustomizer()をオーバーライドします。

testExecutor

oracle.bpel.testedit
ordc.interfaces.Test
Executor

いいえ

-

はい

テスト・スイート、テスト・テンプレートおよびテスト・ケースに使用します。

disableRulesTesting

java.lang.Boolean

いいえ

false

はい

trueの場合、ルールのテスト機能は無効になります。

disableVerbalRules

java.lang.Boolean

いいえ

true

はい

trueの場合、言語化機能は無効になるため、「ビジネス・フレーズ」タブは表示されず、動詞ルールでのCRUD操作は無効になります。

boUpdateListener

oracle.bpel.ruledict
ionarydc.listener.BO
UpdateListener 

いいえ

-

はい

ビジネス・オブジェクトの同期に使用します。

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

Oracle Business Rulesディクショナリ・エディタのタスク・フローの概要を説明します。

ルール・ディクショナリ・エディタのタスク・フローを使用してアプリケーションを作成および実行し、アプリケーションをデプロイする方法を学習します。

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

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

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

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

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

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

Oracleルール・ディクショナリ・エディタのタスク・フローを使用してサンプル・アプリケーションを作成するには:

  1. Oracle JDeveloperを開きます。

  2. 「ファイル」メニューから、「新規」を選択し、次に「カスタム・アプリケーション」を選択して、アプリケーションを作成します。

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

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

    図26-35の説明が続きます
    「図26-35 汎用タスク・フロー・アプリケーションの作成」の説明
  4. 図26-36に示すように、「プロジェクト名」フィールドにuseRuleDictTaskFlowと入力し、「プロジェクト・テクノロジ」タブで「ADF Faces」が選択されていることを確認します。

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

    図26-36の説明が続きます
    「図26-36 タスク・フロー・プロジェクトの作成」の説明
  5. 「終了」をクリックしてプロジェクトを作成します。

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

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

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

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

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

      図26-37の説明が続きます
      「図26-37 タスク・フロー・アプリケーションのタブ・ライブラリの選択」の説明
    3. 左側のパネルから「ライブラリとクラスパス」を選択し、「ライブラリの追加」をクリックして「ライブラリの追加」ダイアログ・ボックスを表示します。

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

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

      図26-38の説明が続きます
      「図26-38 Rules SDKおよびルール・ディクショナリ・タスク・フローの追加」の説明
    5. 「OK」をクリックして、「プロジェクト・プロパティ」ダイアログ・ボックスを閉じます。

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

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

    ステップは、次のとおりです。

    1. Oracle JDeveloperを開きます。

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

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

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

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

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

      図26-39の説明が続きます
      「図26-39 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インタフェースの詳細は、「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-40に示すように、「Bean名」フィールドにMyBeanと入力し、「スコープ」リストでsessionを選択して、MyBean.javaを指し示します。

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

    図26-40の説明が続きます
    「図26-40 タスク・フロー・アプリケーションでのBean名とスコープの指定」の説明
26.4.2.1 ルール・ディクショナリ・エディタのタスク・フローの追加方法

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

ルール・ディクショナリ・エディタのタスク・フローを.jspxファイルに追加するには:

  1. Oracle JDeveloperを開きます。
  2. 「ファイル」メニューから「新規」を選択して、「新規ギャラリ」ダイアログ・ボックスを表示します。
  3. 「新規ギャラリ」ダイアログ・ボックスの「カテゴリ」パネルから、「Web層」の下にある「JSF」を選択します。
  4. 図26-41に示すように、「項目」「JSFページ」を選択し、「OK」をクリックして「JSFページの作成」ダイアログ・ボックスを表示します。

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

    図26-41の説明が続きます
    「図26-41 ルール・ディクショナリ・エディタのタスク・フローを挿入するJSFページ・ファイルの作成」の説明
  5. 図26-42に示すように、「JSFページの作成」ダイアログ・ボックスで、「ファイル名」にuseRuleDictTaskFlow.jspxと入力します。

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

    図26-42の説明が続きます
    「図26-42 タスク・フローのJSFページ名の指定」の説明

    Oracle JDeveloperの「コンポーネント」ウィンドウに「adflibRuleDictionaryTaskFlow.jar」が表示されます(図26-43を参照)。

    図26-43 「コンポーネント」ウィンドウのルール・ディクショナリ・タスク・フローJAR

    図26-43の説明が続きます
    「図26-43 「コンポーネント」ウィンドウのルール・ディクショナリ・タスク・フローJAR」の説明

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

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

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

    図26-44の説明が続きます
    「図26-44 リージョンのドラッグ・アンド・ドロップ」の説明

    次に、タスク・フローが追加された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コンポーザの読取り専用モードと編集可能モードを切り替えます。

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

26.4.2.2 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
26.4.2.3 oracle.rulesおよびoracle.soa.rules_dict_dc.webapp共有ライブラリの参照方法

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

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

26.4.2.4 タスク・フロー・サンプル・アプリケーションの実行方法

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

タスク・フロー・サンプル・アプリケーションを実行するには:

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

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

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

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

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. ブラウザで提供されるロケールをオーバーライドして特定のロケールでUIを表示する場合は、そのロケールを属性としてコンポーネントに渡し、コンポーネントを使用してアプリケーションで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
<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>

26.6.1.1 IRelatedMetadataDetailsの実装を渡すサンプル・コード

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

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

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

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

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

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

<rddc:ruleDictionaryDC ruleDictModel="#{SomeBean.ruleDictModel1}"
  id="rddc1"
   resourceManager="#{SomeBean.resourceManager}">
  </rddc:ruleDictionaryDC>
26.6.2.1 resourceManagerのインスタンスを作成するためのサンプル・コード

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

ノート:

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

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

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

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