この章の内容は次のとおりです。
宣言コンポーネントは再利用可能なコンポジット・ユーザー・インタフェース(UI)コンポーネントで、他の既存のApplication Development Framework (ADF) Facesコンポーネントで構成されています。ここでは、複数のJSFページが含まれているアプリケーションを考えてみます。特定ページの複数の部分では、一連の固有のコンポーネントが使用されます。このシナリオで、一連のコンポーネントのいずれかに変更を加えた場合、通常は、該当するページの複数の部分にその変更を複製する必要があります。このアプローチでは、ページの構造とレイアウトの一貫性を維持することが困難です。一方、一連の指定コンポーネントで構成した宣言コンポーネントを定義すると、そのコンポジット宣言コンポーネントを複数の場所またはページで再利用できます。このため、宣言コンポーネントによって、時間の節約とページ間の一貫性が確保されます。これは、コンポーネントに変更を加えると、そのコンポーネントを使用しているJSFページが自動的に更新されるためです。
ADFタスク・フローは、アプリケーションに制御フローを指定する際、モジュラおよびトランザクション・メソッドを提供する再利用可能なコンポーネントです。再利用可能な一連のタスク・フローは、アプリケーションを単一の大きなJSFページ・フローとして表現する代替手段として使用でき、これによって、モジュール性が提供されます。各タスク・フローには、アプリケーションの全体的なナビゲーション計画の一部が含まれています。タスク・フローのノードはアクティビティと呼ばれます。ナビゲーションとは別に、タスク・フロー・アクティビティは、マネージドBeanでメソッドをコールしたり、特定のページを起動せずに別のタスク・フローをコールすることもできます。このため、表示されているページとは独立してビジネス・ロジックを起動できるため、再利用が容易になります。
この項では、Oracle Business Rulesエディタの宣言コンポーネントについて説明します。ルール・エディタ・コンポーネントを使用してアプリケーションを作成および実行し、アプリケーションをデプロイする方法についても説明します。また、この項では、サポートされているタグや、アプリケーションのローカライズ・プロセスのリストも示します。
Oracle Business Rulesエディタは、ADFベースのWebアプリケーションに埋め込むことができる宣言コンポーネントです。このコンポーネントによって、ルール編集のユーザー・インタフェースが表示され、ルール編集に関連付けられているすべてのイベントが処理されます。ルール・エディタでは、ルールの作成と編集にRules SDK2 APIが使用されます。
注意:
ルール・エディタをルール・ディクショナリ・エディタと混同しないでください。ルール・エディタは、指定したルールセット内のルールを編集するために使用されます。実際には、ルール・エディタはルール・ディクショナリ・エディタに埋め込まれています。ルール・ディクショナリ・エディタの詳細は、「Oracle Business Rulesディクショナリ・エディタの宣言コンポーネントの概要」を参照してください。
ルール・エディタを使用すると、単一のルールセットの一部である一般的なルール、動詞ルールおよびデシジョン表を作成、削除および編集できます。RuleSetModelオブジェクトを指定する必要があります。このオブジェクトは、ルール・エディタ・コンポーネントへのパラメータとして、Rules SDKルールセット・オブジェクトを囲むラッパーです。複数のルールセットを変更する必要がある場合は、複数のルール・エディタ・コンポーネントを(ルールセットごとに1つ)インスタンス化する必要があります。
ルール・エディタ・コンポーネントは、次の機能を実行します。
次の要素を作成、更新および削除します。
ルールセットおよびルールの有効日と優先度を設定します。
ユーザー定義演算子のサポートを提供します。
「左の値」または「右の値」オプションを表示する「条件ブラウザ」ポップアップを提供します(図26-4を参照)。
日付タイプを選択するための「日付」ブラウザを提供します。
右側の複数の式を処理する「右のオペランド」ブラウザを提供します。
ネストされたルールのサポートを提供します。
ルール・アクションのプロパティを編集するための「プロパティ」ブラウザを提供します(図26-5を参照)。
カスタム式を作成する「式ビルダー」ウィンドウを提供します。
エラー・メッセージを管理する検証パネルを提供します(図26-6を参照)。
注意:
すべての編集の完了後、コンポーネント・ユーザーはルールセットを保存する必要があります。
この項では、ルール・エディタ・コンポーネントを使用してサンプル・アプリケーションを作成および実行するための手順を示します。
ルール・エディタ・コンポーネントを使用してADFベースのWebアプリケーションを作成するための前提条件は、使用しているコンピュータでOracle SOA SuiteとOracle JDeveloperのインストールが実行されていることです。
ルール・エディタを使用してサンプル・アプリケーションを作成する手順は、次のとおりです。
Oracle JDeveloperを開きます。
「file」メニューから、「新」を選択します。
図26-7に示すように、「ADF Fusion Webアプリケーション」を選択して、新しいアプリケーションを作成します。
図26-8に示すように、「アプリケーション名」フィールドにアプリケーションの名前(useRulesDCAppなど)を入力し、「次へ」をクリックします。
他のすべてにはデフォルトを使用します。
「終了」をクリックします。
「ViewController」プロジェクトを右クリックして、「プロジェクト・プロパティ」を選択します。
左側のメニューで「ライブラリとクラスパス」を選択します。
「ライブラリの追加」ボタンをクリックします。
「拡張機能」リストから「Oracle Rules」および「Oracle Rules Dictionary Component」をクリックし、「OK」をクリックします。これにより、図26-9に示すように、コンポーネント・タグ・ライブラリRules SDKおよびRules ADFがプロジェクトに追加されます。
もう一度「OK」をクリックして、「プロジェクト・プロパティ」を終了します。
注意:
「拡張機能」リストに「Oracle Rules」および「Oracle Rules Dictionary Component」が表示されない場合は、JDeveloper内でSOA/BPMプロジェクトを開いて、必要なライブラリをロードしてください。
「すべて保存」をクリックして、プロジェクトを保存します。
必要なすべてのタグ・ライブラリが追加されたことを確認します。
「ViewController」プロジェクトを右クリックして、「プロジェクト・プロパティ」を選択します。
左側のメニューで「JSPタグ・ライブラリ」を選択し、すべてのタグ・ライブラリが追加されたかどうかを確認します(図26-10)。
ルール・エディタ・コンポーネントには、oracle.bpel.rulesdc.model.impl.RuleSetModelオブジェクトが必要です。
RuleSetModelオブジェクトを作成する手順は、次のとおりです。
次のタスクは、ルール・エディタ・コンポーネント・タグを挿入する.jspxファイルの作成です。
ルール・エディタ・コンポーネント・タグを含めるための.jspxファイルの作成手順は、次のとおりです。
.jspxファイルを作成した後に、weblogic-application.xmlファイルから共有ライブラリoracle.rulesおよびoracle.soa.rules_dict_dc.webappを参照する必要があります。
oracle.rulesおよびoracle.soa.rules_dict_dc.webapp共有ライブラリを参照する手順は、次のとおりです。
Oracle JDeveloperで、「アプリケーション・リソース」から「ディスクリプタ」を開き、次に「META-INF」を開きます。weblogic-application.xmlファイルを編集して、次の行を追加します(これによってoracle.rules共有ライブラリが参照されます)。
<library-ref>
<library-name>oracle.rules</library-name>
</library-ref>
Oracle JDeveloperで、次のようにします。
「ファイル」メニューから、「新規」を選択し、次に「デプロイメント・ディスクリプタ」を選択します。
「WebLogicデプロイメント・ディスクリプタ」を選択し、リストから「weblogic.xml」を選択します。
「version 12.1.2」を選択して、「終了」をクリックします。
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>
「すべて保存」をクリックします。
注意:
共有ライブラリoracle.rulesおよびoracle.soa.rules_dict_dc.webappは、埋込みWLSサーバーにデプロイされている必要があることに注意してください。
すべての共有ライブラリは、埋込みWLSのweblogicコンソールを使用してデプロイされる必要があります。
WLSコンソール(http://host:port/console/login/LoginForm.jsp)を起動して、ログインします。
「デプロイメント」をクリックします。
共有ライブラリoracle.rulesおよびoracle.soa.rules_dict_dc.webappが、図26-11に示すようにデプロイされているかどうかを確認します。
これらの共有ライブラリがデプロイされていない場合は、手動でデプロイします。
WLS埋込みサーバーを起動する手順は、次のとおりです。
JDeveloperを開きます。
図26-12に示すように、「実行」を選択して、次に「サーバー・インスタンスの起動」を選択します。
共有ライブラリがすでにデプロイされている場合は、この手順をスキップします。
注意:
共有ライブラリをデプロイできるように、JDeveloper上でWLS埋込みサーバーが実行中である必要があります。
oracle.rules共有ライブラリをWLSにデプロイする手順は、次のとおりです。
WLSコンソール(http://host:port/console/login/LoginForm.jsp)を起動して、ログインします。
「デプロイメント」を選択して「インストール」をクリックします。
「<SOA_INSTALL>/soa/soa/modules/oracle.rules_11.1.1/rules.jar」を選択します。
「次へ」をクリックし、「終了」をクリックします。
oracle.soa.rules_dict_dc.webapp共有ライブラリをWLSにデプロイする手順は、次のとおりです。
WLSコンソールで、「デプロイメント」を選択し、「インストール」をクリックします。
「<SOA_INSTALL>/soa/soa/modules/oracle.soa.rules_dict_dc.webapp_11.1.1/oracle.soa.rules_dict_dc.webapp.war」を選択します。
「次へ」をクリックし、「終了」をクリックします。
「このデプロイメントをライブラリとしてインストールする」を選択します。
「終了」をクリックします。
図26-11に示すように、oracle.soa.rules_dict_dc.webappがデプロイメントのリストに追加されます。
アプリケーションEARファイルをスタンドアロンOracle WebLogic Serverにデプロイする準備が整った場合は、次の手順を実行します。
共有ライブラリが、スタンドアロンWLSのweblogicコンソールを使用してデプロイされているかどうかを確認します。
WLSコンソール(http://host:port/console/login/LoginForm.jsp)を起動して、ログインします。
「デプロイメント」をクリックします。共有ライブラリoracle.rulesおよびoracle.soa.rules_dict_dc.webappが、図26-11に示すようにデプロイされているかどうかを確認します。
共有ライブラリがデプロイされていない場合は、前述の手順を参照して共有ライブラリを手動でデプロイします。
ルール・エディタ・コンポーネントを使用するプロジェクトで、次の手順を実行します。
「Oracle Rules Dictionary Component」を「ライブラリとクラスパス」に含めます。
これによってこれらのライブラリがデフォルトでデプロイされることはないため、JARはプロジェクトのWARファイルには含まれません。
デプロイするプロジェクト(EARファイルを作成する場所)で、次の手順を実行します。
weblogic-application.xmlに次を追加します。
<library-ref>
<library-name>oracle.rules</library-name>
</library-ref>
プロジェクトのWARファイルのweblogic.xmlに、次を追加します。
<library-ref>
<library-name>oracle.soa.rules_dict_dc.webapp</library-name>
</library-ref>
WLSでEARファイルをデプロイします。
EARの作成方法の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Java EE開発者ガイド』のデプロイメントのためのEARファイルの作成方法に関する項を参照してください。
ロールベースの認可について、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-1に、サポートされている属性のリストを示します。
表26-1 ルール・エディタ・コンポーネントのサポートされている属性
| 名前 | タイプ | 必要 | デフォルト値 | ELをサポートしているかどうか | 説明 |
|---|---|---|---|---|---|
|
oracle.bpel.rulesdc .model.interfaces.R uleSetInterface |
はい |
ELのみ |
Rules SDKルールセット・オブジェクトのラッパーです。ユーザーは、ルール・エディタ・コンポーネントの一部として提供されているRuleSetModelオブジェクトを使用できます。 |
|
|
java.lang.String |
いいえ |
oracle.bpel. rulesdc.mode l.impl.RuleM odel |
はい |
デフォルトのRuleModelのカスタマイズに使用します。ユーザーは、RuleModelクラスを拡張して、特定のメソッドをオーバーライドできます。非推奨。ifThenPreferences属性を使用して、getRuleModel()をオーバーライドします。 |
|
java.lang.String |
いいえ |
oracle.bpel .rulesdc.mo del.impl.Si mpleTestMod el |
はい |
デフォルトのSimpleTestModelのカスタマイズに使用します。ユーザーは、SimpleTestModelクラスを拡張して、特定のメソッドをオーバーライドできます。非推奨。ifThenPreferences属性を使用して、getSimpleTestModel()をオーバーライドします。 |
|
java.lang.Boolean |
いいえ |
|
はい |
viewOnlyモードで、ユーザーは、ルールセット内の既存のルールを表示できます。falseの場合、ユーザーは、「編集」モードで、ルールを新規に追加したり、既存のルールを編集できます。 |
|
java.lang. Boolean |
いいえ |
|
はい |
非推奨であり使用されません。 |
|
java.lang.Boolean |
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
Locale.getDe fault() |
はい |
ローカライズに使用します。 |
|
|
いいえ |
TimeZone.get Default() |
はい |
ローカライズに使用します |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
ロケールから取得 |
はい |
指定された場合、その日付スタイルがすべてのinputDateコンポーネントで使用されます。例: yyyy.MM.dd |
|
|
いいえ |
ロケールから取得 |
はい |
指定された場合、その時間スタイルがすべてのinutDateコンポーネントで使用されます(例: HH:mm:ss)。 |
|
|
いいえ |
|
はい |
検証パネルがデフォルトで表示されます。ユーザーは、これをfalseに設定することで、非表示にできます。 |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
ロケールに基づく |
はい |
小数セパレータの指定に使用します。これは数値書式に使用されます。指定された場合、ロケールに基づく小数セパレータをオーバーライドします。 |
|
|
いいえ |
ロケールに基づく |
はい |
グループ化セパレータの指定に使用します。これは数値書式に使用されます。指定された場合、ロケールに基づくグループ化セパレータをオーバーライドします。 |
|
|
いいえ |
|
はい |
trueの場合、言語化UIを無効化します。 |
|
|
いいえ |
|
はい |
検証パネルがデフォルトで縮小されているかどうかを指定するために使用されます。 |
|
|
いいえ |
- |
はい |
検証パネルのタイトルを指定するために使用されます。 |
|
|
はい |
|
はい |
trueの場合、デシジョン表ツールバーに、汎用のアクションの追加メニューが表示されます。falseの場合、コンシューマは、dtAddActionMenuDDC属性を使用してアクションの追加メニューを指定する必要があります。非推奨。dtPreferences属性を使用し、isGenericDTAddActionMenu()をオーバーライドします。 |
|
|
いいえ |
|
はい |
trueの場合、デシジョン表でアクション行を編集するときに表示されるアクション・エディタ・ブラウザに汎用アクションUIが表示されます。falseの場合、コンシューマは、dtEditActionDDC属性を使用して編集アクションUIを指定する必要があります。非推奨。dtPreferences属性を使用し、isGenericDTEditAction()をオーバーライドします。 |
|
|
いいえ |
|
はい |
trueの場合、デシジョン表のアクション・パラメータ・セルに汎用UIが表示されます。falseの場合、コンシューマは、dtActionParamCellDDC属性を使用してアクション・パラメータ・セルUIを指定する必要があります。非推奨。dtPreferences属性を使用し、isGenericDTActionParam()をオーバーライドします。 |
|
j |
いいえ |
- |
はい |
genericDTAddActionMenuがtrueの場合にのみ使用されます。コンシューマは、デシジョン表ツールバーで追加メニュー項目を指定するコンテキスト・パスなどのDDC (動的宣言コンポーネント)を渡す必要があります。たとえば、/userulesdc/decisiontable/dtAddActionMenu.jsffです。非推奨。dtPreferences属性を使用し、getDtAddActionMenuDDC()をオーバーライドします。 |
|
|
いいえ |
- |
はい |
genericDTEditActionがtrueの場合にのみ使用されます。コンシューマは、デシジョン表でアクション行を編集するときに表示されるアクション・エディタ・ブラウザに表示されるアクションUIを指定するコンテキスト・パスなどのDDC (動的宣言コンポーネント)を渡す必要があります。たとえば、/userulesdc/decisiontable/actionEditor.jsffです。非推奨。dtPreferences属性を使用し、getDtEditActionDDC()をオーバーライドします。 |
|
|
いいえ |
- |
はい |
genericDTActionParamがtrueの場合にのみ使用されます。コンシューマは、デシジョン表のアクション・パラメータ・セルに表示されるUIを指定するコンテキスト・パスなどのDDC (動的宣言コンポーネント)を渡す必要があります。たとえば、/userulesdc/decisiontable/actionParamCell.jsffです。非推奨。dtPreferences属性を使用し、getDtActionParamCellDDC()をオーバーライドします。 |
|
oracle.bpel.rulesdc .model.interfaces.A ctionNameCustomizer |
いいえ |
- |
はい |
デシジョン表ヘッダーでアクション名およびアクション・パラメータ名を指定するために使用されます。非推奨。dtPreferences属性を使用し、getDtActionNameCustomizer()をオーバーライドします。 |
|
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)を拡張し、必要なプリファレンスのみをオーバーライドできます。 |
|
oracle.bpel.rulesdc .model.interfaces.I fThenPreferences |
いいえ |
oracle.bpel. rulesdc.mode l.impl.IfThe nPreferences Impl |
はい |
検証パネルがデフォルトで縮小されているかどうかを指定するために使用されます。 |
|
joracle.bpel.ruless hareddc.model.inter faces.ResourceManag erInterface |
いいえ |
- |
はい |
翻訳UIのリソース・マネージャを指定するために使用されます。変換に関する項を参照してください。 |
|
oracle.bpel.rulessh areddc.model.interf aces.VerbalRuleGoto LinkListener |
いいえ |
- |
はい |
動詞ルールで「フレーズに移動」リンクがクリックされると、リスナー・オブジェクトがトリガーされます。 |
この項では、Oracle Business Rulesディクショナリ・エディタの宣言コンポーネントについて説明します。ルール・ディクショナリ・エディタ・コンポーネントを使用してアプリケーションを作成および実行し、アプリケーションをデプロイする方法についても説明します。また、この項では、サポートされているタグや、アプリケーションのローカライズ・プロセスのリストも示します。
ルール・ディクショナリ・エディタ・コンポーネントはADF宣言コンポーネントであり、Rules SDK2 APIを使用して、ルールセット、値セット、グローバル、デシジョン関数などのBusiness Rulesメタデータ・アーティファクトを編集できます。
ルール・ディクショナリ・エディタ・コンポーネントを、主に指定したルールセット内でルールの編集に使用されるルール・エディタ・コンポーネントと混同しないでください。ルール・ディクショナリ・コンポーネントは、グローバル、値セット、ルールセットなどの編集が可能なコンポジット・コンポーネントです。ルール・ディクショナリ・エディタのタスク・フローでは、ルール・ディクショナリ・エディタ・コンポーネントを使用します。
ルール・ディクショナリ・エディタ・コンポーネントには、次の機能があります。
ルールセットおよびルールセット内の一般的なルール、動詞ルールおよびデシジョン表でのCRUD (作成/読取り/更新/削除)操作
ビジネス・フレーズ(言語化で使用される)でのCRUD (作成/読取り/更新/削除)操作
値セットでのでのCRUD (作成/読取り/更新/削除)操作
グローバル/変数でのCRUD (作成/読取り/更新/削除)操作
デシジョン関数でのCRUD (作成/読取り/更新/削除)操作
RLファクトおよびXMLファクトでのCRUD (作成/読取り/更新/削除)操作、およびその他すべてのファクト・タイプの表示
リンクされたディクショナリの表示。
ユーザー定義の変換のサポート
すべてのディクショナリ・コンポーネントのカット/コピー/ペースト
ディクショナリの異なるバージョンの比較およびマージ(diff/mergeのサポート)
デシジョン表のExcelへのエクスポート
ルール・ディクショナリ・エディタのタスク・フローでは、ルール・ディクショナリ・エディタ・コンポーネントを使用してアプリケーションを作成します。通常は、ルール・ディクショナリ・エディタ・コンポーネントまたはルール・ディクショナリ・エディタのタスク・フローのいずれかを使用します(両方は使用しません)。ルール・ディクショナリ・エディタのタスク・フローの詳細は、「Oracle Business Rulesディクショナリ・エディタのタスク・フローの概要」を参照してください。
ルール・ディクショナリ・エディタ・コンポーネントでは、次のことが実行できます。
グローバル・エディタを使用して、final属性がtrueに設定されているグローバルまたは変数を編集します(図26-14を参照)。
グローバル・エディタでは、名前、説明、値を作成、削除、編集し、値セットを変更し、タイプを変更し、グローバル・ファイナルを作成できます。グローバルの検証がサポートされています。
値セット・エディタを使用して、値セットを編集します(図26-15を参照)。
値セット・エディタでは、値セットおよび値セット内の範囲でCRUD (作成、読取り、更新および削除)操作を実行できます。値セットの検証もサポートされています。
ルールセットを編集します(図26-16を参照)。
ルール・ディクショナリ・エディタで編集できるのは、選択したルールセット内のルールのみです。ルールセットを作成または削除することはできません。
一般的なルールを編集します(図26-17を参照)。
動詞ルールを編集します(図26-18を参照)。
デシジョン表を編集します(図26-19を参照)。
ビジネス・フレーズを編集します(図26-20を参照)。
エクスプローラを表示します(図26-21を参照)。
ファクトを編集します(図26-22を参照)。
デシジョン関数を編集します(図26-23を参照)。
変換を編集します(図26-24を参照)。
ルールを検証するためにテストを作成して実行します(図26-25を参照)。
これらの機能およびタブの詳細は、『Oracle Business Process Managementによるビジネス・ルールの設計』を参照してください。
この項では、ルール・ディクショナリ・エディタ・コンポーネントを使用してサンプル・アプリケーションを作成および実行するための手順を示します。
ルール・ディクショナリ・エディタ・コンポーネントを使用してADFベースのWebアプリケーションを作成するための前提条件は、JDeveloperとSOAがインストールされていることです。最初のタスクはサンプル・アプリケーションの作成です。
ルール・ディクショナリ・エディタ・コンポーネントを使用してサンプル・アプリケーションを作成する手順は、次のとおりです。
Open JDeveloperを開いて、図26-26に示すように、「ファイル」メニューから、「新規」を選択し、次に「ADF Fusion Webアプリケーション」を選択して新しいアプリケーションを作成します。
図26-27に示すように、「アプリケーション名」フィールドにアプリケーションの名前(たとえば、UseRuleDictDCApp)を入力し、「次へ」をクリックします。
他のすべてにはデフォルトを使用します。
「終了」をクリックします。
「ViewController」プロジェクトを右クリックして、「プロジェクト・プロパティ」を選択します。左側のメニューで「ライブラリとクラスパス」を選択します。
「ライブラリの追加」をクリックします。
「拡張機能」リストから「Oracle Rules」および「Oracle Rules Dictionary Component」を選択し、「OK」をクリックします。これにより、図26-28に示すように、コンポーネント・タグ・ライブラリRules SDKおよびRules ADFがプロジェクトに追加されます。
注意:
「拡張機能」リストに「Oracle Rules」および「Oracle Rules Dictionary Component」が表示されない場合は、JDeveloper内でSOA/BPMプロジェクトを開いて、必要なライブラリをロードしてください。
もう一度「OK」をクリックして、「プロジェクト・プロパティ」を終了します。
「すべて保存」をクリックして、プロジェクトを保存します。
必要なすべてのタグ・ライブラリが追加されたことを確認します。
「ViewController」プロジェクトを右クリックして、「プロジェクト・プロパティ」を選択します。
左側のメニューで「JSPタグ・ライブラリ」を選択し、図26-29に示すように、すべてのタグ・ライブラリが追加されたかどうかを確認します。
ルール・ディクショナリ・エディタ・コンポーネントには、RuleDictionaryModelオブジェクトを作成するために、oracle.bpel.ruledictionarydc.model.impl.RuleDictionaryModelオブジェクトが必要です。
RuleDictionaryModelオブジェクトを作成する手順は、次のとおりです。
次のタスクは、ルール・ディクショナリ・エディタ・コンポーネント・タグを挿入する.jspxファイルの作成です。
ルール・ディクショナリ・エディタ・コンポーネント・タグの.jspxファイルを作成する手順は、次のとおりです。
.jspxファイルを作成した後に、weblogic-application.xmlファイルから共有ライブラリoracle.rulesおよびoracle.soa.rules_dict_dc.webappを参照する必要があります。
oracle.rulesおよびoracle.soa.rules_dict_dc.webapp共有ライブラリを参照する手順は、次のとおりです。
JDeveloperで、「アプリケーション・リソース」から「ディスクリプタ」を選択し、次に「META-INF」を選択します。weblogic-application.xmlファイルを編集して、次の行を追加します(これによってoracle.rules共有ライブラリが参照されます)。
<library-ref>
<library-name>oracle.rules</library-name>
</library-ref>
JDeveloperで、「ファイル」、「新規」、次に「デプロイメント・ディスクリプタ」の順に選択します。
「WebLogicデプロイメント・ディスクリプタ」を選択し、次にリストから「weblogic.xml」を選択します。
「version 12.1.2」を選択して、「終了」をクリックします。
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>
「すべて保存」をクリックします。
注意:
共有ライブラリoracle.rulesおよびoracle.soa.rules_dict_dc.webappは、埋込みWLSサーバーにデプロイされている必要があることに注意してください。
共有ライブラリが、埋込みWLSのweblogicコンソールを使用してデプロイされていることを確認します。
WLSコンソール(http://host:port/console/login/LoginForm.jsp)を起動して、ログインします。
「デプロイメント」をクリックして、共有ライブラリoracle.rulesおよびoracle.soa.rules_dict_dc.webappが、図26-32に示すようにデプロイされているかどうかを確認します。
共有ライブラリがデプロイされていない場合は、次の手順を参照して共有ライブラリを手動でデプロイします。
WLS埋込みサーバーを起動するには、図26-33に示すように、JDeveloperで「実行」を選択して、次に「サーバー・インスタンスの起動」を選択します。
共有ライブラリがすでにデプロイされている場合は、この手順をスキップします。
注意:
共有ライブラリをデプロイできるように、JDeveloper上でWLS埋込みサーバーが実行中である必要があります。
oracle.rules共有ライブラリをWLSにデプロイする手順は、次のとおりです。
WLSコンソール(http://host:port/console/login/LoginForm.jsp)を起動して、ログインします。
「デプロイメント」を選択して「インストール」をクリックします。
「<SOA_INSTALL>/soa/soa/modules/oracle.rules_11.1.1/rules.jar」を選択して、「次へ」および「終了」をクリックします。
oracle.soa.rules_dict_dc.webapp共有ライブラリをWLSにデプロイする手順は、次のとおりです。
WLSコンソールで、「デプロイメント」を選択し、「インストール」をクリックします。
「<SOA_INSTALL>/soa/soa/modules/oracle.soa.rules_dict_dc.webapp_11.1.1/oracle.soa.rules_dict_dc.webapp.war」を選択します。
「次へ」をクリックし、「終了」をクリックします。
「このデプロイメントをライブラリとしてインストールする」を選択します。
「終了」をクリックします
これで、図26-32に示すように、oracle.soa.rules_dict_dc.webappがデプロイメントのリストに追加されました。
アプリケーションのEARファイルをスタンドアロンWLSにデプロイする準備ができたら、次の手順に従ってすべてが順調に動作することを確認します。
共有ライブラリが、スタンドアロンWLSのweblogicコンソールを使用してデプロイされていることを確認します。
WLSコンソール(http://host:port/console/login/LoginForm.jsp)を起動して、ログインします。
「デプロイメント」をクリックして、共有ライブラリoracle.rulesおよびoracle.soa.rules_dict_dc.webappが、図26-11に示すようにデプロイされているかどうかを確認します。
共有ライブラリがデプロイされていない場合は、前述の手順を参照して共有ライブラリを手動でデプロイします。
ルール・ディクショナリ・エディタ・コンポーネントを使用するプロジェクトで、「Oracle Rules Dictionary Component」を「ライブラリとクラスパス」に含めます。これによってこれらのライブラリがデフォルトでデプロイされることはないため、JARはプロジェクトのWARファイルには含まれません。
最後にデプロイするプロジェクト(EARファイルを作成する場所)で、次の手順を実行します。
weblogic-application.xmlに次を追加します。
<library-ref>
<library-name>oracle.rules</library-name>
</library-ref>
プロジェクトのWARファイルのweblogic.xmlに、次を追加します。
<library-ref>
<library-name>oracle.soa.rules_dict_dc.webapp</library-name>
</library-ref>
これで、EARファイルをWLSにデプロイでき、動作させることができます。
この項では、ルール・ディクショナリ・エディタ・コンポーネントでサポートされている属性のリストを示します。
表26-2に、サポートされている属性のリストを示します。
表26-2 ルール・ディクショナリ・エディタのサポートされている属性
| 名前 | タイプ | 必要 | デフォルト値 | ELをサポートしているかどうか | 説明 |
|---|---|---|---|---|---|
|
oracle.bpel.ruledict ionarydc.model.inter faces.RuleDictionary Interface |
はい |
- |
ELのみ |
Rules SDKディクショナリ・オブジェクトのラッパー。ユーザーは、ルール・ディクショナリ・エディタ・コンポーネントjarファイル(adflibRuleDictionaryDC.jar)の一部として提供されるRuleDictionaryModelオブジェクトを使用できます。 |
|
|
いいえ |
|
はい |
viewOnlyモードで、ユーザーは、既存のディクショナリ・データを表示できますが、編集はできません。falseの場合(つまり「編集」モードで)、ユーザーは、ディクショナリを編集できます。 |
|
|
いいえ |
Locale.getD efault() |
はい |
ローカライズに使用します。 |
|
|
いいえ |
TimeZone.ge tDefault() |
はい |
ローカライズに使用します |
|
|
いいえ |
oracle.bpel .rulesdc.mo del.impl.Ru leModel |
はい |
デフォルトのRuleModelのカスタマイズに使用します。ユーザーは、RuleModelクラスを拡張して、特定のメソッドをオーバーライドできます。非推奨。rulesEditorPrefsを使用し、getIfThenPreferences().getRuleModel()をオーバーライドします。 |
|
|
いいえ |
oracle.bpel .rulesdc.mo del.impl.Si mpleTestMod el |
はい |
デフォルトのSimpleTestModelのカスタマイズに使用します。ユーザーは、SimpleTestModelクラスを拡張して、特定のメソッドをオーバーライドできます。rulesEditorPrefsを使用し、getIfThenPreferences().getSimpleTestModel()をオーバーライドします。 |
|
|
いいえ |
|
はい |
指定のタブ名(GLOBALS、FACTS、VALUESETS、LINKS、DESC_FUNCS、DSL_DEFNS、TESTS、TRANSLATIONSまたはルールセットの名前)に切り替えます。 |
|
|
いいえ |
- |
はい |
デフォルトで選択されるルールセット索引を指定するために使用されます。selectedRulesetIdxが指定されている場合、selectedTab属性がオーバーライドされます。 |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
ロケールから取得 |
はい |
指定された場合、その日付スタイルがすべてのinputDateコンポーネントで使用されます。例: yyyy.MM.dd |
|
|
いいえ |
ロケールから取得 |
はい |
指定された場合、その時間スタイルがすべてのinutDateコンポーネントで使用されます(例: HH:mm:ss)。 |
|
|
いいえ |
|
はい |
検証パネルがデフォルトで表示されます。ユーザーは、これをfalseに設定することで、非表示にできます。 |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
java.lang.Boolean |
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
|
はい |
trueの場合、デシジョン関数エディタのポップアップでデシジョン関数名が無効化されます。非推奨。dfEditorPrefsを使用し、isDisableDFName()をオーバーライドします。 |
|
|
いいえ |
|
はい |
trueの場合、デシジョン関数エディタのポップアップで、デシジョン・サービス名が表示されます。サービス名は「ルール・サービスとして呼出し」がチェックされている場合にのみ有効になります。非推奨。dfEditorPrefsを使用し、isDisplayWSName()をオーバーライドします。 |
|
|
いいえ |
|
はい |
trueの場合、デシジョン関数エディタのポップアップの「ルール・サービスとして呼出し」チェック・ボックスが表示されます。非推奨。dfEditorPrefsを使用し、isDisplayWSCheck()をオーバーライドします。 |
|
|
いいえ |
|
はい |
デシジョン関数エディタのポップアップの「入力」表で、追加、編集および削除の各操作が無効になります。非推奨。dfEditorPrefsを使用し、isDisableInputOps()をオーバーライドします。 |
|
|
いいえ |
|
はい |
デシジョン関数エディタのポップアップの「出力」表で、追加、編集および削除の各操作が無効になります。非推奨。dfEditorPrefsを使用し、isDisableOutputOps()をオーバーライドします。 |
|
|
いいえ |
|
はい |
「デシジョン関数の追加」ボタンが表示されます。非推奨。dfEditorPrefsを使用し、isDisableAddDF()をオーバーライドします。 |
|
|
いいえ |
|
はい |
「デシジョン関数の削除」ボタンが表示されます。非推奨。dfEditorPrefsを使用し、isDisableDeleteDF()をオーバーライドします。 |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
|
いいえ |
ロケールに基づく |
はい |
小数セパレータの指定に使用します。これは数値書式に使用されます。指定された場合、ロケールに基づく小数セパレータをオーバーライドします。 |
|
java.lang.Character |
いいえ |
ロケールに基づく |
はい |
グループ化セパレータの指定に使用します。これは数値書式に使用されます。指定された場合、ロケールに基づくグループ化セパレータをオーバーライドします。 |
|
|
いいえ |
|
はい |
検証パネルがデフォルトで縮小されているかどうかを指定するために使用されます。 |
|
|
いいえ |
ローカライズされたテキスト:ビジネス・ルール検証 - ログ |
はい |
検証パネルのタイトルを指定するために使用されます。 |
|
oracle.bpel.rulessha reddc.model.interfac es.ResourceManagerIn terface |
いいえ |
- |
はい |
翻訳UIのリソース・マネージャを指定するために使用されます。変換に関する項を参照してください。 |
|
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)を拡張し、必要なプリファレンスのみをオーバーライドできます。 |
|
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)を拡張し、必要なプリファレンスのみをオーバーライドできます。 |
|
|
いいえ |
|
はい |
非推奨であり使用されません。 |
|
oracle.bpel.decision funceditordc.listene r.DecisionFuncListen er |
いいえ |
- |
はい |
デシジョン関数エディタの更新の通知に使用します。非推奨。dfEditorPrefsを使用し、getDfListener()をオーバーライドします。 |
|
oracle.bpel.ruledict ionarydc.listener.De cisionFuncActionList ener |
いいえ |
- |
はい |
デシジョン関数が追加または削除された際の通知に使用します。非推奨。dfEditorPrefsを使用し、getDfActionListener()をオーバーライドします。 |
|
oracle.bpel.decision funceditordc.listene r.DecisionFuncServic eNameCustomizer |
いいえ |
- |
はい |
デシジョン関数のサービス名のカスタマイズに使用します。非推奨。dfEditorPrefsを使用し、getDfServiceNameCustomizer()をオーバーライドします。 |
|
oracle.bpel.ruledict ionarydc.model.inter faces.DictVersionInf o |
いいえ |
- |
はい |
比較用にディクショナリ・バージョンのリストを取得するための差分またはマージで使用します。非推奨。dfEditorPrefsを使用し、getDfServiceNameCustomizer()をオーバーライドします。 |
|
oracle.bpel.testedit ordc.interfaces.Test Executor |
いいえ |
- |
はい |
テスト・スイート、テスト・テンプレートおよびテスト・ケースに使用します。 |
|
|
いいえ |
|
はい |
trueの場合、ルールのテスト機能は無効になります。 |
|
|
いいえ |
|
はい |
trueの場合、言語化機能は無効になるため、「ビジネス・フレーズ」タブは表示されず、動詞ルールでのCRUD操作は無効になります。 |
|
oracle.bpel.ruledict ionarydc.listener.BO UpdateListener |
いいえ |
- |
はい |
ビジネス・オブジェクトの同期に使用します。 |
この項では、Oracle Business Rulesディクショナリ・エディタのタスク・フローについて説明します。ルール・ディクショナリ・エディタのタスク・フローを使用してアプリケーションを作成および実行し、アプリケーションをデプロイする方法についても説明します。
Oracleルール・ディクショナリ・エディタのタスク・フローは、基本的にはルール・ディクショナリ・エディタの宣言コンポーネントを囲むラッパーです。このタスク・フローは、タスク・フローが必要なADFベースのWebアプリケーションで、宣言コンポーネントのかわりに使用されます。ルール・ディクショナリ・エディタ・コンポーネントの詳細は、「Oracle Business Rulesディクショナリ・エディタの宣言コンポーネントの概要」を参照してください。
この項では、Oracleルール・ディクショナリ・エディタのタスク・フローを使用してサンプル・アプリケーションを作成および実行するための手順を示します。
Oracleルール・ディクショナリ・エディタのタスク・フローを使用してADFベースのWebアプリケーションを作成するための前提条件は、使用しているコンピュータでOracle SOA SuiteとOracle JDeveloperのインストールが実行されていることです。
最初のタスクはサンプル・アプリケーションの作成です。
Oracleルール・ディクショナリ・エディタのタスク・フローを使用してサンプル・アプリケーションを作成する手順は、次のとおりです。
Oracle JDeveloperを開きます。
「ファイル」メニューから、「新規」を選択し、次に「カスタム・アプリケーション」を選択して、アプリケーションを作成します。
図26-35に示すように、「アプリケーション名」フィールドにアプリケーションの名前(useRuleDictTaskFlowAppなど)を入力し、「次へ」をクリックします。
図26-36に示すように、「プロジェクト名」フィールドにuseRuleDictTaskFlowと入力し、「プロジェクト・テクノロジ」タブで「ADF Faces」が選択されていることを確認します。
「終了」をクリックしてプロジェクトを作成します。
Oracle JDeveloperの「アプリケーション」ウィンドウで「useRuleDictTaskFlow」プロジェクトを右クリックし、「プロジェクト・プロパティ」を選択して「プロジェクト・プロパティ」ダイアログ・ボックスを表示します。
「プロジェクト・プロパティ」ダイアログ・ボックスでは、次の手順に従います。
左側のパネルから「JSPタグ・ライブラリ」を選択します。
「追加」をクリックし、図26-37に示すように、「タグ・ライブラリの選択」ダイアログ・ボックスの「拡張機能」リストから「ADF Faces Components」を選択し、「OK」をクリックします。
左側のパネルから「ライブラリとクラスパス」を選択し、「ライブラリの追加」をクリックして「ライブラリの追加」ダイアログ・ボックスを表示します。
図26-38に示すように、「ライブラリ」リストでOracle RulesおよびOracle Rules Dictionaryタスク・フローを選択し、「OK」をクリックします。これにより、Rules SDKおよびルール・ディクショナリ・タスク・フローのJARがプロジェクトに追加されます。
「OK」をクリックして、「プロジェクト・プロパティ」ダイアログ・ボックスを閉じます。
Oracle JDeveloperの「ファイル」メニューから「すべて保存」をクリックし、プロジェクトを保存します。
soaComposerTemplates.jarに定義されているoracle.integration.console.metadata.model.share.MetadataDetailsインタフェースを実装するJavaクラスを作成しますMetadataDetailsインタフェースの詳細は、「MetadataDetailsインタフェース」を参照してください。
手順は、次のとおりです。
Oracle JDeveloperを開きます。
「ファイル」メニューから「新規」を選択して、「新規ギャラリ」ダイアログ・ボックスを表示します。
「新規ギャラリ」ダイアログ・ボックスの「カテゴリ」パネルから、「一般」の下にある「Java」を選択します。「項目」で「Javaクラス」が選択されていることを確認し、「OK」をクリックして「Javaクラスの作成」ダイアログ・ボックスを表示します。
Javaクラスの名前(MyMetaDataDetailsなど)を入力します。
図26-39に示すように、「オプション属性」の下の「実装」ボックスにMetadataDetailsインタフェースを追加し、「OK」をクリックして、プロジェクトに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 "";
}
}
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;
}
}
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;
}
}
faces-config.xmlファイルを概要モードで開き、「マネージドBean」の下の「+」ボタンをクリックして「マネージドBeanの作成」ダイアログ・ボックスを表示します。
図26-40に示すように、「Bean名」フィールドにMyBeanと入力し、「スコープ」リストでsessionを選択して、MyBean.javaを指し示します。
次のタスクは、ルール・ディクショナリ・エディタ・コンポーネント・タグを挿入する.jspxファイルの作成です。
ルール・ディクショナリ・エディタのタスク・フローを.jspxファイルに追加する手順は、次のとおりです。
タスク・フローを.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
次のタスクは、weblogic-application.xmlファイルからoracle.rulesおよびoracle.soa.rules_dict_dc.webapp共有ライブラリを参照することです。
共有ライブラリの参照方法は、「ルール・ディクショナリ・エディタ・コンポーネントを使用したサンプル・アプリケーションの作成および実行方法」を参照してください。
アプリケーションEARファイルをスタンドアロンOracle WebLogic Serverにデプロイする準備が整った場合は、次の手順を実行します。
Oracle WebLogic Server管理コンソール(http://host:port/console/login/LoginForm.jsp)を起動します。
デプロイメント・リストにoracle.rulesが表示されていることを確認します。
デプロイメント・リストにoracle.soa.rules_dict_dc.webappが表示されていることを確認します。
表示されていない場合は、「インストール」をクリックしてJDEV_INSTALL/jdeveloper/soa/modules/oracle.soa.rules_dict_dc.webapp_11.1.1/oracle.soa.rules_dict_dc.webapp.warファイルを選択します。
デプロイする必要があるプロジェクト(EARファイルを作成する場所)で、次の手順を実行します。
次の行をweblogic-application.xmlに追加します。
<library-ref> <library-name>oracle.rules</library-name> </library-ref>
次の行をプロジェクトWARファイルのweblogic.xmlに追加します。
<library-ref> <library-name>oracle.soa.rules_dict_dc.webapp</library-name> </library-ref>
EARファイルをOracle WebLogic Serverにデプロイします。
ルール・エディタ・コンポーネント、ルール・ディクショナリ・エディタ・コンポーネントまたはルール・ディクショナリ・エディタのタスク・フローを使用して作成されたアプリケーションは、ローカライズできます。
アプリケーションをローカライズする手順は、次のとおりです。
この機能は、ビジネス・ルールWeb UIの別名の翻訳をサポートしています。ロケールに従った別名を設定できます。ビジネス・ルールWeb UIで「変換」タブまたはリソース・エディタ・ポップアップを介して様々なロケール向けに別名の翻訳を編集することもできます。
別名の翻訳をサポートするために、再利用可能なルール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>
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;
}
}
}
別名の翻訳をサポートするために、ルールWeb UIアプリケーションのコンシューマは、ルール・ディクショナリDCまたはルールDCに属性を渡す必要があります。この属性は、タイプoracle.bpel.rulesshareddc.model.interface.ResourceManagerInterface.javaのインスタンスを受け入れるresourceManagerです。ただし、これらの追加のパラメータはオプションであり、コンシューマが拡張翻訳サポートを使用する場合にのみ必要です。
<rddc:ruleDictionaryDC ruleDictModel="#{SomeBean.ruleDictModel1}"
id="rddc1"
resourceManager="#{SomeBean.resourceManager}">
</rddc:ruleDictionaryDC>
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());
}
}
}