Oracle® Fusion Middleware Oracle SOA Suite開発者ガイド

11gリリース1 (11.1.1.7)

B56238-08(原本部品番号:E10224-13)

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

このガイドで説明する新機能

第I部 Oracle SOA Suiteの概要

1 Oracle SOA Suiteを使用したアプリケーション作成の概要

- 1.1 サービス指向アーキテクチャの概要

- 1.2 サービスの概要

- 1.3 Oracle SOA Suiteの概要

- 1.4 SOAを有効にするためにOracle SOA Suiteで使用する標準

- 1.5 SOAコンポジット・アプリケーション内のサービス・コンポーネント・アーキテクチャ

- 1.5.1 サービス・コンポーネント

- 1.5.2 バインディング・コンポーネント

- 1.5.3 ワイヤ

- 1.6 SOAコンポジット・アプリケーションの実行時の動作

- 1.6.1 サービス・インフラストラクチャ

- 1.6.2 サービス・エンジン

- 1.6.3 デプロイ済サービス・アーカイブ

- 1.7 SOAコンポジット・アプリケーション設計のアプローチ

- 1.8 Oracle SOA Suiteの理解

- 1.9 アクセシビリティ・オプション

- 1.9.1 Oracle SOAコンポーザでのアクセシビリティ機能の有効化方法

- 1.9.2 Oracle BPM Worklistでのアクセシビリティ機能の有効化方法

2 Oracle SOA Suiteを使用したSOAコンポジット・アプリケーションの開発

- 2.1 SOAアプリケーションの作成

- 2.1.1 SOAアプリケーションおよびプロジェクトの作成方法

- 2.1.2 SOAアプリケーションおよびプロジェクト作成時の処理内容

- 2.2 サービス・コンポーネントの追加

- 2.2.1 サービス・コンポーネントの追加方法

- 2.2.2 サービス・コンポーネントの追加と削除に関する注意事項

- 2.2.3 サービス・コンポーネントの編集方法

- 2.3 サービス・バインディング・コンポーネントの追加

- 2.3.1 サービス・バインディング・コンポーネントの追加方法

- 2.3.2 Webサービスのインタフェース(WSDL)の定義方法

- 2.3.3 スキーマの表示方法

- 2.3.4 サービス・バインディング・コンポーネントの編集方法

- 2.3.5 サービスの追加と削除に関する注意事項

- 2.3.6 同じコンポジットの異なるWSDLファイルでの同じネームスペースの使用に関する注意事項

- 2.3.7 SOAインフラストラクチャで内部および外部の両方のOracle HTTP Serverを使用する場合の「リソース・パレット」でのWSDL参照に関する注意事項

- 2.4 参照バインディング・コンポーネントの追加

- 2.4.1 参照バインディング・コンポーネントの追加方法

- 2.4.2 参照の追加と削除に関する注意事項

- 2.4.3 WSDL参照に関する注意事項

- 2.4.4 WSDLファイルでのメッセージ・タイプの混在に関する注意事項

- 2.4.5 コンポジットのデフォルト・リビジョンの起動に関する注意事項

- 2.5 ワイヤの追加

- 2.5.1 サービスとサービス・コンポーネントの接続方法

- 2.5.2 サービス・コンポーネントと参照の接続方法

- 2.5.3 ワイヤの追加と削除に関する注意事項

- 2.6 セキュリティの追加

- 2.7 SOAコンポジット・アプリケーションのデプロイ

- 2.7.1 デプロイ済SOAコンポジット・アプリケーションの起動方法

- 2.8 SOAコンポジット・アプリケーションの管理とテスト

- 2.8.1 Oracle JDeveloperでのデプロイ済SOAコンポジット・アプリケーションの管理方法

- 2.8.2 デプロイ済SOAコンポジット・アプリケーションのテスト方法

3 SOAサンプル・アプリケーションの概要

- 3.1 Fusion Order Demoの概要

- 3.1.1 ストアフロント・モジュール

- 3.1.2 WebLogic Fusion Order Demoアプリケーション

- 3.2 Fusion Order Demoアプリケーションの設定

- 3.2.1 タスク1: Oracle JDeveloper Studioのインストール

- 3.2.2 タスク2: Fusion Order Demoアプリケーションのインストール

- 3.2.3 タスク3: Oracle SOA Suiteのインストール

- 3.3 WebLogic Fusion Order Demoアプリケーションの内容

- 3.3.1 WebLogic Fusion Order Demoアプリケーションのプロジェクト・アプリケーション

- 3.3.2 composite.xmlファイル

- 3.4 OrderBookingCompositeフローの理解

- 3.5 Fusion Order Demoのデプロイ

- 3.5.1 タスク1: Oracle WebLogic Serverへの接続の作成

- 3.5.2 (オプション)タスク2: Oracle BAMサーバーへの接続の作成

- 3.5.3 タスク3: Fusion Order Demoアプリケーションのスキーマのインストール

- 3.5.4 タスク4: ストアフロント・モジュールの構成プロパティの設定

- 3.5.5 タスク5: データベース接続の編集

- 3.5.6 タスク6: ストアフロント・モジュールのデプロイ

- 3.5.7 タスク7: WebLogic Fusion Order Demoアプリケーションのデプロイ

- 3.6 WebLogic Fusion Order Demoの実行

- 3.7 Oracle BAMサーバーに送信されたデータの表示

- 3.8 WebLogic Fusion Order Demoアプリケーションのコンポジットのアンデプロイ

第II部 BPELプロセス・サービス・コンポーネントの使用

4 Oracle BPEL Process Managerの基本操作

- 4.1 BPELプロセス・サービス・コンポーネントの概要

- 4.1.1 BPELプロセス・サービス・コンポーネントの追加方法

- 4.2 アクティビティの概要

- 4.3 パートナ・リンクの概要

- 4.4 パートナ・リンクの作成

- 4.4.1 パートナ・リンクの作成方法

- 4.4.1.1 アウトバウンド・アダプタのパートナ・リンク

- 4.4.1.2 インバウンド・アダプタのパートナ・リンク

- 4.4.1.3 抽象的なWSDLからサービスをコールするパートナ・リンク

- 4.4.1.4 抽象的なWSDLからサービスを実装するパートナ・リンク

- 4.4.1.5 パートナ・リンクとヒューマン・タスクまたはビジネス・ルール

- 4.4.1.6 既存のヒューマン・タスク、ビジネス・ルールまたはOracle Mediatorからのパートナ・リンク

- 4.5 アダプタの概要

- 4.6 BPELプロセス・モニターの概要

5 BPELプロセスの相互作用パターンの概要

- 5.1 一方向メッセージの概要

- 5.1.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

- 5.1.2 サービスとしてのBPELプロセス・サービス・コンポーネント

- 5.2 同期相互作用の概要

- 5.2.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

- 5.2.2 サービスとしてのBPELプロセス・サービス・コンポーネント

- 5.2.3 非同期プロセスを起動する同期BPELプロセス

- 5.3 非同期相互作用の概要

- 5.3.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

- 5.3.2 サービスとしてのBPELプロセス・サービス・コンポーネント

- 5.4 タイムアウト付き非同期相互作用の概要

- 5.4.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

- 5.4.2 サービスとしてのBPELプロセス・サービス・コンポーネント

- 5.5 通知タイマー付き非同期相互作用の概要

- 5.5.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

- 5.5.2 サービスとしてのBPELプロセス・サービス・コンポーネント

- 5.6 1リクエストと複数レスポンスの概要

- 5.6.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

- 5.6.2 サービスとしてのBPELプロセス・サービス・コンポーネント

- 5.7 1リクエストと二者択一レスポンスの概要

- 5.7.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

- 5.7.2 サービスとしてのBPELプロセス・サービス・コンポーネント

- 5.8 1リクエストと必須/オプション・レスポンスの概要

- 5.8.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

- 5.8.2 サービスとしてのBPELプロセス・サービス・コンポーネント

- 5.9 部分処理の概要

- 5.9.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

- 5.9.2 サービスとしてのBPELプロセス・サービス・コンポーネント

- 5.10 複数アプリケーション間の相互作用の概要

6 BPELプロセスでのXMLデータの操作

- 6.1 BPELプロセスでのXMLデータの操作の概要

- 6.1.1 BPELプロセスのXMLデータ

- 6.1.2 assignアクティビティでのデータ操作およびXPath標準

- 6.2 データ・プロバイダ・サービスへのXMLデータ操作の委任

- 6.2.1 エンティティ変数の作成方法

- 6.2.1.1 インバウンド方向のSDOの動作の理解

- 6.2.1.2 アウトバウンド方向のSDO動作の理解

- 6.2.1.3 エンティティ変数の作成とパートナ・リンクの選択

- 6.2.1.4 バインディング・キーの作成

- 6.3 スタンドアロンSDOベースの変数の使用

- 6.3.1 SDOベースの変数の宣言方法

- 6.3.2 XMLからSDOへの変換方法

- 6.4 式定数またはリテラルXMLでの変数の初期化

- 6.4.1 リテラルXML要素の割当て方法

- 6.5 変数間のコピー

- 6.5.1 変数間でのコピー方法

- 6.5.2 BPEL 2.0のインラインfrom-specを使用した変数の初期化

- 6.6 要素変数およびメッセージ・タイプ変数内のフィールドへのアクセス

- 6.6.1 要素ベース変数およびメッセージ・タイプベース変数内のフィールドへのアクセス方法

- 6.7 数値の割当て

- 6.7.1 数値の割当て方法

- 6.8 XPath標準による数学的計算の使用

- 6.8.1 XPath標準による数学的計算の使用方法

- 6.9 文字列リテラルの割当て

- 6.9.1 文字列リテラルの割当て方法

- 6.10 文字列の連結

- 6.10.1 文字列の連結方法

- 6.11 ブール値の割当て

- 6.11.1 ブール値の割当て方法

- 6.12 日付または時刻の割当て

- 6.12.1 日付または時刻の割当て方法

- 6.13 属性の操作

- 6.13.1 属性の操作方法

- 6.14 bpelx拡張要素を使用したXMLデータの操作

- 6.14.1 bpelx:appendの使用方法

- 6.14.1.1 BPEL 1.1のbpelx:append

- 6.14.1.2 BPEL 2.0のbpelx:append

- 6.14.2 bpelx:insertBeforeの使用方法

- 6.14.2.1 BPEL 1.1のbpelx:insertBefore

- 6.14.2.2 BPEL 2.0のbpelx:insertBefore

- 6.14.3 bpelx:insertAfterの使用方法

- 6.14.3.1 BPEL 1.1のbpelx:insertAfter

- 6.14.3.2 BPEL 2.0のbpelx:insertAfter

- 6.14.4 bpelx:removeの使用方法

- 6.14.4.1 BPEL 1.1のbpelx:remove

- 6.14.4.2 BPEL 2.0のbpelx:remove

- 6.14.5 bpelx:renameおよびXSDタイプ・キャストの使用方法

- 6.14.5.1 BPEL 1.1のbpelx:rename

- 6.14.5.2 BPEL 2.0のbpelx:rename

- 6.14.6 bpelx:copyListの使用方法

- 6.14.6.1 BPEL 1.1のbpelx:copyList

- 6.14.6.2 BPEL 2.0のbpelx:copyList

- 6.14.7 assign拡張要素の属性の使用方法

- 6.14.7.1 ignoreMissingFromData属性

- 6.14.7.2 insertMissingToData属性

- 6.14.7.3 keepSrcElementName属性

- 6.15 XMLデータの検証

- 6.15.1 BPEL 1.1のXMLデータの検証方法

- 6.15.2 BPEL 2.0のXMLデータの検証方法

- 6.16 BPEL 2.0のメッセージ交換アクティビティでの要素変数の使用

- 6.17 BPEL 2.0でのWSDLメッセージ・パートのマップ

- 6.17.1 WSDLメッセージ・パートのマップ方法

- 6.17.2 WSDLメッセージ・パートのマップ時の処理内容

- 6.18 BPEL 2.0でのプロセス定義のインポート

- 6.19 配列に類似したXMLデータ・シーケンスの操作

- 6.19.1 配列を使用するXMLデータ・シーケンスへの静的な索引付け方法

- 6.19.2 SOAPでエンコードされた配列の使用方法

- 6.19.2.1 BPEL 2.0のSOAPでエンコードされた配列

- 6.19.2.2 スキーマ内でwsdl:arrayType属性を使用したSOAP配列の宣言

- 6.19.3 シーケンス・サイズの決定方法

- 6.19.4 式の末尾へのXPathの適用による動的な索引付け方法

- 6.19.4.1 getVariableDataの結果の末尾へのXPathの適用

- 6.19.4.2 bpelx:append拡張要素によるシーケンスへの新しい項目の追加

- 6.19.4.3 データ・シーケンスのマージ

- 6.19.4.4 空要素の配列と等価の機能の生成

- 6.19.5 配列識別子の使用に関する注意事項

- 6.20 文字列からXML要素への変換

- 6.20.1 文字列からXML要素への変換方法

- 6.21 ドキュメント形式とRPC形式のWSDLの違いの理解

- 6.21.1 RPC形式ファイルの使用方法

- 6.22 BPELでのSOAPヘッダーの操作

- 6.22.1 BPELでのSOAPヘッダーの受信方法

- 6.22.2 BPELでのSOAPヘッダーの送信方法

- 6.23 BPEL 2.0での拡張ネームスペースの宣言

- 6.23.1 拡張ネームスペースの宣言方法

- 6.23.2 拡張機能作成時の処理内容

7 BPELプロセスからの同期Webサービスの起動

- 7.1 同期Webサービスの起動に関する概要

- 7.2 同期Webサービスの起動

- 7.2.1 同期Webサービスの起動方法

- 7.2.2 同期Webサービス起動時の処理内容

- 7.2.2.1 BPELコード内のパートナ・リンク

- 7.2.2.2 BPELコード内のパートナ・リンク・タイプとポート・タイプ

- 7.2.2.3 リクエストを実行するためのinvokeアクティビティ

- 7.2.2.4 BPELコードでの同期起動

- 7.3 永続同期プロセスのトランザクションのタイムアウト値の指定

- 7.3.1 トランザクションのタイムアウト値の指定方法

- 7.3.2 SyncMaxWaitTimeとタイムアウトのない永続同期リクエストに関する注意事項

- 7.4 同期BPELプロセスを使用した一方向メディエータのコール

8 BPELプロセスからの非同期Webサービスの起動

- 8.1 非同期Webサービスの起動に関する概要

- 8.2 非同期Webサービスの起動

- 8.2.1 非同期Webサービスの起動方法

- 8.2.1.1 非同期サービスに対するパートナ・リンクの追加

- 8.2.1.2 invokeアクティビティの追加

- 8.2.1.3 receiveアクティビティの追加

- 8.2.1.4 その他のアクティビティの実行

- 8.2.2 非同期Webサービス起動時の処理内容

- 8.2.2.1 WSDLファイルのportTypeセクション

- 8.2.2.2 WSDLファイルのpartnerLinkTypeセクション

- 8.2.2.3 BPELファイルのパートナ・リンク・セクション

- 8.2.2.4 コンポジット・アプリケーション・ファイル

- 8.2.2.5 invokeアクティビティとreceiveアクティビティ

- 8.2.2.6 新しいインスタンスを開始するためのcreateInstance属性

- 8.2.2.7 長期間にわたる非同期プロセスを保持するためのデハイドレーション・ポイント

- 8.2.2.8 複数のランタイム・エンドポイント・ロケーション

- 8.2.3 複数のクライアント・コンポーネントによる1つのコンポジットの起動に関する注意事項

- 8.2.4 BPEL 2.0 IMAサポートの制限に関する注意事項

- 8.2.5 対話ID指定時の処理内容

- 8.2.5.1 BPEL 1.1のbpelx:conversationId

- 8.2.5.2 BPEL 2.0のbpelx:conversationId

- 8.3 複数のreceiveまたはpickアクティビティで同じパートナ・リンクが使用されている場合における適切なエンドポイントへのコールバック・メッセージのルーティング

- 8.3.1 複数のreceiveまたはpickアクティビティで同じパートナ・リンクが使用されている場合における適切なエンドポイントへのコールバック・メッセージのルーティング

- 8.4 パートナ・リンク操作レベルでの冪等性の管理

- 8.4.1 パートナ・リンク操作レベルでの冪等性の管理方法

- 8.5 実行時に使用するための動的パートナ・リンクの設計時の作成

- 8.5.1 実行時に使用するための動的パートナ・リンクの設計時の作成方法

- 8.6 動的パートナ・リンクを起動する際のセキュリティ証明書のオーバーライド

- 8.7 動的パートナ・リンクのWSDLファイルのオーバーライド

- 8.8 非同期サービスでのWS-Addressingの使用

- 8.8.1 非同期サービスでのWS-Addressingの使用方法

- 8.8.1.1 プログラム間で交換されるメッセージを表示するためのTCPトンネリングの使用方法

9 相関セットおよびメッセージ集約の使用

- 9.1 非同期サービスでの相関セットの使用

- 9.1.1 非同期サービスでの相関セットの使用方法

- 9.1.1.1 ステップ1: プロジェクトの作成

- 9.1.1.2 ステップ2: パートナ・リンクとファイル・アダプタ・サービスの構成

- 9.1.1.3 ステップ3: 3つのreceiveアクティビティの作成

- 9.1.1.4 ステップ4: 相関セットの作成

- 9.1.1.5 ステップ5: 相関セットとreceiveアクティビティの関連付け

- 9.1.1.6 ステップ6: プロパティ・エイリアスの作成

- 9.1.1.7 ステップ7: WSDLファイルのコンテンツの確認

- 9.1.2 変換IDおよび異なるコンポジット・リビジョンに関する注意事項

- 9.1.3 複数のパートを持つfromParts要素を使用したIMAの相関の設定に関する注意事項

- 9.2 同じインスタンスへのメッセージのルーティング

- 9.2.1 BPELプロセス・インスタンス作成の構成方法

- 9.2.2 receiveアクティビティのエントリと中間プロセスのreceiveアクティビティで同じ操作を使用する方法

- 9.2.3 相関セット使用時の新規インスタンスまたは既存インスタンスへのメッセージのルーティング方法

10 BPELプロセスでのパラレル・フローの使用

- 10.1 BPELプロセスでのパラレル・フローの概要

- 10.1.1 シングル・スレッドでのフローのブランチのパラレル実行に関する注意事項

- 10.2 パラレル・フローの作成

- 10.2.1 パラレル・フローの作成方法

- 10.2.2 パラレル・フロー作成時の処理内容

- 10.2.3 flowアクティビティ内のアクティビティ実行の同期化

- 10.2.4 flowアクティビティ内のアクティビティ間に同期を作成する方法

- 10.2.5 flowアクティビティ内のアクティビティ間に同期を作成するときの処理内容

- 10.2.6 ターゲット・アクティビティの結合条件に関する注意事項

- 10.3 パラレル・ブランチ数のカスタマイズ

- 10.3.1 BPEL 1.1のflowNアクティビティによるflowアクティビティ数のカスタマイズ

- 10.3.1.1 flowNアクティビティの作成方法

- 10.3.1.2 flowNアクティビティ作成時の処理内容

- 10.3.2 BPEL 2.0のforEachアクティビティによるアクティビティの複数のセットの処理

- 10.3.2.1 forEachアクティビティの作成方法

- 10.3.2.2 forEachアクティビティ作成時の処理内容

11 BPELプロセスでの条件分岐の使用

- 11.1 条件分岐の概要

- 11.2 switchまたはifアクティビティによる条件分岐の定義

- 11.2.1 BPEL 1.1のswitchアクティビティの作成による条件分岐の定義

- 11.2.1.1 switchアクティビティの作成方法

- 11.2.1.2 switchアクティビティ作成時の処理内容

- 11.2.2 BPEL 2.0のifアクティビティの作成による条件分岐の定義

- 11.2.2.1 ifアクティビティの作成方法

- 11.2.2.2 ifアクティビティ作成時の処理内容

- 11.3 whileアクティビティによる条件分岐の定義

- 11.3.1 whileアクティビティの作成方法

- 11.3.2 whileアクティビティ作成時の処理内容

- 11.4 repeatUntilアクティビティによる条件分岐の定義

- 11.4.1 repeatUntilアクティビティの作成方法

- 11.4.2 repeatUntilアクティビティ作成時の処理内容

- 11.5 アクティビティの実行をバイパスするためのXPath式の指定

- 11.5.1 アクティビティの実行をバイパスするためのXPath式の指定方法

- 11.5.2 アクティビティの実行をバイパスするためのXPath式指定時の処理内容

12 BPELプロセスでのフォルト処理の使用

- 12.1 フォルト・ハンドラの概要

- 12.2 BPEL標準フォルトの概要

- 12.2.1 BPEL 1.1の標準フォルト

- 12.2.2 BPEL 2.0の標準フォルト

- 12.2.2.1 BPEL 2.0でのフォルト処理の優先順位

- 12.3 BPELフォルトのビジネスおよび実行時のフォルト・カテゴリの概要

- 12.3.1 ビジネス・フォルト

- 12.3.2 実行時フォルト

- 12.3.2.1 bindingFault

- 12.3.2.2 remoteFault

- 12.3.2.3 replayFault

- 12.3.3 同期BPELプロセスでのフォルト処理の追加および伝播方法

- 12.3.3.1 スキーマおよびWSDLファイルの編集

- 12.3.3.2 フォルト・ハンドラの追加

- 12.3.3.3 フォルト・レスポンス変数の作成

- 12.3.3.4 Catch Activityブランチへのassignアクティビティの追加

- 12.3.3.5 Catch Activityブランチへのreplyアクティビティの追加

- 12.4 フォルト管理フレームワークを使用したフォルトの処理

- 12.4.1 フォルト・ポリシーの設計方法

- 12.4.1.1 フォルト・ポリシー・バインディングによる解決方法の理解

- 12.4.1.2 自動フォルト・リカバリに対するフォルト・ポリシー・ファイルの作成

- 12.4.1.3 フォルト・ポリシー・バインディングへのフォルト・ポリシーの関連付け

- 12.4.1.4 その他のフォルト・ポリシーおよびフォルト・ポリシー・バインディング・ファイルのサンプル

- 12.4.1.5 複数の拒否ハンドラがあるフォルト・ポリシーの設計

- 12.4.2 フォルト・ポリシーの実行方法

- 12.4.3 Javaアクション・フォルト・ポリシーの使用方法

- 12.4.4 Oracle BPM Suiteに対してフォルト・ポリシーを設計する方法

- 12.4.5 インスタンス再試行回数を超過した場合のフォルト管理動作に関する注意事項

- 12.4.6 同じフロー内に複数のフォルトがある再試行アクションの実行に関する注意事項

- 12.4.7 フォルト・ポリシー再試行中のバインディング・レベル再試行に関する注意事項

- 12.4.8 ora-javaオプションの定義に関する注意事項

- 12.5 BPEL実行時フォルトの捕捉

- 12.5.1 BPEL実行時フォルトの捕捉方法

- 12.6 getFaultAsString XPath拡張関数によるフォルト詳細の取得

- 12.6.1 getFaultAsString XPath拡張関数によるフォルト詳細の取得方法

- 12.7 throwアクティビティによる内部フォルトのスロー

- 12.7.1 throwアクティビティの作成方法

- 12.7.2 throwアクティビティ作成時の処理内容

- 12.8 rethrowアクティビティによるフォルトの再スロー

- 12.8.1 rethrowアクティビティの作成方法

- 12.8.2 フォルト再スロー時の処理内容

- 12.9 外部フォルトを返す

- 12.9.1 同期相互作用でフォルトを返す方法

- 12.9.2 非同期相互作用でフォルトを返す方法

- 12.10 scopeアクティビティによるアクティビティ・グループの管理

- 12.10.1 scopeアクティビティの作成方法

- 12.10.2 scopeアクティビティへの説明ノートおよびイメージの追加

- 12.10.3 scopeアクティビティ作成後の処理内容

- 12.10.4 スコープに関する注意事項

- 12.10.5 スコープ内のフォルト・ハンドラの使用方法

- 12.10.6 idempotentプロパティとフォルト処理に関する注意事項

- 12.10.7 スコープでのcatchアクティビティの作成方法

- 12.10.8 スコープでのcatchアクティビティ作成時の処理内容

- 12.10.9 操作なしの命令をビジネス・プロセスに挿入するemptyアクティビティの作成方法

- 12.10.10 emptyアクティビティ作成時の処理内容

- 12.11 replayアクティビティによるscopeアクティビティ内でのアクティビティの再実行

- 12.11.1 replayアクティビティの作成方法

- 12.11.2 replayアクティビティ作成時の処理内容

- 12.12 一連の操作を元に戻した後の補正の使用

- 12.12.1 compensateアクティビティの使用

- 12.12.2 compensateアクティビティの作成方法

- 12.12.3 compensateアクティビティ作成時の処理内容

- 12.12.4 BPEL 2.0のcompensateScopeアクティビティの使用

- 12.12.5 compensateScopeアクティビティの作成方法

- 12.12.6 compensateScopeアクティビティ作成時の処理内容

- 12.13 terminateアクティビティまたはexitアクティビティによるビジネス・プロセス・インスタンスの停止

- 12.13.1 BPEL 1.1のterminateアクティビティによるビジネス・プロセス・インスタンスの停止

- 12.13.1.1 terminateアクティビティの作成方法

- 12.13.1.2 terminateアクティビティ作成時の処理内容

- 12.13.2 BPEL 2.0のexitアクティビティによるビジネス・プロセス・インスタンスの即時終了

- 12.13.2.1 exitアクティビティの作成方法

- 12.13.2.2 exitアクティビティ作成時の処理内容

- 12.14 アサーション条件によるフォルトのスロー

- 12.14.1 アサーション条件の概要

- 12.14.1.1 bpelx:postAssertおよびbpelx:preAssert拡張要素

- 12.14.1.2 faultName属性とmessage属性の使用

- 12.14.1.3 複数のアサーション

- 12.14.1.4 組込みおよびカスタムのXPath関数と$variable参照の使用

- 12.14.1.5 インスタンス監査証跡に対するイベントのアサーション条件評価ロギング

- 12.14.1.6 XMLスキーマ・ブール値タイプに評価されない式によるフォルトのスロー

- 12.14.1.7 スタンドアロンassertアクティビティのアサーション条件

- 12.14.2 アサーション条件の作成方法

- 12.14.3 アサーションを無効にする方法

- 12.14.4 アサーション条件作成時の処理内容

13 BPELプロセスでのトランザクションおよびフォルト伝播のセマンティクス

- 13.1 トランザクション・セマンティクスの概要

- 13.1.1 Oracle BPEL Process Managerのトランザクション・セマンティクス

- 13.1.1.1 bpel.config.transactionがrequiresNewに設定されているBPELCalleeプロセスがBPELCallerプロセスによってコールされる

- 13.1.1.2 bpel.config.transactionがrequiredに設定されているBPELCalleeプロセスがBPELCallerプロセスによってコールされる

- 13.2 一方向起動の実行の概要

14 BPELプロセスへのJavaおよびJava EEコードの組込み

- 14.1 BPELプロセスのJavaおよびJava EEコードの概要

- 14.2 BPELプロセスへのJavaおよびJava EEコードの組込み

- 14.2.1 JavaコードをSOAPサービスとしてラップする方法

- 14.2.2 SOAPサービスとしてのJavaコードのラップに関する注意事項

- 14.2.3 bpelx:execタグを使用してBPELプロセスにJavaコード・スニペットを埋め込む方法

- 14.2.4 BPEL 2.0プロセスにJavaコード・スニペットを埋め込む方法

- 14.2.5 XML Facadeを使用してDOM操作を単純化する方法

- 14.2.6 bpelx:exec組込みメソッドを使用する方法

- 14.2.7 サービス・インタフェースにラップされたJavaコードを使用する方法

- 14.3 カスタム・クラスおよびJARファイルの追加

- 14.3.1 カスタム・クラスおよびJARファイルの追加方法

- 14.4 Oracle JDeveloperのBPELプロセスでのJava埋込みの使用

- 14.4.1 Oracle JDeveloperのBPELプロセスでのJava埋込みの使用方法

- 14.4.2 Java Embeddingアクティビティでのthread.sleep()の使用に関する注意事項

- 14.5 bpelx:execによるサービス・データ・オブジェクトの埋込み

- 14.6 Oracle BPEL Process Managerとのクラスのカスタム実装の共有

- 14.6.1 BPEL接続マネージャ・クラスが優先されるように構成する方法

15 BPELプロセスでのイベントおよびタイムアウトの使用

- 15.1 イベントおよびタイムアウトの概念に関する概要

- 15.2 プロセスの継続または待機を選択するpickアクティビティの作成

- 15.2.1 pickアクティビティの作成方法

- 15.2.2 pickアクティビティ作成時の処理内容

- 15.2.3 BPEL 2.0の同時onMessageブランチに関する注意事項

- 15.3 receiveアクティビティのリクエスト/リプライ操作および入力専用操作に対するタイムアウトの設定

- 15.3.1 リクエスト・リプライ操作および入力専用操作に対するタイムアウトの概要

- 15.3.1.1 アクティビティの起動時からの相対的なタイムアウト設定

- 15.3.1.2 絶対的な日時でのタイムアウト設定

- 15.3.1.3 XPath式を使用して動的に計算されるタイムアウト設定

- 15.3.1.4 アクティビティ・タイムアウト時にスローされるbpelx:timeoutフォルト

- 15.3.1.5 アクティビティ・タイムアウト時にBPELインスタンス監査証跡に追加されるイベント

- 15.3.1.6 サーバー再起動時にリカバリ可能なタイムアウト・アクティビティ(有効期限アラーム表のリフレッシュ)

- 15.3.2 receiveアクティビティのタイムアウトの設定方法

- 15.3.3 receiveアクティビティのタイムアウト設定時の処理内容

- 15.4 有効期限を設定するwaitアクティビティの作成

- 15.4.1 最小待機時間の指定方法

- 15.4.2 waitアクティビティの作成方法

- 15.4.3 waitアクティビティ作成時の処理内容

- 15.5 BPEL 2.0のOnEventブランチを使用してメッセージ着信を待機するためのイベントの指定

- 15.5.1 scopeアクティビティでのonEventブランチの作成方法

- 15.5.2 OnEventブランチ作成時の処理内容

- 15.6 永続同期プロセスに対するタイムアウトの設定

16 マスター・プロセスと詳細プロセスの調整

- 16.1 マスター・プロセスと詳細プロセスの調整に関する概要

- 16.1.1 マスター・プロセスに対するBPELファイル定義

- 16.1.1.1 マスター・プロセスと複数の詳細プロセスの相関

- 16.1.2 詳細プロセスに対するBPELファイル定義

- 16.2 Oracle JDeveloperでのマスター・プロセスと詳細プロセスの調整の定義

- 16.2.1 マスター・プロセスの作成方法

- 16.2.2 詳細プロセスの作成方法

- 16.2.3 invokeアクティビティの作成方法

17 通知サービスの使用

- 17.1 通知サービスの概要

- 17.2 通知チャネル設定の概要

- 17.3 BPELプロセスの設計での通知チャネルの選択

- 17.3.1 電子メール通知チャネルの構成方法

- 17.3.1.1 電子メール添付ファイルの設定

- 17.3.1.2 電子メール・メッセージ本文のHTMLとしての書式設定

- 17.3.1.3 CDATA関数を必要とするメッセージ・コンテンツに対する動的HTMLの使用

- 17.3.2 IM通知チャネルの構成方法

- 17.3.3 SMS通知チャネルの構成方法

- 17.3.4 ボイス通知チャネルの構成方法

- 17.3.5 電子メール・アドレスと電話番号を動的に選択する方法

- 17.3.6 ユーザー・ディレクトリの参照による通知受信者の選択方法

- 17.4 エンド・ユーザーによる通知チャネル選択の許可

- 17.4.1 エンド・ユーザーによる通知チャネルの選択を許可する方法

- 17.4.1.1 通知のヘッダーの作成および送信方法

18 Oracle BPEL Process Managerセンサーの使用

- 18.1 Oracle BPEL Process Managerセンサーの概要

- 18.2 Oracle JDeveloperでのセンサーとセンサー・アクションの構成

- 18.2.1 センサーとセンサー・アクションへのアクセス方法

- 18.2.2 アクティビティ、変数、フォルトの各センサーの構成方法

- 18.2.3 センサー・アクションの構成方法

- 18.2.4 リモート・トピックおよびキューへのパブリッシュ方法

- 18.2.5 カスタム・データ・パブリッシャの作成方法

- 18.2.6 composite.xmlへのセンサーとセンサー・アクションの登録方法

- 18.3 Oracle Enterprise Manager Fusion Middleware Controlコンソールでのセンサーの定義とセンサー・アクション定義の表示

第III部 Oracle Mediatorサービス・コンポーネントの使用

19 Oracle Mediatorの開始

- 19.1 Oracle Mediatorの概要

- 19.2 メディエータの機能

- 19.2.1 コンテンツ・ベースおよびヘッダー・ベースのルーティング

- 19.2.2 同期および非同期の相互作用

- 19.2.3 メッセージの順次およびパラレルのルーティング

- 19.2.4 メッセージの再順序付け

- 19.2.5 データ・トランスフォーメーション

- 19.2.6 ペイロード検証

- 19.2.7 Javaコールアウト

- 19.2.8 イベント処理

- 19.2.9 動的ルーティング

- 19.2.10 エラー処理

- 19.2.11 コール元へのメッセージの返信(エコー)

- 19.2.12 複数パート・メッセージ

- 19.3 メディエータ・エディタ環境の概要

- 19.4 メディエータの作成

- 19.4.1 メディエータの作成方法

- 19.5 メディエータのインタフェース定義の構成

- 19.5.1 メディエータのインタフェース定義の構成方法

- 19.5.2 メディエータ作成時の処理内容

- 19.5.2.1 インタフェース定義を使用しない

- 19.5.2.2 WSDLベースのインタフェースを使用

- 19.5.2.3 一方向インタフェース定義を使用

- 19.5.2.4 同期インタフェース定義を使用

- 19.5.2.5 非同期インタフェース定義を使用

- 19.5.2.6 イベント・サブスクリプションを使用

- 19.6 メディエータのインタフェースの定義

- 19.6.1 メディエータのインタフェースの定義方法

- 19.7 WSDLファイルの生成

- 19.7.1 WSDLファイルの生成方法

- 19.8 検証および優先度のプロパティの指定

- 19.9 メディエータ・サービス・コンポーネントの変更

- 19.9.1 メディエータの操作の変更方法

- 19.9.2 メディエータのイベント・サブスクリプションの変更方法

20 Oracle Mediatorルーティング・ルールの作成

- 20.1 ルーティング・ルールの概要

- 20.1.1 静的ルーティング・ルール

- 20.1.1.1 静的ルールのタイプ

- 20.1.1.2 静的ルーティング・ルール・コンポーネント

- 20.1.2 動的ルーティング・ルール

- 20.1.3 順次実行およびパラレル実行

- 20.1.3.1 順次ルーティング・ルールの基本原則

- 20.1.3.2 パラレルのルーティング・ルールの基本原則

- 20.2 再順序付けルール

- 20.3 ルーティング・ルールの定義

- 20.3.1 「ルーティング・ルール」セクションへのアクセス方法

- 20.3.2 静的ルーティング・ルールの作成方法

- 20.3.2.1 メディエータ・サービスまたはイベントの指定方法

- 20.3.2.2 サービスのエコーに関する注意事項

- 20.3.2.3 順次実行またはパラレル実行の指定方法

- 20.3.2.4 レスポンス・メッセージの構成方法

- 20.3.2.5 早すぎるコールバックの処理方法

- 20.3.2.6 複数コールバックの処理方法

- 20.3.2.7 フォルトの処理方法

- 20.3.2.8 メッセージをフィルタリングする式の指定方法

- 20.3.2.9 トランスフォーメーションの作成方法

- 20.3.2.10 値の割当て方法

- 20.3.2.11 assignアクティビティに関する注意事項

- 20.3.2.12 フィルタおよび割当てのためのヘッダー・アクセス方法

- 20.3.2.13 セマンティク検証の使用方法

- 20.3.2.14 添付ファイルの処理方法

- 20.3.2.15 Javaコールアウトの使用方法

- 20.3.3 動的ルーティング・ルールの作成方法

- 20.3.4 動的ルーティング・ルールの使用に関する注意事項

- 20.3.5 デフォルト・ルーティング・ルールの定義方法

- 20.3.5.1 デフォルト・ルールのシナリオ

- 20.3.5.2 デフォルト・ルールのターゲット

- 20.3.5.3 デフォルト・ルール: 検証、トランスフォーメーションおよび割当て機能

- 20.3.5.4 デフォルト・ルール: Javaコールアウト

- 20.3.5.5 デフォルト・ルール: メディエータ.mplanファイル

- 20.4 メディエータ・ルーティングのユースケース

21 Oracle Mediatorにおける複数パート・メッセージの使用

- 21.1 メディエータのマルチパート・メッセージ・サポートの概要

- 21.2 マルチパートのリクエスト・メッセージの使用

- 21.2.1 マルチパートのリクエスト・メッセージに対するフィルタ式の指定方法

- 21.2.2 マルチパートのリクエスト・メッセージに対する検証の追加方法

- 21.2.3 マルチパートのリクエスト・メッセージに対するトランスフォーメーションの作成方法

- 21.2.4 マルチパートのリクエスト・メッセージに対する値の割当て方法

- 21.2.5 マルチパートのリプライ、フォルトおよびコールバック用ソース・メッセージの使用方法

- 21.2.6 マルチパートのターゲット・メッセージの使用方法

22 Oracle Mediatorエラー処理の使用

- 22.1 メディエータのエラー処理の概要

- 22.1.1 フォルト・ポリシー

- 22.1.1.1 条件

- 22.1.1.2 アクション

- 22.1.2 フォルト・バインディング

- 22.1.3 メディエータのエラー・グループ

- 22.2 メディエータによるエラー処理の使用

- 22.2.1 メディエータ・サービス・コンポーネントに対するエラー処理の使用方法

- 22.2.2 実行時の処理内容

- 22.3 Oracle Enterprise Manager Fusion Middleware Controlコンソールを使用したフォルト・リカバリ

- 22.4 XMLスキーマ定義ファイルのエラー処理

- 22.4.1 fault-policies.xmlのスキーマ定義ファイル

- 22.4.2 fault-bindings.xmlのスキーマ定義ファイル

23 Oracle Mediatorにおける再順序付け

- 23.1 再シーケンサの概要

- 23.1.1 グループおよび順序ID

- 23.1.2 グループIDと順序IDの識別

- 23.2 再順序付けの順序

- 23.2.1 標準再シーケンサ

- 23.2.1.1 標準再シーケンサの概要

- 23.2.1.2 標準の再順序付けに必要な情報

- 23.2.1.3 標準再シーケンサの例

- 23.2.2 FIFO再シーケンサ

- 23.2.2.1 FIFO再シーケンサの概要

- 23.2.2.2 FIFO再順序付けに必要な情報

- 23.2.2.3 FIFO再シーケンサの例

- 23.2.3 ベスト・エフォート再シーケンサ

- 23.2.3.1 ベスト・エフォート再シーケンサの概要

- 23.2.3.2 ベスト・エフォート再シーケンサ・メッセージ選択方法

- 23.2.3.3 ベスト・エフォート再シーケンサ・メッセージ配信

- 23.2.3.4 ベスト・エフォート再順序付けに必要な情報

- 23.2.3.5 最大行数に基づいたベスト・エフォート再順序付けの例

- 23.2.3.6 時間ウィンドウに基づいたベスト・エフォート再順序付けの例

- 23.3 再シーケンサの構成

- 23.3.1 再順序付けレベルの指定方法

- 23.3.2 再順序付け方法の構成方法

24 Oracle Mediatorのメッセージ交換パターンの理解

- 24.1 一方向メッセージ交換パターン

- 24.1.1 one.way.returns.faultプロパティ

- 24.2 リクエスト・リプライ・メッセージ交換パターン

- 24.3 リクエスト・リプライ・フォルト・メッセージ交換パターン

- 24.4 リクエスト・コールバック・メッセージ交換パターン

- 24.5 リクエスト・リプライ・コールバック・メッセージ交換パターン

- 24.6 リクエスト・リプライ・フォルト・コールバック・メッセージ交換パターン

第IV部 ビジネス・ルール・サービス・コンポーネントの使用

25 Oracle Business Rulesの開始

- 25.1 ビジネス・ルール・サービス・コンポーネントの概要

- 25.1.1 BPELプロセス、ビジネス・ルールおよびヒューマン・タスクの統合

- 25.2 ルール・デザイナ・エディタ環境の概要

- 25.2.1 アプリケーション・ナビゲータ

- 25.2.2 ルール・デザイナ・ウィンドウ

- 25.2.3 「構造」ウィンドウ

- 25.2.4 「ビジネス・ルール検証 - ログ」ウィンドウ

- 25.3 ビジネス・ルールの作成および編集の概要

- 25.3.1 ビジネス・ルール・コンポーネントの作成方法

- 25.3.2 ルール・デザイナでのビジネス・ルールの使用に関する概要

- 25.4 BPELプロセスへのビジネス・ルールの追加

- 25.4.1 BPELプロセスへのビジネス・ルールの追加方法

- 25.4.2 BPELプロセスへのビジネス・ルール追加時の処理内容

- 25.4.3 ビジネス・ルール・ディクショナリ作成時の処理内容

- 25.4.4 BPELプロセスでのビジネス・ルールの起動に関する注意事項

- 25.4.5 デシジョン・コンポーネントのステートフル操作に関する注意事項

- 25.5 SOAコンポジット・アプリケーションへのビジネス・ルールの追加

- 25.5.1 SOAコンポジット・アプリケーションへのビジネス・ルールの追加方法

- 25.5.2 ビジネス・ルール・コンポーネントでのデシジョン関数の選択および変更方法

- 25.6 コンポジット・アプリケーションでのビジネス・ルールの実行

- 25.6.1 スタンドアロン・デシジョン・サービス・コンポーネントのテストに関する注意事項

- 25.7 ビジネス・ルールとOracle ADF Business Componentsファクト・タイプの使用

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- 26.6 翻訳の使用

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

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

第V部 ヒューマン・ワークフロー・サービス・コンポーネントの使用

27 ヒューマン・ワークフローの開始

- 27.1 ヒューマン・ワークフローの概要

- 27.2 ヒューマン・ワークフローの概要

- 27.2.1 設計時および実行時の概念の概要

- 27.2.1.1 タスクの割当ておよびルーティング

- 27.2.1.2 静的、動的およびルールベースのタスク割当て

- 27.2.1.3 タスクのステークホルダ

- 27.2.1.4 タスク期限

- 27.2.1.5 通知

- 27.2.1.6 タスク・フォーム

- 27.2.1.7 拡張概念

- 27.2.1.8 レポートおよび監査証跡

- 27.2.2 ヒューマン・ワークフローの設計ステージの概要

- 27.3 ヒューマン・ワークフロー機能の概要

- 27.3.1 ヒューマン・ワークフローのユースケース

- 27.3.1.1 ユーザーまたはロールへのタスクの割当て

- 27.3.1.2 様々な参加者タイプの使用

- 27.3.1.3 エスカレーション、有効期限および委任

- 27.3.1.4 自動割当ておよび委任

- 27.3.1.5 タスク・コンテンツに基づいたユーザーの動的割当て

- 27.4 ヒューマン・ワークフロー・アーキテクチャの概要

- 27.4.1 ヒューマン・ワークフロー・サービス

- 27.4.2 ヒューマン・タスクの使用

- 27.4.3 サービス・エンジン

28 ヒューマン・タスクの作成

- 28.1 ヒューマン・タスクの概要

- 28.1.1 ヒューマン・タスク定義の作成の概要

- 28.1.2 ヒューマン・タスク定義とBPELプロセスの関連付けの概要

- 28.1.3 タスク・フォームの生成の概要

- 28.2 ヒューマン・タスクの作成

- 28.2.1 SOAコンポジット・エディタを使用してヒューマン・タスクを作成する方法

- 28.2.2 Oracle BPELデザイナを使用してヒューマン・タスクを作成する方法

- 28.2.3 ヒューマン・タスク作成時の処理内容

- 28.3 ヒューマン・タスク・エディタの終了と変更の保存

- 28.4 ヒューマン・タスクとBPELプロセスの関連付け

- 28.4.1 ヒューマン・タスクをBPELプロセスに関連付ける方法

- 28.4.2 ヒューマン・タスクとBPELプロセス間のワイヤの削除に関する注意事項

- 28.4.3 ヒューマン・タスク・アクティビティのタイトル、起案者、優先度およびパラメータ変数の定義方法

- 28.4.3.1 タスクのタイトルの指定

- 28.4.3.2 タスク起案者とタスク優先度の指定

- 28.4.3.3 タスク・パラメータの指定

- 28.4.4 ヒューマン・タスク・アクティビティの拡張機能の定義方法

- 28.4.4.1 スコープ名とグローバル・タスク変数名の指定

- 28.4.4.2 タスク所有者の指定

- 28.4.4.3 識別キーの指定

- 28.4.4.4 アイデンティティ・コンテキストの指定

- 28.4.4.5 アプリケーション・コンテキストの指定

- 28.4.4.6 他のヒューマン・タスクのタスク履歴の追加

- 28.4.5 生成されたヒューマン・タスク・アクティビティの表示方法

- 28.4.5.1 BPELコールバックの起動

- 28.4.6 生成されたヒューマン・タスク・アクティビティの変更に関する注意事項

- 28.4.7 ヒューマン・タスクで生成されたパートナ・リンクの削除に関する注意事項

- 28.4.8 結果ベース・モデリングの定義方法

- 28.4.8.1 ペイロード更新の指定

- 28.4.8.2 その他のタスクの結果に対応するcase文の使用

- 28.4.9 添付ファイルのエンコーディングに関する注意事項

29 ヒューマン・タスクの構成

- 29.1 ヒューマン・タスク・エディタのセクションへのアクセス

- 29.1.1 ヒューマン・タスク・エディタのセクションへのアクセス方法

- 29.2 タイトル、説明、結果、優先度、カテゴリ、所有者およびアプリケーション・コンテキストの指定

- 29.2.1 タイトル、説明、結果、優先度、カテゴリ、所有者およびアプリケーション・コンテキストの指定方法

- 29.2.2 タスクのタイトルの指定方法

- 29.2.3 タスクの説明の指定方法

- 29.2.4 タスクの結果の指定方法

- 29.2.5 タスク優先度の指定方法

- 29.2.6 タスク・カテゴリの指定方法

- 29.2.7 タスク所有者の指定方法

- 29.2.7.1 ユーザー・ディレクトリまたはアプリケーション・ロールのリストを介したタスク所有者の静的な指定

- 29.2.7.2 XPath式によるタスク所有者の動的な指定

- 29.2.8 アプリケーション・コンテキストの指定方法

- 29.3 タスク・ペイロードのデータ構造の指定

- 29.3.1 タスク・ペイロード・データ構造の指定方法

- 29.4 タスク参加者の割当て

- 29.4.1 ステージ名を指定してパラレルおよび順次ブロックを追加する方法

- 29.4.2 タスク参加者の割当て方法

- 29.4.3 単一参加者タイプの構成方法

- 29.4.3.1 単一タスク参加者リストの作成

- 29.4.3.2 タスクの操作に対する時間制限の指定

- 29.4.3.3 タスクへの他の参加者の招待

- 29.4.3.4 タスク参加者のバイパス

- 29.4.4 パラレル参加者タイプの構成方法

- 29.4.4.1 投票結果の指定

- 29.4.4.2 パラレル・タスク参加者リストの作成

- 29.4.4.3 タスクの操作に対する時間制限の指定

- 29.4.4.4 タスクへの他の参加者の招待

- 29.4.4.5 タスク参加者のバイパス

- 29.4.5 シリアル参加者タイプの構成方法

- 29.4.5.1 シリアル・タスク参加者リストの作成

- 29.4.5.2 タスクの操作に対する時間制限の指定

- 29.4.5.3 タスクへの他の参加者の招待

- 29.4.5.4 タスク参加者のバイパス

- 29.4.6 FYI参加者タイプの構成方法

- 29.4.6.1 FYIタスク参加者リストの作成

- 29.5 ルーティング・ポリシーの選択

- 29.5.1 指定した順序でタスクを全参加者にルーティングする方法

- 29.5.1.1 全参加者による他の参加者の招待の許可

- 29.5.1.2 他の参加者へのタスクのルーティングの停止

- 29.5.1.3 パラレル・サブタスクでの早期完了の有効化

- 29.5.1.4 早期完了するサブタスクの親サブタスクの完了

- 29.5.2 ビジネス・ルールを使用した詳細タスク・ルーティングの指定方法

- 29.5.2.1 ビジネス・ルールを使用した詳細タスク・ルーティングの概要

- 29.5.2.2 ファクト

- 29.5.2.3 アクション・タイプ

- 29.5.2.4 サンプル・ルールセット

- 29.5.2.5 リンク・ディクショナリのサポート

- 29.5.2.6 拡張ルーティング・ルールの作成

- 29.5.3 外部ルーティングの使用方法

- 29.5.4 エラー割当て先の構成方法

- 29.6 多言語設定とスタイルシートの指定

- 29.6.1 添付ファイルとしてのWordMLスタイルシートとその他のスタイルシートの指定方法

- 29.6.2 多言語設定の指定方法

- 29.7 タスクのエスカレート、期限更新または終了

- 29.7.1 エスカレーションおよび有効期限ポリシーの概要

- 29.7.2 期限切れがないポリシーの指定方法

- 29.7.3 期限切れがあるポリシーの指定方法

- 29.7.4 有効期限ポリシー期間の延長方法

- 29.7.5 タスク・ポリシーのエスカレート方法

- 29.7.6 エスカレーション・ルールの指定方法

- 29.7.7 期日の指定方法

- 29.8 参加者通知プリファレンスの指定

- 29.8.1 受信者へのタスク・ステータス変更の通知方法

- 29.8.2 通知メッセージの編集方法

- 29.8.3 リマインダの設定方法

- 29.8.4 キャラクタ・セットのエンコーディングの変更方法

- 29.8.5 詳細を除く通知をセキュア化する方法

- 29.8.6 通知でのOracle BPM Worklist URLの表示方法

- 29.8.7 電子メール・メッセージをアクション可能にする方法

- 29.8.8 電子メール通知によるタスクの添付ファイルの送信方法

- 29.8.9 グループおよびアプリケーション・ロールへの電子メール通知の送信方法

- 29.8.10 通知ヘッダーのカスタマイズ方法

- 29.9 タスク・コンテンツへのアクセス・ポリシーとタスク・アクションの指定

- 29.9.1 タスク・コンテンツへのアクセス・ポリシーの指定方法

- 29.9.1.1 アクセス・ルールの概要

- 29.9.1.2 タスク・コンテンツの操作に対するユーザー権限の指定

- 29.9.1.3 タスクの操作に対するアクションの指定

- 29.9.2 ワークフロー・デジタル署名ポリシーの指定方法

- 29.9.2.1 認証局の指定

- 29.10 タスク割当てに対する制限の指定

- 29.10.1 タスク割当てに対する制限の指定方法

- 29.11 Javaコールバックまたはビジネス・イベント・コールバックの指定

- 29.11.1 タスク・ステータスのコールバック・クラスの指定方法

- 29.11.1.1 Javaコールバックの指定

- 29.11.1.2 ビジネス・イベント・コールバックの指定

- 29.11.2 BPELコールバックのタスクとルーティング・カスタマイズの指定方法

- 29.11.3 BPELコールバックを無効にする方法

- 29.12 Oracle Enterprise Content Managementでのドキュメントの格納

30 ヒューマン・タスク用のタスク・フォームの設計

- 30.1 タスク・フォームの概要

- 30.1.1 タスク・フォームに関する注意事項: タイムゾーン変換

- 30.2 タスク・フローとタスク・サービスの関連付け

- 30.3 ヒューマン・タスクに基づいたADFタスク・フローの作成

- 30.3.1 ヒューマン・タスク・エディタからADFタスク・フローを作成する方法

- 30.3.2 ヒューマン・タスクに基づいたADFタスク・フローの作成方法

- 30.3.3 ヒューマン・タスクに基づいたADFタスク・フロー作成時の処理内容

- 30.3.4 異なるメタ属性が指定された同じ要素を含む複数のADFタスク・フローに関する注意事項

- 30.4 タスク・フォームの作成

- 30.4.1 自動生成タスク・フォームの作成方法

- 30.4.2 カスタム・ページ・テンプレートにライブラリJARファイルを登録する方法

- 30.4.3 カスタム・タスク・フォーム・ウィザードを使用したタスク・フォームの作成方法

- 30.4.4 「ペイロードを持つ完了済タスク」ドロップ・ハンドラを使用したタスク・フォームの作成方法

- 30.4.5 個別のドロップ・ハンドラを使用したタスク・フォーム・リージョンの作成方法

- 30.4.6 タスク・フォームへのペイロードの追加方法

- 30.4.7 タスク・フォーム作成時の処理内容

- 30.5 タスクXSD変更時のデータ・コントロールのリフレッシュ

- 30.6 タスク・フロー・アプリケーションの保護

- 30.7 電子メール通知の作成

- 30.7.1 電子メール通知の作成方法

- 30.7.1.1 ルーターを使用したタスク・フローの作成

- 30.7.1.2 電子メール通知ページの作成

- 30.7.2 電子メール通知ページ作成時の処理内容

- 30.7.3 電子メール通知ページの作成に関する注意事項

- 30.8 タスク・フローを使用したコンポジット・アプリケーションのデプロイ

- 30.8.1 タスク・フローを使用したコンポジット・アプリケーションのデプロイ方法

- 30.8.2 タスク・フォームの再デプロイ方法

- 30.8.3 タスク・フローを別のアプリケーションとしてデプロイする方法

- 30.8.4 非SOAのOracle WebLogic Serverにタスク・フォームをデプロイする方法

- 30.8.4.1 タスク・フォームをデプロイする前に: ポートの変更

- 30.8.4.2 セッション・トラッキングCookieの一意のCookieコンテキスト・パスの構成

- 30.8.4.3 非SOAのOracle WebLogic Serverへのoracle.soa.workflow.jarのデプロイ

- 30.8.4.4 非SOAのOracle WebLogic Serverでの外部JNDIプロバイダの定義

- 30.8.4.5 非SOAのOracle WebLogic Serverでの外部JNDIプロバイダ・リンクの定義

- 30.8.4.6 bpm-services.jarに対する権限付与を含める方法

- 30.8.4.7 アプリケーションのデプロイ

- 30.8.5 タスク・フォームのデプロイ時の処理内容

- 30.8.6 タスク・フローのアンデプロイに関する注意事項

- 30.9 ワークリストでのタスク・フォームの表示

- 30.9.1 ワークリストでのタスク・フォームの表示方法

- 30.10 電子メール通知でのタスクの表示

- 30.10.1 タスク通知におけるワークリスト・アプリケーションのテキストの変更

- 30.10.2 タスク通知におけるワークリスト・アプリケーションのURLの変更

- 30.10.3 タスク通知におけるワークリスト・アプリケーションのURLの表示と非表示

- 30.11 複数のヒューマン・タスクを含むタスク・フロー・アプリケーションの再利用

- 30.11.1 複数のヒューマン・タスクを含むタスク・フロー・アプリケーションの再利用方法

- 30.11.2 様々なアクションを含むタスク・フロー・アプリケーションの再利用方法

31 ヒューマン・ワークフローのチュートリアル

- 31.1 ヒューマン・ワークフローのチュートリアルの概要

- 31.2 前提条件

- 31.3 BPELプロセスを使用したアプリケーションおよびプロジェクトの作成

- 31.4 ヒューマン・タスク・サービス・コンポーネントの作成

- 31.5 ヒューマン・タスクの設計

- 31.6 ヒューマン・タスクとBPELプロセス・サービス・コンポーネントの関連付け

- 31.7 アプリケーション・サーバー接続の作成

- 31.8 SOAコンポジット・アプリケーションのデプロイ

- 31.9 プロセス・インスタンスの開始

- 31.10 タスク・フォームのプロジェクトの作成

- 31.11 Oracle BPM Worklistでのタスクの操作

- 31.12 タスク・フォームのデプロイ

- 31.13 その他のチュートリアル

32 Oracle BPM Worklistの使用

- 32.1 Oracle BPM Worklistの概要

- 32.1.1 Oracle BPM Worklistに関する注意事項

- 32.2 Oracle BPM Worklistへのログイン

- 32.2.1 ワークリストへのログイン方法

- 32.2.1.1 ワークリストにログインするためにweblogicユーザーを有効にする方法

- 32.2.2 ワークリストへのログイン時の処理内容

- 32.2.3 ユーザーがOracle BPM Worklistにログイン中にユーザーの権限を変更した場合の処理内容

- 32.3 タスク・リスト・ページのカスタマイズ

- 32.3.1 タスクのフィルタ方法

- 32.3.2 ワークリスト・ビューを作成、削除およびカスタマイズする方法

- 32.3.3 タスク・ステータス・グラフのカスタマイズ方法

- 32.3.4 To Doタスクの作成方法

- 32.3.5 ワークリスト・アプリケーションでのサブタスクの作成方法

- 32.3.5.1 サブタスク作成時の留意事項

- 32.4 タスク操作: 「タスクの詳細」ページ

- 32.4.1 システム・アクション

- 32.4.2 タスク履歴

- 32.4.3 タスクの操作方法

- 32.4.4 デジタル署名が必要なタスクの操作方法

- 32.5 タスクの承認

- 32.6 休暇期間の設定

- 32.7 ルールの設定

- 32.7.1 ユーザー・ルールの作成方法

- 32.7.2 グループ・ルールの作成方法

- 32.7.3 複数の割当て先があるタスクの割当てルール

- 32.8 ワークリスト管理機能の使用

- 32.8.1 管理者が他のユーザーまたはグループのルールを管理する方法

- 32.8.2 ログイン・ページ・レルムのラベルの指定方法

- 32.8.3 リソース・バンドルの指定方法

- 32.8.4 言語のロケール情報の指定方法

- 32.8.5 ブランド・ロゴの指定方法

- 32.8.6 ブランド・タイトルの指定方法

- 32.8.7 スキンの選択方法

- 32.8.8 カスタマイズされたアプリケーションおよびリンクを有効にする方法

- 32.8.9 タスク・アクションのイメージの指定方法

- 32.9 通知設定の指定

- 32.9.1 メッセージング・フィルタ・ルール

- 32.9.1.1 データ型

- 32.9.1.2 属性

- 32.9.2 ルール・アクション

- 32.9.3 メッセージング・チャネルの管理

- 32.9.3.1 メッセージング・チャネルの表示

- 32.9.3.2 メッセージング・チャネルの作成、編集および削除

- 32.9.4 メッセージング・フィルタの管理

- 32.9.4.1 メッセージング・フィルタの表示

- 32.9.4.2 メッセージング・フィルタの作成

- 32.9.4.3 メッセージング・フィルタの編集

- 32.9.4.4 メッセージング・フィルタの削除

- 32.10 マップ済属性(フレックス・フィールド)の使用

- 32.10.1 属性のマップ方法

- 32.10.2 カスタムのマップ済属性

- 32.11 ワークリスト・レポートの作成

- 32.11.1 レポートの作成方法

- 32.11.2 レポート作成時の処理内容

- 32.11.2.1 不参加タスク・レポート

- 32.11.2.2 タスクの優先度レポート

- 32.11.2.3 タスクのサイクル・タイム・レポート

- 32.11.2.4 タスクの生産性レポート

- 32.12 Oracle BPM Worklistへのローカル言語およびタイムゾーンによるアクセス

- 32.12.1 Oracle BPM Worklist内の文字列

- 32.12.2 アイデンティティ・ストアがLDAPベースである場合の優先言語、ユーザーの表示名およびタイムゾーン設定の変更方法

- 32.12.3 タスク表示に使用する言語の変更方法

- 32.12.4 JAZN XMLファイルからの言語設定の変更方法

- 32.12.5 ワークリストでの表示言語の設定の注意事項

- 32.12.6 ワークリストで使用するタイムゾーンの変更方法

- 32.13 再利用可能なワークリスト・リージョンの作成

- 32.13.1 埋込みの再利用可能なワークリスト・リージョンを使用したアプリケーションの作成方法

- 32.13.2 デプロイメント・プロファイルの設定方法

- 32.13.3 フェデレーテッド・モードのタスク・フローのデプロイメント準備

- 32.13.4 タスク・リスト・タスク・フローに関する注意事項

- 32.13.5 証明書タスク・フローに関する注意事項

- 32.13.6 レポート・タスク・フローに関する注意事項

- 32.13.7 アプリケーション・プリファレンス・タスク・フローに関する注意事項

- 32.13.8 マップ済属性タスク・フローに関する注意事項

- 32.13.9 ルール・タスク・フローに関する注意事項

- 32.13.10 承認グループ・タスク・フローに関する注意事項

- 32.13.11 タスク構成タスク・フローに関する注意事項

- 32.14 ワークリスト・アプリケーションでカスタマイズされたアプリケーションを有効化するJavaコード

33 カスタム・ワークリスト・クライアントの作成

- 33.1 ワークフロー・サービスのクライアント作成に関する概要

- 33.2 クライアント作成に使用するパッケージとクラス

- 33.3 ワークフロー・サービス・クライアント

- 33.3.1 IWorkflowServiceClientインタフェース

- 33.4 SOAPを使用するクライアント用のクラスパス

- 33.5 リモートEJBを使用するクライアント用のクラスパス

- 33.6 タスクの開始

- 33.6.1 タスクの作成

- 33.6.2 タスクのペイロード要素の作成

- 33.6.3 プログラムによるタスクの開始

- 33.7 ワークフロー標準ビュー定義の変更

- 33.8 HelpDeskUIサンプルを使用したワークリスト・アプリケーションの記述

34 ヒューマン・ワークフロー・サービスの概要

- 34.1 ヒューマン・ワークフロー・サービスの概要

- 34.1.1 ヒューマン・ワークフロー・サービスに対するSOAP、Enterprise JavaBeansおよびJavaサポート

- 34.1.1.1 外部JNDI名のサポート

- 34.1.2 サービスに対するセキュリティ・モデル

- 34.1.2.1 SOAP Webサービス使用時のワークフロー・サービスへのアイデンティティ伝播の制限

- 34.1.2.2 ユーザーにかわるヒューマン・ワークフロー・コンテキストの作成

- 34.1.2.3 JAASアプリケーションによって以前に認証されたユーザーのワークフロー・コンテキストの取得

- 34.1.3 タスク・サービス

- 34.1.4 タスク問合せサービス

- 34.1.5 アイデンティティ・サービス

- 34.1.5.1 アイデンティティ・サービス・プロバイダ

- 34.1.6 タスク・メタデータ・サービス

- 34.1.7 ユーザー・メタデータ・サービス

- 34.1.8 タスク・レポート・サービス

- 34.1.9 ランタイム構成サービス

- 34.1.9.1 属性ラベルの国際化

- 34.1.10 エビデンス・ストア・サービスとデジタル署名

- 34.1.10.1 前提条件

- 34.1.10.2 インタフェースとメソッド

- 34.1.11 タスク・インスタンス属性

- 34.2 ヒューマン・ワークフローからの通知

- 34.2.1 通知のコンテンツ

- 34.2.2 エラー・メッセージのサポート

- 34.2.3 信頼性のサポート

- 34.2.4 Oracle Human Workflow通知サービスの管理

- 34.2.5 通知チャネル・プリファレンスの構成方法

- 34.2.6 異なる言語による通知メッセージの構成方法

- 34.2.7 アクション可能なメッセージの送信方法

- 34.2.7.1 ヒューマン・タスクのアクション可能な電子メールの送信方法

- 34.2.8 インバウンドおよびアウトバウンド添付ファイルの送信方法

- 34.2.9 インバウンド・コメントの送信方法

- 34.2.10 セキュアな通知の送信方法

- 34.2.11 通知に使用されるチャネルの設定方法

- 34.2.12 リマインダの送信方法

- 34.2.13 未処理メッセージに対する自動返信の設定方法

- 34.2.14 カスタム通知ヘッダーの作成方法

- 34.3 割当てサービスの構成

- 34.3.1 動的割当てパターンおよびタスク・エスカレーション・パターン

- 34.3.1.1 動的割当てパターンの実装方法

- 34.3.1.2 動的割当てパターンの構成方法

- 34.3.1.3 動的割当てパターンの表示名の構成方法

- 34.3.1.4 タスク・エスカレーション・パターンの実装方法

- 34.3.2 割当てサービスによるタスク参加者の動的割当て

- 34.3.2.1 割当てサービスの実装方法

- 34.3.2.2 割当てサービスの実装例

- 34.3.2.3 カスタム割当てサービスのデプロイ方法

- 34.3.3 カスタム・エスカレーション関数

- 34.4 コールバックとリソース・バンドルに対するクラスのロード

- 34.5 ワークフロー・サービスのリソース・バンドル

- 34.5.1 タスク・リソース・バンドル

- 34.5.2 グローバル・リソース・バンドル - WorkflowLabels.properties

- 34.5.3 ワークリスト・クライアントのリソース・バンドル

- 34.5.4 タスク詳細のADFタスク・フロー・リソース・バンドル

- 34.5.5 リソース・バンドルでのステージ名と参加者名の指定

- 34.5.6 グループ名とアプリケーション・ロール名での大/小文字の区別

- 34.6 ヒューマン・ワークフロー・クライアントとOracle WebLogic Serverサービスとの統合の概要

- 34.6.1 ヒューマン・ワークフロー・サービス・クライアント

- 34.6.1.1 タスク問合せサービス・クライアントのコード

- 34.6.1.2 構成オプション

- 34.6.1.3 クライアントのロギング

- 34.6.1.4 構成移行ユーティリティ

- 34.6.2 アイデンティティ伝播

- 34.6.2.1 Enterprise JavaBeansアイデンティティ伝播

- 34.6.2.2 SOAPクライアント用のSAMLトークン・アイデンティティ伝播

- 34.6.2.3 公開鍵の別名

- 34.6.3 クライアントJARファイル

- 34.7 ヒューマン・タスクのタスクの状態

- 34.8 Oracle Workflowのデータベース・ビュー

- 34.8.1 不参加タスク・レポート・ビュー

- 34.8.2 タスクのサイクル・タイム・レポート・ビュー

- 34.8.3 タスクの生産性レポート・ビュー

- 34.8.4 タスクの優先度レポート・ビュー

35 Microsoft Excelとヒューマン・タスクとの統合

- 35.1 ExcelワークブックからBPELプロセスを起動するための環境の構成

- 35.1.1 Webサービス・データ・コントロール・タイプのOracle JDeveloperプロジェクトの作成方法

- 35.1.2 ダミーのJSFページの作成方法

- 35.1.3 Oracle JDeveloperプロジェクトへのデスクトップ統合の追加方法

- 35.1.4 Oracle JDeveloperプロジェクトへのデスクトップ統合の追加時の処理内容

- 35.1.5 ステップ1で作成したWebアプリケーションのデプロイ方法

- 35.1.6 Microsoft Excelのインストール方法

- 35.1.7 Oracle ADFデスクトップ統合プラグインのインストール方法

- 35.1.8 ユーザー・インタフェース・コントロールの指定方法とExcelワークブックの作成方法

- 35.2 ヒューマン・タスク・ワークフロー電子メール通知へのExcelワークブックの添付

- 35.2.1 ヒューマン・タスク・ワークフロー電子メール通知へのExcelワークブックの添付の有効化

- 35.2.2 ヒューマン・タスク・ワークフロー電子メール通知へのExcelワークブックの添付を有効化した場合の実行時の処理内容

- 35.2.3 例: 電子メール通知へのExcelワークブックの添付

- 35.2.3.1 タスク1: Oracle ADF-DI機能を使用したADFタスク・フロー・プロジェクトの有効化

- 35.2.3.2 タスク2: 認証の設定

- 35.2.3.3 タスク3: Excelワークブックで使用する有効なページ定義ファイルの作成

- 35.2.3.4 タスク4: Excelワークブックの準備

- 35.2.3.5 タスク5: ADFタスク・フローのデプロイ

- 35.2.3.6 タスク6: デプロイしたアプリケーションのテスト

36 タスク・リスト・ポートレットの構成

- 36.1 タスク・リスト・ポートレットの概要

- 36.2 ポートレット・サーバーへのタスク・リスト・ポートレット・プロデューサ・アプリケーションのデプロイ

- 36.2.1 デプロイメントの前提条件

- 36.2.2 タスク・リスト・ポートレット・プロデューサ・アプリケーションのデプロイ方法

- 36.2.3 リモートSOAサーバーへのタスク・リスト・プロデューサの接続方法

- 36.2.3.1 Oracle WebCenter PortalのOracle WebLogic Serverでの外部JNDIの定義方法

- 36.2.3.2 EJBアイデンティティ伝播の構成方法

- 36.2.3.3 アイデンティティ・ストアの構成方法

- 36.2.4 Webサービスのセキュリティを使用してタスク・リスト・ポートレット・プロデューサ・アプリケーションを保護する方法

- 36.2.5 インバウンド・セキュリティ・ポリシーの指定方法

- 36.3 タスク・リスト・ポートレットを埋め込むポートレット・コンシューマ・アプリケーションの作成

- 36.3.1 タスク・リスト・ポートレットを埋め込むポートレット・コンシューマ・アプリケーションの作成方法

- 36.4 ワークリスト・ポートレット・パラメータの受け渡し

- 36.4.1 割当てフィルタの定数

- 36.4.2 すべての列定数を含むファイルの例

第VI部 バインディング・コンポーネントの使用

37 バインディング・コンポーネントの開始

- 37.1 バインディング・コンポーネントの概要

- 37.1.1 Webサービス

- 37.1.1.1 WS-AtomicTransactionのサポート

- 37.1.2 HTTPバインディング・サービス

- 37.1.2.1 サポートされている相互作用

- 37.1.2.2 HTTPバインディング・サービスの構成方法

- 37.1.2.3 HTTPバインディングに対して基本認証を有効にする方法

- 37.1.3 JCAアダプタ

- 37.1.3.1 AQアダプタ

- 37.1.3.2 データベース・アダプタ

- 37.1.3.3 ファイル・アダプタ

- 37.1.3.4 FTPアダプタ

- 37.1.3.5 JMSアダプタ

- 37.1.3.6 MQアダプタ

- 37.1.3.7 ソケット・アダプタ

- 37.1.3.8 サード・パーティ・アダプタ

- 37.1.3.9Oracle User Messaging Serviceアダプタ

- 37.1.4 Oracle Applicationsアダプタ

- 37.1.5 Oracle BAMアダプタ

- 37.1.6 Oracle B2B

- 37.1.7 Oracle Healthcare Adapter

- 37.1.8 ADF-BCサービス

- 37.1.9 EJBサービス

- 37.1.10 直接バインディング・サービス

- 37.2 バインディング・コンポーネントとSOAコンポジット・アプリケーションの統合の概要

- 37.2.1 バインディング・コンポーネントとSOAコンポジット・アプリケーションの統合方法

- 37.2.2 ADFバインディングを使用してJSP/Javaクラスからコンポジット・アプリケーションを起動する方法

- 37.3 外部参照のバインディングURLで使用するためのトークンの作成

- 37.3.1 外部参照のバインディングURLで使用するためのトークンの作成方法

38 Enterprise JavaBeansとSOAコンポジット・アプリケーションの統合

- 38.1 Enterprise JavaBeansバインディングとSOAコンポジット・アプリケーションの統合の概要

- 38.1.1 SDOベースのEJBを使用した統合

- 38.1.2 Javaインタフェースを使用した統合

- 38.2 SDOベースのEnterprise JavaBeansアプリケーションの設計

- 38.2.1 SDOコンパイラを使用したSDOオブジェクトの作成方法

- 38.2.2 セッションBeanを作成してSDOオブジェクトをインポートする方法

- 38.2.3 プロファイルおよびEARファイルの作成方法

- 38.2.4 Enterprise JavaBeans Beanを使用したSDOタイプの定義方法

- 38.2.5 Webサービス注釈の使用方法

- 38.2.6 Enterprise JavaBeans EARファイルのデプロイ方法

- 38.3 Oracle JDeveloperでのEnterprise JavaBeansサービスの作成

- 38.3.1 SDOベースのEnterprise JavaBeansとSOAコンポジット・アプリケーションの統合方法

- 38.3.2 Javaインタフェース・ベースのEnterprise JavaBeansとSOAコンポジット・アプリケーションの統合方法

- 38.4 Oracle SOA Suiteを起動するSDOベースのEnterprise JavaBeansクライアントの設計

- 38.5 Enterprise JavaBeansロールの指定

- 38.6 JNDIアクセスの構成

- 38.6.1 外部JNDIの作成方法

- 38.6.2 JNDIルックアップのカスタムCSFマップの作成方法

39 直接バインディング起動APIの使用

- 39.1 直接バインディングの概要

- 39.1.1 直接サービス・バインディング・コンポーネント

- 39.1.2 直接参照バインディング・コンポーネント

- 39.2 直接バインディング起動APIの概要

- 39.2.1 同期直接バインディング起動

- 39.2.2 非同期直接バインディング起動

- 39.2.3 SOA直接アドレス構文

- 39.2.4 SOAトランザクション伝播

- 39.3 起動APIを使用したOracle JDeveloperでのSOAコンポジット・アプリケーションの起動

- 39.3.1 インバウンド直接バインディング・サービスの作成方法

- 39.3.2 アウトバウンド直接バインディング参照の作成方法

- 39.3.3 直接バインディングを起動するJ2SEクライアントのアイデンティティの設定方法

- 39.3.4 同一のサーバー名/ドメイン名を持つホスト上でのSOAコンポジットの呼出しに関する注意事項

- 39.4 直接バインディング起動APIの使用例

第VII部 サービス・コンポーネント間の共有機能

40 XSLTマッパーを使用したトランスフォーメーションの作成

- 40.1 XSLTマッパーの概要

- 40.1.1 XSLT作成の概要

- 40.1.2 XSLTマッパー使用のガイドライン

- 40.2 XSLマップ・ファイルの作成

- 40.2.1 Oracle BPEL Process ManagerでXSLマップ・ファイルを作成する方法

- 40.2.2 Oracle BPEL Process Managerでインポートされたソースとターゲット・スキーマ・ファイルからXSLマップ・ファイルを作成する方法

- 40.2.3 Oracle MediatorでXSLマップ・ファイルを作成する方法

- 40.2.4 XSLマップ・ファイルの作成に関する注意事項

- 40.2.5 XSLファイルを使用したコンポジットのインポートに関する注意事項

- 40.2.6 XSLマップ・ファイルを作成せずにOracle Mediatorを介してペイロードを渡した場合の実行時の処理内容

- 40.2.7 空のネームスペース・タグがある出力メッセージを受信した場合の処理内容

- 40.3 XSLTマッパーを使用したトランスフォメーション・マップの設計

- 40.3.1 追加ソースを追加する方法

- 40.3.2 ノードのリンクによる単純コピーの実行方法

- 40.3.3 定数値の設定方法

- 40.3.4 関数の追加方法

- 40.3.4.1 関数パラメータの編集

- 40.3.4.2 関数の連鎖

- 40.3.4.3 名前付きテンプレートの使用

- 40.3.4.4 ユーザー定義関数のインポート

- 40.3.5 XPath式の編集方法

- 40.3.6 XSLTコンストラクトの追加方法

- 40.3.6.1 xsl:ifを使用した条件付き処理の使用

- 40.3.6.2 xsl:chooseを使用した条件付き処理の使用

- 40.3.6.3 xsl:for-eachを使用したループの作成

- 40.3.6.4 xsl:for-eachのクローニング

- 40.3.6.5 xsl:for-eachへのxsl:sortの適用

- 40.3.6.6 xsl:copy-ofを使用したノードのコピー

- 40.3.6.7 xsl:includeを使用した外部テンプレートのインクルード

- 40.3.7 ノードを自動的にマップする方法

- 40.3.7.1 確認を伴う自動マップの使用

- 40.3.8 自動マッピングに関する注意事項

- 40.3.9 マップされていないターゲット・ノードの表示方法

- 40.3.10 ディクショナリの生成方法

- 40.3.11 関数が使用されている場合のディクショナリの生成に関する注意事項

- 40.3.12 マップ・パラメータおよびマップ変数の作成方法

- 40.3.12.1 マップ・パラメータの作成

- 40.3.12.2 マップ変数の作成

- 40.3.13 ソース・ノードおよびターゲット・ノードの検索方法

- 40.3.14 マップされないターゲット要素生成の制御方法

- 40.3.15 XSLT文書の要素を無視する方法

- 40.3.16 カスタマイズ・ファイルをインポートしてXSLTマッパーの表示プリファレンスを指定する方法

- 40.3.17 XSLTマッパーでスキーマを置換する方法

- 40.3.18 ソース・ツリーとターゲット・ツリーの要素とタイプを置換する方法

- 40.3.19 XSLTマッパーでのメモリー不足問題の解決方法

- 40.4 マップのテスト

- 40.4.1 トランスフォーメーション・マッピングのロジックをテストする方法

- 40.4.2 レポートの生成方法

- 40.4.2.1 レポート生成時のメモリー・エラーの修正

- 40.4.3 サンプルXML生成のカスタマイズ方法

- 40.5 XSLTマッパーの機能のデモンストレーション

- 40.5.1 アプリケーションのオープン方法

- 40.5.2 BPELプロセスでの新規XSLTマップの作成方法

- 40.5.3 タイプ置換を使用した注文書品目のマップ方法

- 40.5.4 追加のソース要素の参照方法

- 40.5.5 要素置換を使用した出荷先住所のマップ方法

- 40.5.6 残りのフィールドのマップ方法

- 40.5.7 マップのテスト方法

41 ビジネス・イベントおよびイベント配信ネットワークの使用

- 41.1 ビジネス・イベントの概要

- 41.1.1 ローカルおよびリモートのイベント境界

- 41.1.2 同じプロセス内で公開およびサブスクライブされたイベントが配信されない

- 41.2 Oracle JDeveloperでのビジネス・イベントの作成

- 41.2.1 ビジネス・イベントの作成方法

- 41.3 Oracle Mediatorサービス・コンポーネントからのビジネス・イベントのサブスクライブまたは公開

- 41.3.1 ビジネス・イベントをサブスクライブする方法

- 41.3.2 ビジネス・イベントの作成およびサブスクライブ時の処理内容

- 41.3.3 ビジネス・イベントのサブスクライブに関する注意事項

- 41.3.4 ビジネス・イベントを公開する方法

- 41.3.5 管理サーバー・アプリケーションでSOAサーバーにイベントを公開できるように外部JNDIプロバイダを構成する方法

- 41.3.6 JMSベースのEDN実装の構成方法

- 41.3.7 ビジネス・イベント公開時の処理内容

- 41.4 BPELプロセス・サービス・コンポーネントからのビジネス・イベントのサブスクライブまたは公開

- 41.4.1 ビジネス・イベントをサブスクライブする方法

- 41.4.2 ビジネス・イベントを公開する方法

- 41.4.3 ビジネス・イベントのサブスクライブおよび公開時の処理内容

- 41.4.4 ビジネス・イベントのサブスクライブに関する注意事項

- 41.5 Oracle ADF Business Componentビジネス・イベントをOracle Mediatorに統合する方法

第VIII部 アプリケーションの完成

42 ポリシーを使用したセキュリティの有効化

- 42.1 ポリシーの概要

- 42.2 バインディング・コンポーネントおよびサービス・コンポーネントへのポリシーの添付

- 42.2.1 ポリシーをバインディング・コンポーネントおよびサービス・コンポーネントに添付する方法

- 42.2.2 ポリシー構成プロパティ値のオーバーライド方法

- 42.2.2.1 クライアント構成プロパティ値のオーバーライド

- 42.2.2.2 サーバー構成プロパティ値のオーバーライド

43 SOAコンポジット・アプリケーションのデプロイ

- 43.1 デプロイメントの概要

- 43.2 デプロイメントの前提条件

- 43.2.1 Oracle SOA Suiteスキーマの作成

- 43.2.2 SOAドメインの作成

- 43.2.3 SOAクラスタの構成

- 43.3 パッケージ化による影響の理解

- 43.4 コンポジットの構造

- 43.5 ターゲット環境の準備

- 43.5.1 データ・ソースおよびキューの作成方法

- 43.5.1.1 JMSリソースの作成およびJMSアダプタの再デプロイメント用のスクリプト

- 43.5.1.2 データベース・リソースの作成およびデータベース・アダプタの再デプロイメント用のスクリプト

- 43.5.2 コネクション・ファクトリおよび接続プールの作成方法

- 43.5.3 セキュリティを有効化する方法

- 43.5.4 設計時におけるコンポジット・インスタンス名の設定方法

- 43.5.4.1 Oracle Mediatorでのコンポジット・インスタンス名の設定

- 43.5.4.2 BPELプロセスでのコンポジット・インスタンス名の設定

- 43.5.5 取引パートナ・アグリーメントおよびタスク・フローのデプロイ方法

- 43.5.6 アプリケーション・サーバー接続の作成方法

- 43.5.7 SOA-MDS接続の作成方法

- 43.5.7.1 SOA-MDS接続によりcomposite.xmlファイルを開く場合の注意事項

- 43.6 デプロイメント前にターゲット環境に応じてアプリケーションをカスタマイズする方法

- 43.6.1 ターゲット環境に応じてSOAコンポジット・アプリケーションをカスタマイズするための構成プランの使用方法

- 43.6.1.1 構成プランの概要

- 43.6.1.2 構成プラン・ファイルの概要

- 43.6.1.3 構成プランのユースケースの概要

- 43.6.1.4 Oracle JDeveloperでの構成プランの作成方法

- 43.6.1.5 WLSTユーティリティを使用した構成プランの作成方法

- 43.6.1.6 スクリプトを使用した構成プランの添付方法

- 43.6.1.7 グローバル・トークン変数の作成方法

- 43.7 SOAコンポジット・アプリケーションのデプロイ

- 43.7.1 Oracle JDeveloperでの単一のSOAコンポジットのデプロイ方法

- 43.7.1.1 アプリケーション・サーバー接続の作成

- 43.7.1.2 (オプション)プロジェクト・デプロイメント・プロファイルの作成

- 43.7.1.3 プロファイルのデプロイ

- 43.7.1.4 タスク・フローのあるヒューマン・タスク・コンポジットのパーティションへのデプロイに関する注意事項

- 43.7.2 Oracle JDeveloperでの複数のSOAコンポジット・アプリケーションのデプロイ方法

- 43.7.3 Oracle JDeveloperでの複数のSOAコンポジット・アプリケーション間の共有データのデプロイ方法および使用方法

- 43.7.3.1 JARプロファイルの作成および共有するアーティファクトの組込み

- 43.7.3.2 JARプロファイルを組み込むSOAバンドルの作成

- 43.7.3.3 Oracle JDeveloperでのSOAバンドルのデプロイ

- 43.7.3.4 共有データの使用

- 43.7.4 Oracle JDeveloperでの既存のSOAアーカイブのデプロイ方法

- 43.7.5 WLSTユーティリティを使用したSOAコンポジット・アプリケーションの管理方法

- 43.7.6 antスクリプトを使用したSOAコンポジット・アプリケーションの管理方法

- 43.7.6.1 SOAコンポジット・アプリケーションのテストを自動化するためのantの使用方法

- 43.7.6.2 SOAコンポジット・アプリケーションをコンパイルするためのantの使用方法

- 43.7.6.3 コンポジットSARファイルにSOAコンポジット・アプリケーションをパッケージ化するためのantの使用方法

- 43.7.6.4 SOAコンポジット・アプリケーションをデプロイするためのantの使用方法

- 43.7.6.5 SOAコンポジット・アプリケーションをアンデプロイアーカイブするためのantの使用方法

- 43.7.6.6 SARファイルにコンポジットをエクスポートするためのantの使用方法

- 43.7.6.7 JARファイルにコンポジットのデプロイメント後の変更をエクスポートするためのantの使用方法

- 43.7.6.8 コンポジットのデプロイメント後の変更をインポートするためのantの使用方法

- 43.7.6.9 JARファイルへ指定したパターンの共有データをエクスポートするためのantの使用方法

- 43.7.6.10 トップレベルの共有データ・フォルダを削除するためのantの使用方法

- 43.7.6.11 SOAコンポジット・アプリケーションを起動するためのantの使用方法

- 43.7.6.12 SOAコンポジット・アプリケーションを停止するためのantの使用方法

- 43.7.6.13 SOAコンポジット・アプリケーションをアーカイブするためのantの使用方法

- 43.7.6.14 SOAコンポジット・アプリケーションをリタイアするためのantの使用方法

- 43.7.6.15 SOAコンポジット・アプリケーションにデフォルト・バージョンを割り当てるためのantの使用方法

- 43.7.6.16 デプロイ済SOAコンポジット・アプリケーションを一覧表示するためのantの使用方法

- 43.7.6.17 SOAインフラストラクチャで使用可能なすべてのパーティションを一覧表示するためのantの使用方法

- 43.7.6.18 パーティション内のすべてのコンポジットを一覧表示するためのantの使用方法

- 43.7.6.19 SOAインフラストラクチャでパーティションを作成するためのantの使用方法

- 43.7.6.20 SOAインフラストラクチャでパーティションを削除するためのantの使用方法

- 43.7.6.21 パーティション内のすべてのコンポジットを起動するためのantの使用方法

- 43.7.6.22 パーティション内のすべてのコンポジットを停止するためのantの使用方法

- 43.7.6.23 パーティション内のすべてのコンポジットをアーカイブするためのantの使用方法

- 43.7.6.24 パーティション内のすべてのコンポジットをリタイアするためのantの使用方法

- 43.7.6.25 SOAコンポジット・アプリケーションをアップグレードするためのantの使用方法

- 43.7.6.26 SOAコンポジット・アプリケーションを管理するためのantの使用方法

- 43.7.7 SOAコンポジット・アプリケーションのOracle Enterprise Manager Fusion Middleware Controlからのデプロイ方法

- 43.7.8 クラスタへのSOAコンポジット・アプリケーションのデプロイ方法

- 43.8 デプロイメント後の構成

- 43.8.1 セキュリティ

- 43.8.2 接続の更新

- 43.8.3 データ・ソースおよびキューの更新

- 43.8.4 ポリシーの添付

- 43.9 テストおよびトラブルシューティング

- 43.9.1 デプロイメントの検証

- 43.9.2 デプロイ済コンポジットのインスタンスの開始

- 43.9.3 デプロイ済コンポジットのテストの自動化

- 43.9.4 デプロイメント・エラー受取り後のプロジェクトの再コンパイル

- 43.9.5 Javaのコンパイル・エラーを解決するためのJavaコード・サイズの削減

- 43.9.6 デプロイメントに関する共通のエラーのトラブルシューティング

- 43.9.6.1 Oracle JDeveloperでのデプロイメントに関する共通の問題

- 43.9.6.2 構成プランに関する共通の問題

- 43.9.6.3 管理対象Oracle WebLogic Serverへのデプロイ

- 43.9.6.4 双方向のSSL対応Oracle WebLogic Serverへのデプロイ

- 43.9.6.5 接続できないプロキシ・サーバーを使用したデプロイ

- 43.9.6.6 ADFタスク・フォームのEARファイルのデプロイメント・エラーを解決するためのロックの解放

- 43.9.6.7 メモリー増加によるコンパイル・エラーのリカバリ

- 43.9.6.8 相関セットを使用したreceiveアクティビティのプロパティ・エイリアス定義が存在しないときのOracle JDeveloperコンパイル・エラー

44 SOAコンポジット・アプリケーションのテストの自動化

- 44.1 コンポジット・テスト・フレームワークの概要

- 44.1.1 テスト・ケースの概要

- 44.1.2 テスト・スイートの概要

- 44.1.3 エミュレーションの概要

- 44.1.4 アサーションの概要

- 44.2 テスト・スイートのコンポーネントの概要

- 44.2.1 プロセスの開始

- 44.2.2 エミュレーション

- 44.2.3 アサーション

- 44.2.4 メッセージ・ファイル

- 44.3 テスト・スイートとテスト・ケースの作成

- 44.3.1 テスト・スイートとテスト・ケースの作成方法

- 44.4 テスト・ケースのコンテンツの作成

- 44.4.1 インバウンド・メッセージの開始方法

- 44.4.2 アウトバウンド・メッセージのエミュレート方法

- 44.4.3 コールバック・メッセージのエミュレート方法

- 44.4.4 フォルト・メッセージのエミュレート方法

- 44.4.5 アサーションの作成方法

- 44.4.5.1 パート・セクション、非リーフ要素またはXML文書全体に対するアサーションの作成

- 44.4.5.2 リーフ要素に対するアサーションの作成

- 44.4.6 アサーションに関する注意事項

- 44.5 BPELプロセス・サービス・コンポーネントのテスト

- 44.5.1 BPELプロセスのアクティビティのアサーションの概要

- 44.5.2 Waitアクティビティの早送りアクションの概要

- 44.5.3 Assertアクティビティの実行の概要

- 44.5.4 BPELプロセス・サービス・コンポーネントのテストの作成方法

- 44.5.5 アサーションの作成方法

- 44.5.6 waitアクティビティのバイパス方法

- 44.5.7 アクティビティの実行回数の指定方法

- 44.6 テスト・スイートのデプロイおよび実行

第IX部 高度なトピック

45 大規模ドキュメントおよび多数のインスタンスの管理

- 45.1 大規模ドキュメントを処理する場合のベスト・プラクティス

- 45.1.1 大規模ドキュメントを処理する場合のユースケース

- 45.1.1.1 XMLペイロードへのバイナリ・オブジェクトのBase64エンコード・テキストとしての受け渡し

- 45.1.1.2 アタッチメントのエンドツーエンドのストリーミング

- 45.1.1.3 SOAコンポジット・アプリケーションとのMTOM最適化メッセージの送受信

- 45.1.1.4 繰返しコンストラクトを使用した大規模XMLの処理

- 45.1.1.5 複雑な構造の大規模XML文書の処理

- 45.1.2 大規模ドキュメントの同時処理に関する制限

- 45.1.2.1 大規模ペイロードを処理するための不透明(Opaque)スキーマ

- 45.1.3 チューニングに関する一般的な推奨事項

- 45.1.3.1 一般的な推奨事項

- 45.1.3.2 大規模ペイロード処理に対するOracle Enterprise Managerからの監査レベルの設定

- 45.1.3.3 Oracle BPEL Process ManagerおよびOracle Mediatorでのassignアクティビティの使用

- 45.1.3.4 大規模ペイロード(Oracle BPEL Process Manager)でのXSLTトランスフォーメーションの使用

- 45.1.3.5 大規模ペイロード(Oracle Mediator)でのXSLTトランスフォーメーションの使用

- 45.1.3.6 繰返し構造に対するXSLTトランスフォーメーションの使用

- 45.1.3.7 Oracle B2Bでの大規模ドキュメントの処理

- 45.1.3.8 インバウンドWebサービスのメッセージ・サイズに対するサイズ制限の設定

- 45.1.3.9 XPath関数を使用したファイル・システムへの大規模なXSLT/XQuery出力の書込み

- 45.2 大規模メタデータを処理する場合のベスト・プラクティス

- 45.2.1 BPELプロセスでの多数のアクティビティの処理に対する境界

- 45.2.2 BPELプロセスでの多数のアクティビティの使用(flowNを使用しない場合)

- 45.2.3 BPELプロセスでの多数のアクティビティの使用(flowNを使用する場合)

- 45.2.4 複数シーケンスを含むフローの使用

- 45.2.5 単一シーケンスを含むフローの使用

- 45.2.6 シーケンスを含まないフローの使用

- 45.2.7 コンポジットの多数のOracle Mediator

- 45.2.8 Oracle B2Bへの大規模データ・セットのインポート

- 45.3 多数のインスタンスを処理する場合のベスト・プラクティス

- 45.3.1 パージ・スクリプトを使用したインスタンスおよび拒否メッセージの削除

- 45.3.2 Oracle Enterprise Manager Fusion Middleware Controlでのページのロード時間の短縮

46 SOAコンポジット・アプリケーションのカスタマイズ

- 46.1 SOAコンポジット・アプリケーションのカスタマイズの概要

- 46.2 カスタマイズ可能なコンポジットの作成

- 46.2.1 カスタマイズ可能なコンポジットの作成方法

- 46.2.2 カスタマイズ・クラスの作成方法

- 46.2.3 XSDまたはWSDLファイルの追加方法

- 46.2.4 BPELプロセスでのカスタマイズ・アクティビティの検索方法

- 46.2.5 カスタマイズ・コンポジット内のアーティファクトの編集に関する注意事項

- 46.2.6 Oracle JDeveloperでの検証エラーの解決に関する注意事項

- 46.2.7 シーケンスの競合の解決に関する注意事項

- 46.2.8 カスタマイズされたアプリケーションのコンパイルおよびデプロイに関する注意事項

- 46.3 バーティカル・アプリケーションのカスタマイズ

- 46.3.1 バーティカル・アプリケーションのカスタマイズ方法

- 46.4 顧客バージョンのカスタマイズ

- 46.4.1 顧客バージョンのカスタマイズ方法

- 46.5 コンポジットのアップグレード

- 46.5.1 コア・アプリケーション・チーム・コンポジットのアップグレード方法

- 46.5.2 バーティカル・アプリケーション・チーム・コンポジットのアップグレード方法

- 46.5.3 カスタマ・コンポジットのアップグレード方法

47 ドメイン値マップの使用

- 47.1 ドメイン値マップの概要

- 47.1.1 ドメイン値マップ機能

- 47.1.1.1 修飾子ドメイン

- 47.1.1.2 修飾子の階層

- 47.1.1.3 1対多マッピング

- 47.2 ドメイン値マップの作成

- 47.2.1 ドメイン値マップの作成方法

- 47.2.2 ドメイン値マップ作成時の処理内容

- 47.3 ドメイン値マップの編集

- 47.3.1 ドメイン値マップへのドメインの追加方法

- 47.3.2 ドメインの編集方法

- 47.3.3 ドメイン値マップへのドメイン値の追加方法

- 47.3.4 ドメイン値の編集方法

- 47.4 ドメイン値マップ関数の使用

- 47.4.1 ドメイン値マップ関数の理解

- 47.4.1.1 dvm:lookupValue

- 47.4.1.2 dvm:lookupValue1M

- 47.4.2 トランスフォーメーションでのドメイン値マップ関数の使用方法

- 47.4.3 XPath式でのドメイン値マップ関数の使用方法

- 47.4.4 実行時の処理内容

- 47.5 階層ルックアップ用のドメイン値マップ・ユースケースの作成

- 47.5.1 HierarchicalValueユースケースの作成方法

- 47.5.1.1 タスク1: Oracle JDeveloperのアプリケーションおよびプロジェクトの作成方法

- 47.5.1.2 タスク2: ドメイン値マップの作成方法

- 47.5.1.3 タスク3: ファイル・アダプタ・サービスの作成方法

- 47.5.1.4 タスク4: ProcessOrdersメディエータ・コンポーネントの作成方法

- 47.5.1.5 タスク5: ファイル・アダプタ参照の作成方法

- 47.5.1.6 タスク6: ルーティング・ルールの指定方法

- 47.5.1.7 タスク7: アプリケーション・サーバー接続の構成方法

- 47.5.1.8 タスク8: コンポジット・アプリケーションのデプロイ方法

- 47.5.2 HierarchicalValueアプリケーションの実行方法と監視方法

- 47.6 複数の値のドメイン値マップ・ユースケースの作成

- 47.6.1 Multivalueユースケースの作成方法

- 47.6.1.1 タスク1: Oracle JDeveloperのアプリケーションおよびプロジェクトの作成方法

- 47.6.1.2 タスク2: ドメイン値マップの作成方法

- 47.6.1.3 タスク3: ファイル・アダプタ・サービスの作成方法

- 47.6.1.4 タスク4: LookupMultiplevaluesMediatorメディエータの作成方法

- 47.6.1.5 タスク5: ファイル・アダプタ参照の作成方法

- 47.6.1.6 タスク6: ルーティング・ルールの指定方法

- 47.6.1.7 タスク7: アプリケーション・サーバー接続の構成方法

- 47.6.1.8 タスク8: コンポジット・アプリケーションのデプロイ方法

- 47.6.2 Multivalueアプリケーションの実行方法と監視方法

48 ドメイン値マップでのOracle SOAコンポーザの使用

- 48.1 Oracle SOAコンポーザの概要

- 48.1.1 Oracle SOAコンポーザへのログイン方法

- 48.2 実行時のドメイン値マップの表示

- 48.2.1 実行時のドメイン値マップの表示方法

- 48.3 実行時のドメイン値マップの編集

- 48.3.1 実行時のドメイン値マップの編集方法

- 48.3.1.1 編集モードへの変更

- 48.3.1.2 行の追加

- 48.3.1.3 行の編集

- 48.3.1.4 行の削除

- 48.4 実行時のドメイン値マップの保存

- 48.4.1 実行時のドメイン値マップの保存方法

- 48.5 実行時の変更内容のコミット

- 48.5.1 実行時の変更内容のコミット方法

- 48.6 競合の検出

49 相互参照の使用

- 49.1 相互参照の概要

- 49.2 相互参照表の概要

- 49.3 相互参照に対するOracle Data Integratorのサポート

- 49.4 相互参照表の作成および変更

- 49.4.1 相互参照メタデータの作成方法

- 49.4.2 相互参照作成時の処理内容

- 49.4.3 カスタム・データベース表の作成方法

- 49.4.4 相互参照表へのエンド・システムの追加方法

- 49.5 相互参照表の移入

- 49.5.1 xref:populateXRefRow関数

- 49.5.2 xref:populateLookupXRefRow関数

- 49.5.3 xref:populateXRefRow1M関数

- 49.5.4 相互参照表の列の移入方法

- 49.6 相互参照表の参照

- 49.6.1 xref:lookupXRef関数

- 49.6.2 xref:lookupXRef1M関数

- 49.6.3 xref:lookupPopulatedColumns関数

- 49.6.4 相互参照表の値の参照方法

- 49.7 相互参照表の値の削除

- 49.7.1 相互参照表の値の削除方法

- 49.8 相互参照ユースケースの作成および実行

- 49.8.1 ユース-ケースの作成方法

- 49.8.1.1 タスク1: Oracle Databaseおよびデータベース・アダプタの構成方法

- 49.8.1.2 タスク2: Oracle JDeveloperのアプリケーションおよびプロジェクトの作成方法

- 49.8.1.3 タスク3: 相互参照の作成方法

- 49.8.1.4 タスク4: データベース・アダプタ・サービスの作成方法

- 49.8.1.5 タスク5: EBSおよびSBL外部参照の作成方法

- 49.8.1.6 タスク6: Loggerファイル・アダプタ外部参照の作成方法

- 49.8.1.7 タスク7: Oracle Mediatorサービス・コンポーネントの作成方法

- 49.8.1.8 タスク8: Oracle Mediatorサービス・コンポーネントのルーティング・ルールの指定方法

- 49.8.1.9 タスク9: 「Common」Oracle Mediatorのルーティング・ルールの指定方法

- 49.8.1.10 タスク10: アプリケーション・サーバー接続の構成方法

- 49.8.1.11 タスク11: コンポジット・アプリケーションのデプロイ方法

- 49.8.2 XrefCustAppアプリケーションの実行方法と監視方法

- 49.9 1M関数の相互参照の作成および実行

- 49.9.1 ユース-ケースの作成方法

- 49.9.1.1 タスク1: Oracle Databaseおよびデータベース・アダプタの構成方法

- 49.9.1.2 タスク2: Oracle JDeveloperのアプリケーションおよびプロジェクトの作成方法

- 49.9.1.3 タスク3: 相互参照の作成方法

- 49.9.1.4 タスク4: データベース・アダプタ・サービスの作成方法

- 49.9.1.5 タスク5: EBS外部参照の作成方法

- 49.9.1.6 タスク6: Loggerファイル・アダプタ外部参照の作成方法

- 49.9.1.7 タスク7: Oracle Mediatorサービス・コンポーネントの作成方法

- 49.9.1.8 タスク8: Oracle Mediatorコンポーネントのルーティング・ルールの指定方法

- 49.9.1.9 タスク9: 「Common」Oracle Mediatorのルーティング・ルールの指定方法

- 49.9.1.10 タスク10: アプリケーション・サーバー接続の構成方法

- 49.9.1.11 タスク11: コンポジット・アプリケーションのデプロイ方法

50 コンポジット・センサーの定義

- 50.1 コンポジット・センサーの概要

- 50.1.1 コンポジット・センサー使用上の制限

- 50.2 コンポジット・センサーの追加

- 50.2.1 コンポジット・センサーの追加方法

- 50.2.1.1 変数の追加方法

- 50.2.1.2 式の追加方法

- 50.2.1.3 プロパティの追加方法

- 50.2.2 重複するコンポジット・センサー名に関する注意事項

- 50.3 実行時のコンポジット・センサー・データの監視

51 2レイヤーのビジネス・プロセス管理(BPM)の使用

- 51.1 2レイヤーのビジネス・プロセス管理の概要

- 51.2 phaseアクティビティの作成

- 51.2.1 phaseアクティビティの作成方法

- 51.2.2 phaseアクティビティ作成時の処理内容

- 51.2.3 phaseアクティビティを作成した場合の実行時の処理内容

- 51.2.4 phaseアクティビティの作成に関する注意事項

- 51.3 動的ルーティング・デシジョン表の作成

- 51.3.1 動的ルーティング・デシジョン表の作成方法

- 51.3.2 動的ルーティング・デシジョン表作成時の処理内容

- 51.4 ユースケース: 2レイヤーのBPM

- 51.4.1 SOAコンポジットの設計

- 51.4.2 phaseアクティビティの作成

- 51.4.3 動的ルーティング・デシジョン表の作成および編集

- 51.4.4 BPELプロセス・モデルへのassignアクティビティの追加

- 51.4.5 サンプルのデプロイおよびテスト

52 Spring Frameworkを使用したSOAコンポジット・アプリケーションへの統合

- 52.1 Springサービス・コンポーネントの概要

- 52.2 同じSOAコンポジット・アプリケーション内でのJavaベース・コンポーネントとWSDLベース・コンポーネントの統合

- 52.2.1 JavaベースおよびWSDLベースの統合例

- 52.2.2 Spring Frameworkでのコールバックの使用

- 52.3 Oracle JDeveloperでのSpringサービス・コンポーネントの作成

- 52.3.1 Oracle JDeveloperでのSpringサービス・コンポーネントの作成方法

- 52.3.2 JavaからWSDLへの変換時のJavaクラス・エラーに関する注意事項

- 52.4 グローバルSpringコンテキストを介したカスタムSpring Beanの定義

- 52.4.1 グローバルSpringコンテキストを介したカスタムSpring Beanの定義方法

- 52.5 事前定義済のSpring Beanの使用

- 52.5.1 headerHelperBeanのIHeaderHelperBean.javaインタフェース

- 52.5.2 instancerHelperBeanのIInstanceHelperBean.javaインタフェース

- 52.5.3 loggerBeanのILoggerBean.javaインタフェース

- 52.5.4 Springコンテキスト・ファイル内の事前定義済Spring Beanの参照方法

- 52.6 Fusion Order DemoでのSpringサービス・コンポーネントの統合

- 52.6.1 Javaベクトル・タイプ・パラメータを使用したEJBの使用方法

- 52.7 JAXBおよびOXMのサポート

- 52.7.1 拡張されたマッピング・ファイル

- 52.8 Springサービス・コンポーネントによるGroovyおよびAspectjクラスの構成

- 52.9 Springエラーのトラブルシューティング

第X部 Oracle Business Activity Monitoringの使用

53 Oracle BAMとSOAコンポジット・アプリケーションの統合

- 53.1 Oracle BAMとSOAコンポジット・アプリケーションの統合の概要

- 53.2 Oracle BAMアダプタの構成

- 53.3 Oracle BAM Monitor ExpressとBPELプロセスの併用

- 53.3.1 BPELデザイナの「監視」ビューへのアクセス方法

- 53.3.2 アクティビティ・モニターの構成方法

- 53.3.3 BPELプロセス監視オブジェクトの作成方法

- 53.3.4 カウンタの構成方法

- 53.3.5 間隔の構成方法

- 53.3.6 ビジネス・インジケータの構成方法

- 53.3.7 アクティビティへの既存の監視オブジェクトの追加方法

- 53.3.8 デプロイメント用のBPELプロセス・モニターの構成方法

- 53.3.9 Monitor Expressダッシュボードの使用に関する注意事項

- 53.3.10 Monitor Expressデータ・オブジェクトに関する注意事項

- 53.3.10.1 COMPONENTデータ・オブジェクトの理解

- 53.3.10.2 COUNTERデータ・オブジェクトの理解

- 53.3.10.3 INTERVALデータ・オブジェクトの理解

- 53.3.10.4 ビジネス・インジケータ・データ・オブジェクトの理解

- 53.3.10.5 トラブルシューティング

- 53.4 Oracle BAMサーバーへの設計時接続の作成

- 53.4.1 Oracle BAMサーバーへの接続の作成方法

- 53.5 SOAコンポジット・アプリケーションでのOracle BAMアダプタの使用

- 53.5.1 SOAコンポジット・アプリケーションでのOracle BAMアダプタの使用方法

- 53.6 BPELプロセスでのOracle BAMアダプタの使用

- 53.6.1 BPELプロセスでのOracle BAMアダプタの使用方法

- 53.7 Oracle BAMセンサー・アクションを使用したBPELセンサーの統合

- 53.7.1 センサーの作成方法

- 53.7.2 Oracle BAMセンサー・アクションの作成方法

- 53.8 エンタープライズ・メッセージ・リソースを使用したSOAアプリケーションとOracle BAMの統合

54 Oracle BAMデータ・コントロールの使用

- 54.1 Oracle BAMデータ・コントロールの概要

- 54.2 Oracle BAMデータ・コントロールを使用できるプロジェクトの作成

- 54.3 Oracle BAMサーバー接続の作成

- 54.3.1 Oracle BAMサーバーへのOracle BAMデータ・コントロール接続の変更方法

- 54.3.1.1 BAMデータ・コントロールを新規Oracle BAM接続と関連付ける方法

- 54.4 Oracle ADFデータ・コントロールを使用したOracle BAMの公開

- 54.4.1 Oracle BAMデータ・コントロールの作成方法

- 54.4.2 Oracle BAMデータ・コントロール作成時のプロジェクトにおける処理内容

- 54.4.2.1 「データ・コントロール」パネルでのOracle BAMデータ・コントロールの表示

- 54.5 Oracle BAMデータ・コントロールの問合せの作成

- 54.5.1 問合せタイプの選択方法

- 54.5.2 パラメータの作成方法

- 54.5.3 パラメータへの値の受け渡し方法

- 54.5.4 計算フィールドの作成方法

- 54.5.4.1 計算フィールドでのグループの作成

- 54.5.5 フィールドの選択、編成およびソート方法

- 54.5.6 フィルタの作成方法

- 54.5.6.1 フィルタ・ヘッダーの作成方法

- 54.5.6.2 フィルタ・エントリの作成方法

- 54.5.6.3 比較値の入力

- 54.5.6.4 「すぐに有効」の使用

- 54.5.7 グループの選択および編成方法

- 54.5.7.1 時間グループと時系列の構成方法

- 54.5.8 集計の作成方法

- 54.5.9 問合せの変更方法

- 54.6 ADFページでのOracle BAMデータ・コントロールの使用

- 54.6.1 JSFページでのOracle BAMデータ・コントロールの使用方法

- 54.7 Oracle BAMデータ・コントロールを使用したアプリケーションのデプロイ

- 54.7.1 開発モードのOracle WebLogic Serverへのデプロイ方法

- 54.7.2 本番モードのOracle WebLogic Serverへのデプロイ方法

55 Oracle BAMデータ・オブジェクトの定義および管理

- 55.1 Oracle BAMデータ・オブジェクトの概要

- 55.2 データ・オブジェクトの定義

- 55.2.1 データ・オブジェクトの定義方法

- 55.2.2 データ・オブジェクトへの列の追加方法

- 55.2.3 データ・オブジェクトへの参照列の追加方法

- 55.2.4 データ・オブジェクトへの計算列の追加方法

- 55.2.5 データ・オブジェクトへのタイムスタンプ列の追加方法

- 55.2.6 システム・データ・オブジェクトに関する注意事項

- 55.2.7 Oracle Data Integratorデータ・オブジェクトに関する注意事項

- 55.3 データ・オブジェクトに対する権限の作成

- 55.3.1 データ・オブジェクトに対する権限を作成する方法

- 55.3.2 ユーザーのグループの追加方法

- 55.3.3 他のデータ・オブジェクトからの権限のコピー方法

- 55.4 既存のデータ・オブジェクトの表示

- 55.4.1 データ・オブジェクトの一般情報の表示方法

- 55.4.2 データ・オブジェクトのレイアウトの表示方法

- 55.4.3 データ・オブジェクトのコンテンツの表示方法

- 55.5 データ・オブジェクト・フォルダの使用

- 55.5.1 フォルダの作成方法

- 55.5.2 フォルダを開く方法

- 55.5.3 フォルダ権限の設定方法

- 55.5.4 フォルダの移動方法

- 55.5.5 フォルダの名前の変更方法

- 55.5.6 フォルダの削除方法

- 55.6 セキュリティ・フィルタの作成

- 55.6.1 セキュリティ・フィルタの作成方法

- 55.6.2 他のデータ・オブジェクトからのセキュリティ・フィルタのコピー方法

- 55.7 ディメンションの作成

- 55.7.1 ディメンションの作成方法

- 55.7.2 時間ディメンションの作成方法

- 55.8 データ・オブジェクトの名前の変更および移動

- 55.8.1 データ・オブジェクトの名前の変更方法

- 55.8.2 データ・オブジェクトの移動方法

- 55.9 索引の作成

- 55.9.1 索引の作成方法

- 55.10 データ・オブジェクトの消去

- 55.10.1 データ・オブジェクトの消去方法

- 55.11 データ・オブジェクトの削除

- 55.11.1 データ・オブジェクトの削除方法

56 Oracle BAMエンタープライズ・メッセージ・ソースの作成

- 56.1 エンタープライズ・メッセージ・ソースの概要

- 56.2 エンタープライズ・メッセージ・ソースの作成

- 56.2.1 エンタープライズ・メッセージ・ソースの作成方法

- 56.2.2 日時仕様の構成方法

- 56.2.3 拡張XMLフォーマットの使用方法

- 56.2.4 EMSエラー処理の構成方法

- 56.3 エンタープライズ・メッセージ・ソースの使用

- 56.3.1 エンタープライズ・メッセージ・ソースの編集、コピーおよび削除方法

- 56.3.2 エンタープライズ・メッセージ・ソースの開始および停止方法

- 56.3.3 エンタープライズ・メッセージ・ソースをサブスクライブおよびサブスクライブ解除する方法

- 56.3.4 エンタープライズ・メッセージ・ソースのテスト方法

- 56.3.5 エンタープライズ・メッセージ・ソースのリフレッシュ方法

- 56.3.6 エンタープライズ・メッセージ・ソースのメトリックの監視方法

- 56.4 外部JMSプロバイダの使用

- 56.5 ユースケース: Oracle Streams AQ JMSプロバイダに対するEMSの作成

- 56.5.1 AQ-JMSでのJMSトピックの作成

- 56.5.2 Oracle WebLogic Serverでのデータ・ソースの作成

- 56.5.3 外部JMSサーバーの作成

- 56.5.4 Oracle BAMアーキテクトでのEMSの定義

- 56.5.5 SQL表のレコードの挿入と更新

57 Oracle Data IntegratorとOracle BAMの併用

- 57.1 Oracle Data Integrator (ODI)とOracle BAMとの統合に関する注意事項

- 57.1.1 11g リリース1 (11.1.1.7.0)におけるアプリケーション・サーバー内のOracle BAM

- 57.1.2 ODIエージェントのタイプ

- 57.1.3 リリース11gのOracle BAM-ODI統合における追加のインストール手順

- 57.1.4 Oracle BAMとともにOracle Data Integratorを使用するためのヒント

- 57.1.5 Oracle BAM-ODI統合のインストールに関する前提条件

- 57.2 Oracle Data Integrator統合ファイルのインストール

- 57.2.1 スクリプトを使用したOracle BAM-ODI統合ファイルのインストール方法

- 57.2.2 スクリプトを使用したOracle BAM-ODI統合ファイルのインストール時の処理内容

- 57.2.3 手動による統合ファイルのインストール方法

- 57.2.4 ログの使用

- 57.3 Oracle BAMナレッジ・モジュールの使用

- 57.4 Oracle BAMターゲットの作成

- 57.4.1 Oracle BAMターゲットの作成方法

- 57.5 Oracle BAMスキーマのリバース・エンジニアリング

- 57.6 Oracle Data Integrator外部データ・ソース定義の更新

- 57.6.1 Oracle Data Integrator外部データ・ソース定義の更新方法

- 57.7 Oracle BAMアラートからのOracle Data Integratorシナリオの起動

- 57.8 Oracle BAMが組み込まれたOracle Data IntegratorエージェントのデーモンまたはMicrosoft Windowsサービスとしての実行

- 57.9 Oracle BAMとOracle Data Integratorとの統合のためのインストール・ファイル

58 外部データ・ソースの作成

- 58.1 外部データ・ソースの概要

- 58.2 外部データ・ソースの作成

- 58.2.1 外部データ・ソースの作成方法

- 58.2.2 Oracle Data Integrator外部データ・ソースに関する注意事項

- 58.2.3 外部データ・ソースの編集方法

- 58.2.4 外部データ・ソースの削除方法

- 58.3 外部データ・ソースの例

- 58.4 ユース・ケース

- 58.4.1 ユースケース: Oracle Business Intelligence Enterprise Editionに対するEDSの作成

- 58.4.2 ユース・ケース: Sybaseに対する外部データ・ソースの作成

- 58.4.3 ユース・ケース: Microsoft SQL Serverに対する外部データ・ソースの作成

59 Oracle BAM Webサービスの使用

- 59.1 Oracle BAM Webサービスの概要

- 59.2 DataObjectOperations Webサービスの使用

- 59.2.1 DataObjectOperations Webサービスの使用方法

- 59.3 DataObjectDefinition Webサービスの使用

- 59.3.1 DataObjectDefinition Webサービスの使用方法

- 59.4 ManualRuleFire Webサービスの使用

- 59.4.1 ManualRuleFire Webサービスの使用方法

- 59.5 ICommand Webサービスの使用

- 59.5.1 ICommand Webサービスの使用方法

60 Oracle BAMアラートの作成

- 60.1 アラートの作成の概要

- 60.2 アラート・ルールの作成

- 60.2.1 アラート・ルールの作成方法

- 60.2.2 アラートのアクティブ化の方法

- 60.2.3 アラート・ルールの変更方法

- 60.2.4 アラートの削除方法

- 60.2.5 アラートの変更に関する注意事項

- 60.3 テンプレートからのアラート・ルールの作成

- 60.3.1 テンプレートからのアラート・ルールの作成方法

- 60.4 メッセージを含むアラート・ルールの作成

- 60.4.1 メッセージを含むアラート・ルールの作成方法

- 60.5 複合アラートの作成

- 60.5.1 依存ルールの作成方法

- 60.6 アラート履歴の使用

- 60.6.1 「アラート履歴」リストの表示方法

- 60.6.2 「アラート履歴」リストの消去方法

- 60.7 Webサービスの起動によるアラートの起動

- 60.8 外部アクションのコール

- 60.9 外部電子メール・アカウントへのアラートの送信

61 ICommandの使用

- 61.1 ICommandの概要

- 61.2 ICommandの実行

- 61.3 コマンドおよびオプションの構文の指定

- 61.3.1 セキュリティ資格証明の指定方法

- 61.3.2 コマンドの指定方法

- 61.3.3 オブジェクト名の指定方法

- 61.3.4 複数パラメータ・ターゲットの指定方法

- 61.4 コマンドライン専用パラメータの使用

- 61.5 ICommandのリモート実行

第XI部 Oracle User Messaging Serviceの使用

62 Oracle User Messaging Service

- 62.1 ユーザー・メッセージング・サービスの概要

- 62.1.1 コンポーネント

- 62.1.2 アーキテクチャ

63 ユーザー・メッセージング・サービスEJB APIを使用したメッセージの送受信

- 63.1 UMS Java APIの概要

- 63.1.1 Java EEアプリケーション・モジュールの作成

- 63.2 UMSクライアント・インスタンスの作成

- 63.2.1 プログラミングまたは宣言的な方法によるMessagingEJBClientインスタンスの作成

- 63.2.2 MessagingClientFactoryクラスのAPIリファレンス

- 63.3 メッセージの送信

- 63.3.1 メッセージの作成

- 63.3.1.1 プレーン・テキスト・メッセージの作成

- 63.3.1.2 Text/PlainパートとText/HTMLパートを持つマルチパート/代替メッセージの作成

- 63.3.1.3 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

- 63.3.2 MessageFactoryクラスのAPIリファレンス

- 63.3.3 MessageインタフェースのAPIリファレンス

- 63.3.4 列挙DeliveryTypeのAPIリファレンス

- 63.3.5 メッセージのアドレス指定

- 63.3.5.1 アドレスのタイプ

- 63.3.5.2 Addressオブジェクトの作成

- 63.3.5.3 フェイルオーバー・アドレスを使用した受信者の作成

- 63.3.5.4 AddressFactoryクラスのAPIリファレンス

- 63.3.5.5 AddressインタフェースのAPIリファレンス

- 63.3.6 メッセージ・ステータスの取得

- 63.3.6.1 メッセージ・ステータスの同期取得

- 63.3.6.2 メッセージ・ステータスの非同期通知

- 63.4 メッセージの受信

- 63.4.1 アクセス・ポイントの登録

- 63.4.2 同期受信

- 63.4.3 非同期受信

- 63.4.4 メッセージ・フィルタ

- 63.5 UMS Enterprise JavaBeansクライアントAPIを使用したクライアント・アプリケーションの作成

- 63.5.1 開発の概要

- 63.5.2 電子メール・ドライバの構成

- 63.5.3 JDeveloper 11gを使用したアプリケーションの作成

- 63.5.3.1 プロジェクトを開く

- 63.5.4 アプリケーションのデプロイ

- 63.5.5 アプリケーションのテスト

- 63.6 UMS Enterprise JavaBeansクライアントAPIを使用したクライアント・エコー・アプリケーションの作成

- 63.6.1 開発の概要

- 63.6.2 電子メール・ドライバの構成

- 63.6.3 JDeveloper 11gを使用したアプリケーションの作成

- 63.6.3.1 プロジェクトを開く

- 63.6.4 アプリケーションのデプロイ

- 63.6.5 アプリケーションのテスト

- 63.7 新規アプリケーション・サーバー接続の作成

64 ユーザー・メッセージング・サービスJava APIを使用したメッセージの送受信

- 64.1 UMS Java APIの概要

- 64.2 UMSクライアント・インスタンスの作成とランタイム・パラメータの指定

- 64.2.1 MessagingClientFactoryクラスのAPIリファレンス

- 64.3 メッセージの送信

- 64.3.1 メッセージの作成

- 64.3.1.1 プレーン・テキスト・メッセージの作成

- 64.3.1.2 Text/PlainパートとText/HTMLパートを持つマルチパート/代替メッセージの作成

- 64.3.1.3 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

- 64.3.2 MessagingFactoryクラスのAPIリファレンス

- 64.3.3 MessageインタフェースのAPIリファレンス

- 64.3.4 列挙DeliveryTypeのAPIリファレンス

- 64.3.5 メッセージのアドレス指定

- 64.3.5.1 アドレスのタイプ

- 64.3.5.2 Addressオブジェクトの作成

- 64.3.5.3 フェイルオーバー・アドレスを使用した受信者の作成

- 64.3.5.4 MessagingFactoryクラスのAPIリファレンス

- 64.3.5.5 AddressインタフェースのAPIリファレンス

- 64.3.6 ユーザー・プリファレンス・ベースのメッセージング

- 64.4 メッセージ・ステータスの取得

- 64.4.1 メッセージ・ステータスの同期取得

- 64.4.2 メッセージ・ステータスの非同期取得

- 64.4.2.1 プログラムによるリスナーの作成

- 64.4.2.2 デフォルトのステータス・リスナー

- 64.4.2.3 メッセージごとのステータス・リスナー

- 64.5 メッセージの受信

- 64.5.1 アクセス・ポイントの登録

- 64.5.2 同期受信

- 64.5.3 非同期受信

- 64.5.3.1 プログラムによるリスナーの作成

- 64.5.3.2 デフォルトのメッセージ・リスナー

- 64.5.3.3 アクセス・ポイントごとのメッセージ・リスナー

- 64.5.4 メッセージ・フィルタ

- 64.6 クラスタ環境の構成

- 64.7 セキュリティの構成

- 64.8 スレッド・モデル

- 64.8.1 リスナー・スレッド

- 64.9 UMSクライアントAPIを使用したクライアント・アプリケーションの作成

- 64.9.1 開発の概要

- 64.9.2 電子メール・ドライバの構成

- 64.9.3 JDeveloper 11gを使用したアプリケーションの作成

- 64.9.3.1 プロジェクトを開く

- 64.9.4 アプリケーションのデプロイ

- 64.9.5 アプリケーションのテスト

- 64.10 UMSクライアントAPIを使用したクライアント・エコー・アプリケーションの作成

- 64.10.1 開発の概要

- 64.10.2 電子メール・ドライバの構成

- 64.10.3 JDeveloper 11gを使用したアプリケーションの作成

- 64.10.3.1 プロジェクトを開く

- 64.10.4 アプリケーションのデプロイ

- 64.10.5 アプリケーションのテスト

- 64.11 新規アプリケーション・サーバー接続の作成

65 ユーザー・メッセージング・サービスWebサービスAPIを使用したメッセージの送受信

- 65.1 UMS WebサービスAPIの概要

- 65.2 UMSクライアント・インスタンスの作成とランタイム・パラメータの指定

- 65.3 メッセージの送信

- 65.3.1 メッセージの作成

- 65.3.1.1 プレーン・テキスト・メッセージの作成

- 65.3.1.2 テキスト・パートとバイナリ・パートを持つマルチパート/混合メッセージの作成

- 65.3.1.3 Text/PlainパートとText/HTMLパートを持つマルチパート/代替メッセージの作成

- 65.3.1.4 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

- 65.3.2 MessageインタフェースのAPIリファレンス

- 65.3.3 列挙DeliveryTypeのAPIリファレンス

- 65.3.4 メッセージのアドレス指定

- 65.3.4.1 アドレスのタイプ

- 65.3.4.2 Addressオブジェクトの作成

- 65.3.4.3 フェイルオーバー・アドレスを使用した受信者の作成

- 65.3.4.4 受信者のタイプ

- 65.3.4.5 MessagingFactoryクラスのAPIリファレンス

- 65.3.4.6 AddressインタフェースのAPIリファレンス

- 65.3.5 ユーザー・プリファレンス・ベースのメッセージング

- 65.4 メッセージ・ステータスの取得

- 65.4.1 メッセージ・ステータスの同期取得

- 65.4.2 メッセージ・ステータスの非同期取得

- 65.4.2.1 プログラムによるリスナーの作成

- 65.4.2.2 コールバック・サービスのパブリッシュ

- 65.4.2.3 動的にパブリッシュされたエンドポイントの停止

- 65.4.2.4 登録

- 65.5 メッセージの受信

- 65.5.1 アクセス・ポイントの登録

- 65.5.2 同期受信

- 65.5.3 非同期受信

- 65.5.3.1 プログラムによるリスナーの作成

- 65.5.3.2 デフォルトのメッセージ・リスナー

- 65.5.3.3 アクセス・ポイントごとのメッセージ・リスナー

- 65.5.4 メッセージ・フィルタ

- 65.6 クラスタ環境の構成

- 65.7 セキュリティの構成

- 65.7.1 クライアントおよびサーバーのセキュリティ

- 65.7.2 リスナー/コールバックのセキュリティ

- 65.8 スレッド・モデル

- 65.9 WebサービスAPIを使用したサンプル・チャット・アプリケーション

- 65.9.1 概要

- 65.9.1.1 提供されるファイル

- 65.9.2 事前作成されたサンプルの実行

- 65.9.3 サンプルのテスト

- 65.10 新規アプリケーション・サーバー接続の作成

66 Parlay X Webサービス・マルチメディア・メッセージングAPI

- 66.1 Parlay X Messaging操作の概要

- 66.2 SendMessageインタフェース

- 66.2.1 sendMessage操作

- 66.2.2 getMessageDeliveryStatus操作

- 66.3 ReceiveMessageインタフェース

- 66.3.1 getReceivedMessages操作

- 66.3.2 getMessage操作

- 66.3.3 getMessageURIs操作

- 66.4 Parlay X Messagingに対するOracleの拡張機能

- 66.4.1 ReceiveMessageManagerインタフェース

- 66.4.1.1 startReceiveMessage操作

- 66.4.1.2 stopReceiveMessage操作

- 66.5 Parlay X Messaging Client APIおよびClient Proxy Package

- 66.6 Parlay X APIを使用したサンプル・チャット・アプリケーション

- 66.6.1 概要

- 66.6.1.1 提供されるファイル

- 66.6.2 事前作成されたサンプルの実行

- 66.6.3 サンプルのテスト

- 66.6.4 新規アプリケーション・サーバー接続の作成

67 ユーザー・メッセージング・プリファレンス

- 67.1 ユーザー・メッセージング・プリファレンスの概要

- 67.1.1 用語

- 67.1.2 通知配信プリファレンスの構成

- 67.1.3 配信プリファレンス・ルール

- 67.1.3.1 データ型

- 67.1.3.2 システム条件

- 67.1.3.3 ビジネス条件

- 67.1.4 ルール・アクション

- 67.2 メッセージング・チャネルの管理方法

- 67.2.1 チャネルの作成

- 67.2.2 チャネルの編集

- 67.2.3 チャネルの削除

- 67.2.4 デフォルト・チャネルの設定

- 67.3 フィルタを使用した連絡先ルールの作成

- 67.3.1 フィルタの作成

- 67.3.2 フィルタの編集

- 67.3.3 フィルタの削除

- 67.4 設定の構成

第XII部 付録

A BPELプロセスのアクティビティとサービス

- A.1 アクティビティおよびコンポーネントの概要

- A.2 BPEL 1.1および2.0アクティビティの概要

- A.2.1 多くのアクティビティに共通のタブ

- A.2.1.1 「注釈」タブ

- A.2.1.2 「アサーション」タブ

- A.2.1.3 「相関」タブ

- A.2.1.4 「ドキュメント」タブ

- A.2.1.5 「ヘッダー」タブ

- A.2.1.6 「プロパティ」タブ

- A.2.1.7 「スキップ条件」タブ

- A.2.1.8 「ソース」および「ターゲット」タブ

- A.2.1.9 「タイムアウト」タブ

- A.2.2 BPELプロジェクトでのアクティビティのコピーおよび貼付け

- A.2.3 Assignアクティビティ

- A.2.4 Assertアクティビティ

- A.2.5 Bind Entityアクティビティ

- A.2.6 Compensateアクティビティ

- A.2.7 CompensateScopeアクティビティ

- A.2.8 Create Entityアクティビティ

- A.2.9 Dehydrateアクティビティ

- A.2.10 Emailアクティビティ

- A.2.11 Emptyアクティビティ

- A.2.12 Exitアクティビティ

- A.2.13 Flowアクティビティ

- A.2.14 FlowNアクティビティ

- A.2.15 forEachアクティビティ

- A.2.16 Ifアクティビティ

- A.2.17 IMアクティビティ

- A.2.18 Invokeアクティビティ

- A.2.19 Java Embeddingアクティビティ

- A.2.20 Partner Linkアクティビティ

- A.2.21 Phaseアクティビティ

- A.2.22 Pickアクティビティ

- A.2.23 Receiveアクティビティ

- A.2.24 Receive Signalアクティビティ

- A.2.25 Remove Entityアクティビティ

- A.2.26 RepeatUntilアクティビティ

- A.2.27 Replayアクティビティ

- A.2.28 Replyアクティビティ

- A.2.29 Rethrowアクティビティ

- A.2.30 Scopeアクティビティ

- A.2.31 Sequenceアクティビティ

- A.2.32 Signalアクティビティ

- A.2.33 SMSアクティビティ

- A.2.34 Switchアクティビティ

- A.2.35 Terminateアクティビティ

- A.2.36 Throwアクティビティ

- A.2.37 Transformアクティビティ

- A.2.38 User Notificationアクティビティ

- A.2.39 Validateアクティビティ

- A.2.40 Voiceアクティビティ

- A.2.41 Waitアクティビティ

- A.2.42 Whileアクティビティ

- A.3 BPELサービスの概要

- A.4 Oracle Service Registryの公開および参照

- A.4.1 ビジネス・サービスの公開方法

- A.4.2 レジストリへの接続の作成方法

- A.4.3 SOAプロジェクトを構成してレジストリからサービスを起動する方法

- A.4.3.1 SOAPエンドポイントの場所の動的解決

- A.4.3.2 WSDLエンドポイントの場所の動的解決

- A.4.3.3 エンドポイントの解決

- A.4.4 ランタイムの照会URL、UDDIサービス・キーおよびエンドポイント・アドレスの構成方法

- A.4.4.1 レジストリ・コントロールにおけるエンドポイントの場所の変更

- A.4.4.2 複数のSOAパーティションからのWSDLの発行

- A.4.5 複数のパーティションでUDDIにWSDLを発行する方法

- A.5 Oracle Enterprise Repositoryによる設計時ガバナンスの提供

- A.6 プロセス・ダイアグラムのロード時の検証

B XPath拡張関数

- B.1 SOA XPath拡張関数

- B.1.1 データベース関数

- B.1.1.1 lookup-table

- B.1.1.2 query-database

- B.1.1.3 sequence-next-val

- B.1.2 日付関数

- B.1.2.1 add-dayTimeDuration-to-dateTime

- B.1.2.2 current-date

- B.1.2.3 current-dateTime

- B.1.2.4 current-time

- B.1.2.5 day-from-dateTime

- B.1.2.6 format-dateTime

- B.1.2.7 hours-from-dateTime

- B.1.2.8 implicit-timezone

- B.1.2.9 minutes-from-dateTime

- B.1.2.10 month-from-dateTime

- B.1.2.11 seconds-from-dateTime

- B.1.2.12 subtract-dayTimeDuration-from-dateTime

- B.1.2.13 timezone-from-dateTime

- B.1.2.14 year-from-dateTime

- B.1.3 算術関数

- B.1.3.1 abs

- B.1.4 文字列関数

- B.1.4.1 compare

- B.1.4.2 compare-ignore-case

- B.1.4.3 create-delimited-string

- B.1.4.4 ends-with

- B.1.4.5 format-string

- B.1.4.6 get-content-as-string

- B.1.4.7 get-content-from-file-function

- B.1.4.8 get-localized-string

- B.1.4.9 index-within-string

- B.1.4.10 last-index-within-string

- B.1.4.11 left-trim

- B.1.4.12 lower-case

- B.1.4.13 matches

- B.1.4.14 right-trim

- B.1.4.15 upper-case

- B.2 BPEL XPath拡張関数

- B.2.1 addQuotes

- B.2.2 authenticate

- B.2.3 appendToList

- B.2.4 copyList

- B.2.5 countNodes

- B.2.6 doc

- B.2.7 doStreamingTranslate

- B.2.8 doTranslateFromNative

- B.2.9 doTranslateToNative

- B.2.10 doXSLTransform

- B.2.11 doXSLTransformForDoc

- B.2.12 formatDate

- B.2.13 generateGUID

- B.2.14 getApplicationName

- B.2.15 getAttachmentContent

- B.2.16 getComponentName

- B.2.17 getComponentInstanceID

- B.2.18 getCompositeName

- B.2.19 getCompositeInstanceID

- B.2.20 getCompositeURL

- B.2.21 getContentAsString

- B.2.22 getConversationId

- B.2.23 getCreator

- B.2.24 getCurrentDate

- B.2.25 getCurrentDateTime

- B.2.26 getCurrentTime

- B.2.27 getECID

- B.2.28 getElement

- B.2.29 getFaultAsString

- B.2.30 getFaultName

- B.2.31 getGroupIdsFromGroupAlias

- B.2.32 getInstanceId

- B.2.33 getNodeValue

- B.2.34 getNodes

- B.2.35 getOwnerDocument

- B.2.36 getParentComponentInstanceID

- B.2.37 getPreference

- B.2.38 getProcessId

- B.2.39 getProcessOwnerId

- B.2.40 getProcessURL

- B.2.41 getProcessVersion

- B.2.42 getUserAliasId

- B.2.43 getUserIdsFromGroupAlias

- B.2.44 setCompositeInstanceTitle

- B.2.45 instanceOf

- B.2.46 integer

- B.2.47 listUsers

- B.2.48 lookupUser

- B.2.49 parseEscapedXML

- B.2.50 parseXML

- B.2.51 processXQuery

- B.2.52 processXSLT

- B.2.53 readBinaryFromFile

- B.2.54 readFile

- B.2.55 search

- B.2.56 writeBinaryToFile

- B.2.57 BPEL 1.1とBPEL 2.0におけるBPEL拡張関数

- B.2.57.1 getLinkStatus

- B.2.57.2 getVariableData

- B.2.57.3 getVariableProperty (For BPEL 1.1)

- B.2.57.4 getVariableProperty (For BPEL 2.0)

- B.2.58 ユーティリティ関数

- B.2.58.1 batchProcessActive

- B.2.58.2 batchProcessCompleted

- B.2.58.3 format

- B.2.58.4 genEmptyElem

- B.2.58.5 getChildElement

- B.2.58.6 getMessage

- B.2.58.7 max-value-among-nodeset

- B.2.58.8 min-value-among-nodeset

- B.2.58.9 square-root

- B.3 Oracle Mediator XPath拡張関数

- B.3.1 doStreamingTranslate

- B.3.2 doTranslateFromNative

- B.3.3 doTranslateToNative

- B.3.4 getAttachmentContent

- B.3.5 getComponentInstanceID

- B.3.6 getComponentName

- B.3.7 getCompositeInstanceID

- B.3.8 getCompositeName

- B.3.9 getHeader

- B.3.10 getECID

- B.3.11 getParentComponentInstanceID

- B.3.12 readBinaryFromFile

- B.3.13 setCompositeInstanceTitle

- B.4 拡張関数

- B.4.1 create-nodeset-from-delimited-string

- B.4.2 generate-guid

- B.4.3 lookupPopulatedColumns

- B.4.4 lookupValue

- B.4.5 lookupValue1M

- B.4.6 lookupXRef

- B.4.7 lookupXRef1M

- B.4.8 lookup-xml

- B.4.9 markForDelete

- B.4.10 populateXRefRow

- B.4.11 populateXRefRow1M

- B.5 ワークフロー・サービス関数

- B.5.1 clearTaskAssignees

- B.5.2 createWordMLDocument

- B.5.3 getNotificationProperty

- B.5.4 getNumberOfTaskApprovals

- B.5.5 getPreviousTaskApprover

- B.5.6 getTaskAttachmentByIndex

- B.5.7 getTaskAttachmentByName

- B.5.8 getTaskAttachmentContents

- B.5.9 getTaskAttachmentsCount

- B.5.10 getTaskResourceBundleString

- B.5.11 wfDynamicGroupAssign

- B.5.12 wfDynamicUserAssign

- B.5.13 アイデンティティ・サービス関数

- B.5.13.1 getDefaultRealmName

- B.5.13.2 getGroupProperty

- B.5.13.3 getManager

- B.5.13.4 getReportees

- B.5.13.5 getSupportedRealmNames

- B.5.13.6 getUserProperty

- B.5.13.7 getUserRoles

- B.5.13.8 getusersinapprole

- B.5.13.9 getUsersInGroup

- B.5.13.10 isUserInRole

- B.5.13.11 lookupGroup

- B.5.13.12 lookupUser

- B.6 Oracle JDeveloperにおける式ビルダーでのXPath式の構築

- B.6.1 式ビルダーの使用方法

- B.6.2 XPathビルディング・アシスタントの概要

- B.6.3 XPathビルディング・アシスタントの使用方法

- B.6.4 XSLTマッパーでのXPathビルディング・アシスタントの使用

- B.6.5 関数パラメータのツールのヒント

- B.6.6 構文検証およびセマンティク検証

- B.6.7 フリー・フォーム・テキストおよびXPath式を使用した式の作成

- B.6.8 Windows上でXPath関数でディレクトリ・パスにダブル・スラッシュを使用するとエラーが発生する可能性がある

- B.7 ユーザー定義XPath拡張関数の作成

- B.7.1 ユーザー定義XPath拡張関数の実装方法

- B.7.1.1 XSLTマッパーに対する関数の実装方法

- B.7.1.2 他のすべてのコンポーネントに対する関数の実装方法

- B.7.2 ユーザー定義XPath拡張関数の構成方法

- B.7.3 ユーザー定義関数のランタイムへのデプロイ方法

C デプロイメント・ディスクリプタのプロパティ

- C.1 デプロイメント・ディスクリプタのプロパティの概要

- C.1.1 プロパティ・インスペクタでデプロイメント・ディスクリプタのプロパティを定義する方法

- C.1.2 BPELプロセス内でのプリファレンス値の取得方法

- C.2 非推奨の10.1.3プロパティ

D センサー・パブリック・ビューとセンサー・アクションXSDの理解

- D.1 センサー・パブリック・ビューとセンサー・アクションXSDファイルの概要

- D.2 センサー・パブリック・ビュー

- D.2.1 BPMスキーマ

- D.2.1.1 BPEL_PROCESS_INSTANCES

- D.2.1.2 BPEL_ACTIVITY_SENSOR_VALUES

- D.2.1.3 BPEL_FAULT_SENSOR_VALUES

- D.2.1.4 BPEL_VARIABLE_SENSOR_VALUES

- D.3 センサー・アクションXSDファイル

E Oracle BAM Webサービスの操作

- E.1 DataObjectOperations10131

- E.1.1 バッチ

- E.1.1.1 リクエスト・メッセージ

- E.1.2 削除

- E.1.2.1 リクエスト・メッセージ

- E.1.3 挿入

- E.1.3.1 リクエスト・メッセージ

- E.1.4 更新

- E.1.4.1 リクエスト・メッセージ

- E.1.5 アップサート

- E.1.5.1 リクエスト・メッセージ

- E.2 DataObjectOperationsByName

- E.2.1 削除

- E.2.1.1 リクエスト・メッセージ

- E.2.2 取得

- E.2.2.1 リクエスト・メッセージ

- E.2.3 挿入

- E.2.3.1 リクエスト・メッセージ

- E.2.4 更新

- E.2.4.1 リクエスト・メッセージ

- E.2.5 アップサート

- E.2.5.1 リクエスト・メッセージ

- E.3 DataObjectOperationsByID

- E.3.1 バッチ

- E.3.1.1 リクエスト・メッセージ

- E.3.2 削除

- E.3.2.1 リクエスト・メッセージ

- E.3.3 挿入

- E.3.3.1 リクエスト・メッセージ

- E.3.4 更新

- E.3.4.1 リクエスト・メッセージ

- E.3.5 アップサート

- E.3.5.1 リクエスト・メッセージ

- E.4 DataObjectDefinitionの操作

- E.4.1 作成

- E.4.1.1 リクエスト・メッセージ

- E.4.1.2 レスポンス・メッセージ

- E.4.2 削除

- E.4.2.1 リクエスト・メッセージ

- E.4.2.2 レスポンス・メッセージ

- E.4.3 取得

- E.4.3.1 リクエスト・メッセージ

- E.4.3.2 レスポンス・メッセージ

- E.4.4 更新

- E.4.4.1 リクエスト・メッセージ

- E.4.4.2 レスポンス・メッセージ

- E.5 ManualRuleFireの操作

- E.5.1 FireRuleByName

- E.5.1.1 リクエスト・メッセージ

- E.5.1.2 レスポンス・メッセージ

F Oracle BAMアラート・ルール・オプション

- F.1 イベント

- F.1.1 特定の時間

- F.1.2 本日の特定の時間

- F.1.3 指定日の特定の時間

- F.1.4 時間間隔ごと

- F.1.5 指定日の特定の時間以降の日付間隔ごと

- F.1.6 レポートの変更時

- F.1.7 データ・オブジェクトのデータ・フィールド変更時

- F.1.8 レポートのデータ・フィールドが特定の条件を満たす場合

- F.1.9 データ・オブジェクトのデータ・フィールドが特定の条件を満たす場合

- F.1.10 このルールの起動時

- F.2 条件

- F.2.1 時間間隔の場合

- F.2.2 日間隔の場合

- F.2.3 特定の曜日の場合

- F.3 アクション

- F.3.1 電子メールでレポートを送信

- F.3.2 電子メールでメッセージを送信

- F.3.3 電子メールでレポートを送信し、指定期間の経過後別のユーザーにエスカレート

- F.3.4 パラメータ化されたメッセージを送信

- F.3.5 データ・オブジェクトのすべての一致する行に対し、パラメータ化されたメッセージを送信

- F.3.6 ルールの起動

- F.3.7 アクションが失敗した場合、ルールを起動

- F.3.8 データ・オブジェクトから行を削除

- F.3.9 Webサービスのコール

- F.3.9.1 Webサービスのコールの使用方法: 例

- F.3.10 Oracle Data Integratorシナリオの実行

- F.3.11 外部アクションのコール

- F.4 頻度制限

G Oracle BAM ICommandの操作とファイル・フォーマット

- G.1 個々の操作の要約

- G.2 操作に関する詳細な説明

- G.2.1 clear

- G.2.2 delete

- G.2.3 export

- G.2.4 import

- G.2.5 rename

- G.3 コマンド・ファイルのフォーマット

- G.3.1 インライン・コンテンツ

- G.3.2 コマンドID

- G.3.3 エラー時も続行

- G.4 ログ・ファイルのフォーマット

- G.5 サンプル・エクスポート・ファイル

- G.6 正規表現

H 正規化されたメッセージのプロパティ

- H.1 正規化されたメッセージの概要

- H.2 Oracle BPEL Process Managerのプロパティ

- H.3 Oracle Web Services Addressingのプロパティ

- H.4 bpelx拡張による正規化されたメッセージのプロパティの操作

- H.4.1 BPEL 1.1のbpelx拡張構文

- H.4.2 BPEL 2.0のbpelx拡張構文

I ルール・ディクショナリ・エディタのタスク・フローによって実装されるインタフェース

- I.1 MetadataDetailsインタフェース

- I.1.1 getDocumentメソッド

- I.1.2 getRelatedDocumentメソッド

- I.1.3 setDocumentメソッド

- I.2 NLSPreferencesインタフェース

J Oracle User Messaging Serviceアプリケーション

- J.1 SOAおよびUser Messaging Serviceのインストールおよび構成

- J.1.1 LDAPユーザー・プロファイルのアドレスの更新

- J.1.1.1 インストール

- J.1.1.2 接続

- J.1.1.3 LDAPのユーザー・メッセージング・デバイス・アドレスの設定

- J.2 ユーザー指定のチャネルへのメッセージの送信

- J.2.1 SendMessageアプリケーションの概要

- J.2.1.1 提供されるファイル

- J.2.2 サンプルの作成

- J.2.3 新規アプリケーション・サーバー接続の作成

- J.2.4 プロジェクトのデプロイ

- J.2.5 ユーザー・メッセージング・プリファレンスの構成

- J.2.6 サンプルのテスト

- J.2.6.1 電子メール送信実行の確認

- J.3 添付ファイル付き電子メールの送信

- J.3.1 SendEmailWithAttachmentアプリケーションの概要

- J.3.1.1 提供されるファイル

- J.3.2 事前作成されたサンプルの実行

- J.3.3 サンプルのテスト

- J.3.3.1 実行の確認

- J.3.4 サンプルの作成

- J.3.4.1 base64エンコーディングでのテキスト・コンテンツの送信

K Oracle SOA Suiteのプロパティのロード・マップ

- K.1 Oracle BPEL Process Managerデプロイメント・ディスクリプタのプロパティ

- K.2 正規化されたメッセージ・ヘッダー・プロパティ

- K.2.1 Oracle JCAアダプタのメッセージ・ヘッダー・プロパティ

- K.2.2 Oracle BPEL Process ManagerおよびOracle Web Services Addressingのメッセージ・ヘッダー・プロパティ

- K.2.3 Oracle B2Bのメッセージ・ヘッダー・プロパティ

- K.3 SOAコンポジット・アプリケーションのプロパティ

- K.4 フォルト・ポリシーとアダプタ拒否メッセージのプロパティ

- K.5 Oracle B2Bのシステム・プロパティ

- K.6 Oracle Enterprise Manager Fusion Middleware Controlのプロパティ・ページ

- K.6.1 SOAインフラストラクチャのプロパティ

- K.6.2 Oracle BPEL Process Manager

- K.6.3 ヒューマン・ワークフロー通知とタスク・サービス

- K.6.4 Oracle Mediator

- K.6.5 相互参照

- K.6.6 Oracle B2B

- K.6.7 サービス・バインディング・コンポーネントと参照バインディング・コンポーネントのプロパティ

- K.7 システムMBeanブラウザのプロパティ

- K.7.1 SOAインフラストラクチャのプロパティ

- K.7.2 Oracle BPEL Process Managerのプロパティ

- K.7.3 Oracle Mediatorのプロパティ

- K.7.4 ヒューマン・ワークフロー通知とタスク・サービスのプロパティ

- K.7.5 Oracle Service RegistryのWSDL URLキャッシュ構成

索引

Oracle® Fusion Middleware

Oracle SOA Suite開発者ガイド

11gリリース1 (11.1.1.7)

B56238-08(原本部品番号:E10224-13)

2013年2月

サービス・バインディング・コンポーネントと参照バインディング・コンポーネント、Oracle BPELプロセス、ヒューマン・タスク、ビジネス・ルール、Oracle MediatorおよびSpringサービス・コンポーネントで構成される、Oracleサービス指向アーキテクチャ(SOA)コンポジット・アプリケーションを設計、保護およびデプロイする方法について説明する、開発者向けのドキュメントです。トランスフォーメーションとビジネス・イベントの設計、Oracle Business Activity MonitoringとOracle User Messaging Serviceのコンポジットへの統合、Oracle BPM Worklistでの実行時のヒューマン・タスクの操作についての追加情報も含まれています。

Oracle Fusion Middleware Oracle SOA Suite開発者ガイド, 11g リリース1 (11.1.1.7)

B56238-08

Copyright © 2005, 2013, Oracle and/or its affiliates.All rights reserved.

原本著者:  Oracle Corporation

原本協力者: Oracle SOA Suite開発、製品管理および品質保証チーム

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT RIGHTSPrograms, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.  As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007).Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、このソフトウェアまたはハードウェアを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXはThe Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

はじめに

このマニュアルでは、Oracle SOA Suiteの使用方法を説明します。

ここでは、次のトピックについて説明します。

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

対象読者

このマニュアルは、Oracle SOA Suiteを使用してアプリケーションを開発するすべてのユーザーを対象としています。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docaccを参照してください。

Oracleサポートへのアクセス

Oracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info、聴覚に障害があるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。

関連ドキュメント

詳細は、次のOracleドキュメントを参照してください。

- 『Oracle Fusion Middleware Oracle B2Bユーザーズ・ガイド』

- Oracle Fusion Middleware Oracle SOA Suite Healthcare Integrationユーザーズ・ガイド

- 『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』

- 『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』

- 『Oracle Fusion Middleware Oracle Business Rulesユーザーズ・ガイド』

- 『Oracle Fusion Middleware Oracle Business Rulesランゲージ・リファレンス・ガイド』

- Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド

- 『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』

- Oracle Fusion Middleware Oracle SOA Suiteエンタープライズ・デプロイメント・ガイド

- 『Oracle Fusion Middleware高可用性ガイド』

- 『Oracle Fusion Middleware WebLogic Scripting Toolコマンド・リファレンス』

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

このガイドで説明する新機能

このガイドは、いくつかの点が更新されています。次の表に、追加または変更された部分をリストします。

既知の問題のリスト(リリース・ノート)については、http://www.oracle.com/technetwork/middleware/docs/soa-aiafp-knownissuesindex-364630.htmlの「Known Issues for Oracle SOA Products and Oracle AIA Foundation Pack」を参照してください。

項

変更内容

2013年2月

第2章「Oracle SOA Suiteを使用したSOAコンポジット・アプリケーションの開発」

第2.1.2項「SOAアプリケーションおよびプロジェクト作成時の処理内容」

SOAコンポジット・アプリケーションのプロジェクト名が、SOAコンポジット・エディタの上のタブおよびアプリケーション・ナビゲータに表示されることを示すために更新された項。11g R1 (11.1.1.7)より前のリリースでは、プロジェクト名は、これらの両方の場所のcomposite.xmlファイルのその実際のファイル名として表示されていました。

X

第8章「BPELプロセスからの非同期Webサービスの起動」

第8.3項「複数のreceiveまたはpickアクティビティで同じパートナ・リンクが使用されている場合における適切なエンドポイントへのコールバック・メッセージのルーティング」

複数のreceiveまたはpickアクティビティが同じパートナ・リンクに関連付けられている場合に、適切なエンドポイント・アドレスへのコールバック・メッセージのルーティングを解決する方法を説明するために追加された項。

X

第8.4項「パートナ・リンク操作レベルでの冪等性の管理」

パートナ・リンクの操作レベルでの冪等性を定義する方法を説明するために追加された項。

X

第8.6項「動的パートナ・リンクを起動する際のセキュリティ証明書のオーバーライド」

キーストア受信者別名値を指定して、WebサービスのWSDLファイル内のセキュリティ証明書をオーバーライドする方法を説明するために追加された項。

X

第8.7項「動的パートナ・リンクのWSDLファイルのオーバーライド」

動的パートナ・リンクによって使用されるデフォルトWSDLファイルをオーバーライドする方法を説明するために追加された項。

X

第12章「BPELプロセスでのフォルト処理の使用」

第12.3.3項「同期BPELプロセスでのフォルト処理の追加および伝播方法」

同期BPELプロセスにシステム・フォルトを追加する方法を説明するために追加された項。

X

第12.10.6項「idempotentプロパティとフォルト処理に関する注意事項」

composite.xmlファイルでidempotentデプロイメント・ディスクリプタのプロパティがfalseに設定されていて、パートナ・リンクの起動に失敗した場合にどのようになるのかを説明するために追加された項。

X

第37章「バインディング・コンポーネントの開始」

第37.3項「外部参照のバインディングURLで使用するためのトークンの作成」

外部参照のバインディングURLの値に対してOracle JDeveloperでトークンを作成する方法を説明するために追加された項。ハードコーディングされたHTTP値が、ユーザーが割り当てたトークン値に置き換えられます。

X

第40章「XSLTマッパーを使用したトランスフォメーションの作成」

第40.3.16項「カスタマイズ・ファイルをインポートしてXSLTマッパーの表示プリファレンスを指定する方法」

XSLTマッパーの表示プリファレンスを指定するカスタマイズ・ファイルをインポートする方法を説明するために追加された項。

X

第50章「コンポジット・センサーの定義」

第50章「コンポジット・センサーの定義」

ビジネス・イベントをサブスクライブしたサービス・コンポーネントに対するコンポジット・センサーを定義する方法を説明するために更新された章。

X

付録G「Oracle BAM ICommandの操作とファイル・フォーマット」

G.2.3項「export」

依存レポートのエクスポート方法を記述するために変更された-dependenciesオプションの説明。

X

例G-22 関連する依存レポートとともにレポートをエクスポートする

依存レポートのエクスポート方法を示すために追加された例。

X

第I部

Oracle SOA Suiteの概要

この部では、Oracle SOA Suiteの概要と、SOAコンポジット・アプリケーションの開発について説明します。

この部は、次の章で構成されています。

- 第1章「Oracle SOA Suiteを使用したアプリケーション作成の概要」

- 第2章「Oracle SOA Suiteを使用したSOAコンポジット・アプリケーションの開発」

- 第3章「SOAサンプル・アプリケーションの概要」

1 Oracle SOA Suiteを使用したアプリケーション作成の概要

この章では、サービス指向アーキテクチャ(SOA)とOracle SOA Suite、SOAを有効にするためにOracle SOA Suiteで使用する標準、SOAコンポジット・アプリケーションのアーキテクチャと実行時の動作、SOAコンポジット・アプリケーション設計へのアプローチおよびOracle SOA Suiteの詳細の参照先について説明します。

この章には次の項が含まれます:

- 第1.1項「サービス指向アーキテクチャの概要」

- 第1.2項「サービスの概要」

- 第1.3項「Oracle SOA Suiteの概要」

- 第1.4項「SOAを有効にするためにOracle SOA Suiteで使用する標準」

- 第1.5項「SOAコンポジット・アプリケーション内のサービス・コンポーネント・アーキテクチャ」

- 第1.6項「SOAコンポジット・アプリケーションの実行時の動作」

- 第1.7項「SOAコンポジット・アプリケーション設計のアプローチ」

- 第1.8項「Oracle SOA Suiteの理解」

- 第1.9項「アクセシビリティ・オプション」

1.1 サービス指向アーキテクチャの概要

市場の変化、競争の激化、顧客ニーズの推移によって、ITにはこれまで以上の柔軟性とスピードが求められています。現在、すべての企業はグローバルなビジネス環境における変化を予測し、競合他社にすばやく対応し、成長のために自社の資産を最大限に活用する必要性に迫られています。このような課題に対し、先進企業では、アプリケーションやIT環境の複雑さを克服し、これらの要求に応える手段としてサービス指向アーキテクチャ(SOA)を採用しています。

SOAは、ビジネス上の問題に対するソリューションを提供するために、エンタープライズ・アプリケーション統合の構築をサポートするエンタープライズ・アーキテクチャを提供します。SOAは、統合と再利用が容易で、柔軟かつ順応性のあるITインフラストラクチャを作成するモジュール型ビジネスのWebサービスとして、エンタープライズ・アプリケーションの開発を促進します。

1.2 サービスの概要

SOAでは、ビジネス機能を個別の単位、つまりサービスに分割します。SOAアプリケーションでは、サービスを再利用してビジネス・プロセスを自動化します。

サービスは標準インタフェースとメッセージ構造によって定義されます。最も広く使用されているメカニズムはWebサービス用の標準です。この標準には、サービス・インタフェース定義用のWeb Services Description Language(WSDL)ファイル、およびメッセージ構造定義用のXMLスキーマ・ドキュメント(XSD)が含まれます。これらのXML標準は、標準プロトコルを使用して容易に変換されます。Webサービス用の標準は標準ドキュメント構造を使用しているため、サービス実装で使用するオペレーティング・システムやコンピュータ言語に関係なく、既存のシステム間の相互運用が可能になります。

SOAアプローチを設計するときは、サービス・ポートフォリオ・プランを作成して、ビジネス・プロセスでサービスとして使用する共通機能を識別します。プランを作成して管理することにより、可能な場合は常に、既存のサービスやアプリケーションを再利用したり別の目的用に再定義できます。また、このプランにより、アプリケーションに必要な機能を作成する時間を削減できます。

1.3 Oracle SOA Suiteの概要

Oracle SOA Suiteには、コンポジット・アプリケーションを設計、デプロイおよび管理するためのサービス・インフラストラクチャ・コンポーネントの完全なセットが用意されています。Oracle SOA Suiteを使用すると、サービスを作成して管理し、コンポジット・アプリケーションやビジネス・プロセスに組み込むことができます。コンポジットにより、1つのSOAコンポジット・アプリケーションに複数のテクノロジ・コンポーネントを容易に組み立てることができます。Oracle SOA Suiteは異種ITインフラストラクチャに組み込まれ、企業によるSOAの段階的な採用を可能にします。

Oracle SOA Suiteの各コンポーネントは、単一のデプロイメント、管理、ツール・モデル、エンドツーエンドのセキュリティ、統一メタデータ管理などの共通機能を利用しています。Oracle SOA Suiteの優れている点は、次のような統合された機能セットが備わっていることです。

- メッセージング

- サービスの検出

- オーケストレーション

- Webサービスの管理とセキュリティ

- ビジネス・ルール

- イベント・フレームワーク

- ビジネス・アクティビティの監視

1.4 SOAを有効にするためにOracle SOA Suiteで使用する標準

Oracle SOA Suiteでは、標準および相互運用性を特に重要視しています。次の標準が使用されています。

- サービス・コンポーネント・アーキテクチャ(SCA)アセンブリ・モデル
サービス詳細と相互運用性を提供し、コンポジット・アプリケーションを形成します。SCAにより、ビジネス・ロジックを、すべてのSCA準拠アプリケーションに容易に統合できる再利用可能なサービス・コンポーネントとして表現できます。その結果、アプリケーションはSOAコンポジット・アプリケーションになります。SCA標準の仕様は、オープン複合サービス・アーキテクチャ(CSA)会員セクションを介して、Organization for the Advancement of Structured Information Standards(OASIS)によって管理されています。

http://www.oasis-opencsa.org

- サービス・データ・オブジェクト(SDO)
標準データ・メソッドを指定することで、物理的にどのようにアクセスされているかに関係なくビジネス・データを修正できます。SOAコンポジット・アプリケーションでSDOを使用する場合、特定のバックエンド・データ・ソースへのアクセス方法についての知識は不要です。つまり、静的または動的なプログラミング・スタイルを使用して、接続および切断されたアクセスを取得できます。

- Business Process Execution Language(BPEL)
ビジネス・プロセス・オーケストレーションと実行に関する業界標準を企業に提供します。BPELを使用すると、独立した一連のサービスをエンドツーエンドのプロセス・フローに統合するビジネス・プロセスを設計できます。この統合により、プロセスのコストと複雑さが低減されます。BPELバージョン1.1および2.0がサポートされています。

- XSLトランスフォーメーション(XSLT)
XML文書を処理し、文書データを、あるXMLスキーマから他のスキーマに変換します。

- Java Connector Architecture(JCA)
エンタープライズ情報システム(EIS)での多数のアプリケーション・サーバー間にある接続性の問題に対して、Javaテクノロジ・ソリューションを提供します。

- Java Messaging Service(JMS)
Java 2 Platform Enterprise Edition(Java EE)に基づいたアプリケーション・コンポーネントによって、異種システム間で分散されているビジネス・ロジックにアクセスできるメッセージング標準を提供します。

- WSDLファイル
SOAコンポジット・アプリケーションへのエントリ・ポイントを提供します。WSDLファイルは標準規約言語を提供するもので、サービスの機能を理解する場合に必須です。

- Simple Object Access Protocol(SOAP)
メッセージ配信に対するデフォルトのネットワーク・プロトコルを提供します。

1.5 SOAコンポジット・アプリケーション内のサービス・コンポーネント・アーキテクチャ

Oracle SOA Suiteでは、SCA標準を使用して複数のサービス・コンポーネントを1つのSOAコンポジット・アプリケーションに組み立てます。SCAは、次のプログラミング・モデルを提供します。

- Java、BPEL、C++などのプログラミング言語やXSLTなどの宣言的な言語を含む各種のテクノロジを使用して記述されたサービス・コンポーネントを作成します。SCAでは、特定のプログラミング言語やテクノロジ(Webサービスを含む)を使用する必要はありません。

- 複数のサービス・コンポーネントを1つのSOAコンポジット・アプリケーションに組み立てます。SCA環境では、サービス・コンポーネントはアプリケーションのビルディング・ブロックです。

SCAでは、サービス・コンポーネントの分散グループをアプリケーションにまとめるためのモデルを提供することにより、サービスの詳細、サービスとサービス・コンポーネントの相互作用方法を記述できます。コンポジットはサービス・コンポーネントをグループ化するのに使用され、ワイヤはサービス・コンポーネントを接続するのに使用されます。SCAの目的は、セキュリティおよびトランザクションを含むコンポジットにインフラストラクチャを宣言的に適用することにより、ミドルウェアの問題をプログラミング・コードから除去することです。

SCAには、主に次の利点があります。

- 疎結合
サービス・コンポーネントは、他のサービス・コンポーネントがどのように構築されているかを考慮することなく、他のサービス・コンポーネントと統合できます。

- 柔軟性
サービス・コンポーネントは、他のサービス・コンポーネントと簡単に交換できます。

- サービス起動
サービスは、同期的または非同期的に起動できます。

- 生産性
サービス・コンポーネントを簡単に統合し、SOAコンポジット・アプリケーションを作成します。

- 簡単なメンテナンスとデバッグ
サービス・コンポーネントは、問題が発生しても簡単に保守やデバッグを実行できます。

SOAコンポジットは複数のサービス、サービス・コンポーネントおよび参照の集合で、単一のアプリケーション内で設計されデプロイされます。サービス、サービス・コンポーネントおよび参照間でのワイヤリングにより、メッセージ通信が可能になります。コンポジットの詳細は、composite.xmlファイルに格納されています。

図1-1はコンポジットの例を示しています。このコンポジットには、インバウンド・サービス・バインディング・コンポーネント、BPELプロセス・サービス・コンポーネント(Account)、ビジネス・ルール・サービス・コンポーネント(AccountRule)および2つのアウトバウンド参照バインディング・コンポーネントが含まれています。

図1-1 単純なSOAコンポジット・アーキテクチャ

「図1-1 単純なSOAコンポジット・アーキテクチャ」の説明

1.5.1 サービス・コンポーネント

サービス・コンポーネントは、SOAコンポジット・アプリケーションの構築に使用するビルディング・ブロックです。

次のサービス・コンポーネントを使用できます。各サービス・コンポーネントに対して同じ名前の対応するサービス・エンジンがあります。すべてのサービス・エンジンは、単一のコンポジットでの相互作用が可能です。

- BPELプロセスにより、プロセス・オーケストレーションおよび同期または非同期プロセスの保存ができます。一連のビジネス・アクティビティとサービスをエンドツーエンドのプロセス・フローに統合するビジネス・プロセスを設計します。

- ビジネス・ルールにより、ルールに基づいたビジネス上の意思決定を設計できます。

- ヒューマン・タスクにより、ユーザーまたはグループが、エンドツーエンドのビジネス・プロセス・フローの一環として実行するタスクを記述するワークフローのモデリングが提供されます。

- メディエータは、異なるコンポーネント間でイベント(メッセージ)をルーティングするために使用します。

- Springにより、JavaインタフェースをSOAコンポジット・アプリケーションに統合できます。

サービス・コンポーネントの詳細は、第2.2項「サービス・コンポーネントの追加」を参照してください。

1.5.2 バインディング・コンポーネント

バインディング・コンポーネントは、SOAコンポジットと外部との接続を確立します。バインディング・コンポーネントには、次の2種類があります。

- サービスは、外部に対してSOAコンポジット・アプリケーションへのエントリ・ポイントを提供します。サービスのWSDLファイルは、その機能を外部アプリケーションに通知します。これらの機能は、SOAコンポジット・アプリケーション・コンポーネントとの接続に使用されます。サービスのバインディング接続性には、サービス(SOAP/HTTPやJCAアダプタなど)と通信できるプロトコルが記述されています。

- 参照は、SOAコンポジット・アプリケーションから外部にある外部サービスに送信するメッセージを有効にします。

表1-1では、Oracle SOA Suiteで提供されるバインディング・コンポーネントをリストして説明します。

表1-1 Oracle SOA Suiteで提供されるバインディング・コンポーネント

バインディング・コンポーネント

説明

Webサービス(SOAP over HTTP)

SOAP over HTTPを使用した標準ベース・サービスへの接続に使用します。

JCAアダプタ

テクノロジ(データベース、ファイル・システム、FTPサーバー、メッセージング、JMS、IBM WebSphere MQ、Oracle User Messaging Serviceなど)およびアプリケーション(Oracle E-Business Suite、PeopleSoftなど)への、サービスと参照の統合に使用します。これには、AQアダプタ、データベース・アダプタ、ファイル・アダプタ、FTPアダプタ、JMSアダプタ、MQアダプタ、ソケット・アダプタ、Oracle User Messaging Serviceアダプタおよびサード・パーティ・アダプタが含まれます。

Oracle B2B

Oracle Metadata Services (MDS)リポジトリでのB2Bメタデータの参照とドキュメント定義の選択に使用します。

Oracle Healthcare

ヘルスケア・システムとの間でメッセージを送受信するために使用します。

ADF-BCサービス

SOAプラットフォームがあるSDOを使用したOracle Application Development Framework(ADF)アプリケーションへの接続に使用します。

Oracle Applications

Oracle ApplicationsへのOracle Applicationsアダプタの統合に使用します。

BAMアダプタ

Java EEアプリケーションをOracle BAMサーバーに統合しデータを送るために使用し、また、SOAコンポジット・アプリケーションにおいて参照バインディング・コンポーネントとしても使用します。

EJBサービス

Enterprise JavaBeansへのSDOパラメータまたはJavaインタフェースの統合に使用します。

直接バインディング・サービス

インバウンド方向では、SOAコンポジット・アプリケーションの起動、およびRemote Method Invocation(RMI)を介したメッセージの交換に使用します。アウトバウンド方向では、Oracle Service Bus(OSB)フローまたは別のSOAコンポジット・アプリケーションの起動に使用します。

HTTPバインディング

HTTPバインディングへのSOAコンポジット・アプリケーションの統合に使用します。

バインディング・コンポーネントの詳細は、第2.3項「サービス・バインディング・コンポーネントの追加」および第2.4項「参照バインディング・コンポーネントの追加」を参照してください。

1.5.3 ワイヤ

ワイヤを使用すると、メッセージ通信のために、次のコンポーネントを単一のSOAコンポジット・アプリケーションでグラフィカルに接続できます。

- サービス・コンポーネントに対するサービス

- 他のサービス・コンポーネントに対するサービス・コンポーネント

- 参照に対するサービス・コンポーネント

ワイヤの詳細は、第2.5項「ワイヤの追加」を参照してください。

1.6 SOAコンポジット・アプリケーションの実行時の動作

図1-2は、SCAテクノロジを使用したSOAコンポジット・アプリケーションの操作性を示しています。この例では、外部アプリケーション(..NET支払計算)がSOAコンポジット・アプリケーションとの接続を開始しています。

サービス、参照、サービス・コンポーネントおよびワイヤがアプリケーション内で実行するタスクの詳細な説明は、第1.5項「SOAコンポジット・アプリケーション内のサービス・コンポーネント・アーキテクチャ」を参照してください。

図1-2 SOAコンポジット・アプリケーションの実行時の動作

「図1-2 SOAコンポジット・アプリケーションの実行時の動作」の説明

.NET支払計算は外部アプリケーションで、SOAPメッセージをSOAアプリケーションに送信して接続を開始します。サービス・インフラストラクチャは、バインディング・コンポーネントからSOAPメッセージを受信し、対象のコンポーネント・ターゲットを判断します。BPELプロセス・サービス・エンジンは、BPEL融資プロセス・アプリケーションが処理するメッセージをサービス・インフラストラクチャから受信し、処理が完了すると、そのサービス・インフラストラクチャに転送します。

表1-2は、図1-1に示すSOAコンポジット・アプリケーションの操作性を説明しています。

表1-2 SCAテクノロジを使用したSOAコンポジット・アプリケーションの概要

パート

説明

図1-1での使用例

参照項目

バインディング・コンポーネント

SOAコンポジットと外部との接続を確立します。次の2種類があります。

- サービス・バインディング・コンポーネントは、SOAコンポジット・アプリケーションへのエントリ・ポイントを提供します。

- 参照バインディング・コンポーネントは、SOAコンポジット・アプリケーションから外部サービスへのメッセージの送信を可能にします。

SOAPバインディング・コンポーネント・サービスは、次のことを行います。

- WSDLファイルでその機能を通知します。

- .NETアプリケーションからSOAPメッセージを受信します。

- セキュリティ・チェックのために、ポリシー・インフラストラクチャを通じてメッセージを送信します。

- メッセージを正規化されたメッセージ(XMLフォーマットでのサービスのWSDL規約の内部表現)に変換します。

- メッセージをサービス・インフラストラクチャに転送します。

図1-2の参照バインディング・コンポーネントの例は、融資プロセス・アプリケーションです。

第1.5.1項「サービス・コンポーネント」

サービス・インフラストラクチャ

内部メッセージ・トランスポートを提供します。

サービス・インフラストラクチャ:

- SOAPサービス・バインディング・コンポーネントからメッセージを受信します。

- 処理するメッセージを、最初にBPELプロセス・サービス・エンジンに転送し、次にヒューマン・タスク・サービス・エンジンに転送します。

第1.6.1項「サービス・インフラストラクチャ」

サービス・エンジン(サービス・コンポーネントをホストするコンテナ)

サービス・コンポーネントのビジネス・ロジックまたは処理ルールをホストします。各サービス・コンポーネントには、独自のサービス・エンジンがあります。

BPELプロセス・サービス・エンジン:

- BPEL融資プロセス・アプリケーションが処理するメッセージをサービス・インフラストラクチャから受信します。

- 処理が完了するとメッセージをサービス・インフラストラクチャに転送します。

第1.6.2項「サービス・エンジン」

Universal Description, Discovery, and Integration(UDDI)およびMDS

MDSリポジトリには、使用可能なサービスの説明が保存されます。UDDIでは、これらのサービスが通知され、実行時における検出と動的バインディングを可能にします。

このコンポジット・アプリケーションで使用されるSOAPサービスは、MDSリポジトリに保存され、またUDDIに対して公開できます。

『Oracle Fusion Middleware Oracle SOA Suiteスタート・ガイド』

SOAアーカイブ・コンポジット

(デプロイメント・ユニット)

コンポジット・アプリケーションを記述するデプロイメント・ユニット。

コンポジット・アプリケーションのSOAアーカイブ(SAR)はサービス・インフラストラクチャにデプロイされます。

第1.6.3項「デプロイ済サービス・アーカイブ」

1.6.1 サービス・インフラストラクチャ

サービス・インフラストラクチャは、次の内部メッセージ・ルーティング・インフラストラクチャ機能を提供して、コンポーネントを接続し、データ・フローを有効にします。

- SOAPサービスやアダプタを介して、サービス・プロバイダや外部パートナからメッセージを受信します。

- メッセージを適切なサービス・エンジンに送信します。

- サービス・エンジンから受信したメッセージを、ワイヤリングに基づいて、コンポジットの追加サービス・エンジンまたは参照バインディング・コンポーネントに送信します。

1.6.2 サービス・エンジン

サービス・エンジンは、これらのサービス・コンポーネントのビジネス・ロジックや処理ルールをホストするコンテナです。サービス・エンジンはサービス・インフラストラクチャから受信したメッセージ情報を処理します。

各サービス・コンポーネントに対して同じ名前の対応するサービス・エンジンがあります。すべてのサービス・エンジンは、単一のコンポジットでの相互作用が可能です。

詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。

1.6.3 デプロイ済サービス・アーカイブ

SARは、SOAアーカイブ・デプロイメント・ユニットです。SARファイルは、接頭辞sca_が必要な特別なJARファイルです (例: sca_OrderBookingComposite_rev1.0.jar)。SARファイルは、サービス・インフラストラクチャにデプロイされます。SARは、BPELプロセス、ビジネス・ルール、ヒューマン・タスクおよびOracle Mediatorルーティング・サービスなどのサービス・コンポーネントを単一のアプリケーションにパッケージ化します。SARファイルは、以前のリリースのBPELスーツケース・アーカイブと類似していますが、上位のコンポジット・レベルで対応し、アプリケーションに含まれる追加サービス・コンポーネント(ヒューマン・タスク、ビジネス・ルールおよびOracle Mediatorルーティング・サービスなど)があります。

詳細は、第43章「SOAコンポジット・アプリケーションのデプロイ」を参照してください。

1.7 SOAコンポジット・アプリケーション設計のアプローチ

SOAコンポジット・アプリケーションを作成する際は、次のいずれかのアプローチを選択できます。

- トップダウン: ビジネス・プロセスを分析し、プロセスをサポートするアクティビティを識別します。コンポジットを作成するときに、SOAコンポジット・エディタを使用してすべてのSOAコンポーネントを定義します。すべてのサービスを最初に作成し、次に、作成したサービスを参照するBPELプロセスを作成します。

- ボトムアップ: 既存のアプリケーションとアセットを分析し、サービスとして使用可能かどうかを識別します。BPELプロセスを作成するときに、必要に応じてサービスを作成します。このアプローチは、ITが変更に対して対応する必要がある場合に有効です。

1.8 Oracle SOA Suiteの理解

Oracle SOA Suiteをアプリケーションで最適に使用する方法については、この開発者ガイド以外に、次のリソースも参照してください。

- スタート・ガイド: 『Oracle Fusion Middleware Oracle SOA Suiteスタート・ガイド』は、Oracle SOA Suiteとそのコンポーネントの概要を説明し、このスイートを使用して実行できる処理の概要を説明しています。これ以外のドキュメントについては、Oracle Fusion Middleware 11g リリース1のドキュメント・ライブラリの「Oracle SOA Suite」セクションを参照してください。

- Oracle SOA Suiteサンプルでは、Oracle SOA Suiteとそのコンポーネントについて、様々なユースケースのサンプルへのアクセスを提供しています。

- Oracle JDeveloperのキュー・カード: Oracle JDeveloperのキュー・カードは、Oracle SOA Suiteを使用したアプリケーション開発プロセスの手順を説明しています。このキュー・カードは、組み込まれている例とサンプル・スキーマ、またはユーザー独自のデータを使用できるように設計されています。また、キュー・カードには、詳細なバックグラウンド情報を提供するトピック、およびカードに示した手順の実行方法を説明するビューレットも含まれています。キュー・カードを使用すると、短時間で簡単にOracle SOA Suiteの基本機能を理解し、簡単なエンドツーエンドのタスクを実行できます。キュー・カードにアクセスするには、Oracle JDeveloperで「ヘルプ」→「キュー・カード」の順にクリックします。

注意:

このガイドでは主に、Oracle SOA SuiteでのOracle WebLogic Serverの使用方法を説明していますが、情報の大部分はOracle SOA Suiteでの他のサードパーティ・アプリケーション・サーバーの使用にも適用できます。ただし、サードパーティ・アプリケーション・サーバーの使用にはいくつか相違点がある場合があります。

これらの相違点の詳細は、Oracle Fusion Middlewareサードパーティ・アプリケーション・サーバー・ガイドを参照してください。

1.9 アクセシビリティ・オプション

この項では、Oracle SOA Suiteで使用可能なアクセシビリティ・オプションについて説明します。

1.9.1 Oracle SOAコンポーザでのアクセシビリティ機能の有効化方法

Oracle SOAコンポーザでは、コンポジットの再デプロイを必要とせずに、実行中に、デプロイ済ドメイン値のマップ、承認構成および割当てルール、および非承認ビジネス・ルールを管理できます。Oracle SOAコンポーザは、スクリーン・リーダーのオプションを提供しており、これにより、ご使用のスクリーン・リーダーでこのアプリケーションのすべてのコンポーネントにアクセスし、読み取ることができます。

スクリーン・リーダーを有効化する手順は、次のとおりです。

1. 右上隅の「スクリーン・リーダー・モードの有効化」リンクをクリックします。
確認メッセージ「これにより、現行セッションのスクリーン・リーダー・モードが有効化されます。続行しますか。」が、図1-3に示すように表示されます。

図1-3 Oracle SOAコンポーザのアクセシビリティ・オプション

「図1-3 Oracle SOAコンポーザのアクセシビリティ・オプション」の説明

2. 「はい」をクリックして確認します。

Oracle SOAコンポーザの詳細は、第48章「ドメイン値マップでのOracle SOAコンポーザの使用」を参照してください。

1.9.2 Oracle BPM Worklistでのアクセシビリティ機能の有効化方法

Oracle BPM Worklistを使用すると、ビジネス・ユーザーは自分に割り当てられたタスクにアクセスして操作できます。Oracle BPM Worklistは、アクセシビリティのオプションを提供しており、それはこのアプリケーションのすべてのコンポーネントの読取りを支援します。

スクリーン・リーダーを有効化する手順は、次のとおりです。

1. 右上隅にある「プリファレンス」をクリックします。

2. 図1-4に示す「アクセシビリティ」タブで、目的のオプションを選択します。

図1-4 BPM Worklistの「アクセシビリティ」オプション

「図1-4 BPM Worklistの「アクセシビリティ」オプション」の説明

3. 「OK」をクリックします。

Oracle BPM Worklistの詳細は、第32項「Oracle BPM Worklistの使用」を参照してください。

2 Oracle SOA Suiteを使用したSOAコンポジット・アプリケーションの開発

この章では、Oracle JDeveloperを使用してSOAコンポジット・アプリケーションを作成する方法について説明します。ここでは、コンポジット、サービス・バインディング・コンポーネント、参照バインディング・コンポーネント、サービス・コンポーネントの作成と、セキュリティ、デプロイメントおよびテストの基本的な手順を、SOAコンポジット・アプリケーションの設計時に考慮が必要な重要な問題とともに説明します。

この章には次の項が含まれます:

- 第2.1項「SOAアプリケーションの作成」

- 第2.2項「サービス・コンポーネントの追加」

- 第2.3項「サービス・バインディング・コンポーネントの追加」

- 第2.4項「参照バインディング・コンポーネントの追加」

- 第2.5項「ワイヤの追加」

- 第2.6項「セキュリティの追加」

- 第2.7項「SOAコンポジット・アプリケーションのデプロイ」

- 第2.8項「SOAコンポジット・アプリケーションの管理とテスト」

2.1 SOAアプリケーションの作成

新しいアプリケーションを作成する最初のステップでは、アプリケーションに名前を割り当て、ソース・ファイルを保存するディレクトリを指定します。Oracle JDeveloperで用意されているアプリケーション・テンプレートを使用してアプリケーションを作成すると、作成するアプリケーションのタイプに必要な多数の構成ファイルとともに、ワークスペースの編成がプロジェクトに自動的に適用されます。

2.1.1 SOAアプリケーションおよびプロジェクトの作成方法

最初にSOAプロジェクト用のアプリケーションを作成します。

注意:

Oracle JDeveloperでSOAコンポジット・アプリケーションとプロジェクトを作成してデプロイするには、Oracle SOA Suite拡張機能をインストールする必要があります。この拡張機能をOracle JDeveloper用にインストールする手順は、『Oracle Fusion Middleware Oracle JDeveloperインストレーション・ガイド』を参照してください。

SOAアプリケーションおよびプロジェクトを作成する手順は、次のとおりです。

1. Oracle JDeveloper Studio Editionバージョン11.1.1.7.0を起動します。

2. Oracle JDeveloperを初めて実行する場合は、Java JDKの場所を指定します。

3. 表2-1で説明するように、新しいSOAコンポジット・アプリケーションを作成します。

表2-1 SOAコンポジット・アプリケーションの作成

Oracle JDeveloperの状態

操作

アプリケーションがない

例: Oracle JDeveloperを初めて開いた場合

左上の「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。

既存のアプリケーションがある

「ファイル」メイン・メニューまたは「アプリケーション」メニューから次の操作を実行します。

1. 「新規」→「アプリケーション」の順に選択します。
「新規ギャラリ」が開き、作成する別のアプリケーション・コンポーネントを選択できます。

2. 「カテゴリ」ツリーで、「一般」→「アプリケーション」を選択します。

3. 「項目」ペインで「SOAアプリケーション」を選択し、「OK」をクリックします。

SOAアプリケーションの作成ウィザードが起動します。

4. 「アプリケーションの名前付け」ページで、必要に応じて、Webプロジェクトの名前と場所を変更できます。最初のアプリケーションを作成する場合は、「アプリケーション・テンプレート」から「SOAアプリケーション」を選択します。パッケージ接頭辞のデフォルト値をそのまま使用し、「次へ」をクリックします。

注意:

- 空白を使用したアプリケーション名は作成できません。

- 空白があるディレクトリ・パスにアプリケーションおよびプロジェクトを作成することはできません(例: c:¥Program Files)。

- UNIXオペレーティング・システムでは、LANGおよびLC_All環境変数をUTF-8キャラクタ・セットを使用するロケールに設定して、Unicodeのサポートを有効にすることをお薦めします。この設定により、オペレーティング・システムですべての文字をUnicodeで処理できます。SOAテクノロジはUnicodeに基づいています。オペレーティング・システムがUTF-8以外のエンコーディングを使用するように構成されると、SOAコンポーネントは予期しない動作をする場合があります。たとえば、ASCII以外のファイル名の場合は、ファイルにアクセスできず、エラーが発生する可能性があります。Oracleでは、オペレーティング・システムの制約によって発生する問題はサポートしていません。
設計時環境でOracle JDeveloperを使用している場合は、「ツール」→「プリファレンス」→「環境」→「エンコーディング」→「UTF-8」の順に選択して、Unicodeのサポートを有効にします。この設定は、ランタイム環境にも適用できます。

5. 「プロジェクトの名前付け」ページで、必要に応じて、SOAプロジェクトの名前と場所を変更できます。デフォルトでは、Oracle JDeveloperによって、モデル・プロジェクトに、SOAプロジェクト・テクノロジ、SOAコンポジット・アプリケーションを記述するcomposite.xmlファイル、および必須ライブラリが追加されます。

6. 「次へ」をクリックします。

注意:

コンポジットおよびコンポーネントの名前は、500文字を超えることはできません。

同じインフラストラクチャにデプロイされるプロジェクトは、SOAコンポジット・アプリケーション全体で一意の名前である必要があります。コンポジットの一意性はプロジェクト名で判断されます。たとえば、表2-2に記載されている操作は実行しないでください。デプロイメント時に、2番目にデプロイされたプロジェクト(コンポジット)が最初にデプロイされたプロジェクト(コンポジット)を上書きします。

表2-2 SOAプロジェクトの名前付けに関する制限

作成するアプリケーション名

SOAプロジェクト名

Application1

Project1

Application2

Project1

SOAアプリケーションの作成ウィザードの「プロジェクトのSOA設定」ページが表示されます。

7. 「SOA設定の構成」ページで、「空のコンポジット」をクリックし、「終了」をクリックします。

8. 「ファイル」メイン・メニューから「すべて保存」を選択します。

2.1.2 SOAアプリケーションおよびプロジェクト作成時の処理内容

SOAアプリケーションを作成すると、Oracle JDeveloperではアプリケーションに関連するすべてのソース・ファイルを含むプロジェクトが作成されます。Oracle JDeveloperでは、SOAプロジェクトに必要な次のライブラリが自動的に追加されます。

- SOAデザインタイム

- SOAランタイム

- BPELランタイム

- Oracle Mediatorランタイム

- Oracle Metadata Services (MDS)リポジトリ・ランタイム

したがって、Oracle JDeveloperを使用してアプリケーションに必要な追加プロジェクトを作成できます。

図2-1は、Fusion Order DemoのWebLogicFusionOrderDemoアプリケーションに含まれるプロジェクトOrderBookingCompositeが表示されたSOAコンポジット・エディタを示しています。

図2-1 SOAコンポジット・アプリケーションの新規ワークスペース

「図2-1 SOAコンポジット・アプリケーションの新規ワークスペース」の説明

表2-3で、SOAコンポジット・エディタについて説明します。

図2-3 SOAコンポジット・エディタ

要素

説明

アプリケーション・ナビゲータ

SOAプロジェクトに含まれている特定のサービス・コンポーネントの主要なファイルが表示されます。

- SOAプロジェクトの作成時に自動的に作成されるcomposite_name (composite.xmlファイル)。このファイルには、サービス、サービス・コンポーネント、参照およびワイヤのコンポジット構成全体が記述されています。

- ビジネス・ルール・サービス・コンポーネント・ファイル(rules_name.decs)。追加ビジネス・ルール・ファイルが「Oracle」→「ビジネス・ルール」サブフォルダ(rules_name.rules)の下に表示されます。

- Oracle Mediatorサービス・コンポーネント・ファイル(mediator_name.mplan)

- BPELプロセス・サービス・コンポーネント・ファイル(process_name.bpelおよびprocess_name.wsdl)

- ヒューマン・タスク・サービス・コンポーネント・ファイル(task_name.task)

- Springサービス・コンポーネント・ファイル(spring.xml)

- componentTypeファイルには、各サービス・コンポーネントのサービスおよび参照が記述されています。このファイルにより、コンポーネント間に作成したワイヤリングが機能します。

- クラス・ファイル、XSD(スキーマ)およびXSL(トランスフォーメーション)およびテスト・スイートの追加サブフォルダ

「構造」ウィンドウ

構造ウィンドウには、アクティブ・ウィンドウで選択されているドキュメント内のデータが構造的に表示されます。

デザイナ

サービス・コンポーネント、サービスおよび参照を「コンポーネント・パレット」からデザイナ内のコンポジットにドラッグします。サービス・コンポーネントをデザイナにドラッグ・アンド・ドロップすると、対応するプロパティ・エディタが起動して、そのサービス・コンポーネントに関連する構成タスクを実行できます。たとえば、Oracle Mediatorサービス・コンポーネントをデザイナにドラッグ・アンド・ドロップすると、メディエータ・エディタが表示され、ここでOracle Mediatorサービス・コンポーネントを構成できます。

後続のすべての編集セッションについて、これらのサービス・コンポーネントをダブルクリックして、それぞれのエディタを再度開きます。

プロジェクト名

SOAコンポジット・アプリケーションのプロジェクト名を表示します。

左側のスイムレーン(「公開されたサービス」)

左側のスイムレーンは、WebサービスやJCAアダプタなど、SOAコンポジット・アプリケーションへのエントリ・ポイントを提供するサービス用です。

右側のスイムレーン(「外部参照」)

右側のスイムレーンは、WebサービスやJCAアダプタなど、外部にある外部サービスにメッセージを送信する参照用です。

コンポーネント・パレット

「コンポーネント・パレット」では、SOAコンポジットで使用できる様々なリソースが提供されます。次のサービス・コンポーネントおよびアダプタが含まれます。

- サービス・コンポーネント
デザイナにドラッグ・アンド・ドロップできるBPELプロセス、ビジネス・ルール、ヒューマン・タスク、Oracle MediatorおよびSpringコンポーネントが表示されます。

- サービス・アダプタ
左側または右側のスイムレーンにドラッグできるJCAアダプタ(AQ、ファイル、FTP、データベース、JMS、MQ、Oracle Applications、Oracle User Messaging Service、ソケットおよびサード・パーティ)、Oracle BAMバインディング・コンポーネント、Oracle Healthcareバインディング・コンポーネント、Oracle B2Bバインディング・コンポーネント、EJBバインディング・コンポーネント、ADF-BCバインディング・コンポーネント、直接バインディング・コンポーネント、HTTPバインディング・コンポーネントおよびWebサービス・バインディング・コンポーネントが表示されます。

「コンポーネント・パレット」が表示されない場合は、「表示」メイン・メニューから「コンポーネント・パレット」を選択します。

リソース・パレット

「リソース・パレット」には、ローカル・リソースとリモート・リソースの両方を参照できる単一のダイアログが表示されます。たとえば、次のリソースにアクセスできます。

- スキーマ、WSDL、イベント定義、ビジネス・ルールなどの共有ローカル・アプリケーション・メタデータ。

- リモート・リソースを使用するWSILブラウザ機能。この機能には、HTTP接続、ファイルURLまたはアプリケーション・サーバー接続からアクセスできます。

- Universal Description, Discover, and Integration (UDDI)レジストリに登録されているリモート・リソース。

SOAコンポジット・アプリケーション用のこれらのリソースは、「SOAリソース・ブラウザ」ダイアログから選択します。このダイアログには様々な方法でアクセスできます。たとえば、サービス・バインディング・コンポーネントまたはOracle Mediatorサービス・コンポーネントで使用するWSDLファイルを選択した場合、またはBPELプロセスで使用するスキーマ・ファイルを選択した場合に、「SOAリソース・ブラウザ」ダイアログが表示されます。このダイアログの最上部にある「リソース・パレット」をクリックして、使用可能なリソースにアクセスします。

「リソース・パレット」が表示されない場合は、「表示」メイン・メニューから「リソース・パレット」を選択します。

「ログ」ウィンドウ

「ログ」ウィンドウには、アプリケーションのコンパイル、検証およびデプロイメントに関するメッセージが表示されます。

プロパティ・インスペクタ

「プロパティ・インスペクタ」には、選択されているサービス・コンポーネント、サービスまたは参照のプロパティが表示されます。また、BPELプロセス・サービス・コンポーネントのデプロイメント・ディスクリプタのプロパティを定義することもできます。

詳細は、項C.1.1「プロパティ・インスペクタでデプロイメント・ディスクリプタのプロパティを定義する方法」を参照してください。

「プロパティ・インスペクタ」が表示されない場合は、「表示」メイン・メニューから「プロパティ・インスペクタ」を選択します。

アプリケーション・ビュー

アプリケーション・ビューには、SOAコンポジット・アプリケーションのアーティファクトが表示されます。

composite_name (composite.xml)ファイルは、デザイナではタブとして、「アプリケーション・ナビゲータ」ではファイルとして表示されます。このファイルは、新しいSOAプロジェクトの作成時に自動的に作成されます。このファイルには、サービス、サービス・コンポーネントおよび参照のコンポジット構成全体が記述されています。1つのSOAプロジェクトに対して1つのcomposite.xmlファイルがあります。

composite.xmlファイルを使用するには、ほとんどの場合、図2-1に示すようにデザイナ、「構造」ウィンドウおよび「プロパティ・インスペクタ」を使用します。デザイナを使用すると、WYSIWYG環境に多くのファイルを表示できます。さらに、概要エディタにファイルを表示して宣言的に変更したり、ファイルのソース・コードを表示することもできます。「構造」ウィンドウには、現在選択されているファイルの構造が表示されます。このウィンドウでオブジェクトを選択し、選択したオブジェクトのプロパティを「プロパティ・インスペクタ」で編集できます。

2.2 サービス・コンポーネントの追加

アプリケーションを作成した後は、多くの場合、そのアプリケーションのビジネス・ロジックまたは処理ルールを実装するサービス・コンポーネントを追加します。SOAコンポジット・エディタの「コンポーネント・パレット」を使用して、サービス・コンポーネントをコンポジットにドラッグ・アンド・ドロップできます。

2.2.1 サービス・コンポーネントの追加方法

サービス・コンポーネントを追加する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「SOA」を選択します。

2. 「サービス・コンポーネント」リストからコンポーネントをデザイナにドラッグします。
図2-2に、デザイナに追加されるBPELプロセスを示します。

図2-2 コンポジットへのBPELプロセスの追加

「図2-2 コンポジットへのBPELプロセスの追加」の説明

選択したサービス・コンポーネントに固有のダイアログが表示されます。表2-4に、使用可能なエディタを示します。

表2-4 サービス・コンポーネント・エディタの起動

ドラッグするサービス・コンポーネント

起動する対象

BPELプロセス

「BPELプロセスの作成」ダイアログが起動し、一連のビジネス・アクティビティとサービスをエンドツーエンドのプロセス・フローに統合するBPELプロセスを作成できます。

ビジネス・ルール

「ビジネス・ルールの作成」ダイアログが起動し、ルールに基づいてビジネス上の意思決定を作成できます。

ヒューマン・タスク

「ヒューマン・タスクの作成」ダイアログが起動し、エンドツーエンドのビジネス・プロセス・フローの一部として、ユーザーまたはグループが実行するタスクを説明するワークフローを作成できます。

メディエータ

「メディエータの作成」ダイアログが起動し、メッセージおよびイベントのルーティング、フィルタリングおよびトランスフォーメーションを実行するサービスを定義できます。

Springコンテキスト

「Springの作成」ダイアログが起動し、JavaインタフェースをSOAコンポジット・アプリケーションに統合するためのSpringコンテキスト・ファイルを作成できます。

3. サービス・コンポーネントの設定値を構成します。サービス・コンポーネントのダイアログに関するヘルプは、「ヘルプ」をクリックするか、[F1]を押してください。「終了」をクリックします。
図2-3は、Fusion Order DemoのWebLogicFusionOrderDemoアプリケーション用にOrderProcessor BPELプロセスを作成するためのデータが入力された「BPELプロセス」ダイアログを示しています。このプロセスは非同期として選択されています。「SOAPサービスとして公開」チェック・ボックスを選択したため、Oracle JDeveloperではこのサービス・コンポーネントが作成されてインバウンドWebサービスに自動的に接続されます。

図2-3 「BPELプロセスの作成」ダイアログ

「図2-3 「BPELプロセスの作成」ダイアログ」の説明

4. 「OK」をクリックします。
サービス・コンポーネントがデザイナに表示されます。図2-4は、OrderProcessor BPELプロセスを示しています。左側のスイムレーンにあるorderprocessor_client_epというSOAPサービス・バインディング・コンポーネントは、外部に対してSOAコンポジット・アプリケーションへのエントリ・ポイントを提供します。「BPELプロセスの作成」ダイアログで「SOAPサービスとして公開」オプションを選択しなかった場合、orderprocessor_client_epサービスは表示されません。後でサービスを追加する方法は、第2.3.1項「サービス・バインディング・コンポーネントの追加方法」で説明します。

図2-4 コンポジット内のBPELプロセス

「図2-4 コンポジット内のBPELプロセス」の説明

サービス・コンポーネントの内容は、現時点でも後からでも詳細に定義できます。このトップダウンの例では、この時点で内容が定義されます。

5. 「ファイル」メイン・メニューから「すべて保存」を選択します。

2.2.2 サービス・コンポーネントの追加と削除に関する注意事項

サービス・コンポーネントの追加については次の詳細に注意してください。

- サービス・コンポーネントは、SOAコンポジット・エディタまたは他のコンポーネントのデザイナから作成します。たとえば、ヒューマン・タスク・コンポーネントは、SOAコンポジット・エディタまたはOracle BPELデザイナから作成できます。

- 「リソース・パレット」は、SOAコンポジット・エディタで定義されているか、デプロイされているサービス・コンポーネントを参照するのに使用します。

サービス・コンポーネントの削除については次の詳細に注意してください。

- サービス・コンポーネントを削除するには、該当するサービス・コンポーネントを右クリックして、コンテキスト・メニューから「削除」を選択します。

- サービス・コンポーネントが削除されると、それを示す参照はすべて無効になり、すべてのワイヤは削除されます。サービス・コンポーネントも「アプリケーション・ナビゲータ」から削除されます。

- 別のサービス・コンポーネント内から作成されたサービス・コンポーネントを削除できます。たとえば、Oracle JDeveloperのBPELプロセス・サービス・コンポーネント内で作成されたヒューマン・タスクは、SOAコンポジット・エディタから削除できます。さらに、タスクへのパートナ・リンクも削除できます。パートナ・リンクを削除すると、その.componentTypeファイルから参照インタフェースが削除され、タスクへのワイヤが削除されます。

2.2.3 サービス・コンポーネントの編集方法

サービス・コンポーネントを編集して、サービス・コンポーネントに関する特定の詳細を定義します。

サービス・コンポーネントを編集する手順は、次のとおりです。

1. 表2-5に示すように、デザイナで該当するサービス・コンポーネントをダブルクリックして適切なエディタまたはデザイナを表示します。

表2-5 SOAサービス・コンポーネントのウィザードとダイアログの起動

ダブルクリックするサービス・コンポーネント

表示対象

BPELプロセス

詳細設計のためのOracle BPELデザイナ

ビジネス・ルール

詳細設計のためのビジネス・ルール・デザイナ

ヒューマン・タスク

詳細設計のためのヒューマン・タスク・エディタ

メディエータ

詳細設計のためのOracle Mediatorエディタ

Springコンテキスト

詳細設計のためのSpringエディタ

任意のサービス・コンポーネントからSOAコンポジット・エディタに戻るには、「アプリケーション・ナビゲータ」の composite_name (composite.xml)をダブルクリックするか、デザイナの上のcomposite_name (composite.xml)をシングルクリックします。

サービス・コンポーネント・エディタに関するヘルプは、「ヘルプ」をクリックするか、[F1]を押してください。

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

3. サービス・コンポーネントの設定値を変更します。サービス・コンポーネント・エディタまたはデザイナに関するヘルプは、「ヘルプ」をクリックするか、[F1]を押してください。

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

5. 「アプリケーション・ナビゲータ」でcomposite_name (composite.xml)をダブルクリックするか、デザイナの上でcomposite_name (composite.xml)をシングルクリックします。
この操作により、SOAコンポジット・エディタに戻ります。

6. 「ファイル」メイン・メニューから「すべて保存」を選択します。

2.3 サービス・バインディング・コンポーネントの追加

SOAコンポジット・アプリケーションへのエントリ・ポイントとして機能するサービス・バインディング・コンポーネントを外部から追加します。

2.3.1 サービス・バインディング・コンポーネントの追加方法

注意:

- この項では、サービス・バインディング・コンポーネントを手動で作成する方法を説明します。また、サービス・コンポーネントを作成するときに、「SOAPサービスとして公開」を選択すると、サービス・バインディング・コンポーネントを自動的に作成できます。これを選択すると、BPELプロセス、ヒューマン・タスク・サービスまたはOracle Mediatorサービス・コンポーネントに自動的に接続されるインバウンドWebサービス・バインディング・コンポーネントが作成されます。

- Representational State Transfer(REST)サービスをSOAコンポジット・エディタから起動することはできません。

SOAコンポジット・エディタの「コンポーネント・パレット」を使用して、サービス・バインディング・コンポーネントをコンポジットにドラッグ・アンド・ドロップできます。

サービス・バインディング・コンポーネントを追加する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「SOA」を選択します。

2. 「サービス・アダプタ」リストからサービスを左側のスイムレーンにドラッグして、サービス・インタフェースを定義します。
図2-5に、デザイナに追加されるWebサービスを示します。

図2-5 コンポジットへのWebサービスの追加

「図2-5 コンポジットへのWebサービスの追加」の説明

選択されているサービス固有のダイアログが表示されます。表2-6は、使用可能なエディタを示しています。

表2-6 サービス・エディタ

ドラッグするサービス

起動する対象

Webサービス

「Webサービスの作成」ダイアログが起動し、Web呼出しサービスを作成できます。

アダプタ

アダプタ構成ウィザードが起動し、サービスを、データベース表、データベース・キュー、ファイル・システム、FTPサーバー、Java Message Services(JMS)、IBM WebSphere MQ、Oracle User Messaging Service、Oracle BAMサーバー、ソケットまたはOracle E-Business Suiteアプリケーションと統合できます。

ADF-BCサービス

「ADF-BCサービスの作成」ダイアログが起動し、サービス・データ・オブジェクト(SDO)呼出しサービスを作成できます。

B2B

B2B構成ウィザードによって、ドキュメント定義の選択手順が示されます。

Healthcare

Healthcare構成ウィザードによって、ヘルスケア・システムとの統合手順が示されます。

EJBサービス

「EJBサービスの作成」が起動し、SDOパラメータまたはJavaインタフェースをEnterprise JavaBeansで使用するためのEnterprise JavaBeansサービスを作成できます。

HTTPバインディング

HTTPバインディングの作成ウィザードが起動し、HTTPバインディングを作成できます。このウィザードを使用すると、HTTPのPOSTおよびGET操作からSOAコンポジット・アプリケーションを起動できます。

直接バインディング

「直接バインディング・サービスの作成」ダイアログが起動し、インバウンド方向で、SOAコンポジット・アプリケーションを起動し、Remote Method Invocation(RMI)を介してメッセージを交換できます。

3. サービスの設定値を構成します。サービス・エディタに関するヘルプは、「ヘルプ」をクリックするか、[F1]を押してください。Webサービスを追加する場合は、使用するWSDLファイルを選択する必要があります。詳細は、第2.3.2項「Webサービスのインタフェース(WSDL)の定義方法」を参照してください。

4. 「終了」をクリックします。
図2-6は、OrderProcessor BPELプロセス用のorderprocessor_client_epサービスを作成するためにデータが入力された「Webサービス」ダイアログを示しています。

図2-6 「Webサービスの作成」ダイアログ

「図2-6 「Webサービスの作成」ダイアログ」の説明

5. 「OK」をクリックします。
サービス・バインディング・コンポーネントが左側のスイムレーンに表示されます。図2-7に、composite.xmlファイルに追加されたorderprocessor_client_epサービス・バインディング・コンポーネントを示します。

図2-7 コンポジット内のWebサービス

「図2-7 コンポジット内のWebサービス」の説明

6. 「ファイル」メイン・メニューから「すべて保存」を選択します。

2.3.2 Webサービスのインタフェース(WSDL)の定義方法

第2.3.1項「サービス・バインディング・コンポーネントの追加方法」で説明しているように、Webサービスは、SOAコンポジット・アプリケーションに追加できるバインディング・コンポーネントの一種です。Webサービスのインタフェース(WSDL)ファイルを定義する必要があります。

Webサービスのインタフェース(WSDL)を定義する手順は、次のとおりです。

1. 「コンポーネント・パレット」で「SOA」を選択します。

2. 「サービス・アダプタ」リストからWebサービスを左側のスイムレーンにドラッグします。
図2-6に示す「Webサービスの作成」ダイアログが表示されます。

3. 表2-7に記載されている詳細を入力します。

表2-7 「Webサービスの作成」ダイアログのフィールドと値

フィールド

値

名前

サービスの名前を入力します。

タイプ

Webサービスに対してタイプ(メッセージの方向)を選択します。Webサービスを左側のスイムレーンにドラッグしているため、「サービス」タイプが正しい選択であり、デフォルトでこのタイプが表示されます。

- サービス(デフォルト)
SOAコンポジット・アプリケーションへのエントリ・ポイントを提供するWebサービスを作成します。

- 参照
外部にある外部サービスへのアクセスを提供するWebサービスを作成します。

この例では、SOAコンポジット・アプリケーションへのエントリ・ポイントの作成方法を説明しているため、「サービス」が選択されています。

4. サービスに対するWSDLファイルを選択します。選択には3種類の方法があります。

- 既存のスキーマを使用するか新しいスキーマを定義して、新しいWSDLを定義します。

- コンポーネントのインタフェースを定義したときに作成されたWSDLを選択します。WSDLは、プロジェクト/アプリケーションのブラウザから選択できます。

- コンポーネントからサービス・インタフェースのWSDLを自動的に定義します。

既存のスキーマを使用するか新しいスキーマを定義して、新しいWSDLを定義します。

1. 「WSDL URL」フィールドの右側で、「既存のWSDLを検索します。」アイコン(最初のアイコン)をクリックし、ローカル・ファイル・システムから既存のWSDLファイルを選択します(この例では、「OrderProcessor.wsdl」が選択されています)。ダイアログの最上部にあるリストで「ファイルシステム」が自動的に選択されます。図2-8に詳細を示します。

図2-8 WSDLファイルの選択

「図2-8 WSDLファイルの選択」の説明

コンポーネントのインタフェースを定義したときに作成されたWSDLを選択します。WSDLは、プロジェクト/アプリケーションのブラウザから選択できます。

1. 図2-9に示すように、「WSDL URL」フィールドの右側で「既存のWSDLを検索します。」アイコン(最初のアイコン)をクリックし、ダイアログの最上部にあるリストから「リソース・パレット」を選択します。選択すると、他のアプリケーションの既存のWSDLファイルを使用できるようになります。

図2-9 他のアプリケーションの既存のWSDLファイルの使用

「図2-9 他のアプリケーションの既存のWSDLファイルの使用」の説明

コンポーネントからサービス・インタフェースのWSDLを自動的に定義します。

1. 「WSDL URL」フィールドの右側で、「スキーマからWSDLを生成」アイコン(2番目のアイコン)をクリックすると、スキーマからWSDLファイルが自動生成されます。図2-10は「WSDLの作成」ダイアログを示しています。WSDLファイル名、ディレクトリの場所、ネームスペース、ポート・タイプ、操作名、およびインタフェース・タイプのデフォルト値が表示されます。指定したディレクトリが現在のプロジェクトのサブディレクトリでない場合、警告メッセージが表示されます。指定したディレクトリが存在しない場合、自動作成されます。
デフォルト値は変更できます。

図2-10 WSDLファイルの自動生成

「図2-10 WSDLファイルの自動生成」の説明

5. 「入力」表の上の「追加」アイコンをクリックすると、新規WSDLメッセージ・パートを追加するための「メッセージ・パートの追加」ダイアログが表示されます。WSDLファイルに複数のメッセージが含まれる場合、それぞれに1つのメッセージ・パートを追加できます。メッセージ・パートに対して、XMLスキーマの単純型、プロジェクトのスキーマ・ファイルおよびプロジェクトのWSDLファイルを選択できます。
詳細は、「ヘルプ」をクリックしてください。

6. 「OK」をクリックして「Webサービスの作成」ダイアログに戻ります。

7. 表2-8に示す追加詳細をメモします。

表2-8 「Webサービスの作成」ダイアログのフィールドと値

フィールド

値

ポート・タイプ

ポート・タイプが表示されます。

コールバック・ポート・タイプ

無効。WSDLファイルが同期サービス用であるためです。このフィールドは非同期サービスの場合に有効になります。

8. 「OK」をクリックします。

9. 「ファイル」メイン・メニューから「すべて保存」を選択します。

注意:

- ソース・ビューでWSDLファイルのWSDLの場所を手動で更新しないでください。この操作はサポートされていません。サポートされているのは、設計ビューでの更新のみです。

- WSDLネームスペースは一意にする必要があります。単にWSDLをコピーして名前変更しないでください。ネームスペースも必ず変更してください。

2.3.3 スキーマの表示方法

インタフェースのWSDLファイルで使用するすべてのスキーマを表示でき、必要な場合は、「インタフェースの更新」ダイアログで、選択されたメッセージ・パートに対する新しいメッセージ・スキーマを選択できます。

スキーマを表示する手順は、次のとおりです。

1. 特定のバインディング・コンポーネントまたはサービス・コンポーネント上に表示される小さい矢印ハンドルをダブルクリックします。図2-11に詳細を示します。

図2-11 インバウンド・インタフェース・ハンドルの選択

「図2-11 インバウンド・インタフェース・ハンドルの選択」の説明

図2-12に示す「インタフェースの更新」ダイアログには、WSDLファイルで現在使用されているすべてのスキーマが表示されます。

図2-12 「インタフェースの更新」ダイアログ

「図2-12 「インタフェースの更新」ダイアログ」の説明

2. 新しいメッセージ・スキーマを選択する方法については、「ヘルプ」をクリックするか、[F1]を押してください。

2.3.4 サービス・バインディング・コンポーネントの編集方法

最初にサービスを作成し、後でその内容を編集することもできます。コンポーネントのアイコンをダブルクリックすると、適切なエディタまたはウィザードが表示されます。表2-9に概要を示します。

表2-9 サービスのウィザードとダイアログの起動

ダブルクリックするサービス

次の操作

Webサービス

「サービスの更新」ダイアログが表示されます。

アダプタ

アダプタ構成ウィザードに再入力します。

ADF-BCサービス

「サービスの更新」ダイアログが表示されます。

B2B

B2B構成ウィザードを再入力します。

Healthcare

Healthcare構成ウィザードを再入力します。

EJBサービス

「サービスの更新」ダイアログが表示されます。

HTTPバインディング

HTTPバインディング・ウィザードに再入力します。

直接バインディング

「サービスの更新」ダイアログに再入力します。

2.3.5 サービスの追加と削除に関する注意事項

サービスの追加については次の詳細に注意してください。

- サービス・コンポーネントに新しいサービスが追加されると、そのサービス・コンポーネントには、メタデータを適切に変更できるように通知されます。たとえば、新しいサービスがBPELサービス・コンポーネントに追加されると、そのBPELサービス・コンポーネントには、receiveまたはon-messageアクティビティに接続可能なパートナ・リンクを作成するように通知されます。

サービスの削除については次の詳細に注意してください。

- サービス・コンポーネントにより提供されているサービスが削除されると、そのサービス・コンポーネントに対するすべての参照が無効となり、ワイヤが削除されます。

2.3.6 同じコンポジットの異なるWSDLファイルでの同じネームスペースの使用に関する注意事項

同じSOAコンポジット・アプリケーションの異なる2つのWSDLファイルにおいて、完全修飾された同じネームスペースを使用することはあいまいであり、サポートされていません。これにより、コンパイル時に、重複した定義のエラーによってアプリケーションが失敗します。すべてのWSDLファイルに対して一意のネームスペースを使用するようにしてください。

2.3.7 SOAインフラストラクチャで内部および外部の両方のOracle HTTP Serverを使用する場合の「リソース・パレット」でのWSDL参照に関する注意事項

Oracle Enterprise Manager Fusion Middleware Controlの「SOAインフラストラクチャの共通プロパティ」ページにある「サーバーURL」フィールドで、内部および外部の両方のOracle HTTP Serverを使用するようにSOAインフラストラクチャを構成している場合、「リソース・パレット」を使用してWSDL URLを参照できません。ただし、Webサービス・バインディング・コンポーネントの「サービスの更新」ダイアログの「WSDL URL」フィールドに、適切なWSDL URLを貼り付けることはできます。図2-13に詳細を示します。

図2-13 「WSDL URL」フィールド

「図2-13 「WSDL URL」フィールド」の説明

2.4 参照バインディング・コンポーネントの追加

参照バインディング・コンポーネントを追加します。このコンポーネントは、外部にある外部サービスにメッセージを送信するためのSOAコンポジット・アプリケーションを有効にします。

2.4.1 参照バインディング・コンポーネントの追加方法

SOAコンポジット・エディタの「コンポーネント・パレット」を使用して、参照バインディング・コンポーネントをコンポジットにドラッグ・アンド・ドロップできます。

参照バインディング・コンポーネントを追加する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「SOA」を選択します。

2. 「サービス・アダプタ」リストからサービスを右側のスイムレーンにドラッグします。
図2-14に、デザイナに追加されるWebサービスを示します。

図2-14 コンポジットへのWebサービスの追加

「図2-14 コンポジットへのWebサービスの追加」の説明

選択されている参照固有のダイアログまたはウィザードが表示されます。表2-10は、使用可能なエディタを示しています。

表2-10 参照エディタ

ドラッグするサービス

起動する対象

Webサービス

「Webサービスの作成」ダイアログが起動し、Web呼出しサービスを作成できます。

アダプタ

アダプタ構成ウィザードが起動し、サービスを、データベース表、データベース・キュー、ファイル・システム、FTPサーバー、Java Message Services(JMS)、IBM WebSphere MQ、Oracle User Messaging Service、Oracle BAMサーバー、ソケットまたはOracle E-Business Suiteアプリケーションと統合できます。

ADF-BCサービス

「ADF-BCサービスの作成」ダイアログが起動し、サービス・データ・オブジェクト(SDO)呼出しサービスを作成できます。

B2B

B2Bウィザードが起動し、ドキュメント定義を選択できます。

Healthcare

Healthcare構成ウィザードによって、ヘルスケア・システムとの統合手順が示されます。

EJBサービス

「EJBサービスの作成」ダイアログが起動し、SDOパラメータをEnterprise JavaBeansで使用するためのEnterprise JavaBeansサービスを作成できます。

HTTPバインディング

HTTPバインディングの作成ウィザードが起動し、HTTPバインディングを作成できます。このウィザードを使用すると、HTTPのPOSTおよびGET操作からSOAコンポジット・アプリケーションを起動したり、HTTPのPOSTおよびGET操作からHTTPエンドポイントを起動できます。

直接バインディング

「直接バインディング・サービスの作成」ダイアログが起動し、Oracle Service Bus(OSB)フローまたは別のSOAコンポジット・アプリケーションを起動できます。

3. 参照バインディング・コンポーネントの設定値を構成します。参照エディタに関するヘルプは、「ヘルプ」をクリックするか、[F1]を押してください。

4. 「終了」をクリックします。
図2-15は、参照を作成するためにデータが入力された「Webサービスの作成」ダイアログを示しています。

図2-15 「Webサービスの作成」ダイアログ

「図2-15 「Webサービスの作成」ダイアログ」の説明

5. 「OK」をクリックします。
参照バインディング・コンポーネントが右側のスイムレーンに表示されます。図2-16に、SOAコンポジット・アプリケーションに追加されたStoreFrontService参照を示します。

図2-16 コンポジット内のWebサービス

「図2-16 コンポジット内のWebサービス」の説明

6. 「ファイル」メイン・メニューから「すべて保存」を選択します。

2.4.2 参照の追加と削除に関する注意事項

参照の追加については次の詳細に注意してください。

- SOAコンポジット・エディタに新しい参照を追加する唯一の方法は、必要なターゲット・サービス・コンポーネントにサービス・コンポーネントを接続することです。新しい参照が追加されると、メタデータを適切に変更できるように、サービス・コンポーネントに通知されます。たとえば、参照がBPELサービス・コンポーネントに追加されると、BPELサービス・コンポーネントにパートナ・リンクを追加するように通知されます。このパートナ・リンクはinvokeアクティビティで使用可能です。

参照の削除については次の詳細に注意してください。

- サービス・コンポーネントに対する参照が削除されると、関連付けられているワイヤも削除され、メタデータを更新できるようにサービス・コンポーネントに通知されます。たとえば、参照がBPELサービス・コンポーネントから削除されると、そのBPELメタデータにあるパートナ・リンクを削除するようにサービス・コンポーネントに通知されます。

- ワイヤに接続されている参照を削除すると、その参照とワイヤも消去されます。

2.4.3 WSDL参照に関する注意事項

WSDLファイルは、WSDLを含む新規コンポーネント(サービス・バインディング・コンポーネント、Oracle MediatorやBPELプロセスなどのサービス・コンポーネント、または参照バインディング・コンポーネント)を作成するたびにSOAコンポジット・アプリケーションに追加されます。コンポーネントを削除すると、そのコンポーネントで使用されていたWSDLインポートは、別のコンポーネントで使用されていない場合にのみ削除されます。WSDLインポートは、そのWSDLインポートを使用していた最後のコンポーネントが削除されると常に削除されます。

サービス・バインディング・コンポーネントまたは参照バインディング・コンポーネントが新しいWSDLを使用するように更新されると、インタフェースが削除されて新しいインタフェースが追加されたかのように処理されます。したがって、古いWSDLインポートは、別のコンポーネントで使用されていない場合のみ削除されます。

サービス・バインディング・コンポーネントまたは参照バインディング・コンポーネントが新しい場所から同じWSDL(porttype qname)を使用するように更新されると、WSDLインポートおよび他のすべてのWSDL参照(例: 外部参照WSDLをインポートするBPELプロセスWSDL)は新しい場所を参照するように自動的に更新されます。

composite.xmlファイルのインポートのソース・ビューで単にWSDLの場所を変更するだけでは不十分です。メタデータ内にはユーザー・インタフェースで必要なWSDL参照があります(コンポジットおよびcomponentTypeのサービスと参照のui:wsdlLocation属性を参照)。また、実行時に必要なWSDL参照もあります(例: BPELプロセスWSDLなど別のWSDLをインポートするWSDL)。このファイル内のWSDL URLが参照されている次の場所を変更してください。

- ユーザー・インタフェースの場所 - Oracle JDeveloperでのみ使用されます。

- インポート: デプロイ時に使用されます。

- 参照定義内のWSDLの場所: 実行時に使用されます。

WSDLの場所は常に、WSDLの場所が指定されたSOAコンポジット・エディタのダイアログ(例: Webサービス、BPELパートナ・リンクなど)で変更してください。URLのホスト・アドレスを変更すると、SOAコンポジット・エディタはすべてのWSDL参照を自動的に更新します。

2.4.4 WSDLファイルでのメッセージ・タイプの混在に関する注意事項

BPELプロセスで、WSDLファイルに複数のWSDLメッセージが宣言され、その他のメッセージにはパートがなんらかの要素となるよう定義されているのに対し、1つ以上のメッセージにそのパートがなんらかのタイプとなるよう定義されている場合、実行時の動作が予測不可能となる可能性があります。これは、これらのWSDLにタイプの混在したメッセージが含まれると見なされるためです。たとえば、assignアクティビティ内に複数のコピー・アクションがあるとします。これらのコピー・アクションでは、次の複数のパートを持つ出力変数の移入が試行されます。

- パート1はxsd:stringタイプとして宣言されています。

- パート2はxsd:intタイプとして宣言されています。

- パート3はカスタム設計の複雑なタイプの要素として宣言されています。

この動作はサポートされていません。

2.4.5 コンポジットのデフォルト・リビジョンの起動に関する注意事項

リビジョン番号を含まないWSDL URLは、デフォルトのコンポジット・アプリケーションによって処理されます。このため、コール元のコンポジットを変更せずに、コール先サービスのデフォルト・リビジョンを常にコールできます。

Oracle JDeveloperの「リソース・パレット」で使用するデフォルトのWSDLを選択します。

コンポジットのデフォルト・バージョンを起動する手順は、次のとおりです。

1. 「Webサービスの作成」ダイアログで、「WSDL URL」フィールドの右側にあるアイコンをクリックして「SOAリソース・ブラウザ」ダイアログを起動します。

2. 上部にあるリストから「リソース・パレット」を選択します。

3. アプリケーション・サーバー接続またはWSIL接続の下にあるノードを展開し、すべてのデプロイ済コンポジットとリビジョンを表示します。デフォルトのバージョンには、タイトルに「Default」という語が表示されます(たとえば、OrderBookingComposite [Default])。

4. 適切なデフォルトのエンドポイントを選択し、「OK」をクリックします。

2.5 ワイヤの追加

サービス、サービス・コンポーネントおよび参照を接続します。この例では、Webサービスとサービス・コンポーネントを接続します。次の点に注意してください。

- Webサービスはインバウンド・サービスであるため、参照ハンドルは右側に表示されます。アウトバウンド参照であるWebサービスは、右側に参照ハンドルがありません。

- 定義済のインタフェースは未定義のインタフェースにどちらの方向から(参照からサービスへ、またはサービスから参照へ)でもドラッグできます。未定義のインタフェースは定義済のインタフェースを継承します。このルールにはいくつかの例外があります。

- コンポーネントには、新しいインタフェースを却下する権限があります。たとえば、Oracle Mediatorには1つのインバウンド・サービスしか保持できません。このため、コンポーネントは2番目のサービスが作成されないように却下します。

- ビジネス・ルールは参照をサポートしないため、アウトバウンド・サービス(外部参照)をビジネス・ルールにドラッグすることはできません。ワイヤをドラッグすると、ユーザー・インタフェースでは、有効なターゲットであるインタフェースがハイライト表示されます。

- インタフェースを一意に識別する際には、ポート・タイプとネームスペースが使用されます。

- 異なるインタフェースを持つサービスとコンポジットは接続できません。たとえば、同期WSDLファイルで構成されているWebサービスは非同期BPELプロセスに接続できません。図2-17に詳細を示します。

図2-17 異なるインタフェースを持つサービスとコンポジットの接続に関する制限

「図2-17 異なるインタフェースを持つサービスとコンポジットの接続に関する制限」の説明

サービスと参照は一致する必要があります。つまり、インタフェースとコールバックは同じになる必要があります。インタフェースが異なる2つのサービスがある場合は、2つのサービス間にOracle Mediatorを配置し、インタフェース間のトランスフォーメーションを実行できます。

2.5.1 サービスとサービス・コンポーネントの接続方法

SOAコンポジット・エディタで、サービス・バインディング・コンポーネントをサービス・コンポーネントに接続できます。

サービスとサービス・コンポーネントを接続する手順は、次のとおりです。

1. 図2-18に示すように、サービス参照ハンドルからワイヤをサービス・コンポーネント・インタフェースにドラッグします。

図2-18 ワイヤ接続

「図2-18 ワイヤ接続」の説明

2. サービス・コンポーネントがBPELプロセスの場合は、そのBPELプロセスをダブルクリックすると、図2-19に示すように、左側のスイムレーンにパートナ・リンクとしてサービスが表示されることに注意してください。

図2-19 BPELプロセスにおけるパートナ・リンクとしてのサービスの表示

「図2-19 BPELプロセスにおけるパートナ・リンクとしてのサービスの表示」の説明

3. 「ファイル」メイン・メニューから「すべて保存」を選択します。

2.5.2 サービス・コンポーネントと参照の接続方法

SOAコンポジット・エディタで、サービス・コンポーネントを参照バインディング・コンポーネントに接続できます。

サービス・コンポーネントと参照を接続する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」でcomposite.xmlをダブルクリックするか、デザイナの上でcomposite.xmlをシングルクリックします。

2. 図2-20に示すように、サービス・コンポーネントからワイヤを参照にドラッグします。

図2-20 サービス・コンポーネントと参照のワイヤリング

「図2-20 サービス・コンポーネントと参照のワイヤリング」の説明

3. サービス・コンポーネントがBPELプロセスの場合は、そのBPELプロセスをダブルクリックすると、図2-21に示すように、右側のスイムレーンにパートナ・リンクとして参照が表示されることに注意してください。

図2-21 BPELプロセスにおけるパートナ・リンクとしての参照の表示

「図2-21 BPELプロセスにおけるパートナ・リンクとしての参照の表示」の説明

4. 「ファイル」メイン・メニューから「すべて保存」を選択します。

5. 「アプリケーション・ナビゲータ」で、composite.xmlファイルを選択します。

6. 「ソース」タブをクリックして、作成した内容を確認します。
orderprocessor_client_epサービス・バインディング・コンポーネントは、コンポジットへのエントリ・ポイントを提供します。

<service name="orderprocessor_client_ep"
ui:wsdlLocation="oramds:/apps/FusionOrderDemoShared
/services/orderbooking/OrderBookingProcessor.wsdl">
<interface.wsdl interface= "http://www.globalcompany.example.com/ns
/OrderBookingService#wsdl.interface(OrderProcessor)"
<binding.adf serviceName="OrderProcessorService" registryName=""/>
<callback>
<binding.ws port="http://www.globalcompany.example.com/ns
/OrderBookingService#wsdl.endpoint(orderprocessor_clientep/OrderProcessorCallback_
pt)"/>
</callback>
</service>

OrderProcessor BPELプロセス・サービス・コンポーネントが表示されます。

<component name="OrderProcessor">
<implementation.bpel src="OrderProcessor.bpel"/>
</component>

StoreFrontServiceという名前の参照バインディング・コンポーネントが表示されます。この参照は、外部にある外部サービスへのアクセスを提供します。

<reference name="StoreFrontService"
ui:wsdlLocation="oramds:/apps/FusionOrderDemoShared
/services/oracle/fodemo/storefront/store/service/common/serviceinterface/StoreFron
tService.wsdl">
<interface.wsdl
interface="www.globalcompany.example.com#wsdl.interface(StoreFrontService)"/>
<binding.ws
port="www.globalcompany.example.com#wsdl.endpoint(StoreFrontService/StoreFrontServ
iceSoapHttpPort)"
location="oramds:/apps/FusionOrderDemoShared/services/oracle/fodemo/storefront/sto
re/service/common/serviceinterface/StoreFrontService.wsdl"/>
</reference>

サービス・コンポーネント間の通信(またはワイヤリング)は、次のようになっています。

- ソースのorderprocessor_client_epサービス・バインディング・コンポーネントは、ターゲットのOrderProcessor BPELプロセス・サービス・コンポーネントに接続されています。ワイヤリングにより、この特定のBPELプロセスとWebサービス・メッセージ通信ができます。

- ソースのOrderProcessor BPELプロセスは、ターゲットのStoreFrontService参照バインディング・コンポーネントに接続されています。これは、外部にある外部サービスへの参照です。

<wire>
<source.uri>orderprocessor_client_ep</source.uri>
<target.uri>OrderProcessor/orderprocessor_client_ep</target.uri>
</wire>

<wire>
<source.uri>OrderProcessor/StoreFrontService</source.uri>
<target.uri>StoreFrontService</target.uri>
</wire>

2.5.3 ワイヤの追加と削除に関する注意事項

ワイヤの追加については次の詳細に注意してください。

- サービス・コンポーネントの参照がターゲット・サービス・コンポーネントのサービスと一致する場合、サービス・コンポーネントは別のサービス・コンポーネントに接続できます。一致するという意味は、同じインタフェースとコールバック・インタフェースであることに注意してください。

- 2つのOracle Mediatorサービス・コンポーネント間に次のワイヤリングを追加すると、無限ループが発生します。

- ビジネス・イベントを作成した場合

- Oracle Mediatorサービス・コンポーネントを作成し、イベントをサブスクライブした場合

- 2番目のOracle Mediatorサービス・コンポーネントを作成し、同じイベントを公開した場合

- 最初のOracle Mediatorを2番目のOracle Mediatorコンポーネント・サービスに接続した場合

2つのOracle Mediator間のワイヤを削除すると、すべてのメッセージについて、2番目のOracle Mediatorはイベントを公開でき、最初のOracle Mediatorはそのイベントをサブスクライブできます。

ワイヤの削除については次の詳細に注意してください。

- ワイヤが削除されると、コンポーネントのアウトバウンド参照は自動的に削除され、クリーン・アップ(パートナ・リンクの削除、ルーティング・ルールの消去など)が可能であることがコンポーネントに通知されます。ただし、コンポーネントのサービス・インタフェースは削除されません。Oracle SOA Suiteのすべてのサービスは、WSDLインタフェースで定義されます。コンポーネントのインタフェースが定義されると、SOAコンポジット・エディタでサービス・インタフェースが自動的に削除されることはありません。
サービスのWSDLインタフェースを変更する必要がある場合は、次のような回避策があります。

- ほとんどの場合、変更が必要なのはインバウンド・サービス定義ではなくスキーマです。SOAコンポジット・エディタで、WSDLを使用するインタフェース・アイコンをクリックします。たとえば、Webサービス・インタフェース・アイコンやOracle Mediatorサービス・アイコンをクリックします。この結果、「インタフェースの更新」ダイアログが起動し、このダイアログでWSDLメッセージのスキーマを変更できます。

- Oracle Mediatorサービス・コンポーネントを使用している場合は、Oracle Mediatorエディタの「WSDLからの操作のリフレッシュ」アイコンを使用して、(新しい操作を追加した後に)Oracle Mediator WSDLをリフレッシュまたは置換できます。ただし、現在の操作を削除しようとすると警告が表示されます。このアイコンを使用してWSDLを新規インバウンド・サービスWSDLに変更すると、インタフェースが変更されるため、通常は接続が切断されます。その後に、Oracle Mediatorを新規サービスに接続します。

- 多くの場合、新規サービスでは完全に新しいOracle Mediatorが必要です。古いOracle Mediatorを削除し、新しいOracle Mediatorを作成して新規サービスに接続します。

- BPELプロセス・サービス・コンポーネントを使用している場合は、「パートナ・リンクの編集」ダイアログで新規のWSDLを選択します。

「インタフェースの更新」ダイアログの詳細は、第2.3.3項「スキーマの表示方法」を参照してください。

2.6 セキュリティの追加

SOAコンポジット・アプリケーションを作成する際に、サービス・バインディング・コンポーネント、サービス・コンポーネントおよび参照バインディング・コンポーネントにポリシーを添付してWebサービスを保護できます。ポリシーの実装方法の詳細は、第42章「ポリシーを使用したセキュリティの有効化」を参照してください。

2.7 SOAコンポジット・アプリケーションのデプロイ

SOAコンポジット・アプリケーションのデプロイには、Oracle WebLogic Serverへの接続の作成、およびOracle WebLogic Server管理対象サーバーへのSOAコンポジット・アプリケーションのアーカイブのデプロイも含まれます。SOAコンポジット・アプリケーションのデプロイ方法の詳細は、第43章「SOAコンポジット・アプリケーションのデプロイ」を参照してください。

2.7.1 デプロイ済SOAコンポジット・アプリケーションの起動方法

SOAコンポジット・アプリケーションから、デプロイ済の他のSOAコンポジット・アプリケーションを起動できます。他のアプリケーションはデプロイ済である必要があります。

デプロイ済SOAコンポジット・アプリケーションを起動する手順は、次のとおりです。

1. 次のいずれかの方法を使用して、Webサービスまたはパートナ・リンクを作成します。

1. SOAコンポジット・エディタで、「コンポーネント・パレット」から「外部参照」スイムレーンに「Webサービス」をドラッグします。

2. Oracle BPELデザイナで、「コンポーネント・パレット」から右側のスイムレーンに「パートナ・リンク」をドラッグします。

2. 作成したサービスのタイプに基づいて「SOAリソース・ブラウザ」ダイアログにアクセスします。

1. 「Webサービスの作成」ダイアログから、「既存のWSDLを検索します。」アイコンをクリックします。

2. 「パートナ・リンクの編集」ダイアログから、「SOAリソース・ブラウザ」アイコンをクリックします。

3. 上部のリストから「リソース・パレット」を選択します。

4. ツリーを展開して、SOAコンポジット・アプリケーションがデプロイされたOracle WebLogic管理サーバーへのアプリケーション・サーバー接続を表示します。

5. アプリケーション・サーバー接続を展開します。

6. SOAフォルダおよびパーティションを開きます。図2-22に詳細を示します。

図2-22 SOAコンポジット・アプリケーションの参照

「図2-22 SOAコンポジット・アプリケーションの参照」の説明

7. コンポジット・サービスを選択します。

8. 「OK」をクリックします。

アプリケーション・サーバー接続の作成方法の詳細は、第43.7.1.1項「アプリケーション・サーバー接続の作成」を参照してください。

2.8 SOAコンポジット・アプリケーションの管理とテスト

SOAコンポジット・アプリケーションを作成してデプロイした後は、Oracle JDeveloperとOracle Enterprise Manager Fusion Middleware Controlを組み合せて使用して、そのSOAコンポジット・アプリケーションを管理およびテストします。

2.8.1 Oracle JDeveloperでのデプロイ済SOAコンポジット・アプリケーションの管理方法

Oracle JDeveloperの「アプリケーション・サーバー・ナビゲータ」から、デプロイ済のSOAコンポジット・アプリケーションを管理できます。管理タスクは、SOAコンポジット・アプリケーションの各リビジョンのアンデプロイ、アクティブ化、リタイア、開始および停止で構成されます。

注意:

ここで説明する手順は、SOAインフラストラクチャがデプロイされたOracle WebLogic管理サーバーへのアプリケーション・サーバー接続が作成済であることを前提にしています。Oracle WebLogic管理サーバーへの接続を作成すると、管理対象およびクラスタ化されたOracle WebLogic Serverを同じドメインで参照できます。「ファイル」メイン・メニューから、「新規」→「接続」→「アプリケーション・サーバー接続」の順に選択して、接続を作成します。

1. 「表示」メイン・メニューから、「アプリケーション・サーバー・ナビゲータ」を選択します。

2. 接続名を展開します(この例では「MyConnection」)。
図2-23に示すように、「SOA」フォルダが表示されます。「SOA」フォルダには、デプロイ済のSOAコンポジット・アプリケーションのリビジョンとサービスがすべて表示されます。これにより、すべてのOracle WebLogic管理サーバー、管理対象のOracle WebLogic Serverおよびクラスタ化されたOracle WebLogic Serverにデプロイされたすべてのアプリケーションを同じドメインで参照できます。図2-23に詳細を示します。

図2-23 アプリケーション・サーバー・ナビゲータ

「図2-23 アプリケーション・サーバー・ナビゲータ」の説明

3. 「SOA」フォルダを展開します。

4. コンポジット・アプリケーションがデプロイされたパーティションを展開します。
図2-24に示すように、デプロイ済のSOAコンポジット・アプリケーションとサービスが表示されます。

図2-24 デプロイ済のSOAコンポジット・アプリケーション

「図2-24 デプロイ済のSOAコンポジット・アプリケーション」の説明

5. デプロイ済のSOAコンポジット・アプリケーションを右クリックします。

6. 実行するオプションを選択します。選択項目として表示されるオプションは、アプリケーションの現在の状態に基づいています。表2-11に詳細を示します。

表2-11 SOAコンポジット・アプリケーションのオプション

オプション

説明

停止

実行中のSOAコンポジット・アプリケーションのリビジョンを停止します。コンポジットが停止すると、そのコンポジットへのリクエスト(開始またはコールバック)はすべて却下されます。

注意: 使用するバインディング・コンポーネントによって動作が異なります。たとえば、Webサービス・リクエストの場合は、却下されてコール元に戻されます。また、JCAアダプタ・バインディング・コンポーネントの場合も動作が異なる場合があります(たとえば、リクエストは却下表に格納されます)。

このオプションは、コンポジット・アプリケーションが開始済の場合に表示されます。

開始

停止したコンポジット・アプリケーションのリビジョンを再起動します。これにより、新規リクエストを処理できるようになります(却下されません)。メッセージのリカバリは発生しません。

このオプションは、コンポジット・アプリケーションが停止済の場合に表示されます。

リタイア

選択したコンポジットのリビジョンをリタイア状態にします。プロセスのライフ・サイクルがリタイア状態の場合、新しいインスタンスは作成できません。既存のインスタンスは正常に完了できます。

コンポジット・アプリケーションへの開始リクエストは、却下されてクライアントに戻されます。様々なバインディング・コンポーネントの却下時の動作は、停止オプションの場合と同様です。

開始済のコンポジット・アプリケーション・インスタンスへのコールバックは、適切に配信されます。

このオプションは、コンポジット・アプリケーションがアクティブの場合に表示されます。

アクティブ化

リタイア状態のコンポジット・アプリケーションのリビジョンをアクティブ化します。このオプションを使用する場合は、次の動作に注意してください。

- すべてのコンポジット・アプリケーションは、デプロイされると自動的にアクティブになります。

- 新たにデプロイしたコンポジット・アプリケーションの他のリビジョンは、アクティブのままです(つまり、自動的にリタイア状態になりません)。必要な場合は、明示的にリタイア状態にする必要があります。

このオプションは、アプリケーションがリタイア状態の場合に表示されます。

アンデプロイ

選択したコンポジット・アプリケーションのリビジョンをアンデプロイします。このアクションを実行すると、次のような結果になります。

- コンポジット・アプリケーションのこのリビジョンを構成したり監視できなくなります。

- コンポジット・アプリケーションのこのリビジョンのインスタンスを処理できなくなります。

- 以前に完了したプロセスを表示できなくなります。

- 現在実行中のインスタンスの状態は「失効」に変更され、このコンポジットに送信した新規メッセージは処理されません。

- コンポジット・アプリケーションのデフォルト・リビジョン(たとえば、2.0)をアンデプロイすると、そのコンポジット・アプリケーションで次に使用可能なリビジョン(たとえば、1.0)がデフォルトになります。

デフォルトのリビジョンの設定

選択したコンポジット・アプリケーションのリビジョンをデフォルトに設定します。

7. デプロイメント・プロファイルが含まれるビルトインのSOAコンポジット・アプリケーション・アーカイブをデプロイする場合、SOAフォルダを右クリックし、「SOAアーカイブのデプロイ」を選択します。このアーカイブは単一アプリケーションのJARファイルまたは複数のアプリケーションが含まれるSOAバンドルZIPファイルで構成されます。
次を選択するように求めるプロンプトが表示されます。

- SOAコンポジット・アプリケーションのアーカイブをデプロイするターゲットSOAサーバー。

- デプロイするアーカイブ。

- アプリケーションに添付する構成プラン。通常、プロジェクトをある環境から別の環境に(たとえば、テスト環境から本番環境に)移動する場合は、JDBC接続文字列や様々なサーバーのホスト名など、環境固有の値をいくつか変更する必要があります。これらの値は、構成プランと呼ばれる単一のテキスト(XML)ファイルを使用して変更できます。構成プランは、Oracle JDeveloperまたはコマンドラインから作成します。プロセスのデプロイメント時に、構成プランを使用してSOAプロジェクトを検索し、プロジェクトを次に進むターゲット環境に適応させるために置換する必要がある値を検索します。これはオプションです。

- 同じリビジョンIDを持つ既存のコンポジットを上書きするかどうか。これにより、アプリケーションのリビジョンを再デプロイできます。

図2-25に詳細を示します。

図2-25 「SOAアーカイブのデプロイ」ダイアログ

「図2-25 「SOAアーカイブのデプロイ」ダイアログ」の説明

詳細は、次のドキュメントを参照してください。

- デプロイメント・プロファイルおよび構成プランの作成方法、および既存のSOAアーカイブのデプロイ方法の詳細は第43章「SOAコンポジット・アプリケーションのデプロイ」

- Oracle Enterprise Manager Fusion Middleware Controlを使用したデプロイ済のSOAコンポジット・アプリケーションの管理の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

2.8.2 デプロイ済SOAコンポジット・アプリケーションのテスト方法

SOAコンポジット・アプリケーションをデプロイすると、Oracle Enterprise Manager Fusion Middleware Controlの「Webサービスのテスト」ページからそのテスト・インスタンスを開始して、XMLペイロード・データを検証することができます。テスト・インスタンスの開始の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

テスト・インスタンスの作成に加えて、本番環境へのデプロイメントの前に、SOAコンポジット・アプリケーションとWebサービス・パートナ間の相互作用をシミュレートできます。これにより、本番環境へのデプロイメント準備が完了するまでに、プロセスとWebサービス・パートナの相互作用が期待どおりであるかを確認できます。ユニット・テストの作成方法の詳細は、第44章「SOAコンポジット・アプリケーションのテストの自動化」を参照してください。

3 SOAサンプル・アプリケーションの概要

この章では、このマニュアルで使用できるSOAサンプル・アプリケーションを設定、デプロイおよび実行する方法について説明します。Fusion Order DemoのWebLogic Fusion Order Demoアプリケーションは、このマニュアル全体でサンプルとして使用され、Oracle SOA Suiteの様々な機能を示します。

この章には次の項が含まれます:

- 第3.1項「Fusion Order Demoの概要」

- 第3.2項「Fusion Order Demoアプリケーションの設定」

- 第3.3項「WebLogic Fusion Order Demoアプリケーションの内容」

- 第3.4項「OrderBookingCompositeフローの理解」

- 第3.5項「Fusion Order Demoのデプロイ」

- 第3.6項「WebLogic Fusion Order Demoの実行」

- 第3.7項「Oracle BAMサーバーに送信されたデータの表示」

- 第3.8項「WebLogic Fusion Order Demoアプリケーションのコンポジットのアンデプロイ」

3.1 Fusion Order Demoの概要

WebLogic Fusion Order Demoアプリケーションは、Fusion Order Demoと呼ばれる比較的大規模なサンプル・アプリケーションの一部です。このサンプル・アプリケーションに登場するGlobal Companyでは、Webベースのクライアント・アプリケーションなど、多数のチャネルを介して電子機器を販売しています。電子機器は、ストアフロント・タイプのWebアプリケーションを介して販売されます。顧客はWebサイトにアクセスし、登録して、製品を注文できます。

Fusion Order Demoには、次の2つの部分があります。

- ストアフロント・モジュール

- WebLogic Fusion Order Demoアプリケーション

3.1.1 ストアフロント・モジュール

ストアフロント・モジュールには、Oracle Application Development Framework (ADF)で作成された豊富なユーザー・インタフェースが用意されており、これを使用して、簡単に作成できるAJAXユーザー・インタフェースを高度なSOAコンポジット・アプリケーションに連結する方法を示します。これは、Oracle ADFビジネス・コンポーネント、ADFモデル・データ・バインディングおよびADF Facesに基づいています。

ストアフロント・モジュールでは、ストアフロント・タイプのWebアプリケーションを介して電子機器が販売されます。

ストアフロント・モジュールには、次のプロジェクトがあります。

- StoreFrontService: このプロジェクトは、ストアフロント・データへのアクセスと、顧客データ、注文データおよび製品データの更新のトランザクション・サポートを提供します。

- StoreFrontUI: このプロジェクトは、顧客がストアフロントの参照、注文の発行、サイトへの登録、注文情報の表示およびユーザー・プロファイルの更新に使用するWebページを提供します。

図3-1に、ストアフロント・モジュール・ユーザー・インタフェースのホームページを示します。ここでは、サイトで販売促進している注目製品が表示され、全品目のカタログにアクセスできます。また、製品の画像が製品名とともに表示されます。サイトで販売促進している注目製品は、製品カタログ領域とは別のページ・リージョンに表示されています。

図3-1 StoreFrontUIのホームページ

「図3-1 StoreFrontUIのホームページ」の説明

このホームページで、非同期ユーザーとしてWebサイトを参照し、登録済の顧客としてログインして注文を発行できます。

Fusion Order Demoアプリケーションには、事前定義済の顧客データが同梱されています。Fusion Order Demoアプリケーションでは、Oracle ADFセキュリティを実装してOracle ADFリソースへのアクセスを管理するため、認証済ユーザーのみがカート内の注文を表示できます。

ストアフロント・モジュールの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。

3.1.2 WebLogic Fusion Order Demoアプリケーション

WebLogic Fusion Order Demoアプリケーションでは、ストアフロント・モジュールで発行された注文を処理します。ここで使用するOracle SOA Suiteコンポーネントは次のとおりです。

- Oracle Mediator

- Oracle BPELプロセス

- ヒューマン・ワークフロー(ヒューマン・タスクを使用)

- Oracle Business Rules

- Spring

- Oracle User Messaging Service

- Oracle Business Activity Monitoring

- Oracle Metadata Servicesリポジトリ

ストアフロント・モジュールを使用して注文が発行されると、その注文は、WebLogic Fusion Order Demoアプリケーションによって処理されます。注文を処理するときは、様々な内部アプリケーションと外部アプリケーション(顧客サービス・アプリケーション、与信検証システム、および内部ベンダーと外部ベンダーの両方)が使用されます。たとえば、内部ベンダー(InternalWarehouseService)と外部ベンダー(ExternalPartnerSupplier)には、すべての注文に関する情報が送信されます。注文プロセスの過程で、この2つのベンダーは、注文内の各品目の供給価格をそれぞれ戻します。プロセス内の条件によって、注文が割り当てられるサプライヤが決定されます。

SOAコンポジット・アプリケーションの詳細は、第1章「Oracle SOA Suiteを使用したアプリケーション作成の概要」を参照してください。

3.2 Fusion Order Demoアプリケーションの設定

この項では、WebLogic Fusion Order Demoアプリケーションを実行する環境を準備する方法について説明します。

3.2.1 タスク1: Oracle JDeveloper Studioのインストール

WebLogic Fusion Order Demoアプリケーションを作成するために、Oracle JDeveloper 11g Studio Editionをインストールします。Oracle JDeveloperは、次のサイトからダウンロードできます。

http://www.oracle.com/technetwork/developer-tools/jdev/overview/index.html

11gをダウンロードしてインストールし、その製品がJava EditionではなくStudio Editionであることを確認してください。これらの詳細をOracle JDeveloperで確認するには、「ヘルプ」→「バージョン情報」メニュー・オプションの順に選択します。

SOAコンポジット・アプリケーションとプロジェクトを作成してデプロイするには、Oracle SOA Suite拡張機能をインストールする必要があります。この拡張機能をOracle JDeveloper用にインストールする手順は、『Oracle Fusion Middleware Oracle JDeveloperインストレーション・ガイド』を参照してください。

3.2.2 タスク2: Fusion Order Demoアプリケーションのインストール

このチュートリアルでは、Oracle JDeveloper環境内でFusion Order Demoの内容を表示したり使用する必要があります。Fusion Order DemoはZIPファイル内に格納されています。

このZIPファイルにアクセスする手順は、次のとおりです。

1. Fusion Order DemoアプリケーションZIPファイル(FusionOrderDemo_R1PS6.zip)をダウンロードします。ZIPファイルは、次のサイトからダウンロードできます。

http://www.oracle.com/technetwork/developer-tools/jdev/index-095536.html

2. ファイルを一時ディレクトリに解凍します。
このチュートリアルでは、このディレクトリをDEMO_DOWNLOAD_HOMEと表記します。

3.2.3 タスク3: Oracle SOA Suiteのインストール

Fusion Order Demoアプリケーションを正常にデプロイして実行するには、Oracle SOA Suiteのインストールを完了しておく必要があります。特に、ドメインには管理サーバーと管理対象サーバーを含めます。

Oracle SOA Suiteをインストールするには、次の操作を実行する必要があります。

- OracleデータベースにOracle SOA Suiteのスキーマを作成します。

- Oracle WebLogic Serverをインストールします。

- Oracle SOA Suite、Oracle Enterprise Manager、およびOracle BAM(必要な場合)をサポートするようにOracle WebLogic Server内にドメインを構成します。Fusion Order DemoではOracle BAMは必須ではありませんが、Oracle BAMサーバーを構成すると、Oracle BAMアダプタからOracle BAMサーバーにデータが送信されます。
ドメインが作成されると、ドメインには、管理タスクを実行するためのOracle Enterprise Manager Fusion Middleware Controlをホストする管理サーバー、デプロイ済アプリケーションをホストする管理対象サーバー、およびOracle BAMサーバー用の2つ目の管理対象サーバー(Oracle BAMを構成した場合)が含まれます。

Oracle SOA Suiteをインストールして構成する手順は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suiteインストレーション・ガイド』を参照してください。

インストール・プロセスを正常に完了した後、さらに次の構成手順を実行します。

1. ドメインの構成ファイルに設定を追加して、ストアフロント・モジュールに含まれる資格証明を有効化します。

1. Oracle SOA Suiteドメイン用に設定された構成ファイルを次のディレクトリで検索します。

(UNIX) MW_HOME/user_projects/domains/domain_name/bin/setDomainEnv.sh
(Windows) MW_HOME\user_projects\domains\domain_name\bin\setDomainEnv.cmd

2. JAVA_PROPERTIES行(UNIX)またはSET JAVA_PROPERTIES行(Windows)に次のオプションを追加します。

-Djps.app.credential.overwrite.allowed=true

このプロパティの設定方法の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。

3. Oracle WebLogic Server管理サーバーが稼働中の場合は停止します。
UNIXの場合は、rootユーザーとしてディレクトリMW_HOME/user_projects/domains/domain_name/binに移動し、次のコマンドを入力します。

./stopWebLogic.sh

Windowsの場合は、Windowsの「スタート」メニューから「すべてのプログラム」→「Oracle WebLogic」→「User Projects」→「domain_name」→「Stop Admin Server」の順に選択します。

4. 管理サーバーを起動します。
UNIXの場合は、ディレクトリMW_HOME/user_projects/domains/domain_name/binから次のコマンドを入力します。

./startWebLogic.sh

Windowsの場合は、Windowsの「スタート」メニューから「すべてのプログラム」→「Oracle WebLogic」→「User Projects」→「domain_name」→「Start Admin Server」の順に選択します。

UNIXの場合は、プロンプトに対してOracle WebLogic Serverユーザー名およびパスワードを入力します。パスワードは入力しても表示されません。

コマンド・ウィンドウに次のメッセージが表示されると、管理サーバーが起動します。

<Server state changed to RUNNING>
<Server started in RUNNING mode>

コマンド・ウィンドウは最小化してもかまいませんが、開いたままにしておきます。これで管理サーバーが実行され、使用する準備ができました。

5. 管理サーバーがRUNNINGモードのときに、管理対象サーバーが実行されていない場合は起動します。コマンド・ウィンドウで、次のコマンドをすべて1行に入力します。
UNIXの場合は、ディレクトリMW_HOME/user_projects/domains/domain_name/binから次のコマンドを入力します。

./startManagedWebLogic.sh managed_server_name admin_url username password

Windowsの場合は、ディレクトリMW_HOME\user_projects\domains\domain_name\binから次のコマンドを入力します。

startManagedWebLogic.cmd managed_server_name admin_url username password

表3-1に示す次の値を置き換えます。

表3-1 startManagedWebLogicの値

値

説明

managed_server

管理対象サーバー名。例:

soa_server1

bam_server1

admin_url

管理対象サーバーのURL。例:

http://soahost:8001

http://soahost:9001

通常、SOAアプリケーションをホストする管理対象サーバーのポートは8001です。また、Oracle BAM用の管理対象サーバーのポートは9001です。

username

Oracle WebLogic Server管理者。例:

weblogic

password

Oracle WebLogic Server管理者のパスワード。例:

welcome1

2. Oracle JDeveloperがインストールされているホストから、Oracle WebLogic ServerとともにOracle SOA Suiteがインストールされているホストにリモートでデプロイする場合は、Oracle SOA SuiteがインストールされているホストのJAVA_HOMEおよびPATH環境変数を変更します。
Oracle JDeveloperでコンポジット・サービスをデプロイするスクリプトを実行するには、これらの変数を変更する必要があります。JAVA_HOME変数はOracle WebLogic Server JDKへのパスを含むように設定し、PATH変数はantに使用するOracle WebLogic Serverのbinディレクトリへのパスを含むように設定します。

UNIXの場合は、exportコマンドを使用します。例:

export JAVA_HOME=$MW_HOME/jdk160_11
export PATH=$PATH:MW_HOME/modules/org.apache.ant_1.7.0/bin

Windowsの場合は、次の手順に従って変数を変更します。

1. Windowsの「スタート」メニューから「コントロール パネル」を開き、「システム」アイコンをダブルクリックします。

2. 「システムのプロパティ」ダイアログで、「詳細設定」タブを選択して「環境変数」をクリックします。

3. 「環境変数」ダイアログで、JAVA_HOMEシステム変数を探し、Oracle WebLogic Server JDKの場所に設定されていることを確認します。
JAVA_HOME変数が定義されていない場合は、「新規」をクリックし、「新しいシステム変数」ダイアログで変数名JAVA_HOMEおよびOracle WebLogic Server JDKを指す変数値(例: C:\weblogic\jdk160_11)を入力します。「OK」をクリックして新しいシステム変数を設定します。

4. Pathシステム変数をダブルクリックし、Oracle WebLogic Serverのant\binディレクトリへのパスが含まれていることを確認します。このパスが含まれていない場合は、変数値の末尾に追加します。例:

;C:\weblogic\modules\org.apache.ant_1.7.0\bin

5. 「OK」をクリックして新しいシステム変数を設定します。

6. 「OK」をさらに2回クリックして「環境変数」ダイアログと「システムのプロパティ」ダイアログを閉じます。

3.3 WebLogic Fusion Order Demoアプリケーションの内容

WebLogic Fusion Order Demoアプリケーションを設定した後は、Oracle JDeveloperでWebLogic Fusion Order Demoのアーティファクトを表示します。

WebLogic Fusion Order DemoアプリケーションをOracle JDeveloperで開く手順は、次のとおりです。

1. Oracle JDeveloperのメイン・メニューから、「ファイル」→「開く」の順に選択します。

2. 「開く」ダイアログで、DEMO_DOWNLOAD_HOME/CompositeServicesを参照し、「WebLogic Fusion Order Demo.jws」を選択します。

3. 「開く」をクリックします。

4. ファイルを11.1.1.6.0フォーマットに移行するかどうかを尋ねるプロンプトが表示された場合は、「はい」をクリックします。移行が完了した時点で、「OK」をクリックします。
図3-2に、アプリケーション・ワークスペースのファイルを開いた状態の「アプリケーション・ナビゲータ」を示します。ここには、WebLogic Fusion Order Demoのプロジェクト・アプリケーションが表示されています。

図3-2 WebLogic Fusion Order Demoアプリケーションのプロジェクト

「図3-2 WebLogic Fusion Order Demoアプリケーションのプロジェクト」の説明

3.3.1 WebLogic Fusion Order Demoアプリケーションのプロジェクト・アプリケーション

表3-2では、WebLogicFusionOrderDemoアプリケーション・ワークスペースのプロジェクトをリストして説明します。

表3-2 WebLogic Fusion Order Demoアプリケーションのプロジェクト

アプリケーション

説明

B2BX12OrderGateway

このプロジェクトには、Oracle B2Bのコンポジットが含まれています。このコンポジットは、このマニュアルでは使用しません。

bin

このプロジェクトには、すべてのSOAプロジェクトをデプロイするためのビルド・スクリプトが含まれています。また、JMSコネクタ情報、デモ・トピックおよびデモ・ユーザーをシードするためのテンプレートも含まれています。

CreditCardAuthorization

このプロジェクトは、顧客のクレジット・カード情報を検証するためにOrderBookingCompositeプロジェクトで必要とされるサービスを提供します。

ExternalLegacyPartnerSupplierEjb

このプロジェクトは、見積価格を提供するための外部システムを提供します。

OrderApprovalHumanTask

このプロジェクトは、OrderBookingCompositeプロジェクトからの注文を承認するためのタスク・フォームを提供します。

OrderBookingComposite

このプロジェクトでは、ストアフロント・モジュール・ユーザー・インタフェースで発行された注文が処理されます。このプロジェクトには、WebLogic Fusion Order Demoアプリケーションのメイン・プロセスが含まれています。また、アクティブなデータをOracle BAMダッシュボードに送信するために、Oracle BAMアダプタとOracle BAMセンサーが使用されます。このコンポジットは、このマニュアルでは使用しません。

OrderSDOComposite

このプロジェクトは、ストアフロント・モジュールのStoreFrontServiceサービスをテスト目的でシミュレートします。

PartnerSupplierComposite

このプロジェクトには、パートナの倉庫から見積を取得するためのBPELプロセスおよびSpringコンテキストを含むコンポジットが含まれています。これは、OrderBookingCompositeプロジェクトのコンポジットからはサービスとして参照されます。見積リクエストは、金額に応じて、BPELプロセスまたはSpringコンポーネントのいずれかにルーティングされます。

3.3.2 composite.xmlファイル

コンポジットの設計方法を理解するには、OrderBookingCompositeというメイン・プロジェクトをOracle JDeveloperで確認します。

composite.xmlファイルを表示する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、「OrderBookingComposite」→「SOAコンテンツ」の順に展開します。

2. OrderBookingComposite (composite.xml)を選択します。

図3-3に示すように、Oracle JDeveloperのSOAコンポジット・エディタにコンポジットが表示されます。

図3-3 SOAコンポジット・エディタ

「図3-3 SOAコンポジット・エディタ」の説明

3.4 OrderBookingCompositeフローの理解

OrderBookingCompositeは、WebLogic Fusion Order Demoアプリケーションのメイン・プロジェクトであり、Global Companyからの注文を処理するためのコンポジット・アプリケーションが含まれています。このコンポジットでは、企業内部と外部の他のサイトの各サービスを、SOAアーキテクチャ・パラダイムを使用して統合し、1つのまとまりのある注文システムを作成する方法を示します。

OrderBookingCompositeの中央には、OrderProcessor BPELプロセスがあります。これは、プロセス内のビジネス・ルールに基づいて、正しい倉庫での注文履行のために企業内の既存のサービスをすべて編成します。

図3-4は、WebLogic Fusion Order DemoアプリケーションのOrderBookingCompositeコンポジットの概要を示しています。その次に、アプリケーションによる注文の処理方法に対するコンポジット・フローについて段階ごとに説明します。

図3-4 OrderBookingCompositeフロー

「図3-4 OrderBookingCompositeフロー」の説明

新規顧客がGlobal Companyのストアフロント・ユーザー・インタフェースに登録すると、Webクライアントによって、StoreFrontServiceと呼ばれる内部顧客サービス・アプリケーションに顧客の情報が送信されます。次に、StoreFrontServiceによって顧客情報がデータベースに格納されます。その後、顧客は製品を閲覧し、オンライン・ショッピング・カートに追加して、注文を発行できます。ユーザーngreenbeは、注文を発行する前に登録が不要な唯一のユーザーです。

登録済顧客がGlobal Companyのストアフロント・ユーザー・インタフェースにアクセスしようとすると、ユーザー・インタフェースによってStoreFrontServiceが起動され、認証が行われます。登録済ユーザーはショッピング・カートに製品を追加し、注文を発行します。注文が発行されると、次のイベントが発生します。

注文が発行されると、注文を処理して完了する次のシーケンスが発生します。

1. Oracle ADF Business Componentによって、Fusion Order Demoのスキーマがあるデータベースに注文が書き込まれ、イベント配信ネットワーク(EDN)を使用して NewOrderSubmitted イベントが発生します。このイベントに関連付けられたデータが注文IDです。

2. OrderPendingEvent Oracle MediatorはNewOrderSubmittedイベントをサブスクライブするため、EDNレイヤーはOrderPendingEvent Oracle Mediatorに新規注文を通知します。

3. OrderPendingEvent Oracle Mediatorは注文を受信し、入力注文IDをOrderProcessor BPELプロセスにルーティングします。

4. OrderProcessor BPELプロセスは、公開されたOracle ADF Business ComponentのStoreFrontServiceサービスにバインドするためのbind entityアクティビティを使用して、データベースから注文IDを受信します。
次の注文情報は、プロセスで後に使用される場合があります。

- 顧客ID

- 顧客が購入したアイテム

- 使用されたクレジット・カード

- 選択された出荷先住所

5. BPELプロセスは、StoreFrontServiceを開始し、注文IDを渡して、顧客に関する情報を取得します。

6. 次に、BPELプロセスは、購入金額、クレジット・カード・タイプおよびクレジット・カード番号をCreditCardAuthorizationServiceに送信し、顧客のクレジット・カードが有効であるかどうかを検証します。
クレジット・カードが有効でない場合は、BPELプロセスによって注文が取り消されます。

クレジット・カードが有効な場合は、BPELプロセスによって注文がRequiresApprovalRuleビジネス・ルールに送信され、管理者による注文の承認が必要かどうかが判定されます。

7. RequiresApprovalRuleビジネス・ルールでは、手動承認が必要であるかどうかが評価されます。ビジネス・ルールには、$2,000を超える注文に対して手動承認が必要であるというルールが含まれています。

8. 手動承認が必要な注文については、BPELプロセスによって ApprovalHumanTask ヒューマン・タスクが起動され、次の処理が実行されます。

- メッセージがjsteinという名前の割当て先にルーティングされ、割当て先は注文を承認または却下します。

- OnTaskAssignedイベントが公開されます。OrderApprovalTaskAssignedMediator Oracle Mediatorによってこのイベントがサブスクライブされます。Oracle BAMサーバーが構成されている場合は、Oracle BAMアダプタを使用して注文の割当て先ID jstein(ECIDに基づく)がOracle BAMサーバーに送信されます。

9. 注文が承認されると、BPELプロセスによって注文情報が次のサプライヤに送信され、同時に見積が取得されます。

- 内部サプライヤ。同じOrderBookingCompositeにあるInternalWarehouseService BPELプロセスを使用して送信されます。

- 外部サプライヤ。PartnerSupplierMediator Oracle Mediatorを使用し、PartnerSupplierCompositeと呼ばれる別のコンポジットにあるExternalPartnerSupplier BPELプロセスまたはSpringPartnerSupplierMediator Springコンポーネントにルーティングして送信されます。

10. これら2つのサプライヤは見積を返信し、BPELプロセスはその見積をEvaluatePreferredSupplierRuleビジネス・ルールに送信します。

11. EvaluatePreferredSupplierRuleビジネス・ルールで、2つの見積のうち安い方のサプライヤが選択されます。

12. BPELプロセスによってFulfillOrder Oracle Mediatorが起動され、次の4つの操作が実行されます。

- 注文が一時キューに保管され、夜間にバッチ・モードで履行システムにアップロードされます。

- 注文がUSPSにルーティングされます。

- Oracle BAMサーバーが構成されている場合は、Oracle BAMアダプタを使用して注文に関するデータ(注文IDに基づく)がOracle BAMサーバーに送信されます。

- Oracle BAMサーバーが構成されている場合は、Oracle BAMアダプタを使用して処理対象の注文の時間に関するデータ(インスタンスIDに基づく)がOracle BAMサーバーに送信されます。

13. 注文が履行されると、BPELプロセスによって注文がcompleteに設定されます。

14. BPELプロセスによってNotificationServiceサービスが起動され、発注情報の電子メール通知が顧客に送信されます。

15. 注文が完了すると、OrderPendingEvent Oracle MediatorがOrderProcessorプロセスに対してOrderCompletedビジネスを公開します。

図3-4には記載されていませんが、OrderBookingCompositeコンポジットでは、承認済の注文用に次の処理フローが提供されます。

1. UpdateOrderStatus Oracle Mediatorでは、次の処理が実行されます。

- ビジネス・イベント OrderUpdateEvent を公開し、注文IDを OrderProcessor BPELプロセスに送信します。

- Oracle BAMサーバーが構成されている場合は、Oracle BAMアダプタを使用して注文IDおよび注文ステータスに関するデータをOracle BAMサーバーに送信します。

2. OrderUpdateEventMediator Oracle Mediatorでは、ビジネス・イベントOrderUpdateEventをサブスクライブし、注文IDをStoreFrontServiceに送信して、StoreFrontServiceが注文に関する更新済詳細を返信するまで待機します。

注文をトラッキングするために、 OrderBookingComposite コンポジットにはセンサーが含まれており、メッセージにトラッキング可能フィールドを実装する手段を提供します。たとえば、 CreditCardAuthorization サービスには、クレジット・カードが認可されているかどうかを示すコンポジット・センサーがあります。さらに、 OrderProcessor BPELプロセスでも様々なアクティビティに対してセンサーを使用します。たとえば、 OrderProcessor BPELプロセスの Scope_AuthorizeCreditCard スコープは、 CreditCardAuthorizationService サービスを使用して顧客の与信が受諾可能であることを検証し、トラッキング用にセンサーを使用します。Oracle Enterprise Manager Fusion Middleware Controlからコンポジットのインスタンスを監視する場合は、コンポジットとBPELプロセスの両方のセンサーを監視できます。

この章の後続の項では、Fusion Order Demoのデプロイと実行について説明します。実行する際には、Oracle Enterprise Manager Fusion Middleware Controlを使用して、OrderBookingCompositeコンポジットで処理される注文を監視します。また、注文を監視するときに、コンポジット・センサーとアクティビティ・センサーを表示することもできます。

3.5 Fusion Order Demoのデプロイ

この項では、Fusion Order Demoアプリケーションをパーティションにデプロイする方法について説明します。

3.5.1 タスク1: Oracle WebLogic Serverへの接続の作成

Oracle WebLogic Serverへの接続を作成する手順は、次のとおりです。

1. Oracle JDeveloperを起動します。

(UNIX) ORACLE_HOME/jdev/bin/jdev
(Windows) JDEV_ORACLE_HOME\jdeveloper\JDev\bin\jdev.exe

2. 図3-5に示すように、「アプリケーション・メニュー」から「新規」を選択します。

図3-5 アプリケーション・メニュー

「図3-5 アプリケーション・メニュー」の説明

3. 「新規ギャラリ」ダイアログの「カテゴリ」ツリーで、「一般」を選択し、次に「接続」を選択します。

4. 「アプリケーション・サーバー接続」を選択し、「OK」をクリックします。
「アプリケーション・サーバー接続タイプの作成」ページが表示されます。

5. 「接続名」フィールドに接続の一意の名前を入力し、「接続タイプ」リストから「WebLogic 10.3」を選択します。図3-6に詳細を示します。

図3-6 アプリケーション・サーバー接続の作成

「図3-6 アプリケーション・サーバー接続の作成」の説明

6. 「次へ」をクリックします。
「認証」ページが表示されます。

7. 「ユーザー名」フィールドにweblogicと入力し、「パスワード」フィールドに管理者のパスワードを入力します。

8. 「構成」ページで、表3-3に記載されている詳細を入力します。

表3-3 「構成」ページのフィールドと値

アプリケーション

説明

Weblogicホスト名(管理サーバー)

Oracle WebLogic Serverの管理サーバーのDNS名またはIPアドレス。

ポート

管理サーバーがリクエストをリスニングしているポートのアドレス(デフォルトでは7001)。

WebLogicドメイン

Oracle WebLogic Serverのドメイン名。

9. 「次へ」をクリックします。
「テスト」ページが表示されます。

10. 「接続のテスト」をクリックします。
次のメッセージが表示されることを確認します。

Testing JSR-88                         ... success.
Testing JSR-88-LOCAL                   ... success.
Testing JNDI                           ... success.
Testing JSR-160 DomainRuntime          ... success.
Testing JSR-160 Runtime                ... success.
Testing JSR-160 Edit                   ... success.
Testing HTTP                           ... success.
Testing Server MBeans Model            ... success.

8 of 8 tests successful.

テストが成功しない場合は、Oracle WebLogic Serverが稼働していることを確認し、テストを再試行します。

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

12. 「リソース・パレット」で、「IDE接続」の「アプリケーション・サーバー」を展開し、作成したアプリケーション・サーバー接続を確認します。図3-7に詳細を示します。

図3-7 リソース・パレット

「図3-7 リソース・パレット」の説明

3.5.2 (オプション)タスク2: Oracle BAMサーバーへの接続の作成

インストール中にOracle BAMサーバーを構成した場合は、Oracle BAMサーバーへの接続を作成します。

Oracle BAMサーバーへの接続を作成する手順は、次のとおりです。

1. 「アプリケーション・メニュー」から「新規」を選択します。

2. 「新規ギャラリ」ダイアログの「カテゴリ」ツリーで、「一般」を選択し、「接続」を選択します。

3. 「BAM接続」を選択し、「OK」をクリックします。
BAM接続ウィザードが表示されます。

4. 必ず、「アプリケーション・リソース」が選択されているようにしてください。

5. 接続の名前を指定します。

6. 「次へ」をクリックします。

7. 「ユーザー名」フィールドにweblogicと入力し、「パスワード」フィールドに管理者のパスワードを入力します。

8. 表3-4に記載されているOracle BAMサーバー・ホストの接続情報を入力します。

表3-4 Oracle BAMサーバー接続情報

フィールド

説明

BAM Webホスト

Oracle BAMレポート・サーバーとWebアプリケーションがインストールされているホストの名前を入力します。ほとんどの場合、Oracle BAM Webアプリケーション・ホスト、Oracle BAMサーバー・ホストおよびOracle WebLogic Serverは同一です。

BAMサーバー・ホスト

Oracle BAMサーバーがインストールされているホストの名前を入力します。

ユーザー名

Oracle BAMサーバー・ユーザー名を入力します。例:

weblogic

パスワード

ユーザー名に対するパスワードを入力します。

HTTPポート

ポート番号を入力するか、またはデフォルト値9001をそのまま使用します。これは、Oracle BAM Webアプリケーション・ホスト用のHTTPポートです。

JNDIポート

ポート番号を入力するか、またはデフォルト値9001をそのまま使用します。JNDIポートは、Oracle BAMサーバーの一部であるOracle BAMレポート・キャッシュ用です。

HTTPSの使用

設計時にOracle BAMサーバーへの接続にセキュアなHTTP(HTTPS)を使用する場合は、このチェック・ボックスを選択します。選択しない場合は、HTTPが使用されます。

9. 「次へ」をクリックします。
「テスト」ページが表示されます。

10. 「接続のテスト」をクリックします。
次のメッセージが表示されることを確認します。

Testing HTTP connection ... success.
Testing Data Object browsing ... success.
Testing JNDI connection ... success.

3 of 3 tests successful.

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

3.5.3 タスク3: Fusion Order Demoアプリケーションのスキーマのインストール

Fusion Order Demoアプリケーションにスキーマをインストールする手順は、次のとおりです。

1. Oracle JDeveloper 11gを起動し、メイン・メニューから「ファイル」→「開く」の順に選択します。

2. 「開く」ダイアログで、DEMO_DOWNLOAD_HOME/Infrastructureを参照し、「Infrastructure.jws」を選択します。

3. 「開く」をクリックします。

4. ファイルを11.1.1.7.0フォーマットに移行するかどうかを尋ねるプロンプトが表示された場合は、「はい」をクリックします。移行が完了した時点で、「OK」をクリックします。

5. 「アプリケーション・ナビゲータ」で、「MasterBuildScript」→「リソース」の順に展開し、「build.properties」をダブルクリックします。

6. エディタで、表3-5に示すプロパティを環境にあわせて変更します。

表3-5 Fusion Order Demoアプリケーション・スキーマのインストールに必要なプロパティ

フィールド

説明

jdeveloper.home

Oracle JDeveloper 11gがインストールされているルート・ディレクトリ。例:

C:/JDeveloper/11

jdbc.urlBase

jdbc:oracle:thin:@your_hostnameの形式のご使用のデータベースのベースJDBC URL。例:

jdbc:oracle:thin:@localhost

jdbc.port

データベースのポート。例:

1521

jdbc.sid

データベースのSID。例:

ORCLまたはXE

db.adminUser

データベースの管理ユーザー。例:

system

db.demoUser.tablespace

Fusion Order Demoユーザー用の表領域名。例:

USERS

7. JDeveloperのメイン・メニューから、「ファイル」→「すべて保存」の順に選択します。

8. 「アプリケーション・ナビゲータ」で、「リソース」ノードの「build.xml」を右クリックし、「Antターゲットの実行」→「buildAll」の順に選択します。

9. プロンプトに対して、データベースの管理ユーザーのパスワードを入力します。
buildAllコマンドによりFODユーザーが作成され、FODスキーマに表が移入されます。「Apache Ant - ログ」に、一連のSQLスクリプトに続いて次のように表示されます。

buildAll:
BUILD SUCCESSFUL
Total time: nn minutes nn seconds

デモ・スキーマおよびスクリプトの詳細は、MasterBuildScriptプロジェクトのREADME.txtファイルを参照してください。

3.5.4 タスク4: ストアフロント・モジュールの構成プロパティの設定

ストアフロント・モジュールは、単純なWebアプリケーションとして、またはSOA環境の一部としてデプロイできます。ストアフロント・モジュールのservice部分で定義するプロパティは、いずれかのページ内で使用されて、「Submit Order」ボタンをクリックするとBPELプロセスを起動するイベントが起動されるかどうかを決定します。SOA環境内でストアフロント・モジュールを使用する場合は、このプロパティのデフォルト値を変更する必要があります。

ストアフロント・モジュールの構成プロパティを設定する手順は、次のとおりです。

1. 「ファイル」→「開く」の順に選択します。

2. 「開く」ダイアログで、DEMO_DOWNLOAD_HOME/StoreFrontModuleを参照し、「StoreFrontModule.jws」を選択します。

3. 「開く」をクリックします。

4. ファイルを11.1.1.7.0フォーマットに移行するかどうかを尋ねるプロンプトが表示された場合は、「はい」をクリックします。移行が完了した時点で、「OK」をクリックします。
図3-8に、アプリケーション・ワークスペースのファイルを開いた状態の「アプリケーション・ナビゲータ」を示します。

図3-8 StoreFrontModuleが表示された「アプリケーション・ナビゲータ」

「図3-8 StoreFrontModuleが表示された「アプリケーション・ナビゲータ」」の説明

5. 「アプリケーション・ナビゲータ」で、「StoreFrontService」→「アプリケーション・ソース」→「oracle.fodemo.storefront」→「store」→「service」の順に展開します。

6. 「StoreServiceAM」を右クリックし、「構成」を選択します。

7. 「構成の管理」ダイアログで、「名前」リストから「StoreServiceAMLocalWeb」を選択し、「編集」をクリックします。図3-9に詳細を示します。

図3-9 StoreServiceAMLocalWeb

「図3-9 StoreServiceAMLocalWeb」の説明

8. 「ビジネス・コンポーネント構成の編集」ダイアログで、「プロパティ」タブを選択し、「fod.application.issoaenabled」プロパティを選択します。このプロパティは、アプリケーションがSOA環境にデプロイされるかどうかを指定します。

9. 「fod.application.issoaenabled」プロパティの値をtrueに変更してから、OKをクリックします。図3-10に詳細を示します。

図3-10 fod.application.issoenabled

「図3-10 fod.application.issoenabled」の説明

10. 「OK」をクリックします。

11. 「構成の管理」ダイアログで「OK」をクリックします。

3.5.5 タスク5: データベース接続の編集

正しいホスト名およびデータベースSIDを指すようにデータベース接続詳細を編集します。

データベース接続を編集する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で「StoreFrontService」→「アプリケーション・ソース」の順に展開します。

2. 「StoreFrontService.jpx」をダブルクリックします。

3. 「接続」フィールドの右側で、図3-11に示すように「編集」アイコンをクリックします。

図3-11 接続

「図3-11 接続」の説明

4. 「ホスト名」および「SID」フィールドの値を正しいホストおよびSIDに置き換えて、FODデータベース接続の接続文字列を編集します。図3-12に詳細を示します。

図3-12 「ホスト名」および「SID」フィールドの変更

「図3-12 「ホスト名」および「SID」フィールドの変更」の説明

3.5.6 タスク6: ストアフロント・モジュールのデプロイ

ストアフロント・モジュールをデプロイするには、最初にサービスをデプロイし、次にアプリケーション自体をデプロイします。

デプロイメント時に、Oracle JDeveloperでは、デプロイメント・プロファイルでの指定に従って、.jarファイルおよび.warファイルが作成され、.earファイルがアセンブルされます。ファイルがアセンブルされた後、Oracle JDeveloperによって.earファイルがデプロイされ、アプリケーション・サーバー上のディレクトリにこのファイルが解凍されます。使用されるディレクトリはターゲット環境によって異なります。

ストアフロント・モジュールをデプロイする手順は、次のとおりです。

1. ストアフロント・モジュールでOrderBookingCompositeコンポジットへの注文の送信に使用されるサービスをデプロイします。

1. 「アプリケーション」メニューから、「デプロイ」→「StoreFrontModule_SDOServices」を選択します。図3-13に詳細を示します。

図3-13 StoreFrontService_SDOServices

「図3-13 StoreFrontService_SDOServices」の説明

2. 「StoreFrontService_SDOServicesのデプロイ」ダイアログの「デプロイメント・アクション」ページで、「アプリケーション・サーバーへのデプロイ」を選択して「次へ」をクリックします。

3. 「サーバーの選択」ページで「MyAppServerConnection」を選択します。これは、第3.5.1項「タスク1: Oracle WebLogic Serverへの接続の作成」で作成した接続です。

4. 「ドメイン内の全サーバー・インスタンスへのデプロイ」オプションの選択を解除して「次へ」をクリックします。

5. 「サーバー・インスタンス」ページで、Oracle WebLogic Serverの管理対象サーバー(例: soa_server)を選択して「OK」をクリックします。

6. 「サマリー」ページで、「終了」をクリックします。

7. Oracle JDeveloperの下部にあるデプロイメント・ログ・ウィンドウに表示されるメッセージを確認して、デプロイメントが成功したことを確認します。

2. ストアフロント・モジュールをデプロイします。「アプリケーション・メニュー」から、「デプロイ」→「StoreFrontModule」→「デプロイ先」→「MyAppServerConnection」の順に選択します。

1. 「アプリケーション・メニュー」から、「デプロイ」→「StoreFrontModule」の順に選択します。

2. 「StoreFrontModuleのデプロイ」ダイアログの「デプロイメント・アクション」ページで、「アプリケーション・サーバーへのデプロイ」を選択して「次へ」をクリックします。

3. 「サーバーの選択」ページで「MyAppServerConnection」を選択します。

4. 「ドメイン内の全サーバー・インスタンスへのデプロイ」オプションの選択を解除して「次へ」をクリックします。

5. 「サーバー・インスタンス」ページで、Oracle WebLogic Serverの管理対象サーバー(例: soa_server)を選択して「次へ」をクリックします。

6. 「サマリー」ページで、「終了」をクリックします。

7. Oracle JDeveloperの下部にあるデプロイメント・ログ・ウィンドウに表示されるメッセージを確認して、デプロイメントが成功したことを確認します。

3.5.7 タスク7: WebLogic Fusion Order Demoアプリケーションのデプロイ

このタスクでは、管理サーバーと管理対象サーバーがあるOracle WebLogic Serverドメインを含むOracle SOA Suiteインストールに、WebLogic Fusion Order Demoアプリケーションをデプロイします。

WebLogic Fusion Order Demoアプリケーションをデプロイする手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で「WebLogicFusionOrderDemo」を選択します。

2. インストール中にOracle BAMサーバーを構成した場合は、次の手順を実行します。

1. 「アプリケーション・ナビゲータ」で、「OrderBookingComposite」→「SOAコンテンツ」→「bin」の順に開きます。

2. 「sca-build.properties」をダブルクリックします。図3-14に詳細を示します。

図3-14 「sca-build.properties」への移動

「図3-14 「sca-build.properties」への移動」の説明

3. エディタで、表3-6に示すプロパティをOracle BAM環境にあわせて変更します。

表3-6 Oracle BAMで必要なプロパティ

フィールド

説明

enable.bam.sensors

true

Oracle BAMのセンサーを有効にするには、trueに設定します。

seed.bam.do

true

Oracle BAMのデータ・オブジェクト、アラートおよびレポートをシードするには、trueに設定します。

デプロイメントが完了した後に、この値をfalseに設定しなおしてください。最初のデプロイメント後にこのパラメータがtrueに設定されていると、後で再デプロイしたときにデータ・オブジェクト、アラートおよびレポートが再度シードされます。したがって、最初のデプロイメント後に、このパラメータをfalseに設定します。

bam.server.host

Oracle BAMの管理対象サーバーのDNS名またはIPアドレス。例:

soahost

bam.server.port

Oracle BAMの管理対象サーバーのポート。例:

9001

bam.server.username

Oracle WebLogic Server管理者。例:

weblogic

bam.server.password

Oracle WebLogic Server管理者のパスワード。

4. Oracle JDeveloperのメイン・メニューから、「ファイル」→「すべて保存」の順に選択します。「sca-build.properties」タブを開いたまま、デプロイメント後にseed.bam.doパラメータをfalseに変更できます。

3. エディタで、WebLogicFusionOrderDemoアプリケーションに対して次の手順を実行します。

1. 「アプリケーション・ナビゲータ」から、「bin」→「リソース」の順に開きます。

2. 「build.properties」をダブルクリックします。図3-15に詳細を示します。

図3-15 「build.properties」への移動

「図3-15 「build.properties」への移動」の説明

3. エディタで、WebLogicFusionOrderDemoアプリケーションに対して、表3-7に示すプロパティを変更します。

表3-7 WebLogic Fusion Order Demoアプリケーションに必要なプロパティ

フィールド

説明

oracle.home

Oracle JDeveloper 11gがインストールされているルート・ディレクトリ。例:

C:\\Oracle\\Middleware\\jdeveloper\\

soa.only.deployment

false

OrderSDOCompositeコンポジットを使用して注文を発行する場合は、このプロパティをtrueに設定します。このマニュアルでは、ストアフロント・モジュールを使用して注文を発行することを前提にしています。したがって、このプロパティをfalseに変更する必要があります。

admin.server.host

アプリケーションをホストするOracle SOA Suiteの管理サーバーのDNS名またはIPアドレス。例:

soahost

admin.server.port

管理サーバーのポート。例:

8001

managed.server

アプリケーションをホストするOracle SOA Suiteの管理対象サーバーのDNS名またはIPアドレス。例:

soahost

managed.server.port

アプリケーションをホストするOracle SOA Suiteの管理対象サーバーのポート。例:

8001

server.user

Oracle WebLogic Server管理者。例:

weblogic

server.password

Oracle WebLogic Server管理者のパスワード。例:

welcome1

server.targets

管理対象サーバー名。例:

soa_server

soa.server.oracle.home

アダプタのデプロイメント計画の格納場所。例:

C:\\AS11gR1SOA

foreign.mds.type

Oracle Metadata Services (MDS)リポジトリの場所。

値をdbのままにしておき、mds.db.userid、mds.db.passwordおよびmds.db.urlパラメータの値を設定してMDSリポジトリの場所を指定します。

値をデフォルト値のjdevのままにしておきます。

soa.partition.name

コンポジットをデプロイするパーティション。次に例を示します。

soaFusionOrderDemo

4. メイン・メニューから、「ファイル」→「すべて保存」の順に選択します。

5. 「アプリケーション・ナビゲータ」で、「リソース」ノードの「build.xml」を右クリックして「Antターゲットの実行」を選択し、次のantターゲットを表3-8に示す順序で選択します。

表3-8 WebLogic Fusion Order Demoアプリケーションをデプロイするためのantターゲット

ターゲット

説明

1. validateFodConfigSettings

このスクリプトでは、サーバー設定の検証、サーバーが起動しているかどうかのチェック、およびMDS設定の検証が実行されます。このスクリプトがエラーを返さなかった場合は、ターゲットserver-setup-seed-deploy-testに進みます。

2. server-setup-seed-deploy-test

このスクリプトでは、次のターゲットがコールされます。

- compile-deploy-all: すべてのSOAコンポジットがコンパイルされて構築され、管理対象サーバーにデプロイされます。

- seedFodJmsResources: Fulfillmentメディエータ用のJMSリソースが移入されます。

- seedDemoUsers: $2,000を超える注文を承認するユーザーとしてjsteinが追加されます。デモの実行時には、$2,000の注文を発行し、jsteinとしてOracle BPM Worklistにログインして注文を承認します。

ターゲットが正常に終了した場合は、「Apache Ant - ログ」に次のメッセージが表示されます。

BUILD SUCCESSFUL
Total time: nn minutes nn seconds

ターゲットserver-setup-seed-deploy-testを実行した後にOracle BAMを設定する場合は、次のいずれかのターゲットを実行して、WebLogic Fusion Order Demo用にOracle BAMを構成できます。

- ターゲットserver-setup-seed-deploy-testを再実行します。

- 「アプリケーション・ナビゲータ」で、「build_sca_composite.xml」(「OrderBookingComposite」→「SOAコンテンツ」)を右クリックして「Antターゲットの実行」を選択し、「seedBAMServerObjects」を選択します。

6. 「sca-build.properties」タブに戻り、seed.bam.doパラメータをfalseに変更します。

7. メイン・メニューから、「ファイル」→「すべて保存」の順に選択します。

3.6 WebLogic Fusion Order Demoの実行

注文処理は、注文を発行するストアフロント・ユーザー・インタフェースで開始します。

注文が発行されると、Oracle ADF Business Componentによって注文がデータベースに書き込まれ、EDNを使用してNewOrderSubmittedビジネス・イベントが発生します。このイベントがOrderPendingEventメディエータによってサブスクライブされ、メインBPELプロセスOrderProcessorが開始されて注文が処理されます。

注文を発行した後に、Oracle SOA SuiteインストールのOracle Enterprise Manager Fusion Middleware Controlを使用して、OrderProcessor BPELプロセスが注文を編成する様子を監視します。$2,000を超える注文を発行した場合は、承認を要求する様子を監視できます。

Fusion Middleware Controlを使用して注文を発行し、その注文を監視する手順の詳細は、Oracle Technology Networkを参照してください。

http://download.oracle.com/otn_hosted_doc/jdeveloper/doc/11/runningfod_notes.pdf

3.7 Oracle BAMサーバーに送信されたデータの表示

Oracle BAMサーバーおよびその管理対象サーバーを構成した場合は、Oracle BAMアーキテクトを使用して、サーバーに送信されたデータを表示できます。Oracle BAMアーキテクトを含むOracle BAMアプリケーションの使用方法の詳細は、『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』を参照してください。

3.8 WebLogic Fusion Order Demoアプリケーションのコンポジットのアンデプロイ

WebLogic Fusion Order Demoコンポジット・アプリケーションをアンデプロイする手順は、次のとおりです。

1. 表3-9に記載されているオプションを使用して、Fusion Middleware ControlのSOAコンポジットのアンデプロイ・ウィザードにアクセスします。

表3-9 SOAコンポジットのアンデプロイ・ウィザードにアクセスするためのオプション

「SOAインフラストラクチャ」メニューから

ナビゲータの「SOA」フォルダから

「SOAインフラストラクチャ」ホームページから

「SOAコンポジット」メニューから

1. 「SOAデプロイ」→「アンデプロイ」の順に選択します。
「コンポジットの選択」ページが表示されます。

2. 「SOAコンポジット・デプロイ」セクションで、「OrderBookingComposite」と「PartnerSupplierComposite」を選択してアンデプロイし、「次へ」をクリックします。

1. 「soa-infra」を右クリックします。

2. 「SOAデプロイ」→「アンデプロイ」の順に選択します。
「コンポジットの選択」ページが表示されます。

3. 「SOAコンポジット・デプロイ」セクションで、「OrderBookingComposite」と「PartnerSupplierComposite」を選択してアンデプロイし、「次へ」をクリックします。

1. 「デプロイ済コンポジット」タブをクリックします。

2. 「コンポジット」表で、「OrderBookingComposite」と「PartnerSupplierComposite」の両方を選択します。

3. 「コンポジット」表の上にある「アンデプロイ」をクリックします。

「SOAデプロイ」→「アンデプロイ」の順に選択します。

「確認」ページが表示されます。

2. 「アンデプロイ」をクリックします。デプロイ済コンポジット・アプリケーションの最後に残ったリビジョンをアンデプロイしようとすると、警告が表示されます。
処理中メッセージが表示されます。

3. アンデプロイが完了した後に、「閉じる」をクリックします。

第II部

BPELプロセス・サービス・コンポーネントの使用

この部では、BPELプロセス・サービス・コンポーネントについて説明します。

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

- 第4章「Oracle BPEL Process Managerの基本操作」

- 第5章「BPELプロセスの相互作用パターンの概要」

- 第6章「BPELプロセスでのXMLデータの操作」

- 第7章「BPELプロセスからの同期Webサービスの起動」

- 第8章「BPELプロセスからの非同期Webサービスの起動」

- 第9章「相関セットおよびメッセージ集約の使用」

- 第10章「BPELプロセスでのパラレル・フローの使用」

- 第11章「BPELプロセスでの条件分岐の使用」

- 第12章「BPELプロセスでのフォルト処理の使用」

- 第13章「BPELプロセスでのトランザクションおよびフォルト伝播のセマンティクス」

- 第14章「BPELプロセスへのJavaおよびJava EEコードの組込み」

- 第15章「BPELプロセスでのイベントおよびタイムアウトの使用」

- 第16章「マスター・プロセスと詳細プロセスの調整」

- 第17章「通知サービスの使用」

- 第18章「Oracle BPEL Process Managerセンサーの使用」

4 Oracle BPEL Process Managerの基本操作

この章では、Oracle BPEL Process Managerの基本操作について説明します。アクティビティ、パートナリンク、アダプタ、モニターなどの主要なBPEL設計機能とともに、BPELプロセスの作成について説明します。

この章には次の項が含まれます:

- 第4.1項「BPELプロセス・サービス・コンポーネントの概要」

- 第4.2項「アクティビティの概要」

- 第4.3項「パートナ・リンクの概要」

- 第4.4項「パートナ・リンクの作成」

- 第4.5項「アダプタの概要」

- 第4.6項「BPELプロセス・モニターの概要」

4.1 BPELプロセス・サービス・コンポーネントの概要

この項では、設計環境でのBPELプロセス・サービス・コンポーネントの概要を説明します。

4.1.1 BPELプロセス・サービス・コンポーネントの追加方法

BPELプロセス・サービス・コンポーネントはSOAコンポジット・エディタで追加します。

BPELプロセス・サービス・コンポーネントを追加する手順は、次のとおりです。

1. 表4-1の説明に従って、Oracle JDeveloperを起動します。

表4-1 Oracle JDeveloperの起動

起動対象

Windowsでの手順

UNIXでの手順

Oracle JDeveloper

JDev_Oracle_Home\jdeveloper\JDev\bin\jdev.exeをクリックするか、ショートカットを作成します。

$ORACLE_HOME/jdev/bin/jdev

2. 次のいずれかの方法を使用して、BPELプロセス・サービス・コンポーネントを追加します。
既存のSOAコンポジット・アプリケーションのサービス・コンポーネントとして追加する方法:

1. 「コンポーネント・パレット」からSOAコンポジット・エディタにBPELプロセス・サービス・コンポーネントをドラッグします。

新規アプリケーションに追加する方法:

1. 「アプリケーション・ナビゲータ」で、「ファイル」→「新規」→「アプリケーション」→「SOAアプリケーション」の順に選択します。
これにより、SOAアプリケーションの作成ウィザードが起動します。

2. 「アプリケーション名」ダイアログで、「アプリケーション名」フィールドにアプリケーション名を入力します。

3. 「ディレクトリ」フィールドに、SOAコンポジット・アプリケーションおよびプロジェクトを作成するディレクトリ・パスを入力します。

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

5. 「プロジェクト名」ダイアログで、「プロジェクト名」フィールドに名前を入力します。

6. 「次へ」をクリックします。

7. 「プロジェクトのSOA設定」ダイアログで、BPELプロセスを使用するコンポジットを選択します。

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

どちらの方法でも、図4-1に示す「BPELプロセスの作成」ダイアログが表示されます。

図4-1 「BPELプロセスの作成」ダイアログ

「図4-1 「BPELプロセスの作成」ダイアログ」の説明

3. 表4-2に示すように、必要な詳細を指定します。

注意:

同じ.bpelファイルでBPEL 1.1とBPEL 2.0の構文を使用することはできません。ただし、同じSOAコンポジット・アプリケーションにBPEL 1.1プロジェクトとBPEL 2.0プロジェクトを含めることができます。

表4-2 「BPELプロセスの作成」ダイアログ

フィールド

説明

BPEL仕様

作成するBPELプロセスのタイプを選択します。

- BPEL 1.1仕様
BPEL 1.1仕様をサポートするBPELプロジェクトを作成します。これがデフォルトの選択です。

- BPEL 2.0仕様
BPEL 2.0仕様をサポートするBPELプロジェクトを作成します。

名前

BPELプロセスの名前を入力するか、またはデフォルト名をそのまま使用します。入力する名前は、「アプリケーション・ナビゲータ」でBPELプロセス・ファイル、Web Services Description Language(WSDL)ファイルおよびcomponentTypeファイルのファイル名となります。

BPELプロセスの作成時は、必ず完全に一意の名前を使用してください。次のものを作成しないでください。

- 先頭が数値のプロセス名(1SayHelloなど)。

- ハイフンを含むプロセス名(Say-Helloなど)。

- 同じ名前で、大/小文字が異なる2つのプロセス名(SayHelloとsayhelloなど)。
ビジネス・インテリジェンス(BI)のデータ・オブジェクト名は、Oracle BAMサーバーではすべて大文字の形式で生成されるため、これが特に重要です。たとえば、BPELProcess1という名前のBPELプロセスを作成する場合、デプロイ後のOracle BAM BIデータ・オブジェクトとしてはBI_DEFAULT_PROJECT1_BPELPROCESS1というBI名が生成されます。BPELProcess1およびBPELPRocess1の2つのBPELプロセスを作成すると、同じBIデータ・オブジェクト名が生成されます。

- 500文字を超えるプロセス名。

- ASCIIでないプロセス名。BPELプロセス名はSOAプロジェクトのディレクトリおよびファイルの名前に使用されますが、これが問題を引き起こす可能性があります。

ネームスペース

ネームスペースのデフォルトのパスを使用するか、カスタム・パスを入力します。

テンプレート

設計するBPELプロセス・サービス・コンポーネントのタイプに基づくテンプレートを選択します。テンプレートにより、BPELプロセス・サービス・コンポーネントの設計を開始するのに使用する基本的な一連のデフォルト・ファイル(process_name.wsdl、process_name.bpelおよびprocess_name.componentType)が、「アプリケーション・ナビゲータ」に指定されます。

- 非同期BPELプロセス: BPELプロセス・コンポーネント・フローを開始するreceiveアクティビティ(デフォルト)、およびクライアントを非同期にコールバックするinvokeアクティビティを使用して、非同期プロセスを作成します。このタイプはデフォルトで選択されています。詳細は、第8章「BPELプロセスからの非同期Webサービスの起動」を参照してください。

- 同期BPELプロセス: BPELプロセス・サービス・コンポーネント・フローを開始するreceiveアクティビティ(デフォルト)、および結果を返すreplyアクティビティを使用して、同期プロセスを作成します。詳細は、第7章「BPELプロセスからの同期Webサービスの起動」を参照してください。

- 一方向BPELプロセス: 一方向コール・インタフェース定義でプロセスを作成します。

- サービスを後で定義: アクティビティを含まない空のBPELプロセス・サービス・コンポーネントを作成する場合に選択します。

- WSDLに基づく: 既存のWSDLファイルによって定義されたインタフェースを使用してBPELプロセスを作成します。使用するWSDL Uniform Resource Locator(URL)、ポート・タイプおよびコールバック・ポート・タイプを指定する必要があります。

- イベントのサブスクライブ: ビジネス・イベントをサブスクライブできるBPELプロセスを作成します。このオプションを選択すると、ダイアログがリフレッシュされてイベント表が表示されます。「追加」アイコンをクリックすると、サブスクライブするイベントを選択できます。選択した内容は、イベント表に表示されます。その後、一貫性レベルと、このイベントをパブリッシュするかどうかを選択できます。「フィルタ」アイコンをクリックして、選択したイベントのフィルタ式を作成することもできます。この選択によって、「式ビルダー」ダイアログが表示されます。詳細は、第41章「ビジネス・イベントおよびイベント配信ネットワークの使用」を参照してください。

サービス名

デフォルト値をそのまま使用するか、またはこのプロセスで公開されているサービス名を入力します。invoke、receive、OnMessageまたはreplyアクティビティを開くと、デフォルトで、サービス名が「パートナ・リンク」フィールドに表示されます。この名前はパートナ・リンクと同じ名前です。

SOAPサービスとして公開

インバウンドSimple Object Access Protocol(SOAP)Webサービス・バインディング・コンポーネントに自動的に接続(連結)されるBPELプロセス・サービス・コンポーネントを作成する場合は、このチェック・ボックスを選択します。このチェック・ボックスを選択しないと、BPELプロセス・サービス・コンポーネントは、SOAコンポジット・エディタでスタンドアロン・コンポーネントとして作成されます。このBPELプロセス・サービス・コンポーネントは後からサービスに明示的に関連付けることができます。このチェックボックスは、デフォルトで選択されます。

配信

配信レイヤーでのプロセスの永続ポリシーを設定します。このリストを使用すると、oneWayDeliveryPolicyデプロイメント・ディスクリプタのプロパティの値を指定できます。このフィールドは、「テンプレート」リストで非同期または一方向のBPELプロセスを選択する場合に表示されます。可能な値は次のとおりです。

- async.persist: メッセージはデータベースに保存されます。この設定の場合、信頼性は確保されますが、データベースのパフォーマンスに多少の影響が出ます。システムの全体的なパフォーマンスに影響が出ることもあります。

- async.cache: 受信した配信メッセージはメモリー内キャッシュにのみ保存されます。信頼性よりパフォーマンスを優先する場合は、この設定を検討してください。async.cacheに設定すると、一方向メッセージの到着頻度が配信の頻度よりかなり高い場合や、サーバー障害が発生した場合には、メッセージが失われる可能性があります。また、システムが過負荷の状態になり(メッセージがスケジュール済キューにたまり)、メモリー不足エラーが発生することもあります。各自のユースケース・シナリオを検討し、この設定が適切かどうかを判断してください。
高可用性環境でoneWayDeliveryPolicyをasync.cacheに設定すると、サーバー・クラッシュ発生時に実行途中の起動メッセージおよびコールバック・メッセージが失われたり、重複したりすることがあります。async.cacheに対しては、サーバーのフェイルオーバーはサポートされていません。詳細は、『Oracle Fusion Middleware高可用性ガイド』を参照してください。

- sync: 同じスレッドで直接起動が発生します。呼出しキューのメッセージのスケジューリングはバイパスされ、BPELインスタンスが同期的に呼び出されます。この設定は、データベースのパフォーマンスに影響を与えることがあります。

このプロパティのトランザクションおよびフォルト伝播のセマンティクスの詳細は、第13章「BPELプロセスでのトランザクションおよびフォルト伝播のセマンティクス」を参照してください。

プロパティ・インスペクタでこのプロパティの値を変更する方法については、項C.1.1「プロパティ・インスペクタでデプロイメント・ディスクリプタのプロパティを定義する方法」を参照してください。

トランザクション

コールを開始するBPELインスタンスのトランザクション動作を設定します。このリストを使用すると、transactionデプロイメント・ディスクリプタのプロパティの値を指定できます。このフィールドは、「テンプレート」リストで同期BPELプロセスを選択する場合に表示されます。 可能な値は次のとおりです。

- requiresNew: 新規トランザクションが実行のために作成され、既存のトランザクションがある場合はそのトランザクションが一時停止されます。この動作は、リクエスト/レスポンス(開始)環境、および「配信」リスト値(oneWayDeliveryPolicyプロパティ)がsyncに設定されている一方向開始環境の両方に適用されます。

- required: リクエスト/レスポンス(開始)環境では、この設定によって、トランザクションがある場合はコール元トランザクションが結合され、トランザクションがない場合は新規トランザクションが作成されます。「配信」リスト値(oneWayDeliveryPolicyプロパティ)がsyncに設定されている一方向開始環境では、起動メッセージは、同じトランザクションの同一スレッドを使用して処理されます。

注意: このプロパティは、中間プロセスのreceiveアクティビティには適用されません。この場合は、別のトランザクションの別のスレッドを使用してメッセージが処理されます。これは、相関が必要であり、常に非同期で処理されるためです。

このプロパティのトランザクションおよびフォルト伝播のセマンティクスの詳細は、第13章「BPELプロセスでのトランザクションおよびフォルト伝播のセマンティクス」を参照してください。

プロパティ・インスペクタでこのプロパティの値を変更する方法については、項C.1.1「プロパティ・インスペクタでデプロイメント・ディスクリプタのプロパティを定義する方法」を参照してください。

入力

デフォルトの入力XSDスキーマをそのまま使用するか、「検索」アイコンをクリックして別のXSDを選択します。「検索」アイコンをクリックすると、「タイプ・チューザ」ダイアログが表示されます。インポートしたスキーマを参照して、入力要素(注文書など)を選択します。「タイプ・チューザ」ダイアログで、既存のスキーマまたはWSDLをインポートすることもできます。

出力

デフォルトの出力XSDスキーマをそのまま使用するか、「検索」アイコンをクリックして別のXSDを選択します。「検索」アイコンをクリックすると、「タイプ・チューザ」ダイアログが表示されます。インポートしたスキーマを参照して、出力要素(注文書など)を選択します。

4. 「OK」をクリックします。
図4-2に示すセクションがOracle BPELデザイナに表示されます。

図4-2 Oracle BPELデザイナのセクション

「図4-2 Oracle BPELデザイナのセクション」の説明

このビューの各セクションを使用して、特定の設計およびデプロイメント・タスクを実行できます。表4-3に、図4-2にリストされている各セクションを示します。

表4-3 Oracle JDeveloperのセクション

要素

説明

アプリケーション・ナビゲータ

SOAプロジェクトのプロセス・ファイルが表示されます。主要なファイルには、次のものがあります。

- composite_name (composite.xml)
SOAコンポジット・アプリケーション全体を説明するファイルです。このファイルの詳細は、第2.1.2項「SOAアプリケーションおよびプロジェクト作成時の処理内容」を参照してください。

- .bpel
選択したプロセス・タイプに応じて、最初に、アクティビティの最小セットが含まれています。(非同期プロセスを作成することを選択した場合は、receiveおよびinvokeアクティビティが表示されます。)アクティビティのドラッグ、変数の作成、パートナ・リンクの作成などの際は、このファイルに構文を追加します。

- .componentType
BPELプロセス・サービス・コンポーネントのサービスと参照を記述します。

- .wsdl
このBPELプロセス・フローの入力メッセージと出力メッセージ、サポートされるクライアント・インタフェースと操作、およびその他の機能を定義する、WSDLクライアント・インタフェースです。この機能により、BPELプロセス・フローをサービスとしてコールできます。

- monitor.config
Oracle BAMのデータ・オブジェクトとダッシュボードを作成するために、Oracle BAMサーバーとの接続に必要なランタイム・プロパティとデプロイメント・プロパティを定義します。

デザイナ

設計するBPELプロセス・サービス・コンポーネントのビジュアル・ビューが表示されます。このビューは、次のいずれかの処理を実行すると表示されます。

- 「アプリケーション・ナビゲータ」で.bpelファイル名をダブルクリックした場合

- .bpelファイルを選択して、デザイナの下部にある「設計」タブをクリックした場合

- SOAコンポジット・エディタでBPELプロセス・コンポーネントをダブルクリックした場合

アクティビティのドラッグ、パートナ・リンクの作成などによるBPELプロセス・サービス・コンポーネントの設計に応じて、「設計」ウィンドウは変化します。

コンポーネント・パレット

BPELプロセス・サービス・コンポーネントに追加可能なアクティビティが表示されます。アクティビティはビルディング・ブロックです。「コンポーネント・パレット」の「BPELコンストラクト」および「Oracle Extensions」選択項目には、BPELプロセス・サービス・コンポーネントのデザイナにドラッグする一連のアクティビティが表示されます。「コンポーネント・パレット」には、デザイナの状態に関連があるページのみが表示されます。「BPELコンストラクト」または「Oracle Extensions」は、ほぼ常に表示されます。ただし、transformアクティビティでトランスフォーメーションを設計している場合、「コンポーネント・パレット」には、「String Functions」、「Mathematical Functions」、「Node-set Functions」などそのアクティビティに関連する選択項目のみが表示されます。

「構造」ウィンドウ

デザイナで現在選択しているBPELプロセス・サービス・コンポーネントのデータが構造的に表示されます。このウィンドウから、次のような様々なタスクを実行できます。

- スキーマのインポート。

- メッセージ・タイプの定義。

- 変数、エイリアス、相関セット、パートナ・リンクなどの要素の管理(作成、編集および削除)

- デザイナに表示するBPELプロセス・フロー・シーケンスのアクティビティの編集。

「ログ」ウィンドウ

検証およびコンパイルのステータスに関するメッセージが表示されます。BPELプロセス・サービス・コンポーネントで検証が正しく行われるように、次のことを確認する必要があります。

- BPELプロセス・サービス・コンポーネントに入力変数が指定されていること。

- パートナ・リンクが選択されていること。

- パートナ・ロールが選択されていること。

- 操作が空でないこと。

- 入力変数タイプとパートナ・リンク操作タイプが一致していること。

デプロイメントに失敗した場合は、エラーのタイプと場所を示すメッセージが表示されます。

「ソース」ウィンドウ

BPELプロセス・サービス・コンポーネント・ファイル内部の構文が表示されます。アクティビティやパートナ・リンクをドラッグしたり、別のタスクを実行すると、これらのソース・ファイルの構文が即時に更新され、変更内容が反映されます。

「履歴」ウィンドウ

ファイルのリビジョン履歴や、ファイルの読取り専用バージョンと編集可能バージョンが並べて表示されます。

プロパティ・インスペクタ

アクティビティに関する詳細が表示されます。「設計」ウィンドウでアクティビティをシングルクリックすると、詳細が表示されます。

注意:

これらのセクションの詳細を参照する場合、該当するセクション内にカーソルを置いて[F1]を押し、オンライン・ヘルプを表示することもできます。

5. BPELプロジェクトのバージョン(1.1または2.0)を表示するには、Oracle BPELデザイナの上にあるアイコンをクリックします。図4-3に詳細を示します。

図4-3 BPELプロジェクトのバージョン

「図4-3 BPELプロジェクトのバージョン」の説明

4.2 アクティビティの概要

アクティビティは、BPELプロセス・サービス・コンポーネントのビルディング・ブロックです。Oracle BPELデザイナには、BPELプロセス・サービス・コンポーネントにドラッグする一連のアクティビティが用意されています。アクティビティの属性(プロパティ値)を定義するには、そのアクティビティをダブルクリックします。アクティビティを使用すると、BPELプロセス・サービス・コンポーネント内で特定のタスクを実行できます。次に、いくつかの主要なアクティビティの例を示します。

- assignアクティビティを使用すると、ある変数の内容を別の変数にコピーするなどのデータの操作を実行できます。図4-4に、assignアクティビティを示します。

図4-4 assignアクティビティ

「図4-4 assignアクティビティ」の説明

- invokeアクティビティを使用すると、(パートナ・リンクによって識別された)サービスを起動し、このサービスに対して実行する操作を指定できます。図4-5に、invokeアクティビティを示します。

図4-5 invokeアクティビティ

「図4-5 invokeアクティビティ」の説明

- receiveアクティビティは、サービスからの非同期コールバック・レスポンス・メッセージを待機します。図4-6に、receiveアクティビティを示します。receiveアクティビティは、パートナ・リンクを使用してプロセスが非同期に開始される場合にも使用されます。

図4-6 receiveアクティビティ

「図4-6 receiveアクティビティ」の説明

図4-7に、プロパティ・ウィンドウ(ここではinvokeアクティビティ)の例を示します。この例では、StoreFrontServiceという名前のパートナ・リンクを起動し、その属性を定義しています。

図4-7 invokeアクティビティの例

「図4-7 invokeアクティビティの例」の説明

このinvokeアクティビティを使用すると、サービス(パートナ・リンクで識別)に対して起動する操作を指定できます。操作は、サービスによって指定されたポートでの一方向またはリクエスト/レスポンスです。invokeアクティビティで変数を自動的に作成することも可能です。invokeアクティビティは、同期サービスを起動するか、非同期Webサービスを開始します。

invokeアクティビティは、プロセス内でデータを送受信するためのポートをオープンします。このポートを使用して、必要なデータの送信およびレスポンスの受信を行います。同期コールバックの場合、関数の送受信に必要なポートは1つのみです。

アクティビティの詳細は、付録A「BPELプロセスのアクティビティとサービス」を参照してください。

同じプロジェクト内またはプロジェクト間でのアクティビティのコピーおよび貼付けの詳細は、第A.2.2項「BPELプロジェクトでのアクティビティのコピーおよび貼付け」を参照してください。

4.3 パートナ・リンクの概要

パートナ・リンクを使用すると、BPELプロセス・サービス・コンポーネントと対話する外部サービスを定義できます。パートナ・リンクは、SOAコンポジット・エディタまたはOracle BPELデザイナのBPELプロセス・サービス・コンポーネント内にサービスまたは参照(JCAアダプタ経由など)として定義できます。図4-8に、パートナ・リンク・アイコン(この例ではPartnerSupplierMediatorという名前)を示します。

図4-8 パートナ・リンク・アイコン

「図4-8 パートナ・リンク・アイコン」の説明

パートナ・リンク・タイプは、対話において各サービスが果たす役割を定義すること、および対話の中でメッセージを受信するために各サービスが提供するポート・タイプを指定することで、2つのサービス間での対話関係の特性を決定します。

図4-9に、サービスに対するパートナ・リンクの属性の例を示します。

図4-9 「パートナ・リンク」ダイアログ

「図4-9 「パートナ・リンク」ダイアログ」の説明

表4-4に、このダイアログの各フィールドを示します。

表4-4 「パートナ・リンクの作成」ダイアログのフィールド

フィールド

説明

名前

パートナ・リンクに対して指定する一意のわかりやすい名前です。

プロセス

BPELプロセス・サービス・コンポーネント名が表示されます。

WSDL URL

パートナ・リンクに対して選択するWSDLファイルまたはJavaインタフェースの名前と場所。使用するWSDLファイルまたはJavaインタフェースを選択するためにウィンドウにアクセスするには、「SOAサービス・エクスプローラ」アイコン(「WSDL URL」フィールドの左上から2番目のアイコン)をクリックします。

「参照」フォルダの下にjavaEJBの名前とともに表示される選択用のJavaインタフェース。このパートナ・リンクと接続するコンポーネントがWSDLファイルを使用し、Javaインタフェースを選択して「OK」をクリックすると、このコンポーネントにはWSDLインタフェースが必要であることを示すメッセージが表示されます。「はい」をクリックすると、Javaインタフェースに基づいて互換性のあるWSDLファイルが作成されます。

Javaインタフェースを使用するコンポーネントをSOAコンポジット・アプリケーションに統合する方法の詳細は、第52章「Spring Frameworkを使用したSOAコンポジット・アプリケーションへの統合」を参照してください。

パートナ・リンク・タイプ

WSDLファイルで定義したパートナ・リンクです。

パートナ・ロール

パートナ・リンクによって実行されるロールです。

マイ・ロール

BPELプロセス・サービス・コンポーネントが実行するロールです。これが、同期プロセスの場合は、BPELプロセス・サービス・コンポーネントにロールはありません。

注意:

「パートナ・リンクの作成」ダイアログの「パートナ・リンク・タイプ」、「パートナ・ロール」および「マイ・ロール」フィールドは、BPEL標準で定義される必須フィールドです。

ベスト・プラクティス:

Oracle MediatorとBPELプロセス・サービス・コンポーネントは、常にSOAコンポジット・エディタ(Oracle BPELデザイナではなく)で作成して接続することをお薦めします。

Oracle MediatorまたはBPELプロセスのパートナ・リンクをOracle BPELデザイナでBPELプロセスに追加し、invokeアクティビティを介していずれかのパートナ・リンクをBPELプロセスに接続しても、その接続は、SOAコンポジット・エディタには自動的には反映されません。SOAコンポジット・エディタで、Oracle MediatorまたはBPELプロセス・サービス・コンポーネントをBPELプロセスに再度明示的に接続する必要があります。

Oracle BPELデザイナのヒューマン・タスクまたはビジネス・ルールのパートナ・リンクには問題はありません。SOAコンポジット・エディタでは、両方とも自動的に接続されます。

4.4 パートナ・リンクの作成

Oracle BPELデザイナのBPELプロセス内にパートナ・リンクを作成する方法は、SOAコンポジット・エディタでのパートナ・リンクの表示方法に影響します。この項では、この影響について説明します。WSDLファイルは、ローカル・オペレーティング・システムに配置される場合や、リモートでホストされる場合(この場合はWSDLのURLが必要)があります。

同様に、SOAコンポジット・エディタでサービス・バインディング・コンポーネントまたは参照バインディング・コンポーネントを作成し、BPELプロセス・サービス・コンポーネントに接続すると、パートナ・リンクがOracle BPELデザイナに表示されます。

4.4.1 パートナ・リンクの作成方法

パートナ・リンクを作成する手順は、次のとおりです。

1. SOAコンポジット・エディタで、BPELプロセス・サービス・コンポーネントをダブルクリックします。
Oracle BPELデザイナが表示されます。

2. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

3. 図4-10に示すように、パートナ・リンクを適切な「パートナ・リンク」スイムレーンにドラッグします。

図4-10 Oracle BPELデザイナでのパートナ・リンクの作成

「図4-10 Oracle BPELデザイナでのパートナ・リンクの作成」の説明

「パートナ・リンクの作成」ダイアログが表示されます。

4. 表4-4の説明に従って、このダイアログの各フィールドを完了します。

次の各項では、パートナ・リンクの作成がSOAコンポジット・エディタに与える影響について説明します。

4.4.1.1 アウトバウンド・アダプタのパートナ・リンク

表4-5に、SOAコンポジット・エディタへの影響を示します。

表4-5 パートナ・リンクの作成がSOAコンポジット・エディタに与える影響

Oracle BPELデザイナでBPELプロセスに作成されるもの

SOAコンポジット・エディタに表示されるもの

アウトバウンド・アダプタのパートナ・リンク

- BPELプロセス・サービス・コンポーネントの参照ハンドル

- コンポジット内でアウトバウンド・アダプタを表す参照

- BPELプロセス・サービス・コンポーネントとアダプタ参照を接続するワイヤ

図4-11に、この作成方法を使用するとSOAコンポジット・エディタにどのように表示されるかを示します。

図4-11 SOAコンポジット・エディタへの影響

「図4-11 SOAコンポジット・エディタへの影響」の説明

4.4.1.2 インバウンド・アダプタのパートナ・リンク

表4-6に、SOAコンポジット・エディタへの影響を示します。

表4-6 パートナ・リンクの作成がSOAコンポジット・エディタに与える影響

Oracle BPELデザイナでBPELプロセスに作成されるもの

SOAコンポジット・エディタに表示されるもの

インバウンド・アダプタのパートナ・リンク

- BPELプロセス・サービス・コンポーネントのサービス

- コンポジット内でインバウンド・アダプタを表すサービス

- インバウンド・アダプタ・サービスをBPELプロセス・サービス・コンポーネントに接続するワイヤ

図4-12に、この作成方法を使用するとSOAコンポジット・エディタにどのように表示されるかを示します。

図4-12 SOAコンポジット・エディタへの影響

「図4-12 SOAコンポジット・エディタへの影響」の説明

4.4.1.3 抽象的なWSDLからサービスをコールするパートナ・リンク

表4-7に、SOAコンポジット・エディタへの影響を示します。

表4-7 パートナ・リンクの作成がSOAコンポジット・エディタに与える影響

Oracle BPELデザイナでBPELプロセスに作成されるもの

SOAコンポジット・エディタに表示されるもの

抽象的なWSDLからサービスをコールするパートナ・リンク

BPELプロセス・サービス・コンポーネントに定義されたインタフェースおよびコールバック・インタフェースを持つ参照ハンドル

4.4.1.4 抽象的なWSDLからサービスを実装するパートナ・リンク

表4-8に、SOAコンポジット・エディタへの影響を示します。

表4-8 パートナ・リンクの作成がSOAコンポジット・エディタに与える影響

Oracle BPELデザイナでBPELプロセスに作成されるもの

SOAコンポジット・エディタに表示されるもの

抽象的なWSDLからサービスを実装するパートナ・リンク

BPELプロセス・サービス・コンポーネントのインタフェースおよびコールバック・インタフェースを持つサービスが作成されます。

注意: 指定されたインタフェースおよびコールバック・インタフェースがある外部SOAP参照がSOAコンポジット・エディタに存在する場合は、新しい外部SOAP参照を作成してそれに接続することも、既存の外部SOAP参照に接続することもできます。

図4-13に、この作成方法を使用するとSOAコンポジット・エディタにどのように表示されるかを示します。

図4-13 SOAコンポジット・エディタへの影響

「図4-13 SOAコンポジット・エディタへの影響」の説明

4.4.1.5 パートナ・リンクとヒューマン・タスクまたはビジネス・ルール

表4-9に、SOAコンポジット・エディタへの影響を示します。

表4-9 パートナ・リンクの作成がSOAコンポジット・エディタに与える影響

Oracle BPELデザイナでBPELプロセスに作成されるもの

SOAコンポジット・エディタに表示されるもの

ヒューマン・タスクまたはビジネス・ルール

- コンポジット内のヒューマン・タスクまたはビジネス・ルール

- BPELプロセス・サービス・コンポーネントの参照

- BPELプロセス・サービス・コンポーネントと新しいヒューマン・タスクまたはビジネス・ルールを接続するワイヤ

図4-14に、この作成方法を使用するとSOAコンポジット・エディタにどのように表示されるかを示します。

図4-14 SOAコンポジット・エディタへの影響

「図4-14 SOAコンポジット・エディタへの影響」の説明

4.4.1.6 既存のヒューマン・タスク、ビジネス・ルールまたはOracle Mediatorからのパートナ・リンク

表4-10に、SOAコンポジット・エディタへの影響を示します。

表4-10 パートナ・リンクの作成がSOAコンポジット・エディタに与える影響

Oracle BPELデザイナでBPELプロセスに作成されるもの

SOAコンポジット・エディタに表示されるもの

既存のヒューマン・タスク、ビジネス・ルールまたはメディエータ・サービス・コンポーネントをBPELプロセスにドラッグすることによるパートナ・リンク

- BPELプロセス・サービス・コンポーネントの参照

- BPELプロセス・サービス・コンポーネントと既存のヒューマン・タスク、ビジネス・ルールまたはメディエータを接続するワイヤ

図4-15に、この作成方法を使用するとSOAコンポジット・エディタにどのように表示されるかを示します。

図4-15 SOAコンポジット・エディタへの影響

「図4-15 SOAコンポジット・エディタへの影響」の説明

4.5 アダプタの概要

図4-9に示す「パートナ・リンク」ダイアログを使用すると、Oracle BPEL Process ManagerおよびOracle JDeveloperが提供するもう1つの主要な機能を利用できます。アダプタ構成ウィザードにアクセスするには、図4-16に示す「サービス・ウィザード」アイコンをクリックします。

図4-16 アダプタの定義

「図4-16 アダプタの定義」の説明

アダプタにより、BPELプロセス・サービス・コンポーネント(つまり、SOAコンポジット・アプリケーション全体)に、ファイル・システム、FTPサーバー、データベース表、データベース・キュー、ソケット、Java Message Service(JMS)、Oracle User Messaging ServiceおよびMQへのアクセスが提供されます。HTTPバインディング、直接バインディング、EJBなどのサービスと統合することもできます。このウィザードを使用すると、図4-17に示すサービスとアダプタのタイプを、BPELプロセス・サービス・コンポーネントで使用するように構成できます。

図4-17 サービス・タイプとアダプタ・タイプ

「図4-17 サービス・タイプとアダプタ・タイプ」の説明

サービス・タイプとアダプタ・タイプの詳細は、第37章「バインディング・コンポーネントの開始」を参照してください。

アダプタ・タイプを選択すると、図4-18に示す「サービス名」ダイアログで名前を入力するように求められます。この例では、図4-17で、「ファイル・アダプタ」が選択されています。ウィザードが完了すると「アプリケーション・ナビゲータ」に、BPELプロセス・サービス・コンポーネント用のこのサービス名のWSDLファイル(ここではUSPSShipment.wsdlという名前)が表示されます。サービス名はプロジェクト内で一意である必要があります。このファイルには、このウィザードで指定したアダプタ構成設定が含まれます。その他の構成ファイル(ヘッダー・ファイル、アダプタ固有のファイルなど)も作成され、「アプリケーション・ナビゲータ」に表示されます。

図4-18 アダプタのサービス名

「図4-18 アダプタのサービス名」の説明

「サービス名」ダイアログの後に表示されるアダプタ構成ウィザードのダイアログは、選択したアダプタ・タイプによって変わります。

また、SOAコンポジット・エディタ内のサービスまたは参照として、アダプタをSOAコンポジット・アプリケーションに追加できます。

テクノロジ・アダプタの詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

4.6 BPELプロセス・モニターの概要

Oracle BPELデザイナ上部の「監視」を選択することで、Oracle BPELデザイナでBPELプロセス・モニターを構成できます。図4-19に詳細を示します。BPELプロセス・モニターでは、データを分析してグラフィカル表示するために、Oracle BAMアダプタを介してデータをOracle BAMに送信できます。

図4-19 BPELプロセス・モニター

「図4-19 BPELプロセス・モニター」の説明

詳細は、第53.3項「Oracle BAM Monitor ExpressとBPELプロセスの併用」を参照してください。

5 BPELプロセスの相互作用パターンの概要

この章では、BPELプロセス・サービス・コンポーネントと外部サービスとの間における共通の相互作用パターン(一方向メッセージ、同期および非同期の相互作用、1リクエストと複数/単一レスポンス、1リクエストと必須/オプション・レスポンス、部分処理、複数アプリケーション間の相互作用など)について説明します。また、それぞれを使用する場合のベスト・プラクティスについても説明します。

この章には次の項が含まれます:

- 第5.1項「一方向メッセージの概要」

- 第5.2項「同期相互作用の概要」

- 第5.3項「非同期相互作用の概要」

- 第5.4項「タイムアウト付き非同期相互作用の概要」

- 第5.5項「通知タイマー付き非同期相互作用の概要」

- 第5.6項「1リクエストと複数レスポンスの概要」

- 第5.7項「1リクエストと二者択一レスポンスの概要」

- 第5.8項「1リクエストと必須/オプション・レスポンスの概要」

- 第5.9項「部分処理の概要」

- 第5.10項「複数アプリケーション間の相互作用の概要」

5.1 一方向メッセージの概要

一方向メッセージ(Fire and Forget)では、クライアントはメッセージをサービスに送信し(図5-1のd1)、サービスはそれに対して返信する必要がありません。メッセージを送信するクライアントは、レスポンスを待機せずに即時に実行を続行します。例5-1に、この環境におけるBPELプロセスWSDLファイルのportTypeとoperationのパートを示します。

例5-1 一方向WSDLファイル

. . .
<wsdl:portType name="BPELProcess1">
<wsdl:operation name="process">
<wsdl:input  message="client:BPELProcess1RequestMessage" />
</wsdl:operation>
</wsdl:portType>
. . .

図5-1に概要を示します。

図5-1 一方向メッセージ

「図5-1 一方向メッセージ」の説明

5.1.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

クライアントとしてのBPELプロセス・サービス・コンポーネントには、有効なパートナ・リンク、およびターゲットのサービスとメッセージを持つinvokeアクティビティが必要です。すべてのパートナ・アクティビティと同様に、Web Services Description Language(WSDL)ファイルは相互作用を定義します。

5.1.2 サービスとしてのBPELプロセス・サービス・コンポーネント

クライアントからメッセージを受け取るために、BPELプロセス・サービス・コンポーネントにはreceiveアクティビティが必要です。

5.2 同期相互作用の概要

同期相互作用では、クライアントはリクエストをサービスに送信し(図5-2のd1)、リプライを即時に受信します(図5-2のd2)。BPELプロセス・サービス・コンポーネントはこの相互作用のいずれかの終端であり、そのロール(クライアントまたはサービス)に従ってコーディングする必要があります。たとえば、オンライン新聞の購読をリクエストしたユーザーは、リクエストの受取り確認電子メールを即時に受信します。例5-2に、この環境におけるBPELプロセスWSDLファイルのportTypeとoperationのパートを示します。

例5-2 同期WSDLファイル

. . .
<wsdl:portType name="BPELProcess1">
<wsdl:operation name="process">
<wsdl:input  message="client:BPELProcess1RequestMessage" />
<wsdl:output message="client:BPELProcess1ResponseMessage"/>
</wsdl:operation>
</wsdl:portType>

図5-2に概要を示します。

図5-2 同期相互作用

「図5-2 同期相互作用」の説明

5.2.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

BPELプロセス・サービス・コンポーネントが同期トランザクションのクライアント側にある場合は、invokeアクティビティが必要です。クライアント側のポートは、リクエストを送信し、リプライを受信します。すべてのパートナ・アクティビティと同様に、WSDLファイルは相互作用を定義します。

5.2.2 サービスとしてのBPELプロセス・サービス・コンポーネント

BPELプロセス・サービス・コンポーネントが同期トランザクションのサービス側にある場合は、着信リクエストを受け取るreceiveアクティビティ、およびリクエストされた情報またはWSDLで定義されたエラー・メッセージ(フォルト、図5-2のf1)のいずれかを返すreplyアクティビティが必要です。

同期相互作用の詳細は、第7章「BPELプロセスからの同期Webサービスの起動」を参照してください。

5.2.3 非同期プロセスを起動する同期BPELプロセス

同期BPELプロセスによって非同期プロセスが起動される場合、そのコールバック・レスポンス・メッセージはBPELプロセスによって認識されず、そのプロセスはレスポンスの待機をタイムアウトします。このタイプの相互作用パターンはサポートされていません。

5.3 非同期相互作用の概要

非同期相互作用では、クライアントはリクエストをサービスに送信し、サービスが応答するまで待機します。例5-3に、この環境におけるBPELプロセスWSDLファイルのportTypeとoperationのパートを示します。

例5-3 非同期WSDLファイル

. . .
<wsdl:portType name="BPELProcess1">
<wsdl:operation name="process">
<wsdl:input message="client:BPELProcess1RequestMessage"/>
</wsdl:operation>
</wsdl:portType>

. . .
<wsdl:portType name="BPELProcess1Callback">
<wsdl:operation name="processResponse">
<wsdl:input message="client:BPELProcess1ResponseMessage"/>
</wsdl:operation>
</wsdl:portType>

図5-3に概要を示します。

図5-3 非同期相互作用

「図5-3 非同期相互作用」の説明

5.3.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

BPELプロセス・サービス・コンポーネントが非同期トランザクションのクライアント側にある場合は、リクエストを送信するinvokeアクティビティおよびリプライを受信するreceiveアクティビティが必要です。すべてのパートナ・アクティビティと同様に、WSDLファイルは相互作用を定義します。

5.3.2 サービスとしてのBPELプロセス・サービス・コンポーネント

同期トランザクションと同様に、BPELプロセス・サービス・コンポーネントが非同期トランザクションのサービス側にある場合は、着信リクエストを受け取るreceiveアクティビティ、およびリクエストされた情報またはフォルトのいずれかを返すinvokeアクティビティが必要です。同期BPELプロセスからの応答との違いに注意してください。同期BPELプロセスはクライアントへの応答にreplyアクティビティを使用します。非同期サービスはinvokeアクティビティを使用します。

非同期相互作用の詳細は、第8章「BPELプロセスからの非同期Webサービスの起動」を参照してください。

5.4 タイムアウト付き非同期相互作用の概要

タイムアウト付き非同期相互作用(BPELでpickアクティビティを使用して実行)では、クライアントはリクエストをサービスに送信し、リプライを受信するまであるいは一定の時間が経過するまでの、いずれか早い時点まで待機します。たとえば、クライアントが融資提案をリクエストします。クライアントが指定時間内に融資提案リプライを受信しなかった場合は、リクエストが取り消されます。図5-4に概要を示します。

図5-4 タイムアウト付き非同期相互作用

「図5-4 タイムアウト付き非同期相互作用」の説明

5.4.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

BPELプロセス・サービス・コンポーネントがタイムアウト付きの非同期トランザクションのクライアント側にある場合は、リクエストを送信するinvokeアクティビティおよび2つのブランチ(onMessageブランチおよびonAlarmブランチ)を持つpickアクティビティが必要です。時間制限の後にリプライが到着した場合、メッセージは配信不能キューに送られます。すべてのパートナ・アクティビティと同様に、WSDLファイルは相互作用を定義します。

タイムアウト付き非同期相互作用の詳細は、第15.2項「プロセスの継続または待機を選択するpickアクティビティの作成」を参照してください。

5.4.2 サービスとしてのBPELプロセス・サービス・コンポーネント

サービスとしてのBPELプロセス・サービス・コンポーネントの動作は、非同期相互作用でのサービスとしてのBPELプロセス・サービス・コンポーネントの動作に相当します。

5.5 通知タイマー付き非同期相互作用の概要

通知タイマー付き非同期相互作用では、クライアントはリクエストをサービスに送信し、リプライを待機しますが、タイマーが時間切れになると通知が送信されます。タイマーが時間切れになっても、クライアントはサービスからのリプライを待機し続けます。図5-5に概要を示します。

図5-5 通知タイマー付き非同期相互作用

「図5-5 通知タイマー付き非同期相互作用」の説明

5.5.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

BPELプロセス・サービス・コンポーネントがこのトランザクションのクライアント側にある場合は、リクエストを送信するinvokeアクティビティおよびリプライを受信するreceiveアクティビティを含むscopeアクティビティが必要です。scopeアクティビティのonAlarmハンドラには時間制限、および時間切れになったときの指示が含まれます。たとえば、30分待機した後、予想を超える時間がプロセスにかかっているという警告を送信します。すべてのパートナ・アクティビティと同様に、WSDLファイルは相互作用を定義します。

5.5.2 サービスとしてのBPELプロセス・サービス・コンポーネント

サービスとしてのBPELプロセス・サービス・コンポーネントの動作は、非同期相互作用でのサービスとしてのBPELプロセス・サービス・コンポーネントの動作に相当します。

5.6 1リクエストと複数レスポンスの概要

このタイプの相互作用では、クライアントは1つのリクエストをサービスに送信し、複数のレスポンスを受信します。たとえば、商品をオンラインで注文するリクエストに対し、最初のレスポンスは納期予定、2番目のレスポンスは支払い確認、3番目のレスポンスは商品が発送されたことの通知である場合があります。この例では、レスポンスの数とタイプが予想されていることに注意してください。図5-6に概要を示します。

図5-6 1リクエストと複数レスポンス

「図5-6 1リクエストと複数レスポンス」の説明

5.6.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

BPELプロセス・サービス・コンポーネントがこのトランザクションのクライアント側にある場合は、リクエストを送信するinvokeアクティビティ、および3つのreceiveアクティビティ(各リプライに対して1つ)を持つsequenceアクティビティが必要です。すべてのパートナ・アクティビティと同様に、WSDLファイルは相互作用を定義します。

5.6.2 サービスとしてのBPELプロセス・サービス・コンポーネント

BPELサービスには、クライアントからのメッセージを受け取るreceiveアクティビティと、3つのinvokeアクティビティ(各リプライに対して1つ)を持つsequence属性が必要です。

5.7 1リクエストと二者択一レスポンスの概要

1リクエストと二者択一レスポンスを使用する相互作用では、クライアントは1つのリクエストをサービスに送信し、2つのうちのいずれかのレスポンスを受信します。たとえば、商品をオンラインで注文するリクエストに対し、最初のレスポンスは在庫ありメッセージまたは在庫切れメッセージのいずれかである場合があります。図5-7に概要を示します。

図5-7 1リクエストと二者択一レスポンス

「図5-7 1リクエストと二者択一レスポンス」の説明

5.7.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

BPELプロセス・サービス・コンポーネントがこのトランザクションのクライアント側にある場合は、BPELプロセス・サービス・コンポーネント内に次のアクティビティが必要です。

- リクエストを送信するinvokeアクティビティ。

- 2つのブランチを持つpickアクティビティ。1つ目のonMessageブランチは、在庫ありメッセージを受信した場合の、在庫ありレスポンスおよび指示用。

- 2つ目のonMessageブランチは、在庫切れメッセージを受信した場合の、在庫切れレスポンスおよび指示用。

すべてのパートナ・アクティビティと同様に、WSDLファイルは相互作用を定義します。

1リクエストと二者択一レスポンスを使用する相互作用の詳細は、第15.2項「プロセスの継続または待機を選択するpickアクティビティの作成」を参照してください。

5.7.2 サービスとしてのBPELプロセス・サービス・コンポーネント

BPELサービスには、クライアントからメッセージを受け取るreceiveアクティビティ、および2つのブランチ(品目が入手可能な場合に在庫ありメッセージを送信するinvokeアクティビティを持つブランチと、品目が入手不可の場合に在庫切れメッセージを送信するinvokeアクティビティを持つブランチ)を持つswitchアクティビティが必要です。

5.8 1リクエストと必須/オプション・レスポンスの概要

このタイプの相互作用では、クライアントは1つのリクエストをサービスに送信し、1つまたは2つのレスポンスを受信します。ここでのリクエストは、商品をオンラインで注文することです。商品が遅れている場合は、遅延を顧客に通知するメッセージがサービスにより送信されます。どのような場合も、商品の発送時には必ず通知が送信されます。図5-8に概要を示します。

図5-8 1リクエストと必須/オプション・レスポンス

「図5-8 1リクエストと必須/オプション・レスポンス」の説明

5.8.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

BPELプロセス・サービス・コンポーネントがこのトランザクションのクライアント側にある場合は、リクエストを送信するinvokeアクティビティおよび必須リプライを受信するreceiveアクティビティを含む、scopeアクティビティが必要です。scopeアクティビティのonMessageハンドラは、オプションのメッセージおよびそれを受信した場合の指示(商品が遅れていることをユーザーに通知するなど)を受け取るように設定されています。クライアントBPELプロセス・サービス・コンポーネントは必須リプライの受信を待機します。最初に必須リプライを受信すると、BPELプロセス・サービス・コンポーネントはオプションのリプライを待機せずに続行します。すべてのパートナ・アクティビティと同様に、WSDLファイルは相互作用を定義します。

5.8.2 サービスとしてのBPELプロセス・サービス・コンポーネント

BPELサービスには、receiveアクティビティと必須発送メッセージを送信するinvokeアクティビティを含むscopeアクティビティ、および時間切れになった場合のオプションの遅延メッセージを送信する(品目が24時間以内に出荷されない場合の遅延メッセージの送信など)scopeのonAlarmハンドラが必要です。

5.9 部分処理の概要

部分処理では、クライアントはリクエストをサービスに送信し、すぐにレスポンスを受信しますが、処理はサービス側で続行されます。たとえば、クライアントはパッケージ・ツアーを購入するリクエストを送信します。サービスは購入を確認するリプライをただちに送信して、ホテル、フライト、レンタカーなどの予約を続行します。このパターンでは、長期間の処理が続く複数の単発コールバックも含まれることがあります。図5-9に概要を示します。

図5-9 部分処理

「図5-9 部分処理」の説明

5.9.1 クライアントとしてのBPELプロセス・サービス・コンポーネント

BPELクライアントが単純なこのケースでは、各リクエストに対するinvokeアクティビティと、非同期トランザクションの各リプライに対するreceiveアクティビティまたは各同期トランザクションに対するinvokeアクティビティが必要です。これらのトランザクションが完了すると、残りの作業はサービスによって処理されます。すべてのパートナ・アクティビティと同様に、WSDLファイルは相互作用を定義します。

5.9.2 サービスとしてのBPELプロセス・サービス・コンポーネント

BPELサービスには、クライアントからの各リクエストに対するreceiveアクティビティと、各レスポンスに対するinvokeアクティビティが必要です。レスポンスが終了すると、サービスとしてのBPELプロセス・サービス・コンポーネントは、必要なタスクを実行するために相互作用で収集された情報を使用して、クライアントからの追加入力なしにその処理を続行できます。

5.10 複数アプリケーション間の相互作用の概要

購入者、販売者、発送者など、トランザクションに3つ以上のアプリケーションが必要な場合があります。この場合、購入者は販売者にリクエストを送信し、販売者はそのリクエストを発送者に送信し、発送者は購入者に通知を送信します。この「A-B-C-A」トランザクション・パターンは、同時に多数のトランザクションを処理できます。このため、どのメッセージがどこに送信されるのかを追跡するためのメカニズムが必要です。図5-10に概要を示します。

すべてのパートナ・アクティビティと同様に、WSDLファイルは相互作用を定義します。

図5-10 複数アプリケーション間の相互作用

「図5-10 複数アプリケーション間の相互作用」の説明

このような調整は、WS-Addressingと相関セットを使用して管理できます。これらの詳細は、第8章「BPELプロセスからの非同期Webサービスの起動」を参照してください。

6 BPELプロセスでのXMLデータの操作

この章では、BPELプロセス・サービス・コンポーネントでのXMLデータの操作方法について説明します。 この章では様々な例を提供します。変数、シーケンスおよび配列の使用方法とXPath式の使用方法、数学的計算などのタスクの実行方法に関するトピックが含まれています。サポートされる仕様についても説明しています。

この章には次の項が含まれます:

- 第6.1項「BPELプロセスでのXMLデータの操作の概要」

- 第6.2項「データ・プロバイダ・サービスへのXMLデータ操作の委任」

- 第6.3項「スタンドアロンSDOベースの変数の使用」

- 第6.4項「式定数またはリテラルXMLでの変数の初期化」

- 第6.5項「変数間のコピー」

- 第6.6項「要素変数およびメッセージ・タイプ変数内のフィールドへのアクセス」

- 第6.7項「数値の割当て」

- 第6.8項「XPath標準による数学的計算の使用」

- 第6.9項「文字列リテラルの割当て」

- 第6.10項「文字列の連結」

- 第6.11項「ブール値の割当て」

- 第6.12項「日付または時刻の割当て」

- 第6.13項「属性の操作」

- 第6.14項「bpelx拡張要素を使用したXMLデータの操作」

- 第6.15項「XMLデータの検証」

- 第6.16項「BPEL 2.0のメッセージ交換アクティビティでの要素変数の使用」

- 第6.17項「BPEL 2.0でのWSDLメッセージ・パートのマップ」

- 第6.18項「BPEL 2.0でのプロセス定義のインポート」

- 第6.19項「配列に類似したXMLデータ・シーケンスの操作」

- 第6.20項「文字列からXML要素への変換」

- 第6.21項「ドキュメント形式とRPC形式のWSDLの違いの理解」

- 第6.22項「BPELでのSOAPヘッダーの操作」

- 第6.23項「BPEL 2.0での拡張ネームスペースの宣言」

注意:

この章の大部分の例では、関連するメッセージ・タイプを定義するWSDLファイルは、Remote Procedure Call (RPC)形式ではなくドキュメント・リテラル形式であると想定しています。RPC形式のWSDL定義の場合、XPath問合せ文字列の構成方法に違いがあります。RPCのWSDLファイルで定義されたタイプを使用する場合は、第6.21項「ドキュメント形式とRPC形式のWSDLの違いの理解」を参照してください。

Oracle BPEL Process Managerのサンプルについては、Oracle SOA Suiteサンプルを参照してください。

6.1 BPELプロセスでのXMLデータの操作の概要

この項では、BPELプロセスでのXMLデータの使用について概要を説明します。

6.1.1 BPELプロセスのXMLデータ

BPELプロセス・サービス・コンポーネントでは、ほとんどのデータはXMLフォーマットです。データには、BPELプロセス・サービス・コンポーネントとの間で受け渡されるメッセージ、外部サービスとの間で交換されるメッセージ、プロセスで使用されるローカル変数などがあります。通常は次のいずれかのXMLスキーマを使用して、これらのメッセージおよび変数のタイプを定義します。

- フローのWeb Services Description Language (WSDL)ファイル

- 起動されるサービスのWSDLファイル

- そのWSDLファイルで参照されるXSDファイル

したがって、BPELのほとんどの変数はXMLデータであり、BPELプロセス・サービス・コンポーネントはそのコードの大部分を使用して、これらのXML変数を操作します。通常は、様々なサービスに必要な表現間でのデータ・トランスフォーメーション、データのローカル操作(複数のサービス呼出しからの結果の結合など)などが行われます。

BPELでは、サービス・データ・オブジェクト(SDO)変数もサポートしています。この変数は、XML形式ではなく、メモリー構造形式です。

6.1.2 assignアクティビティでのデータ操作およびXPath標準

BPELのデータ操作は、XPath標準に基づくassignアクティビティが開始点になります。このタイプの操作では多くの場合、XPath問合せ、式および関数が使用されます。

通常は、より複雑なデータ・トランスフォーメーションまたは操作を行うためのXQuery、XSLTまたはJavaを使用する高度な方法も使用できます。

この項では、BPELでXMLデータを操作する方法の概要を説明します。様々な組合せで使用される主要なビルディング・ブロックの概要を示し、例をあげて説明します。後続の各項では、これらのビルディング・ブロックを適用して特定のタスクを実行する方法について説明します。

XML変数間でデータをコピーする場合、または式の値を計算して変数に格納するには、assignアクティビティを使用します。アクティビティ内のcopy要素は、互換性のあるタイプの割当てのソースとターゲット(コピー先とコピー元の内容)を指定します。

例6-1に、「Business Process Execution Language for Web Services Specification Version 1.1」に記載されているBPELバージョン1.1の正式な構文を示します。

例6-1 BPEL 1.1のassignアクティビティ

<assign standard-attributes>
standard-elements
<copy>
from-spec
to-spec
</copy>
</assign>

例6-2に、「Web Services Business Process Execution Language Specification Version 2.0」に記載されているBPELバージョン2.0の正式な構文を示します。keepSrcElementName属性は、コピー操作中に(to-specの選択に従って)宛先の要素名が、(from-specの選択に従って)ソースの要素名で置換されるかどうかを指定します。keepSrcElementNameをno (デフォルト値)に設定すると、元の宛先要素の名前(つまり、ネームスペース名とローカル名のプロパティ)が、作成される要素の名前として使用されます。keepSrcElementNameをyesに設定すると、ソース要素名が、作成される宛先要素の名前として使用されます。

例6-2 BPEL 2.0のassignアクティビティ

<assign validate="yes|no"? standard-attributes>
standard-elements
(
<copy keepSrcElementName="yes|no"? ignoreMissingFromData="yes|no"?>
from-spec
to-spec
</copy>
. . .
. . .
</assign>

この構文は、両方の仕様で詳細に説明されています。通常、from-specおよびto-specには、例6-3に示すように、変数または変数パートを指定します。

例6-3 from-spec属性とto-spec属性

<assign>
<copy>
<from variable="c1" part="address"/>
<to variable="c3"/>
</copy>
</assign>

Oracle JDeveloperを使用する場合は、「From」セクションと「To」セクションを備えた「コピー・ルール」ダイアログでassignアクティビティの詳細を指定します。これにより、前述のBPELソース・コードの構文が反映されます。

XPath標準は、assignアクティビティで主要な役割を果たします。概要として簡単な例を示します。その他のコンテキストでの例と説明は、後続の各項で示します。

- XPath問合せ
XPath問合せは、ソースまたはターゲットの変数パート内のフィールドを選択します。from句またはto句には、値がXPath問合せ文字列であるquery属性を含めることができます。例6-4に例を示します。

例6-4 query属性

<from variable="input" part="payload"
query="/p:CreditFlowRequest/p:ssn"/>

query属性の値には、ノードを1つのみ選択するロケーション・パスを指定する必要があります。query属性およびXPath標準の構文の詳細は、それぞれ「Business Process Execution Language for Web Services Specification Version 1.1」 (第14.3項)、「Web Services Business Process Execution Language Specification Version 2.0」 (第8.4項)および「XML Path Language (XPath) Specification」を参照してください。

- XPath式
XPath式(from句のexpression属性で指定)を使用して、変数に格納する値を指定します。次に例を示します。

<from expression="100"/>

式には一般的な式(つまり、任意のXPath値のタイプに評価されるXPath式)を指定できます。同様に、式属性の値がコピー操作内のfrom句で使用される場合、式属性の値は必ず1つのノードまたは1つのオブジェクトのみを返す必要があります。XPath式の詳細は、「XML Path Language (XPath) Specification」の第9.1.4項を参照してください。

XPath式内では、次の種類の関数をコールできます。

- コアXPath関数
XPathでは、文字列操作関数(concatなど)や数値関数(sumなど)を含む多数の組込み関数がサポートされています。

<from expression="concat('string one', 'string two')"/>

XPath標準に組み込まれた関数の完全なリストは、「XML Path Language (XPath) Specification」の第4項を参照してください。

- BPEL XPath拡張関数
BPELはいくつかの拡張関数をコアXPath関数に追加し、これによりXPath式がプロセスからの情報にアクセスできます。

- BPEL 1.1の場合、拡張関数は標準BPELネームスペースhttp://schemas.xmlsoap.org/ws/2003/03/business-process/で定義され、接頭辞bpws:によって指定されます。

<from expression= "bpws:getVariableData('input', 'payload', '/p:value') + 1"/>

詳細は、「Business Process Execution Language for Web Services Specification Version 1.1」の第9.1項および第14.1項を参照してください。getVariableDataの詳細は、B.2.57.2項「getVariableData」を参照してください。

- BPEL 2.0の場合も、拡張関数は標準BPELネームスペースhttp://schemas.xmlsoap.org/ws/2003/03/business-process/で定義されます。ただし、接頭辞はbpel:になります。

<from>bpel:getVariableProperty('input', 'propertyName')</from>

詳細は、「Web Services Business Process Execution Language Specification Version 2.0」の第8.3項を参照してください。getVariablePropertyの詳細は、B.2.57.4項「getVariableProperty (For BPEL 2.0)」を参照してください。

- Oracle BPEL XPath拡張関数
Oracleには、新しい関数を追加するためにBPELおよびXPath標準に組み込まれた機能を使用する、その他のXPath関数が用意されています。

これらの関数は、ネームスペースhttp://schemas.oracle.com/xpath/extensionで定義され、接頭辞ora:によって指定されます。

- カスタム関数
Oracle BPEL Process Managerの関数は、bpel-xpath-functions-config.xmlに定義され、orabpel.jarファイルに格納されます。詳細は、第B.7項「ユーザー定義XPath拡張関数の作成」を参照してください。

高度なデータ操作をBPELのassignアクティビティやコアXPath関数で実行するのは困難な場合があります。しかし、複雑なデータ操作やデータ・トランスフォーメーションは、XSLT、Java、またはassignアクティビティのbpelx操作(第6.14項「bpelx拡張要素を使用したXMLデータの操作」を参照)を使用したり、Webサービスとして実行することができます。XSLTのトランスフォーメーションについては、これらを実行するXPath関数がOracle BPEL Process Managerに用意されています。

XPathおよびXQueryトランスフォーメーション・コードの例の詳細は、第40章「XSLTマッパーを使用したトランスフォーメーションの作成」を参照してください。

assignアクティビティの詳細は、第A.2.3項「assignアクティビティ」を参照してください。

注意:

assignアクティビティ経由で大きいスキーマが渡されると、「assignの編集」ダイアログのターゲットまたはソース・ペイロード・ノードを右クリックして「すべての子ノードを開く」を選択した場合に、Oracle JDeveloperが停止したり、メモリー不足になる可能性があります。回避策として、ペイロード要素は手動で開いてください。

6.2 データ・プロバイダ・サービスへのXMLデータ操作の委任

エンティティ変数を使用して、基礎となるデータ・プロバイダ・サービスがBPELデータ操作を実行するように指定できます。データ・プロバイダ・サービスはデータ・ストア内でデータ操作をバックグラウンドで実行しますが、Oracle SOA Suiteが提供する他のデータ・ストア関連の機能(たとえば、データベース・アダプタ)を使用しません。これにより、Oracle SOA Suiteの実行時パフォーマンスが向上し、コンパイルおよび実行時に、基礎となるデータ・プロバイダ・サービスのネイティブ機能が組み込まれます。

注意:

この機能はBPEL 1.1プロジェクトでのみサポートされます。

エンティティ変数は、SDOベースのデータを使用してOracle Application Development Framework(ADF)Business Componentデータ・プロバイダ・サービスと一緒に使用できます。

11gより前のリリースでは、BPELビジネス・プロセス内で交換された変数およびメッセージは、XML構造に組み込まれる分離されたペイロード(Webサービスから返されるデータのスナップショット)でした。ある場合では、ユーザーにはこの構成要素タイプが必要でした。別の場合では、この構成要素は難題でした。

エンティティ変数は、次のような11gより前のリリースの問題に対応しています。

- 拡張データ変換
基礎となるデータがXML形式でない場合は、データ変換(デリミタ付きテキストからXMLへの変換など)が必要でした。基礎となるデータのサイズが大きい場合、処理はパフォーマンスに影響を与える場合がありました。

- 失効したスナップショット・データ
(WSDLメッセージを含めて)BPEL内の変数は分離されたペイロードでした。これが必要な場合もありました。別の場合では、Oracle BPEL Process Managerの外部にある他のアプリケーションによって変数が最新データに変更されて表示されることが必要でした。つまり、分離されたデータ・モデルでは、すべてのニーズを満たさない失効したデータ・セットが提供されていました。また、スナップショットによってデータが重複するため、データ・サイズが大きい場合はパフォーマンスに影響を与えていました。

- ネイティブ・データ動作の損失
一部のデータ変換の実装には、XMLスキーマの範囲外のデータ構造の適用またはビジネス・データ・ロジックが必要でした。たとえば、開始日は終了日より前である必要があります。変数が分離されたペイロードの場合は、関連するWebサービスの起動中にのみ検証が実行されました。特定の操作後(ただしWebサービスの起動前)に、特別なビジネス・データ・ロジックを必要に応じて実行することが推奨される場合がありました。

リリース11gでこれらの難題に対応するには、変数宣言時にエンティティ変数を作成します。エンティティ変数は、バックグラウンドで様々なデータ・プロバイダ・サービス・テクノロジにアクセスし、プラグインするためのデータ・ハンドルとして機能します。コンパイルおよび実行時に、Oracle BPEL Process Managerは基礎となるデータ・プロバイダ・サービスにデータ操作を委任します。

表6-1では、以前のリリース(例としてデータベース・アダプタを使用)と、エンティティ変数を使用するリリース11gで、データ変換がどのように実行されるかを説明します。

表6-1 以前および現在のリリースでのデータ操作機能

10.1.xリリース

エンティティ変数を使用する場合の11g リリース

データを明示的にロードして保存するようなデータ操作は、Oracle BPEL Process Managerのデータベース・アダプタにより実行されていました。すべてのデータ(たとえば、注文書)はデータベースのデハイドレーション・ストアに保存されていました。

データをロードして保存するようなデータ操作は、データ・プロバイダ・サービス(Oracle ADF Business Componentアプリケーション)により自動的に実行され、サービスを起動するコードを記述する必要はありません。

Oracle BPEL Process Managerは、注文書データを指し示すキー(たとえば、注文書ID(POID))を格納します。Oracle BPEL Process Managerは、データへのアクセスがリクエストされたときにこのキーをフェッチします(bind entityアクティビティが実行します)。キーを使用してデータをバインドするように明示的にリクエストする必要があります。データ・プロバイダ・サービスは、すべてのデータ変更をデハイドレーション・ストア・データベースとは異なるデータベースに格納します。これによりデータは重複しません。

変数内のデータはドキュメント・オブジェクト・モデル(DOM)形式でした。

変数内のデータはSDO形式であり、DOMより簡単に変換処理できます。特に、データ・プロバイダ・サービスがSDO形式に対応している場合は簡単です。

注意:

現在は、BPELプロセス・サービス・コンポーネントのみがSDO形式の変数を使用できます。コンポジット・アプリケーションに、SDOベースのJavaバインディング・コンポーネント参照と接続されたOracle Mediatorサービス・コンポーネントがある場合、変数のデータ形式のデフォルトはDOMとなります。さらに、表6-1で説明したリリース10.1.xの機能は、リリース11gでもサポートされています。

WebLogic Fusion Order Demoアプリケーションには、エンティティ変数の使用例が記載されています。詳細は、第3章「SOAサンプル・アプリケーションの概要」を参照してください。

6.2.1 エンティティ変数の作成方法

この項では、Oracle JDeveloperでエンティティ変数とバインディング・キーを作成する方法について説明します。

Oracle BPEL Process Managerのリリース10.1.xでは、すべての変数データはDOM形式でした。リリース11gでは、SDO形式の変数データもサポートされています。BPELプロセス・サービス・コンポーネントのDOMおよびSDO変数は、暗黙的に必要な形式に変換されます。たとえば、DOMベースの変数を使用するOracle BPELサービス・コンポーネントは、これらの変数を必要に応じてassignアクティビティでSDOベースの変数に自動的に変換し、逆の場合も同様に変換します。いずれのタイプの形式もXSDスキーマ・ファイルで定義されています。ユーザー操作は不要です。

エンティティ変数は、SDO形式のデータもサポートしています。ただし、DOM変数やSDO変数とは異なり、SDOベースのデータを持つエンティティ変数を使用すると、データ(たとえば、注文書)に一意のキー値をバインドできます。そのキーのみが、デハイドレーション・ストアに格納されます。変換が必要なデータは、Oracle ADF Business Componentアプリケーションのサービスと一緒に格納されます。キーはサービス内に格納されるデータを指し示します。データが必要な場合はデータ・プロバイダ・サービスからフェッチされ、メモリーに配置されます。プロセスは、bind entityアクティビティとデハイドレーション・ストアの2つの場所で発生します。たとえば、Oracle BPEL Process Managerがリハイドレートする場合は、エンティティ変数のキーのみが格納され、ウェイクアップ時には、暗黙的なバインドが行われて現在のデータが取得されます。

6.2.1.1 インバウンド方向のSDOの動作の理解

SDOバインディング・コンポーネント・サービスは、図6-1に示すように、コンポジット・アプリケーションへのエントリ・ポイントを外部に提供します。

図6-1 インバウンド方向

「図6-1 インバウンド方向」の説明

SOAコンポジット・エディタおよびOracle BPELデザイナを使用して次のタスクを実行します。

- SDOバインディング・コンポーネント・サービスとBPELプロセス・サービス・コンポーネントをコンポジット・アプリケーションに定義します。

- SDOサービスとBPELプロセス・サービス・コンポーネントを接続(ワイヤ)します。

- BPELプロセス・サービス・コンポーネントの詳細を定義します。

SOAコンポジット・エディタの使用方法の詳細は、第2章「Oracle SOA Suiteを使用したSOAコンポジット・アプリケーションの開発」を参照してください。

6.2.1.2 アウトバウンド方向のSDO動作の理解

図6-2に示すように、SDOバインディング・コンポーネント参照を使用すると、コンポジット・アプリケーションからOracle ADF Business Componentアプリケーションの外部のパートナにメッセージを送信できます。

図6-2 アウトバウンド方向

「図6-2 アウトバウンド方向」の説明

Oracle ADF Business Componentアプリケーションが外部へのパートナ・リンクの場合、SOAコンポジット・エディタには、アウトバウンド通信を作成するためにコンポジット・アプリケーションにドラッグするSDOバインディング・コンポーネント参照はありません。かわりに、コンポジット・アプリケーションおよびOracle ADF Business Componentアプリケーションの間に次の通信が発生します。

- Oracle ADF Business Componentアプリケーションはデプロイされ、自動的にサービス・インフラストラクチャのSDOサービスとして登録されます。

- Oracle JDeveloperを使用してADF-BCサービスとしてこのアプリケーションを参照および検索し、パートナ・リンク接続を作成します。

- Oracle ADF Business Componentアプリケーション・サービスが検出された場合、composite.xmlファイルは、参照の詳細(binding.adfプロパティ)で自動的に更新されます。

6.2.1.3 エンティティ変数の作成とパートナ・リンクの選択

ここでは、Oracle ADF Business Componentアプリケーションのために、エンティティ変数を作成し、パートナ・リンクを選択します。次の例は、WebLogic Fusion Order Demoアプリケーションで、Oracle ADF Business Componentデータ・プロバイダ・サービスの注文データを指し示すために、bind entityアクティビティを使用して、OrderProcessor BPELプロセス・サービス・コンポーネントが注文IDを受け取る方法を示しています。

エンティティ変数を作成し、パートナ・リンクを選択する手順は、次のとおりです。

1. Oracle JDeveloperで、BPELプロセス・サービス・コンポーネントの「構造」ウィンドウに移動します。

2. 「変数」フォルダを右クリックし、「すべての子ノードを開く」を選択します。

3. 2番目の「変数」フォルダで、右クリックして「変数の作成」を選択します。
「変数の作成」ダイアログが表示されます。

4. 「名前」フィールドに、名前を入力します。

5. 「エンティティ変数」チェック・ボックスを選択し、「パートナ・リンク」フィールドの右側の「検索」アイコンを選択します。
「パートナ・リンク・チューザ」ダイアログに、使用可能なサービス(「ADF-BCサービス」というSDOサービスを含む)のリストが表示されます。

6. Oracle ADF Business Componentアプリケーションのためのサービスを参照し、選択します。

7. 「OK」をクリックし、「パートナ・リンク・チューザ」ダイアログと「変数の作成」ダイアログを閉じます。
ダイアログは図6-3のようになります。

図6-3 「変数の作成」ダイアログ

「図6-3 「変数の作成」ダイアログ」の説明

6.2.1.4 バインディング・キーの作成

ここでは、Oracle ADF Business Componentデータ・プロバイダ・サービスの注文データを指し示すキーを作成します。

バインディング・キーを作成する手順は、次のとおりです。

1. BPEL 1.1プロジェクトの「コンポーネント・パレット」で、「Oracle Extensions」を展開します。

2. bind entityアクティビティを、BPELプロセス・サービス・コンポーネントにドラッグします。
「Bind Entity」ダイアログが表示されます。

3. 「名前」フィールドに、名前を入力します。

4. 「エンティティ変数」フィールドの右側の「検索」アイコンをクリックします。
「変数チューザ」ダイアログが表示されます。

5. 第6.2.1.3項「エンティティ変数の作成とパートナ・リンクの選択」で作成したエンティティ変数を選択し、「OK」をクリックします。

6. 「一意キー」セクションで、「追加」アイコンをクリックします。
「キーの指定」ダイアログが表示されます。このダイアログを使用して、Oracle ADF Business Componentデータ・プロバイダ・サービスから注文IDを取得するためのキーを作成します。

7. 表6-2に記載されている詳細を入力し、バインディング・キーを定義します。

表6-2 「キーの指定」ダイアログのフィールドと値

フィールド

値

キー・ローカル・パート

キーのローカル・パートを入力します。

キー・ネームスペースURI

キーに対するネームスペースURIを入力します。

キー値

キー値式を入力します。この式はキーのタイプと一致する必要があります。次に、POIDキーに対する式値キーの例を示します。

- $inputMsg.payload/tns:poid

- bpws:getVariableData('inputmsg','payload','tns:poid')

エンティティ変数に対するPOIDキーは、通常、別のメッセージから取得されます。POIDキーのタイプが整数で、式の結果がABCの文字列である場合、文字列から整数への変換は失敗し、bind entityアクティビティも実行時に失敗となります。

図6-4に、完成した「キーの指定」ダイアログを示します。

図6-4 「キーの指定」ダイアログ

「図6-4 「キーの指定」ダイアログ」の説明

8. 「OK」をクリックして「キーの指定」ダイアログを閉じます。
図6-5に示すように、「一意キー」の表に名前/値ペアが表示されます。これで、設計は完了します。

図6-5 「Bind Entity」ダイアログ

「図6-5 「Bind Entity」ダイアログ」の説明

9. 「OK」をクリックして「Bind Entity」ダイアログを閉じます。
実行時にbind entityアクティビティが実行されると、エンティティ変数を使用する準備が整います。

SDOの使用方法の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。このガイドには、アプリケーション・モジュールをWebサービスとして公開する方法や、表示データ・オブジェクトの行をSDOとして公開する方法が記載されています。アプリケーション・モジュールは、ビジネス・ロジックを関連する一連のビジネス機能としてカプセル化するADFフレームワーク・コンポーネントです。

6.3 スタンドアロンSDOベースの変数の使用

スタンドアロンSDOベースの変数は、通常のBPEL XML-DOMベースの変数と類似しています。主な違いは、基礎となるデータ形式がDOMベースではなくSDOベースであることです。したがって、SDOベースの変数は、Java APIアクセス、簡単に使用できる最新のAPI、変更内容の要約など、様々なSDO機能を使用できます。ただし、SDOを使用する場合は、XML-DOMベースの変数を使用する場合にはない複数の制限も適用されます。最も顕著な制限は、SDOがXPath式の小さいサブセットのみをサポートしていることです。

6.3.1 SDOベースの変数の宣言方法

SDOベースの変数を宣言するための構文は、BPEL変数を宣言する構文と類似しています。例6-5に詳細を示します。

例6-5 SDOベースの変数の宣言

<variable name="deptVar_s" element="hrtypes:dept" />
<variable name="deptVar_v" element="hrtypes:dept" bpelx:sdoCapable="false" />

自動検出を無効にする場合は、bpelx:sdoCapable="true|false"スイッチを使用します。たとえば、例6-5の変数deptVar_vは通常のDOMベースの変数です。例6-6にスキーマの例を示します。

例6-6 XSDのサンプル

<xsd:element name="dept" type="Dept"/>
<xsd:complexType name="Dept"
sdoJava:instanceClass="sdo.sample.service.types.Dept">
<xsd:annotation>
<xsd:appinfo source="Key"
xmlns="http://xmlns.oracle.com/bc4j/service/metadata/">
<key>
<attribute>Deptno</attribute>
</key>
<fetchMode>minimal</fetchMode>
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="Deptno" type="xsd:integer" minOccurs="0"/>
<xsd:element name="Dname" type="xsd:string" minOccurs="0"
nillable="true"/>
<xsd:element name="Loc" type="xsd:string" minOccurs="0" nillable="true"/>
<xsd:element name="Emp" type="Emp" minOccurs="0" maxOccurs="unbounded"
nillable="true"/>
</xsd:sequence>
</xsd:complexType>

6.3.2 XMLからSDOへの変換方法

Oracle BPEL Process Managerでは、DOMとSDOの2つのデータ形式をサポートしています。同じビジネス・プロセス内で、さらに同じ式の中で、DOMベースの変数とSDOベースの変数の使用を切り替えることができます。Oracle BPEL Process Managerのデータ・フレームワークは、DOM形式とSDO形式を自動的に変換します。

Oracle BPEL Process Managerでは、エンティティ変数のXPathリライト機能を使用することで、基本的なSDO仕様ではサポートされない複数のXPath機能(変数の参照、関数コールなど)を使用できます。一方で、SDOベースの変数を使用するXPathには、別の制限があります(and、orおよびnotがサポートされないなど)。

例6-7に、XMLからSDOに変換する簡単な例を示します。

例6-7 XMLからSDOへの変換

<assign>
<copy>
<from>
<ns0:dept xmlns:ns0="http://sdo.sample.service/types/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns0:Deptno>10</ns0:Deptno>
<ns0:Dname>ACCOUNTING</ns0:Dname>
<ns0:Loc>NEW YORK</ns0:Loc>
<ns0:Emp>
<ns0:Empno>7782</ns0:Empno>
<ns0:Ename>CLARK</ns0:Ename>
<ns0:Job>MANAGER</ns0:Job>
<ns0:Mgr>7839</ns0:Mgr>
<ns0:Hiredate>1981-06-09</ns0:Hiredate>
<ns0:Sal>2450</ns0:Sal>
<ns0:Deptno>10</ns0:Deptno>
</ns0:Emp>
<ns0:Emp>
<ns0:Empno>7839</ns0:Empno>
<ns0:Ename>KING</ns0:Ename>
<ns0:Job>PRESIDENT</ns0:Job>
<ns0:Hiredate>1981-11-17</ns0:Hiredate>
<ns0:Sal>5000</ns0:Sal>
<ns0:Deptno>10</ns0:Deptno>
</ns0:Emp>
<ns0:Emp>
<ns0:Empno>7934</ns0:Empno>
<ns0:Ename>MILLER</ns0:Ename>
<ns0:Job>CLERK</ns0:Job>
<ns0:Mgr>7782</ns0:Mgr>
<ns0:Hiredate>1982-01-23</ns0:Hiredate>
<ns0:Sal>1300</ns0:Sal>
<ns0:Deptno>10</ns0:Deptno>
</ns0:Emp>
</ns0:dept>
</from>
<to variable="deptVar_s" />
</copy>
</assign>

例6-8に、SDO変数のXPath式からDOM変数にコピーする例を示します。

例6-8 SDO変数のXPath式からDOM変数へのコピー

<assign>
<!-- copy from an XPath expression of an SDO variable to DOM variable -->
<copy>
<from expression="$deptVar_s/hrtypes:Emp[2]" />
<to variable="empVar_v" />
</copy>
<!-- copy from an XPath expression of an DOM variable to SDO variable -->
<copy>
<from expression="$deptVar_v/hrtypes:Emp[2]" />
<to variable="empVar_s" />
</copy>
<!-- insert a DOM based data into an SDO variable -->
<bpelx:insertAfter>
<bpelx:from variable="empVar_v" />
<bpelx:to variable="deptVar_s" query="hrtypes:Emp" />
</bpelx:insertAfter>
<!-- insert a SDO based data into an SDO variable at particular location,
no XML conversion is needed  -->
<bpelx:insertBefore>
<bpelx:from expression="$deptVar_s/hrtypes:Emp[hrtypes:Sal = 1300]" />
<bpelx:to variable="deptVar_s" query="hrtypes:Emp[6]" />
</bpelx:insertBefore>
</assign>

例6-9に、SDOデータの一部を削除する例を示します。

例6-9 SDOデータの削除

<assign>
<bpelx:remove>
<bpelx:target variable="deptVar_s" query="hrtypes:Emp[2]" />
</bpelx:remove>
</assign>

注意:

SDOベースの変数に対するbpelx:append操作は、次の理由によりサポートされていません。

- SDOベースの変数に対する<copy>操作には、高性能な更新機能があります(<copy>操作の前に<bpelx:append>操作を実行する必要がないなど)。

- SDOデータ・オブジェクトはメタデータ駆動で、一般的に新しいプロパティを任意に追加することがサポートされていません。

6.4 式定数またはリテラルXMLでの変数の初期化

BPELでは、リテラルXMLを変数に代入する方法が役立つことがよくあります(たとえば、動的データを変数に対するXMLデータ・コンテンツ内の特定のフィールドにコピーする前に、変数を初期化する場合などです)。また、XMLデータ値をプロセスにハード・コーディングするときのテストにも役立ちます。

6.4.1 リテラルXML要素の割当て方法

例6-10では、リテラルのresult要素をoutput変数のpayloadパートに割り当てています。

例6-10 リテラル要素の割当て

<assign>
<!-- copy from literal xml to the variable -->
<copy>
<from>
<result xmlns="http://samples.otn.com">
<name/>
<symbol/>
<price>12.3</price>
<quantity>0</quantity>
<approved/>
<message/>
</result>
</from>
<to variable="output" part="payload"/>
</copy>
</assign>

6.5 変数間のコピー

変数間のコピーでは、1つの変数(またはパート)から互換性のあるタイプの別の変数に直接コピーします。どちらの変数でも特定のフィールドを指定する必要はありません。つまり、XPath問合せを指定する必要はありません。

6.5.1 変数間でのコピー方法

例6-11は、2つの割当ての実行を示しています。最初に同じタイプの2つの変数の間でコピーを実行し、次に変数パートをそのパートと同じタイプの別の変数の変数パートにコピーします。

例6-11 変数間のコピー

<assign>
<copy>
<from variable="c1"/>
<to variable="c2"/>
</copy>
<copy>
<from variable="c1" part = "address"/>
<to variable="c3"/>
</copy>
</assign>

例6-12に示すように、BPELファイルは変数を定義します。

例6-12 変数定義

<variable name="c1" messageType="x:person"/>
<variable name="c2" messageType="x:person"/>
<variable name="c3" element="y:address"/>

例6-13に示すように、WSDLファイルはpersonメッセージ・タイプを定義します。

例6-13 メッセージ・タイプ定義

<message name="person" xmlns:x="http://tempuri.org/bpws/example">
<part name="full-name" type="xsd:string"/>
<part name="address" element="x:address"/>
</message>

このコード例の詳細は、「Business Process Execution Language for Web Services Specification Version 1.1」の第9.3.2項を参照してください。BPEL 2.0の場合は、「Web Services Business Process Execution Language Specification Version 2.0」の第8.4.4項の類似した例を参照してください。

詳細は、A.2.3項「assignアクティビティ」を参照してください。

6.5.2 BPEL 2.0のインラインfrom-specを使用した変数の初期化

インラインfrom-specを使用することで、必要に応じて変数を初期化できます。このタイプの変数を作成するには、BPEL 2.0プロジェクトの「変数の作成」ダイアログで「初期化」タブをクリックします。

インライン変数の初期化は、概念的には、変数宣言に表示される順序でそれぞれが初期化された、一連の仮想assignアクティビティを含む1つの仮想sequenceアクティビティとして設計されます。各仮想assignアクティビティには、from-specが変数の初期化で指定されている1つの仮想コピー操作が含まれます。to-specは、作成される変数を指します。例6-14に詳細を示します。

例6-14 インラインfrom-specを使用した変数の初期化

<variables>
<variable name="tmp" element="tns:output">
<from>
<literal>
<output xmlns="http://samples.otn.com/bpel2.0/ch8.1">
<value>1000</value>
</output>
</literal>
</from>
</variable>
</variables>

詳細は、「Web Services Business Process Execution Language Specification Version 2.0」の第8.1項を参照してください。

6.6 要素変数およびメッセージ・タイプ変数内のフィールドへのアクセス

ほとんどのWSDLファイルやXSDファイルに定義のタイプが存在する場合は、要素およびメッセージ・タイプに基づいて変数パート内のコピー元またはコピー先フィールドのレベルに移動する必要があります。そこで、XMLスキーマの複合型を順に使用します。このアクションを実行するには、assignアクティビティのfrom句またはto句にXPath問合せを指定します。

6.6.1 要素ベース変数およびメッセージ・タイプベース変数内のフィールドへのアクセス方法

例6-15では、ssnフィールドはCreditFlowプロセスの入力メッセージから信用格付けサービスの入力メッセージのssnフィールドにコピーされます。

例6-15 レベルをコピーするフィールド

<assign>
<copy>
<from variable="input" part="payload"
query="/tns:CreditFlowRequest/tns:ssn"/>
<to variable="crInput" part="payload" query="/tns:ssn"/>
</copy>
</assign>

例6-16は、この割当てに必要なメッセージ・タイプベースの変数をBPELファイルに定義する方法を示しています。

例6-16 BPELファイル定義 - BPEL 1.1のメッセージ・タイプベースの変数

<variable name="input" messageType="tns:CreditFlowRequestMessage"/>
<variable name="crInput"
messageType="services:CreditRatingServiceRequestMessage"/>

crInput変数は、信用格付けサービスへの入力メッセージとして使用されます。そのメッセージ・タイプCreditFlowRequestMessageは、例6-17に示すように、CreditFlowService.wsdlファイルで定義されます。

例6-17 CreditFlowRequestMessage定義

<message name="CreditFlowRequestMessage">
<part name="payload" element="tns:CreditFlowRequest"/>
</message>

CreditFlowRequestは、ssnという名前のフィールドで定義されます。メッセージ・タイプCreditRatingServiceRequestMessageは、例6-18に示すように、CreditRatingService.wsdlファイルで定義されます。

例6-18 CreditRatingServiceRequestMessage定義

<message name="CreditRatingServiceRequestMessage">
<part name="payload" element="tns:ssn"/>
</message>

例6-19に、例6-15の割当てに含まれるメッセージ・タイプベース変数をBPELファイルに定義する方法のBPEL 2.0の構文を示します。/tns:CreditFlowRequestは不要であることに注意してください。

例6-19 BPELファイル定義 - BPEL 2.0のメッセージ・タイプベースの変数

<copy>
<from>$input.payload/tns:ssn</from>
<to>$crInput.payload</to>
</copy>

BPELプロセスでは、要素ベースの変数も使用できます。例6-20は、BPEL 1.1で要素ベースの変数を使用する方法を示しています。autoloanフィールドは融資申請プロセスの入力メッセージからWebサービスの入力メッセージのcustomerフィールドにコピーされます。

例6-20 BPEL 1.1のレベルをコピーするフィールド

<assign>
<copy>
<from variable="input" part="payload"
query="/tns:invalidLoanApplication/autoloan:
application/autoloan:customer"/>
<to variable="customer"/>
</copy>
</assign>

例6-21に、BPEL 2.0で要素ベースの変数を使用する方法を示します。

例6-21 BPEL 2.0のレベルをコピーするフィールド

<assign>
<copy>
<from>$input.payload/autoloan:application/autoloan:customer</from>
<to>$customer</to>
</copy>
</assign>

例6-22は、割当てに必要な要素ベースの変数をBPELファイルに定義する方法を示しています。

例6-22 BPELファイル定義 - 要素ベースの変数

<variable name="customer" element="tns:customerProfile"/>

6.7 数値の割当て

XPath式では数値を割り当てることができます。

6.7.1 数値の割当て方法

例6-23は、整数値100のXPath式を割り当てる方法を示しています。

例6-23 XPath式の割当て

<assign>
<!-- copy from integer expression to the variable -->
<copy>
<from expression="100"/>
<to variable="output" part="payload" query="/p:result/p:quantity"/>
</copy>
</assign>

6.8 XPath標準による数学的計算の使用

第6.8.1項「XPath標準による数学的計算の使用方法」の数値を増分する数式のような簡単な数式を使用できます。

6.8.1 XPath標準による数学的計算の使用方法

例6-24では、BPEL XPath関数getVariableDataにより、増分した値が取得されます。getVariableDataへの引数は、from句のvariable、partおよびquery属性と同じです(オプションの最後の2つの引数を含む)。

例6-24 XPath関数getVariableDataによる値の取得

<assign>
<copy>
<from expression="bpws:getVariableData('input', 'payload',
'/p:value') + 1"/>
<to variable="output" part="payload" query="/p:result"/>
</copy>
</assign>

また、例6-25に示すように、BPEL 1.1で$variable構文を使用することもできます。

例6-25 BPEL 1.1での$variable構文の使用

<assign>
<copy>
<from expression="$input.payload + 1"/>
<to variable="output" part="payload" query="/p:result"/>
</copy>
</assign>

例6-26に、BPEL 2.0で$variable構文を使用する方法を示します。

例6-26 BPEL 2.0での$variable構文の使用

<assign>
<copy>
<from>$input.payload + 1</from>
<to>$output.payload</to>
</copy>
</assign>

6.9 文字列リテラルの割当て

文字列リテラルをBPEL内の変数に割り当てることができます。

6.9.1 文字列リテラルの割当て方法

例6-27のコードは、文字列リテラル'GE'から評価されるBPEL 1.1式を、指定された変数パート内のsymbolフィールドにコピーしています。(二重引用符および一重引用符を使用していることに注意してください)。

例6-27 BPEL 1.1での式のコピー

<assign>
<!-- copy from string expression to the variable -->
<copy>
<from expression="'GE'"/>
<to variable="output" part="payload" query="/p:result/p:symbol"/>
</copy>
</assign>

例6-28に、BPEL 2.0でこの式を実行する方法を示します。

例6-28 BPEL 2.0での式のコピー

<assign>
<copy>
<from>'GE'</from>
<to>$output.payload/p:symbol</from>
</copy>
</assign>

6.10 文字列の連結

1つの文字列変数(または変数パート、フィールド)の値を別の文字列変数にコピーするのではなく、いくつかの文字列を連結するなどの文字列操作を最初に実行できます。

6.10.1 文字列の連結方法

連結はconcatという名前のコアXPath関数で実行されます。また、連結に必要な変数値は、BPEL XPath関数getVariableDataによって取得されます。例6-29では、getVariableDataは、input変数のpayloadパートからnameフィールドの値をフェッチします。次に、文字リテラル'Hello 'が、この値の先頭に連結されます。

例6-29 XPath関数getVariableDataによるデータのフェッチ

<assign>
<!-- copy from XPath expression to the variable -->
<copy>
<from expression="concat('Hello ',
bpws:getVariableData('input', 'payload', '/p:name'))"/>
<to variable="output" part="payload" query="/p:result/p:message"/>
</copy>
</assign>

XPathで使用できるその他の文字列操作関数は、「XML Path Language (XPath) Specification」の第4.2項にリストされています。

6.11 ブール値の割当て

XPathブール関数を使用してブール値を割り当てることができます。

6.11.1 ブール値の割当て方法

例6-30は、BPEL 1.1でブール値を割り当てる例を示しています。from句のXPath式は、XPathブール関数trueのコールであり、指定されたapprovedフィールドがtrueに設定されます。関数falseも使用できます。

例6-30 BPEL 1.1でのブール値の割当て

<assign>
<!-- copy from boolean expression function to the variable -->
<copy>
<from expression="true()"/>
<to variable="output" part="payload" query="/result/approved"/>
</copy>
</assign>

例6-31に、BPEL 2.0でのブール値の割当ての例を示します。

例6-31 BPEL 2.0でのブール値の割当て

<assign>
<copy>
<from>true()</from>
<to>$output.payload/approved</to>
</copy>
</assign>

XPath仕様では、ブール定数値を返すメソッドとして"true()"および"false()"関数を使用するように推奨しています。

かわりに"boolean(true)"または"boolean(false)"を使用すると、ブール関数内のtrueまたはfalseはtrueまたはfalse定数ではなく相対要素ステップと解釈されます。現行のXPathコンテキスト・ノードでtrueという子ノードの選択が試行されます。ほとんどの場合、trueノードは存在しません。したがって、空の結果ノードセットが返され、それがXPath 1.0のboolean()関数によりfalseの結果に変換されます。この結果は混同される可能性があります。

6.12 日付または時刻の割当て

Oracle BPEL XPath関数のgetCurrentDate、getCurrentTimeまたはgetCurrentDateTimeを使用して、日付または時刻フィールドの現在値を割り当てることができます。さらに、日時の値が標準XSD形式の場合は、Oracle BPEL XPath関数formatDateをコールして、出力用により適切な文字に変換できます。

関連情報については、「Business Process Execution Language for Web Services Specification Version 1.1」の第9.1.2項、および「Web Services Business Process Execution Language Specification Version 2.0」の第8.3.2項を参照してください。

6.12.1 日付または時刻の割当て方法

例6-32は、BPEL 1.1で関数getCurrentDateを使用する例を示しています。

例6-32 BPEL 1.1での日付または時刻の割当て

<!-- execute the XPath extension function getCurrentDate() -->
<assign>
<copy>
<from expression="xpath20:getCurrentDate()"/>
<to variable="output" part="payload"
query="/invoice/invoiceDate"/>
</copy>
</assign>

例6-33は、BPEL 2.0で関数getCurrentDateを使用する例を示しています。

例6-33 BPEL 2.0での日付または時刻の割当て

<assign>
<copy>
<from>xpath20:getCurrentDate()</from>
<to>$output.payload/invoiceDate</to>
</copy>
</assign>

例6-34では、XSD形式で指定された日時の値をformatDate関数が文字列'Jun 10, 2005'に変換し、文字列フィールドformattedDateに割り当てています。

例6-34 BPEL 1.1のformatDate関数

<!-- execute the XPath extension function formatDate() -->
<assign>
<copy>
<from expression="ora:formatDate('2005-06-10T15:56:00',
'MMM dd, yyyy')"/>
<to variable="output" part="payload"
query="/invoice/formattedDate"/>
</copy>
</assign>

例6-35に、BPEL 2.0でのformatDate関数の動作を示します。

例6-35 BPEL 2.0のformatDate関数

<assign>
<copy>
<from>ora:formatDate('2005-06-10T15:56:00','MMM dd, yyyy')</from>
<to>$output.payload/formattedDate</to>
</copy>
</assign>

6.13 属性の操作

XML属性として定義されている要素は相互にコピーできます。XPath問合せ構文では、@記号は子要素のかわりに属性を参照します。

6.13.1 属性の操作方法

例6-36のコードは、このXMLデータからcustId属性をフェッチしてコピーしています。

例6-36 custId属性のフェッチ操作とコピー操作

<invalidLoanApplication xmlns="http://samples.otn.com">
<application xmlns = "http://samples.otn.com/XPath/autoloan">
<customer custId = "111" >
<name>
Mike Olive
</name>
...
</customer>
...
</application>
</invalidLoanApplication>

例6-37のBPEL 1.1のコードは、customerフィールドのcustId属性を選択し、変数custIdに割り当てています。

例6-37 BPEL 1.1でのcustId属性の選択操作と割当て操作

<assign>
<!-- get the custId attribute and assign to variable custId -->
<copy>
<from variable="input" part="payload"
query="/tns:invalidLoanApplication/autoloan:application
/autoloan:customer/@custId"/>
<to variable="custId"/>
</copy>
</assign>

例6-38は、customerフィールドのcustId属性を選択し、変数custIdに割り当てるためのBPEL 2.0の対応する構文を示しています。

例6-38 BPEL 2.0でのcustId属性の選択操作と割当て操作

<assign>
<copy>
<from>$input.payload/autoloan:application/autoloan:customer/@custId</from>
<to>$custId</to>
</copy>
</assign>

この例のネームスペース接頭辞は必須ではありません。例6-39に示すように、WSDLファイルには、custIdが属性として定義される型を持つように顧客を定義します。

例6-39 custId属性の定義

<complexType name="CustomerProfileType">
<sequence>
<element name="name" type="string"/>
...
</sequence>
<attribute name="custId" type="string"/>
</complexType>

6.14 bpelx拡張要素を使用したXMLデータの操作

assignアクティビティではXMLデータに対して様々な操作を実行できます。この項で説明されているbpelx拡張要素タイプにはこの機能が用意されています。Oracle BPELデザイナでは、「割当て」ダイアログの「コピー・ルール」タブの下部にbpelx拡張要素タイプを追加できます。コピー・ルールを作成した後、作成したルールを選択し、BPEL 1.1のドロップダウン・リストまたはBPEL 2.0のコンテキスト・メニューからbpelx拡張要素タイプを選択します。これにより、コピー・ルールが選択した拡張要素タイプに変更されます。

BPEL 1.1では、図6-6に示すように、ドロップダウン・リストから拡張要素タイプを選択します。

図6-6 BPEL 1.1のbpelx拡張要素に変換されたコピー・ルール

「図6-6 BPEL 1.1のbpelx拡張要素に変換されたコピー・ルール」の説明

BPEL 2.0では、図6-7に示すように、コピー・ルールを右クリックし、ルール・タイプの変更を選択して拡張要素タイプを選択することで、拡張要素タイプを選択します。

図6-7 BPEL 2.0のbpelx拡張要素に変換されたコピー・ルール

「図6-7 BPEL 2.0のbpelx拡張要素に変換されたコピー・ルール」の説明

詳細は、このダイアログのオンライン・ヘルプおよびA.2.3項「assignアクティビティ」を参照してください。

6.14.1 bpelx:appendの使用方法

assignアクティビティでbpelx:append拡張要素を使用すると、BPELプロセス・サービス・コンポーネントは1つの変数、式またはXMLフラグメントのコンテンツを別の変数のコンテンツに追加できます。この拡張機能を使用するには、「コピー・ルール」タブの下部で次の手順の1つを実行します。

- BPEL 1.1の場合は、図6-6のように、コピー・ルールを選択してドロップダウン・リストから「追加」を選択します。

- BPEL 2.0の場合、図6-7のように、コピー・ルールを右クリックしてルール・タイプの変更を選択し、「追加」を選択します。

注意:

bpelx:append拡張要素では、SDO変数の使用はサポートされていません。エラーが発生します。

6.14.1.1 BPEL 1.1のbpelx:append

例6-40に、BPELバージョン1.1をサポートするBPELプロジェクトのbpelx:appendの例を示します。

例6-40 BPEL 1.1のbpelx:append拡張要素

<bpel:assign>
<bpelx:append>
<bpelx:from ... />
<bpelx:to ... />
</bpelx:append>
</bpel:assign>

bpelx:append内のfrom-spec問合せでは、0(ゼロ)個以上のノードが取得されます。ノード・リストは、to-spec問合せで指定したターゲット・ノードに子ノードとして追加されます。

to-spec問合せでは、単一L-Value要素ノードを1つ取得する必要があります。それ以外の場合は、bpel:selectionFailureフォルトが生成されます。to-spec問合せではパートナ・リンクを参照できません。

例6-41では、1つのBOMの複数のb:partを連結BOMのb:partsに追加することで、複数の部品表を1つの部品表に連結しています。

例6-41 複数の部品表の連結

<bpel:assign>
<bpelx:append>
<bpelx:from variable="billOfMaterialVar"
query="/b:bom/b:parts/b:part" />
<bpelx:to variable="consolidatedBillOfMaterialVar"
query="/b:bom/b:parts" />
</bpelx:append>
</bpel:assign>

6.14.1.2 BPEL 2.0のbpelx:append

例6-42に、BPELバージョン2.0をサポートするBPELプロジェクトのbpelx:append構文の例を示します。BPEL 2.0では、この機能は第6.14.1.1項「BPEL 1.1のbpelx:append」で説明されている機能と同じですが、構文が多少異なります。

例6-42 BPEL 2.0のbpelx:append拡張要素

<bpel:assign>
<bpelx:append>
<bpelx:from>$billOfMaterialVar/b:parts/b:part</bpelx:from>
<bpelx:to>$consolidatedBillOfMaterialVar/b:parts</bpelx:from>
</bpelx:append>
</bpel:assign>

6.14.2 bpelx:insertBeforeの使用方法

注意:

bpelx:insertBefore拡張要素ではSDO変数を使用できますが、ターゲットは、コピーされたデータの移動先の変数属性にする必要があります。

assignアクティビティでbpelx:insertBefore拡張要素を使用すると、BPELプロセス・サービス・コンポーネントは1つの変数、式またはXMLフラグメントのコンテンツを別の変数のコンテンツの前に挿入できます。この拡張機能を使用するには、「コピー・ルール」タブの下部で次の手順の1つを実行します。

- BPEL 1.1の場合は、図6-6のように、コピー・ルールを選択してドロップダウン・リストから「前に挿入」を選択します。

- BPEL 2.0の場合、図6-7のように、コピー・ルールを右クリックして「ルール・タイプの変更」を選択し、「前に挿入」を選択します。

6.14.2.1 BPEL 1.1のbpelx:insertBefore

例6-43に、BPELバージョン1.1をサポートするBPELプロジェクトのbpelx:insertBeforeの例を示します。

例6-43 BPEL 1.1のbpelx:insertBefore拡張要素

<bpel:assign>
<bpelx:insertBefore>
<bpelx:from ... />
<bpelx:to ... />
</bpelx:insertBefore>
</bpel:assign>

bpelx:insertBefore内のfrom-spec問合せでは、0(ゼロ)個以上のノードが取得されます。ノード・リストは、to-spec問合せで指定したターゲット・ノードに子ノードとして追加されます。

insertBefore操作のto-spec問合せは、1つ以上の単一L-Valueノードを指し示します。複数のノードが返された場合は、最初のノードが参照ノードとして使用されます。参照ノードは要素ノードである必要があります。参照ノードの親も要素ノードである必要があります。それ以外の場合は、bpel:selectionFailureフォルトが生成されます。from-spec問合せの選択により生成されたノード・リストは、参照ノードの前に挿入されます。to-spec問合せではパートナ・リンクを参照できません。

例6-44は、<insertBefore>の実行前の構文を示しています。addrVarの値は次のとおりです。

例6-44 実行前の構文

<a:usAddress>
<a:state>CA</a:state>
<a:zipcode>94065</a:zipcode>
</a:usAddress>

例6-45は、実行後の構文を示しています。

例6-45 実行後の構文

<bpel:assign>
<bpelx:insertBefore>
<bpelx:from>
<a:city>Redwood Shore></a:city>
</bpelx:from>
<bpelx:to "addrVar" query="/a:usAddress/a:state" />
</bpelx:insertBefore>
</bpel:assign>

例6-46は、addrVarの値を示しています。

例6-46 addrVarの値

<a:usAddress>
<a:city>Redwood Shore</a:city>
<a:state>CA</a:state>
<a:zipcode>94065</a:zipcode>
</a:usAddress>

6.14.2.2 BPEL 2.0のbpelx:insertBefore

例6-47に、BPELバージョン2.0をサポートするBPELプロジェクトのbpelx:insertBefore構文の例を示します。BPEL 2.0では、この機能は第6.14.2.1項「BPEL 1.1のbpelx:insertBefore」で説明されている機能と同じですが、構文が多少異なります。extensionAssignOperation要素はbpelx:insertBefore拡張要素をラップします。

例6-47 BPEL 2.0のbpelx:insertBefore拡張要素

<assign>
<extensionAssignOperation>
<bpelx:insertBefore>
<bpelx:from>
<bpelx:literal>
<a:city>Redwood Shore></a:city>
</bpelx:literal>
</bpelx:from>
<bpelx:to>$addrVar/a:state</bpelx:to>
</bpelx:insertBefore>
</extensionAssignOperation>
</assign>

6.14.3 bpelx:insertAfterの使用方法

注意:

bpelx:insertAfter拡張要素ではSDO変数を使用できすが、ターゲットは、コピーされたデータの移動先の変数属性にする必要があります。

assignアクティビティでbpelx:insertAfter拡張要素を使用すると、BPELプロセス・サービス・コンポーネントは1つの変数、式またはXMLフラグメントのコンテンツを別の変数のコンテンツの後に挿入できます。この拡張機能を使用するには、「コピー・ルール」タブの下部で次の手順の1つを実行します。

- BPEL 1.1の場合は、図6-6のように、コピー・ルールを選択してドロップダウン・リストから「後に挿入」を選択します。

- BPEL 2.0の場合、図6-7のように、コピー・ルールを右クリックしてルール・タイプの変更を選択し、「後に挿入」を選択します。

6.14.3.1 BPEL 1.1のbpelx:insertAfter

例6-48に、BPELバージョン1.1をサポートするBPELプロジェクトのbpelx:insertAfterの例を示します。

例6-48 BPEL 1.1のbpelx:insertAfter拡張要素

<bpel:assign>
<bpelx:insertAfter>
<bpelx:from ... />
<bpelx:to ... />
</bpelx:insertAfter>
</bpel:assign>

この操作は第6.14.2項「bpelx:insertBeforeの使用方法」で説明した機能に類似していますが、次の違いがあります。

- to-spec問合せで複数のL-Valueノードが返される場合は、最後のノードが参照ノードとして使用されます。

- 参照ノードの前にノードが挿入されるかわりに、参照ノードの後にソース・ノードが挿入されます。

この操作は、conditional-switch+(appendまたはinsertBefore)のマクロとみなすこともできます。

例6-49は、<insertAfter>の実行前の構文を示しています。addrVarの値は次のとおりです。

例6-49 実行前の構文

<a:usAddress>
<a:addressLine>500 Oracle Parkway</a:addressLine>
<a:state>CA</a:state>
<a:zipcode>94065</a:zipcode>
</a:usAddress>

例6-50は、実行後の構文を示しています。

例6-50 実行後の構文

<bpel:assign>
<bpelx:insertAfter>
<bpelx:from>
<a:addressLine>Mailstop 1op6</a:addressLine>
</bpelx:from>
<bpelx:to "addrVar" query="/a:usAddress/a:addressLine[1]" />
</bpelx:insertAfter>
</bpel:assign>

例6-51は、addrVarの値を示しています。

例6-51 addrVarの値

<a:usAddress>
<a:addressLine>500 Oracle Parkway</a:addressLine>
<a:addressLine>Mailstop 1op6</a:addressLine>
<a:state>CA</a:state>
<a:zipcode>94065</a:zipcode>
</a:usAddress>

bpelx:insertAfter内のfrom-spec問合せでは、0(ゼロ)個以上のノードが取得されます。ノード・リストは、to-spec問合せで指定したターゲット・ノードに子ノードとして追加されます。

6.14.3.2 BPEL 2.0のbpelx:insertAfter

例6-52に、BPELバージョン2.0をサポートするBPELプロジェクトのbpelx:insertAfter構文の例を示します。BPEL 2.0では、この機能は第6.14.3.1項「BPEL 1.1のbpelx:insertAfter」で説明されている機能と同じですが、構文が多少異なります。extensionAssignOperation要素はbpelx:insertAfter拡張要素をラップします。

例6-52 BPEL 2.0のbpelx:insertAfter拡張要素

<assign>
<extensionAssignOperation>
<bpelx:insertAfter>
<bpelx:from>
<bpelx:literal>
<a:addressLine>Mailstop 1op6</a:addressLine>
</bpelx:literal>
</bpelx:from>
<bpelx:to>$addrVar/a:addressLine[1]</bpelx:to>
</bpelx:insertAfter>
</extensionAssignOperation>
</assign>

6.14.4 bpelx:removeの使用方法

assignアクティビティでbpelx:remove拡張要素を使用すると、BPELプロセス・サービス・コンポーネントは変数を削除できます。Oracle BPELデザイナでbpelx:remove拡張要素を追加するには、「コピー・ルール」タブの右上隅にある「削除」アイコンを、削除するターゲット変数にドラッグしてカーソルを離します。このアイコンを、センター・キャンバスにドラッグしてダイアログを呼び出し、ルールを指定し、ダイアログを保存して閉じ、アイコンをターゲット・ノードにドラッグすることもできます。図6-8に詳細を示します。

図6-8 assignアクティビティの「コピー・ルール」タブの「削除」アイコン

「図6-8 assignアクティビティの「コピー・ルール」タブの「削除」アイコン」の説明

カーソルを離すと、bpelx:remove拡張要素がターゲット変数に適用されます。図6-9に詳細を示します。

図6-9 ターゲット変数に適用されたbpelx:remove拡張要素

「図6-9 ターゲット変数に適用されたbpelx:remove拡張要素」の説明

6.14.4.1 BPEL 1.1のbpelx:remove

例6-53に、BPELバージョン1.1をサポートするBPELプロジェクトのbpelx:removeの例を示します。

例6-53 BPEL 1.1のbpelx:remove拡張要素

<bpel:assign>
<bpelx:remove>
<bpelx:target variable="ncname" part="ncname"? query="xpath_str" />
</bpelx:remove>
</bpel:assign>

XPath式で指定したノード削除がサポートされます。XPath式では複数のノードを指定できますが、いずれもL-Valueである必要があります。この親からは、テキスト・ノード、属性ノードおよび要素ノードを削除できます。

XPath式では、1つ以上のノードを返すことができます。XPath式で0(ゼロ)個のノードが返される場合は、bpel:selectionFailureフォルトが生成されます。

bpelx:targetの構文は、copy操作のto-specに類似しており、そのサブセットです。

例6-54は、次の値を持つaddrVarを示しています。

例6-54 addrVar

<a:usAddress>
<a:addressLine>500 Oracle Parkway</a:addressLine>
<a:addressLine>Mailstop 1op6</a:addressLine>
<a:state>CA</a:state>
<a:zipcode>94065</a:zipcode>
</a:usAddress>

BPELプロセス・サービス・コンポーネント・ファイルで例6-55に示す構文を実行すると、2番目のアドレス行であるMailstopが削除されます。

例6-55 2番目のアドレス行の削除

<bpel:assign>
<bpelx:remove>
<target variable="addrVar"
query="/a:usAddress/a:addressLine[2]" />
</bpelx:remove>
</bpel:assign>

BPELプロセス・サービス・コンポーネント・ファイルで例6-56に示す構文を実行すると、両方のアドレス行が削除されます。

例6-56 両方のアドレス行の削除

<bpel:assign>
<bpelx:remove>
<target variable="addrVar"
query="/a:usAddress/a:addressLine" />
</bpelx:remove>
</bpel:assign>

6.14.4.2 BPEL 2.0のbpelx:remove

例6-57に、BPELバージョン2.0をサポートするBPELプロジェクトのbpelx:remove構文の例を示します。BPEL 2.0では、この機能は第6.14.4.1項「BPEL 1.1のbpelx:remove」で説明されている機能と同じですが、構文が多少異なります。extensionAssignOperation要素はbpelx:remove拡張要素をラップします。

例6-57 BPEL 2.0のbpelx:remove拡張要素

<assign>
<extensionAssignOperation>
<bpelx:remove>
<bpelx:target>$ncname.ncname/xpath_str</bpelx:target>
</bpelx:remove>
</extensionAssignOperation>
</assign>

6.14.5 bpelx:renameおよびXSDタイプ・キャストの使用方法

assignアクティビティでbpelx:rename拡張要素を使用すると、BPELプロセス・サービス・コンポーネントはXSDタイプ・キャストを使用して要素の名前を変更できます。Oracle BPELデザイナでbpelx:rename拡張要素を追加するには、「コピー・ルール」タブの右上隅にある「名前の変更」アイコンを、名前を変更するターゲット変数にドラッグしてカーソルを離します。図6-8に示すように、「名前の変更」アイコンは「削除」アイコンの右側に表示されます。カーソルを離すと、ターゲット変数の名前を変更するための「名前の変更」ダイアログが表示されます。このアイコンを、センター・キャンバスにドラッグしてこのダイアログを呼び出し、名前を指定し、ダイアログを保存して閉じ、アイコンをターゲット・ノードにドラッグすることもできます。

6.14.5.1 BPEL 1.1のbpelx:rename

例6-58に、BPELバージョン1.1をサポートするBPELプロジェクトのbpelx:renameの例を示します。

例6-58 BPEL 1.1のbpelx:rename拡張要素

<bpel:assign>
<bpelx:rename elementTo="QName1"? typeCastTo="QName2"?>
<bpelx:target variable="ncname" part="ncname"? query="xpath_str" />
</bpelx:rename>
</bpel:assign>

bpelx:targetの構文は、copy操作のto-specに類似しており、そのサブセットです。ターゲットはさらに1つの要素ノードのリストを返す必要があります。それ以外の場合は、bpel:selectionFailureフォルトが生成されます。from-specで指定した要素ノード名が、elementTo属性で指定したQNameに変更されます。その要素ノードにxsi:type属性が追加され、それらの要素がtypeCastTo属性で指定したQNameタイプにキャストされます。

例6-59に示す従業員リストがあるとします。

例6-59 xsi:type属性

<e:empList>
<e:emp>
<e:firstName>John</e:firstName><e:lastName>Dole</e:lastName>
<e:emp>
<e:emp xsi:type="e:ManagerType">
<e:firstName>Jane</e:firstName><e:lastName>Dole</e:lastName>
<e:approvalLimit>3000</e:approvalLimit>
<e:managing />
<e:emp>
<e:emp>
<e:firstName>Peter</e:firstName><e:lastName>Smith</e:lastName>
<e:emp>
<e:emp>
<e:firstName>Mary</e:firstName><e:lastName>Smith</e:lastName>
<e:emp>
</e:empList>

昇格の変更が、例6-60の従業員リストのPeter Smithに適用されます。

例6-60 昇格変更の適用

<bpel:assign>
<bpelx:rename typeCastTo="e:ManagerType">
<bpelx:target variable="empListVar"
query="/e:empList/e:emp[./e:firstName='Peter' and
./e:lastName='Smith'" />
</bpelx:rename>
</bpel:assign>

前述のキャスト(名前変更)の実行後は、例6-61に示すように、Peter Smithにxsi:type情報が追加され、データは次のようになります。

例6-61 データ出力

<e:empList>
<e:emp>
<e:firstName>John</e:firstName><e:lastName>Dole</e:lastName>
<e:emp>
<e:emp xsi:type="e:ManagerType">
<e:firstName>Jane</e:firstName><e:lastName>Dole</e:lastName>
<e:approvalLimit>3000</e:approvalLimit>
<e:managing />
<e:emp>
<e:emp xsi:type="e:ManagerType">
<e:firstName>Peter</e:firstName><e:lastName>Smith</e:lastName>
<e:emp>
<e:emp>
<e:firstName>Mary</e:firstName><e:lastName>Smith</e:lastName>
<e:emp>
</e:empList>

<approvalLimit>および<managing>がないため、Peter Smithの従業員データは無効になっています。したがって、その情報を追加するために<append>が使用されます。例6-62に例を示します。

例6-62 append拡張要素を使用した情報の追加

<bpel:assign>
<bpelx:rename typeCastTo="e:ManagerType">
<bpelx:target variable="empListVar"
query="/e:empList/e:emp[./e:firstName='Peter' and
./e:lastName='Smith'" />
</bpelx:rename>
<bpelx:append>
<bpelx:from>
<e:approvalLimit>2500</e:approvalLimit>
<e:managing />
</bpelx:from>
<bpelx:to variable="empListVar"
query="/e:empList/e:emp[./e:firstName='Peter' and
./e:lastName='Smith'" />
</bpelx:append>
</bpel:assign>

renameおよびappendの両方を実行すると、対応するデータは例6-63のようになります。

例6-63 renameおよびappendの実行

<e:emp xsi:type="e:ManagerType">
<e:firstName>Peter</e:firstName><e:lastName>Smith</e:lastName>
<e:approvalLimit>2500</e:approvalLimit>
<e:managing />
<e:emp>

6.14.5.2 BPEL 2.0のbpelx:rename

例6-64に、BPELバージョン2.0をサポートするBPELプロジェクトのbpelx:rename構文の例を示します。BPEL 2.0では、この機能は第6.14.5.1項「BPEL 1.1のbpelx:rename」で説明されている機能と同じですが、構文が多少異なります。extensionAssignOperation要素はbpelx:rename操作をラップします。

例6-64 BPEL 2.0のbpelx:rename拡張要素

<bpel:assign>
<extensionAssignOperation>
<bpelx:rename elementTo="QName1"? typeCastTo="QName2"?>
<bpelx:target>$ncname[.ncname][/xpath_str]</bpelx:target>
</bpelx:rename>
</extensionAssignOperation>
</bpel:assign>

6.14.6 bpelx:copyListの使用方法

assignアクティビティでbpelx:copyList拡張要素を使用すると、BPELプロセス・サービス・コンポーネントは1つの変数、式またはXMLフラグメントのコンテンツに対して別の変数へのcopyList操作を実行できます。この拡張機能を使用するには、「コピー・ルール」タブの下部で次の手順の1つを実行します。

- BPEL 1.1の場合は、図6-6のように、コピー・ルールを選択してドロップダウン・リストから「リストのコピー」を選択します。

- BPEL 2.0の場合、図6-7のように、コピー・ルールを右クリックしてルール・タイプの変更を選択し、「リストのコピー」を選択します。

6.14.6.1 BPEL 1.1のbpelx:copyList

例6-65に、BPELバージョン1.1をサポートするBPELプロジェクトのbpelx:copyListの例を示します。

例6-65 BPEL 1.1のbpelx:copyList拡張要素

<bpel:assign>
<bpelx:copyList>
<bpelx:from ... />
<bpelx:to ... />
</bpelx:copyList>
</bpel:assign>

from-spec問合せでは、すべての属性ノードまたはすべての要素ノードのリストを取得できます。to-spec問合せでは、L-Valueノード(すべての属性ノードまたはすべての要素ノード)のリストを取得できます。

to-spec問合せで返される要素ノードは、すべて同じ親要素を持つ必要があります。to-spec問合せで要素ノードのリストが返される場合は、すべての要素ノードが連続している必要があります。

from-spec問合せで属性ノードが返される場合、to-spec問合せでは属性ノードが返される必要があります。同様に、from-spec問合せで要素ノードが返される場合、to-spec問合せでは要素ノードが返される必要があります。それ以外の場合は、bpws:mismatchedAssignmentFailureフォルトがスローされます。

from-spec問合せでは0(ゼロ)個のノードを返すことができますが、to-spec問合せではノードを1個以上返す必要があります。from-spec問合せで0(ゼロ)個のノードが返される場合、copyList操作の効果はremove操作と同様になります。

copyList操作には、次の機能があります。

- to-spec問合せが指すノードがすべて削除されます。

- to-spec問合せで要素ノードのリストが返され、そのノードが削除された後に子ノードが残っている場合、from-spec問合せで返されたノードは、to-spec問合せで指定した最後の要素と同レベルの次の要素の前に挿入されます。残りの子ノードがない場合は、append操作が実行されます。

- to-spec問合せで属性ノードのリストが返される場合は、その属性が親要素から削除されます。次に、from-spec問合せで返された属性が親要素に追加されます。

たとえば、例6-66に示すようなスキーマが定義されているとします。

例6-66 スキーマ

<schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="http://xmlns.oracle.com/Event_jws/Event/EventTest"
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="process">
<complexType>
<sequence>
<element name="payload" type="string"
maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
<element name="processResponse">
<complexType>
<sequence>
<element name="payload" type="string"
maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
</schema>

from変数には、例6-67に示すコンテンツが含まれています。

例6-67 変数のコンテンツ

<ns1:process xmlns:ns1="http://xmlns.oracle.com/Event_jws/Event/EventTest">
<ns1: payload >a</ns1: payload >
<ns1: payload >b</ns1: payload >
</ns1:process>

to変数には、例6-68に示すコンテンツが含まれています。

例6-68 変数のコンテンツ

<ns1:processResponse xmlns:ns1="http://xmlns.oracle.com/Event_
jws/Event/EventTest">
<ns1: payload >c</ns1: payload >
</ns1:process>

bpelx:copyList操作は、例6-69のようになります。

例6-69 bpelx:copyList

<assign>
<bpelx:copyList>
<bpelx:from variable="inputVariable" part="payload"
query="/client:process/client:payload"/>
<bpelx:to variable="outputVariable" part="payload"
query="/client:processResponse/client:payload"/>
</bpelx:copyList>
</assign>

これによって、例6-70のようにto変数が定義されます。

例6-70 変数のコンテンツ

<ns1:processResponse xmlns:ns1="http://xmlns.oracle.com/Event_
jws/Event/EventTest">
<ns1: payload >a</ns1: payload >
<ns1: payload >b</ns1: payload >
</ns1:process>

6.14.6.2 BPEL 2.0のbpelx:copyList

例6-71に、BPELバージョン2.0をサポートするBPELプロジェクトのbpelx:copyList構文の例を示します。BPEL 2.0では、この機能は第6.14.6.1項「BPEL 1.1のbpelx:copyList」で説明されている機能と同じですが、構文が多少異なります。extensionAssignOperation要素はbpelx:copyList拡張要素をラップします。

例6-71 BPEL 2.0のbpelx:copyList拡張要素

<assign>
<extensionAssignOperation>
<bpelx:copyList>
<bpelx:from>$inputVariable.payload/client:payload</bpelx:from>
<bpelx:to>$outputVariable.payload/client:payload</bpelx:to>
</bpelx:copyList>
</extensionAssignOperation>
</assign>

6.14.7 assign拡張要素の属性の使用方法

次の属性をassignアクティビティのコピー・ルールに割り当てることができます。

- ignoreMissingFromData

- insertMissingToData

- keepSrcElementName

assignアクティビティの「コピー・ルール」タブの下部で、選択したコピー・ルールを右クリックして、適切な属性を選択するためのメニューを表示します。図6-10に詳細を示します。

図6-10 assign拡張要素の属性

「図6-10 assign拡張要素の属性」の説明

6.14.7.1 ignoreMissingFromData属性

ignoreMissingFromData属性は、bpel:selectionFailure標準フォルトを抑止します。表6-3に、BPELバージョン1.1とバージョン2.0の構文の違いを示します。

表6-3 ignoreMissingFromData属性の構文

BPEL 1.1

BPEL 2.0

<copy bpelx:ignoreMissingFromData="yes|no"/>

<copy ignoreMissingFromData="yes|no"/>

6.14.7.2 insertMissingToData属性

insertMissingToData属性は、項目が選択されなかった場合、to-specで指定された(XPath) L-valueを実行するようにランタイムに指示します。表6-4に、BPELバージョン1.1とバージョン2.0の構文の違いを示します。

表6-4 insertMissingToData属性の構文

BPEL 1.1

BPEL 2.0

<copy bpelx:insertMissingToData="yes|no"/>

<copy bpelx:insertMissingToData="yes|no"/>

6.14.7.3 keepSrcElementName属性

keepSrcElementName属性を使用すると、(to-specの選択に従って)宛先の要素名をソースの要素名に置換できます。この属性は、BPEL 1.1では実装されていませんでした。表6-5に、BPELバージョン2.0でサポートされている構文を示します。

表6-5 keepSrcElementName属性の構文

BPEL 1.1

BPEL 2.0

未実装

<copy keepSrcElementName="yes|no"/>

6.15 XMLデータの検証

コードを検証してBPELプロジェクト内の無効なXMLデータを識別できます。

6.15.1 BPEL 1.1のXMLデータの検証方法

- Oracle BPELデザイナ内のassignアクティビティで、次の手順を実行します。

1. 「コンポーネント・パレット」の「BPELコンストラクト」セクションから、デザイナにassignアクティビティをドラッグします。

2. assignアクティビティをダブルクリックします。

3. 「一般」タブで、アクティビティの名前を入力し、「検証」チェック・ボックスを選択します。

4. 「適用」→「OK」の順にクリックします。

5. 「ソース」タブをクリックして構文を表示します。

<assign name=Assign1" bpelx:validate="yes"
. . .
</assign>

- Oracle BPELデザイナ内のスタンドアロン(assignアクティビティなしで使用可能な拡張validateアクティビティ)で、次の手順を実行します。

1. 「コンポーネント・パレット」の「Oracle Extensions」セクションから、デザイナにvalidateアクティビティをドラッグします。

2. 「検証」アイコンをダブルクリックします。

3. アクティビティの名前を入力します。

4. 「追加」アイコンをクリックして、検証する変数を選択します。

5. 変数を選択し、「OK」をクリックします。

6. 「適用」→「OK」の順にクリックします。

7. 「ソース」タブをクリックして構文を表示します。

<bpelx:validate name=Validate1" variables="inputVariable"/>

6.15.2 BPEL 2.0のXMLデータの検証方法

- Oracle BPELデザイナ内のassignアクティビティで、次の手順を実行します。

1. 「コンポーネント・パレット」の「BPELコンストラクト」セクションから、デザイナにassignアクティビティをドラッグします。

2. assignアクティビティをダブルクリックします。

3. 「一般」タブで、アクティビティの名前を入力し、「検証」チェック・ボックスを選択します。

4. 「適用」→「OK」の順にクリックします。

5. 「ソース」タブをクリックして構文を表示します。assignアクティビティを使用してXMLデータを検証するための構文は、BPELバージョン1.1とバージョン2.0では多少異なります。

<assign name="Assign1" validate="yes">
. . .
</assign>

- Oracle BPELデザイナ内のスタンドアロン(assignアクティビティなしで使用可能な拡張validateアクティビティ)で、次の手順を実行します。

1. 「コンポーネント・パレット」の「BPELコンストラクト」セクションから、デザイナにvalidateアクティビティをドラッグします。

2. 「検証」アイコンをダブルクリックします。

3. アクティビティの名前を入力します。

4. 「追加」アイコンをクリックして、検証する変数を選択します。

5. 変数を選択し、「OK」をクリックします。

6. 「適用」→「OK」の順にクリックします。

7. 「ソース」タブをクリックして構文を表示します。validateアクティビティを使用してXMLデータを検証するための構文は、BPELバージョン1.1とバージョン2.0では多少異なります。

<validate name="Validate1" variables="inputVariable"/>

6.16 BPEL 2.0のメッセージ交換アクティビティでの要素変数の使用

次のメッセージ交換アクティビティで変数を指定できます。

- 「Invoke」ダイアログの(inputVariable属性の)「入力」フィールドと(outputVariable属性の)「出力」フィールド

- receiveアクティビティの(variable属性の)「入力」フィールド

- replyアクティビティの(variable属性の)「出力」フィールド

これらのフィールドで参照される変数は通常、QNameが操作で使用される入力および出力メッセージ・タイプと一致するメッセージ・タイプ変数である必要があります。

例外は、アクティビティのWSDL操作が、要素を使用して定義された1つのパートを含むメッセージを使用している場合です。この場合、パートの定義に使用される同じ要素タイプの変数はそれぞれ、invokeアクティビティのinputVariable属性とoutputVariable属性、またはreceiveアクティビティまたはreplyアクティビティのvariable属性で参照できます。

この状況で変数を使用するのは、関連するWSDLメッセージ・タイプに基づいて匿名の一時WSDLメッセージ変数を宣言するのと同じである必要があります。

匿名の一時WSDLメッセージ変数と要素変数の間で要素データをコピーするのは、keepSrcElementName属性がyesに設定された1回のコピー操作による単一の仮想assignアクティビティとして機能します。仮想割当ては、実際のassignアクティビティと同じルールに従い、同じフォルトを使用する必要があります。表6-6に詳細を示します。

表6-6 WSDLメッセージ・パートのマップ

対象

説明

inputVariable属性

属性で参照される変数の値により、匿名の一時WSDLメッセージ変数のパートの値が設定されます。

outputVariable属性

一時WSDLメッセージ変数の受信したパートの値により、属性で参照される変数の値が設定されます。

receiveアクティビティ

着信パートの値により、variable属性で参照される変数の値が設定されます。

replyアクティビティ

variable属性で参照される変数の値により、送信される匿名の一時WSDLメッセージ変数のパートの値が設定されます。フォルトを送信するreplyアクティビティの場合も、同じシナリオが適用されます。

keepSrcElementName属性の詳細は、第6.14.7.3項「keepSrcElementName属性」を参照してください。

6.17 BPEL 2.0でのWSDLメッセージ・パートのマップ

invokeアクティビティおよびreplyアクティビティのtoParts要素は、BPEL変数のコンテンツから明示的に作成されるマルチパートWSDLメッセージの代替手段を提供します。

例6-72に示すように、toParts要素を使用する場合、該当するWSDL操作の入力メッセージで指定されたタイプに基づいて、匿名の一時WSDL変数が定義されます。

例6-72 toParts要素

<toParts>
<toPart part="payload" fromVariable="request"/>
</toParts>

toParts要素は、単一の仮想assignアクティビティとして機能します。各toPartは1回のコピー操作として機能します。WSDLメッセージ定義のパートごとに、最大で1つのtoPartが存在します。各コピー操作では、fromVariable属性で指定された変数から、toParts要素のpart属性で参照される匿名の一時WSDL変数のパートにデータがコピーされます。

receiveアクティビティ、invokeアクティビティ、scopeアクティビティのonEventブランチおよびpickアクティビティのonMessageブランチのfromParts要素は、toParts要素に似ています。例6-73に示すように、fromParts要素は、着信マルチパートWSDLメッセージからデータを取得し、個別の変数に配置します。

例6-73 fromParts要素

<fromParts>
<fromPart part="payload" toVariable="request"/>
</fromParts>

fromParts要素を使用するinvokeアクティビティでWSDLメッセージが受信されると、そのメッセージは、該当するWSDL操作の出力メッセージで指定されたタイプの匿名の一時WSDL変数に配置されます。

toParts要素と同様に、fromParts要素は単一の仮想assignアクティビティとして機能します。各fromPartは1回のコピー操作として機能します。各コピー操作では、fromPartのpart属性で参照される匿名の一時WSDL変数のパートのデータが、toVariable属性で示した変数にコピーされます。

toParts要素とfromParts要素のどちらの場合も、仮想assignアクティビティは実際のassignアクティビティと同じセマンティックに従い、同じフォルトを生成する必要があります。

invokeアクティビティにfromParts要素があるため、WSDLメッセージ定義のすべてのパートにfromPartを指定する必要はありません。fromParts要素で明示的に表されないパートは、匿名のWSDL変数から変数にコピーされません。

toParts要素とfromParts要素を使用してWSDLメッセージ・パートをマップする方法の詳細は、次のURLにある「Web Services Business Process Execution Language Version 2.0 Specification」を参照してください。

http://www.oasis-open.org

6.17.1 WSDLメッセージ・パートのマップ方法

この項では、replyアクティビティがtoParts要素を使用して変数のコンテンツをコピーする、単純なBPELプロセスの概要を示します。この例で使用されるWSDLファイルとBPELファイルは、第6.17.2項「WSDLメッセージ・パートのマップ時の処理内容」の例6-74および例6-75にあります。

BPEL 2.0でのWSDLメッセージ・パートをマップする手順は、次のとおりです。

1. 図6-11のreceiveアクティビティには、クライアントからの標準のinputVariable変数が含まれています。

図6-11 receiveアクティビティ

「図6-11 receiveアクティビティ」の説明

2. 図6-12のassignアクティビティは、test-type-variableのコンテンツをVar1にコピーします。

図6-12 assignアクティビティ

「図6-12 assignアクティビティ」の説明

3. 図6-13では、「変数」ボタンではなく、replyアクティビティの下部にある「送信先パート」ボタンが有効になっていることに注意してください。「追加」アイコンをクリックして、この項の情報を作成します。コピー操作により、「送信元変数」属性で示される変数Var1から、Part属性で参照される匿名の一時WSDL変数のパートにデータがコピーされます。

図6-13 replyアクティビティの下部で定義される「送信先パート」セクション

「図6-13 replyアクティビティの下部で定義される「送信先パート」セクション」の説明

6.17.2 WSDLメッセージ・パートのマップ時の処理内容

例6-74に、replyアクティビティに定義されたtoParts要素を含む同期リクエストの.bpelファイルを示します。これは、例6-75に示すWSDLファイルに定義されている操作にマップされます。コピー操作では、fromVariable属性で示される変数から匿名の一時WSDL変数Var1のパートにデータがコピーされます。

例6-74 replyアクティビティのToParts要素を含むBPELファイル

<sequence name="main">
<!-- Receive input from requester. This maps to operation defined in WSDL -->
<receive name="receiveInput" partnerLink="test_client"
portType="client:Test" operation="process" variable="inputVariable"
createInstance="yes"/>
<!-- Generate reply to synchronous request -->
<assign name="Assign_1">
<copy>
<from>"test-type-variable"</from>
<to>$Var1</to>
</copy>
</assign>
<reply name="replyOutput" partnerLink="test_client" portType="client:Test"
operation="process">
<toParts>
<toPart part="payload" fromVariable="Var1"/>
</toParts>
</reply>
</sequence>

例6-75 操作を定義するWSDLファイル

<wsdl:types>
<schema attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="http://xmlns.oracle.com/RT_Validate_P_02_jws/ch10_
3toParts_1/Test"
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="process">
<complexType>
<sequence>
<element name="input" type="string"/>
</sequence>
</complexType>
</element>
<element name="processResponse">
<complexType>
<sequence>
<element name="result" type="string"/>
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MESSAGE TYPE DEFINITION - Definition of the message types used as
part of the port type defintions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<wsdl:message name="TestRequestMessage">
<wsdl:part name="payload" element="client:process"/>
</wsdl:message>
<wsdl:message name="TestResponseMessage">
<wsdl:part name="payload" type="xsd:string"/>
</wsdl:message>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PORT TYPE DEFINITION - A port type groups a set of operations into
a logical service unit.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!-- portType implemented by the Test BPEL process -->
<wsdl:portType name="Test">
<wsdl:operation name="process">
<wsdl:input message="client:TestRequestMessage"/>
<wsdl:output message="client:TestResponseMessage"/>
</wsdl:operation>
</wsdl:portType>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PARTNER LINK TYPE DEFINITION
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<plnk:partnerLinkType name="Test">
<plnk:role name="TestProvider">
<plnk:portType name="client:Test"/>
</plnk:role>
</plnk:partnerLinkType>
</wsdl:definitions>

例6-76に、invokeアクティビティおよびreplyアクティビティに定義されたtoPart要素を含む.bpelファイルを示します。これは、例6-77に示すWSDLファイルに定義されている操作にマップされます。invokeアクティビティのコピー操作では、fromVariable属性で示される変数から、匿名の一時WSDL変数requestのパートにデータがコピーされます。replyアクティビティのコピー操作では、fromVariable属性で示される変数から、匿名の一時WSDL変数outputのパートにデータがコピーされます。

例6-76 ToParts要素を含むBPELファイル

<sequence>
<!-- receive input from requester -->
<receive name="receiveInput" partnerLink="client" portType="tns:Test"
operation="process" variable="input" createInstance="yes"/>
<assign>
<copy>
<from>$input.payload</from>
<to>$request</to>
</copy>
</assign>
<invoke name="invokeDummyService" partnerLink="DummyService"
portType="tns:DummyPortType"
operation="process" outputVariable="response">
<toParts>
<toPart part="payload" fromVariable="request"/>
</toParts>
</invoke>
<assign>
<copy>
<from>$response</from>
<to>$output</to>
</copy>
</assign>
<!-- respond output to requester -->
<reply name="replyOutput" partnerLink="client"
portType="tns:Test" operation="process">
<toParts>
<toPart part="payload" fromVariable="output"/>
</toParts>
</reply>
</sequence>

例6-77 操作を定義するWSDLファイル

<?xml version="1.0"?>
<definitions name="ch10.3toParts"
targetNamespace="http://samples.otn.com/bpel2.0/ch10.3"
xmlns:tns="http://samples.otn.com/bpel2.0/ch10.3"
xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"
xmlns="http://schemas.xmlsoap.org/wsdl/"
>

<types>
<schema attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://samples.otn.com/bpel2.0/ch10.3"
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="input" type="string"/>
<element name="output" type="string"/>
</schema>
</types>

<message name="TestRequestMessage">
<part name="payload" element="tns:input"/>
</message>
<message name="TestResultMessage">
<part name="payload" element="tns:output"/>
</message>
<portType name="Test">
<operation name="process">
<input message="tns:TestRequestMessage"/>
<output message="tns:TestResultMessage"/>
</operation>
</portType>

<plnk:partnerLinkType name="Test">
<plnk:role name="TestProvider" portType="tns:Test"/>
</plnk:partnerLinkType>

</definitions>

例6-78に、pickアクティビティおよびinvokeアクティビティに定義されたfromParts要素を含む.bpelファイルを示します。これは、例6-79に示すWSDLファイルに定義されている操作にマップされます。pickアクティビティのコピー操作では、toVariable属性で示される変数から、匿名の一時WSDL変数requestのパートにデータがコピーされます。invokeアクティビティのコピー操作では、toVariable属性で示される変数から、匿名の一時WSDL変数responseのパートにデータがコピーされます。

例6-78 FromParts要素を含むBPELファイル

<sequence>
<!-- receive input from requester -->
<pick createInstance="yes">
<onMessage partnerLink="client" portType="tns:Test"
operation="process">
<fromParts>
<fromPart part="payload" toVariable="request"/>
</fromParts>
<empty/>
</onMessage>
</pick>
<invoke name="invokeDummyService" partnerLink="DummyService"
portType="tns:DummyPortType"
operation="process" inputVariable="request">
<fromParts>
<fromPart part="payload" toVariable="response"/>
</fromParts>
</invoke>
<assign>
<copy>
<from>concat($response, " ", $response)</from>
<to>$request</to>
</copy>
</assign>
<invoke name="invokeDummyService" partnerLink="DummyService"
portType="tns:DummyPortType"
operation="process2" inputVariable="request">
<fromParts>
<fromPart part="payload" toVariable="response"/>
</fromParts>
</invoke>
<assign>
<copy>
<from>$response</from>
<to>$output.payload</to>
</copy>
</assign>
<!-- respond output to requester -->
<reply name="replyOutput" partnerLink="client"
portType="tns:Test" operation="process" variable="output"/>
</sequence>

例6-79 操作を定義するWSDLファイル

<?xml version="1.0"?>
<definitions name="BPEL20TestCh10.4"
targetNamespace="http://samples.otn.com/bpel2.0/ch10.4"
xmlns:tns="http://samples.otn.com/bpel2.0/ch10.4"
xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"
xmlns="http://schemas.xmlsoap.org/wsdl/"
>

<types>
<schema attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://samples.otn.com/bpel2.0/ch10.4"
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="input" type="string"/>
<element name="output" type="string"/>
</schema>
</types>

<message name="TestRequestMessage">
<part name="payload" element="tns:input"/>
</message>
<message name="TestResultMessage">
<part name="payload" element="tns:output"/>
</message>
<portType name="Test">
<operation name="process">
<input message="tns:TestRequestMessage"/>
<output message="tns:TestResultMessage"/>
</operation>
</portType>

<plnk:partnerLinkType name="Test">
<plnk:role name="TestProvider" portType="tns:Test"/>
</plnk:partnerLinkType>

</definitions>

6.18 BPEL 2.0でのプロセス定義のインポート

import要素を使用して、BPELプロセスが依存する定義を指定できます。例6-80に示すように、バージョン2.0のBPELプロセスを作成すると、import要素が.bpelファイルに追加されます。

例6-80 import要素

<process name="Loan Flow"
. . .
. . .
<import namespace="http://xmlns.oracle.com/SOAApplication/SOAProject/LoanFlow"
location="LoanFlow.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>

例6-81に示すように、import要素を使用して、ネームスペースのないスキーマをインポートすることもできます。

例6-81 ネームスペースのないスキーマのインポート

<process name="Loan Flow"
. . .
. . .
<import location="xsd/NoNamespaceSchema.xsd"
importType="http://www.w3.org/2001/XMLSchema"/>

例6-82に示すように、import要素を使用して、ネームスペースを持つスキーマをインポートすることもできます。

例6-82 ネームスペースを持つスキーマのインポート

<process name="Loan Flow"
. . .
. . .
<import namespace="http://www.example.org" location="xsd/TestSchema.xsd"
importType="http://www.w3.org/2001/XMLSchema"/>

import要素は、外部XMLスキーマまたはWSDL定義に対する依存性を宣言するために用意されています。任意の数のimport要素をprocess要素の子として表示できます。各import要素には次の属性を含めることができます。

- namespace: インポートされた定義を指定する絶対URIを識別します。これはオプションの属性です。ネームスペースが指定されている場合、インポートされた定義はそのネームスペースに含まれている必要があります。ネームスペースが指定されていない場合、これはネームスペースで修飾されていない外部定義が使用中であることを示します。インポートされた定義にtargetNamespaceの指定を含めないでください。

- location: 重要な定義を含むドキュメントの場所を指定するURIを識別します。これはオプションの属性です。相対URIを指定できます。location属性が指定されていない場合、プロセスでは外部定義が使用されます。ただし、これらの定義の配置先を示す文は指定されません。

- importType: インポートするドキュメントのタイプを識別します。これは、ドキュメントで使用されるエンコーディング言語を指定する絶対URIである必要があります。これは必須属性です。

- XMLスキーマ1.0ドキュメントをインポートする場合は、この属性の値を"http://www.w3.org/2001/XMLSchema"に設定する必要があります。

- WSDL 1.1ドキュメントをインポートする場合は、値を"http://schemas.xmlsoap.org/wsdl/"に設定する必要があります。この属性に他の値を指定することもできます。

詳細は、「Web Services Business Process Execution Language Specification Version 2.0」の第5.4項を参照してください。

6.19 配列に類似したXMLデータ・シーケンスの操作

データ・シーケンスは、XMLで使用される最も基本的なデータ・モデルの1つです。しかし、データ・シーケンスの操作が重要な場合があります。BPELプロセス・サービス・コンポーネントで使用される最も一般的なデータ・シーケンス・パターンの1つが配列です。XMLスキーマに基づき、データ・シーケンス定義はその属性maxOccursから識別できます。この属性が、1より大きい値に設定されているか、unboundedとしてマークされています。詳細は、http://www.w3.org/TRのXML Schema Specificationを参照してください。

この項の例では、BPELのデータ・シーケンスを操作するいくつかの基本的な方法を示します。ただし、ループの実行、エンドポイントの動的参照など、関連するその他の要件が存在します。次の項では、データ・シーケンス操作の特定の要件について説明します。

6.19.1 配列を使用するXMLデータ・シーケンスへの静的な索引付け方法

必要な要素索引が設計時にわかっているとき、XPath機能を使用してデータ・シーケンス要素を選択する方法を次の2つの例で示します。これらのケースでは、最初の要素です。

例6-83の中で、addresses[1]はアドレスのデータ・シーケンスの最初の要素を選択します。

例6-83 データ・シーケンス要素の選択

<assign>
<!-- get the first address and assign to variable address -->
<copy>
<from variable="input" part="payload"
query="/tns:invalidLoanApplication/autoloan:application
/autoloan:customer/autoloan:addresses[1]"/>
<to variable="address"/>
</copy>
</assign>

この問合せで、addresses[1]はaddresses[position()=1]と等価で、positionはコアXPath関数の1つです(「XML Path Language (XPath) Specification」の第2.4項と4.1項を参照してください)。例6-84の問合せでは、position関数を明示的にコールして、アドレスのデータ・シーケンスの最初の要素を選択します。次に、そのアドレスのstreet要素(アクティビティで変数street1に割り当てられます)を選択します。

例6-84 position関数の使用

<assign>
<!-- get the first address's street and assign to street1 -->
<copy>
<from variable="input" part="payload"
query="/tns:invalidLoanApplication/autoloan:application
/autoloan:customer/autoloan:addresses[position()=1]
/autoloan:street"/>
<to variable="street1"/>
</copy>
</assign>

WSDLファイルで入力変数の定義とそのペイロード・パートを確認する際、addressesフィールドの定義に到達するまでに、いくつかのレベルを下っていきます。そこで、maxOccurs="unbounded"属性が見つかります。 2つのXPath索引付けメソッドは機能的には同じであり、どちらを使用してもかまいません。

6.19.2 SOAPでエンコードされた配列の使用方法

Oracle SOA Suiteでは、SOAP RPCでエンコードされた配列をサポートしています。このサポートにより、Oracle BPEL Process Managerは、SOAP 1.1配列を使用するSOAP Webサービス(RPCでエンコードされた)をコールするクライアントとして機能できます。

例6-85に、myFavoriteNumbersというSOAP配列ペイロードの例を示します。

例6-85 SOAP配列ペイロード

<myFavoriteNumbers SOAP-ENC:arrayType="xsd:int2">
<number>3</number>
<number>4</number>
</myFavoriteNumbers>

また、スキーマの要素の属性attributeFormDefaultおよびelementFormDefaultが"unqualified"に設定されていることを確認してください。例6-86に詳細を示します。

例6-86 スキーマ要素の属性

attributeFormDefault="unqualified" elementFormDefault="unqualified"
targetNamespace="java:services" xmlns:s0="http://schemas.xmlsoap.org/wsdl/"
xmlns:xs="http://www.w3.org/2001/XMLSchema">

次の機能はサポートされていません。

- SOAP配列を使用するBPELによって公開されるサービス

- 部分的に送信される配列

- スパース配列

- 多次元配列

SOAPでエンコードされた配列を使用する手順は、次のとおりです。

例6-87に、BPELプロジェクトにbpelx:appendタグの付いたSOAP配列を準備する手順を示します。

1. Oracle JDeveloperでBPELプロセスを作成します。

2. 起動用のぺイロードを準備します。例6-87のbpelx:appendは、アイテムをSOAP配列に追加するために使用されます。

例6-87 SOAP配列

<bpws:assign>
<bpws:copy>
<bpws:from variable="input" part="payload" query="/tns:value"/>
<bpws:to variable="request" part="strArray"
query="/strArray/JavaLangstring"/>
</bpws:copy>
</bpws:assign>
<bpws:assign>
<bpelx:append>
<bpelx:from variable="request" part="strArray"
query="/strArray/JavaLangstring1"/>
<bpelx:to variable="request" part="strArray" query="/strArray"/>
</bpelx:append>
</bpws:assign>

3. 次のネームスペースをWSDLファイルにインポートします。WSDLスキーマ要素にインポート文が欠落している場合、Oracle JDeveloperではSOAP-ENCタグを認識しません。

<xs:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />

6.19.2.1 BPEL 2.0のSOAPでエンコードされた配列

SOAPでエンコードされた配列は、BPEL仕様のバージョン2.0を使用するBPELプロジェクトでサポートされています。例6-88に、BPEL 2.0プロジェクトのSOAPでエンコードされた配列を持つassignアクティビティのサンプルを示します。

例6-88 BPEL 2.0のassignアクティビティのSOAPでエンコードされた配列

<assign name="Assign_1">
<copy>
<from>$inputVariable.payload</from>
<to>$Invoke_1_echoArray_InputVariable.strArray/JavaLangstring[1]</to>
</copy>
<extensionAssignOperation>
<bpelx:append>
<bpelx:from variable="Invoke_1_echoArray_InputVariable"
part="strArray">
<bpelx:query>
JavaLangstring[1]
</bpelx:query>
</bpelx:from>
<bpelx:to variable="Invoke_1_echoArray_InputVariable"
part="strArray">
</bpelx:to>
</bpelx:append>
</extensionAssignOperation>
</assign>

例6-89に、BPEL 2.0プロジェクトのSOAPでエンコードされた配列を持つinvokeアクティビティのサンプルを示します。

例6-89 BPEL 2.0のinvokeアクティビティのSOAPでエンコードされた配列

<invoke name="Invoke1" partnerLink="FileOut"
portType="ns3:Write_ptt" operation="Write"
bpelx:invokeAsDetail="no">
<toParts>
<toPart part="body" fromVariable="ArrayVariable"/>
</toParts>
</invoke>

6.19.2.2 スキーマ内でwsdl:arrayType属性を使用したSOAP配列の宣言

SOAPでエンコードされた配列のWSDLでは、スキーマ内でwsdl:arrayType属性を使用してSOAP配列を宣言できます。例6-90に詳細を示します。

例6-90 wsdl:arrayType属性を使用したSOAP配列の宣言

<xsd:complexType name="UserObject">
<xsd:sequence>
<xsd:element name="userInformation" nillable="true"
type="n5:ArrayOfKeyValuePair"/>
<xsd:element name="username" nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="ArrayOfKeyValuePair">
<xsd:complexContent>
<xsd:restriction base="soapenc:Array">
<xsd:attribute ref="soapenc:arrayType"
wsdl:arrayType="n5:KeyValuePair[]"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="KeyValuePair">
<xsd:sequence>
<xsd:element name="key" nillable="true" type="xsd:string"/>
<xsd:element name="value" nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>

例6-91に、BPEL 1.1でSOAPでエンコードされた配列を作成してアクセスする方法を示します。

例6-91 BPEL 1.1でのSOAPでエンコードされた配列へのアクセス

<bpws:copy>
<bpws:from>
<ns1:userInformation soapenc:arrayType="com1:KeyValuePair[1]"
xmlns:ns1="http://www.schematargetnamespace.com/wsdl/Impl/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/>
<ns1:KeyValuePair
xmlns:ns1="http://www.schematargetnamespace.com/wsdl/Impl/">
<key>testkey</key>
<value>testval1</value>
</ns1:KeyValuePair>
</ns1:userInformation>
</bpws:from>
<bpws:to variable="Inputvar" part="userObject"
query="/userObject/userInformation"/>

</bpws:copy>
<!--Update elements with SOAPENC Array-->
<bpws:copy>
<bpws:from variable="KeyValueVar" part="KeyValuePair"
query="/KeyValuePair/ns2:key"/>
<bpws:to variable="Inputvar" part="userObject'
query="//*[local-name()='KeyValuePair'][1]/*[local-name()='key']"/>
</bpws:copy>

<bpws:copy>
<bpws:from variable="KeyValueVar" part="KeyValuePair"
query="/KeyValuePair/client:value"/>
<bpws:to variable="Inputvar" part="userObject"
query="//*[local-name()='KeyValuePair'][1]/*[local-name()='value']"/>

</bpws:copy>
<!-- Append elements within SOAPENC Array -->
<bpelx:append>
<bpelx:from variable="Inputvar" part="userObject"
query="//*[local-name()='KeyValuePair'][1]"/>
<bpelx:to variable="Inputvar" part="userObject"
query="/userObject/userInformation"/>
</bpelx:append>

6.19.3 シーケンス・サイズの決定方法

データ・シーケンスの実行時のサイズ、つまりシーケンス内のノードまたはデータ項目の数を知る必要がある場合は、XPath組込み関数count()とBPEL組込み関数getVariableData()を組み合せて使用することで取得できます。

例6-92のコードは、itemシーケンス内の要素数を計算し、それを整数変数lineItemSizeに割り当てています。

例6-92 シーケンス・サイズの決定

<assign>
<copy>
<from expression="count(bpws:getVariableData('outpoint', 'payload',
'/p:invoice/p:lineItems/p:item')"/>
<to variable="lineItemSize"/>
</copy>
</assign>

6.19.4 式の末尾へのXPathの適用による動的な索引付け方法

多くの場合、データ・シーケンスへの索引付けに動的な値が必要になることがあります。つまり、シーケンスのn番目のノード(nの値は実行時に定義)の取得が必要な場合です。この項では、式の末尾にXPathを適用して動的な索引付けを行う方法について説明します。

6.19.4.1 getVariableDataの結果の末尾へのXPathの適用

例6-93に示す動的索引付け方法では、XPathをbpws:getVariableData()の最後の引数として使用するのではなく、bwps:getVariableData()の結果の末尾にXPathを適用します。末尾のXPathは、位置述語内の整数型の索引変数(つまり、[...])を参照します。

例6-93 動的索引付け

<variable name="idx" type="xsd:integer"/>
...
<assign>
<copy>
<from expression="bpws:getVariableData('input','payload'
)/p:line-item[bpws:getVariableData('idx')]/p:line-total" />
<to variable="lineTotalVar" />
</copy>
</assign>

実行時に、idx整数変数の値として2が格納されるとします。例6-93のfrom内の式は、例6-94のものと同等です。

例6-94 同等のフォーマット

<from expression="bpws:getVariableData('input','payload'
)/p:line-item[2]/p:line-total" />

XPathがbwps:getVariableData()関数の末尾に使用される場合とこの関数内で使用される場合では、XPathの使用方法に多少の違いがあります。同じ例(payloadが要素p:invoiceのメッセージ・パートである例)を使用すると、XPathをgetVariableData()関数内で使用する場合は、ルート要素名(/p:invoice)をXPathの先頭に指定する必要があります。

例6-95に詳細を示します。

例6-95 ルート要素名の指定

bpws:getVariableData('input', 'payload','/p:invoice/p:line-item[2]/p:line-total')

XPathをbwps:getVariableData()関数の末尾に使用する場合、ルート要素名をXPath内に指定する必要はありません。

例:

bpws:getVariableData('input', 'payload')/p:line-item[2]/p:line-total

これは、getVariableData()関数で返されるノードがルート要素であるためです。ルート要素名をXPathで再指定すると重複になり、XPathの標準セマンティクスでは不正となります。

6.19.4.2 bpelx:append拡張要素によるシーケンスへの新しい項目の追加

assignアクティビティでbpelx:append拡張要素を使用すると、BPELプロセス・サービス・コンポーネントは既存の親要素に新しい要素を追加できます。例6-96に例を示します。

例6-96 assignアクティビティのbpelx:append拡張要素

<assign name="assign-3">
<copy>
<from expression="bpws:getVariableData('idx')+1" />
<to variable="idx"/>
</copy>
<bpelx:append>
<bpelx:from variable="partInfoResultVar" part="payload" />
<bpelx:to variable="output" part="payload" />
</bpelx:append>
...
</assign>

この例のbpelx:appendロジックにより、partInfoResultVar変数のペイロード要素が、output変数のペイロード要素に子として追加されます。つまり、output変数のペイロード要素が親要素として使用されます。

6.19.4.3 データ・シーケンスのマージ

2つのシーケンスを単一のデータ・シーケンスにマージできます。このパターンは、データ・シーケンスが配列内にある場合(つまり、互換性のあるタイプのデータ項目のシーケンスの場合)によく使用されます。例6-97に示すassignの下の2つのappend操作は、データ・シーケンスのマージ方法を示しています。

例6-97 append操作によるデータ・シーケンスのマージ

<assign>
<!-- initialize "mergedLineItems" variable
to an empty element -->
<copy>
<from> <p:lineItems /> </from>
<to variable="mergedLineItems" />
</copy>
<bpelx:append>
<bpelx:from variable="input" part="payload"
query="/p:invoice/p:lineItems/p:lineitem" />
<bpelx:to variable="mergedLineItems" />
</bpelx:append>
<bpelx:append>
<bpelx:from variable="literalLineItems"
query="/p:lineItems/p:lineitem" />
<bpelx:to variable="mergedLineItems" />
</bpelx:append>
</assign>

6.19.4.4 空要素の配列と等価の機能の生成

genEmptyElem関数では、空要素の配列と等価の機能がXML構造に生成されます。この関数は、次の引数をとります。

genEmptyElem('ElemQName',int?, 'TypeQName'?, boolean?)

次の点に注意してください。

- 最初の引数では、空要素のQNameを指定します。

- 2番目の引数はオプションで整数型であり、空要素の数を指定します。指定されていない場合、デフォルトのサイズは1です。

- 3番目の引数はオプションで、生成される空の名前のxsi:typeとなるQNameを指定します。このxsi:typeパターンは、SOAPENC:Arrayに相当します。指定されていないか、空の文字列である場合、xsi:type属性は生成されません。

- 4番目のオプションのブール型引数は、要素がXSD-nillableの場合に、生成される空の要素がXSI - nilかどうかを指定します。デフォルト値はfalseです。指定されていないか、falseである場合、xsi:nilは生成されません。

例6-98に、poの下で10個の空の<lineItem>要素を使用して注文書(PO)を初期化するappend文を示します。

例6-98 append文

<bpelx:assign>
<bpelx:append>
<bpelx:from expression="ora:genEmptyElem('p:lineItem',10)" />
<bpelx:to variable="poVar" query="/p:po" />
</bpelx:append>
</bpelx:assign>

例6-98のgenEmptyElem関数は、例6-99のように埋込みXQuery式で置き換えることができます。

例6-99 埋込みXQuery式

ora:genEmptyElem('p:lineItem',10)
== for $i in (1 to 10) return <p:lineItem />

この関数により生成される空要素は、通常は無効なXMLデータです。空要素の作成後に、さらにデータの初期化を実行します。前述と同じ例を使用して、次の操作を実行できます。

- 空のlineItem要素に属性要素と子要素を追加します。

- copy操作を実行して空要素を置き換えます。たとえば、flowNアクティビティの下で、この等価配列内の個別エントリにWebサービスの結果からコピーします。

6.19.5 配列識別子の使用に関する注意事項

ネイティブ・フォーマット・ビルダー配列識別子環境での処理には、ノードの親ノードに関する情報が必要です。reportSAXEvents APIが使用されるため、通常、この情報はアウトバウンド・メッセージ・シナリオには使用できません。ネイティブ・スキーマのnxsd:useArrayIdentifiersをtrueに設定することで、アウトバウンド・メッセージ・シナリオにDOM解析を使用できるようになります。大規模なペイロードによりパフォーマンスの低下につながる可能性があるため、この設定には注意が必要です。例6-100に詳細を示します。

例6-100 配列識別子

<?xml version="1.0" ?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
targetNamespace="http://xmlns.oracle.com/pcbpel/demoSchema/csv"
xmlns:tns="http://xmlns.oracle.com/pcbpel/demoSchema/csv"
elementFormDefault="qualified"
attributeFormDefault="unqualified" nxsd:encoding="US-ASCII"
nxsd:stream="chars" nxsd:version="NXSD" nxsd:useArrayIdentifiers="true">
<xsd:element name="Root-Element">
....
</xsd:element>
</xsd:schema>

6.20 文字列からXML要素への変換

サービスは文字列を返すように定義されることがありますが、文字列の内容は実際にはXMLデータです。問題は、BPELではXMLデータの操作(XPath問合せや式などを使用)はサポートされていますが、変数またはフィールドが文字列型の場合にこの機能が使用できないことです。Javaでは、DOM関数を使用して文字列を構造化されたXMLオブジェクト・タイプに変換します。同じことが、BPEL XPath関数parseEscapedXMLを使用して実行できます。

parseEscapedXMLの詳細は、B.2.49項「parseEscapedXML」を参照してください。

6.20.1 文字列からXML要素への変換方法

parseEscapedXML関数はXMLデータを受け取り、DOMによって解析し、型指定されたBPEL変数に割当て可能な構造化XMLデータを返します。例6-101に例を示します。

例6-101 文字列からXML要素への変換

<!-- execute the XPath extension function
parseEscapedXML('&lt;item&gt;') and assign to a variable
-->
<assign>
<copy>
<from expression="oratext:parseEscapedXML(
'&lt;item xmlns=&quot;http://samples.otn.com&quot;
sku=&quot;006&quot;&gt;
&lt;description&gt;sun ultra sparc VI server
&lt;/description&gt;
&lt;price&gt;1000
&lt;/price&gt;
&lt;quantity&gt;2
&lt;/quantity&gt;
&lt;lineTotal&gt;2000
&lt;/lineTotal&gt;
&lt;/item&gt;')"/>
<to variable="escapedLineItem"/>
</copy>
</assign>

6.21 ドキュメント形式とRPC形式のWSDLの違いの理解

この章のこれまでの項で示した例は、例6-102のように、メッセージがXMLスキーマelementで定義されているドキュメント形式のWSDLファイルでした。

例6-102 XMLスキーマ要素の定義

<message name="LoanFlowRequestMessage">
<part name="payload" element="s1:loanApplication"/>
</message>

これは、例6-103に示すように、メッセージがXMLスキーマのtypeで定義される、RPC形式のWSDLファイルとは異なります。

例6-103 RPC形式タイプ定義

<message name="LoanFlowRequestMessage">
<part name="payload" type="s1:LoanApplicationType"/>
</message>

6.21.1 RPC形式ファイルの使用方法

これは、この章のこれまでの情報とは異なります。これらの2つのWSDLメッセージ形式では、XPath問合せの作成方法に相違があります。RPC形式のメッセージの場合、最上位要素(およびXPath問合せ文字列の最初のノード)はパート名(例6-103ではpayload)です。ドキュメント形式メッセージでは、最上位ノードは要素名(たとえばloanApplication)です。

例6-104および例6-105は、LoanServicesという名前のアプリケーションがRPC形式の場合に、XPath問合せ文字列がどのようになるかを示しています。

例6-104 RPC形式のWSDLファイル

<message name="LoanServiceResultMessage">
<part name="payload" type="s1:LoanOfferType"/>
</message>

<complexType name="LoanOfferType">
<sequence>
<element name="providerName" type="string"/>
<element name="selected" type="boolean"/>
<element name="approved" type="boolean"/>
<element name="APR" type="double"/>
</sequence>
</complexType>

例6-105 RPC形式のBPELファイル

<variable name="output"
messageType="tns:LoanServiceResultMessage"/>
...
<assign>
<copy>
<from expression="9.9"/>
<to variable="output" part="payload" query="/payload/APR"/>
</copy>
</assign>

6.22 BPELでのSOAPヘッダーの操作

BPELの通信アクティビティ(invoke、receive、replyおよびonMessage)は、指定のメッセージ変数を介してメッセージを送受信します。これらのデフォルト・アクティビティでは、各方向で1つの変数の操作が許可されます。たとえば、invokeアクティビティにはinputVariableおよびoutputVariable属性があります。この2つの属性にそれぞれ変数を1つ指定できます。関連する特定の操作で使用するペイロード・メッセージが各方向で1つのみの場合は、これで十分です。

ただし、WSDLは1つの操作での複数のメッセージをサポートしています。SOAPの場合、SOAPヘッダーとしてメイン・ペイロード・メッセージとともに複数のメッセージを送信できます。ただし、BPELのデフォルトの通信アクティビティは、追加のヘッダー・メッセージに対応できません。

Oracle BPEL Process Managerでは、デフォルトのBPEL通信アクティビティをbpelx:headerVariable拡張要素で拡張することで、この問題を解決しています。例6-106に、拡張要素の構文を示します。

例6-106 bpelx:headerVariable拡張要素

<invoke bpelx:inputHeaderVariable="inHeader1 inHeader2 ..."
bpelx:outputHeaderVariable="outHeader1 outHeader2 ..."
.../>

<receive bpelx:headerVariable="inHeader1 inHeader2 ..." .../>
<onMessage bpelx:headerVariable="inHeader1 inHeader2 ..." .../>
<reply bpelx:headerVariable="inHeader1 inHeader2 ..." .../>

6.22.1 BPELでのSOAPヘッダーの受信方法

この項では、SOAPヘッダーを受信するBPELファイルとWSDLファイルの作成方法を、例をあげて説明します。

BPELでSOAPヘッダーを受信する手順は、次のとおりです。

1. ヘッダー・メッセージとそれをSOAPリクエストにバインドするSOAPバインディングを宣言するWSDLファイルを作成します。例6-107に例を示します。

例6-107 WSDLファイルのコンテンツ

<!-- custom header -->
<message name="CustomHeaderMessage">
<part name="header1" element="tns:header1"/>
<part name="header2" element="tns:header2"/>
</message>

<binding name="HeaderServiceBinding" type="tns:HeaderService">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="initiate">
<soap:operation style="document" soapAction="initiate"/>
<input>
<soap:header message="tns:CustomHeaderMessage"
part="header1" use="literal"/>
<soap:header message="tns:CustomHeaderMessage"
part="header2" use="literal"/>
<soap:body use="literal"/>
</input>
</operation>
</binding>

2. 例6-108に示すように、ヘッダー・メッセージ変数を宣言し、bpelx:headerVariableを使用してヘッダーを受信するBPELソース・ファイルを作成します。

例6-108 bpelx:headerVariableの使用

<variables>  <variable name="input"
messageType="tns:HeaderServiceRequestMessage"/>
<variable name="event"
messageType="tns:HeaderServiceEventMessage"/>
<variable name="output"
messageType="tns:HeaderServiceResultMessage"/>
<variable name="customHeader"
messageType="tns:CustomHeaderMessage"/>
</variables>

<sequence>
<!-- receive input from requester -->
<receive name="receiveInput" partnerLink="client"
portType="tns:HeaderService" operation="initiate"
variable="input"
bpelx:headerVariable="customHeader"
createInstance="yes"/>

6.22.2 BPELでのSOAPヘッダーの送信方法

この項では、SOAPヘッダーの送信方法を例をあげて説明します。

BPELでSOAPヘッダーを送信する手順は、次のとおりです。

1. composite.xmlで参照を定義して、HeaderServiceを参照します。

2. 例6-109に示すように、カスタム・ヘッダー変数を定義して操作し、bpelx:inputHeaderVariableを使用して送信します。

例6-109 bpelx:inputHeaderVariableの使用

<variables>
<variable name="input" messageType="tns:HeaderTestRequestMessage"/>
<variable name="output" messageType="tns:HeaderTestResultMessage"/>
<variable name="request" messageType="services:HeaderServiceRequestMessage"/>
<variable name="response" messageType="services:HeaderServiceResultMessage"/>
<variable name="customHeader"messageType="services:CustomHeaderMessage"/>
</variables>
...
<!-- initiate the remote process -->
<invoke name="invokeAsyncService"
partnerLink="HeaderService"
portType="services:HeaderService"
bpelx:inputHeaderVariable="customHeader"
operation="initiate"
inputVariable="request"/>

6.23 BPEL 2.0での拡張ネームスペースの宣言

BPELバージョン2.0のプロセスを拡張して、カスタム拡張ネームスペース宣言を追加できます。mustUnderstand属性を使用すると、カスタム・ネームスペースがBPELプロセスで認識される必要があるセマンティックを持つかどうかを示すことができます。

mustUnderstandがyesに設定された1つ以上の拡張機能がBPELプロセスでサポートされていない場合、プロセス定義は拒否されます。

拡張機能はextensions要素に定義されます。例6-110に詳細を示します。

例6-110 拡張ネームスペース宣言の構文

<process ...>
...
<extensions>?
<extension namespace="myURI" mustUnderstand="yes|no" />+
</extensions>
...
</process>

extension要素のコンテンツは、標準のBPELネームスペースとは異なるネームスペースで修飾された1つの要素である必要があります。

拡張宣言の詳細は、次のURLにある「Web Services Business Process Execution Language Version 2.0 Specification」を参照してください。

http://www.oasis-open.org

6.23.1 拡張ネームスペースの宣言方法

拡張ネームスペースを宣言する手順は、次のとおりです。

1. BPEL 2.0プロセスで、Oracle BPELデザイナの上にある「拡張機能」アイコンをクリックします。
「拡張機能」ダイアログが表示されます。

2. 「拡張機能」フォルダを選択し、「追加」アイコンをクリックします。
「拡張機能」ダイアログが表示されます。

3. 「ネームスペース」フィールドに、宣言する拡張ネームスペースを入力します。このネームスペースは、標準のBPELネームスペースとは異なるものにする必要があります。

4. 拡張機能がBPELプロセスで認識されるようにするには、「認識する必要がある」チェック・ボックスを選択します。

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

6. 「閉じる」をクリックします。

6.23.2 拡張機能作成時の処理内容

設計の完了後、.bpelプロセスは例6-111のようになります。

例6-111 カスタム・ネームスペースを持つ拡張機能

<extensions>
<extension namespace="http://xmlns.mycompany.com/myNamespace"
mustUnderstand="yes"/>
</extensions>

7 BPELプロセスからの同期Webサービスの起動

この章では、BPELプロセスから同期Webサービスを起動する方法について説明します。ここでは、同期起動の実行に必要なコンポーネントの設定方法、およびこれらのコンポーネントのコード方法についても示します。また、タイムアウト値を指定し、同期BPELプロセスを使用して、一方向のOracle Mediatorをコールする方法についても説明します。

この章には次の項が含まれます:

- 第7.1項「同期Webサービスの起動に関する概要」

- 第7.2項「同期Webサービスの起動」

- 第7.3項「永続同期プロセスのトランザクションのタイムアウト値の指定」

- 第7.4項「同期BPELプロセスを使用した一方向メディエータのコール」

入力文字列が使用され、Helloという接頭辞を追加した文字列を返す単純なHello Worldサンプル(bpel-101-HelloWorld)については、Oracle SOA Suiteサンプルを参照してください。

7.1 同期Webサービスの起動に関する概要

同期Webサービスは、起動に対してレスポンスを即時に返します。BPELは、パートナ・リンクを介して同期Webサービスに接続し、データを送信し、同一の同期起動でリプライを受信できます。

同期起動には、次のコンポーネントが必要です。

- パートナ・リンク
タスクを実行するためにBPELプロセス・サービス・コンポーネントが接続するWebサービスの場所とロールを定義し、WebサービスとBPELプロセス・サービス・コンポーネントの間で情報を受け渡すための変数を定義します。パートナ・リンクは、BPELプロセス・サービス・コンポーネントがコールする各Webサービスに対して必要です。パートナ・リンクは次のいずれかの方法で作成できます。

- Webサービスを「コンポーネント・パレット」の「サービス・アダプタ」セクションから「公開されたサービス」または「外部参照」スイムレーンにドラッグする場合は、SOAコンポジット・エディタで作成します。詳細は、第2.3項「サービス・バインディング・コンポーネントの追加」または第2.4項「参照バインディング・コンポーネントの追加」を参照してください。

- 「パートナ・リンク」アイコンを「コンポーネント・パレット」の「BPELコンストラクト」セクションから「パートナ・リンク」スイムレーンにドラッグする場合は、Oracle BPELデザイナで作成します。この章では、この方法について説明します。

- invokeアクティビティ
データを送受信するためのポートを、BPELプロセス・サービス・コンポーネント内でオープンします。たとえば、このポートは、クレジット・カード認可サービスを使用して顧客の与信が受諾可能であることを検証する情報の取得に使用します。同期コールバックの場合、関数の送受信に必要なポートは1つのみです。

7.2 同期Webサービスの起動

この項では同期起動操作について説明します。WebLogic Fusion Order DemoアプリケーションのOrderProcessor.bpelファイルを例として使用します。

7.2.1 同期Webサービスの起動方法

同期Webサービスを起動する手順は、次のとおりです。

1. Oracle BPELデザイナの「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. 必要なパートナ・リンク、invokeアクティビティ、scopeアクティビティおよびassignアクティビティをデザイナにドラッグします。

3. それぞれのダイアログを編集します。
図7-1 は、Fusion Order DemoのOrderProcessor.bpelファイルの「Scope_AuthorizeCreditCard」scopeアクティビティのダイアグラムを示しています。単純な一連のアクションが定義されています。

図7-1 OrderProcessor.bpelのダイアグラム

「図7-1 OrderProcessor.bpelのダイアグラム」の説明

次のアクションを実行します。

1. 「Assign_CreditCardCheckInput」 assignアクティビティによって、クライアントからのデータがパッケージ化されます。assignアクティビティを使用すると、ある変数の内容を別の変数にコピーできます。ここでは、クレジット・カード・タイプ、クレジット・カード番号および購入金額を取得し、それらを「CreditCardAuthorizationService」サービスの入力変数に代入します。

2. 「InvokeCheckCreditCard」 invokeアクティビティによって「CreditCardAuthorizationService」サービスがコールされます。図7-2は、「CreditCardAuthorizationService」Webサービスを示しています。このWebサービスはパートナ・リンクとして定義されています。

図7-2 「CreditCardAuthorizationService」パートナ・リンク

「図7-2 「CreditCardAuthorizationService」パートナ・リンク」の説明

図7-3は、「InvokeCheckCreditCard」invokeアクティビティを示しています。

図7-3 「InvokeCheckCreditCard」invokeアクティビティ

「図7-3 「InvokeCheckCreditCard」invokeアクティビティ」の説明

3. 図7-1の「Switch_EvaluateCCResult」switchアクティビティは、クレジット・カード検証の結果を確認します。switchアクティビティの詳細は、第11.2.1項「BPEL 1.1のswitchアクティビティの作成による条件分岐の定義」を参照してください。

注意:

switchアクティビティは、BPEL 2.0のifアクティビティに置き換えられました。

7.2.2 同期Webサービス起動時の処理内容

パートナ・リンクとinvokeアクティビティを作成すると、同期Webサービスの起動に必要なBPELコードが、適切なBPELおよびWeb Services Description Language(WSDL)ファイルに追加されます。

7.2.2.1 BPELコード内のパートナ・リンク

OrderProcessor.bpelコードでは、パートナ・リンクによって、リンク名とタイプ、およびパートナ・サービスとの相互作用におけるBPELプロセス・サービス・コンポーネントのロールが定義されます。

例7-1は、BPELソース・コードでのCreditCardAuthorizationServiceパートナ・リンク定義を示しています。

例7-1 パートナ・リンク定義

<partnerLink name="CreditCardAuthorizationService"
partnerRole="CreditAuthorizationPort"
partnerLinkType="ns2:CreditCardAuthorizationService"/>

例7-2は、Scope_AuthorizeCreditCardスコープでローカルにアクセスできる変数定義を示しています。これらの変数のタイプは、このプロセス自体のWSDLに定義されています。

例7-2 変数定義

<variable name="lCreditCardInput"
messageType="ns2:CreditAuthorizationRequestMessage"/>
<variable name="lCreditCardOutput"
messageType="ns2:CreditAuthorizationResponseMessage"/>

WSDLファイルによって、次のようなBPELプロセス・サービス・コンポーネントのインタフェースが定義されます。

- それが受け付けるメッセージと返すメッセージ

- サポートされている操作

- その他のパラメータ

7.2.2.2 BPELコード内のパートナ・リンク・タイプとポート・タイプ

WebサービスのCreditCardAuthorizationService.wsdlファイルには、2つのセクションがあります。これらのセクションを使用して、WebサービスとBPELプロセス・サービス・コンポーネントの連携を可能にします。

- partnerLinkType:
BPELプロセス・サービス・コンポーネントとクレジット・カード認可Webサービス間の変換について、次の特性を定義します。

- それぞれが果たすロール(操作)

- 対話でメッセージを受信するためにそれぞれが提供するportType

- portType:
対話内で参加者によって実装される一連の関連操作です。ポート・タイプは、受渡しする情報や、その情報の形式などを定義します。同期起動には、同期プロセスの起動およびレスポンスでのクライアントのコールバックを実行する1つのポート・タイプのみが必要です。非同期コールバック(リプライが即時に行われないもの)には、次の2つのポート・タイプが必要です。

- 1つは、リクエストを送信するため。

- もう1つは、リプライが着信したときに、それを受信するため。

この例では、portType CreditAuthorizationPortが、クレジット・カード・タイプ、クレジット・カード番号および購入金額を受信し、信用調査結果を返します。

例7-3に、partnerLinkTypeおよびportTypeの例を示します。

例7-3 partnerLinkTypeおよびportTypeの定義

<plnk:partnerLinkType name="CreditCardAuthorizationService">
<plnk:role name="CreditAuthorizationPort">
<plnk:portType name="tns:CreditAuthorizationPort"/>
</plnk:role>
</plnk:partnerLinkType>

7.2.2.3 リクエストを実行するためのinvokeアクティビティ

invokeアクティビティには、lCreditCardInputローカル入力変数が含まれています。クレジット・カード認可WebサービスがlCreditCardInputローカル入力変数を使用します。この変数には、顧客のクレジット・カード・タイプ、クレジット・カード番号および購入金額が格納されます。lCreditCardOutput変数は、CreditCardAuthorizationServiceサービスからの信用調査結果を返します。例7-4に詳細を示します。

例7-4 invokeアクティビティ

<invoke name="InvokeCheckCreditCard"
inputVariable="lCreditCardInput"
outputVariable="lCreditCardOutput"
partnerLink="CreditCardAuthorizationService"
portType="ns2:CreditAuthorizationPort"
operation="AuthorizeCredit"/>

7.2.2.4 BPELコードでの同期起動

例7-5に示すBPELコードは、同期起動を実行します。

例7-5 同期起動

<assign name="Assign_CreditCheckInput">
<copy>
<from variable="gOrderInfoVariable"
query="/ns4:orderInfoVOSDO/ns4:OrderTotal"/>
<to variable="lCreditCardInput" part="Authorization"
query="/ns8:AuthInformation/ns8:PurchaseAmount"/>
</copy>
<copy>
<from variable="gOrderInfoVariable"
query="/ns4:orderInfoVOSDO/ns4:CardTypeCode"/>
<to variable="lCreditCardInput" part="Authorization"
query="/ns8:AuthInformation/ns8:CCType"/>
</copy>
<copy>
<from variable="gOrderInfoVariable"
query="/ns4:orderInfoVOSDO/ns4:AccountNumber"/>
<to variable="lCreditCardInput" part="Authorization"
query="/ns8:AuthInformation/ns8:CCNumber"/>
</copy>
</assign>
<invoke name="InvokeCheckCreditCard"
inputVariable="lCreditCardInput"
outputVariable="lCreditCardOutput"
partnerLink="CreditCardAuthorizationService"
portType="ns2:CreditAuthorizationPort"
operation="AuthorizeCredit"/>

詳細は、第3章「SOAサンプル・アプリケーションの概要」を参照してください。

7.3 永続同期プロセスのトランザクションのタイムアウト値の指定

Oracle Enterprise Manager Fusion Middleware ControlのシステムMBeanブラウザで、SyncMaxWaitTimeプロパティを使用して、トランザクションのタイムアウト値を指定できます。SyncMaxWaitTimeプロパティは、非同期方式でコールされる永続同期プロセスに適用されます。BPELプロセス・サービス・コンポーネントが指定時間内にリプライを受信しないと、アクティビティはエラーとなります。詳細は、第7.3.2項「SyncMaxWaitTimeとタイムアウトのない永続同期リクエストに関する注意事項」を参照してください。

7.3.1 トランザクションのタイムアウト値の指定方法

トランザクションのタイムアウト値を指定する手順は、次のとおりです。

1. Oracle Enterprise Manager Fusion Middleware Controlにログインします。

2. 「SOAインフラストラクチャ」メニューから、「SOA管理」→「BPELプロパティ」の順に選択します。

3. 「BPELサービス・エンジン・プロパティ」ページの下部で、「詳細BPEL構成プロパティ」をクリックします。

4. SyncMaxWaitTimeをクリックします。

5. 「値」フィールドに値を秒単位で指定します。

6. 「適用」をクリックします。

7. 「戻る」をクリックします。

7.3.2 SyncMaxWaitTimeとタイムアウトのない永続同期リクエストに関する注意事項

SyncMaxWaitTimeプロパティは、非同期方式でコールされる永続同期プロセスに適用されます。

例7-6に示す定義がBPELプロセスに存在していると仮定します。このプロセスは、breakpointアクティビティがないため、永続プロセスではありません。

例7-6 breakpointアクティビティがないプロセス

<receive name="receiveInput" partnerLink="client" variable="input"
createInstance="yes" />
<assign>
...
</assign>
<reply name="replyOutput" partnerLink="client" variable="output" />

Javaクライアントまたは別のBPELプロセスがこのプロセスをコールすると、assignアクティビティが実行され、replyアクティビティによって出力メッセージがHashMapに設定され、クライアント(実際には配信サービス)が取得できるようになります。replyは最後のアクティビティであるため、スレッドがクライアント側に戻り、リプライ・メッセージの取得が試みられます。リプライ・メッセージはすでに挿入されているため、クライアントは待機せずにリプライで戻ります。

例7-7に示すように、BPELプロセスにbreakpointアクティビティがあると仮定します。

例7-7 breakpointアクティビティがあるプロセス

<receive name="receiveInput" partnerLink="client" variable="input"
createInstance="yes" />
<assign>
...
</assign>
<wait for="'PT10S'" />
<reply name="replyOutput" partnerLink="client" variable="output" />

同期プロセス内部に非同期のアクティビティが存在することは適切ではありませんが、BPELではこの種の設計が禁止されていません。

クライアント(または別のBPELプロセス)がプロセスをコールすると、wait(breakpoint)アクティビティが実行されます。ただし、waitはいくらかの時間が経過した後に非同期スレッドによってバックグラウンドで処理されるため、スレッドの実行はクライアント側に戻ります。クライアント(実際には配信サービス)はリプライ・メッセージの取得を試みますが、プロセス内のリプライ・アクティビティはその時点では実行されていないため、メッセージは存在しません。したがって、クライアント・スレッドはSyncMaxWaitTime値(秒数)に指定されている時間が経過するまで待機します。この時間を超えると、クライアント・スレッドはコール元にタイムアウト例外を返します。待機時間がSyncMaxWaitTime値未満の場合は、非同期のバックグラウンド・スレッドが待機状態から再開し、リプライを実行します。リプライはHashMapに配置され、待機側(クライアント・スレッド)に通知されます。クライアント・スレッドは、リプライ・メッセージを取得して戻ります。

したがって、プロセスの中ほどにブレークポイントがある場合は、同期プロセスの起動にのみSyncMaxWaitTimeが適用されます。ブレークポイントがない場合は、プロセス全体がクライアント・スレッドで実行され、リプライ・メッセージを返します。

7.4 同期BPELプロセスを使用した一方向メディエータのコール

非同期コールバックを使用してバック・エンドで同期リプライをシミュレートしながら、フロント・エンドで同期インタフェースを公開できます。これは、composite.xmlファイルのconfiguration.transactionプロパティがrequiresNewに自動設定されている場合のBPELプロセスのデフォルト動作です。例7-8に詳細を示します。

例7-8 configuration.transactionプロパティ

<component name="BPELProcess1">
<implementation.bpel src="BPELProcess1.bpel"/>
<property name="configuration.transaction" type="xs:string"
many="false">requiresNew</property>
</component>

requiresNew値をお薦めします。クライアントのトランザクションに参加する場合は、configuration.transactionプロパティをrequiredに設定する必要があります。

8 BPELプロセスからの非同期Webサービスの起動

この章では、BPELプロセスからの非同期Webサービスの構成および起動方法について説明します。また、複数のreceiveまたはpickアクティビティで同じパートナ・リンクが使用されている場合に適切なエンドポイントにコールバック・メッセージをルーティングする方法、パートナ・リンク操作レベルで冪等性を管理する方法、実行時に動的パートナ・リンクを作成する方法、動的パートナ・リンク環境でセキュリティ証明書およびWSDLファイルをオーバーライドする方法、およびWS-Addressingを使用する方法について説明します。

この章には次の項が含まれます:

- 第8.1項「非同期Webサービスの起動に関する概要」

- 第8.2項「非同期Webサービスの起動」

- 第8.3項「複数のreceiveまたはpickアクティビティで同じパートナ・リンクが使用されている場合における適切なエンドポイントへのコールバック・メッセージのルーティング」

- 第8.4項「パートナ・リンク操作レベルでの冪等性の管理」

- 第8.5項「実行時に使用するための動的パートナ・リンクの設計時の作成」

- 第8.6項「動的パートナ・リンクを起動する際のセキュリティ証明書のオーバーライド」

- 第8.7項「動的パートナ・リンクのWSDLファイルのオーバーライド」

- 第8.8項「非同期サービスでのWS-Addressingの使用」

8.1 非同期Webサービスの起動に関する概要

非同期メッセージ形式は、サービス(融資処理など)でクライアント・リクエストの処理に時間がかかる環境で役に立ちます。また、非同期サービスは、同期サービスよりも優れた耐障害性を持ち、かつスケーラブルなアーキテクチャも提供します。

この項では、United Loanという企業での非同期Webサービスの起動について説明します。United Loanは、クライアントの融資申請リクエストを処理して融資提案を返す非同期Webサービスを公開します。このユースケースでは、BPELプロセス・サービス・コンポーネントとこの非同期融資申請承認Webサービスを統合する方法について説明します。

このユースケースでは、非同期サービスからの情報をリクエストし、レスポンスを受け取るための基本的な設計概念について説明します。この例のUnited Loanの非同期サービスは、別のBPELプロセス・サービス・コンポーネントです。しかし、適切に設計されたWebサービスであれば、同じBPELコールで対話できます。ターゲットのWebサービスのWSDLファイルには、必要な情報のリクエストと受信に必要な情報が含まれています。

非同期Webサービスでは、次のアクションが(優先度に従って)実行されます。

1. assignアクティビティにより融資申請が準備されます。

2. invokeアクティビティにより融資申請が開始されます。申請の内容は、リクエスト変数に入力されます。このリクエスト変数が非同期融資処理Webサービスに送信されます。
融資申請の開始時、申請を開始したクライアントとパートナ・リンクに固有の相関IDも、融資処理Webサービスに送信されます。相関IDにより、適切な融資提案レスポンスが、対応する融資申請のリクエスト元に確実に返されます。

3. その後、融資処理Webサービスにより、適切なレスポンスがreceiveアクティビティ(相関IDを使用して追跡)に送信されます。

4. assignアクティビティにより融資申請提案が読み取られます。

この章の後続の各項では、非同期機能の詳細を説明します。

8.2 非同期Webサービスの起動

この項では、非同期機能をBPELプロセス・サービス・コンポーネントに追加するためのタスクの概要を説明します。

8.2.1 非同期Webサービスの起動方法

次の手順を実行し、Webサービスを非同期で起動します。

- パートナ・リンクの追加

- invokeアクティビティの追加

- receiveアクティビティの追加

- assignアクティビティの作成

8.2.1.1 非同期サービスに対するパートナ・リンクの追加

ここでは、融資申請承認Webサービスに対するパートナ・リンク(この例ではLoanServiceという名前)をBPELプロセスに作成する方法について説明します。

非同期サービスに対してパートナ・リンクを追加する手順は、次のとおりです。

1. SOAコンポジット・エディタで、BPELプロセスを「コンポーネント・パレット」の「サービス・コンポーネント」セクションからデザイナにドラッグします。
「BPELプロセスの作成」ダイアログが表示されます。

2. ダイアログの説明に従って、非同期BPELプロセス・サービス・コンポーネントを作成します。

3. 完了後に「OK」をクリックします。

4. SOAコンポジット・エディタのSOAコンポジット・アプリケーションで、BPELプロセス・サービス・コンポーネント(この例では、LoanBrokerというコンポーネント名)をダブルクリックします。
Oracle BPELデザイナが表示されます。

5. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

6. 「パートナ・リンク」アイコンを適切な「パートナ・リンク」スイムレーンにドラッグします。
「パートナ・リンクの作成」ダイアログが表示されます。

7. 次の詳細を入力して、パートナ・リンクを作成し、融資申請承認Webサービスを選択します。

- 名前
パートナ・リンクの名前を入力します(この例ではLoanServiceを入力します)。

- プロセス
BPELプロセス・サービス・コンポーネント名が表示されます(この例ではLoanBrokerが表示されます)。

- WSDL URL
使用するWeb Services Description Language(WSDL)ファイルを入力します。このフィールドの上にある「SOAリソース・ルックアップ」アイコンをクリックして、正しいWSDLを検索します。

- パートナ・リンク・タイプ
BPELプロセス・サービス・コンポーネントのインタフェース先である外部サービスを指します。リストから選択します(この例ではLoanServiceを選択します)。

- パートナ・ロール
外部ソースのロールです(プロバイダなど)。リストから選択します(この例ではLoanServiceProviderを選択します)。

- マイ・ロール
この相互作用におけるBPELプロセス・サービス・コンポーネントのロールです。リストから選択します(この例ではLoanServiceRequesterを選択します)。

8. 「OK」をクリックします。
融資申請承認Webサービス(United Loan)の新しいパートナ・リンクがデザイナのスイムレーンに表示されます。

8.2.1.2 invokeアクティビティの追加

次の手順に従って、invokeアクティビティとrequestという名前のグローバル入力変数を作成します。このアクティビティは、融資申請承認Webサービス(United Loan)を使用して、非同期BPELプロセス・サービス・コンポーネント・アクティビティを開始します。融資申請承認Webサービスは、request入力変数を使用してクライアントからの融資申請を受け取ります。

invokeアクティビティを追加する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. invokeアクティビティをreceiveアクティビティの下にドラッグします。

3. 「構造」ウィンドウに移動します。この例では、「構造」ウィンドウから変数を作成する手順を説明しますが、「Invoke」ダイアログの「入力」フィールドと「出力」フィールドの右側にある「追加」アイコンをクリックして変数を作成することもできます。

4. 「変数」を右クリックし、「すべての子ノードを開く」を選択します。

5. ツリーの2つ目の「変数」フォルダで右クリックし、「変数の作成」を選択します。
「変数の作成」ダイアログが表示されます。

6. 変数名を入力し、表示されたオプションから「メッセージ・タイプ」を選択します。

- タイプ
このオプションでは、XMLスキーマの単純型(文字型やブール型など)を選択できます。

- メッセージ・タイプ
このオプションでは、パートナ・リンクまたは現在のBPELプロセス・サービス・コンポーネントのプロジェクトWSDLファイルに対するWSDLメッセージ・ファイル定義を選択できます(レスポンス・メッセージやリクエスト・メッセージなど)。メッセージ・タイプと関連付けられている変数をinvoke、receiveまたはreplyアクティビティの入力変数または出力変数として指定できます。

メッセージ・タイプを表示するには、「メッセージ・タイプ」オプションを選択し、「参照」アイコンを選択して「タイプ・チューザ」ダイアログを表示します。ここから選択するために「メッセージ・タイプ」ツリーを開きます。この例では、「メッセージ・タイプ」→「パートナ・リンク」→「Loan Service」→「LoanService.wsdl」→「メッセージ・タイプ」→「LoanServiceRequestMessage」を順に選択します。

- 要素
このオプションでは、現在のBPELプロセス・サービス・コンポーネントのプロジェクト・スキーマ・ファイルまたはプロジェクトWSDLファイルのXMLスキーマ要素、またはパートナ・リンクのXMLスキーマ要素を選択できます。

図8-1に、「変数の作成」ダイアログを示します。

図8-1 「変数の作成」ダイアログ

「図8-1 「変数の作成」ダイアログ」の説明

7. 「OK」をクリックします。

8. invokeアクティビティをダブルクリックし、「Invoke」ダイアログを表示します。

9. 「Invoke」ダイアログで、「パートナ・リンク」リストからパートナ・リンク(この例では「LoanService」)を選択し、「操作」リストから「initiate」を選択します。

10. 「入力」フィールドの右で、2番目のアイコンをクリックし、ステップ6で作成した入力変数を選択します。
「変数チューザ」ダイアログが表示され、変数の選択が可能になります。

出力変数はreceive操作で返されるため、指定していません。invokeアクティビティが作成されます。

invokeアクティビティの詳細は、第8.2.2.5項「invokeアクティビティとreceiveアクティビティ」を参照してください。

11. 「OK」をクリックします。

8.2.1.3 receiveアクティビティの追加

次の手順に従って、receiveアクティビティとresponseという名前のグローバル出力変数を作成します。このアクティビティは、融資申請承認Webサービスのコールバック処理を待機します。融資申請承認Webサービスは、この出力変数を使用して、融資提案結果をクライアントに送信します。

receiveアクティビティを追加する手順は、次のとおりです。

1. 「コンポーネント・パレット」から、receiveアクティビティを、第8.2.1.2項「invokeアクティビティの追加」で作成したinvokeアクティビティの直後にドラッグします。

2. 第8.2.1.2項「invokeアクティビティの追加」のステップ3からステップ7と同様の手順で、「変数の作成」ダイアログを開き、受信情報を格納する変数を作成します。

図8-2に、BPEL 1.1の「変数の作成」ダイアログを示します。

図8-2 「変数の作成」ダイアログ

「図8-2 「変数の作成」ダイアログ」の説明

注意:

BPEL仕様のバージョン2.0をサポートするBPELプロジェクトでは、「変数の作成」ダイアログに、変数タイプのインラインを(変数、式、リテラル、パートナ・リンク、プロパティなどとして)初期化できる「初期化」タブがあります。詳細は、第6.5.2項「BPEL 2.0のインラインfrom-specを使用した変数の初期化」を参照してください。

3. Receiveアクティビティをダブルクリックし、名前をreceive_invokeに変更します。

4. 「パートナ・リンク」リストからパートナ・リンクを選択します(この例では「LoanService」を選択します)。

5. 「操作」リストから「onResult」を選択します。「インスタンスの作成」チェック・ボックスは選択しないでください。

6. 第8.2.1.2項「invokeアクティビティの追加」のステップ3からステップ7で作成した変数を選択します。

7. 「OK」をクリックします。
receiveアクティビティと出力変数が作成されます。BPELファイル(この例ではLoanBroker.bpel)の最初のreceiveアクティビティが最初のBPELプロセス・サービス・コンポーネント・インスタンスを作成したため、2つ目のインスタンスを作成する必要はありません。

8.2.1.4 その他のアクティビティの実行

非同期固有のタスクに加え、次のタスクを実行する必要があります。

- クライアントの融資申込書のinput変数ペイロードを融資申請承認Webサービスのrequest変数ペイロードにコピーする、データ操作用の最初のassignアクティビティを、invokeアクティビティの前に作成します。

- 受け取るクライアントのoutput変数に融資申請承認Webサービスの融資申請結果のresponse変数ペイロードをコピーする、データ操作用の2番目のassignアクティビティを、receiveアクティビティの後ろに作成します。

8.2.2 非同期Webサービス起動時の処理内容

この項では、非同期Webサービス起動時の処理内容について説明します。

8.2.2.1 WSDLファイルのportTypeセクション

WSDLファイル(この例ではLoanService)のportTypeセクションは、非同期サービスに使用するポートを定義します。

非同期サービスにはポート・タイプが2つ定義されます。各ポート・タイプは一方向操作を実行します。この例では、次のとおりです。

- 一方のポート・タイプが非同期プロセスに応答します。

- 他方のものが、非同期レスポンスでクライアントにコールバックします。

例8-1では、portType LoanServiceCallbackがクライアントの融資申請リクエストを受け取り、portType LoanServiceが融資提案レスポンスを使用してクライアントを非同期でコールバックします。

例8-1 portType定義

<!-- portType implemented by the LoanService BPEL process -->
<portType name="LoanService">
<operation name="initiate">
<input message="tns:LoanServiceRequestMessage"/>
</operation>
</portType>
<!-- portType implemented by the requester of LoanService BPEL process
for asynchronous callback purposes
-->
<portType name="LoanServiceCallback">
<operation name="onResult">
<input message="tns:LoanServiceResultMessage"/>
</operation>
</portType>

8.2.2.2 WSDLファイルのpartnerLinkTypeセクション

WSDLファイル(この例ではLoanService)のpartnerLinkTypeセクションは、BPELプロセス・サービス・コンポーネントの次の特性を定義します。

- 果たすロール(操作)

- 対話でメッセージを受信するために提供するportType

非同期サービスのパートナ・リンク・タイプには、Webサービス・プロバイダに対するロールとクライアント・リクエスタに対するロールの2つのロールがあります。

例8-2では、LoanServiceProviderロールおよびLoanService portTypeは、クライアント・リクエスト・メッセージに使用され、LoanServiceRequesterロールおよびLoanServiceCallback portTypeは、レスポンス・メッセージをクライアントに非同期で返す(コールバックする)ために使用されます。

例8-2 partnerLinkType定義

<plnk:partnerLinkType name="LoanService">
<plnk:role name="LoanServiceProvider">
<plnk:portType name="client:LoanService"/>
</plnk:role>
<plnk:role name="LoanServiceRequester">
<plnk:portType name="client:LoanServiceCallback"/>
</plnk:role>
</plnk:partnerLinkType>

2つのポート・タイプ(invokeアクティビティのportType="services:LoanService"とreceiveアクティビティのportType="services:LoanServiceCallback")は、この1つの非同期BPELプロセス・サービス・コンポーネントに結合されます。基本的に、ポート・タイプは実行される一連の操作です。このBPELプロセス・サービス・コンポーネントの場合、実行する操作は2つ(invokeアクティビティのinitiateとreceiveアクティビティのonResult)あります。

8.2.2.3 BPELファイルのパートナ・リンク・セクション

サービスをBPELからコールするには、プロセスとWebサービスの連携方法をBPELファイルで定義する必要があります。partnerLinksセクションを表示します。プロセスが相互作用するサービスはパートナ・リンクとして設計されます。各パートナ・リンクは、partnerLinkTypeによって定義されます。

各パートナ・リンクには名前が付けられています。この名前は、そのパートナ・リンクによるすべてのサービス相互作用に使用されます。これは、レスポンスを、同じタイプの同時リクエストに対する異なるパートナ・リンクに相関する場合に重要です。

非同期プロセスは、クライアントへのコールバックに2番目のパートナ・リンクを使用します。この例では、2番目のパートナ・リンクLoanServiceが融資申請承認Webサービスによって使用されます。例8-3に例を示します。

例8-3 partnerLink定義

<!-- This process invokes the asynchronous LoanService. -->

<partnerLink name="LoanService"
partnerLinkType="services:LoanService"
myRole="LoanServiceRequester"
partnerRole="LoanServiceProvider"/>
</partnerLinks>

属性myRoleは、クライアントのロールを示します。属性partnerRoleは、この対話におけるパートナのロールを示します。非同期プロセスでは、各partnerLinkTypeにmyRole属性とpartnerRole属性があります。

8.2.2.4 コンポジット・アプリケーション・ファイル

composite.xmlファイルには、例8-4に示すように、融資申請承認Webサービスが表示されます。

例8-4 融資申請承認Webサービス

<component name="LoanBroker">
<implementation.bpel process="LoanBroker.bpel"/>
</component>

パートナ・リンクの作成手順の詳細は、第8.2.1.1項「非同期サービスに対するパートナ・リンクの追加」を参照してください。

8.2.2.5 invokeアクティビティとreceiveアクティビティ

variablesおよびsequenceセクションを表示します。ここでは特に、invokeアクティビティとreceiveアクティビティの2つの領域に注目します。

- invokeアクティビティは、同期Webサービスを起動(第7章「BPELプロセスからの同期Webサービスの起動」を参照)するか、または非同期サービスを開始します。
invokeアクティビティにはvariableセクションで定義されたrequestグローバル入力変数が含まれます。requestグローバル入力変数は融資申請承認Webサービスで使用されます。この変数には、最初の融資申込書の内容が格納されます。

- 融資申請承認Webサービスからの非同期コールバックを待機するreceiveアクティビティ。receiveアクティビティにはvariablesセクションで定義されたresponseグローバル出力変数が含まれます。この変数には、融資提案レスポンスが格納されます。receiveアクティビティは、サービスからのコールバック・メッセージを非同期に待機します。BPELプロセス・サービス・コンポーネントは、コールバック・メッセージの到着を待機中、デハイドレーション(圧縮して格納)されます。

例8-5に例を示します。

例8-5 invokeアクティビティとreceiveアクティビティ

<variables>
<variable name="request"
messageType="services:LoanServiceRequestMessage"/>
<variable name="response"
messageType="services:LoanServiceResultMessage"/>
</variables>
<sequence>
<!-- initialize the input of LoanService -->
<assign>
<!--  initiate the remote process -->
<invoke name="invoke" partnerLink="LoanService"
portType="services:LoanService"
operation="initiate" inputVariable="request"/>
<!--  receive the result of the remote process -->
<receive name="receive_invoke" partnerLink="LoanService"
portType="services:LoanServiceCallback"
operation="onResult" variable="response"/>

invokeアクティビティによって非同期サービスが開始されると、Web Services Addressing(WS-Addressing)(第8.8項「非同期サービスでのWS-Addressingの使用」で説明)を使用して、クライアント・リクエストに固有の相関IDが送信されます。複数のプロセスがサービス・コールバックを待機している可能性があるため、サーバーでは、どのBPELプロセス・サービス・コンポーネント・インスタンスが融資申請承認Webサービスからのコールバック・メッセージを待機しているかを把握する必要があります。相関IDによって、サーバーは、レスポンスを適切なリクエスト・インスタンスと関係付けることができます。

8.2.2.6 新しいインスタンスを開始するためのcreateInstance属性

最初のreceiveアクティビティには、createInstance属性があります。この最初のreceiveアクティビティでは、createInstance要素はyesに設定されています。これにより、新しいBPELプロセス・サービス・コンポーネント・インスタンスが起動されます。対話のためには、少なくとも1つのインスタンスが起動している必要があります。このため、2番目のreceiveアクティビティではcreateInstance変数をnoに設定します。

例8-6に、createInstance属性のソース・コードを示します。

例8-6 createInstance属性

<!-- receive input from requester -->
<receive name="receiveInput" partnerLink="client"
portType="tns:LoanBroker"
operation="initiate" variable="input"
createInstance="yes"/>

8.2.2.7 長期間にわたる非同期プロセスを保持するためのデハイドレーション・ポイント

非同期コールバックの待機中、長期間にわたる非同期プロセスとその現在の状態の情報をデータベース内に自動的に保存するには、データベースをデハイドレーション・ストアとして使用します。データベースにプロセスを格納することにより、プロセスを維持し、システムの停止やネットワークの問題が発生した場合の状態や信頼性の低下を防ぎます。この機能により、BPELプロセス・サービス・コンポーネントの信頼性とスケーラビリティの両方が向上します。また、クラスタリングおよびフェイルオーバーのサポートにもこの機能を使用できます。

invokeアクティビティとreceiveアクティビティの間にこのポイントを挿入します。dehydrateアクティビティを使用してデハイドレーション・ポイントを明示的に指定することもできます。詳細は、A.2.9項「dehydrateアクティビティ」を参照してください。

8.2.2.8 複数のランタイム・エンドポイント・ロケーション

Oracle SOA Suiteでは、パートナ・リンクの複数のエンドポイント・ロケーションの指定がサポートされています。この機能は、最初のエンドポイントが停止した場合に、フェイルオーバーするのに便利です。パートナ・リンクの代替エンドポイント・ロケーションを提供するには、composite.xmlファイルにlocation属性を追加します。例8-7に例を示します。

例8-7 代替のランタイム・エンドポイント・ロケーション

<reference name="HeaderService ...>
<binding.ws port="http://services.otn.com/HelloWorldApp#wsdl.endpoint(client/
HelloWorldService_pt)"
location="http://server:port/soa-infra/services/default/
HelloWorldService!1.0/client?WSDL">
<property name="endpointURI">http://jsmith.us.example.com:80/a.jsp
@http://myhost.us.example.com:8888/soa-infra/services/HelloWorldApp/HelloWorld!
1.0*2007-10-22_14-33-04_195/client
</property>
</binding.ws>
</reference>

8.2.3 複数のクライアント・コンポーネントによる1つのコンポジットの起動に関する注意事項

複数のクライアント・コンポーネントがそのリモートのWSDLファイルを使用して1つのSOAコンポジット・アプリケーションを起動した場合は、リモート・コンポジットをコールしている元のクライアントにreceiveアクティビティが存在する場合にのみ、コールバック・レスポンスをこのクライアントで取得できます。元のクライアントにreceiveアクティビティが存在せず、コンポジットをコールする後続のクライアントのいずれにもreceiveアクティビティが存在しない場合、レスポンス・メッセージは失われます。これにより、元のクライアント・プロセスのリカバリ状態となります。

これは予想された動作です。これは、起動されているコンポジットでは、receiveアクティビティがどのクライアントに存在するか、またはクライアントが実際にBPELプロセス・サービス・コンポーネントであるかどうかを認識できないためです。

8.2.4 BPEL 2.0 IMAサポートの制限に関する注意事項

receiveアクティビティは一種のインバウンド・メッセージ・アクティビティ(IMA)です。IMAのその他の例は次のとおりです。

- scopeアクティビティ(BPEL 1.1)またはpickアクティビティのonMessageブランチ

- BPEL 2.0のscopeアクティビティのonEventブランチ

BPEL 2.0仕様では、複数のIMAを相互に使用する、または拡張アクティビティから導出した他のIMAとともに使用することができます。実行時の動作を一定に保つために、BPEL 2.0仕様ではinitiate属性をjoinに設定した相関セットを使用できます。ただし、Oracle BPEL Process ManagerにおけるBPEL 2.0仕様では、この動作がサポートされていません。複数のIMAをサポートする唯一の方法は、それらをpickアクティビティのonMessageブランチとしてコーディングする(つまり、createInstanceをyesに設定する)ことです。また、Oracle BPEL Process Managerでは、複数IMAのその他の形、たとえば2つのブランチを持つflowアクティビティで、それぞれがreceiveアクティビティを持ち、createInstanceの設定がyesで、相関セットのinitiateの設定がjoinであるなどの形もサポートされていません。

解決方法として、次のように、交互に2つのreceiveアクティビティがある2つのBPELプロセスを設計する必要があります。

- Process1: receive1の後にreceive2が続きます。receive1でのみ、createInstanceがyesに設定されています。

- Process2: receive2の後にreceive1が続きます。receive2でのみ、createInstanceがyesに設定されています。

同じことが、receiveアクティビティとpickアクティビティ、または2つのpickアクティビティなど、IMAの他の組合せにも適用されます。

8.2.5 対話ID指定時の処理内容

invokeアクティビティ(およびreceiveアクティビティなどの他のアクティビティ、pickまたはscopeアクティビティのonMessageブランチ)の「対話ID」フィールドにオプションの対話ID値を入力することもできます。

対話IDは、非同期対話中にプロセス・インスタンスを識別します。デフォルトでは、BPELプロセス・サービス・エンジンにより、WSAアドレッシングで指定されているように、対話(複数のinvokeアクティビティおよびreceiveアクティビティにまたがる可能性があります)ごとに一意のIDが生成されます。必要に応じて、使用するサービス・エンジンに独自の値を指定できます。対話IDはbpelx:conversationId拡張要素で実装されます。

8.2.5.1 BPEL 1.1のbpelx:conversationId

例8-8に、BPELバージョン1.1をサポートするBPELプロジェクト内のbpelx:conversationId拡張要素の例を示します。bpelx:conversationId拡張要素はXPath式をとります。

例8-8 BPEL 1.1のbpelx:conversationId対話ID

<invoke ... bpelx:conversationId="$convId2">
</invoke>

<receive ... bpelx:conversationId="$convId2">
</receive>

<onMessage... bpelx:conversationId="$convId2">
</onMessage>

8.2.5.2 BPEL 2.0のbpelx:conversationId

例8-9に、BPELバージョン2.0をサポートするBPELプロジェクト内のbpelx:conversationId拡張要素の例を示します。bpelx:conversationId拡張要素はBPEL 2.0 XPath式をとります。

例8-9 BPEL 2.0のbpelx:conversationId対話ID

<invoke ...>
<bpelx:conversationId>$convId1</bpelx:conversationId>
</invoke>

<receive ...>
<bpelx:conversationId>$convId1</bpelx:conversationId>
</receive>

<onMessage ...>
<bpelx:conversationId>$convId2</bpelx:conversationId>
</onMessage>

8.3 複数のreceiveまたはpickアクティビティで同じパートナ・リンクが使用されている場合における適切なエンドポイントへのコールバック・メッセージのルーティング

11gリリース1では、複数のreceiveまたはpickアクティビティが同じパートナ・リンクに関連付けられている場合に、適切なエンドポイント・アドレスへのコールバック・メッセージのルーティングを解決するには、replyToAddress正規化されたメッセージのプロパティが必要です。

これは、BPELプロセス・サービス・エンジンでは、replyToAddressプロパティが格納されるのは、起動元のreceiveまたはpickアクティビティでパートナ・リンクからのリクエストを受信するときの1回のみであるためです。replyToAddressは、コールバック・メッセージをルーティングし、中間プロセスのreceiveまたはpickアクティビティが使用されている場合にリセットされません。replyToAddressプロパティは、bpelx:inputProperty拡張要素を使用します。

8.3.1 複数のreceiveまたはpickアクティビティで同じパートナ・リンクが使用されている場合における適切なエンドポイントへのコールバック・メッセージのルーティング

中間プロセスのreceiveアクティビティの後に続くinvokeアクティビティ(コールバック用)に対して、このプロパティをクライアントのreplyToAddressに設定してください。つまり、クライアントが、中間プロセスのreceiveアクティビティに対してWS-Addressing replyTo情報を送信する場合でも、assignアクティビティを使用してそれを動的に設定しないかぎり、それがパートナ・リンクに設定されることはありません。

たとえば、BPELプロセスが例8-10に示すとおりであるとします。

例8-10 BPELプロセス

Caller                               Callee
-----------------------------------------------------------
<receive>                            <receive> Initiate CS1
<invoke>initiate CS1 -------->       <receive> Use CS1
<wait>
<receive>use CS1    <--------        <invoke>
<invoke>

複数のreceiveおよびpickアクティビティで同じパートナ・リンクが使用されている場合において適切なエンドポイントにコールバック・メッセージをルーティングする手順は、次のとおりです。

1. 中間プロセスのreceiveアクティビティからクライアントのreplyToAddress値を取得します。

<receive name="receiveMsgFromAccessor" partnerLink="midprocess_client"
portType="client:mySingletonBPEL" operation="process"
variable="ReceiveMidProcess" createInstance="no">
<bpelx:property name="replyToAddress" variable="var_replyToAddress"/>
<correlations>
<correlation set="<YourCorrset>" initiate="no"/>
</correlations>
</receive>

2. そのinvokeアクティビティ(コールバック用)で、「プロパティ」タブをクリックします。

3. 下にスクロールしてreplyToAddressプロパティを見つけます。wsa.replyToAddressまたはbpel.replyToAddressを選択しないでください。

4. 「値」列で、ダブルクリックして省略記号を表示します。

5. 省略記号をクリックします。
「アダプタ・プロパティ値」ダイアログが表示されます。

6. 値として変数名を入力(この例では、手順1のvar_replyToAddressを入力)し、「OK」をクリックします。

7. 「タイプ」列で、replyToAddressプロパティの行をクリックします。

8. 表示されるリストから、「入力」を選択します。
図8-3に示すように、Invokeの編集ダイアログが表示されます。

図8-3 replyToAddressプロパティが定義されているInvokeの編集ダイアログ

「図8-3 replyToAddressプロパティが定義されているInvokeの編集ダイアログ」の説明

9. 「適用」→「OK」の順にクリックします。

10. Oracle BPELデザイナで、「ソース」をクリックします。
BPELプロセス・ファイル内のinvokeアクティビティは次のようになります。

<invoke name="callbackAccessor" partnerLink="midprocess_client"
portType="client:mySingletonBPELCallback"
operation="processResponse"
inputVariable="CallbackAccessorVar"
bpelx:invokeAsDetail="no">
<bpelx:inputProperty name="replyToAddress"
variable="var_replyToAddtess"/>

8.4 パートナ・リンク操作レベルでの冪等性の管理

idempotentアクティビティは、問題なく再試行できるアクティビティです。idempotentアクティビティは、永続プロセスと一時プロセスの両方に適用されます。冪等性は、パートナ・リンクの操作レベルで管理できます。たとえば、いくつかのパートナ・リンクでは複数の操作を公開できます(たとえば、getEmployee、depositPayCheckなど)。いくつかの操作を冪等として定義できます(たとえば、getEmployee)。これによって、これらの操作を複数回コールできるようになります。他の操作は、冪等にする必要がない場合があり(たとえば、depositPayCheck)、この設定は不要です。デハイドレーションは、非冪等操作の後に発生します。

デフォルトでは、すべてのパートナ・リンク操作は冪等です。必要な場合は、操作を非冪等に設定できます。この設定は、idempotentデプロイメント・ディスクリプタのプロパティと同じ機能を、より詳細な操作レベルで提供します。

idempotentデプロイメント・ディスクリプタのプロパティの詳細は、第12.10.6項「idempotentプロパティとフォルト処理に関する注意事項」および第C.1項「デプロイメント・ディスクリプタのプロパティの概要」を参照してください。

8.4.1 パートナ・リンク操作レベルでの冪等性の管理方法

パートナ・リンク操作レベルで冪等性の管理する手順は、次のとおりです。

1. Oracle BPELデザイナで、冪等性の管理対象となる操作が含まれているパートナ・リンクをダブル・クリックします。

2. パートナ・リンクの「冪等性」タブをクリックします。
デフォルトでは、「冪等」列ですべての操作が冪等であると選択されています。

3. 操作を非冪等と定義する場合は、その操作の「冪等」チェック・ボックスの選択を解除します。図8-4に詳細を示します。

図8-4 パートナ・リンク・アクティビティの「冪等性」タブ

「図8-4 パートナ・リンク・アクティビティの「冪等性」タブ」の説明

4. 「適用」をクリックします。

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

冪等性およびidempotentプロパティの詳細は、第C.1項「デプロイメント・ディスクリプタのプロパティの概要」を参照してください。

8.5 実行時に使用するための動的パートナ・リンクの設計時の作成

SOAコンポジット・アプリケーションを設計する場合、次の課題に直面することがあります。

- サービス・エンドポイント(アドレス)が設計時にわからない場合があります。

- アプリケーションの実行中に、エンドポイント参照の変更が必要な場合があります。

動的パートナ・リンク機能を使用すると、BPELバージョン1.1および2.0の実行時に使用するために、エンドポイント参照をパートナ・リンクに動的に割り当てることができます。動的パートナ・リンクでは、switchアクティビティに類似した条件が提供され、この条件は実行時に評価されます。

8.5.1 実行時に使用するための動的パートナ・リンクの設計時の作成方法

実行時に使用するために動的パートナ・リンクを設計時に作成する手順は、次のとおりです。

1. 同じportTypeを使用する複数のサービスが含まれているWSDLファイルを作成します。

<service name="AmericanLoan">
<port name="LoanServicePort" binding="tns:LoanServiceBinding">
<soap:address location="http://localhost:9700/orabpel/default/AmericanLoan"/>
</port>
</service>

<service name="AlliedLoan">
<port name="LoanServicePort" binding="tns:LoanServiceBinding">
<soap:address location="http://localhost:9700/orabpel/default/AlliedLoan"/>
</port>
</service>

<service name="AcmeLoan">
<port name="LoanServicePort" binding="tns:LoanServiceBinding">
<soap:address location="http://localhost:9700/orabpel/default/AcmeLoan"/>
</port>
</service>

2. 「Webサービス」バインディング・コンポーネントをSOAコンポジット・エディタの「外部参照」スイムレーンにドラッグします。
「Webサービスの作成」ダイアログが表示されます。

3. Webサービスを定義して、「OK」をクリックします。
完了すると、WSDLを使用するcomposite.xmlファイルの参照バインディング・コンポーネントのエントリは、次のようになります。

<reference name="loanService">
<interface.wsdl interface="http://services.otn.com#wsdl.interface(LoanService)"
callbackInterface="http://services.otn.com#wsdl.interface(LoanServiceCallback)"
/>
<binding.ws port=
"http://services.otn.com#wsdl.endpoint(AmericanLoan/LoanService_pt)"/>
</reference>

注意:

- binding.ws port設定の追加はオプションです。これは、Oracle BPEL Process Managerから渡されるプロパティによって、実行時にポートが上書きされるためです。

- port設定がなく、この参照に関連付けられている具体WSDLのコンポジット・インポートもない場合は、location属性を使用して具体WSDLの場所を指定する必要があります。

4. BPELプロセスをダブルクリックして、Oracle BPELデザイナを入力します。

5. assignアクティビティをデザイナにドラッグします。

6. 「コピー・ルール」タブをクリックします。

7. 図8-5に示すように、ターゲット・パートナ・リンクの上にある「XMLフラグメント」アイコンを選択します。BPEL 2.0を使用中の場合は、「リテラル」アイコンをドラッグします。

図8-5 「XMLフラグメント」アイコン

「図8-5 「XMLフラグメント」アイコン」の説明

8. 「XMLフラグメント」アイコンをターゲット・パートナ・リンクにドラッグします。
BPEL 1.1用の「XMLフラグメント」ダイアログが表示されます。BPEL 2.0を使用中の場合は、「リテラル」ダイアログが表示されます。

9. エンドポイント参照を含むXMLフラグメントをパートナ・リンクに割り当てて、「OK」をクリックします。図8-6に詳細を示します。

図8-6 BPEL 1.1の「XMLフラグメント」ダイアログ

「図8-6 BPEL 1.1の「XMLフラグメント」ダイアログ」の説明

完了すると、BPELファイルにはWSDLで定義されたサービスのいずれかが含まれます。

<copy>
<from>
<EndpointReference
xmlns="http://schemas.xmlsoap.org/ws/2003/03/addressing">
<Address>http://myhost.us.example.com:9700/orabpel/default/AlliedLoan</Address>
</EndpointReference>
</from>
<to partnerLink="LoanService"/>
</copy>

8.6 動的パートナ・リンクを起動する際のセキュリティ証明書のオーバーライド

動的パートナ・リンクを使用すると複数のWebサービスと対話できます。この対話には、メッセージを暗号化するために様々なセキュリティ証明書を必要とするメッセージ保護ポリシーの使用が含まれる場合があります。これらの証明書は、Webサービスごとに異なる場合があります。キーストア受信者別名値を指定して、WebサービスのWSDLファイル内のセキュリティ証明書をオーバーライドできます。

パートナ・リンクを起動する際にセキュリティ証明書をオーバーライドする手順は、次のとおりです。

1. 文字列タイプの変数(たとえば、KEYSTORE_RECIPIENT_ALIAS)を定義します。図8-7に詳細を示します。

図8-7 KEYSTORE_RECIPIENT_ALIASの変数定義

「図8-7 KEYSTORE_RECIPIENT_ALIASの変数定義」の説明

2. assignアクティビティの「コピー・ルール」タブで、orakeyを変数KEYSTORE_RECIPIENT_ALIASに割り当てます。図8-8に詳細を示します。

図8-8 KEYSTORE_RECIPIENT_ALIASへのorakeyの割当て

「図8-8 KEYSTORE_RECIPIENT_ALIASへのorakeyの割当て」の説明

3. Webサービスのパートナ・リンクを起動するinvokeアクティビティで、「プロパティ」タブをクリックします。

4. keystore.recipient.aliasプロパティをクリックします。

5. 「値」列をダブルクリックし、「参照」 (...)アイコンを表示します。

6. 「参照」 (...)アイコンをクリックし、「アダプタ・プロパティ値」ダイアログを表示します。

7. 「参照」アイコンをクリックして、「変数XPathビルダー」ダイアログを表示します。

8. 値としてkeystore_recipient_aliasを選択し、「OK」をクリックします。図8-9に詳細を示します。BPELプロセスでWebサービスを起動する際にWSDLファイルに設定されているセキュリティ証明書が、このプロパティによってオーバーライドされます。

図8-9 invokeアクティビティの正規化されたメッセージのプロパティkeystore.recipient.alias

「図8-9 invokeアクティビティの正規化されたメッセージのプロパティkeystore.recipient.alias」の説明

9. 「適用」→「OK」の順にクリックします。
完了すると、BPELファイルは次のように定義されます。

. . .
. . .
<variables>
<variable name="WsaAddress" element="ns6:EndpointReference"/>
<variable name="KEYSTORE_RECIPIENT_ALIAS" type="xsd:string"/>
</variables>

<assign name="AssignAddress">
<copy>
<from
expression="'http://localhost:8001/soa-infra/services/default/ServiceWithNewCer
tificate!1.0*soa_c94537fb-97a4-4b0f-900f-fefffc34f7fe/service_ep'"/>
<to variable="WsaAddress"
query="/ns6:EndpointReference/ns6:Address"/>
</copy>
<copy>
<from variable="WsaAddress"/>
<to partnerLink="Service"/>
</copy>
</assign>

<assign name="AssignAlias">
<copy>
<from expression='"orakey"'/>
<to variable="KEYSTORE_RECIPIENT_ALIAS"/>
</copy>
</assign>

<invoke name="Invoke"
inputVariable="Invoke_InputVariable"
partnerLink="Service"
portType="ns1:ServiceBPELProcess"
operation="process"
bpelx:invokeAsDetail="no">

<bpelx:inputProperty name="endpointURI"
variable="inputVariable"
part="payload"
query="/client:process/client:input"/>

<bpelx:inputProperty name="keystore.recipient.alias"
variable="KEYSTORE_RECIPIENT_ALIAS"/>
</invoke>

正規化されたメッセージのプロパティの詳細は、付録H「正規化されたメッセージのプロパティ」を参照してください。

8.7 動的パートナ・リンクのWSDLファイルのオーバーライド

場合によっては、次のような理由によって、動的パートナ・リンクによって使用されるデフォルトWSDLファイルをオーバーライドする必要があります。

- メッセージ保護セキュリティ・ポリシーを使用するサービスと統合する必要がある。

- WSDLに、メッセージ暗号化に使用される証明書など重要な情報が含まれている可能性がある。

正規化されたメッセージのプロパティendpointWSDLによって、動的パートナ・リンクのWSDLファイルを指定できます。エンドポイントのみでなく、WSDL全体を動的に指定する必要があります。これによって、それをOracle Web Services Manager (Oracle WSM)に渡すことができ、その後、それによって、指定されたWSDLから適切なサービス証明書を取得できます。

WSDLファイル内の証明書は、次の場合には無視されます。

- 第8.6項「動的パートナ・リンクを起動する際のセキュリティ証明書のオーバーライド」に記載されているrecipient.key.aliasプロパティ名が存在している。

- endpointWSDLプロパティが存在していない。

それ以外の場合、証明書はWSDLファイルから取得されます。

動的パートナ・リンクのWSDLファイルをオーバーライドする手順は、次のとおりです。

1. 文字列タイプの変数を定義します(この例では、the_wsdl_varが定義されます)。

2. assignアクティビティの「コピー・ルール」タブで、WSDLを変数the_wsdl_varに割り当てます。

3. パートナ・リンクを起動するinvokeアクティビティで、「プロパティ」タブをクリックします。

4. endpointWSDLプロパティをクリックします。

5. 「値」列をダブルクリックし、「参照」 (...)アイコンを表示します。

6. 「参照」 (...)アイコンをクリックし、「アダプタ・プロパティ値」ダイアログを表示します。

7. 「参照」アイコンをクリックして、「変数XPathビルダー」ダイアログを表示します。

8. 変数としてthe_wsdl_varを選択し、「OK」をクリックします。この値によって、動的パートナ・リンクのWSDLが指定されます。図8-10に詳細を示します。

図8-10 invokeアクティビティの正規化されたメッセージのプロパティendpointWSDL

「図8-10 invokeアクティビティの正規化されたメッセージのプロパティendpointWSDL」の説明

完了すると、BPELファイルは次のように定義されます。

<variables>
<variable name="the_wsdl_var" type="xsd:string"/>
</variables>

<assign name="myAssignWsdl">
<copy>
<from
expression='"http://localhost:8001/soa-infra/services/default/ServiceWithNewCer
tificate!1.0/service_ep?WSDL"'/>
<to variable="the_wsdl_var"/>
</copy>
</assign>

<invoke name="Invoke"
inputVariable="Invoke_InputVariable"
partnerLink="Service"
portType="ns1:ServiceBPELProcess"
operation="process"
bpelx:invokeAsDetail="no">

<bpelx:inputProperty name="endpointWSDL"
variable="the_wsdl_var"/>

</invoke>

正規化されたメッセージのプロパティの詳細は、付録H「正規化されたメッセージのプロパティ」を参照してください。

8.8 非同期サービスでのWS-Addressingの使用

ある時点でアクティブなインスタンスは多数存在する可能性があるため、サーバーはWebサービス・レスポンスに、対応する適切なBPELプロセス・サービス・コンポーネント・インスタンスを指示する必要があります。WS-Addressingを使用すると、非同期メッセージを識別して、非同期コールバックが確実に適切なクライアントを特定できるようにすることができます。

図8-11に、WS-Addressingの概要を示します。WS-Addressingは、非同期メッセージの相関にSimple Object Access Protocol(SOAP)ヘッダーを使用します。メッセージは、使用されるトランスポートまたはアプリケーションに依存しません。

図8-11 WS-Addressingヘッダーを使用したコールバック

「図8-11 WS-Addressingヘッダーを使用したコールバック」の説明

図8-11は、レスポンスが正しい宛先に送信されるように、メッセージがWSヘッダーとともに渡される様子を示しています。

この章の例では、相関にWS-Addressingを使用しています。メッセージの表示には、TCPトンネリングを使用できます。これについては、第8.8.1.1項「プログラム間で交換されるメッセージを表示するためのTCPトンネリングの使用方法」で説明します。

WS-Addressingは、通常は通信プロトコルおよびメッセージ・システムで提供される次の情報を定義します。この情報は、トランスポートまたはアプリケーションに依存せずに処理されます。

- エンドポイント・ロケーション(返信先アドレス)
返信先アドレスは、BPELクライアントがコールバック・メッセージをリスニングする場所を指定します。

- 対話ID
TCPトンネリングを使用して、BPELプロセス・サービス・コンポーネント・フローとWebサービスの間で交換されたSOAPメッセージ(相関IDを含むメッセージなど)を表示します。BPELプロセス・サービス・コンポーネント・フローの通信先のサービスに対して送受信される正確なSOAPメッセージを確認できます。

BPELプロセス・サービス・コンポーネント・フローとWebサービスの間にソフトウェア・リスナーを挿入します。BPELプロセス・サービス・コンポーネント・フローはリスナー(TCPトンネル)と通信します。リスナーはメッセージをWebサービスに転送し、表示します。Webサービスからのレスポンスはトンネルに返され、トンネルはレスポンスを表示して、BPELプロセス・サービス・コンポーネントに返します。

8.8.1 非同期サービスでのWS-Addressingの使用方法

WS-Addressingは公開されている仕様であり、Oracle BPEL Process Managerでサポートされるデフォルトの相関方法です。WS-Addressingを使用するために、.bpelファイルおよび.wsdlファイルを編集する必要はありません。

8.8.1.1 プログラム間で交換されるメッセージを表示するためのTCPトンネリングの使用方法

プログラムとサービスの間で交換されるメッセージは、TCPトンネリングにより表示できます。これは、BPELプロセス・サービス・コンポーネント・フローとWebサービスの間で交換される正確なSOAPメッセージを表示する場合に、特に役立ちます。

SOAPメッセージを監視するには、フローとサービスの間にソフトウェア・リスナーを挿入します。フローはリスナー(TCPトンネル)と通信し、リスナーはサービスにメッセージを転送し、メッセージを表示します。同様に、サービスからのレスポンスはトンネルに返され、トンネルはレスポンスを表示してフローに返します。

サーバーとWebサービスの間で交換されたすべてのメッセージを表示する場合、該当するすべてのメッセージがサービスとの間で1回のリクエスト/リプライのやり取りで交換されるため、同期サービスに対して必要なTCPトンネルは1つのみです。非同期サービスの場合、2つのトンネル(サービスの起動用に1つ、フローのコールバック・ポート用に1つ)を設定する必要があります。

8.8.1.1.1 同期サービス用のTCPリスナーの設定

Oracle BPEL Process Managerプロセスで開始される同期サービス用のTCPリスナーを設定する手順は、次のとおりです。

1. Axis TCPモニター(tcpmon)のダウンロードおよびインストールの方法については、次のURLにアクセスしてください。

http://ws.apache.org/commons/tcpmon/

2. tcpmonの使用方法については、次のURLにアクセスしてください。

http://ws.apache.org/axis/java/user-guide.html

3. クラスパスにaxis.jarを設定します。

4. tcpmonを開始します。

C:\...\> java org.apache.axis.utils.tcpmon localport remoteHost
port_on_which_remote_server_is_running

5. composite.xmlファイルで、フローのbinding.wsの下にendpointURIプロパティを追加し、サービスのエンドポイントを上書きします。

6. オペレーティング・システムのコマンド・プロンプトからantを使用して、プロセスをコンパイルおよびデプロイします。
同じテクニックで、Axisや.NETなど、別のツール・キットからBPELプロセス・サービス・コンポーネントをWebサービスとして起動するために渡されるSOAPメッセージを参照できます。

8.8.1.1.2 非同期サービス用のTCPリスナーの設定

非同期サービスからのコールバックのSOAPメッセージを表示するTCPリスナーを設定する手順は、次のとおりです。

1. ポートでのリスニングとOracle BPEL Process Managerポートの送信を実行するTCPリスナーを起動します。

1. 「Oracle Enterprise Manager Fusion Middleware Control」を開きます。

2. 「SOAインフラストラクチャ」メニューから、「SOA管理」→「共有プロパティ」の順に選択します。

3. 「コールバック・サーバーURL」に値を指定します。このURLは、サーバーによって非同期コールバック・アドレスの一部としてインボーカに送信されます。

2. 「SOAインフラストラクチャ」メニューから、「管理」→「システムMBeanブラウザ」の順に選択します。

3. 「アプリケーション定義のMBean」→oracle.soa.config→「サーバー: soa_server」→「SCAComposite」の順に展開します。
soa_serverは、特定のサーバー・インスタンス名です(例: AdminServer)。

サーバーにデプロイされているすべてのSOAコンポジット・アプリケーションが表示されます。

4. 次の手順に従って、このプロパティをコンポジット・アプリケーションに設定します。このアクションにより、コンポジット・アプリケーションのすべてのバインディングにプロパティ設定が適用されます。

1. コンポジットをクリックします。

2. 「属性」タブが選択されていることを確認します。

3. 「名前」列で、「プロパティ」をクリックします。

4. 「追加」アイコンをクリックします。

5. 新しく追加した「Element_number」(リストの最後に表示されます)を開きます。
numberは、最後のプロパティの番号の次の番号です。たとえば、プロパティ・リストに12個の要素があるときに新しいプロパティを追加すると、Element_13が表示されます。

6. 「名前」フィールドに、oracle.webservices.local.optimizationと入力します。

7. 「値」フィールドに、falseと入力します。

8. 「複数」フィールドに、falseと入力します。

9. 「適用」をクリックし、次に「戻る」をクリックします。

10. 「操作」タブの「名前」列で、「保存」をクリックします。

11. 「起動」をクリックして操作を実行します。

12. 「戻る」をクリックするか、「システムMBeanブラウザ」ペインでノードをクリックします。

注意:

プロパティを追加、削除または更新した後は、「システムMBeanブラウザ」ページの右上隅にある「キャッシュされたツリー・データのリフレッシュ」アイコンをクリックすると、新しいデータを参照できます。

5. 次の手順に従って、このプロパティを特定のバインディングに設定します。

1. コンポジット・アプリケーションを開き、特定の「SCAComposite.SCAReference.SCABinding」フォルダにドリルダウンします。

2. 「WSBinding」をクリックします。

3. ステップ4bから4lを実行します。

6. 非同期Webサービスを起動するフローを開始します。これを同期TCPトンネリング構成と組み合せると、サービス開始リクエストを最初のTCPトンネル経由で送信できます。
非同期サービスからのコールバックは、TCPリスナーに表示されます。

Oracle JDeveloperユーザーは、組込みパケット・モニターを使用して、同期サービスと非同期サービスの両方についてSOAPメッセージを表示することもできます。

9 相関セットおよびメッセージ集約の使用

この章では、相関セットを使用して、非同期コールバックが確実に適切なクライアントを特定できるようにする方法について説明します。また、集約パターンを使用して、同じインスタンスにメッセージをルーティングする方法についても説明します。

この章には次の項が含まれます:

- 第9.1項「非同期サービスでの相関セットの使用」

- 第9.2項「同じインスタンスへのメッセージのルーティング」

9.1 非同期サービスでの相関セットの使用

相関セットは、Webサービスのレスポンスを適切なBPELプロセス・サービス・コンポーネント・インスタンスに戻すための別の方法を提供します。相関セットを使用すると、非同期メッセージを識別して、非同期コールバックが確実に適切なクライアントを特定できるようにすることができます。

相関セットは、メッセージ本体の内容に基づいて非同期メッセージの相関を可能にするBPELメカニズムです。この方法を使用するには、.bpelファイルに相関セットを定義します。この方法は、WS-Addressingをサポートしないサービス用、または対話がA > B > AではなくA > B > C > Aという形式の場合など、一定の高度な対話パターン用に設計されています。

この項では、Oracle JDeveloperを使用して非同期サービスで相関セットを使用する方法について説明します。相関セットでは、メッセージ本体の内容に基づいて非同期メッセージを関係付けることができます。相関セットは、連携が単純なinvokeとreceiveアクティビティでない場合に定義します。この例では、invokeアクティビティが関連付けられていないreceiveアクティビティを3つ含むプロセスに相関セットを使用する方法を示します。

9.1.1 非同期サービスでの相関セットの使用方法

この項では、非同期サービスで相関セットを使用するための手順について説明します。

9.1.1.1 ステップ1: プロジェクトの作成

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

1. Oracle JDeveloperを起動します。

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

3. 「SOAアプリケーション」を選択し、「OK」をクリックします。
SOAアプリケーションの作成ウィザードが表示されます。

4. 「アプリケーション名」フィールドに、名前を入力します(この例ではMyCorrelationSetAppが入力されています)。

5. 残りのすべての設定に対するデフォルト値をそのまま使用し、「次へ」をクリックします。

6. 「プロジェクト名」フィールドに、名前を入力します(この例ではMyCorrelationSetCompositeが入力されています)。

7. 残りのすべての設定に対するデフォルト値をそのまま使用し、「次へ」をクリックします。

8. 「コンポジット・テンプレート」セクションで、BPELプロセスを使用するコンポジットを選択し、「終了」をクリックします。
「BPELプロセスの作成」ダイアログが表示されます。

9. 表9-1に示されている値を入力します。

表9-1 「BPELプロセスの作成」ダイアログのフィールドと値

フィールド

値

名前

名前を入力します(この例ではMyCorrelationSetが入力されています)。

テンプレート

「非同期BPELプロセス」を選択します。

SOAPサービスとして公開

チェック・ボックスを選択します。プロセスを作成すると、SOAPサービスが「公開されたサービス」スイムレーンに表示されることに注意してください。このサービスは外部からコンポジット・アプリケーションへのエントリ・ポイントを提供します。

10. 残りのすべての設定に対するデフォルト値をそのまま使用し、「OK」をクリックします。

9.1.1.2 ステップ2: パートナ・リンクとファイル・アダプタ・サービスの構成

次に、SOAPサービスを使用する3つのパートナ・リンクを作成します。

この項では、次の内容を説明します。

- 融資申請読取り用のアダプタ・サービスを持つ最初のパートナ・リンクを作成します。

- 申請レスポンス読取り用のアダプタ・サービスを持つ2番目のパートナ・リンクを作成します。

- 顧客レスポンス読取り用のアダプタ・サービスを持つ3番目のパートナ・リンクを作成します。

9.1.1.2.1 最初のパートナ・リンクとファイル・アダプタ・サービスの作成

最初のパートナ・リンクとファイル・アダプタ・サービスを作成する手順は、次のとおりです。

1. 「MyCorrelationSet」 BPELプロセスをダブルクリックします。

2. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

3. 最初の「パートナ・リンク」アクティビティをデザイナの右スイムレーンにドラッグします。

4. 最上部の3つ目のアイコン(「サービス・ウィザード」アイコン)をクリックします。図9-1に示すように、この操作でアダプタ構成ウィザードが起動します。

図9-1 アダプタ構成ウィザードの起動

「図9-1 アダプタ構成ウィザードの起動」の説明

5. 「サービスまたはアダプタの設定」ダイアログで「ファイル・アダプタ」を選択し、「OK」をクリックします。

6. 「ようこそ」ダイアログで「次へ」をクリックします。

7. 「サービス名」ダイアログの「サービス名」フィールドに、名前を入力し(この例ではFirstReceiveが入力されている)、「次へ」をクリックします。

8. 「アダプタ・インタフェース」ダイアログで、デフォルト設定をそのまま使用し、「次へ」をクリックします。

9. 「操作」ダイアログで「操作タイプ」として「Read File」を選択し、「次へ」をクリックします。「操作名」フィールドには、Readが自動的に入力されます。

10. 「着信ファイル用のディレクトリ(物理パス)」フィールドの上で「参照」をクリックします。

11. ファイルの読取り元のディレクトリを選択します(この例ではC:\files\receiveprocess\FirstInputDirを選択します)。

12. 「選択」をクリックします。

13. 「次へ」をクリックします。

14. 「ファイルのフィルタ処理」ダイアログで、適切なファイル・フィルタ・パラメータを入力します。

15. 「次へ」をクリックします。

16. 「ファイル・ポーリング」ダイアログで、適切なファイル・ポーリング・パラメータを入力します。

17. 「次へ」をクリックします。

18. 「メッセージ」ダイアログで「URL」フィールドの横にある「参照」をクリックして、「タイプ・チューザ」ダイアログを表示します。

19. 適切なXSDスキーマ・ファイルを選択します。この例では、Book1_4.xsdはスキーマであり、スキーマ要素としてLoanApplが選択されています。

20. 「OK」をクリックします。
「URL」フィールドと「スキーマ要素」フィールドに値が入力されます(この例ではそれぞれBook1_4.xsdとLoanAppl)。

21. 「次へ」をクリックします。

22. 「終了」をクリックします。
「パートナ・リンク」ダイアログが再び表示されます。その他すべてのフィールドには値が自動的に入力されます。ダイアログは表9-2のようになります。

表9-2 「パートナ・リンク」ダイアログのフィールドと値

フィールド

値

名前

FirstReceive

WSDL URL

directory_path/FirstReceive.wsdl

パートナ・リンク・タイプ

Read_plt

パートナ・ロール

何も指定しません。

マイ・ロール

Read_role

23. 「OK」をクリックします。

9.1.1.2.2 2番目のパートナ・リンクとファイル・アダプタ・サービスの作成

2番目のパートナ・リンクとファイル・アダプタ・サービスを作成する手順は、次のとおりです。

1. 2番目の「パートナ・リンク」アクティビティを「FirstReceive」パートナ・リンク・アクティビティの下にドラッグします。

2. 最上部の3つ目のアイコン(「サービス・ウィザード」アイコン)をクリックします。

3. 「サービスまたはアダプタの設定」ダイアログで「ファイル・アダプタ」を選択し、「OK」をクリックします。

4. 「ようこそ」ダイアログで「次へ」をクリックします。

5. 「アダプタ・タイプ」ダイアログで「ファイル・アダプタ」を選択し、「次へ」をクリックします。

6. 「サービス名」ダイアログの「サービス名」フィールドに、名前を入力し(この例ではSecondFileReadが入力されている)、「次へ」をクリックします。この名前は、第9.1.1.2.1項「最初のパートナ・リンクとファイル・アダプタ・サービスの作成」のステップ7で入力した名前とは異なる必要があります。

7. 「アダプタ・インタフェース」ダイアログで、デフォルト設定をそのまま使用し、「次へ」をクリックします。

8. 「操作」ダイアログで「操作タイプ」として「Read File」を選択します。

9. 「操作名」フィールドで、名前を変更します(この例ではRead1が入力されています)。

10. 「次へ」をクリックします。

11. 「物理パス」として「ディレクトリ名は次の方法で指定します」を選択します。

12. 「着信ファイル用のディレクトリ(物理パス)」フィールドの上で「参照」をクリックします。

13. ファイルの読取り元のディレクトリを選択します(この例ではC:\files\receiveprocess\SecondInputDirと入力します)。

14. 「選択」をクリックします。

15. 「次へ」をクリックします。

16. 「ファイルのフィルタ処理」ダイアログで、適切なファイル・フィルタ処理パラメータを入力します。

17. 「次へ」をクリックします。

18. 「ファイル・ポーリング」ダイアログで、適切なファイル・ポーリング・パラメータを入力します。

19. 「次へ」をクリックします。

20. 「メッセージ」ダイアログで「URL」フィールドの横にある「参照」をクリックして、「タイプ・チューザ」ダイアログを表示します。

21. 適切なXSDスキーマ・ファイルを選択します。この例では、Book1_5.xsdはスキーマであり、スキーマ要素としてLoanAppResponseが選択されています。

22. 「OK」をクリックします。
「URL」フィールドと「スキーマ要素」フィールドに値が入力されます(この例ではそれぞれBook1_5.xsdとLoanAppResponse)。

23. 「次へ」をクリックします。

24. 「終了」をクリックします。
「パートナ・リンク」ダイアログが再び表示されます。その他すべてのフィールドには値が自動的に入力されます。ダイアログは表9-3のようになります。

表9-3 「パートナ・リンク」ダイアログのフィールドと値

フィールド

値

名前

SecondReceive

WSDL URL

directory_path/SecondFileRead.wsdl

パートナ・リンク・タイプ

Read1_plt

パートナ・ロール

何も指定しません。

マイ・ロール

Read1_role

25. 「OK」をクリックします。

9.1.1.2.3 3番目のパートナ・リンクとファイル・アダプタ・サービスの作成

3番目のパートナ・リンクとファイル・アダプタ・サービスを作成する手順は、次のとおりです。

1. 3番目の「パートナ・リンク」アクティビティを「SecondReceive」パートナ・リンク・アクティビティの下にドラッグします。

2. 最上部の3つ目のアイコン(「サービス・ウィザード」アイコン)をクリックします。

3. 「サービスまたはアダプタの設定」ダイアログで「ファイル・アダプタ」を選択し、「OK」をクリックします。

4. 「ようこそ」ダイアログで「次へ」をクリックします。

5. 「アダプタ・タイプ」ダイアログで「ファイル・アダプタ」を選択し、「次へ」をクリックします。

6. 「サービス名」ダイアログの「サービス名」フィールドに、名前を入力し(この例ではThirdFileReadが入力されている)、「次へ」をクリックします。この名前は、第9.1.1.2.1項「最初のパートナ・リンクとファイル・アダプタ・サービスの作成」のステップ7および第9.1.1.2.2項「2番目のパートナ・リンクとファイル・アダプタ・サービスの作成」のステップ6で入力した名前とは異なる必要があります。

7. 「アダプタ・インタフェース」ダイアログで、デフォルト設定をそのまま使用し、「次へ」をクリックします。

8. 「操作」ダイアログで「操作タイプ」として「Read File」を選択します。

9. 「操作名」フィールドで、名前を変更します(この例ではRead2が入力されています)。この名前は一意である必要があります。

10. 「次へ」をクリックします。

11. 「物理パス」として「ディレクトリ名は次の方法で指定します」を選択します。

12. 「着信ファイル用のディレクトリ(物理パス)」フィールドの上で「参照」をクリックします。

13. ファイルの読取り元のディレクトリを選択します(この例ではC:\files\receiveprocess\ThirdInputDirと入力します)。

14. 「選択」をクリックします。

15. 「次へ」をクリックします。

16. 「ファイルのフィルタ処理」ダイアログで、適切なファイル・フィルタ処理パラメータを入力します。

17. 「次へ」をクリックします。

18. 「ファイル・ポーリング」ダイアログで、適切なファイル・ポーリング・パラメータを入力します。

19. 「次へ」をクリックします。

20. 「メッセージ」ダイアログで「URL」フィールドの横にある「参照」をクリックして、「タイプ・チューザ」ダイアログを表示します。

21. 適切なXSDスキーマ・ファイルを選択します。この例では、Book1_6.xsdはスキーマであり、スキーマ要素としてCustResponseが選択されています。

22. 「OK」をクリックします。
「URL」フィールドと「スキーマ要素」フィールドに値が入力されます(この例ではそれぞれBook1_6.xsdとCustResponse)。

23. 「次へ」をクリックします。

24. 「終了」をクリックします。
「パートナ・リンク」ダイアログが再び表示されます。その他すべてのフィールドには値が自動的に入力されます。ダイアログは表9-4のようになります。

表9-4 「パートナ・リンク」ダイアログのフィールドと値

フィールド

値

名前

ThirdReceive

WSDL URL

directory_path/ThirdFileRead.wsdl

パートナ・リンク・タイプ

Read2_plt

パートナ・ロール

何も指定しません。

マイ・ロール

Read2_role

25. 「OK」をクリックします。

9.1.1.3 ステップ3: 3つのreceiveアクティビティの作成

次に、3つのreceiveアクティビティ(各パートナ・リンクにつき1つずつ)を作成します。receiveアクティビティでは、情報の送信元のパートナ・リンクを指定します。

9.1.1.3.1 最初のreceiveアクティビティの作成

最初のreceiveアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. デザイナの「receiveInput」receiveアクティビティの下に、「Receive」アクティビティをドラッグ・アンド・ドロップします。

3. 「Receive」アイコンをダブルクリックし、「Receive」ダイアログを表示します。

4. 表9-5に示す詳細を入力して、最初のパートナ・リンク(FirstReceive)を最初のreceiveアクティビティと関連付けます。

表9-5 「Receive」ダイアログのフィールドと値

フィールド

値

名前

receiveFirst

パートナ・リンク

FirstReceive

インスタンスの作成

このチェック・ボックスを選択します。

「操作」(Read)フィールドは自動的に入力されます。

5. 「変数」フィールドの右側にある最初のアイコンをクリックします。これは、変数を自動作成するアイコンです。

6. 「変数の作成」ダイアログで「OK」をクリックします。
receiveFirst_Read_InputVariableという名前の変数が自動的に「変数」フィールドに作成されます。

7. 手順4の説明にあるように「インスタンスの作成」チェック・ボックスが選択されていることを確認します。

8. 「OK」をクリックします。

9.1.1.3.2 2番目のreceiveアクティビティの作成

2番目のreceiveアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」から2番目のreceiveアクティビティを「receiveFirst」receiveアクティビティの下にドラッグします。

2. 「Receive」アイコンをダブルクリックし、「Receive」ダイアログを表示します。

3. 表9-6に示す詳細を入力して、2番目のパートナ・リンク(SecondReceive)を2番目のreceiveアクティビティと関連付けます。

表9-6 「Receive」ダイアログのフィールドと値

フィールド

値

名前

receiveSecond

パートナ・リンク

SecondFileRead

インスタンスの作成

このチェック・ボックスは選択しないでください。

「操作」(Read1)フィールドは自動的に入力されます。

4. 「変数」フィールドの右側にある最初のアイコンをクリックします。

5. 「変数の作成」ダイアログで「OK」をクリックします。
receiveSecond_Read1_InputVariableという名前の変数が自動的に「変数」フィールドに作成されます。

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

9.1.1.3.3 3番目のreceiveアクティビティの作成

3番目のreceiveアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」から3番目のreceiveアクティビティを「receiveSecond」receiveアクティビティの下にドラッグします。

2. 「Receive」アイコンをダブルクリックし、「Receive」ダイアログを表示します。

3. 表9-7に示す詳細を入力して、3番目のパートナ・リンク(ThirdReceive)を3番目のreceiveアクティビティと関連付けます。

表9-7 「Receive」ダイアログのフィールドと値

フィールド

値

名前

receiveThird

パートナ・リンク

ThirdFileRead

インスタンスの作成

このチェック・ボックスは選択しないでください。

「操作」(Read2)フィールドは自動的に入力されます。

4. 「変数」フィールドの右側にある最初のアイコンをクリックします。

5. 「変数の作成」ダイアログで「OK」をクリックします。
receiveThird_Read2_InputVariableという名前の変数が自動的に「変数」フィールドに作成されます。

6. 「OK」をクリックします。
各receiveアクティビティが、特定のパートナ・リンクに関連付けられました。

9.1.1.4 ステップ4: 相関セットの作成

次に、相関セットを作成します。相関トークンのセットは、相関グループのすべてのメッセージで共有されるプロパティのセットです。

9.1.1.4.1 最初の相関セットの作成

最初の相関セットを作成する手順は、次のとおりです。

1. Oracle JDeveloperの「構造」ウィンドウで「相関セット」を右クリックし、「すべての子ノードを開く」を選択します。

2. 2番目の「相関セット」フォルダを右クリックして、「相関セットの作成」を選択します。

3. 「相関セットの作成」ダイアログの「名前」フィールドでCorrelationSet1と入力します。

4. 「プロパティ」セクションで、「追加」アイコンをクリックして「プロパティ・チューザ」ダイアログを表示します。

5. 「プロパティ」を選択し、「追加」アイコン(上の最初のアイコン)をクリックして「プロパティの作成」ダイアログを表示します。

6. 「名前」フィールドに、NameCorrと入力します。

7. 「タイプ」フィールドの右側にある「参照」アイコンをクリックします。

8. 「タイプ・チューザ」ダイアログで「string」を選択し、「OK」をクリックします。

9. 各ダイアログで、「OK」をクリックして、「プロパティの作成」ダイアログ、「プロパティ・チューザ」ダイアログおよび「相関セットの作成」ダイアログを閉じます。

9.1.1.4.2 2番目の相関セットの作成

2番目の相関セットを作成する手順は、次のとおりです。

1. Oracle JDeveloperの「構造」ウィンドウの「相関セット」セクションに戻ります。

2. 「相関セット」フォルダを右クリックして、「相関セットの作成」を選択します。

3. 「相関セットの作成」ダイアログの「名前」フィールドでCorrelationSet2と入力します。

4. 「プロパティ」セクションで、「追加」アイコンをクリックして「プロパティ・チューザ」ダイアログを表示します。

5. 「プロパティ」を選択し、「追加」アイコンをクリックして「プロパティの作成」ダイアログを表示します。

6. 「名前」フィールドに、IDCorrと入力します。

7. 「タイプ」フィールドの右側にある「参照」アイコンをクリックします。

8. 「タイプ・チューザ」ダイアログで「double」を選択し、「OK」をクリックします。

9. 各ダイアログで、「OK」をクリックして、「プロパティの作成」ダイアログ、「プロパティ・チューザ」ダイアログおよび「相関セットの作成」ダイアログを閉じます。

9.1.1.5 ステップ5: 相関セットとreceiveアクティビティの関連付け

次に、相関セットをreceiveアクティビティと関連付けます。次の相関セットのタスクを実行します。

- 最初の相関グループで、最初と2番目のreceiveアクティビティをCorrelationSet1相関セットと関連付けます。

- 2番目の相関グループで、2番目と3番目のreceiveアクティビティをCorrelationSet2相関セットと関連付けます。

9.1.1.5.1 receiveアクティビティへの最初の相関セットの関連付け

最初の相関セットをreceiveアクティビティに関連付ける手順は、次のとおりです。

1. 「receiveFirst」receiveアクティビティをダブルクリックし、「Receive」ダイアログを表示します。

2. 「相関」タブをクリックします。

3. 「追加」アイコンをクリックして、「相関セット」ドロップダウン・リストを表示します。

4. 「CorrelationSet1」を選択します。

5. 「開始」列をクリックしてドロップダウン・リストを表示し、「はい」に設定します。「はい」に設定すると、このセットが、交換するメッセージに含まれるプロパティの値で開始されます。

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

9.1.1.5.2 receiveアクティビティへの2番目の相関セットの関連付け

2番目の相関セットをreceiveアクティビティに関連付ける手順は、次のとおりです。

1. 「receiveSecond」receiveアクティビティをダブルクリックし、「Receive」ダイアログを表示します。

2. 「相関」タブをクリックします。

3. 「追加」アイコンをクリックして、「相関セット」ドロップダウン・リストを表示します。

4. 「CorrelationSet2」を選択し、次に「OK」をクリックします。

5. 「開始」列をクリックしてドロップダウン・リストを表示し、「はい」に設定します。

6. 「追加」を再度クリックし、「CorrelationSet1」を選択します。

7. 「OK」をクリックします。

8. 「開始」列をクリックしてドロップダウン・リストを表示し、「CorrelationSet1」で「いいえ」を選択します。

9. 「OK」をクリックします。
これにより、最初と2番目のreceiveアクティビティが1つの相関グループにまとめられます。

9.1.1.5.3 receiveアクティビティへの3番目の相関セットの関連付け

3番目の相関セットをreceiveアクティビティに関連付ける手順は、次のとおりです。

1. 「receiveThird」receiveアクティビティをダブルクリックし、「Receive」ダイアログを表示します。

2. 「相関」タブをクリックします。

3. 「追加」アイコンをクリックします。

4. 「CorrelationSet2」を選択します。

5. 「CorrelationSet2」の「開始」列を「いいえ」に設定します。

6. 「OK」をクリックします。
これにより、2番目と3番目のreceiveアクティビティが2番目の相関グループにまとめられます。

9.1.1.6 ステップ6: プロパティ・エイリアスの作成

プロパティ・エイリアスを使用すると、グローバル・プロパティを特定のメッセージ・パートのフィールドにマップできます。このアクションにより、プロパティ名を、メッセージのパートと場所を表すエイリアスにできます。このエイリアスは、XPath式で使用できます。

9.1.1.6.1 NameCorrのプロパティ・エイリアスの作成

NameCorr相関セットに次の2つのプロパティ・エイリアスを作成します。

- NameCorrをreceiveFirst receiveアクティビティのLoanApplメッセージ・タイプ・パートにマップします。このreceiveアクティビティをFirstReceiveパートナ・リンク(FirstReceive.wsdlファイルで定義)と関連付けます。

- NameCorrをreceiveSecond receiveアクティビティの受信メッセージ・タイプ・パートLoanAppResponseにマップします。このreceiveアクティビティをSecondReceiveパートナ・リンク(SecondFileRead.wsdlファイルで定義)と関連付けます。

NameCorrのプロパティ・エイリアスを作成する手順は、次のとおりです。

1. Oracle JDeveloperの「構造」ウィンドウで、「プロパティ・エイリアス」を右クリックします。

2. 「プロパティ・エイリアスの作成」を選択します。

3. 「プロパティ」リストから「NameCorr」を選択します。

4. 「メッセージ・タイプ」→「パートナ・リンク」→「FirstReceive」→「FirstReceive.wsdl」→「メッセージ・タイプ」→「LoanAppl_msg」→「Part - LoanAppl」の順に展開して選択します。

5. 「問合せ」フィールドで[Ctrl]キーを押しながら[Space]キーを押して、次のXPath式を定義します。

/ns2:LoanAppl/ns2:Name

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

7. ステップ1から3を繰り返して、NameCorrの2番目のプロパティ・エイリアスを作成します。

8. 「メッセージ・タイプ」→「プロジェクトのWSDLファイル」→「SecondFileRead.wsdl」→「メッセージ・タイプ」→「LoanAppResponse_msg」→「Part - LoanAppResponse」の順に展開して選択します。

9. 「問合せ」フィールドで[Ctrl]キーを押しながら[Space]キーを押して、次のXPath式を定義します。

/ns4:LoanAppResponse/ns4:APR

10. 「OK」をクリックします。

9.1.1.6.2 IDCorrのプロパティ・エイリアスの作成

IDCorr相関セットに次の2つのプロパティ・エイリアスを作成します。

- IDCorrをreceiveSecond receiveアクティビティのLoanAppResponseメッセージ・タイプ・パートにマップします。このreceiveアクティビティをSecondReceiveパートナ・リンク(SecondFileRead.wsdlファイルで定義)と関連付けます。

- IDCorrをreceiveThird receiveアクティビティのCustResponseメッセージ・タイプ・パートにマップします。このreceiveアクティビティをThirdReceiveパートナ・リンク(ThirdFileRead.wsdlファイルで定義)と関連付けます。

IDCorrのプロパティ・エイリアスを作成する手順は、次のとおりです。

1. 「構造」ウィンドウで、「プロパティ・エイリアス」を右クリックします。

2. 「プロパティ・エイリアスの作成」を選択します。

3. 「プロパティ」リストから「IDCorr」を選択します。

4. 「メッセージ・タイプ」→「プロジェクトのWSDLファイル」→「SecondFileRead.wsdl」→「メッセージ・タイプ」→「LoanAppResponse_msg」→「Part - LoanAppResponse」の順に展開して選択します。

5. 「問合せ」フィールドで[Ctrl]キーを押しながら[Space]キーを押して、次のXPath式を定義します。

/ns4:LoanAppResponse/ns4:APR

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

7. ステップ1から3を繰り返して、IDCorrの2番目のプロパティ・エイリアスを作成します。

8. 「メッセージ・タイプ」→「プロジェクトのWSDLファイル」→「ThirdFileRead.wsdl」→「メッセージ・タイプ」→「CustResponse_msg」→「Part - CustResponse」の順に展開して選択します。

9. 「問合せ」フィールドで[Ctrl]キーを押しながら[Space]キーを押して、次のXPath式を定義します。

/ns6:CustResponse/ns6:APR

これで、設計は完了します。

10. 「OK」をクリックします。

9.1.1.7 ステップ7: WSDLファイルのコンテンツの確認

WSDLファイルのコンテンツを確認する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」を更新する場合
相関セット・プロパティのNameCorrとIDCorrは、「アプリケーション・ナビゲータ」では、MyCorrelationSet_Properties.wsdlファイルに定義されています。

<definitions
name="properties"
targetNamespace="http://xmlns.oracle.com/MyCorrelationSet/correlationset"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<bpws:property name="NameCorr" type="xsd:string"/>
<bpws:property name="IDCorr" type="xsd:double"/>
</definitions>

プロパティ・エイリアスは、MyCorrelationSet.wsdlファイルに定義されています。

<bpws:propertyAlias propertyName="ns1:NameCorr"
messageType="ns3:LoanAppl_msg"
part="LoanAppl" query="/ns2:LoanAppl/ns2:Name"/>

<bpws:propertyAlias propertyName="ns1:NameCorr"
messageType="ns5:LoanAppResponse_msg"
part="LoanAppResponse" query="/ns4:LoanAppResponse/ns4:APR"/>

<bpws:propertyAlias propertyName="ns1:IDCorr"
messageType="ns5:LoanAppResponse_msg"
part="LoanAppResponse" query="/ns4:LoanAppResponse/ns4:APR"/>

<bpws:propertyAlias propertyName="ns1:IDCorr"
messageType="ns7:CustResponse_msg"
part="CustResponse" query="/ns6:CustResponse/ns6:APR"/>

この例では、BPELプロセス・サービス・コンポーネントはWebサービス・プロバイダとしては作成されていないので、MyCorrelationSet.wsdlファイルはBPELプロセス・サービス・コンポーネントでは参照されません。このため、旧WSDLに定義されている相関セットを参照するには、MyCorrelationSet.wsdlファイルをFirstReceive.wsdlファイル内にインポートする必要があります。

<import namespace="http://xmlns.oracle.com/MyCorrelationSet"
location="MyCorrelationSet.wsdl"/>

9.1.2 変換IDおよび異なるコンポジット・リビジョンに関する注意事項

SOAコンポジット・アプリケーションの違うリビジョンに同じ変換IDを使用しないでください。BPELプロセスで相関セットを使用する場合は、ユーザーが明示的に対話IDの値を管理します。対話IDの値の生成に関して、Oracle SOA Suiteによって妨害や制約が追加されることはありません。これは、Oracle SOA Suiteで違うリビジョンに対して同じ対話IDが生成されているように見えても、実際はユーザーがこの動作を管理するということを意味します。Oracle SOA Suiteでは、異なるリビジョンの別々のインスタンスに対して同じ対話IDを使用することは禁止されません。

相関セットを使用しない場合は、生成される対話IDはユーザーではなく、Oracle SOA Suiteによって決定されるため、生成される対話IDは一意になるので問題はありません。

Oracle SOA Suiteでは、コールバック・ルーティングでリビジョンのチェックは実行されません。コールバック・メッセージのルーティングは、次の情報にのみ基づきます。

- 対話ID: これは、入力値と相関セットに基づいて計算されます。プロセスの2つのリビジョンに同じ相関セットを使用し、インスタンスの作成時に同じ入力値を入力した場合は、両方のリビジョンとも同じ対話IDを使用してサブスクライブされます。この場合、あるリビジョンに対するコールバックが別のリビジョンに配信される場合に混乱が発生します。

- 操作名(両方のリビジョンで同じです)。

- BPELサービス・コンポーネント名(これも、両方のリビジョンで同じです)。

リビジョン番号の概念は、Oracle SOAコンポジット・アプリケーションには適用可能ですが、BPEL仕様には含まれていません。このため、ルーティングを決定するための要素としては使用されません。

また、コールバックのルーティングの一部としてリビジョンを追加すると、別の問題を引き起こす原因となります。コールバックを送信する場合は、エンドポイントURLも指定します。エンドポイントURLにコンポジット・リビジョンが含まれていない場合(非常に可能性は高い)、メッセージのルーティング先はデフォルトのリビジョンであると判断されます。もしOracle SOA Suiteの実行時にコールバック・ルーティングの一部としてリビジョンのチェックを追加すると、デフォルト以外のリビジョンのインスタンスに対してはコールバックを送信できなくなります。

たとえば、次のBPELプロセスがあるとします。

- receive_1という名前のreceiveアクティビティのエントリ(相関セットを使用)

- Webサービスを起動するinvokeアクティビティ

- receive_2という名前のreceiveアクティビティ

次の手順を実行すると仮定します。

1. BPELコンポーネントが含まれているcomposite_Aのリビジョン1.0をデプロイします。

2. 相関セットを使用しているリビジョン1.0のインスタンスを作成し、値に123と入力し、その結果conv_id = "123"が生成されます。
このタイミングで、このプロセスは一方向のinvokeアクティビティを介してWebサービスを起動し、receive_2アクティビティでコールバックの着信を待機します。

3. composite_Aのリビジョン2.0をデプロイし、その結果、2.0がデフォルトのリビジョンになります。
Webサービスは、リビジョン1.0のインスタンスに対してコールバックを送信します。しかし、URLの中でリビジョン番号は指定されていません。通常、ユーザーは、URLにリビジョン番号を使用しないようにコールバックを作成しています。これは、Webサービスは外部のものであるため、継続的にリビジョン・タグを使用するようにWebサービスの設定を変更できないからです。なぜならば、リビジョン・タグはOracle SOA Suite内部の仕様で、外部では認識できない概念であるからです。

リビジョン番号が指定されていないため、SOAサーバーではリビジョン番号が2.0であるとみなされるので、もしコールバックのルーティングにリビジョン番号を考慮した場合は、1.0が宛先であるこのコールバックを正しいリビジョンの1.0に転送できません。かわりに、2.0のデフォルトのリビジョンにルーティングしようとしますが、コールバックを待機している2.0のインスタンスは存在しません。

ユーザーは、リビジョンに基づいてコールバック・メッセージをルーティングすることはできません。コールバック・メッセージのルーティングの基準に使用可能なオプションは、変換ID (相関セットを使用しない場合は、これも使用不可)、操作名およびコンポーネント名のみです。

このような理由から、異なるインスタンスには別々の対話IDを使用して(つまり、変換IDの作成のための入力値には異なる値を使用して)混乱を回避し、ルーティングが対話IDのみに基づいて行われるようにする必要があります。

9.1.3 複数のパートを持つfromParts要素を使用したIMAの相関の設定に関する注意事項

次の使用例を考えてみます。

- タイプが同じ複数のパートを持つWSDLメッセージ・タイプのBPEL 2.0プロセス

- 前述のパートの要素タイプに基づいて定義されているプロパティ・エイリアス

各パートに対して定義されたfromPartsを持つfromParts要素を使用するインバウンド・メッセージ・アクティビティ(IMA) (receiveアクティビティ、scopeまたはpickアクティビティのonMessageブランチ、BPEL 2.0のscopeアクティビティのonEventブランチなど)を持つプロセスの場合、ランタイム環境でプロパティ・エイリアスが適用されるパートを判断できないため、相関を定義できません。

toParts要素およびfromParts要素を使用してWSDLメッセージ・パートをマッピングする方法の詳細は、第6.17項「BPEL 2.0でのWSDLメッセージ・パートのマップ」を参照してください。

9.2 同じインスタンスへのメッセージのルーティング

Oracle BPEL Process Managerでは、メッセージ集約機能がサポートされています。複数のメッセージが同じプロセス/パートナ・リンク/操作名にルーティングされる場合、最初のメッセージは新規インスタンスを作成するためにルーティングされ、後続のメッセージは中間プロセスのreceiveアクティビティを使用して作成されたインスタンスを続行するためにルーティングできます。

メッセージ集約を使用すると、同じ操作(またはイベント名)をreceiveアクティビティのエントリおよび中間プロセスのreceiveアクティビティで使用できます。

注意:

- この機能では集約のみが実行され、再順序付けは行われません。この機能は、正しくない順序で受信されるメッセージを適切な順序の形式になるよう再順序付けを行いません。したがって、最初のメッセージとは、単に処理された最初のメッセージを意味します。これは、時間順での最初のメッセージとは異なる場合があります。

- メッセージ集約機能を活用するには、相関セットを使用する必要があります。

- あいまいなコール(最初のreceiveアクティビティと中間プロセスのreceiveアクティビティの両方における)としての同期操作がサポートされています。ただし、これはこの機能の推奨される用途ではないため、使用しないようにしてください。

9.2.1 BPELプロセス・インスタンス作成の構成方法

reenableAggregationOnCompleteプロパティを使用して、メッセージをルーティングするために作成して使用するインスタンス数を制御できます。

BPELプロセス・インスタンス作成を構成する手順は、次のとおりです。

1. SOAコンポジット・エディタで、図9-2に示すように、BPELプロセス・サービス・コンポーネントを選択します。

図9-2 選択されたBPELプロセス・サービス・コンポーネント

「図9-2 選択されたBPELプロセス・サービス・コンポーネント」の説明

2. Oracle JDeveloperの右下の隅にある「プロパティ・インスペクタ」に移動します。「プロパティ・インスペクタ」が表示されない場合は、「表示」メイン・メニューから「プロパティ・インスペクタ」を選択します。

3. 図9-3に示すように、「プロパティ」セクションで「追加」アイコンをクリックします。

図9-3 プロパティ・インスペクタ

「図9-3 プロパティ・インスペクタ」の説明

「プロパティの作成」ダイアログが表示されます。

4. 「名前」フィールドで、bpel.config.reenableAggregationOnCompleteデプロイメント・ディスクリプタのプロパティを入力します。このタイプのデプロイメント・ディスクリプタには、接頭辞bpel.configが必要です。

5. 「値」フィールドで、表9-8の説明に従ってtrueと入力します。

表9-8 reenableAggregationOnCompleteプロパティ設定

値

説明

例

true

メッセージを処理する新規インスタンスが作成されます。ただし、メッセージの受信からインスタンスの完了までの間に、1つのウィンドウが表示されます。これにより、メッセージがDLV_MESSAGE表に残される場合があります。この設定により、競合状態が発生する場合があります。詳細は、表9-9を参照してください。

initiate操作を使用して、クライアントに対してメッセージ1から4を起動します。これにより、次のアクションが発生します。

- BPELプロセスの2つのインスタンスが作成されて完了されます。

- メッセージ1と2は最初のインスタンスに、メッセージ3と4は2番目のインスタンスにルーティングされます。

false

デフォルトの動作です。この設定により、集約機能が無効化されます。作成されるインスタンスは1つのみです。インスタンスによって処理されないメッセージは、DLV_MESSAGE表に残されます。ほとんどの環境で、この設定を使用することをお薦めします。

initiate操作を使用して、クライアントに対してメッセージ1から4を起動します。BPELプロセスの1つのインスタンスが作成されて完了されます。

同じ相関セットを使用する複数のメッセージを1つのBPELインスタンスにルーティングしないようにしてください。

図9-4は、完成した「プロパティの作成」ダイアログを示しています。

図9-4 「プロパティの作成」ダイアログ

「図9-4 「プロパティの作成」ダイアログ」の説明

6. 「OK」をクリックします。
composite.xmlファイル内のbpel.config接頭辞が付いたreenableAggregationOnCompleteプロパティは、次のようになります。

<composite name="Aggregation" revision="1.0" label="2011-07-10_13-52-24_174"
mode="active" state="on">
. . .
. . .
<component name="Aggregation" version="1.1">
<implementation.bpel src="Aggregation.bpel"/>
<property name="bpel.config.reenableAggregationOnComplete" type="xs:string"
many="false" override="may">true</property>
</component>
. . .
. . .
</composite>

9.2.2 receiveアクティビティのエントリと中間プロセスのreceiveアクティビティで同じ操作を使用する方法

例9-1に示すように、相関セットを作成するとします。Oracle BPEL Process Managerに対するすべてのメッセージは、同じ操作名にルーティングされます。メッセージの相関IDは同じとなります。インタフェースWSDLでは、アクティビティのエントリ(receiveInput)と中間プロセスのreceiveアクティビティ(Continue_Receive)が区別されません。すべてのメッセージはinitiate操作を使用して処理されます。すべてのメッセージをルーティングするシングル・インスタンスが作成されます。

このことは、同じパートナ・リンクについて異なる操作名を定義する必要があった11g リリース1 11.1.1.6より前のリリースとは異なります。プロセスで2つの操作を公開する必要があり、コール元で適切な操作名を選択する必要がありました。

例9-1 receiveアクティビティのエントリと中間プロセスのreceiveアクティビティにおける同じ操作の相関

<receive name="receiveInput" partnerLink="client" portType="client:BPELProcess1"
operation="initiate" variable="inputVariable" createInstance="yes">
<correlations>
<correlation initiate="yes" set="CorrelationSet_1"/>
</correlations>
</receive>

<!-- Asynchronous callback to the requester. (Note: the callback location and
correlation id is transparently handled using WS-addressing.) -->
<assign name="Assign_1">
<copy>
<from variable="inputVariable" part="payload"
query="/client:BPELProcess1ProcessRequest/client:input"/>
<to variable="Invoke_1_initiate_InputVariable" part="payload"
query="/ns1:BPELProcess2ProcessRequest/ns1:input"/>
</copy>
</assign>

<receive name="Continue_Receive" partnerLink="client"
portType="client:BPELProcess1" operation="initiate" variable="inputVariable"
createInstance="no">
<correlations>
<correlation initiate="no" set="CorrelationSet_1"/>
</correlations>
</receive>

イベント配信ネットワーク(EDN)のビジネス・イベントの場合、receiveアクティビティのエントリと中間プロセスのreceiveアクティビティの両方で、operation属性をbpelx:eventNameに置換します。

bpelx:eventName="ns3:initiateEvent"/>

次の情報が、DLV_AGGREGATION表に保持されます。

- 対話ID

- ドメイン名

- コンポーネント名とタイプ

- コンポジット名、ラベルおよびリビジョン

- 状態

- 受信日

- CIキー

- 主キー

この情報は、パージ・スクリプトまたはOracle Enterprise Manager Fusion Middleware Controlの「オプションを指定して削除」ダイアログを使用して、この表から削除できます。これら両方のオプションの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

9.2.3 相関セット使用時の新規インスタンスまたは既存インスタンスへのメッセージのルーティング方法

相関セットを使用したBPELプロセスでは、適切なルーティングが実行されます。メッセージは次のいずれかとなる可能性があります。

- 新しいインスタンスを作成する起動メッセージ

- 既存のインスタンスを続行するコールバック・メッセージ

図9-5に、同じ操作(process)を使用したreceiveアクティビティのエントリと中間プロセスのreceiveアクティビティを示します。

図9-5 新規インスタンスまたは既存インスタンスへの新規メッセージのルーティング

「図9-5 新規インスタンスまたは既存インスタンスへの新規メッセージのルーティング」の説明

例9-2に、同じ操作(process)を使用したreceiveアクティビティのエントリと中間プロセスのreceiveアクティビティの例を示します。

例9-2 新規インスタンスまたは既存インスタンスへの新規メッセージのルーティング

<receive name="receiveInput" partnerLink="client" portType="client:BPELProcess1"
operation="process" variable="inputVariable" createInstance="yes">
<correlations>
<correlation initiate="yes" set="CorrelationSet_1"/>
</correlations>
</receive>

<!-- some business logic -->

<while name="While_1" condition=*loop for 3 iterations*>
<sequence name="Sequence_1">
<receive name="Continue_Receive" partnerLink="client"
portType="client:BPELProcess1" operation="process" variable="inputVariable"
createInstance="no">
<correlations>
<correlation initiate="no" set="CorrelationSet_1"/>
</correlations>
</receive>

<!-- some business logic -->

</sequence>
</while>

例9-2の初期のシナリオでは、次のアクションがBPELプロセスP1で発生します。

- パートナによって、4つのメッセージ(メッセージ1、メッセージ2、メッセージ3およびメッセージ4)が同じパートナ(相関ID 101)に対して提供されます。

- メッセージ1によって、BPELプロセスP1の新しいインスタンスが作成されます。このメッセージは起動メッセージとしてマークされます。

- メッセージ2、3および4は、Continue_Receiveアクティビティを使用して受信されます。これらのメッセージはコールバック・メッセージとしてマークされます。

- whileループが3回反復されることが想定されるため、インスタンスが閉じます。

ここで、追加メッセージがルーティングされ、これにより、競合状態が発生する可能性があると想定します。表9-9に詳細を示します。

表9-9 メッセージ配信シナリオ

シナリオ

説明

起動メッセージとしてマーク

コールバック・メッセージとしてマーク

1

ここで、パートナによって、同じ相関ID(101)に対してメッセージ5が提供されると想定します。メッセージ5はBPELプロセスP1の新しいインスタンスを作成し、whileループ内のContinue_Receiveアクティビティで3つの追加メッセージ(6、7および8)を待機します。

- メッセージ1

- メッセージ5

- メッセージ2

- メッセージ3

- メッセージ4

- メッセージ6

- メッセージ7

- メッセージ8

2

メッセージ4と5が短い時間ウィンドウ内で受信される場合、メッセージ4によってインスタンスBPELプロセスP1が閉じ、メッセージ5がこのインスタンスへのコールバックとしてルーティングされる場合があります。このシナリオによって競合状態が発生する場合があります。次に例を示します。

- メッセージ6が到着すると、新しいインスタンスのreceiveアクティビティのエントリにルーティングされます。

- メッセージ7および8が、Continue_Receiveアクティビティにルーティングされます。

- メッセージ5は、BPELプロセス・サービス・エンジンのリカバリ部分によってのみContinue_Receiveアクティビティにルーティングされます。これは、クローズされたインスタンスに最初にルーティングされ、処理できなかったためです。

- メッセージ1

- メッセージ6

- メッセージ2

- メッセージ3

- メッセージ4

- メッセージ5

- メッセージ7

- メッセージ8

3

これはシナリオ2に類似しています。ただし、この場合、メッセージ7、8および9は受信されません。例:

- メッセージ5は、サブスクライバを待機する、未処理のコールバック・メッセージとなります。

- BPELプロセス・サービス・エンジンのリカバリにより、メッセージ5の処理が試行され、使用可能なサブスクライバが存在しないため失敗します。

メッセージ・リカバリにはいくつかのオプションがあります。

- Oracle Enterprise Manager Fusion Middleware Controlの「システムMBeanブラウザ」プロパティmaxRecoverAttemptを使用したコールバック・メッセージのリカバリ制限。この数によって、起動メッセージやコールバック・メッセージをリカバリするための自動リカバリによる試行回数が指定されます。リカバリ試行回数がこの数を超えると、メッセージの状態は「消耗済」に変更されます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の起動メッセージおよびコールバック・メッセージに対する自動リカバリ試行の構成に関する項を参照してください。

- カスタムSQLスクリプトを記述して、criteriaCallbackのstateが0に設定されていることを確認します。このコールバックの相関値は、クローズされた状態(state = 0)でCORRELATION_GROUPに存在します。これは、コールバック・メッセージにクローズされた集約インスタンスのマークが付けられていることを示しています。ビジネス・ロジックに基づいて、これらのインスタンスの取消しやパージを行うことができます。
注意: BPELは、対話ベースのシステムとして設計されています。未承諾メッセージが処理されていないときは、アプリケーションでは、相関集約の一部として常に受信メッセージを考慮し、ビジネス・ニーズに応じて、メッセージをサブスクライブして処理するか、または無視するかを選択します。

- メッセージ1

- メッセージ6

- メッセージ2

- メッセージ3

- メッセージ4

- メッセージ5

10 BPELプロセスでのパラレル・フローの使用

この章では、BPELプロセス・サービス・コンポーネントでのパラレル・フローの使用方法について説明します。パラレル・フローを使用すると、BPELプロセス・サービス・コンポーネントで複数のタスクを同時に実行できます。パラレル・フローは、時間を要する独立した複数のタスクを実行する必要がある場合に特に役立ちます。この章では、パラレル・ブランチの数をカスタマイズする方法についても説明します。

この章には次の項が含まれます:

- 第10.1項「BPELプロセスでのパラレル・フローの概要」

- 第10.2項「パラレル・フローの作成」

- 第10.3項「パラレル・ブランチ数のカスタマイズ」

SOAコンポジット・アプリケーションでのパラレル・フローの作成方法の詳細は、第3章「SOAサンプル・アプリケーションの概要」で説明されているFusion Order Demoアプリケーションを参照してください。

10.1 BPELプロセスでのパラレル・フローの概要

BPELプロセスでは、複数の非同期ソースからの情報の収集が必要になる場合があります。各コールバックに要する時間(時間数または日数)は明らかでないため、各サービスを一度に1つずつコールするのでは時間がかかりすぎることがあります。複数のコールを1つのパラレル・フローに分解することにより、BPELプロセス・サービス・コンポーネントは複数のWebサービスを同時に起動し、レスポンスが到着するたびに受信できます。この方法は時間の節約に効果的です。

図10-1は、Fusion Order Demoアプリケーションの「Retrieve_QuotesFromSuppliers」flowアクティビティを示しています。「Retrieve_QuotesFromSuppliers」flowアクティビティは、次の2つのサプライヤに注文情報をパラレルで送信します。

- 社内倉庫(InternalWarehouseService)

- 外部パートナ倉庫(PartnerSupplierMediator)

2つの倉庫は、注文に対する入札をflowアクティビティに返します。ここでは、2つの非同期コールバックがパラレルで実行されます。一方のコールバックは、もう一方のコールバックが先に完了するまで待機する必要がありません。各レスポンスは異なるグローバル変数に格納されます。

図10-1 パラレル・フローの起動

「図10-1 パラレル・フローの起動」の説明

10.1.1 シングル・スレッドでのフローのブランチのパラレル実行に関する注意事項

シングル・スレッドではflow、flowNおよびforEachアクティビティ内のブランチはシリアルで実行されます(つまり、N番目のブランチは、N-1の実行が完了した後にのみ実行されます)。実行は完全なパラレルではありません。これは、このモードでは、ブランチは複数の並行スレッドで実行されないためです。そのかわり、1つのスレッドでフローのブランチの実行が開始され、ブロック・アクティビティ(たとえば、同期のinvokeなど)に到達するまで続行されます。このときは、新しいスレッドが作成されて他のブランチの実行が開始され、プロセスは続行されます。このため、フローのブランチはパラレルで実行されている印象を受けます。このモードでは、フローのブランチにブロック・アクティビティが定義されていない場合、ブランチはやはりシリアルで実行されます。

この設計は、いくつかの理由に基づいてこのようになっています。

- 誤ってスレッドを多く生成しすぎてシステムが高負荷状態になることがないように、シングル・スレッド処理がデフォルトの方式になっています。ただし、アダプタ・ポーリング・スレッドやBPELプロセスの呼出し/サービス・エンジン・スレッド、Oracle WebLogic Serverのワーク・マネージャなど、他の場所のスレッドはチューニングできます。

- BPELプロセスの仕様では、純粋なマルチスレッド・プログラミングに必要なBPEL変数のスレッド・セーフティが保証されるメカニズムは提供されていません(つまり、Javaなどにおける同期修飾子がサポートされていません)。

- ブランチの1つでのトランザクションのロールバックの実装は定義されていません。

疑似的なパラレル処理を実現するには、デプロイメント・ディスクリプタのプロパティnonBlockingInvokeを使用して、invokeアクティビティをブロックしないように構成できます。このプロパティをtrueに設定すると、各ブランチのinvokeアクティビティをパラレルで実行するための新しいスレッドが作成されます。

nonBlockingInvokeプロパティの詳細は、第C.1.1項「プロパティ・インスペクタでデプロイメント・ディスクリプタのプロパティを定義する方法」を参照してください。

10.2 パラレル・フローの作成

BPELプロセス・サービス・コンポーネントにパラレル・フローを作成するには、flowアクティビティを使用します。flowアクティビティを使用すると、1つ以上のアクティビティを同時に実行するように指定できます。flowアクティビティは同期性も備えています。flowアクティビティは、フロー内のすべてのアクティビティが処理を終了したときに完了します。このアクティビティが完了しても、許可条件がfalseの場合はスキップされている可能性があります。

注意:

flowアクティビティ内のブランチは、シングル・スレッドでシリアルで実行されます。詳細は、第10.1.1項「シングル・スレッドでのフローのブランチのパラレル実行に関する注意事項」を参照してください。

10.2.1 パラレル・フローの作成方法

パラレル・フローを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. flowアクティビティをデザイナにドラッグします。

3. 図10-2に示すように、+記号をクリックしてflowアクティビティを開きます。

図10-2 flowアクティビティ

「図10-2 flowアクティビティ」の説明

flowアクティビティには、最初に2つのブランチがあり、各ブランチには機能要素用のボックスがあります。これらのボックスにデータを移入するには、scopeアクティビティの場合のように、機能を作成するか、複数のアクティビティをボックスにドラッグします。flowアクティビティを強調表示し、「シーケンスの追加」アイコンをクリックすることで、ブランチを追加できます。

4. 複数のサービスを同時に起動するには、追加するアクティビティをflowの両側にドラッグして定義します。図10-3に詳細を示します。

図10-3 開いた状態のflowアクティビティ

「図10-3 開いた状態のflowアクティビティ」の説明

完了すると、flowアクティビティの設計は図10-4のようになります。この例は、Fusion Order Demoアプリケーションの「Retrieve_QuotesFromSuppliers」 flowアクティビティを示しています。入札を受け取るために、「InternalWarehouseService」および「PartnerSupplierMediator」の2つのブランチが定義されています。

図10-4 設計完了後のflowアクティビティ

「図10-4 設計完了後のflowアクティビティ」の説明

10.2.2 パラレル・フロー作成時の処理内容

通常、flowアクティビティには多数のsequenceアクティビティが含まれています。各sequenceはパラレルに実行されます。例10-1に、設計完了後のOrderProcessor.bpelファイルのRetrieve_QuotesFromSuppliers flowアクティビティに対してsequenceが2つある構文を示します。ただし、flowアクティビティには多数のsequenceを指定できます。flowアクティビティには、他のアクティビティを含めることもできます。例10-1では、flowの各sequenceにassign、invokeおよびreceiveアクティビティが含まれています。

図10-1 flowアクティビティ

<flow name="Retrieve_QuotesFromSuppliers">
<sequence name="Sequence_4">
<assign name="Assign_InternalWarehouseRequest">
<copy>
<from variable="gOrderInfoVariable"
query="/ns4:orderInfoVOSDO/ns4:OrderId"/>
<to variable="lInternalWarehouseInputVariable"
part="payload"
query="/ns1:WarehouseRequest/ns1:orderId"/>
</copy>
</assign>
<invoke name="Invoke_InternalWarehouse"
inputVariable="lInternalWarehouseInputVariable"
partnerLink="InternalWarehouseService"
portType="ns1:InternalWarehouseService"
operation="process"/>
<receive name="Receive_InternalWarehouse"
createInstance="no"
variable="lInternalWarehouseResponseVariable"
partnerLink="InternalWarehouseService"
portType="ns1:InternalWarehouseServiceCallback"
operation="processResponse"/>
<assign name="Assign_InterWHResponse">
<bpelx:append>
<bpelx:from variable="lInternalWarehouseResponseVariable"
part="payload"
query="/ns1:WarehouseResponse"/>
<bpelx:to variable="gWarehouseQuotes"
query="/ns1:WarehouseList"/>
</bpelx:append>
</assign>
</sequence>
<sequence name="Sequence_4">
<assign name="Assign_PartnerRequest">
<copy>
<from variable="gOrderInfoVariable"
query="/ns4:orderInfoVOSDO"/>
<to variable="lPartnerSupplierInputVariable"
part="request" query="/ns4:orderInfoVOSDO"/>
</copy>
</assign>
<invoke name="Invoke_PartnerSupplier"
partnerLink="PartnerSupplierMediator"
portType="ns15:execute_ptt" operation="execute"
inputVariable="lPartnerSupplierInputVariable"/>
<receive name="Receive_PartnerResponse"
createInstance="no"
variable="lPartnerResponseVariable"
partnerLink="PartnerSupplierMediator"
portType="ns15:callback_ptt" operation="callback"/>
<assign name="Assign_PartnerWHResponse">
<bpelx:append>
<bpelx:from variable="lPartnerResponseVariable"
part="callback"
query="/ns1:WarehouseResponse"/>
<bpelx:to variable="gWarehouseQuotes"
query="/ns1:WarehouseList"/>
</bpelx:append>
</assign>
</sequence>
</flow>

10.2.3 flowアクティビティ内のアクティビティ実行の同期化

flowアクティビティ内のアクティビティの実行を同期化すると、他のアクティビティが完了した後にのみ特定のアクティビティを実行できるようになります。たとえば、invokeアクティビティverifyFlightがあり、flowの開始時に他のinvokeアクティビティ(verifyHotel、verifyCarRentalおよびscheduleFlight)と並行して実行されると仮定します。ただし、フライトのスケジュールが必要なのは、フライトが使用可能であることを確認した後のみです。したがって、verifyFlight invokeアクティビティとscheduleFlight invokeアクティビティの間にリンクを追加できます。このリンクにより、リンクのターゲットであるアクティビティ(scheduleFlight)は、リンクのソースであるアクティビティ(verifyFlight)が完了した場合のみ実行されることを示す、依存関係のレベルが指定されます。

例10-2に詳細を示します。リンク名verifyFlight-To-scheduleFlightは、ソースverifyFlight invokeアクティビティおよびターゲットscheduleFlight invokeアクティビティに割り当てられます。ソースverifyFlightの実行が完了した後、ターゲットscheduleFlightが実行されます。

例10-2 ソース・アクティビティとターゲット・アクティビティ間のリンク

<flow ...>
<links>
<link name="verifyFlight-To-scheduleFlight" />
</links>
<documentation>
Verify the availability of a flight, hotel, and rental car in parallel
</documentation>
<invoke name="verifyFlight" ...>
<sources>
<source linkName="verifyFlight-To-scheduleFlight" />
</sources>
</invoke>
<invoke name="verifyHotel" ... />
<invoke name="verifyCarRental" ... />
<invoke name="scheduleFlight" ...>
<targets>
<target linkName="verifyFlight-To-scheduleFlight" />
</targets>
</invoke>
</flow>

例10-2に、BPELバージョン2.0におけるリンク構文の例を示します。BPELバージョン1.1とBPELバージョン2.0では、リンク構文が若干異なります。

- BPELバージョン1.1では、<target>と<source>を使用します。

- BPELバージョン2.0では、<targets>と<sources>を使用します。

表10-1に詳細を示します。

表10-1 BPELバージョン1.1とBPELバージョン2.0のリンク構文

BPELバージョン1.1の例

BPELバージョン2.0の例

<flow>
<links>
<link name="XtoY"/>
<link name="CtoD"/>
</links>
<sequence name="X">
<source linkName="XtoY"/>
<invoke name="A" .../>
<invoke name="B" .../>
</sequence>
<sequence name"Y">
<target linkName="XtoY"/>
<receive name="C" ...>
<source linkName="CtoD"/>
</receive>
<invoke name="E" .../>
</sequence>
<invoke partnerLink="D" ...>
<target linkName="CtoD"/>
</invoke>
</flow>

<flow>
<links>
<link name="AtoB"/>
</links>
<assign name="B">
<targets>
<target linkName="AtoB"/>
</targets>
<copy>
<from>concat($output.payload,
'B')</from>
<to>$output.payload</to>
</copy>
</assign>
<assign name="A">
<sources>
<source linkName="AtoB"/>
</sources>
<copy>
<from>concat($output.payload,
'A')</from>
<to>$output.payload</to>
</copy>
</assign>
</flow>

10.2.4 flowアクティビティ内のアクティビティ間に同期を作成する方法

flowアクティビティ内のアクティビティ間に同期を作成する手順は、次のとおりです。

注意:

「ソース」タブおよび「ターゲット」タブは、BPEL 2.0プロジェクトでのみ使用できます。BPEL 1.1プロジェクトの場合、この機能を使用するには、BPELファイルを直接編集する必要があります。

1. flowアクティビティを作成します。詳細は、第10.2.1項「パラレル・フローの作成方法」を参照してください。

2. flowアクティビティの「一般」タブで、「追加」アイコンをクリックします。

3. 図10-5に示すように、リンクの名前を入力します。

図10-5 リンク名の作成

「図10-5 リンク名の作成」の説明

4. 「適用」→「OK」の順にクリックします。

5. 適切なアクティビティをフロー・アクティビティにドラッグし、ステップ3で定義したのと同じリンク名でソースとして定義します。ソースとターゲットのリンク名の値は、フロー・アクティビティで宣言されているリンク名と同じである必要があります。この例では、Aという名前のassignアクティビティがソースとして定義されています(図10-6)。

図10-6 ソース・アクティビティ

「図10-6 ソース・アクティビティ」の説明

各ソース・アクティビティは、指定されたリンクをたどるための保護手段として、オプションの「遷移条件」を指定できます。この列の行をクリックして「ブラウザ」アイコンを呼び出し、「式ビルダー」ダイアログにアクセスするか、または条件を作成します。「遷移条件」列を空白のままにすると、trueと評価されると想定されます。

6. assignアクティビティの適切なコピー・ルールを定義します。

7. 「適用」→「OK」の順にクリックします。

8. 追加のアクティビティをflowアクティビティにドラッグし、ステップ3で定義したのと同じリンク名を持つターゲットとして定義します。この例では、Bという名前の別のassignアクティビティが図10-7でターゲットとして定義されています。

図10-7 ターゲット・アクティビティ

「図10-7 ターゲット・アクティビティ」の説明

9. assignアクティビティの適切なコピー・ルールを定義します。

10. 「適用」→「OK」の順にクリックします。

11. BPELプロセスの設計を続行します。
完了後、設計は図10-8のようになります。

図10-8 リンクと同期された3つのflowアクティビティ

「図10-8 リンクと同期された3つのflowアクティビティ」の説明

10.2.5 flowアクティビティ内のアクティビティ間に同期を作成するときの処理内容

例10-3に、アクティビティ実行を同期化するためのリンクを持つ3つのflowアクティビティの設計が完了した後の.bpelファイルを示します。

- Flow_1は、単純なアクティビティ間のリンクを示します。
Flow_1にはAtoBという名前のリンクが含まれています。リンクのターゲットであるアクティビティ(assignアクティビティB)は、リンクのソースであるアクティビティ(assignアクティビティA)が完了した場合のみ実行されます。

- Flow_2は、単純なアクティビティと複合アクティビティの間のリンクを示します。
Flow_2にはAtoBという名前のリンクも含まれています。リンクのターゲットであるアクティビティ(assignアクティビティB)は、リンクのソースであるアクティビティ(scopeアクティビティscope1)が完了した場合のみ実行されます。

- Flow_3は、複合アクティビティ間のリンクを示します。
Flow_3にはAtoBという名前のリンクも含まれています。リンクのターゲットであるアクティビティ(sequenceアクティビティSequence_1)は、リンクのソースであるアクティビティ(scopeアクティビティscope2)が完了した場合のみ実行されます。

例10-3 リンクを含むflowアクティビティ

<!-- link between simple activities -->
<flow name=Flow_1>
<links>
<link name="AtoB"/>
</links>
<assign name="A">
<sources>
<source linkName="AtoB"/>
</sources>
<copy>
<from>concat($output.payload, 'A')</from>
<to>$output.payload</to>
</copy>
</assign>
<assign name="B">
<targets>
<target linkName="AtoB"/>
</targets>
<copy>
<from>concat($output.payload, 'B')</from>
<to>$output.payload</to>
</copy>
</assign>
</flow>

<!-- link between simple activity and composite activity -->
<flow name=Flow_2>
<links>
<link name="AtoB"/>
</links>
<scope name="scope1">
<sources>
<source linkName="AtoB"/>
</sources>
<assign name="A">
<copy>
<from>concat($output.payload, 'A')</from>
<to>$output.payload</to>
</copy>
</assign>
</scope>
<assign name="B">
<targets>
<target linkName="AtoB"/>
</targets>
<copy>
<from>concat($output.payload, 'B')</from>
<to>$output.payload</to>
</copy>
</assign>
</flow>

<!-- link between composite activities -->
<flow name=Flow_3>
<links>
<link name="AtoB"/>
</links>
<scope name="scope2">
<sources>
<source linkName="AtoB"/>
</sources>
<assign name="A">
<copy>
<from>concat($output.payload, 'A')</from>
<to>$output.payload</to>
</copy>
</assign>
</scope>
<sequence name="Sequence_1>
<targets>
<target linkName="AtoB"/>
</targets>
<assign name="B">
<copy>
<from>concat($output.payload, 'B')</from>
<to>$output.payload</to>
</copy>
</assign>
</sequence>
</flow>
</sequence>

10.2.6 ターゲット・アクティビティの結合条件に関する注意事項

ターゲット・アクティビティでオプションの結合条件を指定できます。結合条件の値はブール式です。結合条件が指定されていない場合、結合条件は、このアクティビティのすべての着信リンクのリンク・ステータスの分離(つまり、論理OR演算)になります。

Oracle BPELデザイナでは、結合条件を追加するための設計はサポートされていません。結合条件を追加するには、Oracle BPELデザイナの「ソース」ビューの.bpelファイルに条件を手動で追加する必要があります。

例10-4に、結合条件の例を示します。

例10-4 ターゲット・アクティビティの結合条件

<flow>
<links>
<link name="linkStatus2"/>
</links>
<empty name="E2">
<sources>
<source linkName="linkStatus2">
<transitionCondition>false()</transitionCondition>
</source>
</sources>
</empty>
<empty name="E2">
<targets>
<joinCondition>bpws:getLinkStatus('linkStatus2')=true()</joinCondition>
<target linkName="linkStatus2"/>
</targets>
</empty>
</flow>

10.3 パラレル・ブランチ数のカスタマイズ

この項では、次のアクティビティを使用してパラレル・ブランチの数をカスタマイズする方法について説明します。

- flowNアクティビティ(BPELバージョン1.1プロジェクト)

- forEachアクティビティ(BPELバージョン2.0プロジェクト)

注意:

flowNおよびforEachアクティビティ内のブランチは、シングル・スレッドでシリアルで実行されます。詳細は、第10.1.1項「シングル・スレッドでのフローのブランチのパラレル実行に関する注意事項」を参照してください。

10.3.1 BPEL 1.1のflowNアクティビティによるflowアクティビティ数のカスタマイズ

flowアクティビティでは、BPELコードによってパラレル・ブランチの数が決定されます。ただし、必要なブランチの数は、多くの場合、使用可能な情報に応じて異なります。flowNアクティビティは、Nの値に等しい複数のフローを作成します。この値は、使用可能なデータおよびプロセス内のロジックに基づいて実行時に定義されます。索引変数は、Nの値に到達するまで、新しいブランチが作成されるたびに増分されます。

flowNアクティビティは、任意の数のデータ要素に対してアクティビティを実行します。BPELプロセス・サービス・コンポーネントは、要素の数の変化に応じて適切に調整を実行します。

flowNで作成される各ブランチは、同じアクティビティを実行しますが、異なるデータを使用します。各ブランチは、索引変数を使用して入力変数を参照します。索引変数をXPath式で使用すると、そのブランチに固有のデータを取得できます。

たとえば、データの配列があるとします。BPELプロセス・サービス・コンポーネントは、count関数を使用して配列内の要素の数を判断します。次に、Nが要素の数に設定されます。索引変数は、事前に設定された値(デフォルトは0(ゼロ))で始まります。flowNは、複数のブランチを作成して配列の各要素を取得し、その要素に含まれるデータを使用してアクティビティを実行します。これらのブランチは、初期索引値とNの間のすべての値を使用して、パラレルに生成および実行されます。flowNは、索引変数がNの値に到達すると終了します。たとえば、配列に3つの要素が含まれている場合、Nは3に設定されます。索引変数が1で始まるとすると、flowNアクティビティは索引1、2および3を使用して3つのパラレル・ブランチを作成します。

flowNアクティビティでは、Webサービスから取得したデータなど、他のソースのデータも使用できます。

図10-9に、3つのホテルを参照するOracle Enterprise Manager Fusion Middleware ControlのflowNアクティビティの実行時フローを示します。この図は、BPELプロセス・サービス・コンポーネントではなく、プロセスを実際に実行する方法を示しているため、ビューそのものではありません。この例では、3つのホテルがありますが、ブランチの数は使用可能なホテルの数に応じて異なります。

図10-9 flowNアクティビティの実行を示すOracle Enterprise Manager Fusion Middleware Controlビュー

「図10-9 flowNアクティビティの実行を示すOracle Enterprise Manager Fusion Middleware Controlビュー」の説明

10.3.1.1 flowNアクティビティの作成方法

flowNアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「Oracle Extensions」を展開します。

2. flowNアクティビティをデザイナにドラッグします。

3. +記号をクリックしてflowNアクティビティを開きます。

4. flowNアクティビティをダブルクリックします。
図10-10に、「FlowN」ダイアログを示します。

図10-10 「FlowN」ダイアログ

「図10-10 「FlowN」ダイアログ」の説明

「FlowN」ダイアログでは次のことができます。

- アクティビティ名の設定

- 値またはNの値(作成するブランチ数)の計算式の入力

- 索引変数(各ブランチでの待機時間)の定義

5. 追加するアクティビティをflowNアクティビティにドラッグして定義します。
図10-11は、flowNアクティビティと他のアクティビティが表示されている様子を示しています。

図10-11 flowNアクティビティと他のアクティビティ

「図10-11 flowNアクティビティと他のアクティビティ」の説明

10.3.1.2 flowNアクティビティ作成時の処理内容

次のコードは、flowNアクティビティを使用して任意の数のホテルの情報を参照する.bpelファイルを示しています。次のアクションを実行します。

例10-5にsequence名を示します。

例10-5 sequence名

<sequence name="main">
<!-- Received input from requester.
Note: This maps to operation defined in NflowHotels.wsdl
The requester sends a set of hotels names wrapped into the "inputVariable"
-->

receiveアクティビティは、クライアント・パートナ・リンクをコールし、flowNアクティビティがNの数を定義してホテル情報を参照するために必要な情報を取得します。例10-6に例を示します。

例10-6 receiveアクティビティ

<receive name="receiveInput" partnerLink="client"
portType="client:NflowHotels" operation="initiate" variable="inputVariable"
createInstance="yes"/>
<!--
The 'count()' Xpath function is used to get the number of hotelName
noded passed in.
An intermediate variable called "NbParallelFlow" is
used to store the number of N flows being executed
-->
<assign name="getHotelsN">
<copy>
<from
expression="count($InputVariable.payload/client:HotelName);"/>
<to variable="NbParallelFlow"/>
</copy>
</assign>
<!-- Initiating the FlowN activity
The N value is initialized with the value stored in the
"NbParallelFlow" variable
The variable call "Index" is defined as the index variable
NOTE: Both "NbParallelFlow" and "Index" variables have to be declared
-->

次に、flowNアクティビティが開始されます。flowNのアクティビティの名前を定義した後、NをinputVariable(ホテル・エントリの数)の値として定義します。また、このアクティビティは、索引変数としてindexを割り当てます。例10-7に例を示します。

図10-7 flowNアクティビティ

<bpelx:flowN name="FlowN" N="bpws:getVariableData('NbParallelFlow')
indexVariable="Index'>
<sequence name="Sequence_1">
<!-- Fetching each hotelName by indexing the "inputVariable" with the
"Index" variable.
Note the usage of the  "concat()" Xpath function to create the
expression accessing the array element.
-->

例10-8に示すコピー・ルールで索引変数を使用し、複数のホテル・エントリを1つのリストに連結します。

例10-8 assignアクティビティ

<assign name="setHotelId">
<copy>
<from expression=
"bpws:getVariableData('inputVariable','payload',concat('/client:Nflo
wHotelsProcessRequest/client:ListOfHotels/client:HotelName[',
bpws:getVariableData('Index'),']'))"/>
<to variable="InvokeHotelDetailInputVariable" part="payload"
query="/ns2:hotelInfoRequest/ns2:id"/>
</copy>
</assign>

このホテル情報を使用して、invokeアクティビティは、Webサービスから各ホテルの詳細情報を参照します。例10-9に例を示します。

例10-9 invokeアクティビティ

<!-- For each hotel, invoke the web service giving detailed information
on the hotel -->
<invoke name="InvokeHotelDetail" partnerLink="getHotelDetail"
portType="ns2:getHotelDetail" operation="process"
inputVariable="InvokeHotelDetailInputVariable"
outputVariable="InvokeHotelDetailOutputVariable"/>
</sequence>
</bpelx:flowN>

最後に、このBPELプロセスは、各ホテルの詳細情報をクライアント・パートナ・リンクに送信します。例10-10に例を示します。

例10-10 invokeアクティビティ

<invoke name="callbackClient" partnerLink="client"
portType="client:NflowHotelsCallback" operation="onResult"
inputVariable="outputVariable"/>
</sequence>
</sequence>

10.3.2 BPEL 2.0のforEachアクティビティによるアクティビティの複数のセットの処理

forEachアクティビティを使用すると、アクティビティの複数のセットを順次、または並行して処理できます。forEachアクティビティは、含まれている(子)scopeアクティビティを正確にN+1回実行し、Nは、最終カウンタ値から、「For Each」ダイアログの「カウンタの値」タブで指定する開始カウンタ値を引いた値に等しくなります。flowアクティビティなど、他の構造化アクティビティは、含まれているアクティビティとして任意のタイプのアクティビティを使用できますが、forEachアクティビティにはscopeアクティビティのみ含めることができます。

forEachアクティビティを開始すると、開始カウンタ値と最終カウンタ値に指定した式が評価されます。この2つの値は、返された後、アクティビティのライフサイクルの間は変化しません。どちらの式も、少なくとも1文字を含む値を返す必要があります。これらの式が有効な値を返さない場合、フォルトがスローされます。開始カウンタ値が最終カウンタ値より大きい場合、含まれているscopeアクティビティは実行されず、forEachアクティビティは完了したとみなされます。

各反復中に、「一般」タブの「カウンタ名」フィールドに指定された変数は、forEachアクティビティに含まれているスコープで暗黙的に宣言されます。スコープの最初の反復中に、カウンタ変数は開始カウンタ値で初期化されます。次の反復で、カウンタ変数は開始カウンタ値+1で初期化されます。その後の反復のたびに、前に初期化されたカウンタ変数値が1ずつ増分され、カウンタ値が最終カウンタ値に設定される最後の反復まで繰り返されます。カウンタ変数は、囲まれたscopeアクティビティに対してローカルです。反復中に値を変更できますが、各反復の後にその値は失われます。したがって、カウンタ変数値は次の反復のカウンタ値には影響しません。

forEachアクティビティは、次のループ反復をサポートしています。

- 順次(デフォルト)
forEachアクティビティは、scopeアクティビティ内で定義されている特定のアクティビティのセットに対して、ループ反復を順番にN回実行します。例として、forEachアクティビティは、注文書メッセージがN個の受注品目で構成される、受信注文書メッセージに対して繰り返されるとします。囲まれたscopeアクティビティはN+1回実行され、各インスタンスは前の反復が完了した後にのみ開始されます。

- パラレル
すべてのループ反復は同時に開始され、並行して処理されます。並列反復は、独立したデータのセットが処理される環境、または異なるパートナとの独立した対話が並行して行われる環境で役に立ちます。並列ループを有効にするには、「一般」タブで「パラレル実行」チェック・ボックスを選択します。これらのシナリオでは、含まれているscopeアクティビティのN+1インスタンスが並行して実行されます。scopeアクティビティの各コピーには、順に実行されるforEachアクティビティに指定したのと同じ方法で宣言された、「一般」タブの「カウンタ名」フィールドで指定したものと同じカウンタ変数が使用されます。各インスタンスのカウンタ変数は、開始カウンタ値で始まり、最終カウンタ値まで増える整数値の1つで並行して一意に初期化される必要があります。

flowアクティビティと異なり、forEachアクティビティのパラレル・ブランチの数は設計時には不明です。指定されたカウンタ変数は、パラレル・ブランチ数を使用して繰り返され、開始カウンタ値および最終カウンタ値で制御されます。

「完了」タブで完了条件を指定することもできます。この条件により、forEachアクティビティは条件を実行し、指定されたすべてのブランチを実行または完了しなくても完了できます。例として、並列リクエストを送信し、十分な数の受信者のサブセットが返信したとします。次の状態を回避するために、オプションで完了条件が指定されます。

- いくつかの子の実行(順次ケース)

- 一部の子の強制的な早期終了(パラレル・ケース)

完了条件を指定しない場合、forEachアクティビティは、含まれているscopeが完了したときに完了します。

(フォルトまたはtrueと評価される完了条件により)早すぎる終了が発生した場合、N+1要件は適用されません。

例10-11に、forEachアクティビティ構文を示します。

例10-11 forEachアクティビティ

<forEach counterName="MyVariableName" parallel="yes|no"
standard-attributes>
standard-elements
<startCounterValue expressionLanguage="anyURI"?>
unsigned-integer-expression
</startCounterValue>
<finalCounterValue expressionLanguage="anyURI"?>
unsigned-integer-expression
</finalCounterValue>
<completionCondition>?
<branches expressionLanguage="anyURI"?
successfulBranchesOnly="yes|no"?>?
unsigned-integer-expression
</branches>
</completionCondition>
<scope ..>...</scope>
</forEach>

注意:

successfulBranchesOnly属性はこのリリースではサポートされません。

10.3.2.1 forEachアクティビティの作成方法

forEachアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. 図10-12に示すように、For Eachアクティビティをデザイナにドラッグします。
forEachアクティビティに含まれているscopeアクティビティを確認します。

図10-12 forEachアクティビティに含まれているscopeアクティビティ

「図10-12 forEachアクティビティに含まれているscopeアクティビティ」の説明

3. forEachアクティビティをダブルクリックします。

4. 図10-13に示すように、「一般」タブの「カウンタ名」フィールドにカウンタ値の名前を入力します。
「パラレル実行」チェック・ボックスが選択されている場合、すべてのループ反復が同時に開始され、並行して処理されます。次のブランチは、前のブランチが完了していなくても開始されます。選択されていない場合、次のブランチは、前のブランチが完了するまで開始されません。

図10-13 forEachアクティビティの「一般」タブ

「図10-13 forEachアクティビティの「一般」タブ」の説明

5. 「カウンタの値」タブをクリックします。

6. 図10-14に示すように、開始カウンタ値と最終カウンタ値を入力します。

図10-14 forEachアクティビティの「カウンタの値」タブ

「図10-14 forEachアクティビティの「カウンタの値」タブ」の説明

7. 「完了」タブをクリックします。

8. forEachアクティビティが条件を実行し、指定されたすべてのブランチを実行または完了しなくても完了できるようにする完了条件を指定する場合は、「式」フィールドの上の「XPath式ビルダー」アイコンをクリックして、条件を入力します。図10-15に詳細を示します。

図10-15 forEachアクティビティの「完了」タブ

「図10-15 forEachアクティビティの「完了」タブ」の説明

9. 「適用」→「OK」の順にクリックします。

10. ForEachアクティビティに含まれているscopeアクティビティを開きます。

11. 囲まれたscopeアクティビティを設計します。
完了後、forEachアクティビティと含まれているscopeアクティビティは、図10-16のような構造になります。

図10-16 含まれているscopeアクティビティと開いた状態のscopeアクティビティを持つforEachアクティビティ

「図10-16 含まれているscopeアクティビティと開いた状態のscopeアクティビティを持つforEachアクティビティ」の説明

10.3.2.2 forEachアクティビティ作成時の処理内容

例10-12に、順に実行されるforEachアクティビティの設計が完了した後の.bpelファイルを示します。

例10-12 forEachアクティビティ - 順次

<faultHandlers>
<catch faultName="bpel:invalidBranchCondition">
<sequence>
<assign>
<copy>
<from>'invalidBranchCondition happened'</from>
<to>$output.payload</to>
</copy>
</assign>

<reply name="replyOutput" partnerLink="client"
portType="tns:Test" operation="process" variable="output"/>
</sequence>
</catch>
</faultHandlers>
<sequence>
<!-- pick input from requester -->
<receive name="receive" createInstance="yes"
partnerLink="client" portType="tns:Test"
operation="process" variable="input"/>
<assign>
<copy>
<from>3</from>
<to>$request.payload</to>
</copy>
<copy>
<from>''</from>
<to>$output.payload</to>
</copy>
</assign>

<forEach counterName="i" parallel="no">
<startCounterValue>$input.payload/tns:startCounter+1</startCounterValue>
<finalCounterValue>$input.payload/tns:finalCounter+1</finalCounterValue>
<completionCondition>
<branches>$input.payload/tns:branches+1</branches>
</completionCondition>
<scope name="scope1">
<partnerLinks>
<partnerLink name="DummyService" partnerLinkType="tns:DummyService"
myRole="DummyServiceClient" partnerRole="DummyServiceProvider"/>
</partnerLinks>
<sequence>
<assign>
<copy>
<from>concat($output.payload, $i, 'A')</from>
<to>$output.payload</to>
</copy>
</assign>
<invoke name="invokeDummyService" partnerLink="DummyService"
portType="tns:DummyPortType"
operation="initiate" inputVariable="request"/>
<receive name="receiveFromDummyService" partnerLink="DummyService"
portType="tns:DummyCallbackPortType"
operation="onResult" variable="response"/>          <assign>
<copy>
<from>concat($output.payload, $i, 'B')</from>
<to>$output.payload</to>
</copy>
</assign>
</sequence>
</scope>
</forEach>

<!-- respond output to requester -->
<reply name="replyOutput" partnerLink="client"
portType="tns:Test" operation="process" variable="output"/>
</sequence>

例10-13に、パラレルforEachアクティビティの設計が完了した後の.bpelファイルを示します。

例10-13 forEachアクティビティ - パラレル

<sequence>
<!-- pick input from requester -->
<receive name="receive" createInstance="yes"
partnerLink="client" portType="tns:Test"
operation="process" variable="input"/>
<assign>
<copy>
<from>$input.payload/tns:value1</from>
<to>$request.payload</to>
</copy>
<copy>
<from>''</from>
<to>$output.payload</to>
</copy>
</assign>
<forEach counterName="i" parallel="yes">
<startCounterValue>($input.payload/tns:value1 + 1)</startCounterValue>
<finalCounterValue>($input.payload/tns:value2 + 2)</finalCounterValue>
<scope name="scope1">
<partnerLinks>
<partnerLink name="DummyService" partnerLinkType="tns:DummyService"
myRole="DummyServiceClient" partnerRole="DummyServiceProvider"/>
</partnerLinks>
<sequence>
<assign>
<copy>
<from>concat($output.payload, 'A')</from>
<to>$output.payload</to>
</copy>
</assign>
<invoke name="invokeDummyService" partnerLink="DummyService"
portType="tns:DummyPortType"
operation="initiate" inputVariable="request"/>
<receive name="receiveFromDummyService" partnerLink="DummyService"
portType="tns:DummyCallbackPortType"
operation="onResult" variable="response"/>
<assign>
<copy>
<from>concat($output.payload, 'B')</from>
<to>$output.payload</to>
</copy>
</assign>
</sequence>
</scope>
</forEach>
<!-- respond output to requester -->
<reply name="replyOutput" partnerLink="client"
portType="tns:Test" operation="process" variable="output"/>
</sequence>

11 BPELプロセスでの条件分岐の使用

この章では、BPELプロセス・サービス・コンポーネントでの条件分岐の使用方法について説明します。条件分岐により、BPELプロセス・サービス・コンポーネントの実行フローを制御するための判断ができるようになります。この章では、switch、if、while、repeatUntilの各アクティビティを使用して条件分岐を定義する方法、およびアクティビティの実行をバイパスできるXPath式を指定する方法についても説明します。

この章には次の項が含まれます:

- 第11.1項「条件分岐の概要」

- 第11.2項「switchまたはifアクティビティによる条件分岐の定義」

- 第11.3項「whileアクティビティによる条件分岐の定義」

- 第11.4項「repeatUntilアクティビティによる条件分岐の定義」

- 第11.5項「アクティビティの実行をバイパスするためのXPath式の指定」

SOAコンポジット・アプリケーションでの条件分岐の作成方法の詳細は、Fusion Order Demoアプリケーションを参照してください。

11.1 条件分岐の概要

BPELは、条件分岐によって選択するロジックを利用します。次のアクティビティを使用すると、条件分岐に基づいて異なるアクションを選択するコードを設計できます。

- switchアクティビティ(BPELバージョン1.1プロジェクト)
2つ以上のブランチを設定できます。各ブランチにはXPath式の形式を使用します。式がtrueの場合、そのブランチが実行されます。式がfalseの場合、BPELプロセス・サービス・コンポーネントは有効なブランチ条件が見つかるか、otherwiseブランチに達するか、ブランチがなくなるまで次のブランチ条件に進みます。複数のブランチ条件がtrueの場合は、最初にtrueと判断されたブランチがBPELにより実行されます。switchアクティビティの作成方法については、第11.2.1項「BPEL 1.1のswitchアクティビティの作成による条件分岐の定義」を参照してください。

- ifアクティビティ(BPELバージョン2.0プロジェクト)
2つ以上のブランチのいずれかに決めるために特定のアクティビティに条件動作が必要な場合、ifアクティビティを使用できます。ifアクティビティは、BPEL 1.1プロセスに見られたswitchアクティビティにかわるものです。ifアクティビティの作成方法の詳細は、第11.2.2項「BPEL 2.0のifアクティビティの作成による条件分岐の定義」を参照してください。

- whileアクティビティ
2つのアクション間で選択を実行するwhileループを作成できます。whileアクティビティの説明は、第11.3項「whileアクティビティによる条件分岐の定義」にあります。

多数のブランチが設定され、各ブランチにはXPath式形式の条件が指定されます。

条件分岐には、タイムアウトを設定できます。つまり、指定の期間内にレスポンスを生成できない場合、BPELフローは待機を中止し、そのアクティビティを再開できます。この機能の詳細は、第15章「BPELプロセスでのイベントおよびタイムアウトの使用」で説明します。

注意:

条件分岐ロジックはビジネス・ルールを使用して定義することもできます。詳細は、『Oracle Fusion Middleware Oracle Business Rulesユーザーズ・ガイド』およびWebLogic Fusion Order Demoアプリケーションを参照してください。

11.2 switchまたはifアクティビティによる条件分岐の定義

この項では、次のアクティビティを使用して条件分岐を定義する方法について説明します。

- BPELバージョン1.1プロジェクトのswitchアクティビティ

- BPELバージョン2.0プロジェクトのifアクティビティ

11.2.1 BPEL 1.1のswitchアクティビティの作成による条件分岐の定義

2社からの融資提案が同時に収集されるBPELプロセス・サービス・コンポーネントのflowアクティビティを設計し、ここではいずれの条件も比較されていないと仮定します。各条件は、それぞれのグローバル変数に格納されています。2つの提案を比較し、その比較に基づいて決定するには、switchアクティビティを使用できます。

図11-1に、switchアクティビティに定義されたBPEL条件分岐プロセスの概要を示します。

図11-1 条件分岐

「図11-1 条件分岐」の説明

11.2.1.1 switchアクティビティの作成方法

switchアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. 図11-2に示すように、switchアクティビティをデザイナにドラッグします。
switchアクティビティにはデフォルトで2つのswitch caseブランチがあり、各ブランチには機能要素を挿入するためのボックスがあります。ブランチを追加するには、switchアクティビティ全体を選択して右クリックし、メニューから「Switch Caseの追加」を選択します。

図11-2 switchアクティビティ

「図11-2 switchアクティビティ」の説明

3. 最初のブランチで、「条件」ボックスをダブルクリックします。
図11-3に示すように、条件を入力するためのダイアログが表示されます。

図11-3 「条件」ダイアログ

「図11-3 「条件」ダイアログ」の説明

4. 「ラベル」フィールドに、条件分岐の名前を入力します。完了すると、Oracle BPELデザイナにこの名前が表示されます。

5. 「説明」フィールドに、この条件分岐の機能に関する説明を入力します。

6. 「条件」フィールドで、「式ビルダー」アイコンをクリックして「式ビルダー」ダイアログにアクセスします。

7. 式を作成します。

bpws:getVariableDate('loanOffer1','payload','/loanOffer/APR') >
bpws:getVariableData('loanOffer2','payload','/loanOffer/APR')

この例では、融資企業からの完成した2つの融資提案は、グローバル変数loanOffer1およびloanOffer2に格納されます。それぞれの融資提案変数には、融資提案のAPRが格納されます。BPELフローは、APRが最も低い融資を選択する必要があります。次のいずれかのswitchアクティビティを実行します。

- loanOffer1のAPRのほうが高い場合、最初のブランチはloanOffer2のペイロードをselectedLoanOfferのペイロードに割り当てることで、loanOffer2を選択します。

- loanOffer1にloanOffer2より小さいAPRがない場合、otherwise caseはloanOffer1ペイロードをselectedLoanOfferペイロードに割り当てます。

8. 「OK」をクリックします。
式が表示されます。ダイアログの「ラベル」フィールドに入力した値は、条件分岐の名前になります。図11-4に詳細を示します。

図11-4 完成した「条件」ダイアログ

「図11-4 完成した「条件」ダイアログ」の説明

9. 「OK」をクリックします。

10. 必要に応じて、その他のアクティビティを追加および構成します。図11-5に詳細を示します。

図11-5 switchアクティビティの設計

「図11-5 switchアクティビティの設計」の説明

11.2.1.2 switchアクティビティ作成時の処理内容

flowアクティビティと同様に、switchアクティビティには複数のブランチがあります。例11-1では、2つのブランチのみが設計完了後の.bpelファイルに表示されています。最初のブランチは、United Loanという企業からの融資提案を選択するブランチであり、XPathブール式を含むcase条件が適合した場合に実行されます。適合しなかった場合は、Star Loanという企業からの融資提案を選択する2番目のブランチが実行されます。デフォルトでは、switchアクティビティに含まれるswitch caseは2つですが、必要に応じて追加できます。

例11-1 switchアクティビティ

<switch name="switch-1">
<case condition="bpws:getVariableData('loanOffer1','payload',
'/autoloan:loanOffer/autoloan:APR') >
bpws:getVariableData('loanOffer2','payload','/autoloan:loanOffer/autoloan:APR
')">
" name="Choose_the_Loan_with_the_Lower_APR">
<bpelx:annotation>
<bpelx:general>
<bpelx:property name="userLabel">Choose the Loan with
the Lower APR</bpelx:property>
</bpelx:general>
</bpelx:annotation>
<assign name="selectUnitedLoan">
<copy>
<from variable="loanOffer1" part="payload">
</from>
<to variable="selectedLoanOffer" part="payload"/>
</copy>
</assign>
</case>
<otherwise>
<assign name="selectStarLoan">
<copy>
<from variable="loanOffer2" part="payload">
</from>
<to variable="selectedLoanOffer" part="payload"/>
</copy>
</assign>
</otherwise>
</switch>

11.2.2 BPEL 2.0のifアクティビティの作成による条件分岐の定義

2つ以上のブランチのいずれかに決めるために特定のアクティビティに条件動作が必要な場合、ifアクティビティを使用できます。ブランチのセットから、実行するアクティビティが1つだけ選択されます。ifアクティビティは、次の順序で実行対象とみなされる1つ以上の条件分岐のリストで構成されます。

- ifブランチ

- オプションのelseifブランチ

- オプションのelseブランチ

条件がtrueに評価される最初のブランチが採用され、そこに含まれているアクティビティが実行されます。条件付きブランチが採用されない場合は、elseブランチが採用されます(存在する場合)。ifアクティビティは、選択されたブランチに含まれるアクティビティが完了した時点で、またはtrueに評価される条件がなまelseブランチが指定されていない場合にはただちに終了します。

ifアクティビティは、BPELバージョン1.1に含まれていたswitchアクティビティにかわる、BPELバージョン2.0の機能です。

例11-2にifアクティビティの構文を示します。

例11-2 ifアクティビティ

<if standard-attributes>
standard-elements
<condition>some conditon expression</condition>
activity
<elseif>*
<condition>some condition expression</condition>
some activity
</elseif>
<else>?
some activity
</else>
</if>

11.2.2.1 ifアクティビティの作成方法

ifアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. ifアクティビティをデザイナにドラッグします。
図11-6に示すように、if条件とelse条件が表示されます。

図11-6 ifアクティビティ

「図11-6 ifアクティビティ」の説明

3. elseif条件を追加する場合は、ifアクティビティを強調表示し、「追加」アイコンを選択してメニューを起動します。

4. ifブランチをクリックします。

5. 図11-7に示すように、「条件」フィールドに条件を入力します。「XPath式ビルダー」アイコンをクリックして、「式ビルダー」ダイアログを起動することもできます。

図11-7 ifアクティビティのifブランチ

「図11-7 ifアクティビティのifブランチ」の説明

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

7. 必要に応じて、追加のアクティビティをif条件にドラッグして定義します。これらのアクティビティは、if条件がtrueと評価された場合に実行されます。

8. elseifブランチをクリックします(このブランチを追加した場合)。

9. 図11-8に示すように、「条件」フィールドに条件を入力します。

図11-8 ifアクティビティのelseifブランチ

「図11-8 ifアクティビティのelseifブランチ」の説明

10. 「OK」をクリックします。

11. 必要に応じて、追加のアクティビティをelseif条件にドラッグして定義します。これらのアクティビティは、ifブランチがtrueと評価されず、このelseifブランチがtrueと評価された場合に実行されます。

12. elseラベルをクリックします。

13. 必要に応じて、条件を入力するか、追加のアクティビティをelse条件にドラッグして定義します。これらのアクティビティは、ifおよびその他のelseifブランチがtrueと評価されず、このelseブランチがtrueと評価された場合に実行されます。
図11-9に、完了したifアクティビティを示します。各ブランチには、含まれているアクティビティが表示されています。

図11-9 完了したifアクティビティ

「図11-9 完了したifアクティビティ」の説明

11.2.2.2 ifアクティビティ作成時の処理内容

例11-3に、設計完了後の.bpelファイルの例を示します。ifアクティビティでは、if、elseifおよびelseの各ブランチが定義されています。trueと評価された最初のブランチが実行されます。

例11-3 ifアクティビティ

<sequence>
<!-- receive input from requester -->
<receive name="receiveInput" partnerLink="client" portType="tns:Test"
operation="process" variable="input" createInstance="yes"/>
<!-- assign default value -->
<assign>
<copy>
<from>'Value is greater than zero'</from>
<to>$output.payload</to>
</copy>
<assign>
<copy>
<from>'Value is greater than zero'</from>
<to>$output.payload</to>
</copy>
</assign>
<!-- switch depends on the input value field -->
<if>
<condition>$input.payload > 0</condition>
<extensionActivity>
<bpelx:exec name="Java_Embedding" version="1.5" language="java">
System.out.println("if condition is true.\n");
</bpelx:exec>
</extensionActivity>
<elseif>
<condition>bpws:getVariableData('input', 'payload') &lt; 0</condition>
<assign>
<copy>
<from>'Value is less than zero'</from>
<to>$output.payload</to>
</copy>
</assign>
</elseif>
<else>
<assign>
<copy>
<from>'Value is equal to zero'</from>
<to>$output.payload</to>
</copy>
</assign>
</else>
</if>

<!-- respond output to requester -->
<reply name="replyOutput" partnerLink="client"
portType="tns:Test" operation="process" variable="output"/>
</sequence>

11.3 whileアクティビティによる条件分岐の定義

複数のアクション間で選択を行うようにBPELコードを設計する別の方法としては、whileアクティビティを使用したwhileループの作成があります。whileループは、指定の条件が適合するまで、アクティビティを繰り返します。たとえば、重要なWebサービスでリクエストに対してサービス・ビジー・メッセージを返している場合、そのサービスが使用可能になるまで、whileアクティビティを使用してポーリングし続けることができます。このときのwhileアクティビティの条件はサービスから受け取った最新のメッセージがビジーであることで、whileアクティビティ内の操作はサービスを再チェックすることです。Webサービスからサービス・ビジー以外のメッセージが戻ると、whileアクティビティは終了し、理想的にはWebサービスからの有効なレスポンスを使用して、BPELプロセス・サービス・コンポーネントが続行されます。

11.3.1 whileアクティビティの作成方法

whileアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. whileアクティビティをデザイナにドラッグします。

3. +記号をクリックしてwhileアクティビティを開きます。
whileアクティビティには、条件式を作成するアイコンとwhile定義を検証するアイコンがあります。また、アクティビティをドラッグしてwhileループを定義する領域も用意されています。

4. while条件を使用するための追加のアクティビティ(scopeアクティビティなど)をwhileアクティビティの「アクティビティをここにドロップ」領域にドラッグして定義します。
このアクティビティとして、既存のアクティビティや新しいアクティビティを使用できます。

5. 「XPath式ビルダー」アイコンをクリックして、「式ビルダー」ダイアログを開きます。

6. 図11-10に示すように、繰り返し実行する式を入力します。このアクションは、指定したwhile条件のブール値がtrueでなくなるまで実行されます。この例のアクティビティは、5未満の場合に繰り返しループするように設定されています。

図11-10 式が設定されているwhileアクティビティ

「図11-10 式が設定されているwhileアクティビティ」の説明

7. 完了後に「OK」をクリックします。

11.3.2 whileアクティビティ作成時の処理内容

例11-4に、設計完了後の.bpelファイルの例を示します。whileアクティビティ内にscopeアクティビティがあります。scopeアクティビティには、シーケンスおよびフォルト・ハンドラが最上位レベルに含まれています。シーケンスにはinvokeアクティビティ、assignアクティビティ、およびシーケンスにラップされたassignアクティビティとwaitアクティビティを含むcatchAllを定義するフォルト・ハンドラが含まれています。

例11-4のコードにより、外部サービスがコールされます。外部サービスがフォルトをスローすると、フォルト・ハンドラによってフォルトが捕捉され、dbStatus変数値が増分されます。

したがって、whileループの終了条件は次のいずれかとなります。

- 例外がないこと(dbStatus値が値10に設定されており、これにより、while条件はfalseと評価されます)

- フォルトが5回スローされた後であること(dbStatus値が5に設定されており、while条件はfalseを返します)

例11-4 whileアクティビティ

<while name="While_1" condition="bpws:getVariableData('dbStatus') > 5">
<scope name="Scope_1">
<faultHandlers>
<catchAll>
<sequence name="Sequence_2">
<assign name="assign_DB_retry">
<copy>
<from expression="bpws:getVariableData('dbStatus') + 1"/>
<to variable="dbStatus"/>
</copy>
</assign>
<wait name="Wait_30_sec" for="'PT31S'"/>
</sequence>
</catchAll>
</faultHandlers>
<sequence name="Sequence_1">
<invoke name="Write_DBWrite" partnerLink="WriteDBRecord"
portType="ns2:WriteDBRecord_ptt" operation="insert"
inputVariable="Invoke_DBWrite_merge_InputVariable"/>
<assign name="Assign_dbComplete">
<copy>
<from expression="'10'"/>
<to variable="dbStatus"/>
</copy>
</assign>
</sequence>
</scope>
</while>

注意:

例11-4のwhileアクティビティのコード・フラグメントでは、BPEL 1.1コンストラクトbpws:getVariableData('dbStatus')が使用されています。BPEL 2.0の場合、変数は$記号およびドット(.)表記法を使用して、直接参照されます。例:

<while name="While1">
<condition>$inputVariable.payload/client:counter > 0
</condition>

11.4 repeatUntilアクティビティによる条件分岐の定義

アクティビティの本文を少なくとも1回実行する必要がある場合は、whileアクティビティではなくrepeatUntilアクティビティを使用します。repeatUntilアクティビティのXPath式の条件は、アクティビティの本文が完了した後に評価されます。条件は、指定したブール条件がtrueになるまで繰返し評価されます(アクティビティの本体も処理されます)。

注意:

このアクティビティは、BPELバージョン2.0プロジェクトでサポートされています。

11.4.1 repeatUntilアクティビティの作成方法

repeatUntilアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. repeat untilアクティビティをデザイナにドラッグします。

3. repeat untilアクティビティをダブルクリックします。

4. 名前を入力するか、デフォルト値をそのまま使用します。

5. 「条件」フィールドで、「XPath式ビルダー」アイコンをクリックしてXPath式条件を入力します。
「式ビルダー」ダイアログが表示されます。

6. XPathブール式の条件を入力し、「OK」をクリックします。
図11-11に示すように、入力した条件が「Repeat Until」ダイアログに表示されます。

図11-11 完成した「Repeat Until」ダイアログ

「図11-11 完成した「Repeat Until」ダイアログ」の説明

7. 「適用」→「OK」の順にクリックします。

8. 図11-12に示すように、repeat untilアクティビティを開きます。

図11-12 開いた状態のrepeatUntilアクティビティ

「図11-12 開いた状態のrepeatUntilアクティビティ」の説明

9. 「コンポーネント・パレット」からアクティビティをドラッグし、プロパティ値を定義することで、アクティビティの本文を設計します。これらのアクティビティは、XPath式の条件がtrueと評価されるまで評価されます。

11.4.2 repeatUntilアクティビティ作成時の処理内容

例11-5に、設計完了後の.bpelファイルの例を示します。このシナリオでは、注文書の検証を少なくとも1回実行し、その後はステータスが5に更新されるまで、完了ステータスの評価に基づいて検証を繰り返します。

例11-5 repeatUntilアクティビティ

<repeatUntil>
<sequence>
<invoke name="PurchaseOrderValidation" ... />
<receive name="receiveValidation"
partnerLink="PurchaseOrderValidation"
operation="returnPurchaseOrderValidation"
variable="PurchaseOrderStatusResponse" />
</sequence>
<condition>
bpel:getVariableProperty(
"PurchaseOrderStatusResponse","tst:completionStatus") < 5
</condition>
</repeatUntil>

11.5 アクティビティの実行をバイパスするためのXPath式の指定

Oracleの拡張機能を使用すると、BPELバージョン1.1および2.0のアクティビティにXPath式を指定して、trueと評価された場合に、そのアクティビティがスキップされるようにできます。この機能は、アクティビティを条件付きで実行するために使用するswitchアクティビティの代替手段として提供されています。アクティビティのスキップ条件は、次のように指定します。

<activity bpelx:skipCondition="boolean-expr"/>

bpelx:skipCondition属性により、アクティビティ・インスタンスが作成されるとすぐに、XPath式が評価されます。スキップ式でfalseのブール値が返された場合は、アクティビティが実行されます。スキップ式でtrueのブール値が返された場合、アクティビティは即時に完了となり、そのアクティビティの直後のアクティビティに実行が移動します。

このコンストラクトは、スキップ条件とは反対の条件が指定された単一のcase要素が含まれるswitch/case構造化アクティビティに相当します。

例11-6は、BPEL 1.1におけるbpelx:skipCondition属性を示しています。myvalueが0の場合、式はtrueと評価され、assignアクティビティがスキップされます。myvalueが10の場合、式はfalseと評価され、assignアクティビティのコピー操作が実行されます。

例11-6 BPEL 1.1でのbpelx:skipCondition属性の使用

<assign bpelx:skipCondition="bpws:getVariableData('input',
'payload','/tns:inputMsg/tns:myvalue') <= 0">
<copy>
<from expression="'Value is greater than zero'"/>
<to variable="output" part="payload"
query="/tns:resultMsg/tns:valueResult"/>
</copy>
</assign>

例11-7に、switchアクティビティを使用した同等の機能を示します。

例11-7 switchアクティビティを使用した同等の機能

<switch>
<case condition="bpws:getVariableData('input',
'payload','/tns:inputMsg/tns:value') > 0">
<assign>
<copy>
<from expression="'Value is greater than zero'"/>
<to variable="output" part="payload"
query="/tns:resultMsg/tns:valueResult"/>
</copy>
</assign>
</case>
</switch>

BPEL 2.0では、bpelx:skipCondition構文がアクティビティの子要素として表示されます。例11-8に、この規則を使用したassignアクティビティの例を示します。

例11-8 BPEL 2.0でのbpelx:skipCondition属性の使用

<assign name="Assign4">
<bpelx:skipCondition>ora:getNodeValue($inputVariable.payload/client:input) > 5
</bpelx:skipCondition><copy>
<from>"dummy result"</from>
<to>$outputVariable.payload/client:result</to>
</copy></assign>

スキップ条件式には、組込みおよびカスタムのXPath関数も使用できます。例11-9に、いくつかの例を示します。

例11-9 組込みおよびカスタムのXPath関数

<assign bpelx:skipCondition="bpws:getVariableData( 'crOutput', 'payload',
'/tns:rating' ) > 0">

<assign bpelx:skipCondition="custom:validateRating()" ... />

<assign xmlns:fn='http://www.w3.org/2005/xpath-functions'
bpelx:skipCondition="fn:false()" ... />

XPath式の評価でエラーがスローされると、そのエラーはBPELフォルトにラップされて、アクティビティからスローされます。

イベントは、trueと評価しているスキップ条件式によってバイパスされるアクティビティのBPELインスタンス監査証跡に追加されます。スキップ条件がfalseと評価された(アクティビティが実行されることを意味する)場合も、スキップ条件式が評価されたという事実が、デバッグのために監査証跡に記録されます。

XPathエンジンがブール値の評価に失敗した場合は、bpws:subLanguageFaultがスローされます。これは、switch/case条件がブール値に評価されない場合にスローされるフォルトと同じです。このフォルトも、デバッグのために監査証跡に記録されます。

11.5.1 アクティビティの実行をバイパスするためのXPath式の指定方法

アクティビティの実行をバイパスするためのXPath式を指定する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. スキップ条件を作成するアクティビティをデザイナにドラッグします。

3. 「スキップ条件」タブをクリックします。

4. trueと評価された場合にアクティビティをスキップさせるXPath式を指定します。図11-13に詳細を示します。

図11-13 スキップ条件XPath式

「図11-13 スキップ条件XPath式」の説明

5. 「適用」→「OK」の順にクリックします。

11.5.2 アクティビティの実行をバイパスするためのXPath式指定時の処理内容

.bpelファイルのコード・セグメントは、特定の操作に対する設計完了後の定義を示しています。

たとえば、例11-10に記載されているXPath式は、trueと評価された場合に(たとえば、inputが20)、assignアクティビティをスキップさせます。

例11-10 アクティビティの実行をバイパスするためのskipCondition属性

<sequence name="main">
. . .
. . .
<assign name="Assign_1"
bpelx:skipCondition="number(bpws:getVariableData('inputVariable','payload','/client:
process/client:input')) > 10">
<copy>
<from expression="'Assign Block is not Skipped'"/>
<to variable="inputVariable" part="payload"
query="/client:process/client:input"/>
</copy>
</assign>
. . .
. . .
</sequence>

12 BPELプロセスでのフォルト処理の使用

この章では、BPELプロセスのフォルト処理について説明します。BPELプロセス・サービス・コンポーネントでは、フォルト処理を使用して、Webサービス外部から返されたエラー・メッセージやその他の例外を処理し、ビジネス・フォルトまたは実行時フォルトに応じてエラー・メッセージを生成できます。この章では、フォルト管理フレームワークを使用して、フォルトを捕捉したり、フォルト・ポリシー・ファイルに定義されているユーザー指定のアクションを実行する方法についても説明します。

この章には次の項が含まれます:

- 第12.1項「フォルト・ハンドラの概要」

- 第12.2項「BPEL標準フォルトの概要」

- 第12.3項「BPELフォルトのビジネスおよび実行時のフォルト・カテゴリの概要」

- 第12.4項「フォルト管理フレームワークを使用したフォルトの処理」

- 第12.5項「BPEL実行時フォルトの捕捉」

- 第12.6項「getFaultAsString XPath拡張関数によるフォルト詳細の取得」

- 第12.7項「throwアクティビティによる内部フォルトのスロー」

- 第12.8項「rethrowアクティビティによるフォルトの再スロー」

- 第12.9項「外部フォルトを返す」

- 第12.10項「scopeアクティビティによるアクティビティ・グループの管理」

- 第12.11項「replayアクティビティによるscopeアクティビティ内でのアクティビティの再実行」

- 第12.12項「一連の操作を元に戻した後の補正の使用」

- 第12.13項「terminateアクティビティまたはexitアクティビティによるビジネス・プロセス・インスタンスの停止」

- 第12.14項「アサーション条件によるフォルトのスロー」

SOAコンポジット・アプリケーションでのフォルト処理の作成方法の詳細は、第3章「SOAサンプル・アプリケーションの概要」で説明されているFusion Order Demoアプリケーションを参照してください。

12.1 フォルト・ハンドラの概要

フォルト・ハンドラは、通常予想される以外のデータ(数値のかわりにエラー・メッセージなど)がWebサービスから返されたときに、BPELプロセス・サービス・コンポーネントがどのように対応するかを定義します。フォルト・ハンドラの例として、Webサービスで通常返される信用格付けの数値のかわりに、ネガティブ情報メッセージが返された場合を想定します。

図12-1は、フォルト・ハンドラが信用格付け変数を-1000に設定する方法の例を示しています。

図12-1 フォルト処理

「図12-1 フォルト処理」の説明

例12-1のコード・セグメントは、この操作のフォルト・ハンドラをBPELファイルに定義します。

例12-1 フォルト・ハンドラの定義

<faultHandlers>
<catch faultName="services:NegativeCredit" faultVariable="crError">
<assign name="crin">
<copy>
<from expression="-1000">
</from>
<to variable="input" part="payload"
query="/autoloan:loanApplication/autoloan:creditRating"/>
</copy>
</assign>
</catch>
</faultHandlers>

faultHandlersタグには、フォルト処理コードが入ります。フォルト・ハンドラ内のcatchアクティビティによって、フォルト名と変数、およびcreditRating変数を「-1000」に設定するコピー指示が定義されます。

BPELプロセス・サービス・コンポーネントに対してWebサービスを選択する際、返される可能性があるフォルトを特定し、それぞれに対してフォルト・ハンドラを設定します。

12.2 BPEL標準フォルトの概要

この項では、BPEL 1.1およびBPEL 2.0の標準フォルトを識別します。

12.2.1 BPEL 1.1の標準フォルト

この項では、BPEL 1.1の標準フォルトを識別します。特に指定がないかぎり、「Business Process Execution Language for Web Services Specification Version 1.1」はhttp://schemas.xmlsoap.org/ws/2003/03/business-process/のネームスペースで次の標準フォルトを定義します。

- bindingFault (http://schemas.oracle.com/bpel/extensionで定義されているBPEL拡張フォルト)

- conflictingReceive

- conflictingRequest

- correlationViolation

- forcedTermination

- invalidReply

- joinFailure

- mismatchedAssignmentFailure

- remoteFault (http://schemas.oracle.com/bpel/extensionで定義されているBPEL拡張フォルト)

- repeatedCompensation

- selectionFailure

- uninitializedVariable

標準フォルトの定義は、次のとおりです。

- タイプなし。つまり、messageTypesは関連付けられていません。

- Web Services Description Language(WSDL)メッセージには関連付けられていません。

- 次のようにフォルト変数なしで捕捉されます。

<catch faultName="bpws:selectionFailure">

12.2.2 BPEL 2.0の標準フォルト

次のリストは、WS-BPEL仕様内で定義されている標準フォルトを指定します。標準フォルト名はすべて、標準のWS-BPELネームスペースで修飾されます。

- ambiguousReceive

- completionConditionFailure

- conflictingReceive

- conflictingRequest

- correlationViolation

- invalidBranchCondition

- invalidExpressionValue

- invalidVariables

- joinFailure

- mismatchedAssignmentFailure

- missingReply

- missingRequest

- scopeInitializationFailure

- selectionFailure

- subLanguageExecutionFault

- uninitializedPartnerRole

- uninitializedVariable

- unsupportedReference

- xsltInvalidSource

- xsltStylesheetNotFound

12.2.2.1 BPEL 2.0でのフォルト処理の優先順位

BPEL 2.0の場合、関連するデータなしでスローされたフォルトを捕捉するための優先順位は次のとおりです。

- 一致するfaultName値を持つcatchアクティビティがあり、そのfaultName値でfaultVariable属性が指定されていない場合、フォルトは識別されたcatchアクティビティに送信されます。

- catchAllアクティビティがある場合、フォルトはcatchAllフォルト・ハンドラに送信されます。

- それ以外の場合、フォルトはデフォルトのフォルト・ハンドラによって処理されます。

BPEL 2.0の場合、関連するデータとともにスローされたフォルトを捕捉するための優先順位は次のとおりです。

- 一致するfaultName値を持つcatchアクティビティがあり、そのfaultName値でfaultVariable属性が指定されていない場合、フォルトは識別されたcatchアクティビティに送信されます。

- フォルト・データが、次のものを含むWSDLメッセージ・タイプの場合:

- メッセージには、要素で定義された単一パーツが含まれます。

- 一致するfaultName値を持つcatchアクティビティが存在し、そのfaultName値にはfaultVariableがあります。faultVariableの関連するfaultElementのQNameは、単一のWSDLメッセージ・パーツの実行時要素データのQNameと一致します。

その後フォルトは、単一パーツの要素の値に初期化されたfaultVariableを持つ、識別されたcatchアクティビティに送信されます。

- 一致するfaultName値を持つcatchアクティビティがあり、そのfaultName値でfaultVariable属性が指定されていない場合、フォルトは識別されたcatchアクティビティに送信されます。この場合、フォルト値はフォルト・ハンドラ内からは使用できませんが、rethrowアクティビティで使用できます。

- faultName属性がないcatchコンストラクトがあり、そのfaultName属性に、タイプが実行時フォルト・データのタイプと一致するfaultVariableがある場合、フォルトは識別されたcatchアクティビティに送信されます。

- フォルト・データが、メッセージに要素で定義された単一パーツが含まれるWSDLメッセージ・タイプで、faultVariableを持つfaultName属性がないcatchアクティビティが存在し、そのfaultVariableの関連するfaultElementのQNameが単一のWSDLメッセージ・パーツの実行時要素データのQNameと一致する場合、フォルトは、単一パーツの要素の値に初期化されたfaultVariableを持つ、識別されたcatchアクティビティに送信されます。

- catchAllアクティビティがある場合、フォルトはcatchAllフォルト・ハンドラに送信されます。

- それ以外の場合、フォルトはデフォルトのフォルト・ハンドラによって処理されます。

12.3 BPELフォルトのビジネスおよび実行時のフォルト・カテゴリの概要

BPELフォルトには、Qnameというフォルト名(ネームスペースで修飾された名前)と、可能性のあるmessageTypeがあります。BPELフォルトには次の2つのカテゴリがあります。

- ビジネス・フォルト

- 実行時フォルト

12.3.1 ビジネス・フォルト

ビジネス・フォルトはアプリケーション固有のフォルトであり、処理されている情報に問題がある場合(社会保障番号がデータベース内で見つからない場合など)に生成されます。ビジネス・フォルトは、アプリケーションがthrowアクティビティを実行したとき、またはinvokeアクティビティがレスポンスとしてフォルトを受け取った場合に発生します。ビジネス・フォルトのフォルト名はBPELプロセス・サービス・コンポーネントによって指定されます。該当する場合は、messageTypeが、WSDLファイルで定義されます。ビジネス・フォルトは、faultNameおよびfaultVariableを使用してfaultHandlerで捕捉できます。

<catch faultName="ns1:faultName" faultVariable="varName">

12.3.2 実行時フォルト

実行時フォルトは、BPELプロセス・サービス・コンポーネントまたはWebサービスの実行中に問題(変数名が正しくないためにデータを正しくコピーできないなど)が発生した結果です。この種のフォルトはユーザー定義ではなく、システムによりスローされます。それらは、次に示すような様々な理由で生成されます。

- プロセスによって、値の不適切な使用が試行される。

- 論理エラーが発生する(無限ループなど)。

- SOAPコールでSimple Object Access Protocol (SOAP)フォルトが発生する。

- サーバーによって例外がスローされる。

様々な実行時フォルトが自動的に提供されています。これらのフォルトは、http://schemas.oracle.com/bpel/extensionネームスペースにあります。また、messageType RuntimeFaultMessageに関連付けられています。例12-2に示すように、messageTypeはWSDLファイルに定義されます。

例12-2 messageType定義

<?xml version="1.0" encoding="UTF-8" ?>
<definitions name="RuntimeFault"
targetNamespace="http://schemas.oracle.com/bpel/extension"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.xmlsoap.org/wsdl/">

<message name="RuntimeFaultMessage">
<part name="code" type="xsd:string" />
<part name="summary" type="xsd:string" />
<part name="detail" type="xsd:string" />
</message>
</definitions>

フォルトの捕捉時に(messageType RuntimeFaultMessageの)faultVariableが使用される場合は、faultVariableからフォルト・サマリーおよび詳細とともにフォルト・コードを問合せできます。

12.3.2.1 bindingFault

bindingFaultは、起動準備に失敗した場合にアクティビティ内でスローされます。たとえば、プロセスのWSDLのロードに失敗した場合などです。bindingFaultは再試行できません。通常、このタイプのフォルトは管理者操作により修正する必要があります。

12.3.2.2 remoteFault

remoteFaultもアクティビティ内でスローされます。スローの原因は、起動の失敗です。たとえば、リモート・サービスからSOAPフォルトが返されます。

12.3.2.3 replayFault

replayFaultは、スコープ内のアクティビティを再実行します。このフォルトは、スコープ内のいずれかの時点でスコープへと移行されます。その後、サーバーによりスコープが最初から再実行されます。

12.3.3 同期BPELプロセスでのフォルト処理の追加および伝播方法

この項では、同期BPELプロセスでのフォルト処理の追加および伝播方法について説明します。設計中に、次のタスクを実行します。

- 既存のスキーマおよびWSDLファイルを変更し、フォルト要素、フォルト・メッセージおよびフォルト操作の詳細を含めます。

- BPELプロセスにフォルト処理を追加します(具体的にはcatchアクティビティ)。

- WSDLファイルに指定したフォルト・メッセージ・タイプでフォルト変数を作成します。

- assignおよびreplyアクティビティを、追加のフォルト処理詳細とともに追加します。

12.3.3.1 スキーマおよびWSDLファイルの編集

スキーマおよびWSDLファイルを編集する手順は、次のとおりです。

1. 「BPELプロセスの作成」ダイアログでデフォルト設定を使用して同期BPELプロセス(この例では、TestProcessという名前)を作成します。

2. アプリケーション・ナビゲータのxsdフォルダで、TestProcess.xsdファイルをダブルクリックします。

3. 「ソース」ビューをクリックし、processFaultという新しい要素を追加します。

<element name="processFault">
<complexType>
<sequence>
<element name="result" type="string"/>
</sequence>
</complexType>
</element>

4. アプリケーション・ナビゲータで、TestProcess.wsdlファイルをダブルクリックします。

5. 「ソース」ビューをクリックし、TestProcessFaultMessageという新しいメッセージ・タイプを追加します。

<wsdl:message name="TestProcessFaultMessage">
<wsdl:part name="payload" element="client:processFault"/>
</wsdl:message>

6. WSDLファイルでoperation要素を編集し、フォルトを追加します。

<wsdl:operation name="process">
<wsdl:input  message="client:TestProcessRequestMessage" />
<wsdl:output message="client:TestProcessResponseMessage"/>
<wsdl:fault name="FaultResponse" message="
client:TestProcessFaultMessage"/>
</wsdl:operation>

7. 「File」メニューから、「Save」を選択します。

12.3.3.2 フォルト・ハンドラの追加

フォルト・ハンドラを追加する手順は、次のとおりです。

1. アプリケーション・ナビゲータで、TestProcess.bpelをダブルクリックします。

2. BPELプロセスで「Catchの追加」アイコンをクリックし、そのBPELプロセスのフォルト・ハンドラとしてcatchアクティビティを追加します。CatchAllアクティビティを使用することもできます。図12-2に詳細を示します。

図12-2 「Catchの追加」アイコン

「図12-2 「Catchの追加」アイコン」の説明

3. catchアクティビティをダブルクリックし、システム・フォルトを指定します。図12-3に詳細を示します。

図12-3 catchアクティビティ

「図12-3 catchアクティビティ」の説明

このシステム・フォルトをトリガーするassertアクティビティはありません。それを追加して入力フィールドをアサートできます。

4. 「ネームスペースURI」フィールドで、「参照」アイコンをクリックします。
「フォルト・チューザ」ダイアログが表示されます。

5. システム・フォルト(この例では、assertFailure)を選択し、「OK」をクリックします。選択可能なシステム・フォルトが他にも多数あります。図12-4に詳細を示します。

図12-4 「フォルト・チューザ」ダイアログ

「図12-4 「フォルト・チューザ」ダイアログ」の説明

catchの編集ダイアログに戻ります。

6. 「フォルト変数」フィールドで、 「変数の作成」アイコンをクリックします。
「変数の作成」ダイアログが表示されます。

FaultVarの名前およびRuntimeFaultMessageタイプの変数が作成されます。図12-5に詳細を示します。

図12-5 「変数の作成」ダイアログ

「図12-5 「変数の作成」ダイアログ」の説明

7. RuntimeFault.wsdlファイルを「SOAコンテンツ」フォルダにコピーします。これは、BPELプロセスWSDLファイルと同じ場所です。

8. 「OK」をクリックし、catchの編集ダイアログで「OK」をクリックします。

12.3.3.3 フォルト・レスポンス変数の作成

フォルト・レスポンス変数を作成する手順は、次のとおりです。

1. 「構造」ウィンドウで、「変数」フォルダを右クリックし、「変数の作成」を選択します。

2. 「名前」フィールドで、Faultresponseと入力します。

3. 「メッセージ・タイプ」を選択します。

4. 「メッセージ・タイプ」フィールドの「参照」アイコンをクリックします。

5. 「メッセージ・タイプ」→「プロジェクトのWSDLファイル」→「TestProcess.wsdl」→「メッセージ・タイプ」→「TestProcessFaultMessage」の順に開き、「OK」をクリックします。図12-6に詳細を示します。

図12-6「タイプ・チューザ」ダイアログ

「図12-6 「タイプ・チューザ」ダイアログ」の説明

6. 「変数の作成」ダイアログで「OK」をクリックします。

12.3.3.4 Catch Activityブランチへのassignアクティビティの追加

Catch Activityブランチにassignアクティビティを追加する手順は、次のとおりです。

1. assignアクティビティを、catchアクティビティ・ブロックにドラッグします。

2. assignアクティビティをダブルクリックします。

3. FaultVar変数のcode、summaryおよびdetailの各フィールドをFaultResponse変数に連結し、「OK」をクリックします。図12-7に詳細を示します。

図12-7 assignの編集ダイアログ

「図12-7 assignの編集ダイアログ」の説明

4. 「一般」タブの「名前」フィールドで、名前(この例では、FaultDataForClient)を入力します。

12.3.3.5 Catch Activityブランチへのreplyアクティビティの追加

Catch Activityブランチにreplyアクティビティを追加する手順は、次のとおりです。

1. catchアクティビティ・ブロック内のAssignアクティビティの下にあるReplyアクティビティをドラッグします。

2. replyアクティビティをダブルクリックします。

3. 「ネームスペースURI」フィールドで、「参照」アイコンをクリックします。
「フォルト・チューザ」ダイアログが表示されます。

4. 「プロジェクトのWSDLファイル」→「TestProcess.wsdl」を開き、FaultResponseという名前のフォルトを選択します。図12-8に詳細を示します。

図12-8 「フォルト・チューザ」ダイアログ

「図12-8 「フォルト・チューザ」ダイアログ」の説明

5. 「名前」フィールドに、名前を入力します(この例ではReplyWithFault)。

6. 「パートナ・リンク」フィールドで、「参照」アイコンをクリックします。
「パートナ・リンク・チューザ」ダイアログが表示されます。

7. replyOutput replyアクティビティが接続されている同じパートナ・リンクを選択し、「OK」をクリックします。

8. 「変数」フィールドの「参照」アイコンをクリックします。
「変数チューザ」ダイアログが表示されます。

9. FaultResponse変数を選択し、「OK」をクリックします。図12-9に詳細を示します。

図12-9 「変数の選択」ダイアログ

「図12-9 「変数の選択」ダイアログ」の説明

10. replyの編集ダイアログで、「OK」をクリックします。
BPELプロセスは図12-10のようになります。両方のreplyアクティビティが、同じパートナ・リンクに接続されます。

図12-10 BPELプロセスの設計

「図12-10 BPELプロセスの設計」の説明

12.4 フォルト管理フレームワークを使用したフォルトの処理

Oracle SOA Suiteには、BPELプロセスのフォルトを処理するために一般的なフォルト管理フレームワークが用意されています。プロセスでinvokeアクティビティの実行時にフォルトが発生すると、そのフォルトはフレームワークによって捕捉され、フォルト・ポリシー・ファイルでそのアクティビティに関連付けられているユーザー指定のアクションが実行されます。管理者操作が規定のアクションである状況でフォルトが発生した場合は、Oracle Enterprise Manager Fusion Middleware Controlからリカバリ・アクションを実行します。フォルト管理フレームワークによって、scopeアクティビティのcatchアクティビティを使用してBPELプロセスを設計するための代替手段が提供されます。

この項では、フォルト管理フレームワークを構成する複数のコンポーネントの概要について説明します。

- フォルト管理フレームワークでは、invokeアクティビティのすべてのフォルト(ビジネスおよび実行時)が捕捉されます。

- フォルト・ポリシー・ファイルには、フォルト条件および対応するフォルト・リカバリ・アクションを定義します。それぞれのフォルト条件で、処理を試みる特定のフォルトまたは一連のフォルトを指定し、それに対応するアクションを指定します。フォルト・ポリシー・ファイルでは一連のアクションがIDで識別されます。

- 一連の条件によってアクションが起動されます(フォルト・ポリシーとも呼ばれます)。

- フォルト・ポリシー・バインディング・ファイルは、フォルト・ポリシー・ファイルに定義されているポリシーを次のものに関連付けます。

- SOAコンポジット・アプリケーション

- BPELプロセスとOracle Mediatorのサービス・コンポーネント

- BPELプロセスとOracle Mediatorのサービス・コンポーネントの参照バインディング・コンポーネント

フォルト管理フレームワークでは、SOAコンポジット・アプリケーションのcomposite.xmlファイルと同じディレクトリ、または設定した2つのプロパティで識別されるリモートの場所で、フォルト・ポリシー・バインディングを検索します。

注意:

フォルト管理フレームワークで構成されるフォルト・ポリシーは、BPELプロセスのscopeアクティビティのcatchアクティビティに定義されるフォルト処理よりも優先されます。フォルト管理フレームワークは、フォルト処理をcatchアクティビティに再スローするように構成できます。

- フォルト・ポリシー・ファイル(fault-policies.xml)およびフォルト・ポリシー・バインディング・ファイル(fault-bindings.xml)は、次のいずれかの場所に格納されます。

- SOAコンポジット・アプリケーションのcomposite.xmlファイルと同じディレクトリ。

- composite.xmlファイルに追加した2つのプロパティで指定された別の場所。このオプションは、1つのフォルト・ポリシーを複数のSOAコンポジット・アプリケーションで使用する必要がある場合に便利です。このオプションは、composite.xmlファイルと同じディレクトリに格納されているフォルト・ポリシー・ファイルよりも優先されます。例12-3に、この2つのプロパティの詳細を示します。この例では、フォルト・ポリシー・ファイルが、Oracle Metadata Services (MDS)リポジトリの共有領域のSOA部分に配置されます。

例12-3 複数のSOAコンポジット・アプリケーションで使用されるフォルト・ポリシー

<property
name="oracle.composite.faultPolicyFile">oramds:/apps/faultpolicyfiles/
fault-policies.xml
</property>
<property
name="oracle.composite.faultBindingFile">oramds:/apps/faultpolicyfiles/
fault-bindings.xml
</property>

Oracle Mediatorのフォルト処理機能の詳細は、第22章「Oracle Mediatorエラー処理の使用」を参照してください。

Oracle Business Process Management (BPM) Suiteでのフォルト・ポリシーの作成の詳細は、『Oracle Fusion Middleware Oracle Business Process Managementモデリングおよび実装ガイド』の「BPMでのフォルト処理の使用方法」の章を参照してください。

12.4.1 フォルト・ポリシーの設計方法

この項では、フォルト・ポリシーの設計方法について説明します。

注意:

Facade APIを使用すると、中断、再試行(成功時アクションを含む)、続行、再スローおよび再生回復の各オプションをプログラムによって実行できます。詳細は、Oracle Fusion MiddlewareのOracle SOA Suite Infrastructure Management Java APIリファレンスを参照してください。

12.4.1.1 フォルト・ポリシー・バインディングによる解決方法の理解

フォルト・ポリシー・バインディング・ファイルは、フォルト・ポリシー・ファイルに定義されているポリシーをSOAコンポジット・アプリケーションまたはコンポーネント(サービス・コンポーネントまたは参照バインディング・コンポーネント)に関連付けます。フォルト管理フレームワークでは、次の順序でフォルト・ポリシー・バインディングの識別が試みられます。

- composite.xmlファイルに定義されている参照バインディング・コンポーネント。

- composite.xmlファイルに定義されているBPELプロセスまたはOracle Mediatorのサービス・コンポーネント。

- composite.xmlファイルに定義されているSOAコンポジット・アプリケーション。

解決する過程で条件に適したアクションが見つからない場合、フォルト管理フレームワークでは、その解決は失敗とみなされ、次の解決レベルに移動します。

たとえば、invokeアクティビティがfaultname="abc"で失敗となった場合を考えてみます。fault-binding.xmlファイルには、次のポリシー・バインディングが指定されているとします。

- policy-id-1へのSOAコンポジット・アプリケーションのバインド

- policy-id-2へのBPELプロセス/Oracle Mediatorサービス・コンポジットまたは参照バインディング・コンポーネントのバインド

また、fault-bindings.xmlファイルには、次のバインディングも指定されているとします。

- policy-id-3へのSOAコンポジット・アプリケーションのバインド

- policy-id-4への参照バインディング・コンポーネントまたはサービス・コンポーネントのバインド

フォルト管理フレームワークは、次のように動作します。

- 最初に、解決バインディング(この場合はpolicy-id-2)と照合します。

- フォルトの解決に失敗した場合は、可能な次の照合(policy-id-4との照合)に進みます。

- フォルトの解決に失敗した場合は、可能な次の照合(policy-id-3との照合)に進みます。

- フォルトの解決に失敗した場合は、可能な次の照合(この場合はpolicy-id-1との照合)に進みます。

- フォルトが解決していない場合、そのフォルトはBPELフォルトcatchアクティビティに送信されます。

12.4.1.2 自動フォルト・リカバリに対するフォルト・ポリシー・ファイルの作成

自動フォルト・リカバリに対するフォルト・ポリシー・ファイルを作成する手順は、次のとおりです。

1. フォルト・ポリシー・ファイルを(たとえば、fault-policies.xmlなどの名前で)作成します。このファイルには、特定のタスクを実行するためのconditionセクションとactionセクションを挿入します。

2. このファイルをcomposite.xmlファイルと同じディレクトリまたは別の場所に格納してoracle.composite.faultPolicyFileプロパティを定義します。

<property
name="oracle.composite.faultPolicyFile">oramds:/apps/faultpolicyfiles/
fault-policies.xml
</property>
<property
name="oracle.composite.faultBindingFile">oramds:/apps/faultpolicyfiles/
fault-bindings.xml
</property>

フォルト・ポリシー・ファイルがファイル・システム内に配置されている場合は、次の書式を使用します。

<property
name="oracle.composite.faultPolicyFile">file:/project/apps/fault-policies.xml
</property>

3. フォルト・ポリシー・ファイルのconditionセクションを定義します。

- このconditionセクションについては、次の点に注意してください。

- このセクションには、faultNameに基づいて条件を指定します。

- faultNameには、複数の条件を構成できます。

- 各条件には、1つのtestセクション(XPath式)と1つのactionセクションがあります。

- testセクション(XPath式)は、フォルト時に使用可能なフォルト変数に対して評価されます。

- actionセクションには、同じファイルに定義されているアクションへの参照があります。

- 問い合せることができるのは、フォルト時に使用可能なフォルト変数のみです。

- 条件の評価順序は、ドキュメントに記載されている順序によって決まります。

表12-1に、フォルト・ポリシー・ファイルのconditionセクションの例を示します。conditionセクションで定義される全アクションは、actionセクションにおけるアクションに関連付けられる必要があります。

表12-1 フォルト・ポリシー・ファイルでのconditionセクションの使用

条件の例

フォルト・ポリシー・ファイルの構文

この条件は、code = "WSDLFailure"のフォルト変数をチェックします。

ora-terminateのactionが指定されています。

<condition>
<test>$fault.code="WSDLReading Error"
</test>
<action ref="ora-terminate"/>
</condition>

test条件は指定されていません。これは、指定したfaultNameのcatchAll条件です。

<condition>
<action ref="ora-rethrow"/>
</condition>

faultName名前属性がない場合は、任意のQNameのフォルトのcatchAllアクティビティを示します。

<faultName > . . . </faultName>

4. フォルト・ポリシー・ファイルのactionセクションを定義します。フォルト・ポリシー・ファイルの検証は、デプロイメント時に実施されます。フォルト・ポリシーを変更する場合は、フォルト・ポリシーが含まれているSOAコンポジット・アプリケーションを再デプロイする必要があります。
表12-2に、フォルト・ポリシー・ファイルのactionセクションのいくつかの例を示します。一部のフォルトには、自動リカバリ・アクションを指定できます。再試行と管理者操作を除くすべてのリカバリ・アクションでは、複数のアクションが同時に実行されます。

表12-2 フォルト・ポリシー・ファイルでのactionセクションの使用

リカバリ・アクション

フォルト・ポリシー・ファイルの構文

再試行: アクティビティを再試行するために、次のアクションが用意されています。

- 指定回数の再試行。

- 再試行から次の再試行までの遅延(秒単位)の指定。

- 指数バックオフによる再試行間隔の増加。

- N回の再試行が失敗となった場合の再試行失敗時アクションへのチェーン。

- 再試行が成功した場合の再試行成功時アクションへのチェーン。

注意: 指数バックオフでは、次の再試行が2倍のdelayでスケジュールされます。このdelayは、現在の再試行間隔を示します。たとえば、現在の再試行間隔が2秒の場合、次の再試行間隔は4秒にスケジュールされ、その次は8秒、16秒と、retryCount値に達するまで増分されます。

<Action id="ora-retry">
<Retry>
<retryCount>3</retryCount>
<retryInterval>2</retryInterval>
<exponentialBackoff/>
<retryFailureAction ref="ora-java"/>
<retrySuccessAction ref="ora-java"/>
</Retry>
</Action>

次の点に注意してください。

- 再試行に成功した場合、フォルト管理フレームワークは、再試行成功時アクションにチェーンされます。

- すべての再試行に失敗した場合、フォルト管理フレームワークは、再試行失敗時アクションにチェーンされます。

管理者操作: 現在のアクティビティの処理が停止します。この場合は、Oracle Enterprise Manager Fusion Middleware Controlに移動して、このインスタンスに対するリカバリ・アクションを手動で実行できます。

<Action id="ora-human-intervention">
<humanIntervention/></Action>

プロセスの終了: プロセスを終了します。

<Action id="ora-terminate"><abort/></Action>

Javaコード: 外部Javaクラスを実行できます。

returnValue: 実装されるJavaクラスは、文字列を戻すメソッドを実装している必要があります。ポリシーは、戻された文字列に基づいて新しいアクションにチェーンできます。

詳細は、第12.4.3項「Javaアクション・フォルト・ポリシーの使用方法」を参照してください。

<Action id="ora-java">
<!-- this is user provided custom java
class-->
<javaAction className="mypackage.myClass"
defaultAction="ora-terminate">
<returnValue value="REPLAY"
ref="ora-terminate"/>
<returnValue value="RETRHOW"
ref="ora-rethrow-fault"/>
<returnValue value="ABORT"
ref="ora-terminate"/>
<returnValue value="RETRY" ref="ora-retry"/>
<returnValue value="MANUAL"
ref="ora-human-intervention"/>
</javaAction>
</Action>

フォルトの再スロー: フォルトは、BPELフォルト・ハンドラ(scopeアクティビティ内のcatchアクティビティ)に送信されます。使用可能なハンドラがない場合、そのフォルトは上部に報告されます。

<Action id="ora-rethrow-fault"><rethrowFault/></Action>

スコープの再実行: 再実行フォルトが発生します。

<Action id="ora-replay-scope"><replayScope/></Action>

注意:

あらかじめシードされているリカバリ・アクションのタグ名(ora-retry、ora-human-intervention、ora-terminateなど)は、単なるサンプルです。これらの名前は各自の環境に適した名前に置換できます。

conditionセクションとactionセクションが完全に定義されているフォルト・ポリシー・ファイルは、次のようになります。

注意:

- フォルト・ポリシー・ファイルの名前は、単一の固有名に限定されているわけではありません。ただし、これらの名前は、fault-policy.xsdスキーマ・ファイルに準拠している必要があります。

- このフォルト・ポリシー・ファイルは、フォルト名に基づいてフォルトを捕捉する例を示しています。フォルトは、メッセージ・タイプまたはフォルト名(あるいはその両方)に基づいて捕捉することもできます。

<fault name="myfault" type="fault:faultType">

<?xml version="1.0" encoding="UTF-8"?>
<faultPolicies xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<faultPolicy version="0.0.1" id="FusionMidFaults"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Conditions>
<faultName xmlns:medns="http://schemas.oracle.com/mediator/faults"
name="medns:mediatorFault">
<condition>
<action ref="MediatorJavaAction"/>
</condition>
</faultName>
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
name="bpelx:remoteFault">
<condition>
<action ref="BPELJavaAction"/>
</condition>
</faultName>
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
name="bpelx:bindingFault">
<condition>
<action ref="BPELJavaAction"/>
</condition>
</faultName>
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
name="bpelx:runtimeFault">
<condition>
<action ref="BPELJavaAction"/>
</condition>
</faultName>
</Conditions>
<Actions>
<!-- Generics -->
<Action id="default-terminate">
<abort/>
</Action>
<Action id="default-replay-scope">
<replayScope/>
</Action>
<Action id="default-rethrow-fault">
<rethrowFault/>
</Action>
<Action id="default-human-intervention">
<humanIntervention/>
</Action>
<Action id="MediatorJavaAction">
<!-- this is user provided class-->
<javaAction className="MediatorJavaAction.myClass"
defaultAction="default-terminate">
<returnValue value="MANUAL" ref="default-human-intervention"/>
</javaAction>
</Action>
<Action id="BPELJavaAction">
<!-- this is user provided class-->
<javaAction className="BPELJavaAction.myAnotherClass"
defaultAction="default-terminate">
<returnValue value="MANUAL" ref="default-human-intervention"/>
</javaAction>
</Action>
</Actions>
</faultPolicy>
</faultPolicies>

12.4.1.3 フォルト・ポリシー・バインディングへのフォルト・ポリシーの関連付け

注意:

フォルト・ポリシー・バインディング・ファイルは、fault-bindings.xmlという名前にする必要があります。これは、fault-bindings.xsdスキーマ・ファイルに準拠しています。

フォルト・ポリシー・バインディングにフォルト・ポリシーを関連付ける手順は、次のとおりです。

1. フォルト・ポリシー・バインディング・ファイル(fault-bindings.xml)を作成します。このファイルは、フォルト・ポリシー・ファイルに定義されているポリシーを、使用しているフォルト・ポリシー・バインディング(SOAコンポジット・アプリケーションまたはコンポーネント(参照バインディング・コンポーネントまたはBPELプロセス/Oracle Mediatorのサービス・コンポーネント)のいずれか)のレベルに関連付けます。

2. 第12.4.1.2項「自動フォルト・リカバリに対するフォルト・ポリシー・ファイルの作成」のステップ2に示すように、composite.xmlファイルと同じディレクトリにファイルを置くか、ファイルをリモートの場所に置いてoracle.composite.faultBindingFileプロパティを定義します。
このフォルト・ポリシー・バインディング・ファイルによって、fault-policies.xmlファイルに定義されているフォルト・ポリシーがFusionMidFaults SOAコンポジット・アプリケーションに関連付けられます。

<?xml version="1.0" encoding="UTF-8" ?>
<faultPolicyBindings version="0.0.1"
xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<composite faultPolicy="FusionMidFaults"/>
<!--<composite faultPolicy="ServiceExceptionFaults"/>-->
<!--<composite faultPolicy="GenericSystemFaults"/>-->
</faultPolicyBindings>

12.4.1.4 その他のフォルト・ポリシーおよびフォルト・ポリシー・バインディング・ファイルのサンプル

この項では、フォルト・ポリシーとフォルト・ポリシー・バインディング・ファイルのその他のサンプルを示します。例12-4にfault-policies.xmlファイルの内容を示します。

例12-4 fault-policies.xmlファイル

<?xml version="1.0" encoding="UTF-8"?>
<faultPolicies xmlns="http://schemas.oracle.com/bpel/faultpolicy">
<faultPolicy version="2.0.1"
id="CRM_ServiceFaults"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Conditions>
<!-- Fault if wsdlRuntimeLocation is not reachable -->
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
name="bpelx:remoteFault">
<condition>
<test>$fault.code="WSDLReadingError"</test>
<action ref="ora-terminate"/>
</condition>
<condition>
<action ref="ora-java"/>
</condition>
</faultName>
<!-- Fault if location port is not reachable-->
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
name="bpelx:bindingFault">
<!--ORA-00001: unique constraint violated on insert-->
<condition>
<test>$fault.code="1"</test>
<action ref="ora-java"/>
</condition>
<!--ORA-01400: cannot insert NULL -->
<condition>
<test xmlns:test="http://test">$fault.code="1400"</test>
<action ref="ora-terminate"/>
</condition>
<!--ORA-03220: required parameter is NULL or missing -->
<condition>
<test>$fault.code="3220"</test>
<action ref="ora-terminate"/>
</condition>
<condition>
<action ref="ora-retry-crm-endpoint"/>
</condition>
</faultName>
<!-- Business faults -->
<!-- Fault comes with a payload of error, make sure the name space is
provided here or at root level -->
<faultName xmlns:credit="http://services.otn.com"
name="credit:NegativeCredit">
<!-- you get this fault when SSN starts with 0-->
<condition>
<test>$fault.payload="Bankruptcy Report"</test>
<action ref="ora-human-intervention"/>
<!--action ref="ora-retry"/-->
</condition>
<!-- you get this fault when SSN starts with 1-->
<condition>
<test>$fault.payload="Bankruptcy Report-abort"</test>
<action ref="ora-terminate"/>
</condition>
<!-- you get this fault when SSN starts with 2-->
<condition>
<test>$fault.payload="Bankruptcy Report-rethrow"</test>
<action ref="ora-rethrow-fault"/>
</condition>
<!-- you get this fault when SSN starts with 3-->
<condition>
<test>$fault.payload="Bankruptcy Report-replay"</test>
<action ref="ora-replay-scope"/>
</condition>
<!-- you get this fault when SSN starts with 4-->
<condition>
<test
xmlns:myError="http://services.otn.com">$fault.payload="Bankruptcy
Report-human"</test>
<action ref="ora-human-intervention"/>
</condition>
<!-- you get this fault when SSN starts with 5-->
<condition>
<test>$fault.payload="Bankruptcy Report-java"</test>
<action ref="ora-java"/>
</condition>
</faultName>

</Conditions>
<Actions>
<Action id="ora-retry">
<retry>
<retryCount>3</retryCount>
<retryInterval>2</retryInterval>
<exponentialBackoff/>
<retryFailureAction ref="ora-java"/>
<retrySuccessAction ref="ora-java"/>
</retry>
</Action>
<Action id="ora-retry-crm-endpoint">
<retry>
<retryCount>5</retryCount>
<retryFailureAction ref="ora-java"/>
<retryInterval>5</retryInterval>
<retrySuccessAction ref="ora-java"/>
</retry>
</Action>
<Action id="ora-replay-scope">
<replayScope/>
</Action>
<Action id="ora-rethrow-fault">
<rethrowFault/>
</Action>
<Action id="ora-human-intervention">
<humanIntervention/>
</Action>
<Action id="ora-terminate">
<abort/>
</Action>
<Action id="ora-java">
<!-- this is user provided class-->
<javaAction
className="com.oracle.bpel.client.config.faultpolicy.TestJavaAction"
defaultAction="ora-terminate" propertySet="prop-for-billing">
<returnValue value="REPLAY" ref="ora-terminate"/>
<returnValue value="RETRHOW" ref="ora-rethrow-fault"/>
<returnValue value="ABORT" ref="ora-terminate"/>
<returnValue value="RETRY" ref="ora-retry"/>
<returnValue value="MANUAL" ref="ora-human-intervention"/>
</javaAction>
</Action>

</Actions>
<Properties>
<propertySet name="prop-for-billing">
<property name="user_email_recipient">bpeladmin</property>
<property name="email_recipient">joe@abc.com</property>
<property name="email_recipient">mike@xyz.com</property>
<property name="email_threshold">10</property>
<property name="sms_recipient">+429876547</property>
<property name="sms_recipient">+4212345</property>
<property name="sms_threshold">20</property>
<property name="user_email_recipient">john</property>
</propertySet>
<propertySet name="prop-for-order">
<property name="email_recipient">john@abc.com</property>
<property name="email_recipient">jill@xyz.com</property>
<property name="email_threshold">10</property>
<property name="sms_recipient">+42222</property>
<property name="sms_recipient">+423335</property>
<property name="sms_threshold">20</property>
</propertySet>

</Properties>
</faultPolicy>
<faultPolicy version="2.0.1"
id="Billing_ServiceFaults"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"

xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Conditions>
<faultName>
<condition>
<action ref="ora-manual"/>
</condition>
</faultName>
</Conditions>
<Actions>
<Action id="ora-manual">
<humanIntervention/>
</Action>
</Actions>
</faultPolicy>
</faultPolicies>

例12-5に、fault-policies.xmlに定義されているフォルト・ポリシーを関連付けるfault-bindings.xmlファイルを示します。

例12-5 フォルト・ポリシー・バインディング・ファイル

<?xml version="1.0" encoding="UTF-8"?>
<faultPolicyBindings version="2.0.1"
xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<composite faultPolicy="ConnectionFaults"/>
<component faultPolicy="ServiceFaults">
<name>Component1</name>
<name>Component2</name>
</component>
<!-- Below listed component names use polic CRM_SeriveFaults -->
<component faultPolicy="CRM_ServiceFaults">
<name>HelloWorld</name>
<name>ShippingComponent</name>
<name>AnotherComponent"</name>
</component>
<!-- Below listed reference names and port types use polic CRM_ServiceFaults
-->
<reference faultPolicy="CRM_ServiceFaults">
<name>creditRatingService</name>
<name>anotherReference</name>
<portType
xmlns:credit="http://services.otn.com">credit:CreditRatingService</portType>
<portType
xmlns:db="http://xmlns.oracle.com/pcbpel/adapter/db/insert/">db:insert_
plt</portType>
</reference>
<reference faultPolicy="test1">
<name>CreditRating3</name>
</reference>
</faultPolicyBindings>

12.4.1.5 複数の拒否ハンドラがあるフォルト・ポリシーの設計

拒否メッセージのアクション・ハンドラを使用するフォルト・ポリシーを設計する際は、実行できる書込みアクションが1つのみであることに注意してください。例12-6に示すように、複数の拒否ハンドラを定義している場合も、複数の書込みアクションは実行できません。この場合、定義されている最初の拒否ハンドラ(この例ではora-queue)のみが実行されます。

例12-6 複数の拒否ハンドラがあるフォルト・ポリシー

<faultName xmlns:rjm="http://schemas.oracle.com/sca/rejectedmessages"
name="rjm:FileIn">
<condition>
<action ref="ora-queue"/>
</condition>
</faultName>
<faultName xmlns:rjm="http://schemas.oracle.com/sca/rejectedmessages"
name="rjm:FileIn">
<condition>
<action ref="ora-file"/>
</condition>
</faultName>

12.4.2 フォルト・ポリシーの実行方法

フォルト・ポリシーは、SOAコンポジット・アプリケーションの一部としてデプロイします。デプロイメント後は、次のフォルト・リカバリ・アクションをOracle Enterprise Manager Fusion Middleware Controlから実行できます。

- アクティビティの再試行

- 変数の変更(フォルトが発生したアクティビティに使用可能)

- インスタンスの続行(アクティビティを成功としてマーク)

- 例外の再スロー

- インスタンスの強制終了

- スコープの再実行例外のスロー

次の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

- Oracle Enterprise Manager Fusion Middleware Controlでのフォルト・ポリシーの実行に関する説明

- 管理者操作を使用するフォルト・ポリシーの定義のユースケース

12.4.3 Javaアクション・フォルト・ポリシーの使用方法

Javaアクション・フォルト・ポリシーを使用する際は、次の点に注意してください。

- 用意されているJavaクラスは、特定のインタフェースに従っています。このインタフェースは文字列を戻します。実行後に取得する出力とフォルト・ポリシーには、複数の値を指定できます。

- 実装されているメソッドの出力値(戻り値)からフォルト・ポリシーへのマッピングを指定することで、追加のフォルト・ポリシーを実行できます。

- ReturnValueが指定されていない場合は、例12-7に示すように、デフォルトのフォルト・ポリシーが実行されます。

例12-7 Javaアクション・フォルト・ポリシー

<Action id="ora-java">
<javaAction className="mypackage.myclass"
defaultAction="ora-human-intervention" propertySet="prop-for-billing">
<!--defaultAction is a required attribute, but propertySet is optional-->
<!-- attribute-->
<ReturnValue value="RETRY" ref="ora-retry"/>
<!--value is not nilable attribute & cannot be empty-->
<ReturnValue value="RETRHOW" ref="ora-rethrow-fault"/>
</javaAction>
</Action>

表12-3に、ReturnValueの使用例を示します。

表12-3 システムによるJavaアクション・フォルト・ポリシーの解釈

コード

説明

<ReturnValue value="RETRY"
ref="ora-retry"/>

メソッドからRETRYという文字列が戻された場合にora-retryアクションを実行します。

<ReturnValue value="”
ref=”ora-rethrow”/>

検証は失敗です。

<javaAction
className="mypackage.myclass"
defaultAction="ora-human-intervention">

Javaコード実行後にora-human-interventionを実行します。この属性は、メソッドからの戻り値が指定のReturnValueと一致しない場合に使用されます。

<ReturnValue value="RETRY"
ref="ora-retry"/>
<ReturnValue value="” ref=””/>

検証は失敗です。

<javaAction
className="mypackage.myclass"
defaultAction=" ora-human-intervention">
<ReturnValue></ReturnValue>

検証は失敗です。

Javaクラスを起動するには、IFaultRecoveryJavaClassインタフェースを実装しているクラスを指定できます。IFaultRecoveryJavaClassは、fabric-runtime.jarファイルにあります。パッケージ名は、oracle.integration.platform.faultpolicyです。

例12-8に示すように、IFaultRecoveryJavaClassインタフェースには2つのメソッドがあります。

例12-8 IFaultRecoveryJavaClassの実装

public interface IFaultRecoveryJavaClass
{
public void handleRetrySuccess( IFaultRecoveryContext ctx );
public String handleFault( IFaultRecoveryContext ctx );
}

次の点に注意してください。

- handleRetrySuccessは、再試行に成功した場合に起動されます。再試行ポリシーは、retrySuccessActionのJavaアクションにチェーンします。

- handleFaultは、javaActionタイプのポリシーを実行する際に起動されます。

例12-9にIFaultRecoveryContextで使用可能なデータを示します。

例12-9 IFaultRecoveryContextで使用可能なデータ

public interface IFaultRecoveryContext {

/**
* Gets implementation type of the fault.
* @return
*/
public String getType();

/**
* @return Get property set of the fault policy action being executed.
*/
public Map getProperties();

/**
* @return Get fault policy id of the fault policy being executed.
*/
public String getPolicyId();

/**
* @return Name of the faulted partner link.
*/
public String getReferenceName();

/**
* @return Port type of the faulted reference .
*/
public QName getPortType();
}

このインタフェースのサービス・エンジン実装では、さらに詳細な情報が提供されます(例: Oracle BPEL Process Manager)。例12-10に詳細を示します。

例12-10 IFaultRecoveryContextのサービス・エンジン実装

public class BPELFaultRecoveryContextImpl extends BPELXExecLetUtil implements
IBPELFaultRecoveryContext,  IFaultRecoveryContext{
...
}

例12-11に示すように、Oracle BPEL Process Manager固有のデータは、IBPELFaultRecoveryContextを使用して入手できます。

例12-11 Oracle BPEL Process Manager固有のデータ

public interface IBPELFaultRecoveryContext {
public void addAuditTrailEntry(String message);

public void addAuditTrailEntry(String message, Object detail);

public void addAuditTrailEntry(Throwable t);
/**
* @return Get action id of the fault policy action being executed.
*/
public String getActionId();

/**
* @return Type of the faulted activity.
*/
public String getActivityId();

/**
* @return Name of the faulted activity.
*/
public String getActivityName();

/**
* @return Type of the faulted activity.
*/
public String getActivityType();

/**
* @return Correleation id of the faulted activity.
*/
public String getCorrelationId();

/**
* @return BPEL fault that caused the invoke to fault.
*/
public BPELFault getFault();

/**
* @return Get index value of the instance
*/
public String getIndex(int i);

/**
* @return get Instance Id of the current process instance of the faulted
*         activity.
*/
public long getInstanceId();

/**
* @return Get priority of the current process instance of the faulted
*         activity.
*/
public int getPriority();

/**
* @return Process DN.
*/
public ComponentDN getProcessDN();

/**
* @return Get status of the current process instance of the faulted
*         activity.
*/
public String getStatus();

/**
* @return Get title of the current process instance of the faulted
*         activity.
*/
public String getTitle();

public Object getVariableData(String name) throws BPELFault;

public Object getVariableData(String name, String partOrQuery)
throws BPELFault;

public Object getVariableData(String name, String part, String query)
throws BPELFault;

/**
* @param priority
*            Set priority of the current process instance of the faulted
*            activity.
* @return
*/
public void setPriority(int priority);

/**
* @param status
*            Set status of the current process instance of the faulted
*            activity.
*/
public void setStatus(String status);

/**
* @param title
*            Set title of the current process instance of the faulted
*            activity.
* @return
*/
public String setTitle(String title);

public void setVariableData(String name, Object value) throws BPELFault;

public void setVariableData(String name, String partOrQuery, Object value)
throws BPELFault;

public void setVariableData(String name, String part, String query,
Object value) throws BPELFault;
}

例12-12に、javaActionの実装例を示します。

例12-12 javaActionの実装

public class TestJavaAction implements IFaultRecoveryJavaClass {
public void handleRetrySuccess(IFaultRecoveryContext ctx) {
System.out.println("This is for retry success");
handleFault(ctx);
}
public String handleFault(IFaultRecoveryContext ctx) {
System.out.println("-----Inside handleFault-----\n" + ctx.toString());

dumpProperties(ctx.getProperties());
/* Get BPEL specific context here */
BPELFaultRecoveryContextImpl bpelCtx = (BPELFaultRecoveryContextImpl) ctx;
bpelCtx.addAuditTrailEntry("hi there");
System.out.println("Policy Id" + ctx.getPolicyId());
...
}

12.4.4 Oracle BPM Suiteに対してフォルト・ポリシーを設計する方法

Oracle BPM Suiteに対してフォルト・ポリシーを設計し、実行できます。詳細は、『Oracle Fusion Middleware Oracle Business Process Managementモデリングおよび実装ガイド』の「BPMでのフォルト処理の使用方法」の章を参照してください。

12.4.5 インスタンス再試行回数を超過した場合のフォルト管理動作に関する注意事項

インスタンスをリカバリするフォルト・ポリシーをora-retryアクションで構成し、指定したインスタンス再試行回数を超過すると、そのインスタンスはopen.faulted(進行中)としてマークされます。このインスタンスは引き続きアクティブです。

インスタンスをopen.faultedとしてマークすることで、そのインスタンスの消失が防止されます。フォルト・ポリシー・ファイルのora-retryアクションの後には、次のような別のフォルト処理アクションを構成できます。

- ora-human-interventionアクションを構成して、インスタンスのリカバリをOracle Enterprise Manager Fusion Middleware Controlから手動で実行します。

- ora-terminateアクションを構成し、インスタンスをクローズ(closed.faultedとしてマーク)して再試行されないようにします。

ただし、フォルト・ポリシー・ファイルでora-retryアクションの後に実行されるアクションを設定していない場合に、インスタンス再試行回数を超過すると、インスタンスはopen.faultedとしてマークされたままになり、リカバリはインスタンスの処理を試行します。

たとえば、例12-13に示すフォルト・ポリシー・ファイルでは、ora-retryの後にアクションが定義されていません。

例12-13 アクションの定義がない例

<Action id="ora-retry">
<retry>
<retryCount>2</retryCount>
<retryInterval>2</retryInterval>
<exponentialBackoff/>
</retry>
</Action>

この場合は、次のアクションが実行されます。

- (前述のフォルト・ポリシー・コードを使用してフォルトを処理する)invokeアクティビティが試行されます。

- 間隔を増やして2回の再試行(2秒後、次に4秒後)が実行されます。

- すべての再試行に失敗した場合は、次のアクションが実行されます。

- 詳細なフォルト・エラー・メッセージが監査証跡に記録されます。

- インスタンスがopen.faulted(進行中)としてマークされます。

- インスタンスが選択され、invokeアクティビティが再試行されます。

- リカバリにも失敗する場合があります。その場合は、invokeアクティビティが再実行されます。追加の監査メッセージが記録されます。

12.4.6 同じフロー内に複数のフォルトがある再試行アクションの実行に関する注意事項

フォルト・ポリシーの再試行アクションは、同じフロー内の複数のフォルトで実行できない可能性があります。これは、以前のフォルトの再試行回数に到達している可能性があるためです。

たとえば、fault1とfault2の2つのフォルト条件でフォルト・ポリシーを定義すると仮定します。どちらのフォルト条件にも、再試行回数が3の再試行アクションが指定されます。fault1が発生し、再試行アクションが3回実行されるとします。ペイロードを変更することでfault1の問題を解決しますが、インスタンスが再発行されるとfault2が発生します。その後、Oracle Enterprise Manager Fusion Middleware Controlを使用して、フォルトが発生したインスタンスを再発行します。2番目のフォルト条件fault2は、フォルト・ポリシーの仕様に従って3回再試行されると予想できます。しかし、前のfault1フォルト条件で再試行の最大数が実行されたため、この2番目のフォルト条件は発生しません。

12.4.7 フォルト・ポリシー再試行中のバインディング・レベル再試行に関する注意事項

アウトバウンド方向のJCAレベルの再試行とフォルト・ポリシー・ファイル内の再試行アクションの両方を備えたアダプタで、アウトバウンド障害に対する再試行アクションをテストしている場合は、そのJCAレベル(またはバインディング・レベル)再試行がフォルト・ポリシー再試行の中で実行されます。たとえば、図12-11に示すアプリケーションを設計したとします。

図12-11 SOAコンポジット・アプリケーション

「図12-11 SOAコンポジット・アプリケーション」の説明

composite.xmlファイルには、例12-14に示す再試行パラメータを指定します。

例12-14 再試行パラメータ

<property name="jca.retry.count" type="xs:int" many="false"
override="may">2</property>
<property name="jca.retry.interval" type="xs:int" many="false"
override="may">2</property>
<property name="jca.retry.backoff" type="xs:int" many="false"
override="may">2</property>

アウトバウンド方向のEQ参照バインディング・コンポーネントのフォルト・ポリシー・ファイルには、例12-15に示すアクションを指定します。

例12-15 再試行アクション

<retryCount>3</retryCount>
<retryInterval>3</retryInterval>

アウトバウンド障害が発生する場合は、フォルト・ポリシー再試行中にJCA再試行が実行されることが想定されます。フォルト・ポリシーの1回目の再試行時に、JCA再試行がコールされます。この例では、フォルト・ポリシーの再試行ごとに、間隔が2秒で指数バックオフが2のJCA再試行が2回実行されます。

- フォルト・ポリシー再試行1:

- JCA再試行1(2秒間隔)

- JCA再試行2(4秒間隔)

- フォルト・ポリシー再試行2:

- JCA再試行1(2秒間隔)

- JCA再試行2(4秒間隔)

- フォルト・ポリシー再試行3:

- JCA再試行1(2秒間隔)

- JCA再試行2(4秒間隔)

12.4.8 ora-javaオプションの定義に関する注意事項

定義されたフォルト・ポリシー/バインディングを使用してSOAコンポジット・アプリケーションを起動し、Oracle Enterprise Manager Fusion Middleware Controlでリカバリ可能なフォルトを表示するとします。フォルト・リカバリの再試行が正常に行われた後、process_nameページのインスタンスの「フォルト」タブの「再試行成功後」リストには、デフォルトでは選択可能なora-javaオプションがありません。

これは予想された動作です。ora-javaオプションを表示するには、設計時にfault-policies.xmlファイルで明示的に定義する必要があります。たとえば、次の手順を実行します。

ora-javaオプションを定義する手順は、次のとおりです。

1. fault-policies.xmlファイルにretrySuccessAction ref="ora-java"/>を明示的に追加するfault-policies.xmlファイルを作成します。

<Action id="ora-retry">
<Retry>
<retryCount>3</retryCount>
<retryInterval>2</retryInterval>
<exponentialBackoff/>
<retryFailureAction ref="ora-java"/>
<retrySuccessAction ref="ora-java"/>
</Retry>
</Action>

2. コンポジットをデプロイしてインスタンスを作成します。

3. コンポジット・インスタンスをクリックして、コンポジットのインスタンス・トレースを起動します。リカバリ可能なフォルトがあるコンポーネント(Oracle BPEL Process Manager、Oracle Mediator、Oracle BPMなど)をクリックします。「フォルト」タブに移動します。

4. フォルトを正常に再試行するには、「再試行」オプションを選択します。
フォルト・リカバリに成功した場合は、「再試行成功後」リストが表示されます。

5. リストを選択すると、今度はora-javaオプションがリストされています。

Oracle Enterprise Manager Fusion Middleware Controlでのフォルトからのリカバリの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

12.5 BPEL実行時フォルトの捕捉

BPEL実行時フォルトは、名前付きのBPELフォルトとして捕捉できます。bindingFaultおよびremoteFaultはメッセージに関連付けることができます。このアクションにより、faultHandlerでフォルトの詳細を取得できます。

12.5.1 BPEL実行時フォルトの捕捉方法

次の手順は、与えられた例を使用して、フォルトを生成し、それを捕捉するためのフォルト・ハンドラを定義する方法を示します。ここでは、WSDLファイルを変更してフォルトを生成し、捕捉するためのcatch属性を作成します。

BPEL実行時フォルトを捕捉する手順は、次のとおりです。

1. RuntimeFault.wsdlをプロセスWSDLにインポートします。RuntimeFault.wsdlは、そのデプロイメント時にsoa-infra-wls.ear内のsoa.marからMDSリポジトリにシードされます。
Oracle WebLogic ServerドメインにデプロイされたSOAインフラストラクチャには、RuntimeFault.wsdlが格納されているJAR/ZIPファイルsoa.marのコピーが表示されます。

2. messageType "bpelx:RuntimeFaultMessage"を使用して変数を宣言します。

3. 次の構文を使用して捕捉します。

<catch faultName="bpelx:remoteFault"  | "bpelx:bindingFault" faultName="varName">

12.6 getFaultAsString XPath拡張関数によるフォルト詳細の取得

可能なフォルトを捕捉できるようにcatchAllアクティビティが用意されています。ただし、BPELには、取得されたフォルトの詳細情報を取得するためのメソッドが用意されていません。詳細情報を取得するにはgetFaultAsString() XPath拡張関数を使用します。

12.6.1 getFaultAsString XPath拡張関数によるフォルト詳細の取得方法

例12-16は、この関数の使用方法を示しています。

例12-16 getFaultAsString() XPath拡張関数

<catchAll>
<sequence>
<assign>
<from expression="bpelx:getFaultAsString()"/>
<to variable="faultVar" part="message"/>
</assign>
<reply faultName="ns1:myFault" variable="faultVar" .../>
</sequence>
</catchAll>

詳細は、第B.2.29項「getFaultAsString」を参照してください。

12.7 throwアクティビティによる内部フォルトのスロー

BPELアプリケーションでは、フォルト・メッセージの生成および受取りができます。throwアクティビティには3つの要素(それ自体の名前、フォルトの名前およびフォルト変数)があります。throwアクティビティによってスローされるフォルトはBPEL内部のフォルトです。throwアクティビティは、クライアントと通信する非同期プロセスには使用できません。throwアクティビティの構文には、スロー名、フォルト名およびフォルト変数を指定します。

<throw name="delay" faultName="nsPrefix:fault-1" faultVariable="fVar"/>

12.7.1 throwアクティビティの作成方法

throwアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. throwアクティビティをデザイナにドラッグします。

3. throwアクティビティをダブルクリックして定義します。

4. 名前を入力するか、デフォルト値をそのまま使用します。

5. 「ネームスペースURI」フィールドの右側にある「検索」アイコンをクリックし、監視するフォルトを選択します。

6. 「フォルト・チューザ」ダイアログでフォルトを選択し、「OK」をクリックします。
選択したフォルトのネームスペースURIが「ネームスペースURI」フィールドに表示されます。選択したフォルトも「ローカル・パート」フィールドに自動的に表示されます。

図12-12に、完成した「Throw」ダイアログの例を示します。この例では、Fusion Order Demoアプリケーションの「Scope_AuthorizeCreditCard」scopeアクティビティの「Throw_Fault_CC_Denied」throwアクティビティが表示されています。このアクティビティは、承認されない注文に対してフォルトをスローします。

図12-12 「Throw」ダイアログ

「図12-12 「Throw」ダイアログ」の説明

7. 「適用」→「OK」の順にクリックします。

12.7.2 throwアクティビティ作成時の処理内容

例12-17に、設計完了後の.bpelファイルのthrowアクティビティを示します。このthrowアクティビティの実行後にOrderProcessorプロセスが終了します。

例12-17 throwアクティビティ

<throw name="Throw_Fault_CC_Denied"
faultName="client:OrderProcessorFault"/>

12.8 rethrowアクティビティによるフォルトの再スロー

rethrowアクティビティは、すぐ外側を囲んでいるフォルト・ハンドラによって最初に捕捉されたフォルトを再スローします。フォルト・ハンドラ内(catchアクティビティ、catchAllアクティビティ内など)では、rethrowアクティビティのみ使用します。rethrowアクティビティは、捕捉されたフォルト(元のフォルトのフォルト名およびフォルト・データ(存在する場合))を再スローするために、フォルト・ハンドラで使用されます。rethrowアクティビティは、フォルト・データに対する変更を無視する必要があります。例:

- フォルト・ハンドラがフォルト・データを変更した後、rethrowアクティビティをコールした場合、元のフォルト・データが再スローされ、変更されたフォルト・データは再スローされません。

- 要素を使用して1つのパーツが定義されたメッセージ・タイプ・フォルトが、同じ要素タイプを検索しているフォルト・ハンドラによって捕捉されるようにする機能を使用してフォルトが捕捉された場合、rethrowアクティビティは元のメッセージ・タイプ・データを再スローします。

注意:

このアクティビティは、BPELバージョン2.0プロジェクトでサポートされています。

12.8.1 rethrowアクティビティの作成方法

rethrowアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. rethrowアクティビティをデザイナにドラッグします。

3. rethrowアクティビティをダブルクリックして定義します。

4. 図12-13に示すように、名前を入力するか、デフォルト値をそのまま使用します。

図12-13 「Rethrow」ダイアログ

「図12-13 「Rethrow」ダイアログ」の説明

5. 「適用」→「OK」の順にクリックします。
完了後、設計は図12-14のようになります。

図12-14 BPELプロセスのthrowアクティビティ

「図12-14 BPELプロセスのthrowアクティビティ」の説明

12.8.2 フォルト再スロー時の処理内容

例12-18に、rethrowアクティビティの設計が完了した後の.bpelファイルを示します。rethrowアクティビティはフォルト・ハンドラ(catchアクティビティ)の内側にあります。

例12-18 rethrowアクティビティ

<scope name="scope1">
<faultHandlers>
<catch faultName="tns:error" faultVariable="tmpVar"
faultElement="tns:fault">
<sequence>
<assign>
<copy>
<from>concat('caught fault: ', $tmpVar)</from>
<to>$output.payload</to>
</copy>
</assign>
<rethrow name="Rethrow_1"/>
</sequence>
</catch>
</faultHandlers>
<throw faultName="tns:error" faultVariable="fault"/>
</scope>

12.9 外部フォルトを返す

BPELプロセス・サービス・コンポーネントは、内部フォルトのスローとは対照的に、別のアプリケーションにフォルトを送信して問題を提示できます。同期操作では、replyアクティビティがフォルトを返すことができます。非同期操作では、invokeアクティビティがこの機能を実行します。

12.9.1 同期相互作用でフォルトを返す方法

例12-19に、同期相互作用でフォルトを返すreplyアクティビティの構文を示します。

例12-19 replyアクティビティ

<reply partnerlinke="partner-link-name"
portType="port-type-name"
operation="operation-name"
variable="variable-name" (optional)
faultName="fault-name">
</reply>

同期リクエストに対して常にフォルトを返すことはあまり有効ではありません。それよりも、アクティビティを条件分岐に組み込み、リクエストされたデータを使用できる場合に最初のブランチが実行されるようにするほうが効果的です。リクエストされたデータを使用できない場合、BPELプロセス・サービス・コンポーネントはそのことを示すフォルトを返します。

詳細は、次の章を参照してください。

- 同期相互作用については、第7章「BPELプロセスからの同期Webサービスの起動」を参照してください。

- 条件構造の設定については、第11章「BPELプロセスでの条件分岐の使用」を参照してください。

12.9.2 非同期相互作用でフォルトを返す方法

非同期相互作用では、クライアントはリプライを待機しません。このため、フォルトを返すためにreplyアクティビティが使用されることはありません。かわりに、BPELプロセス・サービス・コンポーネントは通常はリクエストされた情報を受け取る同じポート・タイプのコールバック操作を使用して、invokeアクティビティによってフォルトを返します。

非同期相互作用の詳細は、第8章「BPELプロセスからの非同期Webサービスの起動」を参照してください。

12.10 scopeアクティビティによるアクティビティ・グループの管理

scopeアクティビティは、他のアクティビティに対してコンテナおよびコンテキストを提供します。scopeは、フォルト、イベント、補正、データ変数および相関セットに対するハンドラを提供します。scopeアクティビティを使用すると、機能構造をグループ化することでBPELフローが単純化されます。このグループ化により、Oracle BPELデザイナでは機能構造を閉じて1つの要素として表示できます。

例12-20に、WebLogic Fusion Order DemoアプリケーションのScope_FulfillOrderという名前のscopeを示します。このscopeは、注文品の出荷方法を判断するFulfillOrder Oracle Mediatorコンポーネントを起動します。

例12-20 scopeアクティビティ

<scope name="Scope_FulfillOrder">
<variables>
<variable name="lFulfillOrder_InputVariable"
messageType="ns17:requestMessage"/>
</variables>
<sequence>
<assign name="Assign_OrderData">
<copy>
<from variable="gOrderInfoVariable"
query="/ns4:orderInfoVOSDO"/>
<to variable="lFulfillOrder_InputVariable"
part="request" query="/ns4:orderInfoVOSDO"/>
</copy>
</assign>
<invoke name="Invoke_FulfillOrder"
inputVariable="lFulfillOrder_InputVariable"
partnerLink="FulfillOrder.FulfillOrder"
portType="ns17:execute_ptt" operation="execute"/>
</sequence>
</scope>

12.10.1 scopeアクティビティの作成方法

scopeアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. scopeアクティビティをデザイナにドラッグします。

3. Scopeアクティビティをダブルクリックするか、「拡張」記号を1回クリックして、アクティビティを開きます。

4. 「コンポーネント・パレット」から各アクティビティをドラッグして定義し、スコープ内に機能を作成します。図12-15に詳細を示します。

図12-15 開いた状態のscopeアクティビティ

「図12-15 開いた状態のscopeアクティビティ」の説明

5. 「OK」をクリックします。
完了後、scopeアクティビティの設計は図12-16のようになります。この例では、Fusion Order Demoアプリケーションの「Scope_AuthorizeCreditCard」scopeアクティビティが表示されています。

図12-16 設計完了後のscopeアクティビティ

「図12-16 設計完了後のscopeアクティビティ」の説明

12.10.2 scopeアクティビティへの説明ノートおよびイメージの追加

scopeアクティビティには、スコープの機能に関する簡単な説明を提供する説明ノートを追加できます。スコープのグラフィック・イメージを変更することもできます。説明ノートおよびイメージは、Oracle BPELデザイナに表示されます。これらの表示により、スコープをより簡単に理解できるようになります。

説明ノートおよびイメージをscopeアクティビティに追加する手順は、次のとおりです。

1. 次のいずれかの手順を実行します。

- スコープを右クリックし、「ユーザー・ドキュメント」を選択します。

- スコープをダブルクリックし、「ユーザー・ドキュメント」タブを選択します。

「ドキュメント」ダイアログが表示されます。

2. 「コメント」フィールドに、スコープの機能に関する簡単な説明を入力します。

3. 「イメージ」フィールドで、必要に応じて「検索」アイコンをクリックし、スコープのグラフィック・イメージを変更します。

4. 「OK」をクリックします。
図12-17に示すように、変更した結果がOracle BPELデザイナに表示されます。

図12-17 説明ノートが記載され、イメージが変更されたscope

「図12-17 説明ノートが記載され、イメージが変更されたscope」の説明

5. 説明ノートを編集する場合は、説明ノートをダブルクリックします。

12.10.3 scopeアクティビティ作成後の処理内容

例12-21に、設計完了後の.bpelファイルのscopeアクティビティを示します。Scope_AuthorizeCreditCard scopeアクティビティは、次のアクションを実行する各アクティビティで構成されています。

- クレジット・カード番号がない、またはクレジット・タイプが有効でないためにフォルトになった注文を捕捉するcatchアクティビティ。

- 承認されない注文に対してフォルトをスローするthrowアクティビティ。

- クレジット・カード・タイプ、クレジット・カード番号および購入金額を取得し、この情報をCreditCardAuthorizationServiceサービスの入力変数に割り当てるassignアクティビティ。

- CreditCardAuthorizationServiceサービスをコールして顧客情報を取得するinvokeアクティビティ。

- クレジット・カード検証の結果を確認するswitchアクティビティ。

例12-21 scopeアクティビティ

<scope name="Scope_AuthorizeCreditCard">
<variables>
<variable name="lCreditCardInput"
messageType="ns2:CreditAuthorizationRequestMessage"/>
<variable name="lCreditCardOutput"
messageType="ns2:CreditAuthorizationResponseMessage"/>
</variables>
<faultHandlers>
<catch faultName="bpws:selectionFailure">
<sequence>
<assign name="Assign_noCCNumber">
<copy>
<from expression="string('CreditCardCheck - NO
CreditCard')"/>
<to variable="gOrderProcessorFaultVariable"
part="code"/>
</copy>
</assign>
<throw name ="Throw_NoCreditCard"
faultVariable="gOrderProcessorFaultVariable"
faultName="ns9:OrderProcessingFault"/>
</sequence>
</catch>
<catch faultName="ns2:InvalidCredit">
<sequence>
<assign name="Assign_InvalidCreditFault">
<copy>
<from expression="concat(bpws:getVariableData
('gOrderInfoVariable','/ns4:orderInfoVOSDO/
ns4:CardTypeCode'), ' is not a valid
creditcard type')"/>
<to variable="gOrderProcessorFaultVariable"
part="summary"/>
</copy>
<copy>
<from expression="string('CreditCardCheck - NOT VALID')"/>
<to variable="gOrderProcessorFaultVariable"
part="code"/>
</copy>
</assign>
<throw name="Throw_OrderProcessingFault"
faultName="ns9:OrderProcessingFault"
faultVariable="gOrderProcessorFaultVariable"/>
</sequence>
</catch>
</faultHandlers>
<sequence>
<assign name="Assign_CreditCheckInput">
<copy>
<from variable="gOrderInfoVariable"
query="/ns4:orderInfoVOSDO/ns4:OrderTotal"/>
<to variable="lCreditCardInput" part="Authorization"
query="/ns8:AuthInformation/ns8:PurchaseAmount"/>
</copy>
<copy>
<from variable="gOrderInfoVariable"
query="/ns4:orderInfoVOSDO/ns4:CardTypeCode"/>
<to variable="lCreditCardInput" part="Authorization"
query="/ns8:AuthInformation/ns8:CCType"/>
</copy>
<copy>
<from variable="gOrderInfoVariable"
query="/ns4:orderInfoVOSDO/ns4:AccountNumber"/>
<to variable="lCreditCardInput" part="Authorization"
query="/ns8:AuthInformation/ns8:CCNumber"/>
</copy>
</assign>
<invoke name="InvokeCheckCreditCard"
inputVariable="lCreditCardInput"
outputVariable="lCreditCardOutput"
partnerLink="CreditCardAuthorizationService"
portType="ns2:CreditAuthorizationPort"
operation="AuthorizeCredit"/>
<switch name="Switch_EvaluateCCResult">
<case condition="bpws:getVariableData('lCreditCardOutput','status','
/ns8:status') != 'APPROVED'">
<bpelx:annotation>
<bpelx:pattern>status &lt;&gt; approved</bpelx:pattern>
</bpelx:annotation>
<throw name="Throw_Fault_CC_Denied"
faultName="client:OrderProcessorFault"/>
</case>
/switch>
</sequence>
</scope>

12.10.4 スコープに関する注意事項

スコープは、CPU能力とメモリーを大量に使用する可能性があるため、過度の使用は避けてください。sequenceアクティビティを使用することで、CPUとメモリーの使用量を抑制し、大きいBPELフローを見やすくできます。

12.10.5 スコープ内のフォルト・ハンドラの使用方法

フォルトが処理されていない場合、フォルト状態が作成されてアプリケーション全体に移行し、プロセス全体がフォルト状態になることがあります。これを防ぐには、フォルトを受け取る可能性があるプロセスの一部をスコープ内に配置します。scopeアクティビティには、次のフォルト処理機能が含まれています。

- スコープ内ではcatchアクティビティが動作し、プロセス全体がフォルト状態になる前に、フォルトおよび例外を捕捉します。catchアクティビティで特定のフォルト名を使用し、個々のフォルトに特定の方法で対応できます。

- catchAllアクティビティは、名前が指定されたcatchアクティビティでは処理されないフォルトを捕捉します。

例12-22に、catchおよびcatchAllアクティビティの構文を示します。x:fooという名前のフォルトがスローされたとします。フォルトがフォルト・データを渡さない場合は、最初のcatchが選択されます。フォルトに関連付けられたフォルト・データがある場合、フォルトのデータ・タイプが変数barタイプに一致すると、3番目のcatchが選択されます。一致しない場合は、デフォルトのcatchAllハンドラが選択されます。最後に、タイプがbarのタイプに一致し、名前がx:fooでないフォルト変数を持つフォルトは2番目のcatchで処理されます。その他のすべてのフォルトはデフォルトのcatchAllハンドラによって処理されます。

例12-22 CatchアクティビティとCatchAllアクティビティ

<faulthandlers>
<catch faultName="x:foo">
<empty/>
</catch>
<catch faultVariable="bar">
<empty/>
</catch>
<catch faultName="x:foo" faultVariable="bar">
<empty/>
</catch>
<catchAll>
<empty/>
</catchAll>
</faulthandlers>

12.10.6 idempotentプロパティとフォルト処理に関する注意事項

composite.xmlファイルでidempotentデプロイメント・ディスクリプタのプロパティがfalseに設定されている場合、パートナ・リンクの起動が失敗しても、invokeアクティビティからリカバリは開始されません。invokeアクティビティの再試行をidempotentプロパティに依存することはお薦めいたしません。かわりに、BPELプロセス内に設計したフォルト処理(catchAllアクティビティの場合など)によって、リカバリを試みます。ベスト・プラクティスとして、かわりにフォルト・ポリシーを使用してinvokeアクティビティを再試行することをお薦めします。

表12-4は、idempotentプロパティがfalseに設定されていて、パートナ・リンクの起動が成功した場合と失敗した場合の動作を示しています。

表12-4 idempotentプロパティがfalseに設定されている場合のリカバリ動作

パートナ・リンクの起動

動作

成功

invokeアクティビティは実行直後にデハイドレーションされ、デハイドレーション・ストアに記録されます。

不成功、かつBPELプロセスにcatchAllアクティビティなどのフォルト処理が含まれている

リカバリはcatchAllアクティビティから開始され、invokeアクティビティからは開始されません。

不成功、かつBPELプロセスにフォルト・ポリシーが含まれている

フォルト・ポリシーが使用されて、invokeアクティビティのリカバリが試みられます。これは推奨アプローチです。

たとえば、BPELプロセスに次の設計が含まれているとします。

- invokeアクティビティによってパートナ・リンク(この例では、myPartnerLinkという名前です)が起動されます。

- composite.xmlファイルで、idempotentデプロイメント・ディスクリプタのプロパティがfalseに設定されています。

<property name="bpel.partnerLink.myPartnerLink.idempotent">false</property>

この設定により、BPELプロセスはこのアクティビティの実行直後にデハイドレーションされ、デハイドレーション・ストアに記録されます。

このプロパティは、「パートナ・リンクの編集」ダイアログでfalseに設定することもできます。図12-18に詳細を示します。

図12-18 「パートナ・リンクの編集」ダイアログの「冪等性」タブ

「図12-18 「パートナ・リンクの編集」ダイアログの「冪等性」タブ」の説明

詳細は、第8.4項「パートナ・リンク操作レベルでの冪等性の管理」を参照してください。

- scopeアクティビティのcatchAllアクティビティ・エラー・ハンドラによってフォルトが捕捉され、ロールバック・フォルトがスローされます。

パートナ・リンクに対するinvokeアクティビティによる起動が失敗した場合、リカバリはcatchAllアクティビティ・エラー・ハンドラから開始され、invokeアクティビティからは開始されません。Oracle Enterprise Manager Fusion Middleware ControlのBPELプロセスのflowアクティビティで、catchAllアクティビティからのリカバリを監視できます。

これは設計によります。idempotentプロパティの設定は、invokeアクティビティの実行の後に確認されます。実行に失敗し、例外が発生した場合、idempotentプロパティの設定には到達しません。BPELプロセス・サービス・エンジンによって、catchAllアクティビティを開いた直後のインスタンスが保存されます。idempotentプロパティがfalseに設定されているため、このインスタンスを保存する必要があります。これが、リカバリがcatchAllアクティビティで再開される理由です。

かわりに、失敗したinvokeアクティビティをフォルト・ポリシーでリカバリすることをお薦めします。フォルト・ポリシーの作成の詳細は、第12.4項「フォルト管理フレームワークでのフォルトの処理」を参照してください。

idempotentプロパティの詳細は、第C.1項「デプロイメント・ディスクリプタのプロパティの概要」を参照してください。

12.10.7 スコープでのcatchアクティビティの作成方法

スコープでcatchアクティビティを作成する手順は、次のとおりです。

1. 開いた状態のscopeアクティビティで、「Catchの追加」をクリックします。図12-19に詳細を示します。

図12-19 Catchの追加

「図12-19 Catchの追加」の説明

これにより、scopeアクティビティの右側にcatchアクティビティが作成されます。

2. catchアクティビティをダブルクリックします。

3. 必要に応じて名前を入力します。

4. 「ネームスペースURI」フィールドの右側にある「検索」アイコンをクリックし、フォルトを選択します。

5. 「フォルト・チューザ」ダイアログでフォルトを選択し、「OK」をクリックします。
選択したフォルトのネームスペースURIが「ネームスペースURI」フィールドに表示されます。選択したフォルトも「ローカル・パート」フィールドに自動的に表示されます。

図12-20に、「Catch」ダイアログの例を示します。この例では、Fusion Order Demoアプリケーションの「Scope_AuthorizeCreditCard」scopeアクティビティの「selectionFailure」catchアクティビティが表示されています。このcatchアクティビティは、クレジット・カード番号がない注文を捕捉します。

図12-20 「Catch」ダイアログ

「図12-20 「Catch」ダイアログ」の説明

6. 追加のフォルト処理機能を設計します。

7. 「OK」をクリックします。
図12-21に、「Scope_AuthorizeCreditCard」scopeアクティビティに2つのcatchアクティビティがある例を示します。2番目のcatchアクティビティは、有効でないクレジット・タイプを捕捉します。

図12-21 デザイナに表示されたcatchアクティビティ

「図12-21 デザイナに表示されたcatchアクティビティ」の説明

12.10.8 スコープでのcatchアクティビティ作成時の処理内容

例12-23に、設計完了後の.bpelファイルのcatchアクティビティを示します。selectionFailure catchアクティビティはクレジット・カード番号がない注文を捕捉し、InvalidCredit catchアクティビティは有効でないクレジット・タイプを捕捉します。

例12-23 Catchブランチ

<faultHandlers>
<catch faultName="bpws:selectionFailure">
<sequence>
<assign name="Assign_noCCNumber">
<copy>
<from expression="string('CreditCardCheck - NO CreditCard')"/>
<to variable="gOrderProcessorFaultVariable"
part="code"/>
</copy>
</assign>
<throw name ="Throw_NoCreditCard"
faultVariable="gOrderProcessorFaultVariable"
faultName="ns9:OrderProcessingFault"/>
</sequence>
</catch>
<catch faultName="ns2:InvalidCredit">
<sequence>
<assign name="Assign_InvalidCreditFault">
<copy>
<from expression="concat(bpws:getVariableData
('gOrderInfoVariable','/ns4:orderInfoVOSDO/ns4:CardTypeCode'), '
is not a valid creditcard type')"/>
<to variable="gOrderProcessorFaultVariable"
part="summary"/>
</copy>
<copy>
<from expression="string('CreditCardCheck - NOT VALID')"/>
<to variable="gOrderProcessorFaultVariable"
part="code"/>
</copy>
</assign>
<throw name="Throw_OrderProcessingFault"
faultName="ns9:OrderProcessingFault"
faultVariable="gOrderProcessorFaultVariable"/>
</sequence>
</catch>
</faultHandlers>

12.10.9操作なしの命令をビジネス・プロセスに挿入するemptyアクティビティの作成方法

何もしないアクティビティが必要になることがよくあります。たとえば、フォルトを捕捉して抑制する必要がある場合などです。この場合、emptyアクティビティを使用すると、操作なしの命令をビジネス・プロセスに挿入できます。

emptyアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. emptyアクティビティをデザイナにドラッグします。

3. emptyアクティビティをダブルクリックします。
図12-22に示すように、「Empty」ダイアログが表示されます。

図12-22 emptyアクティビティ

「図12-22 emptyアクティビティ」の説明

4. 必要に応じて名前を入力します。

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

12.10.10 emptyアクティビティ作成時の処理内容

例12-24に、emptyアクティビティの構文を示します。

例12-24 emptyアクティビティ

<empty standard-attributes>
standard-elements
</empty>

catchまたはcatchAllアクティビティが選択されていない場合、フォルトが現在のスコープによって捕捉されず、すぐ外側を囲んでいるスコープにスローされます。グローバル・プロセス・スコープでフォルトが発生し(またはグローバル・プロセス・スコープに再スローされ)、グローバル・レベルでフォルトに適合するフォルト・ハンドラがない場合、プロセスが異常終了します。これは、terminateアクティビティ(第12.13.1項「BPEL 1.1のterminateアクティビティによるビジネス・プロセス・インスタンスの停止」で説明)が実行されたような状況になります。

12.11 replayアクティビティによるscopeアクティビティ内でのアクティビティの再実行

scopeアクティビティ内にreplayを作成すると、スコープ内のすべてのアクティビティを再実行できます。

12.11.1 replayアクティビティの作成方法

replayアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「Oracle Extensions」を展開します。

2. replayアクティビティをデザイナにドラッグします。

3. replayアクティビティをダブルクリックします。

4. オプション名を入力します。

5. 図12-23に示すように、再実行するスコープを選択します。

図12-23 「Replay」ダイアログ

「図12-23 「Replay」ダイアログ」の説明

6. 「適用」をクリックし、「OK」をクリックします。

7. scopeアクティビティの設計を続行します。
完了後、scopeアクティビティの設計は図12-24のようになります。

図12-24 scopeアクティビティ内のreplayアクティビティ

「図12-24 scopeアクティビティ内のreplayアクティビティ」の説明

12.11.2 replayアクティビティ作成時の処理内容

例12-25に、BPELバージョン2.0をサポートするBPELプロジェクトのreplayアクティビティの設計が完了した後の、.bpelファイルを示します。BPEL 2.0では、replayアクティビティはextensionActivity要素にラップされます。

例12-25 replayアクティビティ

<scope name="scope2">
<sequence>
<assign>
<copy>
<from>$counter2 + 1</from>
<to>$counter2</to>
</copy>
</assign>
<scope name="scope3">
<sequence>
<assign>
<copy>
<from>$counter + 1</from>
<to>$counter</to>
</copy>
</assign>
<if>
<condition>$counter = 3</condition>
<empty/>
<else>
<extensionActivity>
<bpelx:replay name="ReplayScope" scope="Scope_RetrieveOrder"/>
</extensionActivity>
</else>
</if>
</sequence>
</scope>
</sequence>
</scope>

BPEL 1.1では、replayアクティビティはbpelx拡張要素としてコード化されます。

<bpelx:replay name="ReplayScope" scope="Scope2"/>

12.12 一連の操作を元に戻した後の補正の使用

補正は、BPELプロセス・サービス・コンポーネントが一部の操作を完了した後で一連の操作を完了できず、引き返して前に完了したトランザクションを取り消す必要がある場合に発生します。たとえば、レンタカー、ホテルおよび航空券を予約するようにBPELプロセス・サービス・コンポーネントが設計されている場合、車とホテルは予約でき、その日付の航空券を予約できない場合があります。この場合、BPELフローは戻って車とホテルをキャンセルすることによって、補正を実行します。

scopeアクティビティでは、補正ハンドラは以前に完了した処理ステップをリバースできます。補正ハンドラは、次のいずれかのアクティビティを使用して関連するスコープが正常に完了した後に呼び出すことができます。

- compensateアクティビティ(BPELバージョン1.1および2.0プロジェクト)
このアクティビティにより、正常に完了したすべての子スコープ、およびまだ補正されていない子スコープの補正ハンドラが、デフォルトの順序で実行されます。

- compensateScopeアクティビティ(BPELバージョン2.0プロジェクト)
このアクティビティにより、正常に完了した特定のスコープの補正ハンドラが実行されます。

12.12.1 compensateアクティビティの使用

補正ハンドラは、compensateアクティビティを使用することによって起動でき、補正が実行されるスコープ(補正ハンドラが起動されるスコープ)を指定します。スコープの補正ハンドラは、スコープが正常に完了した場合にのみ起動できます。インストールされていない補正ハンドラを起動することは、emptyアクティビティ(操作なし)を使用することと同じです。これにより、フォルト・ハンドラは、ネストされたどのスコープが正常に完了したかを判断するために、状態を使用しなくても済むようになります。インストールされた補正ハンドラが複数回起動されているプロセスのセマンティクスは定義されていません。

compensateアクティビティを明示的に呼び出す機能は、「Business Process Execution Language for Web Services Specification Version 1.1」のアプリケーションで制御されたエラー処理フレームワークの基礎となります。このアクティビティは、ビジネス・プロセスの次の部分でのみ使用できます。

- 補正が実行されるスコープのすぐ外側を囲んでいるスコープのフォルト・ハンドラ内。

- 補正が実行されるスコープのすぐ外側を囲んでいるスコープの補正ハンドラ内。

例:

<compensate scope="RecordPayment"/>

名前によって補正されているスコープがループでネストされている場合、BPELプロセス・サービス・コンポーネントは一連の反復内で補正ハンドラ・インスタンスを逆の順序で起動します。

スコープの補正ハンドラがない場合、デフォルトの補正ハンドラは、すぐ内側に囲まれているスコープの補正ハンドラを、これらのスコープの完了と逆の順序で起動します。

補正フォームでcompensateアクティビティのスコープ名が省略されると、このデフォルトの動作が明示的に起動されます。これは、囲んでいるフォルトまたは補正ハンドラで追加の作業(変数の更新や外部通知の送信、および内側のスコープに対するデフォルト補正の実行など)を実行する必要がある場合に便利です。外側のスコープに付加されたフォルトまたは補正ハンドラのcompensateアクティビティにより、そのスコープ内に直接ネストされた完了スコープに対する補正ハンドラがデフォルトの順序で起動されます。このアクティビティは、外側のスコープ内にネストされたスコープの明示的な起動を除く、その他のユーザー指定の動作と一緒に使用できます。外側のスコープ内にネストされたこのスコープの補正を明示的に起動すると、デフォルトの順序の補正は、適切に機能しません。

12.12.2 compensateアクティビティの作成方法

compensateアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. compensateアクティビティをデザイナにドラッグします。

3. compensateアクティビティをダブルクリックします。

4. 図12-25に示すように、補正ハンドラを起動するscopeアクティビティを選択します。

図12-25 compensateアクティビティ

「図12-25 compensateアクティビティ」の説明

5. 「適用」→「OK」の順にクリックします。

12.12.3 compensateアクティビティ作成時の処理内容

invokeアクティビティにインラインで定義された補正ハンドラがある場合、アクティビティの名前はcompensateアクティビティに使用されるスコープの名前です。例12-26に構文を示します。

例12-26 補正ハンドラ

<compensate scope="ncname"? standard-attributes>
standard-elements
</compensate>

12.12.4 BPEL 2.0のcompensateScopeアクティビティの使用

compensateScopeアクティビティは、すでに正常に完了している特定の内側のスコープで補正を開始するために使用されます。このアクティビティは、フォルト・ハンドラ、別の補正ハンドラまたは終了ハンドラ内からのみ使用します。

compensateScopeアクティビティを作成する場合、すぐ内側に囲まれているスコープを参照する必要があるターゲットを選択します。スコープにはフォルト・ハンドラまたは補正ハンドラを含める必要があります。

12.12.5 compensateScopeアクティビティの作成方法

注意:

このアクティビティは、BPEL 2.0プロジェクトでサポートされています。

compensateScopeアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. CompensateScopeアクティビティをデザイナにドラッグします。

3. CompensateScopeアクティビティをダブルクリックします。

4. 補正ハンドラを起動する特定のscopeアクティビティを選択します。図12-26に詳細を示します。

図12-26 CompensateScopeアクティビティ

「図12-26 CompensateScopeアクティビティ」の説明

5. 「適用」→「OK」の順にクリックします。

12.12.6 compensateScopeアクティビティ作成時の処理内容

例12-27に、compensateScopeアクティビティの設計が完了した後の.bpelファイルを示します。compensateScopeアクティビティは、catchallフォルト・ハンドラで定義されます。補正ハンドラを起動するスコープが定義されます。

例12-27 compensateScopeアクティビティ

<scope name="ScopeAssignCreditRating">
<faultHandlers>
<catchAll>
<compensateScope target="ScopeAssignScreditRating2" />
</catchAll>
</faultHandlers>
<sequence>
<scope name="ScopeAssignScreditRating2">
<compensationHandler>
<!-- undo work -->
</compensationHandler>
<!-- do some work -->
</scope>
<!-- do more work -->
<!-- a fault is thrown here; results of ScopeAssignScreditRating2 must be undone -->
</sequence>
</scope>

12.13 terminateアクティビティまたはexitアクティビティによるビジネス・プロセス・インスタンスの停止

次のいずれかのアクティビティを使用して、ビジネス・プロセス・インスタンスを停止できます。

- terminateアクティビティ(BPELバージョン1.1プロジェクト)

- exitアクティビティ(BPELバージョン2.0プロジェクト)

12.13.1 BPEL 1.1のterminateアクティビティによるビジネス・プロセス・インスタンスの停止

terminateアクティビティは、そのterminateアクティビティが実行されるビジネス・プロセス・インスタンスの動作をただちに終了します。現在実行中のすべてのアクティビティは、フォルト処理または補正動作を実行せずにできるだけ早く終了する必要があります。terminateアクティビティは、BPELプロセス・サービス・コンポーネントのステータスの通知を送信しません。terminateアクティビティを使用する場合は、先に関係ユーザーに通知するようにプログラムしてください。

12.13.1.1 terminateアクティビティの作成方法

terminateアクティビティを作成する手順は、次のとおりです。

1. Oracle JDeveloperの「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. terminateアクティビティをデザイナにドラッグします。図12-27に例を示します。

図12-27 terminateアクティビティ

「図12-27 terminateアクティビティ」の説明

3. terminateアクティビティをダブルクリックします。

4. 必要に応じて名前を入力します。

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

12.13.1.2 terminateアクティビティ作成時の処理内容

例12-28に、terminateアクティビティの構文を示します。このアクティビティによってビジネス・プロセス・インスタンスが停止します。

例12-28 terminateアクティビティ

<terminate standard-attributes>
standard-elements
</terminate>

12.13.2 BPEL 2.0のexitアクティビティによるビジネス・プロセス・インスタンスの即時終了

exitアクティビティを使用すると、終了処理、フォルト処理または補正処理メカニズムを起動しなくても、すべてのパラレル・ブランチで現在実行中のすべてのアクティビティをただちに終了できます。このアクティビティは、予期しない重大な障害を処理するための適切な理由がない環境で使用すると便利です。

注意:

未処理の対話もexitアクティビティの影響を受けます。たとえば、プロセスと対話している他のパートナは、到着することのないレスポンスを待機する可能性があります。

12.13.2.1 exitアクティビティの作成方法

exitアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. exitアクティビティを、exitアクティビティを実行するBPELプロセスのセクションにドラッグします。

3. 図12-28に示すように、exitアクティビティをダブルクリックします。

図12-28 exitアクティビティ

「図12-28 exitアクティビティ」の説明

4. 必要に応じて名前を入力します。

5. 「適用」→「OK」の順にクリックします。
完了後、BPELプロセス内のexitアクティビティは図12-29のようになります。

図12-29 BPELプロセスのexitアクティビティ

「図12-29 BPELプロセスのexitアクティビティ」の説明

12.13.2.2 exitアクティビティ作成時の処理内容

例12-29に、exitアクティビティの設計が完了した後の.bpelファイルを示します。

例12-29 exitアクティビティ

<sequence>
<!-- receive input from requester -->
<receive name="receiveInput" partnerLink="client" portType="tns:Test"
operation="process" variable="input" createInstance="yes"/>
<assign>
<copy>
<from>$input.payload</from>
<to>$output.payload</to>
</copy>
</assign>
<!-- respond output to requester -->
<reply name="replyOutput" partnerLink="client"
portType="tns:Test" operation="process" variable="output"/>
<exit/>
</sequence>

12.14 アサーション条件によるフォルトのスロー

リクエスト/レスポンスinvokeアクティビティ、receiveアクティビティ、replyアクティビティ、およびpickアクティビティとscopeアクティビティのonMessageブランチで、コールバック・メッセージの受信時に実行されるBPELバージョン1.1および2.0でのアサーション条件を指定できます。アサーションは、falseと評価された場合に、アクティビティからBPELフォルトがスローされるXPath式を指定します。この条件は、パートナ・コールバック後に多数のswitch、assignおよびthrowアクティビティを作成する可能性がある場合の代替手段として提供されています。

条件を実行するタイミングを次の中から選択できます。

- Preassert: この条件は、invokeアクティビティまたはreplyアクティビティがアウトバウンド・メッセージを送信する前に実行されます。

- Postassert: この条件は、invokeアクティビティ、receiveアクティビティまたはonMessageブランチがインバウンド・メッセージを受信した後に実行されます。

アサーション条件は、ネストされた拡張要素として指定されます。例12-30に、BPEL 1.1におけるアサート後条件のスキーマ定義を示します。

例12-30 BPEL 1.1におけるアサート後条件のスキーマ定義

<invoke | receive | onMessage>
standard-elements
<bpelx:postAssert name="ncname" expression="boolean-expr" faultName="QName"+
message="generic-expr"+/>
</invoke | receive | onMessage>

例12-31に、BPEL 1.1におけるアサート後条件の構文を示します。

例12-31 BPEL 1.1におけるアサート後条件の構文

<bpelx:postAssert name="Assert_1"
message='Post Invoke Multiple assert value fired'
faultName="ns2:NegativeValue"
expression="bpws:getVariableData('invar','payload','/ns1:process/ns1:input') >
0"/>

例12-32に、BPEL 2.0におけるアサート後条件のスキーマ定義を示します。BPEL 1.1とBPEL 2.0の差異に注意します。

例12-32 BPEL 2.0におけるアサート後条件のスキーマ定義

<invoke | receive | onMessage>
standard-elements
<bpelx:postAsserts>
<bpelx:postAssert faultName="QName">
<bpelx:expression expressionLanguage="anyURI"?>expression
</bpelx:expression>
<bpelx:message expressionLanguage="anyURI"?>expression</bpelx:message>
</bpelx:postAssert>
</bpelx:postAsserts>
</invoke | receive | onMessage>

例12-33に、BPEL 2.0におけるアサート後条件の構文を示します。

例12-33 BPEL 2.0におけるアサート後条件の構文

<bpelx:postAsserts>
<bpelx:postAssert faultName="ns2:InvalidInput">
<bpelx:expression>number(concat($inputVariable.payload/client:input,'2')) <
500</bpelx:expression>
<bpelx:message>"AssertXpathPostInvoke_20 assert fired"</bpelx:message>
</bpelx:postAssert>
</bpelx:postAsserts>

例12-34に、BPEL 1.1におけるアサート前条件のスキーマ定義を示します。

例12-34 BPEL 1.1におけるアサート前条件のスキーマ定義

<invoke | reply>
standard-elements
<bpelx:preAssert name="NCName" expression="string" message="string"
faultName="QName"/>
</invoke | reply>

例12-35に、BPEL 1.1におけるアサート前条件の構文を示します。

例12-35 BPEL 1.1におけるアサート前条件の構文

<bpelx:preAssert name="Assert_1"
expression="bpws:getVariableData('invar','payload','/ns1:process/ns1:input') >
0"
message='pre invoke assert NegativeInput fired'
faultName="ns4:NegativeInput"/>

例12-36に、BPEL 2.0におけるアサート前条件のスキーマ定義を示します。BPEL 1.1とBPEL 2.0の差異に注意します。

例12-36 BPEL 2.0におけるアサート前条件のスキーマ定義

<invoke | reply>
standard-elements
<bpelx:preAsserts>
<bpelx:preAssert faultName="QName">
<bpelx:expression expressionLanguage="anyURI"?>expression</bpelx:expression>
<bpelx:message expressionLanguage="anyURI"?>expression</bpelx:message>
</bpelx:preAssert>
</bpelx:preAsserts>
</invoke | reply>

例12-37に、BPEL 2.0におけるアサート前条件の構文を示します。

例12-37 BPEL 2.0におけるアサート前条件の構文

<bpelx:preAsserts>
<bpelx:preAssert faultName="ns1:InvalidInput">
<bpelx:expression>concat($inputVariable.payload/client:input,'2') >
$inputVariable.payload/client:input</bpelx:expression>
<bpelx:message>"AssertXpathPreInvoke_20 Assert test"</bpelx:message>
</bpelx:preAssert>
</bpelx:preAsserts>

bpelx:postAssert拡張要素には、パートナからのコールバック・メッセージの受信時に評価するXPath式を指定します。アサーション式でfalseのブール値が返された場合は、指定のフォルトがアクティビティからスローされます。アサーション式でtrueのブール値が返された場合、フォルトはスローされず、通常のBPELプロセス・フローの場合と同様に、invokeアクティビティ、receiveアクティビティ、またはpickアクティビティとscopeアクティビティのonMessageブランチに続くアクティビティが実行されます。

bpelx:preAssertまたはbpelx:postAssert拡張要素は、Javaのassert文と同じです。Javaでは、assert式がtrueと評価されない場合は、JVMによってエラーが報告されます。同様に、bpelx:preAssertまたはbpelx:postAssert拡張要素の式もtrueと評価される必要があります。そうでない場合は、指定のフォルトがスローされます。

たとえば、例12-38に示すBPEL 1.1のinvokeアクティビティでは、アサーション条件に指定したXPath式でfalseが返されると、NegativeCreditフォルトがスローされます。

例12-38 BPEL 1.1のinvokeアクティビティ

<scope>
<faultHandlers>
<catch faultName="services:NegativeCredit" faultVariable="crError">
<empty/>
</catch>
</faultHandlers>
<sequence>
<invoke name="invokeCR" partnerLink="creditRatingService"
portType="services:CreditRatingService" operation="process"
inputVariable="crInput" outputVariable="crOutput">
<bpelx:postAssert name="negativeCredit"
expression="$crOutput.payload/tns:rating > 0"
faultName="services:NegativeCredit" message="'Negative
Credit'" />
</invoke>
</sequence>
</scope>

bpelx:preAssertまたはbpelx:postAssertのオプションのname属性は、監査証跡イベント・メッセージの作成時に使用されます。このインスタンスの名前を使用すると、複数のアサーションが指定されている場合にアサーション要素を識別できます。name属性の指定がない場合は、BPELファイル内のアサーション要素の行番号が使用されます。

12.14.1 アサーション条件の概要

この項では、主要なアサーション条件の概念について説明します。

12.14.1.1 bpelx:postAssertおよびbpelx:preAssert拡張要素

アクティビティに応じて、条件を実行するタイミングを指定するには、invokeアクティビティ、receiveアクティビティ、replyアクティビティ、およびpickアクティビティとscopeアクティビティのonMessageブランチの「アサーション」タブで「追加」アイコンをクリックし、「アサート前」または「アサート後」を選択します。選択内容に基づいて、次のbpelx拡張要素が使用されます。

- bpelx:preAssert: 「アサート前」を選択すると、invokeアクティビティまたはreplyアクティビティがアウトバウンド・メッセージを送信する前に条件が実行されます。

- bpelx:postAssert: 「アサート後」を選択すると、invokeアクティビティ、receiveアクティビティまたはonMessageブランチがインバウンド・メッセージを受信した後に条件が実行されます。

例12-39に、BPEL 1.1におけるreceiveアクティビティ内の複数のbpelx:postAssert拡張要素を示します。

例12-39 BPEL 1.1におけるreceiveアクティビティのbpelx:postAssert拡張要素

<receive name="Receive_1" createInstance="no"
variable="Receive_1_processResponse_InputVariable"
partnerLink="AsyncBPELService"
portType="ns1:AsyncBPELServiceCallback"
bpelx:for="'PT10S'"
operation="processResponse">
<bpelx:postAssert name="assert1" expression="true()" message="'assert
true failed'" faultName="client:fault1"/>
<bpelx:postAssert name="assert2" expression="false()" message="'assert
false failed'" faultName="client:fault2"/>
</receive>

例12-40に、BPEL 1.1におけるinvokeアクティビティ内の複数のbpelx:preAssert拡張要素を示します。

例12-40 BPEL 1.1におけるinvokeアクティビティのbpelx:preAssert拡張要素

<invoke name="Invoke_1" inputVariable="Invoke_1_process_InputVariable"
outputVariable="Receive_1_processResponse_InputVariable"
partnerLink="SyncBPELService" portType="ns1:SyncBPELService"
operation="process">
<bpelx:preAssert name="assert1" expression="true()" message="'assert true
failed'"/>
<bpelx:preAssert name="assert2"
expression="bpws:getVariableData('counter') = 3" message="concat('The value of
counter is ', $counter)"/>

「アサーション」タブの使用については、第12.14.2項「アサーション条件の作成方法」を参照してください。

12.14.1.2 faultName属性とmessage属性の使用

BPEL 1.1では、例12-41のスキーマ定義に示すように、bpelx:postAssert要素のfaultName属性とmessage属性を指定できます。

例12-41 BPEL 1.1におけるfaultName属性とmessage属性のスキーマ定義

<invoke | receive | onMessage>
standard-elements
<bpelx:postAssert name="ncname"? expression="boolean-expr" faultName="QName"+
message="generic-expr"+/> *
</invoke | receive | onMessage>

例12-42に、faultname属性とmessage属性の構文を示します。

例12-42 BPEL 1.1におけるfaultName属性とmessage属性の構文

<bpelx:postAssert name="Assert_2"
message='multiple post assert Greater value fired'
faultName="ns2:GreaterValue"
expression="bpws:getVariableData('invar','payload','/ns1:process/ns1:input') <
500"/>

faultName属性の指定がない場合、フォルトはbpelx:postAssertFailureにデフォルト設定されます。message属性の指定がない場合、メッセージ値はアクティビティの名前にデフォルト設定されます。

<bpelx:postAssert expression="boolean-expr" />

アサーション条件がfalseと評価されるたびに、指定のフォルトがスローされます。分析は、パートナWSDL portTypeに定義されているフォルトに正しく変換できるように、faultName QNameに対して実行されます。メッセージ式は、任意のXPath値のタイプ(string、numberまたはboolean)に評価できる一般的な式です。文字列でない値が返された場合は、値の文字列評価が使用されます。

12.14.1.3 複数のアサーション

receiveアクティビティ、invokeアクティビティ、またはpickアクティビティとscopeアクティビティのonMessageブランチでは、複数のアサーションをネストできます。アサーションの評価は、式がfalseと評価されるまでアサーションの宣言順に続行されます。例12-43に詳細を示します。

例12-43 BPEL 1.1における複数のアサーションのネスト

<invoke name="invokeCR" partnerLink="creditRatingService"
portType="services:CreditRatingService" operation="process"
inputVariable="crInput" outputVariable="crOutput">
<bpelx:postAssert name="negativeCredit" expression="$crOutput.payload/tns:rating >
0"
faultName="services:NegativeCredit" message="'Negative Credit'"
/>
<bpelx:postAssert name="insufficientCredit"
expression="$crOutput.payload/tns:rating > 600"
faultName="services:InsufficientCredit" message="'Insufficient
Credit'" />
</invoke>

例12-43では、レスポンスの信用格付けがゼロより大きいことを確認する式のアサーションが最初に評価されます。表12-5に、このアサーションの動作を示します。

表12-5 アサーションの動作

返されたレスポンスの信用格付け

動作

ゼロ未満

services:NegativeCreditフォルトがスローされます。

ゼロ以上

アサーションが正しいため、2番目のアサーションが評価されます。

600未満

services:InsufficientCreditフォルトがスローされます。

600以上

アサーションが正しいため、invokeアクティビティからフォルトはスローされません。

アサーションは、いくつでもネストできます。アクティビティからフォルトがスローされないためには、指定したすべてのアサーションがtrueと評価される必要があります。

このコンストラクトを使用して、Javaのif...else if...else文と同様に、着信ペイロードに対して様々なレベルの検証を適用できます。

検証ロジックに関係なく、フォルトが常にスローされるようにするには、false()のアサーション式を指定します。これは、Javaのelseコンストラクトと同じです。

12.14.1.4 組込みおよびカスタムのXPath関数と$variable参照の使用

アサーション条件には、組込みおよびカスタムのXPath関数と$variable参照も使用できます。例12-44に、いくつかの例を示します。

例12-44 BPEL 1.1における組込みおよびカスタムのXPath関数

<bpelx:postAssert expression="bpws:getVariableData( 'crOutput', 'payload',
'/tns:rating' ) > 0" ... />

<bpelx:postAssert expression="custom:validateRating()" ... />

<bpelx:postAssert xmlns:fn='http://www.w3.org/2005/xpath-functions'
expression="fn:false()" ... />

XPath式の評価でエラーがスローされると、そのエラーはBPELフォルトにラップされて、アクティビティからスローされます。

アサーションの評価の失敗に起因して、リクエスト/レスポンスinvokeアクティビティ、receiveアクティビティ、またはpickアクティビティやscopeアクティビティのonMessageブランチからスローされるフォルトは、BPELのフォルト管理フレームワークによって捕捉および処理されます。詳細は、第12.4項「フォルト管理フレームワークでのフォルトの処理」を参照してください。

BPELプロセス・フロー内で捕捉および処理されないフォルトは、操作に対するフォルトがコンポーネントWSDLで宣言されている場合は、BPELコンポーネントからスローされます。操作に対するフォルトが宣言されていない場合、フォルトはFabricInvocationException(実行時フォルト)に変換されます。このフォルトは、いずれかのコール元コンポーネント(BPELコンポーネントを含む)によって捕捉されますが、フォルトのタイプは、当初スローされたタイプではなくなります(ただし、フォルト・メッセージ文字列については、当初のフォルト・メッセージのトレースが保持されます)。

実行時フォルトの詳細は、第12.3項「BPELフォルトのビジネスおよび実行時のフォルト・カテゴリの概要」を参照してください。

フォルト・ポリシーの詳細は、第12.4項「フォルト管理フレームワークでのフォルトの処理」を参照してください。

12.14.1.5 インスタンス監査証跡に対するイベントのアサーション条件評価ロギング

評価される各アサーション条件によって、イベントがインスタンス監査証跡に記録されます。イベントは、アサーションが無事通過したか、失敗したのかを示します(失敗の場合は、フォルト名とメッセージが出力されます)。イベントには、アサーション要素に指定されているname属性も挿入されます。name属性の指定がない場合は、BPELプロセス・フローのアサーション要素の行番号が使用されます。監査イベントで出力されるアサーション条件は、アサーションを識別するのに便利で、フローをより円滑にデバッグできるようになります。

12.14.1.6 XMLスキーマ・ブール値タイプに評価されない式によるフォルトのスロー

アサーション条件XPath式がXMLスキーマ・ブール値タイプに評価されない場合は、アクティビティからbpelx:postAssertFailureフォルトがスローされます。エラーを示すインスタンス監査証跡のイベントも記録されます。例12-45に詳細を示します。

例12-45 BPEL 1.1におけるbpelx:postassertFailureフォルトのスロー

<bpelx:postAssert expression="bpws:getVariableData( 'crOutput', 'payload',
'/tns:rating' ) > 0" ... />

<bpelx:postAssert expression="custom:validateRating()" ... />

<bpelx:postAssert xmlns:fn='http://www.w3.org/2005/xpath-functions'
expression="fn:false()" ... />

アサーション式の分析は、BPELコンパイラによって実行され、式がXMLスキーマ・ブール・タイプに評価されない場合は、エラーが報告されます。カスタムXPath関数では、このタイプの分析は実行されません。

12.14.1.7 スタンドアロンassertアクティビティのアサーション条件

BPELプロセス・サービス・コンポーネントのスタンドアロンassertアクティビティで、アサーション条件を作成することもできます。アサーションは、falseと評価された場合に、アクティビティからBPELフォルトがスローされるXPath式を指定します。

bpelx:assert拡張要素は、スタンドアロンassertアクティビティでアサーションを実装します。

<bpelx:assert name="Assert1" expression="string" message="string"/>

スタンドアロンassertアクティビティの使用については、第12.14.2項「アサーション条件の作成方法」を参照してください。

12.14.2 アサーション条件の作成方法

次のアクティビティでアサーション条件を作成できます。

- invokeアクティビティ、receiveアクティビティ、replyアクティビティ、OnMessageブランチなどのメッセージ交換アクティビティ

- XPath式を指定するためのスタンドアロンassertアクティビティ

invokeアクティビティ、receiveアクティビティ、replyアクティビティおよびOnMessageブランチでアサート条件を作成する手順は、次のとおりです。

1. SOAコンポジット・エディタで、BPELプロセス・サービス・コンポーネントをダブルクリックします。

2. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

3. receiveアクティビティ、invokeアクティビティ、pickアクティビティまたはor scopeアクティビティをデザイナにドラッグします。

4. receiveアクティビティ、invokeアクティビティ、またはpickアクティビティまたはscopeアクティビティのonMessageブランチを開きます。

5. 「アサーション」タブをクリックします。

6. BPEL 1.1プロジェクトに対してアサーションを作成する場合は、次のタスクを実行します。それ以外の場合は、手順7に進みます。

1. 図12-30に示すように、「追加」アイコンをクリックします。

図12-30 BPEL 1.1における「アサーション」タブの「追加」アイコン

「図12-30 BPEL 1.1における「アサーション」タブの「追加」アイコン」の説明

2. 条件を実行するタイミングを選択します。表12-6に詳細を示します。

表12-6 条件実行のオプション

要素

説明

アサート前

選択すると、invokeアクティビティまたはreplyアクティビティがアウトバウンド・メッセージを送信する前に条件が実行されます。

アサート後

選択すると、invokeアクティビティ、receiveアクティビティまたはonMessageブランチがインバウンド・メッセージを受信した後に条件が実行されます。

選択内容に基づいて、「アサート前」または「アサート後」ダイアログが表示されます。

7. BPEL 2.0プロジェクトに対してアサーションを作成する場合は、次のタスクを実行します。

1. 条件を実行するタイミングを選択します。表12-7に詳細を示します。

表12-7 アサーション条件のタブ

作成対象

選択対象

アサート前条件

「アサート前」タブ

アサート後条件

「アサート後」タブ

2. 図12-31に示すように、「追加」アイコンをクリックします。

図12-31 BPEL 2.0における「アサーション」タブの「追加」アイコン

「図12-31 BPEL 2.0における「アサーション」タブの「追加」アイコン」の説明

「Assert」ダイアログが表示されます。

8. 図12-32に示すように、アサーション条件に値を指定します。この例では、BPEL 1.1プロジェクトのreceiveアクティビティのアサーション条件に「アサート後」が選択されています。

1. 「検索」アイコンをクリックして「フォルト・チューザ」ダイアログから既存のフォルトを選択し、スローする「フォルトQName」を選択します。フォルトの「ネームスペースURI」および「ローカル・パート」フィールドに、独自の値を指定することもできます。「フォルトQName」の指定を省略した場合は、bpelx:assertFailureフォルトがスローされます。

図12-32 アサーション条件の値

「図12-32 アサーション条件の値」の説明

9. 完了後に「OK」をクリックして、アクティビティの「アサーション」タブに戻ります。図12-33に示すように、完成したアサーション条件が表示されます。

図12-33 「アサーション」タブとそのデータ

「図12-33 「アサーション」タブとそのデータ」の説明

10. 「適用」→「OK」の順にクリックします。

スタンドアロンassertアクティビティのアサート条件を作成する手順は、次のとおりです。

1. SOAコンポジット・エディタで、BPELプロセス・サービス・コンポーネントをダブルクリックします。

2. 「コンポーネント・パレット」で、「Oracle Extensions」を展開します。

3. 図12-34に示すように、assertアクティビティをデザイナにドラッグします。

図12-34 「コンポーネント・パレット」のassertアクティビティ

「図12-34 「コンポーネント・パレット」のassertアクティビティ」の説明

4. assert アクティビティを開きます。

5. 「式」フィールドの右側にある「XPath式ビルダー」アイコンをクリックします。

6. 式を作成します。

7. 完了後に、「OK」をクリックします。
「アサート」ダイアログは図12-35のようになります。

図12-35 「アサート」ダイアログ

「図12-35 「アサート」ダイアログ」の説明

8. 「適用」→「OK」の順にクリックします。

12.14.3 アサーションを無効にする方法

アサーションは、次のいずれかの方法で無効にできます。

- Oracle Enterprise Manager Fusion Middleware ControlのシステムMBeanブラウザで、プロパティDisableAssertsをtrueに設定する方法。

- 例12-46に示すように、SOAコンポジット・アプリケーションのcomposite.xmlファイルで、bpel.config.disableAssertsをtrueに設定する方法。

例12-46 アサーションの無効化

<component name="AsyncBPELClient">
<implementation.bpel src="AsyncBPELClient.bpel"/>
<property name="bpel.config.disableAsserts">true</property>
</component>

システムMBeanブラウザのプロパティの設定の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

12.14.4 アサーション条件作成時の処理内容

.bpelファイルのコード・セグメントは、特定の操作に対する設計完了後の定義を示しています。

例12-47では、invokeアクティビティのbpelx:assert条件がfalseと評価された場合(たとえば、0の信用格付けが発行された場合)は、Negative Creditメッセージが返されます。条件がtrueと評価された場合は、invokeアクティビティからフォルトはスローされず、BPELプロセス・フローの残りのアクティビティが通常どおりに実行されます。

例12-47 BPEL 1.1におけるinvokeアクティビティのアサーション条件

<invoke name="callbackClient" partnerLink="internalwarehouseservice_client"
portType="client:InternalWarehouseServiceCallback" operation="processResponse"
inputVariable="outputVariable">
<bpelx:assert name="negativeCredit"
expression="$crOutput.payload/tns:rating > 0"
message="Negative Credit"/>
</invoke>

例12-48では、スタンドアロンassertアクティビティのbpelx:assert条件がfalseと評価された場合は、次のメッセージが返されます。

got assertion failure on true expression

条件がtrueと評価された場合は、assertアクティビティからフォルトはスローされず、BPELプロセス・フローの残りのアクティビティが通常どおりに実行されます。

例12-48 BPEL 1.1におけるスタンドアロンassertアクティビティのアサーション条件

<bpelx:assert expression="true()bpws:getLinkStatus()" message="'got assertion
failure on true expression'"

13 BPELプロセスでのトランザクションおよびフォルト伝播のセマンティクス

この章では、Oracle BPEL Process Managerでのトランザクションおよびフォルト伝播のセマンティクスについて説明します。ここでは、コールを開始するBPELインスタンスのトランザクション動作の構成および一方向の起動の実行方法について説明します。

この章には次の項が含まれます:

- 第13.1項「トランザクション・セマンティクスの概要」

- 第13.2項「一方向起動の実行の概要」

13.1 トランザクション・セマンティクスの概要

リリース11gのトランザクション・セマンティクスでは、コンポーネントの実行に使用される基礎となるJava Transaction API(JTA)インフラストラクチャを使用できます。この項では、BPEL Process Managerのトランザクション・セマンティクスについて説明します。

13.1.1 Oracle BPEL Process Managerのトランザクション・セマンティクス

以前のリリースと同様に、Oracle BPEL Process Managerでは、デフォルトの場合、リクエストに基づいて新規のトランザクションが作成されます。つまり、トランザクションが存在する場合は、そのトランザクションが一時停止され、新規のトランザクションが作成されます。子(新規)トランザクションが完了すると、マスター(一時停止された)トランザクションが再開します。

ただし、リクエストが非同期(一方向)の場合、トランザクションには次のいずれかの処理が適用されます。

- デハイドレーション・ストア(dlv_message表)に挿入するために継承されます。

- トランザクションに透過的に登録されます(トランザクションがある場合)。

メッセージの損失はありません。起動メッセージは、処理のためにデハイドレーション・ストアに挿入されるか、フォルトを介して顧客に通知されます。

リリース10.1.3.xでは、消費側プロセス(つまり、パートナ・リンク)と提供側プロセスに、複数のプロパティを設定していました。これらのプロパティを使用することで、実行を単一のグローバル・トランザクションにチェーンできました。消費側では、bpel.xmlファイルのパートナ・リンク・バインディングにtransaction=participateを設定しました。提供側では、bpel.xmlの<configurations>セクションにtransaction=participateを設定しました。

リリース11gでは、コールされるBPELコンポーネント(コール先プロセス)にのみtransactionという新しいプロパティを設定する必要があります。次のようにbpel.config.transactionを追加します。

- 新規BPELプロセスのための「BPELプロセスの作成」ダイアログ内。

- 既存のBPELプロセスのcomposite.xmlファイル内のBPELプロセス・サービス・コンポーネント・セクション内(bpel.config.の必須接頭辞に注意)。

このプロパティは、コールを開始するBPELインスタンスのトランザクション動作を構成します。

例13-1に詳細を示します。

例13-1 新規トランザクションの設定

<component name="InternalWarehouseService">
<implementation.bpel src="InternalWarehouseService.bpel"/>
<property name="bpel.config.transaction"
many="false" type="xs:string">required | requiresNew</property>
</component>

使用可能な値は、requiredとrequiresNewの2つです。表13-1は、これらの値とその設定に基づいたBPELインスタンスの動作の要約を示しています。

表13-1 bpel.config.transactionプロパティの動作

対象

bpel.config.transactionがrequiredに設定されている場合

bpel.config.transactionがrequiresNewに設定されている場合

リクエスト/レスポンス(開始)起動

トランザクションがある場合はコール元トランザクションが結合され、トランザクションがない場合は新規トランザクションが作成されます。

常に新規トランザクションが作成され、既存のトランザクションがある場合はそのトランザクションが一時停止されます。

bpel.config.oneWayDeliveryPolicyがsyncに設定されている一方向開始起動

起動されたメッセージは、同じトランザクションの同一スレッドを使用して処理されます。

常に新規トランザクションが作成され、既存のトランザクションがある場合はそのトランザクションが一時停止されます。

注意:

bpel.config.transactionプロパティは、中間プロセスのreceiveアクティビティには適用されません。この場合は、別のトランザクションの別のスレッドを使用してメッセージが処理されます。これは、相関が必要で常に非同期で処理されるためです。

bpel.config.transactionプロパティの設定方法の詳細は、第4.1.1項「BPELプロセス・サービス・コンポーネントの追加方法」およびC.1.1項「プロパティ・インスペクタでデプロイメント・ディスクリプタのプロパティを定義する方法」を参照してください。

次の各項では、bpel.config.transactionをrequiredまたはrequiresNewに設定した場合のトランザクションおよびフォルト動作について説明します。

13.1.1.1 bpel.config.transactionがrequiresNewに設定されているBPELCalleeプロセスがBPELCallerプロセスによってコールされる

表13-2では、BPELCallerプロセスがBPELCalleeプロセスをコールします。BPELCalleeプロセスでは、bpel.config.transactionプロパティがrequiresNewに設定されています。表13-2は、bpel.config.transactionがこの値に設定されている場合のフォルト伝播とトランザクション動作を示しています。

表13-2 bpel.config.transactionがrequiresNewに設定されているBPELCalleeへのBPELCallerによるコール

BPELCalleeの状態

BPELCalleeトランザクションの処理

BPELCallerの動作

フォルトでリプライ(<reply>を使用)した場合

保存されます。

フォルトを取得して捕捉します。

処理されないフォルトをスロー(<throw>を使用)した場合

ロールバックされます。

フォルトを取得して捕捉します。

フォルト(FaultOne)でリプライ後、フォルト(FaultTwo)をスローした場合

ロールバックされます。

FaultTwoを取得します。

bpelx:rollbackフォルトをスロー(<throw>を使用)した場合

ロールバックされます。

リモート・フォルトを取得します。

13.1.1.2 bpel.config.transactionがrequiredに設定されているBPELCalleeプロセスがBPELCallerプロセスによってコールされる

表13-3では、BPELCallerプロセスがBPELCalleeプロセスをコールします。BPELCalleeプロセスでは、bpel.config.transactionプロパティがrequiredに設定されています。表13-3は、bpel.config.transactionがこの値に設定されている場合のフォルト伝播とトランザクション動作を示しています。

表13-3 bpel.config.transactionがrequiredに設定されているBPELCalleeへのBPELCallerによるコール

BPELCalleeの状態

BPELCallerの動作

フォルトでリプライ(<reply>を使用)した場合

フォルトを取得して捕捉します。BPELCallerがトランザクションを所有します。したがって、トランザクションを捕捉した場合、トランザクションはコミットされます。BPELCallerが処理しない場合は、グローバル・ロールバックが発生します。

フォルトをスロー(<throw>を使用)した場合

フォルトを取得して捕捉します。

フォルト(FaultOne)でリプライ後、フォルト(FaultTwo)をスローした場合

FaultTwoを取得します。

bpelx:rollbackフォルトをスロー(<throw>を使用)した場合

そのトランザクション・ロールバックを取得します。そのロールバックを捕捉する方法はありません。このフォルトは処理されません。

たとえば、2つの同期プロセス(BPELMasterとBPELChild)を作成し、同じレコードを挿入する際にそれぞれが同じデータベース・アダプタ参照を使用するとします(したがって、権限キー(PK)違反が発生します)。双方にxADatasourceNameが設定されます。

bpel.config.transaction設定がないと、発生したフォルトは処理されず、BPELChildはロールバックされます。BPELMasterにcatchブロックがある場合、そのトランザクションはコミットされます。したがって、データベースのBPELMasterからのレコードで終了します。

BPELMasterでのフォルトも捕捉しなかった場合は、(2つの異なるトランザクションで)第2のロールバックを取得します。

同じテスト・ケースで、bpel.config.transactionがrequiredに設定され、フォルト・ハンドラが適切でない場合は、BPELMasterの未処理のフォルトに基づいてトランザクション全体がロールバックされます。

BPELChildからフォルトを捕捉してロールバック・フォルトをスローするように、BPELMasterにフォルト・ハンドラを追加すると、トランザクションはグローバルにロールバックされます。

この機能を使用して、トランザクション境界を管理し、エンドツーエンド・トランザクション・フローをモデル化できます(ソースおよびターゲットがトランザクションの場合)。

13.2 一方向起動の実行の概要

例13-2に示すように、一方向起動(および可能性のあるコールバック)は、一般的にWSDLファイルで公開されます。

例13-2 WSDLファイルの公開

<wsdl:operation name="process">
<wsdl:input message="client:OrderProcessorRequestMessage"/>
</wsdl:operation>

これにより、BPELプロセス・サービス・エンジンでは実行が2つの部分に分割されます。

- 第1の部分(常にコール元トランザクション内)では、デハイドレーション・ストアのdlv_message表への挿入が行われます(リリース10.1.3.xでは、inv_message表に挿入されていました)。

- 第2の部分では、トランザクションおよび新規スレッドで作業アイテムが実行され、新規インスタンスが作成されます。

スレッドが使用可能な場合はサービス・エンジンのスレッド・プール(インボーカ・スレッド)で実行されるため、スケーラビリティの点で様々なメリットがあります。一方で、即時に実行される保証がないというデメリットがあります。

一方向の操作に基づく同期タイプのコールが必要な場合は、onewayDeliveryPolicyプロパティを使用できます。これは、リリース10.1.3.xのdeliveryPersistPolicyプロパティと同じです。

bpel.config.oneWayDeliveryPolicyを次のように指定します。

- 新規BPELプロセスのための「BPELプロセスの作成」ダイアログ内。

- 既存のBPELプロセスのcomposite.xmlファイルのBPELプロセス・サービス・コンポーネント・セクション内。

この値がcomposite.xmlに設定されていない場合は、Oracle Enterprise Manager Fusion Middleware ControlのシステムMBeanブラウザのoneWayDeliveryPolicyの値が使用されます。使用可能な値は、次のとおりです。

- async.persist: メッセージはデータベースに保存されます。この設定の場合、信頼性は確保されますが、データベースのパフォーマンスに多少の影響が出ます。システムの全体的なパフォーマンスに影響が出ることもあります。

- async.cache: 受信した配信メッセージはメモリー内キャッシュにのみ保存されます。信頼性よりパフォーマンスを優先する場合は、この設定を検討してください。async.cacheに設定すると、一方向メッセージの到着頻度が配信の頻度よりかなり高い場合や、サーバー障害が発生した場合には、メッセージが失われる可能性があります。また、システムが過負荷の状態になり(メッセージがスケジュール済キューにたまり)、メモリー不足エラーが発生することもあります。各自のユースケース・シナリオを検討し、この設定が適切かどうかを判断してください。
高可用性環境でoneWayDeliveryPolicyをasync.cacheに設定すると、サーバー・クラッシュ発生時に実行途中の起動メッセージおよびコールバック・メッセージが失われたり、重複したりすることがあります。async.cacheに対しては、サーバーのフェイルオーバーはサポートされていません。詳細は、『Oracle Fusion Middleware高可用性ガイド』を参照してください。

- sync: 同じスレッドで直接起動が発生します。呼出しキューのメッセージのスケジューリングはバイパスされ、BPELインスタンスが同期的に呼び出されます。この設定は、データベースのパフォーマンスに影響を与えることがあります。

bpel.config.oneWayDeliveryPolicyプロパティの設定方法の詳細は、第4.1.1項「BPELプロセス・サービス・コンポーネントの追加方法」およびC.1.1項「プロパティ・インスペクタでデプロイメント・ディスクリプタのプロパティを定義する方法」を参照してください。

表13-4は、メイン・プロセスがサブプロセスを非同期でコールする場合の動作を示しています。表13-4は、第13.1.1.1項「bpel.config.transactionがrequiresNewに設定されているBPELCalleeプロセスがBPELCallerプロセスによってコールされる」および第13.1.1.2項「bpel.config.transactionがrequiredに設定されているBPELCalleeプロセスがBPELCallerプロセスによってコールされる」に記載されているユースケースに基づいています。

表13-4 メイン・プロセスによる非同期でのサブプロセスのコール

条件

サブプロセスがフォルトをスローした場合

サブプロセスがbpelx:rollbackをスローした場合

onewayDeliveryPolicy=async.persist

(BPELCalleeプロセスが別のスレッド/別のトランザクションで実行)

メッセージは配信サービスに保存されるため、BPELCallerはレスポンスを取得しません。フォルトが処理されない場合は、BPELCalleeトランザクションがロールバックされます。

メッセージは配信サービスに保存されるため、BPELCallerはレスポンスを取得しません。フォルトが処理されない場合は、BPELCalleeインスタンスがロールバックされます。

onewayDeliveryPolicy=sync

および

transaction=requiresNew

(BPELCalleeが同じスレッド/別のトランザクションで実行)

BPELCallerはFabricInvocationExceptionを受信します。フォルトが処理されない場合は、BPELCalleeトランザクションがロールバックされます。

BPELCallerはFabricInvocationExceptionを受信します。BPELCalleeトランザクションがロールバックされます。

onewayDeliveryPolicy=sync

および

transaction=required

(BPELCalleeが同じスレッド/同じトランザクションで実行)

BPELCalleeがフォルト状態になります。BPELCallerはFabricInvocationExceptionを受信します。BPELCallerにはフォルトを処理する機会があります。

トランザクション全体がロールバックされます。

14 BPELプロセスへのJavaおよびJava EEコードの組込み

この章では、JavaコードのセクションをSOAコンポジット・アプリケーションのBPELプロセス・サービス・コンポーネントに組み込む方法について説明します。ここでは、カスタム・クラスとJARファイルの追加方法、Java Embeddingアクティビティの使用方法、bpelx:execを使用したサービス・データ・オブジェクト(SDO)の埋込み方法、およびBPELプロセスと共有されるカスタム接続マネージャ・クラスの実装方法について説明します。

この章には次の項が含まれます:

- 第14.1項「BPELプロセスのJavaおよびJava EEコードの概要」

- 第14.2項「BPELプロセスへのJavaおよびJava EEコードの組込み」

- 第14.3項「カスタム・クラスおよびJARファイルの追加」

- 第14.4項「Oracle JDeveloperのBPELプロセスでのJava埋込みの使用」

- 第14.5項「bpelx:execによるサービス・データ・オブジェクトの埋込み」

- 第14.6項「Oracle BPEL Process Managerとのクラスのカスタム実装の共有」

14.1 BPELプロセスのJavaおよびJava EEコードの概要

この項では、JavaコードのセクションをBPELプロセスに組み込む方法について説明します。この方法は、必要な関数を実行できるEnterprise JavaBeansのコードが存在していて、BPELで最初から始めずにその既存のコードを使用する場合に特に役立ちます。

14.2 BPELプロセスへのJavaおよびJava EEコードの組込み

JavaおよびJava EEコードをBPELプロセスに組み込む方法は数種類あります。

- Simple Object Access Protocol(SOAP)サービスとしてラップする方法

- bpelx:execタグを使用してBPELプロセスにJavaコード・スニペットを埋め込む方法

- XML Facadeを使用してDOM操作を単純化する方法

- bpelx:exec組込みメソッドを使用する方法

- サービス・インタフェースにラップされたJavaコードを使用する方法

14.2.1 JavaコードをSOAPサービスとしてラップする方法

Javaコードは、SOAPサービスとしてラップできます。この方法では、JavaアプリケーションにBPEL互換のインタフェースが必要です。SOAPサービスとしてラップされたJavaアプリケーションは、他のWebサービスと同じように表示され、多様なアプリケーションで使用できます。また、SOAPラッパーの記述に使用できるツールもあります。

14.2.2 SOAPサービスとしてのJavaコードのラップに関する注意事項

SOAPサービスとしてラップされたJavaアプリケーションには、次の短所があります。

- JavaとSOAP間での変換の性質により、パフォーマンスが低下する場合があります。

- SOAPはトランザクションを本質的にはサポートしていないため、この方法ではアトミック・トランザクション性が失われます。つまり、複数の操作を、すべて実行するか、まったく実行しないという機能(ある銀行口座で借方記入し、別の口座で貸方記入するなど、両方のトランザクションを完了するか、どちらも完了しないかのどちらかなど)がありません。

14.2.3 bpelx:execタグを使用してBPELプロセスにJavaコード・スニペットを埋め込む方法

Javaコード・スニペットは、Java BPEL exec拡張要素bpelx:execを使用してBPELプロセスに直接埋め込むことができます。この方法の利点は、パフォーマンスに優れていることとトランザクション性が維持されることです。小さいコード・セグメントのみを組み込むことをお薦めします。BPELは、ビジネス・ロジックを実装から切り離します。プロセスの多数のJavaコードを削除すると、この切離しを維持できなくなります。Java埋込みは、ビジネス・コードではなく、短いユーティリティ系の操作を対象としています。ビジネス・ロジックは別の場所に配置し、配置したロジックをBPELからコールします。

サーバーは、bpelx:execアクティビティ内のJavaコード・スニペットをそのJava Transaction API(JTA)トランザクション・コンテキスト内で実行します。このBPELタグbpelx:execは、Java例外をBPELフォルトに変換し、BPELプロセスに追加します。Javaスニペットは、コールするセッションBeanとエンティティBeanに、そのJTAトランザクションを伝播できます。

たとえば、SessionBeanSample.bpelファイルは、例14-1に示すbpelx:execタグを使用して、invokeSessionBean Java Beanを埋め込みます。

Example 14-1 bpelx:exec拡張要素

<bpelx:exec name="invokeSessionBean" language="java" version="1.5">
<![CDATA[
try {
Object homeObj = lookup("ejb/session/CreditRating");
Class cls = Class.forName(
"com.otn.samples.sessionbean.CreditRatingServiceHome");
CreditRatingServiceHome ratingHome = (CreditRatingServiceHome)
PortableRemoteObject.narrow(homeObj,cls);
if (ratingHome == null) {
addAuditTrailEntry("Failed to lookup 'ejb.session.CreditRating'"
+ ". Ensure that the bean has been"
+ " successfully deployed");
return;
}
CreditRatingService ratingService = ratingHome.create();

// Retrieve ssn from scope
Element ssn =
(Element)getVariableData("input","payload","/ssn");

int rating = ratingService.getRating( ssn.getNodeValue() );
addAuditTrailEntry("Rating is: " + rating);

setVariableData("output", "payload",
"/tns:rating", new Integer(rating));
} catch (NamingException ne) {
addAuditTrailEntry(ne);
} catch (ClassNotFoundException cnfe) {
addAuditTrailEntry(cnfe);
} catch (CreateException ce) {
addAuditTrailEntry(ce);
} catch (RemoteException re) {
addAuditTrailEntry(re);
}
]]>
</bpelx:exec>

14.2.4 BPEL 2.0プロセスにJavaコード・スニペットを埋め込む方法

この章の例では主に、bpelx:exec拡張要素を使用してJavaコード・スニペットを埋め込む方法に重点を置いています。BPEL仕様のバージョン2.0をサポートするBPELプロジェクトの場合、構文が多少異なります。bpelx:exec拡張要素とJavaコードは<extensionActivity>要素にラップされます。例14-2に詳細を示します。

例14-2 BPEL 2.0のbpelx:exec拡張要素

<extensionActivity>
<bpelx:exec language="java">
<![CDATA[
java code
]]>
</bpelx:exec>
</extensionActivity>

Java EmbeddingアクティビティをOracle BPELデザイナのBPELプロセスにドラッグすると、<extensionActivity>要素とbpelx:execタグが自動的に追加されます。

例14-3に、BPEL 2.0のimport構文を示します。

例14-3 BPEL 2.0のimport構文

<import location="class/package name"
importType="http://schemas.oracle.com/bpel/extension/java"/>

注意:

BPEL 2.0のimport構文は、次の構文を使用するBPEL 1.1の場合とは異なります。

<bpelx:exec import="class/package name"

例14-4に、BPELバージョン2.0をサポートするプロジェクトの2つのJava Embeddingアクティビティを含むBPELファイルを示します。

例14-4 バージョン2.0のBPELファイルのJava Embeddingアクティビティ

<process name="Test" targetNamespace="http://samples.otn.com/bpel2.0/ch10.9"
. . .
. . .
<import location="oracle.xml.parser.v2.XMLElement"
importType="http://schemas.oracle.com/bpel/extension/java"/>
. . .
<sequence>
. . .
<extensionActivity>
<bpelx:exec language="java">
XMLElement elem = (XMLElement) getVariableData("output", "payload");
elem.setTextContent("set by java exec");
</bpelx:exec>
</extensionActivity>

<extensionActivity>
<bpelx:exec language="java">
<![CDATA[XMLElement elem = (XMLElement) getVariableData("output",
"payload");
String t = elem.getTextContent();
elem.setTextContent(t + ", set by java exec 2");]]>
</bpelx:exec>
</extensionActivity>
. . .
</sequence>
</process>

このアクティビティの使用方法の詳細は、第14.4項「Oracle JDeveloperのBPELプロセスでのJava Embeddingの使用」を参照してください。

14.2.5 XML Facadeを使用してDOM操作を単純化する方法

DOM操作は、XML Facadeを使用して単純化できます。Oracle BPEL Process Managerには、XMLの他に、Java Architecture for XML Binding(JAXB)に類似した軽量のJavaオブジェクト・モデル(Facadeと呼ばれます)が用意されています。XML Facadeは、スキーマを備えたXML文書またはXML要素に対して、Java Beanのようなフロント・エンドを提供します。Facadeクラスを使用すると、Javaプログラム内でXML文書またはXML要素を簡単に操作できます。

XML Facadeを追加するには、.bpelファイルのbpelx:exec文内でcreateFacadeメソッドを使用します。図14-5に例を示します。

例14-5 createFacadeメソッドを使用したXML Facadeの追加

<bpelx:exec name= ...
<![CDATA
...
Element element = ...
(Element)getVariableData("input","payload","/loanApplication/"):
//Create an XMLFacade for the Loan Application Document
LoanApplication xmlLoanApp=
LoanApplicationFactory.createFacade(element);
...

14.2.6 bpelx:exec組込みメソッドを使用する方法

表14-1に、スコープ変数、インスタンス・メタデータおよび監査証跡の読取りと更新に使用できる一連のbpelx:exec組込みメソッドを示します。

表14-1 bpelx:exec用の組込みメソッド

" title="bpelx:exec用の組込みメソッド" width="100%">

メソッド名

説明

Object lookup( String name )

JNDIアクセス

long getInstanceId( )

各インスタンスに関連付けられている一意のID

String setTitle( String title ) / String getTitle()

このインスタンスのタイトル

String setStatus( String status ) / String getStatus()

このインスタンスのステータス

void setCompositeInstanceTitle(String title)

コンポジット・インスタンス・タイトルの設定

void setIndex( int i, String value ) / String getIndex( int i )

検索には6つの索引を使用可能

void setCreator( String creator ) / String getCreator()

このインスタンスの開始ユーザー

void setCustomKey( String customKey ) / String getCustomKey()

2番目の主キー

void setMetadata( String metadata ) / String getMetadata ()

リストを生成するためのメタデータ

String getPreference( String key )

アクセス・プリファレンス

void addAuditTrailEntry(String message, Object detail)

監査証跡へのエントリの追加

void addAuditTrailEntry(Throwable t)

スーツケースに格納されたファイルへのアクセス

Object getVariableData(String name) throws BPELFault

スコープ内に格納された変数へのアクセスおよび更新

Object getVariableData(String name, String partOrQuery) throws BPELFault

変数のアクセスおよび更新

Object getVariableData(String name, String part, String query)

変数のアクセスおよび更新

void setVariableData(String name, Object value)

変数データの設定

void setVariableData(String name, String part, Object value)

変数データの設定

void setVariableData(String name, String part, String query, Object value)

変数データの設定

14.2.7 サービス・インタフェースにラップされたJavaコードを使用する方法

すべてのアプリケーションがサービス・インタフェースを公開するわけではありません。ビジネス・プロセスでカスタムJavaコードが必要なシナリオもあります。このシナリオの場合は、次の操作を実行できます。

- カスタムJavaコードを記述します。

- コードを埋め込むサービス・インタフェースを作成します。

- SOAP経由で、JavaコードをWebサービスとして起動します。

たとえば、SOAP参照バインディング・コンポーネントでサービス・インタフェースを起動するSOAコンポジット・アプリケーションに、BPELプロセス・サービス・コンポーネントを作成すると仮定します。この例の場合、使用されるサービス・インタフェースは、Oracle Application Development Framework(ADF)Business Componentです。

このシナリオの高レベルな手順を次に示します。

サービス・インタフェースにラップされたJavaコードを使用する手順は、次のとおりです。

1. Oracle JDeveloperでOracle ADF Business Componentサービスを作成します。
この操作により、このサービスに対するWSDLファイルとXSDファイルが生成されます。

2. BPELプロセス・サービス・コンポーネントを含むSOAアプリケーションを作成します。そのBPELプロセス・サービス・コンポーネントはコンポジット・サービスとして公開されている必要があります。これにより、BPELプロセスがインバウンドSOAPサービス・バインディング・コンポーネントに自動的に接続されます。

3. Oracle ADF Business ComponentサービスWSDLをSOAコンポジット・アプリケーションにインポートします。

4. Oracle ADF Business Componentサービス・インタフェースにバインディングするWebサービスを作成します。

5. 次のタスクを実行するBPELプロセスを設計します。

1. Oracle ADF Business ComponentサービスportTypeのパートナ・リンクを作成します。

2. assignアクティビティを作成します。この例では、この手順により、データ(たとえば静的なXMLフラグメント)がOracle ADF Business Componentサービスに渡される変数にコピーされます。

3. invokeアクティビティを作成し、ステップ5aで作成したパートナ・リンクに接続します。

6. パートナ・リンク参照をコンポジット参照バインディング・コンポーネントに接続(ワイヤ)します。この参照は、Webサービス・バインディングを使用して、Oracle ADF Business Componentサービスをリモートでデプロイできるようにします。

7. SOAアプリケーションをデプロイします。

8. Oracle Enterprise Manager Fusion Middleware Controlの「Webサービスのテスト」ページから、このSOAアプリケーションを起動します。

Oracle ADF Business Componentsの作成方法の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。

SOAコンポジット・アプリケーションの起動の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

14.3 カスタム・クラスおよびJARファイルの追加

SOAコンポジット・アプリケーションには、カスタム・クラスおよびJARファイルを追加できます。拡張クラスおよびJARをSOAコンポジット・アプリケーションに追加するためのSOA拡張ライブラリは、$ORACLE_HOME/soa/modules/oracle.soa.ext_11.1.1ディレクトリにあります。Oracle JDeveloperでは、カスタム・クラスおよびJARはapplication_name/project/sca-inf/libディレクトリに追加されます。

14.3.1 カスタム・クラスおよびJARファイルの追加方法

bpelx:execにクラスが使用されている場合は、Oracle Enterprise Manager Fusion Middleware ControlのシステムMBeanブラウザで、BpelcClasspathプロパティを使用してJARも追加する必要があります。

JARをBpelcClasspathに追加する手順は、次のとおりです。

1. 「SOAインフラストラクチャ」メニューから、「SOA管理」→「BPELプロパティ」の順に選択します。

2. 「BPELサービス・エンジン・プロパティ」ページの下部で、「詳細BPEL構成プロパティ」をクリックします。

3. BpelcClasspathをクリックします。

4. 「値」フィールドに、クラスパスを指定します。

5. 「適用」をクリックします。

6. 「戻る」をクリックします。

また、JARはSOAコンポジット・アプリケーションによってロードされていることも必要です。

カスタム・クラスを追加する手順は、次のとおりです。

1. classesディレクトリにクラスをコピーします。

2. Oracle WebLogic Serverを再起動します。

カスタムJARを追加する手順は、次のとおりです。

1. このディレクトリまたはそのサブディレクトリにJARファイルをコピーします。

2. antを実行します。

3. Oracle WebLogic Serverを再起動します。

14.4 Oracle JDeveloperのBPELプロセスでのJava Embeddingの使用

Oracle JDeveloperでは、bpelx:execアクティビティを追加して、コード・スニペットをダイアログにコピーできます。

注意:

カスタム・クラスの場合は、Oracle Enterprise Manager Fusion Middleware ControlのシステムMBeanブラウザで、BpelcClasspathプロパティに、埋込みJavaコードに必要なJARファイルを指定する必要があります。手順は、第14.3.1項「カスタム・クラスおよびJARファイルの追加方法」を参照してください。これにより、JARファイルがBPELローダーのクラスパスに追加されます。複数のJARファイルを設定する場合は、UNIXではコロン(:)、Windowsではセミコロン(;)を使用して区切る必要があります。

14.4.1 Oracle JDeveloperのBPELプロセスでのJava埋込みの使用方法

Oracle JDeveloperのBPELプロセスでJava埋込みを使用する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「Oracle Extensions」を展開します。

2. Java Embeddingアクティビティをデザイナにドラッグします。

3. Java Embeddingアクティビティをダブルクリックして「Java Embedding」ダイアログを表示します。

4. 「名前」フィールドに、名前を入力します。

5. 「コード・スニペット」フィールドにJavaコードを入力します(または切り取って貼り付けます)。図14-1に詳細を示します。

図14-1 bpel:execコード例

「図14-1 bpel:execコード例」の説明

注意:

Java EmbeddingアクティビティにJavaコードを記述するかわりに、Javaコードを配置したJARファイルをクラスパスに設定し、Java Embeddingアクティビティ内からメソッドをコールすることもできます。

14.4.2 Java Embeddingアクティビティでのthread.sleep()の使用に関する注意事項

Java Embeddingアクティビティでthread.sleep()を使用するBPELプロセスを作成してデプロイすると、実行スレッドがブロックされ、そのスレッドに関連付けられているトランザクションをコミットできません。その結果、待機の終了後にのみBPELインスタンスが表示されますが、これは想定されている動作です。

かわりに、waitアクティビティを使用します。このアクティビティを使用すると、入力時にリソースが解放され、進行中のトランザクションのコミットと、データ・ストアへのBPELインスタンス・データのハイドレーションが可能になります。

14.5 bpelx:execによるサービス・データ・オブジェクトの埋込み

SDOコードは、bpelx:execタグを使用して.bpelファイルに埋め込むことができます。例14-6の構文では、mytest.apps.SDOHelperがSDOを変更するJavaクラスです。

例14-6 bpelx:execタグを使用したSDOオブジェクトの埋込み

</bpelx:exec>
<bpelx:exec name="ModifyInternalSDO" version="1.5" language="java">
<![CDATA[try{
Object o = getVariableData("VarSDO");
Object out = getVariableData("ExtSDO");
System.out.println("BPEL:Modify VarSDO... " + o + " ExtSDO: " + out);
mytest.apps.SDOHelper.print(o);
mytest.apps.SDOHelper.print(out);
mytest.apps.SDOHelper.modifySDO(o);
System.out.println("BPEL:After Modify VarSDO... " + o + " ExtSDO: " + out);
mytest.apps.SDOHelper.print(o);
mytest.apps.SDOHelper.print(out);
}catch(Exception e)
{
e.printStackTrace();
}]]>
</bpelx:exec>

例14-7に、BPELファイルに埋め込まれているmodifySDO(o)およびprint(o)というJavaクラスの例を示します。

例14-7 Javaクラス

public static  void modifySDO(Object o){
if(o instanceof commonj.sdo.DataObject)
{
((DataObject)o).getChangeSummary().beginLogging();
SDOType type = (SDOType)((DataObject)o).getType();
HelperContext hCtx = type.getHelperContext();
List<DataObject>  lines =
(List<DataObject>)((DataObject)o).get("line");
for (DataObject  line: lines) {
line.set("eligibilityStatus", "Y");
}
} else {
System.out.println("SDOHelper.modifySDO(): " + o + " is not a
DataObject!");
}
}
. . .
. . .
public static  void print(Object o)    {
try{
if(o instanceof commonj.sdo.DataObject)
{
DataObject sdo = (commonj.sdo.DataObject)o;
SDOType type = (SDOType) sdo.getType();
HelperContext hCtx = type.getHelperContext();
System.out.println(hCtx.getXMLHelper().save(sdo, type.getURI(),
type.getName()));
} else {
System.out.println("SDOHelper.print(): Not a sdo " + o);
}
}catch(Exception e)
{
e.printStackTrace();
}          }

14.6 Oracle BPEL Process Managerとのクラスのカスタム実装の共有

Oracle BPEL Process Managerで使用されるクラスと同じ名前を持つカスタム接続マネージャ・クラスを実装する場合、カスタム・クラスがOracle BPEL Process Managerで使用されるクラスを上書きしないことを確認する必要があります。

たとえば、次のことを想定します。

- BPELプロジェクトで埋込みJavaを使用しています。

- 接続マネージャ・カスタム・クラスは、BPEL接続マネージャ・クラスを上書きしています。

- 実行時にjava.lang.NoClassDefFoundErrorが発生しています。

14.6.1 BPEL接続マネージャ・クラスが優先されるように構成する方法

BPEL接続マネージャ・クラスが優先されるように構成する手順は、次のとおりです。

1. Oracle JDeveloperを起動します。

2. BPELプロジェクトを強調表示します。

3. 「編集」メイン・メニューの「プロパティ」を選択します。

4. 「ライブラリとクラスパス」を選択します。

5. 「JAR/ディレクトリの追加」をクリックします。

6. カスタムJARファイルのある場所まで移動し、「選択」をクリックします。
クラスパスにカスタム接続マネージャのJARファイルが追加されます。

7. 「OK」をクリックします。

8. BPELプロジェクトを再デプロイして再テストします。

15 BPELプロセスでのイベントおよびタイムアウトの使用

この章では、イベントおよびタイムアウトの使用方法について説明します。ここでは、プロセスの続行または待機を選択するpickアクティビティの作成、receiveアクティビティに対するリクエスト/レスポンス操作のタイムアウト設定、有効期限を設定するためのwaitアクティビティの作成、メッセージ着信を待機するためのBPEL 2.0でのOnEventブランチの作成、および同期プロセスのタイムアウト設定を行う方法について説明します。

この章には次の項が含まれます:

- 第15.1項「イベントおよびタイムアウトの概念に関する概要」

- 第15.2項「プロセスの継続または待機を選択するpickアクティビティの作成」

- 第15.3項「receiveアクティビティのリクエスト/リプライ操作および入力専用操作に対するタイムアウトの設定」

- 第15.4項「有効期限を設定するwaitアクティビティの作成」

- 第15.5項「BPEL 2.0のOnEventブランチを使用してメッセージ着信を待機するためのイベントの指定」

- 第15.6項「永続同期プロセスに対するタイムアウトの設定」

15.1 イベントおよびタイムアウトの概念に関する概要

Webサービスはレスポンスを返すまでに長時間かかる場合があるため、BPELプロセス・サービス・コンポーネントでは一定の時間が経過した後、タイムアウトしてフローの残りを継続できることが必要です。

この章では、融資提案を提供するStar LoanというWebサービスからのレスポンスを1分間待機するBPELプロセス・サービス・コンポーネントのプログラミング例を説明します。Star Loanが1分以内にレスポンスを返さない場合、BPELプロセス・サービス・コンポーネントはUnited Loanという別のWebサービスからの融資提案を自動的に選択します。現実的には、時間の制限は48時間など1分より大きな値です。しかし、この例では、BPELプロセス・サービス・コンポーネントが正しく動作しているかどうかを確認するために、そのような長時間の待機は設定しません。

非同期Webサービスはレスポンスを返すまでに長時間かかる場合があるため、BPELプロセス・サービス・コンポーネントでは一定の時間が経過した後、タイムアウトしてフローの残りを継続できることが必要です。

pickアクティビティを使用して、指定された時間待機するか、作業の実行を続行するようにBPELフローを構成できます。有効期限を設定するには、waitアクティビティを使用します。

15.2 プロセスの継続または待機を選択するpickアクティビティの作成

pickアクティビティには2つのブランチがあり、それぞれに条件があります。最初に条件が満たされたブランチが実行されます。次の例では、1つのブランチの条件は融資提案を受け取ることで、もう1つのブランチの条件は指定の時間待機することです。

図15-1に概要を示します。(優先度に従って)次のアクティビティが発生します。

1. invokeアクティビティがサービス(この場合はStar Loanからの融資提案に対するリクエスト)を開始します。

2. 次に、pickアクティビティが開始されます。これには次の条件があります。

- onMessage
この条件には、Star Loan Webサービスからの融資提案の形式でリプライを受け取るためのコードが含まれています。onMessageコードは、タイムアウトが追加される前の、Star Loan Webサービスからのレスポンスを受け取るコードと一致します。

- onAlarm
この条件には、1分のタイムアウトのコードが含まれています。この時間はPT1Mとして定義されています。これは、タイムアウトまでに1分待機するという意味です。タイムアウト設定には、次の記号を使用します。

- Sは秒

- Mは分

- Hは時間

- Dは日

- Yは年

あまり一般的な例ではありませんが、時間制限が1年3日15秒の場合は、PT1Y3D15Sと入力します。コードの残りの部分では、融資変数selectedおよびapprovedをfalseに設定し、年率(APR)を0.0に設定して、この情報をloanOffer変数にコピーしています。

期間のフォーマットはBPEL標準によって指定されます。期間のフォーマットの詳細は、次の場所にある最新の「XML Schema Part 2: Datatypes」ドキュメントを参照してください。

http://www.w3.org/TR/xmlschema-2/#duration

3. 最初に条件が満たされたpickアクティビティのブランチが、BPELプロセス・サービス・コンポーネントにより実行されます。もう一方のブランチは実行されません。

図15-1 pickアクティビティの概要

「図15-1 pickアクティビティの概要」の説明

onMessageブランチは、操作を受信するという点でreceiveアクティビティに似ています。ただし、類似したパートナ・リンクおよびポート・タイプを待機し、操作が異なる複数のonMessageブランチを持つpickアクティビティを定義できます。したがって、操作ごとに個別のスレッドおよびパラレル処理を起動できます。この点は、操作が1つのみのreceiveアクティビティとは異なります。もう1つの違いは、(「インスタンスの作成」チェック・ボックスを選択することで)receiveアクティビティを使用してビジネス・プロセスの新しいインスタンスを作成できますが、これをpickアクティビティで実行することはできません。

注意:

BPEL 1.1のscopeアクティビティにおけるonMessageブランチと、BPEL 1.1および2.0のscopeアクティビティにおけるonAlarmブランチも作成できます。Oracle JDeveloperでscopeアクティビティを開き、左側でアイコンを参照して追加するブランチを検索します。

15.2.1 pickアクティビティの作成方法

pickアクティビティを作成する手順は、次のとおりです。

1. SOAコンポジット・エディタで、BPELプロセス・サービス・コンポーネントをダブルクリックします。

2. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

3. pickアクティビティをデザイナにドラッグします。
pickアクティビティにはonMessageブランチが含まれています。図15-2に例を示します。

図15-2 pickアクティビティ

「図15-2 pickアクティビティ」の説明

4. OnMessageブランチをダブルクリックします。

5. 融資サービスからのレスポンスを受け取るように、その属性を編集します。図15-3に例を示します。

図15-3 OnMessageブランチ

「図15-3 OnMessageブランチ」の説明

6. pickアクティビティを選択します。
OnMessageブランチおよびOnAlarmブランチを追加するためのアイコンが表示されます。

7. 図15-4に示すように、「OnAlarmの追加」をクリックします。

図15-4 onAlarmブランチの作成

「図15-4 onAlarmブランチの作成」の説明

OnAlarmブランチが表示されます。

8. 表示されたpickアクティビティのonAlarmブランチをダブルクリックし、時間制限を1分に設定します。図15-5に例を示します。

図15-5 onAlarmブランチ

「図15-5 onAlarmブランチ」の説明

9. 「OK」をクリックします。

15.2.2 pickアクティビティ作成時の処理内容

例15-1のコード・セグメントは、この操作のpickアクティビティに対する設計完了後の定義を示しています。

例15-1 pickアクティビティ

<pick>
<!--  receive the result of the remote process -->
<onMessage partnerLink="LoanService"
portType="services:LoanServiceCallback"
operation="onResult" variable="loanOffer">

<assign>
<copy>
<from variable="loanOffer" part="payload"/>
<to variable="output" part="payload"/>
</copy>
</assign>

</onMessage>
<!--  wait for one minute, then timesout -->
<onAlarm for="PT1M">
<assign>
<copy>
<from>
<loanOffer xmlns="http://www.autoloan.com/ns/autoloan">
<providerName>Expired</providerName>
<selected type="boolean">false</selected>
<approved type="boolean">false</approved>
<APR type="double">0.0</APR>
</loanOffer>
</from>
<to variable="loanOffer" part="payload"/>
</copy>
</assign>
</onAlarm>
</pick>

15.2.3 BPEL 2.0の同時onMessageブランチに関する注意事項

BPEL 2.0のOracle BPEL Process Managerの実装では、pickアクティビティの同時onMessageブランチはサポートされていません。

開始アクティビティとして(どちらも相関定義でinitiateがjoinに設定されている)2つのonMessageブランチと、起動を次々に転送する起動プロセスを持つpickアクティビティがプロセスにある場合、どちらの起動も、起動されたプロセスの同じインスタンスに到達すると想定されます。ただし、Oracle BPEL Process ManagerのBPEL 2.0の実装では、起動されたプロセスの2つのインスタンスは起動ごとに作成されます。

これは想定されている動作ですが、BPEL 2.0仕様に記載されているものとは異なります。

たとえば、同期BPELプロセスAがあり、2つのパラレル・ブランチを持つflowアクティビティがあると仮定します。

- ブランチ1は、非同期BPELプロセスBで操作processMessage1を呼び出します。

- ブランチ2は、非同期BPELプロセスBで操作processMessage2を起動します。起動は5秒間待機した後に行われます。その後、BPELプロセスAはBPELプロセスBからのコールバックで待機し、出力をクライアントに返します。

起動されたプロセスの1つのインスタンスを作成し、最初のインスタンスがアクティブで実行中の状態になった後、2番目の起動が行われるという考えです。

BPELプロセスBには、createInstanceがyesに設定されたpickアクティビティがあります。pickアクティビティ内には2つのonMessageブランチがあります。

- 一方のブランチはprocessMessage1操作に使用されます。この操作では、約10秒間スリープ状態になります。

- もう一方のブランチはprocessMessage2操作に使用されます。この操作では、5秒間待機します。

どちらの操作も入力メッセージ・タイプは同じで、initiateをjoinに設定して相関が定義されています。processMessage1が直接呼び出されてBPELプロセスBのインスタンスが作成され、それが10秒間スリープすると想定します。5秒後に、起動プロセスはprocessMessage2の起動をBPELプロセスBに転送し、この起動は新しいインスタンスを作成するのではなく、既存のインスタンスに進みます(相関IDが同じで、initiateがjoinに設定されているため)。

ただし、起動ごとにBPELプロセスBの新しいインスタンスが作成され、結果は予測できません。

- processMessage2操作のブランチが先に完了した場合、後続の割当て操作は失敗します。これは、processMessage1からの入力変数はnullと想定されるためです(そのインスタンスの場合)。

- processMessage1操作のブランチが先に完了した場合、プロセスは一部の情報のみを含むコールバック・データを返します(processMessage2からの入力は含まれません)。

Oracle BPEL Process Managerの実装では、2つの操作(processMessage1またはprocessMessage2)のいずれかによって新しいインスタンスが作成されます。この実装により、すでに作成されたインスタンスがあるかどうかを確認するためにデータベース問合せを行う必要がなくなります。

この問題を解決するには、2つの異なる操作によって開始される2つのプロセスを作成します。

15.3 receiveアクティビティのリクエスト/リプライ操作および入力専用操作に対するタイムアウトの設定

BPELバージョン1.1および2.0における次のタイプの操作に対して、タイムアウト設定を指定できます。

- リクエスト/リプライ(同期)操作。

- 入力専用receive(非同期)操作。このシナリオでは、receiveアクティビティは中間プロセスのアクティビティであり、かつ、新しいインスタンスを作成する(つまり、「Receive」ダイアログの「インスタンスの作成」チェック・ボックスが選択されている)アクティビティではない必要があります。

この機能は、パートナ・コールバックのタイムアウト期間を指定する際に使用するpickアクティビティのonMessageブランチとonAlarmブランチの代替手段として提供されています。

図15-6に、中間プロセスのreceiveアクティビティのタイムアウトを設定する「タイムアウト」タブを示します。

図15-6 receiveアクティビティの「タイムアウト」タブ

「図15-6 receiveアクティビティの「タイムアウト」タブ」の説明

receiveアクティビティのリクエスト・リプライ操作および入力専用操作に対するタイムアウトを設定する前に理解しておく基本的な概念については、第15.3.1項「リクエスト/リプライ操作および入力専用操作に対するタイムアウトの概要」を参照してください。

Oracle JDeveloperでreceiveアクティビティのタイムアウトを設定する方法については、第15.3.2項「receiveアクティビティのタイムアウトの設定方法」を参照してください。

15.3.1 リクエスト・リプライ操作および入力専用操作に対するタイムアウトの概要

次の各項では、リクエスト・リプライおよび入力専用のタイムアウト操作の機能について説明します。

- アクティビティの起動時からの相対的なタイムアウト設定

- 絶対的な日時でのタイムアウト設定

- XPath式を使用して動的に計算されるタイムアウト設定

- アクティビティ・タイムアウト時にスローされるbpelx:timeoutフォルト

- アクティビティ・タイムアウト時にBPELインスタンス監査証跡に追加されるイベント

- サーバー再起動時にリカバリ可能なタイムアウト・アクティビティ

15.3.1.1 アクティビティの起動時からの相対的なタイムアウト設定

タイムアウト設定として、アクティビティの起動時からの相対的なタイムアウトを指定できます。この設定は、例15-2に示すBPEL 1.1用の構文を使用して相対的な期間として指定されます。

例15-2 BPEL 1.1におけるアクティビティの起動時からの相対的なタイムアウト設定

<receive | bpelx:for="duration-expr">
standard-elements
</receive>

BPEL 2.0では、構文は例15-3のようになります。

例15-3 BPEL 2.0におけるアクティビティの起動時からの相対的なタイムアウト設定

<receive | <bpelx:for>'duration-expr'</bpelx:for>
standard-elements
</receive>

このタイプでは、bpelx:for属性を使用して、XMLスキーマ・タイプ期間として評価される静的な値またはXPath式を指定します。アクティビティには、bpelx:for属性またはbpelx:until属性のいずれか一方のみを使用できます。

XPath式がマイナスの期間として評価された場合、タイムアウトは無視され、その期間の値が無効であることを示すインスタンス監査証跡にイベントが記録されます。

有効な期間の値が取得されると、アクティビティの有効期限は、現在のノード時間(そのノードが使用可能になってからのクラスタ時間)にその期間の値を加算した値に設定されます。たとえば、期間の値bpelx:for="'PT5M'"は、アクティビティが実行開始後5分以内にインバウンド・メッセージの着信を予定していることを示します。

注意:

現在、pickアクティビティのonMessageブランチにはタイムアウト設定属性が適用されません。これは、pickアクティビティのonMessageブランチとonAlarmブランチを使用した同じ機能が存在しているためです。

タイムアウト期間は、次のアクティビティにのみ指定できます。

- 中間プロセスのreceiveアクティビティ

- createInstance="true"の指定がないreceiveアクティビティ

receiveアクティビティは、インスタンス化された後にのみタイムアウトします。receiveアクティビティのエントリではタイムアウトになりません。

15.3.1.2 絶対的な日時でのタイムアウト設定

タイムアウト設定は、リクエスト/レスポンスreceiveアクティビティの絶対的な期限として指定できます。このタイプでは、例15-4に示すBPEL 1.1用の構文を使用します。

例15-4 BPEL 1.1における絶対的な日時でのタイムアウト設定

<receive bpelx:until="deadline-expr">
standard-elements
</receive>

BPEL 2.0では、構文は例15-5のようになります。

例15-5 BPEL 2.0における絶対的な日時でのタイムアウト設定

<receive <bpelx:until>"deadline-expr"</bpelx:until>
</receive>

bpelx:until属性の予定有効期限は、現在時刻より少なくとも2秒後である必要があります。それ以外の場合は、タイマーが指定されていなかったかのように、タイマー・スケジュールを無視してスキップされます。

bpelx:until属性には、datetimeまたはdateのXMLスキーマ・タイプとして評価される静的な値またはXPath式を指定します。アクティビティには、bpelx:for属性またはbpelx:until属性のいずれか一方のみを使用できます。

XPathバージョン1.0は、XMLスキーマに対応していません。したがって、XPathバージョン1.0の組込み関数では、dateTime値やdate値を作成したり、操作することはできません。ただし、次のいずれかを実行できます。

- XMLスキーマ定義に準拠する定数(リテラル)の記述、および期限値としての使用。

- 使用可能ないずれかのタイプの変数(パート)からのフィールドの抽出、および期限値としての使用。

XPathバージョン1.0では、リテラルが文字列リテラルとして処理されますが、結果はdateTime値またはdate値の字句表記として解釈されます。

有効なdatetime値またはdate値が取得されると、アクティビティの有効期限が指定の日付に設定されます。たとえば、bpelx:until="'2009-12-24T18:00+01:00'"というdatetime値は、アクティビティが実行開始以降、インバウンド・メッセージの着信を遅くとも2009年12月24日午後6時(UTC+1)以前に予定していることを示します。

注意:

現在、pickアクティビティのonMessageブランチにはタイムアウト設定属性が適用されません。これは、pickアクティビティのonMessageブランチとonAlarmブランチを使用した同じ機能が存在しているためです。

タイムアウト日付は、次のアクティビティにのみ指定できます。

- 中間プロセスのreceiveアクティビティ

- createInstance="true"の指定がないreceiveアクティビティ

receiveアクティビティは、インスタンス化された後にのみタイムアウトします。receiveアクティビティのエントリではタイムアウトになりません。

15.3.1.3 XPath式を使用して動的に計算されるタイムアウト設定

リクエスト/レスポンスreceiveアクティビティ、入力専用receive(コールバック)アクティビティおよびpickアクティビティのonMessageブランチに対するタイムアウト設定は、静的な期間またはdatetime値を入力するかわりに、XPath式を使用して設定できます。この場合は、次のいずれかを式の値として返す必要があります。

- XMLの静的な期間またはdatetime値と解釈される文字列

- XMLスキーマの期間またはdatetimeタイプ

例15-6に、BPEL 1.1でXPath式を使用するための構文を示します。

例15-6 BPEL 1.1でXPath式を使用して動的に計算されるタイムアウト設定

<bpelx:for="bpws:getVariableData('input', 'payload',
'/tns:waitValue/tns:for')"/>

<bpelx:until="bpws:getVariableData('input', 'payload',
'/tns:waitValue/tns:until')"/>

返された式の値をXMLスキーマの期間またはdatetimeタイプと解釈できない場合は、無効な期間またはdatetimeの値が指定されたことを示すインスタンス監査証跡にイベントが記録され、アクティビティの有効期限は設定されません。

15.3.1.4 アクティビティ・タイムアウト時にスローされるbpelx:timeoutフォルト

bpelx:forまたはbpelx:until属性から、有効なXMLスキーマの期間またはdatetime値が返された場合は、タイムアウトしたアクティビティからbpelx:timeoutフォルトがスローされます。このフォルトはcatchまたはcatchAllブロックによって捕捉され、通常のBPELフォルトと同様に処理されます。フォルトのメッセージはアクティビティの名前になります。また、タイムアウト期間より前に、想定したコールバック・メッセージの受信に失敗したためにアクティビティがタイムアウトしたことを示すインスタンス監査証跡にイベントが記録されます。

タイムアウト期間より前にアクティビティがパートナからコールバックを受信した場合、フォルトはスローされません。コールバックを受信したときにアクティビティがタイムアウトしていた場合、コールバック・メッセージはアクティビティに配信されず、配信メッセージ表に取消しのマークが設定されます。コールバック・メッセージの処理と同時にタイムアウト・アクションが試行された場合、そのタイムアウト・アクションは無視されます。11g リリース1現在、インスタンスはオプティミスティックにロックされます(リリース10gのペシミスティック・ロックとは対照的です)。したがって、行の第2のアクションがそのまま実行されます。

操作に対するフォルトがコンポーネントWSDLに宣言されている場合は、BPELコンポーネントからbpelx:timeoutフォルトをスローできます。操作に対するフォルトが宣言されていない場合、フォルトはFabricInvocationException(実行時フォルト)に変換されます。このフォルトは、いずれかのコール元コンポーネント(BPELコンポーネントを含む)によって捕捉されますが、フォルトのタイプはbpelx:timeoutではなくなります(ただし、フォルト・メッセージ文字列には、フォルトが当初はタイムアウト・フォルトであったことが記載されます)。

15.3.1.5 アクティビティ・タイムアウト時にBPELインスタンス監査証跡に追加されるイベント

タイムアウトしたアクティビティからbpelx:timeoutフォルトがスローされると、想定したコールバック・メッセージをパートナから受信した場合とは対照的に、アクティビティがタイムアウトしたことを示すインスタンス監査証跡にイベントが記録されます。

15.3.1.6 サーバー再起動時にリカバリ可能なタイムアウト・アクティビティ(有効期限アラーム表のリフレッシュ)

有効なタイムアウトの期間またはdatetimeを指定するアクティビティは、基礎となる作業アイテム・オブジェクトの有効期限が設定されているwaitアクティビティおよびonAlarmアクティビティとほぼ同様の方法で実装されます。スケジューラを使用してこれらのアクティビティをスケジュールしたノードが(正常な停止または中途完了のいずれかで)停止した場合は、サーバー再起動時に、スケジューラを使用してこれらのアクティビティをすべて再スケジュールする必要があります。

ノードが停止した場合、これらのアクティビティをクラスタの単一のノード(マスター・ノード)で再スケジュールすることはできません。

15.3.2 receiveアクティビティのタイムアウトの設定方法

receiveアクティビティでタイムアウトを設定する手順は、次のとおりです。

1. SOAコンポジット・エディタで、バージョン1.1のBPELプロセス・サービス・コンポーネントをダブルクリックします。

2. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

3. receiveアクティビティをデザイナにドラッグします。

4. アクティビティを開きます。

5. 「タイムアウト」タブをクリックします。
図15-7に示すように、このタブでリクエスト/レスポンス操作のタイムアウトを設定できます。

図15-7 「タイムアウト」タブ

「図15-7 「タイムアウト」タブ」の説明

6. 適切な値を指定し、「適用」をクリックします。例:

- アクティビティの起動時からの相対的なタイムアウトを指定するには、「期間」ボタンをクリックして値を入力するか、「式」ボタンをクリックしてXPath式を指定します。

- リクエスト/レスポンス操作の絶対的な期限としてタイムアウトを指定するには、「期限」ボタンをクリックして値を入力するか、「式」ボタンをクリックしてXPath式を指定します。

7. 「適用」→「OK」の順にクリックします。

15.3.3 receiveアクティビティのタイムアウト設定時の処理内容

.bpelファイルのコード・セグメントは、特定の操作に対する設計完了後の定義を示しています。

たとえば、アクティビティが実行開始後5分以内にインバウンド・メッセージの着信を予定していることを指定した場合は、例15-7に示すように構文が表示されます。

例15-7 静的な期間

bpelx:for="'PT5M'"/>

たとえば、アクティビティが実行開始以降、インバウンド・メッセージの着信を遅くとも2010年1月24日午前11時(UTC+1)以前に予定していることを指定した場合は、例15-8に示すような構文が表示されます。

例15-8 日時の値

bpelx:until="'2010-01-24T11:00:00-08:00'"/>

たとえば、アクティビティの起動時からの相対的なタイムアウトの値を取得するようにXPath式を指定した場合は、例15-9に示すような構文が表示されます。

例15-9 XPath式

bpelx:for="bpws:getVariableData('inputVariable','payload','/tns:waitValue/tns:for')"/>

15.4 有効期限を設定するwaitアクティビティの作成

waitアクティビティを使用すると、プロセスは指定された期間または時間制限に達するまで待機できます。有効期限条件を1つのみ指定する必要があります。このアクティビティの典型的な用途は、一定の時間に操作を起動することです。通常は、プロセスの状態に依存する式を入力します。

待機期間を指定する場合は、次の点に注意してください。

- 処理を必要とする他のイベントとともにスケジュールされている場合、待機期間は保証されません。この追加処理のために、実際の待機期間は、BPELプロセスに指定されている待機期間より長くなる可能性があります。

- 2秒未満の待機期間はサーバーから無視されます。2秒以上1分未満の待機期間は、正確な指定時間で実行されないことがあります。ただし、分単位の待機期間は指定時間で実行されます。

- 待機時間2秒のデフォルト値は、Oracle Enterprise Manager Fusion Middleware ControlのシステムMBeanブラウザのMinBPELWaitプロパティで指定されます。このプロパティは任意の値に設定でき、MinBPELWait未満の待機の遅延は無視されます。

注意:

waitアクティビティの期限切れイベントのスケジュールには、Quartzバージョン1.6がサポートされています。

15.4.1 最小待機時間の指定方法

BPELプロセスがデハイドレーションに関連して待機する最小期間を指定できます。待機期間が指定値以下の場合、BPELはアクティビティの実行を同じスレッドの同じトランザクションで続行します。

1. 「SOAインフラストラクチャ」メニューから、「SOA管理」→「BPELプロパティ」の順に選択します。

2. 「BPELサービス・エンジン・プロパティ」ページの下部で、「詳細BPEL構成プロパティ」をクリックします。

3. MinBPELWaitをクリックします。

4. 「値」フィールドに値を秒単位で指定します。

5. 「適用」をクリックします。

6. 「戻る」をクリックします。

15.4.2 waitアクティビティの作成方法

waitアクティビティを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

2. waitアクティビティをデザイナにドラッグします。

3. waitアクティビティをダブルクリックし、「Wait」ダイアログを表示します。

4. 「期間」セクションに、待機する時間を入力します。

5. 図15-8に示すように、「期限」セクションで、待機する期限を選択します。

図15-8 「Wait」ダイアログ

「図15-8 「Wait」ダイアログ」の説明

15.4.3 waitアクティビティ作成時の処理内容

BPEL 1.1では、例15-10に示すように、有効期限条件を1つのみ指定する必要があります。

例15-10 BPEL 1.1でのwaitアクティビティ

<wait (for="duration-expr" | until="deadline-expr") standard-attributes>
standard-elements
</wait>

例15-11に、BPEL 2.0の構文を示します。

例15-11 BPEL 2.0でのwaitアクティビティ

<wait <for>'duration-expr'</for> | <until>'duration-expr'</until>
standard-elements
</wait>

15.5 BPEL 2.0のOnEventブランチを使用してメッセージ着信を待機するためのイベントの指定

指定されたイベントがメッセージの到着を待機するonEventブランチをscopeアクティビティ内に作成できます。たとえば、顧客のクレジット要求メッセージによって開始されるクレジット要求プロセスがあると仮定します。さらに顧客対応を行わなくても要求は完全に処理され、結果が顧客に送信されます。ただし、顧客がクレジット要求のステータスに関する問合せ、要求内容の変更、または処理中の要求の完全な取消を行う場合があります。このような顧客対応は、ビジネス・オーダー処理の特定の時点でのみ発生するとはかぎりません。onEventブランチなどのイベント・ハンドラを使用すると、ビジネス・プロセスでは、プライマリ・ビジネス・ロジック・フローに並行して到着する要求(ステータス要求、変更要求、取消要求など)を受け入れることができます。

onEventイベント・ハンドラは、内側に囲まれているスコープと関連付けられます。onEventイベント・ハンドラはスコープが初期化されると有効になり、スコープが終了すると無効になります。有効になると、いくつものイベントが発生する可能性があります。イベントは、スコープのプライマリ・アクティビティおよびイベント相互に並行して処理されます。メッセージ・イベントも、プロセスによって公開されるサービス操作を表し、onEvent要素としてモデル化されます。イベント・ハンドラは新しいプロセス・インスタンスを作成できません。したがって、メッセージ・イベントは常に、すでにアクティブなプロセス・インスタンスで受信されます。

15.5.1 scopeアクティビティでのonEventブランチの作成方法

scopeアクティビティでonEventブランチを作成する手順は、次のとおりです。

1. 図15-9に示すように、開いた状態のscopeアクティビティで、「OnEventの追加」をクリックします。

図15-9 「OnEventの追加」アイコン

「図15-9 「OnEventの追加」アイコン」の説明

これにより、OnEventブランチおよび内側に囲まれているscopeアクティビティが作成されます。

2. OnEventブランチをダブルクリックします。
図15-10に示すように、「OnEvent」ダイアログが表示されます。

図15-10 「OnEvent」ダイアログ

「図15-10 「OnEvent」ダイアログ」の説明

3. 「パートナ・リンク」フィールドで、「検索」アイコンをクリックして、メッセージが到着するエンドポイント参照を含むパートナ・リンクを選択します。
「ポート・タイプ」フィールドおよび「操作」フィールドは、イベントを発生させるためにパートナによって呼び出されるポート・タイプおよび操作を定義します。

4. 変数または「送信元パート」要素を使用して、パートナからメッセージを受信するための方法を指定します。

5. 「適用」をクリックし、「OK」をクリックします。

6. BPELプロセスの設計を続行します。

15.5.2 OnEventブランチ作成時の処理内容

例15-12に、設計完了後の.bpelファイル内のonEventブランチの概要を示します。onEventブランチは、クレジット要求のステータスの問合せ、要求内容の変更または処理中の要求の完全な取消を行います。

例15-12 onEventブランチ

<process name="creditRequestProcess" . . .>
. . .
<eventHandlers>
<onEvent partnerLink="requestCreditScore"
operation="queryCreditRequestStatus" ...>
<scope name="scopeStatus">...</scope>
</onEvent>
<onEvent partnerLink="requestCreditScore"
operation="modifyCreditRequest" ...>
<scope name="scopeRequest">...</scope>
</onEvent>
<onEvent partnerLink="requestCreditScore"
operation="cancelCreditRequest" ...>
<scope name="scopeCancel">...</scope>
</onEvent>
</eventHandlers>
. . .
</process>

15.6 永続同期プロセスに対するタイムアウトの設定

リモート・データベースに接続する永続同期プロセスについては、Oracle Enterprise Manager Fusion Middleware ControlのシステムMBeanブラウザで、SyncMaxWaitTimeタイムアウト・プロパティの値を増加する必要があります。

このプロパティの設定方法については、第7.3項「永続同期プロセスのトランザクションのタイムアウト値の指定」を参照してください。

16 マスター・プロセスと詳細プロセスの調整

この章では、BPELプロセスでのマスター・プロセスと詳細プロセスの調整について説明します。この調整により、マスターBPELプロセスとそれに関連した詳細BPELプロセスで実行されるタスクを指定できます。これは、親子関係とも呼ばれます。

この章には次の項が含まれます:

- 第16.1項「マスター・プロセスと詳細プロセスの調整に関する概要」

- 第16.2項「Oracle JDeveloperでのマスター・プロセスと詳細プロセスの調整の定義」

16.1 マスター・プロセスと詳細プロセスの調整に関する概要

マスター・プロセスと詳細プロセスの調整は、単一のマスター・プロセスと複数の詳細プロセス間の1対多の関係で構成されます。

たとえば、ビジネス・プロセスで受注をアプリケーションにインポートするとします。各受注は、単一のヘッダー(顧客情報、配送先など)と複数の明細(品目名、品目番号、数量、価格など)で構成されます。

この受注の実行には、次の各タスクが実行されます。

- ヘッダーを検証します。ヘッダーが無効な場合、処理は停止します。

- 各明細を検証します。無効な明細がある場合は、無効としてマークされ、処理が停止します。

- 各品目の在庫確認を実行します。品目が在庫にない場合は、作業指示が作成されて組み立てられます。

- 各明細の品目が入手可能になった場合は、その品目を出荷ドックに移動します。

- 注文品を顧客に発送します。

これらのタスクを実行するには、各ヘッダーの確認と検証を行う単一のマスター・プロセスと、各明細品目の確認と検証を行う複数のBPELプロセスを作成します。

考えられる調整のポイントは、次のとおりです。

- マスター・プロセスは、ヘッダーの検証が正常に終了した後、処理を続行することを詳細プロセスに通知する必要があります。

- 各詳細プロセスは、明細品目の検証を完了した場合、マスター・プロセスに通知する必要があります。

- 各詳細プロセスは、明細品目が在庫で入手可能な場合、マスター・プロセスに通知する必要があります。

- すべての明細品目が入手可能である場合、マスターは各詳細プロセスに通知して、明細品目を出荷ドックに移動する必要があります(入手可能になった明細品目をすべて移動した場合、ドックは一杯になる場合があります)。

- すべての品目を移動した後、マスター・プロセスは、履行された注文品を顧客に発送するロジックを実行します。

図16-1は、1つのマスター・プロセスと2つの詳細プロセス間の、ヘッダーと明細品目の検証調整ポイントの概要を示しています。

図16-1 マスター・プロセスと詳細プロセスの調整の概要(1つのBPELプロセスから2つの詳細プロセスへ)

「図16-1 マスター・プロセスと詳細プロセスの調整の概要(1つのBPELプロセスから2つの詳細プロセスへ)」の説明

次のBPELプロセス・アクティビティは、マスター・プロセスと詳細プロセス間のアクションを調整します。

- signal: 他のプロセス(マスターまたは詳細)に処理の続行を通知します。

- receive signal: 他のプロセス(マスターまたは詳細)から適切な通知シグナルを受信するまで待機してから、処理を続行します。

どちらのアクティビティも、BPELプロセス・ファイルに定義されているラベル属性によって調整されます。ラベルはマスター・プロセス定義ごとに宣言されます。

図16-2は、BPELプロセス・フローの調整の概要を示しています。

図16-2 マスター・プロセスと詳細プロセスの構文の概要(1つのBPELプロセスから1つの詳細プロセスへ)

「図16-2 マスター・プロセスと詳細プロセスの構文の概要(1つのBPELプロセスから1つの詳細プロセスへ)」の説明

図16-2に示すように、各マスター・プロセスと詳細プロセスには、signalアクティビティとreceive signalアクティビティが含まれています。表16-1は、役割が定義されたプロセスのタイプに基づいて、アクティビティの役割について説明しています。

表16-1 マスター・プロセスと詳細プロセスの調整の役割

プロセス

アクティビティ

役割

マスター・プロセス

signalアクティビティ

マスター・プロセスは実行時に、関連するすべての詳細プロセスに通知します。

詳細プロセス

receive signalアクティビティ

詳細プロセスは、マスター・プロセスが実行したシグナルを受信するまで待機します。

詳細プロセス

signalアクティビティ

詳細プロセスは実行時に、関連するマスター・プロセスに処理が完了したことを通知します。

マスター・プロセス

receive signalアクティビティ

マスター・プロセスは、すべての詳細プロセスが実行したシグナルを受信するまで待機します。

signalアクティビティがreceive signalアクティビティの前に実行された場合は、そのsignalアクティビティによって設定された状態が継続され、その状態は後のreceive signalアクティビティを読み取るまで有効です。

16.1.1 マスター・プロセスに対するBPELファイル定義

マスター・プロセスに対するBPELファイルは、詳細プロセスとの調整を定義します。BPELファイルは、マスター・プロセスが様々な詳細プロセスのパートナ・リンクと相互作用することを示します。例16-1に例を示します。

例16-1 マスター・プロセスに対するBPELファイル定義

<process name="MasterProcess"
. . .
. . .
<partnerLinks>
<partnerLink name="client"
partnerLinkType="tns:MasterProcess"
myRole="MasterProcessProvider"
partnerRole="MasterProcessRequester"/>
<partnerLink name="DetailProcess"
partnerLinkType="dp:DetailProcess"
myRole="DetailProcessRequester"
partnerRole="DetailProcessProvider"/>
<partnerLink name="DetailProcess1"
partnerLinkType="dp1:DetailProcess1"
myRole="DetailProcess1Requester"
partnerRole="DetailProcess1Provider"/>
<partnerLink name="DetailProcess2"
partnerLinkType="dp2:DetailProcess2"
myRole="DetailProcess2Requester"
partnerRole="DetailProcess2Provider"/>
</partnerLinks>

signalアクティビティは、このマスター・プロセスと調整するラベル値と詳細プロセスを示します。このラベル値(startDetailProcess)は、すべての詳細プロセスのreceive signalアクティビティのラベル値と一致しています。これにより、シグナルは適切なプロセスに送信されます。シグナル受信プロセスごとに1つのシグナル・プロセスがあります。マスター・プロセスは、実行時にすべての詳細プロセスに通知します。次の構文は、BPELバージョン1.1をサポートするBPELプロセスのsignalアクティビティを示しています。

<bpelx:signal name="notifyDetailProcess" label="startDetailProcess" to="details"/>

注意:

BPEL 2.0では、signalアクティビティの構文は多少異なります。signalアクティビティはextensionActivity要素にラップされます。

<extensionActivity>
<bpelx:signal name="notifyDetailProcess"
label="startDetailProcess" to="details"/>
</extensionActivity>

assign、invokeおよびreceiveの各アクティビティには、マスター・プロセスと詳細プロセス間の相互作用が記述されます。この例は、マスター・プロセスと詳細プロセスの1つ(DetailProcess)との間の相互作用を示しています。同様の相互作用は、すべての詳細プロセスについて、BPELファイルに定義されています。

invokeアクティビティで、「詳細として呼出し」チェック・ボックスが選択されていることを確認します。図16-3に詳細を示します。

図16-3 「詳細として呼出し」チェック・ボックス

「図16-3 「詳細として呼出し」チェック・ボックス」の説明

この選択は、詳細インスタンスとして、パートナ・プロセス・インスタンス(DetailProcess)を作成します。相互作用する各詳細プロセスに対するマスター・プロセスのinvokeアクティビティで、このチェック・ボックスを選択する必要があります。例16-2に、「詳細として呼出し」チェック・ボックスを選択した後のBPELファイル・コンテンツの例を示します。

例16-2 bpelx:invokeAsDetail属性

<assign>
<copy>
<from variable="input" part="payload" query="/tns:processInfo/tns:value"/>
<to variable="detail_input" part="payload" query="/dp:input/dp:number"/>
</copy>
</assign

<invoke name="receiveInput" partnerLink="DetailProcess"
portType="dp:DetailProcess"
operation="initiate"
inputVariable="detail_input"
bpelx:invokeAsDetail="true"/>

<!--  receive the result of the remote process -->
<receive name="receive_DetailProcess" partnerLink="DetailProcess"
portType="dp:DetailProcessCallback"
operation="onResult" variable="detail_output"/>

マスターBPELプロセスには、receive signalアクティビティが含まれています。このアクティビティは、すべての詳細プロセスからシグナルを受信するまでマスター・プロセスが待機することを示します。ラベル値(detailProcessComplete)は、各詳細プロセスのsignalアクティビティのラベル値と一致しています。これにより、シグナルは適切なプロセスに送信されます。例16-3に例を示します。次の構文は、BPELバージョン1.1をサポートするBPELプロセスのreceive signalアクティビティを示しています。

例16-3 receive signalアクティビティ

<bpelx:receiveSignal name="waitForNotifyFromDetailProcess"
label="detailProcessComplete"
from="details"/>

注意:

BPEL 2.0では、receive signalアクティビティの構文は多少異なります。receive signalアクティビティはextensionActivity要素にラップされます。

<extensionActivity>
<bpelx:receiveSignal name="waitForNotifyFromDetailProcess"
label="detailProcessComplete" from="details"/>
</extensionActivity>

16.1.1.1 マスター・プロセスと複数の詳細プロセスの相関

1つのマスター・プロセスと複数の詳細プロセスがある環境では、シグナル相関にbpelx:detailLabel属性を使用します。例16-4は、この属性の使用方法を示しています。

最初のinvokeアクティビティは、DetailProcess詳細プロセスを起動し、それをdetailProcessComplete0のラベルに関連付けます。

例16-4 最初のinvokeアクティビティ

<invoke name="invokeDetailProcess" partnerLink="DetailProcess"
portType="dp:DetailProcess"
operation="initiate"
inputVariable="detail_input"
bpelx:detailLabel="detailProcessComplete0"
bpelx:invokeAsDetail="true"/>

2番目のinvokeアクティビティは、DetailProcess1詳細プロセスを起動し、それをdetailProcessComplete1のラベルに関連付けます。例16-5に例を示します。

例16-5 2番目のinvokeアクティビティ

<invoke name="invokeDetailProcess1" partnerLink="DetailProcess1"
portType="dp1:DetailProcess1"
operation="initiate"
inputVariable="detail_input1"
bpelx:detailLabel="detailProcessComplete1-2"
bpelx:invokeAsDetail="true"/>

3番目のinvokeアクティビティは、異なるポートと異なる入力変数を使用してDetailProcess2詳細プロセスを再度起動します。これにより、例16-6に示すように、DetailProcess2詳細プロセスがdetailProcessComplete1-2のラベルに関連付けられます。

例16-6 3番目のinvokeアクティビティ

<invoke name="invokeDetailProcess2" partnerLink="DetailProcess2"
portType="dp2:DetailProcess2"
operation="initiate"
inputVariable="detail_input2"
bpelx:detailLabel="detailProcessComplete1-2"
bpelx:invokeAsDetail="true"/>

例16-7に示すマスター・プロセスのreceive signalアクティビティは、詳細プロセスDetailProcess0からの返信シグナルを待機します。

例16-7 receive signalアクティビティ

<!-- This is a receiveSignal waiting for 1 child to signal back -->
<bpelx:receiveSignal name="waitForNotifyFromDetailProcess0"
label="detailProcessComplete0" from="details"/>

例16-8に記載されているマスター・プロセスの2番目のreceive signalアクティビティも、DetailProcess1およびDetailProcess2からの返信シグナルを待機します。

例16-8 2番目のreceive signalアクティビティ

<!-- This is a receiveSignal waiting for 2 child (detail) processes to signal back -->
<bpelx:receiveSignal name="waitForNotifyFromDetailProcess1-2"
label="detailProcessComplete1-2" from="details"/>

注意:

BPELプロセスのreceive signalアクティビティが1つのみの場合、invokeアクティビティには、bpelx:detailLabel属性を指定しないでください。このような状況では、デフォルトのbpelx:detailLabel属性が適用されるため、指定する必要はありません。

16.1.2 詳細プロセスに対するBPELファイル定義

各詳細プロセスのBPELプロセス・ファイルには、マスター・プロセスとの調整を定義します。

receive signalアクティビティは、例16-9に示す詳細プロセスが、マスター・プロセスが実行したシグナルを受信するまで待機することを示します。ラベル値(startDetailProcess)は、マスター・プロセスのsignalアクティビティのラベル値と一致しています。

例16-9 startDetailProcessラベル値

<bpelx:receiveSignal name="waitForNotifyFromMasterProcess"
label="startDetailProcess" from="master"/>

signalアクティビティは、例16-10に示す詳細プロセスが、実行時に処理を完了したことを、関連するマスター・プロセスに通知することを示します。ラベル値(detailProcessComplete)は、各マスター・プロセスのreceive signalアクティビティのラベル値と一致しています。

例16-10 signalアクティビティ

<bpelx:signal name="notifyMAsterProcess" label="detailProcessComplete"
to="master"/>

16.2 Oracle JDeveloperでのマスター・プロセスと詳細プロセスの調整の定義

この項では、Oracle BPELデザイナでのマスター・プロセスと詳細プロセスの調整の定義方法の概要を説明します。この例では、1つのマスター・プロセスと1つの詳細プロセスが定義されています。

注意:

この項では、マスター・プロセスと詳細プロセスの調整に固有のタスクについてのみ説明します。変数の作成、assignアクティビティの作成など、BPELプロセスで定義する標準のアクティビティについては説明しません。

16.2.1 マスター・プロセスの作成方法

マスター・プロセスを作成する手順は、次のとおりです。

1. SOAコンポジット・エディタで、BPELプロセス・サービス・コンポーネントを作成します。この例では、プロセスはMasterProcessという名前です。

2. 「MasterProcess」BPELプロセスをダブルクリックします。

3. 「コンポーネント・パレット」で、「Oracle Extensions」を展開します。

4. signalアクティビティをデザイナにドラッグします。

5. signalアクティビティをダブルクリックします。

このアクティビティは、実行時に処理を実行する詳細プロセスに通知します。

6. 表16-2に記載されている詳細を入力します。

表16-2 「Signal」ダイアログのフィールドと値

フィールド

値

名前

名前(この例では、contactDetailProcess)を入力します。

ラベル

ラベル名(この例では、beginDetailProcess)を入力します。このラベルは、ステップ6で詳細プロセスに設定したreceive signalアクティビティのラベルと一致している必要があります。

To

このシグナルを受信するプロセスのタイプとして、「詳細」を選択します。

図16-4は、「Signal」ダイアログを示しています。

図16-4 「Signal」ダイアログ

「図16-4 「Signal」ダイアログ」の説明

7. 「OK」をクリックします。

8. receive signalアクティビティをデザイナにドラッグします。

9. receive signalアクティビティをダブルクリックします。
このアクティビティにより、マスター・プロセスはすべての詳細プロセスが実行したシグナルを受信するまで待機できます。

10. 表16-3に記載されている詳細を入力します。

表16-3 「Receive Signal」ダイアログのフィールドと値

フィールド

値

名前

名前(この例では、waitForDetailProcess)を入力します。

ラベル

ラベル名(この例では、completeDetailProcess)を入力します。このラベルは、ステップ10で詳細プロセスに設定したsignalアクティビティのラベルと一致している必要があります。

To

シグナルを受信するプロセスのタイプとして、「詳細」を選択します。

図16-5は、「Receive Signal」ダイアログを示しています。

図16-5 「Receive Signal」ダイアログ

「図16-5 「Receive Signal」ダイアログ」の説明

11. 「OK」をクリックします。
これで、マスター・プロセスは次のことを実行するように設計されました。

- 実行時に処理を実行する詳細プロセスに通知します。

- 詳細プロセスが実行したシグナルを受信するまで待機します。

16.2.2 詳細プロセスの作成方法

詳細プロセスを作成する手順は、次のとおりです。

1. SOAコンポジット・エディタで、2番目のBPELプロセス・サービス・コンポーネントを作成します。この例では、プロセスはDetailProcessという名前です。

2. 「DetailProcess」BPELプロセスをダブルクリックします。

3. 「コンポーネント・パレット」で、「Oracle Extensions」を展開します。

4. receive signalアクティビティをBPELプロセス・サービス・コンポーネントにドラッグします。

5. receive signalアクティビティをダブルクリックします。
このアクティビティにより、詳細プロセスはマスター・プロセスが実行したシグナルを受信するまで待機できます。

6. 表16-4に記載されている詳細を入力します。

表16-4 「Receive Signal」ダイアログのフィールドと値

フィールド

値

名前

名前(この例ではWaitForContactFromMasterProcess)を入力します。

ラベル

ラベル名(この例では、beginDetailProcess)を入力します。このラベルは、ステップ6でマスター・プロセスに設定したsignalアクティビティのラベルと一致している必要があります。

To

シグナルを受信するプロセスのタイプとして「マスター」を選択します。

図16-6は、「Receive Signal」ダイアログを示しています。

図16-6 「Receive Signal」ダイアログ

「図16-6 「Receive Signal」ダイアログ」の説明

7. 「OK」をクリックします。

8. signalアクティビティをデザイナにドラッグします。

9. signalアクティビティをダブルクリックします。
このアクティビティにより、詳細プロセスは実行時に関連するマスター・プロセスに処理が完了したことを通知できます。

10. 表16-5に記載されている詳細を入力します。

表16-5 「Signal」ダイアログのフィールドと値

フィールド

値

名前

名前(この例ではcontactMasterProcess)を入力します。

ラベル

ラベル名(この例では、completeDetailProcess)を入力します。このラベルは、ステップ10でマスター・プロセスに設定したreceive signalアクティビティのラベルと一致している必要があります。

To

送信先として、「マスター」を選択します。

図16-7は、「Signal」ダイアログを示しています。

図16-7 「Signal」ダイアログ

「図16-7 「Signal」ダイアログ」の説明

11. 「OK」をクリックします。

これで、詳細プロセスは次のこと実行するように設計されました。

- マスター・プロセスが実行したシグナルを受信するまで待機します。

- マスター・プロセスに実行時に処理が完了したことを通知します。

16.2.3 invokeアクティビティの作成方法

invokeアクティビティを作成する手順は、次のとおりです。

1. 「MasterProcess」マスター・プロセスに戻ります。

2. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

3. invokeアクティビティを、BPELプロセス・サービス・コンポーネントにドラッグします。

4. invokeアクティビティをダブルクリックします。

5. ステップ1で作成した「DetailProcess」BPELプロセスをパートナ・リンクとして選択します。

6. 「詳細として呼出し」チェック・ボックスを選択します。

7. 「Invoke」ダイアログの残りのすべてのフィールドを完成し、「OK」をクリックします。

8. デザイナで、「ソース」をクリックします。BPELファイルは次のようになります。

<invoke name="MyInvoke" partnerLink="DetailProcess"
portType="dp:DetailProcess"
operation="initiate"
inputVariable="detail_input"
bpelx:invokeAsDetail name="true"/>

この属性は、詳細インスタンスとしてパートナ・プロセス(DetailProcess)を作成します。

9. 1つのマスター・プロセスが複数の詳細プロセスと相互作用する環境では、次のタスクを実行します。

1. receive signalアクティビティと相関させるために、bpelx:detailLabel属性を指定します。

<invoke name="MyInvoke" partnerLink="DetailProcess"
portType="dp:DetailProcess"
operation="initiate"
inputVariable="detail_input"/>
bpelx:detailLabel="detailProcessComplete0"
<bpelx:invokeAsdetail name="true"/>

2. マスター・プロセスのreceive signalアクティビティのdetailProcessComplete0と同じラベル値を指定します。

<bpelx:receiveSignal name="waitForNotifyFromDetailProcess0-1"
label="detailProcessComplete0" from="details"/>

3. 他の詳細プロセスについてもこれらの手順を必要に応じて繰り返し、必ず異なるラベル値を指定してください。

10. 「ファイル」メイン・メニューから「すべて保存」を選択します。
これで、マスターと詳細の調整設計が完成しました。

17 通知サービスの使用

この章では、様々なチャネルを使用してBPELプロセスから通知を送信する方法について説明します。BPELプロセスは、電子メール、ボイス・メッセージ、インスタント・メッセージ(IM)またはショート・メッセージ・サービス(SMS)を送信するように設計できます。また、BPELプロセスは、実行時にエンド・ユーザーのチャネル・プリファレンスを考慮して通知チャネルを選択するように設計することもできます。

この章には次の項が含まれます:

- 第17.1項「通知サービスの概要」

- 第17.2項「通知チャネル設定の概要」

- 第17.3項「BPELプロセスの設計での通知チャネルの選択」

- 第17.4項「エンド・ユーザーによる通知チャネル選択の許可」

注意:

FAXとポケットベルの通知チャネルは、11g リリース1(11.1.1)ではサポートされていません。

17.1 通知サービスの概要

様々なシナリオで、プロセス・フローの一環として、電子メール・メッセージや他のタイプの通知をユーザーに送信する必要があります。たとえば、自動処理できない特定タイプの例外には、手動による操作が必要となる場合があります。この場合、BPELプロセスでは、通知サービスを使用して、ユーザーにボイス、IM、SMSまたは電子メールで警告できます。

受信者の連絡先情報(電子メール・アドレス、電話番号など)は、静的な情報(admin@yourcompany.comなど)または実行時に動的に取得する情報のいずれかです。連絡先情報を動的に取得するには、XPath式でアイデンティティ・ストア(LDAP)から取得するか、BPELペイロードから抽出します。

この章では、次の用語を使用します。

- 通知
特定のチャネルを通じてユーザーに送信される非同期メッセージです。このメッセージは、電子メール、ボイス、IMまたはSMSメッセージとして送信できます。

- アクション可能な通知
ユーザーが応答できる通知です。たとえば、ワークフローでは、注文書の承認または却下を担当するマネージャに電子メールを送信します。マネージャは、適切な内容を記載して電子メールに返信することで、リクエストを承認または却下します。

- ヒューマン・タスク電子メール通知レイヤー
電子メール通知を直接BPELプロセスから、または暗黙的にBPELプロセスのヒューマン・タスク部分から送信します。暗黙の通知は、ヒューマン・タスク・エディタによってモデル化されます。

電子メール通知をBPELプロセスから直接送信するには、BPELプロセスにユーザー情報を明示的に指定する必要があります。この情報は、ヒューマン・タスク範囲の内側または外側のいずれかに配置できます。

電子メール通知をBPELプロセスのヒューマン・タスク部分から暗黙的に送信するには、タスクに関するユーザーとの関係(つまり、作成者、割当て先など)に基づいて、受信者のみを指定します。

注意:

暗黙的な通知は、明示的な通知に比べ、より多くのコードのレイヤーを介して処理されます。明示的な通知が正しく機能している場合でも、暗黙的な通知が正しく機能しているとはかぎりません。

- Oracle User Messaging Service
Oracle User Messaging Serviceは、リリース11gの新しい機能です。BPEL通知サービスは、Oracle User Messaging Serviceが提供する基礎となるインフラストラクチャを使用して通知を送信します。

Oracle User Messaging Serviceは、エンド・ユーザーの優先チャネルを実行時に取得するためのユーザー・プリファレンス・インフラストラクチャも提供します。

Oracle User Messaging Serviceの詳細は、第62章「Oracle User Messaging Service」を参照してください。

図17-1は、Oracle User Messaging Serviceインタフェースとサポートされるサービス・タイプを示しています。

図17-1 サービス・インタフェースとサポートされるサービス・タイプ

「図17-1 サービス・インタフェースとサポートされるサービス・タイプ」の説明

通知の詳細は、次の各項を参照してください。

- 第34.2項「ヒューマン・ワークフローからの通知」

- 第29.8項「参加者通知プリファレンスの指定」(ヒューマン・タスク・エディタで電子メール通知を指定する手順)

- 第XI部「Oracle User Messaging Serviceの使用」

17.2 通知チャネル設定の概要

通知の設定は、3種類のユーザー・インタフェース・ツールを使用する多段階のプロセスです。表17-1に、このプロセスの概要、実行するタスク、使用ツールおよび詳細の参照先を示します。

表17-1 通知のタスク

タスク

説明

ユーザー・インタフェース

参照先

SOAコンポジット・アプリケーションの通知を送信するチャネルの選択

通知の送信方法を選択します。

- 電子メール、IM、SMSまたはボイス・チャネルを明示的に選択して構成します。
または、

- 通知チャネルは明示的に選択せずに、通知を送信する必要があることを単に選択します。チャネルは、後でユーザー・メッセージング・プリファレンス・ユーザー・インタフェースで選択します。

Oracle BPELデザイナでBPELプロセス設計者が選択および構成します。

第17.3項「BPELプロセスの設計での通知チャネルの選択」

または、

第17.4項「エンド・ユーザーによる通知チャネル選択の許可」

通知チャネルに対するドライバの構成

ドライバは、SOAコンポジット・アプリケーションをデプロイするOracle WebLogic Serverで構成します。このアクションにより、参加者は通知を受信および転送できます。電子メール、IM、SMSおよびボイス・チャネルについてドライバがサポートされます。

Oracle Enterprise Manager Fusion Middleware Controlで管理者が構成します。

Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド

通知モードおよびヒューマン・ワークフローのアクション可能なアカウントの構成

ヒューマン・ワークフローで通知を使用している場合は、通知モードと、電子メールのアクション可能なアカウントを構成します。

Oracle Enterprise Manager Fusion Middleware Controlで管理者が構成します。

Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド

ユーザー・プリファレンスの指定によるメッセージへのアクセスに使用するデバイスの登録

このアクションにより、ワークフロー参加者は、通知メッセージを受信できます。たとえば、エンド・ユーザーは、電子メール・クライアントを登録し、受信するメッセージ・コンテンツとメッセージの受信に使用するチャネルを指定します。

チャネルが未指定の場合は、電子メールがデフォルトで使用されます。このアプリケーションに設定されているプリファレンスは、特定のエンド・ユーザーのみに適用され、他のユーザーには適用されません。

ユーザー・メッセージング・プリファレンス・ユーザー・インタフェースでエンド・ユーザーが登録します。このインタフェースには、Oracle BPM Worklistで「プリファレンス」→「通知」の順に選択してアクセスできます。

第XI部「Oracle User Messaging Serviceの使用」

17.3 BPELプロセスの設計での通知チャネルの選択

Oracle JDeveloperのコンポーネント・パレットには、電子メール、IM、SMSおよびボイスの通知チャネルがあります。使用する通知チャネルは設計時に厳密に設定できます。たとえば、次の通知チャネルを使用するようにBPELプロセスを設計できます。

- 経費レポートの金額が$1000未満の場合は、電子メール通知チャネルを使用します。

- 経費レポートの金額が$1000以上$2000以下の場合は、SMS通知チャネルを使用します。

- 経費レポートの金額が$2000を超過する場合は、ボイス通知チャネルを使用します。

BPELプロセス設計で通知チャネルを選択する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「Oracle Extensions」を展開します。

2. 通知チャネルをデザイナにドラッグします。

- Email

- IM

- SMS

- Voice

3. 選択した通知チャネルに基づいて、表17-2に示す項を参照してください。

表17-2 通知チャネル

選択内容

参照先

Email

第17.3.1項「電子メール通知チャネルの構成方法」(電子メール通知の構成)

IM

第17.3.2項「IM通知チャネルの構成方法」(IM通知の構成)

SMS

第17.3.3項「SMS通知チャネルの構成方法」(SMS通知の構成)

Voice

第17.3.4項「ボイス通知チャネルの構成方法」(ボイス・メッセージ通知の構成)

注意:

電子メール、ボイス、SMSまたはIMのアクティビティを削除しても、そのアクティビティに統合されているパートナ・リンクは自動的には削除されません。

17.3.1 電子メール通知チャネルの構成方法

「コンポーネント・パレット」から「Email」を選択すると、「Email」ダイアログが表示されます。図17-2に、電子メール通知の必須パラメータを示します。

図17-2 「Email」ダイアログ

「図17-2 「Email」ダイアログ」の説明

電子メール通知チャネルを構成する手順は、次のとおりです。

1. 表17-3の説明に従って、各フィールドに情報を入力します。

注意:

「To」、「Cc」および「Bcc」フィールドでは、複数のアドレスをセミコロン(;)で区切ります。

表17-3 電子メール通知パラメータ

名前

説明

送信元アカウント

このメッセージの送信に使用するアカウント名。デフォルトのアカウントは「デフォルト」という名前になります。この名前は、Oracle Enterprise Manager Fusion Middleware Controlの「ワークフロー通知プロパティ」ページで編集できます。その他のアカウントを追加するには、Oracle Enterprise Manager Fusion Middleware ControlのシステムMBeanブラウザを使用する必要があります。

Oracle Enterprise Manager Fusion Middleware Controlにおけるこのプロパティの編集の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

To

メッセージの配信先となる電子メール・アドレス。これは、次の中のいずれか1つです:

- メッセージの作成時に入力した静的な電子メール・アドレス

- アイデンティティ・サービスを使用して取得した電子メール・アドレス

- ペイロードからの動的アドレス

XPath式ビルダーで、入力から動的に電子メール・アドレスを取得できます。第17.3.5項「電子メール・アドレスと電話番号を動的に選択する方法」を参照してください。

Cc/Bcc

メッセージのコピー先およびブラインド・コピー先となる電子メール・アドレス。「To」アドレスで説明した静的アドレスまたは動的アドレスも使用できます。

返信先

返信に使用する電子メール・アドレス。「To」アドレスで説明した静的アドレスまたは動的アドレスも使用できます。

件名

電子メール・メッセージの件名。プレーン・テキストまたは動的テキストを入力できます。XPath式ビルダーで、指定したプロセス変数のデータに基づいて動的にテキストを設定できます。

本文

電子メール・メッセージのメッセージ本文。「件名」パラメータで説明したプレーン・テキスト、HTMLまたは動的テキストも使用できます。

2. 「OK」をクリックします。
電子メール・メッセージを送信するための通知サービスを起動するBPELフラグメントが作成されます。

3. 実行する他の構成手順は、第17.2項「通知チャネル設定の概要」の表17-1を参照してください。
WebLogic Fusion Order Demoアプリケーションでは、「Scope_NotifyCustomerofCompletion」スコープでemailアクティビティを使用しています。Oracle User Messaging Serviceは、注文の履行時に顧客に電子メールを送信します。「Email」ダイアログでは、次の詳細を指定します。

- 顧客の電子メール・アドレスを指定するXPath式。

bpws:getVariableData('gCustomerInfoVariable','parameters','/ns3:findCustome
rInfoVO1CustomerInfoVOCriteriaResponse/ns3:result/ns2:ConfirmedEmail')

- 注文のIDを指定する手動入力テキストとXPath式の組合せ。

Order with id
<%bpws:getVariableData('gOrderInfoVariable','/ns2:orderInfoVOSDO/ns2:OrderI
d')%> shipped!

- 電子メール・メッセージの本文を指定する手動入力テキストとXPath式の組合せ。

Dear<%bpws:getVariableData('gCustomerInfoVariable','parameters','/ns6:findCusto
merInfoVO1CustomerInfoVOCriteriaResponse/ns6:result/ns4:FirstName')%>,
your order has been shipped.

図17-3に詳細を示します。

図17-3 「Email」ダイアログ

「図17-3 「Email」ダイアログ」の説明

17.3.1.1 電子メール添付ファイルの設定

emailアクティビティを使用して添付ファイルを送信できます。各添付ファイルには、名前、MIMEタイプおよび値の3つの要素があります。添付ファイルごとにこの3つの要素をすべて設定する必要があります。

電子メール・メッセージに添付ファイルを追加する手順は、次のとおりです。

1. 「コンポーネント・パレット」から、通知チャネルとして「Email」を選択します。

2. 「To」、「件名」および「本文」に値を指定します。

3. 「添付ファイル」タブをクリックします。図17-4に詳細を示します。

図17-4 「添付ファイル」タブ

「図17-4 「添付ファイル」タブ」の説明

4. 「追加」アイコンをクリックし、必要な数の添付ファイルを追加します。添付ファイル数に本体部分を含める必要はありません。

5. 「名前」フィールドで、名前を変更するか、デフォルト値Attachmentnumberをそのまま使用します。

6. 「MIMEタイプ」フィールドで、「参照」アイコンをクリックして、MIMEタイプ・コンテンツを追加するための「式ビルダー」ダイアログを起動します。

7. 完了後、「OK」をクリックして「添付ファイル」タブに戻ります。

8. 「値」フィールドで、「参照」アイコンをクリックして、添付ファイルのコンテンツを追加するための「式ビルダー」ダイアログを起動します。

9. 完了後、「OK」をクリックして「添付ファイル」タブに戻ります。
複数のcopyルールを含むassignアクティビティで構成されたBPELフラグメントが生成されます。copyルールの1つによって添付ファイルがコピーされます。

10. 「OK」をクリックします。

11. Oracle BPELデザイナでEmailアクティビティを開きます。
「EmailParamsAssign」という名前のassignアクティビティが表示されます。

12. 「EmailParamsAssign」をダブルクリックします。
図17-5に示すように、EmailParamsAssignの設定を確認します。

図17-5 「EmailParamsAssign」assignアクティビティ

「図17-5 「EmailParamsAssign」assignアクティビティ」の説明

電子メールを使用した添付ファイル送信の詳細は、次のドキュメントを参照してください。

- 付録J「Oracle User Messaging Serviceアプリケーション」

- notification-101のサンプル(Oracle SOA Suiteサンプルで使用できます)

17.3.1.2 電子メール・メッセージ本文のHTMLとしての書式設定

電子メール・メッセージの本文は、プレーン・テキストではなくHTMLとして書式設定できます。このアクションを実行するには、XSLT transformを適用して電子メール本文を生成します。使用するXSLTタグを追加します。XMLSpyなどのツールを使用すると、XSLTの記述とテストが容易になります。MIMEタイプは、string('text/html;charset=UTF-8')である必要があります。

電子メール通知の割当ては、例17-1のようになります。

例17-1 電子メール通知の割当て

<copy>
<from
expression="ora:processXSLT('TransformPositionSummary7.xslt',bpws:
getVariableData('ClientPositionSummary'))"/>
<to variable="varNotificationReq" part="EmailPayload"
query="/EmailPayload/ns9:Content/ns9:ContentBody"/>
</copy>

17.3.1.3 CDATA関数を必要とするメッセージ・コンテンツに対する動的HTMLの使用

emailアクティビティのメッセージ・コンテンツについてHTMLが動的に生成される場合は、(XSLT、ファイルの読取りなどと同様に)そのHTMLをCDATA関数にラップする必要があります。これにより、メッセージ本文のXML/HTMLコンテンツとBPELの内部XMLデータ構造の間の競合が回避されます。

たとえば、例17-2に示すように、emailアクティビティ内のメッセージ・コンテンツに対してappend操作を使用すると仮定します。

例17-2 emailアクティビティ内のメッセージ・コンテンツ

<bpelx:append>
<bpelx:from
expression="ora:processXSLT('xsl/email.xslt',bpws:getVariableData('Variable_1'
))"/>
<bpelx:to variable="varNotificationReq" part="EmailPayload"
query="/EmailPayload/ns1:Content/ns1:ContentBody/ns1:MultiPart/ns1:BodyPart[1]
/ns1:ContentBody"/>
</bpelx:append>

正しく機能するためには、例17-3に示すように、processXSLT()関数の出力をCDATA()関数に渡す必要があります。

例17-3 CDATA()関数

<%ora:toCDATA(xdk:processXSLT('xsl/email.xslt',
bpws:getVariableData('inputVariable','payload','/client:process/client:input')
))%>

17.3.2 IM通知チャネルの構成方法

「コンポーネント・パレット」から「IM」をドラッグすると、「IM」ダイアログが表示されます。図17-6に、IM通知の必須パラメータを示します。

図17-6 「IM」ダイアログ

「図17-6 「IM」ダイアログ」の説明

IM通知チャネルを構成する手順は、次のとおりです。

1. 表17-4の説明に従って、各フィールドに情報を入力します。

表17-4 IM通知パラメータ

名前

説明

To

メッセージの配信先となるIMアドレス。アドレスを手動で入力するか、「XPath式ビルダー」アイコンをクリックして「式ビルダー」ダイアログを表示し、アカウントを動的に入力します。

本文

IMメッセージ本文。プレーン・テキストまたは動的テキストを入力できます。XPath式ビルダーで、指定したプロセス変数のデータに基づいて動的にテキストを設定できます。

2. 「OK」をクリックします。
IM通知のための通知サービスを起動するBPELフラグメントが作成されます。

3. 実行する他の構成手順は、第17.2項「通知チャネル設定の概要」の表17-1を参照してください。

17.3.3 SMS通知チャネルの構成方法

「コンポーネント・パレット」から「SMS」を選択すると、「SMS」ダイアログが表示されます。図17-7に、SMS通知の必須パラメータを示します。

図17-7 「SMS」ダイアログ

「図17-7 「SMS」ダイアログ」の説明

SMS通知チャネルを構成する手順は、次のとおりです。

1. 表17-5の説明に従って、各フィールドに情報を入力します。

表17-5 SMS通知パラメータ

名前

説明

送信元番号

SMS通知の送信元となる電話番号。メッセージ作成時に入力した静的な電話番号、またはペイロードに基づく動的な電話番号を使用できます。XPath式ビルダーで、入力から動的に電話番号を取得できます。第17.3.5項「電子メール・アドレスと電話番号を動的に選択する方法」を参照してください。

電話番号

メッセージの配信先電話番号の指定方法を選択します。

- メッセージの作成時に入力した静的な電話番号。

- アイデンティティ・サービスを使用して取得した電話番号。

- ペイロードからの動的な電話番号。XPath式ビルダーで、入力から動的に電話番号を取得できます。

件名

SMSメッセージの件名。プレーン・テキストまたは動的テキストを入力できます。XPath式ビルダーで、指定したプロセス変数のデータに基づいて動的にテキストを設定できます。

本文

SMSメッセージ本文。プレーン・テキストを使用する必要があります。「件名」パラメータで説明したプレーン・テキストまたは動的テキストを使用できます。

2. 「OK」をクリックします。
SMS通知のための通知サービスを起動するBPELフラグメントが作成されます。

3. 実行する他の構成手順は、第17.2項「通知チャネル設定の概要」の表17-1を参照してください。

17.3.4 ボイス通知チャネルの構成方法

「コンポーネント・パレット」から「Voice」を選択すると、「Voice」ダイアログが表示されます。図17-8は、ボイス通知の必須パラメータを示しています。

図17-8 「Voice」ダイアログ

「図17-8 「Voice」ダイアログ」の説明

ボイス通知チャネルを構成する手順は、次のとおりです。

1. 表17-6の説明に従って、各フィールドに情報を入力します。

表17-6 ボイス通知パラメータ

名前

説明

電話番号

メッセージの配信先となる電話番号。次のいずれかの方法で番号を指定します。

- メッセージの作成時に入力した静的な電話番号

- アイデンティティ・サービスを使用して取得した電話番号

- ペイロードからの動的な電話番号

XPath式ビルダーで、入力から動的に電話番号を取得できます。

本文

メッセージ本文。プレーン・テキスト、XMLまたは動的テキストを入力できます。XPath式ビルダーで、指定したプロセス変数のデータに基づいて動的にテキストを設定できます。

2. 「OK」をクリックします。
ボイス通知のための通知サービスを起動するBPELフラグメントが作成されます。

3. 実行する他の構成手順は、第17.2項「通知チャネル設定の概要」の表17-1を参照してください。

17.3.5 電子メール・アドレスと電話番号を動的に選択する方法

特定のプロセス変数に基づいて動的に電子メール・アドレスまたは電話番号を設定できます。また、アイデンティティ・サービス用の組込みXPath関数を使用して、特定ユーザーの連絡先情報をルックアップすることも可能です。

- 電子メール・アドレスまたは電話番号をペイロードから直接取得するには、次のXPath式を使用します。

bpws:getVariableData('<variable name>', '<part>','input_xpath_to_get_an_address')

たとえば、XPath /client/BPELProcessRequest/client/mailに基づいて変数inputVariableおよびパートpayloadから電子メール・アドレスを取得するには、次のようにします。

<%bpws:getVariableData('inputVariable','payload','/client:BPELProcessRequest/
client:email')%>

XPath式ビルダーを使用して関数を選択し、入力変数からアドレスを取得するXPath式を入力できます。

- 電子メール・アドレスまたは電話番号を、基礎となるアイデンティティ・ストア(LDAP)から動的に取得するには、次のXPath式を使用します。

ids:getUserProperty(userName, attributeName[, realmName])

最初の引数は、ユーザーIDに評価されます。2番目の引数はプロパティ名です。3番目の引数はレルム名です。表17-7に、このXPath関数で使用できるプロパティ名を示します。

表17-7 動的ユーザーXPath関数のプロパティ

プロパティ名

説明

mail

ユーザーの電子メール・アドレスのルックアップ。

telephoneNumber

ユーザーの電話番号のルックアップ。

mobile

ユーザーの携帯電話番号のルックアップ。

homephone

ユーザーの自宅電話番号のルックアップ。

次の例では、変数inputVariable、パートpayloadおよび問合せ/client:BPELProcessRequest/client:userIDで識別されるユーザーの電子メール・アドレスを取得します。

ids:getUserProperty(bpws:getVariableData('inputVariable',
'payload','/client:BPELProcessRequest/client:userid'), 'mail')

realmNameが未指定の場合は、デフォルトのレルム名が使用されます。たとえば、デフォルトのレルム名がjazn.comの場合、次のXPath式ではjazn.comレルム内でユーザーが検索されます。

ids:getUserProperty('jcooper', 'mail');

次のXPath式は、前述の式と同じ機能を提供します。ただし、この場合はレルム名jazn.comが明示的に指定されています。

ids:getUserProperty('jcooper', 'mail', 'jazn.com');

17.3.6 ユーザー・ディレクトリの参照による通知受信者の選択方法

通知送信先となるOracle JDeveloperのユーザーやグループは、Oracle BPEL Process Managerで使用するように構成されたユーザー・ディレクトリ(たとえば、Oracle Internet Directory)を参照することで選択できます。次のフィールドの右側にある「検索」アイコンをクリックして、「アイデンティティ・ルックアップ」ダイアログを開きます。

- 「Email」および「IM」ダイアログの「To」フィールド

- 「SMS」および「Voice」ダイアログの「電話番号」フィールド

「アイデンティティ・ルックアップ」ダイアログの使用方法の詳細は、第34章「ヒューマン・ワークフロー・サービスの概要」を参照してください。

17.4 エンド・ユーザーによる通知チャネル選択の許可

BPELプロセスの設計では、設計時に通知チャネルを明示的に選択せずに、通知を送信する必要性のみを示すことができます。通知の送信に使用するチャネルは、Oracle User Messaging Serviceのユーザー・メッセージング・プリファレンス・ユーザー・インタフェースでエンド・ユーザーが定義したプリファレンスに基づいて、実行時に決定されます。したがって、通知チャネルの選択権は、Oracle BPELデザイナのBPELプロセスからエンド・ユーザーに移動します。エンド・ユーザーが優先チャネルまたはルールを選択していない場合、そのユーザーへの通知の送信には、デフォルトで電子メールが使用されます。使用するチャネルを誰が選択するかに関係なく、チャネルの使用は、管理者がOracle Enterprise Manager Fusion Middleware ControlのOracle User Messaging Serviceセクションで実行したドライバのインストールと構成に基づいています。

たとえば、エンド・ユーザーは、次のように各自のプリファレンスを設定できます。

- 経費レポートの金額が$153未満の場合は、電子メール通知を受け取ります。

- 経費レポートの金額が$153以上$3678以下の場合は、SMS通知を受け取ります。

- 経費レポートの金額が$3678を超過する場合は、ボイス通知を受け取ります。

注意:

送信通知のユーザー・プリファレンスは、ヒューマン・タスク・エディタのヒューマン・ワークフローで設定することもできます。これらのプリファレンスは、「通知設定」セクションの「通知フィルタ」で設定します。これらのプリファレンスは、タスクでルールを評価する際に使用されます。詳細は、第29.8.8項「電子メール通知によるタスクの添付ファイルの送信方法」を参照してください。

ユーザー・メッセージング・プリファレンス・ユーザー・インタフェースの詳細は、第67章「ユーザー・メッセージング・プリファレンス」を参照してください。

Oracle Enterprise Manager Fusion Middleware ControlでOracle User Messaging Serviceを構成する方法の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

17.4.1 エンド・ユーザーによる通知チャネルの選択を許可する方法

通知チャネルの選択をエンド・ユーザーに許可する手順は、次のとおりです。

1. 「コンポーネント・パレット」のリストから、「BPEL」を選択します。

2. 「BPELアクティビティとコンポーネント」を展開します。

3. 「コンポーネント・パレット」から、デザイナにuser notificationアクティビティをドラッグします。図17-9に、ユーザー通知の必須パラメータを示します。

図17-9 「User Notification」ダイアログ

「図17-9 「User Notification」ダイアログ」の説明

4. 表17-8の説明に従って、各フィールドに情報を入力します。

表17-8 ユーザー通知パラメータ

名前

説明

To

次のいずれかの方法で、この通知メッセージの受信者に有効なユーザーを入力します。

- ユーザーを手動で入力します。

- 「検索」アイコンをクリックしてダイアログを表示し、アイデンティティ・サービスを介して構成されたユーザーを選択します。アイデンティティ・サービスを使用すると、ユーザー・プロパティ、ロールおよびグループ・メンバーシップのルックアップが可能になります。

- 「XPath式ビルダー」アイコンをクリックして「式ビルダー」ダイアログを表示し、ユーザーを動的に入力します。

注意: アドレスではなくユーザー名(jcooperなど)を指定する必要があります。

件名

メッセージ名を入力するか、「XPath式ビルダー」アイコンをクリックして「式ビルダー」ダイアログを表示し、件名を動的に入力します。電子メール経由で通知を送信する場合は、実行時にこのフィールドが使用されます。ボイス、SMSまたはIMチャネル経由で通知を送信する場合、このフィールドは無視されます。

通知メッセージ

通知メッセージを入力するか、「XPath式ビルダー」アイコンをクリックして「式ビルダー」ダイアログを表示し、送信するメッセージを動的に入力します。

5. 「適用」をクリックします。

17.4.1.1 通知のヘッダーの作成および送信方法

「User Notification」ダイアログの「詳細」タブを使用すると、ヘッダーと名前の情報を作成して送信できます。この情報は、エンド・ユーザーが、通知を受信するための独自のプリファレンス・ルールを作成する際に役立ちます。例:

- Oracle BPELデザイナによって、「一般」タブで、jcooperおよびjsteinというユーザーが指定されます。

- Oracle BPELデザイナによって、「詳細」タブで、次のヘッダーと名前の情報が作成されます。

- Amount = payload->salary

- Application = HR-Application

- 管理者は、Oracle Enterprise Manager Fusion Middleware Controlで、プロセスをデプロイし、様々なチャネル・ドライバを構成します。

- エンド・ユーザーjcooperは、ユーザー・メッセージング・プリファレンス・ユーザー・インタフェースで、次のプリファレンス・ルールを作成します。

'Email if Amount < 30000" and "SMS if Amount is between 30000 and 100000' and
"Voice if Amount > 100000"

- エンド・ユーザーjsteinは、ユーザー・メッセージング・プリファレンス・ユーザー・インタフェースで、次のプリファレンス・ルールを作成します。

If "Application == HR-Application" and Amount > 2000000" send Voice

1. 各エンド・ユーザーが独自のプリファレンス・ルールを作成できるように、ヘッダーと名前の情報を作成して送信する場合は、「詳細」をクリックします。
図17-10に、「User Notification」ダイアログの「詳細」タブを示します。

図17-10 ユーザー通知の詳細パラメータ

「図17-10 ユーザー通知の詳細パラメータ」の説明

2. 「追加」アイコンをクリックし、「ヘッダー」列と「名前」列に行を追加します。

3. 値を選択するためのリストを表示するには、「ヘッダー」列でフィールドをクリックします。それ以外の場合は、手動で値を入力します。

4. 「名前」列に、値を入力します。

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

18 Oracle BPEL Process Managerセンサーの使用

この章では、センサーを使用して、BPELプロセスでの実行時に監視するBPELアクティビティ、変数およびフォルトを選択する方法について説明します。また、センサー・アクションを作成して、エンドポイントにセンサーの値をパブリッシュする方法についても説明します。

この章には次の項が含まれます:

- 第18.1項「Oracle BPEL Process Managerセンサーの概要」

- 第18.2項「Oracle JDeveloperでのセンサーとセンサー・アクションの構成」

- 第18.3項「Oracle Enterprise Manager Fusion Middleware Controlコンソールでのセンサーの定義とセンサー・アクション定義の表示」

Oracle BPEL Process Managerセンサーの詳細は、次の各項を参照してください。

- Oracle BPEL Process Managerでセンサー・アクションを作成し、センサー・データをOracle Business Activity Monitoring(BAM)サーバーのデータ・オブジェクトとしてパブリッシュする方法については、第53.7項「Oracle BAMセンサー・アクションを使用したBPELセンサーの統合」を参照してください。

- 付録D「センサー・パブリック・ビューとセンサー・アクションXSDの理解」

コンポジット・センサーの詳細は、第50章「コンポジット・センサーの定義」を参照してください。

18.1 Oracle BPEL Process Managerセンサーの概要

センサーは、BPELプロセス・インスタンスのライフ・サイクル全体を通じて特定のイベントに対する関心を宣言するために使用されます。ビジネス・プロセスでは、このようなイベントとして、特定のアクティビティのアクティブ化と完了、またはビジネス・プロセス内の変数値の変更があります。

センサーがトリガーされると、特定のセンサー値が作成されます。たとえば、センサーでBPELスコープの完了に対する関心を宣言した場合、センサー値は、BPELスコープの名前とアクティビティの完了時点のタイムスタンプ値で構成されます。センサー値でBPELプロセス変数に対する関心を宣言している場合、そのセンサー値は次のもので構成されます。

- 変数が変更された時点でのその変数の値

- 変数が変更されたときのタイムスタンプ

- BPEL変数を変更したアクティビティ名およびタイプ

センサー値のデータ・フォーマットは、XMLスキーマを使用して正規化され、適切に定義されます。

センサー・アクションは、センサー値の処理方法に関する指示です。Oracle BPEL Process Managerによってセンサーがトリガーされると、そのセンサーに新しいセンサー値が作成されます。その後、そのセンサーに関連付けられているすべてのセンサー・アクションが実行されます。通常、センサー・アクションは、センサー値をデータベースに保持するか、正規化されたセンサー値データをJMSキューまたはトピックに送信します。Oracle BAMと統合すると、センサー値をOracle BAMアダプタに送信できます。

Oracle JDeveloperを使用するか、センサー構成ファイルを手動で指定することで、次のタイプのセンサーを定義できます。

- アクティビティ・センサー
アクティビティ・センサーは、BPELプロセス内のアクティビティの実行を監視します。たとえば、invokeアクティビティの実行時間や、このアクティビティによるスコープ完了までの時間を監視できます。アクティビティ・センサーに加え、アクティビティの変数も監視できます。

- 変数センサー
変数センサーは、BPELプロセスの変数(または1つの変数の複数部分)を監視する際に使用します。たとえば、変数センサーで、BPELプロセスの入力データと出力データを監視できます。

- フォルト・センサー
フォルト・センサーは、BPELフォルトを監視する際に使用します。

センサーは、通常、アクティビティ、フォルトおよび変数のBPELモデリングの一環として追加または編集します。

これらのセンサーは、次のパブリックSQLビューを使用して公開されます。

- BPEL_ACTIVITY_SENSOR_VALUES

- BPEL_FAULT_SENSOR_VALUES

- BPEL_VARIABLE_SENSOR_VALUES

これらのビューをBPEL_PROCESS_INSTANCESビューと結合し、センサー値と、センサー値を作成したBPELプロセス・インスタンスを関連付けることができます。詳細は、付録D「センサー・パブリック・ビューとセンサー・アクションXSDの理解」を参照してください。

Oracle JDeveloperでセンサーをモデル化すると、BPELプロセス・アーカイブの一部として、次の2つの新規ファイルが作成されます。

- bpel_process_name_sensor.xml
BPELプロセスのセンサー定義が格納されます。

- bpel_process_name_sensorAction.xml
BPELプロセスのセンサー・アクション定義が格納されます。

これらのファイルの作成方法の詳細は、第18.2.2項「アクティビティ、変数、フォルトの各センサーの構成方法」および第18.2.3項「センサー・アクションの構成方法」を参照してください。

BPELプロセスにセンサーを定義した後は、センサー・アクションを構成して、そのセンサー・データを指定された宛先にパブリッシュする必要があります。センサーにセンサー・アクションが定義されていない場合、実行時は何も行われません。

センサー・アクションには、次の情報が必要です。

- 名前

- パブリッシュ・タイプ
パブリッシュ・タイプは、センサー・データの送信が必要な宛先を指定します。次の宛先にセンサー・データをパブリッシュできます。

- データベース
センサー・データをデータベースのレポート・スキーマにパブリッシュします。これにより、センサー・データは、SQLを使用して問い合せることができます。

- JMSキュー
センサー・データをJMSキューにパブリッシュします。XMLデータは、Sensor.xsdファイルに従って転送されます。このファイルは、Oracle JDeveloperとともにJDEV_HOME\jdeveloper\integration\seed\soa\shared\bpelディレクトリに格納されます。

- JMSトピック
センサー・データをJMSトピックにパブリッシュします。XMLデータは、JMSキューで使用されるファイルと同じSensor.xsdファイルに従って転送されます。

- カスタム
データをカスタムJavaクラスにパブリッシュします。

- JMSアダプタ
JMSアダプタは、リモート・キューやトピックおよび様々なJMSプロバイダへのパブリッシュに使用します。「JMSキュー」および「JMSトピック」パブリッシュ・タイプでは、ローカルJMS宛先にのみパブリッシュします。

- センサーのリスト
センサー・アクションに対応するセンサーです。

Oracle BAMセンサーは、Oracle BPEL Process ManagerからOracle BAMに情報およびイベントをパブリッシュします。Oracle BAMでは、アプリケーションのエンドツーエンド監視用の豊富な機能を備えたリアルタイム・ダッシュボードにデータを表示できます。詳細は、第53.7項「Oracle BAMセンサー・アクションを使用したBPELセンサーの統合」を参照してください。

18.2 Oracle JDeveloperでのセンサーとセンサー・アクションの構成

Oracle JDeveloperでは、センサー・アクションとセンサーは、「監視」ビューの一部として表示されます。

18.2.1 センサーとセンサー・アクションへのアクセス方法

センサーとセンサー・アクションにアクセスする手順は、次のとおりです。

1. 図18-1に示すように、Oracle BPELデザイナの上部にある「監視」を選択します。

図18-1 「監視」ビュー

「図18-1 「監視」ビュー」の説明

図18-2は、「構造」ウィンドウのセンサー・アクションとセンサーを示しています。

図18-2 Oracle JDeveloperに表示されたセンサーとセンサー・アクション

「図18-2 Oracle JDeveloperに表示されたセンサーとセンサー・アクション」の説明

センサーは、通常、アクティビティ、フォルトおよび変数のBPELモデリングの一環として追加または編集します。

2. 「センサー・アクション」フォルダを右クリックし、「作成」→「センサー・アクション」の順に選択し、センサー・アクションを追加します。

3. 次の手順に従って、アクティビティ・センサー、変数センサーまたはフォルト・センサーを追加します。

1. 「センサー」フォルダを開きます。

2. 適切な「アクティビティ」、「変数」または「フォルト」サブフォルダを右クリックします。

3. 「作成」をクリックします。

4. アクティビティを右クリックして「作成」→「センサー」の順に選択し、センサーを個々のアクティビティに追加します。図18-3に詳細を示します。

図18-3 アクティビティ・センサーの作成

「図18-3 アクティビティ・センサーの作成」の説明

次の各項では、センサーとセンサー・アクションの構成方法について説明します。

18.2.2 アクティビティ、変数、フォルトの各センサーの構成方法

この項では、アクティビティ・センサー、変数センサーおよびフォルト・センサーを構成する方法について説明します。

アクティビティ・センサーを構成する手順は、次のとおりです。

ここでは、融資フロー・アプリケーションを監視して、次の情報を把握すると仮定します。

- GetCreditRatingというスコープの開始時点

- このスコープの完了時点

- 完了時点での顧客の信用格付け

この問題を解決するには、図18-4に示すように、Oracle BPELデザイナでGetCreditRatingスコープのアクティビティ・センサーを作成します。

1. Oracle BPELデザイナの上部にある「監視」を選択します。

2. 「構造」ウィンドウで、「センサー」フォルダを開きます。

3. 「アクティビティ」を右クリックし、「作成」を選択します。

4. 「アクティビティ名」フィールドの右側で、「参照」アイコンをクリックして、センサーを作成するアクティビティを選択します。これは必須フィールドです。

図18-4 アクティビティ・センサーの作成

「図18-4 アクティビティ・センサーの作成」の説明

センサーが関連付けられたアクティビティは、Oracle BPELデザイナでは拡大鏡で識別されます。

センサーの起動タイミングは、図18-4に示す「評価時間」リストを使用して制御します。

5. 次の項目から選択します。

- すべて
アクティブ化、完了、フォルト、補正および再試行の各フェーズを通して監視します。

- アクティブ化
センサーは、アクティビティの実行直前に起動されます。

- 完了
センサーは、アクティビティの実行直後に起動されます。

- フォルト
センサーは、アクティビティの実行中にフォルトが発生した場合に起動されます。この値は、単純なアクティビティを監視するセンサーにのみ選択してください。

- 補正
センサーは、関連するscopeアクティビティが補正されたときに起動されます。この値は、スコープを監視するセンサーにのみ選択してください。

- 再試行
センサーは、関連するinvokeアクティビティが再試行されたときに起動されます。

bpel_process_name_sensor.xmlファイルに新規エントリが作成されます。

<sensor sensorName="CreditRatingSensor"

classname="oracle.tip.pc.services.reports.dca.agents.BpelActivitySensorAgent"
kind="activity"
target="GetCreditRating">

<activityConfig evalTime="all">
<variable outputNamespace="http://www.w3.org/2001/XMLSchema"
outputDataType="int"
target="$crOutput/payload//services:rating"/>
</activityConfig>
</sensor>

6. アクティビティで変数センサーを作成するには、「アクティビティ変数センサー」セクションで「追加」アイコンをクリックします。これはオプション・フィールドです。

7. アクティビティに対するセンサー・アクションを追加するには、「センサー・アクション」セクションで「追加」アイコンをクリックします。詳細は、第18.2.3項「センサー・アクションの構成方法」を参照してください。

8. 「OK」をクリックします。

変数センサーを構成する手順は、次のとおりです。

すべての着信融資申請を記録する場合、変数センサーを作成できます。

1. Oracle BPELデザイナの上部にある「監視」を選択します。

2. 「構造」ウィンドウで、「センサー」フォルダを開きます。

3. 「変数」を右クリックし、「作成」を選択します。

4. 図18-5に示すように、「ターゲット」フィールドの右側にある「編集」アイコンをクリックして、変数に変数センサー(この例ではinputという名前)を作成します。

図18-5 変数センサーの作成

「図18-5 変数センサーの作成」の説明

「ターゲット」フィールドの選択内容に基づいて、「出力ネームスペース」フィールドと「出力データ型」フィールドは自動的に入力されます。

bpel_process_name_sensor.xmlファイルに新規エントリが作成されます。

<sensor sensorName="LoanApplicationSensor"
classname="oracle.tip.pc.services.reports.dca.agents.BpelVariableSensorAgent"
kind="variable"
target="$input/payload">
<variableConfig outputNamespace="http://www.autoloan.com/ns/autoloan"
outputDataType="loanApplication"/>
</sensor>

フォルト・センサーを構成する手順は、次のとおりです。

フォルトを監視(この例ではアイデンティティ・サービスから)する場合、フォルト・センサーを作成できます。

1. Oracle BPELデザイナの上部にある「監視」を選択します。

2. 「構造」ウィンドウで、「センサー」フォルダを開きます。

3. 「フォルト」を右クリックし、「作成」を選択します。

4. 図18-6に示すように、「ネームスペース」 フィールドの上にある「参照」アイコンをクリックして、フォルト・センサーを作成します。

図18-6 フォルト・センサーの作成

「図18-6 フォルト・センサーの作成」の説明

選択内容に基づいて、「ネームスペース」フィールドと「ローカル・パート」フィールドは自動的に入力されます。

5. フォルトに対するセンサー・アクションを追加するには、「センサー・アクション」セクションで「追加」アイコンをクリックします。詳細は、第18.2.3項「センサー・アクションの構成方法」を参照してください。

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

bpel_process_name_sensor.xmlファイルに新規エントリが作成されます。

<sensor sensorName="IdentityServiceFault"
classname="oracle.tip.pc.services.reports.dca.agents.BpelFaultSensorAgent"
kind="fault"
target="is:identityServiceFault">
<faultConfig/>
</sensor>

18.2.3 センサー・アクションの構成方法

センサーを作成する場合は、実行時に監視するアクティビティ、変数およびフォルトを識別します。エンドポイントにセンサーの値をパブリッシュする場合(たとえば、図18-5で作成したLoanApplicationSensor変数センサーのデータをJMSキューにパブリッシュする場合)は、図18-7に示すように、センサー・アクションを作成し、LoanApplicationSensor変数に関連付けます。

センサー・アクションを構成する手順は、次のとおりです。

1. Oracle BPELデザイナの上部にある「監視」を選択します。

2. 「構造」ウィンドウで、「センサー・アクション」フォルダを右クリックします。

3. 「作成」→「センサー・アクション」の順に選択します。

4. 表18-1に記載されている詳細を入力します。

表18-1 「センサー・アクション」ダイアログ

フィールド

説明

名前

名前を入力するか、デフォルト名をそのまま使用します。

パブリッシュ・タイプ

センサー・データをパブリッシュする宛先を選択します。詳細は、第18.1項「Oracle BPEL Process Managerセンサーの概要」を参照してください。

JMS接続ファクトリ

パブリッシュ・タイプが「JMSキュー」、「JMSトピック」または「JMSアダプタ」の場合は、接続ファクトリを指定します。

パブリッシュ・ターゲット

パブリッシュ・タイプが「JMSキュー」、「JMSトピック」、「カスタム」または「JMSアダプタ」の場合は、パブリッシュ・ターゲットを指定する必要があります。パブリッシュ・ターゲットは、指定されたパブリッシュ・タイプによって異なる内容を表します。

- パブリッシュ・タイプがデータベースの場合、このフィールドは空白のままになります。

- パブリッシュ・タイプが「JMSキュー」、「JMSトピック」または「JMSアダプタ」の場合は、JMS宛先のJNDI名を表します。

- パブリッシュ・タイプが「カスタム」の場合は、完全修飾されたJavaクラス名を表します。

フィルタ

フィルタ・ロジックはブール式で入力します。フィルタを使用すると、特定の範囲内のセンサー・データを監視できます。構成済のフィルタの例については、図18-9を参照してください。

有効化

センサー・アクションを無効にする場合、このチェック・ボックスの選択を解除します。デフォルトでは、有効になっています。このチェック・ボックスの選択を解除して、センサー・アクションを無効にすると、センサー・アクションでデータがパブリッシュされません。

図18-7 センサー・アクションの作成

「図18-7 センサー・アクションの作成」の説明

bpel_process_name_sensorAction.xmlファイルに新規エントリが作成されます。

<action name="BAMFeed"
enabled="true"
publishType="JMSQueue"
publishTarget="jms/bamTopic">
<sensorName>LoanApplicationSensor</sensorName>
<property name=“JMSConnectionFactory“>
weblogic.jms.ConnectionFactory
</property>
</action>

注意:

「センサー・アクション」ダイアログの「フィルタ」フィールドには、<(より小さい)記号は指定できません。指定すると、Oracle JDeveloperにより、bpel_process_name_sensorAction.xmlファイルの<記号が&lt;に変換されます。filename_sensorAction.xmlファイルを直接編集して<記号を指定することもできません。この操作ではエラーが発生します。

5. LoanApplicationSensorおよびCreditRatingSensorの値をデータベースのレポート・スキーマにパブリッシュする場合は、図18-8に示すように、追加のセンサー・アクションを作成し、CreditRatingSensorとLoanApplicationSensorの両方に関連付けます。

図18-8 追加のセンサー・アクションの作成

「図18-8 追加のセンサー・アクションの作成」の説明

bpel_process_name_sensorAction.xmlファイルに新規エントリが作成されます。

<action name="PersistingAction"
enabled="true"
publishType="BPELReportsSchema">
<sensorName>LoanApplicationSensor</sensorName>
<sensorName>CreditRatingSensor</sensorName>
</action

複数のエンドポイントに対して1つのセンサーのデータをパブリッシュできます。前述の2つのコード例では、LoanApplicationSensorのデータがJMSキューとデータベース・レポート・スキーマの両方にパブリッシュされました。

6. 融資金額が$100,000を超える融資申請を監視する場合は、図18-9に示すように、フィルタ付きのセンサー・アクションを作成します。フィルタ問合せの設計時の検証はありません。問合せが正しいことを確認する必要があります。

図18-9 フィルタ付きのセンサー・アクションの作成

「図18-9 フィルタ付きのセンサー・アクションの作成」の説明

bpel_process_name_sensorAction.xmlファイルに新規エントリが作成されます。

<action name="BigMoneyBAMAction"
enabled='true'
filter="boolean(/s:actionData/s:payload
/s:variableData/s:data
/autoloan:loanAmount > 100000)"
publishType="JMSQueue"
publishTarget="jms/bigMoneyQueue">
<sensorName>LoanApplicationSensor</sensorName>
<property name=“JMSConnectionFactory“>
weblogic.jms.ConnectionFactory
</property>
</action>

注意:

- bpel_process_name_sensorAction.xml構成ファイルでアクション・フィルタを構成する必要があるすべてのネームスペースを指定する必要があります。たとえば、ネームスペースが"http://myCustomer"のcustomer XMLスキーマ要素があり、customer age要素に対してフィルタを作成すると仮定します。したがって、フィルタでネームスペースを使用する前に、ファイルで"http:/myCustomer"のネームスペースを宣言する必要があります。宣言しない場合、有効な問合せを作成できません。ファイルの属性宣言部分にxmlns:ns1="http://myCustomer"を追加します。これで、問合せで..../ns1:customer/ns1:age/...を使用できるようになります。

- フィルタは、ブール型のXPath式として指定する必要があります。

7. 組込みのパブリッシュ・タイプ(「データベース」、「JMSキュー」、「JMSトピック」および「JMSアダプタ」)では対応できない特殊なセンサー・アクション要件がある場合は、図18-10に示すように、「カスタム」パブリッシュ・タイプでセンサー・アクションを作成できます。「パブリッシュ・ターゲット」フィールド内の名前は、実装する必要がある完全修飾Javaクラス名を示します。詳細は、第18.2.5項「カスタム・データ・パブリッシャの作成方法」を参照してください。

図18-10 「カスタム」パブリッシュ・タイプの使用

「図18-10 「カスタム」パブリッシュ・タイプの使用」の説明

18.2.4 リモート・トピックおよびキューへのパブリッシュ方法

「JMSキュー」および「JMSトピック」パブリッシュ・タイプでは、ローカルJMS宛先にのみパブリッシュします。センサー・データをリモート・トピックおよびキューにパブリッシュする場合は、図18-11に示すように、「JMSアダプタ」パブリッシュ・タイプを使用します。

図18-11 「JMSアダプタ」パブリッシュ・タイプの使用

「図18-11 「JMSアダプタ」パブリッシュ・タイプの使用」の説明

JMSアダプタでは、センサー・データをリモート・トピックおよびキューにパブリッシュでき、さらに、次のように様々なJMSプロバイダがサポートされます。

- サード・パーティJMSプロバイダ(Tibco JMS、IBM WebSphere MQ JMS、SonicMQなど)

- Oracle Enterprise Messaging Service(OEMS)プロバイダ(メモリー/ファイル、データベースなど)

「JMSアダプタ」パブリッシュ・タイプを選択した場合は、weblogic-ra.xmlファイルにエントリを作成する必要があります。このファイルはOracle WebLogic Server管理コンソールでの編集を介して更新されます。このコンソールで作成されるJMSコネクション・ファクトリ(プール)の各エントリは、weblogic-ra.xmlの1つのJNDIエントリに相当します。「センサー・アクション」ダイアログは、JMSコネクション・ファクトリ(プール)の作成時に選択したJNDI名で更新してください。

JMSアダプタの詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

18.2.5 カスタム・データ・パブリッシャの作成方法

カスタム・データ・パブリッシャを作成するには、次の各手順を実行します。

カスタム・データ・パブリッシャを作成する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、BPELプロジェクトをダブルクリックします。
「プロジェクト・プロパティ」ダイアログが表示されます。

2. 「ライブラリとクラスパス」をクリックします。

3. 次のファイルを参照して選択します。

SOA_ORACLE_HOME/lib/java/shared/oracle.soainfra.common/11.1.1/orabpel.jar

図18-12に詳細を示します。

図18-12 「プロジェクト・プロパティ」ダイアログ

「図18-12 「プロジェクト・プロパティ」ダイアログ」の説明

4. 新規Javaクラスを作成します。
パッケージとクラス名は、センサー・アクションのパブリッシュ・ターゲット名と一致している必要があります。

5. com.oracle.bpel.sensor.DataPublisherインタフェースを実装します。
これにより、ソース・ファイルが更新され、DataPublisherインタフェースのメソッドとimport文が組み込まれます。

6. Oracle JDeveloperを使用して、図18-13のサンプル・カスタム・データ・パブリッシャ・クラスに示すように、DataPublisherインタフェースのpublishメソッドを実装します。

図18-13 カスタム・データ・パブリッシャ・クラス

「図18-13 カスタム・データ・パブリッシャ・クラス」の説明

7. クラスは必ず正常にコンパイルされる必要があります。
次回BPELプロセスをデプロイする際に、JavaクラスがSOAアーカイブ(SAR)に追加され、デプロイされます。

注意:

データ・パブリッシャの実装に必要な追加のJavaライブラリがクラスパスに存在していることが必要です。

Oracle BPEL Process Managerでは、複数のプロセス・インスタンスが同時に実行される可能性があるため、データ・パブリッシャ内のコードをスレッド・セーフにするか、適切な同期ブロックを追加する必要があります。高いスループットを確保するには、同期が必要な共有データ・オブジェクトを使用しないでください。

18.2.6 composite.xmlへのセンサーとセンサー・アクションの登録方法

Oracle JDeveloperは、composite.xmlファイルを自動的に更新し、例18-1に示すように、センサーとセンサー・アクションの適切なプロパティを取り込みます。

例18-1 composite.xmlファイル

<composite name="JMSQFComposite" applicationName="JMSQueueFilterApp"
revision="1.0" label="2007-04-02_14-41-31_553" mode="active" state="on">
<import namespace="http://xmlns.oracle.com/JMSQueueFilter"
location="JMSQueueFilter.wsdl" importType="wsdl"/>
<service name="client">
<interface.wsdl interface="http://xmlns.oracle.com/
JMSQueueFilter#wsdl.interface(JMSQueueFilter)"/>
<binding.ws
port="http://xmlns.oracle.com/JMSQueueFilter#wsdl.endpoint(client/
JMSQueueFilter_pt)"/>
</service>
<component name="JMSQueueFilter">
<implementation.bpel src="JMSQueueFilter.bpel"/>
<property name="configuration.sensorLocation" type="xs:string"
many="false">JMSQueueFilter_sensor.xml</property>
<property name="configuration.sensorActionLocation" type="xs:string"
many="false">JMSQueueFilter_sensorAction.xml</property>
</component>
<wire>
<source.uri>client</source.uri>
<target.uri>JMSQueueFilter/client</target.uri>
</wire>
</composite>

例18-1に示すように、追加のプロパティは、<property name= ...>を使用して指定できます。

18.3 Oracle Enterprise Manager Fusion Middleware Controlコンソールでのセンサーの定義とセンサー・アクション定義の表示

Oracle Enterprise Manager Fusion Middleware Controlでは、センサーのメタデータ、センサー・アクション、およびプロセス実行の一部として作成されたセンサー・データの表示をサポートしています。

詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。

注意:

- このリリースでは、Oracle BAMセンサー・アクションはOracle Enterprise Manager Fusion Middleware Controlに表示されません。

- 関連するデータベース・センサー・アクションがあるセンサーのみが、Oracle Enterprise Manager Fusion Middleware Controlに表示されます。JMSキュー、JMSトピック、リモートJMSまたはカスタム・センサー・アクションに関連するセンサーは表示されません。

第III部

Oracle Mediatorサービス・コンポーネントの使用

この部では、Oracle Mediatorサービス・コンポーネントを構成する複数のコンポーネントについて説明します。

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

- 第19章「Oracle Mediatorの開始」

- 第20章「Oracle Mediatorルーティング・ルールの作成」

- 第21章「Oracle Mediatorにおける複数パート・メッセージの使用」

- 第22章「Oracle Mediatorエラー処理の使用」

- 第23章「Oracle Mediatorにおける再順序付け」

- 第24章「Oracle Mediatorのメッセージ交換パターンの理解」

19 Oracle Mediatorの開始

この章では、Oracle SOA Suiteアプリケーションにトランスフォーメーション、検証およびルーティング・ロジックを提供するOracle Mediatorについて説明します。また、この章では、Oracle JDeveloperでメディエータ・コンポーネントおよび関連するWSDLドキュメントを作成する方法についても説明します。

この章には次の項が含まれます:

- 第19.1項「Oracle Mediatorの概要」

- 第19.2項「メディエータの機能」

- 第19.3項「メディエータ・エディタ環境の概要」

- 第19.4項「メディエータの作成」

- 第19.5項「メディエータのインタフェース定義の構成」

- 第19.6項「メディエータのインタフェースの定義」

- 第19.7項「WSDLファイルの生成」

- 第19.8項「検証および優先度のプロパティの指定」

- 第19.9項「メディエータ・サービス・コンポーネントの変更」

19.1 Oracle Mediatorの概要

Oracle SOA Suiteのサービス・コンポーネントであるOracle Mediatorは、様々なメッセージ交換パターン(同期、非同期、イベントの公開またはサブスクリプションなど)に加え、選択的なルーティング、トランスフォーメーションおよび検証の機能などの仲介機能を備えています。

メディエータは、Web Services Description Language (WSDL)ドキュメントをインタフェースとして使用してコンポジット・アプリケーション内の様々なコンポーネント間(ビジネス・プロセスやヒューマン・ワークフローなど)を仲介する軽量のフレームワークを提供します。また、様々なコンポーネントで公開される様々なインタフェース間での通信が容易になるようにデータを変換します。これらのコンポーネントは接続されて、SOAコンポジット・アプリケーションが構築されます。たとえば、メディエータでは、アプリケーションまたはサービスからテキスト・ファイルに格納されたデータを受け入れ、顧客リポジトリとして使用するデータベースの更新に適した書式に変換し、変換したデータをそのデータベースにルーティングおよび配信できます。

メディエータによって、イベントとサービス間の統合が容易になり、この統合によって、サービスの起動とイベントの組合せや調整が可能となります。メディエータ・サービス・コンポーネントを使用すると、ビジネス・イベントを処理したり、サービスの起動を受信できます。メディエータ・サービス・コンポーネントは、ルーティング・ルールの評価、変換の実行、検証を行い、別のサービスを起動したり、別のビジネス・イベントを発生させることができます。メディエータ・サービス・コンポーネントを使用すると、返されたレスポンス、コールバック、フォルトおよびタイムアウトを処理できます。

19.2 メディエータの機能

次の各項では、Oracle MediatorがOracle SOA Suiteアプリケーションに提供する主な機能について説明します。

19.2.1 コンテンツ・ベースおよびヘッダー・ベースのルーティング

メディエータでは、メッセージ・ペイロードまたはメッセージ・ヘッダーに基づいてルールを定義できます。メッセージ・ペイロードまたはメッセージ・ヘッダーから要素または属性を選択し、その要素または属性の値に基づいてアクションを指定できます。たとえば、メディエータで、新規顧客に関するデータが含まれているファイルをアプリケーションまたはサービスから受信したとします。顧客の住所に記載されている国に基づいて、その特定の国に関するデータが格納されているデータベースにデータをルーティングおよび配信できます。同様に、メッセージ・ヘッダーに基づいてメッセージをルーティングできます。

ヘッダーに基づいたルーティングの詳細は、第20.3.2.12項「フィルタおよび割当てのためのヘッダー・アクセス方法」を参照してください。

19.2.2 同期および非同期の相互作用

メディエータでは、同期と非同期、両方のリクエストとレスポンスの相互作用がサポートされています。同期相互作用では、クライアントはサービスをリクエストした後、そのリクエストに対するレスポンスを待機します。非同期相互作用では、クライアントはサービスを起動しますが、そのレスポンスを待機しません。非同期相互作用に対してはタイムアウト時間を指定できます。このタイムアウト時間には、イベントの発生やプロセスの開始など、タイムアウト時間後に実行するアクションを指定できます。

同期および非同期の相互作用の詳細は、第20.3.2.4項「レスポンス・メッセージの構成方法」および第24章「Oracle Mediatorのメッセージ交換パターンの理解」を参照してください。

19.2.3 メッセージの順次およびパラレルのルーティング

メディエータでは、ルーティング・ルールをパラレルまたは順次のいずれかで実行するように指定できます。実行タイプは、メディエータ・エディタの「ルーティング・ルール」セクションから構成できます。

メッセージの順次およびパラレルのルーティングの詳細は、第20.3.2.3項「順次実行またはパラレル実行の指定方法」を参照してください。

19.2.4 メッセージの再順序付け

メディエータの再シーケンサを使用すると、再シーケンサにより、関連がありながらも順序が正しくないメッセージは、使用されている再シーケンサのタイプと定義されているルールに基づいて適切な順序に並べ替えられます。受信メッセージがランダムな順番で着信した場合、再シーケンサは、メッセージを順次または時系列の情報に基づいて並べ替え、再順序付けの構成に基づいた正しい順序でメッセージをターゲット・サービスに送信します。

メッセージの再順序付けの詳細は、第23章「Oracle Mediatorにおける再順序付け」を参照してください。

19.2.5 データ・トランスフォーメーション

メディエータでは、XMLスキーマ間のデータ・トランスフォーメーションを定義できます。この機能を使用することで、異なるスキーマを使用しているアプリケーション間でのデータ交換が可能になります。たとえば、カンマ区切りのファイルをデータベース表の構造に変換できます。

トランスフォーメーションの詳細は、第20.3.2.9項「トランスフォメーションの作成方法」を参照してください。

19.2.6 ペイロード検証

SchematronまたはXSDファイルを使用して受信メッセージ・ペイロードを検証するようにメディエータを構成できます。ユーザーは各インバウンド・メッセージ・パートに対してSchematronファイルを指定でき、メディエータはこれらのパートに対してSchematronファイル検証を実行します。

検証の詳細は、第20.3.2.13項「セマンティク検証の使用方法」およびhttp://www.schematron.com/を参照してください。

19.2.7 Javaコールアウト

メディエータでは、ルーティング・ルールにJavaコールアウトを追加できます。Javaコールアウトは、正規表現を使用したJavaコードを使用する方法です。

Javaコールアウトの詳細は、第20.3.2.15項「Javaコールアウトの使用方法」を参照してください。

19.2.8 イベント処理

イベントは、ビジネス環境でアクティビティが発生すると送信されるメッセージです。メディエータでは、ビジネス・イベントのサブスクライブと発生の両方を実行できます。目的の状況が発生したときに生成されるビジネス・イベントをサブスクライブできます。たとえば、新規顧客の作成時に生成されるイベントをサブスクライブし、次にこのイベントを使用して、確認電子メールの送信などのビジネス・プロセスを開始できます。同様に、目的の状況が発生した場合は、ビジネス・イベントを生成することができます。たとえば、新規顧客プロファイルの作成後に顧客作成済イベントを生成できます。

イベント処理の詳細は、第41章「ビジネス・イベントおよびイベント配信ネットワークの使用」を参照してください。

19.2.9 動的ルーティング

動的ルーティングは、プロセスの制御ロジックをプロセスの実行から分離します。制御ロジックは、プロセスが経由するパスを決定します。動的ルーティング・ルールは、メディエータ・エディタを使用して作成できます。

動的ルーティングの詳細は、第20.3.3項「動的ルーティング・ルールの作成方法」を参照してください。

19.2.10 エラー処理

メディエータでは、手動によるエラー処理とフォルト・ポリシーに基づくエラー処理の両方がサポートされています。フォルト・ポリシーは複数の条件とアクションで構成され、条件によって、特定のエラー状態の場合に実行されるアクションを指定します。

エラー処理の詳細は、第22章「Oracle Mediatorエラー処理の使用」を参照してください。

19.2.11 コール元へのメッセージの返信(エコー)

メディエータでは、トランスフォーメーション、検証、割当てまたは順序操作の実行後に、ソース・メッセージを最初のコール元にエコーして戻すことができます。

メディエータのエコー・サポートの詳細は、第20.3.2.1項「メディエータ・サービスまたはイベントの指定方法」の「サービスをエコーする手順」を参照してください。

19.2.12 複数パート・メッセージ

メディエータでは、複数のパートで構成されたメッセージを処理できます。リモート・プロシージャ・コール(RPC) Webサービスの中には、SOAPメッセージに複数のパートが含まれているものがあります。

複数パート・メッセージのサポートに関する詳細は、第21章「Oracle Mediatorにおける複数パート・メッセージの使用」を参照してください。

19.3 メディエータ・エディタ環境の概要

Oracle JDeveloperのSOAコンポジット・アプリケーション内にメディエータ・サービス・コンポーネントを作成した後、そのメディエータ・サービス・コンポーネントはメディエータ・エディタを使用して構成できます。メディエータ・エディタを表示するには、SOAコンポジット・エディタで、メディエータ・サービス・コンポーネントをダブルクリックします。SOAコンポジット・エディタの詳細は、第2章「Oracle SOA Suiteを使用したSOAコンポジット・アプリケーションの開発」を参照してください。

図19-1には、メディエータ・エディタが「アプリケーション・ナビゲータ」、「構造」および「メッセージ」の各ウィンドウとともに表示されています。

注意:

メディエータのグローバリゼーションを完全にサポートするために、Unicodeデータベースのデータベース・キャラクタ・セットには、AL32UTF8を使用することをお薦めします。

図19-1 メディエータ・エディタ・ウィンドウ

「図19-1 メディエータ・エディタ・ウィンドウ」の説明

図19-1のビューの各セクションによって、特定の設計やデプロイメント・タスクを実行できます。このビューのセクションは次のとおりです。

- アプリケーション・ナビゲータ
図19-1の左上にある「アプリケーション・ナビゲータ」は、メディエータのファイル構造を示しています。これらのファイルは、メディエータを作成したプロジェクトの「SOAコンテンツ」フォルダの下に表示されます。アプリケーション・ナビゲータおよびコンポジット・ファイルの詳細は、表2-3「SOAコンポジット・エディタ」を参照してください。

- メディエータ・エディタ
図19-1の中央に表示されているメディエータ・エディタでは、メディエータのビジュアル・ビューが提供されます。このビューは、次のいずれかの処理を実行すると表示されます。

- SOAコンポジット・エディタで、Oracle Mediatorアイコンをダブルクリックした場合。

- 「アプリケーション・ナビゲータ」で、メディエータの.mplanファイルをダブルクリックします。

- 「ソース」ビュー
「ソース」ビューに、メディエータのソース・コードが表示されます。メディエータ・エディタの下部にある「ソース」をクリックすると、ソース・コードが表示されます。「ソース」ビューのコードは即時に更新され、メディエータ内のすべての変更が反映されます。

例19-1は、メディエータのソース・コードのサンプルを示しています。

例19-1 メディエータのソース・コード

<?xml version = '1.0' encoding = 'UTF-8'?>
<!--Generated by Oracle SCA Modeler version 1.0 at [4/16/07 10:05 PM].-->
<Mediator name="CustomerDataRouter" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/sca/1.0/mediator"/>

- 「履歴」ウィンドウ
「履歴」ウィンドウには、リビジョン履歴や、ファイルの読取り専用バージョンと編集可能バージョンを並べた比較など、メディエータ・ファイルの履歴情報を表示できます。図19-1の「設計」ウィンドウ下部にある「履歴」をクリックすると、「履歴」ウィンドウが表示されます。図19-2に、メディエータ・ファイルの「履歴」ビューを示します。

図19-2「履歴」ウィンドウ

「図19-2 「履歴」ウィンドウ」の説明

- プロパティ・インスペクタ
図19-1の下部にあるプロパティ・インスペクタには、メディエータのプロパティに関する詳細が表示されます。

- 「構造」ウィンドウ
図19-1の左下にある「構造」ウィンドウには、メディエータのデータの構造的なビューが表示されます。

- 「ログ」ウィンドウ
「ログ」ウィンドウには、検証およびコンパイル・ステータスに関するメッセージが表示されます。

19.4 メディエータの作成

アプリケーション開発プロセスの現在の段階に応じて、複数の方法でメディエータを作成できます。コンポーネントを作成するには、次の項の該当する指示に従ってください。

19.4.1 メディエータの作成方法

開発サイクルの次のどの時点でも、Oracle JDeveloperでSOAコンポジット・アプリケーション内にメディエータを作成できます。

- コンポジット・アプリケーションの作成時

- 既存のコンポジット・アプリケーションの変更時

- プロジェクトの作成時

- 既存のプロジェクトの変更時

メディエータの作成時には、「メディエータの作成」ダイアログが表示され、メディエータの名前を決定してインタフェースのテンプレートを選択できます。

メディエータを使用するコンポジット・アプリケーションを作成する手順は、次のとおりです。

1. SOAアプリケーションの作成ウィザードを使用して、SOAアプリケーションおよびプロジェクトを作成し、名前を指定します。

2. 図19-3に示すように、「SOA設定の構成」ページが表示されたら、「コンポジット・テンプレート」リストから「メディエータを使用するコンポジット」を選択します。

図19-3 「SOAプロジェクトの作成」ウィザードの「メディエータを使用するコンポジット」の選択

「図19-3 「SOAプロジェクトの作成」ウィザードの「メディエータを使用するコンポジット」の選択」の説明

3. 「終了」をクリックします。
「メディエータの作成」ダイアログが表示されます。

4. 第19.5項「メディエータのインタフェース定義の構成」の説明に従って、メディエータのインタフェースを構成します。

5. 第20章「Oracle Mediatorルーティング・ルールの作成」の説明に従って、メディエータのルーティング・ルールを定義します。

既存のコンポジット・アプリケーション内にメディエータを作成する手順は、次のとおりです。

1. SOAコンポジット・エディタで、メディエータを追加するコンポジット・アプリケーションを開きます。

2. 「コンポーネント・パレット」(図19-4を参照)からエディタの「コンポーネント」セクションにメディエータをドラッグ・アンド・ドロップします。

ヒント:

「コンポーネント・パレット」は、SOAコンポジット・エディタの右側にあります。

図19-4 メディエータ・サービス・コンポーネントが表示された「コンポーネント・パレット」

「図19-4 メディエータ・サービス・コンポーネントが表示された「コンポーネント・パレット」」の説明

「メディエータの作成」ダイアログが表示されます。

3. 第19.5項「メディエータのインタフェース定義の構成」の説明に従って、メディエータのインタフェースを構成します。

4. 第20章「Oracle Mediatorルーティング・ルールの作成」の説明に従って、メディエータのルーティング・ルールを定義します。

メディエータを使用する新規プロジェクトを作成する手順は、次のとおりです。

1. アプリケーション・ナビゲータを右クリックして、「新規」を選択します。
「新規ギャラリ」ウィザードが表示されます。

2. 「SOA層」カテゴリに新規SOAプロジェクトを作成し、名前を付けます。

3. 図19-5に示すように、「新規ギャラリ」ダイアログの「SOA設定の構成」ページで、「コンポジット・テンプレート」リストから「メディエータを使用するコンポジット」を選択します。

図19-5 表示される「メディエータを使用するコンポジット」テンプレートを使用した「SOAプロジェクトの作成」ウィザード

「図19-5 表示される「メディエータを使用するコンポジット」テンプレートを使用した「SOAプロジェクトの作成」ウィザード」の説明

4. 「終了」をクリックします。
「メディエータの作成」ダイアログが表示されます。

5. 第19.5項「メディエータのインタフェース定義の構成」の説明に従って、メディエータのインタフェースを構成します。

既存のプロジェクト内にメディエータを作成する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、メディエータを追加するプロジェクトを選択します。

2. ナビゲータ・ペインを右クリックし、「新規」を選択します。

3. 図19-6に示すように、「カテゴリ」で「サービス・コンポーネント」を選択し、次に「項目」リストから「メディエータ」を選択します。

図19-6 メディエータ・サービス・コンポーネントが表示された「新規ギャラリ」ダイアログ

「図19-6 メディエータ・サービス・コンポーネントが表示された「新規ギャラリ」ダイアログ」の説明

4. 「OK」をクリックします。
「メディエータの作成」ダイアログが表示されます。

5. 第19.5項「メディエータのインタフェース定義の構成」の説明に従って、メディエータのインタフェースを構成します。

6. 第20章「Oracle Mediatorルーティング・ルールの作成」の説明に従って、メディエータのルーティング・ルールを定義します。

19.5 メディエータのインタフェース定義の構成

新規のメディエータを作成するときに、メディエータ・プロジェクトの基本的な一連のデフォルト・ファイルを生成するインタフェース・テンプレートを指定できます。これらのファイルは、メディエータを設計および構成できるフレームワークを提供します。次のインタフェース・オプションを使用して、メディエータを作成できます。

- インタフェース定義を使用しないメディエータ
空のメディエータを作成し、WSDLファイルは作成しません。この方法を使用すると、目的の順番でSOAコンポーネントを柔軟に作成できます。インタフェース定義を使用せずにメディエータを作成した後、そのコンポーネントを起動するサービスまたはイベントを作成する必要があります。

- WSDLファイルで定義されているインタフェースを使用したメディエータ
インタフェース定義は、メディエータのインタフェース(ポート・タイプ、操作、サービス、スキーマなど)が記述されているWSDLファイルに基づきます。WSDLファイルは、既存のものを使用するか、スキーマ・ファイルから生成できます。

- 一方向インタフェースを使用したメディエータ
クライアントはサービスにメッセージを送信するが、サービスからのリプライは不要の一方向相互作用のインタフェースを定義します。

- 同期インタフェースを使用したメディエータ
同期リクエスト/レスポンス相互作用のインタフェースを作成します。同期相互作用では、クライアントはサービスにリクエストを送信し、すぐにレスポンスを受信します。クライアントはレスポンスが届くまで次へ進みません。

- 非同期インタフェースを使用したメディエータ
非同期リクエスト/レスポンス相互作用のインタフェースを作成します。非同期相互作用では、クライアントはサービスにリクエストを送信しますが、リプライをブロックおよび待機しません。

- イベントをサブスクライブするメディエータ
目的の状況が発生したときに生成されるビジネス・イベントをサブスクライブするメディエータを作成します。ビジネス・イベントは、ビジネス環境における発生の結果として送信されるメッセージ・データで構成されています。ビジネス・イベントの詳細は、第41章「ビジネス・イベントおよびイベント配信ネットワークの使用」を参照してください。

イベントをサブスクライブするには、イベント定義(EDL)ファイルでイベントを定義する必要があります。

19.5.1 メディエータのインタフェース定義の構成方法

メディエータのインタフェース定義の構成は、「メディエータの作成」ダイアログで行います。

メディエータのインタフェース定義を構成する手順は、次のとおりです。

1. 第19.4項「メディエータの作成」に記載されているいずれかの方法で、メディエータを作成します。
「メディエータの作成」ダイアログが表示されます。

2. 「名前」フィールドに、メディエータ・サービス・コンポーネントの名前を入力します。

3. 「テンプレート」リストで、次のいずれかを選択します。それぞれの詳細は、この項の最初の説明を参照してください。

- インタフェースを後で定義

- WSDLからのインタフェース定義

- 一方向インタフェース

- 同期インタフェース

- 非同期インタフェース

- イベントのサブスクライブ

図19-7および図19-8は、インタフェース・タイプが異なる場合に「メディエータの作成」ダイアログのプロパティがどのように変わるかを示しています。

図19-7 「メディエータの作成」ダイアログの「同期インタフェース」テンプレートの選択

「図19-7「メディエータの作成」ダイアログの「同期インタフェース」テンプレートの選択」の説明

図19-8 「メディエータの作成」ダイアログの「WSDLからのインタフェース定義」テンプレートの選択

「図19-8 「メディエータの作成」ダイアログの「WSDLからのインタフェース定義」テンプレートの選択」の説明

4. 「イベントのサブスクライブ」以外のインタフェース・タイプの場合は、適切なプロパティを構成します。各タイプで表示されるプロパティの詳細は、この手順の後の表19-1を参照してください。

5. 「イベントのサブスクライブ」を選択した場合は、次の手順を実行します。

1. 「メディエータの作成」ダイアログで「追加」をクリックします。図19-9に詳細を示します。

図19-9 「メディエータの作成」ダイアログの「イベントのサブスクライブ」テンプレートの選択

「図19-9 「メディエータの作成」ダイアログの「イベントのサブスクライブ」テンプレートの選択」の説明

「イベント・チューザ」ダイアログが表示されます。

2. 「イベント定義」フィールドの右側にある「検索」をクリックします。

「SOAリソース・ブラウザ」ダイアログが表示されます。

3. イベント定義ファイル(.edl)を選択し「OK」をクリックします。

「イベント」フィールドに、選択した.edlファイルに記述されているイベントが移入されます。.edlファイルの作成方法の詳細は、第41章「ビジネス・イベントおよびイベント配信ネットワークの使用」を参照してください。

4. 図19-10に示すように、「イベント」フィールドで1つ以上のイベントを選択し、「OK」をクリックします。

図19-10 「イベント・チューザ」ダイアログ

「図19-10 「イベント・チューザ」ダイアログ」の説明

5. イベントと一貫性がある配信のレベルを選択します。
唯一: イベント配信にはグローバル(JTA)トランザクションが使用されます。イベント・コールが失敗した場合、トランザクションはロールバックされ、コールは構成可能な回数だけ再試行されます。

保証付き: 配信を保証するためにローカル・トランザクションが使用されます。失敗時の再試行はありません。

即時: イベントはコール元と同じスレッドおよび同じトランザクション上で配信されます。

6. 「パブリッシャとして実行」フィールドで、イベント・パブリッシャのセキュリティ下でイベント・サブスクリプションを実行するかどうかを選択します。
デフォルトでは、イベント・サブスクリプションはイベント・パブリッシャのセキュリティ下で実行します。

7. イベントをフィルタリングするには、選択したイベントの「フィルタ」列をダブルクリックするか、またはイベントを選択して「フィルタ」アイコン(最初のアイコン)をクリックします。
「式ビルダー」ダイアログが表示されます。

8. 「式」フィールドでXPath式を入力し、「OK」をクリックします。
図19-11に、「式ビルダー」ダイアログのサンプルを示します。

図19-11 ビジネス・イベント・フィルタ

「図19-11 ビジネス・イベント・フィルタ」の説明

「メディエータの作成」ダイアログの「フィルタ」列に、作成した式が表示されます。

9. 「OK」をクリックします。

6. 「メディエータの作成」ダイアログで「OK」をクリックします。

7. インタフェースなしのメディエータを作成するように選択した場合は、第19.6.1項「メディエータのインタフェースの定義方法」の説明に従って、後でインタフェースを作成する必要があります。

表19-1に、インタフェースを定義するために構成可能なプロパティをリストして説明します。選択したインタフェース・タイプによって使用可能なプロパティは異なるため、リストされているすべてのプロパティがすべてのインタフェース・タイプに適用されるわけではありません。

表19-1 メディエータのインタフェースのプロパティ

プロパティ

説明

SOAPバインディングを持つコンポジット・サービスの作成

このオプションを選択すると、インタフェースが生成されたときに自動的にメディエータに接続されるSOAPバインディングを使用した公開されたサービスが作成されます。

WSDL URL

WSDLファイルからインタフェースを作成する場合に、使用するWSDLファイルの場所を入力します。次のいずれかを実行します:

- 既存のWSDLファイルを使用するには、ファイルの名前を入力するか、「既存のWSDLを検索します。」をクリックしてファイルを参照します。

- 新規のWSDLファイルを作成するには、「スキーマからWSDLを生成します。」をクリックします。

これらのオプションに関する詳細は、第19.7項「WSDLファイルの生成」を参照してください。

ポート・タイプ

WSDLファイルのポート・タイプ名を入力します。使用可能なポート・タイプは、「WSDL URL」フィールドに指定したWSDLファイルから解析されます。

コールバック・ポート・タイプ

非同期通信のレスポンス・メッセージが送信されるポート・タイプ名を入力します。使用可能なポート・タイプは、「WSDL URL」フィールドに指定したWSDLファイルから解析されます。

入力

入力メッセージ用のスキーマ要素を入力します。フィールドの右側にある「検索」をクリックして、要素を選択します。デフォルトでは、入力メッセージ用にsingleStringスキーマ要素が選択されています。

サンプル・スキーマについては、例19-2を参照してください。

出力

出力メッセージ用のスキーマ要素を入力します。フィールドの右側にある「検索」をクリックして、要素を選択します。デフォルトでは、入力メッセージ用にsingleStringスキーマ要素が選択されています。

例19-2 一方向インタフェースのサンプル・スキーマ

メディエータで処理する入力文書の形式は、XSDスキーマを使用して指定できます。次にスキーマのサンプルを示します。

<xsd:schema attributeFormDefault="qualified"
elementFormDefault="qualified"
targetNamespace="http://samples.otn.com/helloworld"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://samples.otn.com/helloworld">
<include namespace="http://samples.otn.com/helloworld"
schemaLocation="helloworld.xsd" />
<xsd:element name="name1" type="xsd:string" />
<xsd:element name="result1" type="xsd:string"/>
</xsd:schema>

19.5.2 メディエータ作成時の処理内容

メディエータ・ファイルは「アプリケーション・ナビゲータ」で指定されたアプリケーションおよびプロジェクトの下に生成され、設計ビューのメディエータ・エディタに新規のメディエータが表示されます。インタフェース定義を使用したメディエータを作成し、WSDLファイルが存在しなかった場合は、新しいWSDLファイルがメディエータと同じ名前で一緒に生成されます。指定したWSDLファイルがプロジェクト・ファイルと異なるディレクトリに格納されている場合は、ファイルおよび関連するスキーマ・ファイルがメディエータ・プロジェクトにコピーされます。

19.5.2.1 インタフェース定義を使用しない

このメディエータはWSDLファイル、ポート・タイプまたは操作に関連付けられていません。第19.6項「メディエータのインタフェースの定義」の説明に従って、これらを個別に定義する必要があります。図19-12は、インタフェース定義を使用せずに作成したメディエータがメディエータ・エディタ内でどのように表示されるかを示しています。

図19-12 メディエータ・エディタでインタフェース定義を使用しないメディエータ

「図19-12 メディエータ・エディタでインタフェース定義を使用しないメディエータ」の説明

19.5.2.2 WSDLベースのインタフェースを使用

このメディエータの外観およびソース・コードは、WSDLファイルの名前、およびWSDLファイルで定義されているポート・タイプおよび操作によって異なります。図19-13は、WSDLファイルから作成されたメディエータのサンプルを示しています。

図19-13 メディエータ・エディタ内のWSDLからのメディエータ

「図19-13 メディエータ・エディタ内のWSDLからのメディエータ」の説明

19.5.2.3 一方向インタフェース定義を使用

図19-14は、一方向インタフェースを使用して作成したメディエータがメディエータ・エディタ内でどのように表示されるかを示しています。「execute」操作の左側にある矢印は、一方向操作を表しています。

図19-14 メディエータ・エディタ内の一方向インタフェースOracle Mediator

「図19-14 メディエータ・エディタ内の一方向インタフェースOracle Mediator」の説明

19.5.2.4 同期インタフェース定義を使用

同期相互作用ではレスポンスがリクエストと同じポートに送信されるため、ポートは1つのみ定義されます。図19-15は、同期インタフェースを使用して作成したメディエータがメディエータ・エディタ内でどのように表示されるかを示しています。図19-15の「execute」操作の左側にある矢印は、同期操作を表しています。

図19-15 メディエータ・エディタ内の同期メディエータ

「図19-15 メディエータ・エディタ内の同期メディエータ」の説明

19.5.2.5 非同期インタフェース定義を使用

図19-16は、非同期インタフェースを使用して作成したメディエータがメディエータ・エディタ内でどのように表示されるかを示しています。「ポート・タイプ」フィールドには、リクエスト・メッセージが送信されるポートが表示されます。「コールバック・ポート・タイプ」フィールドには、レスポンスが送信されるポートが表示されます。図19-16の「execute」操作の左側にある矢印は、非同期操作を表しています。

図19-16 メディエータ・エディタ内の非同期メディエータ

「図19-16 メディエータ・エディタ内の非同期メディエータ」の説明

19.5.2.6 イベント・サブスクリプションを使用

SOAコンポジット・エディタでメディエータを表示すると、図19-17に示すように、メディエータの左側にあるアイコンにより、そのメディエータがイベント・サブスクリプション用に構成されていることが示されます。

図19-17 「イベントのサブスクライブ」テンプレートを使用して作成されたメディエータ

「図19-17 「イベントのサブスクライブ」テンプレートを使用して作成されたメディエータ」の説明

メディエータをダブルクリックすると、図19-18に示すように、メディエータ・エディタが表示されます。

図19-18 メディエータ・エディタ内のイベント・サブスクリプション・メディエータ

「図19-18 メディエータ・エディタ内のイベント・サブスクリプション・メディエータ」の説明

19.6 メディエータのインタフェースの定義

インタフェース定義を使用せずにメディエータを作成した後、イベントのサブスクライブまたはサービスの定義によって、インタフェースを定義する必要があります。サービスの定義は、次の2つの方法で行えます。

- SOAコンポジット・エディタのワイヤを通じてメディエータをサービスに接続します。

- メディエータ・エディタの「サービスの定義」オプションを使用します。

19.6.1 メディエータのインタフェースの定義方法

次の手順は、既存のメディエータのインタフェースを定義するために、イベントをサブスクライブして定義する方法、コンポジット内にワイヤを作成するサービスを定義して定義する方法、メディエータ・エディタを使用してサービスを定義して定義する方法を示しています。

イベントをサブスクライブする手順は、次のとおりです。

イベントをサブスクライブするには、イベント定義(EDL)ファイルでイベントを定義する必要があります。

1. メディエータ・エディタで編集するメディエータを開きます。

2. 「ルーティング・ルール」セクションで、「イベント・サブスクリプションの追加」をクリックします。
「サブスクライブ済イベント」ダイアログが表示されます。

3. 「追加」をクリックします。
「イベント・チューザ」ダイアログが表示されます。

4. 第19.5項「メディエータのインタフェース定義の構成」のステップ5b以降の手順に従います。

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

ワイヤを使用してメディエータのサービスを定義する手順は、次のとおりです。

- SOAコンポジット・エディタで、メディエータからサービスにワイヤをドラッグします。
ワイヤの詳細、およびサービス・コンポーネントをサービスに接続する方法については、第2.5.1項「サービスとサービス・コンポーネントの接続方法」を参照してください。

注意:

定義済インタフェースおよび定義済参照があるメディエータも、ワイヤを通じてサービスに接続できます。ただし、メディエータをサービスに接続するには、そのメディエータとサービスのインタフェースが一致している必要があります。

ワイヤを使用してサービスを定義した場合、メディエータのサービスは、ワイヤのソースのWSDLファイルを使用して自動的に定義されます。たとえば、図19-19に示すReadFileサービスをCustomerDataRouterメディエータに接続すると、そのCustomerDataRouterメディエータでは自動的にReadFileサービスのサービス定義が継承されます。

図19-19 メディエータからサービスへの接続

「図19-19 メディエータからサービスへの接続」の説明

2つのメディエータ・サービス・コンポーネントを接続したときに無限ループが発生するケースについては、第2.5.3項「ワイヤの追加と削除に関する注意事項」を参照してください。

メディエータ・エディタでメディエータのサービスを定義する手順は、次のとおりです。

1. メディエータ・エディタで編集するメディエータを表示します。

2. 「WSDL URL」フィールドの右側にある「サービスの定義」をクリックします。
図19-20に示すように、「サービスの定義」ダイアログが表示されます。

図19-20 「サービスの定義」ダイアログ

「図19-20 「サービスの定義」ダイアログ」の説明

3. 次のいずれかを実行します:

- 既存のWSDLファイルを使用するには、「WSDL URL」フィールドの右側にある「既存のWSDLを検索します。」をクリックします。

- WSDLファイルを作成するには、「WSDL URL」フィールドの右側にある「スキーマからWSDLを生成します。」をクリックします。

WSDLファイルの生成方法は、第19.7項「WSDLファイルの生成」を参照してください。

4. 「ポート・タイプ」リストから、ポートを選択します。

5. 「コールバック・ポート・タイプ」リストから、非同期相互作用のレスポンス・メッセージのポートを選択します。

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

19.7 WSDLファイルの生成

メッセージに対するWSDLファイルは、XMLスキーマ定義(XSD)ファイルまたはサンプル・ファイルを使用して生成できます。メディエータを使用する場合は、次のいずれかのタイミングでWSDLファイルを生成できます。

- メディエータの作成時に「メディエータの作成」ダイアログの「WSDLからのインタフェース定義」テンプレートを選択した場合は、「WSDL URL」フィールドの横にある「スキーマからWSDLを生成します。」を選択すると、「WSDLの作成」ダイアログが開きます。

- インタフェース定義を使用しないメディエータで、メディエータ・エディタの「WSDL URL」フィールドの横にある「サービスの定義」をクリックした場合は、「WSDL URL」フィールドの横にある「スキーマからWSDLを生成します。」を選択すると、「WSDLの作成」ダイアログが開きます。

「WSDLの作成」ダイアログでファイル名、ディレクトリ、ネームスペースなどの標準フィールドが移入され、選択するインタフェース・タイプに応じてダイアログが変更されます。入力メッセージに対して、同一または異なるスキーマ・ファイルを指定できます。

19.7.1 WSDLファイルの生成方法

WSDLファイルの構成方法は、WSDLファイルで定義されているインタフェースのタイプによって異なります。一方向インタフェース、同期インタフェースまたは非同期インタフェースを定義できます。

XSDファイルから一方向インタフェース用のWSDLファイルを生成する手順は、次のとおりです。

メディエータを作成する場合や、メディエータのサービスを定義する場合は、「WSDLの作成」ダイアログが表示された後に、これらの手順を実行します。

1. 「WSDLの作成」ダイアログで、デフォルト値を受け入れるか、表19-2に示すWSDLファイルの情報を入力します。

表19-2 WSDLのプロパティ

プロパティ

説明

ファイル名

WSDLファイルの一意の名前。

ディレクトリ

WSDLファイルを格納するディレクトリ。デフォルトでは、メディエータ・ファイルと同じ場所に格納されます。これは現在のプロジェクトのディレクトリまたはそのサブディレクトリの1つである必要があります。指定したディレクトリが存在しない場合は、Oracle JDeveloperにより作成されます。

ネームスペース

WSDLファイルのネームスペース・アドレス。例: http://oracle.com/esb/namespaces/Mediator。

指定するネームスペースは、WSDLファイルのtnsネームスペースとして定義されます。

ポート・タイプ

使用する操作が含まれるWSDLファイルのポート・タイプの名前。

操作

実行するアクションの名前。例: executeQuery。

注意:

操作名またはポート・タイプに空白および特殊文字は使用できません。英数字のみがサポートされ、最初の文字を数値にすることはできません。

2. 「インタフェース・タイプ」フィールドで、「一方向インタフェース」を選択します。
図19-21に示すように、「入力」フィールドが表示されます。

図19-21 一方向インタフェースの「WSDLの作成」ダイアログ

「図19-21 一方向インタフェースの「WSDLの作成」ダイアログ」の説明

3. 「入力」フィールドの右上で、「新規メッセージ・パートを追加します。」をクリックします。
図19-22に示すように、「メッセージ・パートの追加」ダイアログが表示されます。

図19-22 「メッセージ・パートの追加」ダイアログ

「図19-22 「メッセージ・パートの追加」ダイアログ」の説明

4. 「パート名」フィールドに、メッセージ・パートの名前を入力します。

5. 「URL」フィールドの右側にある「スキーマ・ファイルを参照」アイコンをクリックして、URLを参照します。
図19-23に示すように、「タイプ・チューザ」ダイアログが表示され、これにはスキーマ・ファイル(XSDファイル)のリストが含まれます。

図19-23「タイプ・チューザ」ダイアログ

「図19-23 「タイプ・チューザ」ダイアログ」の説明

6. 「タイプ・エクスプローラ」ツリーを開き、検索して使用するスキーマ要素を選択します。
使用するスキーマが作業中のプロジェクトにない場合は、ダイアログの右上にある「スキーマ・ファイルのインポート」または「WSDLのインポート」アイコンを使用して、スキーマXSDファイルまたはWSDLファイルをプロジェクトにインポートできます。

注意:

ローカル・ファイル・システムのスキーマXSDファイルを使用する場合は、必ず、XSDファイルおよびそのファイルによってインポートされるXSDファイルすべてがOracle JDeveloperのプロジェクト・ディレクトリに存在している必要があります。これにより、スキーマがプロジェクトにデプロイされ、実行時に使用可能になります。

ファイルを指定すると、Oracle JDeveloperによってファイルが解析されて定義済のスキーマ要素が決定され、選択するリストに表示されます。

7. XSDファイルのルート要素を選択し、「OK」をクリックします。
「タイプ・チューザ」ダイアログから「URL」および「スキーマ要素」フィールドが移入された状態の「メッセージ・パートの追加」ダイアログが再表示されます。XSDの単純型を選択した場合、これらのフィールドは、「単純型」フィールドに置換されます。

8. 「メッセージ・パートの追加」ダイアログで、「OK」をクリックします。
「WSDLの作成」ダイアログの「入力」フィールドに、入力情報が表示されます。

9. 必要に応じて、前述の手順を繰り返し、追加のメッセージ・パートを定義します。

10. 「OK」をクリックします。

注意:

パートナ・リンク・タイプは通常BPELで使用されるため、メディエータに「partnerlinkType拡張機能の生成」を選択する必要はありません

XSDファイルから同期インタフェース用のWSDLファイルを生成する手順は、次のとおりです。

メディエータを作成する場合や、メディエータのサービスを定義する場合は、「WSDLの作成」ダイアログが表示された後に、これらの手順を実行します。

1. 「WSDLの作成」ダイアログで、表19-2「WSDLのプロパティ」にリストされているプロパティの情報を入力します。

2. 「インタフェース・タイプ」フィールドで、「同期インタフェース」を選択します。
図19-24に示すように、「入力」、「出力」および「フォルト」フィールドが表示されます。

図19-24 同期インタフェースの「WSDLの作成」ダイアログ

「図19-24 同期インタフェースの「WSDLの作成」ダイアログ」の説明

3. 「入力」フィールドの右上で、「新規メッセージ・パートを追加します。」をクリックします。
図19-25に示すように、「メッセージ・パートの追加」ダイアログが表示されます。

図19-25 「メッセージ・パートの追加」ダイアログ

「図19-25 「メッセージ・パートの追加」ダイアログ」の説明

4. 「パート名」フィールドに、メッセージ・パートの名前を入力します。

5. 「URL」フィールドの右側にある「スキーマ・ファイルを参照」アイコンをクリックして、URLを参照します。
図19-26に示すように、「タイプ・チューザ」ダイアログが表示され、これにはスキーマ・ファイル(XSDファイル)のリストが含まれます。

図19-26「タイプ・チューザ」ダイアログ

「図19-26 「タイプ・チューザ」ダイアログ」の説明

6. 「タイプ・エクスプローラ」ツリーを開き、検索して使用するスキーマ要素を選択します。
使用するスキーマが作業中のプロジェクトにない場合は、ダイアログの右上にある「スキーマ・ファイルのインポート」または「WSDLのインポート」アイコンを使用して、スキーマXSDファイルまたはWSDLファイルをプロジェクトにインポートできます。

注意:

ローカル・ファイル・システムのスキーマXSDファイルを使用する場合は、必ず、XSDファイルおよびそのファイルによってインポートされるXSDファイルすべてがOracle JDeveloperのプロジェクト・ディレクトリに存在している必要があります。これにより、スキーマがプロジェクトにデプロイされ、実行時に使用可能になります。

ファイルを指定すると、Oracle JDeveloperによってファイルが解析されて定義済のスキーマ要素が決定され、リストに選択肢として表示されます。

7. XSDファイルのルート要素を選択し、「OK」をクリックします。
「タイプ・チューザ」ダイアログから「URL」および「スキーマ要素」フィールドが移入された状態の「メッセージ・パートの追加」ダイアログが再表示されます。XSDの単純型を選択した場合、これらのフィールドは、「単純型」要素に置換されます。

8. 「メッセージ・パートの追加」ダイアログで、「OK」をクリックします。
「WSDLの作成」ダイアログの「入力」フィールドに、入力情報が表示されます。

9. 前述の手順を繰り返して、「出力」および「フォルト」フィールドのメッセージ・パートを定義します。
出力はレスポンス・メッセージを表し、同期トランザクションに必要です。オプションは「フォルト」です。

10. 「OK」をクリックします。

注意:

パートナ・リンク・タイプは通常BPELで使用されるため、メディエータに「partnerlinkType拡張機能の生成」を選択する必要はありません

XSDファイルから非同期インタフェース用のWSDLファイルを生成する手順は、次のとおりです。

メディエータを作成する場合や、メディエータのサービスを定義する場合は、「WSDLの作成」ダイアログが表示された後に、これらの手順を実行します。

1. 「WSDLの作成」ダイアログで、表19-2「WSDLのプロパティ」にリストされているプロパティの情報を入力します。

2. 「インタフェース・タイプ」フィールドで、「非同期インタフェース」を選択します。
図19-27に示すように、「入力」フィールドおよび「コールバック」セクションが表示されます。

図19-27 「非同期インタフェース」の「WSDLの作成」ダイアログ

「図19-27 「非同期インタフェース」の「WSDLの作成」ダイアログ」の説明

3. 最初に、「入力」フィールドの右上で、「新規メッセージ・パートを追加します。」をクリックします。
図19-28に示すように、「メッセージ・パートの追加」ダイアログが表示されます。

図19-28 「メッセージ・パートの追加」ダイアログ

「図19-28 「メッセージ・パートの追加」ダイアログ」の説明

4. 「パート名」フィールドに、メッセージ・パートの名前を入力します。

5. 「URL」フィールドの右側にある「スキーマ・ファイルを参照」アイコンをクリックして、URLを参照します。
図19-29に示すように、「タイプ・チューザ」ダイアログが表示され、これにはスキーマ・ファイル(XSDファイル)のリストが含まれます。

図19-29「タイプ・チューザ」ダイアログ

「図19-29 「タイプ・チューザ」ダイアログ」の説明

6. 「タイプ・エクスプローラ」ツリーを開き、検索して使用するスキーマ要素を選択します。
使用するスキーマが作業中のプロジェクトにない場合は、ダイアログの右上にある「スキーマ・ファイルのインポート」または「WSDLのインポート」アイコンを使用して、スキーマXSDファイルまたはWSDLファイルをプロジェクトにインポートできます。

注意:

ローカル・ファイル・システムのスキーマXSDファイルを使用する場合は、必ず、XSDファイルおよびそのファイルによってインポートされるXSDファイルすべてがOracle JDeveloperのプロジェクト・ディレクトリに存在している必要があります。これにより、スキーマがプロジェクトにデプロイされ、実行時に使用可能になります。

ファイルを指定すると、Oracle JDeveloperによってファイルが解析されて定義済のスキーマ要素が決定され、リストに選択肢として表示されます。

7. XSDファイルのルート要素を選択し、「OK」をクリックします。
「タイプ・チューザ」ダイアログから「URL」および「スキーマ要素」フィールドが移入された状態の「メッセージ・パートの追加」ダイアログが再表示されます。XSDの単純型を選択した場合、これらのフィールドは、「単純型」要素に置換されます。

8. 「メッセージ・パートの追加」ダイアログで、「OK」をクリックします。
「WSDLの作成」ダイアログの「入力」フィールドに、入力情報が表示されます。

9. 前述の手順を繰り返して、「コールバック」セクションの入力メッセージ・パートを定義します。

注意:

コールバック入力はレスポンス・メッセージを表し、非同期トランザクションに必要です。

10. 「コールバック」セクションで、レスポンス・メッセージに関する次の情報を指定します。

- ポート・タイプ: 使用する操作が含まれるWSDLファイルのポート・タイプの名前。

- 操作: 実行するアクションの名前。例: executeResponse。

注意:

操作名またはポート・タイプに空白および特殊文字は使用できません。英数字のみがサポートされ、最初の文字を数値にすることはできません。これらのフィールドの両方が必要です。

11. 「OK」をクリックします。

注意:

パートナ・リンク・タイプは通常BPELで使用されるため、メディエータに「partnerlinkType拡張機能の生成」を選択する必要はありません

サンプル・ファイルに基づいたWSDLファイルの生成

WSDLファイルは、カンマ区切り値(CSV)ファイル、固定長ファイル、Document Type Definition(DTD)ファイル、COBOLコピーブック・ファイルなどのネイティブ・フォーマットのファイルから生成できます。ネイティブ・フォーマット・ビルダー・ウィザードを使用して、サンプル・ファイルに基づいたWSDLファイルを生成します。このネイティブ・フォーマット・ビルダー・ウィザードは、「WSDLの作成」ダイアログの「リクエスト」、「レスポンス」、「フォルト」および「コールバック」タブにある「ネイティブ・フォーマットのスキーマの定義」をクリックすると表示されます。WSDLファイルは、ウィザード完了後に生成されます。

ネイティブ・フォーマット・ビルダー・ウィザードの詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

19.8 検証および優先度のプロパティの指定

メディエータを作成した後は、そのコンポーネントに指定されている操作またはイベント・サブスクリプションのプロパティを構成できます。メディエータ・エディタで、インバウンド・メッセージのスキーマを検証するかどうかを指定し、操作またはイベント・サブスクリプションのプロパティを指定できます。

インバウンド・メッセージのスキーマを検証するには、メディエータ・エディタの「ルーティング・ルール」セクションで、操作またはイベント・サブスクリプションの「有効な構文(XSD)の検証」チェック・ボックスを選択します。

Oracle Mediatorコンポーネントの優先度を指定するには、メディエータ・エディタの「ルーティング・ルール」セクションの「優先度」フィールドで0から9の間の値を選択します。これにより、すべてのOracle Mediatorサービス・コンポーネントにおいてメッセージが取得される順序が決まります。このプロパティは、パラレルのルーティング・ルールの場合のみ有効で、順次ルーティング・ルールの場合は無効です。優先度の詳細は、「パラレルのルーティング・ルールの基本原則」を参照してください。

19.9 メディエータ・サービス・コンポーネントの変更

メディエータの操作またはイベント・サブスクリプションは、メディエータ・エディタを使用して変更できます。

19.9.1 メディエータの操作の変更方法

操作を追加または削除することで、Oracle MediatorのWSDLファイルを変更できます。WSDLファイルの変更後、「WSDLのリフレッシュ」ダイアログを使用して変更を同期化します。

操作を変更する手順は、次のとおりです。

1. メディエータ・エディタで、「WSDL URL」フィールドの右側にある「WSDLからの操作のリフレッシュ」アイコンをクリックします。
「WSDLのリフレッシュ」ダイアログが表示されます。WSDLファイルが変更された場合、「WSDLのリフレッシュ」ダイアログには削除または追加される操作がすべて一覧表示されます。「リフレッシュにより、次のメディエータ操作が削除されます」フィールドには、WSDLファイルから削除された操作がすべて一覧表示されます。「リフレッシュにより、次のメディエータ操作が追加されます」フィールドに、WSDLファイルに追加された新規操作がすべて一覧表示されます。図19-30に、「WSDLのリフレッシュ」ダイアログを示します。

図19-30 「WSDLのリフレッシュ」ダイアログ

「図19-30 「WSDLのリフレッシュ」ダイアログ」の説明

2. 別のWSDLファイルを指定するには、「WSDL URL」フィールドの右側にある「既存のWSDLを検索します。」をクリックして既存のWSDLファイルを使用するか、または「スキーマからWSDLを生成します。」をクリックしてWSDLファイルを作成します。
「WSDLのリフレッシュ」ダイアログは、指定のWSDLファイルで定義された操作に基づいて更新されます。

3. 「OK」をクリックします。

4. 「ファイル」メニューから「すべて保存」を選択します。

19.9.2 メディエータのイベント・サブスクリプションの変更方法

メディエータ・エディタの「イベント・サブスクリプションの管理」オプションを使用すると、新規イベントのサブスクライブ、既存イベント・サブスクリプションの変更およびサブスクライブ済イベントからのサブスクライブ解除などを実行できます。

イベント・サブスクリプションを変更する手順は、次のとおりです。

1. メディエータ・エディタで、「イベント・サブスクリプション」の右側にある「イベント・サブスクリプションの管理」アイコンをクリックします。
図19-31に示すように、「サブスクライブ済イベント」ダイアログが表示されます。

図19-31 「サブスクライブ済イベント」ダイアログ

「図19-31 「サブスクライブ済イベント」ダイアログ」の説明

2. 次の機能のいずれも実行できます。

- 新規イベントをサブスクライブします。

- イベントからサブスクライブ解除します。

- イベントのフィルタ基準を変更または指定します。

- イベント・サブスクリプションの「一貫性」または「ロールとして実行」プロパティを変更します。
イベントの「一貫性」、「ロールとして実行」および「フィルタ」フィールドの詳細は、第19.5.1項「メディエータのインタフェース定義の構成方法」を参照してください。

3. 「OK」をクリックします。

4. 「ファイル」メニューから「すべて保存」を選択します。

20 Oracle Mediatorルーティング・ルールの作成

この章では、Oracle Mediatorルーティング・ルール、およびMediatorサービス・コンポーネントに対してルーティング・ルールを指定する方法について説明します。ルーティング・ルールには、トランスフォーメーション、フィルタリング、検証、マッピングおよびルーティング・ロジックが含まれます。

この章には次の項が含まれます:

- 第20.1項「ルーティング・ルールの概要」

- 第20.2項「再順序付けルール」

- 第20.3項「ルーティング・ルールの定義」

- 第20.4項「メディエータ・ルーティングのユースケース」

次の章で、特定のシナリオのためのルーティング・ルールの定義に関する追加情報を説明しています。

- 第21章「Oracle Mediatorにおける複数パート・メッセージの使用」

- 第22章「Oracle Mediatorエラー処理の使用」

- 第23章「Oracle Mediatorにおける再順序付け」

20.1 ルーティング・ルールの概要

ルーティング・ルールは、必要な仲介を実行するために定義する仲介ロジックまたは実行ロジックです。メディエータを使用すると、サービス・コンシューマとサービス・プロバイダの間でデータをルーティングできます。データはサービス間をフローするため、トランスフォーメーションが必要です。ルーティングとトランスフォーメーションの2つのタスクは、メディエータの中核となる処理内容です。ルーティング・ルールにより、メディエータで処理されたメッセージを次の宛先にどのように送信するかを指定できます。ルーティング・ルールは、メディエータによるメッセージの送信先、メッセージの送信方法、およびターゲット・サービスへの送信前にメッセージ構造に加える必要がある変更の内容を指定します。

ルーティング・ルールは、サービス操作またはイベント・サブスクリプションのいずれかでトリガーできます。サービス操作は、同期、非同期または一方向のいずれかです。ルーティング・ルールには、次の2つのタイプがあります。

- 静的ルーティング・ルール
起動コンテキストによって変更されることのない一貫して適用される静的ルールです。

- 動的ルーティング・ルール
Oracle Rules Dictionaryへのルーティング・ロジックの外部化を可能にする動的ルールです。Oracle Rules Dictionaryは、ルーティング・ロジックの動的変更を可能にします。

ルーティング・ルールの作成の詳細は、第20.3.2項「静的ルーティング・ルールの作成方法」および第20.3.3項「動的ルーティング・ルールの作成方法」を参照してください。標準のメッセージ交換パターンの詳細とそれらのメディエータでの処理方法は、第24章「Oracle Mediatorのメッセージ交換パターンの理解」を参照してください。

20.1.1 静的ルーティング・ルール

起動コンテキストによって変更されることのない静的ルーティング・ルールです。この場合のルーティングは、エコー、別のサービスへのルーティングまたはイベントの公開のいずれかです。

静的ルールを定義するときは、次のタイプの情報を指定できます。

- ターゲット・サービス
メディエータにより、指定するターゲット・サービスにメッセージが送信されます。このサービスは、WSDLインタフェースまたはJavaインタフェースとして定義できます。ターゲット・サービスの起動の詳細は、第20.3.2.1項「メディエータ・サービスまたはイベントの指定方法」を参照してください。

- 実行タイプ
メディエータは、ルーティング・ルールを順次(同じスレッド内で実行)またはパラレル(異なるスレッドで実行)のいずれかで実行します。実行タイプの指定方法の詳細は、第20.3.2.3項「順次実行またはパラレル実行の指定方法」を参照してください。

注意:

同期サービス起動の場合、ルーティング・ルールは必ず順次にする必要があります。

- リプライ、コールバックおよびフォルト・ハンドラ
同期リプライ、コールバックおよびフォルト・メッセージをメディエータで処理する方法を定義できます。ハンドラの詳細は、第20.3.2.4項「レスポンス・メッセージの構成方法」、第20.3.2.7項「フォルトの処理方法」および第20.1.1.2項「静的ルーティング・ルール・コンポーネント」を参照してください。

20.1.1.1 静的ルールのタイプ

次のタイプのメディエータの静的ルールを定義できます。

- フィルタ式
メッセージのコンテンツ(ペイロードまたはヘッダー)に適用するフィルタ式を定義できます。フィルタを定義する場合、コンテンツはサービスの起動前に分析されます。たとえば、メッセージに顧客IDが含まれている場合、またはその顧客IDの値が特定のパターンと一致する場合のみサービスを起動することを指定する、フィルタ式を適用できます。フィルタ式の指定方法の詳細は、第20.3.2.8「メッセージをフィルタリングする式の指定方法」を参照してください。

- トランスフォーメーション
メディエータでは、メッセージをサービスに転送する前にメッセージ・データを変換できます。データのマッピングまたは値の割当てにより、ターゲット・ペイロードで値を設定するようトランスフォーメーションを定義できます。

XSLTマッパーを使用すると、XMLスキーマ間でメッセージを変換するために、メッセージ本文全体に適用するトランスフォーメーションを定義できます。値の割当て機能では個々のフィールドを処理します。このダイアログを使用すると、メッセージ(ペイロード、ヘッダーなど)、定数または様々なシステム・プロパティ(データ・パスに存在するアダプタのプロパティなど)から値を割り当てることができます。トランスフォーメーションの定義方法の詳細は、第20.3.2.9項「トランスフォーメーションの作成方法」および第20.3.2.10項「値の割当て方法」を参照してください。

- 式にあるヘッダー変数へのアクセス
メディエータは、現在のルーティング・ルール操作用の式の作成に使用したSOAPヘッダーを検出できます。ヘッダー・アクセス方法の詳細は、第20.3.2.12項「フィルタおよび割当てのためのヘッダー・アクセス方法」および第20.3.2.12.2項「フィルタおよび割当てのためのプロパティ・アクセスに使用する式の手動作成」を参照してください。

- Schematronベースの検証
インバウンド・メッセージの様々な部分を検証するためにメディエータが使用する必要のあるSchematronファイルを指定できます。Schematronをベースにした検証の実行方法の詳細は、第20.3.2.13項「セマンティク検証の使用方法」を参照してください。

- Javaコールアウト
カスタムJavaクラス・コールアウトにより、正規表現のみでは十分でないときに、その正規表現をJavaコードと併用できるようにします。Javaコールアウトの使用方法の詳細は、第20.3.2.15「Javaコールアウトの使用方法」を参照してください。

- ユーザー定義拡張関数
XSLTマッパーで使用可能な独自の関数セットです。ユーザー定義拡張関数の使用方法の詳細は、「ユーザー定義拡張関数を追加する手順」を参照してください。

20.1.1.2 静的ルーティング・ルール・コンポーネント

静的ルーティング・ルールでは、次のコンポーネントを定義します。

- リクエスト・ハンドラ: メディエータでの受信リクエストの処理方法を定義します。

- リプライ・ハンドラ: コールしたサービスからの同期レスポンスをメディエータが処理する方法を定義します。

- フォルト・ハンドラ: コールしたサービスからの名前付きフォルトまたは宣言済フォルトをメディエータが処理する方法を定義します。

- コールバック・ハンドラ: コールしたサービスからの非同期レスポンスとコールバックをメディエータが処理する方法を定義します。

- コールバックのタイムアウト・ハンドラ: 特定の非同期リクエストに対するタイムアウト処理を実行するまでに、メディエータが、非同期レスポンスとコールバックを待機する時間を定義します。

- イベントの公開およびサービスの起動: ハンドラの構成に応じて、他のサービスのコールまたはイベントの公開を実行します。

20.1.2 動的ルーティング・ルール

Oracle Rules Dictionaryへのルーティング・ロジックの外部化を可能にする動的ルーティング・ルールです。Oracle Rules Dictionaryは、ルーティング・ルール内のルーティング・ロジックの動的変更を可能にします。この機能は、デシジョン・サービスおよびOracle Rulesを使用して、実行時にルーティング・ロジックを取得します。

動的ルーティングは、プロセスが経由するパスを決定する制御ロジックをプロセスの実行から分離します。動的ルーティングのシナリオでは、デシジョン・マトリックスによって各ルーティングに対して選択されるレベル2タイプのサービスが決定されます。レベル2タイプのサービスのデシジョンに影響を与える要因は、チャネル、顧客タイプなどです。このソリューションによって、ビジネス・アナリストはルーティングを変更せずに、このデシジョン・マトリックスを外部から変更できます。アウトバウンド・サービスを決定するためには、デシジョン・マトリックスを評価する必要があります。

動的ルーティング・ルールについては、項20.3.3項「動的ルーティング・ルールの作成方法」で詳しく説明します。

20.1.3 順次実行およびパラレル実行

ルーティング・ルールは、順次またはパラレルで実行できます。この項では、両方の実行タイプの基本原則について説明します。操作またはイベントに順次およびパラレルの両方のルーティング・ルールがある場合は、最初に順次ルーティング・ルールが評価されてアクションが実行され、次にパラレルのルーティングがパラレル実行のためにキューに入れられます。

注意:

リクエスト/レスポンス・インタフェースを使用するメディエータ・サービス・コンポーネントにパラレルのルーティング・ルールのみが設定されている場合、そのメディエータ・サービス・コンポーネントはコール元にレスポンスを返信しません。このタイプのメディエータ・サービス・コンポーネントは作成できますが、メディエータ・サービス・コンポーネントのコール元が、実行時にレスポンスを受信することはありません。

20.1.3.1 順次ルーティング・ルールの基本原則

メディエータは、次の原則に基づいて順次ルーティング・ルールを処理します。

- メディエータは、ルーティングを評価し、結果の処理を順次実行します。順次ルーティングは、コール元と同じスレッドとトランザクションで評価されます。

- メディエータは常に、受信メッセージを処理しているスレッドを介して伝播されたグローバル・トランザクションにメディエータ自体を登録します。たとえば、インバウンドJCAアダプタがメディエータを起動すると、そのメディエータは、JCAアダプタが開始したトランザクションにメディエータ自体を登録します。

- メディエータは、順次ルーティング・ルールの実行中に、ターゲット・コンポーネントと同じスレッドを介してトランザクションを伝播します。

- 外部エンティティによって伝播されたトランザクションを、メディエータがコミットまたはロールバックすることはありません。

- メディエータがトランザクションを管理するのは、スレッド起動メディエータにアクティブなトランザクションが存在していない場合のみです。たとえば、メディエータがインバウンドSOAPサービスから起動された場合、そのメディエータはトランザクションを開始し、成功および失敗に応じてトランザクションをコミットまたはロールバックします。

20.1.3.2 パラレルのルーティング・ルールの基本原則

メディエータは、次の原則に基づいてルーティング・ルールをパラレルで処理します。

- メディエータは、ルーティングをキューに入れ、別々のスレッドでパラレルに評価します。
各メディエータ・サービス・コンポーネントのメッセージは、重み付けラウンド・ロビン方式で取得され、すべてのメディエータ・サービス・コンポーネントで確実にパラレル処理サイクルが受け入れられます。これは、1つ以上のメディエータ・サービス・コンポーネントで、他のコンポーネントよりも多くのメッセージが生成される場合でも同様です。使用される重み付けは、メディエータ・サービス・コンポーネントの設計時に設定されたメッセージ優先度です。メッセージ優先度の高いコンポーネントほど、多数のパラレル処理サイクルが割り当てられます。

メディエータ・サービス・コンポーネントの優先度を指定するには、メディエータ・エディタで「優先度」フィールドを設定します。優先度は0から9までの範囲で、9が最高優先度です。デフォルトの優先度は4です。

注意:

「優先度」プロパティの適用対象は、パラレルのルーティング・ルールのみです。

- メディエータは、各パラレル・ルールを処理するための新規トランザクションを開始します。開始されたトランザクションは、メディエータのパラレル・メッセージ・デハイドレーション・ストアへのエンキューで終了します。
たとえば、メディエータ・サービス・コンポーネントにパラレルのルーティング・ルールが1つある場合は、1つのメッセージがメディエータのパラレル・メッセージ・デハイドレーション・ストアにエンキューされます。次に、ストアに対するパラレル・メッセージ・ディスパッチャがトランザクションを開始し、データベース・ストアからメッセージを読み取り、このルーティング・ルールのターゲット・コンポーネントまたはサービスを起動します。リスナー・スレッドによって開始されるトランザクションは、完全に新規のトランザクションであり、ターゲット・コンポーネントに伝播されます。

注意:

メッセージのデハイドレーションでは、パラレル・ルーティング・ルール対象の受信メッセージがデータベースに格納されるため、ワーカー・スレッドはそれらのメッセージを後で処理できます。

- メディエータはトランザクションの開始元であるため、これらのトランザクションをコミットまたはロールバックします。

20.2 再順序付けルール

メディエータには再シーケンサが含まれており、これは、関連がありながらも順序が正しくないメッセージを、使用されている再シーケンサのタイプと定義されているルールに基づいて適切な順序に並べ替えます。受信メッセージがランダムな順番で着信した場合、再シーケンサは、メッセージを順次または時系列の情報に基づいて並べ替え、再順序付けの構成に基づいた正しい順序でメッセージをターゲット・サービスに送信します。

メッセージの再順序付けの詳細は、第23章「Oracle Mediatorにおける再順序付け」を参照してください。

20.3 ルーティング・ルールの定義

ルーティング・ルールは、インタフェースが定義されているメディエータにのみ定義できます。インタフェースの定義方法の詳細は、第19.6.1項「メディエータのインタフェースの定義方法」を参照してください。

20.3.1 「ルーティング・ルール」セクションへのアクセス方法

メディエータ・エディタの「ルーティング・ルール」セクションで、ルーティング・ルールを定義します。

「ルーティング・ルール」セクションにアクセスする手順は、次のとおりです。

次のいずれかの方法を使用して、メディエータ・エディタの「ルーティング・ルール」セクションにアクセスできます。

- SOAコンポジット・エディタからアクセスする方法

1. ルーティング・ルールを指定するメディエータを示すアイコンをダブルクリックします。

2. 「ルーティング・ルール」セクションが表示されない場合は、「ルーティング・ルール」セクションの横のプラス(+)アイコンをクリックします。

- アプリケーション・ナビゲータからアクセスする方法

1. 「アプリケーション・ナビゲータ」からSOAプロジェクトを開き、次に「SOAコンテンツ」フォルダを開きます。

2. 「SOAコンテンツ」フォルダで、ルーティング・ルールを指定するメディエータ・ファイルの名前をダブルクリックします。
メディエータ・ファイルには、MPLAN拡張子が付きます。

3. 「ルーティング・ルール」セクションが表示されない場合は、「ルーティング・ルール」セクションの横のプラス(+)アイコンをクリックします。

図20-1に、メディエータ・エディタの「ルーティング・ルール」セクションを示します。

図20-1 メディエータ・エディタ - 「ルーティング・ルール」セクション

「図20-1 メディエータ・エディタ - 「ルーティング・ルール」セクション」の説明

図20-2では、「ルーティング・ルール」セクションのアイコンをリストして説明します。

図20-2 「ルーティング・ルール」セクションのアイコン

「図20-2 「ルーティング・ルール」セクションのアイコン」の説明

20.3.2 静的ルーティング・ルールの作成方法

- この後の各項では、メディエータの静的ルーティング・ルールの定義(サービスおよびイベントの指定、ハンドラ、トランスフォーメーション、式、フィルタなどの定義)に関する情報および手順について説明します。

20.3.2.1 メディエータ・サービスまたはイベントの指定方法

メディエータ・コンポーネントを作成した後は、そのメディエータをインバウンド・サービス操作またはイベント・サブスクリプション、およびアウトバウンド・ターゲットに関連付けます。ターゲットは、アウトバウンド・サービス操作またはイベントの公開です。ターゲットはメディエータがメッセージを送信する次のサービスまたはイベントを指定し、起動するサービス操作も指定します。サービスまたはイベントをターゲット・タイプとして指定できます。

ソース・メッセージは、トランスフォーメーション、検証、割当てまたは順序操作の実行後に、初期のコール元にエコーして戻すこともできます。エコーは、メディエータ・コンポーネントに同期または非同期のインタフェースがある場合にのみ指定できます。エコーが同期、非同期のいずれで行われるかは、コール元のWSDLファイルによって決まります。エコー・オプションは、インバウンド・サービス操作に対してのみ使用可能で、イベント・サブスクリプションには使用できません。

エコー・オプションの目的は、メディエータのすべての機能をコール可能なサービスとして公開することによって、他のサービスへのルーティングの必要性をなくすことです。たとえば、メディエータをコールしてトランスフォーメーション、検証または割当てを実行した後、別の場所にルーティングすることなくアプリケーションにメディエータをエコーして戻すことができます。

1つのインバウンド操作またはイベントに複数のルーティングを指定できます。各ルーティングは、1つのターゲット・サービス起動またはイベントにマップされます。したがって、特定のターゲット・サービスに対して複数のサービス起動を指定したり、複数イベントを発生させるには、各ターゲットに1つのルーティング・ルールを指定する必要があります。たとえば、メッセージ・ペイロードに基づいて、サービスに定義された次の操作から、ある操作を起動できます。

- insert

- update

- updateid

- delete

このため、各操作に1つずつ、4つのルーティング・ルールを作成する必要があります。その後、各ルールにフィルタ式を指定する場合は、図20-3に示すように、メッセージ・ペイロードに基づいて各メッセージ・インスタンスに適用するターゲットおよび操作を指定できます。

図20-3 インバウンド操作に対する複数のルーティング

「図20-3 インバウンド操作に対する複数のルーティング」の説明

サービスを起動する手順は、次のとおりです。

この手順を実行するには、WSDLドキュメントまたはJavaインタフェースでターゲット・サービスを定義する必要があります。

1. 「ルーティング・ルール」セクションで、ルーティング・ルールを定義中の操作の横にある「追加」をクリックし、次に「静的ルーティング・ルール」を選択します。
図20-4に示すように、「ターゲット・タイプ」ダイアログが表示されます。

図20-4 「ターゲット・タイプ」ダイアログ

「図20-4 「ターゲット・タイプ」ダイアログ」の説明

2. 「サービス」をクリックします。
図20-5に示すように、「ターゲット・サービス」ダイアログが表示されます。

図20-5 「ターゲット・サービス」ダイアログ

「図20-5 「ターゲット・サービス」ダイアログ」の説明

3. 「ターゲット・サービス」ダイアログで、サービスが提供する操作に移動し、選択します。

注意:

WSDLファイルまたはJavaインタフェースで定義されているサービスを選択できます。図20-5に示すように、サービスは複数の操作で構成できます。

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

5. Javaインタフェースで定義されたターゲット・サービスを選択した場合、「必要なインタフェース」ダイアログが表示されます。「はい」をクリックして必要なWSDLファイルを作成し、次に確認ダイアログで「OK」をクリックします。
ルーティング・ルールを定義できる新規の「静的ルーティング」セクションが表示されます。

6. この章の後続の項の説明に従って、ルーティング・ルールを構成します。

イベントをトリガーする手順は、次のとおりです。

1. 「ルーティング・ルール」セクションで、ルーティング・ルールを定義中の操作の横にある「追加」をクリックし、次に「静的ルーティング・ルール」を選択します。
図20-4に示すように、「ターゲット・タイプ」ダイアログが表示されます。

2. 「イベント」をクリックします。
「イベント・チューザ」ダイアログが表示されます。

3. 「イベント定義」フィールドの右側にある「検索」をクリックします。

「SOAリソース・ブラウザ」ダイアログが表示されます。

4. イベント(.edl)・ファイルを選択し、「OK」をクリックします。
図20-6に示すように、選択したファイルに定義されているイベントが「イベント」フィールドに移入されます。

図20-6 「イベント・チューザ」ダイアログ

「図20-6 「イベント・チューザ」ダイアログ」の説明

注意:

既存のイベント定義ファイルを参照するかわりに、「新規イベント定義(edl)ファイルを作成します。」をクリックし、「イベント定義ファイルの作成」ダイアログのフィールドを完了して、新規ファイルを作成できます。

5. イベントを選択します。

6. 「OK」をクリックします。
ルーティング・ルールを定義できる新規の「静的ルーティング」セクションが表示されます。

7. この章の後続の項の説明に従って、ルーティング・ルールを構成します。

サービスをエコーする手順は、次のとおりです。

1. 「ルーティング・ルール」セクションで、ルーティング・ルールを定義中の操作の横にある「追加」をクリックし、次に「静的ルーティング・ルール」を選択します。
図20-7に示すように、「ターゲット・タイプ」ダイアログが表示されます。

図20-7 「ターゲット・タイプ」ダイアログ

「図20-7 「ターゲット・タイプ」ダイアログ」の説明

2. 「エコー」をクリックします。

注意:

インタフェースが同期または非同期の場合は、「エコー」ボタンのみが「ターゲット・タイプ」ダイアログに表示されます。

図20-8に、同期エコーのルーティング・ルールを示します。非同期エコーの場合は、戻りのアイコンが点線になります。

図20-8 エコー操作をサポートするメディエータのサンプル

「図20-8 エコー操作をサポートするメディエータのサンプル」の説明

20.3.2.2 サービスのエコーに関する注意事項

エコー・オプションには次の制限があります。

- サービスのエコーは、メディエータのインタフェースが、次のタイプのWSDLファイルの場合のみサポートされます。

- リクエスト/リプライ

- リクエスト/リプライ/フォルト

- リクエスト/コールバック

注意:

エコー・オプションは、メディエータのインタフェースがリクエスト/リプライ/フォルト/コールバックのWSDLファイル、または一方向WSDLファイルの場合には使用できません。

- エコー・オプションは、リクエスト/リプライおよびリクエスト/リプライ/フォルトのような同期操作で使用できます。

注意:

同期操作のメディエータでは、パラレルのルーティング・ルールはサポートされないため、エコー・オプションを同期操作で使用できるのは、ルーティング・ルールが順次実行の場合のみです。

- 条件フィルタ付きの同期操作の場合は、フィルタ条件をfalseに設定していると、エコー・オプションではレスポンスがコール元に返されません。かわりに、nullレスポンスが返されます。

- エコー・オプションを非同期操作で使用できるのは、メディエータのインタフェースにコールバック操作が指定されている場合のみです。この場合、エコーは別のスレッドで実行されます。

注意:

非同期のエコー・オプションを使用できるのは、ルーティング・ルールがパラレル実行の場合のみです。エコー・オプションを使用する場合、非同期操作のメディエータでは、順次実行のルーティング・ルールはサポートされません。

20.3.2.3 順次実行またはパラレル実行の指定方法

ルーティング・ルールは、パラレルまたは順次のいずれかで実行できます。ルーティング・ルールの実行タイプを指定するには、「ルーティング・ルール」セクションで、「順次」または「パラレル」実行タイプを選択します。

20.3.2.4 レスポンス・メッセージの構成方法

メディエータ・ルーティング・ルールでは、レスポンス・メッセージを同期および非同期の相互作用内で処理する方法を指定できます。同期相互作用の場合は、レスポンスとフォルト・メッセージのトランスフォーメーションと割当てを指定できます。レスポンスとフォルト・メッセージを別のサービスまたはイベントに転送するか、または初期のコール元にレスポンスおよびフォルトを受信する用意がある場合は、それらを初期のコール元に戻すことができます。

非同期相互作用の場合は、トランスフォーメーションと割当て、およびレスポンスを受信するまでのタイムアウト時間を指定できます。タイムアウト時間は、秒、時、日、月または年で指定できます。タイムアウト時間のデフォルト値は無限です。コールバック・レスポンスが指定したタイムアウト時間内に返されない場合、タイムアウトしたレスポンスは別のサービス、別のイベントに転送されるか、初期のコール元に戻されます。

メディエータのレスポンスを双方向サービスにルーティングすることはできません。レスポンスを双方向サービスにルーティングする場合は、最初のメディエータと双方向サービスの間に一方向のメディエータを使用する必要があります。レスポンスを最初に一方向のメディエータに転送し、その一方向のメディエータが双方向サービスをコールする必要があります。

注意:

- 0(ゼロ)のタイムアウト時間指定はサポートされていません。

- コールバックを受信し、そのコールバックの処理に失敗した場合は、タイムアウト・ハンドラに指定されているアクションを処理するために、タイムアウト・ハンドラがデフォルトで起動されます。

- 通常、コール元は、100ミリ秒待機した後でコールバックを受信します。ただし、順次ルーティング・ルールと同期インタフェース・サービスへの接続を使用するブリッジ・メディエータがある場合は、ルーティング・ルールがすべて順次であるプログラムのフローが複雑となるため、コール元でのコールバックの受信準備にさらに時間がかかる場合があります。この問題は、ブリッジ・メディエータのルーティング・ルールをパラレルに変更することで回避できます。

非同期処理のタイムアウト時間を指定する手順は、次のとおりです。

メディエータ・エディタの「ルーティング・ルール」セクションで、次の手順を実行します。

1. 「コールバック」セクションで、「タイムアウト期間」フィールド側の「<<ターゲット操作>>」フィールドの横にある「ターゲット・サービス操作を参照します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

2. 「サービス」、「イベント」または「初期コール元」を選択します。
「サービス」または「イベント」を選択した場合は、選択した内容によって「ターゲット・サービス」または「イベント・チューザ」が表示されます。

3. サービスまたはイベントを選択します。

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

5. 「タイムアウト期間」フィールドで、タイムアウト期間の単位数を入力し、ドロップダウン・リストから時間の単位を選択します。
タイムアウトしたレスポンスが、指定したサービスまたはイベントに転送されます。

注意:

ルーティング・ルールの数が多く、ルーティング・ルールの実行に要する時間がトランザクション・タイムアウトを超える場合は、トランザクション・タイムアウトの値を、すべてのルーティング・ルールの実行に要する時間より長い時間に設定する必要があります。

20.3.2.5 早すぎるコールバックの処理方法

コールバック・メッセージは、トランザクションの開始が完了する前に着信する場合があります。この場合、メディエータでの相関は失敗します。早すぎるコールバックの問題がある場合は、oracle.tip.mediator.callback.correlationWaitDuratino_in_secondsプロパティを使用して、コールバックを再試行する前にコールバック・スレッドが待機する期間(秒単位)を設定できます。

このプロパティは、composite.xmlファイル内のMediatorコンポーネントを定義するcomponent要素で定義します。次に示す例では、再試行前の待機時間は15秒です。

<component name="Mediator1">
<implementation.mediator src="Mediator1.mplan"/>
<property name="oracle.tip.mediator.callback.correlationWaitDuration_in_
seconds">15</property>
</component>

20.3.2.6 複数コールバックの処理方法

1つのメディエータで複数のコールバックを処理することはできません。複数のコールバックを受信するメディエータが含まれているコンポジット・アプリケーションがある場合、そのコンポジット・アプリケーションの動作は不明です。たとえば、図20-9に示したシナリオでは、AsyncMediatorがAsyncEchoMediator1およびAsyncEchoMediator2からのコールバック・レスポンスをFileInMediatorに転送します。このようなフローでは、AsyncMediatorは、AsyncEchoMediator1とAsyncEchoMediator2の両方からのコールバックを返すか、またはいずれか一方のコールバックを返す可能性があります。正確な動作はランダムであり、予測できません。

図20-9 複数のコールバックを処理するメディエータのサンプル

「図20-9 複数のコールバックを処理するメディエータのサンプル」の説明

20.3.2.7 フォルトの処理方法

ターゲット・サービスの操作に1つ以上のフォルトがある新規ルーティング・ルールを作成する場合でも、メディエータ・エディタには、単一フォルトのルーティング・セクションが表示されます。ソース・メディエータ・サービス・コンポーネントが1つ以上のフォルトをサポートしている場合、デフォルトでは、フォルトはコール元に戻されます。ただし、ルーティングするソース・フォルト名およびターゲット・フォルト名を指定できます。サービス・ブラウザを使用して、フォルトを別のターゲットにルーティングすることもできます。

追加のフォルト・ルーティングを定義する手順は、次のとおりです。

メディエータ・エディタの「ルーティング・ルール」セクションで、次の手順を実行します。

1. 図20-10に示すように、「フォルト」セクションで、「別のフォルト・ルーティングを追加します。」ボタンをクリックします。

図20-10 2番目のフォルトの追加

「図20-10 2番目のフォルトの追加」の説明

別のフォルト・セクションがルーティング・ルール・ボックスに表示されます。

2. 新規フォルトに対して、ターゲット・サービス、トランスフォーメーションおよび値の割当てを構成します。
図20-11に、ファイル・アダプタ・サービスにルーティングされている2番目のフォルトを示します。

図20-11 ルーティング・ルールに追加された2番目のフォルト

「図20-11 ルーティング・ルールに追加された2番目のフォルト」の説明

注意:

異なるトランスフォーメーションを使用して、複数のターゲットに同じフォルトをルーティングできます。

フォルト・ルーティング・セクションを削除する手順は、次のとおりです。

メディエータ・エディタの「ルーティング・ルール」セクションで、次の手順を実行します。

- 図20-12に示すように、ターゲット・サービス・フィールドをクリックして削除するフォルト・ルーティングをハイライト表示し、「選択したフォルト・ルーティングを削除します。」をクリックします。

図20-12 フォルト・ルーティングの削除

「図20-12 フォルト・ルーティングの削除」の説明

20.3.2.8 メッセージをフィルタリングする式の指定方法

フィルタ式ルーティング・ルールを使用すると、ペイロードに基づいてメッセージをフィルタリングできます。特定のメッセージ・インスタンスに対してフィルタ式がtrueと評価されると、そのメッセージはルーティング・ルールに指定されているターゲット・サービスまたはイベントに送信されます。

たとえば、アメリカとカナダのような異なる2国にいる顧客にデータをルーティングする場合、アメリカの顧客には携帯の製品系列に関する通知のみを、カナダの顧客には固定電話の製品系列の通知のみを送信するとします。このルーティングのためには、メッセージをターゲット顧客に送信するコンポーネントと操作の各組合せについてルーティング・ルールを定義する必要があります。さらに、アメリカまたはカナダの顧客にメッセージを送信するルーティング・ルールには、フィルタ式を指定します。

フィルタ式のメッセージ・プロパティまたはメッセージ・ヘッダーを定義することもできます。

フィルタ式のメッセージ・プロパティ

例20-1に、フィルタ式のメッセージ・プロパティの2つ例を示します。

例20-1 フィルタ式のメッセージ・プロパティ

$in.property.custom.Priority = '1'

$in.property.tracking.ecid = '2'

フィルタ式のメッセージ・ヘッダー

例20-2に、フィルタ式のメッセージ・ヘッダーの2つ例を示します。

例20-2 フィルタ式のメッセージ・ヘッダー

$in.header.wsse_Security/wsse:Security/Priority = '234'

$in.header.wsse_Security/wsse:Security/Priority = '234'

このフィルタ式のメッセージ・ヘッダーが機能するには、.mplanファイルのルート要素に例20-3に示す属性を追加する必要があります。

例20-3 追加する属性

wsse = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-
secext-1.0.xsd"

メッセージをフィルタリングする式を指定する手順は、次のとおりです。

式ビルダーを使用すると、フィルタ式をグラフィカルに作成できます。「式ビルダー」ダイアログには、フィルタ式の設計を支援するコンポーネントやコントロールが含まれています。

1. 「ルーティング・ルール」セクションの「フィルタ式」フィールドの右側にある「式ビルダーの起動」アイコンをクリックします。
図20-13に示すように、「式ビルダー」ダイアログが表示されます。

図20-13 「式ビルダー」ダイアログ

「図20-13 「式ビルダー」ダイアログ」の説明

2. 「式」フィールドに値を追加するには、「変数」フィールドまたは「関数」パレットで、必要な値をダブルクリックします。変数要素、関数および手動で入力したテキストの組合せを使用して、このウィンドウで、特定のルーティング・ルールに対してメッセージ・ペイロードをフィルタリングする式を作成できます。
表20-1で、「式ビルダー」ダイアログの各フィールドについて説明します。

表20-1 「式ビルダー」フィールド

フィールド

説明

式

このフィールドには、メッセージのフィルタに使用される実際の式が含まれます。フィルタ式は手動、または「変数」フィールドおよび「関数」パレットを使用して入力できます。

このフィールドの右上部に表示されている各アイコンを使用すると、最後に行った編集の取消し、最後に行った編集の再実行、または「式」フィールド全体の消去を実行できます。

変数

このフィールドには、メディエータ・コンポーネントに対して定義されたメッセージが含まれます。Oracle JDeveloperはメディエータのWSDLファイルを解析し、メッセージ定義を「変数」フィールドに表示します。入力メッセージは$in変数に格納され、$in.propertiesを使用して入力メッセージのプロパティにアクセスすることができます。

入力メッセージが複数のパートで構成されている場合は、$in.partnameを使用して、入力メッセージのパートにアクセスします。

「関数」パレット

このリストには、式に挿入できる関数のリストが表示されます。関数を選択すると、その関数が「式」フィールドに追加されたときにどのように表示されるかを示すプレビューが「コンテンツのプレビュー」フィールドに表示され、その関数の説明が「説明」フィールドに表示されます。

コンテンツのプレビュー

このフィールドには、「変数」フィールドまたは「関数」パレットで選択した値が「式」フィールドに挿入されたときの表示状態で示されます。

説明

このフィールドには、「変数」フィールドまたは「関数」パレットで選択した値の説明が表示されます。

メッセージ・ペイロードのフィルタ式を指定する手順は、次のとおりです。

1. 「ルーティング・ルール」セクションの「フィルタ式」フィールドの右側にある「式ビルダーの起動」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。

2. 「変数」フィールドで、メッセージ定義を開き、式の基になるメッセージ要素を選択します。
たとえば、図20-14で選択されたCustomerId要素が表示されます。

図20-14 「式ビルダー」ダイアログ – 変数要素の選択

「図20-14 「式ビルダー」ダイアログ – 変数要素の選択」の説明

3. 「式に挿入」をクリックします。
図20-15に示すように、式が「式」フィールドに追加されます。

図20-15 「式ビルダー」ダイアログ – 変数要素の挿入

「図20-15 「式ビルダー」ダイアログ – 変数要素の挿入」の説明

4. 「関数」リストから、メッセージ・ペイロードに適用する関数を選択します。たとえば、equalsを選択します。
関数は、「関数」リストの下矢印をクリックすると表示されるカテゴリ別にグループ化されます。たとえば、下矢印をクリックして「Logical Functions」を選択すると、図20-15に示すようにリストが表示されます。

5. 「式に挿入」をクリックします。
選択した関数のXPath式が「式」フィールドに挿入されます。

6. 式を完成します。
この例では、図20-16に示すように、顧客IDがtrueと評価されるには1001である必要があります。

図20-16 サンプルの「式ビルダー」ダイアログ – 値の入力後

「図20-16 サンプルの「式ビルダー」ダイアログ – 値の入力後」の説明

7. エラーが検出された場合、式は手動で編集するか、式の編集アイコンを使用できます。図20-17には、これらのアイコンがまとめられています。

図20-17 式の編集アイコン

「図20-17 式の編集アイコン」の説明

8. 「OK」をクリックします。
式が「ルーティング・ルール」セクションに追加されます。

フィルタ式の変更または削除は、「フィルタ式の追加」アイコンをダブルクリックし、「式ビルダー」の「式」フィールドで実行します。

20.3.2.9 トランスフォーメーションの作成方法

Oracle JDeveloperには、XSLTマッパーが用意されています。XSLTマッパーを使用すると、データをXMLスキーマ(XSDファイルで表されます)間で変換するためのマッパー・ファイル(XSLファイル)を指定できます。XSLTマッパーを使用することで、異なるスキーマを使用しているアプリケーション間でのデータ交換が可能になります。たとえば、受信した注文書スキーマを、送信する請求書スキーマにマップできます。XSLファイルを定義した後は、そのファイルを複数のルーティング・ルール仕様で再利用できます。

トランスフォーメーションを作成する手順は、次のとおりです。

1. 「ルーティング・ルール」セクションで、「次を使用して変換」フィールドの右側にある「既存のマッパー・ファイルを選択するか、新規マッパー・ファイルを作成します。」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。既存のXSLファイルを選択するか、XSLTマッパーを使用して必要なトランスフォーメーションを実行する新規XSLファイルを作成できます。

2. 次のいずれかを実行します:

- マッピング・ファイルが存在する場合は、「既存のマッパー・ファイルの使用」を選択し、次に「参照」をクリックして、使用するマッパー・ファイルを検索および選択します。

- マッパー・ファイルを作成するには、「新規マッパー・ファイルの作成」を選択し、次に入力情報を入力します。

3. 同期リプライ、コールバック・レスポンスまたはフォルト・メッセージに対して、前述の手順を繰り返します。
図20-18に示すように、同期リプライまたはフォルト・メッセージの場合、「リプライ・トランスフォーメーション・マップ」ダイアログまたは「フォルト・トランスフォーメーション・マップ」ダイアログには、「リクエストをリプライ・ペイロードに含める」オプションがあります。

図20-18 「リプライ・トランスフォーメーション・マップ」ダイアログ

「図20-18 「リプライ・トランスフォーメーション・マップ」ダイアログ」の説明

4. 同期相互作用の元のメッセージを含む$initial変数を作成するには、「リクエストをリプライ・ペイロードに含める」オプションを選択します。
図20-19に示すように、変数が作成されます。

図20-19 XSLファイルの初期変数

「図20-19 XSLファイルの初期変数」の説明

注意:

初期メッセージも複数のパートで構成されます。$initial.partnameを使用して、初期メッセージのパートにアクセスします。インバウンド・メッセージとアウトバウンド・メッセージのパートが同じ場合、データ交換にトランスフォーメーションは必要ありません。

XSLTマッパーの詳細は、第40章「XSLTマッパーを使用したトランスフォーメーションの作成」を参照してください。

ユーザー定義拡張関数を追加する手順は、次のとおりです。

式ビルダーを使用すると、ユーザー定義拡張関数を含めることができます。

1. XPath関数を作成します。

2. Jaxen XPath関数を、サーバーのxpath-function.xmlファイルのメディエータ・サービス・コンポーネントに登録します。

3. Oracle JDeveloperを起動します。

4. 式ビルダーで式をカスタマイズします。

5. Oracle JDeveloperプロジェクトをOracle WebLogic Serverにデプロイします。

6. ユーザー定義拡張関数を格納したJARファイルを$BEAHOME/user_projects/domains/soainfra/autodeploy/soa-infra/APP-INF/libディレクトリにコピーします。

7. プロジェクトの.mplanファイルを、次のように変更します。

- 拡張関数用に定義した関数ネームスペースをMediator要素の下に追加します。

- 関数名をExpression要素に追加します。

図20-20に、この変更操作を示します。

図20-20 プロジェクトの.mplanファイル – ユーザー定義拡張関数を使用するように変更済

「図20-20 プロジェクトの.mplanファイル – ユーザー定義拡張関数を使用するように変更済」の説明

8. 適切なペイロードでテスト・ページを起動します。

20.3.2.10 値の割当て方法

メッセージのヘッダー、ペイロードおよびプロパティは、「値の割当て」フィールドを使用してソースからターゲットに伝播できます。図20-21に、「値の割当て」ダイアログを示します。このダイアログは、「ルーティング・ルール」セクションの「値の割当て」アイコンをクリックすると表示されます。

図20-21 「値の割当て」ダイアログ

「図20-21 「値の割当て」ダイアログ」の説明

ターゲット・メッセージのプロパティを設定する手順は、次のとおりです。

1. 「値の割当て」ダイアログの「追加」をクリックします。
図20-22に示すように、「値の割当て」ダイアログが表示されます。

図20-22 「値の割当て」ダイアログ

「図20-22 「値の割当て」ダイアログ」の説明

2. 「From」セクションで、「タイプ」ボックスから次のオプションのいずれかを選択します。

- プロパティ: ターゲット・メッセージにプロパティの値を割り当てる場合に選択します。「プロパティ」リストには、事前に定義されたプロパティのリストが表示されます。任意のユーザー定義プロパティ名を入力することもできます。

- 式: ターゲット・メッセージに式の値を割り当てる場合に選択します。「式」フィールドの右側にある「式ビルダーの起動」アイコンをクリックすると、図20-13に示すような「式ビルダー」ダイアログが表示されます。
「式ビルダー」ダイアログの詳細は、第20.3.2.8項「メッセージをフィルタリングする式の指定方法」を参照してください。

- 定数: ターゲット・メッセージに定数値を割り当てる場合に選択します。

3. 「To」セクションで、次のオプションのいずれかを選択します。

- プロパティ: メッセージ・プロパティに値をコピーする場合に選択します。「式ビルダー」ダイアログの「変数」フィールドには、出力メッセージを格納する$out変数が表示されます。$out.propertyを使用すると、出力メッセージのプロパティにアクセスできます。

- 式: 式に値をコピーする場合に選択します。「式」フィールドの右側にある「式ビルダーの起動」アイコンをクリックすると、「式ビルダー」ダイアログが表示されます。「式ビルダー」ダイアログの「変数」フィールドには、出力メッセージを格納する$out変数が表示されます。$out.partnameを使用すると、出力メッセージ全体または出力メッセージのパートにアクセスできます。

図20-23に、定数値が式として指定されている、サンプルの「値の割当て」ダイアログを示します。

図20-23 移入後の「値の割当て」ダイアログ

「図20-23 移入後の「値の割当て」ダイアログ」の説明

4. 「値の割当て」ダイアログの「OK」をクリックします。

5. 「OK」をクリックします。「ルーティング・ルール」セクションの「値の割当て」フィールドに式が追加されます。

注意:

- イベントの公開時に特定のメディエータ・プロパティに値を割り当てた場合、その値はサブスクライブするイベントに伝播されません。
この問題を回避するには、トランスフォーメーションを使用して、イベント本体の一部としてプロパティを含めます。

- Oracle WebLogic Serverのjca.db.userNameおよびjca.db.passwordプロパティに値を割り当てることはできません。これは、これらのデータ・ソースでは、getConnectionメソッドへのユーザー名またはパスワードの動的な設定がサポートされていないためです。

表20-2から表20-4に、メッセージの定数とプロパティ、ペイロードおよびヘッダーに関するソースからターゲットへの考えられる様々な割当てを示します。

表20-2 定数とプロパティの場合の考えられる割当て

ソース

ターゲット

例

プロパティ

プロパティ

<copy expression="$in.property.jca.file.FileName" target="$out.property.jca.file.FileName"/>

定数

プロパティ

<copy value="ConstantNameAssigned.xml" target="$out.property.jca.file.FileName"/>

表20-3 ペイロードの場合の考えられる割当て

ソース

ターゲット

例

XPath式

プロパティ

<copy expression="concat('ExprPropMed','-',oraext:generate-guid())" target="$out.property.jca.file.FileName" xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"/>

XPath式(パート・レベルより下)

プロパティ

<copy expression="$in.body/imp1:request/ProductReq/Make" target="$out.property.jca.file.FileName" xmlns:imp1="http://xmlns.oracle.com/psft"/>

プロパティ

XPath式(パート・レベルより下)

<copy value="$in.property.jca.file.FileName" target="$out.request/inp1:request/ProductReq/Model" xmlns:inp1="http://xmlns.oracle.com/psft"/>

定数

XPath式(パート・レベルより下)

<copy value="ConstantModel" target="$out.request/inp1:request/ProductReq/Model" xmlns:inp1="http://xmlns.oracle.com/psft"/>

XPath式

XPath式

<copy expression="$in.body" target="$out.request"/>

XPath式(パート・レベルより下)

XPath式(パート・レベルより下)

<copy expression="$in.body/imp1:request/ProductReq/Make" target="$out.request/imp1:request/ProductReq/Model" xmlns:imp1="http://xmlns.oracle.com/psft"/>

表20-4 ヘッダーの場合の考えられる割当て

ソース

ターゲット

例

XPath式(パート・レベルより下)

プロパティ

<copy expression="$in.header.inp1_header/inp1:header/Name" target="$out.property.jca.file.FileName" xmlns:inp1="http://xmlns.oracle.com/psft"/>

プロパティ

XPath式(パート・レベルより下)

<copy value="$in.property.jca.file.FileName" target="$out.header.inp1_header/inp1:header/Name" xmlns:inp1="http://xmlns.oracle.com/psft"/>

定数

XPath式(パート・レベルより下)

<copy value="NewID.xml" target="$out.header.inp1_header/inp1:header/Id" xmlns:inp1="http://xmlns.oracle.com/psft"/>

定数

XPath式(パート・レベルより下)

<copy value="sampleusername" xmlns:wsse1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" target="$out.header.wsse1_Security/wsse1:Security/wsse1:UsernameToken/wsse1:Username"/>

XPath式

XPath式

<copy target="$out.header.inp1_header" expression="$in.header.inp1_header" xmlns:inp1="http://xmlns.oracle.com/psft"/>

XPath式(パート・レベルより下)

XPath式(パート・レベルより下)

<copy target="$out.header.inp1_header/inp1:header/Name" expression="$in.header.inp1_header/inp1:header/Id" xmlns:inp1="http://xmlns.oracle.com/psft"/>

20.3.2.11 assignアクティビティに関する注意事項

assignアクティビティについては、次の点に注意してください。

- assignアクティビティは、メディエータの<copy>要素に記述されている順序で実行されます。

- ソースがターゲットのプロパティに割り当てられている場合でも、そのソースのXPath式は常にリーフ・ノードを参照する必要があります。リーフ・ノードを参照していない場合、ソースの子ノードの値はすべて連結されて、ターゲットのプロパティに割り当てられます。例20-4に詳細を示します。

例20-4 リーフ・ノードを参照するXPath式

<copy target="$out.property.jca.file.FileName"
expression="$in.body/imp1:request/ProductReq/Make"
xmlns:imp1="http://xmlns.oracle.com/psft"/>

注意:

リーフ・ノードとは、子ノードのないノードです。

- 定数またはプロパティがターゲットのXPath式に割り当てられる場合でも、そのターゲットのXPath式は常にリーフ・ノードを指し示す必要があります。リーフ・ノードを指し示していない場合、リーフ以外のノードには文字列値のみが含まれ、.xsdファイルに従って無効なXMLが生成される可能性があります。例20-5に詳細を示します。

例20-5 リーフ・ノードを指し示すターゲットのXPath式

<copy target="$out.request/inp1:request/ProductReq/Make" value="NewMakeValue"
xmlns:inp1="http://xmlns.oracle.com/psft"/>

この例では、$out.request/inp1:request/ProductReq/Makeがリーフ・ノードを参照しています。

- トランスフォーメーションが使用可能な場合は、ソース・パートをターゲット・パートに割り当てても、そのターゲットは上書きされます。これは、トランスフォーメーションの最初にassignアクティビティが発生するためです。トランスフォーメーションが使用不可の場合は、assignアクティビティによってターゲットが作成されます。例20-6に詳細を示します。

例20-6 トランスフォーメーションの使用可能性とassignアクティビティ

<copy target="$out.request" expression="$in.body"/>

<copy target="$out.header.inp1_header" expression="$in.header.inp1_header"
xmlns:inp1="http://xmlns.oracle.com/psft"/>

- ターゲット・ペイロードのいずれかの子ノードを変更する必要がある場合は、次のような2つのユースケースがあります。

- トランスフォーメーションが使用可能な場合は、ターゲットの子ノードを指し示しているターゲットのXPath式にソース式を直接割り当てます。例20-7に詳細を示します。

例20-7 ターゲットのXPath式へのソース式の直接割当て

<copy value="ConstantModel"
target="$out.request/inp1:request/ProductReq/Model"
xmlns:inp1="http://xmlns.oracle.com/psft"/>

- トランスフォーメーションが使用不可の場合は、次の2つのステップを実行します。最初に、ソース・パートをターゲット・パートに割り当て、次にターゲットの子ノードを指し示しているターゲットのXPath式にソース式を直接割り当てます。例20-8に詳細を示します。

例20-8 トランスフォーメーションが使用不可の場合の割当て

<copy target="$out.request" expression="$in.body"/> and <copy
value="ConstantModel" target="$out.request/inp1:request/ProductReq/Model"
xmlns:inp1="http://xmlns.oracle.com/psft"/>

- ソースの子ノードの1つのみをターゲットに伝播する必要がある場合は、最初にトランスフォーメーションが起動されていないことを確認します。次に、必要な子ノードを指し示すソースのXPath式を割り当てます。例20-9に詳細を示します。

例20-9 ソースの1つの子ノードがターゲットに伝播される場合

<copy target="$out.request/imp1:ProductReq"
expression="$in.body/imp1:request/ProductReq"
xmlns:imp1="http://xmlns.oracle.com/psft"/>

このケースで、$in.body/imp1:request/ProductReqから評価されるソース要素には、子ノードのみが含まれ、ルート要素から始まる完全なツリー構造は含まれていません。例20-10に詳細を示します。

例20-10 子ノードのみが含まれているルート要素から始まる構造

<ProductReq>
<Make>MAKE</Make>
<Model>MODEL</Model>
</ProductReq>

- メディエータに複数のassignアクティビティがあり、各ソースのXPath式が別々の子ノードを指し示している場合は、次のような2つのユースケースがあります。

- トランスフォーメーションが使用可能な場合は、ターゲットの対応する子ノードが更新されます。

- トランスフォーメーションが使用不可の場合、ターゲットは複数パートのターゲットであり、各パートがソースの子ノードを参照している必要があります。

- ヘッダーの場合、passThroughHeaderプロパティが設定されている場合は、次のようになります。

- トランスフォーメーションのヘッダー操作は、ターゲットのヘッダーで更新されます。

- パート・レベルのassignアクティビティによって、ターゲットのヘッダー・パートが上書きされます。

- パート・レベルより下のノードのassignアクティビティによって、ターゲットの対応するノードが更新されます。

- (パート・レベルより下の)複数のソース・ノードが(パート・レベルより下の)同じターゲット・ノードに割り当てられている場合、そのターゲット・ノードには、assignアクティビティの最後のcopy要素の値が含まれます。例20-11に詳細を示します。

例20-11 同じターゲット・ノードに複数のソース・ノードが割り当てられる場合

<copy target="$out.request/imp1:request/ProductReq/Make"
expression="$in.body/imp1:request/ProductReq/Model"
xmlns:imp1="http://xmlns.oracle.com/psft"/>

<copy target="$out.request/imp1:request/ProductReq/Make"
expression="$in.body/imp1:request/Description"
xmlns:imp1="http://xmlns.oracle.com/psft"/>

例20-11で、最初のcopy要素は、2番目のcopy要素によって上書きされるため何も効果がありません。

- XPath式の結果がリスト(複数発生)になる場合は、次の2つのユースケースがあります。

- リストに単一の要素が含まれる場合は、XPath式が伝播されます。

- リストに複数の要素が含まれる場合、XPath式はサポートされません。

- ソースの子ノードをターゲットの子ノードに割り当てると、次のアクティビティが発生します。

1. ソースの子ノードの名前とネームスペースが、ターゲットのノード名とネームスペースによってそれぞれ上書きされます。

2. ターゲットの子ノードは、ターゲット・ノードの親ノードにあるソースの子ノードによって置換されます。

20.3.2.12 フィルタおよび割当てのためのヘッダー・アクセス方法

フィルタを定義するため、または割当てソースや割当てターゲットを定義するためにメディエータから式ビルダーを起動すると、WSDLファイルが解析されます。その際に、図20-24に示すように、現在のルーティング・ルール操作のSOAPヘッダーが自動的に検出され、このSOAPヘッダーが変数として、inフォルダまたはoutフォルダにheader./ns_elementName/のように表示されます。ここで、nsはネームスペース接頭辞、elementNameはヘッダー・スキーマのルート要素名です。

次のシナリオで詳細を説明します。

シナリオ1: ネームスペース接頭辞wsseおよびns1がすでに定義されている場合

ネームスペース接頭辞wsseおよびns1がWSDLファイルまたは.mplanファイルにすでに定義されているとします。この場合、XPath式は次のように記述できます。

$in.header.wsse_Security/wsse:Security/ns1:Foo/Priority

シナリオ2: WSDLファイルにネームスペースが事前定義されていないスキーマの場合

WSDLファイルにネームスペースが事前定義されていないスキーマを使用するとします。この場合、式ビルダーでは、接頭辞のかわりに{full_namespace}を入力できる機能が提供されます。さらに、式ビルダーによって一意の接頭辞が生成され、接頭辞の定義が.mplanファイルに追加されます。

たとえば、式ビルダーに例20-12に示す式を入力するとします。

例20-12 式

$in.header.{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-sec
ext-1.0.xsd}_Security/
{"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xs
d"}:
Security/{"http://www.globalcompany.com/ns/OrderBooking"}:Foo/Priority

.mplanファイルには、例20-13に示すコンテンツが含まれています。

例20-13 .mplanファイルのコンテンツ

xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-
secext-1.0.xsd"
xmlns:ns2="http://www.globalcompany.com/ns/OrderBooking"
...
expression="$in.header.ns1_Security/ns1:Security/ns2:Foo/Priority"

図20-24 「式ビルダー」ダイアログ - 自動ヘッダー検出

「図20-24 「式ビルダー」ダイアログ - 自動ヘッダー検出」の説明

デフォルトでは、SOAPヘッダーはメディエータを介して渡されません。passThroughHeaderエンドポイント・プロパティを、対応するメディエータ・ルーティング・サービスに追加する必要があります。

<property name="passThroughHeader">true</property>

たとえば、このプロパティを追加するには、composite.xmlファイルを例20-14に示すように変更できます。

例20-14 passThroughHeaderプロパティ

<component name="Mediator1">
<implementation.mediator src="Mediator1.mplan"/>
<property name="passThroughHeader">true</property>
</component>

ヘッダーを渡すには、ソースとターゲットのQName(名前とネームスペース)が同じである必要があります。ソースとターゲットのQNameが異なる場合は、トランスフォーメーションまたはパートレベルの割当てのいずれかを実行する必要があります。

(トランスフォーメーションまたはassignを使用しない)passthroughメディエータの場合、ソースとターゲットのパートQNameが同じでない場合は、メディエータがメッセージ・ペイロードをターゲット・サービスに渡す際にエラーが発生していない点に注意する必要があります。ただし、この処理はターゲット・サービスでエラーになる場合があります。これは、メッセージ・ペイロードはターゲット・サービスのメッセージ構造に従って再構築されていないためです。

注意:

- このユーザー・インタフェースはSOAP 1.1およびSOAP 1.2の両方をサポートします。

- 自動ヘッダー検出のためには、メディエータ・サービス・コンポーネントの作成時に具体的なWSDLファイルを使用する必要があります。

- 割当てはフィルタの後に実行されます。このため、カスタム・ヘッダーで値を割り当てている場合、特定の割当てはフィルタに対して表示されません。

20.3.2.12.1 フィルタおよび割当てのためのヘッダー・アクセスに使用する式の手動作成

ユースケースによっては、WSDLファイルからヘッダー・スキーマを識別できない場合があります。たとえば、メッセージに付加されたセキュリティ・ヘッダーや、抽象的なWSDLファイルを使用して作成されるメディエータのヘッダーなどです。そのようなヘッダーにアクセスするには、式ビルダーにXPath式を手動で入力する必要があります。

例20-15に、ヘッダー式の構文を示します。

例20-15 ヘッダー式の構文

$in.header.<header root element namespace prefix>_<header root element name>/<xpath>

例20-16に示すヘッダーがあるとします。

例20-16 ヘッダーの構文

<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-sec
ext-1.0.xsd">
<Priority>234</Priority>
</wsse:Security>

フィルタ式は次のようになります。

$in.header.wsse_Security/wsse:Security/Priority = '234'

割当て式は例20-17に示すようになります。

例20-17 割当て式

<copy target="$out.property.jca.jms.priority"
expression="$in.header.wsse_Security/wsse:Security/Priority"/>

これらの式が機能するには、.mplanファイルのルート要素に例20-18に示す属性を追加する必要があります。

例20-18 .mplanファイルへの属性の追加

wsse = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-
secext-1.0.xsd"

20.3.2.12.2 フィルタおよび割当てのためのプロパティ・アクセスに使用する式の手動作成

フィルタ式の例は、次のとおりです。

$in.property.tracking.ecid = '2'

割当て式の例は、次のとおりです。

<copy target="$out.property.tracking.ecid"  value="$in.property.tracking.ecid"/>

20.3.2.13 セマンティク検証の使用方法

インバウンド・メッセージとその様々なパートは、Schematronファイルを指定して検証できます。Schematronバージョン1.5がサポートされているバージョンです。

Schematronスキーマを指定して、インバウンド・メッセージとその様々なパートを検証する手順は、次のとおりです。

セマンティク検証を使用する手順は、次のとおりです。

1. 「セマンティックの検証」フィールドの右側にある「検証ファイルの選択」アイコンをクリックします。
「検証」ダイアログが表示されます。

2. 「追加」をクリックします。
「検証の追加」ダイアログが表示されます。

3. 「パート」リストから、メッセージ・パートを選択します。

4. 「ファイル」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ブラウザ」ダイアログが表示されます。

5. Schematronファイルを選択し、「OK」をクリックします。

注意:

- 通常、Schematronファイルの拡張子は.schです。

- 選択したSchematronファイルが空の場合、エラー・メッセージまたは警告は表示されません。

図20-25に示すように、「検証の追加」ダイアログが更新されます。

図20-25 「検証の追加」ダイアログ

「図20-25 「検証の追加」ダイアログ」の説明

6. 「OK」をクリックします。
図20-26に示すように、「検証」ダイアログが更新されます。

図20-26 「検証」ダイアログ

「図20-26 「検証」ダイアログ」の説明

7. 「追加」をクリックして別のメッセージ・パートのSchematronファイルを指定するか、「OK」をクリックします。
Schematronスキーマの作成方法の詳細は、次の場所から入手できるリソースを参照してください。

http://www.schematron.com

注意:

セマンティク検証では、各要素名の長さをチェックした場合、異なる入力セットに対して要素名が変わる場合があります。これは、パーサーが空白をテスト・ノードとして処理するため、ノード間に空白がある場合に発生します。

20.3.2.14 添付ファイルの処理方法

プロジェクトのcomposite.xmlファイルにプロパティを追加することによって、メディエータが添付ファイルを処理する方法を構成できます。添付ファイルの処理の詳細は、「アタッチメント・ストリームの送信」および「Oracle Mediatorでの添付ファイルのパス・スルー設定のオーバーライド」を参照してください。

20.3.2.15 Javaコールアウトの使用方法

Javaコールアウトを使用すると、メディエータを介してフローするメッセージの操作に外部のJavaクラスを使用できます。操作またはイベント・サブスクリプションごとに、Javaコールアウトは1つのみサポートされます。コールアウト・クラスは、oracle.tip.mediator.common.api.IjavaCalloutインタフェースを実装する必要があります。コールアウトは、静的ルーティングおよび動的ルーティングの両方に使用できます。図20-27に、2つの操作が指定されたメディエータのサンプルを示します。2つの操作には、それぞれルーティング・ルールが1つあり、最初の操作にはコールアウト・クラスが指定されています。

図20-27 Javaコールアウトをサポートするメディエータのサンプル

「図20-27 Javaコールアウトをサポートするメディエータのサンプル」の説明

Javaコールアウト・クラスを使用できるようにする手順は、次のとおりです。

サーバーでJavaコールアウト・クラスが使用できることが必要です。このためには、次のいずれかの方法を使用します。

- JavaクラスをSCA-INF/classesフォルダにコピーします。

- Javaクラスが含まれているJARファイルをSCA-INF/libフォルダにコピーします。

- Javaクラスが含まれているJARファイルを$DOMAIN_HOME/libフォルダにコピーします。

Javaコールアウト・クラスを複数のメディエータで使用できるようにするには、Javaクラスが含まれているJARファイルを$DOMAIN_HOME/libフォルダにコピーします。

コールアウトのJavaクラスを入力する手順は、次のとおりです。

Javaクラスを手動で入力するか、「クラス・ブラウザ」からクラスを選択できます。

- 図20-28に示すように、Javaコールアウト・クラスの名前を手動で入力するには、「コールアウト先」フィールドにクラス名を入力し始めます。Oracle JDeveloperのオートコンプリート機能によって、現在のプロジェクトのアドレスとクラスが挿入されます。

図20-28 「コールアウト先」フィールド

「図20-28 「コールアウト先」フィールド」の説明

- 使用可能なクラスをリストから選択するには、「Javaコールアウト・クラスを選択します。」アイコンをクリックします。
図20-29に示すように、標準のOracle JDeveloperクラス・ブラウザが表示されます。

図20-29 「クラス・ブラウザ」ダイアログ

「図20-29 「クラス・ブラウザ」ダイアログ」の説明

クラス・ブラウザは、oracle.tip.mediator.common.api.IjavaCalloutインタフェースを実装するクラスのみが表示されるようにフィルタリングされます。

ペイロードのルート要素を設定する手順(フィルタ式を使用している場合)は、次のとおりです。

メディエータにJavaコールアウトがあり、同じメディエータでフィルタ式を使用している場合は、ペイロードのルート要素を例20-19に示すように設定する必要があります。

例20-19 ペイロードのルート要素の設定

changexmldoc = XmlUtils.getXmlDocument(ChangedDoc);
String mykey = "request";
message.addPayload(mykey,changexmldoc.getDocumentElement());

ドメイン値マップと相互参照関数を有効にする手順は、次のとおりです。

Javaコールアウトでドメイン値マップ関数または相互参照関数を使用するには、soa-xpath-exts.jarファイルをプロジェクトに追加し、コードに必要なJavaクラスをインポートする必要があります。

1. Oracle JDeveloperプロジェクト・エクスプローラで、Javaコールアウトを含むプロジェクトの名前を右クリックします。

2. 「プロジェクト・プロパティ」を選択します。
「プロジェクト・プロパティ」ダイアログが表示されます。

3. 図20-30に示すように、左側のパネルで、「ライブラリとクラスパス」を選択します。

図20-30 「プロジェクト・プロパティ」ダイアログのライブラリとクラス

「図20-30 「プロジェクト・プロパティ」ダイアログのライブラリとクラス」の説明

4. 「JAR/ディレクトリの追加」をクリックします。
図20-31に示すように、「アーカイブまたはディレクトリの追加」が表示されます。

図20-31 「アーカイブまたはディレクトリの追加」ダイアログ

「図20-31 「アーカイブまたはディレクトリの追加」ダイアログ」の説明

5. エクスプローラ・ツリーで、ディレクトリを展開して<JDEV_HOME>/jdeveloper/soa/modules/oracle.soa.fabric_11.1.1/soa-xpath-exts.jarを選択し、次に「選択」をクリックします。
JARファイルが「クラスパス・エントリ」リストに表示されます。

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

注意:

ドメイン値マップ関数を使用する場合は、Javaクラスに次をインポートします。

- oracle.tip.dvm.LookupValue

- oracle.tip.dvm.exception.DVMException

相互参照(xref)関数を使用する場合は、Javaクラスに次をインポートします。

- oracle.tip.xref.xpath.XRefXPathFunctions

- oracle.tip.xref.exception.XRefException

メディエータのJavaコールアウトAPI

JavaコールアウトAPIでは、oracle.tip.mediator.common.api.IjavaCalloutおよびoracle.tip.mediator.common.api.CalloutMediatorMessageという2つのインタフェースを定義します。

表20-5では、oracle.tip.mediator.common.api.IjavaCalloutインタフェースのメソッドをリストして説明します。

表20-5 IjavaCalloutインタフェースのメソッドの説明

メソッド

説明

initialize

コールアウト実装クラスが初めてインスタンス化されるときに起動されます。

preRouting

メディエータがケースの実行を開始する前にコールされます。このメソッドをカスタマイズすると、検証および拡張機能を組み込むことができます。

preRoutingRule

メディエータが特定のケースの実行を開始する前にコールされます。このメソッドをカスタマイズすると、ケース固有の検証および拡張機能を組み込むことができます。

preCallbackRouting

メディエータがコールバック処理の実行を終了する前にコールされます。このメソッドをカスタマイズすると、コールバックの監査およびカスタムのフォルト・トラッキングを実行できます。

postRouting

メディエータがケースの実行を終了した後にコールされます。このメソッドをカスタマイズすると、レスポンスの監査およびカスタムのフォルト・トラッキングを実行できます。

後処理メソッドは、すべての順次ルーティングが実行された後にコールされますが、パラレルのルーティング・ルールの完了は待機しません。

postRoutingRule

メディエータがケースの実行を開始した後にコールされます。このメソッドをカスタマイズすると、レスポンスの監査およびカスタムのフォルト・トラッキングを実行できます。

postCallbackRouting

メディエータがコールバック処理の実行を終了した後にコールされます。このメソッドをカスタマイズすると、コールバックの監査およびカスタムのフォルト・トラッキングを実行できます。

注意:

preRoutingRuleメソッドまたはpreRoutingメソッドで、Javaコールアウトを使用してメディエータのメッセージ・プロパティを変更した場合は、メディエータの割当て機能を使用して、変更したプロパティをアウトバウンド・メッセージに明示的にコピーする必要があります。たとえば、Javaコールアウトでjca.file.FileNameを変更している場合は、メディエータの割当て文を次のように更新する必要があります。

<assign>
<copy target="$out.property.jca.file.FileName"
expression="$in.property.jca.file.FileName"/>
</assign>

表20-6で、CalloutMediatorMessageインタフェースのメソッドについて説明します。

表20-6 CalloutMediatorMessageインタフェースのメソッドの説明

メソッド

説明

addPayload

メディエータ・メッセージのペイロードを設定します。

addProperty

メディエータ・メッセージにプロパティを追加します。

addHeader

メディエータ・メッセージにヘッダーを追加します。

getProperty

プロパティ名を指定してメディエータ・メッセージのプロパティを取得します。

getProperties

メディエータ・メッセージのプロパティを取得します。

getId

メディエータ・メッセージのインスタンスIDを取得します。このインスタンスIDは、該当する特定のメッセージに対して作成されたメディエータ・インスタンスIDです。

getPayload

メディエータ・メッセージのペイロードを取得します。

getHeaders

メディエータ・メッセージのヘッダーを取得します。

getComponentDN

メディエータ・サービス・コンポーネントのcomponentDNを取得します。

注意:

- oracle.tip.mediator.common.api.AbstractJavaCalloutImplクラスは、IJavaCalloutインタフェースのダミー実装です。このクラスによって、IJavaCalloutインタフェースに存在するすべてのメソッドが定義されます。このため、このクラスの拡張によって、IJavaCalloutインタフェースのいくつかの特定メソッドのみを上書きできます。
インタフェースのダミー実装は、実装クラスによって、特定のインタフェースで宣言されているすべてのメソッドの定義が提供されることを意味しますが、空のメソッド本体を1つ以上の定義済メソッドに指定することはできます。ダミー実装クラスの拡張は、インタフェースを実装してすべてのメソッドを定義する場合と異なり、メソッドのサブセットのみを上書きできるためより簡単です。

- Javaコールアウト内で発生する処理の詳細は、メディエータの「監査証跡」画面には表示されません。

Javaコールアウト・クラスのサンプル

例20-20は、Javaコールアウト・クラスのサンプルを示しています。

例20-20 Javaコールアウト・クラスのサンプル

package qa.as11tests.javacallout;

import com.collaxa.cube.persistence.dto.XmlDocument;

import com.oracle.bpel.client.NormalizedMessage;

import java.util.logging.Logger;
import java.util.Map;
import java.util.Iterator;

import oracle.tip.mediator.common.api.CalloutMediatorMessage;
import oracle.tip.mediator.common.api.ExternalMediatorMessage;
import oracle.tip.mediator.common.api.IJavaCallout;
import oracle.tip.mediator.common.api.MediatorCalloutException;
import oracle.tip.mediator.metadata.CaseType;
import oracle.tip.mediator.utils.XmlUtils;

import oracle.tip.pc.services.functions.ExtFunc;

import oracle.xml.parser.v2.XMLDocument;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

public class JavaCalloutSanity implements IJavaCallout {
Logger logger = Logger.getLogger("Callout");
public JavaCalloutSanity() {    }

public void initialize(Logger logger) throws MediatorCalloutException {
this.logger = logger;
this.logger.info("Initializing...");
}
public boolean preRouting(CalloutMediatorMessage calloutMediatorMessage) {
System.out.println("Pre routing...");
String sPayload = "null";
String sPayload_org = "null";
for (Iterator msgIt = calloutMediatorMessage.getPayload().entrySet().iterator();
msgIt.hasNext(); ) {
Map.Entry msgEntry = (Map.Entry)msgIt.next();
Object msgKey = msgEntry.getKey();
Object msgValue = msgEntry.getValue();
if (msgKey.equals("request"))
sPayload = XmlUtils.convertDomNodeToString((Node)msgValue);
}
sPayload_org = sPayload;
String tobeReplaced = "CHANGE_THIS";
String replaceWith = "JAVA_CALLOUT_||_PRE_ROUTING";
int start = sPayload.indexOf(tobeReplaced);
StringBuffer sb = new StringBuffer();
sb.append(sPayload.substring(0, start));
sb.append(replaceWith);
sb.append(sPayload.substring(start + tobeReplaced.length()));
String changedPayload = sb.toString();
String uid;
try {
uid = ExtFunc.generateGuid();
} catch (Exception e) {
}
XMLDocument changedoc;
try {
changedoc = XmlUtils.getXmlDocument(changedPayload);
String mykey = "request";
calloutMediatorMessage.addPayload(mykey,
changedoc.getDocumentElement());
//calloutMediatorMessage.getPayload().put(mykey, changedoc);
} catch (Exception e) {
}
System.out.println("Changed from : \n"+sPayload_org+"\nTo\n"+changedPayload);
System.out.println("End Pre routing...\n\n");
return false;
}
public boolean postRouting(CalloutMediatorMessage calloutMediatorMessage,
CalloutMediatorMessage calloutMediatorMessage1,
Throwable throwable) throws MediatorCalloutException {
System.out.println("Start Post routing...");
String sPayload = "null";
String sPayload_org = "null";
for (Iterator msgIt = calloutMediatorMessage1.getPayload().entrySet().iterator();
msgIt.hasNext(); ) {
Map.Entry msgEntry = (Map.Entry)msgIt.next();
Object msgKey = msgEntry.getKey();
Object msgValue = msgEntry.getValue();
if(msgKey.equals("reply"))
sPayload = XmlUtils.convertDomNodeToString((Node)msgValue);
}

sPayload_org = sPayload;
String tobeReplaced = "POST_ROUTING_RULE_REQUEST_REPLY";
String replaceWith = "POST_ROUTING_RULE_REQUEST_REPLY_||_POSTROUTING_||_JAVA_CALLOUT_WORKING";
int start = sPayload.indexOf(tobeReplaced);
StringBuffer sb = new StringBuffer();
sb.append(sPayload.substring(0, start));
sb.append(replaceWith);
sb.append(sPayload.substring(start + tobeReplaced.length()));
String changedPayload = sb.toString();
XMLDocument changedoc;
try {
changedoc = XmlUtils.getXmlDocument(changedPayload);
String mykey = "reply";
calloutMediatorMessage1.addPayload(mykey,changedoc.getDocumentElement());
// calloutMediatorMessage1.getPayload().put(mykey, changedoc.getDocumentElement());
} catch (Exception f) {
}
System.out.println("Changed from : \n"+sPayload_org+"\nTo\n"+
changedPayload);
System.out.println("End Post routing...\n\n");
return false;
}
public boolean preRoutingRule(CaseType caseType,
CalloutMediatorMessage calloutMediatorMessage) {
System.out.println("\nStart PreRoutingRule.\n");
String sPayload = "null";
String sPayload_org = "null";
for (Iterator msgIt =
calloutMediatorMessage.getPayload().entrySet().iterator();
msgIt.hasNext(); ) {

Map.Entry msgEntry = (Map.Entry)msgIt.next();
Object msgKey = msgEntry.getKey();
Object msgValue = msgEntry.getValue();
if(msgKey.equals("request"))
sPayload = XmlUtils.convertDomNodeToString((Node)msgValue);
}
sPayload_org = sPayload;
String tobeReplaced = "PRE_ROUTING";
String replaceWith = "PRE_ROUTING_||_PRE_ROUTING_RULE";
int start = sPayload.indexOf(tobeReplaced);
StringBuffer sb = new StringBuffer();
sb.append(sPayload.substring(0, start));
sb.append(replaceWith);
sb.append(sPayload.substring(start + tobeReplaced.length()));
String changedPayload = sb.toString();
XMLDocument changedoc;
try {
changedoc = XmlUtils.getXmlDocument(changedPayload);
String mykey = "request";
calloutMediatorMessage.addPayload(mykey,
changedoc.getDocumentElement());
// calloutMediatorMessage.getPayload().put(mykey, changedoc);
} catch (Exception e) {
}
System.out.println("Changed from : \n"+sPayload_org+"\nTo\n"+changedPayload);
System.out.println("End PreRoutingRule.\n\n");
return true;
}
public boolean postRoutingRule(CaseType caseType,
CalloutMediatorMessage calloutMediatorMessage,
CalloutMediatorMessage calloutMediatorMessage1,
Throwable throwable) {
System.out.println("Start PostRoutingRule.");
String req_sPayload = "null";
String req_sPayload_org = "null";
String rep_sPayload = "null";
String rep_sPayload_org = "null";
for (Iterator msgIt =
calloutMediatorMessage.getPayload().entrySet().iterator();
msgIt.hasNext(); ) {
Map.Entry msgEntry = (Map.Entry)msgIt.next();
Object msgKey = msgEntry.getKey();
Object msgValue = msgEntry.getValue();
if(msgKey.equals("request"))
req_sPayload = XmlUtils.convertDomNodeToString((Node)msgValue);
}
req_sPayload_org = req_sPayload;
String tobeReplaced = "PRE_ROUTING_RULE";
String replaceWith = "PRE_ROUTING_RULE_||_POST_ROUTING_RULE_REQUEST";
int start = req_sPayload.indexOf(tobeReplaced);
StringBuffer sb = new StringBuffer();
sb.append(req_sPayload.substring(0, start));
sb.append(replaceWith);
sb.append(req_sPayload.substring(start + tobeReplaced.length()));
String changedPayload = sb.toString();
XMLDocument changedoc;
try {
changedoc = XmlUtils.getXmlDocument(changedPayload);
String mykey = "request";
calloutMediatorMessage.addPayload(mykey,
changedoc.getDocumentElement());
// calloutMediatorMessage.getPayload().put(mykey, changedoc);
} catch (Exception e) {
}
for (Iterator msgIt =
calloutMediatorMessage1.getPayload().entrySet().iterator();
msgIt.hasNext(); ) {
Map.Entry msgEntry = (Map.Entry)msgIt.next();
Object msgKey = msgEntry.getKey();
Object msgValue = msgEntry.getValue();
if(msgKey.equals("reply"))
rep_sPayload = XmlUtils.convertDomNodeToString((Node)msgValue);
}
rep_sPayload_org = rep_sPayload;
tobeReplaced = "PRE_ROUTING_RULE";
replaceWith = "PRE_ROUTING_RULE_||_POST_ROUTING_RULE_REQUEST_REPLY";
start = rep_sPayload.indexOf(tobeReplaced);
sb = new StringBuffer();
sb.append(rep_sPayload.substring(0, start));
sb.append(replaceWith);
sb.append(rep_sPayload.substring(start + tobeReplaced.length()));
changedPayload = sb.toString();
try {
changedoc = XmlUtils.getXmlDocument(changedPayload);
String mykey = "reply";
calloutMediatorMessage1.addPayload(mykey,changedoc.getDocumentElement());
// calloutMediatorMessage1.getPayload().put(mykey, changedoc.getDocumentElement());
} catch (Exception e) {
}
System.out.println("Changed from : \n"+req_sPayload_org+"\nTo\n"+changedPayload);
System.out.println("End postRoutingRule\n\n");
return true;
}
}

20.3.3 動的ルーティング・ルールの作成方法

動的ルーティングの基本的な考え方は、プロセスが経由するパスを決定する制御ロジックを、そのプロセスの実行から分離することです。動的ルーティングのシナリオでは、デシジョン・マトリックスによって各ルーティングに対して選択されるレベル2タイプのサービスが決定されます。レベル2タイプのサービスのデシジョンに影響を与える要因は、チャネル、顧客タイプなどです。このソリューションによって、ビジネス・アナリストはルーティングを変更せずに、このデシジョン・マトリックスを外部から変更できます。アウトバウンド・サービスを決定するためには、デシジョン・マトリックスを評価する必要があります。

動的ルーティング・ルールを作成する手順は、次のとおりです。

1. 図20-32に示すように、メディエータ・エディタの動的ルーティング・ルールのオプションを使用します。

図20-32 動的ルーティング・ルールのオプションが表示されたメディエータ・エディタ

「図20-32 動的ルーティング・ルールのオプションが表示されたメディエータ・エディタ」の説明

このウィンドウで、新しいビジネス・ルール・サービス・コンポーネントが作成され、メディエータ・サービス・コンポーネントのSOAコンポジット内のメディエータ・サービス・コンポーネントに接続されます。ビジネス・ルール・サービス・コンポーネントとメディエータ・サービス・コンポーネント間のワイヤ・リンクは、実装の詳細とみなされ、図20-33に示すように、SOAコンポジット・エディタでは点線で表示されます。

図20-33 ビジネス・ルール・サービス・コンポーネントとメディエータ・サービス・コンポーネント間のワイヤ・リンクが表示されたSOAコンポジット・エディタ

「図20-33 ビジネス・ルール・サービス・コンポーネントとメディエータ・サービス・コンポーネント間のワイヤ・リンクが表示されたSOAコンポジット・エディタ」の説明

ビジネス・ルール・サービス・コンポーネントには、ルール・ディクショナリが含まれています。ルール・ディクショナリは、ファクト・タイプ、ルールセット、ルール、デシジョン表など、ルール・エンジン・アーティファクトに対するメタデータ・コンテナです。ルール・ディクショナリは、ビジネス・ルール・サービス・コンポーネントの作成過程で、次のデータを使用して事前に初期化されます。

- ファクト・タイプ・モデル
ファクト・タイプ・モデルは、ルールのモデル化に使用できるデータ・モデルです。ルール・ディクショナリには、BPELプロセスのphaseアクティビティの入力に対応するファクト・タイプ・モデルと、メディエータ・サービス・コンポーネントとビジネス・ルール・サービス・コンポーネント間の規定の一部として必要な固定データ・モデルの一部が移入されます。

- ルールセット
ルールセットは、ルールのグループ化メカニズムとして使用されるルールのコンテナです。ルールセットはサービスとして公開できます。ビジネス・ルール・サービス・コンポーネントの作成過程で、1つのルールセットがルール・ディクショナリ内に作成されます。

- デシジョン表(またはマトリックス)
ルール・エンジンから見ると、デシジョン表は、ルールの条件およびアクション部分のファクト・タイプ・モデルの要素が同じであるルールの集合です。デシジョン表を使用すると、ルールを表形式で表示できます。ビジネス・ルール・サービス・コンポーネントの作成過程で、ルールセット内に新規デシジョン表が作成されます。

- デシジョン・サービス
デシジョン・サービスは、ビジネス・ルール・サービス・コンポーネントの作成過程で作成され、ルールセットをビジネス・ルール・サービス・コンポーネントのサービスとして公開します。メディエータ・サービス・コンポーネントでは、サービス・インタフェースを使用してデシジョン表を評価します。

phaseアクティビティの必要なアーティファクトがすべて作成されると、ウィザードでは、フェーズ・デシジョン・マトリックス(PDM)のモデル化が開始されます。Oracle JDeveloperのビジネス・ルール・デザイナが起動され、フェーズ・デシジョン・マトリックスを編集できるようになります。図20-34に、ビジネス・ルール・デザイナ内のデシジョン表のサンプルを示します。

図20-34 ルール・デザイナ内のデシジョン表のサンプル

「図20-34 ルール・デザイナ内のデシジョン表のサンプル」の説明

2. 動的ルーティングを作成した後は、「動的ルールの編集」をクリックして、関連デシジョン・マトリックスを変更できます。ビジネス・ルール・デザイナが起動され、ビジネス・ルール・サービス・コンポーネントの関連デシジョン表の変更が可能になります。メディエータ・サービス・コンポーネントに対して動的ルーティングを作成した後は、その動的ルーティングを削除しないかぎり、静的ルーティングに戻すことはできません。現在、これら2つのタイプのルーティングを組み合せて使用するオプションはありません。
動的ルーティング・オプションを選択した後のメディエータ・エディタは、図20-35のようになります。

図20-35 動的ルーティング・ルールが表示されたメディエータ・エディタ

「図20-35 動的ルーティング・ルールが表示されたメディエータ・エディタ」の説明

ソース・ビューは次のように変更されます。

<Mediator name="Shipment" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/sca/1.0/mediator">
<operation name="execute" deliveryPolicy="AllOrNothing" priority="0">
<switch decisionServiceRef="Phase1DecisionService"
decisionServiceOperation="executeFunction"></switch>
</operation>
</Mediator>

switch要素には、デシジョン・サービス参照および操作の詳細が含まれています。これによって、メディエータ・サービス・コンポーネントは、動的ルーティング・デシジョンを取得するためのデシジョン・サービスを実行時に起動できます。動的デシジョンは、実行時のビジネス・ルール・サービス・エンジン・ユーザー構成によって返されます。

外部サービスの起動には、bindingInfoという特別な属性が含まれます。この属性には、起動を動的にするためのバインディング情報が含まれています。

20.3.4 動的ルーティング・ルールの使用に関する注意事項

メディエータで動的ルーティング・ルールを使用する場合は、次の制限に注意してください。

- 現在は、SOAPバインディングのみがサポートされています。composite.xmlファイルには、ダミーのSOAPバインディングが作成されます。このエンドポイントは、NMプロパティを介して実行時にメディエータによって上書きされます。このため、アウトバウンド・サービスはSOAPを介してのみコールできます。

- 動的ルーティング・ルールによってペイロード操作が制限されます。割当て、トランスフォーメーションまたは検証は実行できません。

- 参照WSDLファイル(レイヤー2またはコールした参照)には、自動的に作成されるフェーズ参照と同じ抽象的なWSDLファイルが必要です。

- 動的ルーティングは、同期インタフェースまたは一方向インタフェースを使用するメディエータには使用できません。

20.3.5 デフォルト・ルーティング・ルールの定義方法

メディエータでは、ルーティング・ルールで指定された条件に従ってメッセージが処理されます。ルーティング・ルールで指定されたいずれの条件も満たさないために、受信メッセージが処理されない場合もあります。このようなメッセージに使用するデフォルト・ルーティング・ルールを定義できます。デフォルト・ルーティング・ルールは、他のルーティング・ルールの条件がいずれも満たされない場合に実行されます。

デフォルト・ルーティング・ルールは、第20.3.2項「静的ルーティング・ルールの作成方法」で説明したルーティング・ルールと同じです。デフォルト・ルーティング・ルールが他のルーティング・ルールと異なる唯一の点は、デフォルト・ルーティング・ルールには関連付けられた条件がないことです。それ以外は、ターゲット・サービス、レスポンス処理、フォルト処理などすべてにおいて、デフォルト・ルーティング・ルールは他のルーティング・ルールと同じです。

注意:

- デフォルト・ルールは、静的ルーティング・ルールに対してのみ使用できます。

- 動的ルーティング・ルールを使用するメディエータ・サービス・コンポーネントにデフォルト・ルーティング・ルールを指定することはできません。これは、同じメディエータ・サービス・コンポーネントに静的ルーティング・ルールと動的ルーティング・ルールの両方を定義することはできないためです。

20.3.5.1 デフォルト・ルールのシナリオ

デフォルト・ルーティング・ルールは、順次ルールまたはパラレル・ルールのいずれかに設定できます。順次またはパラレルに関係なく、デフォルト・ルーティング・ルールは、他のルーティング・ルールの条件が満たされない場合に実行されることが保証されています。デフォルト・ルールが実行された場合、メディエータの監査証跡には、すべてのルーティング・ルールのフィルタ条件が満たされず、デフォルト・ルーティング・ルールのフィルタ条件が満たされて実行されたことが示されます。例20-21に詳細を示します。

例20-21 デフォルト・ルールのシナリオ

ActivityJan 7, 2010 4:35:15 PM
Message onCase "fileout2.Write"
Jan 7, 2010 4:35:15 PM
Message Evaluation of xpath condition " No Filter (DEFAULT CASE) " resulted
true

デフォルト・ルーティング・ルールも含めて、すべてのルーティング・ルールは順次またはパラレルのルーティング・ルールとして定義できるため、想定されるルーティング・ルールの動作は多数あります。次の各項では、各組合せと想定される動作について説明します。

順次のデフォルト・ルーティング・ルール

順次のデフォルト・ルーティング・ルールでは、次のシナリオが考えられます。

- メディエータの他のルーティング・ルールがすべて順次の場合: これは、デフォルト・ルーティング・ルールも含めて、すべてのルーティング・ルールのタイプが順次である最も単純なケースです。すべてのルーティング・ルールのフィルタ条件が実行時に評価され、いずれのフィルタ条件も一致しない場合は、順次のデフォルト・ルーティング・ルールが実行されます。順次のデフォルト・ルーティング・ルールは、受信メッセージと同じトランザクションで実行されます。デフォルト・ルールの実行後に、事後Javaコールアウトが発生します。

- メディエータのルーティング・ルールの少なくとも1つがパラレルである場合: これは、デフォルト・ルーティング・ルールが順次であり、他のルーティング・ルールの少なくとも1つがパラレルである複雑なケースです。実行時のデフォルトの動作では、最初に順次ルーティング・ルールがすべて実行された後で、パラレルのルーティング・ルールが実行されます。したがって、デフォルト・ルールは、他のすべてのルーティング・ルールがfalseであると評価された後でのみ実行する必要があるため注意が必要です。
この場合、サーバーでは、最初にパラレル・ルールのフィルタ条件が評価された後でデフォルト・ルーティング・ルールのフィルタ条件が評価されます。他のいずれのフィルタ条件も一致しない場合は、順次のデフォルト・ルーティング・ルールが実行されます。

パラレルのデフォルト・ルーティング・ルール

パラレルのデフォルト・ルーティング・ルールでは、次のシナリオが考えられます。

- メディエータの他のルーティング・ルールがすべてパラレルの場合: これは簡単なケースです。デフォルト・ルーティング・ルールは、他のルーティング・ルールで指定されたいずれかのフィルタ条件が一致する場合は実行されません。フィルタ条件がいずれも一致しない場合は、デフォルト・ルーティング・ルールが非同期で実行されます。

- メディエータの他のルーティング・ルールが順次またはパラレルである場合: これは複雑ですが一般的なユースケースです。使用可能な他の順次またはパラレルのルーティング・ルールがあり、デフォルト・ルーティング・ルールがパラレルの場合です。デフォルト・ルーティング・ルールは、他の順次またはパラレルのルーティング・ルール基準のいずれかが一致した場合は実行されません。条件がいずれも一致しない場合は、デフォルト・ルーティング・ルールが非同期で実行されます。

注意:

デフォルト・ルーティング・ルールが自動的に実行されるということは、デフォルト・ルーティング・ルールが、特定のメディエータ・サービス・コンポーネントに対して実行された唯一のケースであることを意味します。同様に、メディエータ・サービス・コンポーネントに、フィルタ条件が指定されていない1つのルーティング・ルールがあり、デフォルト・ルーティング・ルールもある場合、そのデフォルト・ルーティング・ルールが実行されることはありません。

20.3.5.2 デフォルト・ルールのターゲット

デフォルト・ルーティング・ルールのターゲットは、他の既存ルーティング・ルールのサポートされているターゲットと同じです。つまり、ターゲットにはサービス、イベントまたはエコーを設定できます。同様に、デフォルト・ルーティング・ルールのターゲット・サービスからのレスポンスは、コール元に転送するか、返すことができます。ターゲット・サービスからフォルトが返された場合は、他のルーティング・ルールで処理される場合と同様に処理されます。

注意:

他のルーティング・ルールの評価または実行時に例外が発生した場合、デフォルト・ルーティング・ルールは実行されません。

20.3.5.3 デフォルト・ルール: 検証、トランスフォーメーションおよび割当て機能

デフォルト・ルーティング・ルールのSchematron検証、トランスフォーメーションおよび割当機能は、他のルーティング・ルールと同様に動作します。

20.3.5.4 デフォルト・ルール: Javaコールアウト

事前Javaコールアウトまたは事後Javaコールアウトの現在の動作は、他のルーティング・ルールの場合と同様です。Javaコールアウト場合は、デフォルト・ルーティング・ルールは別のルーティング・ルールとみなされます。したがって、デフォルト・ルーティング・ルールが実行されるシナリオの場合、postRouting()コールバック・メソッドは、デフォルト・ルーティング・ルールが実行された後でのみ発生します。

注意:

事後Javaコールアウトは、順次ルールの実行後に発生し、パラレル・ルールの実行の完了は待機しません。したがって、デフォルト・ルーティング・ルールが順次の場合、postRouting()コールバック・メソッドは、デフォルト・ルーティング・ルールの実行後に発生します。デフォルト・ルーティング・ルールがパラレルの場合、postRouting()コールバックは、すべての順次ルールが実行された後に発生し、パラレルのデフォルト・ルーティング・ルールの実行は待機しません。

20.3.5.5 デフォルト・ルール: メディエータ.mplanファイル

ルーティング・ルールをデフォルト・ルーティング・ルールとして設定するには、図20-2に示す「デフォルト・ルーティング・ルールとして設定」アイコンをクリックします。.mplanファイルは、図20-36に示すように変わります。

図20-36 デフォルト・ルーティング・ルールが設定されたメディエータの.mplanファイル

「図20-36 デフォルト・ルーティング・ルールが設定されたメディエータの.mplanファイル」の説明

20.4 メディエータ・ルーティングのユースケース

2つのチュートリアルが入手可能であり、それらでは、Oracle SOA Suiteサンプル・ページで提供されているメディエータ・サンプル・プロジェクトのうちの2つを作成する手順を示しています。作成したメディエータにルーティング・ルールを定義する方法を説明しています。それらのチュートリアルは、http://java.net/projects/oraclesoasuite11g/downloads/download/Mediator/Tutorials/med_rr_tutorial.pdfからダウンロードできます。

21 Oracle Mediatorにおける複数パート・メッセージの使用

この章では、Oracle Mediatorサービス・コンポーネント用の複数パート(マルチパート)メッセージのルーティング・ルール(フィルタやトランスフォーメーション、検証など)を定義する方法について説明します。

この章には次の項が含まれます:

- 第21.1項「メディエータのマルチパート・メッセージ・サポートの概要」

- 第21.2項「マルチパートのリクエスト・メッセージの使用」

ルーティング・ルールの詳細は、第20章「Oracle Mediatorルーティング・ルールの作成」を参照してください。

21.1 メディエータのマルチパート・メッセージ・サポートの概要

メディエータには、メディエータ・エディタでのマルチパートWSDLファイルのインポートのサポートと、マルチパートのソース・メッセージとターゲット・メッセージの操作のサポートが組み込まれています。この操作には、マルチパートのフィルタ式の作成、マルチパートのスキーマ検証、およびリクエスト、リプライ、フォルト、コールバック用のマルチパートのソース・メッセージとターゲット・メッセージ間のトランスフォーメーションが含まれます。

メディエータ・エディタでマルチパートのソースは、図21-1のように表示されます。

図21-1 マルチパートのソースに対するメディエータ・エディタ

「図21-1 マルチパートのソースに対するメディエータ・エディタ」の説明

21.2 マルチパートのリクエスト・メッセージの使用

この項では、様々なタイプのマルチパート・メッセージの使用方法について説明します。

21.2.1 マルチパートのリクエスト・メッセージに対するフィルタ式の指定方法

マルチパートのメッセージに対してフィルタ式を指定すると、図21-2に示すように、式ビルダーには、in変数の下にすべてのメッセージ・パートが表示されます。

図21-2 マルチパートのリクエストのソースに対する式ビルダー

「図21-2 マルチパートのリクエストのソースに対する式ビルダー」の説明

21.2.2 マルチパートのリクエスト・メッセージに対する検証の追加方法

マルチパートのメッセージに対して検証を追加すると、図21-3に示すように、「検証の追加」ダイアログにパートを選択できるパート・リストが表示されます。リクエスト・メッセージ・パートごとにSchematronファイルを指定します。次に、Oracle Mediatorでは、パートに対応するSchematronファイルが処理されます。

図21-3 マルチパートのリクエストのソースに対する「検証の追加」ダイアログ

「図21-3 マルチパートのリクエストのソースに対する「検証の追加」ダイアログ」の説明

21.2.3 マルチパートのリクエスト・メッセージに対するトランスフォーメーションの作成方法

マルチパートのメッセージに対して新しいマッパー・ファイルを作成すると、図21-4に示すように、XSLTマッパーでは、生成されたマッパー・ファイルに複数のソース・パートが表示されます。

図21-4 マルチパートのリクエストのソースに対するXSLTマッパー

「図21-4 マルチパートのリクエストのソースに対するXSLTマッパー」の説明

21.2.4 マルチパートのリクエスト・メッセージに対する値の割当て方法

ソース式を使用して値を割り当て、「値の割当て」ダイアログから式ビルダーを起動すると、式ビルダーには、in変数の下にすべてのメッセージ・パートが表示されます(図21-2を参照)。これは、フィルタ式を指定した場合と同じです。

21.2.5 マルチパートのリプライ、フォルトおよびコールバック用ソース・メッセージの使用方法

トランスフォーメーションの作成方法、およびマルチパートのリプライ、フォルト、コールバック用ソース・メッセージへの値の割当て方法は、リクエスト用ソース・メッセージの場合と同じです。

注意:

リプライ、フォルトおよびコールバック用の各メッセージに対しては、フィルタ式の指定や検証の追加はできません。

21.2.6 マルチパートのターゲット・メッセージの使用方法

ルーティングのターゲット(つまり、リクエスト、リプライ、フォルトまたはコールバック)にマルチパートのメッセージがある場合、トランスフォーメーションは多少異なる方法で処理されます。これは、XSLTマッパーではマルチパートのターゲットがサポートされていないためです。このような場合は、図21-5に示すように、メディエータによって、ターゲット・パートごとに別々のマッパー・ファイルが作成されて調整されます。

図21-5 マルチパートのルーティングのターゲットに対するリクエスト・トランスフォーメーション・マップ

「図21-5 マルチパートのルーティングのターゲットに対するリクエスト・トランスフォーメーション・マップ」の説明

22 Oracle Mediatorエラー処理の使用

この章では、Oracle Mediatorのエラー処理機能について説明し、ビジネス・フォルトとシステム・フォルトの両方のエラー処理を定義する手順を示します。

この章には次の項が含まれます:

- 第22.1項「メディエータのエラー処理の概要」

- 第22.2項「メディエータによるエラー処理の使用」

- 第22.3項「Oracle Enterprise Manager Fusion Middleware Controlコンソールを使用したフォルト・リカバリ」

- 第22.4項「XMLスキーマ定義ファイルのエラー処理」

22.1 メディエータのエラー処理の概要

メディエータに用意されている高度なエラー処理機能を使用すると、エラーの発生とそれに対応する修正アクション用のメディエータ・サービス・コンポーネントを構成できます。エラー処理によって、メディエータはメッセージ処理中に発生するエラーや外部のWebサービスから戻される例外を処理できます。メディエータでは、ビジネス・フォルトとシステム・フォルトの両方を処理できます。

ビジネス・フォルトはアプリケーション固有のフォルトであり、サービスWSDLファイルで明示的に定義されます。設計時にOracle JDeveloperでフォルト・ハンドラを定義することでビジネス・フォルトを処理できます。システム・フォルトは、ネットワークが利用できないような基本システムにおける問題によって発生します。メディエータでは、システム・フォルト用のフォルト・ポリシーをベースとしたエラー処理を提供します。

フォルト・ポリシーにより、エラーを自動または管理者操作で処理できるようになります。メディエータのフォルト・ポリシーをベースとしたエラー処理は、次の3つのコンポーネントで構成されています。

- フォルト・ポリシー

- フォルト・バインディング

- エラー・グループ

22.1.1 フォルト・ポリシー

フォルト・ポリシーは、エラー状態および対応するアクションを定義したものです。フォルト・ポリシーは、第22.4.1項「fault-policies.xmlのスキーマ定義ファイル」に示すXMLスキーマに基づいて作成したfault-policies.xmlファイルで定義します。

順次ルーティング・ルールのフォルト・ポリシーは、次に示すようにパラレルのルーティング・ルールの場合とは異なる方法で処理されます。

- 順次ルーティング・ルールがシングル・スレッド処理であるため、エラー処理に対して3つのアクション(中断、再スロー、およびJava)のみがサポートされており、指定されたアクションがコール元のスレッドでただちに実行されます。

- メディエータ・メッセージは、順次ルーティングで保持されません。

- 非同期および一方向メディエータ・コンポーネントは、BPELビジネス・プロセスなど他のSOA Suiteコンポーネントからスローされるシステム・フォルトを処理できません。

使用可能なエラー処理アクションの詳細は、第22.1.1.2項「アクション」を参照してください。

例22-1に、フォルト・ポリシー・ファイルのサンプルを示します。

例22-1 フォルト・ポリシー・ファイルのサンプル

<?xml version="1.0" encoding="UTF-8"?>
<faultPolicies>
<faultPolicy version="2.0.1" id="CRM_ServiceFaults">
<Conditions>
<faultName xmlns:medns="http://schemas.oracle.com/mediator/faults"
name="medns:mediatorFault">
<condition>
<test>contains($fault.mediatorErrorCode, "TYPE_FATAL_MESH")</test>
<action ref="ora-retry"/>
</condition>
</faultName>
</Conditions>
<Actions>
<Action id="ora-retry">
<retry>
<retryCount>3</retryCount>
<retryInterval>2</retryInterval>
<exponentialBackoff/>
<retryFailureAction ref="ora-java"/>
<retrySuccessAction ref="ora-terminate"/>
</retry>
</Action>
</Actions>
</faultPolicy>
</faultPolicies>

次の各項では、フォルト・ポリシーの2つのコンポーネント(条件とアクション)について説明します。

22.1.1.1 条件

条件によって、エラーまたはフォルト条件を識別し、特定のエラーやフォルト条件が発生した際に、実行するアクションを指定できます。たとえば、サービスを利用できないことで発生する特定のエラーに対しては、再試行などを実行できます。同様に、Schematron検証に失敗して発生するエラーに対しては、管理者操作のアクションを実行できます。このフォルトは、Oracle Enterprise Manager Fusion Middleware Controlを使用して、ペイロードを編集して再送信することによって手動でリカバリできます。

条件は、例22-2に示すようにfault-policies.xmlファイルに定義されます。

例22-2 条件

<Conditions>
<faultName xmlns:medns="http://schemas.oracle.com/mediator/faults"
name="medns:mediatorFault">
<condition>
<test>contains($fault.mediatorErrorCode,"TYPE_DATA_TRANSFORMATION")</test>
<action ref="ora-java"/>
</condition>
</faultName>
<faultName xmlns:medns="http://schemas.oracle.com/mediator/faults"
name="medns:mediatorFault">
<condition>
<test>contains($fault.mediatorErrorCode, "TYPE_FATAL_MESH")</test>
<action ref="ora-retry"/>
</condition>
</faultName>
<faultName xmlns:medns="http://schemas.oracle.com/mediator/faults"
name="medns:mediatorFault">
<condition>
<test>contains($fault.mediatorErrorCode,"TYPE_DATA_ASSIGN")</test>
<action ref="ora-retry-crm-endpoint"/>
</condition>
</faultName>
</Conditions>

条件を使用したフォルト・タイプの識別

条件を使用して取得可能なフォルトは、次のタイプに分類できます。

- メディエータ固有のフォルト
すべてのメディエータ固有のフォルトに対して、メディエータ・サービス・エンジンは1つのフォルト({http://schemas.oracle.com/mediator/faults}mediatorFault)のみをスローします。すべてのメディエータ・フォルトがこのフォルトにラップされています。メディエータによって生成されたエラーまたはフォルトは、例22-3に示す形式を使用して取得できます。

例22-3 Oracle Mediator固有のフォルト

<faultName xmlns:medns="http://schemas.oracle.com/mediator/faults" name="medns:mediatorFault">
<!-- mediatorFault is a bucket for all the mediator faults -->
<condition>
<test>
contains($fault.mediatorErrorCode, "TYPE_FATAL_MESH")
</test>
<!-- Captures TYPE_FATAL_MESH errors -->
<action ref="ora-retry"/>
</condition>
</faultName>

- ビジネス・フォルトおよびSOAPフォルト
エラーまたはフォルトは、フォルト・ペイロードに基づいたXPath条件を定義することで取得できます。例22-4に詳細を示します。

例22-4 ビジネス・フォルトおよびSOAPフォルト

<faultName xmlns:ns1="http://xmlns.oracle.com/Customer"
name="ns1:InvalidCustomer"> <!-- Qname of Business/SOAP fault -->
<condition>
<test>
contains($fault.<PART_NAME>/custid, 1011)
</test>
<!-- xpath condition based on fault payload -->
<action ref="ora-retry"/>
</condition>
</faultName>

参照サービスがビジネス・フォルトを返した場合、そのフォルトはメディエータ・サービス・コンポーネントで処理できます。返されたフォルトは別のコンポーネントに転送したり、ファイル・アダプタなどのアダプタ・サービスにリダイレクトできます。また、イベントを発生させることもできます。ただし、ビジネス・フォルトに対してフォルト・ポリシーとフォルト・ハンドラの両方が定義されている場合は、フォルト・ポリシーがフォルト・ハンドラより優先されます。この場合、フォルト・ポリシーが正常に実行されると、メディエータ・サービス・コンポーネント内のフォルト・ハンドラは無視されます。

- アダプタ固有のフォルト
アダプタによって生成されたエラーまたはフォルトは、例22-5に示す形式を使用して取得できます。

例22-5 アダプタによって生成されたエラーまたはフォルトの取得

<faultName xmlns:medns="http://schemas.oracle.com/mediator/faults" name="medns:mediatorFault">
<condition>
<test>$fault.faultCode = "1"</test> <!-- unique constraint violation in DB adapter-->
<action ref="ora-retry"/>
</condition>
</faultName>

22.1.1.2 アクション

アクションは、エラー発生時に実行するタスクを指定します。メディエータは、パラレルのルーティング・ルールに対する再試行、管理者操作、中断、Javaコードの各アクションをサポートしています。順次ルーティング・ルールの場合、フォルト・ポリシーに、中断、再スロー、およびJavaコードのアクションを含めることができます。

順次ルーティング・ルールで再試行または管理者操作アクションが選択されている場合、フォルトは直接コール元に戻され、ポリシーは適用されません。互換性がないアクションが選択されていた場合は、それがログに記録されます。これは、BPELフォルト・ポリシーの動作と一貫しています。フォルトの処理はコール元が担当します。コール元がアダプタの場合は、拒否ハンドラをインバウンド・アダプタに定義して、エラーになったメッセージ(拒否メッセージ)を処理できます。拒否ハンドラの詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

フォルト・ポリシー・アクションについては、後続の各項で説明します。

22.1.1.2.1 再試行アクション

停止したJMSキューへのメッセージのエンキューや一意キー制約エラーがあるレコードの挿入などの再試行アクションを使用すると、エラーの原因となったタスクを再試行できます。新規スレッドが各再試行アクションとともに開始されます。したがって、各再試行アクションでは、新規トランザクションが開始されます。表22-1に、再試行アクションに使用可能なオプションを示します。再試行アクションの適用対象は、パラレルのルーティング・ルールのみです。

表22-1 再試行アクションのオプション

オプション

説明

再試行数

N回再試行します。

再試行間隔

再試行を秒単位で遅延します。

指数バックオフ

指数バックオフを使用して再試行間隔を増加します。

再試行失敗時アクション

N回の再試行に失敗した場合は、このアクションにチェーンします。

再試行成功時アクション

再試行に成功した場合は、このアクションにチェーンします。

注意:

指数バックオフでは、次の再試行が2倍のdelayでスケジュールされます。ここでのdelayは、現在の再試行間隔です。たとえば、現在の再試行間隔が2秒の場合、次の再試行間隔は4秒にスケジュールされ、その次は8秒、16秒と、retryCount値に達するまで増分されます。

例22-6に、再試行アクションの指定方法を示します。

例22-6 再試行アクション

<Action id="ora-retry">
<retry>
<retryCount>3</retryCount>
<retryInterval>2</retryInterval>
<exponentialBackoff/>
<retryFailureAction ref="ora-java"/>
<retrySuccessAction ref="ora-java"/>
</retry>
</Action>

フォルト・ポリシーの再試行間隔に30秒未満の期間を設定すると、指定した間隔内に再試行が実行されない場合があります。これは、org.quartz.scheduler.idleWaitTimeプロパティのデフォルト値が30秒であり、スケジューラがアイドル状態の場合でも、使用可能なトリガーを再試行するまでに30秒待機するためです。再試行間隔を30秒未満の値に設定した場合は、待機時間が発生する可能性があります。

30秒未満の再試行間隔を使用する場合は、fabric-config-core.xmlファイルのセクション<property name="quartzProperties">の下に次のプロパティを追加します。

org.quartz.scheduler.idleWaitTime=<value>

22.1.1.2.2 再スロー・アクション

再スローは、コール元のスレッドでフォルト・ポリシーを実行し、元の例外をユーザーに返します。

再スロー・アクションの例を次に示します。

<Action id="ora-rethrow-fault"><rethrowFault/></Action>

22.1.1.2.3 管理者操作アクション

管理者操作アクションによって、エラーを訂正し(たとえば、ペイロードを変更し)、手動でメッセージを再試行することでフォルトを手動でリカバリできます。このアクションは、パラレルのルーティング・ルールにのみ適用できます。

管理者操作アクションの例を、次に示します。

<Action id="ora-human-intervention"><humanIntervention/></Action>

22.1.1.2.4 中断アクション

中断アクションによって、メッセージ・フローを終了することができます。このアクションは、パラレルと順次の両方のルーティング・ルールに適用できます。

中断アクションを順次ルーティング・ルールに対して実行すると、例外FabricInvocationExceptionが、コール元にスローされ、メディエータ・コンポーネントの状態が終了に変わります。フォルト・ポリシーは、コール元のスレッド内で実行されます。

中断アクションの例を、次に示します。

<Action id="ora-terminate"><abort/></Action>

22.1.1.2.5 Javaコード・アクション

Javaコードアクションにより、oracle.integration.platform.faultpolicy.IFaultRecoveryJavaClassインタフェースを実装するカスタマイズJavaクラスをコールできます。このアクションは、パラレルと順次の両方のルーティング・ルールに適用できます。例22-7は、Javaコード・アクションの実装方法を示しています。

注意:

実装済Javaクラスは、文字列を戻すメソッドを実装している必要があります。ポリシーは、戻された文字列に基づいて新しいアクションにチェーンできます。

Javaコード・アクションは、最初に、ドメイン・クラス・ライブラリ内の実装済クラスを検索します。そこでクラスが見つからない場合は、コンポジット・アプリケーションのクラス・ライブラリが検索されます。

例22-7 カスタマイズJavaクラスのコール

<Action id="ora-java">
<javaAction className="mypackage.myClass" defaultAction="ora-terminate">
<returnValue value="ABORT" ref="ora-terminate"/>
<returnValue value="RETRY" ref="ora-retry"/>
<returnValue value="MANUAL" ref="ora-human-intervention"/>
</javaAction>
</Action>

詳細は、例22-8および例22-9を参照してください。

順次ルーティング・ルール・フォルト・ポリシーの場合、returnValueアクションは、中断、再スロー、またはJavaアクションの1つである必要があります。returnValueが、これらの有効な値以外である場合、defaultActionがチェックされます。defaultActionも有効なアクション(中断、再スロー、またはJavaアクション)でない場合、デフォルトではアクションは実行されず、元のフォルトがコール元にスローされます。

例22-8 oracle.integration.platform.faultpolicy.IFaultRecoveryJavaClassインタフェース

oracle.integration.platform.faultpolicy.IFaultRecoveryJavaClass {

public void handleRetrySuccess(IFaultRecoveryContext ctx);
public String handleFault(IFaultRecoveryContext ctx);
}

例22-9 oracle.integration.platform.faultpolicy.IFaultRecoveryContextインタフェース

public interface IFaultRecoveryContext {

/**
* Gets implementation type of the fault.
* @return
*/
public String getType();

/**
* @return Get property set of the fault policy action being executed.
*/
public Map getProperties();

/**
* @return Get fault policy id of the fault policy being executed.
*/
public String getPolicyId();

/**
* @return Name of the faulted reference.
*/
public String getReferenceName();

/**
* @return Port type of the faulted reference link.
*/
public QName getPortType();
}

メディエータ・サービス・エンジンの実装

例22-10に、IFaultRecoveryContextインタフェースのOracle Mediatorサービス・エンジンの実装を示します。

例22-10 IFaultRecoveryContextインタフェースの実装

package oracle.tip.mediator.common.error.recovery;
public class MediatorRecoveryContext implements IFaultRecoveryContext{
...
}

例22-11に示すメソッドを使用すると、MediatorRecoveryContextクラスで使用可能なメディエータ固有の追加データを取得できます。

例22-11 データを取得するためのメソッド

public Fault getFault()
public CalloutMediatorMessage getMediatorMessage()

例22-12に、CalloutMediatorMessageインタフェースを使用したデータの取得方法を示します。

例22-12 CalloutMediatorMessageインタフェースを使用したデータの取得

/**
* Accessing Mediator Message properties by providing the property name
* @param propertyName
* @return
* @throws MediatorException
*/
public Object getProperty(String propertyName);

/**
* Accessing Mediator Message properties
* @return
* @throws MediatorException
*/
public Map getProperties();

/**
* Accessing instance id of the mediator message
* This will be the mediator instance id created for that particular message
* object
* @return
* @throws MediatorException
*/
public String getId() throws MediatorException;

/**
* Accessing payload of the mediator message
* object
* @return
* @throws MediatorException
*/
public Map getPayload();

/**
* Accessing header of the mediator message
* object
* @return
* @throws MediatorException
*/
public List<Element> getHeaders();

/**
* Accessing componentDN for mediator component
* @return
* @throws MediatorException
*/
public String getComponentDN(
/**
* Setting payload to the mediator message
* @return
* @throws MediatorCalloutException
*/
public void addPayload(String partName,Object payload) throws MediatorCalloutException;

/**
* Adding property to the mediator message
* @return
* @throws MediatorCalloutException
*/
public void addProperty(String name,Object value) throws MediatorCalloutException;

/**
* Adding header to the mediator message
* @return
* @throws MediatorCalloutException
*/
public void addHeader(Object header) throws MediatorCalloutException;

22.1.2 フォルト・バインディング

フォルト・バインディングは、フォルト・ポリシーをコンポジットまたはコンポーネントと関連付けるもので、fault-bindings.xmlファイルで定義されています。fault-bindings.xmlファイルは、第22.4.2項「fault-bindings.xmlのスキーマ定義ファイル」で定義されているXMLスキーマに基づいて作成します。

フォルト・ポリシーは次のレベルで作成できます。

- コンポジット: コンポジット内のすべてのメディエータ・コンポーネントに対してフォルト・ポリシーを1つ定義できます。このレベルは、次の方法で指定できます。

<composite faultPolicy="ConnectionFaults"/>

- コンポーネント: メディエータ・サービス・コンポーネントに対するフォルト・ポリシーを排他的に定義できます。コンポーネント・レベルのフォルト・ポリシーは、コンポジット・レベルのフォルト・ポリシーを上書きします。このレベルは、例22-13に示すように、指定できます。

例22-13 メディエータに対するフォルト・ポリシーの定義

<component faultPolicy="ConnectionFaults">
<name>Component1</name>
<name>Component2</name>
</component>

- 参照: メディエータ・コンポーネントの参照に対するフォルト・ポリシーを定義できます。このレベルは、例22-14に示すように、指定できます。

例22-14 参照に対するフォルト・ポリシーの定義

<reference faultPolicy="policy1">
<name>DBAdapter3</name>
</reference>

注意:

管理者操作は、フォルト・ポリシーが定義されていないエラーに対するデフォルト・アクションです。

例22-15に、フォルト・バインディング・ファイルのサンプルを示します。

例22-15 フォルト・バインディング・ファイルのサンプル

<?xml version="1.0" encoding="UTF-8"?>
<faultPolicyBindings version="2.0.1"
xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<composite faultPolicy="ConnectionFaults"/>
</faultPolicyBindings>

22.1.3 メディエータのエラー・グループ

フォルト・ポリシーに条件を定義する一方で、エラー・タイプやエラー・グループにはアクションを指定できます。前述の例にあるmedns:mediatorFaultは、エラーがメディエータ・エラーであることを表しているのに対し、medns:TYPE_FATAL_MESHは、エラー・グループを表しています。エラー・グループは、1つ以上の子エラー・タイプで構成されています。TYPE_ALLは、すべてのメディエータ・エラーを含むエラー・グループです。

次のリストでは、TYPE_ALLエラー・グループに含まれる様々なエラー・グループについて説明します。

- TYPE_DATA: データ処理に関するエラーが含まれます。

- TYPE_DATA_ASSIGN: データの割当に関するエラーが含まれます。

- TYPE_DATA_FILTERING: データのフィルタ処理に関するエラーが含まれます。

- TYPE_DATA_TRANSFORMATION: トランスフォーメーション中に発生したエラーが含まれます。

- TYPE_DATA_VALIDATION: ペイロード検証中に発生したエラーが含まれます。

- TYPE_METADATA: メディエータのメタデータに関するエラーが含まれます。

- TYPE_METADATA_FILTERING: フィルタ処理の条件の処理中に発生したエラーが含まれます。

- TYPE_METADATA_TRANSFORMATION: トランスフォーメーション用のメタデータの取得中に発生したエラーが含まれます。

- TYPE_METADATA_VALIDATION: メディエータ用のメタデータ(.mplanファイル)の検証中に発生したエラーが含まれます。

- TYPE_METADATA_COMMON: メタデータの処理中に発生したその他のエラーが含まれます。

- TYPE_FATAL: 容易にリカバリできない致命的なエラーが含まれます。

- TYPE_FATAL_DB: Datasource not foundエラーなど、データベース関連の致命的なエラーが含まれます。

- TYPE_FATAL_CACHE: メディエータのキャッシュ関連の致命的なエラーが含まれます。

- TYPE_FATAL_ERRORHANDLING: Resubmission queues not availableなど、エラー処理中に発生した致命的なエラーが含まれます。

- TYPE_FATAL_MESH: Invoke service not availableなど、サービス・インフラストラクチャから発生した致命的なエラーが含まれます。

- TYPE_FATAL_MESSAGING: サービス・インフラストラクチャから発生した致命的なメッセージ・エラーが含まれます。

- TYPE_FATAL_TRANSACTION: Commit can't be called on a transaction which is marked for rollbackなど、トランザクションに関する致命的なエラーが含まれます。

- TYPE_FATAL_TRANSFORMATION: トランスフォーメーション時に使用するXPath関数によって発生したエラーなど、致命的なトランスフォーメーション・エラーが含まれます。

- TYPE_TRANSIENT: 再試行でリカバリできる一時エラーが含まれます。

- TYPE_TRANSIENT_MESH: サービス・インフラストラクチャに関するエラーが含まれます。

- TYPE_TRANSIENT_MESSAGING: エンキューやデキューなど、JMSに関するエラーが含まれます。

- TYPE_INTERNAL: 内部エラーが含まれます。

22.2 メディエータによるエラー処理の使用

Oracle Mediatorのエラー処理は、fault-policies.xmlおよびfault-bindings.xmlファイルを使用して有効にできます。

22.2.1 メディエータ・サービス・コンポーネントに対するエラー処理の使用方法

メディエータ・サービス・コンポーネントに対してエラー処理を使用する手順は、次のとおりです。

1. 第22.4.1項「fault-policies.xmlのスキーマ定義ファイル」で定義されているスキーマに基づいて、fault-policies.xmlファイルを作成します。

2. 第22.4.2項「fault-bindings.xmlのスキーマ定義ファイル」で定義されているXMLスキーマに基づいて、fault-bindings.xmlファイルを作成します。

3. fault-policies.xmlおよびfault-bindings.xmlファイルをSOAコンポジット・アプリケーション・プロジェクトのディレクトリにコピーします。

4. SOAコンポジット・アプリケーション・プロジェクトをデプロイします。

22.2.2 実行時の処理内容

コンポジットに対するフォルト・ポリシーはすべて、最初のエラーが発生したときにロードされます。エラーが発生した場合、メディエータ・サービス・エンジンによってフォルト・ポリシー・ファイル(fault-policies.xmlおよびfault-bindings.xml)が存在しているかどうかがチェックされます。フォルト・ポリシー・バインディングがチェックされ、そのコンポーネントまたはコンポジットと関連付けられているフォルト・ポリシーが判別されます。フォルト・ポリシーがコンポーネントまたはコンポジットと関連付けられている場合、メディエータによって、そのフォルト条件に対応したフォルト・ポリシーで定義されているアクションが実行されます。コンポーネントまたはコンポジットに対してフォルト・ポリシー・バインディングが見つからない場合、アクションは実行されず、動作はフォルト・ポリシーが存在しない場合と同じになります。

定義されているフォルト・ポリシーがなく、ルーティング・ルールが平行して実行される場合、管理者操作のデフォルト・アクションが実行されます。定義されているフォルト・ポリシーがなく、ルーティング・ルールが順次実行される場合、コール元にエラーがスローされます。

注意:

エラーが発生した順次ルーティング・トランザクションはすべて、フォルト・ポリシーがそのエラーの処理に使用された場合でも、ロールバックされます。

フォルト・ポリシーの処理方法の詳細は、第22.1.1.2項「アクション」を参照してください。

22.3 Oracle Enterprise Manager Fusion Middleware Controlを使用したフォルト・リカバリ

フォルト・ポリシー・ファイルを使用するポリシーベースのリカバリとは別に、Oracle Enterprise Manager Fusion Middleware Controlでは、リカバリ可能として識別されたOracle Mediatorフォルトに対して、フォルト・リカバリ・アクションを実行することもできます。次のうちの任意の方法を使用して、フォルトをリカバリします。

- Oracle Enterprise Manager Fusion Middleware Controlを使用してペイロードを変更する手動リカバリ

- Oracle Enterprise Manager Fusion Middleware Controlを使用してペイロードを変更しないバルク・リカバリ

- Oracle Enterprise Manager Fusion Middleware Controlを使用した、失敗したインスタンスの強制終了(インスタンスの処理を続行しない場合)
Oracle Enterprise Manager Fusion Middleware Controlを使用したフォルト・リカバリの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

22.4 XMLスキーマ定義ファイルのエラー処理

この項では、fault-policies.xmlおよびfault-bindings.xmlファイルのスキーマ・ファイルについて説明します。

22.4.1 fault-policies.xmlのスキーマ定義ファイル

fault-policies.xmlファイルは、例22-16に示すように、XSDファイルに基づいている必要があります。

例22-16 fault-policies.xmlのXSDファイル

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:tns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<!-- Conditions contain a list of fault names -->
<xs:element name="Conditions">
<xs:complexType>
<xs:sequence>
<xs:element name="faultName" type="tns:faultNameType"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- action Ref must exist in the same file -->
<xs:complexType name="actionRefType">
<xs:attribute name="ref" type="xs:string" use="required"/>
</xs:complexType>
<!-- one condition has a test and action, if test is missing, this is the
catch all condition -->
<xs:complexType name="conditionType">
<xs:all>
<xs:element name="test" type="tns:idType" minOccurs="0"/>
<xs:element name="action" type="tns:actionRefType"/>
</xs:all>
</xs:complexType>
<!-- One fault name match contains several conditions -->
<xs:complexType name="faultNameType">
<xs:sequence>
<xs:element name="condition" type="tns:conditionType"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:QName"/>
</xs:complexType>
<xs:complexType name="ActionType">
<xs:choice>
<xs:element name="retry" type="tns:RetryType"/>
<xs:element ref="tns:rethrowFault"/>
<xs:element ref="tns:humanIntervention"/>
<xs:element ref="tns:abort"/>
<xs:element ref="tns:replayScope"/>
<xs:element name="javaAction" type="tns:JavaActionType">
<xs:key name="UniqueReturnValue">
<xs:selector xpath="tns:returnValue"/>
<xs:field xpath="@value"/>
</xs:key>
</xs:element>
</xs:choice>
<xs:attribute name="id" type="tns:idType" use="required"/>
</xs:complexType>
<xs:element name="Actions">
<xs:annotation>
<xs:documentation>Fault Recovery Actions</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Action" type="tns:ActionType"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="JavaActionType">
<xs:annotation>
<xs:documentation>This action invokes java code
provided</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="returnValue" type="tns:ReturnValueType"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="className" type="tns:idType" use="required"/>
<xs:attribute name="defaultAction" type="tns:idType" use="required"/>
<xs:attribute name="propertySet" type="tns:idType"/>
</xs:complexType>
<xs:complexType name="RetryType">
<xs:annotation>
<xs:documentation>This action attempts retry of activity
execution</xs:documentation>
</xs:annotation>
<xs:all>
<xs:element ref="tns:retryCount"/>
<xs:element ref="tns:retryInterval"/>
<xs:element ref="tns:exponentialBackoff" minOccurs="0"/>
<xs:element name="retryFailureAction"
type="tns:retryFailureActionType" minOccurs="0"/>
<xs:element name="retrySuccessAction"
type="tns:retrySuccessActionType" minOccurs="0"/>
</xs:all>
</xs:complexType>
<xs:simpleType name="idType">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="ReturnValueType">
<xs:annotation>
<xs:documentation>Return value from java code can chain another action
using
return values</xs:documentation>
</xs:annotation>
<xs:attribute name="value" type="tns:idType" use="required"/>
<xs:attribute name="ref" type="xs:string" use="required"/>
</xs:complexType>
<xs:element name="exponentialBackoff">
<xs:annotation>
<xs:documentation>Setting this will cause retry attempts to use
exponentialBackoff algorithm</xs:documentation>
</xs:annotation>
<xs:complexType/>
</xs:element>
<xs:element name="humanIntervention">
<xs:annotation>
<xs:documentation>This action causes the activity to
freeze</xs:documentation>
</xs:annotation>
<xs:complexType/>
</xs:element>
<xs:element name="replayScope">
<xs:annotation>
<xs:documentation>This action replays the immediate enclosing
scope</xs:documentation>
</xs:annotation>
<xs:complexType/>
</xs:element>
<xs:element name="rethrowFault">
<xs:annotation>
<xs:documentation>This action will rethrow the
fault</xs:documentation>
</xs:annotation>
<xs:complexType/>
</xs:element>
<xs:element name="retryCount" type="xs:positiveInteger">
<xs:annotation>
<xs:documentation>This value is used to identify number of
retries</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="retryFailureActionType">
<xs:annotation>
<xs:documentation>This is the action to be chained if retry attempts
fail</xs:documentation>
</xs:annotation>
<xs:attribute name="ref" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="retrySuccessActionType">
<xs:annotation>
<xs:documentation>This is the action to be chained if retry attempts
is successful</xs:documentation>
</xs:annotation>
<xs:attribute name="ref" type="xs:string" use="required"/>
</xs:complexType>
<xs:element name="retryInterval" type="xs:unsignedLong">
<xs:annotation>
<xs:documentation>This is the delay in milliseconds of retry
attempts</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="abort">
<xs:annotation>
<xs:documentation>This action terminates the
process</xs:documentation>
</xs:annotation>
<xs:complexType/>
</xs:element>
<xs:element name="Properties">
<xs:annotation>
<xs:documentation>Properties that can be passes to a custom java
class</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="propertySet" type="tns:PropertySetType"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="PropertySetType">
<xs:sequence>
<xs:element name="property" type="tns:PropertyValueType"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="tns:idType" use="required"/>
</xs:complexType>
<xs:complexType name="PropertyValueType">
<xs:simpleContent>
<xs:extension base="tns:idType">
<xs:attribute name="name" type="tns:idType" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="faultPolicy">
<xs:complexType>
<xs:sequence>
<xs:element ref="tns:Conditions"/>
<xs:element ref="tns:Actions"/>
<xs:element ref="tns:Properties" minOccurs="0"/>
<!--Every policy has on Conditions and and one Actions, however,
Properties is optional -->
</xs:sequence>
<xs:attribute name="id" type="tns:idType" use="required"/>
<xs:attribute name="version" type="xs:string" default="2.0.1"/>
</xs:complexType>
<xs:key name="UniqueActionId">
<xs:selector xpath="tns:Actions/tns:Action"/>
<xs:field xpath="@id"/>
</xs:key>
<xs:key name="UniquePropertySetId">
<xs:selector xpath="tns:Properties/tns:property_set"/>
<xs:field xpath="@id"/>
</xs:key>
<xs:keyref name="RetryActionRef" refer="tns:UniqueActionId">
<xs:selector xpath="tns:Actions/tns:Action/tns:retry/tns:retryFailureAction"/>
<xs:field xpath="@ref"/>
</xs:keyref>
<xs:keyref name="RetrySuccessActionRef" refer="tns:UniqueActionId">
<xs:selector
xpath="tns:Actions/tns:Action/tns:retry/tns:retrySuccessAction"/>
<xs:field xpath="@ref"/>
</xs:keyref>
<xs:keyref name="JavaActionRef" refer="tns:UniqueActionId">
<xs:selector
xpath="tns:Actions/tns:Action/tns:javaAction/tns:returnValue"/>
<xs:field xpath="@ref"/>
</xs:keyref>
<xs:keyref name="ConditionActionRef" refer="tns:UniqueActionId">
<xs:selector
xpath="tns:Conditions/tns:faultName/tns:condition/tns:action"/>
<xs:field xpath="@ref"/>
</xs:keyref>
<xs:keyref name="JavaDefaultActionRef" refer="tns:UniqueActionId">
<xs:selector xpath="tns:Actions/tns:Action/tns:javaAction"/>
<xs:field xpath="@defaultAction"/>
</xs:keyref>
<xs:keyref name="JavaPropertySetRef" refer="tns:UniquePropertySetId">
<xs:selector xpath="tns:Actions/tns:Action/tns:javaAction"/>
<xs:field xpath="@property_set"/>
</xs:keyref>
</xs:element>
<xs:element name="faultPolicies">
<xs:complexType>
<xs:sequence>
<xs:element ref="tns:faultPolicy" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

22.4.2 fault-bindings.xmlのスキーマ定義ファイル

fault-bindings.xmlファイルは、例22-17に示すように、XSDファイルに基づいている必要があります。

例22-17 fault-bindings.xmlのXSDファイル

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:tns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="faultPolicyBindings">
<xs:annotation>
<xs:documentation>Bindings to a specific fault policy
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="composite" type="tns:compositeType"
minOccurs="0" maxOccurs="1"/>
<xs:element name="component" type="tns:componentType"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="reference" type="tns:referenceType"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="version" type="xs:string" default="2.0.1"/>
</xs:complexType>
<xs:key name="UniquePartnerLinkName">
<xs:selector xpath="tns:reference/tns:name"/>
<xs:field xpath="."/>
</xs:key>
<xs:key name="UniquePortType">
<xs:selector xpath="tns:reference/tns:portType"/>
<xs:field xpath="."/>
</xs:key>
<xs:key name="UniquePolicyName">
<xs:selector xpath="tns:reference"/>
<xs:field xpath="@faultPolicy"/>
</xs:key>
</xs:element>
<xs:simpleType name="nameType">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="propertyType">
<xs:simpleContent>
<xs:extension base="tns:nameType">
<xs:attribute name="name" type="xs:string" use="required"
fixed="faultPolicy"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>

<xs:complexType name="referenceType">
<xs:annotation>
<xs:documentation>Bindings for a partner link. Overrides composite
level binding.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:annotation>
<xs:documentation>Specification at partner link name overrides
specification for a port type</xs:documentation>
</xs:annotation>
<xs:element name="name" type="tns:nameType" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element name="portType" type="xs:QName" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="faultPolicy" type="tns:nameType" use="required"/>
</xs:complexType>

<xs:complexType name="componentType">
<xs:annotation>
<xs:documentation>Binding for a component </xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="name" type="tns:nameType" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="faultPolicy" type="tns:nameType" use="required"/>
</xs:complexType>
<xs:complexType name="compositeType">
<xs:annotation>
<xs:documentation>Binding for the entire composite</xs:documentation>
</xs:annotation>
<xs:attribute name="faultPolicy" type="tns:nameType" use="required"/>
</xs:complexType>
</xs:schema>

23 Oracle Mediatorにおける再順序付け

この章では、Oracle Mediatorにおけるメッセージの再順序付けの概念について説明し、標準の再順序付け、先入れ/先出し再順序付けおよびベスト・エフォート再順序付けを構成する手順を示します。

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

- 第23.1項「再シーケンサの概要」

- 第23.2項「再順序付けの順序」

- 第23.3項「再シーケンサの構成」

23.1 再シーケンサの概要

メディエータの再シーケンサは、関連がありながらも順序が正しくないメッセージを適切な順序に並べ替えます。受信メッセージが着信したときは、ランダムな順序である場合があります。再シーケンサは順次または時系列の情報に基づいてメッセージを並べ替えた後、正しい順序でターゲット・サービスにメッセージを送信します。順序付けは、選択した順序付け方法に基づいて実行されます。

23.1.1 グループおよび順序ID

再シーケンサでは、グループと順序IDの2つの中心的な概念が使用されます。順序IDはメッセージの識別子の部分で、メッセージはこの識別子に基づいて再編成されます。再順序付けのために着信したメッセージは、複数のグループに分割され、各グループ内のメッセージは順序IDに従って順序付けされます。グループ内の順序付けは、他のグループのメッセージの順序とは独立して実行されます。グループ自体は相互に依存していないため、独立して処理できます。

たとえば、特定のグループに添付されているメッセージは、次の順序でメディエータ・サービス・コンポーネントに着信します。

msg9(a)、msg8(b)、msg7(a)、msg6(c)、msg5(a)、msg4(b)、msg3(c)、msg2(b)、msg1(a)

表23-1に、メディエータがメッセージを複数のグループにソートする方法を示します。各グループ内のメッセージの順序は、使用している再シーケンサのタイプによって異なります。

表23-1 複数のグループにソートされるメッセージ

グループc

グループb

グループa

msg6(c)、msg3(c)

msg8(b)、msg4(b)、msg2(b)

msg9(a)、msg7(a)、msg5(a)、msg1(a)

すべてのグループは相互に独立して処理され、あるグループで発生したエラーが、他のグループの処理に影響を与えることはありません。

23.1.2 グループIDと順序IDの識別

グループIDと順序IDは、メッセージ・ペイロードおよびヘッダーのXPath式を介して識別されます。グループ化および順序付けが完了したメッセージ・ペイロードの要素を指し示すXPath式を指定します。

図23-1に示すメッセージ・ペイロードでは、CustomerIdがインスタンス順序付けのベースとなるフィールドで、CustomerNameがグループ化のベースとなるフィールドです。

図23-1 メッセージ・ペイロード

「図23-1 メッセージ・ペイロード」の説明

注意:

再順序付けは、WSDLファイルでリクエスト操作およびリクエスト・コールバック操作のメディエータ・コンポーネントに対してのみサポートされています。つまり、WSDL操作に同期リプライ要素がある場合、再順序付けはユーザー・インタフェースでは使用できません。これらの操作の詳細は、第24章「Oracle Mediatorのメッセージ交換パターンの理解」を参照してください。

23.2 再順序付けの順序

メディエータでは、ユーザーが指定した順序で着信メッセージを再順序付けできます。この実装によって、3種類の再順序付けの順序を指定できます。

- 標準再シーケンサ

- FIFO再シーケンサ

- ベスト・エフォート再シーケンサ

23.2.1 標準再シーケンサ

標準再シーケンサは、標準再シーケンサ・パターンをサポートしています。次の各項では、標準再シーケンサおよびメッセージの処理方法について説明します。

23.2.1.1 標準再シーケンサの概要

標準再シーケンサは、メッセージ内の単純な識別子の連番から識別子を使用するアプリケーションに役立ちます。標準再シーケンサは一連のメッセージを受信しますが、これらのメッセージは順序に従って着信しない可能性があります。この場合、順序IDに基づいた完全な順序を受信するまで、メッセージは順不同で格納されます。正しい順序のメッセージは、そのメッセージの順序IDに基づいて非同期で処理されます。

標準再シーケンサであるメディエータ・サービス・コンポーネントのアウトバウンド・サービスへのメッセージは、順番に着信することが保証されている点に注意してください。

23.2.1.2 標準の再順序付けに必要な情報

メディエータの標準の再シーケンサを使用する場合は、常にグループXPath式と順序ID XPath式を指定する必要があります。これらは、メディエータの再シーケンサがメッセージでグループおよび順序IDを検索できる場所を指定します。また、開始順序IDと順序IDの増分デルタに関して順序番号を指定する必要があります。この番号付けは、各グループを形成する際に使用されます。グループ、順序IDおよび増分プロパティに加えて、予期されているメッセージを待機する期間(秒単位)を指定することもできます。

23.2.1.3 標準再シーケンサの例

表23-2に、複数のグループが、増分デルタの2つの異なる値に対してどのように形成されるかを示します。

表23-2 2つの異なる値に対する複数グループの形成

開始順序ID

増分デルタ

グループ1

グループ2

...

グループn

1

1

1,2,3,4,5,...

1,2,3,4,5,...

...

1、2、3、4、5、...n

1

5

1,5,10,15,...

1,5,10,15,...

...

1,5,10,15,...

注意:

- 様々なグループで順序番号が異なり(たとえば、各グループに同じ増分デルタまたは開始順序IDがない場合)、メッセージも正しい順序で着信しない場合は、メッセージを再編成するためにベスト・エフォート再シーケンサを使用できます。

- メディエータの標準再シーケンサでは、様々なグループに対して適切な順序を作成できるようになるまで、メディエータの再シーケンサ・データベースにメッセージが保持されます。この状況は、指定のグループについて、特定の順序IDのメッセージがタイムアウト期間脚注1内に着信しない場合は、そのグループの連続するメッセージが永久に保持されることを意味します。このような場合は、Oracle Enterprise Manager Fusion Middleware Controlを介してグループのロックを手動で解除して次のメッセージに進み、保留中のメッセージをスキップする必要があります。

脚注1タイムアウト期間とは、予期されているメッセージを待機する期間(秒単位)です。

23.2.2 FIFO再シーケンサ

FIFO再シーケンサは、標準の先入れ先出し(FIFO)パターンをサポートしています。次の各項では、FIFO再シーケンサおよびメッセージの処理方法について説明します。

23.2.2.1 FIFO再シーケンサの概要

FIFO再シーケンサは、メディエータへのメッセージの着信時刻に基づいて順序付けする必要があるアプリケーションに役立ちます。FIFO再シーケンサは、順序に従って一連のメッセージを受信し、メッセージの着信時刻に基づいて、各グループのメッセージを順に処理します。

FIFO再シーケンサとして機能するメディエータのアウトバウンド・サービスへのメッセージは、着信時刻に基づいて順に着信することが保証されている点に注意してください。したがって、メッセージは、再シーケンサ・データ・ストアに格納された順に配信されます。

23.2.2.2 FIFO再順序付けに必要な情報

FIFO再シーケンサを使用する場合は、常にグループXPath式を指定する必要があります。ただし、メッセージはFIFO再シーケンサとして構成されているメディエータ・サービス・コンポーネントへの着信時刻に従って処理されるため、順序IDを指定する必要はありません。グループXPath式では、FIFO再シーケンサがメッセージのグループ化のために、メッセージ内のグループ情報を検索する場所を指定します。FIFOパターンに必要な構成は他にはありません。

23.2.2.3 FIFO再シーケンサの例

表23-3に、FIFO再シーケンサの動作を示します。msgX(Y,Z)は、メッセージがメディエータ・サービス・コンポーネントへのメッセージ番号Xとして着信し、そのメッセージにsequenceID YとグループZが格納されていることを意味します。

表23-3 FIFO 再シーケンサの動作

着信メッセージ

順序付けされたメッセージ

msg03(2,c)

msg06(1,c)

msg07(5,a)

msg10(3,a)

msg10(3,c)

msg02(7,a)

msg05(9,a)

msg12(4,c)

msg12(4,c)、msg10(3,c)、msg06(1,c)、msg03(2,c)

msg05(9,a)、msg02(7,a)、msg10(3,a)、msg07(5,a)

表23-3に示すように、メッセージは着信時刻に基づいて順序付けされ、sequenceIDは順序付けに使用されません。

注意:

FIFO再シーケンサを使用する場合は、シングル・スレッドのインバウンド・アダプタを使用して不測の結果を回避してください。たとえば、FIFO再シーケンサとして構成されているメディエータ・サービス・コンポーネントの前で、ファイル/FTPアダプタ、データベース・アダプタまたはAQアダプタを使用する場合、シングル・スレッド処理のアダプタを構成してください。シングル・スレッド用に構成しないと、各メッセージの着信時刻がアダプタ・サービスへのメッセージ着信時ではなく、メディエータ・サービス・コンポーネントへの着信時に計算されるため、不測の結果が発生します。

23.2.3 ベスト・エフォート再シーケンサ

メディエータの再シーケンサは、ベスト・エフォート・パターンをサポートしています。次の各項では、ベスト・エフォート再シーケンサおよびメッセージの処理方法について説明します。

23.2.3.1 ベスト・エフォート再シーケンサの概要

短期間に多数のメッセージを生成し、順序付けに使用する識別子の情報を再シーケンサに提供できないアプリケーションには、ベスト・エフォート・パターンが役立ちます。通常、このようなシナリオで順序付けに使用される識別子は、dateTimeタイプまたはnumericタイプです。dateTimeフィールドを順序ID XPathとして使用すると、順序付けを制御できます。メッセージはアプリケーションから順に送信されることが想定されるため、メッセージの送信日時を使用して順序付けができます。メディエータは、メッセージが順序に従って配信されるように最善の方法を取ります。

ベスト・エフォート再シーケンサでは、順序IDの増分に関する認識に基づくことなくメッセージを並べ替えることができます。この状況は、標準再シーケンサとは異なり、ベスト・エフォート再シーケンサには、順序IDの増分を事前に定義する必要がないことを意味します。本来の順序を受信しても、メッセージの処理時には、メッセージは指定した順序IDと着信したメッセージに基づいて順に処理されます。順序IDは、numericまたはdateTimeのいずれかです。したがって、順序付けは、順序IDの数値またはdateTimeの順に発生します。

23.2.3.2 ベスト・エフォート再シーケンサ・メッセージ選択方法

ベスト・エフォート再シーケンサは、2つのメッセージ選択方法である最大行数選択または時間ウィンドウのいずれかに基づいて、メッセージを非同期で処理します。同時に選択および処理されたメッセージは、指定する最大行数またはメッセージが着信する時間ウィンドウのいずれかに基づいて処理されます。

最大行数選択

ベスト・エフォート再シーケンサが最大行数を使用するように構成されていると、再シーケンサ・データベースで新しいメッセージが使用可能な場合は常に、次の手順が実行されます。

1. 再シーケンサは、指定した順序ID (通常は、日付およびタイム・スタンプ)に従ってメッセージを順序付けします。

2. 再シーケンサは、前述の順序付けメッセージからmaxRowsRetrievedパラメータの値と等しいメッセージ数をロックして選択します。

3. 再シーケンサは、選択したメッセージを自身のトランザクションで1つずつ順に処理します。

時間ウィンドウ

ベスト・エフォート再シーケンサが最大行数ではなく時間ウィンドウを使用するように構成されていると、一度に選択および処理するメッセージは、指定する一定の期間に加えてオプションのバッファ時間に基づいて処理されます。各メッセージは特定の時間ウィンドウに属し、ある時間ウィンドウにあるメッセージは異なる時間ウィンドウに属しているメッセージとは別に処理されます。

時間ウィンドウに加えてバッファ時間を指定できます。バッファ時間は、連続する2つの時間ウィンドウの重複部分で、最初の時間ウィンドウに関連するメッセージを少し後で着信させることができます。デフォルトでは、バッファ時間は指定した時間ウィンドウの10%です。

ベスト・エフォート再シーケンサが時間ウィンドウを使用するように構成されていると、グループは反復方法で処理され、メッセージは次の手順で処理されます。

1. 最初のメッセージが着信すると、タイム・ウィンドウが開始されます。

2. バッファが時間ウィンドウに追加され、バッファ時間の後に処理が開始されます。

3. 再シーケンサは時間ウィンドウ内に着信したメッセージを取得し、すべてのメッセージから最大順序ID (通常は、日付およびタイム・スタンプ)を識別します。

4. 再シーケンサは、バッファ時間内に着信し、上で識別した最大順序IDより小さい順序IDを持つすべてのメッセージを取得します。

5. 再シーケンサは、前述の手順で取得したすべてのメッセージを順序IDの昇順でソートし、メッセージを処理します。

23.2.3.3 ベスト・エフォート再シーケンサ・メッセージ配信

ベスト・エフォート再順序付け用に構成されたメディエータ・サービス・コンポーネントのアウトバウンド・サービスへのメッセージは、順序IDの順に着信することが保証されていない点に注意してください。任意の時点で、使用可能なメッセージのスナップショットが取得され、それらのメッセージのみを対象として順序付けが実行されます。したがって、標準再シーケンサとは異なり、先に着信した大きい順序ID値のメッセージより前に、小さい順序ID値のメッセージが送信される保証はありません。後に到着した小さい順序ID値のメッセージは、使用可能なメッセージのスナップショットの再取得とメッセージの再順序付けが行われる次のサイクルで処理される場合があります。

23.2.3.4 ベスト・エフォート再順序付けに必要な情報

ベスト・エフォート再シーケンサを使用する場合は、グループXPath式、順序ID XPath式、および順序IDのデータ型(numericまたはdateTime)を指定する必要があります。これらは、再シーケンサがメッセージでグループと順序IDを検索する場所、および順序IDの処理方法を指定します。また、各順序付けバッチを選択するための最大行数、または1つのバッチに含まれるメッセージが着信する時間ウィンドウを指定する必要もあります。

標準再シーケンサとは異なり、ベスト・エフォート再シーケンサには、順序の作成方法に関する認識はありません。ベスト・エフォート再シーケンサでの処理に使用される情報は他にはありません。

23.2.3.5 最大行数に基づいたベスト・エフォート再順序付けの例

表23-4に、ベスト・エフォート再シーケンサが処理するメッセージを判別するために最大行数を使用するよう構成されている場合の動作を示します。この例では、msgX(Y,Z)は、メッセージがメディエータ・サービス・コンポーネントへのメッセージ番号Xとして着信し、そのメッセージにsequenceID Yとgroup Zが格納されていることを示しています。

表23-4 最大行数に基づいたベスト・エフォート再シーケンサの動作

グループC

順序付けされたメッセージ

msg03(1,c)

msg06(2,c)

msg10(3,c)

msg12(4,c)

msg12(4,c)、msg10(3,c)、msg06(2,c)、msg03(1,c)

注意:

ベスト・エフォート再シーケンサが正しく機能するには、メッセージが順番に、またはほぼ順番に着信する必要があります。順番に着信しない場合は、正しく再順序付けされません。メッセージが短い間隔で着信しない場合は、maxRowsRetrievedの値を1に設定すると、次のメッセージは着信までの時間の余裕ができ、次の処理ループで取得されます(したがって、順に配信されます)。

23.2.3.6 時間ウィンドウに基づいたベスト・エフォート再順序付けの例

表23-5に、ベスト・エフォート再シーケンサがメッセージの着信期間に基づいて処理するよう構成されている場合の動作を示します。この例では、時間帯は10分、バッファは10% (1分)で、msgX(Y)は、メッセージがメディエータ・サービス・コンポーネントへのメッセージ番号Xとして着信し、そのメッセージに順序ID Yが格納されていることを示しています。最初のメッセージが2:00:00に着信すると、時間ウィンドウが開始されます。時間ウィンドウはバッファ時間を追加することで2:10:00まで継続され、2:11:00までに着信したメッセージが処理されます。

表23-5 時間ウィンドウに基づいたベスト・エフォート再シーケンサの動作

グループCメッセージ/時間

順序付けされたメッセージ

msg01(04)/2:00:00

msg02(05)/2:00:20

msg03(01)/2:00:30

msg04(03)/2:00:50

msg05(07)/2:04:20

msg06(02)/2:04:45

msg07(13)/2:05:10

msg08(08)/2:05:40

msg09(06)/2:08:40

msg10(12)/2:09:20

msg11(10)/2:10:30

msg12(09)/2:10:40

msg13(14)/2:10:50

msg14(11)/2:13:00

msg03(01)、msg06(02)、msg04(03)、msg01(04)、msg02(05)、msg09(06)、msg05(07)、msg08(08)、msg12(09)、msg11(10)、msg10(12)、msg07(13)

注意:

前述の例で、再シーケンサは時間ウィンドウの最大順序IDを13(メッセージ7から)と識別しました。メッセージ13はバッファ時間内に着信しましたが、14の順序IDを持っています。メッセージは元のグループで処理されるかわりに、2:10:50の着信時間で新しい時間ウィンドウが開始されます。メッセージ14の着信は遅すぎたため、2番目の時間ウィンドウに含められます。

23.3 再シーケンサの構成

再シーケンサは、Oracle JDeveloperを使用して構成できます。この項では、Oracle JDeveloperでの再シーケンサの構成方法について説明します。

23.3.1 再順序付けレベルの指定方法

サービス・コンポーネント・レベルまたは操作レベルのいずれかで再順序付けを定義できます。1つの操作のみを使用するメディエータ・サービス・コンポーネントの場合、操作またはサービス・コンポーネント・レベルで再順序付けを構成しても、動作は同じになります。複数の操作を持つメディエータ・サービス・コンポーネントの場合は、サービス・コンポーネント・レベルで再順序付けを指定すると、すべての操作に同じ再順序付けルールが適用され、すべての操作に着信するメッセージが再順序付けされます。デフォルトの再順序レベルは操作です。

再順序レベルを指定する手順は、次のとおりです。

1. 図23-2に示すように、メディエータ・エディタで「再順序レベル」ドロップダウン・リストから再順序レベルを選択します。

図23-2 メディエータ・エディタと「再順序レベル」フィールド

「図23-2 メディエータ・エディタと「再順序レベル」フィールド」の説明

コンポーネントを選択した場合、各操作で「再順序」フィールドは表示されなくなり、「再順序モード」フィールドが「再順序レベル」フィールド下に表示されるため、サービス・コンポーネントに再順序付けモードを設定できます。デフォルトの再順序モードは「オフ」に設定されています。

再順序モードを選択すると、図23-3に示すように、サービス・コンポーネントまたは操作で「再順序オプション」ボックスが表示されます。操作の「再順序モード」フィールドが「オフ」に設定されている場合、「再順序オプション」ボックスは表示されません。

図23-3 メディエータ・エディタと「再順序オプション」セクション

「図23-3 メディエータ・エディタと「再順序オプション」セクション」の説明

「再順序オプション」セクションのオプションは、選択する再順序付けモードによって変更されます。

23.3.2 再順序付け方法の構成方法

この項では、3つの異なるタイプの再順序付け方法を構成する手順を示します。

標準再シーケンサを構成する手順は、次のとおりです。

1. 23.3.1項「再順序付けレベルの指定方法」の説明に従って、再順序レベルを設定してください。

2. 構成する各メディエータ・コンポーネントまたは操作のメディエータ・エディタで、「再順序モード」ドロップダウン・リストから「標準」を選択します。
図23-4に示すように、「再順序オプション」ボックスが表示され、標準再シーケンサのオプションが含まれています。

図23-4 「再順序モード」が「標準」に設定されている状態のOracle Mediator

「図23-4 「再順序モード」が「標準」に設定されている状態のOracle Mediator」の説明

3. 表23-6にリストされたフィールドに入力します。

注意:

グループまたはIDフィールドにXPath式を直接入力するか、または各フィールドの右側にある「式ビルダーの起動」をクリックできます。これにより式ビルダーが起動し、フィールド式を作成したり関数を追加する際にグラフィカルなサポートが提供されます。

表23-6 標準の再順序付けオプション

フィールド名

説明

デフォルト値

必須

グループ

グループ化が行われる着信メッセージのフィールドを指し示すXPath。MPLANファイルを直接編集する場合、関連する要素はgroupIDExpressionという名前になります。ここに値が入力されない場合は、実行時にデフォルト値が内部的に生成されます。

component_name-operation

n

ID

再順序付けが行われる着信メッセージのフィールドを指し示すXPath。MPLANファイルを直接編集する場合、対応する要素はsequenceIDExpressionという名前になります。

該当なし

y

タイムアウト

予期されているメッセージを待機する期間(秒単位)。タイムアウトが発生すると、再シーケンサはグループをタイムアウトとしてロックします。MPLANファイルを直接編集する場合、対応する要素はtimeOutDurationという名前になります。

0脚注1

n

開始

ID順序の開始番号。MPLANファイルを直接編集する場合、対応する要素はsequenceStartという名前になります。

1

n

増分

ID順序の増分。MPLANファイルを直接編集する場合、対応する要素はsequenceIncrementという名前になります。

1

n

脚注1このデフォルト値は、グループのタイムアウトがデフォルトでは発生しないことを意味します。

FIFO再シーケンサを構成する手順は、次のとおりです。

1. 23.3.1項「再順序付けレベルの指定方法」の説明に従って、再順序レベルを設定してください。

2. 構成する各Oracle Mediatorコンポーネントまたは操作のメディエータ・エディタで、「再順序モード」ドロップダウン・リストから「FIFO」を選択します。
図23-5に示すように、「再順序オプション」ボックスが表示され、標準再シーケンサのオプションが含まれています。

図23-5 「再順序モード」が「FIFO」に設定されている状態のOracle Mediator

「図23-5 「再順序モード」が「FIFO」に設定されている状態のOracle Mediator」の説明

3. 「グループ」フィールドで、グループ化が実行される着信メッセージのフィールドを指し示すXPath式を入力します。

注意:

MPLANファイルを直接変更する場合、XML要素の名前はgroupIDExpressionになります。デフォルト値はなく、フィールドは必須ではありません。

ベスト・エフォート再シーケンサを構成する手順は、次のとおりです。

1. 23.3.1項「再順序付けレベルの指定方法」の説明に従って、再順序レベルを設定してください。

2. 構成する各メディエータ・コンポーネントまたは操作のメディエータ・エディタで、「再順序モード」ドロップダウン・リストから「ベスト・エフォート」を選択します。
図23-6に示すように、「再順序オプション」ボックスが表示され、標準再シーケンサのオプションが含まれています。

図23-6 「再順序モード」が「ベスト・エフォート」に設定されている状態のOracle Mediator

「図23-6 「再順序モード」が「ベスト・エフォート」に設定されている状態のOracle Mediator」の説明

3. 表23-7にリストされているフィールドを入力して、ベスト・エフォート再シーケンサを構成します。

ヒント:

メッセージの一度に処理する最大行数または時間ウィンドウのいずれかを指定できます。両方を指定することはできません。

4. 必要に応じて、バッファとして追加された時間ウィンドウの割合を変更できます。Oracle Enterprise Manager Fusion Middleware Controlを使用してバッファを構成します。
手順は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の再順序付けされたメッセージの構成に関する項を参照してください。

表23-7 ベスト・エフォート再順序付けオプション

フィールド名

説明

デフォルト値

必須

グループ

グループ化が実行される着信メッセージのフィールドを指し示すXPath。MPLANファイルを直接編集する場合、関連する要素はgroupIDExpressionという名前になります。ここに値が入力されない場合は、実行時にデフォルト値が内部的に生成されます。

component_name-operation

n

ID

再順序付けが実行され、IDを含む着信メッセージのフィールドを指し示すXPath。MPLANファイルを直接編集する場合、対応する要素はsequenceIDExpressionという名前になります。

該当なし

y

データ型

順序IDのデータ型。注文プロセスはデータ型に基づいています。サポートされる値は、日時または数値です。MPLANファイルを直接編集する場合、対応する要素はsequenceIDDataTypeという名前になります。

数値

y

時間ウィンドウ

メッセージの着信後、再順序付けのためデータ・ストアからメッセージを選択するのに待機する時間の長さ(分単位)。時間ウィンドウまたは最大行数を指定する必要がありますが(後述)、両方は指定できません。MPLANファイルを直接編集する場合、対応する要素はtimeWindowという名前になります。

0

n

最大行数

再シーケンサが一度にデータ・ストアから取得する、順に従ったメッセージの数。MPLANファイルを直接編集する場合、対応する要素はmaxRowsRetrievedという名前になります。

5

n

24 Oracle Mediatorのメッセージ交換パターンの理解

この章では、Oracle Mediatorサービス・コンポーネントと他のアプリケーションとの間の一般的なメッセージ交換パターンについて説明します。

この章には次の項が含まれます:

- 第24.1項「一方向メッセージ交換パターン」

- 第24.2項「リクエスト・リプライ・メッセージ交換パターン」

- 第24.3項「リクエスト・リプライ・フォルト・メッセージ交換パターン」

- 第24.4項「リクエスト・コールバック・メッセージ交換パターン」

- 第24.5項「リクエスト・リプライ・コールバック・メッセージ交換パターン」

- 第24.6項「リクエスト・リプライ・フォルト・コールバック・メッセージ交換パターン」

注意:

次の交換パターンは、ルーティング・ルールが作成された際のレスポンス、フォルトおよびコールバックに対するOracle JDeveloperのデフォルト処理を示しています。すべてのケースについて、次の点を考慮してください。

- レスポンス、フォルトまたはコールバックがコール元に返信される場合は、同じメッセージを別のターゲット・サービスまたはイベントにルーティングすることもできます。これを実行するには、ターゲットの横にあるボタンをクリックし、別のターゲットを選択します。

- メディエータのコール元がレスポンスを想定する場合、1つ以上のルーティング・ルールにより、レスポンスを返さないターゲットにリクエストがルーティングされる可能性がありますが、レスポンスを返す順次ルーティング・ルールが少なくとも1つ必要です。

- リクエスト・レスポンス・パターンに複数のルーティング・ルールが含まれ、複数のルールで最初のコール元に対してレスポンスが返される場合、受信した最初のレスポンスがコール元に配信されるレスポンスになります。その他のレスポンスは無視されます。したがって、レスポンスを送信するルーティング・ルールは、レスポンスを転送する他のルーティング・ルール(存在する場合)よりも前に実行される必要があります。

- メディエータの非同期のリクエスト・リプライ・パターンは、Webサービスに対してのみサポートされます。この交換パターンは、アダプタや他のサービスに対してはサポートされません。

24.1 一方向メッセージ交換パターン

一方向相互作用では、メディエータは起動されますが、コール元にはレスポンスを返信しません。表24-1に示すように、ルーティング・ルール・ターゲットのタイプに基づいて、レスポンス、フォルトおよびコールバックが処理されます。

表24-1 メディエータのWSDLが一方向相互作用の場合のレスポンス

ルーティング・ルール・ターゲットのタイプ

レスポンス

リクエスト

レスポンスはありません。

リクエスト・レスポンス

レスポンスは、別のターゲットまたはイベントに転送されます。

リクエスト・レスポンス・フォルト

レスポンスおよびフォルトは、別のターゲットまたはイベントに転送されます。

リクエスト・コールバック

コールバックは、別のターゲットまたはイベントに転送されます。

リクエスト・レスポンス・コールバック

レスポンスおよびコールバックは、別のターゲットまたはイベントに転送されます。

リクエスト・レスポンス・フォルト・コールバック

レスポンス、フォルトおよびコールバックは、別のターゲットまたはイベントに転送されます。

図24-1は、一方向メッセージ交換パターンを示しています。

図24-1 一方向メッセージ交換パターン

「図24-1 一方向メッセージ交換パターン」の説明

24.1.1 one.way.returns.faultプロパティ

one.way.returns.faultプロパティは、一方向インタフェースのSOAPコールについて、フォルトおよび一方向メッセージの処理方法を制御します。このプロパティは、composite.xmlファイルの一方向Webサービスに関するWebサービス・セクションのサービス・バインディング・コンポーネントに追加できます。このプロパティを、参照に適用することはできません。適用できるのは、サービスとbinding.wsバインディング・タイプに対してのみです。表24-2に、このプロパティの詳細を示します。

表24-2 one.way.returns.faultプロパティ

one.way.returns.faultの設定

結果

trueに設定した場合

. . .
<service name="Mediator1_2"
ui:wsdlLocation="ReadFile.wsdl">
<interface.wsdl
interface="http://xmlns.oracle.com/pcbpel/adapter/file
/LocalSandbox/Project1/ReadFile%2F#wsdl.interface(Read_
ptt)"/>
<binding.ws
port="http://xmlns.oracle.com/pcbpel/adapter/file
/LocalSandbox/Project1/ReadFile%2F#wsdl.endpoint
(Mediator1/Read_pt)">
<property name="one.way.returns.fault" type="xs:string" many="false"
override="may">true</property>
</binding.ws>
</service>
. . .

後続処理で発生するフォルトは、クライアントへのSOAPフォルトと、HTTPレスポンス・コード500を返します。(11g リリース1と同じ動作)。

falseに設定した場合

. . .
<service name="Mediator1_2"
ui:wsdlLocation="ReadFile.wsdl">
<interface.wsdl
interface="http://xmlns.oracle.com/pcbpel/adapter/file/
Local Sandbox/Project1/ReadFile%2F#wsdl.interface(Read_
ptt)"/>
<binding.ws
port="http://xmlns.oracle.com/pcbpel/adapter/file/LocalSan
dbox/Project1/ReadFile%2F#wsdl.endpoint(Mediator1/Read_
pt)">
<property name="one.way.returns.fault"
type="xs:string" many="false"
override="may">false</property>
</binding.ws>
</service>
. . .

後続処理で発生するフォルトは、HTTPレスポンス・コード500のみを返します。クライアントにはSOAPフォルトを返しません。

未設定の場合(デフォルト)

後続処理で発生するフォルトは、クライアントへのSOAPフォルトと、HTTPレスポンス・コード500を返します。(11g リリース1と同じ動作)。

one.way.returns.faultプロパティを追加する手順は、次のとおりです。

1. SOAコンポジット・エディタで、one.way.returns.faultプロパティを追加するサービス・バインディング・コンポーネントを選択します。

2. エディタの右下部にある「プロパティ・インスペクタ」セクションに移動します。

3. 「バインディング・プロパティ」セクションで、「追加」アイコンをクリックします。
「プロパティの作成」ダイアログが表示されます。

4. 「名前」フィールドに、one.way.returns.faultと入力します。

5. 「値」フィールドに、trueまたはfalseを入力します。

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

24.2 リクエスト・リプライ・メッセージ交換パターン

リクエスト・リプライ相互作用では、メディエータが起動され、コール元にリプライを送信します。表24-3に示すように、ルーティング・ルール・ターゲットのタイプに基づいて、レスポンス、フォルトおよびコールバックが処理されます。

表24-3 メディエータのWSDLがリクエスト・リプライの場合のレスポンス

ルーティング・ルール・ターゲットのタイプ

レスポンス

リクエスト

ターゲットからのレスポンスはありませんが、リクエスト・レスポンス・サービスが含まれる順次ルーティング・ルールが少なくとも1つ必要です。

リクエスト・レスポンス

レスポンスは、コール元に返信されます。レスポンスは別のターゲットまたはイベントに転送できますが、コール元にレスポンスを返す順次ルーティング・ルールが少なくとも1つ必要です。

リクエスト・レスポンス・フォルト

レスポンスは、コール元に返信されます。フォルトは、別のターゲットまたはイベントに転送されます。

リクエスト・コールバック

ターゲットからのレスポンスはありませんが、リクエスト・レスポンス・サービスが含まれる順次ルーティング・ルールが少なくとも1つ必要です。コールバックは、別のターゲットまたはイベントに転送されます。

リクエスト・レスポンス・コールバック

レスポンスは、コール元に返信されます。コールバックは、別のターゲットまたはイベントに転送されます。

リクエスト・レスポンス・フォルト・コールバック

レスポンスは、コール元に返信されます。コールバックおよびフォルトは、別のターゲットまたはイベントに転送されます。

図24-2は、リクエスト/リプライ・メッセージ交換パターンを示しています。

図24-2 リクエスト/リプライ・メッセージ交換パターン

「図24-2 リクエスト/リプライ・メッセージ交換パターン」の説明

24.3 リクエスト・リプライ・フォルト・メッセージ交換パターン

リクエスト・リプライ・フォルト相互作用では、メディエータが起動され、コール元にリプライと1つ以上のフォルトを返信します。表24-4に示すように、ルーティング・ルール・ターゲットのタイプに基づいて、レスポンス、フォルトおよびコールバックが処理されます。

表24-4 メディエータのWSDLがリクエスト・リプライ・フォルトの場合のレスポンス

ルーティング・ルール・ターゲットのタイプ

レスポンス

リクエスト

リクエスト・レスポンス・フォルト・サービスが含まれる順次ルーティング・ルールが少なくとも1つ必要です。送信するレスポンスがない場合、メディエータはnullを返します。

リクエスト・レスポンス

レスポンスは、コール元に返信されます。メディエータによるメッセージ処理での例外によってフォルトが発生する場合があります。

リクエスト・レスポンス・フォルト

レスポンスおよびフォルトがコール元に返信されます。メディエータによるメッセージ処理での例外によってフォルトが発生する場合があります。

リクエスト・コールバック

ターゲットからのレスポンスはありませんが、リクエスト・レスポンス・サービスが含まれる順次ルーティング・ルールが少なくとも1つ必要です。送信するレスポンスがない場合、メディエータはnullを返します。コールバックは、別のターゲットまたはイベントに転送されます。

リクエスト・レスポンス・コールバック

レスポンスは、コール元に返信されます。メディエータによるメッセージ処理での例外によってフォルトが発生する場合があります。

リクエスト・レスポンス・フォルト・コールバック

レスポンスおよびフォルトがコール元に返信されます。メディエータによるメッセージ処理での例外によってフォルトが発生する場合があります。

図24-3は、リクエスト・リプライ・フォルト・メッセージ交換パターンを示しています。

図24-3 リクエスト・リプライ・フォルト・メッセージ交換パターン

「図24-3 リクエスト・リプライ・フォルト・メッセージ交換パターン」の説明

24.4 リクエスト・コールバック・メッセージ交換パターン

リクエスト・コールバック相互作用では、メディエータが起動され、コール元に非同期リプライを送信する場合があります。表24-5に示すように、ルーティング・ルール・ターゲットのタイプに基づいて、レスポンス、フォルトおよびコールバックが処理されます。

表24-5 メディエータのWSDLがリクエスト・コールバックの場合のレスポンス

ルーティング・ルール・ターゲットのWSDL

レスポンス

リクエスト

リクエスト・コールバック・サービスが含まれる順次ルーティング・ルールが少なくとも1つ必要です。コールバックが定義されたルーティング・ルールがない場合、コールバックはコール元に送信されません。

リクエスト・レスポンス

レスポンスは、独立したスレッドでコールバックとしてコール元に返信されます。追加のルーティング・ルールを作成して、レスポンスを別のターゲットまたはイベントに転送できます。

リクエスト・レスポンス・フォルト

レスポンスは、独立したスレッドでコールバックとしてコール元に返信されます。フォルトは、別のターゲットまたはイベントに転送されます。前項と同様に、追加のルーティング・ルールを作成して、レスポンスを別のターゲットまたはイベントに転送できます。

リクエスト・コールバック

コールバックは、コール元に返信されます。

リクエスト・レスポンス・コールバック

コールバックはコール元に返信され、レスポンスは別のターゲットまたはイベントに転送されます。

リクエスト・レスポンス・フォルト・コールバック

コールバックは、コール元に返信されます。レスポンスおよびフォルトは、別のターゲットまたはイベントに転送されます。

図24-4は、リクエスト・コールバック・メッセージ交換パターンを示しています。

図24-4 リクエスト・コールバック・メッセージ交換パターン

「図24-4 リクエスト・コールバック・メッセージ交換パターン」の説明

24.5 リクエスト・リプライ・コールバック・メッセージ交換パターン

リクエスト・リプライ・コールバック相互作用では、メディエータが起動され、最初のコール元にレスポンスと非同期リプライを送信します。表24-6に示すように、ルーティング・ルール・ターゲットのタイプに基づいて、レスポンス、フォルトおよびコールバックが処理されます。

表24-6 メディエータのWSDLがリクエスト・レスポンス・コールバックの場合のレスポンス

ルーティング・ルール・ターゲットのタイプ

レスポンス

リクエスト

レスポンスを返す順次ルーティング・ルールが少なくとも1つ必要です。コールバックが定義されたルーティング・ルールがない場合、コールバックはコール元に送信されません。

リクエスト・レスポンス

レスポンスを返す順次ルーティング・ルールが少なくとも1つ必要です。コールバックが定義されたルーティング・ルールがない場合、コールバックは送信されません。

リクエスト・レスポンス・フォルト

レスポンスを返す順次ルーティング・ルールが少なくとも1つ必要です。コールバックが定義されたルーティング・ルールがない場合、コールバックはコール元に送信されません。フォルトは、別のターゲットまたはイベントに転送されます。

リクエスト・コールバック

レスポンスを返す順次ルーティング・ルールが少なくとも1つ必要です。送信するレスポンスがない場合、メディエータはnullを返します。

リクエスト・レスポンス・コールバック

レスポンスおよびコールバックがコール元に返信されます。

リクエスト・レスポンス・フォルト・コールバック

レスポンスおよびコールバックがコール元に返信されます。フォルトは、別のターゲットまたはイベントに転送されます。

図24-5は、リクエスト・リプライ・コールバック・メッセージ交換パターンを示しています。

図24-5 リクエスト・リプライ・コールバック・メッセージ交換パターン

「図24-5 リクエスト・リプライ・コールバック・メッセージ交換パターン」の説明

24.6 リクエスト・リプライ・フォルト・コールバック・メッセージ交換パターン

リクエスト・リプライ・フォルト・コールバック相互作用では、メディエータが起動され、最初のコール元にレスポンス、非同期リプライおよび1つ以上のフォルト・タイプを返信します。表24-7に示すように、ルーティング・ルール・ターゲットのタイプに基づいて、レスポンス、フォルトおよびコールバックが処理されます。

表24-7 リクエスト・レスポンス・フォルト・コールバックのメディエータへのレスポンス

ルーティング・ルール・ターゲットのWSDL

レスポンス

リクエスト

リクエスト・コールバック・サービスが含まれる順次ルーティング・ルールと、レスポンスを返す順次ルーティング・ルールが、それぞれ少なくとも1つずつ必要です。必要なルーティング・ルールが定義されていない場合、コールバックおよびレスポンスは送信されません。

リクエスト・レスポンス

リクエスト・コールバック・サービスが含まれる順次ルーティング・ルールと、レスポンスを返す順次ルーティング・ルールが、それぞれ少なくとも1つずつ必要です。必要なルーティング・ルールが定義されていない場合、コールバックおよびレスポンスは送信されません。

リクエスト・レスポンス・フォルト

リクエスト・コールバック・サービスが含まれる順次ルーティング・ルールと、レスポンスを返す順次ルーティング・ルールが、それぞれ少なくとも1つずつ必要です。必要なルーティング・ルールが定義されていない場合、コールバックおよびレスポンスは送信されません。

リクエスト・コールバック

レスポンスを返す順次ルーティング・ルールが少なくとも1つ必要です。送信するレスポンスがない場合、メディエータはnullを返します。

リクエスト・レスポンス・コールバック

レスポンスおよびコールバックがコール元に返信されます。メディエータによるメッセージ処理での例外によってフォルトが発生する場合があります。

リクエスト・レスポンス・フォルト・コールバック

レスポンス、フォルトおよびコールバックがコール元に返信されます。

図24-6は、リクエスト・リプライ・フォルト・コールバック・メッセージ交換パターンを示しています。

図24-6 リクエスト・リプライ・フォルト・コールバック・メッセージ交換パターン

「図24-6 リクエスト・リプライ・フォルト・コールバック・メッセージ交換パターン」の説明

第IV部

ビジネス・ルール・サービス・コンポーネントの使用

この部では、ビジネス・ルール・サービス・コンポーネントの使用方法について説明します。

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

- 第25章「Oracle Business Rulesの開始」

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

25 Oracle Business Rulesの開始

この章では、ビジネス・ルール・サービス・コンポーネントを使用して、SOAコンポジット・アプリケーションをOracle Business Rulesに統合する方法について説明します。ビジネス・ルール・サービス・コンポーネントはデシジョン・コンポーネントとも呼ばれます。ビジネス・ルールは、SOAコンポジット・アプリケーションの一部またはBPELプロセスの一部として追加できます。

この章には次の項が含まれます:

- 第25.1項「ビジネス・ルール・サービス・コンポーネントの概要」

- 第25.2項「ルール・デザイナ・エディタ環境の概要」

- 第25.3項「ビジネス・ルールの作成および編集の概要」

- 第25.4項「BPELプロセスへのビジネス・ルールの追加」

- 第25.5項「SOAコンポジット・アプリケーションへのビジネス・ルールの追加」

- 第25.6項「コンポジット・アプリケーションでのビジネス・ルールの実行」

- 第25.7項「ビジネス・ルールとOracle ADF Business Componentsファクト・タイプの使用」

Oracle Business Rulesの使用例は、『Oracle Fusion Middleware Oracle Business Rulesユーザーズ・ガイド』を参照してください。

25.1 ビジネス・ルール・サービス・コンポーネントの概要

デシジョン・コンポーネント(ビジネス・ルール・サービス・コンポーネントとも呼ばれます)は、SOAコンポジット・アプリケーションでのOracle Business Rulesの使用をサポートしています。デシジョン・コンポーネントは、次のようにSOAコンポジットで使用できます。

- デシジョン・コンポーネントは、SOAコンポジット内で使用してBPELコンポーネントに接続できます。

- デシジョン・コンポーネントは、SOAコンポジット内で使用してビジネス・ルールの実行に直接使用できます。

- デシジョン・コンポーネントは、メディエータの動的ルーティング機能とともに使用できます。
詳細は、第20章「Oracle Mediatorルーティング・ルールの作成」を参照してください。

- デシジョン・コンポーネントは、ヒューマン・ワークフローの拡張ルーティング・ルールとともに使用できます。
詳細は、第28.4項「ヒューマン・タスクとBPELプロセスの関連付け」を参照してください。

25.1.1 BPELプロセス、ビジネス・ルールおよびヒューマン・タスクの統合

BPELプロセス、ビジネス・ルールおよびヒューマン・タスク・コンポーネントを含むSOAコンポジット・アプリケーションを作成できます。これらのコンポーネントは補完的な技術です。BPELプロセスではシステム、サービスおよびユーザーのオーケストレーションにフォーカスが置かれます。ビジネス・ルールでは、意思決定とポリシーにフォーカスが置かれます。ヒューマン・タスクを使用すると、エンドツーエンド・プロセス・フローの一部として実行するタスクをユーザーまたはグループに対して説明するワークフローをモデリングできます。

ビジネス・ルールを使用できる状況の例を次に示します。

- 動的処理
ルールにより、サービス・レベル合意や他のガイドラインに基づいて、ビジネス・プロセス内でインテリジェント・ルーティングを実行できます。たとえば、顧客が1日以内のレスポンスを必要とする場合は、融資申請をQuickLoan融資エージェントにのみ送信します。顧客に1日以上の余裕がある場合は、申請を3つの異なる融資エージェントにルーティングします。

- プロセスのビジネス・ルールの外部化
通常ビジネス・プロセスの一部として評価する必要がある条件が多くあります。ただし、これらの条件のパラメータはプロセスに関係なく変更できます。たとえば、信用度が650以上の顧客にのみ融資を提供するとします。この値は、ビジネス・アナリストが設定した新規ガイドラインに基づいて動的に変更できます。

- データ検証および制約チェック
ルールは入力文書を検証したり、リクエストに応じて追加制約を適用できます。たとえば、新規顧客リクエストには、常に雇用確認書と銀行勘定詳細を添付する必要があります。

- ヒューマン・タスクのルーティング
ビジネス・プロセスでは、次のようにヒューマン・タスクでルールが頻繁に使用されます。

- ポリシー・ベースのタスク割当てでは、タスクが特定のロールやユーザーにディスパッチされます。たとえば、ポータルからの着信リクエストを処理するプロセスでは、融資申請と見積保険料を異なるロール・セットにルーティングできます。

- ユーザー間のタスクのロード・バランシング。タスクが一連のユーザーまたはロールに割り当てられると、そのロールの各ユーザーはタスク・セットを取得して、指定された時間内にタスクの処理を行います。新規タスクを受け取った場合は、ポリシーを適用してタスクに優先度が設定され、特定のユーザー・キューに入れられます。たとえば、特定の1人の融資エージェントに対して割り当てる融資を、常に最大で10件にするなどです。

ヒューマン・タスク・コンポーネントのヒューマン・タスク・エディタでのビジネス・ルール作成の詳細は、第29.5.2項「ビジネス・ルールを使用した詳細タスク・ルーティングの指定方法」を参照してください。

25.2 ルール・デザイナ・エディタ環境の概要

Oracle JDeveloperのSOAコンポジット・アプリケーションにビジネス・ルール・サービス・コンポーネントを作成した後は、そのサービス・コンポーネントをビジネス・ルール・デザイナを使用して設計できます。このデザイナは、SOAコンポジット・エディタでビジネス・ルールをダブルクリックすると表示されます。

ビジネス・ルール・デザイナは、図25-1に示す主要なセクションで構成されています。これらのセクションでは、Oracle JDeveloperのビジネス・ルールを使用できます。

図25-1 Oracle JDeveloperのルール・デザイナ

「図25-1 Oracle JDeveloperのルール・デザイナ」の説明

25.2.1 アプリケーション・ナビゲータ

「アプリケーション・ナビゲータ」には、プロジェクト内のファイルが表示されます。各プロジェクトに格納できるのは、1つのコンポジットのみです。ただし、各コンポジットには、同じタイプまたは異なるタイプ(ビジネス・ルール、BPELプロセス、Oracle Mediatorおよびヒューマン・ワークフロー)の複数のコンポーネントを指定できます。

ビジネス・ルールの設計時には、その他のファイル、フォルダおよび要素が「アプリケーション・ナビゲータ」に表示されることがあります。

25.2.2 ルール・デザイナ・ウィンドウ

ルール・デザイナ・ウィンドウには、選択したディクショナリ・コンポーネントのビジュアル・ビューが表示されます。ルール・デザイナのナビゲーション・タブを使用して、使用するディクショナリの様々な部分を選択します。ルール・デザイナ・ウィンドウは、次のいずれかの処理を実行すると表示されます。

- コンポジット内でビジネス・ルール・コンポーネントをダブルクリックした場合

- SOAコンポジット・エディタでビジネス・ルール・コンポーネントをダブルクリックした場合

- BPELプロセス内でビジネス・ルールをダブルクリックした場合

- 「アプリケーション・ナビゲータ」で、ビジネス・ルールのディクショナリ・ファイル(.rules拡張子付きのファイル)をダブルクリックした場合

- .rulesファイルが選択されている状態の「設計」タブをクリックした場合

表25-1では、ルール・デザイナでディクショナリを使用する際の情報を検索できるナビゲーション領域について説明します。

表25-1 ルール・デザイナのナビゲーション領域の説明

ルール・デザイナのナビゲーション・タブ

説明

ファクト

ファクトは、ルールによる推論対象のオブジェクトです。

関数

Oracle Business Rulesでは、関数は標準の算術関数を指します。

グローバル

Oracle Business Rulesでは、グローバルはJavaにおけるパブリックな静的変数に類似しています。

バケットセット

バケットセットは、ファクト・プロパティのデータ型を定義します。

リンク

リンクは、同じアプリケーションまたは別のアプリケーション内のディクショナリにリンクする際に使用します。

デシジョン関数

デシジョン関数は、RL言語プログラミングを使用せずに宣言的に構成された関数です。

変換

これは、ルールおよびそれらのアーティファクトのローカライズに役立ちます。

ルールおよびデシジョン表を含むルールセット

ルールセットは、ルールおよびデシジョン表の実行単位を提供します。デシジョン表は、データ処理タスクを記述するためのメカニズムを提供します。

ルール・デザイナのナビゲーション領域とその説明は、『Oracle Fusion Middleware Oracle Business Rulesユーザーズ・ガイド』を参照してください。

25.2.3 「構造」ウィンドウ

「構造」ウィンドウには、ルール・デザイナ・ウィンドウで現在選択しているビジネス・ルール・ディクショナリのデータが構造的に表示されます。このセクションで要素を選択または右クリックすると、次のような様々なタスクを実行できます。

- ファクト、関数、グローバル、バケットセット、ディクショナリ・リンク、デシジョン関数などの要素の管理(作成、編集、リフレッシュおよび削除)

- ルールセット、ルールおよびデシジョン表へのアクセス

図25-2に、「構造」ウィンドウを示します。

図25-2 ルール・デザイナ・ディクショナリが表示された「構造」ウィンドウ

「図25-2 ルール・デザイナ・ディクショナリが表示された「構造」ウィンドウ」の説明

25.2.4 「ビジネス・ルール検証 - ログ」ウィンドウ

ルール・デザイナでは、図25-3に示すように、ビジネス・ルール検証ログにディクショナリ検証のステータスが表示されます。

ディクショナリが無効な場合、ルール・デザイナでは警告メッセージのリストが生成されて関連ディクショナリ・オブジェクトがリスト表示されるため、ディクショナリ・オブジェクトの検索と問題の解決に使用できます。ルール・デザイナを使用したルールの作成時に表示される検証警告は、無視しても問題ありません。検証警告はルールを作成すると削除されますが、ルール作成時の中間ステップ中は表示されます。ルールをテストまたはデプロイする際は、関連ディクショナリに警告が表示されていない必要があります。

ビジネス・ルール検証の詳細は、『Oracle Fusion Middleware Oracle Business Rulesユーザーズ・ガイド』を参照してください。

図25-3 ルール・デザイナの「ビジネス・ルール検証 - ログ」

「図25-3 ルール・デザイナの「ビジネス・ルール検証 - ログ」」の説明

25.3 ビジネス・ルールの作成および編集の概要

この項では、ビジネス・ルールを開始する方法について説明し、ビジネス・ルールの設計に使用するOracle JDeveloperの主要なセクションについて簡単に紹介します。

25.3.1 ビジネス・ルール・コンポーネントの作成方法

ビジネス・ルール・コンポーネントは、SOAコンポジット・エディタを使用して追加できます。

ビジネス・ルール・コンポーネントを作成する手順は、次のとおりです。

1. 表25-2の説明に従って、Oracle JDeveloperを起動します。

表25-2 Oracle JDeveloperの起動

起動対象

Windowsでの手順

UNIXでの手順

Oracle JDeveloper

JDev_Oracle_Home\JDev\bin\jdev.exeをクリックするか、ショートカットを作成します。

$ORACLE_HOME/jdev/bin/jdev

2. 次のいずれかの方法を使用して、ビジネス・ルール・サービス・コンポーネントを作成します。
既存のSOAコンポジット・アプリケーションのサービス・コンポーネントとして追加する方法:

1. 「コンポーネント・パレット」からSOAコンポジット・エディタに「Business Rule」サービス・コンポーネントをドラッグします。

新規アプリケーションに追加する方法:

1. 「アプリケーション・ナビゲータ」で、「ファイル」→「新規」→「アプリケーション」→「SOAアプリケーション」の順に選択します。
これにより、SOAアプリケーションの作成ウィザードが起動します。

2. 「アプリケーションの名前付け」ページで、「名前」フィールドにアプリケーション名を入力します。

3. 「ディレクトリ」フィールドに、SOAコンポジット・アプリケーションおよびプロジェクトを作成するディレクトリ・パスを入力します。

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

5. 「プロジェクトの名前付け」ページで、「プロジェクト名」フィールドに一意のプロジェクト名を入力します。プロジェクト名は、SOAコンポジット・アプリケーション間で一意である必要があります。これは、コンポジットの一意性は、そのコンポジットのプロジェクト名によって確定されるためです。たとえば、表25-3に説明するような操作は実行しないでください。

表25-3 SOAプロジェクトの名前付けに関する制限

作成するアプリケーション名

SOAプロジェクト名

Application1

Project1

Application2

Project1

デプロイメント時に、2番目にデプロイされたプロジェクト(コンポジット)が最初にデプロイされたプロジェクト(コンポジット)を上書きします。

6. 「次へ」をクリックします。

7. 「SOA設定の構成」ページで、「ビジネス・ルールを使用するコンポジット」を選択します。

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

どちらの方法でも、図25-4に示す「ビジネス・ルールの作成」ダイアログが表示されます。

図25-4 「ビジネス・ルールの作成」ダイアログ

「図25-4 「ビジネス・ルールの作成」ダイアログ」の説明

3. 必要な詳細を指定します。このダイアログでの入力や出力の指定および「ディクショナリのインポート」オプションの使用方法の詳細は、『Oracle Fusion Middleware Oracle Business Rulesユーザーズ・ガイド』を参照してください。

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

25.3.2 ルール・デザイナでのビジネス・ルールの使用に関する概要

ビジネス・ルールを使用している場合は、Oracle JDeveloperにルール・デザイナが表示されます。

25.4 BPELプロセスへのビジネス・ルールの追加

デシジョン・コンポーネント(ビジネス・ルール・サービス・コンポーネントとも呼ばれます)を使用すると、BPELプロセスでビジネス・ルールを実行できます。

25.4.1 BPELプロセスへのビジネス・ルールの追加方法

ビジネス・ルールは、「Business Rule」コンポーネントを使用してBPELプロセスに追加します。ビジネス・ルール・コンポーネントをBPELプロセスに追加する場合は、ルールに対して入力を提供し、ビジネス・ルールから結果を取得するために、入力変数と出力変数を指定する必要があります。

ビジネス・ルール・コンポーネントを使用して、ビジネス・ルールを実行し、ルールに基づいてビジネス上の意思決定を作成できます。ビジネス・ルール・コンポーネント(デシジョン・コンポーネントとも呼ばれます)を作成するには、「コンポーネント・パレット」から「Business Rule」をBPELプロセスにドラッグ・アンド・ドロップします。

ビジネス・ルールをBPELプロセスに追加する手順は、次のとおりです。

1. BPELプロセス・サービス・コンポーネントを作成します。詳細は、第4.1項「BPELプロセス・サービス・コンポーネントの概要」を参照してください。

2. プロセス項目をダブルクリックして、BPELプロセスを開きます。たとえば、図25-5に示すように、BPELプロセスを開いてreceiveInputおよびcallbackClientを表示します。

図25-5 BPELプロセスへのビジネス・ルールの追加

「図25-5 BPELプロセスへのビジネス・ルールの追加」の説明

3. 「コンポーネント・パレット」にある「SOAコンポーネント」セクションで「Business Rule」を選択し、ビジネス・ルールを必要としている場所まで「Business Rule」をドラッグ・アンド・ドロップします。たとえば、図25-6に示すようにreceiveInputとcallbackClientの間に「Business Rule」をドラッグ・アンド・ドロップします。

図25-6 BPELプロセスへの「Business Rule」のドラッグ・アンド・ドロップ

「図25-6 BPELプロセスへの「Business Rule」のドラッグ・アンド・ドロップ」の説明

4. ビジネス・ルールがOracle JDeveloperのダイアグラムに表示されます。ビジネス・ルール・コンポーネントをダブルクリックすると、「ルール」ダイアログ・ボックスが表示されます。「ルール」ダイアログ・ボックスには、「一般」、「ディクショナリ」、「相関セット」などのタブがあり、既存のOracle Business Rulesディクショナリを選択するか、新たに作成するディクショナリの名前を入力できます。「一般」タブの「名前」フィールドに、ビジネス・ルールの名前を入力します。たとえば、図25-7に示すように、GetCreditRatingと入力します。事前にディクショナリを作成した場合は、「ディクショナリ」タブの「ディクショナリ」フィールドで、既存のディクショナリを選択します。

図25-7 自動融資BPELプロセスに追加されたビジネス・ルール

「図25-7 自動融資BPELプロセスに追加されたビジネス・ルール」の説明

5. ビジネス・ルール領域の「ビジネス・ルール ディクショナリ」で、「ディクショナリの作成」アイコンをクリックし、「ビジネス・ルールの作成」ダイアログを表示します。

6. 「ビジネス・ルールの作成」ダイアログで、次の操作を実行します。

- Oracle Business Rulesディクショナリの名前とパッケージ名を指定します。

- ビジネス・ルールの入力および出力データ要素を指定します。たとえば、GetCreditRatingというサンプル・デシジョン・コンポーネントでは、入力は信用格付け申込書です。出力はビジネス・ルールの実行時に生成されます。この例では信用格付け文書です。たとえば、GetCreditRatingルールの入力および出力データを受け渡すRatingRequestとRatingという新しい2つの変数をBPELで作成できます。

Oracle Business Rulesディクショナリの名前を入力します。たとえば、図25-8に示すように、GetCreditRatingと入力します。

図25-8 GetCreditRatingビジネス・ルール・ディクショナリの追加

「図25-8 GetCreditRatingビジネス・ルール・ディクショナリの追加」の説明

ビジネス・ルールの入力を追加する手順は、次のとおりです。

1. 「ビジネス・ルールの作成」ダイアログで、「追加」アイコンの横にあるメニューから「入力変数の追加...」を選択し、入力変数を作成します。
「入力変数の追加」ダイアログ・ボックスが表示されます。

2. 「入力変数の追加」ダイアログ・ボックスで、「プロセス」フォルダを開き、「プロセス」のすぐ下の「変数」フォルダを選択します。

3. 図25-9に示すように、「変数」フォルダを右クリックし、リストから「変数の作成...」を選択します。

図25-9 入力変数の追加

「図25-9 入力変数の追加」の説明

「変数の作成」ダイアログ・ボックスが表示されます。

4. 「変数の作成」ダイアログ・ボックスで、「名前」フィールドに値を入力します。たとえば、図25-10に示すように、RatingRequestと入力します。

図25-10 「変数の作成」ダイアログ

「図25-10 「変数の作成」ダイアログ」の説明

5. 「変数の作成」の「タイプ」領域で、「要素の参照」アイコンをクリックします。ナビゲータを使用して、入力変数のスキーマ要素タイプを検索します。たとえば、ratingrequestタイプを選択します。タイプ・チューザを使用して必要なタイプを追加します。

6. 「スキーマ・ファイルのインポート」アイコンをクリックし、スキーマをインポートします。たとえば、CreditRatingTypes.xsdをインポートします。アプリケーションに必要なその他のスキーマもインポートします。

7. 「タイプ・チューザ」ダイアログで「ratingrequest」を選択し、「OK」をクリックします。

8. 「変数の作成」ダイアログで「OK」をクリックします。

9. 「入力変数の追加」ダイアログで「OK」をクリックします。

ビジネス・ルールの出力を追加する手順は、次のとおりです。

1. 「ビジネス・ルールの作成」ダイアログで、「追加」アイコンの横にあるドロップダウン・メニューから「出力変数の追加...」を選択します。「出力変数の追加」ダイアログが表示されます。このダイアログを使用して出力変数を作成します。たとえば、入力変数の作成と同様の方法でGetCreditRatingの出力変数を作成します。

2. 「出力変数の追加」ダイアログで、「プロセス」の下の「変数」フォルダを選択することで、スコープを選択します。

3. 右クリックして、ドロップダウン・リストから「変数の作成...」を選択します。「変数の作成」ダイアログが表示されます。

4. 「変数の作成」ダイアログで、「名前」フィールドに出力変数名を入力します。たとえば、Ratingと入力します。

5. 「変数の作成」ダイアログの「タイプ」領域で、「要素の参照」アイコンを選択し、「タイプ・チューザ」ダイアログを使用して出力変数のタイプを入力します。たとえば、CreditRatingTypes.xsdを開き、ratingという要素タイプを選択します。

6. 「タイプ・チューザ」ダイアログで「OK」をクリックします。

7. 「変数の作成」ダイアログで「OK」をクリックします。

8. 「出力変数の追加」ダイアログで「OK」をクリックします。
図25-11に示すように、「ビジネス・ルールの作成」ダイアログが表示されます。

図25-11 入力変数と出力変数が指定された「ビジネス・ルールの作成」ダイアログ

「図25-11 入力変数と出力変数が指定された「ビジネス・ルールの作成」ダイアログ」の説明

オプションを設定して、デシジョン・サービスとビジネス・ルール・ディクショナリを作成する手順は、次のとおりです。

1. デフォルトのサービス名を使用しない場合は、「詳細」タブを選択し、「サービス名」フィールドにサービス名を入力します。たとえば、CreditRatingServiceというサービス名を入力します。

2. デシジョン・コンポーネントがステートフルかステートレスかの判断は、「セッションのリセット」を使用して行います。詳細は、第25.4.5項「デシジョン・コンポーネントのステートフル操作に関する注意事項」を参照してください。

3. 「ビジネス・ルールの作成」ダイアログで「OK」をクリックします。図25-12に示すように、Oracle JDeveloperでデシジョン・コンポーネントとディクショナリが作成され、ルール・デザイナが表示されます。

図25-12 ビジネス・ルールを使用するルール・デザイナのキャンバス

「図25-12 ビジネス・ルールを使用するルール・デザイナのキャンバス」の説明

ルール・デザイナの詳細は、『Oracle Fusion Middleware Oracle Business Rulesユーザーズ・ガイド』を参照してください。

25.4.2 BPELプロセスへのビジネス・ルール追加時の処理内容

ビジネス・ルールをBPELプロセスに追加すると、Oracle JDeveloperによってデシジョン・コンポーネントが作成され、ビジネス・ルール・サービス・エンジンを使用してビジネス・ルールが制御および実行されます。

デシジョン・コンポーネントの構成内容は次のとおりです。

- ルール・エンジンを使用して評価されるルールまたはデシジョン表。これらはルール・デザイナを使用して定義され、ビジネス・ルール・ディクショナリに格納されます。

- 特定のルールを評価する際に必要なファクト、およびコールするデシジョン関数の説明。ルールまたはデシジョン表が格納される各ルールセットは、入力および出力されるファクトとOracle Business Rulesデシジョン関数の名前が指定されているサービスとして公開されます。ファクトは、ビジネス・ルールの入力および出力を定義する際に、XSD定義を介して公開されます。デシジョン関数は、Oracle Business Rulesディクショナリに格納されます。詳細は、『Oracle Fusion Middleware Oracle Business Rulesユーザーズ・ガイド』を参照してください。

- 入力、出力および基礎となるビジネス・ルール・サービス・エンジンのコールがラップされているWebサービス。
ビジネス・プロセスでは、このWebサービスを使用して、プロセスの一環としてファクトをアサートしたり取り消すことができます。ビジネス・プロセスからすべてのファクトを1単位としてアサートできる場合があります。それ以外の場合、ビジネス・プロセスはファクトを段階的にアサートし、最終的にルール・エンジンに推論を求めます。したがって、サービスはステートレスとステートフルの両方の相互作用をサポートしています。

このような様々なデシジョン・コンポーネントを作成できます。

詳細は、『Oracle Fusion Middleware Oracle Business Rulesユーザーズ・ガイド』を参照してください。

25.4.3 ビジネス・ルール・ディクショナリ作成時の処理内容

アプリケーション、プロジェクトおよびルール・ディクショナリを作成すると、Oracle JDeveloperの構造ペインにルール・ディクショナリが表示され、メイン・キャンバスにルール・デザイナが開きます。

「ビジネス・ルールの作成」ダイアログの一環として選択した既存のディクショナリまたは新規ルール・ディクショナリは、事前にロードされている次のデータを使用して作成されます。

- ビジネス・ルールの入力および出力情報に基づいたXMLファクト・タイプ・モデル。

- ルールまたはデシジョン表を追加して完成させる必要があるルールセット。既存のディクショナリでは、インポート・オプションを使用して、ルールまたはデシジョン表がすでに組み込まれているディクショナリを指定します。

- デシジョン・コンポーネントの入力および出力が規定されているサービス・コンポーネント。

- ルール・ディクショナリのデシジョン・コンポーネント、およびBPELプロセスへのワイヤ。

注意:

ビジネス・ルールの入出力を作成すると、関連ディクショナリに作成されるXMLファクト・タイプには、「ビジネス・ルールの作成」ダイアログで指定した入出力のスキーマ・タイプに基づいて名前が指定されます。入力と出力のスキーマ・タイプを指定すると、ルール・デザイナでは、入力と出力のタイプ選択に関連するファクト・タイプと別名が定義されます。入力と出力の両方に単一のタイプを使用した場合にのみ、デシジョン・コンポーネントで単一のファクトが作成され、ルール・デザイナの「ファクト」タブに表示されます。このファクトには、指定したファクト・タイプが示され、入力変数名と出力変数名を連結した別名が使用されます。ファクト・タイプのデフォルトの命名方式を使用しない場合は、この別名をルール・デザイナで変更できます。

25.4.4 BPELプロセスでのビジネス・ルールの起動に関する注意事項

ビジネス・ルールをBPELプロセスに追加すると、Oracle JDeveloperによって、指定の入力情報を使用したOracle Business Rulesのコールと、結果が格納された出力の取得をサポートするデシジョン・サービスが作成されます。デシジョン・サービスは、実行時にWebサービスとしてOracle Business Rulesエンジンへのアクセスを提供します。詳細は、『Oracle Fusion Middleware Oracle Business Rulesユーザーズ・ガイド』を参照してください。

25.4.5 デシジョン・コンポーネントのステートフル操作に関する注意事項

ビジネス・ルール・サービス・エンジンで実行されるデシジョン・コンポーネントは、ステートフルまたはステートレス操作をサポートしています。これら2つの操作モードのサポートは、「ビジネス・ルールの作成」ダイアログの「セッションのリセット」チェック・ボックスによって提供されます。

デフォルトでは、「セッションのリセット」チェック・ボックスが選択されています。これはステートレス操作を示します。ステートレス操作とは、実行時にデシジョン・コンポーネントが起動した後、ルール・セッションがリリースされることを意味します。

「セッションのリセット」チェック・ボックスの選択が解除されている場合は、基礎となるOracle Business Rulesオブジェクトが独立した場所にあるビジネス・ルール・サービス・エンジンのメモリーに保持されます(したがって、オブジェクトは操作終了時にルール・セッション・プールに返されません)。その後のデシジョン・コンポーネントの使用では、callFunctionStatefulの起動以降にキャッシュされたすべてのRuleSessionオブジェクトとその状態の情報が再利用され、callFunctionStateless操作の終了後にルール・セッション・プールにリリースされて戻されます。したがって、「セッションのリセット」の選択が解除されている場合は、後続リクエストのためにルール・セッションが保存され、同じBPELプロセスからの一連のデシジョン・サービスの起動が常にステートレス起動で終了する必要があります。

25.5 SOAコンポジット・アプリケーションへのビジネス・ルールの追加

Oracle Business RulesをSOAコンポジット・アプリケーションで使用するには、アプリケーションを作成してビジネス・ルールを追加します。

ビジネス・ルール・サービス・コンポーネントを使用して、SOAコンポジット・アプリケーションとビジネス・ルールを統合できます。これによってビジネス・ルール・ディクショナリが作成され、ビジネス・ルールの実行と、ルールに基づくビジネス上の意思決定の作成が可能になります。

Oracle JDeveloperでプロジェクトを作成した後は、そのプロジェクト内にビジネス・ルール・サービス・コンポーネントを作成する必要があります。ビジネス・ルールを追加する場合は、サービス・コンポーネントに入力を提供したり、サービス・コンポーネントから結果を取得するための入力変数と出力変数を作成できます。

Oracle JDeveloperでビジネス・ルールを使用するには、次の準備が必要です。

- ビジネス・ルール・サービス・コンポーネントの追加

- サービス・コンポーネントに対する入力変数および出力変数の作成

- Oracle Business Rulesディクショナリの作成

25.5.1 SOAコンポジット・アプリケーションへのビジネス・ルールの追加方法

SOAコンポジット・アプリケーションでOracle Business Rulesを使用するには、Oracle JDeveloperを使用してアプリケーションとプロジェクトを作成し、ビジネス・ルール・コンポーネントを追加します。

ビジネス・ルールを使用するSOAアプリケーションを作成する手順は、次のとおりです。

1. SOAアプリケーションおよびプロジェクトを作成します。詳細は、第2.1.1項「SOAアプリケーションおよびプロジェクトの作成方法」を参照してください。ビジネス・ルールを使用するSOAコンポジットでは、アプリケーションに必要なテクノロジを選択します。たとえば、ビジネス・ルールを使用するSOAアプリケーションには、ADF Business Components、Java、XMLなどが必要な場合があります。「プロジェクト・テクノロジ」タブで、これらの項目を「選択済」領域に移動します。

2. 「アプリケーション・ナビゲータ」にSOAコンポジット・エディタが表示されていない場合は、プロジェクトの「SOAコンテンツ」フォルダを開き、composite.xmlをダブルクリックしてSOAコンポジット・エディタを起動します。

3. 図25-13に示すように、「コンポーネント・パレット」で、「SOA」メニューの「サービス・コンポーネント」領域からSOAコンポジット・エディタの「コンポーネント」スイムレーンに、「Business Rule」をドラッグ・アンド・ドロップします。

図25-13 SOAコンポジット・アプリケーションへのビジネス・ルールの追加

「図25-13 SOAコンポジット・アプリケーションへのビジネス・ルールの追加」の説明

4. 「Business Rule」をドラッグ・アンド・ドロップすると、図25-14に示すように、Oracle JDeveloperの「ビジネス・ルールの作成」ダイアログが表示されます。

図25-14 SOAコンポジットへのビジネス・ルールの追加およびディクショナリの作成

「図25-14 SOAコンポジットへのビジネス・ルールの追加およびディクショナリの作成」の説明

ビジネス・ルールの入力を追加する手順は、次のとおりです。

1. 「ビジネス・ルールの作成」ダイアログ・ボックスで、「追加」アイコンの横にあるメニューから「入力...」を選択し、ビジネス・ルールの入力を追加します。「タイプ・チューザ」ダイアログが表示されます。

2. 「タイプ・チューザ」ダイアログで入力を追加します。「プロジェクトのスキーマ・ファイル」でスキーマが使用可能になっている場合は、ステップ9に移動して適切なスキーマを選択します。

3. 「スキーマ・ファイルのインポート...」アイコンをクリックします。「スキーマ・ファイルのインポート」ダイアログが表示されます。

4. 「スキーマ・ファイルのインポート」ダイアログで、「リソースの参照」をクリックし、入力するXMLスキーマ要素を選択します。「SOAリソース・ブラウザ」ダイアログが表示されます。

5. 「SOAリソース・ブラウザ」ダイアログで、ナビゲートしてビジネス・ルールを入力するスキーマを検索します。たとえば、order.xsdスキーマ・ファイルを選択して、「OK」をクリックします。

6. 図25-15に示すように、「スキーマ・ファイルのインポート」ダイアログで、「プロジェクトにコピー」を選択します。

図25-15 ビジネス・ルールを入力するスキーマのインポート

「図25-15 ビジネス・ルールを入力するスキーマのインポート」の説明

7. 「スキーマ・ファイルのインポート」ダイアログで「OK」をクリックします。

8. 「ファイルのローカライズ」ダイアログで「OK」をクリックします。

9. 「タイプ・チューザ」ダイアログのナビゲータを使用して、スキーマから入力を検索して選択し、「OK」をクリックします。たとえば、入力としてCustomerOrder要素を選択します。

ビジネス・ルールの出力を追加する手順は、次のとおりです。

1. 「ビジネス・ルールの作成」ダイアログで、「追加」アイコンの横にあるドロップダウン・メニューから「出力...」を選択します。

2. 「タイプ・チューザ」ダイアログで、入力の追加と同様の方法で出力を追加します。たとえば、order.xsdからOrderApprovalを選択し、「OK」をクリックします。

3. 図25-16に示すように、「ビジネス・ルールの作成」ダイアログが表示されます。

図25-16 入力と出力が指定された「ビジネス・ルールの作成」ダイアログ

「図25-16 入力と出力が指定された「ビジネス・ルールの作成」ダイアログ」の説明

オプションを設定して、デシジョン・サービスとビジネス・ルール・ディクショナリを作成する手順は、次のとおりです。

1. 「ビジネス・ルールの作成」ダイアログで、「コンポジット・サービスとして公開」を選択します。

2. デフォルトのサービス名を使用しない場合は、「詳細」タブを選択し、「サービス名」フィールドにサービス名を入力します。

3. 「ビジネス・ルールの作成」ダイアログで「OK」をクリックします。これにより、ビジネス・ルール・コンポーネント(デシジョン・コンポーネントとも呼ばれます)が作成され、図25-17に示すように、Oracle JDeveloperのキャンバス・ワークスペースにビジネス・ルール・コンポーネントが表示されます。

図25-17 SOAコンポジットのビジネス・ルール・コンポーネント

「図25-17 SOAコンポジットのビジネス・ルール・コンポーネント」の説明

4. デシジョン・コンポーネント(たとえば、「OracleRules1」ビジネス・ルール)をダブルクリックします。図25-18に示すように、ルール・デザイナが開きます。検証ログには、入力および出力ファクトに関する検証警告が表示されます。ルール・デザイナを使用してルールまたはデシジョン表を定義することで、これらの警告メッセージを取り除きます。

図25-18 SOAコンポジット・アプリケーションの新規ディクショナリが表示されているルール・デザイナ

「図25-18 SOAコンポジット・アプリケーションの新規ディクショナリが表示されているルール・デザイナ」の説明

ルール・デザイナの詳細は、『Oracle Fusion Middleware Oracle Business Rulesユーザーズ・ガイド』を参照してください。

25.5.2 ビジネス・ルール・コンポーネントでのデシジョン関数の選択および変更方法

Oracle Business Rulesをコンポジット・アプリケーションのコンポーネントとしてコールするために、1つ以上のデシジョン関数を入力として指定できます。たとえば、Oracle Business Rulesディクショナリで複数のデシジョン関数が使用可能な場合は、特定のデシジョン関数を入力として指定できます。

コンポジット・アプリケーションでデシジョン関数を指定する手順は、次のとおりです。

1. デシジョン関数をOracle Business Rulesディクショナリに追加します。詳細は、『Oracle Fusion Middleware Oracle Business Rulesユーザーズ・ガイド』を参照してください。

2. ビジネス・ルール・コンポーネントをコンポジット・アプリケーションに追加します。詳細は、第25.5.1項「SOAコンポジット・アプリケーションへのビジネス・ルールの追加方法」を参照してください。

3. 図25-19に示すように、ビジネス・ルール・コンポーネントを選択します。

図25-19 コンポジット・アプリケーションでのビジネス・ルール・コンポーネントの選択

「図25-19 コンポジット・アプリケーションでのビジネス・ルール・コンポーネントの選択」の説明

4. 目的のデシジョン関数ポートを選択します。たとえば、図25-20に示すように、DF_2のポートを選択します。

図25-20 ビジネス・ルール・コンポーネントでのデシジョン関数ポートの選択

「図25-20 ビジネス・ルール・コンポーネントでのデシジョン関数ポートの選択」の説明

5. ポートを選択すると、Oracle JDeveloperの「プロパティ・インスペクタ」にポート情報が表示されます。

6. ポートをダブルクリックすると、図25-21に示すように、そのポートの「インタフェースの更新」ダイアログが表示されます。

図25-21 ビジネス・ルール・デシジョン・ポートのデシジョン関数に対する「インタフェースの更新」ダイアログ

「図25-21 ビジネス・ルール・デシジョン・ポートのデシジョン関数に対する「インタフェースの更新」ダイアログ」の説明

25.6 コンポジット・アプリケーションでのビジネス・ルールの実行

ビジネス・ルールは、SOAコンポジット・アプリケーションのデシジョン・コンポーネントの一部として実行します。ビジネス・ルールは、ビジネス・ルール・サービス・エンジンによって実行されます。Oracle Enterprise Manager Fusion Middleware Controlを使用して、ビジネス・ルール・サービス・エンジンを監視したり、デシジョン・コンポーネントが含まれているSOAコンポジット・アプリケーションをテストできます。詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。

25.6.1 スタンドアロン・デシジョン・サービス・コンポーネントのテストに関する注意事項

Oracle Enterprise Manager Fusion Middleware Controlを使用してスタンドアロン・デシジョン・サービス・コンポーネントをテストするには、図25-22に示すように、「Webサービスのテスト」ページのペイロード名フィールドの値としてデシジョン・サービスの名前を指定する必要があります。

図25-22 スタンドアロン・デシジョン・サービスのテストの起動

「図25-22 スタンドアロン・デシジョン・サービスのテストの起動」の説明

ペイロードのnameは、図25-23のサンプル.decsファイルに示すように、デシジョン・サービス名にする必要があります。

図25-23 サンプル.decsファイル

「図25-23 サンプル.decsファイル」の説明

デシジョン・サービス名がない場合、ペイロードおよびエンドポイントの詳細のみではスタンドアロン・デシジョン・サービスを起動できません。

25.7 ビジネス・ルールとOracle ADF Business Componentsファクト・タイプの使用

Oracle ADF Business Componentsファクト・タイプおよびActionTypesは、ビジネス・ルール・サービス・エンジンから使用できます。通常、デシジョン・コンポーネントはSOAコンポジット内で使用され、BPELコンポーネントおよびXMLタイプに関するOracle Business Rulesのルールに接続できます。ビジネス・ルール・サービス・エンジンは、XMLスキーマ・タイプのインスタンスを含むペイロードが指定されたWebサービスとしてコールされ、同様の方法でレスポンスを返します。

Oracle ADF Business Componentsファクト・タイプはデシジョン・コンポーネントから使用することもできます。Oracle ADF Business Componentsファクト・タイプ・インスタンスをロードしてビジネス・ルール・サービス・エンジンに渡すかわりに、Oracle ADF Business Componentsビュー・オブジェクト行のロード方法を記述した構成情報を指定してビジネス・ルール・サービス・エンジンをコールします。その結果、DecisionPointDictionaryの特別なOracle Business Rulesデシジョン関数およびOracle Business Rules SDKデシジョン・ポイントAPIのクラスによって行がロードされ、Oracle ADF Business Componentsファクト・タイプ・インスタンスがアサートされます。Oracle ADF Business Componentsファクト・タイプを使用する場合は、基礎となるデータベース行を更新するようなOracle ADF Business Componentsファクト・タイプ・インスタンスの変更など、操作に影響を与えるActionTypeから継承するユーザー定義Javaクラスを使用するルールを記述します。

デシジョン・コンポーネントには、入力としてXML文書が必要です。Oracle Business Rulesデシジョン・ポイント・ディクショナリには、この入力として機能するSimpleDecisionPointInputというXMLファクト・タイプが用意されています。ビジネス・ルール・サービス・コンポーネントには、Oracle ADF Business Componentsの主キーが渡されます。ビジネス・ルール・サービス・コンポーネントはユーザー定義のデシジョン関数を起動します。このデシジョン関数は、Oracle ADF Business Componentsビュー・オブジェクト・インスタンスをロードし、ルール・エンジンでアサートし、結果を次の順にマーシャリングします。

1. DecisionPointDictionary.DecisionPoint_Preprocessing_Webserviceルールセット: 事前処理ルールセットがデータベースからビジネス・コンポーネントを読み取り、ファクトとしてアサートします。

2. ユーザー定義ルールセット: ユーザー・ルールセットがこれらのファクトを照合し、ビジネス・コンポーネントを更新するためにActionTypeを拡張するファクトをアサートします。

3. DecisionPointDictionary.DecisionPoint_Postprocessing_Webserviceルールセット: 実際の更新は、事後処理ルールセットによって実行されます。ActionTypesの使用はオプションです。

ビジネス・ルール・サービス・エンジンからOracle ADF Business Componentsファクト・タイプおよびActionTypesを使用する方法の詳細は、Oracle SOA Suiteサンプルに使用可能なOracle Business Rules固有のサンプルのソース・コードを参照してください。

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

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

この章には次の項が含まれます:

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

- 第26.2項「Oracle Business Rulesエディタの宣言コンポーネントの使用」

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

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

- 第26.5項「ADFベースWebアプリケーションのローカライズ」

- 第26.6項「翻訳の使用」

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

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

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

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

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

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

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

注意:

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

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

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

- 次の要素を作成、更新および削除します。

- ルールセット内のルール(図26-1を参照)

図26-1 ルールセット内のルール

「図26-1 ルールセット内のルール」の説明

- ルール内の簡単なテストまたは条件(図26-2を参照)

図26-2 ルール内の簡単なテストまたは条件

「図26-2 ルール内の簡単なテストまたは条件」の説明

- ルール内のアクション(図26-3を参照)

図26-3 ルール内のアクション

「図26-3 ルール内のアクション」の説明

- デシジョン表(図26-4を参照)

図26-4 デシジョン表

「図26-4 デシジョン表」の説明

- ルールセットおよびルールの有効日と優先度を設定します。

- ユーザー定義演算子のサポートを提供します。

- 「左の値」または「右の値」オプションを表示する「条件ブラウザ」ポップアップを提供します(図26-5を参照)。

図26-5 条件ブラウザ

「図26-5 条件ブラウザ」の説明

- 日付タイプを選択するための「日付」ブラウザを提供します(図26-6を参照)。

図26-6 「日付」ブラウザ

「図26-6 「日付」ブラウザ」の説明

- 右側の複数の式を処理する「右のオペランド」ブラウザを提供します(図26-7を参照)。

図26-7 「右のオペランド」ブラウザ

「図26-7 「右のオペランド」ブラウザ」の説明

- ネストされたルールのサポートを提供します(図26-8を参照)。

図26-8 ネストされたルールのサポート

「図26-8 ネストされたルールのサポート」の説明

- ルール・アクションのプロパティを編集するための「プロパティ」ブラウザを提供します(図26-9を参照)。

図26-9 「プロパティ」ブラウザ

「図26-9 「プロパティ」ブラウザ」の説明

- カスタム式を作成する「式ビルダー」ウィンドウを提供します(図26-10を参照)。

図26-10 「式ビルダー」ウィンドウ

「図26-10 「式ビルダー」ウィンドウ」の説明

- パターンおよび拡張アクションを使用するための拡張モード機能を提供します(図26-11を参照)。

図26-11 拡張モード機能

「図26-11 拡張モード機能」の説明

- エラー・メッセージを管理する検証パネルを提供します(図26-12を参照)。

図26-12 エラー・メッセージを管理する検証パネル

「図26-12 エラー・メッセージを管理する検証パネル」の説明

注意:

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

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

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

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

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

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

次の手順に従います。

1. Oracle JDeveloperを開きます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

次の手順に従います。

1. Oracle JDeveloperを開きます。

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

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

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

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

図26-18 Javaクラスの作成

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

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

package userulesdc;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;

import java.io.Writer;

import java.util.ArrayList;
import java.util.List;

import oracle.bpel.rulesdc.model.impl.RuleSetModel;
import oracle.rules.sdk2.dictionary.RuleDictionary;
import oracle.rules.sdk2.exception.SDKException;
import oracle.rules.sdk2.exception.SDKWarning;
import oracle.rules.sdk2.ruleset.RuleSet;
import oracle.rules.sdk2.ruleset.RuleSetTable;

public class SomeBean {
private static final String RULES_FILE = "<your rules file here>";
private RuleSetModel ruleSetModel = null;

public RuleSetModel getRuleSetModel() {
if (ruleSetModel != null)
return ruleSetModel;
//cache ruleSetModel instead of re-creating it each time

Reader reader = null;
try {
reader =
new FileReader(new File(RULES_FILE));
} catch (FileNotFoundException e) {
//LOG.severe(e);
System.err.println(e);
}

RuleDictionary dict = null;

try {
dict = RuleDictionary.readDictionary(reader, null);
} catch (SDKException e) {
System.err.println(e);
} catch (FileNotFoundException e) {
System.err.println(e);
} catch (IOException e) {
System.err.println(e);
}
if (reader != null) {
try {
reader.close();
} catch (IOException ioe) {
}
}

//get the ruleSetTable from the RuleDictionary object
RuleSetTable ruleSetTable = dict.getRuleSetTable();

//get the first ruleSet from the ruleSetTable
RuleSet ruleSet = ruleSetTable.get(0);
//create a RuleSetModel object and pass this to the rulesDC

ruleSetModel = new RuleSetModel(ruleSet) ;
return ruleSetModel;
}

//refer to Rules SDK documentation for saving a dictionary also
//because this code does not take care of saving linked dictionaries
public static boolean saveDictionary(RuleDictionary dict,
String ruleFileName) {
Writer writer = null;
try {
writer = new FileWriter(new File(ruleFileName));
dict.writeDictionary(writer);

} catch (SDKException e) {
System.err.println(e);
return false;
} catch (FileNotFoundException e) {
System.err.println(e);
return false;
} catch (IOException e) {
System.err.println(e);
return false;
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException ioe) {
return false;
}
}
}
return true;
}

public static void updateDictionary(RuleDictionary dict) {
if (dict == null)
return;

List<SDKWarning> warnings = new ArrayList<SDKWarning>();
try {
dict.update(warnings);
if (!warnings.isEmpty()) {
for (int i = 0; i < warnings.size(); i++)
System.out.println("warnings: " +
warnings.get(i).getLocalizedMessage());
}
} catch (SDKException sdkEx) {
sdkEx.printStackTrace();
}
}

//You can call this method from your "Save" button
public void saveDictionary() {

RuleDictionary dict = this.getRuleSetModel().getRuleSet().getDictionary();
if (dict != null) {
//update the dictionary before saving it
updateDictionary(dict);
saveDictionary(dict, RULES_FILE);
}
}

//call the validation method on the ruleSetModel to update the Validation Panel

public void validate() {
if (this.ruleSetModel == null)
return;

this.ruleSetModel.validate();

7. faces-config.xmlファイルを概要モードで開き、「マネージドBean」の下の「+」ボタンをクリックして「マネージドBeanの作成」ダイアログ・ボックスを表示します。

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

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

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

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

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

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

次の手順に従います。

1. Oracle JDeveloperを開きます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

次の手順に従います。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

JDEV_INSTALL/jdeveloper/soa/modules/oracle.soa.rules_editor_dc.webapp_
11.1.1/oracle.soa.rules_editor_dc.webapp.war

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

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

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

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

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

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

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

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

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

2. 「実行」を選択します。
図26-27に示すように、Webブラウザでサンプル・アプリケーションが開始します。

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

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

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

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

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

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

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

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

JDEV_INSTALL/jdeveloper/soa/modules/oracle.soa.rules_editor_dc.webapp_
11.1.1/oracle.soa.rules_editor_dc.webapp.war

5. Oracle JDeveloperを開きます。

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

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

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

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

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

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

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

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

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

2. 次の行をプロジェクトWARファイルのweblogic.xmlに追加します。

<library-ref>
<library-name>oracle.soa.rules_editor_dc.webapp</library-name>
</library-ref>

3. EARファイルをOracle WebLogic Serverにデプロイします。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

名前

説明

コメント

patternDisplay

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

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

actionDisplay

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

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

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

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

名前

タイプ

必須

デフォルト値

ELのサポート

説明

dateStyle

java.lang. String

いいえ

ロケールから取得

はい

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

decimalSeparator

java.lang. Character

いいえ

ロケールに基づく

はい

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

disableRuleSetName

java.lang. Boolean

いいえ

false

はい

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

discloseRules

java.lang. Boolean

いいえ

false

はい

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

displayRuleSetEffDate

java.lang. Boolean

いいえ

true

はい

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

displayRuleSetName

java.lang. Boolean

いいえ

true

はい

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

dtAddActionMenuDDC

java.lang.String

いいえ

はい

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

dtActionNameCustomizer

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

いいえ

はい

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

dtActionParamCellDDC

java.lang.String

いいえ

はい

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

dtEditActionDDC

java.lang.String

いいえ

はい

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

dtColumnPageSize

java.lang. Integer

いいえ

5

はい

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

dtHeight

java.lang. Integer

いいえ

16

はい

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

dtPreferences

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

いいえ

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

はい

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

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

genericAction

java.lang. Boolean

いいえ

true

はい

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

genericDTAddActionMenu

java.lang.Boolean

いいえ

true

はい

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

genericDTActionParam

java.lang.Boolean

いいえ

true

はい

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

genericDTEditAction

java.lang.Boolean

いいえ

true

はい

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

genericPattern

java.lang. Boolean

いいえ

true

はい

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

groupingSeparator

java.lang. Character

いいえ

ロケールに基づく

はい

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

ifThenPreferences

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

いいえ

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

はい

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

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

locale

java.util. Locale

いいえ

Locale.getDefault()

はい

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

resourceManager

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

いいえ

はい

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

ruleModel

java.lang. String

いいえ

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

はい

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

rulesetModel

oracle.bpel.
rulesdc.model.
interfaces.
RuleSetInterface

はい

-

ELのみ

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

rulesPageSize

java.lang. Integer

いいえ

5

はい

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

showDTButtons

java.lang. Boolean

いいえ

true

はい

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

showValidationPanel

java.lang. Boolean

いいえ

true

はい

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

simpleTestModel

java.lang. String

いいえ

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

はい

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

timeStyle

java.lang. String

いいえ

ロケールから取得

はい

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

timezone

java.util. TimeZone

いいえ

TimeZone.
getDefault
()

はい

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

viewOnly

java.lang. Boolean

いいえ

true

はい

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

vldnPanelCollapsed

java.lang.Boolean

いいえ

false

はい

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

vldnTabTitle

java.lang.String

いいえ

はい

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

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

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

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

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

注意:

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

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

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

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

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

「図26-29 グローバル・エディタ」の説明

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

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

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

「図26-30 バケットセット・エディタ」の説明

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

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

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

「図26-31 ルールセットの編集」の説明

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

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

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

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

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

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

次の手順に従います。

1. Oracle JDeveloperを開きます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

「図26-35 Oracle RulesおよびOracle Rules Dictionary Componentの選択」の説明

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

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

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

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

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

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

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

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

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

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

次の手順に従います。

1. Oracle JDeveloperを開きます。

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

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

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

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

図26-37 Javaクラスの作成

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

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

package useruledictdc;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;

import java.io.Writer;

import java.util.ArrayList;
import java.util.List;

import oracle.bpel.ruledictionarydc.model.impl.RuleDictionaryModel;

import oracle.rules.sdk2.dictionary.DictionaryFinder;
import oracle.rules.sdk2.dictionary.RuleDictionary;
import oracle.rules.sdk2.exception.SDKException;
import oracle.rules.sdk2.exception.SDKWarning;

public class SomeBean {
private RuleDictionaryModel ruleDictModel;
private static final String RULES_FILE1 =
"C:\\scratch\\asuraj\\system\\rules\\OrderBookinRules.rules";

public SomeBean() {
super();
}

public RuleDictionaryModel getRuleDictModel() {
if (ruleDictModel != null)
return ruleDictModel;
//cache ruleDictModel instead of re-creating it each time

ruleDictModel = new RuleDictionaryModel(getRuleDictionary());
return ruleDictModel;
}

public RuleDictionary getRuleDictionary() {

Reader reader = null;
try {
reader = new FileReader(new File(RULES_FILE1));
} catch (FileNotFoundException e) {
//LOG.severe(e);
System.err.println(e);
}
RuleDictionary dict = openRulesDict(reader, null);
if (reader != null) {
try {
reader.close();
} catch (IOException ioe) {
}
}

return dict;
}

private static RuleDictionary openRulesDict(Reader reader,
DictionaryFinder finder) {
RuleDictionary dict = null;

try {
dict = RuleDictionary.readDictionary(reader, finder);
} catch (SDKException e) {
System.err.println(e);
} catch (FileNotFoundException e) {
System.err.println(e);
} catch (IOException e) {
System.err.println(e);
}
catch (IllegalArgumentException e) {
System.err.println(e);
} finally {

}

return dict;
}

//refer to Rules SDK documentation for saving a dictionary also
//because this code does not take care of saving linked dictionaries

public static boolean saveDictionary(RuleDictionary dict,
String ruleFileName) {

if (dict == null || ruleFileName == null)
return false;

if (dict.isTransactionInProgress())
System.out.println("Transaction in progress, cannot save dictionary");

Writer writer = null;
try {
writer = new FileWriter(new File(ruleFileName));
dict.writeDictionary(writer);

} catch (SDKException e) {
System.err.println(e);
return false;
} catch (FileNotFoundException e) {
System.err.println(e);
return false;
} catch (IOException e) {
System.err.println(e);
return false;
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException ioe) {
return false;
}
}
}
return true;
}

public static void updateDictionary(RuleDictionary dict) {
if (dict == null)
return;

List<SDKWarning> warnings = new ArrayList<SDKWarning>();
try {
dict.update(warnings);
for (SDKWarning warning : warnings)
System.out.println("warnings: " +
warning.getLocalizedMessage());
} catch (SDKException sdkEx) {
sdkEx.printStackTrace();
}
}

//You can call this method from your "Save" button

public void saveDictionary() {

RuleDictionary dict = this.getRuleDictModel().getRuleDictionary();

if (dict != null) {
if (dict.isModified())
updateDictionary(dict);
if (!dict.isTransactionInProgress())
saveDictionary(dict, RULES_FILE1);
}
}
//call validation method on the ruleDictModel to update Validation Panel

public void validate() {
if (this.ruleDictModel == null)
return;

this.ruleDictModel.validate();
}
}

7. faces-config.xmlファイルを概要モードで開き、「マネージドBean」の下の「+」ボタンをクリックして「マネージドBeanの作成」ダイアログ・ボックスを表示します。

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

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

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

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

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

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

次の手順に従います。

1. Oracle JDeveloperを開きます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

次の手順に従います。

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

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

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

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

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

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

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

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

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

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

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

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

「図26-42 Rules Dictionary Componentライブラリの追加」の説明

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4. Oracle JDeveloperを開きます。

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

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

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

図26-47 Oracle Rules Dictionary Componentの追加

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

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

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

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

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

2. 次の行をプロジェクトWARファイルのweblogic.xmlに追加します。

<library-ref>
<library-name>oracle.soa.rules_dict_dc.webapp</library-name>
</library-ref>

3. EARファイルをOracle WebLogic Serverにデプロイします。

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

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

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

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

名前

タイプ

必須

デフォルト値

ELのサポート

説明

dateStyle

java.lang.String

いいえ

ロケールから取得

はい

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

decimalSeparator

java.lang. Character

いいえ

ロケールに基づく

はい

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

dfActionListener

いいえ

はい

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

dfEditorPrefs

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

いいえ

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

はい

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

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

dfListener

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

いいえ

はい

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

dfServiceNameCustomizer

いいえ

はい

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

disableDFName

java.lang. Boolean

いいえ

false

はい

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

disableInputOps

java.lang. Boolean

いいえ

false

はい

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

disableOutputOps

java.lang. Boolean

いいえ

false

はい

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

disableRuleSetName

java.lang. Boolean

いいえ

false

はい

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

discloseRules

java.lang. Boolean

いいえ

false

はい

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

displayAddDF

java.lang. Boolean

いいえ

true

はい

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

displayDeleteDF

java.lang. Boolean

いいえ

true

はい

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

displayRuleSetName

java.lang. Boolean

いいえ

true

はい

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

displayWSCheck

java.lang. Boolean

いいえ

true

はい

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

displayWSName

java.lang. Boolean

いいえ

true

はい

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

dtColumnPageSize

java.lang. Integer

いいえ

5

はい

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

dtHeight

java.lang. Integer

いいえ

16

はい

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

groupingSeparator

java.lang. Character

いいえ

ロケールに基づく

はい

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

locale

java.util.Locale

いいえ

Locale. get Default()

はい

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

resourceManager

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

いいえ

はい

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

ruleDictModel

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

はい

-

ELのみ

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

rulesEditorPrefs

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

いいえ

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

はい

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

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

rulesPageSize

java.lang. Integer

いいえ

5

はい

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

selectedRulesetIdx

java.lang.String

いいえ

はい

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

selectedTab

java.lang.String

いいえ

-

はい

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

showDTButtons

java.lang. Boolean

いいえ

true

はい

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

showRSButtons

java.lang.Boolean

いいえ

true

はい

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

showValidationPanel

java.lang. Boolean

いいえ

true

はい

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

timeStyle

java.lang.String

いいえ

ロケールから取得

はい

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

timezone

java.util. TimeZone

いいえ

TimeZone. getDefault()

はい

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

viewOnly

java.lang. Boolean

いいえ

true

はい

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

vldnPanelCollapsed

java.lang.Boolean

いいえ

false

はい

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

vldnTabTitle

java.lang.String

いいえ

ローカライズ済テキスト

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

はい

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

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

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

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

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

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

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

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

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

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

次の手順に従います。

1. Oracle JDeveloperを開きます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. Oracle JDeveloperを開きます。

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

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

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

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

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

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

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

package useruledicttaskflow;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;

import java.net.MalformedURLException;
import java.net.URL;

import oracle.integration.console.metadata.model.share.MetadataDetails;
import oracle.integration.console.metadata.model.share.RelatedMetadataPath;

public class MyMetaDataDetails implements MetadataDetails {
public MyMetaDataDetails() {
super();
}

private static final String RULES_FILE1 =
"file:///<path of Rules file>";

public String getDocument() {
URL url = null;
try {
url = new URL(RULES_FILE1);
return readFile(url);
} catch (IOException e) {
System.err.println(e);
}
return "";
}

public void setDocument(String string) {
URL url = null;

try {
url = new URL(RULES_FILE1);
} catch (MalformedURLException e) {
System.err.println(e);
return;
}
Writer writer = null;
try {
//os = new FileWriter(url.getPath());
writer =
new OutputStreamWriter(new FileOutputStream(url.getPath()),
"UTF-8");
} catch (FileNotFoundException e) {
System.err.println(e);
return;
} catch (IOException e) {
System.err.println(e);
return;
}
try {
writer.write(string);
} catch (IOException e) {
System.err.println(e);
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException ioe) {
System.err.println(ioe);
}
}
}
}

private String readFile(URL dictURL) {
InputStream is;
try {
is = dictURL.openStream();
} catch (IOException e) {
System.err.println(e);
return "";
}
BufferedReader reader;
try {
reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
} catch (UnsupportedEncodingException e) {
System.err.println(e);
return "";
}
String line = null;
StringBuilder stringBuilder = new StringBuilder();
String ls = System.getProperty("line.separator");
try {
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
} catch (IOException e) {
System.err.println(e);
return "";
} finally {
try {
reader.close();
} catch (IOException e) {
System.err.println(e);
}
}
return stringBuilder.toString();
}

public String getRelatedDocument(RelatedMetadataPath relatedMetadataPath) {
String currPath =
RULES_FILE1.substring(0, RULES_FILE1.indexOf("oracle/rules"));
String relatedDoc =
currPath + "oracle/rules/" + relatedMetadataPath.getValue();

URL url = null;
try {
url = new URL(relatedDoc);
return readFile(url);
} catch (IOException e) {
System.err.println(e);
}
return "";
}
}

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

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

package useruledicttaskflow;

import java.util.Locale;
import java.util.TimeZone;

import oracle.integration.console.metadata.model.share.NLSPreferences;

public class MyNLSPreferences implements NLSPreferences {
private static final String DATE_STYLE = "yyyy-MM-dd";
private static final String TIME_STYLE = "HH-mm-ss";

public MyNLSPreferences() {
super();
}

public Locale getLocale() {
return Locale.getDefault();
}

public TimeZone getTimeZone() {
return TimeZone.getTimeZone("America/Los_Angeles");
}

public String getDateFormat() {
return DATE_STYLE;
}

public String getTimeFormat() {
return TIME_STYLE;
}
}

10. MetadataDetailsおよびNLSPreferencesの実装を返すMyBean.javaというマネージドBeanを作成します。また、oracle.integration.console.metadata.model.share.MetadataDetailsModeオブジェクトを返し、toggleMode()、saveDictionary()、saveNoValidateDictionary()、validate()などのイベント・ハンドラも提供します。
次に、MyBean.javaファイルのサンプルを示します。

package useruledicttaskflow;

import javax.el.ELContext;
import javax.el.ExpressionFactory;
import javax.el.MethodExpression;

import javax.faces.context.FacesContext;
import javax.faces.event.PhaseId;

import oracle.adf.view.rich.component.rich.fragment.RichRegion;

import oracle.integration.console.metadata.model.share.MetadataDetails;
import oracle.integration.console.metadata.model.share.MetadataDetailsMode;
import oracle.integration.console.metadata.model.share.NLSPreferences;

public class MyBean {
private MyMetaDataDetails details = null;
private MetadataDetailsMode mode = MetadataDetailsMode.VIEW;
private RichRegion regionComp;
private NLSPreferences nlsPrefs;

public MyBean() {
super();
}

public MetadataDetails getMetaDataDetails() {
if (details != null)
return details;

details = new MyMetaDataDetails();
return details;
}

public MetadataDetailsMode getDetailsMode() {
return mode;
}

public void toggleMode() {
if (mode.equals(MetadataDetailsMode.EDIT))
mode = MetadataDetailsMode.VIEW;
else
mode = MetadataDetailsMode.EDIT;
}

public void saveDictionary() {
if (regionComp == null)
return;
FacesContext fc = FacesContext.getCurrentInstance();
ExpressionFactory ef = fc.getApplication().getExpressionFactory();
ELContext elc = fc.getELContext();
MethodExpression me =
ef.createMethodExpression(elc, "doMetadataUpdate", String.class,
new Class[] { });
regionComp.queueActionEventInRegion(me, null, null, false, -1, -1,
PhaseId.ANY_PHASE);
}

public void saveNoValidateDictionary() {
if (regionComp == null)
return;
FacesContext fc = FacesContext.getCurrentInstance();
ExpressionFactory ef = fc.getApplication().getExpressionFactory();
ELContext elc = fc.getELContext();
MethodExpression me =
ef.createMethodExpression(elc, "doNoValidateMetadataUpdate",
String.class, new Class[] { });
regionComp.queueActionEventInRegion(me, null, null, false, -1, -1,
PhaseId.ANY_PHASE);
}

public void validate() {
if (regionComp == null)
return;
FacesContext fc = FacesContext.getCurrentInstance();
ExpressionFactory ef = fc.getApplication().getExpressionFactory();
ELContext elc = fc.getELContext();
MethodExpression me =
ef.createMethodExpression(elc, "doValidate", String.class,
new Class[] { });
regionComp.queueActionEventInRegion(me, null, null, false, -1, -1,
PhaseId.ANY_PHASE);
}

public void setRegionComp(RichRegion regionComp) {
this.regionComp = regionComp;
}
public RichRegion getRegionComp() {
return regionComp;
}

public NLSPreferences getNlsPrefs() {
if (nlsPrefs != null)
return nlsPrefs;

nlsPrefs = new MyNLSPreferences();
return nlsPrefs;
}
}

11. faces-config.xmlファイルを概要モードで開き、「マネージドBean」の下の「+」ボタンをクリックして「マネージドBeanの作成」ダイアログ・ボックスを表示します。

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

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

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

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

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

次の手順に従います。

1. Oracle JDeveloperを開きます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2. 「実行」を選択します。
図26-58に示すように、Webブラウザでサンプル・アプリケーションが開始します。

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

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

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

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

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

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

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

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

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

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

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

2. 次の行をプロジェクトWARファイルのweblogic.xmlに追加します。

<library-ref>
<library-name>oracle.soa.rules_dict_dc.webapp</library-name>
</library-ref>

3. EARファイルをOracle WebLogic Serverにデプロイします。

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

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

次の手順に従います。

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

<locale-config>      <default-locale>en</default-locale>
<supported-locale>en</supported-locale>
<supported-locale>ar</supported-locale>
<supported-locale>cs</supported-locale>
<supported-locale>da</supported-locale>
<supported-locale>de</supported-locale>
<supported-locale>el</supported-locale>
<supported-locale>es</supported-locale>
<supported-locale>fi</supported-locale>
<supported-locale>fr</supported-locale>
<supported-locale>hu</supported-locale>
<supported-locale>it</supported-locale>
<supported-locale>iw</supported-locale>
<supported-locale>ja</supported-locale>
<supported-locale>ko</supported-locale>
<supported-locale>nl</supported-locale>
<supported-locale>no</supported-locale>
<supported-locale>pl</supported-locale>
<supported-locale>pt-BR</supported-locale>
<supported-locale>pt</supported-locale>
<supported-locale>ro</supported-locale>
<supported-locale>ru</supported-locale>
<supported-locale>sk</supported-locale>
<supported-locale>sv</supported-locale>
<supported-locale>th</supported-locale>
<supported-locale>tr</supported-locale>
<supported-locale>zh-CN</supported-locale>
<supported-locale>zh-TW</supported-locale>
</locale-config>

2. ブラウザ言語をロケールに合わせて変更します。

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

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

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

26.6 翻訳の使用

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

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

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

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

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

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

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

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

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

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

public class MyRelatedMetadataDetails implements IRelatedMetadataDetails {

private static final Locale[] LOCALES = { Locale.US, Locale.FRENCH };

private static final String RESOURCE_PATH =
"file:///C:/scratch/sumit/system/rules/";
private static final String RESOURCE_BASE = "SimpleRule";

public MyRelatedMetadataDetails() {
super();
}

public String getDocument(IRelatedMetadataPath relatedPath) {
String resourceSuffix = relatedPath.getValue();
try {
return loadResource(resourceSuffix);
} catch (IOException e) {
return "";
}
}

private static String loadResource(String resourceSuffix) throws IOException {

FileInputStream fis = null;
FileChannel fc = null;
try {
URL url = new URL(RESOURCE_PATH + RESOURCE_BASE + resourceSuffix);
fis = new FileInputStream(url.getFile());
fc = fis.getChannel();
ByteBuffer bb = ByteBuffer.allocate((int)fc.size());
fc.read(bb);
bb.rewind();
return Charset.defaultCharset().decode(bb).toString();
} finally {
if (fis != null) {
fis.close();
}
if (fc != null) {
fc.close();
}
}
}

public void createDocument(IRelatedMetadataPath relatedPath,
String document) {
try {
storeResource(relatedPath.getValue(), document);
} catch (IOException e) {
e.printStackTrace();
}
}

public void saveDocument(IRelatedMetadataPath path, String document) {
try {
storeResource(path.getValue(), document);
} catch (IOException e) {
e.printStackTrace();
}
}

private static void storeResource(String resourceSuffix,
String document) throws IOException {
FileOutputStream fos = null;
FileChannel fc = null;
try {
URL url = new URL(RESOURCE_PATH + RESOURCE_BASE + resourceSuffix);
fos = new FileOutputStream(url.getFile());
fc = fos.getChannel();
ByteBuffer bb = ByteBuffer.allocateDirect(1024);
bb.clear();
bb.put(Charset.defaultCharset().encode(document));
bb.flip();
while (bb.hasRemaining()) {
fc.write(bb);
}
} finally {
if (fos != null) {
fos.close();
}
if (fc != null) {
fc.close();
}
}
}

public IRelatedMetadataPathFinderFactory getFinderFactory() {
return new RelatedMetadataPathFinderFactory();
}

public List<IRelatedMetadataPath> getExisting(IRelatedMetadataPathFinder finder) {

List<IRelatedMetadataPath> paths = new ArrayList<IRelatedMetadataPath>();
for (Locale locale : LOCALES) {
paths.add(RelatedResourceMetadataPath.buildFromLocale(locale));
}
return paths;
}

public class RelatedMetadataPathFinderFactory implements IRelated`MetadataPathFinderFactory {

public IRelatedMetadataPathFinder getResourceFinder() {
return new RelatedMetadataPathFinder();
}
}

public class RelatedMetadataPathFinder implements IRelatedMetadataPathFinder {

public String getType() {
return null;
}

public IRelatedMetadataPath matches(oracle.integration.console.metadata.model.share.MetadataPath srcPath,
oracle.integration.console.metadata.model.share.MetadataPath matchPath) {
return null;
}
}

}

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

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

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

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

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

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

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

public ResourceManagerInterface getResourceManager() {
if (resourceManager == null) {
resourceManager =
new ResourceManager(loadResources(), ruleDictionary);
}
return resourceManager;
}

private Map<Locale, String> loadResources() {

Map<Locale, String> resourceMap = new HashMap<Locale, String>();

for (Locale locale : LOCALES) {
try {
URL url =
new URL(RULES_FILE_PATH + "Translations_" + locale.toString() +
".xml");
String content =
new Scanner(new File(url.getFile()), "UTF-8").useDelimiter("\\A").next();
resourceMap.put(locale, content);
} catch (IOException e) {
resourceMap.put(locale, "");
LOG.severe("Failed to load resource:" + e.getMessage());
}
}
if (!resourceMap.keySet().contains(getLocale())) {
resourceMap.put(getLocale(), "");
}
return resourceMap;
}

private void storeResources(Map<Locale, String> resourceMap) {
for (Locale locale : resourceMap.keySet()) {
try {
URL url =
new URL(RULES_FILE_PATH + "Translations_" + locale.toString() +
".xml");
BufferedWriter out = new BufferedWriter(new FileWriter(url.getFile()));
out.write(resourceMap.get(locale));
out.close();
} catch (IOException e) {
LOG.severe("Failed to store resource:" + e.getMessage());
}
}
}

注意:

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

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

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

第V部

ヒューマン・ワークフロー・サービス・コンポーネントの使用

この部では、ヒューマン・ワークフロー・サービス・コンポーネントの使用方法について説明します。

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

- 第27章「ヒューマン・ワークフローの開始」

- 第28章「ヒューマン・タスクの作成」

- 第29章「ヒューマン・タスクの構成」

- 第30章「ヒューマン・タスク用のタスク・フォームの設計」

- 第31章「ヒューマン・ワークフローのチュートリアル」

- 第32章「Oracle BPM Worklistの使用」

- 第33章「カスタム・ワークリスト・クライアントの作成」

- 第34章「ヒューマン・ワークフロー・サービスの概要」

- 第35章「Microsoft Excelとヒューマン・タスクとの統合」

- 第36章「タスク・リスト・ポートレットの構成」

27 ヒューマン・ワークフローの開始

この章では、開発者を対象として、ヒューマン・ワークフローの概念、機能およびアーキテクチャについて説明します。ヒューマン・ワークフローには、ユースケースが用意されています。ワークフロー全体を始めて設計する際の手順についても説明します。

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

- 第27.1項「ヒューマン・ワークフローの概要」

- 第27.2項「ヒューマン・ワークフローの概念の概要」

- 第27.3項「ヒューマン・ワークフローの機能の概要」

- 第27.4項「ヒューマン・ワークフローのアーキテクチャの概要」

警告:

SOAヒューマン・タスク・データベース表を直接変更しないでください。これらの表の列名およびデータの下位互換性は保証されません。

27.1 ヒューマン・ワークフローの概要

多くのエンドツーエンドのビジネス・プロセスでは、プロセスに人的な操作が必要です。たとえば、承認や例外管理、またはビジネス・プロセスの進行に必要なアクティビティの実行には、人的な操作が必要です。ヒューマン・ワークフロー・コンポーネントには、次の機能があります。

- プロセスの人的な操作。適切なユーザーまたはグループへのタスクの割当てやルーティングなどがあります。

- 期限、エスカレーション、通知および他の機能。タスク(ヒューマン・アクティビティ)の適時実行を保証するために必要です。

- エンド・ユーザーへのタスクの提示。ワークリスト・アプリケーション(Oracle BPM Worklist)などの様々な方法を使用します。

- 編成、フィルタ処理、優先度設定および他の機能。エンド・ユーザーがタスクを効率的に実行するために必要です。

- レポート、再割当、ロード・バランシングおよび他の機能。監督者およびビジネス所有者がタスクのパフォーマンスを管理するために必要です。

図27-1に、ヒューマン・ワークフローの概要を示します。

図27-1 ヒューマン・ワークフロー

「図27-1 ヒューマン・ワークフロー」の説明

図27-1では、次のアクションが発生しています。

- BPELプロセスは、タスクの実行に人的な操作が必要になると、ヒューマン・タスク・タイプの特別なアクティビティを起動します。

- このアクティビティによって、ヒューマン・タスク・サービス・コンポーネントにタスクが作成されます。このプロセスは、タスクが完了するまで待機します。プロセスでは、タスクからのその他のコールバックを監視し、そのコールバックに対応することも可能です。

- タスクにはメタデータが関連付けられています。このメタデータは、タスクのライフサイクルを管理するために、ヒューマン・タスク・サービス・コンポーネントで使用されます。このメタデータには、次の指定が含まれています。

- タスクを実行するユーザー。タスクの実行に複数のユーザーが必要な場合は、その順序。

- 他のステークホルダ。

- タスクの完了期限。

- ユーザーによるタスクの実行方法、ユーザーに提示する情報、ユーザーの入力内容と実行可能なアクション。

- ヒューマン・タスク・サービス・コンポーネントでは、LDAPなどのアイデンティティ・ディレクトリを使用して、ユーザーのロールと権限を判断します。

- ヒューマン・タスク・サービス・コンポーネントでは、次のような様々なチャネルを使用してユーザーにタスクを提示します。

- Oracle BPM Worklist。監督者やプロセス所有者の考え方をサポートするロール・ベースのアプリケーションで、タスクを検索、編成、管理および実行するための機能を提供します。

- ワークリスト機能。エンタープライズ・ポータルに公開可能なポートレットとして使用することもできます。

- 通知。電子メール、電話、SMSおよびその他のチャネルで送信できます。電子メール通知はアクション可能で、ユーザーは、Oracle BPM WorklistまたはOracle WebLogic Serverに接続しないで、電子メール・クライアント内からタスクに対してアクションを実行できます。

ポートレットの詳細は、第36章「タスク・リスト・ポートレットの構成」を参照してください。

27.2 ヒューマン・ワークフローの概要

この項では、ヒューマン・ワークフローの主要な設計時および実行時の概念について説明します。ヒューマン・ワークフロー設計の主要な3つのステージの概要についても説明します。

27.2.1 設計時および実行時の概念の概要

ヒューマン・タスクを設計するには、その前に、設計時および実行時の概念を理解することが重要です。タスクは通常、件名、優先度、タスク参加者、タスク・パラメータまたはデータ、期限、通知またはリマインダ、およびタスク・フォームで構成されています。この項では、主要な概念に関する概要を説明します。

注意:

ヒューマン・ワークフローの設計時タスクは、ヒューマン・タスク・エディタと呼ばれるグラフィカル・エディタで実行されます。第31章「ヒューマン・ワークフローのチュートリアル」のチュートリアルで、このエディタの使用方法を説明しています。

27.2.1.1 タスクの割当ておよびルーティング

ヒューマン・ワークフローでは、タスクの宣言的な割当ておよびルーティングをサポートしています。最も簡単なケースでは、タスクは単一の参加者(ユーザーまたはグループ)に割り当てられます。ただし、多くの場合は、複雑なタスク割当てとルーティングが必要です(たとえば、図27-2に示すように、タスクに管理チェーンによる承認が必要な場合や、タスクを一連のユーザーがパラレルで作業したり、投票する必要がある場合です)。ヒューマン・ワークフローでは、このようなシナリオに対して宣言的なパターン・ベースのサポートを提供します。

図27-2 タスクの参加者

「図27-2 タスクの参加者」の説明

27.2.1.1.1 参加者

参加者は、割当ておよびルーティング・ポリシー定義内のユーザーまたは一連のユーザーです。図27-2では、ユーザーを表すアイコンの各ブロックが参加者です。

27.2.1.1.2 参加者タイプ

簡単なケースでは、参加者はユーザー、グループまたはロールにマップされます。ただし、第27.2.1.1項「タスクの割当ておよびルーティング」で説明したように、ワークフローでは、管理チェーンやグループ投票などの一般的なルーティング・シナリオに対して宣言的なパターンをサポートしています。使用可能な参加者タイプは、次のとおりです。

- 単一の承認者
これは簡単なケースで、参加者はユーザー、グループまたはロールにマップされます。

たとえば、休暇申請がマネージャに割り当てられているとします。マネージャは、休暇が始まる3日前までに申請タスクを操作する必要があります。マネージャが申請を正式に承認または却下すると、その決定が従業員に通知されます。マネージャがタスクを操作しない場合、申請は却下として処理されます。正式な却下の場合と同様に通知アクションが実行されます。

- パラレル
この参加者タイプは、一連のユーザーがパラレルで作業する必要があることを示します。このパターンは通常、投票で使用されます。

たとえば、雇用に関して複数のユーザーが応募者の採否を票決する必要がある場合です。結果が有効になるために必要な得票率(多数決や満場一致など)を指定します。

- シリアル
この参加者タイプは、一連のユーザーが順番に作業する必要があることを示します。ルーティング・ポリシーには、複数の参加者を順番に使用した順番による作業を指定できますが、このパターンは一連のユーザーが動的である場合に有用です。このシリアル・タイプの一般的なシナリオは、管理チェーン・エスカレーションです。このエスカレーションは、このパターンの指定内にある管理チェーンに基づいてリストを指定することで実行されます。

- FYI(情報専用)
この参加者は、単一の承認者と同様に、単一のユーザー、グループまたはロールにマップされます。ただし、このパターンは、参加者が通知タスクを単に受信し、ビジネス・プロセスではこの参加者のレスポンスを待機しないことを示します。FYI参加者はタスクの結果を直接左右することはできませんが、コメントを提供したり添付ファイルを追加できる場合があります。

たとえば、採用候補者の採用について地域マネージャが承認し、その候補が承認または却下のために州全体の統括マネージャに渡されたことが、地域の営業所に通知される場合です。FYIはタスクの結果を直接左右できませんが、コメントを提供したり添付ファイルを追加できる場合があります。

詳細は、第29.4項「タスク参加者の割当て」を参照してください。

27.2.1.1.3 参加者の割当て

タスクは、ユーザーによる実行が必要な作業です。タスクを作成する場合は、そのタスクに参加して操作するユーザーを割り当てます。実行時に、参加者はOracle BPM Worklistからタスクに対してアクションを実行できます。これらのアクションには、休暇申請の承認、発注の却下、ヘルプ・デスク・リクエストへのフィードバックの提供などがあります。参加者には3つのタイプがあります。

- ユーザー
タスクの操作に個別のユーザーを割り当てることができます。たとえば、特定のタスクに対してユーザーjlondonやjsteinを割り当てることができます。ユーザーは、SOAインフラストラクチャで構成されたアイデンティティ・ストアに定義されます。これらのユーザーは、Oracle WebLogic Serverの組込みLDAP、Oracle Internet Directoryまたは第三者LDAPディレクトリに格納できます。

- グループ
タスクの操作にグループを割り当てることができます。グループには、タスクを要求して操作できる個別のユーザーが含まれています。たとえば、ユーザーjcooperとfkafkaは、タスクの操作を割り当てたグループLoanAgentGroupのメンバーである可能性があります。

ユーザーと同様に、グループはSOAインフラストラクチャのアイデンティティ・ストアに定義されます。

- アプリケーション・ロール
タスクの要求と操作に、アプリケーション・ロールのメンバーであるユーザーを割り当てることができます。

アプリケーション・ロールは、アプリケーション・レベルで認可するように論理的にグループ化されたユーザーまたは他のロールで構成されます。これらのロールは、アプリケーション固有のもので、アプリケーションJavaポリシー・ストア(アイデンティティ・ストアではなく)で定義されます。これらのロールは、アプリケーションが直接使用するもので、Java EEコンテナによって把握されているとはかぎりません。

アプリケーション・ロールはポリシーを定義します。アプリケーション・ロールにはJava権限を付与できます。したがって、アプリケーション・ロールは、直接的または他のロールを介して間接的に付与される一連の権限を定義します。ポリシーには、エンタープライズ・グループまたはユーザーに対するアプリケーション・ロールの付与を含めることができます。ファイル・ベースのポリシー・ストアのjazn-data.xmlファイルには、これらのロールが<policy-store>の下の<app-role>要素に定義され、デプロイメント時にファーム・レベルでsystem-jazn-data.xmlに書き込まれます。これらのロールは、デプロイメント後にOracle Enterprise Manager Fusion Middleware Controlを使用して定義することもできます。ロールが事前にデプロイされている場合は、設計時に、タスク所有者または承認者をアプリケーション・ロールに設定できます。

Oracle BPM Worklistの詳細は、第27.2.1.6項「タスク・フォーム」を参照してください。

27.2.1.1.4 非定型ルーティング

多様性に対応するプロセスでは、すべての参加者を常に決定できるわけではありません。ヒューマン・ワークフローを使用すると、参加者がタスク実行の一部として他の参加者を招待できるように指定できます。

詳細は、第29.5.1.1項「全参加者による他の参加者の招待の許可」を参照してください。

27.2.1.1.5 ルーティング・フローの結果ベースの完了

デフォルトでは、タスクは、ルーティング・ポリシーに定義したフローに従って(図27-2に示すように)、開始参加者から最終参加者へ移行します。ただし、タスクのルーティング・フロー内の特定ステップでの特定結果によっては、次の参加者へのタスクの提示を続行することが不要になったり、望ましくない場合があります。たとえば、最初のマネージャが承認を却下した場合は、2番目のマネージャにルーティングする必要はありません。ヒューマン・ワークフローでは、特定の結果が発生した場合にタスクまたはサブタスクを完了するように指定することをサポートしています。

詳細は、第29.5.1.2項「次の参加者へのタスクのルーティングの停止」を参照してください。

27.2.1.2 静的、動的およびルールベースのタスク割当て

タスクへのユーザー、グループおよびアプリケーション・ロールの割当てには様々な方法があります。

- 静的なタスク割当て
ユーザー、グループおよびアプリケーション・ロールを静的に(または、アイデンティティ・サービスを参照して)割り当てることができます。値は次のいずれかです。

- 単一のユーザー、グループまたはアプリケーション・ロール(jstein、CentralLoanRegionまたはApproverRoleなど)。

- ユーザー、グループまたはアプリケーション・ロールのデリミタ付き文字列(jstein, wfaulk, cdickensなど)。

- 動的なタスク割当て
ユーザー、グループおよびアプリケーション・ロールを動的に割り当てるには、次の方法があります。

- タスク割当てパターンを使用します。このパターンを使用すると、次の操作を実行できます。

- 簡単に参加者が手動でタスクを申請できるようにします。デフォルトの動作です。タスク割当てパターンは適用されません。

- 参加者タイプが「単一」または「FYI」のいずれかの場合は、タスク割当てパターンを割り当てて、リクエストされたタイプの単一の割当て先を参加者のすべての割当て先候補から選択できます。
たとえば、割当て先候補がユーザーjcooper、グループLoanAgentおよびアプリケーション・ロールDevelopersで構成されているとします。さらに、リクエストされたタイプがuserであるとします。このタスク割当てパターンを適用すると、単一のユーザーが、ユーザーjcooper、グループLoanAgentのすべてのメンバー、およびアプリケーション・ロールDevelopersを付与されているすべてのユーザーから選択されます。

- 参加者タイプが「パラレル」または「シリアル」の場合は、タスク割当てパターンを割り当てて、リクエストされたタイプの単一の割当て先を参加者のそれぞれの割当て先候補から選択できます。
たとえば、割当て先候補がユーザーjcooper、グループLoanAgentおよびアプリケーション・ロールDevelopersで構成されているとします。さらに、リクエストされたタイプがuserであるとします。このタスク割当てパターンを適用すると、ユーザーjcooper、グループLoanAgent内の1人のユーザー、およびアプリケーション・ロールDevelopersを付与されている1人のユーザーが選択されます。

- XPath式を使用します。これらの式を使用すると、参加者タイプに含まれていないユーザーに対する割当てを動的に決定できます。この場合、割当て先候補のリストを作成して、そのうちの1人がタスクを申請する必要があります。
たとえば、ペイロード変数で指定されたタスク承認者の動的リストを作成するというビジネス要件を設定できます。このXPath式は、0(ゼロ)個以上のXMLノードに解決できます。各ノードの値は次のいずれかです。

- 単一のユーザー、グループまたはアプリケーション・ロール。

- ユーザー、グループまたはアプリケーション・グループのデリミタ付き文字列。割当て先のデリミタ付き文字列のデフォルト・デリミタはカンマ(,)です。

たとえば、タスクに、タスク承認者が格納されているpoという名前のペイロード・メッセージ属性がある場合は、次のXPath式を使用できます。

- /task:task/task:payload/po:purchaseOrder/po:approvers

- ids:getManager('jstein', 'jazn.com')
この式は、jsteinのマネージャを返します。

- ids:getReportees('jstein', 2, 'jazn.com')
この式は、jsteinの2レベルまでの報告先すべてを返します。

- ids:getUsersInGroup('LoanAgentGroup', false, 'jazn.com')
この式は、グループLoanAgentGroupのすべての直接ユーザーと間接ユーザーを返します。

両方のオプションを同時に使用できます(たとえば、XPath式を使用してグループを動的に選択してから、タスク割当てパターンを適用して、そのグループからユーザーを動的に選択できます)。

- ビジネス・ルールを使用したタスク割当て
複雑な式を使用してタスク参加者のリストを作成できます。ビジネス・ルールの使用結果は、XPath式の使用結果と同じです。

27.2.1.3 タスクのステークホルダ

タスクには複数のステークホルダが含まれます。参加者は、タスク定義の割当ておよびルーティングのセクションに定義されたユーザーです。これらのユーザーは、タスクに対してアクションを実行する主要なステークホルダです。

割当ておよびルーティング・ポリシーに指定されている参加者に加えて、ヒューマン・ワークフローでは次の追加のステークホルダがサポートされています。

- 所有者
この参加者には、タスクに対するビジネス管理権限があります。この参加者は、タスク定義の一部として指定したり、起動プロセスから(および特定のインスタンスに)指定することができます。タスク所有者は、所有するタスクを操作したり、他の参加者のかわりにタスクを操作することもできます。タスク所有者は、タスクの結果と割当ての両方を変更できます。

ヒューマン・タスク・エディタで所有者を指定するには、第29.2.7項「タスク所有者の指定方法」を参照してください。また、「ヒューマン・タスク」ダイアログの「詳細」タブで所有者を指定するには、第28.4.4.2項「タスク所有者の指定」を参照してください。

- 起案者
プロセスを開始するユーザーです(たとえば、起案者は承認用の経費レポートを提出します)。このユーザーは、開始したタスクのフィルタを使用してタスクのステータスを確認できます。また、他の参加者による情報のリクエストに関する潜在的候補者として起案者を含めることは、有用な考え方です。

詳細は、第28.4.3.2項「タスク起案者とタスク優先度の指定」を参照してください。

- レビューア
この参加者は、タスクのステータスを確認して、コメントおよび添付ファイルを追加できます。

- 管理者
この参加者は、すべてのタスクを表示して、テストの再割当てやエラーを処理するためのタスクの一時停止などの特定のアクションを実行できます。タスク管理者は、タスクの結果を変更できます。

タスク管理者は、タスク参加者が実行できる承認、却下などのアクション・タイプは実行できませんが、この参加者タイプは再割当て、取消しなどのアクションを実行できるため最も強力なタイプです。

- エラー割当て先
エラーが発生すると、タスクはこの参加者に割り当てられます(存在しないユーザーにタスクが割り当てられた場合など)。エラーの割当て先は、Oracle BPM Worklistからタスク・リカバリ・アクションを実行できます。Oracle BPM Worklistは、実行時にタスク・アクションを実行するタスク・フォームです。

詳細は、第29.5.4項「エラー割当て先の構成方法」を参照してください。

27.2.1.4 タスク期限

ヒューマン・ワークフローでは、タスクに関連する期限の指定がサポートされています。期限には、次のアクションを関連付けることができます。

- リマインダ:
割当て後の時刻または有効期限前の時刻に基づいて、タスクのリマインダを複数回送信できます。

- エスカレーション:
タスクは、管理階層にエスカレートされます。

- 期限切れ:
タスクは期限切れです。

- 更新:
タスクは、自動的に更新されます。

詳細は、第29.7項「タスクのエスカレート、期限更新または終了」を参照してください。

27.2.1.5 通知

ヒューマン・タスクは、通知を使用するように構成できます。通知を使用すると、関連するユーザーに、タスクのライフ・サイクル期間にタスクの状態が変化したことを警告できます。たとえば、タスクの承認や取消しの際は、通知が割当て先に送信されます。

異なるアクションについて様々なタイプの参加者に通知を送信するように指定できます。たとえば、次のように指定できます。

- タスクの所有者は、タスクがエラー状態の場合(存在しないユーザーに送信された場合など)通知メッセージを受信します。

- タスク割当て先は、タスクがエスカレートされた場合通知メッセージを受信します。

通知メッセージのコンテンツと、メッセージの送信に使用する通知チャネルを指定できます。

- Email
アクション可能な電子メール通知メッセージを構成できます。つまり、タスク割当て先は、その電子メール内からタスクを操作できます。

- ボイス・メッセージ

- インスタント・メッセージ(IM)

- ショート・メッセージ・サービス(SMS)

たとえば、タスク割当て先がタスクを操作する前に追加の情報をリクエストした場合は、例27-1に示すようなメッセージを電子メールで送信できます。

例27-1 電子メール・メッセージ

For me to approve this task, more information is required to justify the need
for this business trip

実行時には、メッセージ送信者のアドレスをスパムとしてマークし、不正または無効なアドレス・リストを表示することもできます。これらのアドレスは、不正アドレス・リストから自動的に削除されます。

通知の詳細は、次を参照してください。

- 第17章「通知サービスの使用」

- 第29.8項「参加者通知プリファレンスの指定」

- 第XI部「Oracle User Messaging Serviceの使用」

27.2.1.6 タスク・フォーム

タスク・フォームは、タスクと相互作用する方法を提供します。Oracle BPM Worklistのタスク・フォームには、タスク割当て先に割り当てられたすべてのワークリスト・タスクが表示されます。特定のタスクにドリルダウンすると、タスク・フォームには、ユーザーのワークリストに対するタスクのコンテンツが表示されます。たとえば、経費承認タスクでは様々な経費の明細項目が記載されたフォームが表示され、ヘルプ・デスク・タスク・フォームでは重大度や問題の場所などの詳細が表示されます。

このため、Oracle SOA Suiteの統合開発環境には、Oracle Application Development Framework (Oracle ADF)が含まれています。Oracle ADFを使用すると、SOAコンポジット・アプリケーションのヒューマン・タスクを表すタスク・フォームを設計できます。

ADFベースのタスク・フォームは自動的に生成できます。上級ユーザーは、ADFデータ・コントロールを使用して独自のタスク・フォームを設計して、ページ上にコンテンツをレイアウトし、実行時にはワークフロー・サービス・エンジンに接続して、タスク・コンテンツを取得し、タスクを操作できます。

タスク・フォームは、JSF、.NET、またはAPIを使用する他のクライアント・テクノロジで作成できます。

タスクを開始し、操作するためにMicrosoft Excelとの統合も提供されています。

詳細は、次を参照してください。

- 第30章「ヒューマン・タスク用のタスク・フォームの設計」

- 第32章「Oracle BPM Worklistの使用」

27.2.1.7 拡張概念

この項では、ヒューマン・ワークフローの拡張概念について説明します。

27.2.1.7.1 ルールベースのルーティング

Oracle Business Rulesを使用すると、ルーティング・フローを動的に変更できます。使用すると、参加者がそれぞれの手順を完了するたびに、関連付けられているルールが起動し、そのルールからルーティング・フローを上書きできます。

詳細は、第29.5.2項「ビジネス・ルールを使用した詳細タスク・ルーティングの指定方法」を参照してください。

27.2.1.7.2 ルールベースの参加者割当て

Oracle Business Rulesを使用すると、参加者に関連付けるユーザー、グループおよびロールのリストを動的に作成できます。

詳細は、第29.4項「タスク参加者の割当て」を参照してください。

27.2.1.7.3 ステージ

ステージは、参加者タイプの各ブロックに対して承認プロセスを編成するための1方法です。1つ以上のステージを順番に、またはパラレルで指定できます。各ステージ内で、1つ以上の参加者タイプ・ブロックを順番に、またはパラレルで指定できます。

詳細は、第29.4項「タスク参加者の割当て」を参照してください。

27.2.1.7.4 アクセス・ルール

割当て先が表示および更新できるタスクの部分を決定するアクセス・ルールを指定できます。たとえば、割当て先が読み取るタスク・ペイロード・データを構成できます。このアクションを使用できるのは、読取り権限のある割当て先のみです。割当て先を含め、書込み権限はありません。

詳細は、第29.9.1項「タスク・コンテンツへのアクセス・ポリシーの指定方法」を参照してください。

27.2.1.7.5 コールバック

ヒューマン・ワークフローでは、宣言的に指定可能な詳細な動作がサポートされていますが、一部の高度な状況では、さらに拡張可能な動作が必要になる場合があります。このような拡張性はタスク・コールバックによって可能となり、これらのコールバックは、BPELプロセスまたはJavaクラスの起動時に処理できます。

詳細は、第29.11.1項「タスク・ステータスのコールバック・クラスの指定方法」を参照してください。

27.2.1.8 レポートおよび監査証跡

Oracle BPM Worklistには、タスク分析用の組込みレポートが複数用意されています。

- 不参加タスク
ユーザーのグループまたは報告先のグループに割り当てられたタスクの中で、まだ獲得されていないタスクが分析されます。

- タスクの優先度
ユーザー、報告先またはそのグループに割り当てられたタスクが優先度に基づいて分析されます。

- タスクのサイクル・タイム
ユーザーのグループまたは報告先のグループに基づいて、タスクの割当てから完了までの所要時間が分析されます。

- タスクの生産性
ユーザー、報告先またはグループについて、特定期間中に割り当てられたタスク数と完了したタスク数が分析されます。

- タスク時間分布
割当て先がタスクを実行するために要した時間が表示されます。

タスクの参加者が実行したアクションの監査証跡、およびワークフローの様々な時点におけるタスク・ペイロードと添付ファイルのスナップショットを表示できます。タスクの短い履歴には、次のタスクによって作成されたすべてのバージョンが表示されます。

- タスクの開始

- タスクの再開始

- タスクの結果の更新

- タスクの完了

- タスクのエラー処理

- タスクの期限切れ

- タスクの取消し

- エラー割当て先に対するタスクのアラート

詳細は、第32章「Oracle BPM Worklistの使用」を参照してください。

27.2.2 ヒューマン・ワークフローの設計ステージの概要

ヒューマン・ワークフロー・モデリングは、表27-1に示すように、3つのステージのモデリングで構成されています。

表27-1 ヒューマン・ワークフロー・モデリングのステージ

手順

説明

参照先

1

ヒューマン・タスクのコンテンツは、ヒューマン・タスク・エディタで作成および定義します。これには、参加者タイプ、ルーティング・ポリシー、エスカレーションと有効期限のポリシー、通知などの定義が含まれます。

第28.1.1項「ヒューマン・タスク定義の作成の概要」。

2

ヒューマン・タスク定義をBPELプロセスに関連付けます。BPELプロセスは、一連のアクティビティ(ヒューマン・タスク・アクティビティを含む)とサービスをエンドツーエンドのプロセス・フローに統合します。

第28.1.2項「ヒューマン・タスク定義とBPELプロセスの関連付けの概要」。

3

タスク・フォームを作成します。このフォームでは、実行時にOracle BPM Worklistで操作するタスクの詳細が表示されます。

第28.1.3項「タスク・フォームの生成の概要」。

27.3 ヒューマン・ワークフロー機能の概要

この項では、ヒューマン・ワークフローのユースケースの概要を説明します。この項の後で、ヒューマン・タスク全体の設計をチュートリアルで説明します。

27.3.1 ヒューマン・ワークフローのユースケース

次の各項では、ワークフロー・サービスの複数のユースケースについて説明します。

27.3.1.1 ユーザーまたはロールへのタスクの割当て

休暇申請プロセスは、ユーザーから休暇の詳細を取得し、承認担当のマネージャにその申請をルーティングすることから開始されます。ユーザーの詳細と組織階層は、ユーザー・ディレクトリまたはアイデンティティ・ストアからルックアップできます。図27-3に、このシナリオを示します。

図27-3 ディレクトリ内のユーザーまたはロールに対するタスクの割当て

「図27-3 ディレクトリ内のユーザーまたはロールに対するタスクの割当て」の説明

27.3.1.2 様々な参加者タイプの使用

タスクは、「グループ投票」、「管理チェーン」または「承認者の順序リスト」参加者タイプの複数のユーザーを介してルーティングできます。たとえば、融資承認フローの一部として融資申請が考えられます。融資申請は、初めに融資エージェント・ロールに割り当てることができます。融資金額が100,000ドルを超えている場合は、特定の融資エージェントが融資を取得して承認した後で、さらに複数の管理レベルにその融資をルーティングさせることが可能です。図27-4に、このシナリオを示します。

図27-4 フロー・パターンとルーティング・ポリシー

「図27-4 フロー・パターンとルーティング・ポリシー」の説明

これらのタイプをビルディング・ブロックとして使用することで、複雑なワークフローを作成できます。

27.3.1.3 エスカレーション、有効期限および委任

カスタム・エスカレーション機能を使用すると、タスク・タイプに基づいて、優先度の高いタスクを特定のユーザーまたはロールに割り当てることができます。ただし、ユーザーが一定期間内にタスクを操作しない場合は、そのタスクを期限切れとし、追加アクションのためにマネージャにエスカレートできます。エスカレーションの一環として、電子メール、電話ボイス・メッセージまたはSMSでユーザーに通知することも可能です。同様に、マネージャは、様々なタスク割当て間で負荷を分散するために、ある報告先から別の報告先にタスクを委任できます。BPELで定義されるすべてのタスクには、関連する有効期限があります。また、図27-5に示すように、エスカレーション・ポリシーまたは期限更新ポリシーを指定する場合もあります。たとえば、ヘルプ・デスク・サービス・リクエストのプロセスの一部としてサポート・コールが考えられます。優先度の高いタスクを特定のユーザーに割り当て、そのユーザーが2日以内に対応しない場合、そのタスクは、追加アクションのためにマネージャにルーティングされます。

図27-5 エスカレーションと通知

「図27-5 エスカレーションと通知」の説明

27.3.1.4 自動割当ておよび委任

ユーザーは、自分のかわりに他のユーザーにタスクを実行させるように決定できます。タスクは、Oracle BPM Worklistから明示的または自動的に委任することができます。たとえば、マネージャは、自分が担当する高優先度のタスクを、休暇中はすべて自動的に直属の部下の1人にルーティングするという休暇ルールを設定します。タスクをその内容に基づいて別のユーザーにルーティングできる場合もあります。自動ルーティングのもう1つの例は、グループに属する複数のユーザー間でタスクを割り当てることです。たとえば、ヘルプ・デスクの監督者は、西部地域のすべてのタスクをラウンド・ロビン方式で割り当てたり、未処理タスクの最も少ないユーザー(最もビジーでない箇所)にタスクを割り当てるように決定します。

27.3.1.5 タスク・コンテンツに基づいたユーザーの動的割当て

人事部のJamesという従業員が5,000ドルの新しいハードウェアの購入を申請します。この会社には、3,000ドルを超えるすべてのハードウェアの購入はマネージャおよび副社長の承認が必要で、ITの取締役が確認するというポリシーがあります。このシナリオでは、ワークフローを、Jamesのマネージャ、人事部の副社長およびITの取締役を自動的に判断するように構成できます。ハードウェアの購入前に、発注書がこれら3人の承認者にルーティングされます。

27.4 ヒューマン・ワークフロー・アーキテクチャの概要

この項では、ヒューマン・ワークフロー・アーキテクチャの概要を説明します。次の内容について説明します。

- タスクのライフ・サイクル中に様々な操作を実行するサービス。これには、ユーザーのタスクの問合せ、タスクに関連したメタデータ情報の取得などがあります。

- ヒューマン・タスクは、次の2つの方法で使用します。

- BPELプロセス・サービス・コンポーネントへの関連付け

- スタンドアロン・モードでの使用

- ヒューマン・タスクの期間におけるサービス・エンジンの役割。

27.4.1 ヒューマン・ワークフロー・サービス

リリース11g 以降、すべてのヒューマン・タスク・メタデータはメタデータ・サービス(MDS)リポジトリに保存されて管理されます。ワークフロー・サービスは、ビジネス・プロセスと人間の相互作用の様々な側面を処理する多数のサービスで構成されています。

図27-6は、次のワークフロー・サービス・コンポーネントを示しています。

- タスク・サービス:
タスク・サービスにより、タスク状態の管理およびタスクの永続性が提供されます。これらのサービスに加え、タスク・サービスでは、タスクの更新、完了、エスカレート、再割当てなどの操作が公開されます。タスク・サービスは、ユーザーに割り当てられているタスクを取得するためにOracle BPM Worklistで使用されます。また、このサービスでは、タスク状態が変化したときにユーザーやグループに通知を送信するかどうかも決定されます。タスク・サービスは、次のサービスで構成されます。

- タスク・ルーティング・サービス
タスク・ルーティング・サービスは、タスクのルーティング、エスカレートおよび再割当てを実行するサービスを提供します。サービスでは、宣言的な指定をルーティング・スリップ形式で解析することで、これらの決定が行われます。

- タスク問合せサービス
タスク問合せサービスでは、様々な検索基準(キーワード、カテゴリ、ステータス、ビジネス・プロセス、属性値、タスクの履歴情報など)に基づいて、ユーザーのタスクを問い合せます。

- タスク・メタデータ・サービス
タスク・メタデータ・サービスにより、タスク関連のメタデータ情報を取得するための操作が公開されます。

- アイデンティティ・サービス
アイデンティティ・サービスは、Oracle Application Server 11g のセキュリティ・インフラストラクチャまたはカスタム・ユーザー・リポジトリの上部に位置するWebサービスのシン・レイヤーです。これにより、ユーザーの認証および認可と、ユーザー・プロパティ、ロール、グループ・メンバーシップ、権限のルックアップが可能になります。

- 通知サービス
通知サービスは、電子メール、電話ボイス・メッセージ、IMおよびSMSのいずれかのチャネルを通じて、指定のユーザーに対して特定のコンテンツを含む通知を配信します。詳細は、第34.2項「ヒューマン・ワークフローからの通知」を参照してください。

- ユーザー・メタデータ・サービス
ユーザー・メタデータ・サービスにより、ワークフロー・ユーザー関連のメタデータ(ユーザー作業キュー、プリファレンス、休暇、委任ルールなど)が管理されます。

- ランタイム構成サービス
ランタイム構成サービスは、タスク・サービスのランタイム環境で使用されるメタデータの管理メソッドを提供します。主に、タスク・ペイロード・マップ済属性マッピングの管理をサポートします。

- エビデンス・サービス
エビデンス・サービスはデジタル署名されたワークフロー・タスクの保存と否認防止をサポートします。

図27-6 ワークフロー・サービス・コンポーネント

「図27-6 ワークフロー・サービス・コンポーネント」の説明

図27-7は、サービスとビジネス・プロセス間の相互作用を示しています。

図27-7 ワークフロー・サービスとビジネス・プロセス間の相互作用

「図27-7 ワークフロー・サービスとビジネス・プロセス間の相互作用」の説明

27.4.2 ヒューマン・タスクの使用

ヒューマン・タスクの使用方法には、次の2つがあります。

- BPELプロセスへのヒューマン・タスクの関連付け
ヒューマン・タスクをBPELプロセスに関連付けることができます。BPELプロセスは、一連のアクティビティ(ヒューマン・タスク・アクティビティを含む)とサービスをエンドツーエンドのプロセス・フローに統合します。

- BPMNプロセスへのヒューマン・タスクの関連付け
ヒューマン・タスクをBPMNプロセスに関連付けることができます。BPMNプロセスには、プロセスのフローの一部として他のタイプのBPMNフロー・オブジェクトが含まれる場合があります。ヒューマン・タスクは、BPMNユーザー・タスクの実装です。

- スタンドアロンのヒューマン・タスク
SOAコンポジット・エディタでは、BPELプロセスに関連付けないスタンドアロン・コンポーネントとしてのヒューマン・タスクを作成することもできます。スタンドアロン・ヒューマン・タスク・サービス・コンポーネントは、アプリケーションで自動化されたアクティビティが必要のない環境で役に立ちます。スタンドアロンの場合、クライアントは独自にタスクを作成できます。

27.4.3 サービス・エンジン

実行時、ヒューマン・タスク・サービス・コンポーネントのビジネス・ロジックおよび処理ルールは、ヒューマン・ワークフロー・サービス・エンジンによって実行されます。各サービス・コンポーネント(BPELプロセス、ヒューマン・ワークフロー、デシジョン・サービス(ビジネス・ルール)およびOracle Mediator)には、タスクを実行するための独自のサービス・エンジン・コンテナがあります。すべてのヒューマン・タスク・サービス・コンポーネントは、属しているSOAコンポジット・アプリケーションに関係なく、単一のヒューマン・タスク・サービス・エンジンで実行されます。

ヒューマン・ワークフロー・サービス・エンジンの構成、監視および管理の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

28 ヒューマン・タスクの作成

この章では、ヒューマン・タスクの作成方法、保存方法、およびヒューマン・タスクをBPELプロセスに関連付ける方法について説明します。 また、ヒューマン・タスクの削除方法と、ヒューマン・タスクとBPELプロセスの関連付けを削除する方法についても説明します。

この章には次の項が含まれます:

- 第28.1項「ヒューマン・タスクの概要」

- 第28.2項「ヒューマン・タスクの作成」

- 第28.3項「ヒューマン・タスク・エディタの終了と変更の保存」

- 第28.4項「ヒューマン・タスクとBPELプロセスの関連付け」

ヒューマン・タスク・エディタを使用するには、次の内容も含めてヒューマン・タスクの設計概念を理解する必要があります。

- タスクを割り当てるユーザーのタイプ

- ユーザーをタスクに割り当てる方法(静的、動的またはルールベース)

- ユーザーを割り当てるタスクのモデリングに使用可能なタスクの参加者タイプ

- タスク参加者のリストを作成するためのオプション

- タスクのライフ・サイクル全体に関与する参加者

ヒューマン・タスクの概念の詳細は、第27章「ヒューマン・ワークフローの開始」を参照してください。

ヒューマン・ワークフローの問題のトラブルシューティングの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のヒューマン・ワークフローのトラブルシューティングに関する項を参照してください。

デモ・ユーザー・コミュニティと呼ばれるユーザーおよびグループの組織階層のインストールおよび使用方法の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド 』の付録データベースでのデモ・ユーザー・コミュニティのインストールに関する項を参照してください。

28.1 ヒューマン・タスクの概要

Oracle SOA Suiteには、タスク・メタデータをモデリングするための、ヒューマン・タスク・エディタと呼ばれるグラフィカル・ツールが用意されています。モデリング・プロセスは、次のタスクで構成されています。

- SOAコンポジット・エディタでのヒューマン・タスク・サービス・コンポーネントの作成とモデリング

- BPELプロセスとの関連付け

- 実行時にOracle BPM Worklistにヒューマン・タスクを表示するためのタスク・フォームの生成

この項では、これらのモデリング・タスクの概要について説明し、特定のモデリング手順の参照先を示します。

SOAコンポジット・エディタの使用方法の詳細は、第2章「Oracle SOA Suiteを使用したSOAコンポジット・アプリケーションの開発」を参照してください。

使用可能なサンプルについては、第31章「ヒューマン・ワークフローのチュートリアル」を参照してください

28.1.1 ヒューマン・タスク定義の作成の概要

ヒューマン・タスクのメタデータは、次の2つのいずれかの方法で定義します。

- ヒューマン・タスクを「コンポーネント・パレット」からOracle BPELデザイナのBPELプロセスにドラッグし、自動的に表示される「ヒューマン・タスクの作成」ダイアログで「追加」アイコンをクリックする方法。この操作で、ヒューマン・タスク・サービス・コンポーネントを作成するためのダイアログが表示されます。作成を完了すると、ヒューマン・タスク・エディタが表示されます。

- ヒューマン・タスク・サービス・コンポーネントを「コンポーネント・パレット」からSOAコンポジット・エディタにドラッグする方法。この操作で、ヒューマン・タスク・コンポーネントを作成するためのダイアログが表示されます。作成を完了すると、ヒューマン・タスク・エディタが表示されます。

詳細は、第28.2項「ヒューマン・タスクの作成」を参照してください。

ヒューマン・タスク・エディタでは、ヒューマン・タスク・メタデータ(タスクの結果、ペイロード構造、割当ておよびルーティング・ポリシー、有効期限およびエスカレーション・ポリシー、通知設定など)を指定できます。この情報は、メタデータ・タスク構成ファイル(拡張子.task)に保存されます。また、ワークフロー・パターンによっては、Oracle Business Rulesデザイナを使用して、タスクのルーティング・ポリシーまたは承認者のリストを定義する必要があります。

ヒューマン・タスクの作成後に、ヒューマン・タスクのメタデータを構成するには、ヒューマン・タスク・エディタを使用します。メタデータの詳細および構成手順については、第29章「ヒューマン・タスクの構成」を参照してください。

28.1.2 ヒューマン・タスク定義とBPELプロセスの関連付けの概要

ヒューマン・タスク設定を構成する.taskファイルは、Oracle BPELデザイナで、BPELプロセスに関連付けることができます。図28-1に示すように、構成のためにBPELプロセス・フローにドラッグしたヒューマン・タスクとの関連が作成されます。

図28-1 BPELプロセスへのヒューマン・タスクのドラッグ

「図28-1 BPELプロセスへのヒューマン・タスクのドラッグ」の説明

タスク定義、タスク起案者、タスク優先度、およびBPEL変数に入力データを渡すタスク・パラメータ・マッピングも指定します。さらに、拡張機能も定義できます。たとえば、スコープとグローバル・タスク変数名(デフォルト名をそのまま使用しない場合)、タスク所有者、識別キー、BPELコールバックのカスタマイズ、およびヒューマン・タスクを拡張して他のワークフロー・タスクを追加するかどうかなどです。

関連付けが完了すると、タスク・サービス・パートナ・リンクが作成されます。タスク・サービスでは、タスクの操作に必要な操作が公開されます。

SOAコンポジット・エディタでは、BPELプロセスに関連付けないスタンドアロン・コンポーネントとしてのヒューマン・タスクを作成することもできます。スタンドアロン・ヒューマン・タスク・サービス・コンポーネントは、アプリケーションで自動化されたアクティビティが必要のない環境で役に立ちます。スタンドアロンの場合、クライアントは独自にタスクを作成できます。

詳細は、第28.4項「ヒューマン・タスクとBPELプロセスの関連付け」を参照してください。

28.1.3 タスク・フォームの生成の概要

タスク・フォームは、Oracle Application Development Framework(ADF)を使用して生成できます。このフォームは、実行時にOracle BPM Worklistで操作するタスクの詳細を表示するために使用されます。

タスク・フォームの生成の詳細は、第30章「ヒューマン・タスク用のタスク・フォームの設計」を参照してください。

28.2 ヒューマン・タスクの作成

ヒューマン・タスク・エディタを使用すると、タスクのメタデータを定義できます。エディタでは、ヒューマン・タスク設定(タスクの結果、ペイロード構造、割当ておよびルーティング・ポリシー、有効期限およびエスカレーション・ポリシー、通知設定など)を指定できます。

ヒューマン・タスク・サービス・コンポーネントは、SOAコンポジット・エディタまたはOracle BPELデザイナで作成します。作成後に、ヒューマン・タスク・エディタでコンポーネントを設計します。ヒューマン・タスク・サービス・コンポーネントを作成する方法によって、後でそのコンポーネントをBPELプロセス・サービス・コンポーネントに関連付けるのか、SOAコンポジット・エディタでスタンドアロン・コンポーネントとして存在するのかが決まります。

28.2.1 SOAコンポジット・エディタを使用してヒューマン・タスクを作成する方法

SOAコンポジット・エディタを使用して、ヒューマン・タスクを作成できます。通常、この方法は、スタンドアロン・コンポーネントとして使用するヒューマン・タスクを作成する場合に使用します。

SOAコンポジット・エディタでヒューマン・タスク・サービス・コンポーネントを作成する手順は、次のとおりです。

1. SOAコンポジット・エディタでヒューマン・タスク・サービス・コンポーネントを作成するSOAプロジェクトに進みます。

2. 「コンポーネント・パレット」のリストから「SOA」を選択します。
リストがリフレッシュされ、サービス・コンポーネントおよびサービス・アダプタが表示されます。

3. リストからデザイナに「Human Task」をドラッグします。
「ヒューマン・タスクの作成」ダイアログが表示されます。

4. 「名前」フィールドに、名前を入力します。
入力した名前は、.taskファイル名になります。

5. 「SOAPバインディングを持つコンポジット・サービスの作成」チェック・ボックスに注目します。このチェック・ボックスの選択により、ヒューマン・タスク・サービス・コンポーネントの作成方法が決まります。

1. 後でBPELプロセス・サービス・コンポーネントに関連付けるヒューマン・タスク・サービスを作成する場合は、「SOAPバインディングを持つコンポジット・サービスの作成」チェック・ボックスを選択しないでください。ヒューマン・タスク・サービス・コンポーネントは、BPELプロセス・サービス・コンポーネントに明示的に関連付けられるコンポーネントとして作成されます。図28-2に詳細を示します。

図28-2 ヒューマン・タスク・コンポーネント

「図28-2 ヒューマン・タスク・コンポーネント」の説明

2. ヒューマン・タスク・サービス・コンポーネントをSOAコンポジット・エディタでスタンドアロン・コンポーネントとして作成するには、「SOAPバインディングを持つコンポジット・サービスの作成」チェック・ボックスを選択します。これにより、Simple Object Access Protocol(SOAP)Webサービスと自動的に接続されるヒューマン・タスク・サービス・コンポーネントが作成されます。図28-3に詳細を示します。

図28-3 スタンドアロン・ヒューマン・タスク・コンポーネント

「図28-3 スタンドアロン・ヒューマン・タスク・コンポーネント」の説明

このWebサービスは、外部の顧客に、SOAコンポジット・アプリケーションのヒューマン・タスク・サービス・コンポーネントへのエントリ・ポイントを提供します。

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

SOAコンポジット・エディタでのヒューマン・タスク・サービス・コンポーネントの作成方法の詳細は、第2章「Oracle SOA Suiteを使用したSOAコンポジット・アプリケーションの開発」を参照してください。

28.2.2 Oracle BPELデザイナを使用してヒューマン・タスクを作成する方法

Oracle BPELデザイナを使用して、ヒューマン・タスクを作成できます。通常、この方法は、BPELプロセスで使用するヒューマン・タスクを作成する場合に使用します。

Oracle BPELデザイナでヒューマン・タスクを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で、「SOAコンポーネント」を開きます。

2. リストからデザイナに「Human Task」をドラッグします。
「ヒューマン・タスクの作成」ダイアログが表示されます。

3. 「追加」アイコンをクリックして、ヒューマン・タスクを作成します。

4. 「名前」フィールドに、名前を入力します。
入力した名前は、.taskファイル名になります。

5. 「タイトル」フィールドに、タスクを入力します。

6. 「OK」をクリックします。
ヒューマン・タスク・エディタが表示されます。

注意:

後でBPELプロセスに関連付けるヒューマン・タスクも作成できますが、その場合は、「ファイル」メイン・メニューから「新規」を選択し、次に「SOA層」→「サービス・コンポーネント」→「ヒューマン・タスク」の順に選択してください。

28.2.3 ヒューマン・タスク作成時の処理内容

ヒューマン・タスクが作成されると、次のフォルダとファイルが表示されます。

- ヒューマン・タスク・エディタで指定したヒューマン・タスク設定が、メタデータ・サービス(MDS)リポジトリのメタデータ・タスク構成ファイル(拡張子.task)に保存されます。このファイルは、「アプリケーション・ナビゲータ」の「SOA_Project_Name」→ 「SOAコンテンツ」の下に表示されます。次をダブルクリックすると、このファイル内の設定を再編集できます。

- SOAコンポジット・エディタまたはOracle BPELデザイナの「アプリケーション・ナビゲータ」にある.taskファイル

- SOAコンポジット・エディタ、またはOracle BPELデザイナのBPELプロセスにある「ヒューマン・タスク」アイコン

これにより、.taskファイルがヒューマン・タスク・エディタで再び開きます。

- 作成したヒューマン・タスクを含むヒューマン・タスク・フォルダは、SOAコンポジット・エディタの「構造」ウィンドウに表示されます。

図28-4に、これらのフォルダとファイルを示します。

図28-4 ヒューマン・タスクのフォルダとファイル

「図28-4 ヒューマン・タスクのフォルダとファイル」の説明

使用可能なサンプルについては、第31章「ヒューマン・ワークフローのチュートリアル」を参照してください

28.3 ヒューマン・タスク・エディタの終了と変更の保存

ヒューマン・タスクの変更は、いつでも保存できます。「アプリケーション・ナビゲータ」でメタデータ・タスク構成ファイル(.task)をダブルクリックすると、後でタスクを再編集できます。

ヒューマン・タスク・エディタを終了し、変更内容を保存する手順は、次のとおりです。

1. 「ファイル」メイン・メニューから「保存」を選択するか、「X」記号(図28-5を参照)をクリックして、.taskメタデータ・タスク構成ファイルを閉じます。

図28-5 ファイルのクローズ

「図28-5 ファイルのクローズ」の説明

2. 「X」記号をクリックした場合は、プロンプトで「はい」を選択して変更内容を保存します。

28.4 ヒューマン・タスクとBPELプロセスの関連付け

SOAコンポジット・エディタで作成したヒューマン・タスク・サービス・コンポーネントをBPELプロセスに関連付けるには、次の指示に従います。関連付けが完了すると、Oracle BPELデザイナにタスク・サービス・パートナ・リンクが作成されます。タスク・サービスでは、タスクの実行に必要な操作が公開されます。

ヒューマン・タスクの作成方法の詳細は、第28.2項「ヒューマン・タスクの作成」を参照してください。

28.4.1 ヒューマン・タスクをBPELプロセスに関連付ける方法

ヒューマン・タスク・サービス・コンポーネントをBPELプロセスに関連付ける方法は2種類あります。

- SOAコンポジット・アプリケーションでヒューマン・タスク・サービス・コンポーネントを作成した場合は、Oracle BPELデザイナでヒューマン・タスク・アクティビティをBPELプロセスにドラッグします。次に、「ヒューマン・タスクの作成」ダイアログの「タスク定義」リストから既存のヒューマン・タスク・サービス・コンポーネントを選択します。次に、タスクのタイトル、起案者、パラメータ値およびその他の値を指定します。

- ヒューマン・タスク・サービス・コンポーネントを作成していない場合は、Oracle BPELデザイナのBPELプロセスにヒューマン・タスク・アクティビティをドラッグします。次に、「ヒューマン・タスクの作成」ダイアログの「タスク定義」リストの右側にある「追加」アイコンをクリックします。これで、新しいヒューマン・タスク・サービス・コンポーネントの名前、パラメータおよび結果を指定できます。次に、残りのタスク・メタデータを設計するためのヒューマン・タスク・エディタが開きます。設計完了後、ヒューマン・タスク・エディタを閉じます。

ヒューマン・タスクをBPELプロセスに関連付ける手順は、次のとおりです。

1. SOAコンポジット・エディタに移動します。

2. ヒューマン・タスク・サービス・コンポーネントの.taskファイルを関連付ける先のBPELプロセス・サービス・コンポーネントをダブルクリックします。

3. 「コンポーネント・パレット」で、「SOAコンポーネント」を開きます。

4. 新規のHuman TaskアクティビティをBPELプロセスにドラッグ・アンド・ドロップします。

5. Human Taskアクティビティをダブルクリックします。
「Human Task」ダイアログが表示されます。

6. 「一般」タブの「タスク定義」リストから、ヒューマン・タスクを選択します(図28-6を参照)。

図28-6 「タスク定義」リストの選択

「図28-6 「タスク定義」リストの選択」の説明

ヒューマン・タスク・サービス・コンポーネントの.taskファイルがBPELプロセスに関連付けられます。

注意:

ヒューマン・タスク・アクティビティをBPELプロセスに関連付けて「ヒューマン・タスクの作成」ダイアログを閉じた後は、そのヒューマン・タスク・アクティビティをOracle BPELデザイナでダブルクリックして、このダイアログにいつでも再アクセスできます。

28.4.2 ヒューマン・タスクとBPELプロセス間のワイヤの削除に関する注意事項

BPELプロセスとそのプロセスが起動するヒューマン・タスク・サービス・コンポーネント間のワイヤを削除すると、ヒューマン・ワークフローのinvokeアクティビティがBPELプロセスから削除されます。ただし、アクションを実行する(承認、却下、その他のタスクの結果を含む)「taskSwitch」switchアクティビティはそのまま残ります。このように設計されている理由は、次のとおりです。

- switchアクティビティには、ユーザーが入力したBPELコードが格納されています。

- このswitchは、ワイヤの削除が単に別のヒューマン・タスクを指すことを意図している場合は再利用できます。

- switchの削除はシングルステップのアクションです。

次に、同じ「taskSwitch」switchアクティビティを使用するためにヒューマン・タスク・サービス・コンポーネントをBPELプロセスにドラッグ・アンド・ドロップすると、新しい「taskSwitch」switchアクティビティが作成されます。BPELプロセスに同じ名前の2つのswitchアクティビティが存在する状態になります。どちらを削除するかを判断するには、「taskSwitch」switchアクティビティの承認、却下および他の結果を調査し、修正した古いswitchと新しいswitchを判断する必要があります。

28.4.3 ヒューマン・タスク・アクティビティのタイトル、起案者、優先度およびパラメータ変数の定義方法

図28-7に、ヒューマン・タスクを選択した後に表示される「一般」タブを示します。

図28-7 「Human Task」 — 「一般」タブ(選択後)

「図28-7 「Human Task」 — 「一般」タブ(選択後)」の説明

「Human Task」アクティビティ・ダイアログの「一般」タブでは、表28-1に示す操作を実行できます。

表28-1 「Human Task」 - 「一般」タブ

フィールド

参照先

タスクのタイトル

第28.4.3.1項「タスクのタイトルの指定」

起案者

優先度

第28.4.3.2項「タスク起案者とタスク優先度の指定」

タスク・パラメータ

第28.4.3.3項「タスク・パラメータの指定」

28.4.3.1 タスクのタイトルの指定

タスクのタイトルは、実行時にOracle BPM Worklistに表示されます。これは必須フィールドです。第29.2.2項「タスクのタイトルの指定方法」の説明に従ってヒューマン・タスク・エディタの「一般」セクションの「タスクのタイトル」フィールドに入力したタスクのタイトルは、このフィールドに入力したタイトルによって上書きされます。

タスクのタイトルを指定する手順は、次のとおりです。

1. 「一般」タブの「タスクのタイトル」フィールドに、次のいずれかの方法でタスクのタイトルを入力します。

- タイトルを手動で入力します。

- フィールドの右側にあるアイコンをクリックして「式ビルダー」ダイアログを表示し、タイトルを動的に作成します。

同じタイトルに静的なテキストと動的な式を併用することもできます。動的なテキストを使用するには、テキストの適切な位置にカーソルを置き、右側にあるアイコンをクリックして「式ビルダー」ダイアログを起動します。

28.4.3.2 タスク起案者とタスク優先度の指定

タスク起案者を指定できます。起案者とは、タスクを開始するユーザーです。起案者は、作成したタスクをOracle BPM Worklistで参照したり、特定のタスク(タスクの取消し、一時停止など)を実行することができます。

タスク起案者とタスク優先度を指定する手順は、次のとおりです。

1. 「一般」タブの「起案者」フィールドに、タスク起案者(たとえばjcooper)を入力するか、右側にあるアイコンをクリックして「式ビルダー」ダイアログを表示し、タスク起案者を動的に指定します。このフィールドはオプションです。起案者が指定されていない場合は、「Human Task」ダイアログの「詳細」タブで指定したタスク所有者にデフォルト設定されます。タスク所有者も指定されていない場合、起案者はbpeladminにデフォルト設定されます。

2. 「優先度」リストで1(最高値)から5の優先度値を選択します。これはユーザーが参照するためのフィールドで、このタスクの優先度が実行時に高くなることはありません。優先度を使用して、Oracle BPM Worklistでタスクをソートします。ヒューマン・タスク・エディタの「一般」セクションの「優先度」リストで選択した優先度値は、この優先度値によって上書きされます。

ヒューマン・タスク・エディタの優先度の指定の詳細は、第29.2.2項「タスクのタイトルの指定方法」を参照してください。

28.4.3.3 タスク・パラメータの指定

「タスクのタイトル」および「起案者」フィールドを完了すると、タスク・パラメータ表(図28-8を参照)にタスク・パラメータのリストが表示されます。

図28-8 タスク・パラメータ表

「図28-8 タスク・パラメータ表」の説明

タスク・パラメータを指定する手順は、次のとおりです。

1. 「BPEL変数」列で、「...」をダブルクリックして、タスク・パラメータをBPEL変数にマップします。マップする必要があるのは、入力データを使用するタスク・パラメータのみです。Oracle BPM Worklistから入力された出力データの場合、対応する変数のマップは不要です。
「タスク・パラメータ」ダイアログが表示されます。

2. 「変数」ツリー(図28-9を参照)を開き、適切なタスク変数を選択します。

図28-9 「変数」ツリー

「図28-9 「変数」ツリー」の説明

3. 「OK」をクリックします。
図28-10に示す「Human Task」ダイアログが次のように表示されます。

図28-10 「Human Task」ダイアログ

「図28-10 「Human Task」ダイアログ」の説明

4. ヒューマン・タスク・アクティビティの拡張機能を定義するには、「詳細」タブをクリックし、第28.4.4項「ヒューマン・タスク・アクティビティの拡張機能の定義方法」に進みます。そうしない場合は、「OK」をクリックしてヒューマン・タスク・ダイアログを閉じます。

28.4.4 ヒューマン・タスク・アクティビティの拡張機能の定義方法

図28-11に、「詳細」タブを示します。

図28-11 ヒューマン・タスクの作成 — 「詳細」タブ

「図28-11 ヒューマン・タスクの作成 — 「詳細」タブ」の説明

「Human Task」アクティビティ・ダイアログの「詳細」タブでは、表28-2に示す操作を実行できます。

表28-2 「Human Task」 - 「詳細」タブ

フィールド

参照先

スコープ名

グローバル・タスク変数名

第28.4.4.1項「スコープ名とグローバル・タスク変数名の指定」

所有者

第28.4.4.2項「タスク所有者の指定」

識別キー

第28.4.4.3項「識別キーの指定」

アイデンティティ・コンテキスト

第28.4.4.4項「アイデンティティ・コンテキストの指定」

アプリケーション・コンテキスト

第28.4.4.5項「アプリケーション・コンテキストの指定」

タスク履歴の追加元

第28.4.4.6項「他のヒューマン・タスクのタスク履歴の追加」

28.4.4.1 スコープ名とグローバル・タスク変数名の指定

デフォルトのスコープ名とグローバル・タスク変数名は、ヒューマン・タスク・アクティビティの作成時に自動的に入力されます。ただし、ヒューマン・タスク・アクティビティの作成時にスコープとグローバル変数に名前を指定するためのカスタム名は指定できます。

スコープ名およびグローバル・タスク変数名を指定する手順は、次のとおりです。

1. 「詳細」タブの「スコープ名」フィールドに、生成するBPELスコープの名前を入力します。
このBPELスコープにより、ワークフロー・サービスとBPEL変数の操作を使用する相互作用全体がカプセル化されます。

2. 「詳細」タブの「グローバル・タスク変数名」フィールドに、グローバル・タスク変数名を入力します。
これは、ワークフローの相互作用に使用されるBPELタスク変数の名前です。

28.4.4.2 タスク所有者の指定

タスク所有者は、所有するビジネス・プロセスに属するタスクを参照し、タスク割当て先のユーザーにかわって操作を実行できます。また、所有者は、タスクの再割当て、取消しまたはエスカレートも実行できます。

「Human Task」ダイアログの「一般」タブでタスク起案者を指定しない場合は、ここで指定した所有者にデフォルト設定されます。

タスク所有者を指定する手順は、次のとおりです。

1. 「詳細」タブの「所有者」フィールドに、タスク所有者名を入力するか、右側にあるアイコンをクリックし、「式ビルダー」を使用してこのタスクの所有者を動的に指定します。

28.4.4.3 識別キーの指定

識別キーは、タスクのユーザー定義IDとして使用できます。たとえば、注文書の承認に関するタスクの場合は、タスクの識別キーとして注文書IDを設定できます。タスクは、識別キーを使用してOracle BPM Worklistで検索できます。この属性にデフォルト値はありません。

識別キーを指定する手順は、次のとおりです。

1. 「詳細」タブの「識別キー」フィールドに、必要に応じて識別キー値を入力します。

28.4.4.4 アイデンティティ・コンテキストの指定

複数のレルムが構成されている場合は、タスクに対してアイデンティティ・レルム名が使用されます。同じタスクを実行している複数のレルムから割当て先を指定することはできません。複数のレルムを使用している場合、このフィールドは必須です。

アイデンティティ・コンテキストを指定する手順は、次のとおりです。

1. 「詳細」タブの「アイデンティティ・コンテキスト」フィールドに、値を入力します。

28.4.4.5 アプリケーション・コンテキストの指定

アプリケーションのストライプ名には、タスクで使用されるアプリケーション・ロールが含まれます。

アプリケーション・コンテキストを指定する手順は、次のとおりです。

1. 「詳細」タブの「アプリケーション・コンテキスト」フィールドに、値を入力します。

28.4.4.6 他のヒューマン・タスクのタスク履歴の追加

この機能を使用すると、あるヒューマン・タスクを別のヒューマン・タスクで継続できるようになります。単一のBPELプロセス内に複数の関連タスクを持つシナリオは多数あります。たとえば、次のようなヒューマン・タスクがあると想定します。

- コンピュータに対するマネージャの承認を取得するための調達プロセス

- 間にある複数のBPELアクティビティ

- IT部門がコンピュータを購入するための別のタスク

2番目のタスクの参加者が、マネージャが購入を承認したときに作成された承認履歴、コメントおよび添付ファイルを表示する必要があるとします。このオプションを使用して2番目のタスクを最初のタスクに連鎖すると、BPELプロセスでこれらの異なるタスクをリンクできます。

連鎖したタスクの場合は、新しいタスクのタイトルをタスク・メタデータ(.taskファイル)から設定することはできません。たとえば、既存のタスクAが新しいタスクBに連鎖し、タスクBにヒューマン・タスク・エディタで新しいタイトルが設定されている場合、このタイトルは認識されません。したがって、連鎖したタスクに異なるタイトルが必要な場合、そのタイトルは、タスク・サービスreinitiate操作をコールする前に、タスク・インスタンスに設定する必要があります。BPELプロセスがタスクを開始する場合は、ワークフロー・サービスAPIがコールされる前にタスクのタイトルを設定します。JavaプログラムがワークフローAPIをプログラムでコールしている場合は、タイトルを設定する必要があります。

タスクの履歴を他のタスクに追加する手順は、次のとおりです。

1. 「詳細」タブの「タスク履歴の追加元」チェック・ボックスを選択して、BPELプロセス内の前のワークフロー・タスクを拡張します。このチェック・ボックスを選択すると、前のタスクからタスク履歴、コメントおよび添付ファイルが追加されます。これにより、完全なエンドツーエンドの監査証跡が得られます。
ヒューマン・タスクを別のヒューマン・タスクで続行する場合は、次の情報が新規ワークフローに引き継がれます。

- タスク・ペイロードと、前のワークフローでペイロードに追加された変更内容

- タスク履歴

- 前のワークフローでタスクに追加されたコメント

- 前のワークフローでタスクに追加された添付ファイル

- 期日

「タスク履歴の追加元」リストに、既存のワークフローがすべて表示されます。

2. 特定のヒューマン・タスクを選択し、選択したヒューマン・タスクを拡張し(続け)ます。
たとえば、雇用プロセスを使用して、新規従業員を採用します。各面接担当者は、候補者を雇用するかどうか投票します。投票者の75%が雇用に賛成の場合、候補者は採用されます。このパーセントに満たない場合、候補者は採用されません。候補者が採用されると、HRデータベースにエントリが作成され、人事担当者は雇用プロセスを完了します。人事担当者は、各面接担当者と、候補者に関するコメントを確認する必要があります。このプロセスは、雇用にパラレル参加者タイプを使用することでモデリングできます。候補者が採用された場合は、データベース・アダプタを使用してHRデータベースにエントリが作成されます。その後は、単純ワークフローにパラレル参加者タイプのタスク履歴を追加して、応募申込み書、履歴書および面接担当者のコメントを引き継ぐことができます。この単純ワークフローは、人事担当者に割り当てられます。

3. 使用するペイロードを次の中から選択します。

- 古いペイロードの消去と再作成
このオプションは、この拡張されたワークフローに含まれるヒューマン・タスクのXMLファイル内のペイロード属性が異なる場合に適用できます。たとえば、履歴を含めるヒューマン・タスクのペイロード属性に、他のヒューマン・タスクのペイロードにはない属性が3個ある場合などです。

- 既存のペイロードの使用
このオプションは、この拡張されたワークフローに含まれるヒューマン・タスクのXMLファイル内のペイロード属性が同じ場合に適用できます。

28.4.5 生成されたヒューマン・タスク・アクティビティの表示方法

ヒューマン・タスク・アクティビティのモデリングを完了すると、デザイナでヒューマン・タスクが生成されます。

図28-12に、ワークフロー相互作用のモデリング方法を示します。図28-12は、BPELコールバックがモデリングされていない場合の相互作用も示しています。この場合、タスクが完了した後、完了したタスクを使用してBPELプロセスがコールバックされます。中間のイベントはBPELプロセス・インスタンスに伝播されません。ユーザー・カスタマイズは、最初のassignであるAssignTaskAttributesで実行し、AssignSystemTaskAttributesを変更しないことをお薦めします。

図28-12 ワークフロー相互作用のモデリング

「図28-12 ワークフロー相互作用のモデリング」の説明

図28-13に示すように、Oracle BPELデザイナのヒューマン・タスク・アクティビティの横にある「拡張」アイコンをクリックして、その内容を表示します。

図28-13 ヒューマン・タスク・アクティビティの拡張

「図28-13 ヒューマン・タスク・アクティビティの拡張」の説明

28.4.5.1 BPELコールバックの起動

中間のイベントをBPELプロセス・インスタンスに伝播する必要がある場合は、ヒューマン・タスク・エディタの「イベント」セクションにある「BPELコールバックのタスクとルーティング・カスタマイズを許可」チェック・ボックスを選択します。このオプションが選択されている場合、ワークフロー・サービスはタスクの更新ごとにBPELインスタンス内でコールバックを起動します。次に説明するコールバックがTaskService.wsdlファイルにリストされます。

- onTaskCompleted
このコールバックは、タスクの完了、期限切れ、取消しまたはエラー時に起動されます。

- onTaskAssigned
このコールバックは、次のアクションが原因でタスクが一連の新規の割当て先に割り当てられるときに起動されます。

- 結果の更新

- 現在の割当てのスキップ

- ルーティング・スリップの上書き

- onTaskUpdated
このコールバックは、onTaskCompleteまたはonTaskAssignedコールバックに該当しないタスクに対する他の更新の際に起動されます。これには、情報のリクエスト、情報の発行、エスカレーション、再割当てなどによるタスクの更新が含まれます。

- onSubTaskUpdated
このコールバックは、サブタスクに対する更新の際に起動されます。

図28-14に、コールバックを使用したワークフロー相互作用のモデリング方法を示します。このタスクが開始されると、タスクが完了するまでwhileループを使用してメッセージが受信されます。whileループには、4つのonMessageブランチ(前述したコールバック操作ごとに1つずつ)を備えたpickアクティビティが含まれています。ワークフロー相互作用は、onMessageブランチに何も変化がなくても正常に機能します。つまり、onMessageブランチでのカスタマイズは不要です。

このシナリオでは、ワークフロー・コンテキストはBPELインスタンスで取得されます。このコンテキストは、ワークフロー・サービスとのすべての相互作用に使用できます。たとえば、グループに割り当てられているタスクを再度割り当てる場合、タスク・サービスには、reassignTask操作のワークフロー・コンテキストが必要です。

ユーザー・カスタマイズは、最初のassignであるAssignTaskAttributesで実行し、AssignSystemTaskAttributesを変更しないことをお薦めします。

図28-14 ワークフロー相互作用のモデリング(コールバックを使用)

「図28-14 ワークフロー相互作用のモデリング(コールバックを使用)」の説明

28.4.6 生成されたヒューマン・タスク・アクティビティの変更に関する注意事項

生成されたヒューマン・タスク・アクティビティを変更する必要がある場合は、次の詳細に注意してください。

- ヒューマン・タスクをBPELプロセス・フローに追加するときに、switchアクティビティで自動的に作成されたassignタスクを変更しないでください。かわりに、switchアクティビティの外側に新しいassignアクティビティを追加してください。

- ヒューマン・タスクに渡されるパラメータを変更した場合(たとえば、「タスク・パラメータの編集」ダイアログでパラメータ・タイプを変更した場合)は、BPELプロセス・フローのヒューマン・タスク・アクティビティを開いて「OK」をクリックし、ペイロード変数の参照を修正する必要があります。修正しないと、パラメータ名が変わり、編集不可になります。
ヒューマン・タスク・エディタでタスクの結果を変更した場合は、ヒューマン・タスク・アクティビティを編集し、「OK」をクリックする必要があります。switch caseは、結果に対する変更に基づいて更新されます。

- リソース・バンドルのタスクのタイトルまたはカテゴリの翻訳可能文字列になんらかの変更を加えても、すでに開始されたタスクのインスタンスには変更が表示されません。ただし、変更後に開始されたタスクのインスタンスには変更が表示されます。

- コメントをヒューマン・タスクにコピーするときは、それらのコメントにタスクIDが含まれていないことを確認してください。taskId要素は、空であることが必要です。

28.4.7 ヒューマン・タスクで生成されたパートナ・リンクの削除に関する注意事項

ヒューマン・タスクで生成されたパートナ・リンク(たとえば、「パートナ・リンク」スイムレーンのhuman_task_name.TaskService)を削除すると、ヒューマン・タスクが使用不可になります。パートナ・リンクを削除した場合は、Oracle BPELデザイナでヒューマン・タスク・アクティビティを削除して、再起動する必要があります。

28.4.8 結果ベース・モデリングの定義方法

多くの場合、ビジネス・プロセスのフローは、タスクの結果によって決定されます。ビジネス・ロジックのモデリングを容易にするため、ユーザー・タスクの生成時には、BPELのswitchアクティビティがビルトインのcaseアクティビティとともに生成されます。デフォルトでは、タスクの作成時に選択した結果ごとに1つのcaseブランチが作成されます。また、タスクの取消し、期限切れ、エラー発生の各状態に対応するotherwiseブランチもswitchに生成されます。

28.4.8.1 ペイロード更新の指定

転送されるタスクには、ペイロードが含まれます。ペイロードがビジネス・プロセス変数から設定されている場合は、ペイロードをタスクからソースにコピーして戻すために、copyPayloadFromTaskという名前のassignアクティビティが各caseおよびotherwiseブランチに作成されます。ペイロードが他のXPath式(ora:getNodes(...)など)で表現されている場合は、ペイロードをコピーするためのプロセス変数が存在しないため、このassignは作成されません。ペイロードを変更する必要がない場合、このassignは削除できます。

28.4.8.2 その他のタスクの結果に対応するcase文の使用

デフォルトでは、switchアクティビティには通常の結果のみに対応するcase文が含まれています。その他のタスクの結果は、otherwiseブランチで取得されます。これらの結果は、次のとおりです。

- タスクが取り消されます。

- タスクがエラーになります。

- タスクが期限切れになります。

ビジネス・ロジックをその他の結果にそれぞれ追加する必要がある場合は、case文をこれらの各条件に追加できます。case文は、次のBPELセグメントのように作成できます。その他の結果に対応する各caseアクティビティのXPath条件は、例28-1の中で太字で示されています。

例28-1 その他の結果に対応する各caseアクティビティのXPath条件

<switch name="taskSwitch">
<case condition="bpws:getVariableData('SequentialWorkflowVar1',
'/task:task/task:state') = 'COMPLETED' and
bpws:getVariableData('SequentialWorkflowVar1', '/task:task/task:conclusion') = 'ACCEPT'">
<bpelx:annotation>
<bpelx:pattern>Task outcome is ACCEPT
</bpelx:pattern>
</bpelx:annotation>
...
</case>
<case condition=
"bpws:getVariableData('SequentialWorkflowVar1', '/task:task/task:state') =
'WITHDRAWN'">
<bpelx:annotation>
<bpelx:pattern>Task is withdrawn
</bpelx:pattern>
</bpelx:annotation>
...
</case>
<case condition=
"bpws:getVariableData('SequentialWorkflowVar1', '/task:task/task:state') =
'EXPIRED'">
<bpelx:annotation>
<bpelx:pattern>Task is expired
</bpelx:pattern>
</bpelx:annotation>
...
</case>
<case condition=
"bpws:getVariableData('SequentialWorkflowVar1', '/task:task/task:state') =
'ERRORED'">
<bpelx:annotation>
<bpelx:pattern>Task is errored
</bpelx:pattern>
</bpelx:annotation>
...
</case>
<otherwise>
<bpelx:annotation>
<bpelx:pattern>Task is EXPIRED, WITHDRAWN or ERRORED
</bpelx:pattern>
</bpelx:annotation>
...
</otherwise>
</switch>

28.4.9 添付ファイルのエンコーディングに関する注意事項

テキスト・ファイルをヒューマン・タスクに添付できるようにするには、テキスト添付ファイルのコンテンツがエンコードされているかどうかを記述するフラグを設定する必要があります。このフラグはisContentEncodedという名前です。このフラグを設定するには、ヒューマン・タスクを含む任意のヒューマン・ワークフローのサンプルで、BPELコードをカスタマイズします。このカスタマイズを行うには、サンプル内の.bpelファイルで、次のコピー・ルールをBPEL assignアクティビティ・コードに入力します。

<copy>
<from>true()</from>
<to>$initiateTaskInput.payload/task:task/task:attachment/task:isContentEncoded
</to>
</copy>

このコピー・ルールを入力した後は、ファイルを保存してBPELプロセスの設計を続行するか、または設計が終了している場合にはプロセスをデプロイできます。

29 ヒューマン・タスクの構成

この章では、ヒューマン・タスクの異なるプロパティを構成する方法について説明します。基本的なプロパティ、タスク・ペイロード・データ構造、参加者の割当て、ルーティング・ポリシー、ローカライズ、エスカレーション、通知プリファレンス、アクセス・ポリシーとタスク・アクション、制限、およびJavaコールバックとビジネス・イベント・コールバックについて説明します。

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

- 第29.1項「ヒューマン・タスク・エディタのセクションへのアクセス」

- 第29.2項「タイトル、説明、結果、優先度、カテゴリ、所有者およびアプリケーション・コンテキストの指定」

- 第29.3項「タスク・ペイロードのデータ構造の指定」

- 第29.4項「タスク参加者の割当て」

- 第29.5項「ルーティング・ポリシーの選択」

- 第29.6項「多言語設定とスタイルシートの指定」

- 第29.7項「タスクのエスカレート、期限更新または終了」

- 第29.8項「参加者通知プリファレンスの指定」

- 第29.9項「タスク・コンテンツへのアクセス・ポリシーとタスク・アクションの指定」

- 第29.10項「タスク割当てに対する制限の指定」

- 第29.11項「Javaコールバックまたはビジネス・イベント・コールバックの指定」

- 第29.12項「Oracle Enterprise Content Managementでのドキュメントの格納」

ヒューマン・ワークフローの問題のトラブルシューティングの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のヒューマン・ワークフローのトラブルシューティングに関する項を参照してください。

29.1 ヒューマン・タスク・エディタのセクションへのアクセス

この項では、ヒューマン・タスク・エディタのセクションにアクセスする方法について説明します。各セクションについて簡単に説明し、詳細の参照先を示します。

29.1.1 ヒューマン・タスク・エディタのセクションへのアクセス方法

ヒューマン・タスク・エディタのセクションにアクセスする手順は、次のとおりです。

1. SOAコンポジット・エディタの「ヒューマン・タスク」アイコンをダブルクリックするか、Oracle BPELデザイナの「ヒューマン・タスク」アイコンをダブルクリックして、右上隅にある「編集」アイコンをクリックします。
ヒューマン・タスク・エディタは、図29-1の左側に示す主要なセクションで構成されています。これらのセクションを使用すると、ヒューマン・タスクのメタデータを設計できます。

図29-1 ヒューマン・タスク・エディタ

「図29-1 ヒューマン・タスク・エディタ」の説明

表29-1に、ヒューマン・タスク・エディタのこれらの主要なセクションを使用してワークフロー・タスクを作成する方法を示します。

表29-1 ヒューマン・タスク・エディタ

セクション

説明

参照先

一般

(「タイトル」、「説明」、「結果」、「カテゴリ」、「優先度」、「所有者」および「アプリケーション・コンテキスト」)

タスクの詳細(タイトル、タスクの結果、所有者、その他の属性など)を定義できます。

第29.2項「タイトル、説明、結果、優先度、カテゴリ、所有者およびアプリケーション・コンテキストの指定」

データ

タスク・ペイロード(タスクのデータ)の構造(メッセージ要素)を定義できます。

第29.3項「タスク・ペイロードのデータ構造の指定」

割当て

参加者をタスクに割り当て、そのタスクをワークフローを使用してルーティングするためのポリシーを作成できます。

第29.4項「タスク参加者の割当て」

第29.5項「ルーティング・ポリシーの選択」

プレゼンテーション

次の設定を指定できます。

- 多言語設定

- 添付用WordMLおよびカスタム・スタイル・シート

第29.6項「多言語設定とスタイルシートの指定」

期限

タスクの有効期間、カスタム・エスカレーションJavaクラスおよび期日を指定できます。

第29.7項「タスクのエスカレート、期限更新または終了」

通知

ユーザーにタスクが割り当てられたとき、またはタスクのステータスが変化したときの通知を作成して送信できます。

第29.8項「参加者通知プリファレンスの指定」

アクセス

タスク・コンテンツとタスク・アクションのアクセス・ルール、ワークフロー署名ポリシーおよび割当て制限を指定できます。

第29.9項「タスク・コンテンツへのアクセス・ポリシーとタスク・アクションの指定」

第29.9.2項「ワークフロー・デジタル署名ポリシーの指定方法」

第29.10項「タスク割当てに対する制限の指定」

イベント

コールバック・クラスおよびBPELコールバックでのタスクとルーティングの割当てを指定できます。

第29.11項「Javaコールバックまたはビジネス・イベント・コールバックの指定」

ドキュメント

第29.12項「Oracle Enterprise Content Managementでのドキュメントの格納」

29.2 タイトル、説明、結果、優先度、カテゴリ、所有者およびアプリケーション・コンテキストの指定

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

- 第29.2.1項「タイトル、説明、結果、優先度、カテゴリ、所有者およびアプリケーション・コンテキストの指定方法」

- 第29.2.2項「タスクのタイトルの指定方法」

- 第29.2.3項「タスクの説明の指定方法」

- 第29.2.4項「タスクの結果の指定方法」

- 第29.2.5項「タスク優先度の指定方法」

- 第29.2.6項「タスク・カテゴリの指定方法」

- 第29.2.7項「タスク所有者の指定方法」

- 第29.2.8項「アプリケーション・コンテキストの指定方法」

29.2.1 タイトル、説明、結果、優先度、カテゴリ、所有者およびアプリケーション・コンテキストの指定方法

タイトル、説明、結果、優先度、カテゴリ、所有者およびアプリケーション・コンテキストを指定する手順は、次のとおりです。

1. 「一般」タブをクリックします。
図29-2に、ヒューマン・タスク・エディタの「一般」セクションを示します。

このセクションでは、タスクのタイトル、説明、結果、カテゴリ、優先度、所有者などの詳細を指定できます。

図29-2 ヒューマン・タスク・エディタ — 「一般」セクション

「図29-2 ヒューマン・タスク・エディタ — 「一般」セクション」の説明

表29-2に、「一般」セクションの各サブセクションの構成方法を示します。

表29-2 ヒューマン・タスク・エディタ — 「一般」セクション

サブセクション

参照先

タイトル

第29.2.2項「タスクのタイトルの指定方法」

説明

第29.2.3項「タスクの説明の指定方法」

結果

第29.2.4項「タスクの結果の指定方法」

優先度

第29.2.5項「タスク優先度の指定方法」

カテゴリ

第29.2.6項「タスク・カテゴリの指定方法」

所有者

第29.2.7項「タスク所有者の指定方法」

アプリケーション・コンテキスト

第29.2.8項「アプリケーション・コンテキストの指定方法」

29.2.2 タスクのタイトルの指定方法

タスクのタイトルを指定する手順は、次のとおりです。

タスクのタイトルを入力します(オプション)。開始したタスクにタイトルが設定されていない場合のみ、この値がタイトルにデフォルト設定されます。このタイトルによって、タスクが視覚的に識別されます。タスクのタイトルはOracle BPM Worklistに表示されます。タイトルは、Oracle BPM Worklistで検索することもできます。

1. 「一般」セクションの「タスクのタイトル」フィールドで、タスクのタイトルを指定する方法を選択します。

- プレーン・テキスト: 名前(承認された休暇申請など)を手動で入力します。

- テキストとXPath: 手動によるテキストと動的な式の組合せを入力します。タイトルの一部(注文IDに必要な承認:など)を手動で入力した後、テキストの右側の空白にカーソルを置き、このフィールドの右側にあるアイコンをクリックします。この操作によって、タイトルの残りの部分を動的に作成するための式ビルダーが表示されます。名前の動的部分を完成した後は、「OK」をクリックし、このフィールドに戻ります。完全な名前が表示されます。例:

Approval Required for Order Id: <%/task:task/task:payload/task:orderId%>

式は、実行時にタスク・ペイロードからの正確な注文ID値を使用して解決されます。

第28.4.3.1項「タスクのタイトルの指定」の説明に従って、「ヒューマン・タスクの作成」ダイアログの「一般」タブで「タスクのタイトル」フィールドにタイトルを入力すると、ここで入力したタイトルは上書きされます。

29.2.3 タスクの説明の指定方法

必要に応じて、「一般」セクションの「説明」フィールドにタスクの説明を指定できます。説明を使用すると、タスクに関する補足的な詳細を提供できます。たとえば、タスクのタイトルがコンピュータのアップグレード・リクエストの場合、このフィールドには、コンピュータのモデル、CPUの能力、RAM容量などの補足的な詳細を記載できます。この説明は、Oracle BPM Worklistには表示されません。

29.2.4 タスクの結果の指定方法

タスクの結果により、タスクに可能な結果が取得されます。Oracle BPM Worklistには、ここで指定した結果が実行時に実行可能なタスク・アクションとして表示されます。図29-3に詳細を示します。

図29-3 Oracle BPM Worklist内の結果

「図29-3 Oracle BPM Worklist内の結果」の説明

次のタイプのタスクの結果を指定できます。

- シード済結果の選択

- カスタム結果の入力

タスクの結果には、ここで指定した実際の結果値とは異なる実行時の表示値を割り当てることもできます。これにより、Oracle BPM Worklistでは、結果を異なる言語で表示できます。国際化の詳細は、第29.6.2項「多言語設定の指定方法」を参照してください。

タスクの結果を指定する手順は、次のとおりです。

1. 「一般」セクションの「結果」フィールドの右側にある「検索」アイコンをクリックします。
タスクに予想される結果が「結果ダイアログ」(図29-4を参照)に表示されます。「APPROVE」および「REJECT」はデフォルトで選択されています。

図29-4 結果ダイアログ

「図29-4 結果ダイアログ」の説明

2. 表29-3に示す情報を入力します。

表29-3 結果ダイアログ

フィールド

説明

1つ以上の結果の選択

追加するタスク結果を選択するか、デフォルトの結果を選択解除します。

「追加」アイコン

クリックすると、カスタム結果を追加するダイアログが起動されます。

ダイアログの「名前」フィールドにカスタム名を入力し、「OK」をクリックします。結果が「結果」フィールドに表示されます。

注意: 次のネーミング制限を考慮してください。

- ヒューマン・タスク・エディタの「アクセス」セクションの「アクション」タブにリストされている名前と一致するカスタム名は指定しないでください(たとえば、削除を指定しないでください)。同じ名前を指定すると、実行時に問題が発生する可能性があります。

- 空白を含むカスタム名(たとえば、On Hold)を指定しないでください。空白が含まれていると、Oracle BPM Worklistでカスタム結果にアクセスするときにエラーが発生します。空白を含む結果を指定する必要がある場合は、リソース・バンドルを使用します。詳細は、第34章「ヒューマン・ワークフロー・サービスの概要」を参照してください。

- カスタム・タスクの結果は、大文字か小文字の英字で始まる必要があります。使用できるのは、英字とゼロ(0)から9までの数字のみです。

コメントが必要な結果

クリックすると、実行時にOracle BPM Worklistで割当て先がコメントを追加する結果を選択できます。割当て先は、実行時にタスクを保存しないでコメントを追加し、アクションを実行する必要があります。

デフォルトの結果

この結果に対するデフォルトの結果を選択します。

ここで選択したシード済結果とカスタム結果が、パラレル参加者タイプの「多数決の結果」セクションに表示され、選択できます。

3. 詳細は、第29.4.4.1項「投票結果の指定」を参照してください。

29.2.5 タスク優先度の指定方法

タスクの優先度を指定します。優先度は、1から5までで、1が最高値です。タスクの優先度は、デフォルトで3に設定されています。この優先度値は、「ヒューマン・タスクの作成」ダイアログの「一般」タブで優先度値を選択すると上書きされます。優先度に基づいてタスクをフィルタ処理し、Oracle BPM Worklistで優先度のビューを作成できます。

タスク優先度を指定する手順は、次のとおりです。

1. 「一般」セクションの「優先度」リストで、タスクの優先度を選択します。

「ヒューマン・タスクの作成」ダイアログでの優先度値の指定方法の詳細は、第28.4.3.2項「タスク起案者とタスク優先度の指定」を参照してください。

29.2.6 タスク・カテゴリの指定方法

タスク・カテゴリは、必要に応じて、「一般」セクションの「カテゴリ」フィールドに指定できます。この指定によって、システムで作成されるタスクのカテゴリが決まります。たとえば、ヘルプ・デスク環境では、顧客のリクエストをソフトウェア関連またはハードウェア関連として分類できます。カテゴリはOracle BPM Worklistに表示されます。カテゴリに基づいてタスクをフィルタ処理し、Oracle BPM Worklistでカテゴリのビューを作成できます。

タスク・カテゴリを指定する手順は、次のとおりです。

1. 「一般」セクションの「カテゴリ」フィールドでタスク・カテゴリを指定する方法を選択します。

- 名前別: 名前を手動で入力します。

- 式別: このフィールドの右側にあるアイコンをクリックし、カテゴリを動的に作成するための式ビルダーを表示します。

29.2.7 タスク所有者の指定方法

タスク所有者は、所有するビジネス・プロセスに属するタスクを参照し、割当て済タスクの参加者タイプのいずれかにかわって操作を実行できます。また、所有者は、タスクの再割当て、取消しまたはエスカレートも実行できます。タスク所有者は、タスクのビジネス管理者と見なすことができます。また、タスク所有者は、第28.4.4.2項「タスク所有者の指定」の説明に従って、「ヒューマン・タスクの作成」ダイアログの「詳細」タブで指定することもできます。「詳細」タブで指定されているタスク所有者は、ここで入力するタスク所有者よりも優先されます。

タスク所有者の詳細は、第27.2.1.3項「タスクのステークホルダ」を参照してください。

タスク所有者を指定する手順は、次のとおりです。

1. タスク所有者の指定方法を選択します。

- アイデンティティ・サービスのユーザー・ディレクトリまたはアプリケーション・ロールのリストを介して静的に指定

- XPath式を介して動的に指定
例:

- タスクに、ownerが格納されているpoという名前のペイロード・メッセージ属性がある場合は、/task:task/task:payload/po:purchaseOrder/po:ownerなどのXPath式を指定できます。

- ids:getManager('jstein', 'jazn.com')
jsteinのマネージャがタスク所有者です。

ユーザー、グループおよびアプリケーション・ロールの詳細は、第27.2.1.1.3項「参加者の割当て」を参照してください。

29.2.7.1 ユーザー・ディレクトリまたはアプリケーション・ロールのリストを介したタスク所有者の静的な指定

タスク所有者は、Oracle SOA Suiteで使用するように構成されたユーザー・ディレクトリ(Oracle Internet Directory、Java AuthoriZatioN(JAZN)/XML、LDAPなど)またはアプリケーション・ロールのリストを参照することで選択できます。

ユーザー・ディレクトリまたはアプリケーション・ロールのリストを介してタスク所有者を静的に指定する手順は、次のとおりです。

1. 「一般」セクションの「所有者」フィールドの右側にある最初のリストで、タスク所有者のタイプとして「ユーザー」、「グループ」または「アプリケーション・ロール」を選択します。図29-5に詳細を示します。

注意:

デフォルトで、ヒューマン・タスク内のグループ名は大/小文字を区別します。したがって、Groupを選択した場合に大文字の名前(たとえば、LOANAGENTGROUP)を入力すると、Oracle BPM Worklistの「管理タスク」タブにはタスクが表示されません。グループ名で大/小文字を不可知にする(大/小文字を区別しない)には、システムMBeanブラウザでcaseSensitiveGroupsプロパティをfalseに設定する必要があります。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

図29-5 ユーザー・ディレクトリまたはアプリケーション・ロールの参照によるタスク所有者の指定

「図29-5 ユーザー・ディレクトリまたはアプリケーション・ロールの参照によるタスク所有者の指定」の説明

2. 「一般」セクションの「所有者」フィールドの右側にある2番目のリストで、「静的」を選択します。

3. 選択した所有者のタイプに基づいて、表29-4の手順を参照してください。

表29-4 所有者のタイプ

選択内容

手順

「ユーザー」または「グループ」

4

アプリケーション・ロール

5

4. 「ユーザー」または「グループ」を選択した場合は、図29-6に示す「アイデンティティ・ルックアップ」ダイアログが表示されます。

図29-6 「アイデンティティ・ルックアップ」ダイアログ

「図29-6 「アイデンティティ・ルックアップ」ダイアログ」の説明

ユーザーまたはグループを選択するには、最初にアプリケーション・サーバー接続を作成する必要があります。そのためには「追加」アイコンをクリックします。次の制約に注意してください:

- アイデンティティ・サービス・レルムのリストを取得するOracle WebLogic管理サーバーに対して、アプリケーション・サーバー接続を作成しないでください。これは、この管理サーバーには、実行するアイデンティティ・サービスがないためです。したがって、「アイデンティティ・ルックアップ」ダイアログで検索パターンを使用して検索を実行した場合は、レルム情報もユーザーも表示されません。かわりに、管理対象のOracle WebLogic Serverに対してアプリケーション・サーバー接続を作成してください。

- 完全なドメイン名(myhost.us.example.comなど)を使用して構成されているアプリケーション・サーバー接続を選択する必要があります。ホスト名(myhostなど)のみで構成されている接続を選択すると、使用可能なレルムが「レルム」リストに表示されない可能性があります。既存の接続にドメイン名が含まれていない場合は、次の手順を実行します。

- 「リソース・パレット」で、アプリケーション・サーバー接続を右クリックします。

- 「プロパティ」を選択します。

- 「構成」タブで、適切なドメインをホスト名に追加します。

- 「アイデンティティ・ルックアップ」ダイアログに戻り、接続を再度選択します。

1. アプリケーション・サーバー接続を選択または作成し、選択用のレルムを表示します。レルムには、ユーザーおよびロール(グループ)のポリシー・ストアへのアクセスが用意されています。

2. 検索文字列(jcooper、j*、*など)を入力して所有者を検索します。「ユーザー名」フィールドの右側にある「ルックアップ」アイコンをクリックすると、検索基準と一致するすべてのユーザーがフェッチされます。図29-7に詳細を示します。「選択」をクリックすると、1つ以上のユーザーまたはグループをハイライトして選択できます。

図29-7 レルムが選択された状態の「アイデンティティ・ルックアップ」

「図29-7 レルムが選択された状態の「アイデンティティ・ルックアップ」」の説明

3. ユーザーをハイライトして「階層」をクリックし、そのユーザーの階層を表示します。同様に、「報告先」をクリックすると、選択したユーザーまたはグループの報告先が表示されます。図29-8に詳細を示します。

図29-8 「アイデンティティ・ルックアップ」ダイアログのユーザー階層

「図29-8 「アイデンティティ・ルックアップ」ダイアログのユーザー階層」の説明

4. ユーザーまたはグループをハイライトして「詳細」をクリックし、そのユーザーまたはグループの詳細を表示します。図29-9に詳細を示します。

図29-9 ユーザーまたはグループの詳細

「図29-9 ユーザーまたはグループの詳細」の説明

5. 「OK」をクリックして「アイデンティティ・ルックアップ」ダイアログに戻ります。

6. 「選択」をクリックして、ユーザーを「選択したユーザー」セクションに追加します。

7. 「OK」をクリックしてヒューマン・タスク・エディタに戻ります。
選択内容が「所有者」フィールドに表示されます。

5. 「アプリケーション・ロール」を選択した場合は、「アプリケーション・ロールの選択」ダイアログが表示されます。

1. 「アプリケーション・サーバー」リストで、アプリケーション・ロールが設定されているアプリケーション・サーバーのタイプを選択するか、「追加」アイコンをクリックして接続を作成するための「アプリケーション・サーバー接続の作成」ウィザードを起動します。

2. 「アプリケーション」リストで、アプリケーション・ロールが設定されているアプリケーションを選択します(カスタム・アプリケーションまたはSOAインフラストラクチャ・アプリケーション(soa-infra)など)。

3. 「選択可能」セクションで、適切なアプリケーション・ロールを選択し、「>」ボタンをクリックします。すべてを選択するには、「>>」ボタンをクリックします。図29-10に詳細を示します。

図29-10 アプリケーション・ロール

「図29-10 アプリケーション・ロール」の説明

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

29.2.7.2 XPath式によるタスク所有者の動的な指定

タスク所有者を「式ビルダー」ダイアログで動的に選択できます。

タスク所有者を動的に指定する手順は、次のとおりです。

1. 「一般」セクションの「所有者」フィールドの右側にある最初のリストで、タスク所有者のタイプとして「ユーザー」、「グループ」または「アプリケーション・ロール」を選択します。図29-11に詳細を示します。

図29-11 タスク所有者の動的な指定

「図29-11 タスク所有者の動的な指定」の説明

2. 「一般」セクションの「所有者」フィールドの右側にある2番目のリストで、「XPath」を選択します。

3. アイコンをクリックして、式ビルダーを起動します。
図29-12に示す「式ビルダー」ダイアログが表示されます。

図29-12 式ビルダー

「図29-12 式ビルダー」の説明

4. 使用可能な変数のスキーマおよび関数を参照してタスク所有者を作成します。

5. 「OK」をクリックしてヒューマン・タスク・エディタに戻ります。
選択内容が「所有者」フィールドに表示されます。

詳細は、次を参照してください。

- 「式ビルダー」ダイアログとXPathビルディング・アシスタントの使用手順については、「ヘルプ」をクリックしてください。

- ワークフロー・サービスのDynamic Assignment Function、アイデンティティ・サービス関数およびXPathビルディング・アシスタントの使用手順の詳細は、付録B「XPath拡張関数」を参照してください。

29.2.8 アプリケーション・コンテキストの指定方法

タスクで使用するアプリケーション・ロールが含まれているアプリケーションの名前を指定できます。これによって、アプリケーション・ロールが操作するコンテキストが指定されます。タスクを明示的に作成しなくても結果的に所有した場合は、このコンテキストを設定できます。

1. 「一般」セクションの「アプリケーション・コンテキスト」フィールドに名前を入力します。

29.3 タスク・ペイロードのデータ構造の指定

図29-13に、ヒューマン・タスク・エディタの「データ」セクションを示します。

このセクションでは、XSDファイルに定義されているタスク・ペイロード(タスクのデータ)の構造(メッセージ要素)を指定できます。XSDファイルの要素を表すパラメータを作成します。これにより、ペイロード・データがワークフロー・タスクで使用できるようになります。例:

- ストアフロント・アプリケーションから注文するための注文ID要素に対してパラメータを作成します。

- ヘルプ・デスク・リクエストを作成するための場所、タイプ、問題の説明、重大度、ステータスおよび解決の各要素に対してパラメータを作成します。

タスク・ペイロード・データは、1つ以上の要素またはタイプで構成されます。選択内容に基づいてタスク・ペイロードのXMLスキーマ定義が作成されます。

図29-13 ヒューマン・タスク・エディタ — 「パラメータ」セクション

「図29-13 ヒューマン・タスク・エディタ — 「パラメータ」セクション」の説明

29.3.1 タスク・ペイロード・データ構造の指定方法

タスク・ペイロード・データ構造を指定する手順は、次のとおりです。

1. 「データ」タブをクリックします。

2. 「追加」アイコンをクリックして、ペイロード・タイプを選択します。

- 文字列

- 整数

- ブール

- その他

図29-14に示すように、「タスク・パラメータの追加」ダイアログが表示されます。

図29-14 「タスク・パラメータの追加」ダイアログ

「図29-14 「タスク・パラメータの追加」ダイアログ」の説明

3. 表29-5に記載されている詳細を入力します。

表29-5 「タスク・パラメータの追加」ダイアログのフィールドと値

フィールド

説明

パラメータ・タイプ

「タイプ」または「要素」を選択し、「検索」アイコンをクリックすると、タスク・パラメータ選択用の「タイプ・チューザ」ダイアログが表示されます。

パラメータ名

デフォルト名をそのまま使用するか、カスタムの名前を入力します。このフィールドが表示されるのは、パラメータ・タイプとして「タイプ」を選択した場合のみです。

ワークリストにより編集可能

このチェック・ボックスを選択すると、タスク・ペイロードのこの部分をOracle BPM Worklistで編集できます。たとえば、融資承認タスクの場合、APR属性は、タスクをレビューするユーザーによる更新が必要な場合がありますが、SSNフィールドは編集できません。

参加者が表示および更新できるタスクの部分を決定するアクセス・ルールも指定できます。詳細は、第29.9.1項「タスク・コンテンツへのアクセス・ポリシーの指定方法」を参照してください。

注意:

Oracle BPM Worklistで定義できるのは、単純なXMLタイプ(文字列、整数など)または複雑なタイプ(注文書など)のペイロード・パラメータに対するペイロード・マップ済属性(以前はフレックス・フィールド・マッピングと呼ばれていました)のみです。キーワードを使用してタスクを検索する必要がある場合、またはタスク・コンテンツに基づいてビューまたは委任ルールを定義する必要がある場合は、単純なXMLタイプに基づいたペイロード・パラメータを使用する必要があります。これらの単純タイプは、Oracle BPM Worklistでフレックス列にマップできます。

4. 図29-15に示すように、タイプを選択します。

図29-15 パラメータ・タイプ

「図29-15 パラメータ・タイプ」の説明

5. 「OK」をクリックしてヒューマン・タスク・エディタに戻ります。
選択内容が「データ」セクションに表示されます。

6. 選択内容を編集するには、対象項目を選択して「データ」セクションの右上にある「編集」アイコンをクリックします。

29.4 タスク参加者の割当て

図29-16に、ヒューマン・タスク・エディタの「割当て」セクションを示します。このセクションでは、ビジネス要件を満たす参加者タイプを選択できます。参加者タイプを構成するときは、タスクを操作するユーザー、グループおよびアプリケーション・ロールのリストを作成します。

図29-16 ヒューマン・タスク・エディタ — 「割当て」セクション

「図29-16 ヒューマン・タスク・エディタ — 「割当て」セクション」の説明

単純または複雑なワークフロー・ルーティング・ポリシーを作成するためには、参加者タイプを簡単に組み合せて調整できます。以前に構成したヒューマン・タスクの機能を拡張して、より複雑なワークフローをモデリングすることもできます。

参加者タイプはステージの下のブロックにグループ化されます(たとえば、図29-16ではStage1という名前です)。ステージは、参加者タイプの各ブロックに対して承認プロセスを編成するための1方法です。1つ以上のステージを順番に、またはパラレルで指定できます。各ステージ内で、1つ以上の参加者タイプ・ブロックを順番に、またはパラレルで指定できます。参加者タイプ・ブロックの順序は、[↑]キーと[↓]キーを使用して再配置できます。

例:

- すべての参加者タイプ・ブロックを単一のステージに作成できます(たとえば、注文のすべての内容が全体として承認または却下される注文書リクエスト)。

- より複雑な承認タスクを作成して、1つ以上のステージを含めることができます。たとえば、最初のステージに参加者タイプ・ブロックのグループを配置し、2番目のステージに他のブロックを配置できます。第1ステージに配置した参加者のリストでは明細入力の承認が処理され、第2ステージに配置した参加者のリストではヘッダー入力の承認が処理されます。

参加者タイプごとに、構成タスクに使用するエディタが関連付けられています。割当て先の追加順序は、実行順序を示します。

別のステージ名を指定したり、追加ステージの作成が必要なビジネス要件を指定するには、次の手順を実行します。追加ステージの作成は高度な要件で、自社の環境には必要がない場合があります。

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

- 第29.4.1項「ステージ名を指定してパラレルおよび順次ブロックを追加する方法」

- 第29.4.2項「タスク参加者の割当て方法」

- 第29.4.3項「単一参加者タイプの構成方法」

- 第29.4.4項「パラレル参加者タイプの構成方法」

- 第29.4.5項「シリアル参加者タイプの構成方法」

- 第29.4.6項「FYI参加者タイプの構成方法」

参加者タイプの詳細は、第27.2.1.1項「タスクの割当ておよびルーティング」を参照してください。

29.4.1 ステージ名を指定してパラレルおよび順次ブロックを追加する方法

ステージ名を指定し、パラレルおよび順次ブロックを追加する手順は、次のとおりです。

デフォルトでは、ステージに「Stage1」という名前が指定されます。この名前は、必要に応じて変更できます。

1. 名前をダブルクリックします。
図29-17に示す「編集」ダイアログが表示されます。

図29-17 「編集」ダイアログ

「図29-17 「編集」ダイアログ」の説明

2. 名前を入力し、「OK」をクリックします。

3. 図29-18に示すように、ステージとその参加者タイプ・ブロックを選択します。

4. 「追加」アイコンをクリックします。

図29-18 第2ステージの追加

「図29-18 第2ステージの追加」の説明

5. リストからオプションを選択します(たとえば、「パラレル・ステージ」)。
図29-19に示すように、第2ステージが第1ステージに対してパラレルに追加されます。

図29-19 パラレル・ステージ

「図29-19 パラレル・ステージ」の説明

6. 右側の第2ステージを選択し、「追加」アイコンをクリックします。第2ステージ(たとえば、図29-20ではStage1という名前です)を選択するのではなく、参加者タイプ・ブロック(たとえば、図29-20ではEdit Participantという名前です)のみを選択した場合は、「追加」アイコンの下にあるすべてのオプションが無効になります。

7. 「順次ステージ」を選択します。
順次ステージが、選択したブロックの下に追加されます。

図29-20 順次ステージ

「図29-20 順次ステージ」の説明

これらのブロック内に参加者タイプを作成します。

29.4.2 タスク参加者の割当て方法

タスク参加者を割り当てる手順は、次のとおりです。

1. 「割当て」セクションで、次のいずれかのタスクを実行します。

1. ステージ・ボックスの下のブロックをハイライト表示し、「編集」アイコンをクリックします。タスク参加者を初めて作成すると、このボックスには「<参加者の編集>」のラベルが付きます。
または、

2. ステージ・ボックスの下の参加者ボックスをダブルクリックします。

「参加者タイプの編集」ダイアログが表示されます。このダイアログでは、特定の参加者タイプを選択できます。

2. 「タイプ」リストから、図29-21に示す参加者タイプを選択します。

図29-21 「タイプ」リスト

「図29-21 「タイプ」リスト」の説明

3. 選択内容に応じて、表29-6に示す項を参照してください。

表29-6 参加者タイプ

参加者タイプ

この参加者タイプの説明参照先

この参加者タイプの構成手順参照先

- 単一

- パラレル

- シリアル

- FYI

第27.2.1.1.2「参加者タイプ」

第29.4.3項「単一参加者タイプの構成方法」

第29.4.4項「パラレル参加者タイプの構成方法」

第29.4.5項「シリアル参加者タイプの構成方法」

第29.4.6項「FYI参加者タイプの構成方法」

29.4.3 単一参加者タイプの構成方法

図29-22に、単一参加者タイプの「参加者タイプの編集」ダイアログを示します。図29-23に、展開された「詳細」セクションを示します。

図29-22 参加者タイプの編集 — 「単一」タイプ

「図29-22 参加者タイプの編集 — 「単一」タイプ」の説明

図29-23 参加者タイプの編集 — 「単一」タイプ(展開された「詳細」セクション)

「図29-23 参加者タイプの編集 — 「単一」タイプ(展開された「詳細」セクション)」の説明

タスクに対して動的に割り当てるために、単一参加者をグループ、アプリケーション・ロールまたは参加者リストから選択できます。

単一参加者タイプを構成する手順は、次のとおりです。

1. 「ラベル」フィールドに、この参加者タイプを認識できるラベルを入力します。このラベル(Approval Manager、Primary Reviewersなど)は、タスク定義のすべての参加者の中で一意にする必要があります。
表29-7に、単一参加者タイプの「参加者タイプの編集」ダイアログの各サブセクションの構成方法を示します。

表29-7 参加者タイプの編集 — 「単一」タイプ

サブセクション

参照先

参加者リスト

第29.4.3.1項「単一タスク参加者リストの作成」

割当て済期間の制限の設定(「詳細」セクション)

第29.4.3.2項「タスクの操作に対する時間制限の指定」

この参加者による他の参加者の招待を許可(「詳細」セクション)

第29.4.3.3項「タスクへの他の参加者の招待」

スキップ・ルールの指定(「詳細」セクション)

第29.4.3.4項「タスク参加者のバイパス」

29.4.3.1 単一タスク参加者リストの作成

参加者リストに割り当てられているユーザーは、タスクを操作できます。単一タスク参加者リストでは、タスクの操作に必要なユーザーは1人のみです。単一のユーザーか、このパターンのユーザー、グループまたはアプリケーション・ロールのリストを指定できます。リストが指定されている場合、リスト上のすべてのユーザーがタスクに割り当てられています。このうちの1人が手動でタスクを申告して操作する必要があるか、または割当てパターンによっていずれかのユーザーがリストから自動的に選択されるようにするかを指定できます。1人のユーザーがタスクを操作する場合、このタスクは他の割当て先のタスク・リストから取り消されます。

単一ユーザー参加者やパラレル、シリアルおよびFYIユーザー参加者に対して、次のような様々なタイプのリストを作成できます。

- 値ベースの名前と式のリスト
これらのリストでは、ユーザー、グループまたはアプリケーション・ロールをタスク割当て先として静的または動的に選択できます。

- 値ベースの管理チェーンのリスト
管理チェーンは通常、管理チェーン階層内の複数のユーザーからシリアル承認を得るために使用されます。したがって、このリストは多くの場合、シリアル参加者タイプに有効です。通常は、階層内のすべてのユーザーがタスクを操作する場合に使用します。管理チェーンは単一参加者タイプでも使用できます。ただし、この場合は、階層内のすべてのユーザーにタスクが同時に割り当てられます。1人のユーザーがタスクを操作すると、そのタスクは、他のユーザーから取り消されます。

たとえば、注文書がマネージャに割り当てられているとします。マネージャが承認した注文は、上位のマネージャに割り当てられます。そのマネージャが承認すると、さらに上位のマネージャに割り当てられ、3人のマネージャが注文を承認するまで上位へと順番にルーティングされます。条件付き中途完了を指定した場合は、マネージャのいずれかがリクエストを却下するか、リクエストの期限が切れると、注文は却下されます。それ以外の場合、タスク・フローは引き続きルーティングされます。

- ルールベースの名前と式のリストおよび管理チェーンのリスト
ビジネス・ルールを使用すると、複雑な式でタスク参加者のリストを作成できます。たとえば、$5000未満の注文書リクエストは承認のためにマネージャに送信するというビジネス・ルールを作成します。一方、$5000以上の注文書リクエストは、承認のためにマネージャのマネージャに送信します。ビジネス・ルールの2つの主要な機能は、ファクトとアクション・タイプです。詳細は、第29.5.2項「ビジネス・ルールを使用した詳細タスク・ルーティングの指定方法」を参照してください。

参加者タイプを選択すると、図29-24に示すように、ダイアログ・ボックスを使用してタスク参加者の割当て先(ユーザー、グループまたはアプリケーション・ロール)のリストを作成するためのオプションを選択できます。前述の3つの選択肢(「名前および式」、「管理チェーン」および「ルールベース」)を使用できます。

図29-24 参加者のリストの作成

「図29-24 参加者のリストの作成」の説明

オプションを選択した後は、図29-25に示すように、タスク参加者割当て先(ユーザー、グループまたはアプリケーション・ロール)およびデータ型を動的に割り当てます。

図29-25 タスク割当て先の割当て

「図29-25 タスク割当て先の割当て」の説明

この項では、これらの参加者リストの作成方法について説明します。

29.4.3.1.1 値ベースの名前と式で構成される参加者リストの作成

ユーザー、グループまたはアプリケーション・ロールをタスク参加者として静的または動的に割り当てる方法を選択します。

概念的な情報は、次を参照してください。

- ユーザー、グループおよびアプリケーション・ロールについては、第27.2.1.1.3項「参加者の割当て」を参照してください。

- タスク参加者の静的および動的割当てについては、第27.2.1.2「静的、動的およびルールベースのタスク割当て」を参照してください。

値ベースの名前と式で構成される参加者リストを作成する手順は、次のとおりです。

1. 「参加者のリストの作成で使用」リストから、「名前および式」を選択します。

2. 次のいずれかの操作を行います。

- 「参加者が手動でタスクを申告」を選択します。このオプションを選択すると、タスクはリスト内のすべての参加者に割り当てられます。タスク割当て先の個別のユーザーは、タスクを手動で申告して作業できます。

- 「単一への自動割当て」リストを選択して、「ユーザー」、「グループ」または「アプリケーション・ロール」を選択し、割当てパターンを選択します。
各割当てパターンの詳細を確認し、割当てパターンを選択して構成するには、「割当てパターン」をクリックします。「割当てパターン」ダイアログ・ボックスが表示されます。図29-26に、「割当てパターン」ダイアログ・ボックスの例を示します。

図29-26 「割当てパターン」の選択および構成

「図29-26 「割当てパターン」の選択および構成」の説明

「アプリケーション・サーバー」フィールドでアプリケーション・サーバー接続を指定すると、「割当てパターン」リストに割当てパターンがロードされます。「割当てパターン」リストからいずれかのパターンを選択すると、その選択の説明がテキスト・ボックスに表示されます。

その割当てパターンですべてのタイプのタスクが考慮されるようにするには、「すべてのタイプのタスクを使用してパターン条件を評価」を選択します。それ以外の場合、そのパターンでは、選択ユーザーを決定するときに、このタスク・タイプのみが考慮されます。たとえば、休暇申請タスクを最もビジーでないユーザーに割り当てる場合に、「すべてのタイプのタスクを使用してパターン条件を評価」を選択すると、最もビジーでないユーザーを決定するときに、割り当てられたすべてのタスクが考慮されます。「すべてのタイプのタスクを使用してパターン条件を評価」を選択しない場合は、最もビジーでないユーザーを決定するときに、割り当てられている休暇申請タスクのみが考慮されます。

特定のパターンを使用すると、パターンの評価方法を制御する入力パラメータを指定できる場合があります。たとえば、図29-26に示すように、「最も生産性の高い箇所」パターンを使用すると、生産性が計算される「時間間隔」(日数)を指定できます。入力値は静的な値とするか、またはXPath式を使用して動的に設定できます。パターンによってはパラメータを使用できない場合があります。

3. 「属性の指定で使用」リストから、「値ベース」を選択します。
ダイアログがリフレッシュされ、図29-27に示すように、フィールドが表示されます。

図29-27 値ベースの名前と式

「図29-27 値ベースの名前と式」の説明

4. 「追加」アイコンをクリックし、ユーザー、グループまたはアプリケーション・ロールをタスク参加者として選択します。

「参加者名」表の「識別タイプ」列に、選択したユーザー、グループまたはアプリケーション・ロールが表示されます。

5. 「識別タイプ」列での選択を変更するには、その列をクリックしてドロップダウン・リストを表示します。

6. 「データ型」列で、現在選択されている値をクリックし、値を割り当てるドロップダウン・リストを表示します。

- 名前別: 識別タイプがユーザーまたはグループの場合は、右側の「参照」アイコン(...)をクリックし、アイデンティティ・サービスを介して構成されたユーザーまたはグループを選択するためのダイアログを表示します。アイデンティティ・サービスを使用すると、ユーザー・プロパティ、ロールおよびグループ・メンバーシップのルックアップが可能になります。ユーザー情報は、Oracle Internet DirectoryなどのLDAPサーバーから取得します。IDの検索にはワイルドカード(*)を使用できます。
アプリケーション・ロールを選択する場合は、「参照」アイコンをクリックし、アプリケーション・ロールを選択するための「アプリケーション・ロールの選択」ダイアログを表示します。アプリケーション・ロールを検索するには、最初にアプリケーション・サーバーへの接続を作成する必要があります。検索する際は、ロール名を見つけるためにアプリケーション名を指定する必要があります。タスク定義で参照できるのは、単一のアプリケーション名のみです。割当て先またはタスク所有者は、異なるアプリケーションのアプリケーション・ロールを使用できません。

- 式別: ユーザー、グループまたはアプリケーション・ロールの識別タイプについて、「参照」アイコンをクリックし、「式ビルダー」ダイアログでタスク割当て先を動的に選択します。bpws:getVariableData(...)式またはids:getManager() XPath関数を使用します。

指定した値が「値」列に表示されます。

7. 値を手動で入力するには、「値」列のフィールドをクリックし、値を指定します。

29.4.3.1.2 値ベースの管理チェーンで構成される参加者リストの作成

管理チェーン・パラメータをタスク参加者として静的または動的に割り当てる方法を選択します。

概念的な情報については次を参照してください。

- ユーザー、グループおよびアプリケーション・ロールについては、第27.2.1.1.3項「参加者の割当て」を参照してください。

- タスク参加者の静的および動的割当てについては、第27.2.1.2「静的、動的およびルールベースのタスク割当て」を参照してください。

- 管理チェーンについては、第29.4.3.1項「単一タスク参加者リストの作成」を参照してください。

値ベースの管理チェーンに基づいて参加者リストを作成する手順は、次のとおりです。

1. 「参加者のリストの作成で使用」リストから、「管理チェーン」を選択します。

2. 次のいずれかの操作を行います。

- 「参加者が手動でタスクを申告」を選択します。このオプションを選択すると、タスクはリスト内のすべての参加者に割り当てられます。タスク割当て先の個別のユーザーは、タスクを手動で申告して作業できます。

- 「単一への自動割当て」リストを選択して「ユーザー」を選択し、割当てパターンを選択します。
各割当てパターンの詳細を確認し、割当てパターンを選択して構成するには、「割当てパターン」をクリックします。「割当てパターン」ダイアログ・ボックスが表示されます。図29-26に、「割当てパターン」ダイアログ・ボックスの例を示します。

「アプリケーション・サーバー」フィールドでアプリケーション・サーバー接続を指定すると、「割当てパターン」リストに割当てパターンがロードされます。「割当てパターン」リストからいずれかのパターンを選択すると、その選択の説明がテキスト・ボックスに表示されます。

その割当てパターンですべてのタイプのタスクが考慮されるようにするには、「すべてのタイプのタスクを使用してパターン条件を評価」を選択します。それ以外の場合、そのパターンでは、選択ユーザーを決定するときに、このタスク・タイプのみが考慮されます。たとえば、休暇申請タスクを最もビジーでないユーザーに割り当てる場合に、「すべてのタイプのタスクを使用してパターン条件を評価」を選択すると、最もビジーでないユーザーを決定するときに、割り当てられたすべてのタスクが考慮されます。「すべてのタイプのタスクを使用してパターン条件を評価」を選択しない場合は、最もビジーでないユーザーを決定するときに、割り当てられている休暇申請タスクのみが考慮されます。

特定のパターンを使用すると、パターンの評価方法を制御する入力パラメータを指定できる場合があります。たとえば、図29-26に示すように、「最も生産性の高い箇所」パターンを使用すると、生産性が計算される「時間間隔」(日数)を指定できます。入力値は静的な値とするか、またはXPath式を使用して動的に設定できます。パターンによってはパラメータを使用できない場合があります。

3. 「属性の指定で使用」リストから、「値ベース」を選択します。
ダイアログがリフレッシュされ、図29-28に示すように、フィールドが表示されます。

図29-28 値ベースの管理チェーン

「図29-28 値ベースの管理チェーン」の説明

4. 「開始参加者」表のリストにユーザー、グループまたはアプリケーション・ロールを割り当てる手順の詳細は、第29.4.3.1項「単一タスク参加者リストの作成」のステップ4からステップ7を参照してください。

5. 「最上位の参加者」リストで、タスク参加者のレベル数を割り当てる方法を選択します。

- 役職別: 管理チェーンの最終(最高)承認者の役職を選択します。

- XPath: 「式ビルダー」ダイアログを介して最上位の参加者を動的に入力する場合に選択します。

6. 「レベル数」リストで、最上位参加者を割り当てる方法を選択します。

- 番号別: このタスクに含める管理チェーンのレベル数の値を入力します。たとえば、2を入力して、タスクが最初にユーザーjcooperに割り当てられている場合は、ユーザーjstein(jcooperのマネージャ)とユーザーwfaulk(jsteinのマネージャ)の両方がリストに(最初の割当て先であるjcooperとは別に)含まれます。

- XPath: 「式ビルダー」ダイアログを介して値を動的に入力する場合に選択します。

29.4.3.1.3 ルールセットで構成される参加者リストの作成

ルールセットは、ルールおよびデシジョン表の実行単位を提供します。また、ルールセットはルールの共有単位を提供します。ルールはルールセットに所属します。複数のルールセットを順に実行できます。これはルール・フローと呼ばれます。順番はルールセット・スタックで決まります。順番は、スタック上でルールセットをプッシュおよびポップするルール・アクションによって操作できます。ルールセットでは、ルールの優先度を適用することで、ルールセット内でのルールの起動順序を指定します。また、ルールセットは有効日も指定します。この指定によって、ルールセットは常に有効か、日時の範囲、開始日時または終了日時に基づいて制限されるかが識別されます。

ルールセットの作成方法は、そのルールセットへのアクセス方法に基づいています。これについては、次の項で説明しています。

注意:

ルール・ディクショナリが作成された後は、ファクトを更新できません。

ルールセットに基づいて参加者リストを指定する手順は、次のとおりです。

ビジネス・ルールによって、参加者リストを定義できます。ビジネス・ルールの使用については、2つのオプションがあります。

- ルールによって、特定のリスト・ビルダー(「名前および式」、「管理チェーン」など)のパラメータが定義されます。この場合、タスク・ルーティング・パターンは、特定のリスト・ビルダーを使用するようにモデリングされます。このリスト・ビルダーには、ルールで作成されたパラメータがリストされます。ルールは、Oracle JDeveloperでモデリングされたタイプと同じタイプのリスト・ビルダーを返します。

1. 「参加者のリストの作成で使用」リストから、「名前および式」または「管理チェーン」を選択します。

2. 「属性の指定で使用」リストから、「ルールベース」を選択します。

3. 「ルールセットのリスト」フィールドに、名前を入力します。
図29-29に詳細を示します。

図29-29 ルールセット

「図29-29 ルールセット」の説明

4. 次のいずれかの操作を行います。

- 「参加者が手動でタスクを申告」を選択します。このオプションを選択すると、タスクはリスト内のすべての参加者に割り当てられます。タスク割当て先の個別のユーザーは、タスクを手動で申告して作業できます。

- 「単一への自動割当て」リストを選択して、「ユーザー」、「グループ」または「アプリケーション・ロール」を選択し、割当てパターンを選択します。
各割当てパターンの詳細を確認し、割当てパターンを選択して構成するには、「割当てパターン」をクリックします。「割当てパターン」ダイアログ・ボックスが表示されます。図29-26に、「割当てパターン」ダイアログ・ボックスの例を示します。

「アプリケーション・サーバー」フィールドでアプリケーション・サーバー接続を指定すると、「割当てパターン」リストに割当てパターンがロードされます。「割当てパターン」リストからいずれかのパターンを選択すると、その選択の説明がテキスト・ボックスに表示されます。

その割当てパターンですべてのタイプのタスクが考慮されるようにするには、「すべてのタイプのタスクを使用してパターン条件を評価」を選択します。それ以外の場合、そのパターンでは、選択ユーザーを決定するときに、このタスク・タイプのみが考慮されます。たとえば、休暇申請タスクを最もビジーでないユーザーに割り当てる場合に、「すべてのタイプのタスクを使用してパターン条件を評価」を選択すると、最もビジーでないユーザーを決定するときに、割り当てられたすべてのタスクが考慮されます。「すべてのタイプのタスクを使用してパターン条件を評価」を選択しない場合は、最もビジーでないユーザーを決定するときに、割り当てられている休暇申請タスクのみが考慮されます。

特定のパターンを使用すると、パターンの評価方法を制御する入力パラメータを指定できる場合があります。たとえば、図29-26に示すように、「最も生産性の高い箇所」パターンを使用すると、生産性が計算される「時間間隔」(日数)を指定できます。入力値は静的な値とするか、またはXPath式を使用して動的に設定できます。パターンによってはパラメータを使用できない場合があります。

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

- ルールによって、リスト・ビルダーおよびリスト・ビルダー・パラメータが定義されます。この場合は、リスト自体がルールを使用して作成されます。ルールによって、リスト・ビルダーとパラメータが定義されます。

1. 「参加者のリストの作成で使用」リストから、「ルールベース」を選択します。

2. 「ルールセットのリスト」フィールドに、名前を入力します。
図29-30に詳細を示します。

図29-30 ルールセット

「図29-30 ルールセット」の説明

3. 次のいずれかの操作を行います。

- 「参加者が手動でタスクを申告」を選択します。このオプションを選択すると、タスクはリスト内のすべての参加者に割り当てられます。タスク割当て先の個別のユーザーは、タスクを手動で申告して作業できます。

- 「単一への自動割当て」リストを選択して、「ユーザー」、「グループ」または「アプリケーション・ロール」を選択し、割当てパターンを選択します。
各割当てパターンの詳細を確認し、割当てパターンを選択して構成するには、「割当てパターン」をクリックします。「割当てパターン」ダイアログ・ボックスが表示されます。図29-26に、「割当てパターン」ダイアログ・ボックスの例を示します。

「アプリケーション・サーバー」フィールドでアプリケーション・サーバー接続を指定すると、「割当てパターン」リストに割当てパターンがロードされます。「割当てパターン」リストからいずれかのパターンを選択すると、その選択の説明がテキスト・ボックスに表示されます。

その割当てパターンですべてのタイプのタスクが考慮されるようにするには、「すべてのタイプのタスクを使用してパターン条件を評価」を選択します。それ以外の場合、そのパターンでは、選択ユーザーを決定するときに、このタスク・タイプのみが考慮されます。たとえば、休暇申請タスクを最もビジーでないユーザーに割り当てる場合に、「すべてのタイプのタスクを使用してパターン条件を評価」を選択すると、最もビジーでないユーザーを決定するときに、割り当てられたすべてのタスクが考慮されます。「すべてのタイプのタスクを使用してパターン条件を評価」を選択しない場合は、最もビジーでないユーザーを決定するときに、割り当てられている休暇申請タスクのみが考慮されます。

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

ルール・ディクショナリが未作成で、参加者リストを簡単に指定するために複数のルール関数とファクトが事前にシードされている場合は、いずれのオプションでもルール・ディクショナリが作成されます。ルール・ディクショナリには、参加者リストを作成するための次のルール関数がシードされています。

- CreateResourceList

- CreateManagementChainList

Taskファクトはタスク・サービスによってアサートされ、ルール条件のベースとなります。

ルール・ディクショナリが作成されると、Oracle Business Rulesデザイナが表示されます。

1. ルール条件をモデリングします。アクション部分で、前述の関数のいずれか1つをコールして、リストの作成を完了します。図29-31に詳細を示します。

図29-31 ビジネス・ルール

「図29-31 ビジネス・ルール」の説明

ルール関数のパラメータは、Oracle JDeveloperモデリングでのパラメータに類似しています。Oracle JDeveloperでの構成に加え、Oracle Business Rulesデザイナでは、次の属性について複数の追加オプションを使用できます。

- responseType: レスポンス・タイプが「REQUIRED」の場合は、割当て先がタスクを操作する必要があります。それ以外の場合、割当てはFYI割当てに変換されます。

- ruleName: ルール名で割当ての理由を作成できます。

- lists: このオブジェクトは、作成されるリストの所有者です。このオプションをクリックすると、事前にアサートされたファクトのListsオブジェクトが表示されます。このオブジェクトはパラメータとして使用されます。

図29-32に、管理チェーンベースの参加者を指定するルールの例を示します。

図29-32 ビジネス・ルール

「図29-32 ビジネス・ルール」の説明

複数のルールが起動されると、最も高い優先度のルールに基づいて作成されたリスト・ビルダーが選択されます。

29.4.3.2 タスクの操作に対する時間制限の指定

ユーザー、グループまたはアプリケーション・ロールには、タスクの操作に関して与えられる時間を指定できます。ユーザー、グループまたはロールが指定の時間内に操作しないと、ヒューマン・タスク・エディタの「期限」セクション(ルーティング・スリップ・レベル)で設定したグローバルなエスカレーションおよび期限更新ポリシーが適用されます。たとえば、タスクをエスカレートするようにグローバル・ポリシーが設定されているときに、この参加者が指定の期間内に操作しない場合、そのタスクは必要に応じてマネージャまたは他のユーザーにエスカレートされます。

タスク操作に時間制限を指定する手順は、次のとおりです。

1. 図29-33に示すように、単一タイプの「参加者タイプの編集」ダイアログの「詳細」セクションを開きます。

図29-33 「参加者タイプの編集」の「詳細」セクション — 「単一」タイプ

「図29-33 「参加者タイプの編集」の「詳細」セクション — 「単一」タイプ」の説明

2. 「割当て済期間の制限の設定」を選択します。

3. 時間を指定します。
ヒューマン・タスク・エディタの「期限」セクションで、グローバルなエスカレーションおよび期限更新ポリシーを設定する方法の詳細は、第29.7項「タスクのエスカレート、期限更新または終了」を参照してください。

29.4.3.3 タスクへの他の参加者の招待

このワークフロー内の次の割当て先にタスクをルーティングする前に、他の参加者をタスク割当て先として招待できます。たとえば、承認ワークフローがJames CooperからJohn Steinbeckに進むとします。このオプションを選択すると、James Cooperは最初にIrving StoneにルーティングしてからJohn Steinbeckにルーティングするように指定できます。

これは非定型ルーティングとも呼ばれます。このオプションが選択されている場合は、実行時にOracle BPM Worklistの「アクション」リストに「非定型ルート」が追加されます。

注意:

FYI参加者の上下に非定型割当て先を追加しないでください。

他の参加者をタスクに招待する手順は、次のとおりです。

1. 図29-33に示すように、単一タイプの「参加者タイプの編集」ダイアログの「詳細」セクションを開きます。

2. 「この参加者による他の参加者の招待を許可」を選択します。

29.4.3.4 タスク参加者のバイパス

特定の条件が満たされている場合は、タスク参加者(ユーザー、グループまたはアプリケーション・ロール)をバイパスできます。たとえば、ユーザーが発行した出張旅費レポートが特定の金額を下回っている場合、マネージャによる承認は不要です。

タスクをバイパスする手順は、次のとおりです。

1. 図29-33に示すように、単一タイプの「参加者タイプの編集」ダイアログの「詳細」セクションを開きます。

2. 「スキップ・ルールの指定」を選択します。
これにより、「式ビルダー」ダイアログにアクセスして条件を作成するためのアイコンが表示されます。

タスク参加者をバイパスするための式は、ブール値に評価される必要があります。たとえば、/task:task/task:payload/order:orderAmount < 1000は、参加者をスキップするための有効なXPath式です。

動的なルール条件の作成の詳細は、第29.5.2項「ビジネス・ルールを使用した詳細タスク・ルーティングの指定方法」を参照してください。

29.4.4 パラレル参加者タイプの構成方法

図29-34および図29-35は、「パラレル」ダイアログの上部および下部のセクションを示しています。

この参加者タイプは、パラレルで作業する複数のユーザーが同時にタスクを操作する(たとえば、雇用に関するフローで複数のユーザーが応募者の採否を票決する)必要がある場合に使用します。結果が有効になるために必要な得票率(多数決や満場一致など)を指定します。

たとえば、ビジネス・プロセスでは、雇用プロセス中に面接担当者全員からフィードバックを収集し、それをとりまとめて各面接担当者に採用または不採用リクエストを割り当てます。最後に、面接担当者の大多数が不採用ではなく採用に投票すると、候補者が雇用されます。

図29-34 参加者タイプの編集 — 「パラレル」タイプ(ダイアログの上部セクション)

「図29-34 参加者タイプの編集 — 「パラレル」タイプ(ダイアログの上部セクション)」の説明

図29-35 参加者タイプの編集 — 「パラレル」タイプ(ダイアログの下部セクション)

「図29-35 参加者タイプの編集 — 「パラレル」タイプ(ダイアログの下部セクション)」の説明

参加者をパラレル参加者タイプに割り当てる手順は、次のとおりです。

1. 「ラベル」フィールドに、この参加者タイプを認識できるラベルを入力します。このラベル(Approval Manager、Primary Reviewersなど)は、タスク定義のすべての参加者の中で一意にする必要があります。
表29-8に、パラレル参加者タイプの「参加者タイプの編集」ダイアログの各サブセクションの構成方法を示します。

表29-8 参加者タイプの編集 — 「パラレル」タイプ

サブセクション

参照先

投票結果

第29.4.4.1項「投票結果の指定」

参加者リスト

第29.4.4.2項「パラレル・タスク参加者リストの作成」

割当て済期間の制限の設定(「詳細」セクション)

第29.4.4.3項「タスクの操作に対する時間制限の指定」

この参加者による他の参加者の招待を許可(「詳細」セクション)

第29.4.4.4項「タスクへの他の参加者の招待」

スキップ・ルールの指定(「詳細」セクション)

第29.4.4.5項「タスク参加者のバイパス」

29.4.4.1 投票結果の指定

「デフォルトの結果」リストで選択したデフォルトの結果よりも優先される投票結果を指定できます。この結果が有効になるのは、必要なパーセントに到達した場合です。結果はこの表にリストされている順序で評価されます。

グループ投票詳細を指定する手順は、次のとおりです。

1. パラレル・タイプの「参加者タイプの編集」ダイアログの「投票結果」セクションに移動します。

2. 「投票結果」列のリストから、タスクの結果(「Any」、「ACCEPT」、「REJECT」、第29.2.4項「タスクの結果の指定方法」で指定した他の結果など)を選択します。
「Any」結果を使用すると、実行時に結果を動的に決定できます。たとえば、「Any」を選択して、結果パーセントを60に設定した場合は、実行時に60%に到達した結果が最終投票結果になります。割当て先の60%が結果の却下に投票すると、その結果は却下されます。

3. 「結果タイプ」列のリストから、最終タスクの結果の決定方法を選択します。

- 式別: XPath式を使用して詳細を動的に指定します。

- パーセンテージ別: このタスクの結果が有効であると決定するパーセント値を指定します。

4. ステップ3での選択内容に基づいて、「値」列のリストに値を指定します。

- 「式別」を選択した場合は、このフィールドの右側にある「参照」アイコンをクリックし、式を作成するための「式ビルダー」ダイアログを表示します。

- 「パーセンテージ別」を選択した場合は、このタスクの結果が有効になるために必要なパーセント値を入力します。たとえば、多数決(51)や満場一致(100)などです。たとえば、予想される2つの結果(「ACCEPT」および「REJECT」)と、5つのサブタスクがあるとします。2つのサブタスクが承認され、3つが却下された場合に、承認に必要なパーセントが50に設定されていると、タスクの結果は却下になります。図29-36に詳細を示します。
この機能は非決定性です。たとえば、サブタスクが2つある場合に30%を選択することは無意味です。

図29-36 「投票結果」セクション

「図29-36 「投票結果」セクション」の説明

5. 「追加」アイコンをクリックして、追加の結果を指定します。

6. 「デフォルトの結果」リストで、同意パーセントの値に達しない場合にこのタスクで有効にするデフォルトの結果を選択するか、XPath式を入力します。この状況が発生するのは、得票数が同数の場合、またはタスクの有効期限が切れる前に応答しない参加者がいる場合です。第29.2.4項「タスクの結果の指定方法」で「結果」ダイアログに入力したシード済結果とカスタム結果は、このリストに表示されます。

7. さらにグループ投票詳細を指定します。

- 最小のパーセントに達するとただちに投票結果がトリガーされます
このサブセクションが選択されている場合は、完了したサブタスクの結果に基づいてタスクの結果を早期に計算でき、保留中のサブタスクの取消しが可能になります。たとえば、4人のユーザーがタスクの操作に割り当てられており、デフォルトの結果が「APPROVE」で、同意パーセントが「50」に設定されているとします。最初の2人のユーザーがタスクを承認した場合は、同意パーセント値に達しているため、第3および第4のユーザーがタスクを操作する必要はありません。

- 結果をトリガーせずにすべての投票の完了まで待機
このサブセクションが選択されている場合、ワークフローはすべてのレスポンスを待機してから結果を開始します。

8. コメントおよび添付ファイルをすべてのグループ協力者またはワークフロー参加者と共有するには、「添付ファイルとコメントの共有」を選択します。 通常、この情報はOracle BPM Worklistのフッター・リージョンに表示されます。

29.4.4.2 パラレル・タスク参加者リストの作成

参加者のリストに割り当てられているユーザーは、タスクを操作できます。様々なタイプのリストを作成できます。

- 値ベースの名前と式のリスト

- 値ベースの管理チェーンのリスト

- ルールベースの名前と式のリスト

- ルールベースの管理チェーンのリスト

- ルールベースのリンク

これらの参加者リストの作成方法の詳細は、第29.4.3.1項「単一タスク参加者リストの作成」を参照してください。

29.4.4.3 タスクの操作に対する時間制限の指定

ユーザー、グループまたはアプリケーション・ロールには、タスクの操作に関して与えられる時間を指定できます。ユーザー、グループまたはロールが指定の時間内に操作しないと、ヒューマン・タスク・エディタの「期限」セクション(ルーティング・スリップ・レベル)で設定したグローバルなエスカレーションおよび期限更新ポリシーが適用されます。たとえば、タスクをエスカレートするようにグローバル・ポリシーが設定されているときに、この参加者が指定の期間内に操作しない場合、そのタスクは必要に応じてマネージャまたは他のユーザーにエスカレートされます。

タスク操作に時間制限を指定する手順は、次のとおりです。

1. パラレル・タイプの「参加者タイプの編集」ダイアログの「詳細」セクション(図29-35を参照)で、「詳細」アイコンをクリックしてセクションを開きます。

2. 「割当て済期間の制限の設定」を選択します。

3. 時間を指定します。

ヒューマン・タスク・エディタの「期限」セクションで、グローバルなエスカレーションおよび期限更新ポリシーを設定する方法の詳細は、第29.7項「タスクのエスカレート、期限更新または終了」を参照してください。

29.4.4.4 タスクへの他の参加者の招待

このワークフロー内の次の割当て先にタスクをルーティングする前に、他の参加者をタスク割当て先として招待できます。たとえば、承認ワークフローがJames CooperからJohn Steinbeckに進むとします。このオプションを選択すると、James Cooperは最初にIrving StoneにルーティングしてからJohn Steinbeckにルーティングするように指定できます。

他の参加者をタスクに招待する手順は、次のとおりです。

1. パラレル・タイプの「参加者タイプの編集」ダイアログの「詳細」セクションで、「詳細」アイコンをクリックしてセクションを開きます(開いていない場合)。

2. 「この参加者による他の参加者の招待を許可」を選択します。

29.4.4.5 タスク参加者のバイパス

特定の条件が満たされている場合は、タスク参加者(ユーザー、グループまたはアプリケーション・ロール)をバイパスできます。たとえば、ユーザーが発行した出張旅費レポートが特定の金額を下回っている場合、マネージャによる承認は不要です。

タスク参加者をバイパスする手順は、次のとおりです。

1. パラレル・タイプの「参加者タイプの編集」ダイアログで、「スキップ・ルールの指定」チェック・ボックスを選択します。
これにより、「式ビルダー」ダイアログにアクセスして条件を作成するためのアイコンが表示されます。式はブール値に評価される必要があります。

参加者をスキップするための有効なXPath式は、第29.4.3.4項「タスク参加者のバイパス」を参照してください。

29.4.5 シリアル参加者タイプの構成方法

図29-37に、「シリアル」ダイアログを示します。図29-38に、展開された「詳細」セクションを示します。

この参加者タイプを使用すると、ワークフロー用に参加者の順序リストを作成できます。たとえば、文書をJohn、MaryおよびScottに順番にレビューさせる場合は、この参加者タイプを使用します。シリアル参加者タイプの場合、参加者はユーザーまたはグループのリストになります。

図29-37 参加者タイプの編集 — 「シリアル」タイプ

「図29-37 参加者タイプの編集 — 「シリアル」タイプ」の説明

図29-38 参加者タイプの編集 — 「シリアル」タイプ(展開された「詳細」セクション)

「図29-38 参加者タイプの編集 — 「シリアル」タイプ(展開された「詳細」セクション)」の説明

シリアル参加者タイプを構成する手順は、次のとおりです。

1. 「ラベル」フィールドに、この参加者タイプを認識できるラベルを入力します。このラベル(Approval Manager、Primary Reviewersなど)は、タスク定義のすべての参加者の中で一意にする必要があります。
表29-9に、シリアル参加者タイプの「参加者タイプの編集」ダイアログの各サブセクションの構成方法を示します。

表29-9 参加者タイプの編集 — 「シリアル」タイプ

サブセクション

参照先

参加者リスト

第29.4.5.1項「シリアル・タスク参加者リストの作成」

割当て済期間の制限の設定(「詳細」セクション)

第29.4.5.2項「タスクの操作に対する時間制限の指定」

シリアル参加者のレベルでタスク有効期間を指定する場合、その期間が切れたときにそのシリーズ内の次の参加者にタスクが移動しません。むしろ、そのタスク全体が期限切れになります。

この参加者による他の参加者の招待を許可(「詳細」セクション)

第29.4.5.3項「タスクへの他の参加者の招待」

スキップ・ルールの指定(「詳細」セクション)

第29.4.5.4項「タスク参加者のバイパス」

29.4.5.1 シリアル・タスク参加者リストの作成

参加者のリストに割り当てられているユーザーは、タスクを操作できます。様々なタイプのリストを作成できます。

- 値ベースの名前と式のリスト

- 値ベースの管理チェーンのリスト

- ルールベースの名前と式のリスト

- ルールベースの管理チェーンのリスト

- ルールベースのリスト

これらの参加者リストを作成する方法は、第29.4.3.1項「単一タスク参加者リストの作成」を参照してください。

29.4.5.2 タスクの操作に対する時間制限の指定

ユーザー、グループまたはアプリケーション・ロールには、タスクの操作に関して与えられる時間を指定できます。ユーザー、グループまたはロールが指定の時間内に操作しないと、ヒューマン・タスク・エディタの「期限」セクション(ルーティング・スリップ・レベル)で設定したグローバルなエスカレーションおよび期限更新ポリシーが適用されます。たとえば、タスクをエスカレートするようにグローバル・ポリシーが設定されているときに、この参加者が指定の期間内に操作しない場合、そのタスクは必要に応じてマネージャまたは他のユーザーにエスカレートされます。

タスク操作に時間制限を指定する手順は、次のとおりです。

1. シリアル・タイプの「参加者タイプの編集」ダイアログの「詳細」セクション(図29-37を参照)で、「詳細」アイコンをクリックしてセクションを開きます。

2. 「割当て済期間の制限の設定」をクリックします。

3. 時間を指定します。

注意:

シリアル参加者のレベルでタスク有効期間を指定する場合、指定した期限に達したときにそのシリーズ内の次の参加者にタスクが移動しません。むしろ、そのタスク全体が期限切れになります。

ヒューマン・タスク・エディタの「期限」セクションで、グローバルなエスカレーションおよび期限更新ポリシーを設定する方法の詳細は、第29.7項「タスクのエスカレート、期限更新または終了」を参照してください。

29.4.5.3 タスクへの他の参加者の招待

このワークフロー内の次の割当て先にタスクをルーティングする前に、他の参加者をタスク割当て先として招待できます。たとえば、承認ワークフローがJames CooperからJohn Steinbeckに進むとします。このオプションを選択すると、James Cooperは最初にIrving StoneにルーティングしてからJohn Steinbeckにルーティングするように指定できます。

他の参加者をタスクに招待する手順は、次のとおりです。

1. シリアル・タイプの「参加者タイプの編集」ダイアログの「詳細」セクションで、「詳細」アイコンをクリックしてセクションを開きます(まだ開いていない場合)。

2. 「この参加者による他の参加者の招待を許可」を選択します。

注意:

シリアル参加者タイプでは、次のようにして他の参加者を招待できます。

- 不定参加者をいつでも招待できることをグローバルに指定します。この場合、順次ワークフロー内であっても、承認者は順次ワークフローのあらゆるレベルで他の参加者を招待できます。

- ワークフローの特定の地点のみで他の参加者を臨時的に招待できることを指定します。この場合、他の不定参加者は、1つのシリーズが完了したときにのみ招待されます。

29.4.5.4 タスク参加者のバイパス

特定の条件が満たされている場合は、タスク参加者(ユーザー、グループまたはアプリケーション・ロール)をバイパスできます。たとえば、ユーザーが発行した出張旅費レポートが特定の金額を下回っている場合、マネージャによる承認は不要です。

タスク参加者をバイパスする手順は、次のとおりです。

1. シリアル・タイプの「参加者タイプの編集」ダイアログの「詳細」セクションで、「スキップ・ルールの指定」チェック・ボックスを選択します。
これにより、「式ビルダー」ダイアログにアクセスして条件を作成するためのアイコンが表示されます。式はブール値に評価される必要があります。

参加者をスキップするための有効なXPath式は、第29.4.3.4項「タスク参加者のバイパス」を参照してください。

29.4.6 FYI参加者タイプの構成方法

図29-39に、「FYI」タイプの「参加者タイプの編集」ダイアログを示します。このダイアログの下部には、「参加者除外リスト」が含まれています(図29-39には表示されていません)。

この参加者タイプは、ユーザーにタスクを送信するが、ビジネス・プロセスでユーザーのレスポンスを待機しない場合に使用します。プロセスは単に継続されます。FYIはタスクの結果を直接左右できませんが、コメントを提供したり添付ファイルを追加できる場合があります。

たとえば、雑誌の購読契約の更新期日がきているとします。ユーザーが期日までに現在の購読契約を取り消さない場合は、購読契約の期限が更新されます。リクエストが期限切れになるかユーザーが操作するまで、このユーザーに週に1回ずつリマインダが送信されます。

図29-39 参加者タイプの編集 — 「FYI」タイプ

「図29-39 参加者タイプの編集 — 「FYI」タイプ」の説明

FYI参加者タイプを構成する手順は、次のとおりです。

1. 「ラベル」フィールドに、この参加者タイプを認識できるラベルを入力します。このラベル(Approval Manager、Primary Reviewersなど)は、タスク定義のすべての参加者の中で一意にする必要があります。

29.4.6.1 FYIタスク参加者リストの作成

参加者のリストに割り当てられているユーザーは、タスクを操作できます。様々なタイプのリストを作成できます。

- 値ベースの名前と式のリスト

- 値ベースの管理チェーンのリスト

- ルールベースの名前と式のリスト

- ルールベースの管理チェーンのリスト

- ルールベースのリスト

これらの参加者リストを作成する方法は、第29.4.3.1項「単一タスク参加者リストの作成」を参照してください。

29.5 ルーティング・ポリシーの選択

参加者タイプを構成してヒューマン・タスク・エディタに戻った後に、図29-40に示す「タスクは開始参加者から最終参加者へ移行します」アイコンをクリックします。

図29-40 ヒューマン・タスク・エディタ — 「割当て」セクション

「図29-40 ヒューマン・タスク・エディタ — 「割当て」セクション」の説明

これによって、図29-41に示す「割当ての構成」ダイアログが表示され、ワークフローを介してタスクをルーティングする方法を指定できます。

図29-41 割当ての構成

「図29-41 割当ての構成」の説明

表29-10に、用意されているルーティング・ポリシー・メソッドを示します。

表29-10 ルーティング・ポリシー・メソッド

ルーティング・ポリシーの選択

このポリシーを使用する環境

項

指定した順序で全参加者へタスクをルート

このポリシーを選択すると、次のサブオプションを指定できます。

タスクは、参加者の表示順に従って各参加者にルーティングする必要があります。これは事前に決定されているデフォルトのルーティングです。たとえば、雇用プロセスで、3人のユーザーが面接して検討結果を提供する場合、タスクは人事部に送信されます。

第29.5.1項「指定した順序でタスクを全参加者にルーティングする方法」

- 全参加者による他の参加者の招待を許可

参加者は、タスクを承認する際に、ユーザーまたはグループを次の割当て先(臨時)として選択できます。

第29.5.1.1項「全参加者による他の参加者の招待の許可」

- 参加者が次を選択するとタスクを完了: <結果>

タスクの参加者が、タスクを承認または却下できます。したがって、他の参加者にタスクが送信されずにワークフローが終了します。たとえば、マネージャが却下した注文書は、レビューのためにそのマネージャのマネージャに送信されません。

第29.5.1.2項「他の参加者へのタスクのルーティングの停止」

- パラレル・サブタスクで早期完了を有効化

注意: このオプションは、複数のステージがあり、参加者がパラレルで作業する環境を意図しています。

参加者はサブタスクをパラレルで実行し、あるグループでのサブタスクの却下または承認が、他のグループでのサブタスクの却下または承認の原因になることはありません。

第29.5.1.3項「パラレル・サブタスクでの早期完了の有効化」

- 早期完了するサブタスクの親タスクを完了

注意: このオプションは、複数のステージがあり、参加者がパラレルで作業する環境を意図しています。

参加者はサブタスクをパラレルで実行し、あるグループでのサブタスクの却下または承認が、他のグループでのサブタスクの却下または承認の原因となります。

第29.5.1.4項「早期完了するサブタスクの親サブタスクの完了」

拡張ルールの使用

タスクのルーティング先の参加者は、モデリングしたビジネス・ルール・ロジックによって判断されます。たとえば、融資申請タスクは、融資エージェント、そのマネージャおよびシニア・マネージャを経由するように設計されているとします。この場合、融資エージェントは承認したが、そのマネージャが却下すると、その融資申請タスクは融資エージェントに戻されます。

第29.5.2項「ビジネス・ルールを使用した詳細タスク・ルーティングの指定方法」

外部ルーティングを使用

タスクの参加者は動的に決定されます。たとえば、ある企業のルールでは、タスク参加者は、実行時に決定しバックエンド・データベースから取得する必要があります。

第29.5.3項「外部ルーティングの使用方法」

「割当て」タブ

参加者に、失敗したタスクがリカバリの目的で割り当てられます。

第29.5.4項「エラー割当て先の構成方法」

29.5.1 指定した順序でタスクを全参加者にルーティングする方法

選択された参加者全員がタスクをレビューするように選択できます。これは、表示された順序で各参加者にタスクがルーティングされるデフォルト・ルーティングです。このタイプのルーティングは、ステート・マシン・ベースのルーティングとは異なります。

指定した順序でタスクを全参加者にルーティングする手順は、次のとおりです。

1. 「割当て」セクションで、「タスクは開始参加者から最終参加者へ移行します」の右側にあるアイコンをクリックします。

2. 図29-42に示すように、リストから「指定した順序で全参加者へタスクをルート」を選択します。

図29-42 全参加者へのタスクのルーティング

「図29-42 全参加者へのタスクのルーティング」の説明

ルーティング・ポリシーの定義方法は、次の各タスクを参照してください。

- 全参加者による他の参加者の招待の許可

- 参加者の選択によるタスクの完了

- パラレル・サブタスクでの早期完了の有効化

- 早期完了するサブタスクの親サブタスクの完了

29.5.1.1 全参加者による他の参加者の招待の許可

このチェック・ボックスは、以前の10.1.3 Oracle BPEL Process Managerリリースの非定型ワークフロー・パターンに相当します。これは、参加者が1人以上存在する場合に適用されます。この場合は、各ユーザーがタスクの承認時に次の割当て先としてユーザーまたはグループを選択します。

全参加者に対して他の参加者の招待を許可する手順は、次のとおりです。

1. 「割当て」セクションで、「タスクは開始参加者から最終参加者へ移行します」の右側にあるアイコンをクリックします。

2. 「指定した順序で全参加者へタスクをルート」を選択します。

3. 「全参加者による他の参加者の招待を許可」チェック・ボックスを選択し、このタスクの割当て先がこのワークフローの次の割当て先にルーティングする前に、他の参加者をワークフローに招待できるようにします。

注意:

FYI参加者の上下に非定型割当て先を追加しないでください。

29.5.1.2 他の参加者へのタスクのルーティングの停止

ワークフローの他の参加者に関係なくタスクを早期完了させる条件を指定できます。

たとえば、経費レポートがマネージャに送信されてから取締役に送信されるとします。最初の参加者(マネージャ)がレポートを却下した場合は、次の参加者(取締役)に送信せずにワークフローを終了できます。

条件付き中途完了を設定する手順は、次のとおりです。

1. 「割当て」セクションで、「タスクは開始参加者から最終参加者へ移行します」の右側にあるアイコンをクリックします。

2. リストから「指定した順序で全参加者へタスクをルート」を選択します。

3. 「参加者が次を選択するとタスクを完了: <結果>」チェック・ボックスを選択します。
「中途完了の詳細」ダイアログが表示されます。

タスクの中途完了を指定するには、次の2つの方法があります。

- 結果

- XPath式のルーティング条件

結果を指定した場合は、選択したタスクの結果が発生すると、そのタスクが完了します。結果とルーティング条件の両方を指定した場合は、ワークフロー・サービスにより2つの条件の論理OR演算子が実行されます。

4. 図29-43に示すように、適切な結果を選択して「>」ボタンをクリックします。すべてを選択するには、「>>」ボタンをクリックします。

図29-43 中途完了の詳細

「図29-43 中途完了の詳細」の説明

5. 「ルーティング条件」フィールドの右側にあるアイコンをクリックして「式ビルダー」ダイアログを表示すると、このダイアログで、このタスクを中途完了させる条件を動的に作成できます。たとえば、ユーザーが発行した出張旅費レポートが特定の金額を下回っている場合、マネージャによる承認は不要です。
早期完了のXPath式は、少なくとも一人のユーザーのタスク操作が完了するまで評価されません。

6. 早期完了を有効化するには、「パラレル・サブタスクで早期完了を有効化」をクリックします。詳細は、第29.5.1.3項「パラレル・サブタスクでの早期完了の有効化」を参照してください。

7. 親タスクの早期完了を有効化するには、「早期完了するサブタスクの親タスクを完了」をクリックします。詳細は、第29.5.1.4項「早期完了するサブタスクの親サブタスクの完了」を参照してください。

8. 「OK」をクリックしてヒューマン・タスク・エディタに戻ります。
「参加者が次を選択するとタスクを完了: <結果>」チェック・ボックスの右側にあるアイコンをクリックすると、この情報を編集できます。

29.5.1.3 パラレル・サブタスクでの早期完了の有効化

このオプションは、次の環境で使用できます。

- 複数のステージがあり、参加者のグループがパラレルでサブタスクを実行する環境。

- 1グループの参加者がサブタスクを承認または却下する環境。この場合、同じグループ内の他の参加者によるタスクの操作は停止されます。ただし、他のパラレル・グループによるサブタスクの操作は停止されません。このグループでは、タスクの操作が続行されます。

たとえば、それぞれが別のステージにある2つのパラレル・サブグループがあるとします。一方のグループは、注文の明細を操作します。他方のグループは、同じ注文のヘッダーを操作します。第1グループの参加者ApproveLines.Participant2が明細を却下すると、第1グループの他のすべてのタスク参加者は、タスクの操作を停止します。一方、第2パラレル・グループは注文ヘッダーの操作を続行します。このシナリオでは、タスク全体は早期完了しません。図29-44に詳細を示します。

図29-44 パラレル・サブタスクの早期完了

「図29-44 パラレル・サブタスクの早期完了」の説明

29.5.1.4 早期完了するサブタスクの親サブタスクの完了

このオプションは、次の環境で使用できます。

- 複数のステージがあり、参加者のグループがパラレルでサブタスクを実行する環境。

- 1グループの参加者がサブタスクを承認または却下する環境。この場合、同じグループ内の他の参加者によるタスクの操作は停止されます。これにより、他のパラレル・グループによるサブタスクの操作も停止されます。

たとえば、図29-44に示すように、それぞれが別のステージにある2つのパラレル・サブグループがあるとします。一方のグループは、注文の明細を操作します。他方のグループは、同じ注文のヘッダーを操作します。第1グループの参加者ApproveLines.Participant2が明細を却下すると、第1グループの他のすべてのタスク参加者は、タスクの操作を停止します。さらに、第2パラレル・グループも注文ヘッダーの操作を停止します。このシナリオでは、タスク全体が早期完了します。

29.5.2 ビジネス・ルールを使用した詳細タスク・ルーティングの指定方法

複雑なワークフロー・ルーティング・シナリオを作成するには、拡張ルーティング・ルールを使用します。参加者タイプ(単一、パラレル、シリアル、FYI)は、中途完了、割当て先のスキップなどの基本条件を使用して、一連のユーザーから別のユーザーに直線的なフローを作成する際に使用されます。ただし、多くの場合、ワークフローの複数のユーザー間で、より複雑な前後へのルーティングを実行することが必要になります。1つの選択肢は、これらのタスクの調整として、BPELプロセスを使用することです。もう1つの選択肢は、ビジネス・ルールを使用して宣言的にルーティングを指定することです。この項では、ヒューマン・タスク・エディタとビジネス・ルールを使用して、これらの複雑な相互作用をモデリングする方法について説明します。

29.5.2.1 ビジネス・ルールを使用した詳細タスク・ルーティングの概要

ステート・マシン・ルーティング・ルールは、Oracle Business Rulesを使用して定義できます。このアクションによって、評価されるOracle Business Rulesを作成できます。

- その前に、ルーティング・スリップ・タスク参加者がタスクの結果を設定します。

- その後に、タスクが次のルーティング・スリップ参加者に割り当てられます。

このアクションにより、第29.5.1項「指定した順序でタスクを全参加者にルーティングする方法」に説明されている標準的なタスク・ルーティング・スリップのメソッドを上書きし、タスクに対して複雑なルーティング動作を作成できます。

Oracle Business Rulesを使用して、ビジネス・オブジェクト(ファクトと呼ばれる)に依存する一連のルール(ルールセットと呼ばれる)を定義し、実行するアクションを判断します。

29.5.2.2 ファクト

ファクトとは、特定のビジネス・データを備えたオブジェクトです。ルーティング・スリップの割当て先がタスクの結果を設定するたびに、タスクを次の割当て先に自動的にルーティングするかわりに、タスク・サービスが次のステップを実行します。

- ファクトをデシジョン・サービスにアサートします。

- 拡張ルーティング・ルールセットを実行します。

ルールでは、アサートされたファクトの値をテストし、TaskActionファクト・タイプに値を設定することで、ルーティングの動作を指定できます。

表29-11は、タスク・サービスによりアサートされたファクト・タイプを示しています。

表29-11 タスク・サービスによりアサートされたファクト・タイプ

ファクト・タイプ

説明

Task(タスク)

このファクトには、ワークフロー・タスク・インスタンスの現在の状態が含まれます。すべてのタスク属性がタスクに対してテストされます。タスク・ファクトには現在のタスク・ペイロードも含まれます。このファクトを使用すると、ペイロード値およびタスク属性値との照合テストを構築できます。

PreviousOutcome(前回の結果)

このファクトには、前回のタスクの結果と、結果を設定した割当て先が記述されます。このファクトには、次の属性が含まれます。

- actualParticipant(実際の参加者): タスクの結果を設定した参加者の名前(jsteinなど)。

- logicalParticipant(論理上の参加者): タスクの結果を設定する責任があるルーティング・スリップ参加者の論理名またはラベル(assignee1など)。

- outcome(結果): 設定された結果(approve、rejectなど)。

- level(レベル): 前の参加者が管理チェーンの一部の場合、この属性にはそのレベルが記録されます(1は、チェーンの第1レベルを示します)。他の参加者タイプの場合、値は-1です。

- totalNumberOfApprovals(承認の総数): 現在のタスクの結果を設定したユーザーの総数。

TaskAction(タスク・アクション)

このファクトは、書込みルールのテストを意図したものではありません。かわりに、このファクトはルールセットによって更新され、タスクのルーティング方法を示すためにタスク・サービスに返されます。ルールでTaskActionファクトを直接更新することはできません。かわりに、第29.5.2.3項「アクション・タイプ」に記載されているRL関数の1つをコールします。これらの関数によって、TaskActionファクトの更新が適切な値で処理されます。

ワークフロー・ルーティング・ルールのみで使用できるファクト・タイプと、ワークフロー参加者ルールのみで使用できるファクト・タイプがあります。表29-12に、それぞれのタイプを使用できるルールを示します。

表29-12 ファクト・タイプの使用

ファクト・タイプ

ルーティング・ルールでの使用

参加者ルールでの使用

Task(タスク)

はい

はい

PreviousOutcome(前回の結果)

はい

いいえ

TaskAction(タスク・アクション)

はい

いいえ

Lists(リスト)

いいえ

はい

RoutingSlipObjectFactory(ルーティング・スリップ・オブジェクト・ファクトリ)

いいえ

はい

ResourceListType(リソース・リスト・タイプ)

いいえ

はい

ManagementChainListType(管理チェーン・リスト・タイプ)

いいえ

はい

ResourceType(リソース・タイプ)

いいえ

はい

ParameterType(パラメータ・タイプ)

いいえ

はい

AutoActionType(自動アクション・タイプ)

いいえ

はい

ResponseType(レスポンス・タイプ)

いいえ

はい

29.5.2.3 アクション・タイプ

タスクのルーティング方法をタスク・サービスに指示するために、ルールでは多数のタスク・アクションの1つを指定できます。この指定は、ルール・セッションにアサートされたTaskActionファクトを更新することによって実行されます。ただし、ルールでTaskActionファクトを直接更新することはできません。かわりに、アクションRL関数の1つをコールし、TaskActionファクトをパラメータとして渡す必要があります。これらの関数によって、ファクトへの実際の更新が処理されます。たとえば、先に進むアクションを指定するには、call GO_FORWARD(TaskAction)をルールのアクション部分に追加する必要があります。

ステート・マシン・ルーティング・ルールが評価されるたびに、ルールは表29-13に記載されているアクションの1つを実行します。

表29-13 ビジネス・ルールのアクション

アクション

説明

パラメータ

GO_FORWARD

ルーティング・スリップの次の参加者に進みます(デフォルト動作)。

なし

PUSHBACK

ルーティング・スリップの前の参加者(直前にタスクの結果を設定した前の参加者)に戻ります。

注意: プッシュバックは、グループ投票ではなく単一承認者で機能するように設計されています。グループ投票(またはパラレル)シナリオを含むステージから別ステージへのプッシュバックは、許可されません。同様に、単一の割当て先からグループ投票(またはパラレル)シナリオにプッシュバックすることもできません。

なし

GOTO

ルーティング・スリップでの特定の参加者に進みます。

participant'

タスクをルーティングする参加者のラベルを識別する文字列です(Approver1など)。

COMPLETE

ルーティングを終了し、タスクを完了します。タスクが完了としてマークされ、ルーティングがさらに要求されることはありません。

なし

ESCALATE

タスク・エスカレーション・ポリシーに従って(通常は現在の割当て先のマネージャに)タスクをエスカレートし、再割当てします。

なし

29.5.2.4 サンプル・ルールセット

この項では、簡単な例でカスタム・ルーティングの動作を実装するルールの使用方法を説明します。費用請求の承認を管理するためのヒューマン・ワークフロー・タスクが作成されます。タスクの結果には、承認と却下があります。タスク定義には、ExpenseRequestペイロードの要素が含まれます。ExpenseRequestのフィールドの1つは、費用請求の総額です。タスクのルーティング・スリップは、単一参加者3人(assignee1、assignee2、assignee3)で構成されます。

デフォルトでは、タスクは各割当て先にルーティングされ、各割当て先ではタスクの承認または却下が選択されます。

このデフォルト動作のかわりに、次のように必要なルーティング動作を指定します。

- 費用請求の総額が$100未満の場合は、参加者のいずれか1人の承認が必要です。それ以外の場合は、3人全員が承認する必要があります。

- 参加者のいずれかが費用請求を却下した場合は、再評価のために前の参加者に費用請求を戻す必要があります。最初の参加者によって却下されると、費用請求は却下され完了としてマークされます。

次のルールを使用して、この動作を実装します。拡張ルーティング・ルールに対してルール・ディクショナリが生成されている場合、その拡張ルーティング・ルールはデフォルトのGO_FORWARD動作を実装するテンプレート・ルールを使用して作成されます。Oracle Business Rulesデザイナで「ルールのコピー」を右クリックして選択すると、このルールを編集し、テンプレート・ルールをコピーできます。

金額が$100より大きく、前の割当て先がタスクを承認した場合は、各割当て先に順番にタスクをルーティングするルールを指定する必要はありません。これは、ルールセットのルールがトリガーされない場合の戻り先のデフォルト動作となります。

- 早期承認ルール(図29-45):

図29-45 早期承認ルール

「図29-45 早期承認ルール」の説明

- 却下されたルールのプッシュバック(図29-46):

図29-46 却下されたルールのプッシュバック

「図29-46 却下されたルールのプッシュバック」の説明

- Assignee1が却下したルールの完了(図29-47):

図29-47 Assignee1が却下したルールの完了

「図29-47 Assignee1が却下したルールの完了」の説明

反復設計の詳細は、Oracle SOA Suiteサンプルで使用可能なworkflow-106-IterativeDesignのサンプルを参照してください。

29.5.2.5 リンク・ディクショナリのサポート

ヒューマン・ワークフローで、ビジネス・ルール・アーティファクトが2つのルール・ディクショナリに格納されるようになりました。これは、アプリケーションをカスタマイズする必要があるシナリオで役立ちます。たとえば、アプリケーションのバージョン1を作成して、顧客に発送するとします。顧客は、Oracle SOAコンポーザを使用してアプリケーションのルールセットをカスタマイズできます。このカスタマイズされたルールセットが、ベース・ルール・ディクショナリとは別のルール・ディクショナリに格納されるようになりました。カスタマイズされたルールセットが格納されるルール・ディクショナリは、ベース・ディクショナリのルールとリンクしています。後でアプリケーションのバージョン2を発送するときに、製品に導入された追加の変更がベース・ルール・ディクショナリに含まれている場合があります。顧客が以前に行ったルールセットのカスタマイズによる変更も保持されているため、ベース・ディクショナリの新規の変更で使用できます。ルールを使用するタスクを含む既存のアプリケーションが開かれたときに、そのルールが1つのディクショナリを使用する古い形式の場合、ルールは自動的にアップグレードされ、次の2つのルール・ディクショナリに分割されます。

- ベース・ディクショナリ

- カスタム・ディクショナリ

カスタマイズの詳細は、第46章「SOAコンポジット・アプリケーションのカスタマイズ」を参照してください。

29.5.2.6 拡張ルーティング・ルールの作成

拡張ルーティング・ルールを作成する手順は、次のとおりです。

1. 「割当て」セクションで、「タスクは開始参加者から最終参加者へ移行します」の右側にあるアイコンをクリックします。

2. リストから「拡張ルールの使用」を選択します。

3. 図29-48に示すように、「ルール・ディクショナリ」の右側にある「編集」アイコンをクリックします。

図29-48 ルール・ディクショナリの作成

「図29-48 ルール・ディクショナリの作成」の説明

これにより、Oracle Business Rulesデザイナ(図29-49を参照)が開始されます。ルール・デザイナにはリポジトリが事前にシードされており、必要なすべてのファクト定義が格納されています。ディクショナリ用のデシジョン・サービス・コンポーネントが作成され、タスク・サービス・コンポーネントに関連付けられます。

図29-49 ヒューマン・タスク・ルール・ディクショナリ

「図29-49 ヒューマン・タスク・ルール・ディクショナリ」の説明

4. Oracle Business Rulesを使用して、タスクのステート・マシン・ルーティング・ルールを定義します。
これにより、ヒューマン・タスク内で完全に接続されたデシジョン・サービスと、関連するルール・リポジトリとデータ・モデルが自動的に作成されます。

ビジネス・ルールの詳細は、次のドキュメントを参照してください。

- 第29.5.2.4項「サンプル・ルールセット」(ヒューマン・タスク・ルールセットの例)

- 『Oracle Fusion Middleware Oracle Business Rulesユーザーズ・ガイド』

- 『Oracle Fusion Middleware Oracle Business Rulesランゲージ・リファレンス・ガイド』

29.5.3 外部ルーティングの使用方法

ワークフローの参加者を動的に決定する外部ルーティング・サービスを構成します。このルーティング・ポリシーを指定すると、他の参加者タイプはすべて無視されます。タスクのルーティングを決定する参加者タイプ(単一承認者、シリアル承認者、パラレル承認者など)のリストを実行時に提供するのは、外部ルーティング・サービスとみなされています。

このオプションは、タスク割当て先の決定にルーティング・ルールを使用しない場合に使用します。この場合、タスク割当てのすべてのロジックは、外部ルーティング・サービスに委任されます。

注意:

「割当ての構成」ダイアログで「外部ルーティングを使用」を選択した場合は、Javaクラスを指定し、「OK」をクリックして終了します。次回、このダイアログを開くと、ドロップダウン・リストには、他の2つの選択肢(「指定した順序で全参加者へタスクをルート」および「拡張ルールの使用」)は表示されません。3つの選択肢すべてに再度アクセスするには、割当て全体を削除する必要があります。

外部ルーティングを使用する手順は、次のとおりです。

1. 「割当て」セクションで、「タスクは開始参加者から最終参加者へ移行します」の右側にあるアイコンをクリックします。

2. リストから「外部ルーティングを使用」を選択します。

3. 図29-50に示すように、「編集」アイコンをクリックします。

図29-50 「外部ルーティングを使用」の選択

「図29-50 「外部ルーティングを使用」の選択」の説明

図29-51に示すように、外部ルーティング・ダイアログが表示されます。

図29-51 外部ルーティング・ダイアログ

「図29-51 「外部ルーティングを使用」ダイアログ」の説明

4. 「クラス名」フィールドで、完全修飾クラス・ファイル名(org.mycompany.tasks.RoutingServiceクラス名など)を入力します。このクラスは、次のインタフェースを実装している必要があります。

oracle.bpel.services.workflow.task.IAssignmentService

5. 表29-14に示すように、外部サービスに渡す名前またはXPath式別に、名前/値ペアのパラメータを追加します。

表29-14 外部ルーティング

フィールド

説明

名前別

「名前」フィールドに名前を入力し、「値」フィールドに値を入力します。

式別

名前を入力し、フィールドの右側にあるアイコンをクリックして「式ビルダー」ダイアログを表示し、値を動的に入力します。

6. 「追加」アイコンをクリックし、その他の名前/値ペアのパラメータを追加します。

29.5.4 エラー割当て先の構成方法

タスクは、間違った割当てなどの理由でエラーになることがあります。このようなエラーが発生すると、タスクは、修正処理を実行するエラー割当て先に割り当てられます。リカバリ可能なエラーは、次のとおりです。

- すべての参加者に対して無効なユーザーおよびグループ。

- 割当て先および有効期間に関連する無効なXPath式。

- 有効期限のエスカレーション・エラー。

- エスカレーション・ポリシーの評価

- 期限更新ポリシーの評価

- 管理チェーンの計算。

- 動的割当てルールの評価。タスクは、現在はエラーではありませんが、現在のユーザーに割り当てられたままです。したがって、リカバリ可能です。

- 動的割当ての循環割当て(「ユーザーA」→「ユーザーB」→「ユーザーA」など)。タスクは、現在はエラーではありませんが、チェーンの最終ユーザーに割り当てられたままです。したがって、リカバリ可能です。

次のエラーは、リカバリ可能ではありません。このような場合、タスクは終了状態ERROREDに移動します。

- 無効なタスク・メタデータ

- 読取り不可のタスク・メタデータ。

- ステート・マシン・ルールからの無効なGOTO参加者。

- 割当てサービスが見つからない場合。

- 割当てサービスによるエラー。

- カスタム・エスカレート関数の評価。

- パラレルのデフォルト結果とパーセント値に対する無効なXPathおよび値。

ワークフローのエラー割当て先は、ワークフロー・タスクのモデリング中に指定できます。エラー割当て先が指定されている場合は、その割当て先が評価されてタスクが割り当てられます。実行時にエラー割当て先が指定されていない場合は、管理ユーザーが検索され、アラート状態のタスクが割り当てられます。エラー割当て先は、次のいずれかのアクションを実行します。

- 非定型ルート
タスクを、そのタスクに実際に割り当てられているユーザーにルーティングします。非定型ルーティングを使用すると、タスクを順番に、またはパラレルなどでユーザーにルーティングできます。注意: FYI参加者の上下に非定型割当て先を追加しないでください。

- 再割当て
タスクを、このタスクに実際に割り当てられているユーザーに再割当てします。

- エラー・タスク
このタスクを修正できないことを示します。

エラー割当て先の評価中にエラーがあると、タスクはエラー発生としてマークされます。

このダイアログでは、割当てエラーが発生した場合にタスク割当て先となるユーザーまたはグループを指定できます。

エラー割当て先を構成する手順は、次のとおりです。

1. 「割当て」セクションで、「タスクは開始参加者から最終参加者へ移行します」の右側にあるアイコンをクリックします。

2. 「割当て」タブをクリックします。

3. 図29-52に示すように、「追加」アイコンをクリックして、レビューアまたはエラー割当て先を割り当てます。

図29-52 エラー割当て詳細

「図29-52 エラー割当て詳細」の説明

4. 「追加」アイコンをクリックし、このタスクに参加するユーザー、グループまたはアプリケーション・ロールを選択します。
「開始参加者」表の「識別タイプ」列に、選択したユーザー、グループまたはアプリケーション・ロールが表示されます。

5. ユーザー、グループまたはアプリケーション・ロールを選択する手順の詳細は、第29.4.3.1項「単一タスク参加者リストの作成」のステップ5から7を参照してください。

6. パラレル参加者タイプを使用する場合は、サブタスク・ペイロードの格納場所を次のオプションで指定できます。

- サーバー設定を使用
Oracle Enterprise Manager Fusion Middleware ControlのSharePayloadAcrossAllParallelApproversシステムMBeanブラウザ・ブール型プロパティで、ルート・タスク内のサブタスクのペイロードを共有するかどうかを決定します。デフォルトで、このプロパティは「true」に設定されています。「true」に設定されている場合、「すべてのタスク参加者が同じペイロードを共有(パフォーマンスが向上し、記憶域のスペースが削減されます)」オプションが使用されます。このプロパティを「false」に設定すると、「各パラレル参加者がペイロードのローカル・コピーを所有」オプションが使用されます。このプロパティを変更するには、次の手順を実行します。

1. 「soa-infra」を右クリックして、「管理」→「システムMBeanブラウザ」の順に選択します。

2. 「アプリケーション定義のMBean」→「oracle.as.soainfra.config」→「サーバー: server_name」→「WorkflowConfig」→「human-workflow」の順に開きます。

3. 「SharePayloadAcrossAllParallelApprovers」をクリックします。

4. リストでこのプロパティを変更し、「適用」をクリックします。

- すべてのタスク参加者が同じペイロードを共有(パフォーマンスが向上し、記憶域のスペースが削減されます)
サブタスクのペイロードは、そのサブタスクのルート・タスクに格納されます。この状況は、ルート・タスクのペイロードが、そのサブタスクすべてで共有されることを意味します。内部的には、このオプションによってパフォーマンスが向上し、記憶域のスペース使用が削減されます。記憶域のスペース使用が削減されるのは、ルート・タスクのペイロードが、そのサブタスクすべてで共有されるためです。

- 各パラレル参加者がペイロードのローカル・コピーを所有
各サブタスクが独自にペイロードのコピーを持ちます。内部的には、このオプションを使用すると、より大きな記憶域のスペースが使用されるため、パフォーマンスが低下し、記憶域のスペース消費が増加します。

7. 「OK」をクリックします。

ユーザー、グループまたはアプリケーション・ロールの詳細は、第27.2.1.1.3項「参加者の割当て」を参照してください。

29.6 多言語設定とスタイルシートの指定

図29-53に示すように、「プレゼンテーション」セクションでは、Oracle BPM Worklistで様々な言語でタスク詳細を表示するためのリソース・バンドルを指定したり、添付ファイルのWordMLおよびカスタム・スタイル・シートを指定できます。

図29-53 「プレゼンテーション」セクション

「図29-53 「プレゼンテーション」セクション」の説明

29.6.1 添付ファイルとしてのWordMLスタイルシートとその他のスタイルシートの指定方法

添付ファイルのWordMLスタイルシートを指定する手順は、次のとおりです。

1. 「プレゼンテーション」セクションの「添付ファイルのスタイルシート」リストで、次のオプションのいずれかを選択します。

- Word ML: このオプションを使用すると、WordML XSLTスタイルシートを使用して電子メール添付ファイルとして送信するためのMicrosoft Word文書を動的に作成できます。XSLTスタイルシートは、タスク・ドキュメントに適用されます。

- その他: このオプションを使用すると、XSLTスタイルシートを使用して電子メール添付ファイルを作成できます。XSLTスタイルシートは、タスク・ドキュメントに適用されます。

2. 「検索」アイコンをクリックし、添付ファイルとして使用するスタイル・シートを選択します。

29.6.2 多言語設定の指定方法

リソース・バンドルは、Oracle BPM Worklistで様々な言語でタスク詳細を表示するように指定できます。次のタスク詳細でリソース・バンドルがサポートされます。

- プレーン・テキストまたはmessage(key)書式によるタスクの結果値の表示。

- 様々な言語による電子メール通知メッセージの有効化。実行時にXPath拡張関数hwf:getTaskResourceBundleString(taskId, key, locale?)を指定して、指定したリソース・バンドルから国際化された文字列を取得します。通知受信者のロケールは、関数hwf:getNotificationProperty(propertyName)で取得できます。

リソース・バンドルは単純にプロパティ・ファイルでもあります。たとえば、タスクの結果の表示名を構成するリソース・バンドルは、次のようになります。

- APPROVE=Approve

- REJECT=Reject

多言語設定を指定する手順は、次のとおりです。

1. 「プレゼンテーション」セクションで、「リソース・バンドル」の横にある「追加」アイコンをクリックします。
図29-54に示す「リソースの詳細」ダイアログが表示されます。

図29-54 「リソースの詳細」ダイアログ

「図29-54 「リソースの詳細」ダイアログ」の説明

2. 「リソース名」フィールドで、リソース・バンドルに使用するリソース名を入力します。このファイルは.propertiesベースのリソース・バンドル・ファイルである必要があります。

3. 「リソースの場所」フィールドで、「検索」アイコンをクリックし、使用するJARまたはZIPリソース・バンドル・ファイルを選択します。リソース・バンドルはシステム・アーカイブ(SAR)ファイルの一部です。
リソース・バンドルがコンポジット・プロジェクト外部にある場合は、SCA-INF/libにローカル・コピーを格納するように求めるプロンプトが表示されます。

リソース・バンドル・ファイルがコンポジット・クラス・ローダー(SCA-INF/classesの直下またはSCA-INF/libのJARファイル内)にない場合は、そのファイルがある場所を指定する必要があります。たとえば、リソース・バンドルがコンポジット・クラス・ローダー外部の場所(たとえば、http://host:port/bundleApp/taskBundles.jarのようなHTTPの場所など)からアクセス可能な場合は、その場所をこのフィールドに指定する必要があります。

4. 「OK」をクリックしてヒューマン・タスク・エディタに戻ります。
詳細は、第34.2.6項「異なる言語による通知メッセージの構成方法」を参照してください。

29.7 タスクのエスカレート、期限更新または終了

図29-55に、ヒューマン・タスク・エディタの「期限」セクションを示します。

このグローバル・ポリシー・セクション(ルーティング・スリップ・レベル)で、タスクの有効期間を指定できます。有効期間を参加者タイプ・レベルではなくルーティング・スリップ・レベルで指定すると、この期間は全参加者のタスクの有効期間となります。ただし、参加者タイプ・レベルで(「割当て済期間の制限の設定」チェック・ボックスを介して)有効期間を指定すると、その設定は「期限」セクション(ルーティング・スリップ・レベル)で指定した設定よりも優先されます。

指定した期間後にタスクがユーザーのマネージャにエスカレートされるように指定できます。詳細は、第29.4.3.2項「タスクの操作に対する時間制限の指定」を参照してください。

図29-55 ヒューマン・タスク・エディタ — 「期限」セクション

「図29-55 ヒューマン・タスク・エディタ — 「期限」セクション」の説明

29.7.1 エスカレーションおよび有効期限ポリシーの概要

この項では、このレベルで有効期間を指定し、その設定を参加者全員のタスクの有効期間にする方法の概要を説明します。

たとえば、図29-56に示すように、参加者LoanAgentGroupおよび参加者Supervisorの両者間でタスクを操作するための日数が3日であるとします。

図29-56 「期限切れまでの時間」ポリシー

「図29-56 「期限切れまでの時間」ポリシー」の説明

参加者レベルまたはこのルーティング・スリップ・レベルで有効期限が指定されていない場合、そのタスクの有効期間設定はありません。

参加者のいずれかのレベルで有効期間が設定されている場合、その参加者には対応する有効期間が使用されます。ただし、参加者レベルの有効期間が設定されていない参加者には、引き続きグローバルな有効期間が使用されます。グローバルな有効期間は、常にタスクでの経過時間だけ減分されます。

参加者について参加者レベルの有効期限を解析するためのポリシーは、次のとおりです。

- シリアル
「管理チェーン」内の各割当ては、「シリアル」で指定されている内容と同じ有効期間を取得します。期間は、この割当てによって生じるすべての割当てに対するものではありません。タスクが管理チェーン内のいずれかの割当てで有効期限に達すると、エスカレーションおよび期限更新ポリシーが適用されます。

- パラレル:

- パラレル・ワークフローでは、パラレル参加者がリソースとして指定されている場合は、リソースごとにルーティング・スリップが作成されます。作成された各ルーティング・スリップの有効期間には、次のルールが適用されます。

- パラレル参加者の有効期間が指定されている場合は、それと同じ有効期間。

- ルーティング・スリップ・レベルで指定されている場合は、タスクに残っている有効期間。

- それ以外は有効期間なし。

- パラレル参加者がルーティング・スリップとして指定されている場合、その有効期間はルーティング・スリップにより決定されます。

注意:

パラレル・タスク内で親タスクが期限切れになった場合、期限切れになっていないサブタスクや未完了のサブタスクは取り消されます。

29.7.2 期限切れがないポリシーの指定方法

タスクが期限切れにならないように指定できます。

「期限切れなし」ポリシーを指定する手順は、次のとおりです。

1. 図29-55に示すように、「期限」セクションのドロップダウン・リストで、「期限切れなし」を選択します。

29.7.3 期限切れがあるポリシーの指定方法

タスクに有効期限を指定できます。タスクが期限切れになると、ルーティング・スリップ・レベルのエスカレーション・ポリシーまたは期限更新ポリシーが適用されます。どちらのポリシーも指定されていない場合、タスクは期限切れになります。ルーティング・スリップ・レベルの有効期限ポリシーは、すべての参加者に共通です。

タスクに有効期限を指定する手順は、次のとおりです。

1. 図29-57に示すように、「期限」セクションのドロップダウン・リストで、「期限切れまでの時間」を選択します。

2. タスクがオープンになっている最大期間を指定します。
パラレル参加者に対する有効期限ポリシーは、次のように解析されます。

- パラレル参加者がパラレル要素でリソースとして指定されている場合、各パラレル参加者に対する有効期限ポリシーはありません。

- パラレル参加者がルーティング・スリップとして指定されている場合、そのパラレル参加者にはルーティング・スリップの有効期限ポリシーが適用されます。

図29-57は、タスクが3日で期限切れになることを示しています。

図29-57 「期限切れまでの時間」ポリシー

「図29-57 「期限切れまでの時間」ポリシー」の説明

29.7.4 有効期限ポリシー期間の延長方法

ユーザーが割当て時間内に応答しない場合は、有効期限の期間を延長できます。このためには、期限切れの際にタスクの期限を更新できる回数(3回の追加更新など)と各期限更新期間(期限更新ごとに3日間など)を指定します。

有効期限ポリシー期間を延長する手順は、次のとおりです。

1. 図29-58に示すように、「期限」セクションのドロップダウン・リストで、「期限更新までの時間」を選択します。

2. このタスクの期限更新を継続する最大回数を指定します。
図29-58では、タスクが期限切れになると、最大3回まで期限が更新されます。タスクが参加者LoanAgentGroupの手元で期限切れになるか、参加者Supervisorの手元で期限切れになるかは関係ありません。

図29-58 「期限更新までの時間」ポリシー

「図29-58 「期限更新までの時間」ポリシー」の説明

29.7.5 タスク・ポリシーのエスカレート方法

ユーザーが割当て時間内に応答しない場合は、タスクをエスカレートできます。たとえば、ユーザー・ディレクトリに構成されているエスカレーション階層を使用している場合は、ユーザーのマネージャにタスクをエスカレートできます。エスカレーション・コールバックを使用している場合は、定義したユーザーにタスクをエスカレートできます。タスクが最大回数までエスカレートされた場合、エスカレートは停止します。エスカレートされたタスクは、そのタスクの期限切れ以降もユーザーの受信ボックス内に残すことができます。

タスク・ポリシーをエスカレートする手順は、次のとおりです。

1. 図29-59に示すように、「期限」セクションのドロップダウン・リストで、「エスカレートまでの時間」を選択します。

2. さらに次の値を指定します。両方を設定すると、エスカレーション・ポリシーがより限定的になります。

- エスカレーション・レベルの最大数
タスクをエスカレートする管理レベル数。このフィールドは必須です。

- 承認者の最高役職
最上位承認者の役職(自分、マネージャ、取締役またはCEOなど)。これらの役職は、対応するユーザー・リポジトリのタスク割当て先の役職と比較されます。このフィールドはオプションです。

エスカレーション・ポリシーでは、タスクを期限切れ時にエスカレートできる回数と期限更新期間を指定します。図29-59では、タスクが期限切れになると、最大3回までエスカレートされます。タスクが参加者LoanAgentGroupの手元で期限切れになるか、参加者Supervisorの手元で期限切れになるかは関係ありません。

図29-59 「エスカレートまでの時間」ポリシー

「図29-59 「エスカレートまでの時間」ポリシー」の説明

29.7.6 エスカレーション・ルールの指定方法

このオプションを使用すると、特定のワークフローについてカスタム・エスカレーション・ルールをプラグインできます。たとえば、期限切れ時に、タスクを現在のユーザーの部門マネージャに割り当てるには、カスタム・タスク・エスカレーション関数を記述してワークフロー・サービスに登録し、その関数をタスク定義に使用できます。

デフォルトのエスカレーション・ルールでは、タスクは現在のユーザーのマネージャに割り当てられます。新規エスカレーション・ルールを追加するには、次の手順に従います。

エスカレーション・ルールを指定する手順は、次のとおりです。

1. 次のインタフェースを実装します。

oracle.bpel.services.workflow.assignment.dynamic.IDynamicTaskEscalationFunction

この実装はサーバーのクラス・パスで使用可能である必要があります。

2. Oracle Enterprise Manager Fusion Middleware Controlにログインします。

3. ナビゲータで、「SOA」フォルダを開きます。

4. 「soa-infra」を右クリックして、「SOA管理」→「ワークフロー構成」→「タスク」タブを選択します。
「ワークフロー・タスク・サービス・プロパティ」ページが表示されます。

5. 新しい関数を追加します。例:

- 関数名: DepartmentSupervisor

- クラスパス: oracle.bpel.services.workflow.assignment.dynamic.patterns.DepartmentSupervisor

- 関数のパラメータ名

- 関数のパラメータ値

6. 「期限」セクションの「カスタム・エスカレーションJavaクラス」フィールドに、エスカレーション・ルールについて「ワークフロー・タスク・サービス・プロパティ」ページに定義されている関数名を入力します。
詳細は、第34.3.3項「カスタム・エスカレーション関数」を参照してください。

29.7.7 期日の指定方法

期日は、タスクを完了する必要がある日付を示すために使用されます。期日は有効期限とは異なります。期限切れタスクの場合は、期限切れとしてマークされるか、エスカレーション・ポリシーに基づいて自動的にエスカレートまたは期限更新されます。通常、期日は有効期限より早い日付で、タスクの期限切れが近いことをユーザーに示します。

図29-55に示すように、タスクの期日を入力できます。タスクは指定された期日をすぎると、期限切れとなります。この日付は有効期限ポリシーの付加項目です。期日は、有効期限ポリシーが指定されているかどうかに関係なく指定できます。期日を使用すると、Oracle BPM Worklistに期日を表示し、期限切れタスクをリストし、受信ボックス内の期限切れタスクをフィルタ処理できます。期限切れタスクは、TaskQueryService.queryTask(...) APIの述語を使用して、問合せできます。

期日を指定する手順は、次のとおりです。

1. 「期限」セクションで、「要求されたアクションの期日」チェック・ボックスを選択します。

2. 「期間別」を選択して特定の期間を入力するか、「式別」を選択してXPath式として値を動的に入力します。
次の点に注意してください。

- 期日は、(Oracle BPM Worklistの「To Doタスクの作成」ダイアログを使用する)タスクと、(ヒューマン・タスク・エディタを使用する).taskファイルの両方で設定できます。これにより、タスクの開始時に、タスク定義のないTo Doタスクで期日を設定できるようになります。タスク(実行時オブジェクト)に設定された期日は、.taskファイルに設定された期日よりも優先されます。

- タスク定義では、期日は各参加者に対してではなく、グローバルなレベルでのみ指定できます。

- タスクに対して期日が設定されている場合、.taskファイルの期日は無視されます。

- タスクに対して期日が設定されていない場合は、.taskファイルの期日が評価され、タスクに設定されます。

- タスクと.taskファイルのいずれにも期日がない場合、タスクには期日がありません。

注意:

To Doタスクに対してビジネス・ルールを指定することはできません。

詳細は、第32.3.4項「To Doタスクの作成方法」を参照してください。

29.8 参加者通知プリファレンスの指定

図29-60に、ヒューマン・タスク・エディタの「通知」セクションの「一般」タブ(完全に開いた状態)を示します。

通知は、ユーザーまたはグループにタスクが割り当てられる時期を示すか、タスクのステータスに変更があったことを通知します。通知は、電子メール、ボイス・メッセージ、インスタント・メッセージまたはSMSで送信できます。異なるアクションについて様々なタイプの参加者に通知が送信されます。デフォルトでは、通知はデフォルト・メッセージを使用して構成されます。たとえば、タスクが完了してクローズされたことを示す通知メッセージが送信されます。独自の構成を作成するか、既存の構成を変更できます。

注意:

組込みLDAPでは、グループの電子メール・アドレスがサポートされていません。したがって、タスクがグループIDに割り当てられると、電子メールはグループの電子メール・アドレスではなく、そのグループの全メンバーに送信されます。

図29-60 ヒューマン・タスク・エディタ — 「通知」セクションの「一般」タブ

「図29-60 ヒューマン・タスク・エディタ — 「通知」セクションの「一般」タブ」の説明

参加者の通知プリファレンスを指定する手順は、次のとおりです。

1. 図29-60に示すように、「通知」タブをクリックします。
表29-15に、「通知」セクションの「一般」タブの各サブセクションの構成方法を示します。

表29-15 ヒューマン・タスク・エディタ — 「通知」セクションの「一般」タブ

サブセクション

参照先

タスク・ステータス

受信者

第29.8.1項「受信者へのタスク・ステータス変更の通知方法」

通知ヘッダー

第29.8.2項「通知メッセージの編集方法」

通知サービスの詳細は、第34.2項「ヒューマン・ワークフローからの通知」を参照してください。

2. 「通知」セクションで、「詳細」タブをクリックします。図29-61に詳細を示します。

図29-61 「通知」セクション - 「詳細」タブ

「図29-61 「通知」セクション - 「詳細」タブ」の説明

表29-16に、「通知」セクションの「詳細」タブの各サブセクションの構成方法を示します。

表29-16 ヒューマン・タスク・エディタ — 「通知」セクションの「詳細」タブ

サブセクション

参照先

リマインダ

第29.8.3項「リマインダの設定方法」

エンコーディング

第29.8.4項「キャラクタ・セットのエンコーディングの変更方法」

通知のセキュア化(詳細を除く)

第29.8.5項「詳細を除く通知をセキュア化する方法」

ワークリストURLを通知に表示

第29.8.6項「通知でのOracle BPM Worklist URLの表示方法」

通知をアクション可能にする

第29.8.7項「電子メール・メッセージをアクション可能にする方法」

電子メール通知によるタスクの添付ファイルの送信

第29.8.8項「電子メール通知によるタスクの添付ファイルの送信方法」

グループ通知構成

第29.8.9項「グループおよびアプリケーション・ロールへの電子メール通知の送信方法」

通知ヘッダーの属性

第29.8.10項「通知ヘッダーのカスタマイズ方法」

29.8.1 受信者へのタスク・ステータス変更の通知方法

「タスク・ステータス」列には、3つのデフォルト・ステータス・タイプ「割当て」、「完了」および「エラー」が表示されます。通知メッセージの受信用に他のステータス・タイプを選択できます。

受信者にタスク・ステータス変更を通知する手順は、次のとおりです。

1. 「通知」セクションで、「一般」タブをクリックします。

2. 「タスク・ステータス」列で、タイプをクリックしてタスク・タイプの完全なリストを表示します。

- アラート済
タスクがアラート済の状態の場合は、受信者に通知できます。ただし、いずれの通知受信者(割当て先、承認者、所有者、起案者またはレビューア)も、アラート済の状態を知らせるFYI通知の単なる受信者であり、アラート済の状態からエラー状態にタスクを移動することはできません。所有者は、タスクの再割当て、取消し、削除またはパージを実行できます。また、エラーを解決できない場合はタスクをエラー状態に移動するようにエラー割当て先に依頼できます。アラート済からエラー状態にタスクを移動できるのは、エラー割当て先のみです。

エラー割当て先は、「割当ての構成」ダイアログの「割当て」タブで構成します。このタブは「割当て」セクションの「タスクは開始参加者から最終参加者へ移行します」アイコンの下にあります。詳細は、第29.5.4項「エラー割当て先の構成方法」を参照してください。

- 割当て
ユーザーまたはグループにタスクが割り当てられた場合。この場合は、次のアクションが取得されます。

- ユーザーへのタスクの割当て

- シリアル・ワークフローでの新規ユーザーへのタスクの割当て

- タスクの期限更新

- タスクの委任

- タスクの再割当て

- タスクのエスカレート

- タスク情報の発行

- 完了

- エラー

- 期限切れ

- 情報のリクエスト

- 再開

- 一時停止

- 更新

- タスク・ペイロードの更新

- タスクの更新

- コメントの追加

- 添付ファイルの追加および更新

- 結果の更新

- 取消

- その他のすべてのアクション

- 前述のタスク・タイプ以外のアクションこれにはタスクの取得が含まれます。

3. タスク・ステータスのタイプを選択します。
通知は、様々な範囲でタスクに関与するユーザーに送信できます。これには、タスクがグループに割り当てられている場合が含まれます。グループに通知エンドポイントが設定されていない場合は、グループの各ユーザーに通知が送信されます。

4. 「受信者」列でエントリをクリックして、通知メッセージの受信者候補のリストを表示します。

- 割当て先
タスクが現在割り当てられているユーザーまたはグループ。

- 起案者
タスクを作成したユーザー。

- 承認者
この時点までにタスクを操作したユーザー。これは、複数のユーザーがタスクを承認するシリアル参加者タイプに適用され、通知はこれらのユーザー全員に送信される必要があります。

- 所有者
タスクの所有者

- レビューア
タスクにコメントおよび添付ファイルを追加できるユーザー。

詳細は、第34.2.5項「通知チャネル・プリファレンスの構成方法」を参照してください。

29.8.2 通知メッセージの編集方法

デフォルトの通知メッセージを、選択した受信者に配信できます。必要な場合は、デフォルト・メッセージのテキストを変更できます。

通知メッセージを編集する手順は、次のとおりです。

1. 「通知」セクションで、「一般」タブをクリックします。

2. 「通知ヘッダー」列で、「編集」アイコンをクリックして、デフォルトの通知メッセージを変更します。
図29-62に示す「通知メッセージの編集」ダイアログが表示されます。

図29-62 「通知メッセージの編集」ダイアログ

「図29-62 「通知メッセージの編集」ダイアログ」の説明

このメッセージは、サポート対象のすべての通知チャネル(電子メール、ボイス、インスタント・メッセージおよびSMS)に適用されます。電子メール・メッセージには、このメッセージに定義したワークリスト・タスク詳細も挿入できます。メッセージの配信チャネルは、指定した通知プリファレンスに基づいています。

3. 必要に応じてメッセージの文言を変更します。

4. 「OK」をクリックしてヒューマン・タスク・エディタに戻ります。

通知プリファレンスの詳細は、第34.2項「ヒューマン・ワークフローからの通知」を参照してください。

29.8.3 リマインダの設定方法

タスクのリマインダを送信できます。リマインダは、タスクがユーザーに割り当てられた時刻またはタスクの有効期限が切れる時刻に基づいています。リマインダの数およびリマインダ間の間隔も構成可能です。

リマインダを設定する手順は、次のとおりです。

1. 「通知」セクションで、「詳細」タブをクリックします。

2. リストから、リマインダの送信数を選択します。

3. 割当て先に1回、2回または3回通知するように選択した場合は、リマインダの間隔を選択し、リマインダを割当て前に送信するか割当て後に送信するかを選択します。

詳細は、第34.2.12項「リマインダの送信方法」を参照してください。

29.8.4 キャラクタ・セットのエンコーディングの変更方法

Unicodeは、任意の言語の情報を単一のキャラクタ・セットを使用して格納できる全世界共通のエンコード・キャラクタ・セットです。Unicodeでは、プラットフォーム、プログラムまたは言語に関係なく、すべての文字に一意のコード値が指定されます。UTF-8のデフォルト設定を使用するか、Javaクラスでキャラクタ・セットを指定できます。

キャラクタ・セットのエンコーディングを変更する手順は、次のとおりです。

1. 「通知」セクションで、「詳細」タブをクリックします。

2. 「エンコーディング」リストから、「Javaクラスで指定」を選択します。

3. 使用するJavaクラスを入力します。

29.8.5 詳細を除く通知をセキュア化する方法

通知のセキュア化、メッセージのアクション可能化および添付ファイルの送信を設定する手順は、次のとおりです。

1. 「通知」セクションで、「詳細」タブをクリックします。

2. 「通知のセキュア化(詳細を除く)」を選択します。
選択すると、デフォルトの通知メッセージが使用されます。電子メールには、HTMLのワークリスト・タスク詳細、添付ファイルまたはアクション可能なリンクはありません。メッセージにはタスク番号のみが含まれます。

詳細は、第34.2.10項「セキュアな通知の送信方法」を参照してください。

29.8.6 通知でのOracle BPM Worklist URLの表示方法

電子メール通知メッセージにOracle BPM Worklist URLを表示するかどうかを構成できます。

通知にOracle BPM Worklist URLを表示する手順は、次のとおりです。

1. 「通知」セクションで、「詳細」タブをクリックします。

2. 「ワークリストURLを通知に表示」チェック・ボックスを選択すると、Oracle BPM Worklist URLが電子メール通知メッセージに表示されます。このチェック・ボックスを選択しないと、URLは表示されません。

29.8.7 電子メール・メッセージをアクション可能にする方法

電子メール・メッセージをアクション可能にする手順は、次のとおりです。

1. 「通知」セクションで、「詳細」タブをクリックします。

2. 「通知をアクション可能にする」を選択します。このアクションにより、電子メールを介してタスク・アクションを実行できます。

注意:

FYIタスクはアクション可能ではないため、電子メール・メッセージから確認できません。

その他の構成の詳細は、第34.2.7項「アクション可能なメッセージの送信方法」を参照してください。

アウトバウンドおよびインバウンド電子メールの構成の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

29.8.8 電子メール通知によるタスクの添付ファイルの送信方法

電子メール通知によってタスクの添付ファイルを送信できます。

電子メール通知によってタスクの添付ファイルを送信する手順は、次のとおりです。

1. 「通知」セクションで、「詳細」タブをクリックします。

2. 「電子メール通知によるタスクの添付ファイルの送信」を選択します。

29.8.9 グループおよびアプリケーション・ロールへの電子メール通知の送信方法

タスクが割り当てられたグループおよびアプリケーション・ロールに電子メール通知を送信できます。

グループおよびアプリケーション・ロールに電子メール通知を送信する手順は、次のとおりです。

1. 「通知」セクションで、「詳細」タブをクリックします。

2. 「グループ通知構成」リストから、次のいずれかのオプションを選択します。

- 電子メールを個別に送信
グループまたはアプリケーション・ロール内の各ユーザーが個別の電子メール通知を受け取ります。これがデフォルトの選択です。

また、「ロケールに基づいて個別のタスク・フォームを使用」チェック・ボックスが自動的に選択されます。

- 選択すると、言語ロケールに基づいた個別のタスク・フォームを使用して個別の電子メールが送信されます。

- 選択しないと、タスク・フォームを再使用(共有)して個別の電子メールが送信されます。

- すべてのユーザー・アドレスを含む電子メールを送信
グループまたはアプリケーション・ロール内の各ユーザー・ロケールに対して共有の通知電子メールが1回生成され、その結果電子メール・コンテンツの生成時間が短縮されます。電子メールは、グループまたはアプリケーション・ロール内のすべてのユーザーに送信されます。

注意:

- すべてのユーザー(またはユーザーのサブセット)が同じ電子メールを受け取るため、グループまたはアプリケーション・ロール内のユーザーは同じ権限を持つと想定されています。これにより、権限のないユーザーにタスク詳細が表示されないようにします。

- 1通の電子メールをすべてのユーザーに送信する場合、アドレス・フィールドで許容される最大文字数は2000です。制限を超過すると、最大制限内に含まれているユーザー・アドレスにのみ電子メールが送信されます。

29.8.10 通知ヘッダーのカスタマイズ方法

カスタム通知ヘッダーは、名前/値ペアを指定し、通知の中でキー・フィールドを識別するために使用されます。ユーザーは、これらの入力項目を使用して、通知の配布プリファレンスを定義します。たとえば、「名前」を「ApprovalType」、「値」を「経費」に設定したり、「名前」を「優先度」、「値」を「高」に設定することができます。その後、ユーザーはOracle BPM Worklistで配信プリファレンスを指定できます。これらのプリファレンスは通知の内容に基づいています。

ルールベースの通知サービスは、使用する優先通知チャネルを特定する目的のみに使用されます。優先チャネルのアドレスは、引き続きアイデンティティ・サービスから取得されます。

通知ヘッダーをカスタマイズする手順は、次のとおりです。

1. 「通知」セクションで、「詳細」タブをクリックします。

2. 「通知ヘッダーの属性」を開きます。

3. 名前またはXPath式別に、名前/値ペアのパラメータを追加します。
プリファレンスの詳細は、次の各項を参照してください。

- 第34.2.8項「インバウンドおよびアウトバウンド添付ファイルの送信方法」

- 第34.2.14項「カスタム通知ヘッダーの作成方法」

- 第XI部「Oracle User Messaging Serviceの使用」

29.9 タスク・コンテンツへのアクセス・ポリシーとタスク・アクションの指定

タスク・コンテンツへのアクセス・ルールと、そのコンテンツに対して実行するアクションを指定できます。

29.9.1 タスク・コンテンツへのアクセス・ポリシーの指定方法

参加者が表示および更新できるタスクの部分を決定するアクセス・ルールを指定できます。アクセス・ルールは、タスクの取得および更新時にタスク・オブジェクトにルールを適用するワークフロー・サービスによって規定されます。

注意:

タスク・コンテンツ・アクセス・ルールおよびタスク・アクション・アクセス・ルールは相互に独立して存在します。

29.9.1.1 アクセス・ルールの概要

アクセス・ルールは、次の詳細に基づいて算定されます。

- アクセス・ルールに対応して構成されていないロールの権限は、アクセス・ルールで構成された属性によって却下されます。たとえば、割当て先が読み取るペイロードを構成するとします。このアクションでは、割当て先のみの読取り権限が有効になり、他の誰も対象になりません。割当て先も含めて、誰にも書込み権限はありません。

- アクセス・ルールで構成されていない属性には、すべての権限があります。

- ペイロードのメッセージ属性がアクセス・ルールで構成されている場合は、競合の可能性があるためにペイロード自体の構成は無視されます。この場合、APIが返すマップにはペイロードの入力項目は含まれません。読取り権限は、書込み権限によって自動的に提供されます。

- メッセージ属性のサブセットのみがアクセス・ルールで構成されている場合、影響を受けないすべてのメッセージ属性には、すべての権限があります。

- 追加権限があるのは、コメントと添付ファイルのみです。

- 特定の属性への書込み権限は意味がありません。たとえば、履歴の書込み権限によって、履歴に対する権限が付与されたり、却下されることはありません。

- 次の日付属性は、ヒューマン・タスク・エディタでは1つの属性として構成されます。TaskMetadataService.getVisibilityRules()が返すマップには、それぞれ1つのキーがあります。同様に、参加者にDATESの読取り権限がない場合、タスクには次のタスク属性のいずれも含まれません。

- START_DATE

- END_DATE

- ASSIGNED_DATE

- SYSTEM_END_DATE

- CREATED_DATE

- EXPIRATION_DATE

- ALL_UPDATED_DATE

- 次の割当て先属性は、ヒューマン・タスク・エディタでは1つの属性として構成されます。TaskMetadataService.getVisibilityRules()が返すマップには、次の割当て先属性のそれぞれに対して1つのキーがあります。同様に、参加者にASSIGNEESの読取り権限がない場合、タスクには次のタスク属性のいずれも含まれません。

- ASSIGNEES

- ASSIGNEE_USERS

- ASSIGNEE_GROUPS

- ACQUIRED_BY

- マップ済属性には、TaskMetadataService.getVisibilityRules()が返すマップ内に個別の表示はありません。

- TaskMetadataService.getVisibilityRules()が返すマップにあるすべてのメッセージ属性には、ITaskMetadataService.TASK_VISIBILITY_ATTRIBUTE_PAYLOAD_MESSAGE_ATTR_PREFIX (PAYLOAD)の接頭辞が付きます。

アプリケーションでは、アクセス・ルールに基づいてタスク属性を表示するページ(または表示しないページ)も作成できます。これは、oracle.bpel.services.workflow.metadata.ITaskMetadataServiceでAPIをコールして参加者のアクセス・ルールを取得することで実行できます。例29-1に詳細を示します。

例29-1 APIコール

public Map<String, IPrivilege> getTaskVisibilityRules(IWorkflowContext context,
String taskId)
throws TaskMetadataServiceException;

このメソッドの詳細は、Oracle Fusion Middleware Oracle SOA Suiteワークフロー・サービスJava APIリファレンスを参照してください。

29.9.1.2 タスク・コンテンツの操作に対するユーザー権限の指定

特定のタスク・コンテンツ(ペイロードなど)の操作を特定のユーザー(タスクの作成者または所有者など)に許可する権限を指定できます。

タスク・コンテンツの操作についてユーザー権限を指定する手順は、次のとおりです。

1. 「アクセス」タブをクリックします。

2. 「コンテンツ」タブをクリックします。

3. 図29-63に示すように、アクセス権を指定するタスク・コンテンツを選択します。

図29-63 タスク・コンテンツ・アクセスの設定

「図29-63 タスク・コンテンツ・アクセスの設定」の説明

4. タスク・コンテンツを操作するユーザーに権限(読取り、書込みまたはアクセスなし)を割り当てます。ユーザーには、最高レベルを超えて権限を割り当てることはできません。たとえば、ADMINユーザーにPAYLOADタスク・コンテンツに対する書込み権限を割り当てることはできません。表29-17に、タスク・コンテンツに対する各ユーザーの最大権限を示します。

表29-17 タスク・コンテンツに対するユーザーの最高権限レベル

タスク・コンテンツ

読取り権限保持者

書込み権限保持者

割当て先

管理者、承認者、割当て先、作成者、所有者、レビューア

--

添付ファイル

管理者、承認者

割当て先、作成者、所有者、レビューア

コメント

管理者、承認者

割当て先、作成者、所有者、レビューア

日付

管理者、承認者、割当て先、作成者、所有者、レビューア

--

フレックスフィールド

管理者、承認者、レビューア

割当て先、作成者、所有者

履歴

管理者、承認者、割当て先、作成者、所有者、レビューア

--

ペイロード

管理者、承認者、レビューア

割当て先、作成者、所有者

レビューア

管理者、承認者、割当て先、作成者、所有者、レビューア

--

ペイロード要素

ペイロードから継承

ペイロードから継承

たとえば、PAYLOADタスク・コンテンツについて、ASSIGNEES、CREATORおよびOWNERの書込みアクセス権、ADMIN、APPROVERSおよびREVIEWERSの読取りアクセス権、およびアクセス権がないPUBLICというデフォルト設定をそのまま使用すると、ダイアログは図29-63に示すように表示されます。

5. このダイアログで、タスク・コンテンツの表示方法を選択します。現在選択されていないオプションを選択すると、すべての設定がデフォルトの値にリセットされます。

- 大まかな(デフォルト)
タスク・コンテンツが総括的に表示されます(たとえば、ペイロードやレビューアが1つのみ表示されます)。

- きめ細かな
コンテンツが個別の要素として表示されます (たとえば、すべてのペイロード(p1、p2、p3など)およびこのタスクに割り当てられているすべてのレビューア(jstein、wfaulk、cdickens)が表示されます)。

注意:

システムで許可されている内容とは別に、アクセス・ルールは、常にアクションの実行者とタスクの現在の状態に基づいて適用されます。

29.9.1.3 タスクの操作に対するアクションの指定

タスク・コンテンツ(ペイロードなど)の操作について、「タスク・コンテンツ・アクセスの設定」ダイアログで指定した特定のユーザー(タスクの作成者または所有者など)に許可するアクション(アクセスまたはアクセスなし)を指定できます。

タスクの操作に対してアクションを指定する手順は、次のとおりです。

1. 「アクセス」タブをクリックします。

2. 「アクション」タブをクリックします。

3. 図29-64に示すように、ユーザーを指定するタスク・アクションを選択します。

図29-64 「アクション・アクセス・ルールの追加」の選択

「図29-64 「アクション・アクセス・ルールの追加」の選択」の説明

4. 選択したアクションを参加者が実行できるかどうかを選択します。

5. このダイアログで、タスク・アクションの表示方法を選択します。現在選択されていないオプションを選択すると、すべての設定がデフォルトの値にリセットされます。

- 大まかな(デフォルト)
タスク・アクションが総括的に表示されます(たとえば、承認や却下が1つのみ表示されます)。

- きめ細かな
コンテンツに対するアクションが個別要素として表示されます (たとえば、すべての承認や却下が表示されます)。

29.9.2 ワークフロー・デジタル署名ポリシーの指定方法

デジタル署名は、デジタル署名されたヒューマン・タスクの否認防止メカニズムを提供します。この機能は、タスクを操作する参加者に対し、タスクの更新前に詳細と各自のアクションに対する署名を義務付けることで、後で否認できないようにします。

注意:

タスクに対してデジタル署名が有効な場合、アクション可能な電子メールは実行時に送信されません。設計時にアクション可能な電子メールが有効化された場合も同様です。

ワークフロー・デジタル署名ポリシーを指定する手順は、次のとおりです。

1. 「アクセス」タブをクリックします。

2. 図29-65に示すように、「署名ポリシー」リストで「ポリシーの設定」を選択します。

図29-65 デジタル署名

「図29-65 デジタル署名」の説明

3. タスク参加者が使用する署名ポリシーを指定します。

- 署名は不要
参加者は、署名せずにタスクの送信と操作を実行できます。これはデフォルトのポリシーです。

- パスワードは必須
参加者は、次の参加者にタスクを送信する前に、署名を指定します。参加者はタスクを操作する際に、パスワードを再入力する必要があります。パスワードは、デジタル署名の生成に使用されます。デジタル署名はメッセージ送信者または文書の署名者の本人認証を行います。これにより、送信されたメッセージの元の内容が変更されていないことが保証されます。

- デジタル証明書は必須
参加者は、デジタル署名されたヒューマン・タスクの否認防止のために、デジタル証明書を保持する必要があります。参加者の資格証明は、デジタル証明書によって証明されます。これは認証局(CA)が発行します。次の項目が含まれます。

- 名前

- シリアル番号

- 有効期限

- 証明書所有者の公開鍵のコピー(メッセージとデジタル署名の暗号化に使用)

- 証明書発行者のデジタル署名(メッセージ信頼性の証明)

認証局の名称とCRLおよび発行認証局のURLは、個別に構成する必要があります。

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

詳細は、第34.1.10項「エビデンス・ストア・サービスとデジタル署名」を参照してください。

29.9.2.1 認証局の指定

デジタル署名を使用するには、Oracle Enterprise Manager Fusion Middleware ControlのシステムMBeanブラウザで信頼できるCAを指定する必要があります。このCAから発行された証明書のみが、ヒューマン・ワークフローで有効と見なされます。

認証局を指定する手順は、次のとおりです。

1. 「SOAインフラストラクチャ」メニューから、「管理」→「システムMBeanブラウザ」の順に選択します。

2. 「アプリケーション定義のMBean」→「oracle.as.soainfra.config」→「サーバー: server_name」→「WorkflowConfig」→「human.workflow」の順に選択します。

3. 「操作」タブをクリックします。

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

5. 「CaName」および「CaURL」の「値」フィールドに、適切な値を指定します。

6. 「起動」をクリックします。

7. 「戻る」をクリックします。
これらの値は、使用前に検証する必要があります。

29.10 タスク割当てに対する制限の指定

コールバック・クラスを使用してタスクを再割当てまたはルーティングできるユーザーを制限できます。

通常のLDAPディレクトリにシードされているユーザー・コミュニティは会社全体や部署全体を表します。ただし、タスクに関連付けるユーザーの潜在的リストは、スコープに基づいて制限したり、タスクや関連するデータの重要性に基づいて制限することが必要な場合があります。たとえば、数千のユーザーが存在する大企業では、少数のユーザーのみが注文書を承認および作成できるようにする場合があります。特にこのようなタスクでは、非定型ルーティングおよび再割当てに対して選択できるユーザーとして、会社全体規模のユーザーを対象にしないでください。かわりに、適切または権限のある少数のユーザーのみを選択対象とする必要があります。これを実行するには、制限付き割当て機能を使用します。この機能はコールバック・クラスとして実装されます。このコールバック・クラスには、インスタンス・データを含むタスク・オブジェクトが渡されるとそのタスク・オブジェクトに基づいて適切なユーザー・セットを動的に選択するロジックを実装できます。

注意:

コールバックを実装した場合、ユーザー・コールバック実装によって、他の形式の制限付き割当て(たとえば、割当て先候補)がオーバーライドされます。検索を実行すると、その結果には、ユーザー・コールバックによって返されるユーザーのみが表示されます。

29.10.1 タスク割当てに対する制限の指定方法

タスク割当てに対して制限を指定する手順は、次のとおりです。

1. 「アクセス」セクションで、「制限付き割当ての設定」をクリックします。
「制限付き割当ての設定」ダイアログが表示されます。

2. クラス名を入力します。入力するクラスは、oracle.bpel.services.workflow.task.IRestrictedAssignmentCallbackインタフェースを実装している必要があります。

3. 「追加」アイコンをクリックし、コールバックを起動する際に渡すプロパティ・マップの名前と値のペアを追加します。

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

29.11 Javaコールバックまたはビジネス・イベント・コールバックの指定

Javaコールバックまたはビジネス・イベント・コールバックを指定できます。

29.11.1 タスク・ステータスのコールバック・クラスの指定方法

ワークフロー・サービスのコールバックは、タスクのライフサイクルで特定のステージに到達したときにコールするように登録できます。2つのタイプのコールバックがサポートされています。

- Javaコールバック: コールバック・クラスは、インタフェースoracle.bpel.services.workflow.task.IRoutingSlipCallbackを実装している必要があります。このコールバック・クラスをサーバーのクラスパスで使用可能にします。

- ビジネス・イベント・コールバック: ヒューマン・タスクの状態が変化したときに、ビジネス・イベントが発生するようにできます。Javaクラスを開発して登録する必要はありません。コール元は、承認トランザクションの現在の状態が通知されるように、Oracle Mediatorサービス・コンポーネントを使用してコールバックを実装し、適用可能なビジネス・イベントをサブスクライブします。

タスク・ステータスのコールバック・クラスを指定する手順は、次のとおりです。

1. 「イベント」タブをクリックします。
選択できる状態変更コールバックは、次のとおりです。

- OnAssigned
標準的なルーティング、再割当て、委任、エスカレーションなどを含め、割当ての変更時にコールバック・クラスをコールする必要がある場合に選択します。タスクによって結果が更新される(つまり、チェーンのいずれかの承認者がタスクを承認または却下する)ときにコールバックする必要がある場合は、このオプションを選択する必要があります。

- OnUpdated
更新(ペイロード、コメント、添付ファイル、優先度などを含む)時にコールバック・クラスをコールする必要がある場合に選択します。

- OnCompleted
タスクが完了し、コントロールが起案者(タスクを開始するBPELプロセスなど)に渡されようとしているときに、コールバック・クラスを最終的にコールする必要がある場合に選択します。

- OnStageCompleted
ヒューマン・ワークフロー・タスクでビジネス・イベント・コールバックを有効化するために、コールバック・クラスをコールする必要がある場合に選択します。イベントが発生すると、そのイベントには、完了したステージの名前、完了したステージの結果、およびコールバックが起動された時点でのタスクのスナップショットが格納されます。

- OnSubtaskUpdated
サブタスク(パラレルおよびパラレル・シナリオのいずれかのタスク)の更新(ペイロード、コメント、添付ファイル、優先度などを含む)時にコールバック・クラスをコールする必要がある場合に選択します。

Oracle JDeveloperのインストールが、BPEL拡張とBPM拡張の両方を含むように更新されている場合は、次のコンテンツのコールバックも選択できます。

- コメント・コールバック
WFCOMMENT列以外のスキーマにコメントを格納するために、コールバック・クラスをコールする必要がある場合に選択します。コールバック・クラスは、oracle.bpel.services.workflow.callback.NotesStoreインタフェースを実装している必要があります。

- 添付コールバック
WFATTACHMENT列以外のスキーマに添付ファイルを格納するために、コールバック・クラスをコールする必要がある場合に選択します。コールバック・クラスは、oracle.bpel.services.workflow.callback.AttachmentStoreインタフェースを実装している必要があります。

- 検証コールバック
タスクまたはペイロードのいずれかを更新や承認などの前に検証するために、コールバック・クラスをコールする必要がある場合に選択します。

2. 実行するコールバックのタイプに応じて、次の項を参照してください。

- 第29.11.1.1項「Javaコールバックの指定」

- 第29.11.1.2項「ビジネス・イベント・コールバックの指定」

29.11.1.1 Javaコールバックの指定

Javaコールバックを指定する手順は、次のとおりです。

1. 「イベント」セクションの「状態」列で、タスク状態を選択します。

2. 「Javaクラス」列の空のフィールドをクリックして値を入力します。この値は、oracle.bpel.services.workflow.task.IRoutingSlipCallbackを実装するJavaクラスの完全クラス名です。図29-66に詳細を示します。

図29-66 Javaが選択された状態の「コールバック詳細」ダイアログ

「図29-66 Javaが選択された状態の「コールバック詳細」ダイアログ」の説明

3. 「OK」をクリックします。

29.11.1.2 ビジネス・イベント・コールバックの指定

ビジネス・イベント・コールバックを指定する手順は、次のとおりです。

1. 「イベント」セクションの「状態」列で、タスク状態を選択します。

2. 「Javaクラス」フィールドは空のままにします。

3. 「ワークフロー・イベントのトリガー」チェック・ボックスを選択します。これにより、図29-67に示すように、「Javaクラス」列が使用不可になります。各コールバック(OnAssignedなど)は、1つのビジネス・イベント・ポイントに対応しています。ビジネス・イベントが起動されると、イベント詳細にはタスク・オブジェクトおよび一連のプロパティが挿入されます。各プロパティの値は、起動されるイベントの内容に基づいて移入されます。

図29-67 ビジネス・イベントが選択された状態の「コールバック詳細」ダイアログ

「図29-67 ビジネス・イベントが選択された状態の「コールバック詳細」ダイアログ」の説明

事前にシードされている静的イベント定義言語(EDL)ファイル(JDev_Home\jdeveloper\integration\seed\soa\shared\workflow\HumanTaskEvent.edl)によって、サブスクライブ対象として使用可能なビジネス・イベントのリストが提供されます。これらのビジネス・イベントは、「コールバック詳細」ダイアログで選択したコールバックに対応しています。EDLファイルを参照し、適切なビジネス・イベントをサブスクライブするOracle Mediatorサービス・コンポーネントを作成する必要があります。

注意:

EDLファイルを配置できるようにするには、ファイルベースのMDS接続が必要です。ファイルベースのMDSの場所は、JDev_Home\jdeveloper\integration\seedです。

4. イベントをサブスクライブできる同じまたは異なるSOAコンポジット・アプリケーションに、Oracle Mediatorサービス・コンポーネントを作成します。

5. Oracle Mediatorの作成時に、「テンプレート」リストで、「イベントのサブスクライブ」を選択します。

6. 「追加」アイコンをクリックして、新しいイベントをサブスクライブします。

7. 「イベント定義」フィールドの右側にある「参照」アイコンをクリックし、EDLファイルを選択します。
「SOAリソース・ブラウザ」ダイアログが表示されます。

8. 前に作成したファイルベースのMDS接続を選択します。

9. 上部のリストから「リソース・パレット」を選択します。

10. 「SOA」→「共有」→「ワークフロー」→「HumanTaskEvent.edl」の順に選択します。

11. 「OK」をクリックします。
これで、選択可能なEDLファイル・ビジネス・イベントが「イベント・チューザ」に移入されます。

12. 「イベント」フィールドで、サブスクライブするイベントを選択します。図29-68に詳細を示します。

図29-68 イベント・コールバック

「図29-68 イベント・コールバック」の説明

イベントのサブスクライブに使用可能なヒューマン・タスクは複数あります。たとえば、次を実行したとします。

- イベント(OnAssignedなど)をサブスクライブするTaskAというヒューマン・タスクを構成しました。

- 同じイベントをサブスクライブするTaskBというヒューマン・タスクを構成しました。

TaskAとTaskBのイベントを区別し、意図したOracle Mediatorによってイベントを確実に処理するためには、静的なルーティング・フィルタを追加できます。

xpath20:compare(med:getComponentName(), 'TaskA')

これにより、送信コンポーネントがTaskAの場合にのみ、このルーティングが起動されます。

13. EDLファイルがファイルベースのMDS接続から選択されなかった場合、プロンプトに従って依存XSDファイルのインポートを受け入れ、「OK」をクリックします。EDLファイルがファイルベースのMDS接続から選択された場合、プロンプトは表示されません。
これで、Oracle Mediatorサービス・コンポーネントに、サブスクライブするビジネス・イベントが移入されます。同じEDLファイルに定義されている他のビジネス・イベントも、この時点で、または後でサブスクライブできます。

ビジネス・イベントおよびコールバックの詳細は、次の各項を参照してください。

- ビジネス・イベントの詳細は、第41章「ビジネス・イベントおよびイベント配信ネットワークの使用」を参照してください。

- サンプルのworkflow-116-WorkflowEventCallback(Oracle SOA Suiteサンプルで使用できます)。

29.11.2 BPELコールバックのタスクとルーティング・カスタマイズの指定方法

通常、BPELプロセスはワークフロー・コンポーネントをコールしてユーザーにタスクを割り当てます。ワークフローが完了すると、ヒューマン・ワークフロー・サービスはBPELプロセスにコールバックされます。ただし、詳細なコールバック(たとえば、onTaskUpdateまたはonTaskEscalated)をBPELプロセスに送信する場合は、「BPELコールバックのタスクとルーティング・カスタマイズを許可」オプションを使用できます。

このコールバック設定については、BPELダイアグラムを必ず手動でリフレッシュしてください。

BPELコールバックのタスクとルーティングのカスタマイズを指定する手順は、次のとおりです。

1. 「イベント」セクションで、「BPELコールバックのタスクとルーティング・カスタマイズを許可」チェック・ボックスを選択します。

2. Oracle BPELデザイナに戻ります。

3. タスクのアクティビティ・ダイアログを開きます。

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

これにより、タスクのscopeアクティビティ内に、BPELコールバックをカスタマイズするためのwhile、pick、およびpickアクティビティのonMessageブランチが作成されます。

タスクとルーティング・カスタマイズの指定の詳細は、第28.4.5.1項「BPELコールバックの起動」を参照してください。

29.11.3 BPELコールバックを無効にする方法

ユーザーtalkアクティビティ(Oracle BPELデザイナ内)にはinvokeアクティビティ、それに続いてreceiveまたはpickアクティビティがあります。「BPELコールバックの無効化」チェック・ボックスの選択を解除すると、リプライを待たずにタスク・サービスを起動できます。

BPELコールバックを無効化する手順は、次のとおりです。

1. 「イベント」セクションで、「BPELコールバックの無効化」チェック・ボックスの選択を解除します。

2. 「OK」をクリックします。

29.12 Oracle Enterprise Content Managementでのドキュメントの格納

図29-69に、ヒューマン・タスク・エディタの「ドキュメント」セクションを示します。

図29-69 ヒューマン・タスク・エディタ — 「ドキュメント」セクション

「図29-69 ヒューマン・タスク・エディタ — 「ドキュメント」セクション」の説明

30 ヒューマン・タスク用のタスク・フォームの設計

この章では、開発者がOracle JDeveloperのADFタスク・フローを使用して、ヒューマン・タスクのタスク・フォームを設計してカスタマイズできる方法について説明します。ヒューマン・タスクを使用すると、ユーザーはビジネス・プロセスと相互作用できます。それぞれのタスクには、タスク・メタデータとタスク・フォームという2つの部分があります。タスク・フォームは、タスクのコンテンツをユーザーのワークリストに表示するために使用されます。

Oracle BPM Worklistには、ユーザーまたはグループに割り当てられているすべてのワークリスト・タスクが表示されます。ワークリスト・ユーザーが特定のタスクにドリルダウンすると、タスク・フォームにはそのタスクの詳細が表示されます。たとえば、Fusion Order Demoの「ApprovalHumanTask」用のタスク・フォームには、注文合計などの注文情報や配送先情報が表示されます。

この章には次の項が含まれます:

- 第30.1項「タスク・フォームの概要」

- 第30.2項「タスク・フローとタスク・サービスの関連付け」

- 第30.3項「ヒューマン・タスクに基づいたADFタスク・フローの作成」

- 第30.4項「タスク・フォームの作成」

- 第30.5項「タスクXSD変更時のデータ・コントロールのリフレッシュ」

- 第30.6項「タスク・フロー・アプリケーションの保護」

- 第30.7項「電子メール通知の作成」

- 第30.8項「タスク・フローを使用したコンポジット・アプリケーションのデプロイ」

- 第30.9項「ワークリストでのタスク・フォームの表示」

- 第30.10項「電子メール通知でのタスクの表示」

- 第30.11項「複数のヒューマン・タスクを含むタスク・フロー・アプリケーションの再利用」

ヒューマン・ワークフローの問題のトラブルシューティングの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のヒューマン・ワークフローのトラブルシューティングに関する項を参照してください。

30.1 タスク・フォームの概要

SOAコンポジットにヒューマン・タスクが含まれている場合は、ユーザーがタスクと相互作用する方法が必要です。このため、Oracle SOA Suiteの統合開発環境には、Oracle Application Development Framework (Oracle ADF)が含まれています。Oracle ADFを使用すると、SOAコンポジットのヒューマン・タスクを表すタスク・フォームを設計できます。

タスク・フォームは、Java Server Page XML(.jspx)ファイルです。このファイルは、ヒューマン・タスクが含まれるSOAコンポジットを作成したOracle JDeveloper Designerで作成します。Java Server Page XMLファイルを作成するには、その前に、Oracle JDeveloperでページのエンコーディングをUTF-8に設定する必要があります。設定するには、Oracle JDeveloperで「ツール」→「プリファレンス」→「環境」の順に選択し、「エンコーディング」ドロップダウン・リストから「UTF-8」を選択します。

図30-1に、タスク・フォームの作成を開始する、Oracle JDeveloperの「ヒューマン・タスクに基づいたADFタスク・フロー」オプションを示します。

図30-1 Oracle JDeveloperの「ヒューマン・タスクに基づいたADFタスク・フロー」

「図30-1 Oracle JDeveloperの「ヒューマン・タスクに基づいたADFタスク・フロー」」の説明

30.1.1 タスク・フォームに関する注意事項: タイムゾーン変換

タスク・フォームの作成時には、タスク・ペイロードの日時要素に対してタイムゾーン変換が自動的に行われません。日時要素でタイムゾーン変換を有効にするには、<af:convertDateTime>タグを追加する必要があります。標準的なタスク・ヘッダーの時間ラベルを例として参照してください。例30-1にサンプルのヘッダーを示します。

例30-1 タイムゾーン変換

<af:outputText value="#{bindings.createdDate.inputValue}"
id="ot15">
<f:convertDateTime type="#{pageFlowScope.dt}"
timeZone="#{pageFlowScope.tz}"
dateStyle="#{pageFlowScope.df}"
timeStyle="#{pageFlowScope.tf}"/>
</af:outputText>

30.2 タスク・フローとタスク・サービスの関連付け

ヒューマン・タスクに基づいてADFタスク・フローを作成する場合は、タスク・メタデータ・ファイルを選択して、データ・コントロールを生成する必要があります。データ・コントロールは、ページ内のコンテンツのレイアウトを行うために使用され、実行時にはワークフロー・サービス・エンジンに接続して、タスク・コンテンツを取得し、タスクを操作します。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のADFタスク・フローの概要に関する項を参照してください。

hwtaskflow.xmlファイルは、サービス・エンジンとの接続時に詳細を取得するために使用されます。デフォルトでは、リモートEJBを使用してワークフロー・サーバーに接続します。SOAサーバーのURLとポートは、WebLogic Serverの実行時MBeanを使用して自動的に決定されます。ただし、その内容は、ここでURLとポート情報を明示的に指定することで上書きできます。

タスク詳細アプリケーションがワークフロー・サービスに接続できるように、ORMI権限があるユーザーをシードしてください。このユーザーは、Oracle Enterprise Manager Fusion Middleware Controlを使用してシードできます。

30.3 ヒューマン・タスクに基づいたADFタスク・フローの作成

ADFタスク・フローは、「タスクの詳細」ページのユーザー・インタフェースをモデリングするために使用されます。このタスク・フローは、ヒューマン・タスクが含まれている同じアプリケーション、または別のアプリケーションで作成できます。

タスク・フローを作成するには、その前に、ヒューマン・タスク(.taskファイル)をSOAコンポジットの一部として作成する必要があります。.taskファイルの作成方法については、第28章「ヒューマン・タスクの作成」を参照してください。

タスク・フローがヒューマン・タスクと同じアプリケーションにある場合は、そのタスク・フローに対して別のプロジェクトを作成します。SOAコンポジットに複数のヒューマン・タスクが含まれている場合は、各ヒューマン・タスクに関連付けられているADFタスク・フローごとに個別のプロジェクトを作成します。データ・コントロールは、ADFタスク・フローを使用し、タスクのパラメータと結果に基づいて作成します。

ADFタスク・フォームを自動生成するには、SOAコンポジット・アプリケーション内のヒューマン・タスクにアクセスします(フォームとタスクは同じアプリケーション内にあります)。詳細は、第30.3.1項「ヒューマン・タスク・エディタからADFタスク・フローを作成する方法」を参照してください。

別のアプリケーションにADFタスク・フォームを作成するには、新規のアプリケーションとプロジェクトを作成し、ヒューマン・タスクの.taskファイルを参照します。詳細は、第30.3.2項「ヒューマン・タスクに基づいたADFタスク・フローの作成方法」を参照してください。

30.3.1 ヒューマン・タスク・エディタからADFタスク・フローを作成する方法

ヒューマン・タスクとタスク・フローが同じアプリケーションにある場合、ヒューマン・タスクを指定する.taskファイルは、簡単にタスク・フローに関連付けられます。

ヒューマン・タスクに対してADFタスク・フローを作成する手順は、次のとおりです。

1. SOAコンポジット・アプリケーション内でBPELプロセスを開きます。

2. ヒューマン・タスク・アクティビティをダブルクリックし、「編集」をクリックします。
図30-2に、「Human Task」ダイアログを示します。

図30-2 ヒューマン・タスクの編集

「図30-2 ヒューマン・タスクの編集」の説明

3. 「.task」タブ(図30-3)で、「フォームの作成」をクリックして「タスク・フォームの自動生成」を選択します。

図30-3 ヒューマン・タスク・エディタでのタスク・フローの作成

「図30-3 ヒューマン・タスク・エディタでのタスク・フローの作成」の説明

4. プロジェクト名とディレクトリ・パスを入力(または、デフォルトをそのまま使用)して、「OK」をクリックします。
図30-4に示すように、「taskDetails1_jspx」アイコンがデザイナに表示されます。

図30-4 「taskDetails1_jspx」アイコン

「図30-4 「taskDetails1_jspx」アイコン」の説明

これで、タスク・フローおよびタスク・フォームが完成し、デプロイする準備ができました。

30.3.2 ヒューマン・タスクに基づいたADFタスク・フローの作成方法

デプロイメントを容易にするには、図30-1に示す「ヒューマン・タスクに基づいたADFタスク・フロー」オプションを使用して、ADFタスク・フローおよび追加のアーティファクトを作成します。.taskファイルを選択してADFタスク・フローに関連付けると、タスクのパラメータと結果に基づいてヒューマン・タスク・データ・コントロールが作成されます。これらのデータ・コントロールは、JSPXページで使用可能になります。タスク・フロー・プロジェクトを作成するときは、SOAコンポジット・プロジェクトへのアクセス権が必要です。

ヒューマン・タスクに基づいてADFタスク・フローを作成する手順は、次のとおりです。

1. 「ファイル」メイン・メニューから「新規」→「アプリケーション」→「SOAアプリケーション」の順に選択します。

2. 「OK」をクリックします。

3. アプリケーション名およびディレクトリ情報を入力(または、デフォルトをそのまま使用)して、「終了」をクリックします。

4. プロジェクト名を右クリックし、「新規」を選択します。

5. 「Web層」の下にある「JSF」を選択します。

6. 「ヒューマン・タスクに基づいたADFタスク・フロー」を選択し、「OK」をクリックします。

7. 「SOAリソース・ブラウザ」で、ヒューマン・タスクを定義した.taskファイルを検索して選択し、「OK」をクリックします。

1. ヒューマン・タスクがタスク定義と同じアプリケーションにある場合は、「ファイル」をクリックしてファイル・ブラウザを使用し、通常はコンポジット・ディレクトリにある.taskファイルに移動します。

2. ヒューマン・タスクが別のアプリケーションにある場合は、「リソース・パレット」をクリックしてMDSリソース・カタログを使用し、コンポジット・アプリケーションにある.taskファイルを検索します。

3. .taskファイルが現在のアプリケーション内にある場合は、「アプリケーション」をクリックします。

これにより、データ・コントロールを作成する「タスク・フローの作成」ダイアログが表示されます。

8. 「タスク・フローの作成」ダイアログでは、デフォルトをそのまま使用し、「OK」をクリックします。
図30-4に示すように、「taskDetails1_jspx」アイコンがデザイナに表示されます。このタスク・フローには、ビュー、コントロール・フローおよびタスク・リターンがあります。

タスク・フォームの作成を継続するには、次の項を参照してください。

- 第30.4.4項「「ペイロードを持つ完了済タスク」ドロップ・ハンドラを使用したタスク・フォームの作成方法」

または、

- 第30.4.5項「個別のドロップ・ハンドラを使用したタスク・フォーム・リージョンの作成方法」

30.3.3 ヒューマン・タスクに基づいたADFタスク・フロー作成時の処理内容

ヒューマン・タスクに基づいたADFタスク・フローの場合、タスク・フロー・アプリケーションにはタスク・フォームをワークフロー・サービスに接続するタスク・データ・コントロールがあります。データ・コントロールは次を提供します。

- タスク・データにアクセスして操作を行う様々なパラメータおよび操作

- インタフェース・リージョンを作成して、タスクの内容を表示できるドロップ・ハンドラ

図30-5に示すように、ヒューマン・タスクを意識したデータ・コントロールがOracle JDeveloperの「アプリケーション・ナビゲータ」の「データ・コントロール」パネルに表示されます。

図30-5 「データ・コントロール」パネルのタスク・コレクション

「図30-5 「データ・コントロール」パネルのタスク・コレクション」の説明

タスクのデータ・コントロール(図30-5の「タスク」ノードに表示)には、タスク・フォームを表示するドロップ・ハンドラがあります。詳細は、第30.4項「タスク・フォームの作成」を参照してください。

30.3.4 異なるメタ属性が指定された同じ要素を含む複数のADFタスク・フローに関する注意事項

同じ要素を含むが異なるメタ属性が指定されている(例: 編集可能と編集不可)ADFタスク・フローを複数作成する場合は、それぞれを個別に作成する必要があります。

たとえば、次のタスクを実行するとします。

1. SOAコンポジット・アプリケーションのタスク・フォーム・アプリケーションを2つ作成します。

- 1つのタスク・フォーム・アプリケーション(たとえば、銀行詳細入力タスクの「EnterBankDetails.task」)には、1つの編集可能ペイロード(たとえば、BankDetails)と1つの編集不可ペイロード(たとえば、Employee)が含まれます。

- もう1つのタスク・フォーム・アプリケーション(たとえば、個人情報検証タスクの「ValidatePersonalInformation.task」)には、1つの編集可能ペイロード(たとえば、Employee)が含まれます。

タスク・フォームを作成するとき、ウィザードでは、ペイロードEmployeeのADF表を定義するオプションが提示されます。

2. ウィザードを完了し、プロセスをデプロイします。

3. プロセスを起動します。

4. Oracle BPM Worklistにログインします。
個人情報検証タスク(ValidatePersonalInformation.task)があります。

5. このタスクを選択します。
Employeeの詳細は変更可能です。

6. 新規レコードを追加し、タスクを承認します。

7. 次に、銀行詳細入力タスク(EnterBankDetails.task)を選択します。Employeeは編集不可のペイロードですが、タスク・フォームでは、Employeeデータに対して「新規挿入」ボタンと「削除」ボタンが表示されます。

8. 「削除」をクリックし、「承認」を選択します。ペイロードが削除されます。

これで、2つのADFタスク・フロー・アプリケーションが作成され、両方にEmployee要素が含まれるが、異なるメタ属性が指定されている(編集可能と編集不可)ことを確認してください。

30.4 タスク・フォームの作成

タスク・フォームは、「タスク・フォームの自動生成」オプション、「タスク・フォーム・ウィザードの起動」オプション、またはヒューマン・タスクのドロップ・ハンドラを使用して作成できます。

- 「タスク・フォームの自動生成」オプションの使用方法については、第30.4.1項「自動生成タスク・フォームの作成方法」を参照してください。

- 「タスク・フォーム・ウィザードの起動」オプションの使用方法については、第30.4.3項「カスタム・タスク・フォーム・ウィザードを使用したタスク・フォームの作成方法」を参照してください。

- ヒューマン・タスクのドロップ・ハンドラの使用方法については、次の各項を参照してください。

- 第30.4.4項「「ペイロードを持つ完了済タスク」ドロップ・ハンドラを使用したタスク・フォームの作成方法」

- 第30.4.5項「個別のドロップ・ハンドラを使用したタスク・フォーム・リージョンの作成方法」

- 第30.4.6項「タスク・フォームへのペイロードの追加方法」

注意:

タスク・フォーム名は、大文字か小文字の英字で始まる必要があります。使用できるのは、英字とゼロ(0)から9までの数字のみです。

30.4.1 自動生成タスク・フォームの作成方法

タスク・フォームを自動生成すると、デフォルト・テンプレートが開き、その後、このテンプレートを変更できます。

自動生成タスク・フォームを作成する手順は、次のとおりです。

1. SOAコンポジット・アプリケーション内でBPELプロセスを開きます。

2. ヒューマン・タスク・アクティビティをダブルクリックし、「編集」をクリックします。

3. 図30-6に示すように、「.task」エディタで、「フォームの作成」をクリックして「タスク・フォームの自動生成」を選択します。

図30-6 タスク・フォームの作成

「図30-6 タスク・フォームの作成」の説明

4. プロジェクト名とディレクトリ・パスを入力(または、デフォルトをそのまま使用)して、「OK」をクリックします。
デフォルトのフォームが「taskDetails1.jspx」タブに開きます。ApprovalHumanTaskのデフォルトのフォームを図30-7に示します。

図30-7 ApprovalHumanTaskの自動生成タスク・フォーム

「図30-7 ApprovalHumanTaskの自動生成タスク・フォーム」の説明

30.4.2 カスタム・ページ・テンプレートにライブラリJARファイルを登録する方法

必要に応じて、カスタム・タスク・フォーム・ウィザードで独自のカスタム・ページ・テンプレートを指定できます。第30.4.3項「カスタム・タスク・フォーム・ウィザードを使用したタスク・フォームの作成方法」の説明に従って、カスタム・タスク・フォーム・ウィザードの「名前および定義」ページで「カスタム・ページ・テンプレート」を選択し、ライブラリJARファイルの名前とJARファイル内の.jspxテンプレート・ファイルへのパスを指定します。

前提条件として、まずOracle JDeveloperにライブラリJARファイルを登録する必要があります。

カスタム・ページ・テンプレートにライブラリJARファイルを作成する手順は、次のとおりです。

1. 「ツール」メニューから、「ライブラリの管理」を選択します。

2. 「新規」をクリックします。
「ライブラリの作成」ダイアログが表示されます。

3. 「クラスパス」をハイライトして、「エントリの追加」をクリックします。
「パス・エントリの選択」ダイアログが表示されます。

4. ライブラリのクラス・パスを選択して、「選択」をクリックします。
「クラスパス」の下にクラス・パスが表示され、「ライブラリ名」フィールドにライブラリJARファイル名が表示されます。選択したライブラリ名が接尾辞.jarで終わることを確認してください。図30-8に詳細を示します。

図30-8 カスタム・ライブラリJARファイル

「図30-8 カスタム・ライブラリJARファイル」の説明

5. 「デフォルトでデプロイ済」チェック・ボックスを選択します。

6. 「OK」をクリックします。
カスタム・タスク・フォーム・ウィザードの実行時に、「名前および定義」ページで「カスタム・ページ・テンプレート」を選択し、「ライブラリの作成」ダイアログで登録した次の情報を入力します。

- 「ライブラリの作成」ダイアログの「ライブラリ名」フィールドで入力したものと同じライブラリ名(これらの名前は一致する必要があります)。

- 「テンプレート・パス」フィールド内のライブラリJARファイルの.jspxテンプレート・ファイルへのパス。

30.4.3 カスタム・タスク・フォーム・ウィザードを使用したタスク・フォームの作成方法

このウィザードでは、ADFページ・テンプレートおよび標準化されたタスク・リージョンを使用してタスク・フォームを作成できます。次のいずれかのページ・テンプレートを使用できます。

- 次の場所で自動的に提供されるデフォルト・ページ・テンプレート:

[JDeveloper_Home}/jdeveloper/soa/modules/oracle.soa.worklist_11.1.1/adflibWorklistComponents.jar

デフォルトのページ・テンプレートは次のとおりです。

- 非タブ付きのデフォルト・テンプレート: taskDetailsTemplate.jspx

- ペイロードとコメント、添付ファイルおよび履歴セクションが別個のタブに表示されるタブ付きテンプレート: taskDetailsTemplate2.jspx

カスタム・タスク・フロー・ウィザードの「名前および定義」ページで、「パッケージ済」を選択し、「デフォルト」または「タブ付き」のいずれかを選択します。

- ユーザーが定義するカスタム・ページ・テンプレート。カスタム・タスク・フロー・ウィザードの「名前および定義」ページで、「カスタム」を選択し、ライブラリ名およびテンプレート名を選択します。
ページ・テンプレートとそのアーティファクトをADFライブラリJARファイルにパッケージします。これらのJARファイルは、他のOracleライブラリ・コンポーネントと同様にパッケージ化、デプロイ、検出および使用できます。ウィザードで、JAR名およびJARでのテンプレートの場所を指定するように求められます。

ページ・テンプレートでは、ページの特定の属性値など、ページ・レイアウト全体を定義できます。テンプレートを使用してページを作成すると、定義したレイアウトがすべて継承されます。テンプレートのレイアウトを変更すると、テンプレートを使用するすべてのページでレイアウト変更が自動的に反映されます。

ウィザードで使用されるテンプレートでは、次の6つのファセットのコンテンツが生成されます。

- アクション

- 添付ファイル

- 本文

- コメント

- ヘッダー

- 履歴

アクション、ヘッダーおよび本文のファセットでは、表示するコンテンツと属性を選択し、レイアウトを微調整できます。

6つのファセットはすべてデフォルト・ページ・テンプレートで定義されます。カスタム・テンプレートの場合は、これらの正確なファセット名をテンプレートで使用します。テンプレートにこれらのファセットが含まれていない場合は、JSPXファイルでファセットのコンテンツが生成されません。

タスク・フォームにページ・テンプレートを含めない場合は、「名前および定義」ページで「なし」を選択します。この場合、ヘッダー、1つ以上の本文、およびフッターを含むタスク・フォームがウィザードで生成され、表形式で列と行が表示されます。任意のタスク(システム)アクションを選択してフォームに表示したり、ヒューマン・タスクに対して定義したカスタム・アクションをフォーム上にボタンとして表示するように指定できます。また、添付ファイルおよびコメントとともに、ペイロードの一部または全部を選択して表示できます。

ファセットの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』を参照してください。

カスタム・タスク・フォームを作成する手順は、次のとおりです。

1. SOAコンポジット・アプリケーション内でBPELプロセスを開きます。

2. ヒューマン・タスク・アクティビティをダブルクリックし、「編集」アイコンをクリックします。
ヒューマン・タスク・エディタが表示されます。

3. エディタの上にある「フォームの作成」をクリックし、「タスク・フォーム・ウィザードの起動」を選択します。

4. プロジェクト名とディレクトリ・パスを入力(または、デフォルトをそのまま使用)して、「OK」をクリックします。図30-9に示すように、カスタム・フォーム・ウィザードに「名前および定義」画面が表示されます。

図30-9 カスタム・タスク・フォーム・ウィザード: フォーム名および定義

「図30-9 カスタム・タスク・フォーム・ウィザード: フォーム名および定義」の説明

5. 「フォーム名」フィールドに、ウィザードの最後に生成されるフォーム(.jspxファイル)の名前を指定します。名前を指定しない場合は、デフォルト名(Humantasknumber_Form)が指定されます。有効な文字が名前に使用されていることを確認してください。空白は許可されていません。

6. 「タスク・フロー名」(つまり、ウィザードの最後に生成されるADFタスク・フローの名前)を指定します。デフォルトの名前であるHumantasknumber_TaskFlowを受け入れるか、別の名前を指定します。

7. 「ページ・テンプレート」セクションで、次のいずれかを選択します。

- パッケージ済: これを選択してデフォルトのページ・テンプレートのいずれかを使用し、その後、リストから特定のテンプレートを選択します。

- カスタム: ライブラリおよびテンプレートを選択します。ライブラリが表示されていない場合、「ライブラリの管理」をクリックして、第30.4.2項「カスタム・ページ・テンプレートにライブラリJARファイルを登録する方法」の手順に従います。

8. 「次へ」をクリックします。このフォームはADFタスク・フローとして作成され、プロジェクトに追加されます。「ヘッダー・ページ」が表示されます。

9. 図30-10に示すように、「ヘッダー・ページ」で次の手順を実行し、「次へ」をクリックします。

- 「Actionsファセット」セクションで、タスク・フォームのタイトル・バーに含める次のオプションを選択します。

- 他のアクション(メニュー): タスクに対して可能なシステム・アクションがリストされます。たとえば、「情報のリクエスト」、「再割当て」、「期限更新」、「一時停止」、「エスカレート」、「保存」などです。

- 結果(ボタン): ヒューマン・タスクで定義したタスク・アクション(タスクの結果の設定など)のボタンが表示されます。

- 「Headerファセット」セクションで、表示列の数を入力します。各ヘッダー・ラベルを個別の列に表示する場合は、「選択済」リストに移動するヘッダーの数と同じ数を入力します。ここで「1」と入力し、7つのヘッダーを選択すると、7つすべてのヘッダーが1つの列に表示されます。

- ヘッダー・ラベルを「選択済」リストに移動し、必要に応じて順序を変更します。

図30-10 カスタム・タスク・フォーム・ウィザード: ヘッダーの設定

「図30-10 カスタム・タスク・フォーム・ウィザード: ヘッダーの設定」の説明

10. 図30-11に示すように、「本文ページ」の「Bodyファセット」セクションで、次の手順を実行してフォームを設定し、「次へ」をクリックします。

- 本文パネルを説明するタイトルを入力します。

- 行1の列数を入力します。単純なフォームの場合は、ヘッダー列の数として入力したのと同じ数を入力できます。

- 「追加」(+)ボタンをクリックして、行を追加します。新しい行ごとに、列の数を指定することもできます。行ごとに独自の列レイアウトを設定できます。たとえば、各行の列ごとに本文ページを作成して、「行1」、「列1」のようにラベルを付けることができます。

図30-11 カスタム・タスク・フォーム・ウィザード: 本文の設定

「図30-11 カスタム・タスク・フォーム・ウィザード: 本文の設定」の説明

注意:

ペイロード・データが表示されていない行または列を指定すると、空のパネル・グループが表示されます。この空のセクションでは、後でデータ・コントロールを使用してコンテンツをフォームに追加できます。

11. 図30-12に示すように、「行1 列1」ページで、ペイロードの全部または一部を「選択済」リストに移動して、「次へ」をクリックします。

図30-12 カスタム・タスク・フォーム・ウィザード: 本文フィールドの選択

「図30-12 カスタム・タスク・フォーム・ウィザード: 本文フィールドの選択」の説明

12. 「行1 列1」ページの後の「行n 列n」ページでは、ステップ11を繰り返して「次へ」をクリックします。
表示される「フッター」ページは、ステップ6で「名前および定義」ページで選択したページ・テンプレート(デフォルト・ページ・テンプレートまたはカスタム・ページ・テンプレートのいずれか)に応じて異なります。

「デフォルト・ページ・テンプレート」を選択した場合は、図30-13に示される「フッター」ページが表示されます。フッターに含めないコメント、添付ファイルまたは履歴のファセットの選択を解除し、「次へ」をクリックします。デフォルトで、コメント、添付ファイルおよび履歴のファセットはすべて選択されています。

図30-13 カスタム・タスク・フォーム・ウィザード: デフォルト・ページ・テンプレートのフッター・フィールドの選択

「図30-13 カスタム・タスク・フォーム・ウィザード: デフォルト・ページ・テンプレートのフッター・フィールドの選択」の説明

13. 図30-14に示すように、「サマリー」ページで選択内容を確認します。「戻る」をクリックして変更を行うか、「終了」をクリックします。

図30-14 カスタム・タスク・フォーム・ウィザード: サマリー

「図30-14 カスタム・タスク・フォーム・ウィザード: サマリー」の説明

図30-15(タブ上部)および図30-16(タブ下部)に示すように、デザイナが初期化され、「form_name.jspx」タブが表示されます。

図30-15 カスタム・タスク・フォーム(タブ上部)

「図30-15 カスタム・タスク・フォーム(タブ上部)」の説明

図30-16 カスタム・タスク・フォーム(タブ下部)

「図30-16 カスタム・タスク・フォーム(タブ下部)」の説明

30.4.4 「ペイロードを持つ完了済タスク」ドロップ・ハンドラを使用したタスク・フォームの作成方法

ヒューマン・タスクのドロップ・ハンドラは、図30-17に示すように、デザイナのコンテキスト・メニューに表示されます。

図30-17 タスク・フォームを作成するためのヒューマン・タスクのドロップ・ハンドラ

「図30-17 タスク・フォームを作成するためのヒューマン・タスクのドロップ・ハンドラ」の説明

タスク・フォームの作成には、他のADFドロップ・ハンドラ(図30-17に示すフォーム、表、ツリーなど)を使用することもできます。標準ADFドロップ・ハンドラの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。

ペイロードを持つ完了済タスク

このオプションでは、前述のタスク・フォーム・コンポーネント(タスク・ヘッダー、タスク履歴、タスク・アクション、およびタスクのコメントと添付ファイル)すべての組合せが作成され、さらにペイロードのインタフェースが作成されます。ペイロード・インタフェースは次のように作成されます。

- すべてのテキスト・ノードはテキスト入力フィールドとして作成されます。

- 要素にmaxOccurs="unbounded"がある場合は、表として表示されます。

- ネストされた表は表示されません。つまり、要素がmaxOccurs="unbounded"でmaxOccurs="unbounded"の子がある場合、子要素は表示されません。

- ネストのレベルが複数ある場合は、個々のセクションをドラッグ・アンド・ドロップして、標準ADFドロップ・ハンドラの1つを使用します。

ペイロードのない完了済タスク

このオプションでは、前述のタスク・フォーム・コンポーネント(タスク・ヘッダー、タスク履歴、タスク・アクション、およびタスクのコメントと添付ファイル)すべての組合せが作成されます。

電子メールのタスク詳細

このオプションでは、電子メールによる送信時に表示されるADFリージョンが作成されます。図30-18に示すフォームが生成されます。

図30-18 電子メール通知のタスク・フォーム

「図30-18 電子メール通知のタスク・フォーム」の説明

詳細は、第30.7項「電子メール通知の作成」を参照してください。

タスク・ヘッダー

タスク・フォームには、すべての標準ヘッダー・フィールドが追加されます。これには、タスク番号とタイトル、BPELプロセスの状態、結果および優先度、タスクの作成者、更新者、申告者またはタスクに割り当てられているユーザーに関する情報が含まれます。ここには、タスク作成、最終更新および有効期限に関する日時も表示されます。ヘッダー・フィールドは、タスク表示の必要性に応じて追加または削除できます。

図30-19に、ヘッダー情報の例を示します。

図30-19 ヘッダー情報

「図30-19 ヘッダー情報」の説明

図30-20に示すように、ヘッダーにはタスク・アクションに関連するボタンも作成されます。

図30-20 タスク・ヘッダー: タスク・アクションのボタン

「図30-20 タスク・ヘッダー: タスク・アクションのボタン」の説明

タスク・アクション

次のタスク・アクションは、「アクション」ドロップダウン・リストから表示されたり、ボタンとして表示されます。表示されるタスクは、タスクの状態(「割当て済」、「完了」など)と、そのタスクを表示するユーザーに付与されている権限によって異なります。たとえば、タスクがグループに割り当てられている場合は、「申告」ボタンのみが表示されます。タスクが申告されると、「却下」や「承認」など他のアクションが表示されます。

最初の3つのカスタム・アクション(「申告」、「終了」および「再開」)は、ボタンとしてタスク・フォームに表示されます。表示されるのは、タスクに適用可能なボタンのみです。他のアクションは、「情報のリクエスト」、「再割当て」、「ルート」の順に「アクション」リストに表示されます。カスタム・アクションの後には、システム・アクションの「取消」、「プッシュバック」、「エスカレート」、「リリース」、「一時停止」および「期限更新」が続き、その後に「保存」ボタンが続きます。これらのアクションの場合、入力するダイアログはありません。

- 申告: グループまたは複数のユーザーに割り当てられているタスクが最初に申告されます。「申告」は、グループまたは複数ユーザー割当ての「タスク・アクション」リストで選択可能な唯一のアクションです。タスクが申告されると、すべての適用可能なアクションがリストされます。

注意:

- FYIタスクが複数のユーザーに送られた場合、ユーザーはタスクを終了する前に、まず「申告」ボタンを選択してタスクを申告する必要があります。

- プッシュバックは、グループ投票ではなく単一承認者で機能するように設計されています。グループ投票(またはパラレル)シナリオを含むステージから別ステージへのプッシュバックは、許可されません。同様に、単一の割当て先からグループ投票(またはパラレル)シナリオにプッシュバックすることもできません。

- 終了: このアクションは、タスクを操作するユーザーは受信を確認する必要があるが、アクションは実行しないタスク(FYIと同様)で使用します。

- 再開: 「一時停止」アクションによって停止したタスクを再開できます。「一時停止」を参照してください。

- 情報のリクエスト: タスク作成者や前の割当て先に詳細情報をリクエストできます。再承認が不要な場合、タスクは次の承認者か、ビジネス・プロセスの次のステップに割り当てられます。

- 再割当て: マネージャは報告先にタスクを再割当てできます。「再割当て」オプションでは、「委任」機能も提供されます。この機能を使用すると、タスクを他のユーザーまたはグループに委任できます。委任されたタスクは、元のユーザーと委任されたユーザーの両方のワークリストに表示されます。委任先ユーザーは、元の割当て先のかわりにタスクを操作でき、そのタスクに対しては元の割当て先と同じ権限を持ちます。

- ルート: 承認者の順序が事前に決定されていない場合や、ワークフローが非定型ルーティングを許可するように設計されている場合は、タスクを非定型方式でルーティングできます。このようなタスクの場合は、「タスクの詳細」ページに「ルート」ボタンが表示されます。「ルーティング」ページから、ルーティングに使用する1人以上のユーザーをルックアップできます。複数の割当て先を指定する場合は、割当て先リストの対象として、単純割当て(ユーザー全員へのグループ割当て)、順次割当てまたはパラレル割当てのいずれかを選択できます。パラレル割当ての場合は、承認に必要な得票率を指定します。

- 取消: タスクをキャンセルできるのは、タスク作成者のみです。オプションのコメントがある場合は、「コメント」領域を使用できます。この場合は、ビジネス・プロセスによって、次の処理内容が決定されます。

- プッシュバック: このアクションは、ワークフロー内で1レベル上のタスクを前の割当て先に送信します。注意: プッシュバックは、グループ投票ではなく単一承認者で機能するように設計されています。グループ投票(またはパラレル)シナリオを含むステージから別ステージへのプッシュバックは、許可されません。同様に、単一の割当て先からグループ投票(またはパラレル)シナリオにプッシュバックすることもできません。

- エスカレート: エスカレートされたタスクはユーザーのマネージャに割り当てられます。オプションのコメントがある場合は、「コメント」領域を使用できます。

- リリース: タスクをリリースすると、他の割当て先が利用できるようになります。グループまたは複数のユーザーに割り当てられているタスクは、他の割当て先が申告できるようになります。

- 一時停止: このアクションは、タスクが再開されるまで、有効期限を延期します。タスクの一時停止と再開を実行できるのは、BPMWorkflowSuspendロールを付与されているユーザーのみです。その他のユーザーは、タスク・フィルタで「前へ」を選択するか、「一時停止」ステータスのタスクを検索することで、このタスクにアクセスできます。タスクを更新する各種ボタンは、一時停止後は無効になります。

- 期限更新: タスクを更新すると、タスクの有効期限が7日間延長されます(デフォルトはP7D)。更新期間は、Oracle Enterprise Manager Grid Controlコンソールから制御されます。期限更新は、タスク履歴に表示されます。オプションのコメントがある場合は、「コメント」領域を使用できます。

- 保存: タスクへの変更が保存されます。

タスク・フォームを作成している間は、可能なシステム・アクション・ボタンがすべて表示されますが、ワークリストに表示されるのは、タスク状態に適応していて、ユーザーの権限に対応したアクションのみです。

タスク履歴

タスク・アクションの履歴は、「タスクの詳細」ページに表示され、ワークリストにも履歴表として表示されます。履歴には、次のフィールドがあります。

- バージョン番号

- 参加者名: タスクを操作したユーザー

- アクション: たとえば、タスクが承認済または割当て済かどうか

- 更新者: 最後にタスクを更新したユーザーの名前

- アクション日

Oracle BPM Worklistでのタスク履歴の表示方法(履歴スナップショットの取得、今後の参加者のリスト表示、およびフル・タスク・アクションのリスト表示を実行するオプションを含む)については、「図32-19 履歴: グラフィカル・ビュー」および「図32-20 履歴: フル・タスク・アクション」を参照してください。

タスクのコメントと添付ファイル

コメントの追跡情報(コメントの日付およびコメント作成者のユーザー名を含む)は、タスクのライフ・サイクル全体を通じて保持されます。

タスクに関連付けられているファイルや参照URLは、すべてのヒューマン・タスク参加者が追加できます。

図30-21に、「コメント」リージョンと「添付ファイル」リージョンの例を示します。

図30-21 「コメント」リージョンと「添付ファイル」リージョン

「図30-21 「コメント」リージョンと「添付ファイル」リージョン」の説明

次のステップでは、タスク・フォームを、ペイロード付きで、各リージョンを個別作成せずに作成するドロップ・ハンドラの使用方法を説明します。各リージョンを個別に作成する場合は、第30.4.5項「個別のドロップ・ハンドラを使用したタスク・フォーム・リージョンの作成方法」を参照してください。

「ペイロードを持つ完了済タスク」ドロップ・ハンドラを使用してタスク・フォームを作成する手順は、次のとおりです。

1. デザイナで、「taskDetails1_jspx」をダブルクリックします。

2. 「JSFページの作成」ダイアログで、ファイル名およびディレクトリ情報を入力(または、デフォルトをそのまま使用)して、「OK」をクリックします。

3. 「アプリケーション・ナビゲータ」の「データ・コントロール」パネルで、「ヒューマン・タスク」ノード、「getTaskDetails」ノード、「戻る」ノードの順に展開します。

4. 「タスク」アイコンを「taskDetails.jspx」ウィンドウにドラッグします。

5. 「ヒューマン・タスク」を選択し、次に「ペイロードを持つ完了済タスク」を選択します。

6. 図30-22に示すように、「アクション・バインディングの編集」ダイアログで「OK」をクリックします。

図30-22 アクション・バインディングの編集

「図30-22 アクション・バインディングの編集」の説明

7. 図30-23に示すように、次の「アクション・バインディングの編集」ダイアログではデータ・コレクションが選択されています。「OK」をクリックします。

図30-23 データ・コレクションおよびアクションの選択

「図30-23 データ・コレクションおよびアクションの選択」の説明

図30-24に示すように、タスク・フォームが表示されます。

図30-24 タスク・フォーム

「図30-24 タスク・フォーム」の説明

30.4.5 個別のドロップ・ハンドラを使用したタスク・フォーム・リージョンの作成方法

複数のリージョンを持つ表示フォームは、図30-25に示すように、「タスク・ヘッダー」、「タスク・アクション」、「タスク履歴」および「タスク・コメントおよび添付ファイル」ドロップ・ハンドラを個別に使用して作成できます。

図30-25 ヒューマン・タスクのドロップ・ハンドラの使用

「図30-25 ヒューマン・タスクのドロップ・ハンドラの使用」の説明

「タスク・ヘッダー」では、ヘッダーとタスク・アクションの両方が表示されるため、「タスク・ヘッダー」を使用する際は「タスク・アクション」ドロップ・ハンドラは必要ありません。「タスク・アクション」は、「アクション」ドロップダウン・メニューとボタンは必要だが、ヘッダー詳細は不要の場合に使用します。

各リージョンを個別に作成せずにタスク・フォームを作成する場合は、第30.4.4「「ペイロードを持つ完了済タスク」ドロップ・ハンドラを使用したタスク・フォームの作成方法」を参照してください。

このタスク・フォームを作成するには、その前に、次を作成する必要があります。

- 新しいアプリケーション、SOAプロジェクトおよびヒューマン・タスク・サービス。

- ヒューマン・タスクに基づいたADFタスク・フロー。詳細は、第31.1項「ヒューマン・ワークフローのチュートリアルの概要」を参照してください。

個別のドロップ・ハンドラを使用してタスク・フォーム・リージョンを作成する手順は、次のとおりです。

1. デザイナで、「taskDetails1.jspx」をダブルクリックします。

2. 「JSFページの作成」ダイアログで、ファイル名およびディレクトリ情報を入力(または、デフォルトをそのまま使用)して、「OK」をクリックします。

3. 「アプリケーション・ナビゲータ」の「データ・コントロール」パネルで、「ヒューマン・タスク」ノード、「getTaskDetails」ノード、「戻る」ノードの順に展開します。

4. 「タスク」アイコンを「taskDetails.jspx」ウィンドウにドラッグします。

5. 「ヒューマン・タスク」を選択し、次に「タスク・ヘッダー」を選択します。
これにより、図30-26に示すように、タスク・アクションの「アクション」ドロップダウン・リストとボタンが作成され、さらに、図30-27に示すように、ヘッダー詳細が作成されます。

図30-26 タスク・フォームの設計: タスク・アクションのボタン

「図30-26 タスク・フォームの設計: タスク・アクションのボタン」の説明

図30-27 タスク・フォームの設計: タスク・ヘッダー

「図30-27 タスク・フォームの設計: タスク・ヘッダー」の説明

6. 「タスク」アイコンをJSPXデザイナに追加ドラッグします。この作業を行うたびに次のオプションを選択します。

- 「ヒューマン・タスク」、次に「タスク履歴」。

- 「ヒューマン・タスク」、次に「タスク・コメントおよび添付ファイル」。

これで、タスク・フォームには、タスク・アクションのドロップダウン・リストとボタン、タスク・ヘッダー詳細、タスク履歴およびコメントと添付ファイル対する複数のリージョンが設定されます。

タスク・フォームの作成を続行するには、第30.4.6項「タスク・フォームへのペイロードの追加方法」のステップ1を参照してください。

30.4.6 タスク・フォームへのペイロードの追加方法

ペイロードの追加に加えて、タスク・フォーム・リージョンを作成できます。第30.4.5項「個別のドロップ・ハンドラを使用したタスク・フォーム・リージョンの作成方法」のステップ1を参照してください。

ペイロードをタスク・フォームに追加する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「ADF Faces」を選択します。

2. 「レイアウト」を展開します。

3. 「パネル・グループ・レイアウト」を「ヘッダー」と「コメント」セクションの間にドラッグします。

4. 「データ・コントロール」パネルで「タスク」を展開し、次に「ペイロード」を展開します。

5. ペイロード・データ・コレクションを「パネル・グループ・レイアウト」領域の左にドラッグします。
「ペイロード」ノードをフォームにドロップするかわりに、「ペイロード」ノードを展開して必要な子要素をフォームにドロップすることもできます。たとえば、VacationRequestペイロードの読取り専用フォームを作成するには、「ペイロード」ノードを展開し、「休暇申請プロセス・リクエスト」ノードをフォームにドラッグして、「フォーム」→「ADF読取り専用フォーム」の順に選択します。

6. 図30-28に示すように、コンテキスト・メニューから「フォーム」を選択し、次に「ADF読取り専用フォーム」を選択します。

図30-28 タスク・フォームのペイロード・リージョンへのADF読取り専用フィールドの追加

「図30-28 タスク・フォームのペイロード・リージョンへのADF読取り専用フィールドの追加」の説明

7. 「フォーム・フィールドの編集」ダイアログで、デフォルトをそのまま使用し、「OK」をクリックします。
これで、「詳細」と「履歴」の間のペイロード・リージョンに、読取り専用フィールドが作成されます。

図30-29に示すように、ペイロード・リージョンが表示されます。

図30-29 タスク・フォームのペイロード・リージョン

「図30-29 タスク・フォームのペイロード・リージョン」の説明

図30-30に示すタスク・フォームは完成しており、デプロイする準備ができています。

図30-30 タスク・フォーム(taskDetails.jspx)

「図30-30 タスク・フォーム(taskDetails.jspx)」の説明

30.4.7 タスク・フォーム作成時の処理内容

設計したフォームは.jspxファイルに保存されます。ファイルの場所は次のとおりです。

JDev_Oracle_Home\mywork\task_form_application_name\project_name\public_html

このタスク・フォームはデプロイできます。第30.8項「タスク・フローを使用したコンポジット・アプリケーションのデプロイ」を参照してください。

30.5 タスクXSD変更時のデータ・コントロールのリフレッシュ

タスク・メタデータが変更された場合、そのタスク・メタデータに基づく「データ・コントロール」ビューをリフレッシュします(XSD変更はリフレッシュされません)。リフレッシュ機能により、データ・コントロールが再作成されます。図30-31に「リフレッシュ」オプションを示します。

図30-31 データ・コントロールのリフレッシュ

「図30-31 データ・コントロールのリフレッシュ」の説明

データ・コントロールをリフレッシュする手順は、次のとおりです。

1. データ・コントロールを右クリックします。

2. 図30-32に示すように、「定義の編集」オプションを選択し、「データ・コントロールのリフレッシュ」ダイアログを表示します。

図30-32 「データ・コントロールのリフレッシュ」ボタン

「図30-32 「データ・コントロールのリフレッシュ」ボタン」の説明

30.6 タスク・フロー・アプリケーションの保護

タスク・フローは、コンテナベースのセキュリティを使用して保護できます。詳細は、第34.6.2.1.2項「アイデンティティ伝播のためのクライアント・アプリケーションの要件」を参照してください。Webセキュリティには、フォームベース認証およびSSOベース認証を使用できます。

通知を電子メールで送信している場合は、/notification/secureによりURLを保護してコンテナベースのセキュリティを使用しないでください。これは、SOA外部では作成できない内部コンテキストを使用してSOA APIがアクセスするためです。URLパターンの内部セキュリティに、/(すべてのURL)および//notificationを含めることはできません。

アイデンティティ伝播に必要な追加ステップはありません。アイデンティティはサーバーEJBに自動的に伝播されます。

30.7 電子メール通知の作成

電子メール通知がヒューマン・タスクの一部として定義されている場合は、その電子メール通知を表示するためにタスク・フォームが使用されます。電子メール通知には、次のオプションがあります。

- デフォルト電子メール通知: ヒューマン・タスク用に作成するタスク・フォームの最初のページを使用します。コンテンツはHTMLベースの電子メールとして送信されます。タスク・フローの画像は、接続切断モードでも通知を表示できるように添付ファイルに含まれています。「ペイロードを持つ完了済タスク」および「ペイロードのない完了済タスク」ドロップ・ハンドラを含むすべてのドロップ・ハンドラが電子メールに適しています。

- カスタム電子メール通知: 「電子メールのタスク表示」ドロップ・ハンドラを使用して、カスタム電子メール通知タスク・ページを作成します。

ヒューマン・タスク定義(.taskファイル)の一部として通知設定を確認するには、第34.2項「ヒューマン・ワークフローからの通知」を参照してください。

30.7.1 電子メール通知の作成方法

コンテンツとレイアウトを指定したカスタム電子メール通知を送信するには、他のJSPXファイルを作成して、電子メール通知ページを設計します(ただし、通知のデフォルト・ページを変更なしで使用することもできます)。カスタム通知ページの作成には、カスタムおよび標準ドロップ・ハンドラを使用するか、電子メール通知ドロップ・ハンドラを使用します。さらに、次を実行します。

- ルーターをタスク・フローに追加します。このルーターは、タスク・フローに対して、bpmClientTypeページ・フロー・スコープ値に基づいた制御フローに従って、電子メール通知ページまたはデフォルト・ページのいずれかを送信するように指示します。

- 生成されたインラインCSSを編集して、ページをカスタマイズします。実行時には、追加のCSSは含まれておらず、ADF CSSは使用できません。Oracle SOA Suiteサンプルで使用できる、サンプルnotification-101およびnotification-102を参照してください。

- 画像をHTMLまたはJSFページから直接参照します(間接参照、たとえば、画像を順番に追加するJSFは許可されません)。

30.7.1.1 ルーターを使用したタスク・フローの作成

ルーターを使用した制御フロー・ケースでは、特定のパラメータに基づいて、特定ページにリクエストを渡すことができます。ヒューマン・タスクに基づいたADFタスク・フローでは、電子メール通知用に特別なページが必要です。この項では、電子メール通知用に特別なページを作成する方法を説明します。

ルーターを使用してタスク・フローを作成する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」でタスク・フロー・プロジェクトを展開し、project_name _TaskFlow.xmlをダブルクリックします。
デザイナでXMLファイルが開きます。ダイアグラム・ビューに、「taskDetails1.jspx」アイコンが表示されます。

2. 「コンポーネント・パレット」から「ADFタスク・フロー」を選択し、「表示」アイコンをデザイナにドラッグします。

3. アイコンの下にある「view1」をクリックし、電子メール通知ページの名前を入力します。
図30-33に、「EmailPage」という名前の例を示します。

図30-33 電子メール・ページの作成

「図30-33 電子メール・ページの作成」の説明

4. 「コンポーネント・パレット」から「ルーター」をデザイナにドラッグします。

5. アイコンの下の「router1」をクリックし、ルーター名を入力します。
図30-35に、「PageRouter」という名前の例を示します。

6. ルーターがコールされることを確認するには、図30-34に示すように、ルーター・アイコンを右クリックし、「アクティビティのマーク」→「デフォルト・アクティビティ」の順にクリックします。

図30-34 ルーターをデフォルト・アクティビティとしてマーク

「図30-34 ルーターをデフォルト・アクティビティとしてマーク」の説明

7. 「ルーター」、「router_name」、「プロパティ・インスペクタ」タブの順にクリックします。

8. 「デフォルト結果」フィールドにdefaultと入力します。

9. 「追加」をクリックして、「結果」フィールドに電子メール通知ページの名前を入力します。

10. 式ビルダーを使用して、#{pageFlowScope.bpmClientType=="notificationClient"}を「式」フィールドに入力します。

11. 「コンポーネント・パレット」で「制御フロー・ケース」をクリックします。

12. デザイナで、ルーター・ページ・アイコンから「taskDetails1.jspx」にドラッグします。
図30-35に示すように、制御フローには、「デフォルト」というラベルが自動的に付けられます。

図30-35 制御フローの接続

「図30-35 制御フローの接続」の説明

13. 「コンポーネント・パレット」で「制御フロー・ケース」をクリックします。

14. デザイナで、ルーター・ページ・アイコンから電子メール通知ページ・アイコンにドラッグします。

15. control-flow-case、「email_page_name」、「プロパティ・インスペクタ」タブの順にクリックします。

16. 「結果(自)」リストに、電子メール通知ページの名前を入力します。
図30-36に、完成した制御フローを示します。

図30-36 電子メール通知の完成した制御フロー

「図30-36 電子メール通知の完成した制御フロー」の説明

電子メール通知ページの作成を続行するには、第30.7.1.2項「電子メール通知ページの作成」のステップ1を参照してください。

30.7.1.2 電子メール通知ページの作成

電子メール通知ページの作成は、タスク・フォームの作成と類似していますが、レイアウトとインライン・スタイルの定義が必要です。デザイン情報については、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』を参照してください。

電子メール通知ページを作成する手順は、次のとおりです。

1. デザイナで、「EmailPage」をダブルクリックします。

2. 「JSFページの作成」ダイアログで、ファイル名およびディレクトリ情報を入力(または、デフォルトをそのまま使用)して、「OK」をクリックします。
デザイナで「EmailPage.jspx」タブが開きます。

3. 「コンポーネント・パレット」からデザイナに共通コンポーネント(たとえば画像など)やレイアウト・コンポーネントのいずれかをドラッグします。

4. レイアウト・コンポーネントを選択した場合は、位置合せやその他の詳細を「プロパティ・インスペクタ」タブで指定してください。
図30-37に、「パネル・グループ・レイアウト」が選択されているときに使用できるレイアウト・フィールドを示します。

図30-37 レイアウトの指定

「図30-37 レイアウトの指定」の説明

パネル・グループ・レイアウトの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』を参照してください。

5. 「外観」、「スタイルおよびテーマ」、「動作」、「詳細」、「カスタマイズ」および「注釈」を展開し、図30-38に示すように、その他の詳細を指定します。

図30-38 レイアウトの指定: 詳細

「図30-38 レイアウトの指定: 詳細」の説明

詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』.のコンポーネント属性の設定方法に関する項を参照してください。

6. 「データ・コントロール」パネルで、「ヒューマン・タスク」ノード、「getTaskDetails」ノード、「戻る」ノードの順に展開します。

7. パネル・グループ・レイアウト領域に「タスク」をドラッグします。

8. 図30-39に示すように、「ヒューマン・タスク」を選択し、次に「電子メールのタスク詳細」を選択します。

図30-39 ヒューマン・タスクのドロップ・ハンドラ

「図30-39 ヒューマン・タスクのドロップ・ハンドラ」の説明

このドロップ・ハンドラには、ヘッダーとともに、インライン・スタイル、ADFを使用するペイロード、およびインライン・スタイルを使用するコメントが含まれます。ペイロードは動的に生成されるため、インライン・スタイルは含まれていません。

通常、各コンポーネントの「ヘッダー」セクションにはインライン・スタイルがあるため、それぞれのコンポーネントの「コンテンツ」セクションでは同じスタイルを使用できます。

9. 「アクション・バインディングの編集」ダイアログで、データ・コレクションを選択し、「OK」をクリックします。

これで、電子メール・タスク・フォームが完了し、デプロイする準備ができました。

30.7.2 電子メール通知ページ作成時の処理内容

電子メール通知ページは、電子メールのメッセージ本文にHTMLコンテンツとして送信されます。ページ上の画像は添付ファイルとしてインラインされています。相対URLは絶対URLに変換されます。

30.7.3 電子メール通知ページの作成に関する注意事項

フォームのフィールドに使用されているスタイルが電子メールに対して有効でない場合は、電子メールに通知が正しく表示されない場合があります。このため、生成されたインラインCSSを編集して、ページをカスタマイズする必要がある場合があります。詳細は、第30.7.1項「電子メール通知の作成方法」を参照してください。

セキュリティの問題によって、フォームが正しく表示されない場合もあります。詳細は、第30.6項「タスク・フロー・アプリケーションの保護」を参照してください。

30.8 タスク・フローを使用したコンポジット・アプリケーションのデプロイ

ワークリスト・アプリケーションでタスク・フォームを使用するには、その前に、タスク・フローが含まれているコンポジット・アプリケーションをデプロイする必要があります。タスク・フローを使用してアプリケーションをデプロイするプロセスは、第30.8.1項「タスク・フローを使用したコンポジット・アプリケーションのデプロイ方法」で説明するように、SOAコンポジット・アプリケーションのデプロイと基本的に同じです。詳細は、第43章の「SOAコンポジット・アプリケーションのデプロイ」を参照してください。

30.8.1 タスク・フローを使用したコンポジット・アプリケーションのデプロイ方法

次の手順を実行するには、アプリケーション・サーバー接続が必要です。

タスク・フローを使用してコンポジット・アプリケーションをデプロイする手順は、次のとおりです。

1. コンポジット・アプリケーション名を右クリックし、「デプロイ」→「application_name」→「デプロイ先」→「application_server_connection」の順に選択します。
接続していない場合は、「新規接続」を選択し、「アプリケーション・サーバー接続」ウィザードを使用します。

2. 「デプロイメント・ターゲットの選択」ダイアログで、サーバー・インスタンスを選択します。

3. 「OK」をクリックします。

30.8.2 タスク・フォームの再デプロイ方法

タスク・フォームを変更して再度デプロイするときは、デプロイメント手順を繰り返します(タスク・フォーム・アプリケーション名を右クリックし、「デプロイ」→「application_name」→「デプロイ先」→「application_server_connection」の順に選択します)。フォームをアンデプロイするかどうかのメッセージが表示されます。「OK」をクリックし、再度タスク・フォームをデプロイします。

30.8.3 タスク・フローを別のアプリケーションとしてデプロイする方法

タスク・フローを別のアプリケーションとしてSOAコンポジット・アプリケーション外にデプロイする場合は、アプリケーションとプロジェクトをそのタスク・フローのコンテナとして作成します。SOAコンポジット・アプリケーションをデプロイした後に、タスク・フロー・アプリケーションをデプロイします。

30.8.4 非SOAのOracle WebLogic Serverにタスク・フォームをデプロイする方法

この項では、非SOAのOracle WebLogic Serverにタスク・フォームをデプロイする方法について説明します。

30.8.4.1 タスク・フォームをデプロイする前に: ポートの変更

RMIまたはHTTPポートのデフォルト値を使用していない場合は、Oracle JDeveloperのwf_client_config.xmlファイルを開いて、値を変更します。

タスク詳細を非SOAサーバーにデプロイする場合は、wf_client_config.xmlファイルを構成する必要があります。このファイルが作成されてタスク詳細プロジェクトに追加されるのは、タスク詳細をSOAサーバーではない別の管理対象サーバーにデプロイする場合のみです。ファイルの<serverURL>と<rootEndpointURL>には、SOAサーバーのホスト名とポート番号を指定します。

例30-2に、wf_client_config.xmlファイルのサンプルを示します。

例30-2 wf_client_config.xmlファイルのサンプル

<?xml version="1.0" encoding="UTF-8" ?>
xmlns="http://xmlns.oracle.com/bpel/services/client">
<server default="true" name="default">
<localClient>

<participateInClientTransaction>false</participateInClientTransaction>
</localClient>
<remoteClient>
<serverURL>t3://my_host.us.example.com:8001</serverURL>

<initialContextFactory>weblogic.jndi.WLInitialContextFactory</initialContextFactory>

<participateInClientTransaction>false</participateInClientTransaction>
</remoteClient>
<soapClient>

<rootEndPointURL>http://my_host.us.example.com:8001</rootEndPointURL>
</soapClient>
</server>
</workflowServicesClientConfiguration>

30.8.4.2 セッション・トラッキングCookieの一意のCookieコンテキスト・パスの構成

非SOAのOracle WebLogic Serverにタスク・フォームをデプロイする前に、タスク・フォームWebアプリケーションのセッション・トラッキングCookieにアプリケーション固有のCookieトリガー・パスが構成されていることを確認してください。これにより、タスク・フォーム・アプリケーションが一意のセッション・トラッキングCookieを持つことになり、Oracle BPM WorklistやOracle Business Process Management Workspaceなど他のOracle BPMアプリケーション用に作成されるセッション・トラッキングCookieによって上書きされることがなくなります。

セッションCookieトリガー・パスを構成するには、JDeveloperで、Webプロジェクトのweblogic.xmlファイルを開きます。.xmlファイル・エディタで概要タブを選択し、セッションを選択します。「Cookieトリガー・パス」フィールドに、Webアプリケーションのアプリケーション・コンテキスト・パスを入力します。たとえば、アプリケーションのURLがhttp://host:port/my-application-context-rootで、my-application-context-rootがアプリケーション・コンテキスト・ルートの名前である場合、Cookieトリガー・パスを次のように設定します。

/my-application-context-root

30.8.4.3 非SOAのOracle WebLogic Serverへのoracle.soa.workflow.jarのデプロイ

非SOAのOracle WebLogic Serverには、oracle.soa.workflow.jar共有ライブラリが必要です。次にあります。

ORACLE_JDEV_HOME\jdeveloper\soa\modules\oracle.soa.workflow_11.1.1

Oracle WebLogic Server管理コンソールを使用して、JARファイルをデプロイします。

oracle.soa.workflow.jarをデプロイする手順は、次のとおりです。

1. Oracle WebLogic Server管理コンソールに移動します。

http://remote_hostname:remote_portnumber/console

2. 「ドメイン構造」領域で、「デプロイメント」をクリックします。

3. 図30-40に示すように、「インストール」をクリックします。

図30-40 Oracle WebLogic Server管理コンソール: 「デプロイメント」リスト

「図30-40 Oracle WebLogic Server管理コンソール: 「デプロイメント」リスト」の説明

4. 「パス」フィールドに次のパスを入力し、「次へ」をクリックします。

ORACLE_JDEV_HOME/jdeveloper/soa/modules/oracle.soa.workflow_11.1.1/oracle.soa.workflow.jar

5. 図30-41に示すように、同じデプロイメントの名前を維持し、「次へ」をクリックします。

図30-41 Oracle WebLogic Server管理コンソール: 「アプリケーション・インストール・アシスタント」

「図30-41 Oracle WebLogic Server管理コンソール: 「アプリケーション・インストール・アシスタント」」の説明

6. ライブラリとしてデプロイ・オプションを選択し、「終了」をクリックします。

7. 図30-42に示すように、oracle.soa.workflow(11.1.1,11.1.1)ライブラリが「アクティブ」状態であることを確認します。

図30-42 Oracle WebLogic Server管理コンソール: 「アクティブ」状態のoracle.soa.workflow

「図30-42 Oracle WebLogic Server管理コンソール: 「アクティブ」状態のoracle.soa.workflow」の説明

第30.8.4.4項「非SOAのOracle WebLogic Serverでの外部JNDIプロバイダの定義」を参照して続行してください。

30.8.4.4 非SOAのOracle WebLogic Serverでの外部JNDIプロバイダの定義

Oracle WebLogic Server管理コンソールを使用して、次のタスクを実行します。

外部JNDIプロバイダを定義する手順は、次のとおりです。

1. 「ドメイン構造」領域で、「サービス」を展開し、「外部JNDIプロバイダ」をクリックします。

2. 「新規」をクリックします。

3. 図30-43に示すように、「名前」フィールドにForeignJNDIProvider-SOAと入力し、「OK」をクリックします。

図30-43 外部JNDIプロバイダの作成

「図30-43 外部JNDIプロバイダの作成」の説明

4. 「ForeignJNDIProvider-SOA」リンクをクリックします。

5. 次のように入力し、「保存」をクリックします。

- 「初期コンテキスト・ファクトリ」に、weblogic.jndi.WLInitialContextFactoryと入力します。

- 「プロバイダURL」に、t3://soa_hostname:soa_portnumber/soa-infraと入力します。
クラスタ化された環境では、「プロバイダURL」にhttp://soa_hostname:soa_portnumber/soa-infraと入力します。

- 「ユーザー」に、weblogicと入力します。

- 「パスワード」に、weblogicと入力します。

図30-44に、これらの情報を入力するページを示します。

図30-44 外部JNDIプロバイダの定義

「図30-44 外部JNDIプロバイダの定義」の説明

第30.8.4.5項「非SOAのOracle WebLogic Serverでの外部JNDIプロバイダ・リンクの定義」を参照して続行してください。

30.8.4.5 非SOAのOracle WebLogic Serverでの外部JNDIプロバイダ・リンクの定義

Oracle WebLogic Server管理コンソールを使用して、次のタスクを実行します。

外部JNDIプロバイダ・リンクを定義する手順は、次のとおりです。

1. 「ドメイン構造」領域で、「サービス」を展開し、「外部JNDIプロバイダ」をクリックします。

2. 「ForeignJNDIProvider-SOA」リンクをクリックします。

3. 「リンク」タブをクリックします。

4. 「新規」をクリックします。
図30-45に、「リンク」タブを示します。

図30-45 外部JNDIプロバイダ・リンクの定義: 「リンク」タブ

「図30-45 外部JNDIプロバイダ・リンクの定義: 「リンク」タブ」の説明

5. 次のように入力し、「OK」をクリックします。

- 「名前」に、RuntimeConfigServiceと入力します。

- 「ローカルJNDI名」に、RuntimeConfigServiceと入力します。

- 「リモートJNDI名」に、RuntimeConfigServiceと入力します。

図30-46に、これらを入力するページを示します。

図30-46 外部JNDIプロバイダ・リンクの定義: リンクのプロパティ

「図30-46 外部JNDIプロバイダ・リンクの定義: リンクのプロパティ」の説明

6. 次のように入力し、「OK」をクリックします。

- 「名前」、「ローカルJNDI名」、「リモートJNDI名」に、ejb/bpel/services/workflow/TaskServiceBeanと入力します。

- 「名前」、「ローカルJNDI名」、「リモートJNDI名」に、ejb/bpel/services/workflow/TaskMetadataServiceBeanと入力します。

- 「名前」、「ローカルJNDI名」、「リモートJNDI名」に、TaskReportServiceBeanと入力します。

- 「名前」、「ローカルJNDI名」、「リモートJNDI名」に、TaskEvidenceServiceBeanと入力します。

- 「名前」、「ローカルJNDI名」、「リモートJNDI名」に、TaskQueryServiceと入力します。

- 「名前」、「ローカルJNDI名」、「リモートJNDI名」に、UserMetadataServiceと入力します。

第30.8.4.6項「bpm-services.jarに対する権限付与を含める方法」を参照して続行してください。

30.8.4.6 bpm-services.jarに対する権限付与を含める方法

bpm-services.jarに対する権限付与を含めるには、system-jazn-data.xmlファイルを編集し、非SOAのOracle WebLogic Serverを再起動します。

bpm-services.jarに対する権限付与を含める手順は、次のとおりです。

1. ドメイン・ディレクトリ「soa-infra」に移動し、次の場所に移動して、system-jazn-data.xmlファイルを検索します。

ORACLE_WEBLOGIC_INSTALL/user_projects/domains/your_domain_name/config/fmwconfig

2. system-jazn-data.xmlに、次の権限付与を追加します(全部または一部の権限付与が存在する場合は、欠落している部分のみ追加します)。

<grant>
<grantee>
<codesource>
<url>file: ORACLE_JDEV_HOME/jdeveloper/soa/modules/oracle.soa.workflow_
11.1.1/bpm-services.jar</url>
</codesource>
</grantee>
<permissions>
<permission>
<class>oracle.security.jps.JpsPermission</class>
<name>VerificationService.createInternalWorkflowContext</name>
</permission>
<permission>
<class>oracle.security.jps.service.credstore.CredentialAccessPermission
</class>
<name>credstoressp.credstore.BPM-CRYPTO.BPM-CRYPTO</name>
<actions>read,write</actions>
</permission>
<permission>
<class>oracle.security.jps.JpsPermission</class>
<name>IdentityAssertion</name>
<actions>*</actions>
</permission>
</permissions>
</grant>

3. 非SOAのOracle WebLogic Serverを再起動します。

第30.8.4.7項「アプリケーションのデプロイ」を参照して続行してください。

30.8.4.7 アプリケーションのデプロイ

タスク・フォームを含むアプリケーションは、他のアプリケーションをデプロイする方法と同じ方法で非SOAのOracle WebLogic Serverにデプロイします。アプリケーション・サーバー接続を設定するときは、非SOAサーバー上のドメイン(第30.8.4.6項「bpm-services.jarに対する権限付与を含める方法」のステップ1で指定したドメイン)を指定します。アプリケーションのデプロイについては、第43章「SOAコンポジット・アプリケーションのデプロイ」を参照してください。

30.8.5 タスク・フォームのデプロイ時の処理内容

タスク・フォームがデプロイされると、タスク・メタデータとタスク・フロー・アプリケーションURL間の関連付けが自動的に作成されます。このマッピングを更新するには、Oracle Enterprise Manager 11g Fusion Middleware Controlを使用します。特定のSOAコンポジット・アプリケーションについては、「コンポーネント・メトリック」表のタスク・フロー・コンポーネントにアクセスします。「管理」タブに、タスク・フォームのURIが表示されます。詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。タスク・フローがHTTPSアクセス用に構成されている場合は、Enterprise Managerでの追加設定が必要になる場合があります。

注意:

タスク・フォームの関連付けが自動的に実行されるためには、SOAサーバーが実行中である必要があります。関連付けが実行されていない場合に、ワークリスト・アプリケーションまたはOracle Business Process Management Workspaceでそのタスクのタスク・フォームにアクセスしようとすると、「このタスクのタスク詳細は見つかりません」というメッセージが表示されます。 この場合は、アプリケーションを再起動するか、Oracle Enterprise Managerに移動してタスク・フォームのURLを手動で登録できます。

タスクの操作方法については、第32章「Oracle BPM Worklistの使用」を参照してください。

注意:

- タスク・フォームが正しく機能するために、常に、タスク・フローがデプロイされているホストの完全名を使用してURLを指定してください。

- Oracle WebLogic Server管理コンソールで以前設定したホスト名とポート番号とは異なるポート番号を持つ別のURLからタスク・フォームにアクセスする場合、タスクの詳細をワークリストに正しく表示するには、Oracle WebLogic Server管理コンソールでフロント・エンドのポート番号を変更し、タスク・フォームを再デプロイする必要があります。

30.8.6 タスク・フローのアンデプロイに関する注意事項

タスク・フローのWebアプリケーションがデプロイされると、タスク・フローのURLがデータベースに登録されます。タスクをクリックしてタスク詳細を表示すると、Oracle BPM WorklistにこのURLが表示されます。後でタスク・フローのWebアプリケーションをアンデプロイまたは停止した場合、データベース内のタスク・フローのURLはアンデプロイ時に削除されません。その結果、ワークリスト内のタスクをクリックしてタスク詳細を表示するときに、メッセージ「このタスクでは詳細を使用できません」ではなく「404 見つかりません」エラーが表示されます。「404 見つかりません」エラーを回避するには、Oracle Enterprise Manager Fusion Middleware Controlコンソールを使用して、アプリケーション・ホームページからタスク・フロー・アプリケーションをアンデプロイします。

30.9 ワークリストでのタスク・フォームの表示

タスク・フォームは、Oracle BPM Worklistに表示されており、ユーザーが割り当てられたヒューマン・タスクを操作するWebベースのインタフェースです。ユーザーの権限によって特定のアクションが使用可能または不可能となります。

図30-47に、ワークリスト・アプリケーションの「タスクの詳細」ページに表示されるヘルプ・デスク・リクエスト例のタスク・フォームを示します。

図30-47 ワークリストの「タスクの詳細」ページ

「図30-47 ワークリストの「タスクの詳細」ページ」の説明

30.9.1 ワークリストでのタスク・フォームの表示方法

タスク・フォームは、ログイン後にOracle BPM Worklistで使用可能になります。手順については、第32.2.1項「ワークリストへのログイン方法」を参照してください。

30.10 電子メール通知でのタスクの表示

図30-48に、電子メールに表示される電子メール・タスク通知を示します。

図30-48 電子メール・タスク通知

「図30-48 電子メール・タスク通知」の説明

選択可能なアクションとして「解決済」または「未解決」をクリックするか、「ワークリスト・アプリケーション」リンクをクリックすると、ワークリストにログインできます。アクションをクリックすると電子メール作成ウィンドウが表示され、このウィンドウでは、コメントを追加して、電子メールを送信できます。

デフォルトでは、タスク通知のテキストには「ワークリスト・アプリケーション」と書かれていますが、そのテキストと、関連付けられるURLは変更できます。

30.10.1 タスク通知におけるワークリスト・アプリケーションのテキストの変更

デフォルトでは、タスク通知のテキストには「ワークリスト・アプリケーション」と書かれていますが、そのテキストは変更できます。これを変更するには、カスタム・リソース・バンドルを作成し、適切な文字列を変更します。

タスク通知のテキストを変更する手順は、次のとおりです。

1. サンプルのworkflow-110-workflowCustomizationsでWorkflowLabels.propertiesリソース・バンドルを開きます。

2. WorkflowLabels.propertiesファイルで、次の文字列を変更します。

TASK_NOTIF_MSG.WORKLIST_APPLICATION=Worklist Application
TASK_NOTIF_MSG.WORKSPACE_APPLICATION=Workspace Application

リソース・バンドル文字列の変更方法については、workflow-110-workflowCustomizationsのサンプルを参照してください。

3. インスタンスの「ワークフロー・カスタム・クラスパスURL」構成パラメータを更新します。
アプリケーションが動作するために、WorkflowLabels.propertiesファイルをデプロイする必要はありません。かわりに、次のいずれかを行います。

- file:///で始まるURLを使用して適切な場所を指し、ファイル・システム上でホストします。

- oramds:///...で始まるURLを使用し、MDSでファイルをホストします。

30.10.2 タスク通知におけるワークリスト・アプリケーションのURLの変更

タスク通知のテキストを変更する手順は、次のとおりです。

1. Oracle Enterprise Manager Fusion Middleware Controlにログインします。

2. ナビゲータで、「SOA」フォルダを開きます。

3. 「soa-infra」を右クリックして、「SOA管理」→「ワークフロー構成」→「タスク」タブを選択します。
「ワークフロー・タスク・サービス・プロパティ」ページが表示されます。

4. 「拡張」を展開します。

5. 「ワークリスト・アプリケーションURL」を変更します。たとえば、次のような既存のエントリを変更できます。

http://[HTTP_HOST]:[HTTP_PORT]/integration/worklistapp/TaskDetails?taskId=PC_HW_TASK_ID_TAG

次のように変更できます。

http://[HTTP_HOST]:[HTTP_PORT]/patch/info/page.jspx?taskId=PC_HW_TASK_ID_TAG

30.10.3 タスク通知におけるワークリスト・アプリケーションのURLの表示と非表示

ワークリスト・アプリケーションのURLの表示と非表示の詳細は、第29.8.6項「通知でのOracle BPM Worklist URLの表示方法」を参照してください。

30.11 複数のヒューマン・タスクを含むタスク・フロー・アプリケーションの再利用

複数のヒューマン・タスクを含む単一のタスク・フロー・アプリケーションを再利用できます。この機能を使用するには、すべてのヒューマン・タスクに両方のペイロード要素が含まれている必要があり、さらに、それらの結果が同一である必要があります。

30.11.1 複数のヒューマン・タスクを含むタスク・フロー・アプリケーションの再利用方法

1. TASKFLOW_PROJ_DIR\adfmsrc\hwtaskflow.xmlファイルを開きます。

2. ヒューマン・タスクを追加するたびに、ファイル内(ファイルの最後で</hwTaskFlows>の直前)に次の要素を追加します。

<hwTaskFlow>
<WorkflowName>$TASK_NAME</WorkflowName>
<TaskDefinitionNamespace>$TASK_NAMESPACE</TaskDefinitionNamespace>
<TaskFlowId>$TASK_FLOW_NAME</TaskFlowId>
<TaskFlowFileName>$TASK_FLOW_FILENAME</TaskFlowFileName>
</hwTaskFlow

説明:

- $TASK_NAMEは、.taskファイル内のヒューマン・タスク名(<name>要素の値)に置き換えます。

- $TASK_NAMESPACEは、.taskファイル内のヒューマン・タスクのネームスペース(要素<taskDefinition>の属性targetNameSpaceの値)に置き換えます。

- $TASK_FLOW_NAMEは、既存の<hwTaskFlow>/<TaskFlowId>要素をコピーします。

- $TASK_FLOW_FILENAMEは、既存の<hwTaskFlow>/<TaskFlowFileName>要素をコピーします。

30.11.2 様々なアクションを含むタスク・フロー・アプリケーションの再利用方法

様々なタスクのための様々なアクションを含む単一のタスク・フローを再利用できます。手順は次のとおりです。

1. タスクフローを生成するために使用するタスク内のすべてのアクションを定義します。

2. それらのタスクの中で、除外するアクションを無効化します。

31 ヒューマン・ワークフローのチュートリアル

この章では、最初のワークフローを設計する方法を最初から最後まで説明します。

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

- 第31.1項「ヒューマン・ワークフローのチュートリアルの概要」

- 第31.2項「前提条件」

- 第31.3項「BPELプロセスを使用したアプリケーションおよびプロジェクトの作成」

- 第31.4項「ヒューマン・タスク・サービス・コンポーネントの作成」

- 第31.5項「ヒューマン・タスクの設計」

- 第31.6項「ヒューマン・タスクとBPELプロセス・サービス・コンポーネントの関連付け」

- 第31.7項「アプリケーション・サーバー接続の作成」

- 第31.8項「SOAコンポジット・アプリケーションのデプロイ」

- 第31.9項「プロセス・インスタンスの開始」

- 第31.10項「タスク・フォームのプロジェクトの作成」

- 第31.11項「Oracle BPM Worklistでのタスクの操作」

- 第31.12項「タスク・フォームのデプロイ」

- 第31.13項「その他のチュートリアル」

31.1 ヒューマン・ワークフローのチュートリアルの概要

このチュートリアルで開発するアプリケーションは、次のユースケースに基づいています。

- 従業員は休暇申請を提出します

- マネージャは休暇申請を承認または却下します

- 従業員は、自分の申請が承認または却下された通知を受け取ります

このチュートリアルでは、新しいアプリケーションとSOAプロジェクトを作成する方法と、承認または却下のために休暇申請をマネージャに送信するヒューマン・タスクを設計する方法について説明します。

結果としてSOAコンポジット・アプリケーションには、次のコンポーネントが含まれます。

- BPELプロセス

- ヒューマン・タスク。従業員が提出した休暇申請を承認します。

また、Oracle ADFベースのタスク・フォームの作成方法についても説明します。Oracle ADFベースのタスク・フォームを使用して、アプリケーションがデプロイされて実行されたときに、エンド・ユーザーが休暇申請の操作を行えるようにします。Oracle ADFベースのタスク・フォームを作成するには、新しいアプリケーションと新しいプロジェクトを作成する必要があります。

このチュートリアルでは、次のタスクをガイドします。

- SOAコンポジット・エディタの使用

- ヒューマン・タスク・エディタの使用

- Oracle BPELデザイナを使用した単一承認ワークフローのモデリング

- Oracle ADFベースのOracle BPM Worklistの作成

- Oracle BPM Worklistを使用したタスクの表示および応答

31.2 前提条件

このチュートリアルでは、次の内容を前提にしています。

- Oracle SOA Suiteは、SOAインフラストラクチャが構成されているホストにインストールされています。

- BPELアクティビティやパートナ・リンクなどの基本的なBPEL構成要素と、基本的なXPath関数について理解しているユーザーを対象にしています。このユーザーは、SOAコンポジット・エディタとOracle BPELデザイナ(BPELプロセスを設計およびデプロイするための環境)についても理解している必要があります。

1. 次の構文を使用して、VacationRequest.xsdというファイルを作成します。このファイルには、休暇申請と後続のレスポンスに対するスキーマが含まれています。

<schema attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://xmlns.oracle.com/VacationRequest"
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="VacationRequestProcessRequest">
<complexType>
<sequence>
<element name="creator" type="string"/>
<element name="fromDate" type="date"/>
<element name="toDate" type="date"/>
<element name="reason" type="string"/>
</sequence>
</complexType>
</element>
<element name="VacationRequestProcessResponse">
<complexType>
<sequence>
<element name="result" type="string"/>
</sequence>
</complexType>
</element>
</schema>

注意:

VacationRequest.xsdファイルは、チュートリアルworkflow-100-VacationRequestの一部としてダウンロードすることもできます。このチュートリアルと他のチュートリアルのダウンロードの詳細は、第31.13項「その他のチュートリアル」を参照してください。

31.3 BPELプロセスを使用したアプリケーションおよびプロジェクトの作成

BPELプロセスを使用してアプリケーションおよびプロジェクトを作成する手順は、次のとおりです。

1. Oracle JDeveloperを起動します。

2. 「ファイル」メイン・メニューから「新規」→「アプリケーション」→「SOAアプリケーション」の順に選択します。

3. 「OK」をクリックします。

4. 「アプリケーション名」フィールドにVacationRequestと入力し、「次へ」をクリックします。

5. 「プロジェクト名」フィールドにVacationRequestと入力し、「次へ」をクリックします。

6. 「コンポジット・テンプレート」リストで、BPELプロセスを使用するコンポジットを選択し、「終了」をクリックします。

7. 「BPELプロセスの作成」ダイアログが表示されます。

8. 「名前」フィールドに、VacationRequestProcessと入力します。

9. 「BPELプロセスの作成」ダイアログの下部に移動します。

10. 「入力」フィールドの右側にある「検索」アイコンをクリックします。
「タイプ・チューザ」ダイアログが表示されます。

11. 右上隅にある「スキーマ・ファイルのインポート」アイコンをクリックします。
「スキーマ・ファイルのインポート」ダイアログが表示されます。

12. 第31.2項「前提条件」で作成したVacationRequest.xsdファイルを参照して選択します。

13. 図31-1に示すように、「タイプ・チューザ」ダイアログに戻るまで、「OK」をクリックします。

図31-1 リクエスト要素とレスポンス要素が表示された「タイプ・チューザ」ダイアログ・ボックス

「図31-1 リクエスト要素とレスポンス要素が表示された「タイプ・チューザ」ダイアログ・ボックス」の説明

14. 入力要素の「VacationRequestProcessRequest」を選択して、「OK」をクリックします。
「BPELプロセスの作成」ダイアログに戻ります。

15. 「出力」フィールドの右側にある「検索」アイコンをクリックします。

16. 出力要素の「VacationRequestProcessResponse」を選択して、「OK」をクリックします。
図31-2に示すように、「BPELプロセスの作成」ダイアログに戻ります。

図31-2 BPELプロセス・ダイアログ

「図31-2 BPELプロセス・ダイアログ」の説明

17. 残りのすべての設定に対するデフォルト値をそのまま使用し、「OK」をクリックします。
図31-3に示すように、BPELプロセス・サービス・コンポーネントはSOAコンポジット・エディタに作成されます。「BPELプロセスの作成」ダイアログで「SOAPサービスとして公開」を選択したため、BPELプロセスはサービス・バインディング・コンポーネントに自動的に接続されます。このサービスでは、SOAコンポジット・アプリケーションが外部の顧客に公開されます。

図31-3 SOAコンポジット・エディタのBPELプロセス

「図31-3 SOAコンポジット・エディタのBPELプロセス」の説明

サービス・コンポーネントおよびSOAコンポジット・エディタの詳細は、第2章「Oracle SOA Suiteを使用したSOAコンポジット・アプリケーションの開発」を参照してください。

31.4 ヒューマン・タスク・サービス・コンポーネントの作成

ヒューマン・タスク・サービス・コンポーネントを作成し、そのコンポーネントでヒューマン・タスクを設計します。

ヒューマン・タスク・サービス・コンポーネントを作成する手順は、次のとおりです。

1. コンポーネント・パレットの「サービス・コンポーネント」セクションから、ヒューマン・タスクをSOAコンポジット・エディタにドラッグします。
「ヒューマン・タスクの作成」ダイアログが表示されます。

2. 表31-1に記載されている詳細を入力します。

表31-1 「ヒューマン・タスクの作成」ダイアログのフィールドと値

フィールド

値

名前

VacationRequestTaskと入力します。

ネームスペース

デフォルトの値をそのまま使用します。

SOAPバインディングを持つコンポジット・サービスの作成

チェック・ボックスは選択しないでください。かわりに、ヒューマン・タスクを作成し、後で、このヒューマン・タスクを第31.3項「BPELプロセスを使用したアプリケーションおよびプロジェクトの作成」で作成したBPELプロセスに関連付けます。このBPELプロセスは、自動的にバインドされたWebサービスを使用して作成されています。

3. 「OK」をクリックします。
図31-4に示すように、BPELプロセスの上部にあるSOAコンポジット・エディタに、「ヒューマン・タスク」アイコンが表示されます。

図31-4 SOAコンポジット・エディタの「ヒューマン・タスク」アイコン

「図31-4 SOAコンポジット・エディタの「ヒューマン・タスク」アイコン」の説明

4. 「ヒューマン・タスク」アイコンをダブルクリックします。
ヒューマン・タスク・エディタが表示されます。ヒューマン・タスクの設計を開始します。

31.5 ヒューマン・タスクの設計

ヒューマン・タスクを設計する手順は、次のとおりです。

1. 「タスクのタイトル」フィールドに、Request for Vacationと入力します。

2. 結果のデフォルト値(「APPROVE」および「REJECT」)をそのまま使用します。このタスクの場合、これらの結果は、休暇申請に対するマネージャの操作に2つの選択肢があることを示しています。

3. エディタの左側にある「データ」タブをクリックします。

4. 「追加」アイコンをクリックして、タスク・ペイロードを指定します。

5. 「文字列パラメータの追加」を選択します。
「タスク・パラメータの追加」ダイアログが表示されます。XSDファイル内の要素を表すパラメータを作成します。これにより、ペイロード・データがワークフロー・タスクで使用できるようになります。

6. 「要素」を選択します。

7. 「要素」フィールドの右側にある「検索」アイコンをクリックします。
「タイプ・チューザ」ダイアログが表示されます。

8. 「プロジェクトのスキーマ・ファイル」→「VacationRequest.xsd」→「VacationRequestProcessRequest」の順に開いて選択し、「OK」をクリックします。図31-5に詳細を示します。

図31-5「タイプ・チューザ」ダイアログ

「図31-5 「タイプ・チューザ」ダイアログ」の説明

9. 「ワークリストにより編集可能」チェック・ボックスが選択されている必要があります。この選択によって、実行時にOracle BPM Worklistからこのパラメータを変更するオプションが提供されます。

10. 「タスク・パラメータの追加」ダイアログで、「OK」をクリックします。

11. エディタの左側にある「割当て」タブをクリックします。

12. 図31-6に示すように、「Stage1」の下部にある<Edit participant>ボックスがハイライト表示されます。

図31-6 割当ておよびルーティング・ポリシー

「図31-6 割当ておよびルーティング・ポリシー」の説明

13. ヒューマン・タスク・エディタの上にある「編集」アイコンをクリックします。
「参加者タイプの編集」ダイアログが表示されます。このタスクに参加者を追加します。第27.2.1.1.2項「参加者タイプ」で説明したように、Oracle SOA Suiteには、特定のビジネス・ニーズに対応する参加者タイプと呼ばれる組込みパターンが複数用意されています。

14. 「タイプ」リストに表示されている、デフォルトの参加者タイプの「単一」をそのまま使用します。休暇申請タスクを操作するのは単一の割当て先であるマネージャのため、このタイプを選択します。

15. 「参加者名」表で、「追加」アイコンをクリックし、「ユーザーの追加」を選択します。
この参加者タイプは、タスクに対して単独で機能します。

16. 「データ型」列をクリックし、表示されたリストから「式別」を選択します。図31-7に詳細を示します。
このアクションを使用すると、タスクのコンテンツによってタスクを動的に割り当てることができます。休暇申請を提出している従業員は、このタスクに渡されたパラメータ(第31.3項「BPELプロセスを使用したアプリケーションおよびプロジェクトの作成」でインポートしたXSDファイル内のcreator要素)から取得されます。このタスクは、その従業員のマネージャに自動的にルーティングされます。

図31-7 「データ型」列での「式別」の選択

「図31-7 「データ型」列での「式別」の選択」の説明

17. 「値」列で、「参照」アイコン(...)をクリックして、「式ビルダー」ダイアログを起動します。

18. 「関数」セクションのドロップダウン・リストで、「Identity Service Functions」を選択します。

19. 「getManager」を選択します。この関数によって、休暇申請タスクを作成したユーザーのマネージャが取得されます。

20. 「関数」セクション上部にある「式に挿入」をクリックします。

21. 関数のカッコ内にカーソルを置きます。

22. 「スキーマ」セクションで、「task:task」→「task:payload」→「ns1:VacationRequestProcessRequest」→「ns1:creator」の順に展開します。
ここで、ns1はこの例のネームスペースであり、ユーザーのネームスペースとは異なる場合があります。

23. 「式に挿入」をクリックします。
「式ビルダー」ダイアログの「式」セクションに、XPath式が表示されます。図31-8に詳細を示します。

図31-8 XPath式

「図31-8 XPath式」の説明

24. 「OK」をクリックして、「式ビルダー」ダイアログを閉じます。

25. 「OK」をクリックして、「参加者タイプの追加」ダイアログを閉じます。

26. 「ファイル」メニューから「すべて保存」を選択します。

31.6 ヒューマン・タスクとBPELプロセス・サービス・コンポーネントの関連付け

ヒューマン・タスクを第31.3項「BPELプロセスを使用したアプリケーションおよびプロジェクトの作成」で作成したBPELプロセスに関連付けます。

ヒューマン・タスクとBPELプロセス・サービス・コンポーネントを関連付ける手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、「composite.xml」をダブルクリックします。

2. SOAコンポジット・エディタで、「VacationRequestProcess」BPELプロセス・サービス・コンポーネントをダブルクリックします。
BPELプロセスがOracle BPELデザイナに表示されます。

3. 「コンポーネント・パレット」で、「SOAコンポーネント」を開きます。

4. 「receiveInput」receiveアクティビティの下に、「Human Task」をドラッグ・アンド・ドロップします。

5. アクティビティをダブルクリックします。
「Human Task」ダイアログが表示されます。

6. 「タスク定義」リストから、作成した「VacationRequestTask」タスクを選択します(現在表示されていない場合)。
ダイアログが図31-9に示すようにリフレッシュされ、他のフィールドが表示されます。

図31-9 「Human Task」ダイアログ

「図31-9 「Human Task」ダイアログ」の説明

7. 図31-10に示すように、「BPEL変数」列で「参照」アイコン(...)をクリックします。

図31-10 BPEL変数のエントリ

「図31-10 BPEL変数のエントリ」の説明

「タスク・パラメータ」ダイアログが表示されます。

8. 「タイプ」リストで「変数」を選択します。

9. 「プロセス」→「変数」→「inputVariable」→「payload」→「ns1:VacationRequestProcessRequest」の順に展開します。図31-11に詳細を示します。

図31-11 変数の選択

「図31-11 変数の選択」の説明

10. 「OK」をクリックします。

完成すると、ダイアログは図31-12のようになります。

図31-12 BPEL変数

「図31-12 BPEL変数」の説明

11. 「OK」をクリックして「Human Task」ダイアログを閉じます。
図31-13に示すように、ヒューマン・タスク・アクティビティが表示されます。

図31-13 Oracle BPELデザイナのヒューマン・タスクおよびパートナ・リンク

「図31-13 Oracle BPELデザイナのヒューマン・タスクおよびパートナ・リンク」の説明

12. SOAコンポジット・エディタに戻ります。BPELプロセス・サービス・コンポーネントとヒューマン・タスク・サービス・コンポーネントが自動的に接続されていることに注意してください。図31-14に詳細を示します。

図31-14 SOAコンポジット・エディタ

「図31-14 SOAコンポジット・エディタ」の説明

13. 「ファイル」メニューから「すべて保存」を選択します。

31.7 アプリケーション・サーバー接続の作成

Oracle SOA Suiteがインストールされ、SOAインフラストラクチャで構成されたアプリケーション・サーバーへの接続を作成します。ここでは、Oracle WebLogic Serverへの接続を作成する方法について説明します。IBM WebSphere Serverなどの他のアプリケーション・サーバーへの接続を作成する方法は、Oracle Fusion Middlewareサード・パーティ・アプリケーション・サーバー・ガイドを参照してください。

アプリケーション・サーバー接続を作成する手順は、次のとおりです。

1. 「ファイル」メイン・メニューから、「新規」→「接続」→「アプリケーション・サーバー接続」の順に選択します。

2. 「OK」をクリックします。

3. 「接続名」フィールドに、接続名を入力します。

4. 「接続タイプ」リストで「WebLogic 10.3」を選択します。

5. 「次へ」をクリックします。

6. 「ユーザー名」フィールドに、weblogicと入力します。

7. 「パスワード」フィールドに、アプリケーション・サーバーに接続するためのパスワードを入力します。

8. 「次へ」をクリックします。

9. SOAインフラストラクチャで構成されているアプリケーション・サーバーのホスト名を入力します。

10. 「WebLogicドメイン」フィールドに、Oracle WebLogic Serverドメインを入力します。

11. 「次へ」をクリックします。

12. 「接続のテスト」をクリックします。
成功した場合は、図31-15に示すメッセージが表示されます。

図31-15 接続の成功

「図31-15 接続の成功」の説明

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

14. 「ファイル」メニューから「すべて保存」を選択します。

31.8 SOAコンポジット・アプリケーションのデプロイ

接続を作成したアプリケーション・サーバーにデプロイします。

SOAコンポジット・アプリケーションをデプロイする手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、「VacationRequest」プロジェクトを右クリックし、「デプロイ」→「VacationRequest」の順に選択します。

2. デプロイメント・ウィザードの各ページの指示に従い、プロジェクトをデプロイします。
プロジェクトがデプロイされます。

デプロイメントの詳細は、第43.7項「SOAコンポジット・アプリケーションのデプロイ」を参照してください。

31.9 プロセス・インスタンスの開始

プロセス・インスタンスを開始する手順は、次のとおりです。

1. プロセス・インスタンスを開始する「Webサービスのテスト」ページにアクセスする手順の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

31.10 タスク・フォームのプロジェクトの作成

タスク・フォームのプロジェクトを作成します。これは、ヒューマン・タスクを作成したプロジェクトとは別のプロジェクトです。

タスク・フォームのプロジェクトを作成する手順は、次のとおりです。

1. 「VacationRequestTask」ヒューマン・タスクをダブルクリックします。
ヒューマン・タスク・エディタが表示されます。

2. 上部の「フォームの作成」メニューから、「タスク・フォームの自動生成」を選択します。図31-16に詳細を示します。

図31-16 タスク・フォームの作成

「図31-16 タスク・フォームの作成」の説明

「プロジェクトの作成」ダイアログが表示されます。

3. 「プロジェクト名」フィールドに、VacationRequestTaskFlowと入力し、「OK」をクリックします。

4. 「ファイル」メイン・メニューから「すべて保存」を選択します。

31.11 Oracle BPM Worklistでのタスクの操作

Oracle BPM Worklistでタスクを解決する手順は、次のとおりです。

1. Oracle BPM Worklistに移動します:

http://hostname:7001/integration/worklistapp

2. Oracle BPM Worklistにログインします。

3. タスクを解決します。

31.12 タスク・フォームのデプロイ

タスク・フォームをデプロイする手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、「VacationRequestTaskFlow」プロジェクトを右クリックし、「デプロイ」→「VacationRequestTaskFlow」の順に選択します。

2. デプロイメント・ウィザードの各ページの指示に従い、タスク・フォームをデプロイします。
タスク・フォームがデプロイされます。

デプロイメントの詳細は、第43.7項「SOAコンポジット・アプリケーションのデプロイ」を参照してください。

3. Oracle BPM Worklistに戻ります。

4. Oracle BPM Worklistの下部に、タスク・フォームが表示されることに注意してください。

31.13 その他のチュートリアル

休暇申請のユースケースに加えて、他のチュートリアルもOracle SOA Suiteサンプルから入手できます。

表31-2に、複数のサンプルの概要を示します。すべてのサンプルは、ワークリスト・アプリケーションとワークフロー通知の使用を説明しています。サンプルの完全なリストについては、このURLを参照してください。

表31-2 エンドツーエンドの例

サンプル

説明

名前

デモ・コミュニティ・シード・アプリケーション

デモ・コミュニティのシードを実行します。他のすべてのワークフロー・サンプルの前提条件となります。

workflow-001-DemoCommunitySeedApp

休暇申請

承認または却下のため、マネージャに割り当てられる休暇申請を提出するサンプルを提供しています。また、このサンプルは、休暇申請のOracle ADFタスク・フォームを作成して、タスクを操作する方法を説明しています。

workflow-100-VacationRequest

売上げ見積り要請

多重タスクに関連する複雑なワークフローのサンプルを提供しています。

workflow-102-SalesQuote

契約承認

契約を承認するサンプルを提供しています。このサンプルは、タスクのデジタル署名を使用します。

workflow-104-ContractApproval

反復設計

設計プロセスの中でワークフロー・タスクが割当て先との間を何度も通過できるサンプルを提供しています。拡張ルーティング・ルールでルーティング動作を実装します。

workflow-106-IterativeDesign

ワークフロー・カスタマイズ

ワークフロー・サービスAPI(タスク属性、ビュー名などのカスタム・リソース文字列など)にカスタマイズを実装する方法を示します。

workflow-110-workflowCustomizations

MLSサンプル

タスク・タイトルに複数の翻訳があるタスクの設定方法を示します。

workflow-114-MLSSample

ワークフロー・イベント・コールバック

ワークフロー・イベント・コールバックの使用方法を示します。タスク・ライフサイクル・イベントで生成されるワークフロー・イベントがOracle Mediatorによって使用されます。

workflow-116-WorkflowEventCallback

ユーザー構成データ・マイグレータ

ユーザー構成(ビュー、マップ済属性など)を、中間エクスポート・ファイルを介して、あるインスタンスから別のインスタンスに移動します。

workflow-117-UserConfigDataMigrator

Javaサンプル

Javaを使用してヒューマン・ワークフローと対話するサンプル各種を提供します。

workflow-118-JavaSamples

32 Oracle BPM Worklistの使用

この章では、ワークリスト・ユーザーや管理者がOracle BPM Worklistを使用する方法、およびワークリスト表示を各国のビジネス・ニーズ、言語、タイムゾーンにあわせてカスタマイズする方法について説明します。

この章には次の項が含まれます:

- 第32.1項「Oracle BPM Worklistの概要」

- 第32.2項「Oracle BPM Worklistへのログイン」

- 第32.3項「タスク・リスト・ページのカスタマイズ」

- 第32.4項「タスク操作: 「タスクの詳細」ページ」

- 第32.5項「タスクの承認」

- 第32.6項「休暇期間の設定」

- 第32.7項「ルールの設定」

- 第32.8項「ワークリスト管理機能の使用」

- 第32.9項「通知設定の指定」

- 第32.10項 マップ済属性(フレックス・フィールド)の使用

- 第32.11項「ワークリスト・レポートの作成」

- 第32.12項 Oracle BPM Worklistへのローカル言語およびタイムゾーンによるアクセス

- 第32.13項「再利用可能なワークリスト・リージョンの作成」

- 第32.14項「ワークリスト・アプリケーションでカスタマイズされたアプリケーションを有効化するJavaコード」

ワークフロー・サービスによって公開されるAPIの使用方法については、第33章「カスタム・ワークリスト・クライアントの作成」を参照してください。

ヒューマン・ワークフローの問題のトラブルシューティングの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のヒューマン・ワークフローのトラブルシューティングに関する項を参照してください。

32.1 Oracle BPM Worklistの概要

Oracle BPM Worklistを使用すると、ビジネス・ユーザーは自分に割り当てられたタスクにアクセスして操作できます。たとえば、ワークリストから、融資エージェントは融資申請を確認し、マネージャは従業員の休暇申請を承認できます。これらのプロセスは、ヒューマン・タスクに定義されます。

Oracle BPM Worklistは、ユーザー・プロファイルに基づいて様々な機能を提供します。標準的なユーザー・プロファイルには、タスク割当て先、監督者、プロセス所有者および管理者が含まれます。たとえば、ワークリスト・ユーザーは、承認や却下などの結果を提供してタスクを完了することに加えて、ペイロードの更新、文書やコメントの添付、他のユーザーへのタスクのルーティングも実行できます。監督者やグループ管理者は、ワークリストを使用して、グループに割り当てられたタスクを分析し、そのタスクを適切にルーティングできます。

ユーザーは、ワークリスト・ビューの追加、表示する列の選択、フィルタ基準に基づいたタスクのサブセットの表示などによって、タスク・リストを必要に応じてカスタマイズできます。

タスク割当て先は、Oracle BPM Worklistを使用して次の操作を実行できます。

- ワークリスト内のタスクに対して認可されているアクションの実行、共有タスクの獲得およびチェックアウト、個人のTo Doタスクの定義、およびサブタスクの定義を実行できます。

- 様々な基準に基づいてワークリスト・ビューでタスクをフィルタできます。

- 高優先度のタスク、期日の近いタスクなどの標準作業キューを使用できます。作業キューを使用すると、ユーザーは、カスタム・ビューを作成してワークリスト内のタスクのサブセット(高優先度のタスク、24時間以内に期限があるタスク、経費承認タスクなど)をグループ化できます。

- カスタム作業キューを定義できます。

- 別のユーザーのワークリストの一部に対するプロキシ・アクセスを取得できます。

- カスタムの休暇ルールおよび委任ルールを定義できます。

- グループ所有者による、共有タスクのタスク・ディスパッチ・ルールの定義を可能にします。

- 完全なワークフロー履歴と監査証跡を収集できます。

- タスクのためのデジタル署名を使用できます。

図32-1に、Oracle BPM Worklistを示します。

図32-1 Oracle BPM Worklist: タスク、フォーム、添付およびレポートへのアクセス

「図32-1 Oracle BPM Worklist: タスク、フォーム、添付およびレポートへのアクセス」の説明

ワークリストは、Oracle JDeveloperのADFタスク・フローを使用して作成するタスク・フォームによって、ブラウザに表示されます。詳細は、第30章「ヒューマン・タスク用のタスク・フォームの設計」を参照してください。

また、ユーザーは、Oracle WebCenter Portalなどのポータルを介してタスクを実行することもできます。ポータルを使用すると、ユーザーは、複数の無関係なデータ・ソースからの情報を、編成された単一のビューに表示できます。このビュー(ポータル・ページ)には、ポートレットと呼ばれるコンポーネントを1つ以上含めることができ、各ポートレットでは様々なデータ・ソースからコンテンツを収集できます。

ワークフロー・サービスのクライアントは、ワークフロー・サービスで公開されたAPIを使用して作成できます。このAPIにより、クライアントは、ローカルとリモートのEJB、SOAPおよびHTTPを使用してワークフロー・サービスと通信できるようになります。

32.1.1 Oracle BPM Worklistに関する注意事項

サポートされているのは、1つのアイデンティティ・プロバイダのみです。Javaポリシー・ストアでは、1つのシーケンスで複数のプロバイダをサポートしていません。したがって、ワークリストでは、あるディレクトリ・サーバーから別のディレクトリ・サーバーへのフォールスルーはサポートされていません。

32.2 Oracle BPM Worklistへのログイン

表32-1に、ユーザーに割り当てられた権限に基づいてOracle BPM Worklistで認識される様々なタイプのユーザーを示します。

表32-1 ワークリスト・ユーザー・タイプ

ユーザーのタイプ

アクセス

エンド・ユーザー(ユーザー)

自分または所属グループに割り当てられたタスクを操作し、システム・アクションとカスタム・アクション、ルーティング・ルールおよびカスタム・ビューにアクセスできます。

監督者(マネージャ)

自分のエンド・ユーザー・アクセスの他に、報告先のタスク、レポートおよびカスタム・ビューを操作します。

プロセス所有者

自分のエンド・ユーザー・アクセスの他に、プロセスには属しているが他のユーザーに割り当てられているタスクを操作します。

グループ管理者

自分のエンド・ユーザー・アクセスの他に、グループ・ルールと動的割当てを管理します。

ワークフロー管理者

エラー状態のタスク、たとえば再割当てまたは一時停止が必要なタスクを管理します。また、自身のエンド・ユーザーとしてのアクセス以外に、アプリケーションのプリファレンス変更および属性のマッピング、すべてのユーザーまたはグループに対するルール管理が可能です。

注意:

複数の認証プロバイダ(たとえば、SSOとフォーム)はサポートされていません。

32.2.1 ワークリストへのログイン方法

ログインするには、Oracle SOA Suiteがインストールされている必要があり、SOAサーバーが実行中である必要があります。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suiteインストレーション・ガイド』を参照してください。

サポートされている次のWebブラウザを使用してください。

- Microsoft Internet Explorer 7.x

- Mozilla Firefox 2.x

- Mozilla Firefox 3.x

- Apple Safari

ログインする手順は、次のとおりです。

1. 次に移動:

http://hostname:port_number/integration/worklistapp

- hostnameは、Oracle SOA Suiteがインストールされているホスト・コンピュータの名前です。

- port_numberは、インストール時に使用した番号です。

2. ユーザー名とパスワードを入力します。
管理者としてログインするには、事前にシードされているユーザーを使用できます。アイデンティティ・ストアにデモ・ユーザー・コミュニティをロード済の場合は、jsteinやjcooperなど他のユーザーを使用できます。

ユーザー名とパスワードは、JAZNに指定したユーザー・コミュニティに存在している必要があります。この章内の例で使用されているデモ・ユーザー・コミュニティの組織階層の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

3. 「ログイン」をクリックします。

32.2.1.1 ワークリストにログインするためにweblogicユーザーを有効にする方法

Oracle Internet DirectoryのweblogicユーザーがOracle BPM Worklistにログインするためには、Oracle Internet Directory認証者に管理者グループを割り当て、weblogicユーザーをそのグループのメンバーにする必要があります。

weblogicユーザーを有効にする手順は、次のとおりです。

1. LDAPブラウザを使用して、Oracle Internet Directoryにweblogicユーザーを作成します。次のようなusers.ldifファイルがOracle Internet Directoryにインポートされます。

dn: cn=weblogic,cn=Users,dc=us,dc=oracle,dc=com
objectclass: inetorgperson
objectclass: organizationalPerson
objectclass: person
objectclass: orcluser
objectclass: orcluserV2
objectclass: top
sn: weblogic
userpassword: welcome1
uid: weblogic

2. Oracle Internet DirectoryにAdministratorsグループを作成し、このグループにweblogicユーザーを割り当てます。次のようなgroups.ldifファイルがOracle Internet Directoryにインポートされます。

dn: cn=Administrators,cn=Groups,dc=us,dc=oracle,dc=com
objectclass: groupOfUniqueNames
objectclass: orclGroup
objectclass: top
owner: cn=orcladmin,cn=Users,dc=us,dc=oracle,dc=com
uniquemember: cn=weblogic,cn=Users,dc=us,dc=oracle,dc=com

32.2.2 ワークリストへのログイン時の処理内容

アイデンティティ・サービス・ワークフローAPIは、ユーザー名、パスワードおよびレルム・セット(オプション、複数のレルムが組織に定義されている場合)を使用してログインを認証および認可します。管理者がプリファレンスを設定して、インタフェースに表示されるレルム・ラベルを変更したり、ログイン・ページ・イメージのソースの代替場所を指定する方法の詳細は、第32.8.2項「ログイン・ページ・レルムのラベルの指定方法」を参照してください。

図32-2に、「ホーム」ページの例を示します。

図32-2 Oracle BPM Worklist: 「ホーム」(タスク・リスト)ページ

「図32-2 Oracle BPM Worklist: 「ホーム」(タスク・リスト)ページ」の説明

このページは、ユーザーのロールに応じて、ユーザーに割り当てられたすべてのタスクと作業アイテムの一覧を表示します。たとえば、「ユーザー・タスク」ページと「開始済のタスク」ページはすべてのユーザーがアクセスできます。マイ・スタッフページにはスーパーバイザのみがアクセスでき、「管理タスク」ページにはプロセス・ワークスペース管理者のみがアクセスできます。

図32-3のように、左端には、「ユーザー・タスク」が選択されているビューのリストがあります。このリストを展開して、次を選択します:

- 特定のビューに、各ビューで開かれているタスクの数が表示されます。特定のビューを選択すると、タスク・カウントが最新の数値にリフレッシュされます。

- プロセス・ワークスペースにデプロイされているアプリケーションのリスト。

- 指定したお気に入りのリンクまたはアプリケーション。

タスクでの作業中にこのリストを表示するには、「固定」をクリックします。非表示にするには「固定解除」をクリックします。

図32-3 ビューの選択

「図32-3 ビューの選択」の説明

表32-2では、「ホーム」(タスク・リスト)ページのコンポーネントについて説明します。

表32-2 「ホーム」(タスク・リスト)ページのコンポーネント

コンポーネント

説明

ビューのリスト

受信ボックス、標準ビュー、ユーザー・ビュー: 詳細は、第32.3.2項「ワークリスト・ビューを作成、削除およびカスタマイズする方法」を参照してください。

表示される「受信ボックス」ビューは、ログイン・ユーザーに付与されているロールに応じて異なります。

- すべてのユーザー(ユーザー・ロール)に「ユーザー・タスク」、「開始済のタスク」および「管理タスク」が表示されます。

- マネージャでもあるユーザーには、「ユーザー・タスク」、「開始済のタスク」、「管理タスク」および「スタッフのタスク」の各タブが表示されます。

- 管理者(BPMWorkflowAdmin)でもあるが、マネージャではないユーザーには、「ユーザー・タスク」、「開始済のタスク」、「管理タスク」、「管理」および「エビデンス検索」の各タブが表示されます。

- マネージャであり管理者でもあるユーザーには、すべてのタブ、つまり、「ユーザー・タスク」、「開始済のタスク」、「スタッフのタスク」、「管理タスク」、「管理」および「エビデンス検索」が表示されます。

- workflow.admin.evidenceStore権限があるユーザーには、「エビデンス検索」タブも表示されます。

詳細は、次を参照してください。

- エビデンス検索については第32.4.4項「デジタル署名が必要なタスクの操作方法」

- 第32.8.1項「管理者が他のユーザーまたはグループのルールを管理する方法」

ワークリスト・ビュー

タスク・ステータス

棒グラフは、現在のビューのタスク・ステータスを示します。詳細は、第32.3.3項「タスク・ステータス・グラフのカスタマイズ方法」を参照してください。

表示フィルタ

「割当て先」または「状態」フィールドから検索条件を指定します。使用可能なカテゴリ・フィルタは、選択しているタブに応じて異なります。

- 「ユーザー・タスク」タブの「割当て先」フィルタは、「自分」、「グループ」、「自分および自分のグループ」、「自分(以前)」(以前に作業したタスク)および「自分(確認のみ)」です。「開始済のタスク」タブの割当て先フィルタは、使用できません。「スタッフのタスク」タブの割当て先フィルタは、「報告先」のみです。「管理タスク」タブの割当て先フィルタは、使用できません。

- 「状態」フィルタには、「任意」、「割当て済」、「完了」、「一時停止」、「取消し済」、「期限切れ」、「エラー発生」、「アラート済」および「情報のリクエスト中」が含まれます。

「検索」を使用してキーワードを入力するか、「拡張検索」を使用します。詳細は、第32.3.1項「タスクのフィルタ方法」を参照してください。

アクション・リスト

ヒューマン・タスクに対して定義したグループ・アクション(「申告」)またはカスタム・アクション(「承認」、「却下」など)を選択します。タスクがFYIタスクであっても、「申告」は、グループまたは複数のユーザーに割り当てられているタスクに対して表示されます。タスクを操作する前に、1人のユーザーがタスクを申告する必要があります。タスクに対して可能な他のアクション(システム・アクションなど)は、特定のタスクの「タスクの詳細」ページに表示されます。ここでは、To Doタスクやサブタスクも作成できます。

注意:

- タスクが集約されている場合、集約されたタスクにFYIタスクが含まれていたとしても、「承認」や却下などのアクションのみが表示されます。明示的な確認アクションは提供されません。「承認」または却下が確認アクションとして解釈されます。

- 自動申告を以前に有効にした場合でも「申告」ボタンは有効のままになります。このボタンを使用すると、ユーザーは、タスクをただ承認するのではなく、タスクを申告して作業を継続することができます。

デフォルト列

タイトル: ヒューマン・タスクの作成時に指定したタイトル。パージまたはアーカイブされたプロセス・インスタンスに関連付けられていたタスクは表示されません。

作成者: タスクを作成したユーザー。

優先度: ヒューマン・タスクの作成時に指定した優先度。最も高い優先度は1、最低は5です。

割当て済: 対象のタスクが割り当てられた日付。

タスクの詳細

受信ボックスのタスクを選択すると、タスクの詳細がワークリストの下半分に表示されます。また、タスクをダブルクリックするとポップアップ・ブラウザ・ウィンドウで表示できます。使用可能なアクションはボタンで示されます。タスクを完了した場合:

- 完了したタスクのタスクの詳細ページが表示されなくなります。

- タスク・リストがリフレッシュされ、残っているタスクのみが表示されます。

- 次のオープンなタスクの詳細が表示されます。

詳細は、第32.4項「タスク操作: 「タスクの詳細」ページ」を参照してください。

図32-2には、「管理」、「レポート」および「プリファレンス」の各リンクも表示されています(右上隅)。表32-3に、「ホーム」、「管理」、「レポート」および「プリファレンス」の各ページの要約を示します。

表32-3 ワークリストの主要ページの要約

ページ

説明

ホーム

表32-2に示すように、ログイン・ユーザーのタスク・リスト、選択したタスクの詳細、およびタスク操作の開始に必要なすべての機能が表示されます。

管理

使用可能な管理機能は、次のとおりです。

- アプリケーション・プリファレンスの設定

- 属性のマッピング

- エビデンス・ストアの検索

- 承認グループの管理

- タスクの構成

レポート

次のレポートを使用できます。「不参加タスク・レポート」、「タスクの優先度レポート」、「タスクのサイクル・タイム・レポート」、「タスクの生産性レポート」および「タスク時間分布レポート」。詳細は、第32.11.1項「レポートの作成方法」を参照してください。

プリファレンス

次のプリファレンスを設定できます。

- ユーザーまたはグループに対するルール(休暇ルールを含む)の設定、および休暇期間の設定

- 証明書のアップロード

- ユーザー通知チャネルおよびメッセージ・フィルタの指定

32.2.3 ユーザーがOracle BPM Worklistにログイン中にユーザーの権限を変更した場合の処理内容

Oracle BPM Worklistにログイン中のユーザーの権限をOracle Enterprise Manager Fusion Middleware Controlで変更した場合、その変更はそのユーザーがそれ以降にログインした後でのみ適用されます。2つのアクティブなワークリスト・セッションがあり、同じユーザーがその1つに権限変更前にログインし、もう1つには権限変更後にログインした場合も同様になります。最初のケースでは、ユーザーのログイン中はユーザーの権限変更が有効になりません。2番目のケースでは、ユーザーがワークリスト・アプリケーションの2番目のインスタンスにログインすると、ユーザーの権限変更が有効になります。

32.3 タスク・リスト・ページのカスタマイズ

タスク・リストをカスタマイズするには、ワークリスト・ビューの追加、表示する列の選択、フィルタ基準に基づいたタスクのサブセットの表示など、様々な方法があります。フェッチするタスクの数を増やすには、タスク・リストの表示領域のサイズを大きくします。

注意:

ヒューマン・タスクを含むSOAコンポジット・アプリケーションをパーティションにデプロイした場合、Oracle BPM Worklist内のパラメータとしてパーティションを使用し、それらのコンポジットに対して作成されたタスクをフィルタ処理することができません。たとえば、特定のパーティションに対応するタスク・タイプを選択することはできますが(同じタスク・タイプでパーティションが異なる)、拡張検索、カスタム・ビュー、カスタム・ルールおよびマップ済属性の各機能ではフィルタ処理が機能しません。たとえば、VacationRequestAppがパーティション1とパーティション2にデプロイされているとします。「拡張検索」を使用して、パーティション1にデプロイされたコンポジットに対応するタスクを選択しようとしても、検索結果にそれらのタスクは表示されません。

32.3.1 タスクのフィルタ方法

図32-4に、フィルタの各フィールドを示します。

図32-4 フィルタ: 「割当て先」、「ステータス」、「検索」および「拡張検索」

「図32-4 フィルタ: 「割当て先」、「ステータス」、「検索」および「拡張検索」」の説明

タスクのサブセットを表示するには、次のフィルタ基準に基づいてフィルタを使用します。

- 割当て先
「割当て先」ドロップダウン・リストで、次のものから選択します。

- 自分: ログイン・ユーザーに直接割り当てられているタスクを取得します。

- グループ: 次のものを取得します。

- ログイン・ユーザーが属するグループに割り当てられたタスク

- ログイン・ユーザーに割り当てられたアプリケーション・ロールに割り当てられているタスク

- 複数のユーザー(その中の1人はログイン・ユーザー)に割り当てられているタスク

- 自分および自分のグループ: ユーザーに直接、またはグループ、アプリケーション・ロール、ユーザー・リストのいずれかによって割り当てられた全タスクを取得します。

- 自分(以前): ログイン・ユーザーによって更新されたタスクを取得します。

- 自分(確認のみ): ログイン・ユーザーがレビューアであるタスクを取得します。

「スタッフのタスク」タブで、「報告先」を選択します。

- 状態: 次の中から選択します。「任意」、「割当て済」、「完了」、「一時停止」(後で再開可能)、「取消し済」、「期限切れ」、「エラー発生」(処理中)、「アラート済」、「情報のリクエスト中」。

- 検索: キーワードを入力して、タスクのタイトル、コメント、識別キー、および指定のフィルタ基準を満たすタスクのフレックス文字列フィールドを検索します。

- 詳細: 詳細な検索フィルタを指定します。

注意:

1つのタスクが複数の報告先に個別に割り当てられている場合は、マネージャが「スタッフのタスク」リストを表示すると、そのタスクが割り当てられている報告先の数と同じ数のタスクのコピーが表示されます。

割当て先または状態に基づいてタスクをフィルタ処理するには:

「割当て先」および「状態」リストからオプションを選択します。タスク・リストは、フィルタの選択内容に基づいて自動的に更新されます。

キーワード検索に基づいてタスクをフィルタ処理する手順は、次のとおりです。

1. キーワードを入力して、タスクのタイトル、コメント、識別キー、および指定のフィルタ基準を満たすタスクのフレックス文字列フィールドを検索します。

2. [Enter]を押すか、「リフレッシュ」をクリックします。

拡張検索に基づいてタスクをフィルタ処理する手順は、次のとおりです。

マップ済属性マッピングが定義済のタスク・タイプを選択すると、マップ済属性のラベルを拡張検索で使用できます。

詳細は、第32.10.1項「属性のマップ方法」を参照してください。

1. 「詳細」をクリックします。

2. (オプション)図32-5および図32-6に示すように、「検索をビューとして保存」を選択し、ビュー名を指定します。次に、「表示」タブでその他の情報を指定します。

図32-5 ワークリストの拡張検索: 「定義」タブ

「図32-5 ワークリストの拡張検索: 「定義」タブ」の説明

図32-6 ワークリストの拡張検索: 「表示」タブ

「図32-6 ワークリストの拡張検索: 「表示」タブ」の説明

表32-4では、「表示」タブで選択可能な拡張検索のビュー列について説明します。

表32-4 拡張検索: ビュー列

列

説明

開始日

タスクの開始日(To Doタスクで使用)。

タスク定義名

タスク・インスタンスを定義するタスク・コンポーネントの名前。

所有者ロール

タスク・インスタンスを所有しているアプリケーション・ロール(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がアプリケーション・ロールの場合は、このフィールドが設定されます。

更新日

タスク・インスタンスが最後に更新された日付。

コンポジット・バージョン

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットのバージョン。

作成者

タスクの作成者の名前。

リクエスト元ユーザー

タスクのリクエスト元ユーザー。

完了したパーセンテージ

タスクが完了したパーセンテージ(To Doタスクで使用)。

所有者グループ

タスク・インスタンスを所有しているグループ(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がグループの場合は、このフィールドが設定されます。

終了日

タスクの終了日(To Doタスクで使用)。

コンポジット

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットの名前。

期日

タスクの期日(To Doタスクで使用)。

コンポジット識別名

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットの特定のデプロイメントの一意名。

タスク表示URL

タスクの詳細を表示するためのURL。

更新者

タスクを最後に更新したユーザー。

結果

タスクの結果(例: 「承認済」、「却下済」)。このフィールドは、完了したタスク・インスタンスにのみ設定されます。

タスク・ネームスペース

このタスク・インスタンスを定義するタスク・コンポーネントの全バージョンを一意に定義するネームスペース。同じタスク・コンポーネントの異なるバージョンに同じネームスペースを指定することは可能ですが、異なる2つのタスク・コンポーネントに同じネームスペースを指定することはできません。

承認者

タスクの承認者。

アプリケーション・コンテキスト

タスクに関連付けられたアプリケーション・ロール(割当て先、所有者など)が属するアプリケーション。

所有者ユーザー

タスク・インスタンスを所有しているユーザー(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がユーザーの場合は、このフィールドが設定されます。

識別子

(オプション)タスクのカスタムの一意識別子。これは、標準タスク番号に対する追加の一意識別子です。

カテゴリ

タスクのカテゴリ。

取得者

タスクを申告したユーザーの名前(タスクがグループ、アプリケーション・ロールまたは複数のユーザーに割り当てられ、ユーザーによって申告された場合)。

コンポーネント

タスク・インスタンスを定義するタスク・コンポーネントの名前。

元の割当て先ユーザー

タスクを委任するユーザーの名前(ユーザーが別のユーザーにタスクを委任する場合)。

割当て済

このタスクが割り当てられた日付。

パーティション

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットが属するドメイン。

タイトル

タスクのタイトル。

数値

タスク・インスタンスを一意に識別する整数。

優先度

タスクの優先度を定義する整数。通常は1から5の数値が使用され、数値が低いほど優先度が高くなります。

割当て先

現在のタスク割当て先(ユーザー、グループまたはアプリケーション・ロール)。

状態

タスク・インスタンスの状態。

作成日

タスク・インスタンスが作成された日付。

有効期限

タスク・インスタンスの有効期限の日付。

カスタム日付1

日付データ型のカスタム・フレックス・フィールド1

カスタム日付2

日付データ型のカスタム・フレックス・フィールド2

カスタム文字列1

文字列データ型のカスタム・フレックス・フィールド1

カスタム文字列2

文字列データ型のカスタム・フレックス・フィールド2

カスタム番号1

数値データ型のカスタム・フレックス・フィールド1

カスタム番号2

数値データ型のカスタム・フレックス・フィールド2

保存済のビューは、図32-7に示すように、「ユーザー・ビュー」の下の「ビュー」ペインに表示されます。

注意:

ユーザー・ビューを作成する際に、同じコンポジットの複数のバージョンがデプロイされている場合、タスク・タイプで特定のバージョン(たとえばTestCompositeHumanTask2.0)を選択しても、そのバージョンに対応するタスクのみがフィルタ処理されるわけではありません。正しい結果を得るには、タスク・タイプを選択するのではなく、かわりに条件でタスク定義ID列を使用してください。

図32-7 ビューの保存

「図32-7 ビューの保存」の説明

3. 図32-8に示すように、割当て先を選択します。

図32-8 ワークリストの拡張検索

「図32-8 ワークリストの拡張検索」の説明

4. 図32-9に示すように、条件(フィルタ)を追加します。

図32-9 タスクの拡張検索に対するフィルタの追加

「図32-9 タスクの拡張検索に対するフィルタの追加」の説明

表32-5では、使用可能な条件について説明します。

表32-5 拡張検索: 条件

条件

説明

ユーザー条件

取得者

タスクを申告したユーザーの名前(タスクがグループ、アプリケーション・ロールまたは複数のユーザーに割り当てられ、ユーザーによって申告された場合)。

承認者

タスクの承認者。

作成者

タスクの作成者の名前。

リクエスト元ユーザー

タスクのリクエスト元ユーザー。

元の割当て先ユーザー

タスクを委任するユーザーの名前(ユーザーが別のユーザーにタスクを委任する場合)。

所有者グループ

タスク・インスタンスを所有しているグループ(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がグループの場合は、このフィールドが設定されます。

所有者ロール

タスク・インスタンスを所有しているアプリケーション・ロール(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がアプリケーション・ロールの場合は、このフィールドが設定されます。

所有者ユーザー

タスク・インスタンスを所有しているユーザー(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がユーザーの場合は、このフィールドが設定されます。

更新者

タスクを最後に更新したユーザー。

拡張条件

アプリケーション・コンテキスト

タスクに関連付けられたアプリケーション・ロール(割当て先、所有者など)が属するアプリケーション。

コンポーネント

タスク・インスタンスを定義するタスク・コンポーネントの名前。

コンポジット

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットの名前。

コンポジット識別名

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットの特定のデプロイメントの一意名。

コンポジット・バージョン

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットのバージョン。

パーティション

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットが属するドメイン。

タスク表示URL

タスクの詳細を表示するためのURL。

標準条件

カテゴリ

タスクのカテゴリ。

識別子

(オプション)タスクのカスタムの一意識別子。これは、標準タスク番号に対する追加の一意識別子です。

数値

タスク・インスタンスを一意に識別する整数。

結果

タスクの結果(例: 「承認済」、「却下済」)。このフィールドは、完了したタスク・インスタンスにのみ設定されます。

完了したパーセンテージ

タスクが完了したパーセンテージ(To Doタスクで使用)。

優先度

タスクの優先度を定義する整数。低い数値ほど優先度が高くなります。通常、1から5の数値が使用されます。

状態

タスク・インスタンスの状態。

タスク定義名

タスク・インスタンスを定義するタスク・コンポーネントの名前。

タスク・ネームスペース

タスクのネームスペース。

タイトル

タスクのタイトル。

時間条件

タスクのカテゴリ。

割当て済

このタスクが割り当てられた日付。

作成日

タスク・インスタンスが作成された日付。

期日

タスクの期日(To Doタスクで使用)。

終了日

タスクの終了日(To Doタスクで使用)。

有効期限

タスク・インスタンスの有効期限の日付。

開始日

タスクの開始日(To Doタスクで使用)。

更新日

タスク・インスタンスが最後に更新された日付。

カスタム条件

カスタム日付1

日付データ型のカスタム・フレックス・フィールド1

カスタム日付2

日付データ型のカスタム・フレックス・フィールド2

カスタム文字列1

文字列データ型のカスタム・フレックス・フィールド1

カスタム文字列2

文字列データ型のカスタム・フレックス・フィールド2

カスタム番号1

数値データ型のカスタム・フレックス・フィールド1

カスタム番号2

数値データ型のカスタム・フレックス・フィールド2

5. 複数のフィルタを照合する場合は、「任意」または「すべて」を選択します。

6. 図32-10に示すように、パラメータ値を追加します。

図32-10 拡張検索

「図32-10 拡張検索」の説明

7. このビューの定義またはそのデータを共有するかどうかと、共有するユーザーまたはグループを指定します。

8. 「検索」をクリックします。
基準に従ってタスクがフィルタ処理されたタスク・リストが表示されます。

32.3.2 ワークリスト・ビューを作成、削除およびカスタマイズする方法

図32-11に示す「ビュー」メニューには、次のものが表示されます。

- 受信ボックス: 使用したフィルタの結果によるすべてのタスクが表示されます。デフォルトでは、すべてのタスクが表示されます。

- 標準ビュー: 標準ビューと自分が定義したビューが表示されます。

- ユーザー・ビュー: 作成したビューが表示されます。

図32-11 ワークリスト・ビュー

「図32-11 ワークリスト・ビュー」の説明

ビューを作成、共有およびカスタマイズするには、「ビュー」を使用します。

ワークリスト・ビューを作成する手順は、次のとおりです。

1. 「ビュー」セクションで「ビューの追加」をクリックします。図に示すように、「ユーザー・ビューの作成」ダイアログ・ボックスが表示されます。

2. 次のことを実行するには、図32-12に示すように、「ユーザー・ビューの作成」ダイアログ・ボックスの「定義」タブを使用します。

- ビューの作成、またはパブリック・ビューの使用: 独自のビューを作成するか、コピーするパブリック・ビューを参照します。

- 名前: ビューの名前を指定します。

- 標準ビューに追加: このオプションは管理者のみに適用されます。管理者はこのオプションを選択して、ビューを標準ビューとして作成します。作成された標準ビューは、すべてのワークリスト・ユーザーの「標準ビュー」リストに表示されます。

- 割当て先: 「自分」、「グループ」、「自分および自分のグループ」、「自分(以前)」、「自分(確認のみ)」、「作成者」、「報告先」、「管理者」、「所有者」から選択します。

- 一致: 追加した条件に一致するのが「すべて」か「任意」かを選択します。

- 条件の追加(プラス記号): ビューに適用する条件を選択します。

- ビューの共有: 他のユーザーに、このビューの定義へのアクセス権を付与したり(この場合は、ビュー条件が権限受領者のデータに適用されます)、データ自体へのアクセス権を付与することができます(この場合、権限受領者は、データも含めて権限付与者のワークリスト・ビューを参照できます)。ビューを別のユーザーと共有することは、そのビューに対応する全タスクを他のユーザーに委任することに類似しています。つまり、共有相手のユーザーは自分のかわりにタスクを操作できます。共有ビューは「ユーザー・ビュー」の下に表示されます。

- ユーザー: ビューを共有できるユーザー(権限受領者)を指定します。

- グループ: ビューを共有できるグループを指定します。

図32-12 ワークリスト・ビューの作成

「図32-12 ワークリスト・ビューの作成」の説明

3. 図32-13に示す「ユーザー・ビューの作成」ダイアログの「表示」タブを使用して、ビューに表示するフィールドをカスタマイズします。

図32-13 ワークリスト・ビューのフィールドの表示

「図32-13 ワークリスト・ビューのフィールドの表示」の説明

- ビュー列の選択: タスク・リストに表示する列を指定します。特定のタスク・タイプにマップされている標準タスク属性またはマップ済属性を指定できます。デフォルト列は、受信ボックスの列と同じです。

- ソート基準: ソートする列を選択します。

- 次の基準: 2番目にソートする列を選択します。

- 次の基準: 3番目にソートする列を選択します。

- 次の基準: 4番目にソートする列を選択します。

- ソート順: 昇順または降順を選択します。

4. 「OK」をクリックします。
保存済のビューは、「ユーザー・ビュー」の下の「ビュー」パネルに表示されます。

ビューを削除するには、次のステップを実行します。

注意:

管理者が事前にシードされている標準ビューを誤って削除しても、これらのビューは完全に削除された状態のままにはなりません。これらは、サーバーの再起動時に再作成されます。

1. 「ビュー」パネルで、ビューを選択します。

2. 「削除」アイコンをクリックします。

3. 「削除の確認」ダイアログ・ボックスで、ビューを削除することを確認するように求められます。

4. 「はい」をクリックします。ビューが削除されます。

ワークリスト・ビューをカスタマイズする手順は、次のとおりです。

1. 「ビュー」ペインで、カスタマイズするビューを選択します。

2. 「ユーザー・プリファレンスの編集」を選択します。「ユーザー・プリファレンスの編集」ダイアログ・ボックスが表示されます。

3. 図32-14のように、「ユーザー・プリファレンスの編集」ダイアログ・ボックスのアイテムを使用してビューをカスタマイズし、「OK」をクリックします。

図32-14 ワークリスト・ビューのフィールドのカスタマイズ

「図32-14 ワークリスト・ビューのフィールドのカスタマイズ」の説明

32.3.3 タスク・ステータス・グラフのカスタマイズ方法

棒グラフには、ステータス別にタスクが表示され、各ステータス・カテゴリのタスク数が示されます。このグラフは、現行ビュー内のフィルタ処理された一連のタスクに適用されます。

タスク・ステータス・グラフをカスタマイズする手順は、次のとおりです。

1. 「編集」アイコンをクリックします。

2. 図32-15に示すように、表示するステータス状態を追加または削除して、「OK」をクリックします。

図32-15 タスク・ステータス・グラフのカスタマイズ

「図32-15 タスク・ステータス・グラフのカスタマイズ」の説明

32.3.4 To Doタスクの作成方法

自分または他のユーザーの最上位レベルのTo Doタスクを作成するには、図32-16に示す「To Doタスクの作成」ダイアログを使用します。このタスクはビジネス・タスクと関連していません。

図32-16 「To Doタスクの作成」ダイアログ

「図32-16 「To Doタスクの作成」ダイアログ」の説明

To Doタスクは、割当て先の「受信ボックス」に表示されます。

他のTo Doタスクまたはビジネス・タスクの子であるTo Doタスクを作成できます。1つのTo Doタスクに作成できるのは、1レベルの子のTo Doタスクのみです。子のTo Doタスクが100%完了すると、その親のTo Doタスクも完了済としてマークされます。親のTo Doタスクが完了すると、ワークフロー・システム内では子のTo Doタスクが100%となります。ただし、親がビジネス・タスクの場合、その子のTo Doは完了済としてマークされません。この場合は、結果を設定して完了する必要があります。To Doタスクを明示的に100%に設定すると、親タスクでの集計はありません。

To Doタスクは、再割当て、エスカレートなどに加えて、削除(論理的な削除)やパージ(物理的な削除)も可能です。親タスクの再割当てやエスカレートなどが、子のTo Doタスクの割当てに影響を与えることはありません。To Doタスクが完了した後は、その完了率を100%未満にリセットできます。

割当てルール(休暇ルールなど)は、To Doタスクに適用されません。また、To Doタスクに対するビジネス・ルールの指定はできません。

To Doタスクを作成する手順は、次のとおりです。

1. 図32-17に示すように、「アクション」リストから「To-Doタスクの作成」を選択します。

図32-17 To-Doタスクの作成

「図32-17 To-Doタスクの作成」の説明

2. 図32-16に示す「To Doタスクの作成」ダイアログに詳細を入力して、「OK」をクリックします。

- タスクのタイトル: わかりやすい内容を入力します。

- カテゴリ: わかりやすい内容を入力します。

- 優先度: 1(最高)から5(最低)の間で選択します。

- 完了したパーセンテージ: この属性は、タスクの完了状況を示します。完了すると、この属性に100%が設定されます。

- 開始日: タスクの開始日。開始日は現在の日付である必要はありません。

- 期日: この期日は期限切れではありません。期日を過ぎたタスクも参照できます。

- 割当て先: 自分または他のユーザーを割り当てることができます。

32.3.5 ワークリスト・アプリケーションでのサブタスクの作成方法

サブタスクとは、To Doタスクまたはビジネス・タスクである親タスクの子です。たとえば、注文書に複数の明細項目が含まれ、それぞれに別個の承認プロセスが必要な場合、サブタスクを作成すると便利です。

32.3.5.1 サブタスク作成時の留意事項

サブタスクを作成する際、次のような点に注意する必要があります。

- To Doタスクに含められるサブタスクは、1レベルのみです。すべてのTo Doサブタスクが100%完了すると、親To Doタスクも完了としてマークされます。親To Doタスクが完了すると、To Doサブタスクはワークフロー・システム内で100%になります。
親がビジネス・タスクでそのタスクが完了した場合、そのタスクのサブタスクは取り消されます。

- To Doタスクを明示的に100%に設定すると、親タスクでの集計はありません。

- 使用しているOracle Business Process Managementのリリースが11gリリース1 (11.1.1.7.0)よりも前のものである場合、サブタスクを作成するタスクのタスク・フォームを再作成する必要があります。ただし、以前のリリースでデプロイされたプロセスは継続して使用できます。
タスク・フォームを再作成しなかった場合、タスク・フォーム自体の「アクション」リストではサブタスクを作成するオプションを選択できません。ただし、「ワークリスト」の上の「アクション」リストから「サブタスクの作成」を選択することによってサブタスクを作成できます。

- BPMNサービス・エンジンの管理者である場合、Oracle Enterprise Manager Fusion Middleware Controlにはサブタスクが表示されないため、注意してください。

サブタスクを作成するには:

1. 「ワークリスト」で、サブタスクを作成するタスクを選択します。

2. 「アクション」リストから「サブタスクの作成」を選択します。
「サブタスクの作成」ダイアログ・ボックスが表示されます。

3. 「サブタスクの作成」ダイアログで、次の点に注意してサブタスクを定義します。

- 「タイトル」は必須フィールドです。

- このサブタスクで使用可能なフォームが複数存在する場合は、「フォーム」フィールドで選択リストが表示されます。そうでない場合は、「フォーム」フィールドにデフォルト・フォームの名前が表示されます。親タスクに関連づけられているものと異なるタスク・フォームを使用できます。

- 使用可能なルーティング・タイプは次のとおりです。

- 単一の承認者

- グループ投票。パラレル・タスクとも呼ばれます。このルーティング・タイプの場合、複数の参加者を入力するよう表示されます。

- 単一承認者のチェーン。順次タスクとも呼ばれます。このルーティング・タイプの場合、複数の参加者を入力するよう表示されます。

- 参加者を指定するには、検索を実行してその結果から選択します。複数のユーザー、グループまたはアプリケーション・ロールを選択できます。

4. サブタスクの指定が完了したら、「サブタスクの作成」ダイアログ・ボックスで「OK」をクリックします。これによってタスク・リストがリフレッシュされます。親タスクを選択すると、タスクの詳細ページに「サブタスク」セクションが表示されるようになり、そのタスクについて作成したサブタスクの詳細が示されます。

注意:

- サブタスクについて複数の参加者を指定した場合、「サブタスク」領域には各参加者について別々のアイテムが表示されます。

- 参加者がサブタスクを完了したら、手動でタスクをリフレッシュして、その完了したサブタスクの詳細を表示する必要があります。

32.4 タスク操作: 「タスクの詳細」ページ

タスクの詳細は、インライン(図32-2 「Oracle BPM Worklist: 「ホーム」(タスク・リスト)ページ」の下部セクションを参照)またはポップアップ・ブラウザ・ウィンドウに表示できます(タスクをダブルクリックします)。

図32-18に、「タスクの詳細」ページを示します。

図32-18 「タスクの詳細」ページ

「図32-18 「タスクの詳細」ページ」の説明

優先度の変更、コメントや添付ファイルの追加など、「タスクの詳細」ページで変更を行った場合は、他の変更を行う前に変更内容を保存する必要があります。

「タスクの詳細」ページには、次のコンポーネントがあります。

- アクション: タスクに対して可能なシステム・アクションがリストされます。たとえば、「情報のリクエスト」、「再割当て」、「期限更新」、「一時停止」、「エスカレート」、「保存」などです。

- アクション・ボタン: ヒューマン・タスクに定義されているカスタム・アクションに関するボタンが表示されます。たとえば、タスクの結果(ヘルプ・デスク・リクエストの場合は「解決済」と「未解決」、融資申請の場合は「承認」と「却下」)を設定するボタンがあります。タスク起案者、マネージャまたは管理者の場合は、「取消」も表示される場合があります。

- 詳細: 割当て先、タスク作成者、タスク番号、状態、優先度、タスク獲得者および他のマップ済属性など、タスクの属性を表示します。また、タスクの作成、最終更新および有効期限に関する日付も表示します。

- 履歴: タスクの承認順序や更新履歴が表示されます。詳細は、第32.4.2項「タスク履歴」を参照してください。
表32-6に、「タスクの詳細」の「履歴」セクションで使用されるアイコンの意味を示します。

表32-6 タスク・アクションの「履歴」のアイコン

アイコン

説明

非定型ルーティング・シナリオの承認者を表します。

タスクが承認されたことを示します。

FYI参加者を表します。つまり、この参加者は通知タスクを受信するのみで、ビジネス・プロセスはこの参加者のレスポンスを待機しません。参加者がタスクの結果に直接影響を与えることはできませんが、コメントを提供したり添付ファイルを追加できる場合があります。

複数の人が並行して作業することを示します。このパターンは通常、投票で使用されます。

この参加者が管理チェーンに属していることを示します。

参加者が1人のユーザー、1つのグループまたはロールにマッピングされる単純なケースであることを示します。

タスクが未着手であることを示します。

- コメント: ワークフローに参加した様々なユーザーが入力したコメントが表示されます。新規に追加されたコメントやコメンタのユーザー名は、既存のコメントに追加されます。コメントの追跡情報は、タスクのライフ・サイクル全体を通じて保持されます。コメントを追加または削除するには、タスクの更新権限が必要です。

- 添付ファイル: タスクに関連付けられている文書または参照URLが表示されます。これらは通常、ヒューマン・タスクに定義されたワークフロー、またはワークリストを使用して参加者が添付して変更したワークフローに関連付けられています。添付ファイルを追加または削除するには、タスクの更新権限が必要です。添付ファイルを追加する場合は、ファイルの絶対パス名を使用したり、ファイルを参照することができます。

注意:

高可用性のためにサーバーがクラスタ化されている環境では、フェイルオーバーが発生した場合、ファイルのアップロードはサポートされません。アクティブなサーバーが停止した場合、アップロード・プロセスは他のサーバーに引き継がれず、アップロードは失敗します。

コメントおよび添付ファイルは、タスクとサブタスクの間で共有されます。たとえば、To Doタスクを作成してコメントと添付ファイルを追加すると、そのTo Doタスクのサブタスクにも同じコメントと添付ファイルが含まれます。

タスクの詳細ページの表示は、設計時にこのページに表示するタスク・フォームの開発に使用したツールによって異なる場合があります。

ユーザーがタスクを参照できるのは、そのタスクが、現在の割当て先(直接的な割当てまたはグループ・メンバーシップによる割当て)、現在の割当て先のマネージャ、作成者、所有者、または以前のアクターとして関連付けられている場合です。

グループ・メンバーシップとロールは、ユーザーのプロファイルによって決定されます。ユーザーの権限は、ロールによって決定されます。ただし、ユーザーが実行できるアクションの正確なセットは、権限とは別に、タスクの状態、カスタム・アクション、および設計時にタスク・フローに対して定義された制限付きアクションによっても変化します。

注意:

制限付きタスクの再割当てなどの特定の関数は、単一のタスクが選択されている場合にのみ使用できます。制限付き再割当てを使用する複数のタスクが選択されている場合、制限付き再割当てアルゴリズムは起動されません。その場合、制限付き再割当てが指定されていなかったかのようにユーザーの完全なリストが返されます。

ユーザーがタスクに対して実行できるアクションは、次のアルゴリズムで決定されます。

1. ユーザーが実行できるアクションのリストは、そのユーザーに付与されている権限に基づいて取得されます。

2. 現在のタスクの状態で実行できるアクションのリストが取得されます。

3. 前述のリストに出現するアクションの結合リストが作成されます。

4. タスクで制限付きアクションとして指定されているアクションが結合リストから除外されます。

結果のアクション・リストは、対象ユーザーのタスク・リスト・ページと「タスクの詳細」ページに表示されます。ユーザーが特定のアクション(申告、一時停止、再割当てなど)をリクエストすると、ワークフロー・サービスでは、リクエストされたアクションが前述のアルゴリズムで決定されたリストに含まれていることを確認します。

前述のアルゴリズムのステップ2では、多くのケースが処理されます。タスクの状態が、最終完了(順序フローですべての承認が終了した状態)、期限切れ、取消し済、エラー発生のいずれかである場合、追加の更新アクションは許可されません。これらの状態の場合は、タスク、タスク履歴およびサブタスク(パラレル・フローの親タスク)を参照できます。タスクが一時停止されている場合、実行可能なアクションは再開または取消のみです。グループに割り当てられているタスクは、なんらかのアクションを実行する前に、申告する必要があります。

注意:

タスクの承認など、「タスクの詳細」ページからタスクを操作した場合は、そのタスクに対する変更内容とともに、変更されていないタスクの詳細データも保存されます。ただし、「アクション」メニューからタスクを操作した場合、変更されていないタスクの詳細は保存されません。

32.4.1 システム・アクション

アクション・バーには、すべてのタスクで使用可能なシステム・アクションがユーザーの権限に基づいて表示されます。表32-7に、システム・アクションを示します。

表32-7 システム・タスク・アクション

アクション

説明

申告

グループまたは複数のユーザーに割り当てられているタスクは、最初に申告する必要があります。「申告」は、グループまたは複数ユーザー割当ての「タスク・アクション」リストで選択可能な唯一のアクションです。タスクが申告されると、すべての適用可能なアクションがリストされます。

エスカレート

タスクを完了できない場合は、そのタスクをエスカレートし、必要に応じて「コメント」領域にコメントを追加できます。このタスクは、ユーザーのマネージャ(階層内で1レベル上)に再度割り当てられます。

プッシュバック

このアクションは、タスクをワークフロー内で1レベル下の前の割当て先に送信する際に使用します。

プッシュバック・アクションにより、他のすべてのアクションが上書きされます。たとえば、タスクがプッシュバックされた後に再度割り当てられた場合、再割当て先がタスクを承認すると、そのタスクはプッシュバックを実行したユーザーに戻されます。これは予想された動作です。

注意:

- タスクが集約されている場合、プッシュバック・アクションは使用できません。

- プッシュバックは、グループ投票ではなく単一承認者で機能するように設計されています。グループ投票(またはパラレル)シナリオを含むステージから別ステージへのプッシュバックは、許可されません。同様に、単一の割当て先からグループ投票(またはパラレル)シナリオにプッシュバックすることもできません。

再割当て

マネージャは、タスクを報告先に委任できます。

リリース

グループまたは複数のユーザーに割り当てられているタスクを、そのタスクを申告したユーザーが完了できない場合、そのタスクはリリースできます。このタスクは、他の割当て先ユーザーが申告して完了できます。

期限更新

タスクの期限切れが近づいている場合は、そのタスクを更新し、必要に応じて「コメント」領域にコメントを追加できます。タスクの有効期限は、1週間延長されます。期限更新は、タスク履歴に表示されます。タスクの更新期間は、オプションのパラメータによって管理できます。デフォルト値は、P7D(7日)です。

情報の発行、情報のリクエスト

この2つのアクションは、他のユーザーから詳細情報の提供をリクエストされた場合、またはタスク作成者や前の割当て先に詳細情報をリクエストする場合に使用します。再承認が不要な場合、タスクは次の承認者か、ビジネス・プロセスの次のステップに割り当てられます。

一時停止、再開

プロセスに関連していないタスクは、一時停止できます。これらのオプションを使用できるのは、BPMWorkflowSuspendロールを付与されているユーザーのみです。他のユーザーは、タスク・フィルタで「前へ」を選択するか、「一時停止」ステータスのタスクを検索することにより、このタスクにアクセスできます。一時停止の期間は無期限です。これは、「再開」を使用してタスクの処理を再開するまで継続されます。

取消

タスクの作成者が、そのタスクを継続しない場合(たとえば、休暇申請を取り消す場合)は、タスクを取り消し、必要に応じて「コメント」領域にコメントを追加できます。この場合は、ビジネス・プロセスによって、次の処理内容が決定されます。ホームページで「取消」アクションを使用するには、「作成者」タスク・フィルタを使用します。

32.4.2 タスク履歴

タスク履歴には、ワークフローの参加者が実行したアクションの監査証跡、およびワークフローの様々な時点におけるタスク・ペイロードと添付ファイルのスナップショットが保持されます。タスクの短い履歴には、次のタスクによって作成されたすべてのバージョンが表示されます。

- タスクの開始

- タスクの再開始

- タスクの結果の更新

- タスクの完了

- タスクのエラー

- タスクの期限切れ

- タスクの取消し

- エラー割当て先に対するタスクのアラート

shortHistoryActions要素を変更すると、「短い履歴」リストに次のアクションを追加できます。

- 獲得

- 非定型ルート

- タスクのオート・リリース

- 委任

- エスカレート

- タスク情報のリクエスト

- タスク情報の発行

- ルーティング・スリップの上書き

- 結果とルートの更新

- プッシュバック

- 再割当て

- リリース

- 期限更新

- 再開

- 現在の割当てのスキップ

- 一時停止

- 更新

図32-19に示すように、履歴はタスク・フローのグラフィカル・ビューで表示されます。

図32-19 履歴: グラフィカル・ビュー

「図32-19 履歴: グラフィカル・ビュー」の説明

図32-20に示すように、実行したすべてのアクション(コメントの追加など、タスクを変更しないアクションも含む)を表示するには、「フル・タスク・アクション」を選択します。

図32-20 履歴: フル・タスク・アクション

「図32-20 履歴: フル・タスク・アクション」の説明

タスク履歴は、次の方法で表示できます。

- タスク・スナップショットの表示

- 将来の承認者の表示

- すべてのタスク・アクションの表示

- タスクの集計

注意:

親タスクの履歴には、そのタスクに含まれるサブタスクの履歴も表示されます。

32.4.3 タスクの操作方法

ヒューマン・タスクが非定型ルーティングを許可するように設計されている場合、または、承認者の順序が事前に決定されていない場合、そのタスクは非定型方式でワーク・リスト内をルーティングできます。このようなタスクの場合は、「ルート」ボタンが「タスクの詳細」ページに表示されます。「ルート」ページから、ルーティングする1人以上のユーザーをルックアップできます。複数の割当て先を指定する場合は、割当て先リストの対象として、単純割当て(ユーザー全員へのグループ割当て)、順次割当てまたはパラレル割当てのいずれかを選択できます。

パラレル・タスクは、投票などのシナリオに対してパラレル・フロー・パターンが指定されている場合に作成されます。このパターンでは、パラレル・タスクに共通の親タスクが存在します。この親タスクがユーザーに表示されるのは、そのユーザーがタスクの割当て先、所有者または作成者である場合のみです。パラレル・タスク自体(サブタスク)は、他のすべてのタスクと同じように、タスクが割り当てられているすべてのユーザーが参照できます。親タスクからサブタスクを参照することも可能です。このようなシナリオでは、親タスクの「タスクの詳細」ページに「サブタスクの表示」ボタンが表示されます。「サブタスク」ページには、対応するパラレル・タスクが表示されます。投票シナリオでは、いずれかの割当て先ユーザーがペイロード、コメントまたは添付ファイルを更新した場合、その変更内容を参照できるのはそのタスクの割当て先のみです。

親タスクを参照できるユーザー(パラレル・フロー・パターンの最終レビューアなど)は、サブタスクをドリルダウンして、パラレル・フローの参加者によるサブタスクの更新を参照できます。割当て先ユーザーがサブタスクで作業する間、親タスクはサブタスクのコンテナになります。タスク所有者は、親タスクを操作したり承認することはできません。

パスワードが必要なヒューマン・タスクが設定されているときに、そのヒューマン・タスクを操作する場合は、図32-21に示すように、パスワードを入力する必要があります。

図32-21 パスワードが必要なタスクの操作

「図32-21 パスワードが必要なタスクの操作」の説明

注意:

優先度の変更、コメントの追加など、「タスクの詳細」ページで変更を行った場合は、その変更内容を保存する必要があります。タスクに添付ファイルを追加した場合は自動的に保存されます。

タスクを再割当てまたは委任する手順は、次のとおりです。

1. 図32-22に示すように、「アクション」リストから「再割当て」を選択します。

図32-22 タスクの再割当て

「図32-22 タスクの再割当て」の説明

2. 「再割当て」または「委任」を選択します。
「委任」は「再割当て」とは異なり、委任先の権限は委任元の権限に基づいています。この機能は、たとえば、マネージャのアシスタントが使用できます。

3. 図32-23に示すように、ユーザー名またはグループ名を指定するか参照します。

図32-23 タスクの再割当て

「図32-23 タスクの再割当て」の説明

スーパーバイザは、タスクを任意の報告先にいつでも再割当てできます。

4. チェック・ボックスをクリックして名前を選択し、「OK」をクリックします。
タスクは、複数のユーザーまたはグループに再度割り当てることができます。図32-24に示すように、割当て先ユーザーの1人がタスクを申告する必要があります。

図32-24 タスクの申告

「図32-24 タスクの申告」の説明

注意:

タスクの詳細が以前のリリースからアップグレードされている場合、「再割当て」アクションを実行すると、「リクエストに失敗しました」エラーが表示されることがあります。実際には、再割当ては完了しており、もう一度「OK」をクリックすると、ポップアップでタスクが割当て済であることが表示されます。

このエラー・メッセージを表示されないようにするには、タスク・フロー・アプリケーションをOracle JDeveloperで開くことでアップグレードし、その後にタスク・フォームを再デプロイしてください。

情報をリクエストする手順は、次のとおりです。

1. 図32-25に示すように、「アクション」リストから「情報のリクエスト」を選択します。

図32-25 情報のリクエスト

「図32-25 情報のリクエスト」の説明

2. 図32-26に示すように、情報のリクエスト元として過去の承認者を選択するか、ユーザー名を検索します。あるいは、タスクを以前の割当て先にプッシュバックします。

図32-26 過去の承認者または別のユーザーへの情報のリクエスト、またはタスクのプッシュバック

「図32-26 過去の承認者または別のユーザーへの情報のリクエスト、またはタスクのプッシュバック」の説明

「検索」アイコンを使用してユーザー名を検索すると、図32-27に示すように、「認証ブラウザ」が表示されます。

図32-27 認証ブラウザ

「図32-27 認証ブラウザ」の説明

注意:

マルチテナント環境の場合、ユーザーの検索はユーザー識別子のみで行い、テナント識別子では行わないでください。たとえば、ユーザー識別子がjsteinで、テナント識別子がcompany_name.jsteinの場合、jsteinを使用して検索します。

3. 「OK」をクリックします。

タスクをルーティングする手順は、次のとおりです。

1. 図32-28に示すように、「タスク・アクション」リストから「非定型ルート」を選択します。

図32-28 非定型ルーティング

「図32-28 非定型ルーティング」の説明

2. 図32-29に示すように、アクションを選択し、ルーティング・オプションを選択します。

図32-29 タスクのルーティング

「図32-29 タスクのルーティング」の説明

- 単一の承認者: 単一のユーザーがタスクを操作する場合に使用します。タスクがロールまたは複数ユーザーのグループに割り当てられている場合は、1人のメンバーがタスクを申告して操作する必要があります。

- グループ投票: パラレルで作業する複数のユーザーがアクションを実行する場合(たとえば、雇用に関するフローで複数のユーザーが応募者の採否を票決する)に使用します。図32-30に示すように、結果が有効になるために必要な得票率(多数決や満場一致など)を指定します。

図32-30 同意情報の指定

「図32-30 同意情報の指定」の説明

- 単一承認者のチェーン: 承認者の順序リストに対して使用します。このリストは、任意のユーザーまたはグループで構成できます(ユーザーは組織階層に含まれている必要はありません)。

3. 必要に応じて、ルート上の次の参加者のためにコメントを追加します。

4. ユーザー名またはグループ名を指定するか検索し、その名前を「選択済」領域に移動します。

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

コメントまたは添付ファイルを追加する手順は、次のとおりです。

注意:

- ユーザーがタスクのイニシエータの場合、ユーザーのコメントはタスク割当て先のみでなく、すべてのプロセス参加者と共有されます。タスク参加者のみと共有するオプションは使用できません。

- 親タスクに追加されたコメントは、その親のサブタスクでも表示されます。

- 添付ファイルを参照またはアップロードするには、その前に「保存」をクリックして、「タスクの詳細」ページに対してすでに行った変更を必ず保存してください。

- ファイルまたはURL添付を削除した場合、タスクは自動的に更新されません。「アクション」→「保存」の明示的な選択が必要です。この操作を行わなかった場合、添付ファイルは削除されたものとして表示されますが、実際には削除されません。これは予想された動作です。

- 添付ファイルの追加の場合は、「アクション」→「保存」の明示的な選択は不要です。

- URL添付の追加の場合は、「アクション」→「保存」の明示的な選択が必要です。

- 高可用性のためにサーバーがクラスタ化されている環境では、フェイルオーバーが発生した場合、ファイルのアップロードはサポートされません。アクティブなサーバーが停止した場合、アップロード・プロセスは他のサーバーに引き継がれず、アップロードは失敗します。

- ADF接続を使用していて、添付ファイルを追加しようとしたときにプロトコルが見つからないというエラーが表示される場合は、ご使用のconnections.xmlファイルが適切なWSDLファイルと同期していることを確認してください。 connections.xmlファイルは、ADFワークスペースのディレクトリ.adf/META-INF/に配置されています。

1. 「コメント」または「添付ファイル」領域で、「追加」をクリックします。図32-31に詳細を示します。

図32-31 ワークリストのコメントと添付ファイル

「図32-31 ワークリストのコメントと添付ファイル」の説明

2. コメントのテキストを入力し、「OK」をクリックします。コメントは、一度追加すると削除できません。
コメントには、日付、タイムスタンプおよびユーザー名が追加されます。

3. 添付ファイルの場合は、図32-32に示すように、ファイル添付かURL添付かを指定して、「OK」をクリックします。

図32-32 ワークリストの添付ファイルの追加

「図32-32 ワークリストの添付ファイルの追加」の説明

Oracle BPM WorklistでURLファイル(http://www.example.com/technology/products/oem/management_partners/snmpwp6.gifなど)を添付しても、そのファイルは電子メール添付ファイルとして送信されません。かわりに、このファイルは、電子メール通知のタスク詳細にハイパーリンクとして表示されます。デスクトップ・ファイルを添付した場合は、タスク通知の添付ファイルとして表示が可能です。

注意:

マルチバイト・キャラクタ・セット(MBCS)を使用した添付ファイル名はサポートされていません。

最大1998KBの添付ファイルをアップロードできます。この設定は、web.xmlのcontextパラメータを次のように設定することによって変更できます。

<context-param>
<param-name>org.apache.myfaces.trinidad.UPLOAD_MAX_DISK_SPACE</param-name>
<param-value>1998</param-value>
</context-param>

ファイルのアップロードの詳細は、Oracle Fusion Middleware Oracle Application Webユーザー・インタフェース開発者ガイドを参照してください。

4. 「タスク・アクション」リストから、「保存」をクリックします。

32.4.4 デジタル署名が必要なタスクの操作方法

ワークリストでは、ヒューマン・タスクで作成された次の署名ポリシーがサポートされています。

- 署名は不要 - 参加者は署名せずにタスクを送信して操作できます。

- パスワードは必須 - 参加者はログイン・パスワードを指定する必要があります。

- デジタル証明書(署名)は必須: 参加者はデジタル証明書を入手した後に、タスクの送信と操作が可能になります。デジタル証明書には、証明書発行者のデジタル署名が記載されているため、誰でも証明書が本物であることを確認できます。参加者の資格証明は、デジタル証明書によって証明されます。これは認証局(CA)が発行します。ユーザー名、シリアル番号、有効期限、証明書所有者の公開鍵のコピー(メッセージとデジタル署名の暗号化に使用)、および証明書発行者のデジタル署名が記載されているため、受信者は証明書が本物であることを確認できます。

署名ポリシーがあるタスクを操作すると、図32-33に示すように、「署名」ボタンが表示されます。

図32-33 デジタル署名タスク詳細

「図32-33 デジタル署名タスク詳細」の説明

デジタル署名の保管、およびデジタル署名されたヒューマン・タスクの否認防止には、エビデンス・ストア・サービスを使用します。エビデンス・ストアは、図32-34に示すように検索できます。

図32-34 エビデンス・ストア

「図32-34 エビデンス・ストア」の説明

詳細は、第34.1.10項「エビデンス・ストア・サービスとデジタル署名」を参照してください。

デジタル署名を指定する手順は、次のとおりです。

1. Oracle BPM Worklistの右上隅にある「プリファレンス」をクリックします。

2. 「証明書」タブを選択します。

3. 図32-35に示すように、意思決定の署名に使用する証明書をアップロードします。
証明書を使用してタスクの結果に署名する際は、証明書発行者から発行された1つの証明書のみではなく、証明書チェーン全体をOracle BPM Worklistから.P7B(PKCS7形式)ファイルとしてアップロードする必要があります。チェーン全体はInternet Explorerからエクスポートできます。Mozilla Firefoxでは、チェーンを.P7Bファイルとしてエクスポートできません。この場合は、次の手順を実行できます。

1. Mozilla Firefoxからチェーンを.P12ファイル(秘密鍵も含むPKCS12形式)としてエクスポートします。

2. Internet Explorerに.P12ファイルをインポートします。

3. このファイルをInternet Explorerから.P7Bファイルとして再度エクスポートします。

4. Oracle BPM Worklistからこのファイルをアップロードします。

図32-35 証明書のアップロード

「図32-35 証明書のアップロード」の説明

証明書をシステムに指定する際は、次の重要な点に注意してください。そうしないと、タスクに対する意思決定の署名に証明書を使用できません。

- PKCS7ファイル形式は、バイナリの証明書形式です。スタンドアロンの証明書ファイルをディスクに格納する場合は、このオプションを選択します。

- PKCS12ファイル形式は、キーストア形式です。証明書をキーストア内に格納する場合は、このオプションを選択します。

- 証明書の内容をコピーして貼り付ける場合は、「証明書内容のタイプまたは貼付け」を選択し、BASE64エンコード・テキストをフィールドに貼り付けます。このフィールドには、それ以外の形式の証明書を貼り付けないでください。同様に、証明書をアップロードする場合は、BASE64エンコード証明書をアップロードしないでください。アップロードがサポートされているのは、PKCS12およびPKCS7形式のファイルのみです。

4. Oracle BPM Worklistの右上隅にある「ホーム」リンクをクリックして、タスク・リストに戻ります。

5. 承認または却下するタスクをクリックします。
タスクの詳細が表示されます。

6. 「承認」または「却下」をクリックします。
デジタル署名の詳細が表示されます。

7. 署名ポリシーがあるタスクの場合は、「署名」をクリックします。
テキスト署名レポート・ダイアログが表示されます。

8. ドロップダウン・リストから、意思決定の署名に使用する証明書を選択します。

9. 使用するWebブラウザのマスター・パスワードを入力します。

10. 「OK」をクリックします。
Webブラウザでは、選択した証明書を使用して、テキスト署名リクエストの上部に表示される文字列に署名し、選択したアクション(承認または却下)を起動します。ヒューマン・ワークフロー・サービスでは、タスク・ステータスが適切に更新されます。

証明書のアップロード方法と使用方法の詳細は、第34.1.10項「エビデンス・ストア・サービスとデジタル署名」を参照してください。

32.5 タスクの承認

表32-8に、様々なタスク承認者がタスクに対して実行できるアクションのタイプを示します。

表32-8 タスク・アクションと承認者

タスク・アクション

管理者

所有者(+所有者グループ)

割当て先(+割当て先マネージャ+割当て先グループ+プロキシ割当て先)

作成者

レビューア

承認者

獲得(申告)

いいえ

はい

はい

いいえ

いいえ

いいえ

カスタム

いいえ

はい脚注1

可脚注1

いいえ

いいえ

いいえ

委任

いいえ

いいえ

はい

いいえ

いいえ

いいえ

削除

いいえ脚注 2

いいえ脚注 2

可脚注2

可脚注2

いいえ

いいえ

エラー

いいえ

いいえ

はい脚注3

いいえ

いいえ

いいえ

エスカレート

はい脚注4

可脚注4

はい

いいえ

いいえ

いいえ

情報リクエスト

いいえ

いいえ

はい

いいえ

いいえ

いいえ

情報発行

いいえ

いいえ

はい

いいえ

いいえ

いいえ

ルーティング・スリップの上書き

はい

はい

いいえ

いいえ

いいえ

いいえ

プッシュバック

いいえ

いいえ

はい

いいえ

いいえ

いいえ

パージ

可脚注2

はい脚注 2

いいえ

はい

いいえ

いいえ

再割当て

はい脚注5

可脚注5

可(プロキシ割当て先の場合は不可)

いいえ

いいえ

いいえ

リリース

はい

はい

はい

いいえ

いいえ

いいえ

期限更新

いいえ

はい

はい

いいえ

いいえ

いいえ

再開

はい

はい

はい

いいえ

いいえ

いいえ

ルート

いいえ

はい

はい

いいえ

いいえ

いいえ

現在の割当てのスキップ

はい

はい

いいえ

いいえ

いいえ

いいえ

一時停止

はい

はい

はい

いいえ

いいえ

いいえ

更新

いいえ

はい

はい

はい

いいえ

いいえ

添付ファイルの更新

はい

はい

はい

はい

はい

いいえ

コメントの更新

はい

はい

はい

はい

はい

いいえ

プロセス履歴の表示

はい

はい

はい

はい

いいえ

いいえ

サブタスクの表示

はい

はい

はい

いいえ

いいえ

いいえ

タスク履歴の表示

はい

はい

はい

はい

はい

はい

取消

はい

はい

いいえ

はい

いいえ

いいえ

脚注1To Doタスクの場合は無効

脚注2To Doタスクの場合のみ有効

脚注3アラート状態のタスクに対して適用可能

脚注4現在の割当て先のマネージャへの申告とエスカレートなし

脚注5申告なし

32.6 休暇期間の設定

休暇期間は、図32-36に示すように、指定した日付範囲内では自動タスク割当てから削除されるように設定できます。

図32-36 休暇期間の設定

「図32-36 休暇期間の設定」の説明

休暇ルールはTo Doタスクに対して実行されません。休暇期間と同期する休暇ルールの設定方法については、第32.7項「ルールの設定」を参照してください。

休暇期間を作成する手順は、次のとおりです。

1. 「プリファレンス」リンクをクリックします。
「ルール」タブが表示されます。

2. 「休暇期間の有効化」をクリックします。

3. 開始日と終了日を指定します。

4. 「保存」をクリックします。
図32-37に示すように、休暇期間が有効になります。

図32-37 休暇期間の有効化

「図32-37 休暇期間の有効化」の説明

32.7 ルールの設定

ルールを使用してタスクを操作します。タスクは、特定のタスク・タイプ、またはユーザーやグループに割り当てられた全タスクのいずれかです。図32-38に、休暇ルールも含めて、ルールを設定する場所を示します(第32.6項「休暇期間の設定」で説明した休暇期間の設定とは異なります)。

図32-38 ルールの作成

「図32-38 ルールの作成」の説明

ルールは、そのルールが使用されるすべての環境で常に適用できるわけではありません。たとえば、ルールが複数のタスク・タイプに適用される場合は、タスクによって結果が異なるため、すべてのタスクに結果を設定できない場合があります。

ルールはリストされている順序で実行されます。図32-38に示すように、ルールはヘッダーの上下ボタンを使用して順序を変更できます。

ルールはフィルタ条件を満たしている場合に実行され、他のルールは評価されません。ルールを実行するユーザーは、該当するタスクに割り当てられている唯一のユーザーであることが必要です。タスクが(自分を含めて)複数のユーザーに割り当てられている場合、ルールは実行されません。

ビジネス・ルールをTo Doタスクに対して指定することはできません。

32.7.1 ユーザー・ルールの作成方法

ユーザー・ルールを作成する際は、次を指定します。

- ルール名。

- ルールが休暇ルールかどうか。休暇ルールと同期する休暇期間の設定方法については、第32.6項「休暇期間の設定」を参照してください。

- ルールが適用されるタスクまたはタスク・タイプ: 指定されていない場合、ルールは全タスクに適用されます。タスク・タイプを指定すると、そのタスク・タイプにマップされたマップ済属性すべてをルール条件で使用できます。

- ルールを適用するタイミング。

- ルールに対する条件。これらの条件は、ルールを詳細に定義するフィルタです。たとえば、ルールで優先度1のタスクのみを操作したり、特定のユーザーが作成したタスクを操作するように指定します。標準タスク属性や特定のタスクにマップされた任意のマップ済属性に基づいて条件を作成できます。詳細は、第32.10.1項「属性のマップ方法」を参照してください。

ユーザー・ルールを使用して、次のアクションを実行します。

- 再割当て先: 直属の部下またはグループにタスクを再割当てできます。

- 委任先: 任意のユーザーまたはグループに委任できます。タスクを完了するためのアクセス権または権限は、タスクの委任元ユーザーに従って決定されます(委任した元のユーザーからの権限が、後続の委任または再割当てによって変更されることはありません)。

- 結果の設定先: ワークフロー・タスクが自動結果(タスクの承認または却下など)用に設計されている場合は、その結果を指定できます。ルールは特定のタスク・タイプを対象とする必要があります。ルールの対象がすべてのタスク・タイプの場合、このオプションは表示されません。

- アクションを実行しない: このアクションを使用すると、より一般的な他のルールの適用を防止できます。たとえば、アクションが不要な融資申請を除いて、休暇中のすべてのタスクを別のユーザーに再度割り当てるには、2つのルールを作成します。第1のルールでは、融資申請に対してアクションを実行しないように指定し、第2のルールでは、すべてのタスクを別のユーザーに再度割り当てるように指定します。第1のルールによって、融資申請に対する再割当てが防止されます。

ユーザー・ルールを作成する手順は、次のとおりです。

1. 「プリファレンス」リンクをクリックします。
「ルール」タブが表示されます。

2. 「ルール」領域で、「ルール」をクリックし、次に「追加」をクリックします。

3. 「ルール」領域で次の操作を実行し、「保存」をクリックします。

- ルールの名前を指定します。

- 休暇ルールを作成する場合は、「休暇ルールとして使用」を選択します。ルールの開始日と終了日は、休暇期間と自動的に同期されます。

- 「次の期間のみルールを実行」を選択し、ルールの実行期間を指定します。

- 「タスク」領域で、これらの条件に一致する「すべてのタスク」または「タスク」を選択します。その後、「追加」ボタンを使用して、ルール条件を追加します。

- このルールの適用対象となるタスク・タイプを参照します。

- 図32-38に示すように、「アクション」領域で、実行するアクションを「再割当て先」、「委任先」、「結果の設定先」、「アクションを実行しない」から選択します。

新しいルールが「ルール」ノードの下に表示されます。

32.7.2 グループ・ルールの作成方法

グループ・ルールの作成はユーザー・ルールの作成に類似していますが、ログイン・ユーザーが管理するグループのリストが追加されています。次に、グループ・ルールの例を示します。

- 特定の顧客からのタスクをグループのメンバーに割り当てます。

- ラウンド・ロビン割当てを使用して、タスク割当てをグループの各メンバーに確実に均等配分します。

- グループ内で最もビジーでないメンバーに、高優先度のタスクを確実にルーティングします。

グループ・ルールを使用して、次のアクションを実行します。

- メンバーへの割当ての経由先: 割当てを取得するグループ・メンバーを決定するための基準を指定できます。この動的割当て基準には、ラウンド・ロビン割当て、最もビジーでないグループ・メンバーへの割当て、または最も生産性の高いグループ・メンバーへの割当てを含めることができます。また、タスクをグループ内のユーザーに割り当てるためのカスタム関数も追加できます。

- 割当て先: ユーザー・ルールと同様に、直属の部下またはグループにタスクを割り当てられます。

- アクションを実行しない: ユーザー・ルールと同様に、より一般的なルールの実行を防止する条件を指定してルールを作成できます。

グループ・ルールを作成する手順は、次のとおりです。

1. 「プリファレンス」リンクをクリックします。

2. 「他のルール」タブをクリックします。

3. リストから「グループ」を選択します。

4. グループ名を入力して「検索」アイコンをクリックするか、グループ名を入力します。
「認証ブラウザ」が開き、グループを検索して選択できます。

5. 図32-39のように、「グループ・ルール」ノードの下のグループ名を選択し、「新規ルールの追加」をクリックします。

図32-39 グループ・ルールの作成

「図32-39 グループ・ルールの作成」の説明

6. グループ・ルールの情報を入力して、「保存」をクリックします。

- ルールの名前を指定します。

- このルールの適用対象となるタスク・タイプを参照します。

- ルールの実行日を指定します。

- 「タスク」領域で、ルール条件を追加します。

- 図32-39に示すように、「アクション」領域で、実行する(または実行しない)アクションを「メンバーへの割当ての経由先」、「割当て先」、「アクションを実行しない」から選択します。

新しいルールが「グループ・ルール」ノードの下に表示されます。

32.7.3 複数の割当て先があるタスクの割当てルール

タスクに複数の割当て先がある場合、割当てルールはタスクに対して評価されず、タスクは自動的にルーティングされません。これは、タスクの割当て先ごとに割当てルールを定義できるため、タスクに対して実行するアクションに競合が発生する可能性があるためです。割当てルールによってルーティングされるのは、単一のユーザーに排他的に割り当てられたタスクのみです。

たとえば、次の順序で操作を実行するとします。

1. ユーザーcdickensに対して、割当て済のすべてのリクエストをユーザーjsteinに再度割り当てるルールを作成します。

2. ユーザーjcooperは、割当て済のタスクをcdickensとcdoyleに再度割り当てます。

3. cdickensがタスクを申告し、そのタスクが受信ボックスに表示されます。

このタスクは、jsteinに自動的に再度割り当てられません。ユーザーjcooperが、複数のユーザー(cdickensとcdoyle)ではなく、cdickensのみにタスクを明示的に再度割り当てた場合は、cdickensに対して設定された割当てルールに従ってタスクがjsteinにルーティングされます。

32.8 ワークリスト管理機能の使用

管理者とは、BPMWorkflowAdminロールが付与されているユーザーです。次の管理機能があります。

- 他のユーザーまたはグループのルールの管理

- ワークリスト表示の設定(アプリケーション・プリファレンス)。アプリケーション・プリファレンスによって、次に示すワークリストの外観をカスタマイズします。

- ログイン・レルムのラベル

- リソース・バンドル

- 言語のロケール情報の取得元

- ブランド・ロゴ

- ブランド・タイトル

- ブランド・スキン

- oracle.com、google.comなどの使用する外部アプリケーション

- マップ済属性の指定

管理者は、すべてのユーザーに割り当てられたすべてのタスクを表示および更新できます。「管理者」タブを選択すると、管理者の「割当て先」フィルタに「管理者」が表示されます。

この項では、次の内容を説明します。

- 第32.8.1項「管理者が他のユーザーまたはグループのルールを管理する方法」

- 第32.8.2項「ログイン・ページ・レルムのラベルの指定方法」

- 第32.8.3項「リソース・バンドルの指定方法」

- 第32.8.4項「言語のロケール情報の指定方法」

- 第32.8.5項「ブランド・ロゴの指定方法」

- 第32.8.6項「ブランド・タイトルの指定方法」

- 第32.8.7項「スキンの選択方法」

- 第32.8.8項「カスタマイズされたアプリケーションおよびリンクを有効にする方法」

マップ済属性の指定の詳細は、第32.10項「マップ済属性(フレックス・フィールド)の使用」を参照してください。

32.8.1 管理者が他のユーザーまたはグループのルールを管理する方法

この機能は、ルールに関する問題を解決する場合に役立ちます。また、管理者は退社したユーザーに対するルールを設定できます。これにより、そのユーザーに割り当てられていた全タスクが別のユーザーまたはグループに自動的に割り当てられます。

別のユーザーまたはグループのルールを作成する手順は、次のとおりです。

1. 「プリファレンス」リンクをクリックします。

2. 「他のルール」タブをクリックします。

3. 図32-40に示すように、ルールを作成する対象のユーザーまたはグループを検索します。

図32-40 別のユーザーまたはグループのルールの作成

「図32-40 別のユーザーまたはグループのルールの作成」の説明

4. 「ユーザー・ルール」ノードまたはグループ名(グループ・ルールの場合)をクリックします。

5. 「追加」アイコンをクリックして、ルールを作成します。

6. 図32-41に示すように、ルールの情報を入力して「保存」をクリックします。

図32-41 別のユーザーまたはグループのルールの定義

「図32-41 別のユーザーまたはグループのルールの定義」の説明

32.8.2 ログイン・ページ・レルムのラベルの指定方法

アイデンティティ・サービスが複数のレルムで構成されている場合は、ユーザーがOracle BPM Worklistにログインすると、ログイン・ページにレルム名のリストが表示されます。LABEL_LOGIN_REALM では、これらのレルムを表示するラベルのルックアップに使用されたリソース・バンドル・キーが指定されます。レルムという用語は、ユーザー・コミュニティにあわせて変更でき、国、会社、部署または部門などの用語の方が適切な場合があります。レルムという用語を変更するには、リソース・バンドルをカスタマイズし、この文字列にリソース・バンドル・キーを指定し、そのリソース・バンドル・キーを指すように「ログイン・ページ・レルムのラベル」パラメータを設定します。

図32-42は、「ログイン・ページ・レルムのラベル」フィールドがハイライト表示された「アプリケーション・プリファレンス」ページを示しています。アプリケーション・プリファレンス・ページにアクセスするには、「ワークリスト・アプリケーション」インタフェースの最上部にあるグローバル・ツールバーの「管理」をクリックします。

図32-42 ログイン・ページ・レルムのラベルの指定

「図32-42 ログイン・ページ・レルムのラベルの指定」の説明

32.8.3 リソース・バンドルの指定方法

リソース・バンドルは、ワークリスト・アプリケーションに表示される文字列を提供します。デフォルトでは、リソース・バンドルへのクラス・パスは次のとおりです:

oracle.bpel.worklistapp.resource.WorklistResourceBundle

図32-43は、「リソース・バンドル」フィールドがハイライト表示された「アプリケーション・プリファレンス」ページを示しています。アプリケーション・プリファレンス・ページにアクセスするには、「ワークリスト・アプリケーション」インタフェースの最上部にあるグローバル・ツールバーの「管理」をクリックします。

図32-43 リソース・バンドルの指定

「図32-43 リソース・バンドルの指定」の説明

管理者は、カスタム・リソース・バンドルを作成することで、アプリケーションに表示される文字列を追加または変更できます。その後、アプリケーション・プリファレンス・ページの「リソース・バンドル」フィールドを使用して、カスタム・リソース・バンドルへのクラス・パスを指定できます。

リソース・バンドルのカスタマイズの詳細は、『Oracle Fusion Middleware Oracle Business Process Managementユーザーズ・ガイド』を参照してください。

32.8.4 言語のロケール情報の指定方法

アプリケーション・プリファレンス・ページで、ワークリスト・アプリケーションの表示言語を決定する方法を指定できます。言語ロケールに関する情報は、ユーザーのブラウザ、またはワークリスト・ユーザーに関する情報を格納するアイデンティティ・プロバイダから導出できます。

アプリケーション・プリファレンス・ページにアクセスするには、「ワークリスト・アプリケーション」インタフェースの最上部にあるグローバル・ツールバーの「管理」をクリックします。

図32-44 言語のロケール情報の指定

「図32-44 言語ローカル情報の指定」の説明

32.8.5 ブランド・ロゴの指定方法

ブランド・ロゴは、ワークリスト・アプリケーションの各ページの左上隅に表示されるイメージです。Oracleロゴがデフォルトで表示されますが、選択したイメージに変更することもできます。

注意:

適切に表示するためには、イメージ・サイズを120px x 40px (長さx幅)にすることをお薦めします。高解像度の大きいイメージをブランド・ロゴのサイズにあわせて圧縮することもできますが、小さいイメージの方が見やすく表示されます。

図32-45は、「ブランド・ロゴ」フィールドがハイライト表示された「アプリケーション・プリファレンス」ページを示しています。アプリケーション・プリファレンス・ページにアクセスするには、「ワークリスト・アプリケーション」インタフェースの最上部にあるグローバル・ツールバーの「管理」をクリックします。

図32-45 ブランド・ロゴの指定

「図32-45 ブランド・ロゴの指定」の説明

ブランド・ロゴを指定するには:

次のいずれかを実行します:

- 外部のイメージ・ホストWebサイトを参照します。このタスクを行うには、「ブランド・ロゴ」フィールドにイメージのURLを入力します。

- サーバー上の特定の場所にイメージをアップロードし、「ブランド・ロゴ」フィールドに相対パス(/afr/my_logo.pngなど)を入力します。

- 共有ライブラリからイメージを参照します。このタスクを行うには、「ブランド・ロゴ」フィールドに、共有ライブラリにあるとおりにロゴ名のパス(/my_logo.pngvなど)を入力します。

注意:

ワークリスト・アプリケーションとプロセス・ワークスペースのいずれかからブランド・ロゴをカスタマイズすると、両方のアプリケーションのロゴが変更されます。たとえば、ワークリストからロゴを変更すると、ワークスペースのロゴが自動的に変更されます。

共有ライブラリの一部としてのイメージおよびJARファイルのデプロイの詳細は、『Oracle Fusion Middleware Oracle Business Process Managementユーザーズ・ガイド』を参照してください。

32.8.6 ブランド・タイトルの指定方法

サイトのタイトルを指定し、デフォルトのタイトル(BPM Worklist)を好みのタイトルに変更できます。

図32-46は、「ブランド・タイトル」フィールドがハイライト表示された「アプリケーション・プリファレンス」フィールドを示しています。アプリケーション・プリファレンス・ページにアクセスするには、「ワークリスト・アプリケーション」インタフェースの最上部にあるグローバル・ツールバーの「管理」をクリックします。

Figure 32-46 ブランド・タイトルの指定

「図32-46 ブランド・タイトルの指定」の説明

ブランド・タイトルを指定するには:

次のいずれかを実行します:

- 「ブランド・タイトル」フィールドに、タイトルの単純な文字列を入力します。

- 「ブランド・タイトル」フィールドに、「リソース・バンドル」のキーと値のペアを参照するラベルを入力します。この方法で、タイトルをLABEL_WORKLIST_TITLE.などのように国際化できます。

32.8.7 スキンの選択方法

スキンは、グラフィック・インタフェースのルック・アンド・フィールを決定します。アプリケーション・プリファレンス・ページからスキンを指定します。アプリケーション・プリファレンス・ページにアクセスするには、「ワークリスト・アプリケーション」インタフェースの最上部にあるグローバル・ツールバーの「管理」をクリックします。

図32-47は、「スキンの選択」フィールドがハイライト表示された「アプリケーション・プリファレンス」ページを示しています。

図32-47 スキンの選択

「図32-47 スキンの選択」の説明

スキンを選択するには:

次のいずれかを実行します:

- 「スキンの選択」リストから、デフォルトのADFスキンの1つを選択します。

- .JARファイル内のカスタマイズされたスキン(.cssファイル)をアップロードし、共有ライブラリの一部としてデプロイします。その後、コンソールからアプリケーションを再起動すると、カスタム・スキンが「スキンの選択」リストに表示されます。

カスタマイズされたスキンを含むJARファイルを作成するには:

1. 次の例のようなディレクトリ構造を作成します:

C:\temp\META-INF\adf\oracle\skin\images
META-INF\skins\custom.css
META-INF\trinidad-skins.xml

この例では、customという単語をカスタマイズしたスキンの名前に変更できます。

2. trinidad-skins.xmlファイルの内容が次のようになっていることを確認します:

<?xml version="1.0" encoding="ISO-8859-1"?>
<skins xmlns="http://myfaces.apache.org/trinidad/skin">
<skin>
<id>custom.desktop</id>
<family>custom</family>
<extends>custom.desktop</extends>
<render-kit-id>org.apache.myfaces.trinidad.desktop</render-kit-id>
<style-sheet-name>skins/custom.css</style-sheet-name>
</skin>
</skins>

3. c:\tempディレクトリから次のコマンドを発行して、.JARファイルを作成します。

jar -cvf customSkin.jar META-INF/

4. このJARファイルをディレクトリ/scratch/username/sharedLibにコピーします。

注意:

次の方法でcssファイル内のイメージを参照します:

../adf/oracle/skin/images/example.gif (末尾に2つドットを付けます)。

これにより、.cssファイルがあるMETA-INF/skinディレクトリの上のディレクトリからMETA-INFルートの検索を開始できます。

共有ライブラリの一部としてのJARファイルのデプロイの詳細は、『Oracle Fusion Middleware Oracle Business Process Managementユーザーズ・ガイド』を参照してください。

32.8.8 カスタマイズされたアプリケーションおよびリンクを有効にする方法

プロセス・ワークスペースでは、「外部アプリケーション」パネルで使用できるカスタマイズされた外部アプリケーションおよびリンクを作成できます。さらに、プロセス・ワークスペースとワークリスト・アプリケーションの両方で、「タスクの詳細」ペインに表示される列を指定できます。

アプリケーション・プリファレンス・ページを使用して、カスタム・アプリケーションを指定します。アプリケーション・プリファレンス・ページにアクセスするには、「ワークリスト・アプリケーション」インタフェースの最上部にあるグローバル・ツールバーの「管理」をクリックします。

カスタム・アプリケーションを指定するJavaコードを確認するには、第32.14項「ワークリスト・アプリケーションでカスタマイズされたアプリケーションを有効化するJavaコード」を参照してください。

カスタマイズされたアプリケーションを有効にするには:

1. 「アプリケーション・プリファレンス」ページで、図32-48に示すように、「アプリケーション・カスタマイズ・クラス名」フィールドにカスタム・アプリケーションのクラス名を入力します。

図32-48 カスタム・アプリケーションの指定

「図32-48 カスタム・アプリケーションの指定」の説明

2. コンソールからアプリケーションを再起動します。
カスタマイズによっては、その効果をここで確認できます。

プロセス・ワークスペース用のカスタマイズを実行し、外部アプリケーションの作成と「タスクの詳細」ペインでの受信ボックス列の指定のいずれか(あるいはその両方)を実行した場合、次が表示されます。

- プロセス・ワークスペースのホームページにある「外部アプリケーション」パネルにリストされたカスタム・アプリケーション(図32-49を参照)

図32-49 プロセス・ワークスペースの「外部アプリケーション」パネル

「図32-49 プロセス・ワークスペースの「外部アプリケーション」パネル」の説明

- ユーザーが指定した内容にあわせて調整された、「タスクの詳細」受信ボックスの列(図32-50を参照)

図32-50 「タスクの詳細」ペインのカスタマイズされた列

「図32-50 「タスクの詳細」ペインのカスタマイズされた列」の説明

ワークリスト・アプリケーションおよびプロセス・ワークスペースでのアプリケーションのカスタマイズの詳細は、『Oracle Fusion Middleware Oracle Business Process Managementユーザーズ・ガイド』を参照してください。

32.8.9 タスク・アクションのイメージの指定方法

管理者の場合、アクションを赤の「X」アイコンか、緑のチェック・マーク・アイコンのいずれで表示するかを指定できます。

タスク・アクションのイメージを指定するには:

1. 「管理」、「アプリケーション・プリファレンス」の順に選択します。

2. 「タスク・アクションをイメージにマップ」フィールドで、緑のチェック・マーク・アイコンまたは赤の「X」アイコンにマップするタスクを選択します。

3. 「保存」をクリックします。

32.9 通知設定の指定

複数の通信チャネル(配信タイプ)にアクセスする場合は、通知設定を構成して、メッセージの受信方法、時期および場所を管理できます。具体的には、メッセージを配信するチャネルとその環境を指定するメッセージング・フィルタ(配信プリファレンス)を定義できます。

たとえば、異なるサービス・レベル合意(SLA)を持つ顧客から受信するメッセージに対してフィルタを作成し、プレミアムSLAの顧客の場合は勤務先電話番号とSMSチャネルを介して通知し、それ以外のSLAの顧客の場合は電子メールで通知するように指定できます。

32.9.1 メッセージング・フィルタ・ルール

メッセージング・フィルタ・ルールは、ルール条件とルール・アクションで構成されます。ルール条件は、ルール属性、演算子および関連する値で構成されます。ルール・アクションは、ルール内に指定した条件を満たす場合に実行されるアクションです。

32.9.1.1 データ型

表32-9に、メッセージング・フィルタでサポートされるデータ型を示します。各属性には関連するデータ型があり、各データ型には一連の比較演算子が事前定義されています。

表32-9 メッセージング・フィルタでサポートされるデータ型

データ型

比較演算子

日付

isEqual、isNotEqual、isGreaterThan、isGreaterThanOrEqual、isLessThan、isLessThanOrEqual、Between、isWeekday、isWeekend

時間

isEqual、isNotEqual、Between

数値

isEqual、isNotEqual、Between、isGreaterThan、isGreaterThanOrEqual、isLessThan、isLessThanOrEqual

文字列

isEqual、isNotEqual、Contains、NotContains

注意:

文字列データ型は正規表現をサポートしていません。

32.9.1.2 属性

表32-10に、メッセージング・フィルタ用に事前定義されている属性を示します。

表32-10 メッセージング・フィルタ用に事前定義されている属性

属性

データ型

コスト合計

数値

送信元

文字列

支出タイプ

文字列

宛先

文字列

アプリケーション・タイプ

文字列

期間

数値

アプリケーション

文字列

プロセス・タイプ

文字列

ステータス

文字列

件名

文字列

顧客タイプ

文字列

時間

時間

グループ名

文字列

処理時間

数値

日付

日付

期日

日付

ユーザー

文字列

ソース

文字列

金額

数値

ロール

文字列

優先度

文字列

顧客名

文字列

有効期限

日付

順序タイプ

文字列

組織

文字列

分類

文字列

サービス・リクエスト・タイプ

文字列

32.9.2 ルール・アクション

特定のルールには、メッセージング・フィルタによって次のアクションを定義できます。

- メッセージを送信しない: メッセージをチャネルに送信しません。

- 選択したすべてのチャネルにメッセージを送信: アドレス・リストに指定されているすべてのチャネルにメッセージを送信します。

- 最初の使用可能なチャネルに送信: 1つのメッセージの送信に成功するまで、アドレス・リスト内のチャネルに対してメッセージをシリアルに送信します。つまり、現在のチャネルが失敗ステータスを返すと、次のチャネルへの送信が実行されます。このフィルタ・アクションは、ヒューマン・ワークフロー・レイヤーから送信されるメッセージに対してはサポートされていません。

32.9.3 メッセージング・チャネルの管理

Oracle BPM Worklistでのメッセージング・チャネルは、業務用携帯電話などの物理的なチャネル、およびデスクトップで実行する電子メール・クライアント・アプリケーションの両方を意味します。Oracle BPM Worklistで具体的にサポートしているのは、次のメッセージング・チャネルです。

- 電子メール

- IM

- 携帯電話

- SMS

- ボイス

- ワークリスト

メッセージング・チャネルについては次の点に注意してください。

- メッセージング・チャネルのアドレスは、構成済のアイデンティティ・ストアからフェッチされます。

- SMS通知および携帯電話通知は、携帯電話番号に送信されます。

- ボイス通知は、勤務先電話番号に送信されます。

- メッセージング・チャネル・プリファレンスがワークリストの場合、特別な通知は送信されません。かわりに、Oracle BPM Worklistにログインしてタスクを表示してください。

- 優先チャネルが選択されていない場合、デフォルトのメッセージング・チャネル・プリファレンスは電子メールになります。

メッセージング・チャネルの表示、作成、編集および削除には、「メッセージング・チャネル」タブを使用できます。

32.9.3.1 メッセージング・チャネルの表示

既存のメッセージング・チャネルを表示できます。

メッセージング・チャネルを表示する手順は、次のとおりです。

1. 「プリファレンス」リンクをクリックします。

2. 「通知」タブをクリックします。

3. 「メッセージング・チャネル」タブをクリックします。
「マイ・メッセージング・チャネル」リスト(図32-51)が表示され、次の情報が表示されます。

- 名前: メッセージング・チャネルの名前。

- タイプ: メッセージング・チャネルのタイプ(電子メール、SMSなど)。

- アドレス: チャネルのアドレス(電話番号、電子メール・アドレスなど)。

- デフォルト: このチャネルがデフォルトのメッセージング・チャネルかどうかを指定します。

図32-51 メッセージング・チャネル

「図32-51 メッセージング・チャネル」の説明

4. 「表示」→「列」の順にクリックして、表示または非表示の列を選択します。
また、「表示」→「列の並替え」の順にクリックしてダイアログを表示し、表示されている列を並べ替えることもできます。

メッセージング・チャネルの名前とアドレスは、基礎となるアイデンティティ・ストア(Oracle Internet Directoryなど)から取得されます。

32.9.3.2 メッセージング・チャネルの作成、編集および削除

Oracle BPM Worklistでは、基礎となるアイデンティティ・ストア(Oracle Internet Directoryなど)を使用して、メッセージング・チャネルとアドレスを管理します。したがって、Oracle BPM Worklistを使用してメッセージング・チャネルを直接、作成、変更または削除することはできません。

これらのアクションを実行するには、組織のアイデンティティ・ストアの管理責任者であるシステム管理者に連絡してください。

32.9.4 メッセージング・フィルタの管理

メッセージング・フィルタ・タブを使用して、受信する通知のタイプ、およびこれらの通知を受信するために使用するチャネルを指定するフィルタを定義できます。そのためには、比較演算子(「は次と等しい」や「は次と等しくない」など)、通知タイプ、内容または送信元を表す属性、および通知アクション(使用可能な最初のメッセージング・チャネルに通知を送信、すべてのメッセージング・チャネルに通知を送信、またはどのチャネルにも通知を送信しない(事実上、通知をブロック))の組合せを使用します。

たとえば、上司であるLiseから受信したすべてのメッセージを取得するLiseからのメッセージというメッセージング・フィルタを作成できます。すべてのフィルタ条件に一致する通知が最初に業務用携帯電話などに送信され、最初のメッセージング・チャネルが使用できない場合は会社の電子メールに送信されます。

32.9.4.1 メッセージング・フィルタの表示

既存のメッセージング・フィルタを表示できます。

メッセージング・フィルタを表示する手順は、次のとおりです。

1. 「通知」タブをクリックします。

2. 「メッセージング・フィルタ」タブをクリックします。
「マイ・メッセージング・フィルタ」リスト(図32-52)が表示され、次の情報が表示されます。

- フィルタ名: メッセージング・フィルタの名前

- 説明: (オプション)メッセージング・フィルタの説明

図32-52 メッセージング・フィルタ

「図32-52 メッセージング・フィルタ」の説明

3. 「表示」→「列」の順にクリックして、表示または非表示の列を選択します。

32.9.4.2 メッセージング・フィルタの作成

メッセージング・フィルタを作成する手順は、次のとおりです。

1. 「作成」をクリックします。
図32-53に示すように、「メッセージング・フィルタ」ページが表示されます。

図32-53 メッセージング・フィルタの追加

「図32-53 メッセージング・フィルタの追加」の説明

2. 次の情報を指定します。

- フィルタ名: メッセージング・フィルタの名前

- 説明: (オプション)メッセージング・フィルタの説明

3. 次のように、「条件」セクションのリストおよびフィールドを使用して、フィルタ条件を定義します。

1. 「次のすべての条件」または「次の任意の条件」オプションを選択して、通知がすべての条件を満たす必要があるのか、それとも一部の条件なのかを選択します。

2. リストから属性を選択します。

3. リストから「isEqual」などの演算子を選択します。

4. テキスト・ボックスに、条件の値を入力します。

5. 「追加」をクリックして、条件をリストに追加します。

6. この手順を繰り返してフィルタ条件をさらに追加します。フィルタ条件を削除するには、「削除」をクリックします。

4. 「アクション」セクションで、次のメッセージング・オプションから選択します。

- メッセージを送信しない: メッセージをチャネルに送信しません。

- 選択したすべてのチャネルにメッセージを送信: アドレス・リストに指定されているすべてのチャネルにメッセージを送信します。

- 最初の使用可能なチャネルに送信: 1つのメッセージの送信に成功するまで、アドレス・リスト内のチャネルに対してメッセージをシリアルに送信します。つまり、現在のチャネルが失敗ステータスを返すと、次のチャネルへの送信が実行されます。

5. 配信チャネルを設定するには、「通知チャネルの追加」リストからチャネルを選択し、「追加」をクリックします。チャネルを削除するには、「削除」をクリックします。

6. 上/下矢印を使用してチャネルに優先度を付けます。「最初の使用可能なチャネルに送信」を選択すると、最上位のチャネル(使用可能な場合)がフィルタ基準に一致したメッセージを受信します。

7. 「OK」をクリックします。
メッセージング・フィルタが「マイ・メッセージング・フィルタ」ページに表示されます。この「マイ・メッセージング・フィルタ」ページでは、チャネルを編集したり、削除することができます。フィルタを作成せずにダイアログを閉じる場合は、「取消」をクリックします。

32.9.4.3 メッセージング・フィルタの編集

メッセージング・フィルタを編集する手順は、次のとおりです。

1. 「マイ・メッセージング・フィルタ」ページでフィルタを選択します。

2. 「編集」をクリックします。

3. 「OK」をクリックしてメッセージング・フィルタを更新します。フィルタを変更せずにダイアログを閉じる場合は、「取消」をクリックします。

32.9.4.4 メッセージング・フィルタの削除

メッセージング・フィルタを削除する手順は、次のとおりです。

1. 「マイ・メッセージング・フィルタ」ページでフィルタを選択します。

2. 「削除」をクリックします。確認ダイアログが表示されます。

3. 「OK」をクリックしてメッセージング・フィルタを削除します。フィルタを削除せずにダイアログを閉じる場合は、「取消」をクリックします。

32.10 マップ済属性(フレックス・フィールド)の使用

ヒューマン・ワークフローのマップ済属性(以前のフレックス・フィールド)での格納と問合せでは、状況固有のカスタム属性が使用されます。これらのカスタム属性は、通常、タスク・ペイロード値に基づきます。マップ済属性にカスタム属性を格納すると、次の利点が得られます。

- フレックス・フィールドをタスク・リストの列として表示できます。

- フレックス・フィールドでは、カスタム・ビューおよび拡張検索でタスクをフィルタ処理できます。

- フレックス・フィールドは、キーワードベースの検索で使用できます。

たとえば、タスクの注文書リクエスト・ペイロードのRequester、PurchaseOrderIDおよびAmountフィールドをマップ済属性に格納できます。Oracle BPM Worklistにログインした承認者は、これらのフィールドの値をタスク・リスト内の列で確認して、アクセスするタスクを決定できます。ユーザーは、マップ済属性に基づいてタスクをフィルタ処理するビューを定義できます。たとえば、ユーザーは、異なる金額範囲に基づいて発注書の承認用ビューを作成できます。ユーザーがある時点で特定のリクエスタまたは発注書IDに関連するタスクを取得することも必要になった場合、キーワード・フィールドにそのリクエスタまたは発注書IDを指定して検索を実行することによって、関連するタスクを取得できます。

マップ済属性の移入を行う場合は、次の手順で管理者がマップ済属性マッピングを作成する必要があります。

1. 移入するマップ済属性のラベルを指定します。

2. このラベルに、データを含むペイロード属性をマップします。

これらのマッピングは、特定のタスク・タイプに対して有効です。したがって、タスク・タイプごとに異なるマップ済属性マッピングを作成できます。マッピングが完了し、新しいタスクが開始されると、そのペイロードの値はマップ済属性に推進されます。マッピングの前に開始されたタスクについては、マップ済属性に値は格納されません。マップ済属性に推進できるのは、ペイロード内の最上位レベルの単純型の属性のみです。複合型の属性またはその中にネストされた単純型の属性は推進できません。ペイロード内の属性はマップ済属性に推進する必要がある場合があることに留意しながら、ヒューマン・タスク・エディタでタスクのペイロードを定義することが重要です。キーワードベースの検索には、テキストおよび数値のすべてのマップ済属性が自動的に含められます。

基本的に、ヒューマン・タスク・エディタを使用するのは、タスクのペイロードを定義する場合のみです。他のすべての操作は実行時に実行されます。

ディレクトリ・ネーミングは、フレックス・ファイル・ネーミング規則と併用できません。

注意:

- マップ済属性は、ビジネス・プロセスのインスタンスが生成される前に定義する必要があります。正しいマップ済属性は、マップ済属性の作成後に生成されたインスタンスにのみ反映されます。ビジネス・プロセスの古いインスタンスには、マップ済属性の以降の変更は反映されません。

- 新規ロケールを追加する場合、マップ済属性のラベルは、キャッシュをフラッシュするまで自動的には変換されません。キャッシュをフラッシュするには、サーバーを再起動するか、またはワークフロー構成の設定の値を変更します。たとえば、ワークフロー構成のworkflowCustomClasspathURLプロパティを新しい値に変更し、再度元の値に変更します。

32.10.1 属性のマップ方法

管理者または特別な権限があるユーザーは、属性マッピングを使用して(図32-54)、ペイロードのデータをインラインのマップ済属性に推進できます。データをマップ済属性に推進すると、それらのデータが検索可能になり、タスク・リスト・ページで列として表示できるようになります。

管理者はパブリック・マップ済属性をマップできます。workflow.mapping.publicFlexField権限を付与されたユーザーはパブリック・マップ済属性をマップ可能であり、「管理」タブに「パブリック・フレックス・フィールド」ノードが表示されます。

図32-54 マップ済属性マッピング

「図32-54 マップ済属性マッピング」の説明

ラベルを作成する手順は、次のとおりです。

マップ済属性マッピングを作成するには、まず管理者がマップ済属性を示すわかりやすい表示名となるセマンティック・ラベルを定義します。図32-55に示すように、「追加」をクリックして「ラベルの作成」ダイアログを使用します。

図32-55 ラベルの作成

「図32-55 ラベルの作成」の説明

図32-55に示すように、labelNameはタスク属性TextAttribute3にマップされます。ペイロード属性もラベルにマップされます。この例では、「テキスト」属性タイプがlabelNameに関連付けられています。その結果、「テキスト」属性の値が「TextAttribute3」列に格納され、labelNameがユーザーのタスク・リストに表示される列ラベルになります。ラベルは、様々なタスク・タイプに再利用できます。ラベルを削除できるのは、そのラベルがどのマッピングにも使用されていない場合のみです。

マップされたペイロード属性は、カスタム・ビューに列として表示でき、カスタム・ビューとワークフロー・ルールの両方でフィルタ条件として使用できます。ペイロード属性の表示名は、マッピングの実行時に選択した属性ラベルです。

次の制約に注意してください:

- マップできるのは、単純なタイプのペイロード属性のみです。

- 1つのタスク・タイプに使用できるマップ済属性(およびラベル)は1つのみです。

- numberまたはdateデータ型のデータ型変換はサポートされていません。たとえば、string型のペイロード属性をnumber型のラベルにマップすることはできません。

すべてのマッピングを参照する手順は、次のとおりです。

1. 「全マッピングの参照」をクリックします。

2. ラベル表内の行を選択して、特定のラベルにマップされたすべてのペイロード属性を表示します。

図32-56 マッピングの参照

「図32-56 マッピングの参照」の説明

マッピングをタスク・タイプ別に編集する手順は、次のとおりです。

1. 「タスク・タイプによるマッピングの編集」をクリックし、必要に応じてタスク・タイプを指定して、「検索」をクリックします。

2. タスク・タイプを選択して、「OK」をクリックします。

図32-57 タスク・タイプの選択

「図32-57 タスク・タイプの選択」の説明

3. 「タスク・タイプによるマッピングの編集」フィールドにタスク・タイプが表示されている状態で、「実行」をクリックします。
図32-58に示すように、選択したタスク・タイプに対する現行のマッピングがすべて表示されます。

図32-58 ラベルの選択

「図32-58 ラベルの選択」の説明

4. マッピングのラベルを選択して、「選択」をクリックします。
図32-59に、完成したマッピングを示します。

図32-59 作成されたマップ済属性マッピング

「図32-59 作成されたマップ済属性マッピング」の説明

詳細は、第34.1.9.1項「属性ラベルの国際化」を参照してください。

32.10.2 カスタムのマップ済属性

次のマップ済属性がWorkflowTask.xsdファイルに含まれており、制限なしに使用できます。

表32-11 カスタムのマップ済属性

属性

データ型

customerAttributeString1

文字列

customerAttributeString2

文字列

customerAttributeNumber1

ダブル

customerAttributeNumber2

ダブル

customerAttributeDate1

日付

customerAttributeDate2

日付

これらの属性の設定および取得には、次のJava Architecture for XML Binding (JAXB)メソッドを使用します。

task.getCustomerAttributes.getCustomerAttributeString1()

task.getCustomerAttributes.setCustomerAttributeString1("String")

task.getCustomerAttributes.getCustomerAttributeNumber1()

task.getCustomerAttributes.setCustomerAttributeNumber2(9)

task.getCustomerAttributes.setCustomerAttributeDate1()

task.getCustomerAttributes.setCustomerAttributeDate2()

これらのフィールドは、customerAttributeString1、customerAttributeString2、customerAttributeNumber1、customerAttributeNumber2、customerAttributeDate1、customerAttributeDate2としてデータベースに保持されます。

32.11 ワークリスト・レポートの作成

表32-12に、タスク分析に使用できるワークリスト・レポートを示します。

表32-12 ワークリスト・レポートのタイプ

レポート名

説明

入力パラメータ

不参加タスク

このレポートでは、ユーザーのグループまたは報告先のグループに割り当てられたタスクの中で、まだ獲得されていないタスク(不参加タスク)が分析されます。

- 割当て先: (必須)このオプションでは、ユーザーのグループに割り当てられたタスク(グループ)、報告先のグループに割り当てられたタスク(「報告先」)、ユーザーが作成者であるタスク(「作成者」)、またはユーザーが所有者であるタスク(「所有者」)を選択します。

- 作成日: (オプション)日付範囲。

- 有効期限: (オプション)日付範囲。

- タスクの状態: (オプション)状態は、「任意」、「割当て済」、「期限切れ」または「情報のリクエスト中」のいずれかです。

- 優先度: (オプション)優先度は、「任意」、「最高」、「高」、「標準」、「低」または「最低」のいずれかです。

タスクの優先度

このレポートでは、ユーザー、報告先またはそのグループに割り当てられたタスクの数が優先度別に分析されます。

- 割当て先: (必須)このオプションには、選択した割当て先に応じて、ログイン・ユーザーに割り当てられたタスク(「個人」)、ユーザーとそのユーザーが所属するグループに割り当てられたタスク(「個人とグループ」)、または、ユーザーの報告先が所属するグループに割り当てられたタスク(「報告先」)が含まれます。

- 作成日: (オプション)日付範囲。

- 終了日: (オプション)レポートに含まれるタスクの終了日の日付範囲。

- 優先度: (オプション)優先度は、「任意」、「最高」、「高」、「標準」、「低」または「最低」のいずれかです。

タスクのサイクル・タイム

このレポートでは、ユーザーのグループまたは報告先のグループに基づいて、タスクの割当てから完了までの所要時間が分析されます。

- 割当て先: (必須)このオプションには、選択した割当て先に応じて、自分のタスク(「個人」)、またはユーザーの報告先が所属するグループに割り当てられたタスク(「報告先」)が含まれます。

- 作成日: (オプション)日付範囲。

- 終了日: (オプション)レポートに含まれるタスクの終了日の日付範囲。

- 優先度: (オプション)優先度は、「任意」、「最高」、「高」、「標準」、「低」または「最低」のいずれかです。

タスクの生産性

このレポートでは、ユーザー、報告先またはグループについて、特定期間中に割り当てられたタスク数と完了したタスク数が分析されます。

- 割当て先: (必須)このオプションには、選択した割当て先に応じて、ユーザーのタスク(「個人とグループ」)、またはユーザーの報告先が所属するグループに割り当てられたタスク(「報告先」)が含まれます。

- 作成日(範囲): (オプション)作成日の日付範囲。デフォルト値は1週間です。

- タスク・タイプ: 「検索」(懐中電灯)アイコンを使用して、タスクのタイトルのリストから選択します。「ワークフロー・タスク・タイプの選択」ページに、タスクのすべてのバージョンがリストされます(オプション)。

タスク時間分布

このレポートには、割当て先がタスクを実行するのに要した時間が表示されます。

- 割当て先: (必須)このオプションには、選択した割当て先に応じて、ユーザーのタスク(「個人とグループ」)、またはユーザーの報告先が所属するグループに割り当てられたタスク(「報告先」)が含まれます。

- 開始...終了(日付範囲): (オプション)作成日の日付範囲。デフォルト値は1週間です。

- タスク・タイプ: 「検索」(懐中電灯)アイコンを使用して、タスクのタイトルのリストから選択します。「ワークフロー・タスク・タイプの選択」ページに、タスクのすべてのバージョンがリストされます(オプション)。

32.11.1 レポートの作成方法

レポートは、「レポート」リンクから入手できます。レポート結果は保存できません。

レポートを作成する手順は、次のとおりです。

1. 「レポート」リンクをクリックします。

2. 作成するレポートのタイプをクリックします。
図32-60に、使用可能なレポート・タイプを示します。

図32-60 Oracle BPM Worklistのレポート

「図32-60 Oracle BPM Worklistのレポート」の説明

3. パラメータを入力して、レポートの検索パラメータを定義します。
図32-61に、不参加タスク・レポートの入力ページの例を示します。他のレポートも同様です。すべてのレポート・タイプの入力パラメータについては、表32-12を参照してください。

図32-61 不参加タスク・レポート: タスク分析のための入力ページ

「図32-61 不参加タスク・レポート: タスク分析のための入力ページ」の説明

4. 「実行」をクリックします。

32.11.2 レポート作成時の処理内容

図32-62に示すように、(すべてのレポート・タイプについて)レポート結果は表形式と棒グラフ形式の両方で表示されます。レポートの実行に使用した入力パラメータは、左下隅の「レポート入力」に表示されます(表示するためにスクロールが必要な場合があります)。

図32-62 レポート表示: 表形式、棒グラフ形式および「レポート入力」

「図32-62 レポート表示: 表形式、棒グラフ形式および「レポート入力」」の説明

32.11.2.1 不参加タスク・レポート

図32-63に、不参加タスク・レポートの例を示します。

図32-63 不参加タスク・レポート

「図32-63 不参加タスク・レポート」の説明

このレポートは、Californiaグループに15件、Supervisorグループに7件、LoanAgentGroupに11件の不参加タスクがあることを示しています。このレポートでは、不参加(未申告)タスクはすべてDocumentReviewタスクです。レポートの実行時に複数のタイプの不参加タスクが存在する場合は、すべてのタスク・タイプがレポートに含まれ、それぞれのタスク・タイプが異なる色で表示されます。

32.11.2.2 タスクの優先度レポート

図32-64に、タスクの優先度レポートの例を示します。

図32-64 タスクの優先度レポート

「図32-64 タスクの優先度レポート」の説明

このレポートは、Californiaグループ、SupervisorグループおよびLoanAgentGroupに標準優先度のタスクがそれぞれ16件あることを示しています。ユーザーrstevenとjcooperのタスクはそれぞれ5件と22件で、いずれも標準優先度です。棒グラフでは、優先度(最高、高、標準、低、最低)が異なる色で区別されます。

32.11.2.3 タスクのサイクル・タイム・レポート

図32-65に、タスクのサイクル・タイム・レポートの例を示します。

図32-65 タスクのサイクル・タイム・レポート

「図32-65 タスクのサイクル・タイム・レポート」の説明

このレポートは、DocumentReviewタスクが完了するまでの平均所要時間が1時間6分、VacationApprovalタスクが完了するまでの平均所要時間が1時間28分であることを示しています。棒グラフには、平均サイクル・タイムがミリ秒単位で表示されます。

32.11.2.4 タスクの生産性レポート

図32-66に、タスクの生産性レポートの例を示します。

図32-66 タスクの生産性レポート

「図32-66 タスクの生産性レポート」の説明

このレポートは、California、LoanAgentGroupおよびSupervisorの各グループに割当て済のタスク数を示しています。ユーザー別では、jcooperに22件のタスクが割り当てられています。jcooperには、割当て済タスクに加えて、完了したタスクも2件あります。また、mtwainとrstevenには完了したタスクがそれぞれ6件と11件あることを示しています。棒グラフでは、2つのタスクの状態(「割当て済」と「完了」)が異なる色で区別されます。

注意:

「自分とグループ」および「報告先」オプションは、生産性レポートから削除されました。

32.12 Oracle BPM Worklistへのローカル言語およびタイムゾーンによるアクセス

ユーザーの優先ワークリスト言語は、アイデンティティ・ストアまたはブラウザから構成されます。

ユーザーの優先タイムゾーンは、アイデンティティ・プロバイダから構成します。

プリファレンス情報が使用できない場合、ユーザーの優先言語とタイムゾーンはシステム・デフォルトによって決定されます。システム・デフォルトは、言語とタイムゾーンのサーバー設定に基づいています。

ブラウザ・ロケールのカスタム・リソース・バンドル・クラスが使用できず、デフォルト・サーバー・ロケールのカスタム・リソース・バンドル・クラスが使用できる場合、言語は、デフォルト・サーバー・ロケールのカスタム・リソース・バンドル・クラスから導出されます。デフォルト・サーバー・ロケールのカスタム・リソース・バンドル・クラスも使用できない場合、言語はカスタム・ベース・クラスから導出されます。

ユーザー言語設定が設定されていない場合、またはOracle BPM Worklistでサポートされていない言語に設定されている場合、ワークリスト・アプリケーションの言語はデフォルトで英語に設定されます。

ワークリスト・インタフェースで「ブラウザ」または「アイデンティティ・プロバイダ」を選択する手順については、次の各項を参照してください。

- 第32.8.2項「ログイン・ページ・レルムのラベルの指定方法」(「アプリケーション・プリファレンス」ページで「ブラウザ」または「アイデンティティ・プロバイダ」を選択する方法)

- 第32.3項「タスク・リスト・ページのカスタマイズ」および図32-14「ワークリスト・ビューのフィールドのカスタマイズ」

32.12.1 Oracle BPM Worklist内の文字列

ワークリストのほとんどの文字列は、ワークリスト・アプリケーション・バンドルから取得されます。デフォルトでは、これは次のクラスです。

oracle.bpel.services.workflow.resource.WorkflowResourceBundle

ただし、適切なアプリケーション・プリファレンスを設定する(第32.8.3項「リソース・バンドルの指定方法」を参照)か、またはデフォルトのバンドル・クラスの更新済バージョンを指定すると、カスタム・リソース・バンドルに変更できます。詳細は、ワークフローのカスタマイズのサンプルを参照してください。

タスク属性名、マップ済属性のラベルおよびDynamic Assignment Function名に関しては、文字列はリソース・プロパティ・ファイルWorkflowLabels.propertiesの構成により取得されます。このファイルは、サービス構成ディレクトリのwfresourceサブディレクトリに存在します。このファイルに対してDynamic Assignment Functionおよび属性ラベル用にエントリを追加する方法は、第34章「ヒューマン・ワークフロー・サービスの概要」を参照してください。

カスタム・アクションおよびタスクのタイトルの表示名は、タスク構成ファイルに指定されているメッセージ・バンドルから取得されます。メッセージ・バンドルが指定されていない場合は、設計時に指定された値が使用されます。カスタム・アクションおよびタスクのタイトルを優先言語で表示するためにメッセージ・バンドルを指定する方法については、第34章「ヒューマン・ワークフロー・サービスの概要」を参照してください。

注意:

ヒューマン・タスク名にハングル文字は使用できません。ヒューマン・タスク名にはハングル文字のかわりにA-Z、a-z、0-9および"_"の文字のみを使用することをお薦めします。

32.12.2 アイデンティティ・ストアがLDAPベースである場合の優先言語、ユーザーの表示名およびタイムゾーン設定の変更方法

Oracle Internet DirectoryなどのLDAPベース・プロバイダが使用されている場合、Oracle Internet Directoryコミュニティの言語設定が変更されます。組込みLDAPサーバーに接続し、Oracle Internet Directoryコミュニティの言語設定を変更します。

1. LDAPブラウザ(例: openLdapブラウザ、ldapbrowser、jXplorer)を起動します。手順については、使用するブラウザのドキュメントを参照してください。

2. サーバーが実行されているホスト名とポート番号、およびログインする管理ユーザーの資格証明を指定して、LDAPサーバーに接続します。

- 組込みLDAPの場合:

1. 管理対象サーバーのデフォルトのポート番号は7001です。

2. 管理資格証明のユーザー名はcn=adminです。

3. 管理パスワード資格証明にアクセスするには、Oracle WebLogic Server管理コンソールから、ドメインに対して「セキュリティ」→「組込みLDAP」の順に選択します。
デフォルトのパスワード資格証明を変更する手順については、『Oracle Fusion Middleware Oracle WebLogic Serverの保護』の第9章、組込みLDAPサーバーの管理に関する項を参照してください。

- Oracle Internet Directoryの場合:

1. デフォルトのポート番号は3060です。

2. 管理ユーザー名はcn=orcladminです。

3. 管理パスワードはLDAPサーバーのパスワードです。

3. ユーザーの優先言語を変更するには、ユーザー・エントリに移動して、preferredLanguage属性を追加または設定します。サポートされている言語のリストは、表32-13「Oracle BPM Worklistでサポートされている言語」を参照してください。
ユーザー名を表示する言語を決定することもできます。このタスクを実行するには、LDAPディレクトリのユーザー・エントリに移動して、displayname属性を追加または指定します。ただし、ワークリストの「割当て先」列に表示されるユーザー名については、displayname属性の設定は優先されません。

タイムゾーン設定を変更するには、orclTimeZone属性を追加または設定します。タイムゾーン文字列の書式は「大陸/地域」です。$JAVA_HOME/jre/lib/ziディレクトリでタイムゾーン値を確認できます。ディレクトリで大陸名(Africa、Asia、Americaなど)を指定し、ディレクトリ内のファイルで地域を指定します。地域によっては、America/Indiana/Indianapolisのようにサブ地域が含まれる場合があります。

ユーザーがログインすると、ワークリストのページは、ユーザーの優先言語とタイムゾーンで表示されます。

32.12.3 タスク表示に使用する言語の変更方法

より高いパフォーマンスを得るため、Oracle Enterprise Manager Fusion Middleware Controlの「システムMBeanブラウザ」のLocaleListプロパティには、英語のみがリストされています。タスクのタイトル、カテゴリまたはサブカテゴリの他言語表示や言語の追加が必要な場合は、「システムMBeanブラウザ」で、言語のロケールを変更する必要があります。

注意:

すべての言語を最初に追加する必要があります。後で他の言語を追加しても、以前に他の言語で記述されたタスクはワークリストには表示されなくなります。たとえば、以前に指定されていた言語が英語で、その後フランス語を追加した場合、フランス語の追加前に記述されたタスクはワークリストには表示されなくなります。

言語を追加または変更する手順は、次のとおりです。

1. Oracle Enterprise Manager Fusion Middleware Controlのナビゲータで、soa-infraを右クリックし、「管理」→「システムMBeanブラウザ」を選択します。

2. 「アプリケーション定義のMBeans」、oracle.as.soainfra.config、「サーバー: server_name」、「WorkflowConfig」の順に展開します。

3. human-workflowをクリックします。
言語を変更する手順は、次のとおりです。

1. 「名前」列で、「LocaleList」をクリックします。

2. 「値」フィールドで、値をクリックします。

3. 「名前」列で、「言語」をクリックします。

4. 「値」フィールドのenを、使用する言語の値に変更します。

5. 「適用」をクリックします。

言語を追加する手順は、次のとおりです。

1. 「操作」タブをクリックします。

2. 「名前」列で、「createLocale」をクリックします。

3. 「値」フィールドに値を入力します。より高いパフォーマンスを得るため、タスクのタイトル、カテゴリ、サブカテゴリで使用する言語のみを含めてください。

4. 「起動」をクリックします。

32.12.4 JAZN XMLファイルからの言語設定の変更方法

JAZN XMLファイルで、太字で示された部分を変更しユーザーの優先言語を設定します。

<preferredLanguage>en</preferredLanguage>

Oracle BPM Worklistでは、表32-13に示す言語がサポートされています。

表32-13 Oracle BPM Worklistでサポートされている言語

言語

形式

英語

(en)

フランス語

(fr)

ドイツ語

(de)

スペイン語(インターナショナル)

(es)

イタリア語

(it)

ポルトガル語(ブラジル)

(pt-BR)

日本語

(ja)

韓国語

(ko)

中国語(繁体字)

(zh-TW)

中国語(簡体字)

(zh-CN)

アラビア語

(ar)

チェコ語

(cs)

デンマーク語

(da)

オランダ語

(nl)

フィンランド語

(fi)

ギリシャ語

(el)

ヘブライ語

(he)

ハンガリー語

(hu)

ノルウェー語

(no)

ポーランド語

(po)

ポルトガル語

(pt)

ルーマニア語

(ro)

ロシア語

(ru)

スロバキア語

(sk)

スウェーデン語

(sv)

タイ語

(th)

トルコ語

(tr)

フランス語(カナダ)

(fr-CA)

32.12.5 ワークリストでの表示言語の設定の注意事項

Oracle BPM Worklistは、ブラウザまたはアイデンティティ・ストア(LDAP)から言語を設定するよう構成できます。この設定には、アプリケーション・レベルとユーザー・レベルの2つのレベルがあります。ユーザー・プリファレンスが、ユーザー設定のLDAPとして設定されている場合は、ワークリストの表示言語が決定される際にこの設定が優先されます。LDAPで言語を設定しない場合、ワークリストは、サーバー・ロケールとしてデフォルトの言語に従います。ただし、電子メール通知は、常にLDAPで設定された言語に従います。LDAPで言語が設定されていない場合、電子メール通知は、サーバー・ロケールに従います。

32.12.6 ワークリストで使用するタイムゾーンの変更方法

次の説明は、JAZN XMLファイルからユーザーのタイムゾーンを抽出する方法に基づいています。

タイムゾーンを変更する手順は、次のとおりです。

ユーザーの優先タイムゾーンを設定するには、太字部分を変更します。

<timeZone>America/Los_Angeles</timeZone>

タイムゾーン文字列の形式は、大陸/地域です。$JAVA_HOME/jre/lib/ziディレクトリでタイムゾーン値を確認できます。ディレクトリが大陸名(たとえば、Africa、Asia、Americaなど)を示し、ディレクトリ内のファイルが地域を示します。地域によっては、America/Indiana/Indianapolisのようにサブ地域が含まれる場合があります。

32.13 再利用可能なワークリスト・リージョンの作成

ワークリストで使用可能な一部の機能は、アプリケーションに埋め込むことができるスタンドアロン再利用可能コンポーネントとして公開されています。さらに、これらのスタンドアロン・タスク・フローにより、パラメータを使用した多くのカスタマイズ機能が提供されるため、ユーザーは要件にあわせてワークリスト・アプリケーションを作成してカスタマイズできます。すべてのタスク・フローは、埋込みアプリケーションに含めることができるADFライブラリにバンドルされます。

32.13.1 埋込みの再利用可能なワークリスト・リージョンを使用したアプリケーションの作成方法

再利用可能な各ワークリスト・リージョンの使用方法は通常のワークリスト・リージョンと同じですが、いくつかの例外があります。次の手順では、アプリケーションを作成してタスク・リスト・タスク・フローをアプリケーションに埋め込むステップについて詳細に説明します。可能な場合は、他のタイプの再利用可能なワークリスト・リージョンの使用方法についても説明しています。

埋込みの再利用可能なワークリスト・リージョンを使用してアプリケーションを作成する手順は、次のとおりです。

1. Oracle JDeveloperで新規のFusion Webアプリケーションを作成します。この例では、アプリケーションの名前はTaskListTaskFlowSampleです。図32-67に詳細を示します。

図32-67 埋込みの再利用可能なワークリスト・リージョンを使用したアプリケーションの作成

「図32-67 埋込みの再利用可能なワークリスト・リージョンを使用したアプリケーションの作成」の説明

2. ビュー・コントローラの「プロジェクト・プロパティ」を開き、「ライブラリとクラスパス」セクションで「ライブラリの追加」をクリックして、次のライブラリをクラスパスに追加します。

- BPMワークリスト・コンポーネント
タスク・フローJAR adflibTaskListTaskFlow.jarおよびadflibWorklistComponents.jarを追加するために、このライブラリを追加します。これらがプロジェクトのクラス・パスに含まれている必要があります。

- BPMサービス

- WSRPコンテナ

図32-68に詳細を示します。

図32-68 「ライブラリとクラスパス」セクション

「図32-68 「ライブラリとクラスパス」セクション」の説明

3. アプリケーションが非SOAサーバーで実行されている場合は、次の2つのステップを実行する必要があります。

1. oracle.soa.workflow共有ライブラリをインストールします。
サーバーにoracle.soa.workflow.wcがすでにインストールされている場合、oracle.soa.workflowのインストールは不要です。

2. サーバーで外部JNDIを構成します。
タスク・リスト・タスク・フローをフェデレーテッド・モードで実行する場合、このステップは不要です。タスク・フローをフェデレーテッド・モードで使用する方法の詳細は、「federatedMode」セクションを参照してください。

4. ビュー・コントローラ・プロジェクトを選択し、「ファイル」→「新規」→「現在のプロジェクト・テクノロジ」→「Web層」→「JSFページ」の順に選択して、jspxファイル(例: testSample.jspx)を作成します。
「JSFページの作成」ダイアログでは、必ず「XMLドキュメントの作成(*.jspx)」を選択してください。

5. 「コンポーネント・パレット」からadflibTaskListTaskFlow.jarを選択します。すべてのタスク・フローとリージョンのリストが含まれます。図32-69に詳細を示します。

図32-69 コンポーネント・パレット

「図32-69 コンポーネント・パレット」の説明

6. タスク・フロー・リージョンの1つをjspxページにドラッグ・アンド・ドロップし、「作成」メニューから「リージョン」を選択します(例: タスク・リスト・タスク・フローの場合はtaskList-task-flow-definition)。
タスク・フロー定義の詳細は、次の各項を参照してください。

- 第32.13.4項「タスク・リスト・タスク・フローに関する注意事項」

- 第32.13.5項「証明書タスク・フローに関する注意事項」

- 第32.13.6項「レポート・タスク・フローに関する注意事項」

- 第32.13.7項「アプリケーション・プリファレンス・タスク・フローに関する注意事項」

- 第32.13.8項 マップ済属性タスク・フローに関する注意事項

- 第32.13.9項「ルール・タスク・フローに関する注意事項」

- 第32.13.10項「承認グループ・タスク・フローに関する注意事項」

- 第32.13.11項「タスク構成タスク・フローに関する注意事項」

7. flex-fields-task-flow-definition、rules-task-flow-definition、tasklist-reports-task-flow-definitionまたはtaskList-task-flow-definitionを選択した場合は、表示される「タスク・フロー・バインディングの編集」ダイアログでタスク・フロー・パラメータを渡します。

8. 新しいエントリがpagenamePagedef.xmlファイルに追加されます。
たとえば、taskList-task-flow-definitionを追加すると、新しいエントリは次のようになります。

<taskFlow id="taskListtaskflowdefinition1"
taskFlowId="/WEB-INF/taskList-task-flow-definition.xml#taskList-task-
flow-definition"
xmlns="http://xmlns.oracle.com/adf/controller/binding">
<parameters>
<parameter id="federatedMode" value="true"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="showServerColumn" value="true"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
</parameters>
</taskFlow>

9. weblogic-application.xmlファイルの共有ライブラリを追加します。oracle.soa.workflow.wcをサーバーにインストールしている場合は、そのライブラリを追加します。

<library-ref>
<library-name>oracle.soa.workflow</library-name>
</library-ref>

10. アプリケーションをデプロイする前に、第32.13.2項「デプロイメント・プロファイルの設定方法」を参照してください。

32.13.2 デプロイメント・プロファイルの設定方法

アプリケーションをデプロイする前に、デプロイメント・プロファイルを編集する必要があります。

デプロイメント・プロファイルを編集する手順は、次のとおりです。

1. View Controllerプロジェクトを選択し、「ファイル」→「新規作成」→「一般」→「デプロイメント・プロファイル」を選択します。「WARファイル」を選択し、「OK」をクリックします。

2. 「WEB-INF/lib」→「フィルタ」の順に選択し、adflibTaskListTaskFlow.jar、adflibWorklistComponents.jarおよびwsrp-container.jarを選択します。

32.13.3 フェデレーテッド・モードのタスク・フローのデプロイメント準備

タスク・フローをフェデレーテッド・モードで使用する場合は、フェデレーテッド・サーバーのリストをタスク・フローに渡す必要があります。詳細は、「federatedMode」を参照してください。

タスク・フローをフェデレーテッド・モードで使用する場合は、フェデレーテッド・サーバー間でグローバル・トラストを有効にします。これにより、すでに認証されたユーザー・トークンが、タスク・フローに渡されたすべてのフェデレーテッド・サーバーに渡されます。

すべてのフェデレーテッド・サーバーで次の手順を実行して、すべてのサーバーを再起動します。すべてのサーバーを再起動することが非常に重要です。

サーバーを再起動する手順は、次のとおりです。

1. Oracle WebLogic Serverコンソールにログインします。

2. 「ドメイン構造」からドメイン名soainfraを選択します。SOAサーバーを使用していない場合は、ドメイン名が異なる場合があります。

3. 「セキュリティ」タブを選択します。

4. 「詳細」リンク(下部の「保存」ボタンの近くにあります)を選択します。

5. 「資格証明」フィールドにパスワードを入力します(すべてのフェデレーテッド・サーバーで同じパスワードを使用する必要があります)。

6. 「保存」をクリックします。

7. サーバーを再起動します。

32.13.4 タスク・リスト・タスク・フローに関する注意事項

タスク・リスト・タスク・フローでは、埋込みリージョンの表示動作を制御するためのパラメータを指定します。図32-70に詳細を示します。

図32-70 タスク・リスト

「図32-70 タスク・リスト」の説明

次に、パラメータの一部を示します。すべてのパラメータのリストは、第36.4項「ワークリスト・ポートレット・パラメータの受け渡し」を参照してください。

- federatedMode

- federatedServers

- showServerColumn

- wfCtxID

federatedMode

trueとして渡された場合、タスク・リストはフェデレーテッド・モードで表示されます。タスク・フローをフェデレーテッド・モードで実行するには、フェデレーテッド・サーバーのリストをタスク・フローに渡す必要があります。次のいずれかの方法で、フェデレーテッド・サーバーのリストをタスク・フローに渡すことができます。

- クライアント構成ファイルwf_client_config.xmlをクラス・パス(EARレベルのAPP-INF\classes\wf_client_config.xmlまたはWebアプリケーションのWEB-INF\classes)に含めます。クライアント構成ファイルには、すべてのフェデレーテッド・サーバーの詳細が含まれています。このパラメータの詳細は、第36.4項「ワークリスト・ポートレット・パラメータの受け渡し」を参照してください。

- フェデレーテッド・サーバー・リストを格納したJAXBオブジェクトを作成します。このJAXBオブジェクトは、federatedServersパラメータを使用してタスク・フローに渡すことができます。JAXBオブジェクトの作成方法については、「federatedServers」を参照してください。

クライアント構成ファイル(wf_client_config.xml)とJAXBオブジェクトの両方がタスク・フローに渡された場合は、JAXBオブジェクトが優先されます。

federatedServers

タスク・フローがフェデレーテッド・モードで実行される場合、このパラメータは、サーバーのリストが含まれるJAXBオブジェクトです。クライアント構成ファイル(wf_client_config.xml)も渡された場合は、このパラメータが優先されます。JAXBオブジェクト(WorkflowServicesClientConfigurationType)の作成方法の詳細は、例32-1のコード例を参照してください。

例32-1に示すように、サーバーの1つをdefaultとして設定する必要があります。デフォルトとして指定する必要があるのは1つのサーバーのみです。また、デフォルトとして指定したサーバーが、フェデレーテッド・サーバーのリストから除外されていることを確認してください。次の例では、これに関連するコードが太字で表示されています。

デフォルト・サーバーが使用されるのは、wf_client_config.xmlまたはJAXBオブジェクトに複数のサーバーが定義されているが、ワークフロー・クライアントで1つのサーバーのみ必要な場合です。サーバー名をパラメータとして使用しないレガシーのAPIがいくつかあります。このようなレガシーのAPIをサポートするには、1つのサーバーをデフォルト・サーバーとして定義する必要があります。そうしないと、サーバー名を使用しないレガシーのAPIは機能しません。

例32-1 federatedServers

import oracle.bpel.services.workflow.client.config.IdentityPropagationType;
import oracle.bpel.services.workflow.client.config.PolicyReferenceType;
import oracle.bpel.services.workflow.client.config.PolicyReferencesType;
import oracle.bpel.services.workflow.client.config.RemoteClientType;
import oracle.bpel.services.workflow.client.config.ServerType;
import oracle.bpel.services.workflow.client.config.SoapClientType;
import oracle.bpel.services.workflow.client.config.WorkflowServicesClientConfigurationType;

WorkflowServicesClientConfigurationType wscct =
new WorkflowServicesClientConfigurationType();

List<ServerType> servers = wscct.getServer();

/**** Setting default server in the list ****/

ServerType defalutServer = new ServerType();
servers.add(defalutServer);

defalutServer.setDefault(true);
defalutServer.setExcludeFromFederatedList(true);
defalutServer.setName("default");

RemoteClientType rct = new RemoteClientType();
rct.setServerURL("t3://myhost.us.example.com:7001");
rct.setInitialContextFactory("weblogic.jndi.WLInitialContextFactory");
rct.setParticipateInClientTransaction(false);
defalutServer.setRemoteClient(rct);

SoapClientType sct = new SoapClientType();
PolicyReferencesType prts = new PolicyReferencesType();

PolicyReferenceType prt = new PolicyReferenceType();
prt.setEnabled(true);
prt.setCategory("security");
prt.setUri("oracle/wss10_saml_token_client_policy");
prts.getPolicyReference().add(prt);

IdentityPropagationType ipt = new IdentityPropagationType();
ipt.setMode("dynamic");
ipt.setType("saml");
ipt.setPolicyReferences(prts);

sct.setRootEndPointURL("http://myhost.us.example.com:7001");
sct.setIdentityPropagation(ipt);

defalutServer.setSoapClient(sct);

/****** Setting Federated Server 1 to the list ****/

ServerType server1 = new ServerType();
servers.add(server1);
server1.setName("Human Resource");

RemoteClientType rct1 = new RemoteClientType();
rct1.setServerURL("t3://myhost.us.example.com:7001");
rct1.setInitialContextFactory("weblogic.jndi.WLInitialContextFactory");
rct1.setParticipateInClientTransaction(false);
server1.setRemoteClient(rct1);

SoapClientType sct1 = new SoapClientType();
PolicyReferencesType prts1 = new PolicyReferencesType();

PolicyReferenceType prt1 = new PolicyReferenceType();
prt1.setEnabled(true);
prt1.setCategory("security");
prt1.setUri("oracle/wss10_saml_token_client_policy");
prts1.getPolicyReference().add(prt1);
IdentityPropagationType ipt1 = new IdentityPropagationType();
ipt1.setMode("dynamic");
ipt1.setType("saml");
ipt1.setPolicyReferences(prts1);

sct1.setRootEndPointURL("http://myhost.us.example.com:7001");
sct1.setIdentityPropagation(ipt1);

server1.setSoapClient(sct1);

/****** Setting Federated Server 2 to the list ****/

ServerType server2 = new ServerType();
servers.add(server2);
server2.setName("Financials");

RemoteClientType rct2 = new RemoteClientType();
rct2.setServerURL("t3://myhost.us.example.com:7001");
rct2.setInitialContextFactory("weblogic.jndi.WLInitialContextFactory");
rct2.setParticipateInClientTransaction(false);
server2.setRemoteClient(rct2);

SoapClientType sct2 = new SoapClientType();
PolicyReferencesType prts2 = new PolicyReferencesType();

PolicyReferenceType prt2 = new PolicyReferenceType();
prt2.setEnabled(true);
prt2.setCategory("security");
prt2.setUri("oracle/wss10_saml_token_client_policy");
prts2.getPolicyReference().add(prt2);

IdentityPropagationType ipt2 = new IdentityPropagationType();
ipt2.setMode("dynamic");
ipt2.setType("saml");
ipt2.setPolicyReferences(prts2);

sct2.setRootEndPointURL("http://myhost.us.example.com:7001");
sct2.setIdentityPropagation(ipt2);

server2.setSoapClient(sct2);

showServerColumn

タスク・フローがフェデレーテッド・モードで実行される場合、デフォルトではタスク・リストのサーバー列は表示されません。サーバー列を表示する場合は、このパラメータをtrueで渡します。それ以外の場合、サーバー列は表示されません。

wfCtxID

これはワークフロー・コンテキストのトークン文字列です。ワークフロー・コンテキストをタスク・フロー内部に作成する場合に使用します。アプリケーションがSSO対応の場合、またはアプリケーションがADFセキュリティを使用して保護されている場合、このパラメータは必要ありません。それ以外の場合、これは必須パラメータです。例32-2に、ワークフロー・コンテキストIDを取得する方法を示します。

例32-2 wfCtxID

IWorkflowContext wfCtx =  wfSvcClient.getTaskQueryService().authenticate(username,
password,
realm,
null);
wfCtxID = wfCtx.getToken();

32.13.5 証明書タスク・フローに関する注意事項

次の図に示すように、ユーザーは意思決定の署名に使用する証明書をアップロードできます。証明書を使用してタスクの結果に署名する際は、証明書発行者から発行された1つの証明書のみではなく、証明書チェーン全体をOracle BPM Worklistから.P7B(PKCS7形式)ファイルとしてアップロードする必要があります。

デジタル証明書には、証明書発行者のデジタル署名が記載されているため、誰でも証明書が本物であることを確認できます。参加者の資格証明は、デジタル証明書によって証明されます。これは認証局(CA)が発行します。ユーザー名、シリアル番号、有効期限、証明書所有者の公開鍵のコピー(メッセージとデジタル署名の暗号化に使用)、および証明書発行者のデジタル署名が記載されているため、受信者は証明書が本物であることを確認できます。

証明書タスク・フローにパラメータはありません。図32-71に詳細を示します。

図32-71 デジタル証明書

「図32-71 デジタル証明書」の説明

32.13.6 レポート・タスク・フローに関する注意事項

図32-72に、不参加タスク・レポートを示します。

図32-72 不参加タスク・レポート

「図32-72 不参加タスク・レポート」の説明

次に、タスク分析に使用できるワークリスト・レポートを示します。

不参加タスク

不参加タスク・レポートでは、ユーザーのグループまたは報告先のグループに割り当てられたタスクの中で、まだ獲得されていないタスク(不参加タスク)が分析されます。

- 割当て先 - (必須)このオプションでは、ユーザーのグループに割り当てられたタスク(グループ)、報告先のグループに割り当てられたタスク(「報告先」)、ユーザーが作成者であるタスク(「作成者」)、またはユーザーが所有者であるタスク(「所有者」)を選択します。

- 作成日 - (オプション)日付範囲。

- 有効期限 - (オプション)日付範囲。

- タスクの状態 - (オプション)状態は、「任意」、「割当て済」、「期限切れ」または「情報のリクエスト中」のいずれかです。

- 優先度 - (オプション)優先度は、「任意」、「最高」、「高」、「標準」、「低」または「最低」のいずれかです。

タスクの優先度

タスクの優先度レポートでは、ユーザー、報告先またはそのグループに割り当てられたタスクの数が優先度別に分析されます。

- 割当て先 - (必須)このオプションには、選択した割当て先に応じて、ログイン・ユーザーに割り当てられたタスク(「個人」)、ユーザーとそのユーザーが所属するグループに割り当てられたタスク(「個人とグループ」)、または、ユーザーの報告先が所属するグループに割り当てられたタスク(「報告先」)が含まれます。

- 作成日 - (オプション)日付範囲。

- 終了日 - (オプション)レポートに含まれるタスクの終了日の日付範囲。

- 優先度 - (オプション)優先度は、「任意」、「最高」、「高」、「標準」、「低」または「最低」のいずれかです。

タスクのサイクル・タイム

タスクのサイクル・タイム・レポートでは、ユーザーのグループまたは報告先のグループに基づいて、タスクの割当てから完了までの所要時間が分析されます。

- 割当て先 - (必須)このオプションには、選択した割当て先に応じて、自分のタスク(「個人」)、またはユーザーの報告先が所属するグループに割り当てられたタスク(「報告先」)が含まれます。

- 作成日 - (オプション)日付範囲。

- 終了日 - (オプション)レポートに含まれるタスクの終了日の日付範囲。

- 優先度 - (オプション)優先度は、「任意」、「最高」、「高」、「標準」、「低」または「最低」のいずれかです。

タスクの生産性

タスクの生産性レポートでは、ユーザー、報告先またはグループについて、特定期間中に割り当てられたタスク数と完了したタスク数が分析されます。

- 割当て先 - (必須)このオプションには、選択した割当て先に応じて、ユーザーのタスク(「個人とグループ」)、またはユーザーの報告先が所属するグループに割り当てられたタスク(「報告先」)が含まれます。

- 作成日(範囲) - (オプション)作成日の日付範囲。デフォルト値は1週間です。

- タスク・タイプ - 「検索」(懐中電灯)アイコンを使用して、タスクのタイトルのリストから選択します。「ワークフロー・タスク・タイプの選択」ページに、タスクのすべてのバージョンがリストされます(オプション)。

タスク時間分布

タスク時間分布レポートには、割当て先がタスクを実行するのに要した時間が表示されます。

- 割当て先 - (必須)このオプションには、選択した割当て先に応じて、ユーザーのタスク(「個人とグループ」)、またはユーザーの報告先が所属するグループに割り当てられたタスク(「報告先」)が含まれます。

- 開始...終了(日付範囲) - (オプション)作成日の日付範囲。デフォルト値は1週間です。

- タスク・タイプ - 「検索」(懐中電灯)アイコンを使用して、タスクのタイトルのリストから選択します。「ワークフロー・タスク・タイプの選択」ページに、タスクのすべてのバージョンがリストされます(オプション)。

32.13.7 アプリケーション・プリファレンス・タスク・フローに関する注意事項

ワークリストの外観は、アプリケーション・プリファレンスを使用してカスタマイズします。管理者は次の値を指定できます。

- ログイン・ページ・レルムのラベル: アイデンティティ・サービスが複数のレルムで構成されている場合は、Oracle BPM Worklistのログイン・ページにレルム名のリストが表示されます。LABEL_LOGIN_REALMは、これらのレルムを表示するラベルのルックアップに使用するリソース・バンドル・キーを指定します。realm(レルム)という語は、ユーザー・コミュニティにあわせて変更できます。たとえば、country(国)、company(会社)、division(部)、department(部門)などの方が適切な場合があります。管理者は、リソース・バンドルをカスタマイズし、この文字列にリソース・キーを指定して、このパラメータがリソース・キーを指し示すように設定できます。

- グローバル・ブランド・アイコン: これは、ワークリストの各ページの左上隅に表示されるイメージです。(Oracleロゴがデフォルトです。)管理者は、ロゴに使用する.gif、.pngまたは.jpgファイルを提供できます。このファイルはpublic_htmlディレクトリに置く必要があります。

- リソース・バンドル: アプリケーション・リソース・バンドルは、ワークリストに表示される文字列を指定します。デフォルトでは、これはoracle.bpel.worklistapp.resource.WorklistResourceBundleのクラスです。図32-73に詳細を示します。

図32-73 アプリケーション・プリファレンス

「図32-73 アプリケーション・プリファレンス」の説明

32.13.8 マップ済属性タスク・フローに関する注意事項

ヒューマン・ワークフローのマップ済属性での格納と問合せでは、状況固有のカスタム属性が使用されます。これらのカスタム属性は、通常、タスク・ペイロード値に基づきます。マップ済属性にカスタム属性を格納すると、次の利点が得られます。

- フレックス・フィールドをタスク・リストの列として表示できます。

- フレックス・フィールドでは、カスタム・ビューおよび拡張検索でタスクをフィルタ処理できます。

- フレックス・フィールドは、キーワードベースの検索で使用できます。

たとえば、タスクの注文書リクエスト・ペイロードのRequester、PurchaseOrderIDおよびAmountフィールドをマップ済属性に格納できます。Oracle BPM Worklistにログインした承認者は、これらのフィールドの値をタスク・リスト内の列で確認して、アクセスするタスクを決定できます。ユーザーは、マップ済属性に基づいてタスクをフィルタ処理するビューを定義できます。

たとえば、ユーザーは、異なる金額範囲に基づいて発注書の承認用ビューを作成できます。ユーザーがある時点で特定のリクエスタまたは発注書IDに関連するタスクを取得することも必要になった場合、キーワード・フィールドにそのリクエスタまたは発注書IDを指定して検索を実行することによって、関連するタスクを取得できます。図32-74に詳細を示します。

図32-74 マップ済属性マッピング

「図32-74 マップ済属性マッピング」の説明

32.13.9 ルール・タスク・フローに関する注意事項

ルールを使用してタスクを操作します。タスクは、特定のタスク・タイプ、またはユーザーやグループに割り当てられた全タスクのいずれかです。次の図に、休暇ルールも含めて、ルールを設定する場所を示します。

ルールは、そのルールが使用されるすべての環境で常に適用できるわけではありません。たとえば、ルールが複数のタスク・タイプに適用される場合は、タスクによって結果が異なるため、すべてのタスクに結果を設定できない場合があります。

ルールはリストされている順序で実行されます。ルールはヘッダーの上下ボタンを使用して順序を変更できます。ルールはフィルタ条件を満たしている場合に実行され、他のルールは評価されません。ルールを実行するユーザーは、該当するタスクに割り当てられている唯一のユーザーであることが必要です。タスクが(自分を含めて)複数のユーザーに割り当てられている場合、ルールは実行されません。

showOtherUsersRulesパラメータはブール値を取ります。このパラメータがTrueとして渡されると他のユーザーのルールが表示され、Falseとして渡されると他のユーザーのルールは表示されません。さらに、ユーザーが他のユーザーのルールを表示するには、必要な権限が付与されている必要があります。図32-75および図32-76に詳細を示します。

図32-75 休暇期間

「図32-75 休暇期間」の説明

図32-76 ルール

「図32-76 ルール」の説明

32.13.10 承認グループ・タスク・フローに関する注意事項

承認グループは、静的に定義されたか、または動的に生成された承認者のリストです。承認グループは、通常、ワークリスト・アプリケーションを使用して、プロセス所有者によって構成されます。一般に、これらは、管理承認の前後にタスクを処理する必要がある、人事や弁護士などのトランザクションの権限の管理チェーンの外側の主題専門家をモデリングするのに使用されます。

静的な承認グループは事前定義済の承認者リストで、動的な承認グループはランタイムに承認者リストを生成します。動的な承認グループでは、次を実行する必要があります。

- 開発者による動的承認者リストのインタフェースに応じた実装の提供

- IT部門によるOracle BPM WorklistのUIを使用した動的な承認グループとしての前述の実装の登録

- SOAクラス・パスの一部であり世界的に有名なディレクトリでの、クラス・ファイルの公開

32.13.11 タスク構成タスク・フローに関する注意事項

タスク構成は、ワークリスト・アプリケーション内のWebベースアプリケーションで、ワークフロー設計者が事前に定義したルールをビジネス・ユーザーおよび管理者が確認および変更することが可能です。この事前定義済ルールは、特定の顧客向けに、適用可能な顧客企業ポリシーに基づいて変更できます。

たとえば、会社のポリシーで、1000を超える経費には2レベルの承認が必要であるとします。さらに、このポリシーが変更され、3レベルを必要とするようになったとします。IT部門が基礎となるプロセスでルールを変更し、再度デプロイするかわりに、タスク構成を使用してルールを変更できます。ルールの変更は次のインスタンスから適用され、すでに進行中のインスタンスでは現在のルール定義が使用されます。

タスク構成を使用すると、承認フローに関連付けられているイベント駆動ルールとデータ駆動ルールを、ワークフローのデプロイ後である実行時に編集できます。

32.14 ワークリスト・アプリケーションでカスタマイズされたアプリケーションを有効化するJavaコード

第32.8.8項「カスタマイズされたアプリケーションおよびリンクを有効にする方法」では、ワークリスト・アプリケーションの「アプリケーション・プリファレンス」ページを使用してカスタム・アプリケーションを指定する方法について説明しています。この指定を実行するJavaコードは、次のとおりです。

package view.customisationimpl;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import oracle.bpel.services.workflow.client.IWorkflowServiceClient;

import oracle.bpel.services.workflow.runtimeconfig.IRuntimeConfigService;

import oracle.bpel.services.workflow.runtimeconfig.model.AttributeLabelType;

import oracle.bpel.services.workflow.runtimeconfig.model.AttributeLabelUsageList;

import oracle.bpel.services.workflow.runtimeconfig.model.AttributeLabelUsages;

import oracle.bpel.services.workflow.verification.IWorkflowContext;

import oracle.bpm.ui.customization.CustomLink;

import oracle.bpm.ui.customization.IBPMUICustomizations;

public class WorkspaceCustomisationImpl implements IBPMUICustomizations {

private static Map displayNameMap = new HashMap();

public WorkspaceCustomisationImpl() {

displayNameMap.put("instanceId", "Instance Id");

displayNameMap.put("protectedTextAttribute1", "Business Status");

}

public List<CustomLink> getCustomGlobalLinks() {

CustomLink globalLink1 =

new CustomLink("Oracle Home Page", "www.oracle.com", null);

CustomLink globalLink2 =

new CustomLink("Self Services Application", "http://global-ebusiness.example.com/",

null);

CustomLink globalLink3 =

new CustomLink("BUG DB", "https://bug.example.com/", null);

List<CustomLink> globalLinks = new ArrayList<CustomLink>();

globalLinks.add(globalLink1);

globalLinks.add(globalLink2);

globalLinks.add(globalLink3);

return globalLinks;

}

public String getColumnNames() {

return "title,taskNumber,instanceId,creator,protectedTextAttribute1";

}

private static void initDisplayMap(IWorkflowServiceClient client,

IWorkflowContext context) {

// u can use service to load all label name for text attributes

if (displayNameMap == null) {

synchronized (String.class) {

if (displayNameMap == null) {

displayNameMap = new HashMap();

try {

IRuntimeConfigService service =

client.getRuntimeConfigService();

AttributeLabelUsageList list =

service.getAttributeLabelUsages(context, "Text");

List<AttributeLabelUsages> list1 =

list.getAttributeLabelUsages();

for (AttributeLabelUsages usage : list1) {

AttributeLabelType type = usage.getLabel();

displayNameMap.put(type.getTaskAttribute(),

type.getLabelName());

}

} catch (Exception exc) {

}

}

}

}

}

public String getColumnDisplayName(IWorkflowServiceClient client,

IWorkflowContext context,

java.lang.String colName) {

initDisplayMap(client, context);

return (String)displayNameMap.get(colName);

}

}

33 カスタム・ワークリスト・クライアントの作成

この章では、サンプルのワークリスト・アプリケーションをはじめとして、開発者がワークフロー・サービスにより公開されたAPIを使用してワークフロー・サービスのクライアントを作成する方法について説明します。このAPIにより、クライアントは、リモートのEJB、SOAPおよびHTTPを使用してワークフロー・サービスと通信できるようになります。

この章には次の項が含まれます:

- 第33.1項「ワークフロー・サービスのクライアント作成に関する概要」

- 第33.2項「クライアント作成に使用するパッケージとクラス」

- 第33.3項「ワークフロー・サービス・クライアント」

- 第33.4項「SOAPを使用するクライアント用のクラスパス」

- 第33.5項「リモートEJBを使用するクライアント用のクラスパス」

- 第33.6項「タスクの開始」

- 第33.7項「ワークフロー標準ビュー定義の変更」

- 第33.8項「HelpDeskUIサンプルを使用したワークリスト・アプリケーションの記述」

33.1 ワークフロー・サービスのクライアント作成に関する概要

次に、簡単なワークリスト・アプリケーションを作成する際の典型的なコール順序を示します。

簡単なワークリスト・アプリケーションを作成する手順は、次のとおりです。

1. IWorklistServiceClientへのハンドルをWorkflowServiceClientFactoryから取得します。

2. ITaskQueryServiceへのハンドルをIWorklistServiceClientから取得します。

3. ユーザー名とパスワードをITaskQueryServiceの認証メソッドに渡して、ユーザーを認証します。IWorkflowContextへのハンドルを取得します。

4. ITaskQueryServiceを使用してタスク・リストを問い合せます。

5. ITaskServiceへのハンドルをIWorklistServiceClientから取得します。

6. 返されたタスク・リストを反復し、ITaskServiceを使用してタスクに対するアクションを実行します。

例33-1は、ワークフロー・サービスのクライアントの作成方法を示しています。jsteinに割り当てられている全タスクのリストに対して問合せが実行されます。結果が設定されていないタスクが承認されます。

例33-1 ワークフロー・サービスのクライアントの作成: 結果を承認済に設定

try
{
//Create JAVA WorflowServiceClient
IWorkflowServiceClient  wfSvcClient = WorkflowServiceClientFactory.getWorkflowServiceClient(
WorkflowServiceClientFactory.REMOTE_CLIENT);
//Get the task query service
ITaskQueryService querySvc = wfSvcClient.getTaskQueryService();

//Login as jstein
IWorkflowContext ctx = querySvc.authenticate("jstein","welcome1".toCharArry(),null);
//Set up list of columns to query
List queryColumns = new ArrayList();
queryColumns.add("TASKID");
queryColumns.add("TASKNUMBER");
queryColumns.add("TITLE");
queryColumns.add("OUTCOME");

//Query a list of tasks assigned to jstein
List tasks = querySvc.queryTasks(ctx,
queryColumns,
null, //Do not query additional info
ITaskQueryService.AssignmentFilter.MY,
null, //No keywords
null, //No custom predicate
null, //No special ordering
0,    //Do not page the query result
0);
//Get the task service
ITaskService taskSvc = wfSvcClient.getTaskService();
//Loop over the tasks, outputting task information, and approving any
//tasks whose outcome has not been set...
for(int i = 0 ; i < tasks.size() ; i ++)
{
Task task = (Task)tasks.get(i);
int taskNumber = task.getSystemAttributes().getTaskNumber();
String title = task.getTitle();
String taskId = task.getSystemAttributes().getTaskId();
String outcome = task.getSystemAttributes().getOutcome();
if(outcome == null)
{
outcome = "APPROVE";
taskSvc.updateTaskOutcome(ctx,taskId,outcome);
}
System.out.println("Task #"+taskNumber+" ("+title+") is "+outcome);
}

}
catch (Exception e)
{
//Handle any exceptions raised here...
System.out.println("Caught workflow exception: "+e.getMessage());
}

33.2 クライアント作成に使用するパッケージとクラス

クライアントの作成には、次のパッケージとクラスを使用します。

- oracle.bpel.services.workflow.metadata.config.model
このパッケージ内の各クラスには、タスク定義ファイル内のワークフロー構成用のオブジェクト・モデルが含まれています。オブジェクトの作成には、ObjectFactoryクラスを使用できます。

- oracle.bpel.services.workflow.metadata.routingslip.model
このパッケージ内の各クラスには、ルーティング・スリップ用のオブジェクト・モデルが含まれています。オブジェクトの作成には、ObjectFactoryクラスを使用できます。

- oracle.bpel.services.workflow.metadata.taskdisplay.model
このパッケージ内の各クラスには、タスク表示用のオブジェクト・モデルが含まれています。オブジェクトの作成には、ObjectFactoryクラスを使用できます。

- oracle.bpel.services.workflow.metadata.taskdefinition.model
このパッケージ内の各クラスには、タスク定義ファイル用のオブジェクト・モデルが含まれています。オブジェクトの作成には、ObjectFactoryクラスを使用できます。

- oracle.bpel.services.workflow.client.IWorkflowServiceClient
ワークフロー・サービス・クライアントのインタフェースです。

- oracle.bpel.services.workflow.client.WorkflowServiceClientFactory
ワークフロー・サービス・クライアントを作成するためのファクトリです。

- oracle.bpel.services.workflow.metadata.ITaskMetadataService
タスク・メタデータ・サービスのインタフェースです。

- oracle.bpel.services.workflow.task.ITaskService
タスク・サービスのインタフェースです。

- oracle.bpel.services.workflow.task.IRoutingSlipCallback
タスク処理中にコールバックを受信するコールバック・クラスのインタフェースです。

- oracle.bpel.services.workflow.task.IAssignmentService
割当てサービスのインタフェースです。

33.3 ワークフロー・サービス・クライアント

ワークリスト・アプリケーションは、ワークフロー・サービス・クライアントを介して様々なワークフロー・サービスにアクセスします。ワークフロー・サービス・クライアントのコードは、様々なローカル・プロトコルとリモート・プロトコルを使用したワークフロー・サービスとの通信に必要なロジックをすべてカプセル化します。ワークリスト・アプリケーションにワークフロー・サービス・クライアントのインスタンスがある場合は、クライアントとワークフロー・サービスとの通信方法を考慮する必要はありません。

クライアントを使用するメリットは、次のとおりです。

- SOAP/HTTPやEnterprise JavaBeansなどの基礎となる接続メカニズムの複雑さが軽減されます。

- 使用する起動メカニズムの変更(SOAP/HTTPからリモートEnterprise JavaBeansへの変更など)が容易になります。

IWorkflowServiceClientインタフェースのインスタンス作成には、次のクラスが使用されます。

oracle.bpel.services.workflow.client.WorkflowServiceClientFactory

WorkflowServiceClientFactoryには、ワークフロー・クライアントを作成する複数のメソッドがあります。getWorkflowServiceClientは最も単純なメソッドで、パラメータとしてクライアント・タイプのみをとります。クライアント・タイプは次のいずれかです。

- WorkflowServiceClientFactory.REMOTE_CLIENT: クライアントはリモートEnterprise JavaBeansインタフェースを使用してリモートのワークフロー・サービスを起動します。

- WorkflowServiceClientFactory.SOAP_CLIENT: クライアントはSOAPを使用して、リモートのワークフロー・サービスへのWebサービス・インタフェースを起動します。

他のファクトリ・メソッドを使用すると、接続プロパティを直接指定し(ファクトリで接続プロパティをwf_client_config.xml fileからロードする必要はありません)、クライアント・アクティビティを記録するロガーを指定できます。

このリリースには、ワークフロー・サービス・クライアントの次の拡張機能が含まれています。

- 例33-2および例33-3に示すように、ワークフロー・クライアント構成は、JAXBオブジェクトまたはマップのいずれかを使用して指定できます。

例33-2 JAXBオブジェクトを使用したワークフロー・クライアント構成

WorkflowServicesClientConfigurationType wscct = new  WorkflowServicesClientConfigurationType();
List<ServerType> servers = wscct.getServer();
ServerType server = new ServerType();
server.setDefault(true);
server.setName(serverName);
servers.add(server);

RemoteClientType rct = new RemoteClientType();
rct.setServerURL("t3://stapj73:7001");
rct.setUserName("weblogic");
rct.setPassword("weblogic"));
rct.setInitialContextFactory("weblogic.jndi.WLInitialContextFactory");
rct.setParticipateInClientTransaction(false);
server.setRemoteClient(rct);
IWorkflowServiceClient wfSvcClient = WorkflowServiceClientFactory.getWorkflowServiceClient(
WorkflowServiceClientFactory.REMOTE_CLIENT, wscct, logger);

例33-3 マップを使用したワークフロー・クライアント構成

Map<IWorkflowServiceClientConstants.CONNECTION_PROPERTY,java.lang.String> properties = new
HashMap<IWorkflowServiceClientConstants.CONNECTION_PROPERTY,java.lang.String>();

properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.MODE,
IWorkflowServiceClientConstants.MODE_DYNAMIC);

properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.SOAP_END_POINT_ROOT,
"http://localhost:8888");

IWorkflowServiceClient client =
WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory.SOAP_CLIENT,
properties, null);

- クライアントでは、クライアントがメッセージを記録するjava.util.logging.Loggerを必要に応じて渡すことができます。ロガーが指定されていない場合、ワークフロー・サービスのクライアント・コードは何も記録しません。例33-4は、ロガーをワークフロー・サービス・クライアントに渡す方法を示しています。

例33-4 ワークフロー・サービス・クライアントへのロガーの受け渡し

java.util.logging.Logger logger = ....;

IWorkflowServiceClient client =
WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory.REMOTE_CLIENT,
properties, logger);

すべてのワークフロー・サービスのクライアント・ライブラリは、ファクトリを介して取得できます。各サービスに使用可能なクライアントについては、表34-1「Enterprise JavaBeans、SOAPおよびJavaサポート」を参照してください。

BPMIdentityServiceおよびBPMIdentityConfigServiceのインスタンスは、WorkflowServiceClientFactoryでgetSOAPIdentityServiceClientメソッドおよびgetSOAPIdentityConfigServiceClientメソッドをコールして取得できます。その他のすべてのサービスは、IWorkflowServiceClientのインスタンスを介して取得できます。

クライアント・クラスは、サービスのエンドポイントにwf_client_config.xml構成ファイルを使用します。クライアントのクラスパスでは、このファイルはクラスパス直下にあります。つまり、このファイルが格納されているディレクトリはクラスパス内にあります。wf_client_config.xmlファイルには、次の内容が含まれています。

- 例33-5に示すリモート・クライアント用のセクション

例33-5 リモート・クライアント用のセクション

<remoteClient>
<serverURL>t3://hostname.domain_name:7001</serverURL>
<userName>weblogic</userName>
<password>weblogic</password>
<initialContextFactory>weblogic.jndi.WLInitialContextFactory
</initialContextFactory>
<participateInClientTransaction>false</participateInClientTransaction>
</remoteClient>

- 例33-6に示す各サービスのSOAPエンドポイント用のセクション

例33-6 SOAPエンドポイント用のセクション

<soapClient>
<rootEndPointURL>http://hostname.domain_name:7001</rootEndPointURL>
<identityPropagation mode="dynamic" type="saml">
<policy-references>
<policy-reference enabled="true" category="security"
uri="oracle/wss10_saml_token_client_policy"/>
</policy-references>
</identityPropagation>
</soapClient>

ワークフロー・クライアント構成のXMLスキーマ定義は、wf_client_config.xsdファイルに格納されています。

33.3.1 IWorkflowServiceClientインタフェース

IWorkflowServiceClientインタフェースは、各種ワークフロー・サービス・インタフェースへのハンドルを取得できるように、表33-1に示すメソッドを提供します。

表33-1 IWorkflowServiceClientのメソッド

メソッド

インタフェース

getTaskService

oracle.bpel.services.workflow.task.ITaskService

getTaskQueryService

oracle.bpel.services.workflow.query.ITaskQueryService

getTaskReportService

oracle.bpel.services.workflow.report.ITaskReportService

getTaskMetadataService

oracle.bpel.services.workflow.metadata.ITaskMetadataService

getUserMetadataService

oracle.bpel.services.workflow.user.IUserMetadataService

getRuntimeConfigService

oracle.bpel.services.workflow.runtimeconfig.IRuntimeConfigService

getTaskEvidenceService

oracle.bpel.services.workflow.metadata.ITaskMetadataService

33.4 SOAPを使用するクライアント用のクラスパス

SOAPクライアントのクラスパスには、次のJARファイルが必要です。

- ${bea.home}/wlserver_10.3/server/lib/wlfullclient.jar

- ${bea.home}/AS11gR1SOA/webservices/wsclient_extended.jar

- ${bea.home}/AS11gR1SOA/soa/modules/oracle.soa.fabric_11.1.1/bpm-infra.jar

- ${bea.home}/AS11gR1SOA/soa/modules/oracle.soa.workflow_11.1.1/bpm-services.jar

- ${bea.home}/AS11gR1SOA/soa/modules/oracle.soa.fabric_11.1.1/fabric-runtime.jar

wlfullclient.jarファイルは、例33-7に示すコマンドを使用して生成できます。

例33-7 wlfullclient.jarファイルの生成

cd ${bea.home}/wlserver_10.3/server/lib
java -jar ../../../modules/com.bea.core.jarbuilder_1.3.0.0.jar

注意:

クライアント・アプリケーションは、クラスパス内のsystem\services\configまたはsystem\services\schemaディレクトリを使用しません。

33.5 リモートEJBを使用するクライアント用のクラスパス

リモートEJBを使用するクライアントのクラスパスには、次のJARファイルが必要です。

- wlfullclient.jar

- wsclient_extended.jar

- wlclient.jar

- xmlparserv2.jar

- xml.jar

- bpm-infra.jar

- bpm-services.jar

- fabric-runtime.jar

注意:

クライアント・アプリケーションは、クラスパス内のsystem\services\configまたはsystem\services\schemaディレクトリを使用しません。

33.6 タスクの開始

タスクはプログラムによって開始できます。その場合は、次のタスク属性を設定する必要があります。

- taskDefinitionId

- title

- payload

- priority

次のタスク属性はオプションですが、通常はクライアントによって設定されます。

- creator

- ownerUser: 空の場合はbpeladminにデフォルト設定されます。

- processInfo

- identificationKey: タスクは、TaskQueryServiceからの識別キーに基づいて問い合せることができます。

33.6.1 タスクの作成

タスクのオブジェクト・モデルは、次のパッケージで使用できます。

oracle.bpel.services.workflow.task.model

このモデル内でオブジェクトを作成するには、ObjectFactoryクラスを使用します。

33.6.2 タスクのペイロード要素の作成

タスク・ペイロードには、複数のペイロード・メッセージ属性を含めることができます。ペイロードはタスクが定義されるまで詳細に定義されないため、タスクのJavaオブジェクト・モデルには、クライアント・ペイロード用の強い型指定のオブジェクトが含まれません。タスク・ペイロードはAnyType Javaオブジェクトで表されます。AnyType Javaオブジェクトは、ネームスペース内のpayloadをルートとして持つXML要素を使用して作成されます。

http://xmlns.oracle.com/bpel/workflow/task

ペイロードのXML要素には、他のすべてのXML要素が含まれます。各XML要素では、メッセージ属性を定義します。

例33-8は、タスク・ペイロードの設定方法を示しています。

例33-8 タスク・ペイロードの設定

import oracle.bpel.services.workflow.task.model.AnyType;
import oracle.bpel.services.workflow.task.model.ObjectFactory;
import oracle.bpel.services.workflow.task.model.Task;
..........

Document document = //createXMLDocument
Element payloadElem = document.createElementNS("http://xmlns.oracle.com/bpel/workflow/
task", "payload");
Element orderElem = document.createElementNS("http://xmlns.oracle.com/pcbpel/test/order", "order");
Element child = document.createElementNS("http://xmlns.oracle.com/pcbpel/test/order", "id");
child.appendChild(document.createTextNode("1234567"));
orderElem.appendChild(child);
payloadElem.appendChild(orderElem);
document.appendChild(payloadElem);

task.setPayloadAsElement(payloadElem);

注意:

AnyType.getContent()要素は、変更不可のXML要素リストを返します。このリストには他のメッセージ属性を追加できません。

33.6.3 プログラムによるタスクの開始

例33-9は、休暇申請タスクをプログラムによって開始する方法を示しています。

例33-9 プログラムによる休暇申請タスクの開始

// create task object
ObjectFactory objectFactory = new ObjectFactory();
Task task = objectFactory.createTask();

// set title
task.setTitle("Vacation request for jcooper");

// set creator
task.setCreator("jcooper");

// set taskDefinitionId. taskDefinitionId is the target
// namespace of the task
// If namespace is used, the active version of the composite corresponding
// to that of the namespace will be used.
task.setTaskDefinitionId("http://xmlns.oracle.com/VacationRequest/
Project1/Humantask1");  (Your task definition ID will be different.)

// create and set payload
Document document = XMLUtil.createDocument();
Element payloadElem = document.createElementNS(TASK_NS, "payload");
Element vacationRequestElem = document.createElementNS(VACATION_REQUEST_NS,
"VacationRequestProcessRequest");

Element creatorChild = document.createElementNS(VACATION_REQUEST_NS, "creator");
creatorChild.appendChild(document.createTextNode("jcooper"));
vacationRequestElem.appendChild(creatorChild);

Element fromDateChild = document.createElementNS(VACATION_REQUEST_NS, "fromDate");
fromDateChild.appendChild(document.createTextNode("2006-08-05T12:00:00"));
vacationRequestElem.appendChild(fromDateChild);

Element toDateChild = document.createElementNS(VACATION_REQUEST_NS, "toDate");
toDateChild.appendChild(document.createTextNode("2006-08-08T12:00:00"));
vacationRequestElem.appendChild(toDateChild);

Element reasonChild = document.createElementNS(VACATION_REQUEST_NS, "reason");
reasonChild.appendChild(document.createTextNode("Hunting"));
vacationRequestElem.appendChild(reasonChild);

payloadElem.appendChild(vacationRequestElem);
document.appendChild(payloadElem);

task.setPayloadAsElement(payloadElem);

IWorkflowServiceClient workflowServiceClient =
WorkflowServiceClientFactory.getWorkflowServiceClient
(WorkflowServiceClientFactory.SOAP_CLIENT);
ITaskService taskService = workflowServiceClient.getTaskService();
IInitiateTaskResponse iInitiateTaskResponse = taskService.initiateTask(task);
Task retTask = iInitiateTaskResponse.getTask();
System.out.println("Initiated: " + retTask.getSystemAttributes().getTaskNumber() + " - " +
retTask.getSystemAttributes().getTaskId());
return retTask;

33.7 ワークフロー標準ビュー定義の変更

ワークリスト・アプリケーションおよびUserMetadataService APIは、標準ビューの作成、更新および削除に使用できるメソッドを提供します。詳細は、第34.1.7項「ユーザー・メタデータ・サービス」を参照してください。

33.8 HelpDeskUIサンプルを使用したワークリスト・アプリケーションの記述

この項の例では、HelpDeskRequestデモの一部であるヘルプ・デスク・インタフェースの変更方法を示します。

ワークリスト・アプリケーションを記述する手順は、次のとおりです。

1. ワークフロー・コンテキストは、ユーザーを認証することで作成します。

// get workflow service client
IWorkflowServiceClient wfSvcClient =
WorkflowServiceClientFactory.getWorkflowServiceClient
(WorkflowServiceClientFactory.REMOTE_CLIENT);

//get the workflow context
IWorkflowContext wfCtx =
wfSvcClient.getTaskQueryService().authenticate(userId, pwd, null);

これは、第33.1項「ワークフロー・サービスのクライアント作成に関する概要」のステップ3です。

HelpDeskRequestのlogin.jspファイルでは、前述のAPIを使用してユーザーが認証され、ワークフロー・コンテキストが作成されます。ユーザーが認証されると、statusPage.jspファイルによって、ログイン・ユーザーに割当て済のタスクが表示されます。例33-10は、login.jspファイルからのサンプル・コードを示しています。

例33-10 Login.jsp

<%@ page import="javax.servlet.http.HttpSession"
import="oracle.bpel.services.workflow.client.IWorkflowServiceClient"
import="oracle.bpel.services.workflow.client.WorkflowServiceClientFactory"
import="java.util.Set"
import="java.util.Iterator"
import="oracle.bpel.services.workflow.verification.IWorkflowContext"
import="oracle.tip.pc.services.identity.config.ISConfiguration"%>
<%@ page contentType="text/html;charset=windows-1252"%>

<html>
<head>
<title>Help desk request login page</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#F0F0F0" text="#000000" style="font: 12px verdana; line-height:18px">
<center>
<div style="width:640px;padding:15px;border-width: 10px; border-color: #87b4d9; border-style:
solid;
background-color:white; text-align:left">

<!-- Page Header, Application banner, logo + user status -->
<jsp:include page="banner.jsp"/>

<!-- Initiate Meta Information -->

<div style="background-color:#F0F0F0; border-top:10px solid white;border-bottom:
10px solid white;padding:10px;text-align:center" >
<b>Welcome to the HelpDesk application</b>
</div>

<%
String redirectPrefix =  "/HelpDeskUI/";
// Ask the browser not to cache the page
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");

HttpSession httpSession = request.getSession(false);
if (httpSession != null) {

IWorkflowContext ctx = (IWorkflowContext) httpSession.getAttribute("workflowContext");
if (ctx != null) {
response.sendRedirect(redirectPrefix + "statusPage.jsp");
}
else
{
String authFailedStr = request.getParameter("authFailed");
boolean authFailed = false;
if ("true".equals(authFailedStr))
{
authFailed = true;
}
else
{
authFailed = false;
}

if (!authFailed)
{
//Get page parameters:
String userId="";
if(request.getParameter("userId") != null)
{
userId = request.getParameter("userId");
}
String pwd="";
if(request.getParameter("pwd") != null)
{
pwd = request.getParameter("pwd");
}

if(userId != null && (!("".equals(userId.trim())))
&& pwd != null && (!("".equals(pwd.trim()))))
{
try {
HttpSession userSession = request.getSession(true);

IWorkflowServiceClient wfSvcClient =
WorkflowServiceClientFactory.getWorkflowServiceClient
(WorkflowServiceClientFactory.REMOTE_CLIENT);
IWorkflowContext wfCtx =
wfSvcClient.getTaskQueryService().authenticate(userId, pwd, null);
httpSession.setAttribute("workflowContext", wfCtx);
response.sendRedirect(redirectPrefix + "statusPage.jsp");
}
catch (Exception e)
{
String worklistServiceError = e.getMessage();
response.sendRedirect(redirectPrefix + "login.jsp?authFailed=true");
out.println("error is " + worklistServiceError);
}
}
} else
{
out.println("Authentication failed");
}
}
}
%>

<form action='<%= request.getRequestURI() %>' method="post">
<div style="width:100%">
<table cellspacing="2" cellpadding="3" border="0" width="30%" align="center">
<tr>
<td>Username
</td>
<td>
<input type="text" name="userId"/>
</td>
</tr>
<tr>
<td>Password
</td>
<td>
<input type="password" name="pwd"/>
</td>
</tr>
<tr>
<td>
<input type="submit" value="Submit"/>
</td>
</tr>
</table>
</form>
</div>
</div>
</center>
</body>
</html>

2. TaskQueryServiceからのqueryTask APIを使用してタスクを問い合せます。

//add list of attributes to be queried from the task
List displayColumns = new ArrayList();
displayColumns.add("TASKNUMBER");
displayColumns.add("TITLE");
displayColumns.add("PRIORITY");
displayColumns.add("STATE");
displayColumns.add("UPDATEDDATE");
displayColumns.add("UPDATEDBY");
displayColumns.add("CREATOR");
displayColumns.add("OUTCOME");
displayColumns.add("CREATEDDATE");
displayColumns.add("ASSIGNEEUSERS");
displayColumns.add("ASSIGNEEGROUPS");
// get the list of tasks
List tasks =  wfSvcClient.getTaskQueryService().queryTasks
(wfCtx,
displayColumns,
null,
ITaskQueryService.AssignmentFilter.MY_AND_GROUP,
null,
null,
null,
0,
0);
// create listing page by using above tasks
//add href links to title to display details of the task by passing taskId
as input parameter
Use getTaskDetailsById(IWorkflowContext wftx, String taskId);

これは、第33.1項「ワークフロー・サービスのクライアント作成に関する概要」のステップ4です。

HelpDeskRequestのstatusPage.jspファイルを使用して、ヘルプ・デスク・リクエストのステータスが表示されます。例33-11は、statusPage.jspのコード例を示しています。

例33-11 statusPage.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page import="oracle.tip.pc.services.identity.BPMAuthorizationService,
oracle.bpel.services.workflow.verification.IWorkflowContext,
oracle.tip.pc.services.common.ServiceFactory,
oracle.bpel.services.workflow.client.IWorkflowServiceClient,
oracle.bpel.services.workflow.client.WorkflowServiceClientFactory,
oracle.bpel.services.workflow.query.ITaskQueryService,
oracle.bpel.services.workflow.task.model.Task,
oracle.bpel.services.workflow.task.model.IdentityType,
oracle.tip.pc.services.identity.BPMUser,
java.util.List,
java.util.Calendar,
java.text.SimpleDateFormat,
java.util.ArrayList"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>RequestPage</title>
<style TYPE="text/css">
Body, Form, Table, Textarea, Select, Input, Option
{
font-family : tahoma, verdana, arial, helvetica, sans-serif;
font-size : 9pt;
}
table.banner
{
background-color: #eaeff5;
}
tr.userInfo
{
background-color: #eaeff5;
}
tr.problemInfo
{
background-color: #87b4d9;
}
</style>
</head>
<body bgcolor="White">
<%
HttpSession httpSession = request.getSession(false);
httpSession.setAttribute("pageType","STATUSPAGE");
%>
<table bordercolor="#eaeff5" border="4" width="100%">
<tr><td> <jsp:include page="banner.jsp"/> </td></tr>
</table>
<%
BPMUser bpmUser = null;
String redirectPrefix =  request.getContextPath() + "/";
IWorkflowContext ctx = null;
if (httpSession != null) {

ctx = (IWorkflowContext) httpSession.getAttribute("workflowContext");
if (ctx != null) {
bpmUser = getAuthorizationService(ctx.getIdentityContext()).
lookupUser(ctx.getUser());
}
else
{
response.sendRedirect(redirectPrefix + "login.jsp");
return;
}
}
else
{
response.sendRedirect(redirectPrefix + "login.jsp");
return;
}
if(bpmUser == null)
{
response.sendRedirect(redirectPrefix + "login.jsp");
return;
}
String status = (String)httpSession.getAttribute("requeststatus");
if(status != null && !status.equals(""))
{
%>
<p></p>
<div style="text-align:left;color:red" >
<%= status %>
</div>
<%
}
httpSession.setAttribute("requeststatus",null);
IWorkflowServiceClient  wfSvcClient =
WorkflowServiceClientFactory.getWorkflowServiceClient(
WorkflowServiceClientFactory.REMOTE_CLIENT);
List displayColumns = new ArrayList();
displayColumns.add("TASKNUMBER");
displayColumns.add("TITLE");
displayColumns.add("PRIORITY");
displayColumns.add("STATE");
displayColumns.add("UPDATEDDATE");
displayColumns.add("UPDATEDBY");
displayColumns.add("CREATOR");
displayColumns.add("OUTCOME");
displayColumns.add("CREATEDDATE");
displayColumns.add("ASSIGNEEUSERS");
displayColumns.add("ASSIGNEEGROUPS");
List tasks =  wfSvcClient.getTaskQueryService().queryTasks
(ctx,
displayColumns,
null,
ITaskQueryService.ASSIGNMENT_FILTER_CREATOR,
null,
null,
null,
0,
0);
%>
<p></p>
<div style="text-align:left;color:green" >
<b>
Previous help desk request
</b>
</div>
<p></p>
<div style="text-align:center" >
<table cellspacing="2" cellpadding="2" border="3" width="100%">
<TR class="problemInfo">
<TH>TaskNumber</TH>
<TH>Title</TH>
<TH>Priority</TH>
<TH>CreatedDate</TH>
<TH>Assignee(s)</TH>
<TH>UpdatedDate</TH>
<TH>UpdatedBy</TH>
<TH>State</TH>
<TH>Status</TH>
</TR>
<%
SimpleDateFormat dflong = new SimpleDateFormat( "MM/dd/yy hh:mm a" );
for(int i = 0 ; i < tasks.size() ; i ++)
{
Task task = (Task)tasks.get(i);
int taskNumber = task.getSystemAttributes().getTaskNumber();
String title = task.getTitle();
int priority = task.getPriority();
String assignee = getAssigneeString(task);
Calendar createdDate = task.getSystemAttributes().getCreatedDate();
Calendar updateDate =  task.getSystemAttributes().getUpdatedDate();
String updatedBy = task.getSystemAttributes().getUpdatedBy().getId();
String state = task.getSystemAttributes().getState();
String outcome = task.getSystemAttributes().getOutcome();
if(outcome == null) outcome = "";
String titleLink = "http://" + request.getServerName() +
":" + request.getServerPort() +
"/integration/worklistapp/TaskDetails?taskId=" +
task.getSystemAttributes().getTaskId();
%>
<tr class="userInfo">
<td><%=taskNumber%></td>
<td><a href="<%=titleLink%>" target="_blank"><%=title%></a></td>
<td><%=priority%></td>
<td><%=dflong.format(createdDate.getTime())%></td>
<td><%=assignee%></td>
<td><%=dflong.format(updateDate.getTime())%></td>
<td><%=updatedBy%></td>
<td><%=state%></td>
<td><%=outcome%></td>
<tr>
<%
}
%>
</table>
</div>
<%!
private BPMAuthorizationService getAuthorizationService(String identityContext)
{
BPMAuthorizationService authorizationService =
ServiceFactory.getAuthorizationServiceInstance();
if (identityContext != null)
authorizationService = ServiceFactory.getAuthorizationServiceInstance(identityContext);

return authorizationService;
}
private String getAssigneeString(Task task) throws Exception
{
List assignees = task.getSystemAttributes().getAssigneeUsers();
StringBuffer buffer = null;
for(int i = 0 ; i < assignees.size() ; i++)
{
IdentityType type = (IdentityType)assignees.get(i);
String name = type.getId();
if(buffer == null)
{
buffer = new StringBuffer();
}
else
{
buffer.append(",");
}
buffer.append(name).append("(U)");
}
assignees = task.getSystemAttributes().getAssigneeGroups();
for(int i = 0 ; i < assignees.size() ; i++)
{
IdentityType type = (IdentityType)assignees.get(i);
String name = type.getId();
if(buffer == null)
{
buffer = new StringBuffer();
}
else
{
buffer.append(",");
}
buffer.append(name).append("(G)");
}
if(buffer == null)
{
return "";
}
else
{
return buffer.toString();
}
}
%>
</body>
</html>

34 ヒューマン・ワークフロー・サービスの概要

この章では、開発者を対象として、Oracle SOA Suiteでのヒューマン・ワークフロー・サービスの使用方法について説明します。ヒューマン・ワークフロー・サービスは、タスクのライフ・サイクル内で様々な操作を実行します。

この章には次の項が含まれます:

- 第34.1項「ヒューマン・ワークフロー・サービスの概要」

- 第34.2項「ヒューマン・ワークフローからの通知」

- 第34.3項「割当てサービスの構成」

- 第34.4項「コールバックとリソース・バンドルに対するクラスのロード」

- 第34.5項「ワークフロー・サービスのリソース・バンドル」

- 第34.6項「ヒューマン・ワークフロー・クライアントとOracle WebLogic Serverサービスとの統合の概要」

- 第34.7項「ヒューマン・タスクのタスクの状態」

- 第34.8項「Oracle Workflowのデータベース・ビュー」

注意:

以前のリリースのOracle BPM Worklistには、フレックス・フィールドと呼ばれる機能が含まれていました。リリース11g R1 (11.1.1.4)から、フレックス・フィールドはマップ済属性と呼ばれるようになりました。

34.1 ヒューマン・ワークフロー・サービスの概要

この項では、次のヒューマン・ワークフロー・サービスの役割について説明します。

- タスク・サービス

- タスク問合せサービス

- アイデンティティ・サービス

- タスク・メタデータ・サービス

- ユーザー・メタデータ・サービス

- タスク・レポート・サービス

- ランタイム構成サービス

- エビデンス・ストア・サービス

34.1.1 ヒューマン・ワークフロー・サービスに対するSOAP、Enterprise JavaBeansおよびJavaサポート

表34-1に、タスク・サービスに提供されるSimple Object Access Protocol(SOAP)、Enterprise JavaBeansおよびJavaサポートのタイプを示します。ほとんどのヒューマン・ワークフロー・サービスは、SOAPおよびリモートのEnterprise JavaBeans APIからアクセスできます。これらのサービスは、適切なクライアント・プロキシを使用して直接利用できます。また、プロトコル詳細を要約し、すべての通信の共通のインタフェースを提供するクライアント・ライブラリが提供されます。

表34-1 Enterprise JavaBeans、SOAPおよびJavaサポート

サービス名

SOAP Webサービスのサポート

リモートEnterprise JavaBeansのサポート

タスク・サービス: タスク状態の管理およびタスクの永続性を提供します。これらのサービスに加え、タスク・サービスでは、タスクの更新、完了、エスカレート、再割当てなどの操作が公開されます。

はい

はい

タスク問合せサービス: 様々な検索基準(キーワード、カテゴリ、ステータス、ビジネス・プロセス、属性値、タスクの履歴情報など)に基づいて、ユーザーのタスクを問い合せます。

はい

はい

アイデンティティ・サービス: ユーザーの認証、ユーザーのプロパティ、ロール、グループ・メンバーシップおよび権限のルックアップが可能になります。

はい

いいえ

タスク・メタデータ・サービス: タスク関連のメタデータ情報を取得するための操作を公開します。

はい

はい

ユーザー・メタデータ・サービス: ワークフロー・ユーザー関連のメタデータ(ユーザー作業キュー、プリファレンス、休暇および委任ルールなど)を管理します。

はい

はい

タスク・レポート・サービス: ワークフロー・レポートの詳細を提供します。

はい

はい

ランタイム構成サービス: タスク・サービスのランタイム環境で使用されるメタデータの管理メソッドを提供します。

はい

はい

エビデンス・ストア・サービス: デジタル署名されたワークフロー・タスクの保管と否認防止をサポートします。

はい

はい

表34-2に、各タスク・サービスに対するSOAP Web Services Description Language(WSDL)ファイルの場所を示します。

表34-2 タスク・サービスのSOAP WSDLの場所

サービス名

SOAP WSDLの場所

タスク・サービス

http://host:port/integration/services/TaskService/TaskServicePort?WSDL

タスク問合せサービス

http://host:port/integration/services/TaskQueryService/TaskQueryService?WSDL

アイデンティティ・サービス

http://host:port/integration/services/IdentityService/configuration?WSDL

http://host:port/integration/services/IdentityService/identity?WSDL

タスク・メタデータ・サービス

http://host:port/integration/services/TaskMetadataService/TaskMetadataServicePort?WSDL

ユーザー・メタデータ・サービス

http://host:port/integration/services/UserMetadataService/UserMetadataService?WSDL

タスク・レポート・サービス

http://host:port/integration/services/TaskReportService/TaskReportServicePort?WSDL

ランタイム構成サービス

http://host:port/integration/services/RuntimeConfigService/RuntimeConfigService?WSDL

エビデンス・ストア・サービス

http://host:port/integration/services/EvidenceService/EvidenceService?WSDL

表34-3に、様々なEnterprise JavaBeansのJNDI名を示します。

表34-3 様々なEnterprise JavaBeansのJNDI名

サービス名

様々なEnterprise JavaBeansのJNDI名

タスク・サービス

ejb/bpel/services/workflow/TaskServiceBean

クライアント・トランザクションに参加するタスク・サービスのEnterprise JavaBeans

ejb/bpel/services/workflow/TaskServiceGlobalTransactionBean

タスク・メタデータ・サービス

ejb/bpel/services/workflow/TaskMetadataServiceBean

タスク問合せサービス

ejb/bpel/services/workflow/TaskQueryService

ユーザー・メタデータ・サービス

ejb/bpel/services/workflow/UserMetadataService

ランタイム構成サービス

ejb/bpel/services/workflow/RuntimeConfigService

タスク・レポート・サービス

ejb/bpel/services/workflow/TaskReportServiceBean

タスク・エビデンス・サービス

ejb/bpel/services/workflow/TaskEvidenceServiceBean

ワークリスト・サービスのクライアント・ライブラリの詳細は、第33章「カスタム・ワークリスト・クライアントの作成」を参照してください。

34.1.1.1 外部JNDI名のサポート

ヒューマン・ワークフロー・サービスは、WebサービスとRemote Method Invocation(RMI)を介してJ2EEアプリケーションと統合できます。他の管理対象サーバーやクラスタ、または他のOracle WebLogic ServerドメインにあるEnterprise JavaBeansのリモート・ルックアップを容易にするために、Oracle WebLogic Serverには外部JNDIプロバイダが組み込まれています。外部JNDIプロバイダは、リモート・サーバーのホストとポートを使用して、リモート・サーバーのEnterprise JavaBeansをローカル・サーバーのJNDIツリーにリンク付けするように構成されています。

ワークフロー・サービスでは、表34-3にリストされているEnterprise JavaBeansが公開されます。これらのEnterprise JavaBeansは、タスク問合せサービス、ヒューマン・タスクに対するADFタスク・フローの登録、埋込みワークリスト・リージョンのユースケースを完全にサポートするために、外部JNDIプロバイダを介してすべてリンクされている必要があります。

外部JNDI名のサポートを提供する手順は、次のとおりです。

1. Oracle WebLogic Server管理コンソールにログインします。

http://host:port/console

2. 「ドメイン構造」で、「サービス」→「JDBC」→「外部JNDIプロバイダ」の順に選択します。
ローカルJNDIネームスペースに対するリモートEnterprise JavaBeans名を、外部JNDIプロバイダを介して同じOracle WebLogic Serverドメイン内のSOAサーバーから特定の管理対象サーバーまたはクラスタにリンク付けする場合は、注意事項が1つあります。ローカルJNDI名は、そのドメイン内のすべての管理対象サーバーに公開されます。このようにリンク付けすると、そのドメイン内のSOAサーバー上でネームスペースの競合が発生します。これは、Oracle BPM Worklistから登録されたEnterprise JavaBeansがすでに存在しているためです。競合を回避して構成を最小限に維持する別の方法として、JNDI接尾辞を使用する方法があります。これを実行するには、リモート・ワークフローEnterprise JavaBeansのすべてのローカルJNDIリンクの末尾に一貫性のある接尾辞を追加し、接尾辞キーが含まれた単純なwf_client_config.xmlファイルを作成します。

クライアント・プロパティは3つの方法のうちのいずれかの方法で定義できます。詳細は、第34.6.1.2項「構成オプション」を参照してください。

3. 表34-3に示した各Enterprise JavaBeans名にJNDI接尾辞を追加し、外部JNDI名を登録します。

- ejb/bpel/services/workflow/TaskServiceGlobalTransactionean_server1

- ejb/bpel/services/workflow/TaskServiceBean_server1

- ejb/bpel/services/workflow/TaskMetadataServiceBean_server1

- TaskQueryService_server1

- UserMetadataService_server1

- RuntimeConfigService_server1

- TaskReportServiceBean_server1

- TaskEvidenceServiceBean_server1

4. 例34-1に示すように、wf_client_config.xmlファイルにejbJndiSuffix要素の値のみを指定して、リモート名を定義します。JAXBオブジェクトのWorkflowServicesClientConfigurationTypeを使用することも、Map<CONNECTION_PROPERTY, String>プロパティでCONNECTION_PROPERTY.EJB_JNDI_SUFFIXを使用することもできます。

例34-1 ejbJndiSuffix要素の値

<remoteClient>
<ejbJndiSuffix>_server1</ejbJndiSuffix>
</remoteClient>

34.1.2 サービスに対するセキュリティ・モデル

アイデンティティ・サービスを除いて、前述のAPI(SOAPおよびリモートEnterprise JavaBeans)を使用するすべてのサービスでは、認証を起動する必要があります。前述のすべてのチャネルでは、ヒューマン・ワークフロー・コンテキストを使用したユーザーIDの受渡しがサポートされています。ヒューマン・ワークフロー・コンテキストには、次のいずれかが含まれています。

- ログインとパスワード

- トークン

タスク問合せサービスでは、ログインとパスワードを取得し、すべてのサービスに使用するヒューマン・ワークフロー・コンテキストを返すauthenticate操作が公開されます。ヒューマン・ワークフロー・コンテキストは、必要に応じて、各リクエストごとにログインとパスワード付きで渡すことができます。

authenticate操作では、管理IDおよび管理パスワードを使用して、ユーザーにかわってコンテキストを作成するという概念もサポートされます。この操作により、Oracle BPM Worklistにログインしたユーザーのパスワードを利用できない場合は、そのユーザー用のコンテキストを作成できます。

ワークフロー・コンテキストは、1回取得してすべてのリクエストで使用することをお薦めします。リクエストごとにワークフロー・コンテキストを取得すると、パフォーマンスが低下する場合があります。

レルムは、アイデンティティ構成からのアイデンティティ・サービス・コンテキストです。デフォルトの構成を使用する場合、レルム名はNULLにできます。

34.1.2.1 SOAP Webサービス使用時のワークフロー・サービスへのアイデンティティ伝播の制限

アイデンティティ伝播は複数のSOAP Webサービス間で認証されたアイデンティティのレプリケーションで、トランザクションを1回で完了するために使用されます。SOAP Webサービスでは、Webサービス・セキュリティもサポートされます。Webサービス・セキュリティが使用されている場合は、SOAP入力にヒューマン・ワークフロー・コンテキストが存在している必要はありません。Webサービス・セキュリティは、Oracle Enterprise Manager Fusion Middleware Controlから構成できます。

注意:

ヒューマン・ワークフローのSOAPクライアントは、Webサービスが保護されている場合に、Security Assertion Markup Language(SAML)トークンベースのアイデンティティ伝播を使用できるように拡張されています。

34.1.2.2 ユーザーにかわるヒューマン・ワークフロー・コンテキストの作成

タスク問合せサービスに対するauthenticateOnBehalfOf APIメソッドでは、管理ユーザーのユーザーIDとパスワードをリクエストで渡すことで、ユーザーのかわりにヒューマン・ワークフロー・コンテキストを作成できます。管理ユーザーにはworkflow.admin権限があります。この場合は、ユーザーのかわりにパスワードを使用して作成した場合と同様のコンテキストが作成されます。

これは、バックエンド・システムがワークフロー・タスクを操作し、一方でユーザーが自分のシステムで操作する環境で役立ちます。ワークフロー・サービスとの直接の相互作用はありません。システムは、ユーザーにかわってログインし、ユーザーのコンテキストを取得できます。

注意:

この機能は、システム操作に対してのみ使用することをお薦めします。これは、管理ユーザー・コンテキストを作成して、ユーザーのかわりに作成したヒューマン・ワークフロー・コンテキストを問い合せる必要があるためです。かわりにアイデンティティ伝播を使用すると、ユーザーはすでに認証されているため、クライアントはすでに認証されているそのユーザーのIWorkflowContextを取得できます。詳細は、第34.1.2.3項「JAASアプリケーションによって以前に認証されたユーザーのワークフロー・コンテキストの取得」を参照してください。

例34-2では、ユーザーjcooperのヒューマン・ワークフロー・コンテキストを作成します。

例34-2 ヒューマン・ワークフロー・コンテキストの作成

String adminUser = "...."
String adminPassword = "...."
String realm = "...."

IWorkflowContext adminCtx =
taskQueryService.authenticate(user,password.toCharArray(),realm);

IWorkflowContext behalfOfCtx =
taskQueryService.authenticateOnBehalfOf(adminCtx,"jcooper");

34.1.2.3 JAASアプリケーションによって以前に認証されたユーザーのワークフロー・コンテキストの取得

クライアントでJAASアプリケーションによって以前に認証されたユーザーのワークフロー・コンテキストを取得する場合は、例34-3に示すアイデンティティ伝播を使用できます。

例34-3 アイデンティティ伝播

public IWorkflowContext getWorkflowContextForAuthenticatedUser() throws WorkflowException;

クライアントで適切なクライアント・タイプ用にアイデンティティ伝播が構成されている場合は、このAPIによって認証済のユーザーのワークフロー・コンテキストが返されます。クライアント・タイプがリモートの場合は、このメソッドでEnterprise JavaBeansアイデンティティ伝播が使用されます。クライアント・タイプがSOAPの場合は、このメソッドでSAMLトークン伝播が使用されます。

34.1.3 タスク・サービス

タスク・サービスにより、タスクに対するアクションを実行するための操作が公開されます。表34-4に、タスク・サービスの操作を示します。パッケージoracle.bpel.services.workflow.taskは、タスク・サービスに対応しています。

表34-4 タスク・サービスのメソッド

メソッド

説明

acquireTask

タスクを獲得します。

acquireTasks

一連のタスクを獲得します。

addAttachment

タスクに添付ファイルを追加します。

注意: このAPIで、クライアントは、タスクの作成前に添付ファイルを追加するためのAPIをコールできるようになります。タスクがまだ作成されていない場合は、クライアントはtaskId equals NULLを指定してAPIをコールできます。ただし、添付ファイルは、タスクが作成される前にアップロードされているため、Oracle Workflowサービスでは、同じ名前を持つ複数の添付ファイルをタスクの開始前に追加することはできません。

タスクがすでに作成されている場合は、複数の添付ファイルに同じ名前が付いていると、Oracle Workflowサービスではその添付ファイルの最新バージョンのみが保持されます。

addComment

タスクにコメントを追加します。

createToDoTask

To Doタスクを作成します。

delegateTask

タスクを別のユーザーに委任します。現在の割当て先とタスク委任先ユーザーの両方が、タスクを表示して操作できます。

delegateTasks

タスクのリストを別のユーザーに委任します。現在の割当て先とタスクのリスト委任先ユーザーの両方が、タスクを表示して操作できます。

deleteTask

タスクの論理削除を実行します。データベース上にはタスクはまだ存在します。

deleteTasks

タスクのリストの論理削除を実行します。データベース上にはタスクはまだ存在します。

errorTask

タスクをエラーにします。通常、この操作はエラー割当て先が使用します。

escalateTask

タスクをエスカレートします。デフォルトでは、現行のユーザーのマネージャにエスカレートします。これはエスカレーション関数を使用して上書きできます。

escalateTasks

複数のタスクをまとめてエスカレートします。デフォルトでは、現行のユーザーのマネージャにエスカレートします。これはエスカレーション関数を使用して上書きできます。

getApprovers

タスクの前の承認者を取得します。

getFutureParticipants

タスクの今後の参加者を取得します。今後の参加者は、単純参加者を含むルーティング・スリップ形式で返されます(ルーティング・スリップを含む参加者ノードとパラレル・ノード)。

getUsersToRequestInfoForTask

情報リクエストのリクエストが可能なユーザーを取得します。

initiateTask

タスクを開始します。

mergeAndUpdateTask

タスクをマージおよび更新します。この操作を使用するのは、部分タスクに更新が必要な場合です。部分タスクとは、一部のタスク属性が存在しないタスクです。この部分タスクでは、次のタスク属性のみが解析されます。

- タスク・ペイロード

- コメント

- タスクの状態

- タスクの結果

overrideRoutingSlip

タスク・インスタンスのルーティング・スリップを新規ルーティング・スリップで上書きします。現行のタスク割当てはNULLになり、タスクの開始時には新規ルーティング・スリップが解析されます。

purgeTask

永続ストアからタスクを削除します。

purgeTasks

永続ストアからタスクのリストを削除します。

pushBackTask

タスクを前の承認者または当初の割当て先にプッシュバックします。当初の割当て先は、タスクの再割当てやエスカレートを実行している可能性があるため、承認者でなくてもかまいません。タスクが当初の割当て先にプッシュバックされるか、承認者にプッシュバックされるかは、Oracle Enterprise Manager Fusion Middleware Controlの「システムMBeanブラウザ」のプロパティ「PushbackAssignee」によって制御されます。

1. 「SOAインフラストラクチャ」メニューから、「管理」→「システムMBeanブラウザ」の順に選択します。

2. 「アプリケーション定義のMBean」→「oracle.as.soainfra.config」→「サーバー: soa_server1」→「WorkflowConfig」→「human-workflow」の順に選択します。

3. 「PushbackAssignee」をクリックして値を表示または変更します。

注意: プッシュバックは、グループ投票ではなく単一承認者で機能するように設計されています。グループ投票(またはパラレル)シナリオを含むステージから別ステージへのプッシュバックは、許可されません。同様に、単一の割当て先からグループ投票(またはパラレル)シナリオにプッシュバックすることもできません。

reassignTask

タスクを再割当てします。

reassignTasks

複数のタスクをまとめて再割当てします。

reinitiateTask

タスクを再開します。タスクを再開すると、前に完了したタスクが持ち越されるため、履歴、コメントおよび添付ファイルも新規タスクに持ち越されます。

releaseTask

前に獲得したタスクをリリースします。

releaseTasks

前に獲得した一連のタスクをリリースします。

removeAttachment

タスクの添付ファイルを削除します。

renewTask

タスクの期限を更新して有効期間を延長します。

requestInfoForTask

タスク情報をリクエストします。

requestInfoForTaskWithReapproval

再承認を伴うタスク情報をリクエストします。たとえば、jcooperがタスクを作成し、jsteinとwfaulkが同じ順序でタスクを承認したとします。次の承認者であるcdickensがjcooperに対して再承認を伴う情報のリクエストを送信すると、jcooperはリクエストされた情報を発行し、jsteinとwfaulkはcdickensより先にそのタスクを承認します。cdickensがjsteinに対して再承認を伴う情報のリクエストを送信すると、jsteinはリクエストされた情報を発行し、wfaulkはcdickensより先にそのタスクを承認します。

resumeTask

タスクを再開します。ワークフローの保留を解除するために、タスク所有者(またはBPMWorkflowSuspend権限を持つユーザー)のみが実行できる操作です。ヒューマン・ワークフローの再開後は、タスクに対するアクションを実行できます。

resumeTasks

一連のタスクを再開します。

routeTask

タスクを、レビューする必要のある次のユーザーに非定型の形式でルーティングできるようにします。ユーザーは、タスクをシリアル、パラレルまたは単一割当てでルーティングするように指定できます。タスクをルーティングできるのは、ヒューマン・ワークフローでタスクの非定型ルーティングが許可されている場合のみです。

skipCurrentAssignment

現在の割当てをスキップして次の割当てに移動するか、他に割当て先が存在しない場合は、直前の承認者が設定した結果を使用します。

submitInfoForTask

タスク情報を発行します。通常、このアクションは、必要なタスク更新を実行した後、または追加情報を含むコメントや添付ファイルを追加した後に実行します。

suspendTask

タスク所有者(またはBPMWorkflowSuspend権限を持つユーザー)に、ヒューマン・ワークフローの一時的な保留を許可します。この場合、タスクの有効期限とエスカレーションは、ワークフローが再開されるまで適用されません。一時停止されているタスクには、アクションを実行できません(再開または取消しを除く)。

suspendTasks

一連のタスクを一時停止します。

updateOutcomeOfTasks

一連のタスクの結果を更新します。

updatePriority

指定したタスクIDのタスクおよびそのサブタスクの優先度を更新します。UpdatePriorityTypeがINCREMENTの場合、指定した優先度を1ずつ増分することにより、タスクが更新されます(つまり、タスクの優先度は高くなります)。UpdatePriorityTypeがDECREMENTの場合、優先度を1ずつ減分することによりタスクが更新され(つまり、タスクの優先度は低くなります)、それ以外の場合には、指定した優先度で更新されます。

updatePriorityOfTasks

タスクの一括更新に使用します。優先度の更新が必要なタスクのリストを、このAPIに対してパラメータとして渡すことができます。タスクのリストの優先度が更新されます。これにより、タスクおよびそのサブタスクの優先度が更新されます。

updateTask

タスクを更新します。

updateTaskOutcome

タスクの結果を更新します。

updateTaskOutcomeAndRoute

タスクの結果を更新してタスクをルーティングします。タスクをルーティングすると、ユーザーはそのタスクを、レビューする必要のある次のユーザーに非定型の形式でルーティングできます。ユーザーは、タスクをシリアル、パラレルまたは単一割当てでルーティングするように指定できます。タスクをルーティングできるのは、ヒューマン・ワークフローでタスクの非定型ルーティングが許可されている場合のみです。

withdrawTask

タスク作成者は、ヒューマン・ワークフローを介してタスクを送る必要がなくなった場合、保留中のタスクを取り消すことができます。タスク所有者も、作成者のかわりにタスクを取り消すことができます。タスクが取り消されると、ビジネス・プロセスは、タスクの状態属性が「取消し済」に設定された状態でコールバックされます。

withdrawTasks

一連のタスクを取り消します。

詳細は、次を参照してください。

- 第34.1.11項「タスク・インスタンス属性」

- Oracle Fusion Middleware Oracle SOA Suiteワークフロー・サービスJava APIリファレンス

- いくつかのAPIの例を示すサンプルのworkflow-118-JavaSamples

34.1.4 タスク問合せサービス

タスク問合せサービスでは、様々な検索基準(キーワード、カテゴリ、ステータス、ビジネス・プロセス、属性値、タスクの履歴情報など)に基づいてタスクを問い合せます。表34-5に、SOAPを介したサービスの使用方法など、タスク問合せサービスの操作を示します。パッケージoracle.bpel.services.workflow.queryは、タスク問合せサービスに対応しています。

表34-5 タスク問合せサービスのメソッド

メソッド

説明

authenticate

アイデンティティ認証サービスでユーザーを認証し、有効なIWorkflowContextオブジェクトを渡して戻します。

authenticateOnBehalfOf

必要に応じ、他のユーザーにかわって認証を行います。

countTasks

指定した問合せ基準に一致するタスクの数をカウントします。

countViewTasks

指定したビューの問合せ基準に一致するタスクの数をカウントします。

createContext

事前認証済のHTTPリクエストから有効なIWorkflowContextオブジェクトを作成します。

doesTaskExist

指定した問合せ基準に一致する既存タスクがあるかどうかを確認します。

doesViewTaskExist

指定したビューの問合せ基準に一致するタスクが存在するかどうかを確認します。

getWorkflowContext

指定のコンテキスト・トークンを使用してヒューマン・ワークフロー・コンテキストを取得します。

destroyWorkflowContext

不要になったヒューマン・ワークフロー・コンテキストをクリーン・アップします。通常、このメソッドはユーザーのログアウト時に使用されます。

getTaskDetailsById

タスクのtaskIdプロパティから特定のタスクの詳細を取得します。

getTaskDetailsByNumber

タスクのtask numberプロパティから特定のタスクの詳細を取得します。

getTaskHistory

指定タスクIDのタスク・バージョンのリストを取得します。

getTaskSequence

タイプが順序のタスクについて、IDがタスクIDのタスクのタスク順序ツリーを取得します。

getTaskVersionDetails

指定のタスクIDとバージョン番号について、特定のタスク・バージョン詳細を取得します。

getWorkflowContextForAuthenticatedUser

JAASアプリケーションによって認証されたユーザーのIWorkflowContextオブジェクトを取得します。これは、Enterprise JavaBeansアイデンティティ伝播またはSAMLトークン・アイデンティティ伝播とともに使用します。

queryAggregatedTasks

指定した問合せを実行し、問合せで返されたタスクの数を、指定した列ごとにグループ化して集計します。

queryTaskErrors

指定の述語に一致するタスク・エラー・オブジェクトのリストを返します。

queryTasks

指定のフィルタ条件に一致するタスクのリストを返します。タスクは、指定の順序付け条件(存在する場合)に従ってリストされます。基準に一致するタスクのリスト全体を返すか、クライアントがページング問合せを実行できます。その場合は、リストのうち指定した数のタスクのみが取得されます。フィルタ条件は次のとおりです。

- assignmentFilter: タスクを割当て先または作成者に従ってフィルタします。割当てフィルタに可能な値は、次のとおりです。
ADMIN: フィルタリングなし。割当てや作成者に関係なく全タスクが返されます。

ALL: フィルタリングなし。割当てや作成者に関係なく全タスクが返されます。

CREATOR: コンテキスト・ユーザーが作成者であるタスクが返されます。

GROUP: コンテキスト・ユーザーがメンバーであるグループ、アプリケーション・ロールまたはユーザーのリストに割り当てられているタスクが返されます。

MY: コンテキスト・ユーザーに排他的に割り当てられているタスクが返されます。

MY_AND_GROUP: コンテキスト・ユーザー、またはコンテキスト・ユーザーがメンバーであるグループ、アプリケーション・ロールまたはユーザーのリストに、排他的に割り当てられているタスクが返されます。

OWNER: コンテキスト・ユーザーがタスク所有者であるタスクが返されます。

PREVIOUS: コンテキスト・ユーザーが以前に更新したタスクが返されます。

REPORTEES: コンテキスト・ユーザーの報告先に割り当てられているタスクが返されます。

REVIEWER: コンテキスト・ユーザーがレビューアであるタスクが返されます。

- keywords: オプションの検索文字列です。この場合は、この文字列がタスクのタイトル、タスク識別キーまたはタスク・テキスト・マップ済属性(以前のフレックス・フィールド)に含まれているタスクのみが返されます。

- predicate: オプションのoracle.bpel.services.workflow.repos.Predicateオブジェクトです。これによって、クライアントはSQLのような複雑な問合せ述語を指定できます。

queryViewAggregatedTasks

指定したビューに定義されているように問合せを実行し、そのビューに定義されているチャート・プロパティに従って選択したタスクを集計します。

queryViewTasks

指定のビューの基準に従ってタスクのリストが返されます。タスク・リストの全体またはページを返すことができます。クライアントは、ビューのコンテンツに対してフィルタと順序付け基準を追加指定できます。

詳細は、次を参照してください。

- 第34.1.11項「タスク・インスタンス属性」

- ドキュメント・ライブラリのOracle Fusion Middleware Oracle SOA Suiteワークフロー・サービスJava APIリファレンス

- いくつかのAPIの例を示すサンプルのworkflow-118-JavaSamples

34.1.5 アイデンティティ・サービス

アイデンティティ・サービスは、Oracle WebLogic Serverのセキュリティ・インフラストラクチャ(Oracle Identity ManagementおよびOracle Platform Security Services(OPSS))または任意のカスタム・ユーザー・リポジトリの上部に位置するWebサービスのシン・レイヤーです。アイデンティティ・サービスにより、ユーザーの認証、ユーザー・プロパティ、ロール、グループ・メンバーシップおよび権限のルックアップが可能になります。Oracle WebLogic Serverでは、Oracle Identity Managementが唯一のアイデンティティ・サービス・プロバイダです。Oracle Identity Managementは、XML、LDAPなど様々なリポジトリに対するユーザーとロールの保管と取得をすべて処理します。Oracle Identity Managementには、具体的に次の機能が用意されています。

- すべてのプロバイダは、Oracle Identity Managementを通してサポートされます。OracleAS JAAS Provider(JAZN)とLDAPのプロバイダはサポートされていません。カスタム・プロバイダは非推奨で、下位互換性のためにのみサポートされます。Oracle Identity Managementでは、カスタム・プロバイダを経由するか、LDAPプロバイダとしてOracle Virtual Directory(OVD)を構成して(あるいはその両方)、プロバイダのすべてのカスタマイズが実行されます。OVDはデータを様々なリポジトリ全体にわたって集約します。

- 次の内容を含むOPSSレイヤーが使用されます。

- アイデンティティ・ストア

- ポリシー・ストア

- 資格証明ストア

- フレームワーク

詳細は、『Oracle Fusion Middlewareアプリケーション・セキュリティ・ガイド』を参照してください。すべてのセキュリティ構成は、jps-config.xmlファイルを使用して行われます。

- 以前のリリースの動作と異なり、すべての権限がパーミッションと照合して検証されます。

- 次の一連のアプリケーション・ロールが定義されています。これらのロールはOPSSポリシー・ストアのSOAインフラストラクチャ・アプリケーションに自動的に定義されます。

- SOAAdmin: どのSOAモジュールにも管理操作を実行する必要があるユーザーにこのロールを付与します。このロールには、BPMWorkflowAdminおよびB2BAdminロールも付与されます。

- BPMWorkflowAdmin: どのワークフローにも管理操作を実行する必要があるユーザーにこのロールを付与します。この管理操作には、システム内の任意のタスクに対する検索および操作、ユーザーまたはグループのルール作成および変更、アプリケーションのカスタマイズ実行などの操作が含まれます。このロールには、BPMWorkflowCustomizeロールと次の権限が付与されます。

- workflow.mapping.protectedFlexField

- workflow.admin.evidenceStore

- workflow.admin

- BPMWorkflowCustomize: このロールは、パブリック・マップ済属性へのマップ済属性(以前のフレックス・フィールド)マッピングを実行する必要があるビジネス・ユーザーに付与します。このロールには、workflow.mapping.publicFlexField権限も付与されます。

- 次のワークフロー権限が定義されます。

- workflow.admin: タスク、ユーザーとグループのルールおよびカスタマイズに関連する管理操作を実行できるユーザーを制御します。

- workflow.admin.evidenceStore: デジタル署名されたタスク(デジタル証明書を使用した署名が必要なタスク)に関連するエビデンス記録を表示および検索できるユーザーを制御します。

- workflow.mapping.publicFlexField: パブリック・マップ済属性にタスク・ペイロード属性のマッピングを実行できるユーザーを制御します。

- workflow.mapping.protectedFlexField: 保護されたマップ済属性にタスク・ペイロード属性のマッピングを実行できるユーザーを制御します。

注意:

Oracle SOA Suiteに対して、複数の認証プロバイダを指定することはできません。これは、OPSSが複数のプロバイダをサポートしていないためです。ヒューマン・ワークフロー認証に使用するプロバイダは、Oracle SOA Suiteの認証プロバイダの順序を示したリスト内で最初のプロバイダである必要があります。

詳細は、次を参照してください。

- Oracle Fusion Middlewareアプリケーション・セキュリティ・ガイド(OPSSの詳細の場合)

- Oracle Identity Managementの詳細は『Oracle Fusion Middleware Oracle Identity Managementアプリケーション開発者ガイド』

- OVDの詳細は『Oracle Fusion Middleware Oracle Virtual Directory管理者ガイド』

34.1.5.1 アイデンティティ・サービス・プロバイダ

図34-1に示すように、Oracle Identity Managementはリリース11g でサポートされている唯一のプロバイダです。

図34-1 アイデンティティ・サービス・プロバイダ

「図34-1 アイデンティティ・サービス・プロバイダ」の説明

34.1.5.1.1 カスタム・ユーザー・リポジトリ・プラグイン

リリース11g以降、アイデンティティ・サービスでカスタム・プロバイダ・プラグインはサポートされていません。アイデンティティのカスタマイズは、すべてアイデンティティ・ストアで実行されるようになりました。Oracle Fusion Middlewareは、ユーザーとロールのAPIを有効化してカスタム・アイデンティティ・ストアと対話するプロバイダをサポートします。詳細は、次のURLを参照してください。

http://www.oracle.com/technetwork/middleware/id-mgmt/overview/index.html

34.1.6 タスク・メタデータ・サービス

タスク・メタデータ・サービスにより、タスク関連のメタデータ情報を取得するための操作が公開されます。表34-6に、これらのメソッドを示します。パッケージoracle.bpel.services.workflow.metadataは、タスク・メタデータ・サービスに対応しています。

表34-6 タスク・メタデータ・サービスのメソッド

メソッド

説明

getTaskMetadataByNamespace

指定のタスク定義ネームスペースとコンポジット・バージョンを使用して、ヒューマン・タスク・サービス・コンポーネントが記述されたTaskMetadataオブジェクトを取得します。

getOutcomes

タスクについて許可されている結果を取得します。結果とその表示値が返されます。

getResourceBundleInfo

タスクのリソース・バンドル情報を取得します。リソース・バンドル情報には、バンドルの位置と名前が含まれます。

getRestrictedActions

特定のタスクに対する制限付きアクションを取得します。

getTaskAttributesForTaskDefinitions

標準タスク属性と、指定したタスク定義に共通のマップ済属性列が記述されたTaskAttributeオブジェクトのリストを取得します。

getTaskAttributesForTaskNamespaces

標準タスク属性と、指定したネームスペースで識別されたタスク定義に共通のマップ済属性列が記述されたTaskAttributeオブジェクトのリストを取得します。

getTaskAttributes

タスク・メッセージ属性を取得します。

getTaskAttributesForTaskDefinition

特定のタスク定義のメッセージ属性を取得します。

getTaskDefinition

タスクに関連するタスク定義を取得します。

getTaskDefinitionById

タスク定義IDによるタスク定義を取得します。

getTaskDefinitionOutcome

特定のタスク定義IDの結果を取得します。

getTaskDisplay

タスクのタスク表示を取得します。

getTaskVisibilityRules

タスク表示ルールを取得します。

getTaskDisplayRegion

タスクのタスク表示リージョンを取得します。

getVersionTrackedAttrs

変更された場合にタスク・バージョンが作成されるタスク属性を取得します。

listTaskMetadata

システム内のタスク定義をリストします。

詳細は、Oracle Fusion Middleware Oracle SOA Suiteワークフロー・サービスJava APIリファレンスを参照してください。

34.1.7 ユーザー・メタデータ・サービス

ユーザー・メタデータ・サービスは、個々のユーザーおよびグループに固有のメタデータを管理するためのメソッドを提供します。これは、ユーザー・ワークリストのプリファレンスの取得と設定、ユーザーのカスタム・ビューの管理、およびユーザーとグループに対するヒューマン・ワークフロー・ルールの管理に使用されます。

ユーザー・メタデータ・サービスのほとんどのメソッドの場合、認証済ユーザーは独自のユーザー・メタデータを問い合せて更新できます。ただし、他のユーザーに属するメタデータは更新できません。

グループ・メタデータ(グループに対するヒューマン・ワークフロー・ルールなど)の場合、グループのメタデータを問い合せて更新できるのは、そのグループの所有者として指定されているユーザー(またはworkflow.admin権限ユーザー)のみです。ただし、workflow.admin権限があるユーザーは、任意のユーザーまたはグループのメタデータに対して問合せおよび更新を実行できます。

表34-7に、ユーザー・メタデータ・サービスのメソッドを示します。パッケージoracle.bpel.services.workflow.userは、ユーザー・メタデータ・サービスに対応しています。

表34-7 ユーザー・メタデータ・サービスのメソッド

メソッド

説明

createRule

新規ルールを作成します。

decreaseRulePriority

ルールの優先度を1つ低くします。このルールが最低優先度の場合、このメソッドでは何も実行されません。

deleteRule

ルールを削除します。

getVacationInfo

ユーザーに対してタスクを割り当てることができない日付の範囲(設定されている場合)を取得します。

getRuleDetail

特定のヒューマン・ワークフロー・ルールの詳細を取得します。

getRuleList

特定のユーザーまたはグループに対するルールのリストを取得します。

updateRule

既存のルールを更新します。

increaseRulePriority

ルールの優先度を1つ高くします。ユーザーまたはグループに対するルールは、優先度の順序付きリストで保守されます。高優先度のルール(リストの先頭に近いルール)は、低優先度のルールよりも先に実行されます。このルールが最高優先度の場合、このメソッドでは何も実行されません。

getUserTaskViewList

ユーザーが所有するユーザー・タスク・ビューのリストを取得します。

getGrantedTaskViewList

ユーザーに他のユーザーから権限付与されたユーザー・タスク・ビューのリストを取得します。ユーザーは付与されたビューを使用してタスクのリストを問合せできますが、ビュー定義は更新できません。

getStandardTaskViewList

ヒューマン・ワークフロー・サービスに付属している標準タスク・ビューのリストを取得します。このビューはすべてのユーザーが使用できます。

getUserTaskViewDetails

単一ビューの詳細を取得します。

createUserTaskView

新規のユーザー・タスク・ビューを作成します。

updateUserTaskView

既存のユーザー・タスク・ビューを更新します。

deleteUserTaskView

ユーザー・タスク・ビューを削除します。

updateGrantedTaskView

このユーザーに対する他のユーザーからのビュー権限付与の詳細を更新します。更新は、ビュー権限付与の非表示または非表示解除(非表示にしたビューは、Oracle BPM Worklistのメイン受信ボックス・ページに表示されません)、および権限を付与されたユーザーに表示されるビュー名および説明の変更に制限されています。

getUserPreferences

ユーザーのユーザー・プリファレンスのリストを取得します。ユーザー・プリファレンスは、単純な名前/値ペアの文字列です。ユーザー・プリファレンスはユーザーごとにプライベートです(ただし、workflow.admin権限があるユーザーも問い合せて更新できます)。

setUserPreferences

ユーザーのユーザー・プリファレンス値を設定します。前に格納されていて新規のユーザー・プリファレンス・リストに含まれていないプリファレンスは削除されます。

getPublicPreferences

ユーザーのパブリック・プリファレンスのリストを取得します。パブリック・プリファレンスは、ユーザー・プリファレンスに類似していますが、すべてのユーザーが問合せできます。ただし、パブリック・プリファレンスを更新できるのは、そのプリファレンスを所有しているユーザー、またはworkflow.admin権限のあるユーザーのみです。パブリック・プリファレンスは、アプリケーション単位のプリファレンスを格納する場合に役立ちます(プリファレンスはMyAppPrefsなどのダミー・ユーザー名で格納できます)。

setPublicPreferences

ユーザーのパブリック・プリファレンスを設定します。

setVacationInfo

ユーザーに対してタスクを割り当てることができない日付の範囲を設定します(Dynamic Assignment Functionでは、休暇中のユーザーにタスクが割り当てられることはありません)。

getStandardTaskViewDetails

viewIdで識別される特定の標準ビューに関する全詳細を取得します。

詳細は、次を参照してください。

- ルール構成ページとユーザー・プリファレンス・ページの詳細は第32章「Oracle BPM Worklistの使用」

- いくつかのAPIの例を示すサンプルのworkflow-118-JavaSamples

- Oracle Fusion Middleware Oracle SOA Suiteワークフロー・サービスJava APIリファレンス

34.1.8 タスク・レポート・サービス

タスク・レポート・サービスは、レポートを実行してその結果を受け取ります。表34-8に、その方法を示します。パッケージoracle.bpel.services.workflow.reportは、タスク・レポート・サービスに対応しています。表34-8に示す標準レポートは、インストールに含まれています。

表34-8 タスク・レポート・サービス

レポート

説明

不参加タスク・レポート

このレポートでは、ユーザーのグループまたは報告先のグループに割り当てられたタスクの中で、まだ獲得されていないために注意が必要なタスクが分析されます。

タスクの優先度レポート

このレポートでは、ユーザー、報告先またはそのグループに割り当てられたタスクの数が優先度別に分析されます。

タスクのサイクル・タイム・レポート

このレポートでは、ユーザーのグループまたは報告先のグループに基づいて、タスクの割当てから完了までの所要時間が分析されます。

タスクの生産性レポート

このレポートでは、ユーザー、報告先またはそのグループについて、特定期間中に割り当てられたタスク数と完了したタスク数が分析されます。

タスク時間分布レポート

このレポートでは、特定期間中に、特定のユーザー、ユーザーのグループまたは報告先がタスクを完了するのに要した時間が分析されます。

34.1.9 ランタイム構成サービス

ランタイム構成サービスは、タスク・サービスのランタイム環境で使用されるメタデータの管理メソッドを提供します。これは、主にタスク・ペイロード・マップ済属性マッピングとタスク詳細の表示に使用するURIの管理をサポートします。

タスク・サービスで使用されるタスク・オブジェクトには、多数のマップ済属性が含まれており、タスク・ペイロードからの情報を移入できます。これにより、タスク・ペイロード情報を問い合せ、タスク・リストに表示し、ヒューマン・ワークフロー・ルールに使用できます。

ランタイム構成サービスは、クライアント・アプリケーションにある特定タスク定義のインスタンスのタスク詳細を表示するURIの問合せおよび更新メソッドを提供します。どのようなタスク定義でも、複数URI表示がサポートされ、異なるURIは異なるアプリケーションに対して使用されます。メソッドgetTaskDisplayInfoにより、特定のタスク定義のURIを問い合せることができます。メソッドsetTaskDisplayInfoにより、新規のURIを定義したり、既存のURIを更新することができます。setTaskDisplayInfoをコールできるのは、workflow.admin権限があるユーザーのみですが、getTaskDisplayInfoは認証されたユーザーがコールできます。

ランタイム構成サービスを使用すると、管理者は単純なタスク・ペイロード属性とこれらのマップ済属性間のマッピングを作成できます。

パブリック・マップ済属性のペイロード・マッピングを更新できるのは、workflow.mapping.publicFlexFieldまたはworkflow.mapping.protectedFlexField権限があるユーザーのみです。保護されたマップ済属性のペイロード・マッピングを更新できるのは、workflow.mapping.protectedFlexField権限があるユーザーのみです。いずれの認証済ユーザーも、このサービスの問合せメソッドを使用できます。

管理者は、各種マップ済属性を表す属性ラベルを作成できます。これらの属性ラベルは、属性にわかりやすいラベルを提供します(たとえば、マップ済属性TextAttribute1を表すラベルLocationを作成できます)。特定のマップ済属性に複数のラベルを関連付けることができます。ユーザーがOracle BPM Worklistで特定のタスクの属性リストを表示すると、この属性ラベルが表示されます。特定のタスク・タイプの属性ラベルは、タスク・メタデータ・サービスのgetTaskAttributesForTaskDefinitionメソッドをコールして決定できます。

属性ラベルを定義する際は、サービスによって次のフィールドに値が自動的に移入されます。これらの属性の値を属性ラベルの作成時または更新時に指定する必要はありません。

- Id

- CreatedDate

- WorkflowType

- Active

パブリック・マップ済属性のタスク属性フィールドの有効値は、次のとおりです。

- TextAttribute1からTextAttribute20まで

- FormAttribute1からFormAttribute10まで

- UrlAttribute1からUrlAttribute10まで

- DateAttribute1からDateAttribute10まで

- NumberAttribute1からNumberAttribute10まで

その後、タスク・ペイロード・フィールドと属性ラベルとのマッピングを作成できます。たとえば、ペイロード・フィールドcustomerLocationを属性ラベルLocationにマップできます。様々なタスク・タイプで同じ属性ラベルを共有できます。これにより、同じ意味を持つ異なるタスク・タイプのペイロード属性を同じ属性ラベルにマップできます。

注意:

マップできるのは、単純XMLタイプのペイロード・フィールドのみです。

ランタイム構成サービスでは、次のメソッドも提供されます。

- サーバーでサポートされているDynamic Assignment Functionを問い合せるためのメソッド

- Oracle BPM Worklistおよび他のアプリケーションでのタスク詳細の表示に使用するタスク表示URLを管理するためのメソッド

- サーバーのHTTPおよびJNDI URLを取得するためのメソッド

表34-9に、ランタイム構成サービスのメソッドを示します。パッケージoracle.bpel.services.workflow.runtimeconfigは、ランタイム構成サービスに対応しています。

表34-9 ランタイム構成サービス

メソッド

説明

CreateAttributeLabel

特定のタスク・マップ済属性を表す新規の属性ラベルを作成します。

createPayloadMapping

属性ラベルとタスク・ペイロード・フィールド間の新規マッピングを作成します。

DeleteAttributeLabel

既存の属性ラベルを削除します。

deletePayloadMapping

既存のペイロード・マッピングを削除します。

getAttributeLabelUsages

ラベルが現在使用されているマッピング(存在する場合)の属性ラベル(すべての属性ラベル、または特定のタイプの属性ラベル)のリストを取得します。

getGroupDynamicAssignmentFunctions

このサーバーに実装されているグループを選択できるDynamic Assignment Functionのリストを返します。

getTaskDisplayInfo

具体的なタスク定義のタスク・インスタンス表示に使用されるURIに関連する情報を取得します。

getTaskStatus

特定のタスク定義やコンポジット・インスタンスに対応するタスク・インスタンスのステータスを取得します。

getUserDynamicAssignmentFunctions

このサーバーに実装されているユーザーを選択できるDynamic Assignment Functionのリストを返します。

GetWorkflowPayloadMappings

特定のヒューマン・ワークフロー定義に関するすべてのマップ済属性マッピングのリストを取得します。

setTaskDisplayInfo

具体的なタスク定義のタスク・インスタンス表示に使用されるURIに関連する情報を設定します。

updateAttributeLabel

既存の属性ラベルを更新します。

詳細は、次を参照してください。

- 詳細は、第34.3.1項「動的割当てパターンおよびタスク・エスカレーション・パターン」

- マップ済属性マッピングの詳細は第32章「Oracle BPM Worklistの使用」

- いくつかのAPIの例を示すサンプルのworkflow-118-JavaSamples

- Oracle Fusion Middleware Oracle SOA Suiteワークフロー・サービスJava APIリファレンス

34.1.9.1 属性ラベルの国際化

属性ラベルは、タスク・マップ済属性にわかりやすいラベルを添付するメソッドを提供します。ユーザーのロケールに適した言語に翻訳された属性ラベルを表示することが望ましい場合があります。

カスタム・リソース・バンドルを使用するには、ワークフロー構成パラメータworkflowCustomClasspathURLで識別される場所(ファイルまたはHTTPパス)にリソース・バンドルを配置します。

これは、Oracle Enterprise Manager Fusion Middleware Controlの次のいずれかの場所で設定できます。

- 「システムMBeanブラウザ」ページ

- 「ワークフロー・タスク・サービス・プロパティ」ページ

このパラメータを使用する方法の詳細は、サンプルのworkflow-110-workflowCustomizationsを参照してください。詳細は、Oracle SOA Suiteサンプルを参照してください。

マップ済属性ラベルのエントリには、次の書式を使用する必要があります。

FLEX_LABEL.[label name]=Label Display Name

たとえば、Locationというラベルのエントリは次のようになります。

FLEX_LABEL.Location=Location

これらのファイルに属性ラベルのエントリを追加するかどうかはオプションです。ファイルにエントリが存在しない場合は、APIを使用して指定した属性ラベルの名前がかわりに使用されます。

34.1.10 エビデンス・ストア・サービスとデジタル署名

エビデンス・ストア・サービスは、デジタル署名の保管とデジタル署名されたヒューマン・ワークフローの否認防止に使用します。デジタル署名は、メッセージ送信者や文書署名者のアイデンティティを認証する電子署名です。これにより、送られたメッセージや文書の元の内容が変更されていないことが保証されます。デジタル署名は転送可能で、他人に模倣されることがなく、自動的にタイムスタンプが付けられます。署名されたオリジナルのメッセージが届いたことを証明できるため、送信者が後で否認することはできません。デジタル署名は、ヒューマン・ワークフロー・ドキュメントが次の状態であることを保証します。

- 認証済であること

- 他のエンティティで捏造されていないこと

- 変更されていないこと

- 送信者が否認できないこと

暗号ベースのデジタル署名は、公開鍵のアルゴリズムによって送信者の秘密鍵付のメッセージが署名されたときに作成されます。

設計時、タスクに対して署名は有効です。Oracle BPM Worklistの実行時には、ユーザーがタスクを承認または却下すると、Webブラウザでは次の動作が発生します。

- 署名に使用する秘密鍵の選択をユーザーに要求します。

- 秘密鍵とOracle BPM Worklistから提供されたタスク・コンテンツを使用してデジタル署名を生成します。

図34-2に例を示します。

図34-2 デジタル署名と証明書

「図34-2 デジタル署名と証明書」の説明

注意:

- この証明書は、Personal Information Exchange Syntax Standard(PFX)ファイルを指しています。このファイルには証明書と秘密鍵が含まれており、シンプルなテキスト・パスワードで保護されています。PFXでは、ユーザーの秘密鍵、証明書、その他のシークレットなどを格納またはトランスポートするための移植形式が指定されます。

- 署名は証明書の公開鍵を介して検証できるため、データの署名には、その証明書の公開鍵に対応した秘密鍵の所有で十分です。ただし、証明書のユーザー名と証明書を更新するユーザーを関連付けることはありません。たとえば、ユーザーjsteinがユーザーcdickensの秘密鍵を所有する場合、jsteinはその秘密鍵を使用して署名できます。

次のデジタル署名の機能をサポートします。

- X.509証明書によるPKCS7署名

- ブラウザベースの、添付ファイルなしデジタル署名付コンテンツ

34.1.10.1 前提条件

デジタル署名と証明書を使用するための前提条件は、次のとおりです。

- Oracle BPM Worklistのユーザーは、証明書を持っている必要があります。

- 管理者は、証明書を信頼する必要があるCA、および対応するCRL URLを指定する必要があります。ユーザーは、これらのCAが発行した証明書のみをアップロードする必要があります。そのためには、Oracle Enterprise Manager Fusion Middleware Controlの「システムMBeanブラウザ」を編集します。

1. Oracle Enterprise Manager Fusion Middleware Controlにログインします。

2. ナビゲータで、「SOA」フォルダを開きます。

3. 「soa-infra」を右クリックし、「管理」→「システムMBeanブラウザ」の順に選択します。
ページの右側に「システムMBeanブラウザ」が表示されます。

4. 「アプリケーション定義のMBean」→「oracle.as.soainfra.config」→「サーバー: server_name」→「WorkflowConfig」→「human-workflow」の順に開きます。

5. ページの右側にある「操作」タブをクリックします。

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

7. 「caName」と「caURL」に値を指定します。これは、信頼するチェーンの各証明書に対して実行する必要があります。たとえば、表34-10に示すように、各起動に対して値を指定します。

表34-10 caNameとcaURLの値

caName

caURL

CN = Intg, OU =AppServ, O =Oracle, C = US

http://www.oracle.com/Integration%20CRL%20Data.crl

CN = Intg1, OU =AppServ, O =Oracle, C = US

http://www.oracleindia.in.com/Integration%20In.crl

CN = Intg2, OU =AppServ, O =Oracle, C = US

http://www.oracle.us.com/integration.crl

8. 「起動」をクリックします。

34.1.10.2 インタフェースとメソッド

表34-11から表34-14では、エビデンス・ストア・サービスのメソッドについて説明します。パッケージoracle.bpel.services.security.evidenceは、エビデンス・サービスに対応しています。

表34-11 ITaskEvidenceServiceインタフェース

メソッド

説明

createEvidence

エビデンスを作成し、否認防止のためにリポジトリに保管します。

getEvidence

特定の条件に一致するエビデンスのリストを取得します。結果は、サービスを問い合せるユーザーに関連付けられている権限によって異なります。ユーザーにworkflow.admin.evidenceStore権限(権限の付与方法を詳説した場所を指します)が付与されている場合は、一致するエビデンスはすべて参照可能です。それ以外の場合は、ユーザーが作成したエビデンスのみ参照可能です。

uploadCertificate

後で署名検証に使用する証明書をアップロードします。これが、特定の証明書を使用してエビデンスを作成するための前提条件です。ユーザーがアップロードできるのは、自分の証明書のみです。

updateEvidence

ステータスのCRL検証部分を更新します。これには、検証時間、ステータス、エラー・メッセージ(ある場合)が含まれます。

validateEvidenceSignature

エビデンス署名を検証します。基本的にエビデンスの否認防止チェックを実行します。署名が検証されると、trueの値が返されます。それ以外の場合は、falseが返されます。

表34-12 Evidenceインタフェース

メソッド

説明

getCertificate

このエビデンスの署名に使用する証明書を取得します。

getCreateDate

エビデンスの作成日付を取得します。

getErrorMessage

CRL検証に関連するエラー・メッセージを取得します。

getEvidenceId

エビデンスに関連する一意の識別子を取得します。

getPlainText

このエビデンスの一部として署名されたコンテンツを取得します。

getPolicy

エビデンスの署名ポリシーを取得します。PASSWORDまたはCERTIFICATEのいずれかです。

getSignature

エビデンスの署名を取得します。

getSignedDate

署名が作成された日付を取得します。

getStatus

CRL検証ステータスを取得します。これは、次の中のいずれか1つです:

- AVAILABLE: エビデンスはCRL検証に使用できます。

- FAILURE: CRL検証に失敗しました。

- SUCCESS: CRL検証に成功しました。

- UNAVAILABLE: CRLデータをフェッチできませんでした。

- WAIT: CRL検証の処理中です。

getTaskId

このエビデンスが関連付けられているタスクの一意の識別子を取得します。

getTaskNumber

このエビデンスが関連付けられているタスクのタスク番号を取得します。

getTaskPriority

このエビデンスが関連付けられているタスクのタスク優先度を取得します。

getTaskStatus

このエビデンスが関連付けられているタスクのタスク・ステータスを取得します。

getTaskSubStatus

このエビデンスが関連付けられているタスクのタスク・サブステータスを取得します。

getTaskTitle

このエビデンスが関連付けられているタスクのタイトルを取得します。

getTaskVersion

このエビデンスが関連付けられているタスクのバージョンを取得します。

getVerifiedDate

使用した証明書のCRL検証が実行された日付を取得します。

getWorkflowType

このエビデンスが関連付けられているタスクのワークフロー・タイプを取得します。通常はBPELWFです。

表34-13 Certificateインタフェース

メソッド

説明

getCA

証明書発行者の識別名(DN)を取得します。

getCertificate

インタフェースによって抽象化された証明書オブジェクトを取得します。

getID

証明書のシリアル・ナンバーを取得します。

getIdentityContext

この証明書をアップロードするユーザーに関連付けられているアイデンティティ・コンテキストを取得します。

getUserName

この証明書に関連付けられているユーザーの名前を取得します。

isValid

証明書がまだ有効であれば、trueを返します。

表34-14 Policy TypeとWorkflow Typeインタフェース

メソッド

説明

fromValue

文字列表現からオブジェクトを構成します。

value

このオブジェクトの文字列表現を返します。

詳細は、次を参照してください。

- ヒューマン・タスク・エディタでデジタル署名およびデジタル証明書を指定する方法の詳細は第29.9.2項「ワークフロー・デジタル署名ポリシーの指定方法」

- Oracle BPM Worklistのタスク・アクションへのデジタル署名の詳細は第30章「ヒューマン・タスク用のタスク・フォームの設計」

34.1.11 タスク・インスタンス属性

タスクは、ユーザーによる実行が必要な作業です。タスクを作成する場合は、そのタスクに参加して操作するユーザーを割り当てます。表34-15に、アプリケーションでよく使用され、解析されるタスク属性を示します。

表34-15 タスク属性

タスク属性名

説明

task/applicationContext

タスクに関連付けられたアプリケーション・ロール(割当て先、所有者など)が属するアプリケーション。

task/category

(オプション)タスクのカテゴリ。

task/creator

タスクの作成者の名前。

task/dueDate

タスクの期日。これはTo Doタスクで使用されます。

task/identificationKey

(オプション)タスクに対するカスタムの一意識別子。これは、標準のタスクIDとタスク番号に対する追加の一意識別子として設定できます。このキーを使用すると、タスクが作成されたビジネス・オブジェクトの識別子に基づいて、タスクを取得できます。

task/identityContext

ユーザーおよびグループがシードされているアイデンティティ・レルム。単一レルム環境では、デフォルトのレルムがデフォルト値になります。

task/ownerGroup

タスク・インスタンスを所有するグループ(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がグループの場合は、このフィールドが設定されます。

task/ownerRole

タスク・インスタンスを所有しているアプリケーション・ロール(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がアプリケーション・ロールの場合は、このフィールドが設定されます。

task/ownerUser

タスク・インスタンスを所有するユーザー(ある場合)。タスク所有者は、アプリケーション・ロール、ユーザーまたはグループのいずれかです。タスクの所有者がユーザーの場合は、このフィールドが設定されます。

task/payload

XMLとして取得されるタスク・ペイロード。

task/percentageComplete

タスクの完了パーセンテージ。これはTo Doタスクで使用されます。

task/priority

タスクの優先度を定義する整数。数値が低いほど優先度が高くなります。通常は、1から5の数値が使用されます。

task/startDate

タスクの開始日。これはTo Doタスクで使用されます。

task/subCategory

(オプション)タスクのサブカテゴリ。

task/taskDefinitionId

タスクをタスク・メタデータにバインドするタスク定義ID。タスクの開始時は、compositeDN/componentName文字列、または.taskファイルのtargetNamespaceのいずれかです。後者を使用する場合は、targetNamespaceに一致するアクティブなバージョンが使用されます。

task/taskDisplayUrl

タスク詳細の表示に使用するURL。

task/title

タスクのタイトル。

表34-16に、プロセス・メタデータ情報を取得する属性を示します。

表34-16 プロセス・メタデータ情報を取得する属性

属性

説明

task/processInfo/domain

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットが属するドメイン。

task/sca/applicationName

デプロイされるアプリケーション。

task/sca/componentName

タスク・インスタンスを定義するタスク・コンポーネントの名前。

task/sca/compositeDN

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットの特定のデプロイメントの一意名。

task/sca/compositeInstanceId

コンポジット・インスタンスID。

task/sca/compositeName

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットの名前。

task/sca/compositeVersion

タスク・インスタンスを定義するタスク・コンポーネントを含むコンポジットのバージョン。

表34-17に、添付ファイル関連の属性を示します。

表34-17 添付ファイル関連の属性

属性

説明

task/attachment/content

添付ファイルのコンテンツ。

task/attachment/mimeType

添付ファイルのMultipurpose Internet Mail Extension(MIME)タイプ。

task/attachment/name

添付ファイルの名前。

task/attachment/updatedBy

添付ファイルを更新したユーザー。

task/attachment/updatedDate

添付ファイルの更新日付。

task/attachment/URI

URI(添付ファイルがURIベースの場合)。

表34-18に、コメント関連の属性を示します。

表34-18 コメント関連の属性

属性

説明

task/userComment/comment

ユーザーのコメント。

task/userComment/updatedBy

コメントを追加したユーザー。

task/userComment/updatedDate

コメントが追加された日付。

表34-19に、ワークフロー・サービス・システムで操作される属性を示します。

表34-19 ワークフロー・サービス・システムで操作される属性

属性

説明

task/systemAttributes/acquiredBy

グループ、アプリケーション・ロールまたは複数のユーザーに割り当てられたタスクが、ユーザーによって申告された場合、このフィールドはタスクを申告したユーザーの名前に設定されます。

task/systemAttributes/approvers

タスクに対してカスタム・アクションを実行したユーザーのID。

task/systemAttributes/assignedDate

このタスクが割り当てられた日付。

task/systemAttributes/assignees

現在のタスク割当て先(ユーザー、グループまたはアプリケーション・ロール)。

task/systemAttributes/createdDate

タスク・インスタンスが作成された日付。

task/systemAttributes/customActions

タスクに対して実行できるカスタム・アクション。

task/systemAttributes/endDate

タスクの終了日。これはTo Doタスクで使用されます。

task/systemAttributes/expirationDate

タスク・インスタンスの有効期限の日付。

task/systemAttributes/fromUser

タスクを前に操作したユーザー。

task/systemAttributes/hasSubTasks

trueの場合は、サブタスクがあります。

task/systemAttributes/isGroup

trueの場合は、タスクがグループに割り当てられています。

task/systemAttributes/originalAssigneeUser

ユーザーが別のユーザーにタスクを委任している場合、このフィールドには、タスクを委任したユーザーの名前が移入されます。

task/systemAttributes/outcome

タスクの結果(承認済、却下済など)。このフィールドは、完了したタスク・インスタンスにのみ設定されます。

task/systemAttributes/parentTaskId

これは、再開されたタスクにのみ設定されます(再開される前のタスクのタスクID)。

task/systemAttributes/parentTaskVersion

これは、サブタスクにのみ設定されます。親タスクのバージョンを参照します。

task/systemAttributes/participantName

Oracle JDeveloperからモデリングされた参加者の論理名。

task/systemAttributes/reviewers

タスクのレビューア。これは、ユーザー、グループまたはアプリケーション・ロールです。

task/systemAttributes/rootTaskId

ルート・タスクのID。これは、ルート・タスクのタスクIDと同じです。

task/systemAttributes/stage

実行中のステージ名。

task/systemAttributes/state

タスク・インスタンスの現在の状態。

task/systemAttributes/substate

タスクの現在のサブ状態。

task/systemAttributes/subTaskGroupInstanceId

サブタスクに設定されている一意のID。これと同じIDが親タスクのtaskGroupInstanceIdに設定されます。これは、どの時点でどのサブタスクが作成されたかを識別するために必要です。

task/systemAttributes/systemActions

タスクに対して実行できるシステム・アクション(再割当て、エスカレートなど)。

task/systemAttributes/taskDefinitionName

タスク・インスタンスを定義するタスク・コンポーネントの名前。

task/systemAttributes/taskGroupId

直接の親タスクのID。サブタスクのみが設定されます。

task/systemAttributes/taskGroupInstanceId

親タスクに設定される一意のID。これと同じIDがサブタスクのsubTaskGroupInstanceIdに設定されます。これは、どの時点でどのサブタスクが作成されたかを識別するために必要です。

task/systemAttributes/taskId

タスクの一意のID。

task/systemAttributes/taskNamespace

このタスク・インスタンスを定義するタスク・コンポーネントの全バージョンを一意に定義するネームスペース。同じタスク・コンポーネントの異なるバージョンに同じネームスペースを指定することは可能ですが、異なる2つのタスク・コンポーネントに同じネームスペースを指定することはできません。

task/systemAttributes/taskNumber

タスク・インスタンスを一意に識別する整数。

task/systemAttributes/updatedBy

タスクを最後に更新したユーザー。

task/systemAttributes/updatedDate

このインスタンスが最後に更新された日付。

task/systemAttributes/version

タスクのバージョン。

task/systemAttributes/versionReason

バージョンが作成された理由。

task/systemAttributes/workflowPattern

実行されるパターン(パラレル、シリアル、FYI、単一など)。

表34-20にマップ済属性を示します。

表34-20 マップ済属性

属性

説明

task/systemMessageAttributes/*

マップ済属性です。

34.2 ヒューマン・ワークフローからの通知

通知は、タスクの状態が変化したことをユーザーに警告するために送信されます。通知は、電子メール、電話ボイス・メッセージ、インスタント・メッセージ(IM)、ショート・メッセージ・サービス(SMS)のいずれかのチャネルを通じて送信できます。通知はBPELプロセスのヒューマン・タスクから、または直接BPELプロセスから送信できます。

11g 以前のリリースでは、電子メール通知はヒューマン・ワークフロー電子メール通知レイヤーを通じて送信されていました。ボイスまたはSMSの通知は、オラクル社のホスティング通知サービスを通じて送信されていました。IM通知はサポートされていませんでした。

リリース11g 以降、ヒューマン・ワークフロー電子メール通知レイヤーはOracle User Messaging Serviceと連携し、タスクの状態が変化したことをユーザーに警告します。Oracle User Messaging Serviceでは、BPELプロセスまたはヒューマン・タスクから起動できる、電子メール、ボイス、IMまたはSMSのいずれかのチャネルを通じて通知を送信するための操作が公開されています。

Oracle User Messaging Serviceは次の機能をサポートしています。

- メッセージおよびステータスの送受信

- 特定のチャネルの指定したアドレスへの通知送信

- 一連のフェイルオーバー・アドレスへの通知送信

Oracle Fusion Middleware以外のアプリケーション・サーバーでは、電子メール通知に対してヒューマン・ワークフロー電子メール通知レイヤーを使用できます。

Oracle User Messaging Serviceの構成に関する詳細は、次を参照してください。

- 第17章「通知サービスの使用」

- 第XI部「Oracle User Messaging Serviceの使用」

- Oracle Enterprise Manager Fusion Middleware Controlで通知サービスの配信チャネルを構成する手順については、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

34.2.1 通知のコンテンツ

各電子メール通知には、次のパートを含めることができます。

- 通知メッセージ

- Oracle BPM WorklistからのHTMLコンテンツ
これは、タスクに関するOracle BPM Worklistの読取り専用ビューです。Oracle BPM Worklistからのコンテンツを含むように電子メール通知を構成する方法は、第30.7項「電子メール通知の作成」を参照してください。

- タスクの添付ファイル
通知にタスクの添付ファイルが含まれている場合です。

- アクション可能リンク

SMS、IMおよびボイスによる通知には、通知メッセージのみが含まれます。

通知メッセージは、静的なテキストと動的な値を含めることができるXPath式です。メッセージの作成時に動的な値に使用できるのは、タスクBPEL変数のみです。メッセージはBPELプロセスのコンテキスト外で評価されるため、この制限があります。また、タスク変数のペイロードでは、XPathツリー参照用のペイロードの型を含むために、強い型指定が使用されます。XPath拡張関数hwf:getNotificationProperty(propertyName)を使用すると、特定の通知のプロパティを取得できます。この関数は、対応する値に対して通知ごとに評価されます。propertyNameの値は、次のいずれかです。

- recipient
通知の受信者

- recipientDisplay
受信者の表示名

- taskAssignees
タスクの割当て先

- taskAssigneesDisplay
タスク割当て先の表示名

- locale
受信者のロケール

- taskId
通知対象となるタスクのID

- taskNumber
通知対象となるタスクの番号

- appLink
Oracle BPM Worklistのタスク詳細ページへのHTMLリンク

例34-4に、hwf:getNotificationPropertyとhwf:getTaskResourceBundleを使用する方法を示します。

例34-4 hwf:getNotificationPropertyとhwf:getTaskResourceBundleの使用

concat('Dear ', hwf:getNotificationProperty('recipientDisplay'), ' Task ',
/task:task/task:systemAttributes/task:taskNumber, ' is assigned to you. ',
hwf:getTaskResourceBundleString(/task:task/task:systemAttributes/task:taskId,
'CONGRATULATIONS', hwf:getNotificationProperty('locale')))

この場合、メッセージは次のようになります。

Dear Cooper, James Task 1111 is assigned to you. Congratulations

34.2.2 エラー・メッセージのサポート

ヒューマン・ワークフロー電子メール通知レイヤーは、介入が必要なエラーが発生した場合に管理者に警告するように、自動的に構成されます。エラー通知とエラー・レスポンス・メッセージは維持されます。

メッセージは、Oracle Enterprise Manager Fusion Middleware Controlで表示できます。

メッセージの表示の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

34.2.3 信頼性のサポート

Oracle User Messaging Serviceと連携するヒューマン・ワークフロー電子メール通知レイヤーでは、次の信頼性をサポートしています。

- 次の場合、メッセージは紛失しません。

- ヒューマン・ワークフローからのメッセージ受信を確認した後で、ヒューマン・ワークフロー電子メール通知レイヤーで障害が発生した場合。

- Oracle User Messaging Serviceがヒューマン・ワークフローからのメッセージ受信を確認する前に、ヒューマン・ワークフロー電子メール通知レイヤーとOracle User Messaging Serviceの両方で障害が発生した場合。

- Oracle User Messaging Serviceが停止した場合。メッセージ配信は成功するまで再試行されます。

- 通知チャネルが停止した場合。

- 通知が配信できない場合は3回再試行され、そのアドレスが無効としてマークされます。また、そのアドレスは不正アドレス・リストに追加されます。必要な場合は、Oracle Enterprise Manager Fusion Middleware Controlで不正アドレス・リストからアドレスを手動で削除できます。発信通知は、アドレスが訂正されるまで再送信されません。不適切に識別されるのを防ぐために、アドレスが無効とマークされるのは約1時間のみです。この時間内に、新規の通知が送信されることはありません。

- スパム・メール発信者として識別されているアドレスからの受信通知レスポンスは無視されます。

- 受信通知メッセージは維持されます。

- 通知配信失敗を示す受信通知レスポンス(ホスト不明メールなど)は無視されません。かわりに修正処理(不正アドレス・リストの更新など)が自動的に実行されます。

- 受信通知レスポンスは、通知ステータスを示す確認が送信者に送られるように構成できます。

- 受信通知レスポンスの検証は、受信通知メッセージと送信通知メッセージを関連付けて実行されます。

通知の詳細は、次を参照してください。

- 第17章「通知サービスの使用」

- Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド

34.2.4 Oracle Human Workflow通知サービスの管理

管理者は、次の管理タスクをOracle Enterprise Manager Fusion Middleware Controlから実行できます。

- 失敗した通知や誤りのある受信通知レスポンスを表示し、修正処理を実行します。

- 送信通知とアドレスの削除、再送信、編集などの修正処理を実行します。

- 受信通知レスポンスについて、不正な電子メールを表示して電子メール・アドレスをブロックします。

- 不正な電子メール・アドレスのリストを管理します。

- 失敗した通知のランタイム・データにアクセスします。このデータは、不要になった場合消去できます。

詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。

34.2.5 通知チャネル・プリファレンスの構成方法

通知チャネル・プリファレンスを構成する手順は、次のとおりです。

1. Oracle JDeveloperで、電子メールおよび他のチャネル用の通知サービスを構成します。詳細は、第17章「通知サービスの使用」を参照してください。

2. Oracle JDeveloperで、ヒューマン・タスク・エディタを開きます。
タスク通知は、ヒューマン・タスク・エディタでタスクを作成するときに構成できます。異なるアクションについて、様々なタイプの参加者に通知を送信できます。

タスク通知が送信可能なアクションについては、第29.8.1項「受信者へのタスク・ステータス変更の通知方法」を参照してください。

通知は、様々な範囲でタスクに関与するユーザーに送信できます。これらのユーザーについては、第29.8.1項「受信者へのタスク・ステータス変更の通知方法」を参照してください。

タスクがグループに割り当てられていて、そのグループに通知エンドポイントが設定されていない場合は、グループの各ユーザーに通知が送信されます。

詳細は、次を参照してください。

- 第17章「通知サービスの使用」

- ヒューマン・タスク・エディタでタスク通知を構成するには、第29.8項「参加者通知プリファレンスの指定」を参照

- 通知チャネルの構成の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照

3. Oracle Enterprise Manager Fusion Middleware Controlのメッセージング・サーバー・ページから、適切なチャネル(電子メールなど)を構成します。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

4. Oracle Enterprise Manager Fusion Middleware Controlの「ワークフロー通知プロパティ」ページから、すべてのチャネルまたは電子メールに、通知サービスの通知モード・パラメータを構成します。
この値は、デフォルトで「なし」に設定されています。これは、通知が送信されないことを意味します。可能な値は次のとおりです。

- ALL
電子メール、IM、SMSおよびボイスのチャネルを構成し、任意のチャネルを通じて通知を送信します。

- EMAIL
通知メッセージ送信に、電子メール・チャネルのみが構成されます。

- NONE
通知メッセージの送信用にどのチャネルも構成されません。これがデフォルトの設定です。

34.2.6 異なる言語による通知メッセージの構成方法

通知は、複数のソースから生成され多様に国際化された4つのタイプのデータで構成されます。ただし、国際化されたすべての通知のロケールは、アイデンティティ・サービスのBPMUserオブジェクトから取得されます。

- パッケージ済の文字列(アクション・リンク、コメント、Oracle BPM Worklistなど)
これらの文字列は、次のパッケージの一部として製品に国際化されています。

oracle.bpel.services.workflow.resource

ユーザーのロケールは適切なメッセージの取得に使用します。

- タスク詳細添付
ユーザーのロケールはタスク詳細HTMLコンテンツの取得に使用します。

- タスクの結果文字列(承認、却下など)
ヒューマン・タスク・エディタの「詳細設定」セクションでタスク定義がモデリングされると、結果のリソース・バンドルが指定されます。リソース・バンドルの各結果のキーは結果の名前そのものです。

- 通知メッセージ

様々な言語で通知メッセージを構成する手順は、次のとおりです。

1. 次の方法のいずれかを使用して、通知コンテンツのメッセージを国際化します。

1. タスク定義の際に指定したリソース・バンドル中の値を使用するには、次のXPath拡張関数を使用します。

hwf:getTaskResourceBundleString(taskId, key, locale?)

この関数は、タスク定義で指定されたリソース・バンドルから、国際化された文字列を返します。

通知受信者ロケールは、次の関数によって取得できます。

hwf:getNotificationProperty('locale')

通知に対応するタスクIDは、次の関数によって取得できます。

hwf:getNotificationProperty('taskId')

2. 異なるリソース・バンドルが使用されている場合は、次のXPath拡張関数を使用してローカライズされたメッセージを取得します。

orcl:get-localized-string()

詳細は、第29.6.2項「多言語設定の指定方法」を参照してください。

34.2.7 アクション可能なメッセージの送信方法

アクション可能なメッセージの送信方法は数種類あります。この項では、手順の概要について説明します。

注意:

タスクに対してデジタル署名が有効な場合、アクション可能な電子メールは実行時に送信されません。設計時にアクション可能な電子メールが有効化された場合も同様です。

34.2.7.1 ヒューマン・タスクのアクション可能な電子メールの送信方法

アクション可能な電子メールを使用できるようにタスクを設定している場合は、電子メールを介してタスク・アクションを実行できます(同じアクションをOracle BPM Worklistからも実行できます)。アクション可能な電子メール・アカウントは、タスク・アクション関連の電子メールを受信して処理します。

ヒューマン・タスクのアクション可能な電子メールを送信する手順は、次のとおりです。

1. ヒューマン・タスク・エディタの「通知」セクションの「詳細」タブで、「通知をアクション可能にする」を選択して、電子メール通知をアクション可能にします。このアクションにより、電子メールを介してタスク・アクションを実行できます。
通知がアクション可能な場合、電子メールにはカスタムの結果ごとにリンクが含まれます。

2. 通知メッセージでタスクの添付ファイルを送信するには、「電子メール通知によるタスクの添付ファイルの送信」を選択します。
アクション可能な電子メールが到着した後に、次のタスクを実行します。

3. 「承認」リンクをクリックし、新規の電子メール・ウィンドウを起動します。このウィンドウには、承認データが表示されます。図34-3に詳細を示します。

図34-3 アクション可能な通知

「図34-3 アクション可能な通知」の説明

4. 承認メールの「コメント」セクションにコメントを追加します。例:

This contract has been approved based on the attached information.

5. 図34-4に示すように、必要に応じて添付ファイルを追加します。

図34-4 アクション可能な電子メールへの添付ファイル

「図34-4 アクション可能な電子メールへの添付ファイル」の説明

6. この電子メールの件名や本文など、何も変更しないでください。NID部分文字列を含むコンテンツを変更すると、電子メールは処理されません。

7. 「送信」をクリックします。

8. Oracle Enterprise Manager Fusion Middleware Controlの「Oracle User Messaging Service」セクションから、受信サーバー、送信メール・サーバー、送信ユーザー名とパスワードなどのプロパティを設定します。

9. Oracle Enterprise Manager Fusion Middleware Controlの「ワークフロー通知プロパティ」ページで、通知モードを「すべて」または「電子メール」に設定します。

10. Oracle Enterprise Manager Fusion Middleware Controlの「ワークフロー・タスク・サービス・プロパティ」ページで、アクション可能な電子メールのアカウント名を設定します。

Oracle Enterprise Manager Fusion Middleware Controlの「Oracle User Messaging Service」セクション、「ワークフロー通知プロパティ」ページおよび「ワークフロー・タスク・サービス・プロパティ」ページの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

34.2.8 インバウンドおよびアウトバウンド添付ファイルの送信方法

「添付ファイルを含む」フラグが選択されている場合は、電子メールのみが送信されます。電子メールには、タスクのすべての添付ファイルが電子メール添付ファイルとして含まれます。

インバウンドおよびアウトバウンド添付ファイルを送信する手順は、次のとおりです。

1. ヒューマン・タスク・エディタの「通知」セクションの「詳細」タブで、「電子メール通知によるタスクの添付ファイルの送信」を選択します。
アクション可能な電子メール・リプライでは、電子メールに添付ファイルを追加できます。これらの添付ファイルはタスクの添付ファイルとして追加されます。

詳細は、第29.8.7項「電子メール・メッセージをアクション可能にする方法」を参照してください。

34.2.9 インバウンド・コメントの送信方法

インバウンド・コメントを送信する手順は、次のとおりです。

1. アクション可能な電子メール・リプライでは、図34-3に示すとおり、Comments[['と']]の間にコメントを追加します。これらのコンテンツはタスクのコメントとして追加されます。たとえばComments[[looks good]]とします。

34.2.10 セキュアな通知の送信方法

セキュアな通知を送信する手順は、次のとおりです。

1. ヒューマン・タスク・エディタの「通知」セクションの「詳細」タブで、「通知のセキュア化(詳細を除く)」を選択します。これにより、デフォルトの通知メッセージを使用できます。この場合、通知メッセージにはタスクのコンテンツは含まれません。また、この通知はアクション可能ではありません。デフォルトの通知メッセージには、Oracle BPM Worklist内のタスクへのリンクが含まれています。タスク詳細を参照するにはログインする必要があります。
詳細は、第29.8.5項「詳細を除く通知をセキュア化する方法」を参照してください。

34.2.11 通知に使用されるチャネルの設定方法

通知に使用されるチャネルを設定する手順は、次のとおりです。

1. Oracle BPM Worklistのプリファレンス・ユーザー・インタフェースを使用して優先通知チャネルを設定します。チャネルは、通知を送信する前にユーザー・プリファレンス・ストアに問い合せることで、動的に決定されます。ユーザー・プリファレンスが指定されていない場合は、電子メールのチャネルが使用されます。
Oracle Delegated Administration Serviceの詳細は、『Oracle Fusion Middleware Guide to Delegated Administration for Oracle Identity Management』を参照してください。

34.2.12 リマインダの送信方法

タスクは、リマインダを送信するように構成できます。リマインダは、タスクがユーザーに割り当てられた時刻またはタスクの有効期限が切れる時刻に基づいています。リマインダの数およびリマインダ間の間隔も構成可能です。タスクがASSIGNEDとしてマークされている場合、リマインダに使用されるメッセージはASSIGNEESに対するメッセージです。

リマインダを送信する手順は、次のとおりです。

1. ヒューマン・タスク・エディタの「通知」セクションの「詳細」タブで、リマインダを設定します。リマインダ構成に関連するパラメータは、次のとおりです。

- Recurrence:
リマインダの送信回数を指定します。recurrenceに使用可能な値は、EVERY、NEVER、0、1、2 …、10です。

- RelativeDate:
タスクの割当て日または有効期限日のどちらからリマインダ期間を相対的に計算するかを指定します。relativeDateに使用可能な値は、ASSIGNED、EXPIRATIONおよびBEFORE DUE DATEです。「要求されたアクションの期日」オプション(以前のリリースでは「期間を使用」と呼ばれていたオプション)を使用するために、タスクのエスカレーションおよび有効期限ポリシーを変更した場合、Oracle JDeveloperには最終的な値が表示されます。

- Duration:
relativeDateからの、最初のリマインダとそれ以降の各リマインダの期間を指定します。期間のデータ型は、xsd:durationであり、その書式はISO 8601によりPnYnMnDTnHnMnSという形式で定義されています。大文字はデリミタであり、対応するメンバーを使用しない場合は省略できます。この例には、PT1004199059S、PT130S、PT2M10S、P1DT2S、-P1Y、P1Y2M3DT5H20M30.123Sなどがあります。

次の例で、リマインダが送信されるタイミングを具体的に説明します。

- relativeDateがASSIGNED、recurrenceがEVERY、およびリマインダの期間がPT1Dであるとします。タスクが2005年3月24日午前10:00に割り当てられた場合、リマインダは2005年3月25日午前10:00、2005年3月26日午前10:00、2005年3月27日午前10:00に送信され、さらにユーザーがタスクに対するアクションを実行するまで続きます。

- relativeDateがEXPIRATION、recurrenceが2、およびリマインダ期間がPT1Dであるとします。タスクの有効期限切れが2005年3月26日午前10:00で、タスクが2005年3月24日午前10:00より前に割り当てられた場合、リマインダは2005年3月24日午前10:00と2005年3月25日午前10:00に送信されます。

- relativeDateがEXPIRATION、recurrenceが2、およびリマインダ期間がPT1Dであるとします。タスクの有効期限切れが2005年3月26日午前10:00で、タスクが2005年3月24日午後3:00に割り当てられた場合、リマインダは2005年3月25日午前10:00の1回のみ送信されます。

詳細は、第29.8.3項「リマインダの設定方法」を参照してください。

34.2.13 未処理メッセージに対する自動返信の設定方法

システム・エラー、例外エラー、ユーザー・エラーなどのために、受信メッセージを処理できない場合、ヒューマン・ワークフロー通知サービスは自動返信メッセージを送信します。グローバル・リソース・バンドル内のこれらのメッセージに対するテキストは変更できます。例34-5にWorkflowLabels.propertiesファイルを示します。詳細は、第34.5.2項「グローバル・リソース・バンドル - WorkflowLabels.properties」を参照してください。

例34-5 WorkflowLabels.properties

# String to be prefixed to all auto reply messages
AUTO_REPLY_PREFIX_MESSAGE=Oracle Human Workflow Service
# String to be sufixed to all auto reply mesages
AUTO_REPLY_SUFFIX_MESSAGE=This message was automatically generated by Human \
Workflow Mailer. Do not reply to this mail.

# Message indicating closed status of a notified task
TaskClosed=You earlier received the notification shown below. That notification \
is now closed, and no longer requires your response. You may \
simply delete it along with this message.

# Message indicating that notification was "replied" to instead of "responded" by
# using the response link.
EMailRepliedNotification=The message you sent appeared to be a reply to a \
notification. To respond to a notification, use the \
response link that was included with your notification.

#
EMailUnSolicited= The message you sent did not appear to be in response to a \
notification. If you are responding to a notification        \
Use the response link that was included with your notification.

EMailUnknownContent= The message you sent did not appear to be in response to a \
notification. If you are responding to a notification,      \
Use the response link that was included with your notification.

ResponseNotProcessed=Your response to notification could not be processed. \
Log in to worklist application for more details.

ResponseProcessed=Your response to notification was successfully processed.

34.2.14 カスタム通知ヘッダーの作成方法

タスク参加者が複数の通知チャネルにアクセスする可能性もあります。カスタム通知ヘッダーを使用すると、このような参加者のタイプが通知を受信する優先チャネルとして単一のチャネルを指定できます。

カスタム通知ヘッダーを作成する手順は、次のとおりです。

1. ヒューマン・タスク・エディタの「通知」セクションの「詳細」タブの「通知ヘッダーの属性」セクションで、使用する優先通知チャネル(ボイス、SMSなど)を指定するカスタム通知ヘッダーを作成します。ヒューマン・ワークフロー電子メール通知レイヤーは、これらのヘッダー値をOracle User Messaging Serviceのルールベース通知サービスに提供します。
たとえば、「名前」フィールドをdeliveryTypeに設定し、「値」フィールドをSMSに設定します。

ルールベースの通知サービスは、使用する優先通知チャネルを特定する目的のみに使用されます。優先チャネルのアドレスは、Oracle Identity Managementから取得されます。通知メッセージは、両方のサービスによって提供される情報から作成されます。

詳細は、次を参照してください。

- 第29.8.8項「電子メール通知によるタスクの添付ファイルの送信方法」

- 第67章「ユーザー・メッセージング・プリファレンス」

34.3 割当てサービスの構成

この項では、Dynamic Assignment Functionを使用した割当てサービスの構成方法について説明します。この項の内容は、次のとおりです。

- 第34.3.1項「動的割当てパターンおよびタスク・エスカレーション・パターン」

- 第34.3.2項「割当てサービスによるタスク参加者の動的割当て」

- 第34.3.3項「カスタム・エスカレーション関数」

34.3.1 動的割当てパターンおよびタスク・エスカレーション・パターン

タスクがグループ、アプリケーション・ロールまたはユーザー・リストに割り当てられると、単一のユーザーは、操作対象のタスクを申告する必要があります。ただし、様々なディスパッチ・メカニズムを使用すると、ユーザーに作業を自動的に送信できます。

自動タスク・ディスパッチは、動的割当てパターンを介して実行されます。動的割当てパターンでは、グループまたはユーザーやグループのリストから、特定のユーザーまたはグループが選択されます。同様に、タスクがエスカレートされる場合、タスク・エスカレーション・パターンを使用して、タスクのエスカレート先となるユーザーを決定できます。組込みパターンがいくつか用意されています。ただし、動的割当ておよびタスク・エスカレーション用の独自のパターンを作成して、ワークフロー・サービスに登録することもできます。表34-21に、組込みの3つの動的割当てパターンと1つのタスク・エスカレーション・パターンを示します。

表34-21 動的割当てパターン

割当てパターン

タイプ

説明

LEAST_BUSY

動的割当て

現在割り当てられているタスク数が最も少ないユーザーまたはグループを選択します。

MOST_PRODUCTIVE

動的割当て

特定の期間(デフォルトでは過去7日間)に最も多くのタスクを完了したユーザーまたはグループを選択します。

ROUND_ROBIN

動的割当て

各ユーザーまたはグループを順番に選択します。

MANAGERS_MANAGER

タスク・エスカレーション

マネージャのマネージャを選択します。

これらのパターンではいずれもユーザーの休暇ステータスがチェックされます。現在割当てできないユーザーにタスクが自動的に割り当てられることはありません。

第29.4.3項「単一参加者タイプの構成方法」に示すように、タスク参加者を定義する場合には動的割当てパターンを使用できます。第32.7.2項「グループ・ルールの作成方法」に示すように、これらをタスク割当てルールとともに使用すると、エンド・ユーザーは、管理するグループのメンバーに対してタスクの動的割当てを指定できるようになります。

動的割当てパターンは、タスク定義の任意のXpath式でXpath関数を使用してコールすることもできます。

関数のシグネチャは次のとおりです。

hwf:dynamicTaskAssign(patternName, participants, inputParticipantType,
targetAssigneeType, isGlobal, invocationContext, parameter1, parameter2, ...,
parameterN)

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

- patternName: 必須。使用するパターンの名前。

- participants: 必須。割当て先として選択される参加者(複数可)。参加者名や参加者名のカンマ区切りリストを含む文字列または要素にするか、あるいは参加者名や参加者名のカンマ区切りリストを含む一連の要素にすることができます。参加者のタイプはすべて同じである必要があります。

- inputParticipantType: 必須。入力する参加者のタイプ(user、groupまたはapplication_role)。

- targetAssigneeType: 必須。選択する割当て先のタイプ(user、groupまたはapplication_role)。値は、関数が使用されているコンテキストと一致する必要があります(たとえば、所有者ユーザーを動的に選択する場合にはuserである必要があります)。inputParticipantTypeがuserである場合、ここで有効な値はuserのみです。

- isGlobal: パターンの評価にすべてのタイプのタスクを使用するか、または同じタイプのタスクのみを現在のタスクとして使用するかを示すブール値。オプション(デフォルトはfalseです)。

- invocationContext: この関数が使用されている場所を一意に識別する文字列。指定しない場合は、デフォルトのコンテキストが割り当てられます。

- parameterN: 一部の動的割当てパターンではパラメータを指定できます。パラメータ値は、=文字をデリミタとして使用し、名前/値ペアとして指定できます(TIME_PERIOD=7など)。

使用例:

hwf:dynamicTaskAssign(“LEAST_BUSY”,”jcooper,jstein,mtwain”,”user”,”user”,”true”,”ErrorAssignee”)

hwf:dynamicTaskAssign(“MOST_PRODUCTIVE”,task:task/task:payload/task:users,”user”,”user”,”false”,”OwnerUser”,”TIME_PERIOD=7”)

hwf:dynamicTaskAssign(“LEAST_BUSY”,”DeveloperRole”,”application_role”,”group”):

11g リリース1 (11.1.1.7)より前は、XPath関数wfDynamicUserAssignおよびwfDynamicGroupAssignを使用して動的割当てを実行できました。これらのXPath関数は、11g リリース1 (11.1.1.7)では非推奨です。引き続き使用は可能ですが、これらのXPath関数の既存の使用をすべて新しいdynamicTaskAssign関数に移行することをお薦めします。

34.3.1.1 動的割当てパターンの実装方法

次の手順に従って、独自の動的割当てパターンを実装します。

動的割当てパターンを実装する手順は、次のとおりです。

次のインタフェースを実装するJavaクラスを記述します。

oracle.bpel.services.workflow.assignment.dynamic.IDynamicAssignmentPattern

メソッドgetAssigneeFromParticipantListを実装することにより、(すべて同じタイプの)参加者リストから単一の割当て先を選択するためのサポートを、実装で提供する必要があります。

実装により、すべての割当て先タイプがサポートされる必要はありません。インタフェースでメソッドgetSupportedAssigneeTypeを使用することにより、実装時に、サポートする割当て先のタイプを指定できます。

実装で選択基準を指定する入力パラメータを受け入れると、Dynamic Assignment Frameworkがこれらの入力パラメータを検証し、実装はそのパラメータ(ある場合)をメソッドgetPatternParameters()で定義できます。

実装では、実装の初期化時にフレームワークによって設定される初期化パラメータを受け入れることができます。パラメータ値は(configMBeanを使用するか、またはOracle Enterprise Manager Fusion Middleware Controlでのヒューマン・ワークフロー・サービス・エンジン構成によって)ヒューマン・ワークフロー構成で定義されており、ここに動的割当てパターンが登録されます。

便宜上、フレームワークでは、一部の共通機能を実装するクラスAbstractDynamicAssignmentPatternが提供されています。割当てパターンの実装により、この抽象クラスを拡張して、一部のパラメータおよびローカライズ・サポートの実装を保存できます。

11g リリース1 (11.1.1.7)より前は、カスタムの動的割当てパターンは次のインタフェースのいずれかまたは両方を使用して実装されていました。

oracle.bpel.services.workflow.assignment.dynamic.IDynamicGroupAssignmentFunction
oracle.bpel.services.workflow.assignment.dynamic.IDynamicUserAssignmentFunction

これらのインタフェースは新しいIDynamicAssingmentPatternインタフェースで使用可能なすべての機能を備えているわけではなく、非推奨です。Dynamic Assignment Frameworkは、古いインタフェースを使用する実装との下位互換性を維持していますが、新しいインタフェースの使用が必要なすべての実装を移行することをお薦めします。

動的割当てのインタフェースとユーティリティに関するJavadocの詳細は、『Oracle Fusion Middleware Workflow Services Java API Reference for Oracle BPEL Process Manager』を参照してください。

34.3.1.2 動的割当てパターンの構成方法

動的割当てパターンは、Oracle Enterprise Manager Fusion Middleware Controlで他のヒューマン・ワークフロー構成パラメータとともに構成します。

動的割当てには、それぞれ次の2つの必須パラメータがあります。

- name:
パターンの名前

- classpath:
パターンを実装するクラスの完全修飾クラス名

また、各パターンには、任意の数のプロパティをオプションで指定できます。これらのプロパティは単純な名前/値ペアで、初期化パラメータとしてパターンに渡されます。

これらのタグで指定したプロパティ値は、動的割当てパターンのsetInitParametersメソッドに(name属性の値で索引付けされた)マップとして渡されます。

組込みパターンのうち2つには、初期化パラメータが含まれています。この種の関数は次のとおりです。

- ROUND_ROBIN
MAX_MAP_SIZEパラメータは、パターンがROUND_ROBINカウントを維持できる一連のユーザーまたはグループの最大数を指定します。動的割当てパターンでは、ROUND_ROBINパターンを実行するように要求される各グループ(またはユーザーとグループのリスト)について、ユーザーとグループのリストがメモリーに保持されます。

- MOST_PRODUCTIVE
DEAFULT_TIME_PERIODパラメータは、ユーザーの生産性を計算する期間(日数)を指定します。この値は、MOST_PRODUCTIVE動的割当てパターンをコールするときに上書きできます。

Oracle Enterprise Manager Fusion Middleware ControlからのDynamic Assignment Functionの構成の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

34.3.1.3 動的割当てパターンの表示名の構成方法

ランタイム構成サービスには、使用可能なユーザーとグループの動的割当てパターンのリストを返すメソッドが用意されています。これらのパターンは、パターンの名前、およびパターンとそのパラメータに対するユーザーが表示可能なラベルと説明の両方を返します。このパターンでは表示名のローカライズがサポートされるため、コンテキスト・ユーザーには適切な言語で表示されます。Oracle BPM WorklistおよびJDeveloperのヒューマン・タスク・エディタでは、これらのパターンを使用して、使用可能な動的割当てパターンのリストを表示します。

Dynamic Assignment Frameworkでは、パターン実装で、パターンとそのパラメータに対する判読可能な表示名と説明が表示されるようにするメソッドが提供されています。

組込みパターン実装、およびAbstractDynamicPatternクラスを拡張するカスタム実装では、WorkflowLabels.propertiesリソース・バンドル・ファイルを使用して、これらの表示文字列を構成します。

動的割当てパターンの表示名を構成する手順は、次のとおりです。

エントリをリソース・プロパティ・ファイルWorkflowLabels.propertiesに追加し、関連リソース・プロパティ・ファイルを他の言語で追加して、動的割当てパターンとそのパラメータの表示名と説明(および適切なトランスレーション)を指定します。このファイルは、次のパスにある、ワークフロー構成パラメータworkflowCustomizationsClasspathURL識別されるクラスパス内に配置されている必要があります。

oracle/bpel/services/workflow/resource/WorkflowLabels.properties

動的割当てパターンのエントリは、次の形式である必要があります。

DYN_ASSIGN_FN.[pattern name]=Pattern Display Name

DYN_ASSIGN_DESCR.[pattern name]=Function Description

DYN_ASSIGN_PARAM_LABEL.[pattern name].[parameter name]=Parameter Display Name

DYN_ASSIGN_PARAM_LABEL.[pattern name].[parameter name]=Parameter Description

たとえば、MOST_PRODUCTIVEパターンのエントリは、次のとおりです。

DYN_ASSIGN_FN.MOST_PRODUCTIVE = Most Productive

DYN_ASSIGN_DESCR.MOST_PRODUCTIVE = Picks the user, group or application role that
has completed the highest number of tasks within a certain time period. For group
and application roles the total number of tasks completed by all the users who
are direct members of that group or role are counted. The time period to use can
be specified using the Time Period parameter. If no time period is specified,
then the default value specified in the dynamic assignment configuration for the
instance is used.

DYN_ASSIGN_PARAM_LABEL.MOST_PRODUCTIVE.TIME_PERIOD = Time Period

DYN_ASSIGN_PARAM_DESCR.MOST_PRODUCTIVE.TIME_PERIOD = The previous number of days
over which to count the number of completed tasks. If not specified, the default
value defined in the human workflow dynamic assignment configuration is used.

これらのファイルに動的割当てパターンのエントリを追加するかどうかはオプションです。ファイルにエントリが存在しない場合は、かわりに関数名(ROUND_ROBINなど)が使用されます。

WorkflowLabels.propertiesファイルの詳細は、Oracle SOA Suiteサンプルで使用可能なworkflow-110-workflowCustomizationsのサンプルを参照してください。

34.3.1.4 タスク・エスカレーション・パターンの実装方法

タスク・エスカレーション関数は動的割当てパターンに非常に類似していますが、異なる関数を実行します(エスカレート時のタスクの割当て先を決定します)。カスタム実装は、異なるインタフェース(IDynamicTaskEscaltionPattern)を実装している必要があります。

34.3.2 割当てサービスによるタスク参加者の動的割当て

ヒューマン・ワークフロー参加者は、ルーティング・スリップで宣言的に指定されます。ルーティング・スリップでは、参加者およびヒューマン・ワークフローへの参加方法(管理チェーン階層、承認者のシリアル・リストなど)を指定することでヒューマン・ワークフローの進行方法を決定します。

ヒューマン・タスク・エディタでは様々な組込みパターンを使用して、ルーティング・スリップを宣言的に作成できます。さらに、ビジネス・ルールに基づいた拡張ルーティングを使用して、より複雑にルーティングできます。ただし、カスタム・ロジックを使用してより高度なルーティングを作成するには、カスタム割当てサービスを実装してルーティングします。

このような動的割当てをサポートするために、割当てサービスが使用されます。割当てサービスは、タスク割当て先の決定を担当します。独自の割当てサービスを実装し、その実装をプラグイン接続して特定のヒューマン・ワークフローで使用することもできます。

割当てサービスにより、ヒューマン・ワークフローの次のタスク割当て詳細が決定されます。

- タスク開始時の割当て。

- タスク再開始時の割当て。

- ユーザーがタスクの結果を更新するときの割当て。タスクの結果が更新された場合、そのタスクは他のユーザーにルーティングするか完了にできます。

- タスク情報のリクエスト元の割当て先。

- タスクでOracle BPM Worklistからの再承認をサポートしている場合、ユーザーは再承認のための情報をリクエストできます。

- 再承認がサポートされている場合にタスクを再承認するユーザー。

ヒューマン・ワークフロー・サービスでは、特定のタスクについて割当てサービスが識別されて起動され、タスク割当てが決定されます。

たとえば、単純割当てサービスの繰返しは次のとおりです。

1. クライアントが、割当てサービスによりルーティングが決定される経費承認タスクを開始します。

2. 割当てサービスが、タスク割当て先をjcooperであると決定します。

3. jcooperがタスクを承認すると、割当てサービスがタスクをjsteinに割り当てます。また、割当てサービスはタスク作成者であるjlondonに必ず通知を送信するように指定します。

4. jsteinがタスクを承認し、割当てサービスは他にタスクの割当て先ユーザーがいないことを示します。

34.3.2.1 割当てサービスの実装方法

割当てサービスを実装する手順は、次のとおりです。

1. 割当てサービスは、IAssignmentServiceインタフェースを使用して実装します。ヒューマン・ワークフロー・サービスは、次の情報を割当てサービスに渡してタスク割当てを決定します。

- タスク・ドキュメント
ヒューマン・ワークフローで実行されるタスク・ドキュメント。タスク・ドキュメントには、ペイロードと他のタスク情報(現在の状態など)が含まれています。

- プロパティのマッピング
割当てサービスを指定するときは、プロパティのリストを指定して、タスク割当て先を決定するバックエンド・サービスにコールバックを相関付けることもできます。

- タスク履歴
タスク履歴は、タスクの履歴をトレースするための時系列順のタスク・ドキュメントのリストです。このリスト内のタスク・ドキュメントには、実際のタスクの属性のサブセット(state、updatedBy、outcome、updatedDateなど)が含まれています。

34.3.2.2 割当てサービスの実装例

注意:

- ステートフルな割当てサービス・クラスは使用できません。これは、ヒューマン・ワークフロー・サービスでは、割当てサービスのコールが必要になるたびに新規インスタンスが作成されるためです。

- getAssigneesToRequestForInformationメソッドは複数回コールできます。これは、情報のリクエスト・アクションを表示するための基準の1つが、情報をリクエストしているユーザーが複数存在していることであるためです。したがって、ヒューマン・ワークフロー・サービスがタスクについて許可されているアクションを判別しようとするたびに、このメソッドがコールされます。

独自の割当てサービス・プラグインを実装できます。このプラグインは、ヒューマン・ワークフロー実行時にヒューマン・ワークフロー・サービスによって起動されます。

例34-6では、TestAssignmentService.javaと呼ばれるIAssignmentService実装の例を示します。

例34-6 IAssignmentService実装の例

/* $Header: TestAssignmentService.java 24-may-2006.18:26:16 Exp $ */
/* Copyright (c) 2004, 2006, Oracle. All rights reserved.  */
/*
DESCRIPTION
Interface IAssignmentService defines the callbacks an assignment
service implements. The implementation of the IAssignmentService
is called by the workflow service
PRIVATE CLASSES
<list of private classes defined - with one-line descriptions>
NOTES
<other useful comments, qualifications, etc.>
MODIFIED    (MM/DD/YY)

*/
/**
*  @version $Header: IAssignmentService.java 29-jun-2004.21:10:35 Exp
$
*
*
*/
package oracle.bpel.services.workflow.test.workflow;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import oracle.bpel.services.workflow.metadata.routingslip.model.*;
import oracle.bpel.services.workflow.metadata.routingslip.model.Participants;
import oracle.bpel.services.workflow.metadata.routingslip.model.ParticipantsType.*;
import oracle.bpel.services.workflow.task.IAssignmentService;
import oracle.bpel.services.workflow.task.ITaskAssignee;
import oracle.bpel.services.workflow.task.model.Task;
public class TestAssignmentService implements
oracle.bpel.services.workflow.task.IAssignmentService {
static int numberOfApprovals = 0;
static String[] users = new String[]{"jstein", "wfaulk", "cdickens"};
public Participants onInitiation(Task task,
Map propertyBag) {
return createParticipant();
}
public Participants onReinitiation(Task task,
Map propertyBag) {
return null;
}
public Participants onOutcomeUpdated(Task task,
Map propertyBag,
String updatedBy,
String outcome) {
return createParticipant();
}
public Participants onAssignmentSkipped(Task task,
Map propertyBag) {
return null;
}
public List getAssigneesToRequestForInformation(Task task,
Map propertyBag) {
List rfiUsers = new ArrayList();
rfiUsers.add("jcooper");
rfiUsers.add("jstein");
rfiUsers.add("wfaulk");
rfiUsers.add("cdickens");
return rfiUsers;
}
public List getReapprovalAssignees(Task task,
Map propertyBag,
ITaskAssignee infoRequestedAssignee) {
List reapprovalUsers = new ArrayList();
reapprovalUsers.add("jstein");
reapprovalUsers.add("wfaulk");
reapprovalUsers.add("cdickens");
return reapprovalUsers;
}
private Participants createParticipant() {
if (numberOfApprovals > 2) {
numberOfApprovals = 0;
return null;
}
String user = users[numberOfApprovals++];

ObjectFactory objFactory = new ObjectFactory();
Participants participants = objFactory.createParticipants();
Participant participant = objFactory.createParticipantsTypeParticipant();
participant.setName("Loan Agent");
ResourceType resource2 = objFactory.createResourceType(user);
resource2.setIsGroup(false);
resource2.setType("STATIC");
participant.getResource().add(resource2);

participants.getParticipantOrSequentialParticipantOrAdhoc().
add(participant);
return participants;
}

}

34.3.2.3 カスタム割当てサービスのデプロイ方法

カスタム割当てサービスをデプロイする手順は、次のとおりです。

1. 次のメソッドを1つ使用して、割当てサービスの実装クラスおよび関連クラスをOracle BPEL Process Managerのクラスパスで使用可能にします。

- クラスをSCA-INF/classesに直接ロードするか、SCA-INF/libにJARとしてロードします。

- ディレクトリ・ツリーまたはJARファイルにカスタム関数のクラス・ファイルを配置します。次に、クラスが置かれているJARまたはルート・ディレクトリを指すようにworklfowCustomClasspathURL構成パラメータを更新します。これはURLであるため、Webサーバー上でクラス・ファイルをホスティングし、そのクラス・ファイルからHTTPを介して複数のOracle WebLogic Serverにアクセスできるようになります。さらに、そのファイルをメタデータ・リポジトリ(MDS)にデプロイし、ORAMDS URLを使用して適切な場所を指すようにすることもできます。この方法の詳細は、サンプルのworkflow-110-workflowCustomizationsを参照してください。このサンプルをダウンロードするには、Oracle SOA Suiteサンプルを参照してください。

注意:

- 様々なBPELプロセスで使用するために割当てサービスの別バージョンを作成するには、パッケージ名またはクラス名を変更する必要があります。

- スーツケース内のJavaクラスとJARファイルはクラスパスで使用できないため、割当てサービスのデプロイメント・モデルとしては使用できません。

- 前述の手順はクラスタ内のノードごとに繰り返す必要があります。

34.3.3 カスタム・エスカレーション関数

カスタム・エスカレーション関数を使用すると、ヒューマン・ワークフロー内でカスタム・ルールを統合できます。

カスタム・エスカレーション関数を実装する手順は、次のとおりです。

1. カスタムのタスク・エスカレーション関数を作成し、この関数をタスク定義に使用するヒューマン・ワークフロー・サービスに登録します。

2. ヒューマン・タスク・エディタを使用して、ヒューマン・ワークフローでルールを統合します。
詳細は、第29.7.6項「エスカレーション・ルールの指定方法」を参照してください。

34.4 コールバックとリソース・バンドルに対するクラスのロード

次のコールバックおよびリソース・バンドルのクラスは、SOAプロジェクトから直接ロードできます。oracle.soainfra.common共有ライブラリのクラスをロードしてOracle WebLogic Serverを再起動する必要はありません。

- IAssignmentService

- IRestrictedAssignmentService

- IRoutingSlipCallback

- IPercentageCompletionCallback

- INotificationCallback

- プロジェクト・レベルのリソース・バンドル

コールバック・クラスは、次の場所に配置できます。

- プロジェクトのSCA-INF/libディレクトリにあるJAR

- プロジェクトのSCA-INF/classesディレクトリにあるクラス

さらに、下位互換性をサポートするために、プロジェクト・レベルのリソース・バンドルは、.taskファイルと同じディレクトリ内に配置することもできます。

34.5 ワークフロー・サービスのリソース・バンドル

この項では、ヒューマン・ワークフロー・サービスで使用するリソース・バンドルと、リソース・バンドルをカスタマイズして代替のリソース文字列を提供する方法について説明します。

ヒューマン・ワークフロー・サービスAPIおよびOracle BPM Worklistでは、IWorkflowContextオブジェクトのロケール設定を使用してAPIにアクセスします。これは、アイデンティティ・サービスで構成されているユーザー・ディレクトリ内のユーザーのロケールです。ユーザーに対してロケールが指定されていない場合は、かわりにJava EEサーバーのデフォルト・ロケールが使用されます。

APIクライアントでは、IWorkflowContextオブジェクトに新しい値を設定することで、このロケールを上書きできます。Oracle BPM Worklistには、ユーザー・プリファレンス・オプションが用意されており、このオプションによって、ユーザーは、各自のユーザー・ディレクトリに設定されているロケールのかわりに、ブラウザのロケールを使用できます。

34.5.1 タスク・リソース・バンドル

各ヒューマン・ワークフロー・コンポーネントは、リソース・バンドルに関連付けることができます。このバンドルによって、タスクの結果の表示名として使用するリソース文字列が定義されます。リソース文字列は、TaskMetadataServiceメソッドのgetTaskDefinitionOutcomesによって返され、Oracle BPM Worklistおよびタスク・フローのタスク詳細アプリケーションに表示されます。

また、ヒューマン・ワークフローのXPath関数のgetTaskResourceBundle文字列を使用すると、タスクのリソース・バンドルのリソース文字列をルックアップできます。たとえば、このXPath関数は、タスクの通知メッセージの作成に使用するXPath式の一部として使用できます。

ヒューマン・ワークフロー・コンポーネントをリソース・バンドルに関連付けます。これを実行するには、ヒューマン・タスク・エディタの「プレゼンテーション」セクションにある「リソースの詳細」ダイアログの「リソース名」フィールドと「リソースの場所」フィールドを設定します。「リソースの場所」フィールドの値はURLです。リソース・バンドルは、このURLが指し示すJARファイル内に含めることができます。リソース・バンドルに対して共有場所を使用すると、複数のヒューマン・ワークフロー・コンポーネント間で同じリソース・バンドルを共有できます。

ヒューマン・ワークフロー・コンポーネントに対してリソース・バンドルが指定されていない場合は、グローバル・リソース・バンドル内でソース文字列がルックアップされます(第34.5.2項「グローバル・リソース・バンドル - WorkflowLabels.properties」を参照)。よく使用されるタスクの結果をグローバル・リソース・バンドルで定義すると、個別のヒューマン・ワークフロー・コンポーネントに対してリソース・バンドルを定義する必要性が減少します。

特定の結果に対してリソース文字列を配置できない場合は、その結果の名前がすべてのロケールで表示値として使用されます。

34.5.2 グローバル・リソース・バンドル - WorkflowLabels.properties

次のグローバル・リソース・バンドルは、ヒューマン・ワークフロー・サービスAPIによるリソース文字列のルックアップに使用されます。

oracle.bpel.services.workflow.resource.WorkflowLabels.properties

このバンドルをカスタマイズすると、既存の表示文字列の代替を提供したり、他の文字列(マップ済属性のラベル、標準ビュー、カスタムのDynamic Assignment Function用など)を追加できます。

グローバル・リソース・バンドルでは、次の内容に対するリソース文字列が提供されます。

- タスク属性
Oracle BPM Worklist(または他のクライアント)に表示される様々なタスク属性のラベル。リソース文字列値は、次のTaskMetadataServiceメソッドから返されます。

- getTaskAttributes

- getTaskAttributesForTaskDefinition

- getTaskAttributesForTaskDefinitions

- マップ済属性のラベル
ランタイム構成サービスを介して作成されたマップ済属性のラベル。これらの文字列は、Oracle BPM Worklistで、マップ済属性を表示する際に使用されます。リソース文字列値は、次のTaskMetadataServiceメソッドから返されます。

- getTaskAttributesForTaskDefinition

- getTaskAttributesForTaskDefinitions

マップ済属性マッピングに翻訳されたリソース文字列が必要な場合は、WorkflowLabels.propertiesバンドルをカスタマイズして適切な文字列を挿入します。

- タスクの結果
共有のタスクの結果に対するデフォルトのリソース文字列。前述のように、タスクの結果はタスク・リソース・バンドルで上書きできます。タスク固有のリソース・バンドルが指定されていない場合、リソース文字列は、TaskMetadataServiceメソッドのgetTaskDefinitionOutcomesから返されます。出荷時のグローバル・リソース・バンドルには、次の結果に対するリソース文字列が含まれています。

- 承認

- 却下

- はい

- いいえ

- OK

- 遅延

- 承認

- 確認

- Dynamic Assignment Function名
Dynamic Assignment Functionのラベル。これらの文字列は、ランタイム構成サービス・メソッドのgetUserDynamicAssignmentFunctionsおよびgetGroupDynamicAssignmentFunctionsから返されます。同梱されているリソース・バンドルには、標準のDynamic Assignment Function(ROUND_ROBIN、LEAST_BUSYおよびMOST_PRODUCTIVE)のラベルが含まれています。追加のカスタムDynamic Assignment Functionが作成されている場合は、WorkflowLabels.propertiesリソース・バンドルを変更して、新しい関数用のリソース文字を指定します。

- 標準ビュー名
標準ビューのラベル。作成した標準ビューに対して翻訳したリソース文字列が必要な場合は、それらの文字列をここで追加します。標準ビューのリソース文字列値は、リソース・バンドルからルックアップされ、UserMetadataServiceメソッドのgetStandardTaskViewListおよびgetStandardTaskViewDetailsから、標準ビュー名として返されます。リソース文字列のキーは、標準ビューの作成時に指定した名前である必要があります。特定の標準ビューに対してリソース文字列を追加しない場合は、かわりに入力した名前が使用されます。

- 通知メッセージ
タスク・サービスによる自動通知の送信時に使用されるリソース文字列。通知メッセージは、ユーザーの要件にあわせてカスタマイズできます。

- タスク・ルーティング・エラー・コメント
タスクのルーティングでエラーが発生すると、タスク・サービスは、エラーを記述したコメントをタスクに自動的に追加します。このコメントで使用される様々な文字列は、このリソース・バンドルで定義されます。

WorkflowLabels.propertiesリソース・バンドルのコピーは、サンプルのworkflow-110-workflowCustomizationsから入手できます。

WorkflowLabels.propertiesリソース・バンドルは、その内容を編集し、カスタマイズしたバージョンを、この製品に同梱されているバージョンより前のバージョンのワークフロー・サービスのクラスパスに追加してカスタマイズできます。

これを実行するには、次の方法があります。

- カスタマイズしたファイルをディレクトリ・ツリー内の次の場所に配置します。

directory_path/oracle/bpel/services/workflow/resource/WorkflowLabels.properties

- directory_pathを指し示すように、worklfowCustomClasspathURL構成パラメータを更新します。(これはURLであるため、Webサーバー上でリソース・バンドルをホスティングし、そのリソース・バンドルに複数のOracle WebLogic Serverからアクセスできるようになります。)この方法の詳細は、サンプルのworkflow-110-workflowCustomizationsを参照してください。このサンプルをダウンロードするには、Oracle SOA Suiteサンプルを参照してください。

34.5.3 ワークリスト・クライアントのリソース・バンドル

ADFワークリスト・クライアント・アプリケーションでは、次の2つのリソース・バンドルが使用されます。これらのハンドルには、ワークリスト・クライアントWebアプリケーションに表示されるすべての文字列が含まれています。

- oracle.bpel.worklistapp.resource.WorkflowResourceBundle:
このバンドルには、ADF Oracle BPM Worklistと、Oracle SOA Suiteのバージョン10.1.3に同梱されているJSPベースのサンプルのOracle BPM Worklistの両方で使用される文字列が含まれています。

- oracle.bpel.worklistapp.resource.WorklistResourceBundle:
このバンドルには、ADF Oracle BPM Worklistでのみ使用される文字列が含まれています。

ワークリストのリソース・バンドルのコピーは、サンプルのworkflow-110-workflowCustomizationsから入手できます。

このサンプルには、Oracle BPM Worklistのカスタマイズ方法が示されています。この方法によって、リソース・バンドルを再コンパイルし、更新したクラスをOracle BPM Worklistに追加します。

34.5.4 タスク詳細のADFタスク・フロー・リソース・バンドル

特定のタスク・タイプの詳細を表示するために作成されたADFタスク・フロー・アプリケーションと関連のデータ制御では、リソース・バンドルのoracle.bpel.services.workflow.worklist.resource.worklistを使用してリソース文字列が格納されます。

タスク・フロー・アプリケーションにカスタマイズしたリソース・バンドルを追加すると、タスク詳細のADFタスク・フローに独自のカスタム・リソース文字列を提供できます。

このリソース・バンドルを使用すると、タスク・フロー・フォームに表示されるXML要素名をローカライズできます。各キーを追加すると、タスク・フロー・フォームのコンテンツ・セクションでそれらのキーを使用できます。入力テキスト・ラベルは、次のようになります。

#{resources.mykeyword}

WorkflowLabels.propertiesリソース・バンドルのコピーは、サンプルのworkflow-110-workflowCustomizationsから入手できます。このサンプルには、タスク詳細のADFタスク・フロー・アプリケーションに、カスタマイズした独自のリソース文字列を提供する方法の詳細が示されています。

34.5.5 リソース・バンドルでのステージ名と参加者名の指定

コンポジット・リソース・バンドルで、ステージ名と参加者名の翻訳済の値を指定できます。リソース・バンドルには次のようなエントリが含まれている必要があります。

- stage_name=translated_value

- participant_name=translated_value

34.5.6 グループ名とアプリケーション・ロール名での大/小文字の区別

デフォルトでは、ヒューマン・ワークフロー・システムでユーザー名の大/小文字は区別されません。すべてのユーザー名は小文字で格納されます。ただし、グループ名とアプリケーション・ロール名は常に大/小文字が区別されます。ユーザー名は、大/小文字を区別するようにOracle Enterprise Manager Fusion Middleware Controlで変更できます。

注意:

この設定は、新規のインストールを実行した後にのみ変更してください。インスタンスをアクティブに処理しているインストール、または多数のインストールがデータベースにあるインストールでこの値を変更すると、重大な問題が発生します。

大/小文字を区別するように変更する手順は、次のとおりです。

1. Oracle Enterprise Manager Fusion Middleware Controlにログインします。

2. ナビゲータで、「SOA」フォルダを開きます。

3. 「soa-infra」を右クリックし、「管理」→「システムMBeanブラウザ」の順に選択します。
ページの右側に「システムMBeanブラウザ」が表示されます。

4. 「アプリケーション定義のMBean」→「oracle.as.soainfra.config」→「サーバー: server_name」→「WorkflowIdentityConfig」→「human-workflow」→「WorkflowIdentityConfig.PropertyType」の順に開きます。

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

6. 「操作」タブをクリックします。

7. 「setValue」をクリックします。

8. 「値」フィールドにtrueと入力し、「起動」をクリックします。

10.1.3(デフォルトで、大/小文字を区別します)からアップグレードする場合、システムの動作を10.1.3と同じにするには、「caseSensitive」をtrueに設定します。

34.6 ヒューマン・ワークフロー・クライアントとOracle WebLogic Serverサービスとの統合の概要

この項では、ヒューマン・ワークフロー・クライアントとOracle WebLogic Serverサービスとの統合方法について説明します。

34.6.1 ヒューマン・ワークフロー・サービス・クライアント

ヒューマン・ワークフロー・サービスは、次のワークフロー・サービスを公開します。

- タスク・サービス

- タスク問合せサービス

- ユーザー・メタデータ・サービス

- タスク・エビデンス・サービス

- タスク・メタデータ・サービス

- ランタイム構成サービス

- タスク・レポート・サービス

これらのサービスを使用するには、ワークフロー・サービスに対してAbstract Factoryパターンを使用する必要があります。Abstract Factoryパターンを使用すると、共通のテーマを持つ各ファクトリのグループをカプセル化できます。

次のタスクを実行します。

- 特定のサービス・タイプに対してIWorkflowServiceClientインスタンスを取得します。WorkflowServiceClientFactoryは、サービス・タイプに従ってIWorkflowServiceClientを取得する静的ファクトリ・メソッドを提供します。

- IWorkflowServiceClientインスタンスを使用して、使用するサービス・インスタンスを取得します。

サポートされているサービス・タイプは「リモート」と「soap」です。

リモート・クライアントは、Enterprise JavaBeansクライアント(したがってリモートEnterprise JavaBeans)を使用します。SOAPはSOAPクライアントを使用します。各タイプのサービスには、ワークフロー・クライアントを構成する必要があります。例34-7に詳細を示します。

例34-7 クライアント構成ファイル

<workflowServicesClientConfiguration>
<server name="default" default="true">
<remoteClient>
<serverURL>t3://myhost.us.example.com:7001</serverURL>
<userName>weblogic</userName>
<password>weblogic</password>
<initialContextFactory>weblogic.jndi.WLInitialContextFactory
</initialContextFactory>
<participateInClientTransaction>false</participateInClientTransaction>
</remoteClient>
<soapClient>
<rootEndPointURL>http://myhost.us.example.com:7001</rootEndPointURL>
<identityPropagation mode="dynamic" type="saml">
<policy-references>
<policy-reference enabled="true" category="security"
uri="oracle/wss10_saml_token_client_policy"/>
</policy-references>
</identityPropagation>
</soapClient>
</server>
</workflowServicesClientConfiguration>

クライアント構成ファイルには、複数の構成についての定義が含まれています。各サーバーには一意の名前が指定されている必要があります。構成ファイルに複数のサーバーを定義した場合は、1つのサーバーのデフォルト属性にtrueを設定する必要があります。workflowServicesClientConfigurationにはserverTypeというオプション属性があり、LOCAL、REMOTEまたはSOAPのいずれかに設定できます。各サーバーのクライアント・タイプを上書きするには、オプション属性のclientTypeを使用します。

例34-8に詳細を示します。

例34-8 複数の構成が定義されたクライアント構成ファイル

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workflowServicesClientConfiguration
xmlns="http://xmlns.oracle.com/bpel/services/client" clientType="REMOTE"
<server name="server1" default="true"  clientType="SOAP">
<remoteClient>
<serverURL>t3://myhost1.us.example.com:7001</serverURL>
<initialContextFactory>weblogic.jndi.WLInitialContextFactory</initialContextFactory>
<participateInClientTransaction>false</participateInClientTransaction>
</remoteClient> -->
<soapClient>
<rootEndPointURL>http://myhost1.us.example.com:7001</rootEndPointURL>
<identityPropagation mode="dynamic" type="saml">
<policy-references>
<policy-reference enabled="true" category="security"
uri="oracle/wss10_saml_token_client_policy"/>
</policy-references>
</identityPropagation>
</soapClient>
</server>
<server name="server2">
<remoteClient>
<serverURL>t3://myhost2.us.example.com:7001</serverURL>
<initialContextFactory>weblogic.jndi.WLInitialContextFactory</initialContextFactory>
<participateInClientTransaction>false</participateInClientTransaction>
</remoteClient> -->
<soapClient>
<rootEndPointURL>http://myhost2us.example.com:7001</rootEndPointURL>
<identityPropagation mode="dynamic" type="saml">
<policy-references>
<policy-reference enabled="true" category="security"
uri="oracle/wss10_saml_token_client_policy"/>
</policy-references>
</identityPropagation>
</soapClient>
</server>
</workflowServicesClientConfiguration>

例34-8では、server2にデフォルトのclientTypeのREMOTEが使用されていますが、server1にはデフォルトのclientTypeの値を上書きしてSOAPのclientTypeが使用されています。wf_client_config.xmlファイルのかわりに、JAXBオブジェクトのWorkflowServicesClientConfigurationTypeが使用されている場合も、同じルールが適用されます。

構成でクライアント・タイプを定義すると、WorkflowServiceClientFactoryクラスのファクトリ・メソッドを使用できます。例34-9に詳細を示します。

例34-9 WorkflowServiceClientFactoryクラスのファクトリ・メソッド

public static IWorkflowServiceClient
getWorkflowServiceClient(WorkflowServicesClientConfigurationType wscc, Logger
logger) throws WorkflowException

マップでプロパティのCONNECTION_PROPERTY.CLIENT_TYPEを使用してクライアント・タイプを定義すると、例34-10に示すファクトリ・メソッドを使用できます。

例34-10 CONNECTION_PROPERTY.CLIENT_TYPEのファクトリ・メソッド

public static IWorkflowServiceClient getWorkflowServiceClient(Map<CONNECTION_
PROPERTY, String> properties, String serverName,    Logger logger) throws
WorkflowException

34.6.1.1 タスク問合せサービス・クライアントのコード

例34-11に、タスク問合せサービス・クライアントのコード例を示します。

例34-11 タスク問合せサービス・クライアントのコード

/**
* WFClientSample
*/
package oracle.bpel.services.workflow.samples;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import oracle.bpel.services.workflow.IWorkflowConstants;
import oracle.bpel.services.workflow.WorkflowException;
import oracle.bpel.services.workflow.client.IWorkflowServiceClient;
import oracle.bpel.services.workflow.client.WorkflowServiceClientFactory;
import oracle.bpel.services.workflow.client.IWorkflowServiceClientConstants
.CONNECTION_PROPERTY;
import oracle.bpel.services.workflow.query.ITaskQueryService;
import oracle.bpel.services.workflow.query.ITaskQueryService.AssignmentFilter;
import oracle.bpel.services.workflow.query.ITaskQueryService.OptionalInfo;
import oracle.bpel.services.workflow.repos.Ordering;
import oracle.bpel.services.workflow.repos.Predicate;
import oracle.bpel.services.workflow.repos.TableConstants;
import oracle.bpel.services.workflow.verification.IWorkflowContext;

public class WFClientSample {

public static List  runClient(String clientType) throws WorkflowException {
try {

IWorkflowServiceClient wfSvcClient = null;
ITaskQueryService taskQuerySvc = null;
IWorkflowContext wfCtx = null;

// 1. this step is optional since configuration can be set in  wf_client_
config.xml file
Map<CONNECTION_PROPERTY, String> properties = new HashMap<CONNECTION_
PROPERTY, String>();
if (WorkflowServiceClientFactory.REMOTE_CLIENT.equals(clientType)) {
properties.put(CONNECTION_PROPERTY.EJB_INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
properties.put(CONNECTION_PROPERTY.EJB_PROVIDER_URL,
"t3://myhost.us.example.com:7001");
properties.put(CONNECTION_PROPERTY.EJB_SECURITY_CREDENTIALS,
"weblogic");
properties.put(CONNECTION_PROPERTY.EJB_SECURITY_PRINCIPAL, "weblogic");
} else if (WorkflowServiceClientFactory.SOAP_CLIENT.equals(clientType)) {
properties.put(CONNECTION_PROPERTY.SOAP_END_POINT_ROOT,
"http://myhost:7001");
properties.put(CONNECTION_PROPERTY.SOAP_IDENTITY_
PROPAGATION,"non-saml"); // optional
}
// 2. gets IWorkflowServiceClient for specified client type
wfSvcClient =
WorkflowServiceClientFactory.getWorkflowServiceClient(clientType, properties,
null);

// 3. gets ITaskQueryService instance
taskQuerySvc = wfSvcClient.getTaskQueryService();

// 4. gets IWorkflowContext instance
wfCtx = taskQuerySvc.authenticate("jcooper", "welcome1".toCharArray(),
"jazn.com");

// 5. creates displayColumns
List<String> displayColumns = new ArrayList<String>(8);
displayColumns.add("TASKID");
displayColumns.add("TASKNUMBER");
displayColumns.add("TITLE");
displayColumns.add("CATEGORY");

// 6. creates optionalInfo
List<ITaskQueryService.OptionalInfo> optionalInfo = new
ArrayList<ITaskQueryService.OptionalInfo>();
optionalInfo.add(ITaskQueryService.OptionalInfo.DISPLAY_INFO);

// 7. creates assignmentFilter
AssignmentFilter assignmentFilter = AssignmentFilter.MY_AND_GROUP;

// 8. creates predicate
List<String> stateList = new ArrayList<String>();
stateList.add(IWorkflowConstants.TASK_STATE_ASSIGNED);
stateList.add(IWorkflowConstants.TASK_STATE_INFO_REQUESTED);
Predicate predicate = new Predicate(TableConstants.WFTASK_STATE_COLUMN,
Predicate.OP_IN, stateList);

// 9. creates ordering
Ordering ordering = new Ordering(TableConstants.WFTASK_DUEDATE_COLUMN,
true, false);
ordering.addClause(TableConstants.WFTASK_CREATEDDATE_COLUMN, true,
false);

// 10. calls service - query tasks
List taskList = taskQuerySvc.queryTasks(wfCtx,
(List<String>) displayColumns,
(List<OptionalInfo>) optionalInfo,
(AssignmentFilter)
assignmentFilter,
(String) null, // keywords is
optional (see javadoc)
// optional
predicate,
ordering,
0,    // starting row
100); // ending row for paging, 0
if no paging

// Enjoy result
System.out.println("Successfuly get list of tasks for client type: " +
clientType +
". The list size is " + taskList.size());
return taskList;
} catch (WorkflowException e) {
System.out.println("Error occurred");
e.printStackTrace();
throw e;
}
}

public static void main(String args[]) throws Exception {
runClient(WorkflowServiceClientFactory.REMOTE_CLIENT);
runClient(WorkflowServiceClientFactory.SOAP_CLIENT);
}

}

34.6.1.2 構成オプション

各タイプのクライアントには、ワークフロー・クライアント構成を設定する必要があります。次の場所に構成を設定できます。

- JAXBオブジェクト

- wf_client_config.xmlファイル

- プロパティ・マップ

プロパティ・マップは常に、wf_client_config.xmlファイルの補足です。構成属性は、JAXBオブジェクトまたはプロパティ・マップによって上書きされる場合があります。構成ファイルはオプションです。構成ファイルがアプリケーションのクラスパスに見つからない場合は、プロパティ・マップが構成の主要ソースになります。

34.6.1.2.1 JAXBオブジェクト

JAXBオブジェクトは、クライアント構成を定義するために使用できます。例34-12に、WorkflowServiceClientFactoryメソッドの使用方法を示します。

例34-12 JAXBオブジェクト

public static IWorkflowServiceClient getWorkflowServiceClient(String clientType,
WorkflowServicesClientConfigurationType wscc,
Logger logger) throws WorkflowException

34.6.1.2.2 ワークフロー・クライアント構成ファイル - wf_client_config.xml

クライアント構成のXSDスキーマは、wf_client_config.xsdファイルにあります。

サーバー構成には、次の3タイプのクライアントが含まれている必要があります。

- localClient

- remoteClient

- soapClient

すべてのクライアントを指定することをお薦めします。これは、リモート・クライアントを持たないサービス(アイデンティティ・サービスなど)があるためです。このため、他のサービスでリモート・クライアントを使用する場合、アイデンティティ・サービスではSOAPサービスを使用します。

例34-13に、クライアント構成のXMLファイルの例を示します。この構成によって、defaultという名前のサーバーが定義されます。このXMLファイルは、クライアント・アプリケーションのEARファイルに移動する必要があります。

例34-13 クライアント構成

<workflowServicesClientConfiguration>
server name="default" default="true">

<remoteClient>
<serverURL>t3://myhost.us.example.com:7001</serverURL>
<userName>weblogic</userName>
<password>weblogic</password>
<initialContextFactory>weblogic.jndi.WLInitialContextFactory
</initialContextFactory>
<participateInClientTransaction>false</participateInClientTransaction>
</remoteClient>

<soapClient>
<rootEndPointURL>http://myhost.us.example.com:7001</rootEndPointURL>
<identityPropagation mode="dynamic" type="saml">
<policy-references>
<policy-reference enabled="true" category="security"
uri="oracle/wss10_saml_token_client_policy"/>
</policy-references>
</identityPropagation>
</soapClient>

</server>
</workflowServicesClientConfiguration>

WorkflowServicesClientConfigurationType wsccがnullの場合は、wf_client_config.xmlにクライアント・プロパティを定義できます。

WorkflowServiceClientFactory getWorkflowServiceClient()メソッドは常に、クラスパス内でwf_client_config.xmlを検索します。このファイルが検出されると、クライアント・プロパティがロードされます。

wf_client_config.xmlファイルに定義した値は、プロパティ・マップまたはJAXBオブジェクトで定義したすべてのプロパティによって上書きされます。

34.6.1.2.3 プロパティ・マップでのワークフロー・クライアント構成

接続プロパティを動的に指定する場合は、java.util.Mapを使用してプロパティを指定できます。これらのプロパティは、構成ファイル内の定義よりも優先されます。したがって、wf_client_config.xmlに定義した値は、これらのプロパティの値によって上書きされます。サーバーへの接続詳細を動的に指定しない場合は、マップでのプロパティ設定を省略し、ファクトリ・メソッドにNULL値を渡すことができます。この場合、構成ファイルwf_client_config.xmlはクライアント・アプリケーションのクラスパス内で検索されます。

構成ファイルがクラスパス内にある必要があるのは、構成ファイルから構成を取得する場合のみです。特定のクライアント・タイプの全設定をプロパティ・マップを使用して行う場合、このファイルの設定はオプションです。また、JAXBオブジェクトにも構成ファイルは必要ありません。これは、すべての設定がJAXBオブジェクトから取得されるためです。例34-14に詳細を示します。

例34-14 プロパティ・マップ

IWorkflowServiceClient   wfSvcClient =
WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory
.REMOTE_CLIENT,
(Map<IWorkflowServiceClientConstants.CONNECTION_PROPERTY, String> ) null, null);

この場合、クライアントは、クラスパス内で検出されたwf_client_config.xmlの値を使用してサービスにアクセスします。構成ファイルがクラスパス内に見つからない場合に、サービス・タイプに応じた設定を指定しないと、ワークフロー例外がスローされます。プロパティ・マップがNULLで、構成ファイルが見つからない場合も、例外がスローされます。構成ファイルが見つからない場合に、クライアントでマップ内の一部のプロパティが省略されていると、実行時にサービス・コールが失敗します(プロパティは構成ファイルの補足です)。

クライアント・プロパティは、WorkflowServiceClientFactoryメソッドを使用して定義できます。例34-15に詳細を示します。

例34-15 WorkflowServiceClientFactoryメソッド

public static IWorkflowServiceClient getWorkflowServiceClient(String clientType,
Map<CONNECTION_PROPERTY, String> properties,
Logger logger) hrows WorkflowException

マップでプロパティのCONNECTION_PROPERTYタイプを使用してクライアント・タイプを定義すると、例34-16に示すファクトリ・メソッドを使用できます。

例34-16 CONNECTION_PROPERTYタイプのファクトリ・メソッド

public static IWorkflowServiceClient getWorkflowServiceClient(Map<CONNECTION_
PROPERTY, String> properties,   Logger logger) throws WorkflowException

例34-17に、クライアント・プロパティを設定するためにプロパティ・マップで使用できるIWorkflowServiceClientConstants.CONNECTION_PROPERTYを示します。

例34-17 CONNECTION_PROPERTY

public enum CONNECTION_PROPERTY {
MODE,  // not supported , deprecated
EJB_INITIAL_CONTEXT_FACTORY,
EJB_PROVIDER_URL,
EJB_SECURITY_PRINCIPAL,
EJB_SECURITY_CREDENTIALS,
// SOAP configuration
SOAP_END_POINT_ROOT,
SOAP_IDENTITY_PROPAGATION, // if value is 'saml' then SAML-token
identity propagation is used
SOAP_IDENTITY_PROPAGATION_MODE,  // "dynamic'
MANAGEMENT_POLICY_URI, // dafault value is "oracle/log_policy"
SECURITY_POLICY_URI,   // default value is  "oracle/wss10_
saml_token_client_policy"
// REMOTE EJB
TASK_SERVICE_PARTICIPATE_IN_CLIENT_TRANSACTION  // default value is
false
//(task service EJB starts a new transaction)
CLIENT_TYPE,            DISCOVERY_OF_END_POINT,
WSS_RECIPIENT_KEY_ALIAS,
EJB_JNDI_SUFFIX // append to jndi name to used  foreign jndi name
};

注意:

プロパティ・マップを使用する場合、IWorkflowServiceClientConstants.CONNECTION_PROPERTY.MODEを指定する必要はありません。このプロパティは、11g リリース1では非推奨です。

例34-18に、リモートEnterprise JavaBeansクライアントの例を示します。

例34-18 リモートEnterprise JavaBeansクライアントの例

Map<CONNECTION_PROPERTY,String> properties = new HashMap<CONNECTION_
PROPERTY,String>();
properties.put(CONNECTION_PROPERTY.EJB_INITIAL_CONTEXT_
FACTORY,"weblogic.jndi.WLInitialContextFactory");

properties.put(CONNECTION_PROPERTY.EJB_PROVIDER_URL,
"t3://myhost.us.example.com:7001");
properties.put(CONNECTION_PROPERTY.EJB_SECURITY_PRINCIPAL, "weblogic");
properties.put(CONNECTION_PROPERTY.EJB_SECURITY_CREDENTIALS, "weblogic");
IWorkflowServiceClient client =
WorkflowServiceClientFactory.getWorkflowServiceClient(
WorkflowServiceClientFactory.REMOTE_CLIENT,
properties, null);

例34-19に、SOAPクライアントの例を示します。

例34-19 SOAPクライアントの例

Map<CONNECTION_PROPERTY,String> properties = new HashMap<CONNECTION_
PROPERTY,String>();
properties.put(CONNECTION_PROPERTY.SOAP_END_POINT_ROOT, "http://myhost:7001");
IWorkflowServiceClient client =
WorkflowServiceClientFactory.getWorkflowServiceClient(
WorkflowServiceClientFactory.SOAP_CLIENT,
properties, null);

34.6.1.3 クライアントのロギング

クライアントでは、クライアントがメッセージを記録するjava.util.logging.Loggerを必要に応じて渡すことができます。ロガーが指定されていない場合、ワークフロー・サービス・クライアントのコードは何も記録しません。例34-20は、ロガーをワークフロー・サービス・クライアントに渡す方法を示しています。

例34-20 java.util.logging.Logger

java.util.logging.Logger logger = ....;

IWorkflowServiceClient client =
WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory
.REMOTE_CLIENT, properties, logger);

34.6.1.4 構成移行ユーティリティ

クライアント構成スキーマは、リリース10.1.3.x と11g リリース1の間で変更されています。リリース10.1.3.xから11g リリース1に移行するには、例34-21に示すユーティリティを使用します。

例34-21 構成移行ユーティリティ

java -classpath wsclient_extended.jar:bpm-services.jar
oracle.bpel.services.workflow.client.config.MigrateClientConfiguration
original_file [new_file];

original_fileは10.1.3.x のwf_client_config.xmlファイルで、new_fileは新規の構成ファイル名(オプション)です。新規の構成ファイル名を指定しないと、元の構成ファイルがバックアップされ、wf_client_config.xmlファイルが上書きされます。

34.6.2 アイデンティティ伝播

この項では、Enterprise JavaBeansおよびSAMLトークン(SOAPクライアント用)を使用してアイデンティティを伝播する方法について説明します。

リクエストごとにワークフロー・コンテキストを取得すると、パフォーマンスが低下する場合があります。これは、アイデンティティ伝播の場合も同様です。SAMLトークンまたはEnterprise JavaBeansによるアイデンティティ伝播を使用する場合は、ユーザー名とパスワードにNULLを渡してクライアントを認証し、ワークフロー・コンテキスト・インスタンスを取得して、アイデンティティ伝播を使用せずにワークフロー・コンテキストを使用する別のサービス・コールを使用します。

34.6.2.1 Enterprise JavaBeansアイデンティティ伝播

クライアント・アプリケーションは、Enterprise JavaBeansアイデンティティ伝播を使用して、ユーザー・アイデンティティをサービスに伝播できます。クライアントのコードでは、ユーザー・アイデンティティを保護する必要があります。

34.6.2.1.1 クライアント構成

アイデンティティ伝播を使用する場合、クライアントのコードでは、wf_client_config.xml構成ファイルの<remoteClient>要素の下にある<userName>要素と<password>要素を省略する必要があります。さらに、第34.6.1.2.3項「プロパティ・マップでのワークフロー・クライアント構成」で移入したMap<IWorkflowServiceClientConstants.CONNECTION_PROPERTY,String>プロパティには、次のプロパティを移入しないでください。

- IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_SECURITY_PRINCIPAL

- IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_SECURITY_CREDENTIALS

34.6.2.1.2 アイデンティティ伝播のためのクライアント・アプリケーションの要件

アイデンティティ伝播が機能するのは、アプリケーションがOracle WebLogic Serverコンテナにデプロイされ、コンテナ・セキュリティによって保護されている場合、またはクライアントがカスタムJAASログイン・モジュールによって保護されている場合のみです。

エンド・ユーザーは、正しいユーザー名とパスワードを使用してクライアント・アプリケーションにログインします。クライアント・アプリケーションを使用するユーザーは、SOAアプリケーションで使用されるアイデンティティ・ストアで使用可能である必要があります。このため、クライアントの構成には、ワークフロー・サービスやOracle SOA Suiteで使用するアイデンティティ・ストアと同じアイデンティティ・ストアを使用することをお薦めします。これにより、ユーザーがクライアント側に存在している場合、そのユーザーはサーバー側にも存在していることが保証されます。

アイデンティティ・ストアの構成の詳細は、Oracle Fusion Middlewareアプリケーション・セキュリティ・ガイドを参照してください。

カスタム・アイデンティティ・ストアとの相互作用の詳細は、次のURLを参照してください。

http://www.oracle.com/technetwork/middleware/id-mgmt/overview/index.html

34.6.2.2 SOAPクライアント用のSAMLトークン・アイデンティティ伝播

SOAPクライアントを使用する場合は、Oracle WebサービスでサポートされているSAMLトークン・アイデンティティ伝播を使用できます。

この項では、アプリケーションがOracle WebLogic Serverコンテナ内に存在し、このコンテナによって保護されていることを前提にしています。

34.6.2.2.1 クライアント構成

アイデンティティ伝播を有効にするには、クライアント構成で特別な伝播モードを指定する必要があります。

34.6.2.2.2 プロパティを使用したアイデンティティ伝播モード設定

プロパティを使用する場合は、CONNECTION_PROPERTY.SOAP_IDENTITY_PROPAGATIONプロパティに値samlを移入します。

- 動的SAMLトークン伝播モード
SAMLトークン・ポリシーは動的に提供されます(デフォルト)。例34-22に示すプロパティはオプションです。アイデンティティ伝播モードが設定されている場合、デフォルトでは動的モードで実行します。

例34-22 プロパティを使用したアイデンティティ伝播モード設定

properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.SOAP_
IDENTITY_PROPAGATION_MODE , "dynamic");

SAMLトークンでは、デフォルトで、セキュリティ・ポリシーURIのoracle/wss10_saml_token_client_policyに基づいて動的ポリシーが構成されます。ロギングは使用されません。デフォルトのポリシーURIを上書きするには、クライアントで例34-23に示すコードを追加します。

例34-23 デフォルトのポリシーURIの上書き

properties.put(CONNECTION_PROPERTY.SECURITY_POLICY_URI     "oracle/wss10_saml_
token_client_policy");
properties.put(CONNECTION_PROPERTY.MANAGEMENT_POLICY_URI , "oracle/log_policy");

例34-24に、SAMLトークン動的クライアントを示します。

例34-24 トークン動的クライアント

Map<CONNECTION_PROPERTY,String> properties = new HashMap<ONNECTION_
PROPERTY,String>();
properties.put(CONNECTION_PROPERTY.SOAP_IDENTITY_PROPAGATION , "saml");
properties.put(CONNECTION_PROPERTY.SOAP_END_POINT_ROOT,
"http://myhost.us.example.com:7001");
properties.put(ONNECTION_PROPERTY.SECURITY_POLICY_URI, "oracle/wss10_saml_token_
client_policy"); //optional
properties.put(CONNECTION_PROPERTY.MANAGEMENT_POLICY_URI , "oracle/log_policy");
//optional
IWorkflowServiceClient client =
WorkflowServiceClientFactory.getWorkflowServiceClient(
WorkflowServiceClientFactory.SOAP_CLIENT,
properties, null);

ポリシーURIへのクライアント参照は、サーバー・ポリシーURIと一致する必要があります。そうでない場合、SAMLトークン伝播は失敗します。

34.6.2.2.3 構成ファイルでのアイデンティティ伝播モード設定

構成ファイルでは、例34-25に示すように、<soapClient>の<identityPropagation>要素を使用して伝播モードを定義できます。

例34-25 <identityPropagation>要素

<soapClient>
<rootEndPointURL>http://myhost.us.example.com:7001</rootEndPointURL>
<identityPropagation mode="dynamic" type="saml">
<policy-references>
<policy-reference enabled="true" category="security"
uri="oracle/wss10_saml_token_client_policy"/>
</policy-references>
</identityPropagation> </soapClient>

詳細は、『Oracle Fusion Middleware Web Servicesセキュリティおよび管理者ガイド』を参照してください。

34.6.2.2.4 JAXBオブジェクトを使用したアイデンティティ伝播モード設定

アイデンティティ伝播モードは、JAXBオブジェクトを使用し、プログラムによって設定できます。

34.6.2.3 公開鍵の別名

ワークフロー・クライアントとともにoracle.wsm.security.util.SecurityConstants.ClientConstants.WSS_RECIPIENT_KEY_ALIASプロパティを使用できます。このプロパティは、アウトバウンド・メッセージ・タイプの暗号化に使用する受信者の公開鍵に別名を設定します。このプロパティを使用して、公開鍵の別名でワークフロー・サービスを保護します。このプロパティが関連するのは、SOAPクライアント・タイプでアイデンティティ伝播が使用される場合のみです。

公開鍵の別名を定義する場合は、クライアント・コードでWSS_RECIPIENT_KEY_ALIAS値をマップに追加する必要があります。例34-26に詳細を示します。

例34-26 WSS_RECIPIENT_KEY_ALIASプロパティ

Map<CONNECTION_PROPERTY,String> properties = new HashMap<ONNECTION_
PROPERTY,String>();
properties.put(CONNECTION_PROPERTY.SOAP_IDENTITY_PROPAGATION , "saml");
properties.put(CONNECTION_PROPERTY.SOAP_END_POINT_ROOT,
"http://myhost.us.example.com:7001");
properties.put(CONNECTION_PROPERTY.WSS_RECIPIENT_KEY_ALIAS,keyAlias);
// where keyAlias  is a key alias value
properties.put(ONNECTION_PROPERTY.SECURITY_POLICY_URI, "oracle/wss10_saml_token_
client_policy"); //optional
properties.put(CONNECTION_PROPERTY.MANAGEMENT_POLICY_URI , "oracle/log_policy");
//optional
IWorkflowServiceClient client =
WorkflowServiceClientFactory.getWorkflowServiceClient(
WorkflowServiceClientFactory.SOAP_CLIENT,
properties, null);

クライアントでJAXBオブジェクトのWorkflowServicesClientConfigurationTypeまたはwf_client_config.xmlファイルを使用する場合は、wssRecipientKeyAliasと呼ばれるオプション要素をSOAPクライアントのidentityPropagation要素の下に追加します。例34-27に詳細を示します。

例34-27 wssRecipientKeyAlias要素

<xsd:complexType name="identityPropagationType">
<xsd:sequence>
<xsd:element name="policy-references"  type="PolicyReferencesType"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="wssRecipientKeyAlias"  type="xsd:string"  minOccurs="0"
maxOccurs="1"/> </xsd:sequence>
<xsd:attribute name="type" type="xsd:string"  default="saml"/>
<xsd:attribute name="mode" type="xsd:string"  default="dynamic"/>
</xsd:complexType>

資格証明ストアでの公開鍵の別名の作成方法および使用方法の詳細は、『Oracle Fusion Middleware Web Servicesセキュリティおよび管理者ガイド』を参照してください。

34.6.3 クライアントJARファイル

アイデンティティ伝播を使用しないクライアント・アプリケーションには、そのクラスパスにbpm-services.jarファイルを指定する必要があります。11g リリース1の場合、クライアントのクラスパスには例34-28に示すファイルが必要です。

例34-28 クライアントJARファイル

${bea.home}/wlserver_10.3/server/lib/wlfullclient.jar
${bea.home}/AS11gR1SOA/webservices/wsclient_extended.jar
${bea.home}/AS11gR1SOA/soa/modules/oracle.soa.fabric_11.1.1/bpm-infra.jar
${bea.home}/AS11gR1SOA/soa/modules/oracle.soa.workflow_11.1.1/bpm-services.jar

wlfullclient.jarファイルは生成する必要があります。

1. wlfullclient.jarは、次のように生成します。

cd ${bea.home}/wlserver_10.3/server/lib
java -jar ../../../modules/com.bea.core.jarbuilder_1.3.0.0.jar

34.7 ヒューマン・タスクのタスクの状態

次のリストに、ヒューマン・タスクで利用可能なすべてのタスクの状態を示します。すべての状態の定数は、IWorkflowConstants.javaで定義されています。

- String TASK_STATE_ALERTED = "ALERTED";

- String TASK_STATE_ASSIGNED = "ASSIGNED";

- String TASK_STATE_COMPLETED = "COMPLETED";

- String TASK_STATE_DELETED = "DELETED";

- String TASK_STATE_ERRORED = "ERRORED";

- String TASK_STATE_EXPIRED = "EXPIRED";

- String TASK_STATE_INFO_REQUESTED = "INFO_REQUESTED";

- String TASK_STATE_OUTCOME_UPDATED = "OUTCOME_UPDATED";

- String TASK_STATE_STALE = "STALE";

- String TASK_STATE_SUSPENDED = "SUSPENDED";

- String TASK_STATE_WITHDRAWN = "WITHDRAWN";

IWorkflowConstants.javaの詳細は、Oracle Fusion Middleware Oracle SOA Suiteワークフロー・サービスJava APIリファレンスを参照してください。

34.8 Oracle Workflowのデータベース・ビュー

この項では、データベース・ビューについて説明します。データベース・ビューを使用すると、レポート受信の問合せをOracle Workflowサービス・スキーマに対して実行できます。表34-22に、Oracle BPM Worklistで公開されるレポート、およびこれらのレポートに対応するデータベース・ビューを示します。

表34-22 レポートのビュー

既存のワークリスト・レポート

対応するデータベース・ビュー

不参加タスク・レポート

WFUNATTENDEDTASKS_VIEW

タスクのサイクル・タイム・レポート

WFTASKCYCLETIME_VIEW

タスクの生産性レポート

WFPRODUCTIVITY_VIEW

タスクの優先度レポート

WFTASKPRIORITY_VIEW

34.8.1 不参加タスク・レポート・ビュー

表34-23に、WFUNATTENDEDTASKS_VIEWレポート・ビューを示します。

表34-23 不参加タスク・レポート・ビュー

名前

タイプ

TASKID脚注1

VARCHAR2(64)

TASKNAME

VARCHAR2(200)

TASKNUMBER

NUMBER

CREATEDDATE

DATE

EXPIRATIONDATE

DATE

STATE

VARCHAR2(100)

PRIORITY

NUMBER

ASSIGNEEGROUPS

VARCHAR2(2000)

脚注1NOT NULL列

例:

- 例34-29に、有効期限が翌週の不参加タスクの問合せを示します。

例34-29 有効期限が翌週の不参加タスクの問合せ

SELECT tasknumber, taskname, assigneegroups FROM WFUNATTENDEDTASKS_VIEW
WHERE expirationdate > current_date AND expirationdate < current_date +
7;

- 例34-30に、mygroupの不参加タスクの問合せを示します。

例34-30 mygroupの不参加タスクの問合せ

SELECT tasknumber, taskname, assigneegroups FROM WFUNATTENDEDTASKS_VIEW
WHERE 'mygroup' IN assigneegroups;

- 例34-31に、過去30日以内に作成された不参加タスクの問合せを示します。

例34-31 過去30日以内に作成された不参加タスクの問合せ

SELECT tasknumber, taskname, assigneegroups FROM WFUNATTENDEDTASKS_VIEW
WHERE createddate > current_date -30;

34.8.2 タスクのサイクル・タイム・レポート・ビュー

表34-24に、WFTASKCYCLETIME_VIEWレポート・ビューを示します。

表34-24 タスクのサイクル・タイム・レポート・ビュー

名前

タイプ

TASKID脚注1

VARCHAR2(64)

TASKNAME

VARCHAR2(200)

TASKNUMBER

NUMBER

CREATEDDATE

DATE

ENDDATE

DATE

CYCLETIME

NUMBER(38)

脚注1NOT NULL列

例:

- 例34-32に、過去30日以内に作成された完了済タスクの平均サイクル・タイム(タスク完了時間)の計算を示します。

例34-32 過去30日以内に作成された完了済タスクの平均サイクル・タイム

SELECT avg(cycletime) FROM  WFTASKCYCLETIME_VIEW  WHERE createddate >
(current_date - 30);

- 例34-33に、過去30日以内に作成されたすべての完了済タスクの平均サイクル・タイムの問合せおよびタスク名によるグループ化を示します。

例34-33 過去30日以内に作成された完了済タスクの平均サイクル・タイムの問合せおよびタスク名によるグループ化

SELECT taskname, avg(cycletime) FROM WFTASKCYCLETIME_VIEW WHERE
createddate > (current_date - 30) GROUP BY taskname;

- 例34-34に、各タスクで要した最短および最長時間の問合せを示します。

例34-34 各タスクで要した最短および最長時間

SELECT taskname, min(cycletime), max(cycletime) FROM WFTASKCYCLETIME_VIEW
GROUP BY taskname;

- 例34-35に、過去7日以内に完了したタスクの平均サイクル・タイムの計算を示します。

例34-35 過去7日以内に完了したタスクの平均サイクル・タイム

SELECT avg(cycletime) FROM  WFTASKCYCLETIME_VIEW  WHERE enddate >
(current_date - 7);

- 例34-36に、完了に8日以上要したタスクの問合せを示します。

例34-36 完了に8日以上要したタスク

SELECT taskname, avg(cycletime) FROM WFTASKCYCLETIME_VIEW WHERE cycletime
> ((current_date +7) - current_date) GROUP BY taskname;

34.8.3 タスクの生産性レポート・ビュー

表34-25に、WFPRODUCTIVITY_VIEWレポート・ビューを示します。

表34-25 タスクの生産性レポート・ビュー

名前

タイプ

TASKNAME

VARCHAR2(200)

TASKID

VARCHAR2(200)

TASKNUMBER

NUMBER

USERNAME

VARCHAR2(200)

STATE脚注1

VARCHAR2(100)

LASTUPDATEDDATE

DATE

脚注1完了済タスクの場合、状態はNULLです。問合せでは、decode(outcome, '', 'COMPLETED', outcome)を使用します。

例:

- 例34-37に、過去30日以内にユーザーが更新した一意のタスク数のカウントを示します。

例34-37 過去30日以内に更新した一意のタスク数

SELECT username, count(distinct(taskid))  FROM WFPRODUCTIVITY_VIEW WHERE
lastupdateddate > (current_date -30) GROUP BY username;

- 例34-38に、過去7日以内にユーザーが更新したタスク数(タスクによっては複数回更新された可能性があります)のカウントを示します。

例34-38 過去7日以内に更新したタスク数

SELECT username, count(taskid)  FROM WFPRODUCTIVITY_VIEW  WHERE
lastupdateddate > (current_date -7) GROUP BY username;

- 例34-39に、ユーザーが作業した各タスク・タイプのタスク数のカウントを示します。

例34-39 ユーザーが作業した各タスク・タイプのタスク数

SELECT username, taskname, count(taskid) FROM WFPRODUCTIVITY_VIEW GROUP
BY username, taskname;

- 例34-40に、過去100日以内にユーザーが作業した各タスク・タイプのタスク数のカウントを示します。

例34-40 過去100日以内に作業した各タスク・タイプのタスク数

SELECT username, taskname, count(taskid) FROM WFPRODUCTIVITY_VIEW WHERE
lastupdateddate > (current_date -100) GROUP BY username, taskname;

34.8.4 タスクの優先度レポート・ビュー

表34-26に、WFTASKPRIORITY_VIEWレポート・ビューを示します。

表34-26 タスクの優先度レポート・ビュー

名前

タイプ

TASKID脚注1

VARCHAR2(64)

TASKNAME

VARCHAR2(200)

TASKNUMBER

NUMBER

PRIORITY

NUMBER

OUTCOME

VARCHAR2(100)

ASSIGNEDDATE

DATE

UPDATEDDATE

DATE

UPDATEDBY

VARCHAR2(64)

脚注1NOT NULL列

例:

- 例34-41に、各タスク優先度で各ユーザーが更新したタスク数の問合せを示します。

例34-41 各タスク優先度で各ユーザーが更新したタスク数

SELECT updatedby, priority, count(taskid) FROM  WFTASKPRIORITY_VIEW GROUP
BY  updatedby, priority;

- 例34-42に、タスクから結果までの分布の問合せを示します。

例34-42 タスクから結果までの分布

SELECT taskname, decode(outcome, '', 'COMPLETED', outcome),  count
(taskid) FROM WFTASKPRIORITY_VIEW GROUP BY taskname, outcome;

- 例34-43に、各優先度で特定のユーザーが更新したタスク数の問合せを示します。

例34-43 各優先度で特定のユーザーが更新したタスク数

SELECT priority, count(taskid) FROM WFTASKPRIORITY_VIEW WHERE
updatedby='jstein' GROUP BY priority;

35 Microsoft Excelとヒューマン・タスクとの統合

この章では、開発者を対象として、Oracle SOA Suiteのエンタープライズ・システム機能をMicrosoft Excel 2007と統合する方法について説明します。この統合によって、Microsoft ExcelからのBPELプロセスの起動およびワークフロー電子メール通知へのMicrosoft Excelワークブックの添付が可能になります。この統合は、複数のツールを切り替えずに構成できます。

この章には次の項が含まれます:

- 第35.1項「ExcelワークブックからBPELプロセスを起動するための環境の構成」

- 第35.2項「ヒューマン・タスク・ワークフロー電子メール通知へのExcelワークブックの添付」

35.1 ExcelワークブックからBPELプロセスを起動するための環境の構成

Oracle WebLogic ServerにデプロイされたBPELプロセスは、Excelワークブックから起動できます。このタスクを実行するには、Application Development Frameworkデスクトップ統合(ADF-DI)のプラグインを、BPELプロセスを起動するExcelドキュメントと同じホストにインストールします。

35.1.1 Webサービス・データ・コントロール・タイプのOracle JDeveloperプロジェクトの作成方法

プロジェクトを作成するには、「Webサービス・データ・コントロールの作成」ウィザードを使用します。

Webサービス・データ・コントロール・タイプのOracle JDeveloperプロジェクトを作成する手順は、次のとおりです。

1. Oracle JDeveloperで、「ファイル」メニューから「新規」を選択します。「新規ギャラリ」ダイアログが表示されます。

2. 「カテゴリ」セクションで、「ビジネス層」を開き、次に、「データ・コントロール」を選択します。対応する項目が「項目」ペインに表示されます。

3. この「項目」ペインで、「Webサービス・データ・コントロール」を選択し、「OK」をクリックします。「Webサービス・データ・コントロールの作成」ウィザードが表示されます。

4. このウィザードのオンライン・ヘルプの手順に従います。この手順では、このプロジェクトで使用するWSDLファイルと操作を選択するように求めるプロンプトが表示されます。

35.1.2 ダミーのJSFページの作成方法

このタスクでは、ページ定義ファイルを生成します。JSFファイルに生成される実際のレイアウトは重要ではありません。重要なのは、コントロールとアクションを含むページ定義ファイルを生成することです。このページ定義は後でExcelファイルで使用します。

ダミーのJSFページを作成する手順は、次のとおりです。

1. Oracle JDeveloperで、「ファイル」メニューから「新規」を選択します。「新規ギャラリ」ダイアログが表示されます。

2. 「カテゴリ」セクションで、「Web層」ノードから「JSF」を選択します。対応する項目が「項目」ペインに表示されます。

3. この「項目」ペインで「JSFページ」を選択し、「OK」をクリックします。「JSFページの作成」ダイアログが表示されます。

4. このダイアログのオンライン・ヘルプの手順に従って、各フィールドに入力します。

5. プロンプトが表示されたら、Excelドキュメントで使用するコントロールとフィールドを「コンポーネント・パレット」からドラッグ・アンド・ドロップします。

このタスクの実行方法の例については、第35.2.3.3項「タスク3: Excelワークブックで使用する有効なページ定義ファイルの作成」を参照してください。

35.1.3 Oracle JDeveloperプロジェクトへのデスクトップ統合の追加方法

Oracle ADF-DIをプロジェクトのテクノロジ・スコープに追加するには、JDeveloperで「プロジェクト・プロパティ」ダイアログを使用します。

Oracle ADFデスクトップ統合をプロジェクトに追加する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、Oracle ADF-DIモジュールを追加するプロジェクトを右クリックし、コンテキスト・メニューから「プロジェクト・プロパティ」を選択します。
アプリケーションでFusion Webアプリケーションのアプリケーション・テンプレートを使用する場合は、ViewControllerプロジェクトを選択します。アプリケーションで他のアプリケーション・テンプレートを使用する場合は、Webアプリケーションに対応するプロジェクトを選択します。

2. 「プロジェクト・プロパティ」ダイアログで「テクノロジ・スコープ」を選択して、使用可能なテクノロジのリストを表示します。

3. 「ADFデスクトップ統合」および「ADFライブラリWebアプリケーション・サポート」プロジェクト・テクノロジを選択し、「選択済のテクノロジ」リストに追加します。

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

35.1.4 Oracle JDeveloperプロジェクトへのデスクトップ統合の追加時の処理内容

Oracle ADF-DIモジュールをプロジェクトのテクノロジ・スコープに追加すると、次のイベントが発生します。

- プロジェクトでは、Oracle ADF-DIのランタイム・ライブラリを追加します。このライブラリは、クラスパス内で次の.jarファイルを参照します。

- wsclient.jar

- adf-desktop-integration.jar

- resourcebundle.jar

- プロジェクトでは、ADFバインディング・フィルタ(adfBindings)を追加します。

- プロジェクトのデプロイメント・ディスクリプタ(web.xml)が次のエントリを含むように変更されます。

- adfdiRemoteという名前のサーブレット

注意:

adfdiRemoteのservlet-mapping要素のurl-pattern属性の値は、『Oracle Fusion Middleware Oracle Application Development Frameworkのためのデスクトップ統合開発者ガイド』で説明されているRemoteServletPathワークブック・プロパティの値と一致する必要があります。

- adfdiExcelDownloadという名前のフィルタ

- Excelファイル(.xlsxおよび.xlsm)用のMIMEマッピング

これらのエントリがすべてではありません。Oracle ADF-DIをプロジェクトに追加すると、web.xmlはさらに変更されます。また、web.xml内の一部のエントリは、そのエントリが存在しない場合のみ追加されます。

ADFライブラリWebアプリケーション・サポートをプロジェクトのテクノロジ・スコープに追加すると、そのプロジェクトのweb.xmlファイルは、例35-1に示すエントリを含むように変更されます。

例35-1 web.xmlファイルのエントリ

<filter>
<filter-name>ADFLibraryFilter</filter-name>
<filter-class>oracle.adf.library.webapp.LibraryFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ADFLibraryFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<servlet>
<servlet-name>adflibResources</servlet-name>
<servlet-class>oracle.adf.library.webapp.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>adflibResources</servlet-name>
<url-pattern>/adflib/*</url-pattern>
</servlet-mapping>

例35-2に示すように、ADFライブラリWebアプリケーション・サポートのフィルタ(<filter-name>ADFLibraryFilter</filter-name>)は、web.xmlのadfdiExcelDownloadフィルタ・エントリの下に表示されます。このアクションにより、統合されたExcelワークブックをアプリケーションからダウンロードできます。

例35-2 web.xmlファイルのエントリ

<filter>
<filter-name>adfdiExcelDownload</filter-name>
<filter-class>oracle.adf.desktopintegration.filter.DIExcelDownloadFilter</filter-c
lass>
</filter>
<filter>
<filter-name>ADFLibraryFilter</filter-name>
<filter-class>oracle.adf.library.webapp.LibraryFilter</filter-class>
</filter>
...
<filter-mapping>
<filter-name>adfdiExcelDownload</filter-name>
<url-pattern>*.xlsx</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>adfdiExcelDownload</filter-name>
<url-pattern>*.xlsm</url-pattern>
</filter-mapping>
...
<filter-mapping>
<filter-name>ADFLibraryFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

web.xmlの詳細は、『Oracle Fusion Middleware Oracle Application Development Frameworkのためのデスクトップ統合開発者ガイド』を参照してください。

35.1.5 ステップ1で作成したWebアプリケーションのデプロイ方法

このタスクの実行方法の例については、第35.2.3.5項「タスク5: ADFタスク・フローのデプロイ」を参照してください。

35.1.6 Microsoft Excelのインストール方法

Microsoft Excelは、適切なMicrosoft社のドキュメントに従ってインストールしてください。

35.1.7 Oracle ADFデスクトップ統合プラグインのインストール方法

このインストールを実行するには、第35.2.3.4項「タスク4: Excelワークブックの準備」の手順に従ってください。

35.1.8 ユーザー・インタフェース・コントロールの指定方法とExcelワークブックの作成方法

手順については、第35.2.3.4項「タスク4: Excelワークブックの準備」を参照してください。

35.2 ヒューマン・タスク・ワークフロー電子メール通知へのExcelワークブックの添付

Excelワークブックは、Oracle BPM Worklistを使用するかわりに、ヒューマン・タスク・ワークフロー電子メール通知の一部として、タスクの詳細に添付できます。この場合、ユーザーは新規タスクに関する電子メールを受信します。この電子メールにはExcelワークブックが添付されており、ユーザーが添付ファイルを開くと、Oracle BPM Worklistと同様のログイン・ページが表示されます。Excelワークブックには、タスクIDやペイロードのようなタスクの詳細が含まれています。ユーザーが実行できるアクションに対応したボタンのいずれかをクリックすると、対応するBPELプロセスが起動します。

35.2.1 ヒューマン・タスク・ワークフロー電子メール通知へのExcelワークブックの添付の有効化

この機能を有効にする手順は、次のとおりです。

1. Oracle JDeveloperで、BPELプロセスの特定のヒューマン・タスク・アクティビティに対応するADFタスク・フローを作成します。

2. タスク・フローがデプロイされているサーバーを指し示すようにADF-DI対応のExcelシートの設定を変更し、次に、このExcelシートを、ADFタスク・フロー用にパッケージ化した.warファイルの一部として保存します。これらのタスクの実行手順については、第35.2.3項「例: 電子メール通知へのExcelワークブックの添付」で説明します。後で、第35.1.2項「ダミーのJSFページの作成方法」で生成したページ定義ファイルを使用します。

注意:

ADFタスク・フローへのExcelワークブックのパッケージ化は、ADFタスク・フローと、ワークフローに使用するExcelシートの間に1対1の対応があることを前提にしています。

3. デスクトップ統合のADFタスク・フロー・プロジェクトを有効にして、サーバーにデプロイします。

35.2.2 ヒューマン・タスク・ワークフロー電子メール通知へのExcelワークブックの添付を有効化した場合の実行時の処理内容

実行時における次のエンド・ユーザーの動作に注意してください。

- ユーザーは、新規タスクに関する電子メール通知をExcel添付ファイルとともに受信します。ユーザーが添付ファイルを開くと、ログイン・ページが表示され、ユーザー名とパスワードの入力を求めるプロンプトが表示されます。このログイン・ページは、Oracle BPM Worklistのログイン・ページに類似しています。

- Excelワークブックは、タスクの詳細(タスク識別子、ペイロードなど)とともにロード・アップされます。ユーザーが実行できるアクションに対応するボタンが表示されます。いずれかのボタンをクリックすると、そのタスクがステップとなるBPELプロセスが起動します。

次の実行時の動作に注意してください。

- Excelワークブックが添付ファイルとして追加されるのは、対応するタスクの「タスクの添付ファイルを含む」フラグがtrueに設定されている場合のみです。

- 実行時には、Excelワークブックを添付ファイルとして追加する前に、ワークフローに対してデジタル署名が有効でないことが検証されます。

- ADFタスク・フローがサーバーにデプロイされると、タスク・フローURIのホスト名やポート番号などのデータがデータベースに登録されます。

- 電子メール通知が作成されると、実行時に、アプリケーション・サーバーのホスト名とポート番号、およびタスク・フロー・アプリケーションのコンテキスト・ルートがデータベースから取得されます。この情報を使用して、Excelワークブック(workflow_name.xls)が検索されます。

35.2.3 例: 電子メール通知へのExcelワークブックの添付

この項では、電子メール通知にExcelワークブックを添付する方法を説明します。

35.2.3.1 タスク1: Oracle ADF-DI機能を使用したADFタスク・フロー・プロジェクトの有効化

このタスクでは、WebアプリケーションをOracle ADF-DIで使用するように構成します。

1. ヒューマン・タスクに基づいてADFタスク・フロー・プロジェクトを作成します。これにより、タスクに対応するデータ・コントロール、およびタスクの構造に対応する.xmlファイルが作成されます。図35-1に、サンプル・プロジェクトが開いた状態のOracle JDeveloperを示します。

図35-1 サンプル・プロジェクトが開いた状態のOracle JDeveloper

「図35-1 サンプル・プロジェクトが開いた状態のOracle JDeveloper」の説明

2. 第35.1.3項「Oracle JDeveloperプロジェクトへのデスクトップ統合の追加方法」の手順に従って、Oracle ADFデスクトップ統合をプロジェクトに追加します。

図35-2に、Oracle ADF-DIをプロジェクトに追加するときのOracle JDeveloperの「プロジェクト・プロパティ」ダイアログを示します。

図35-2 Oracle JDeveloperの「プロジェクト・プロパティ」ダイアログ

「図35-2 Oracle JDeveloperの「プロジェクト・プロパティ」ダイアログ」の説明

3. ステップ2で述べたテクノロジ・スコープをプロジェクトに追加したときは、必要なイベントが発生していることを確認します。

1. 「アプリケーション・ナビゲータ」で、プロジェクトを右クリックします。

2. 「プロジェクト・プロパティ」をクリックし、「ライブラリとクラスパス」を選択します。

3. ADFデスクトップ統合ランタイムというエントリが存在し、選択されていることを確認します。

4. このライブラリを選択し、「表示」をクリックします。

5. wsclient.jarおよびadf-desktop-integration.jarのライブラリ参照がクラスパスに存在することを確認します。

4. プロジェクトのデプロイメント・ディスクリプタ(web.xml)が次のエントリを含むように変更されていることを確認します。

- adfdiRemoteという名前のサーブレット

- adfdiExcelDownloadという名前のフィルタ

- Excelファイル用のMIMEマッピング

これらのエントリがすべてではありません。「ADFデスクトップ統合」および「ADFライブラリWebアプリケーション・サポート」をプロジェクトに追加すると、web.xmlはさらに変更されます。次に、デプロイメント・ディスクリプタのサンプル・スニペットを示します。

<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<description>...</description>
<param-name>org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION
</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<description>Whether the 'Generated by...' comment at the bottom of ADF
Faces HTML pages should contain version number information.</description>
<param-name>oracle.adf.view.rich.versionString.HIDDEN</param-name>
<param-value>false</param-value>
</context-param>
<filter>
<filter-name>trinidad</filter-name>
<filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter
</filter-class>
</filter>
<filter>
<filter-name>ADFLibraryFilter</filter-name>
<filter-class>oracle.adf.library.webapp.LibraryFilter
</filter-class>
</filter>
<filter>
<filter-name>adfBindings</filter-name>
<filter-class>oracle.adf.model.servlet.ADFBindingFilter
</filter-class>
</filter>
<filter>
<filter-name>adfdiExcelDownload</filter-name>
<filter-class>
oracle.adf.desktopintegration.filter.DIExcelDownloadFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>trinidad</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>adfBindings</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>trinidad</filter-name>
<servlet-name>adfdiRemote</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>adfBindings</filter-name>
<servlet-name>adfdiRemote</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>adfdiExcelDownload</filter-name>
<url-pattern>*.xlsx</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>adfdiExcelDownload</filter-name>
<url-pattern>*.xlsm</url-pattern>
</filter-mapping>

<filter-mapping>
<filter-name>ADFLibraryFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>resources</servlet-name>
<servlet-class>org.apache.myfaces.trinidad.webapp.ResourceServlet</servlet-clas
s>
</servlet>
<servlet>
<servlet-name>adflibResources</servlet-name>

<servlet-class>oracle.adf.library.webapp.ResourceServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>adfdiRemote</servlet-name>
<servlet-class>oracle.adf.desktopintegration.servlet.DIRemoteServlet</servlet-c
lass>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>resources</servlet-name>
<url-pattern>/adf/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>resources</servlet-name>
<url-pattern>/afr/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>adflibResources</servlet-name>
<url-pattern>/adflib/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>adfdiRemote</servlet-name>
<url-pattern>/adfdiRemoteServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>35</session-timeout>
</session-config>
<mime-mapping>
<extension>html</extension>
<mime-type>text/html</mime-type>
</mime-mapping>
<mime-mapping>
<extension>txt</extension>
<mime-type>text/plain</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xlsx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</m
ime-type>
</mime-mapping>
<mime-mapping>
<extension>xlsm</extension>
<mime-type>application/vnd.ms-excel.sheet.macroEnabled.12</mime-type>
</mime-mapping>

5. 次の<auth-filter>エントリをweblogic.xmlに追加します。

<weblogic-web-app>
<auth-filter>oracle.bpel.services.workflow.client.worklist.util.FDIFilter
</auth-filter>  .  .</weblogic-web-app>

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

7. プロジェクトを右クリックし、「再ビルド」をクリックします。

8. コンパイル・エラーがなく、正常にビルドが完了したことを確認します。

これで、WebアプリケーションはOracle ADF-DIで使用するように構成されました。

35.2.3.2 タスク2: 認証の設定

このタスクでは、Oracle ADF-DIを追加して、Excelワークブック用のWebセッションを作成する必要があります。

1. ADFセキュリティをプロジェクトに追加します。

1. 「アプリケーション」メニューから、「保護」→「ADFセキュリティの構成」の順に選択します。

2. 「ADF認証」を選択します。

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

2. アプリケーションのログイン・ページを作成します。

1. ExpenseReportTaskFlow\public_html\ディレクトリから、LoginPage.jspファイルをproject_home\public_htmlディレクトリにコピーします。

2. Oracle JDeveloperのビューをリフレッシュします。

3. LoginPage.jspファイルが表示されていることを確認します。これは、図35-3に示すように表示されます。

図35-3 Oracle JDeveloper: Login.jspファイル

「図35-3 Oracle JDeveloper: Login.jspファイル」の説明

3. ADFセキュリティを追加した後は、次のエントリがweb.xmlファイルに追加されていることを確認します。欠落しているエントリがある場合は、手動で追加します。第35.2.3.2項「タスク2: 認証の設定」のステップ2で作成したログイン・ページを使用して、フォーム認証が使用されます。

<security-constraint>
<web-resource-collection>
<web-resource-name>allPages</web-resource-name>
<url-pattern>/</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>Administrators</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>adfAuthentication</web-resource-name>
<url-pattern>/adfAuthentication</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>Administrators</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>jazn.com</realm-name>
<form-login-config>
<form-login-page>/LoginPage.jsp</form-login-page>
<form-error-page>/LoginPage.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>Administrators</role-name>
</security-role>

図35-4に、これらのエントリがWebアプリケーション・デプロイメント・ディスクリプタ・ダイアログにグラフィカルに表示されている様子を示します。

図35-4 Oracle JDeveloper: アプリケーション・デプロイメント・ディスクリプタ

「図35-4 Oracle JDeveloper: アプリケーション・デプロイメント・ディスクリプタ」の説明

4. web.xmlに追加したすべての論理セキュリティ・ロールについて、次のように、weblogic.xmlに対応するエントリを作成します。

<weblogic-web-app>
<auth-filter>oracle.bpel.services.workflow.client.worklist.util.FDIAuthFilter</
auth-filter>
<security-role-assignment>
<role-name>Administrators</role-name>
<principal-name>fmwadmin</principal-name>
<principal-name>users</principal-name>
</security-role-assignment>
.
.
</weblogic-web-app>

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

これで、ADFタスク・フローのWebアプリケーションに、Excelワークブックで使用できるログイン機能が構成されました。

35.2.3.3 タスク3: Excelワークブックで使用する有効なページ定義ファイルの作成

ページ定義ファイルExcelControlsPageDef.xmlを使用して、Excelワークブックを作成します。次の手順を実行します。

1. 次の手順を実行して、新規Javaクラスを作成します。

1. 「テクノロジ」→「一般」→シンプル・ファイル→「Javaクラス」の順に選択します。

2. 次のように詳細を指定します。
名前: TaskRetrievers

パッケージ: (デフォルトのままにします)

拡張対象: oracle.bpel.services.workflow.client.worklist.excel.TasksRetriever (「参照」をクリックしてこのクラスを選択します。)

これで、新規Javaクラス<default-package>.TasksRetrieverが作成されます。

2. 新規に作成したこのJavaクラスに対してデータ・コントロールを作成します。このデータ・コントロールは、ユーザーに割り当てられたすべてのタスクを取得するAPIへのアクセスを提供します。図35-5に、データ・コントロールの作成に使用するメニューを示します。

図35-5 Oracle JDeveloper: データ・コントロールの作成

「図35-5 Oracle JDeveloper: データ・コントロールの作成」の説明

3. 新規に作成したデータ・コントロール「TasksRetriever」が「アプリケーション・ナビゲータ」下部の「データ・コントロール」パレットに表示されていることを確認します。図35-6に、「データ・コントロール」パレットが展開された状態の「アプリケーション・ナビゲータ」を示します。

図35-6 Oracle JDeveloper: 「データ・コントロール」パレットが展開された状態の「アプリケーション・ナビゲータ」

「図35-6 Oracle JDeveloper: 「データ・コントロール」パレットが展開された状態の「アプリケーション・ナビゲータ」」の説明

4. ExcelControls.jspxという名前の新規のJSF JSPページを作成します。これにより、Excelドキュメントの作成時にADF-DIで使用できるページ定義が生成されます。図35-7に詳細を示します。

図35-7 Oracle JDeveloper: JSF JSPページの作成

「図35-7 Oracle JDeveloper: JSF JSPページの作成」の説明

5. タスク・ノードを「データ・コントロール」パレットからExcelControls.jspxにドラッグ・アンド・ドロップします。

6. 「ヒューマン・タスク」を選択し、次に「ペイロードを持つ完了済タスク」を選択します。図35-8に、使用する一連のメニューを示します。

図35-8 Oracle JDeveloper: ADF読取り専用フォームの作成

「図35-8 Oracle JDeveloper: ADF読取り専用フォームの作成」の説明

7. 表示されたダイアログで「OK」をクリックします。

8. 1つ以上のタスク・アクションを.jspxファイルにドラッグ・アンド・ドロップします。図35-9に示す例では、APPROVE、REJECT、updateおよびSuspendアクションが追加され、ページ定義にエントリが作成されています。

図35-9 Oracle JDeveloper: ページ定義ファイルの設定

「図35-9 Oracle JDeveloper: ページ定義ファイルの設定」の説明

9. retrieveTasksForUser()メソッドを「データ・コントロール」パレット(TasksRetrieverノードを展開)からExcelControls.jspxにドラッグ・アンド・ドロップします。

10. 「アクション・バインディングの編集」ダイアログで「OK」をクリックします。これにより、ログイン・ユーザーに割り当てられたすべてのタスクを抽出するためのバインディングがExcelControlsPageDef.xmlに作成されます。

11. TaskObjectを「データ・コントロール」パレットからExcelControls.jspxにドラッグ・アンド・ドロップして、ADF読取り専用フォームを作成します。

12. 対応する<methodIterator>実行可能ファイルおよび<attributeValues>バインディングがExcelControlsPageDef.xmlに作成されていることを確認します。図35-10に詳細を示します。

図35-10 Oracle JDeveloper: ページ定義ファイル

「図35-10 Oracle JDeveloper: ページ定義ファイル」の説明

13. Excelワークブックで公開されるタスク詳細の数に応じて、必要な数のADFコントロールをドラッグ・アンド・ドロップします。この例では、使用可能なワークブックを開発するのに最低限必要なタスク詳細のみ公開しています。

14. リスト・バインディングをExcelControlsPageDef.xmlに作成します。このバインディングを使用すると、割り当てられたタスクのリストをExcelワークブックに作成できます。

15. 次のエントリをページ定義の<bindings>要素に追加します。

<list ListOperMode="navigation"
IterBinding="retrieveTasksForUserIterator" id="retrievedTaskList"
StaticList="false">
<AttrNames>
<Item Value="taskNumber"/>
</AttrNames>
</list>

16. 同様に、次のリスト・バインディングをExcelControlsPageDef.xmlに追加します。このリスト・バインディングは、後で支出項目の更新可能な表のリストをExcelワークブックに作成する際に使用します。

<list ListOperMode="navigation" IterBinding="ItemIterator"
id="expenseItemsList" StaticList="false">
<AttrNames>
<Item Value="itemName"/>
</AttrNames>
</list>

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

18. プロジェクトを右クリックし、「再ビルド」をクリックします。

19. コンパイル・エラーがなく、正常にビルドが完了したことを確認します。

35.2.3.4 タスク4: Excelワークブックの準備

Excelワークブックを作成する手順は、次のとおりです。

1. ADF-DIソリューションを実行するためのデスクトップ要件については、『Oracle Fusion Middleware Oracle Application Development Frameworkデスクトップ統合開発者ガイド』の「開発環境の設定」の章を参照してください。

2. Excelに対するセキュリティを設定します。

1. Excelを開きます。

2. 「Microsoft Office」ボタンをクリックし、「Excelのオプション」をクリックします。

3. セキュリティ センター・タブをクリックし、次に、セキュリティ センターの設定をクリックします。

4. 「マクロの設定」タブをクリックし、「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」というラベルのチェック・ボックスをクリックします。

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

3. Oracle ADF-DIモジュールに付属している設定ツールを実行します。この設定ツールは、JDEV_HOME\jdeveloper\adfdi\bin\excel\clientフォルダに格納されています。

4. 新規のExcelワークブックをproject_home\public_htmlディレクトリに作成します。

5. 「表示」をクリックし、次に、「リフレッシュ」をクリックします。これにより、ExcelワークブックがOracle JDeveloperに表示されます。

6. Excelワークブックに対して変換コマンドを実行します。Oracle ADF-DIモジュールの変換ツールconvert-adfdi-excel-solution.exeは、ORACLE_JDEVELOPER_HOME\jdeveloper\adfdi\bin\excel\convertに格納されています。Excelワークブックを変換するには、次のコマンドを実行します。

convert-adfdi-excel-solution.exe <workbook.xlsx> -attach

これで、このExcelワークブックはOracle ADF-DIフレームワークで使用できます。

7. Excelワークブックを開き、ページ定義を選択します。このユースケースでは、ページ定義はexpensereporttaskflow_ExcelControlsPageDefです。図35-11に詳細を示します。

図35-11 Excel: 「ページ定義」ダイアログ

「図35-11 Excel: 「ページ定義」ダイアログ」の説明

8. 「ドキュメントのアクション」ペインで、「ワークブック・プロパティ」を選択します。

9. ProtectedWebPage: http://application_server:port//workflow/application_name/faces/app/logonを指定します。(このURLは保護されており、フォーム認証のトリガーになります。第35.2.3.2項「タスク2: 認証の設定」を参照してください。)
WebAppRoot: http://application_server:port//workflow/application_nameを指定します。「OK」をクリックします。

図35-12に詳細を示します。

図35-12 Excel: WebAppRootの設定

「図35-12 Excel: WebAppRootの設定」の説明

詳細は、『Oracle Fusion Middleware Oracle Application Development Frameworkのためのデスクトップ統合開発者ガイド』を参照してください。

10. 「ドキュメントのアクション」ペインから「ADFバインディング」を挿入して、対応するフィールドをExcelワークブックに作成します。特定のコンポーネントの詳細は、『Oracle Fusion Middleware Oracle Application Development Frameworkのためのデスクトップ統合開発者ガイド』を参照してください。たとえば、バインディングretrievedTaskListを挿入して、値リストを作成します。図35-13に詳細を示します。

図35-13 Excel: 値リストの作成

「図35-13 Excel: 値リストの作成」の説明

11. methodActionバインディングを挿入して、ボタンをExcelに作成します。図35-14に詳細を示します。

図35-14 Excel: methodActionバインディングの挿入

「図35-14 Excel: methodActionバインディングの挿入」の説明

12. ツリー・バインディングを挿入して、ADF表コンポーネントを作成します。表コンポーネントとは、Excel内のレコードの更新可能な表です。たとえば、リスト・バインディングexpenseItemsListは、表コンポーネントへの候補です。

関連項目:

表コンポーネントの作成方法と変更方法の詳細は、『Oracle Fusion Middleware Oracle Application Development Frameworkのためのデスクトップ統合開発者ガイド』を参照してください。

経費レポート・アプリケーションの完成したExcelワークブックは、図35-15に示すように表示されます。

図35-15 Oracle ADF-DIに統合されたExcelワークブック

「図35-15 Oracle ADF-DIに統合されたExcelワークブック」の説明

13. 次の手順を実行して、ワークブックを公開します。

1. ツールバーの「公開」をクリックします。「ワークブックの公開」ダイアログが表示されます。

2. 「ファイル名」フィールドで、名前をworkflow_name.xlsのように指定します。このワークフロー名は、project_home\adfmsrc\hwtaskflow.xmlで指定したWorkflowName要素の値です。この例では、公開するExcelワークブックの名前はExpenseReportTask.xlsです。

14. Oracle JDeveloperで、「表示」→「リフレッシュ」の順にクリックします。

15. 公開されたワークブックが、図35-16に示すように、「Webコンテンツ」の下に表示されていることを確認します。

図35-16 Oracle JDeveloper: 「Webコンテンツ」の下に表示されたワークブックの確認

「図35-16 Oracle JDeveloper: 「Webコンテンツ」の下に表示されたワークブックの確認」の説明

16. 「すべて保存」をクリックします。これで、ADFタスク・フローのデプロイメントの準備ができました。

35.2.3.5 タスク5: ADFタスク・フローのデプロイ

ADFタスク・フローをデプロイする手順は、次のとおりです。

1. タスクの割当て時にExcelワークブックを添付ファイルとして送信するには、対応するタスクをSOAコンポジット・アプリケーションに構成する必要があります。

1. Oracle JDeveloperで、ADFタスク・フローに対応するSOAコンポジット・アプリケーションを開きます。

2. .taskファイルを開きます。

3. ヒューマン・タスク・エディタの「通知」セクションの「詳細」タブで、「電子メール通知によるタスクの添付ファイルの送信」チェック・ボックスが選択されていることを確認します。

2. アプリケーションをデプロイします。デプロイメントを実行するには、SOAコンポジット・アプリケーションを右クリックして「デプロイ」を選択し、次に、プロジェクト名を選択して、デプロイメント・ウィザードの各ページの指示に従います。

3. ADFタスク・フローをデプロイします。

1. 「アプリケーション・ナビゲータ」で「プロジェクト」を展開し、アプリケーションを選択します。

2. 「デプロイ」を選択し、application_TaskFlowを選択します(この例の場合、アプリケーション・タスク・フローはExpenseReportTaskFlowです)。

3. デプロイメント・ウィザードの各ページの指示に従います。

これで、ADFタスク・フローは正常にデプロイされました。

35.2.3.6 タスク6: デプロイしたアプリケーションのテスト

デプロイしたアプリケーションをテストする手順は、次のとおりです。

1. デプロイしたSOAコンポジット・アプリケーションを起動し、割当て先が、Excelワークブックを電子メール通知の一部として受信していることを確認します。図35-17に詳細を示します。

図35-17 電子メール通知に添付されたExcelワークブック

「図35-17 電子メール通知に添付されたExcelワークブック」の説明

注意:

ワークブックを正常に開いて実行するには、ユーザーのデスクトップ・ホストに適切なセキュリティ・ポリシーを設定する必要があります。また、caspolコマンドを実行して、ネットワーク共有でホストされるクライアント・アセンブリに信頼を付与する必要があります。

2. Excelワークブックを開きます。ログイン・ページが表示されます。(これは、第35.1.2項「ダミーのJSFページの作成方法」のLoginPage.jspです。)

3. セキュリティ資格証明を入力します。図35-18に詳細を示します。

図35-18 デスクトップ統合Excelワークブック: 「ログイン」ページ

「図35-18 デスクトップ統合Excelワークブック: 「ログイン」ページ」の説明

4. 次の点についてワークブックを検証します。

- ログイン・ユーザーに割り当てられたすべてのタスクがExcelワークブックに取得されます。図35-19に詳細を示します。

図35-19 割り当てられたタスクがあるADFデスクトップ統合Excelワークブック

「図35-19 割り当てられたタスクがあるADFデスクトップ統合Excelワークブック」の説明

- 割り当てられたタスクのリストからは、必要なタスクに移動でき、必要に応じてタスクを更新できます。たとえば、図35-20に示すように、経費レポート・アプリケーションで新しい支出項目をアップロードできます。

図35-20 ADFデスクトップ統合Excelワークブックでの新規項目のアップロード

「図35-20 ADFデスクトップ統合Excelワークブックでの新規項目のアップロード」の説明

- ワークブックの「ステータス」列に、アップロードが成功したかどうかが示されます。図35-21に詳細を示します。

図35-21 ADFデスクトップ統合Excelワークブック

「図35-21 ADFデスクトップ統合Excelワークブック」の説明

また、「承認」、「却下」、「更新」または「一時停止」をクリックしてアクションを実行することもできます。図35-22に詳細を示します。

図35-22 タスク・アクション

「図35-22 タスク・アクション」の説明

36 タスク・リスト・ポートレットの構成

この章では、開発者がタスク・リスト・ポートレットを構成できる方法について説明します。このアクションにより、Oracle WebCenter Portalポートレットからワークリスト・タスクを確認および操作できます。

この章には次の項が含まれます:

- 第36.1項「タスク・リスト・ポートレットの概要」

- 第36.2項「ポートレット・サーバーへのタスク・リスト・ポートレット・プロデューサ・アプリケーションのデプロイ」

- 第36.3項「タスク・リスト・ポートレットを埋め込むポートレット・コンシューマ・アプリケーションの作成」

- 第36.4項「ワークリスト・ポートレット・パラメータの受け渡し」

36.1 タスク・リスト・ポートレットの概要

JSR-168に準拠したWSRP(Web Services for Remote Portlets)として公開されるワークリスト・タスク・リストは、ポータル・アプリケーションに埋め込むことができます。開発者は、このポートレットを使用して、ユーザーに割り当てられたビジネス・タスクや個人用To Doタスクを確認したり、それらのタスクを操作することができます。また、コンシューマ・アプリケーションを作成して、タスク・リスト・ポートレット・プロデューサ・アプリケーションがホストするJSR-168ポートレットを使用できます。ポートレット・プロデューサ(Oracle WebLogic Serverのポートレット・サーバー)に登録済のコンシューマがこのポートレットを使用できます。このポートレットでは、パラメータを使用した様々なカスタマイズもサポートされています。パラメータについては、第36.4項「ワークリスト・ポートレット・パラメータの受け渡し」を参照してください。図36-1は、高レベルなポートレットのデプロイメントと使用方法を示しています。

図36-1 高レベルなポートレットのデプロイメントと使用方法

「図36-1 高レベルなポートレットのデプロイメントと使用方法」の説明

36.2 ポートレット・サーバーへのタスク・リスト・ポートレット・プロデューサ・アプリケーションのデプロイ

この項では、タスク・リスト・ポートレット・プロデューサ・アプリケーションを管理対象ポートレット・サーバーにデプロイして構成する方法について説明します。

36.2.1 デプロイメントの前提条件

この項では、タスク・リスト・ポートレット・プロデューサ・アプリケーションのデプロイメントの前提条件について説明します。

- タスク・リスト・ポートレットはWSRPポートレット・プロデューサ・アプリケーションであるため、ポートレット・プロデューサ・アプリケーションのデプロイ用に構成された管理対象サーバーにデプロイする必要があります。このためには、Oracle WebCenter Portalをインストールする必要があります。

- Oracle WebCenter PortalとOracle SOA Suiteは、別のドメインにインストールする必要があります。

- タスク・リスト・ポートレット・プロデューサ・アプリケーションがSOAサーバーにインストールされている場合は、第36.2.3項「リモートSOAサーバーへのタスク・リスト・プロデューサの接続方法」で説明する手順を省略できます。

- 図36-1に示すように、タスク・リスト・ポートレット・プロデューサ・アプリケーションは、Oracle WebLogic Serverのポートレット・サーバー(Oracle WebCenter Portalがインストールされているホスト)にデプロイします。このポートレット・サーバーはリモートOracle WebLogic ServerのSOAサーバーに接続し、リモートEnterprise JavaBeans (EJB)コールを使用してタスク・リストにアクセスします。ポートレット・プロデューサ・アプリケーションのEARファイルは、SOAサーバーの次のディレクトリに配置されます。

Oracle_Home/SOA_Home/soa/applications

(例: /fmwhome/AS11gR1SOA/soa/applications)

- 共有ライブラリoracle.soa.workflow.wcは、Oracle WebLogic Serverのポートレット管理対象サーバーにターゲット設定されている必要があります。手順は、第36.2.2項「タスク・リスト・ポートレット・プロデューサ・アプリケーションのデプロイ方法」を参照してください。

36.2.2 タスク・リスト・ポートレット・プロデューサ・アプリケーションのデプロイ方法

タスク・リスト・ポートレット・プロデューサ・アプリケーションをデプロイする手順は、次のとおりです。

1. Oracle Fusion Middleware Oracle WebCenterインストレーション・ガイドの説明に従って、Oracle WebCenter Portalをインストールします。

2. この管理ドメインで、Oracle WebLogic管理サーバーと、Oracle WebLogic Serverのポートレット管理対象サーバーの両方を起動します。管理サーバーと管理対象サーバーを起動する手順については、『Oracle Fusion Middleware管理者ガイド』を参照してください。

3. タスク・リスト・ポートレット・プロデューサ・アプリケーションではデプロイ済のライブラリoracle.soa.workflow.wcが使用されるため、このライブラリがOracle WebLogic Serverのポートレット管理対象サーバーにターゲット設定されていることを確認する必要があります。

1. Oracle WebLogic Server管理コンソールにログインします。

http://hostname:port/console

hostnameとportは、Oracle WebLogic Server管理コンソールのホスト名とポートです。

2. 「デプロイメント」→「oracle.soa.workflow.wc」→「ターゲット」の順に移動します。

3. 「WLS_Portlet」が選択されているかどうかを確認します。選択されていない場合は、選択して更新内容を保存します。

4. TaskListPortlet.earファイルをOracle WebLogic Serverのポートレット管理対象サーバーにデプロイします。

1. 「ドメイン構造」セクションで、「デプロイメント」をクリックします。

2. 「デプロイメント」セクションで、「インストール」をクリックします。

3. TaskListPortlet.earに移動して選択し、アプリケーションとしてインストールします。例:

/Oracle_Home/SOA_Home/soa/applications/TaskListPortlet.ear

5. WebブラウザからWSDLにアクセスして、WSRPプロデューサ・アプリケーションが実行されていることを確認します。

http://server:port/TaskListTaskFlow/portlets/wsrp2?WSDL

36.2.3 リモートSOAサーバーへのタスク・リスト・プロデューサの接続方法

タスク・リスト・ポートレット・プロデューサ・アプリケーションは、リモートOracle WebLogic ServerのSOA管理対象サーバーと通信してログイン・ユーザーのタスク・リストを取得します。詳細は、図36-1を参照してください。これを実行するために、タスク・リスト・ポートレット・プロデューサ・アプリケーションでは、ヒューマン・ワークフロー・サービスAPIへのリモートEJBコールを使用します。したがって、Oracle WebCenter PortalがインストールされているOracle WebLogic ServerにリモートJNDIプロバイダを構成する必要があります。

36.2.3.1 Oracle WebCenter PortalのOracle WebLogic Serverでの外部JNDIの定義方法

Oracle WebCenter PortalのOracle WebLogic Serverで外部JNDIを定義する手順は、次のとおりです。

1. Oracle WebLogic Server管理コンソールにログインします。

http://remote_hostname:remote_port/console

remote_hostnameとremote_portは、リモートOracle WebCenter PortalのOracle WebLogic Serverのホスト名とポートです。

2. 「ドメイン構造」→「サービス」→「外部JNDIプロバイダ」の順に移動します。

3. 「新規」をクリックします。

4. 「名前」フィールドに、ForeignJNDIProvider-SOAと入力します。

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

6. 「ForeignJNDIProvider-SOA」リンクをクリックします。
ForeignJNDIProvider-SOAページの設定が表示されます。

7. 表36-1のリストに従って、各フィールドに値を入力し、「保存」をクリックします。

表36-1 パラメータと値

フィールド

説明

初期コンテキスト・ファクトリ

weblogic.jndi.WLInitialContextFactoryと入力します。

プロバイダURL

t3://soa_hostname:soa_port/soa-infraと入力します。

注意: soa_hostnameとsoa_portは、取得するタスク・リストが含まれているリモートOracle WebLogic ServerのSOAサーバーのホスト名とポートで置換します。

ユーザー

weblogicと入力します。

パスワード

ユーザーのパスワードを入力します。

パスワードの確認

同じパスワードを再度入力します。

8. 「ForeignJNDIProvider-SOA」をクリックします。

9. 「リンク」タブをクリックします。

10. 「外部JNDIリンク」で、「新規」をクリックします。
「外部JNDIリンクの作成」ページが表示されます。

11. 表36-2のリストに従って、各フィールドに値を入力し、「OK」をクリックします。

表36-2 パラメータと値

フィールド

値

名前

RuntimeConfigServiceと入力します。

ローカルJNDI名

RuntimeConfigServiceと入力します。

リモートJNDI名

RuntimeConfigServiceと入力します。

12. ステップ11を6回繰り返し、「名前」、「ローカルJNDI名」および「リモートJNDI名」の各フィールドに表36-3に示す値を入力します。

表36-3 パラメータと値

回数

「名前」、「ローカルJNDI名」および「リモートJNDI名」の各フィールドに次の値を入力して「OK」をクリック

1回目

ejb/bpel/services/workflow/TaskServiceBean

2回目

ejb/bpel/services/workflow/TaskMetadataServiceBean

3回目

TaskReportServiceBean

4回目

TaskEvidenceServiceBean

5回目

TaskQueryService

6回目

UserMetadataService

外部JNDIプロバイダの構成方法の詳細は、Oracle Fusion Middleware Oracle WebLogic Server管理コンソールのオンライン・ヘルプを参照してください。

36.2.3.2 EJBアイデンティティ伝播の構成方法

タスク・リスト・ポートレット・プロデューサ・アプリケーションは、コンシューマ・アプリケーションですでに認証されているユーザー・トークンがプロデューサ管理対象サーバー、リモートSOAサーバーの順に渡されるように構成する必要があります。そのためには、関連するドメイン間でグローバル・トラストを有効にします。Oracle WebLogic Serverドメイン間でクロス・ドメイン・セキュリティを有効にする方法の詳細は、『Oracle Fusion Middleware Oracle WebLogic Serverの保護』を参照してください。

EJBアイデンティティ伝播を構成する手順は、次のとおりです。

1. グローバル・トラストを有効にするには、Oracle WebCenter PortalのOracle WebLogic ServerのOracle WebLogic Server管理コンソールにログインします。

2. ページの左側で、インストール時に指定したドメイン名(例: soainfra)を選択します。

3. 「セキュリティ」を選択し、「詳細」セクションを展開します。

4. ドメイン資格証明を変更します。

5. SOAサーバーのOracle WebLogic ServerのOracle WebLogic Server管理コンソールにログインします。

6. SOAサーバーのドメイン資格証明を変更し、ステップ4でOracle WebCenter Portalサーバーに入力したパスワードと同じパスワードを入力します。

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

36.2.3.3 アイデンティティ・ストアの構成方法

Oracle WebCenter PortalのOracle WebLogic Serverドメインの認証者は、SOAサーバーで使用するのと同じアイデンティティ・プロバイダを指し示すように構成する必要があります。

コンシューマ・アプリケーションのログインに使用するユーザー名がポートレット・サーバーとSOAサーバーのアイデンティティ・ストアに存在するか、3つすべてのサーバーが同じアイデンティティ・ストアを指し示す必要があります。対象となる3つのサーバーは次のとおりです。

- Oracle SOA Suiteの管理対象サーバー

- タスク・リスト・ポートレット・プロデューサ・アプリケーションがデプロイされているOracle WebCenter Portalの管理対象サーバー

- ポートレット・コンシューマ・アプリケーションがデプロイされているサーバー

最初に、ユーザーがコンシューマ・アプリケーションにログインします。したがって、このサーバーのアイデンティティ・ストアにユーザーが存在している必要があります。次に、コンシューマ・アプリケーションがタスク・リスト・ポートレット・プロデューサ・アプリケーションに接続したときに、そのユーザー名がOracle WebCenter Portalの管理対象サーバーに伝播される必要があります。このサーバーのアイデンティティ・ストアにも同じユーザー名が存在している必要があります。次に、Oracle SOA Suiteデータをフェッチするために、タスク・リスト・ポートレット・プロデューサ・アプリケーションがOracle SOA Suiteの管理対象サーバーに接続します。したがって、SOAサーバーにこのユーザー名が再度伝播される必要があります。Oracle SOA Suiteサーバーのアイデンティティ・ストアにも同じユーザー名が存在している必要があります。また、前述のすべてのサーバーが同じアイデンティティ・ストアを指し示すこともできます。

アイデンティティ・ストアを構成する手順は、次のとおりです。

1. Oracle WebCenter PortalのOracle WebLogic ServerのOracle WebLogic Server管理コンソールにログインします。

2. アイデンティティ・ストアを構成する手順の詳細は、Oracle Fusion Middleware Oracle WebCenter Portal管理者ガイドの外部LDAPへのアイデンティティ・ストアの再関連付けに関する項を参照してください。

3. 3つすべてのサーバーについて、これらの手順に従います。

36.2.4 Webサービスのセキュリティを使用してタスク・リスト・ポートレット・プロデューサ・アプリケーションを保護する方法

タスク・リスト・ポートレット・プロデューサ・アプリケーションを保護するには、次のタスクを実行する必要があります。

- タスク・リスト・ポートレット・プロデューサ・アプリケーションに対するWS-Securityの有効化

- 証明書キーストアの設定

注意:

タスク・リスト・ポートレット・プロデューサ・アプリケーションが実行されているファイル・システムにproducer.jksファイルをコピーしてください。次の例では、キーストアをdomain_home/config/fmwconfigの下にコピーしています。

Webサービスのセキュリティを使用してタスク・リスト・ポートレット・プロデューサ・アプリケーションを保護する手順は、次のとおりです。

1. WS-Securityを有効化して証明書キーストアを設定する手順の詳細は、Oracle Fusion Middleware Oracle WebCenter Portal管理者ガイドのWS-Securityを使用したWSRPプロデューサの保護に関する項、およびWS-Securityを使用したOracle WebLogic Communication Services(OWLCS)の保護に関する項を参照してください。
これらの項の手順に従う一方、Oracle Enterprise Manager Fusion Middleware Controlの次のページにアクセスします。

1. 左側のナビゲータで、Farm_base_domain→「WebLogicドメイン」の順に選択します。
base_domainは、この例のドメイン名です。

2. base_domainを右クリックし、「セキュリティ」→「セキュリティ・プロバイダ構成」の順に選択します。

3. 図36-2に示すプロバイダ構成ページの下部にある「キーストア」セクションにアクセスし、「構成」をクリックします。

図36-2 「キーストア」セクション

「図36-2 「キーストア」セクション」の説明

4. 図36-3に示すように、キーストア管理およびアイデンティティ証明書の詳細を入力します。特定の詳細は、Oracle Fusion Middleware Oracle WebCenter Portal管理者ガイドのWS-Securityを使用したWSRPプロデューサの保護に関する項を参照してください。

図36-3 キーストアの構成

「図36-3 キーストアの構成」の説明

5. 完了後に、「OK」をクリックします。

6. 管理対象ポートレット・サーバーと、その管理対象ポートレット・サーバーの管理サーバーを再起動します。

36.2.5 インバウンド・セキュリティ・ポリシーの指定方法

次に、インバウンド・セキュリティ・ポリシーを指定します。この項では、第36.2.4項「Webサービスのセキュリティを使用してタスク・リスト・ポートレット・プロデューサ・アプリケーションを保護する方法」で説明したキーストア構成手順が完了していることを前提としています。

インバウンド・セキュリティ・ポリシーを指定する手順は、次のとおりです。

1. Oracle Enterprise Manager Fusion Middleware Controlの「アプリケーション・デプロイメント」で、ポートレット・プロデューサ・アプリケーション・ノードに移動します。

2. 「アプリケーション・デプロイメント」→「TaskListTaskFlow (WLS_Portlet)」の順にクリックします。

3. メニュー→「アプリケーション・デプロイメント」→「Webサービス」の順に選択します。

4. 図36-4に示すように、表示されるページでマークアップ・ポートを選択します。

図36-4 マークアップ・ポートの選択

「図36-4 マークアップ・ポートの選択」の説明

5. 表示されるページで、「ポリシー」タブをクリックします。

6. 「アタッチ」/「デタッチ」ボタンをクリックします。

7. 使用しているタスク・リスト・ポートレット・プロデューサ・アプリケーションに適したポリシー(oracle/wss10_saml_token_with_message_integrity_service_policyなど)を添付したり添付を解除します。

注意:

選択したポリシーは、コンシューマ側とプロデューサ側の両方で同じである必要があります。

8. 完了後に、開いている各ページで「OK」をクリックします。

9. タスク・リスト・ポートレット・プロデューサ・アプリケーションがデプロイされている管理対象サーバーを再起動します。

36.3 タスク・リスト・ポートレットを埋め込むポートレット・コンシューマ・アプリケーションの作成

次に、図36-1に示したタスク・リスト・ポートレットを埋め込むポートレット・コンシューマ・アプリケーションを作成します。

第36.2項「ポートレット・サーバーへのタスク・リスト・ポートレット・プロデューサ・アプリケーションのデプロイ」で説明したように、タスク・リスト・ポートレット・プロデューサ・アプリケーションをすでにデプロイして構成し、実行していることを確認してください。ポートレット・コンシューマ・アプリケーションをデプロイできるのは、Oracle WebCenter Portalがインストールされている管理対象サーバーに対してのみです。

36.3.1 タスク・リスト・ポートレットを埋め込むポートレット・コンシューマ・アプリケーションの作成方法

次の手順に従って、タスク・リスト・ポートレットを埋め込むコンシューマ・アプリケーションを作成します。

タスク・リスト・ポートレットを埋め込むポートレット・コンシューマ・アプリケーションを作成する手順は、次のとおりです。

1. Oracle JDeveloperで新しいOracle WebCenter Portalアプリケーションを作成する手順は、次のとおりです。

1. 「ファイル」メイン・メニューから「新規」→「アプリケーション」の順に選択します。

2. Select 「WebCenterポータル・アプリケーション」を選択して、「OK」をクリックします。

3. 「アプリケーション名」フィールドに、名前を入力します(この例ではTaskListConsumerが入力されています)。

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

2. アプリケーションconsumer.jspxに新規のJSPXページを追加します。

3. consumer.jspxにポートレットをドラッグ・アンド・ドロップして、コンシューマにWSRPプロデューサを登録します。

1. 「アプリケーション・ナビゲータ」で、「View Controller」を右クリックし、「新規」を選択します。

2. 「Web層」の下にある「ポートレット」をクリックします。

3. 図36-5に示すように、右側のペインにある「WSRPプロデューサの登録」を選択します。

図36-5 WSRPプロデューサの登録

「図36-5 WSRPプロデューサの登録」の説明

4. 「OK」をクリックします。
「WSRPポートレット・プロデューサの登録」ウィザードが表示されます。

5. 「ようこそ」ページで「次へ」をクリックします。

6. 「アプリケーション・リソース」ボタンを選択します。

7. 図36-6に示すように、プロデューサの登録名を指定します。

図36-6 プロデューサ名

「図36-6 プロデューサ名」の説明

8. 「次へ」をクリックします。

9. 次のURLエンドポイントを指定します。

http://server:port/TaskListTaskFlow/portlets/wsrp2?WSDL

serverはポータル・サービスがインストールされているホストで、portはそのサーバーのポートです。

10. 環境に適したプロキシ詳細を入力します。
図36-7に詳細を示します。

図36-7 URLエンドポイント

「図36-7 URLエンドポイント」の説明

11. 「次へ」をクリックします。

12. 図36-8に示すように、実行タイムアウトを指定します。300秒など、大きい値を指定することをお薦めします。これによって、実行時にタイムアウト例外が発生する可能性が低減されます。

図36-8 実行タイムアウト

「図36-8 実行タイムアウト」の説明

13. 「次へ」をクリックします。
「セキュリティ属性の構成」ページが表示されます。

14. 「トークン・プロファイル」リストで、環境に適したトークン・プロファイルを選択します。たとえば、「メッセージ整合性付きSAMLトークン」トークン・プロファイルを選択します。選択するトークン・プロファイルは、タスク・リスト・ポートレット・プロデューサ・アプリケーションでWS-Securityを構成した際に選択したのと同じトークン・プロファイルである必要があります。Oracle Fusion Middleware Oracle WebCenter Portal管理者ガイドのWS-Securityを使用したWSRPプロデューサの保護に関する項を参照してください。

15. 「構成」オプションで、「カスタム」を選択します。

16. 図36-9に示すように、デフォルトのユーザーにfmwadminと指定し、発行者名にwww.oracle.comと指定します。

図36-9 セキュリティ属性の構成

「図36-9 セキュリティ属性の構成」の説明

17. consumer.jksをローカル・ディレクトリにコピーします。

18. 「参照」ボタンをクリックし、プロデューサ・アプリケーションに対するWebサービスのセキュリティの構成に使用したコンシューマのキーストア(consumer.jksファイル)を選択します。第36.2.4項「Webサービスのセキュリティを使用してタスク・リスト・ポートレット・プロデューサ・アプリケーションを保護する方法」を参照してください。

19. 残りのフィールドを完成します。
図36-10に詳細を示します。

図36-10 キー・ストアの指定

「図36-10 キー・ストアの指定」の説明

20. 「終了」をクリックします。
「アプリケーション・リソース」の下に、登録したポートレットが表示されます。

21. 図36-11に示すように、アプリケーションの要件に基づいてトークン・プロファイルを選択します。

図36-11 トークン・プロファイルの選択

「図36-11 トークン・プロファイルの選択」の説明

22. 図36-12に示すように、JSPXページconsumer.jspxに「Worklist」というタスク・リスト・ポートレットをドラッグします。

図36-12 consumer.jspx

「図36-12 consumer.jspx」の説明

23. 図36-13に示すように、タスク・リスト・ポートレットの高さと幅をページに適するように指定します。このダイアログは通常、ページにドラッグしたポートレット・コンポーネントを選択すると右下に表示されます。このダイアログが表示されない場合は、「表示」メイン・メニューから「プロパティ・インスペクタ」を選択します。

図36-13 ポートレットの高さと幅の指定

「図36-13 ポートレットの高さと幅の指定」の説明

24. 図36-14に示すように、デザイナの「consumer.jspx」を右クリックし、「ページ定義に移動」を選択します。

図36-14 ページ定義の選択

「図36-14 ページ定義の選択」の説明

この操作によって、consumerPageDef.xmlが表示されます。

4. 表36-4の説明に従って、パラメータの値を指定します。詳細は、第36.4項「ワークリスト・ポートレット・パラメータの受け渡し」を参照してください。

表36-4 パラメータと値

パラメータ

値の説明

soaURL

SOAサーバーとポートレット・サーバーが異なる場合に使用します。To Doタスクのタスク詳細にはこのURLが必要です。

<variable Name="Worklist1_1_soaURL" Type="java.lang.Object"
DefaultValue="${'http://soa_host:soa_port')"/>

refreshURL

タスク・リスト・ポートレットを含むページの完全なURL。

<variable Name="Worklist1_1_refreshURL" Type="java.lang.Object"
DefaultValue="${'http://soa_host:soa_port/HWTFConsumer/faces)

図36-15に詳細を示します。

図36-15 consumerPageDef.xml

「図36-15 consumerPageDef.xml」の説明

5. ADFセキュリティを使用して、Oracle WebCenter Portalコンシューマ・アプリケーションを保護します。手順については、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の「Fusion WebアプリケーションでのADFセキュリティの有効化」の章(Oracle ADFセキュリティを有効にする方法に関する項)を参照してください。

6. Oracle JDeveloperの埋込みOracle WebLogic Serverのアイデンティティ・ストアが、SOAサーバーのアイデンティティ・ストアを指し示すように構成します。これを実行するには、第36.2.3.3項「アイデンティティ・ストアの構成方法」の手順に従います。

7. consumer.jspxコンシューマ・アプリケーション・ページを次のように実行します。

1. 「consumer.jspx」ページを右クリックします。

2. 「実行」を選択します。
この操作によって、埋込みOracle WebLogic Serverインスタンスが起動し、コンシューマ・アプリケーションがデプロイされ、consumer.jspxページにポートレットが表示されます。

36.4 ワークリスト・ポートレット・パラメータの受け渡し

タスク・リスト・ポートレットでは、consumerPageDef.xmlファイルの特定のパラメータを受け入れることができます。タスク・リスト・リージョンのコンシューマ・アプリケーションでは、次の操作を実行できます。

- プロデューサ・アプリケーションへのパラメータの受け渡し

- 埋込みリージョンの表示動作の制御

- タスク・リスト(タスク・タイプのリストやタスク属性値リストなど)をフィルタ処理するためのパラメータの受け渡し

表36-5に、表示パラメータを示します。

表36-5 表示パラメータ

パラメータ

説明

値

必須

displayColumnsList

タスク・リスト表に表示する列のカンマ区切りの文字列。

使用可能な値は次のとおりです。

- title

- number

- priority

- assignees

- state

- createdDate

- expirationDate

例については、第36.4.2項「すべての列定数を含むファイルの例」を参照してください。

いいえ

localeSource

言語設定をWebブラウザから取得するのか、アイデンティティ設定から取得するのかを指定します。

使用可能な値は次のとおりです。

- identity(デフォルト)

- browser

いいえ

refreshURL

タスク・リスト・ポートレットを含むページの完全なURL。

showTaskDetailsPanelがtrueに設定されている場合は必須パラメータです。

タスク・リスト・リージョンのタスク詳細は、インライン・フレームに表示されます。したがって、タスクの詳細ページでアクションが実行されると、タスク・リスト領域のリフレッシュが試行されます。これを実行するために、タスク・フローまたはポートレットが含まれているページのURLがリフレッシュされます。タスク・フローではコンテナ・ページのURLを認識しないため、このURLをパラメータとして渡す必要があります。showTaskDetailsPanelがfalseで渡される場合、このパラメータは必須ではありません。このパラメータを取得するには、HttpServletRequest/PortletRequestオブジェクトでgetRequestURL()メソッドをコールします。

環境に適した値を入力します。例については、第36.4.2項「すべての列定数を含むファイルの例」を参照してください。

はい

showActionDropDown

ツールバーに「アクション」リストを表示するかどうかを指定します。

使用可能な値は次のとおりです。

- true(デフォルト)

- false

いいえ

showAssignmentFilter

ツールバーに「割当フィルタの選択」ドロップダウン・リストを表示するかどうかを指定します。

使用可能な値は次のとおりです。

- true(デフォルト)

- false

いいえ

showSearchControl

「クイック検索」テキスト・フィールドを表示するかどうかを指定します。

使用可能な値は次のとおりです。

- true(デフォルト)

- false

いいえ

showStatusFilter

ツールバーに「タスク・ステータス・フィルタの選択」ドロップダウン・リストを表示するかどうかを指定します。

使用可能な値は次のとおりです。

- true(デフォルト)

- false

いいえ

showTaskDetailsPanel

タスク詳細パネルを表示するかどうかを指定します。

使用可能な値は次のとおりです。

- true

- false(デフォルト)

いいえ

showViewFilter

ツールバーに「ビュー」選択ドロップダウン・リストを表示するかどうかを指定します。

使用可能な値は次のとおりです。

- true(デフォルト)

- false

いいえ

showViewsPanel

「ビュー」選択パネルを表示するかどうかを指定します。

使用可能な値は次のとおりです。

- true

- false(デフォルト)

いいえ

soaURL

SOAサーバーとポートレット・サーバーが異なる場合に使用します。

showTaskDetailsPanelがtrueに設定されている場合は必須パラメータです。

To Doタスクのタスク詳細にはこのURLが必要です。これは、非SOAのリモートOracle WebLogic Serverにデプロイされているアプリケーションからアクセスした場合、内部アプリケーションであるTo DoタスクがSOAサーバーのURLを認識していないためです。書式は次のとおりです。

http://soa_host:soa_port

環境に適した値を入力します。例については、第36.4.2項「すべての列定数を含むファイルの例」を参照してください。

はい

sortColumn

このリージョンのタスクをソートするために使用するデフォルトの列の名前。

デフォルト値はcreatedDateです。例については、第36.4.2項「すべての列定数を含むファイルの例」を参照してください。

いいえ

sortOrder

タスク・リストを昇順でソートするか、降順でソートするかを指定します。

使用可能な値は次のとおりです。

- asc

- desc(デフォルト)

いいえ

wfCtxID

認証済のワークフロー・コンテキストのトークンを指定します。

環境に適した値を入力します。例については、第36.4.2項「すべての列定数を含むファイルの例」を参照してください。

いいえ

表36-6に、フィルタ・パラメータを示します。

表36-6 フィルタ・パラメータ

パラメータ

説明

値

必須

assignmentFilter

割当て先のタイプを指定します。

例については、第36.4.1項「割当てフィルタの定数」を参照してください。

いいえ

viewFilter

タスクの表示用に選択したビューを指定します。

作成したカスタム値を入力するか、デフォルト値のInboxをそのまま使用します。

いいえ

taskTypesFilterList

渡したタスク・タイプのタスクのみを表示するための、タスク・タイプ値のカンマ区切りリスト。

環境に適した値を入力します。

いいえ

attributesFilterOperator

指定したフィルタ基準の検索に使用するjoin条件(And/Or)。

使用可能な値は次のとおりです。

- and

- or(デフォルト)

いいえ

attributesFilterList

属性値に基づいてタスクをフィルタ処理するために使用する、名前と値のペアで指定したカンマ区切りリスト(名前はタスク列名で値は列値です)。

例については、第36.4.2項「すべての列定数を含むファイルの例」を参照してください。

いいえ

たとえば、priority = 1、status = ASSIGNED、およびプロモートされたマップ済属性textAttribute1 = NorthAmericaの属性フィルタ値を使用してタスクを表示するには、これらの値を次のように設定します。

attributeFilterList: priority=1, status=ASSIGNED, textAttribute1=NorthAmerica

属性フィルタ演算子は次のように設定します。

attributeFilterOperator: and

表36-5と表36-6のパラメータは、テストJSPXページのページ定義に定義されています。例36-1に、タスク・リストがタスク・フローとして使用されるときのconsumerPageDef.xmlページ定義ファイルの構文を示します。属性valueには、パラメータの値を指定します。

例36-1 パラメータ定義

<parameters>
<parameter id="showViewsPanel" value="#{testBean.showViewsPanel}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="showTaskDetailsPanel"
value="#{testBean.showTaskDetailsPanel}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="wfCtxID" value="#{testBean.wfCtxID}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="soaHostName" value="#{testBean.soaHostName}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="soaPort" value="#{testBean.soaPort}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="refreshURL" value="#{testBean.refreshURL}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="localeSource" value="#{testBean.localeSource}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="showActionDropdown" value="#{testBean.showActionDropdown}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="showViewFilter" value="#{testBean.showViewFilter}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="showAssignmentFilter"
value="#{testBean.showAssignmentFilter}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="showStatusFilter" value="#{testBean.showStatusFilter}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="showSearchControl" value="#{testBean.showSearchControl}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="assignmentFilter" value="#{testBean.assignmentFilter}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="viewFilter" value="#{testBean.viewFilter}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="displayColumnsList" value="#{testBean.displayColumnsList}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="sortColumn" value="#{testBean.sortColumn}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="sortOrder" value="#{testBean.sortOrder}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="taskTypesFilterList"
value="#{testBean.taskTypesFilterList}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="attributesFilterOperator"
value="#{testBean.attributesFilterOperator}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
<parameter id="attributesFilterList"
value="#{testBean.attributesFilterList}"
xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
</parameters>

例36-2は、タスク・リストがポートレットとして使用されるときのconsumerPageDef.xmlのページ定義コードの例を示しています。属性DefaultValueには、パラメータの値を指定します。

例36-2 ポートレットとして使用されるタスク・リスト

<variableIterator id="variables">
<variable Name="Worklist1_1_soaURL" Type="java.lang.Object"
DefaultValue="${'http://<soa_host>:<soa_port>'}" />
</variableIterator>

36.4.1 割当てフィルタの定数

次のリストは、使用可能な割当てフィルタの定数を示しています。

- My

- Group

- My+Group

- Reportees

- Creator

- Owner

- Reviewer

- Previous

- Admin

36.4.2 すべての列定数を含むファイルの例

例36-3は、displayColumnListパラメータに渡すことができるすべての列定数が含まれたファイルの例を示しています。定数値を渡す必要があります。たとえば、TITLE_COLUMN = "title"の場合は、TITLE_COLUMNではなく、“title”を渡す必要があります。

例36-3 displayColumnListパラメータに渡すことができるすべての列定数

package oracle.bpel.services.workflow.repos.table;

public interface WFTaskConstants
{
public static final String TABLE_NAME = "WFTask";
public static final String TL_TABLE_NAME = "WFTask_TL";
public static final String HISTORY_TABLE_NAME = "WFTaskHistory";
public static final String HISTORY_TL_TABLE_NAME = "WFTaskHistory_TL";
public static final String ASSIGNEE_TABLE_NAME = "WFAssignee";
public static final String REVIEWER_TABLE_NAME = "WFReviewer";

public static final String WFCOMMENT_TABLE_NAME = "WFComments";
public static final String WFATTRIBUTES_TABLE_NAME = "WFMessageAttribute";
public static final String WFATTACHMENT_TABLE_NAME = "WFAttachment";
public static final String WFCOLLECTIONTARGET_TABLE_NAME = "WFCollectionTarget";

//table aliases
public static final String TABLE_ALIAS = "wfn";
public static final String TL_TABLE_ALIAS = "wfntl";
public static final String HISTORY_TABLE_ALIAS = "wfnh";
public static final String HISTORY_TL_TABLE_ALIAS = "wfnhtl";
public static final String WFCOMMENT_TABLE_ALIAS = "wfc";
public static final String WFATTRIBUTES_TABLE_ALIAS = "wfma";
public static final String WFATTACHMENT_TABLE_ALIAS = "wfatt";
public static final String ASSIGNEE_TABLE_ALIAS = "wfa";
public static final String REVIEWER_TABLE_ALIAS = "wfr";
public static final String WFCOLLECTIONTARGET_TABLE_ALIAS = "wfct";

//task table column
public static final String ACCESSKEY_COLUMN = "accessKey";
public static final String APPROVALDURATION_COLUMN = "approvalDuration";
public static final String ACQUIREDBY_COLUMN = "acquiredBy";
public static final String ASSIGNEDDATE_COLUMN = "assignedDate";
public static final String APPROVERS_COLUMN = "approvers";
public static final String ASSIGNEES_COLUMN = "assignees";
public static final String ASSIGNEESDISPLAYNAME_COLUMN = "assigneesDisplayName";
public static final String REVIEWERS_COLUMN = "reviewers";
public static final String REVIEWERSDISPLAYNAME_COLUMN = "reviewersDisplayName";
public static final String ASSIGNEEGROUPS_COLUMN = "assigneeGroups";
public static final String ASSIGNEEGROUPSDISPLAYNAME_COLUMN =
"assigneeGroupsDisplayName";
public static final String ASSIGNEEUSERS_COLUMN = "assigneeUsers";
public static final String ASSIGNEEUSERSDISPLAYNAME_COLUMN =
"assigneeUsersDisplayName";
public static final String OUTCOME_COLUMN = "outcome";
public static final String PARALLELOUTCOMECOUNT_COLUMN = "parallelOutcomeCount";
public static final String PUSHBACKSEQUENCE_COLUMN = "pushbackSequence";
public static final String CREATEDDATE_COLUMN = "createdDate";
public static final String ELAPSEDTIME_COLUMN = "elapsedTime";

public static final String DIGITALSIGNATUREREQUIRED_COLUMN =
"digitalSignatureRequired";
public static final String PASSWORDREQUIREDONUPDATE_COLUMN =
"passwordRequiredOnUpdate";
public static final String SECURENOTIFICATION_COLUMN = "secureNotifications";
public static final String ENDDATE_COLUMN = "endDate";
public static final String EXPIRATIONDATE_COLUMN = "expirationDate";
public static final String EXPIRATIONDURATION_COLUMN = "expirationDuration";
public static final String IDENTITYCONTEXT_COLUMN = "identityContext";
public static final String FROMUSER_COLUMN = "fromUser";
public static final String FROMUSERDSIPLAYNAME_COLUMN = "fromUserDisplayName";
public static final String HASSUBTASK_COLUMN = "hasSubtask";
public static final String INSHORTHISTORY_COLUMN = "inShortHistory";
public static final String ISGROUP_COLUMN = "isGroup";
public static final String LANGUAGE_COLUMN = "language";
public static final String MAILSTATUS_COLUMN = "mailStatus";
public static final String MOREINFOROLE_COLUMN = "moreInfoRole";
public static final String NUMBEROFTIMESMODIFIED_COLUMN =
"numberOfTimesModified";
public static final String ORIGINALASSIGNEEUSER_COLUMN = "originalAssigneeUser";
public static final String REQUESTINFOUSER_COLUMN = "requestInfoUser";
public static final String STATE_COLUMN = "State";
public static final String SUBSTATE_COLUMN = "SubState";
public static final String SYSTEMSTRING1_COLUMN = "systemString1";
public static final String SYSTEMSTRING2_COLUMN = "systemString2";
public static final String SYSTEMSTRING3_COLUMN = "SystemString3";
public static final String TASKGROUPID_COLUMN = "taskGroupId";
public static final String TASKID_COLUMN = "taskId";
public static final String VERSION_COLUMN = "version";
public static final String TASKNUMBER_COLUMN = "taskNumber";
public static final String UPDATEDBY_COLUMN = "updatedBy";

public static final String UPDATEDBYDISPLAYNAME_COLUMN = "updatedByDisplayName";
public static final String UPDATEDDATE_COLUMN = "updatedDate";
public static final String UPDATEDNOTIFICATIONID_COLUMN =
"updatedNotificationId";
public static final String VERSIONREASON_COLUMN = "versionReason";
public static final String WORKFLOWPATTERN_COLUMN = "workflowPattern";
public static final String CALLBACKCONTEXT_COLUMN = "callbackContext";
public static final String CALLBACKID_COLUMN = "callbackId";
public static final String CALLBACKTYPE_COLUMN = "callbackType";
public static final String CREATOR_COLUMN = "creator";
public static final String OWNERUSER_COLUMN = "ownerUser";
public static final String OWNERGROUP_COLUMN = "ownerGroup";
public static final String OWNERROLE_COLUMN = "ownerRole";
public static final String PRIORITY_COLUMN = "priority";
public static final String DOMAINID_COLUMN = "domainId";
public static final String INSTANCEID_COLUMN = "instanceId";
public static final String PROCESSID_COLUMN = "processId";
public static final String PROCESSNAME_COLUMN = "processName";
public static final String PROCESSTYPE_COLUMN = "processType";
public static final String PROCESSVERSION_COLUMN = "processVersion";
public static final String TITLE_COLUMN = "title";
public static final String TITLERESOURCEKEY_COLUMN = "titleResourceKey";
public static final String IDENTIFICATIONKEY_COLUMN = "identificationKey";
public static final String USERCOMMENT_COLUMN = "userComment";
public static final String WORKFLOWDESCRIPTORURI_COLUMN =
"workflowDescriptorURI";
public static final String TASKDEFINITIONID_COLUMN = "taskDefinitionId";
public static final String TASKDEFINITIONNAME_COLUMN = "taskDefinitionName";

// start columns added for AS11
public static final String APPLICATIONCONTEXT_COLUMN  = "applicationContext";
public static final String APPLICATIONNAME_COLUMN  = "applicationName";
public static final String ASSIGNEETYPE_COLUMN = "assigneeType";
public static final String CATEGORY_COLUMN = "category";
public static final String COMPONENTNAME_COLUMN  = "componentName";
public static final String COMPOSITEDN_COLUMN  = "compositeDN";
public static final String COMPOSITEINSTANCEID_COLUMN  = "compositeInstanceId";
public static final String COMPOSITENAME_COLUMN  = "compositeName";
public static final String COMPOSITEVERSION_COLUMN  = "compositeVersion";
public static final String CONVERSATIONID_COLUMN  = "conversationId";
public static final String DUEDATE_COLUMN  = "dueDate";
public static final String ECID_COLUMN  = "ecId";
public static final String ISPUBLIC_COLUMN  = "isPublic";
public static final String ISTESTTASK_COLUMN  = "isTestTask";
public static final String PARENTCOMPONENTINSTANCEID_COLUMN  =
"parentComponentInstanceId";
public static final String PARENTCOMPONENTINSTANCEREFID_COLUMN  =
"parentComponentInstRefId";
public static final String INVOKEDCOMPONENT_COLUMN  = "invokedComponent";
public static final String PARTICIPANTNAME_COLUMN  = "participantName";
public static final String PERCENTAGECOMPLETE_COLUMN  = "percentageComplete";
public static final String READBYUSERS_COLUMN  = "readByUsers";
public static final String STARTDATE_COLUMN  = "startDate";
public static final String PARENTTASKVERSION_COLUMN  = "parentTaskVersion";
public static final String TASKGROUPINSTANCEID_COLUMN  = "taskGroupInstanceId";
public static final String SUBTASKGROUPINSTANCEID_COLUMN  =
"subTaskGroupInstanceId";
public static final String AG_ROOTID_COLUMN = "agRootId";
public static final String AG_MILESTONE_PATH_COLUMN = "agMileStonePath";
public static final String ROOTTASKID_COLUMN = "rootTaskId";
public static final String PARENTTASKID_COLUMN = "parentTaskId";
public static final String SYSTEMSTRINGACTIONS_COLUMN = "systemStringActions";
public static final String SUBCATEGORY_COLUMN  = "subCategory";
public static final String CORRELATIONID_COLUMN = "correlationId";
public static final String TASKDISPLAYURL_COLUMN = "taskDisplayUrl";
public static final String STAGE_COLUMN = "stage";
public static final String ASSIGNMENTCONTEXT_COLUMN = "assignmentContext";
public static final String PREACTIONUSERSTEPS_COLUMN = "preActionUserSteps";
public static final String AGGREGATIONTASKID_COLUMN = "aggregationTaskId";
public static final String MDSLABEL_COLUMN = "mdsLabel";
public static final String ISTEMPLATETASK_COLUMN = "isTemplateTask";

/* Columns for instance locator service */
public static final String COMPONENTTYPE_COLUMN = "componentType";
public static final String ACTIVTYNAME_COLUMN = "activityName";
public static final String ACTIVTYID_COLUMN = "activityId";
public static final String PROCESSDUEDATE_COLUMN = "processDueDate";
public static final String THREAD_COLUMN = "thread";
public static final String PARENTTHREAD_COLUMN = "parentThread";
public static final String STEP_COLUMN = "step";

public static final String TASKNAMESPACE_COLUMN = "taskNamespace";
// SERVERNAME_COLUMN is pseudo column, it does not exist in the table,
// colunm can be used for sorting on client side by FederatedTaskQuerySerive in
Ordering
public static final String SERVERNAME_COLUMN = "serverName";
// end columns added for AS11

public static final String TEXTATTRIBUTE1_COLUMN = "textAttribute1";
public static final String TEXTATTRIBUTE2_COLUMN = "textAttribute2";
public static final String TEXTATTRIBUTE3_COLUMN = "textAttribute3";
public static final String TEXTATTRIBUTE4_COLUMN = "textAttribute4";
public static final String TEXTATTRIBUTE5_COLUMN = "textAttribute5";
public static final String TEXTATTRIBUTE6_COLUMN = "textAttribute6";
public static final String TEXTATTRIBUTE7_COLUMN = "textAttribute7";
public static final String TEXTATTRIBUTE8_COLUMN = "textAttribute8";
public static final String TEXTATTRIBUTE9_COLUMN = "textAttribute9";
public static final String TEXTATTRIBUTE10_COLUMN = "textAttribute10";
public static final String FORMATTRIBUTE1_COLUMN = "formAttribute1";
public static final String FORMATTRIBUTE2_COLUMN = "formAttribute2";
public static final String FORMATTRIBUTE3_COLUMN = "formAttribute3";
public static final String FORMATTRIBUTE4_COLUMN = "formAttribute4";
public static final String FORMATTRIBUTE5_COLUMN = "formAttribute5";
public static final String URLATTRIBUTE1_COLUMN ="urlAttribute1";
public static final String URLATTRIBUTE2_COLUMN ="urlAttribute2";
public static final String URLATTRIBUTE3_COLUMN ="urlAttribute3";
public static final String URLATTRIBUTE4_COLUMN ="urlAttribute4";
public static final String URLATTRIBUTE5_COLUMN ="urlAttribute5";
public static final String DATEATTRIBUTE1_COLUMN ="dateAttribute1";
public static final String DATEATTRIBUTE2_COLUMN ="dateAttribute2";
public static final String DATEATTRIBUTE3_COLUMN ="dateAttribute3";
public static final String DATEATTRIBUTE4_COLUMN ="dateAttribute4";
public static final String DATEATTRIBUTE5_COLUMN ="dateAttribute5";
public static final String NUMBERATTRIBUTE1_COLUMN ="numberAttribute1";
public static final String NUMBERATTRIBUTE2_COLUMN ="numberAttribute2";
public static final String NUMBERATTRIBUTE3_COLUMN ="numberAttribute3";
public static final String NUMBERATTRIBUTE4_COLUMN ="numberAttribute4";
public static final String NUMBERATTRIBUTE5_COLUMN ="numberAttribute5";
public static final String PROTECTEDTEXTATTRIBUTE1_COLUMN  =
"protectedTextAttribute1";
public static final String PROTECTEDTEXTATTRIBUTE2_COLUMN  =
"protectedTextAttribute2";
public static final String PROTECTEDTEXTATTRIBUTE3_COLUMN  =
"protectedTextAttribute3";
public static final String PROTECTEDTEXTATTRIBUTE4_COLUMN  =
"protectedTextAttribute4";
public static final String PROTECTEDTEXTATTRIBUTE5_COLUMN  =
"protectedTextAttribute5";
public static final String PROTECTEDTEXTATTRIBUTE6_COLUMN  =
"protectedTextAttribute6";
public static final String PROTECTEDTEXTATTRIBUTE7_COLUMN  =
"protectedTextAttribute7";
public static final String PROTECTEDTEXTATTRIBUTE8_COLUMN  =
"protectedTextAttribute8";
public static final String PROTECTEDTEXTATTRIBUTE9_COLUMN  =
"protectedTextAttribute9";
public static final String PROTECTEDTEXTATTRIBUTE10_COLUMN =
"protectedTextAttribute10";
public static final String PROTECTEDFORMATTRIBUTE1_COLUMN  =
"protectedFormAttribute1";
public static final String PROTECTEDFORMATTRIBUTE2_COLUMN  =
"protectedFormAttribute2";
public static final String PROTECTEDFORMATTRIBUTE3_COLUMN  =
"protectedFormAttribute3";
public static final String PROTECTEDFORMATTRIBUTE4_COLUMN  =
"protectedFormAttribute4";
public static final String PROTECTEDFORMATTRIBUTE5_COLUMN  =
"protectedFormAttribute5";
public static final String PROTECTEDURLATTRIBUTE1_COLUMN   =
"protectedUrlAttribute1";
public static final String PROTECTEDURLATTRIBUTE2_COLUMN   =
"protectedUrlAttribute2";
public static final String PROTECTEDURLATTRIBUTE3_COLUMN   =
"protectedUrlAttribute3";
public static final String PROTECTEDURLATTRIBUTE4_COLUMN
="protectedUrlAttribute4";
public static final String PROTECTEDURLATTRIBUTE5_COLUMN
="protectedUrlAttribute5";
public static final String PROTECTEDDATEATTRIBUTE1_COLUMN
="protectedDateAttribute1";
public static final String PROTECTEDDATEATTRIBUTE2_COLUMN
="protectedDateAttribute2";
public static final String PROTECTEDDATEATTRIBUTE3_COLUMN
="protectedDateAttribute3";
public static final String PROTECTEDDATEATTRIBUTE4_COLUMN
="protectedDateAttribute4";
public static final String PROTECTEDDATEATTRIBUTE5_COLUMN
="protectedDateAttribute5";
public static final String PROTECTEDNUMBERATTRIBUTE1_COLUMN
="protectedNumberAttribute1";
public static final String PROTECTEDNUMBERATTRIBUTE2_COLUMN
="protectedNumberAttribute2";
public static final String PROTECTEDNUMBERATTRIBUTE3_COLUMN
="protectedNumberAttribute3";
public static final String PROTECTEDNUMBERATTRIBUTE4_COLUMN
="protectedNumberAttribute4";
public static final String PROTECTEDNUMBERATTRIBUTE5_COLUMN
="protectedNumberAttribute5";

/*
* Flexfield columns added for AS11
*/
public static final String TEXTATTRIBUTE11_COLUMN = "textAttribute11";
public static final String TEXTATTRIBUTE12_COLUMN = "textAttribute12";
public static final String TEXTATTRIBUTE13_COLUMN = "textAttribute13";
public static final String TEXTATTRIBUTE14_COLUMN = "textAttribute14";
public static final String TEXTATTRIBUTE15_COLUMN = "textAttribute15";
public static final String TEXTATTRIBUTE16_COLUMN = "textAttribute16";
public static final String TEXTATTRIBUTE17_COLUMN = "textAttribute17";
public static final String TEXTATTRIBUTE18_COLUMN = "textAttribute18";
public static final String TEXTATTRIBUTE19_COLUMN = "textAttribute19";
public static final String TEXTATTRIBUTE20_COLUMN = "textAttribute20";
public static final String FORMATTRIBUTE6_COLUMN  = "formAttribute6";
public static final String FORMATTRIBUTE7_COLUMN  = "formAttribute7";
public static final String FORMATTRIBUTE8_COLUMN  = "formAttribute8";
public static final String FORMATTRIBUTE9_COLUMN  = "formAttribute9";
public static final String FORMATTRIBUTE10_COLUMN = "formAttribute10";
public static final String URLATTRIBUTE6_COLUMN  ="urlAttribute6";
public static final String URLATTRIBUTE7_COLUMN  ="urlAttribute7";
public static final String URLATTRIBUTE8_COLUMN  ="urlAttribute8";
public static final String URLATTRIBUTE9_COLUMN  ="urlAttribute9";
public static final String URLATTRIBUTE10_COLUMN ="urlAttribute10";
public static final String DATEATTRIBUTE6_COLUMN  ="dateAttribute6";
public static final String DATEATTRIBUTE7_COLUMN  ="dateAttribute7";
public static final String DATEATTRIBUTE8_COLUMN  ="dateAttribute8";
public static final String DATEATTRIBUTE9_COLUMN  ="dateAttribute9";
public static final String DATEATTRIBUTE10_COLUMN ="dateAttribute10";
public static final String NUMBERATTRIBUTE6_COLUMN  ="numberAttribute6";
public static final String NUMBERATTRIBUTE7_COLUMN  ="numberAttribute7";
public static final String NUMBERATTRIBUTE8_COLUMN  ="numberAttribute8";
public static final String NUMBERATTRIBUTE9_COLUMN  ="numberAttribute9";
public static final String NUMBERATTRIBUTE10_COLUMN ="numberAttribute10";
public static final String PROTECTEDTEXTATTRIBUTE11_COLUMN =
"protectedTextAttribute11";
public static final String PROTECTEDTEXTATTRIBUTE12_COLUMN =
"protectedTextAttribute12";
public static final String PROTECTEDTEXTATTRIBUTE13_COLUMN =
"protectedTextAttribute13";
public static final String PROTECTEDTEXTATTRIBUTE14_COLUMN =
"protectedTextAttribute14";
public static final String PROTECTEDTEXTATTRIBUTE15_COLUMN =
"protectedTextAttribute15";
public static final String PROTECTEDTEXTATTRIBUTE16_COLUMN =
"protectedTextAttribute16";
public static final String PROTECTEDTEXTATTRIBUTE17_COLUMN =
"protectedTextAttribute17";
public static final String PROTECTEDTEXTATTRIBUTE18_COLUMN =
"protectedTextAttribute18";
public static final String PROTECTEDTEXTATTRIBUTE19_COLUMN =
"protectedTextAttribute19";
public static final String PROTECTEDTEXTATTRIBUTE20_COLUMN =
"protectedTextAttribute20";
public static final String PROTECTEDFORMATTRIBUTE6_COLUMN  =
"protectedFormAttribute6";
public static final String PROTECTEDFORMATTRIBUTE7_COLUMN  =
"protectedFormAttribute7";
public static final String PROTECTEDFORMATTRIBUTE8_COLUMN  =
"protectedFormAttribute8";
public static final String PROTECTEDFORMATTRIBUTE9_COLUMN  =
"protectedFormAttribute9";
public static final String PROTECTEDFORMATTRIBUTE10_COLUMN =
"protectedFormAttribute10";
public static final String PROTECTEDURLATTRIBUTE6_COLUMN  =
"protectedUrlAttribute6";
public static final String PROTECTEDURLATTRIBUTE7_COLUMN  =
"protectedUrlAttribute7";
public static final String PROTECTEDURLATTRIBUTE8_COLUMN  =
"protectedUrlAttribute8";
public static final String PROTECTEDURLATTRIBUTE9_COLUMN  =
"protectedUrlAttribute9";
public static final String PROTECTEDURLATTRIBUTE10_COLUMN =
"protectedUrlAttribute10";
public static final String PROTECTEDDATEATTRIBUTE6_COLUMN  =
"protectedDateAttribute6";
public static final String PROTECTEDDATEATTRIBUTE7_COLUMN  =
"protectedDateAttribute7";
public static final String PROTECTEDDATEATTRIBUTE8_COLUMN  =
"protectedDateAttribute8";
public static final String PROTECTEDDATEATTRIBUTE9_COLUMN  =
"protectedDateAttribute9";
public static final String PROTECTEDDATEATTRIBUTE10_COLUMN =
"protectedDateAttribute10";
public static final String PROTECTEDNUMBERATTRIBUTE6_COLUMN
="protectedNumberAttribute6";
public static final String PROTECTEDNUMBERATTRIBUTE7_COLUMN
="protectedNumberAttribute7";
public static final String PROTECTEDNUMBERATTRIBUTE8_COLUMN
="protectedNumberAttribute8";
public static final String PROTECTEDNUMBERATTRIBUTE9_COLUMN
="protectedNumberAttribute9";
public static final String PROTECTEDNUMBERATTRIBUTE10_COLUMN
="protectedNumberAttribute10";

// TL table related columns

public static final String LOCALE_COLUMN = "locale";

//assignee table column
public static final String ASSIGNEE_ASSIGNEE_COLUMN = "assignee";

public static final String WFCOMMENT_COMMENTDATE_COLUMN= "commentDate";
public static final String WFCOMMENT_ACTION_COLUMN= "action";
public static final String WFCOMMENT_WFCOMMENT_COLUMN= "wfcomment";
public static final String WFCOMMENT_DISPLAYNAMELANGUAGE_COLUMN=
"displayNameLanguage";
public static final String WFCOMMENT_ACL_COLUMN= "acl";

public static final String MAXVERSION_COLUMN= "maxVersion";
public static final String WFATTRIBUTES_NAME_COLUMN= "name";
public static final String WFATTRIBUTES_STORAGETYPE_COLUMN= "storageType";
public static final String WFATTRIBUTES_ENCODING_COLUMN= "encoding";
public static final String WFATTRIBUTES_STRINGVALUE_COLUMN= "stringValue";
public static final String WFATTRIBUTES_NUMBERVALUE_COLUMN= "numberValue";
public static final String WFATTRIBUTES_DATEVALUE_COLUMN= "dateValue";
public static final String WFATTRIBUTES_BLOBVALUE_COLUMN= "blobValue";
public static final String WFATTRIBUTES_ELEMENTSEQ_COLUMN= "elementSeq";

//attachment columns
public static final String WFATTACHMENT_ENCODING_COLUMN= "encoding";
public static final String WFATTACHMENT_URI_COLUMN= "uri";
public static final String WFATTACHMENT_CONTENT_COLUMN= "content";
public static final String WFATTACHMENT_NAME_COLUMN= "name";
public static final String WFATTACHMENT_ACL_COLUMN= "acl";
//collection target columns
public static final String WFCOLLECTIONTARGET_ID_COLUMN= "id";
public static final String WFCOLLECTIONTARGET_XPATH_COLUMN= "xpath";
public static final String WFCOLLECTIONTARGET_COLLECTIONNAME_COLUMN=
"collectionName";
public static final String WFCOLLECTIONTARGET_COLLECTIONNAMESPACE_COLUMN=
"collectionNamespace";
public static final String WFCOLLECTIONTARGET_TYPE_COLUMN= "type";
public static final String WFCOLLECTIONTARGET_TARGETINDEX_COLUMN= "targetIndex";
public static final String WFCOLLECTIONTARGET_KEYLIST_COLUMN= "keyList";
public static final String WFCOLLECTIONTARGET_REFERENCEDTASKID_COLUMN=
"referencedTaskId";
public static final String WFCOLLECTIONTARGET_TASKAGGREGATIONID_COLUMN=
"taskAggregationId";
public static final String WFCOLLECTIONTARGET_ACTION_COLUMN= "action";
public static final String WFCOLLECTIONTARGET_ACTIONPARAMS_COLUMN=
"actionParams";

public static final String ASSIGNEETYPE_SEPARATOR_STRING = ",";

}

第VI部

バインディング・コンポーネントの使用

このセクションでは、バインディング・コンポーネントの使用方法について説明します。

この部は、次の章で構成されています。

- 第37章「バインディング・コンポーネントの開始」

- 第38章「Enterprise JavaBeansとSOAコンポジット・アプリケーションの統合」

- 第39章「直接バインディング起動APIの使用」

37 バインディング・コンポーネントの開始

この章では、SOAコンポジット・アプリケーションに統合できる、サポートされているサービスおよび参照バインディング・コンポーネントのタイプとテクノロジについて説明します。サポートされているバインディング・コンポーネントには、Webサービス、HTTPバインディング、JCAアダプタ、Oracle Business Activity Monitoring(BAM)、Oracle B2B、Oracle Healthcare、ADF-BCサービス、EJBサービスおよび直接バインディング・サービスがあります。外部参照のバインディングURLで使用するトークンの作成についても説明します。

この章には次の項が含まれます:

- 第37.1項「バインディング・コンポーネントの概要」

- 第37.2項「バインディング・コンポーネントとSOAコンポジット・アプリケーションの統合の概要」

- 第37.3項「外部参照のバインディングURLで使用するためのトークンの作成」

詳細は、第2.3項「サービス・バインディング・コンポーネントの追加」および第2.4項「参照バインディング・コンポーネントの追加」を参照してください。

37.1 バインディング・コンポーネントの概要

バインディング・コンポーネントは、SOAコンポジット・アプリケーションと外部との接続を確立します。バインディング・コンポーネントには、次の2種類があります。

- サービス
外部に対してSOAコンポジット・アプリケーションへのエントリ・ポイントを提供します。サービスのWSDLファイルは、その機能を外部アプリケーションに通知します。これらの機能は、SOAコンポジット・アプリケーション・コンポーネントとの接続に使用されます。サービスのバインディング接続性には、サービス(SOAP/HTTPやJCAアダプタなど)と通信できるプロトコルが記述されています。

- 参照
SOAコンポジット・アプリケーションから外部にある外部サービスに送信するメッセージを有効にします。

図37-1は、Fusion Order DemoのOrderBookingCompositeプロジェクトを示しており、ここでは「公開されたサービス」スイムレーンのサービス(UpdateOrderStatus)がコンポジットへのエントリ・ポイントを提供し、「外部参照」スイムレーンの参照(BAM_OrderDO)によって、外部のOracle Business Activity Monitoring (BAM)サーバーへ情報を送信できます。

図37-1 サービス・バインディング・コンポーネントおよび参照バインディング・コンポーネント

「図37-1 サービス・バインディング・コンポーネントおよび参照バインディング・コンポーネント」の説明

バインディング・コンポーネントを使用すると、次のタイプのテクノロジをSOAコンポジット・アプリケーションに統合できます。

- Webサービス

- HTTPバインディング

- JCAアダプタ

- Oracle BAM

- Oracle B2B

- Oracle Healthcare

- ADF-BCサービス

- EJBサービス

- 直接バインディング・サービス

次の各項では、これらのテクノロジについて説明します。

37.1.1 Webサービス

このサービスを使用すると、アプリケーションをSOAP over HTTPを使用した標準ベースWebサービスに統合できます。WSDLファイルには、複数のWebサービスが記述されています。

WebサービスをSOAコンポジット・エディタのスイムレーンにドラッグすると、構成プロパティを指定するための「Webサービスの作成」ダイアログが表示されます。

Webサービスの詳細は、第2.3.2項「Webサービスのインタフェース(WSDL)の定義方法」を参照してください。

メッセージ転送最適化メカニズム(MTOM)添付をWebサービスに追加する方法の詳細は、第45.1.1.3項「SOAコンポジット・アプリケーションとのMTOM最適化メッセージの送受信」を参照してください。

37.1.1.1 WS-AtomicTransactionのサポート

「Webサービスの作成」ダイアログでは、WS-CoordinationおよびWS-AtomicTransaction(WS-AT)トランザクションのサポートも構成できます。WS-ATにより、Oracle WebLogic Serverと他のベンダーのトランザクション・サービス間でトランザクションの相互運用を行うことができます。相互運用は次の2レベルで行われます。

- ローカルJava Transaction API(JTA)環境からWebサービス・リクエストへのトランザクションのエクスポート。

- Webサービス・リクエストからローカルJTA環境へのトランザクションのインポート。これによって、Webサービス環境での複数ノード間の分散トランザクション処理が可能になります。

図37-2に、「Webサービスの作成」ダイアログの下部にあるWS-ATのサポートを示します。

図37-2 「Webサービスの作成」ダイアログでのWS-ATのサポート

「図37-2 「Webサービスの作成」ダイアログでのWS-ATのサポート」の説明

表37-1では、WS-ATフィールドについて説明しています。「Webサービスの作成」ダイアログの残りのフィールドの詳細は、第2.3.2項「Webサービスのインタフェース(WSDL)の定義方法」を参照してください。

表37-1 「Webサービスの作成」ダイアログのWS-ATのフィールド

プロパティ

説明

トランザクション参加

値を選択します。Webサービスを「公開されたサービス」スイムレーンに追加すると、外部トランザクション・マネージャでは、Oracle WebLogic ServerでホストされているリソースをWS-ATを使用して調整できます。また、Webサービスを「外部参照」スイムレーンに追加すると、Oracle WebLogic Serverのトランザクションでは、外部環境でホストされているリソースをWS-ATを使用して調整できます。

- なし
トランザクション・コンテキストはインポート(サービスの場合)またはエクスポート(参照の場合)されません。Webサービスをサービス・バインディング・コンポーネントとして「公開されたサービス」スイムレーンに追加した場合は、これがデフォルトです。

- サポート
トランザクションが存在する場合は、トランザクション・コンテキストがインポート(サービスの場合)またはエクスポート(参照の場合)されます。この情報はcomposite.xmlファイルに追加されます。

- 必須
トランザクション・コンテキストはインポート(サービスの場合)またはエクスポート(参照の場合)されます。この情報はcomposite.xmlファイルに追加されます。エクスポートの場合、アクティブなトランザクションが存在しない場合はWebサービス例外メッセージがスローされます。インポートの場合、リクエストにトランザクション・コンテキストが存在しない場合はフォルトがクライアントに戻されます。

- WSDLDriven
このプロパティが表示されるのは、Webサービスを参照バインディング・コンポーネントとして「外部参照」スイムレーンに追加した場合のみです。これがデフォルト値です。

バージョン

WS-ATでサポートされるバージョン(1.0、1,1、1,2またはデフォルト)が表示されます。デフォルトでは、このリストが有効になるのは、「トランザクション参加」リストから「サポート」または「必須」を選択した場合のみです。

完了すると、例37-1に示すように、WS-ATの選択内容がcomposite.xmlファイルに表示されます。

例37-1 composite.xmlファイルのWS-AT構文

<service name="Service1" ui:wsdlLocation="BPELProcess1.wsdl">
<interface.wsdl interface="http://xmlns.oracle.com/Application5_
jws/Project1/BPELProcess1#wsdl.interface(BPELProcess1)"
callbackInterface="http://xmlns.oracle.com/Application5_
jws/Project1/BPELProcess1#wsdl.interface(BPELProcess1Callback)"/>
<binding.ws port="http://xmlns.oracle.com/Application5_
jws/Project1/BPELProcess1#wsdl.endpoint(Service1/BPELProcess1_pt)">
<property name="weblogic.wsee.wsat.transaction.flowOption"
type="xs:string" many="false">SUPPORTS</property>
<property name="weblogic.wsee.wsat.transaction.version" type="xs:string"
many="false">WSAT11</property>
</binding.ws>

変更内容を編集するには、サービスを右クリックして「編集」を選択するか、SOAコンポジット・エディタでサービスをダブルクリックします。

デプロイメント後は、システムMBeanブラウザを使用して、トランザクション参加およびバージョンの値を変更できます。詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。

WS-ATおよびWS-Coordinationの詳細は、Oracle Fusion Middleware Oracle Infrastructure Webサービス開発者ガイドを、WS-ATおよびWS-Coordinationの仕様については次のURLを参照してください。

http://www.oasis-open.org

37.1.1.1.1 WS-ATでのBPELプロセスの参加確認

WS-AT参加プロパティの設定に加え、クライアントが、BPELプロセスであるWebサービスを呼出し、そのWebサービスが呼出し側のトランザクションに登録される場合、呼出し対象のBPELプロセスは、対応するcomposite.xmlファイルでtransactionプロパティが設定されている必要があります。

<property name="bpel.config.transaction">required</property>

この設定によって、エラーが発生(整合性制限違反によるデータベース・アダプタ呼出しの失敗など)しても、トランザクション・ロールバックは正常に完了することが保証されます。

transactionプロパティの設定方法の詳細は、第4.1.1項「BPELプロセス・サービス・コンポーネントの追加方法」、C.1.1項「プロパティ・インスペクタでデプロイメント・ディスクリプタのプロパティを定義する方法」および第13.1.1項「Oracle BPEL Process Managerのトランザクション・セマンティクス」を参照してください。

37.1.1.1.2 最適化が有効な場合にWS-ATトランザクションがサポートされない

「Webサービスの作成」ダイアログの「トランザクション参加」ドロップダウン・リストから、WS-ATトランザクションをサポートするためにサービスまたは参照のいずれかとしてWebサービス・バインディング・コンポーネントを構成できます。WS-ATトランザクションは、oracle.webservices.local.optimizationプロパティをfalseに設定すると、コンポジットからWebサービスへの呼出し環境またはWebサービスからコンポジットへの呼出し環境でサポートされます。

WS-ATトランザクションは、oracle.webservices.local.optimizationプロパティがfalseに設定されていても、コンポジットからコンポジットへの呼出しではサポートされません。

oracle.webservices.local.optimizationプロパティの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

37.1.2 HTTPバインディング・サービス

HTTPバインディング・サービスを使用すると、SOAコンポジット・アプリケーションとHTTPバインディングを統合できます。

「HTTPバインディング」サービスを「コンポーネント・パレット」からSOAコンポジット・エディタのスイムレーンにドラッグして、「HTTPバインディング・ウィザード」を起動します。この追加によって、HTTPバインディングを次のように構成できます。

- HTTPのPOSTおよびGET操作からSOAコンポジット・アプリケーションを起動するサービス・バインディング・コンポーネントとして「公開されたサービス」スイムレーンに構成します。

- HTTPのPOSTおよびGET操作からHTTPエンドポイントを起動する参照バインディング・コンポーネントとして「外部参照」スイムレーンに構成します。

注意:

SOAコンポジット・アプリケーションでHTTPバインディングを使用する際は、次の点に注意してください。

- アウトバウンドHTTPバインディング参照でサポートされているのは、外部HTTPエンドポイントからのレスポンスとしてのXMLのみです。レスポンスには、アウトバウンド予測に従った正しいXMLパート名が含まれている必要があります。

- HTTPバインディング・コンポーネントのhttpBindingプロパティは、実行時にOracle Enterprise Manager Fusion Middleware Controlで変更できません。

37.1.2.1 サポートされている相互作用

表37-2に、インバウンド方向およびアウトバウンド方向でサポートされている動詞、ペイロードおよび操作を示します。

表37-2 サポートされている動詞、ペイロードおよび操作

方向

動詞

ペイロード・タイプ

操作

サポート対象か

インバウンド

GET

URLエンコード

一方向

はい

インバウンド

GET

URLエンコード

リクエスト/レスポンス

はい

インバウンド

GET

XML

一方向

いいえ

インバウンド

GET

XML

リクエスト/レスポンス

いいえ

インバウンド

POST

URLエンコード

一方向

はい

インバウンド

POST

URLエンコード

リクエスト/レスポンス

はい

インバウンド

POST

XML

一方向

はい

インバウンド

POST

XML

リクエスト/レスポンス

はい

アウトバウンド

GET

URLエンコード

一方向

いいえ

アウトバウンド

GET

URLエンコード

リクエスト/レスポンス

はい

アウトバウンド

GET

XML

一方向

いいえ

アウトバウンド

GET

XML

リクエスト/レスポンス

はい

アウトバウンド

POST

URLエンコード

一方向

いいえ

アウトバウンド

POST

URLエンコード

リクエスト/レスポンス

はい

アウトバウンド

POST

XML

一方向

いいえ

アウトバウンド

POST

XML

リクエスト/レスポンス

はい

表37-3に、インバウンド方向およびアウトバウンド方向に対してXSDでサポートされているタイプを示します。

表37-3 XSDでサポートされているタイプ

方向

XSDでのタイプ

タイプがサポートされているか

インバウンド

単純

はい

インバウンド

複合

POSTリクエストはサポートされています

GETリクエストはサポートされていません

インバウンド

ネイティブ

いいえ

アウトバウンド

単純

はい

アウトバウンド

複合

POSTリクエストはサポートされています

GETリクエストはサポートされていません

アウトバウンド

ネイティブ

いいえ

次のHTTPヘッダーは、インバウンド方向またはアウトバウンド方向のいずれかでサポートされていません(つまり、コンポジットでHTTPヘッダーにアクセスした場合、そのヘッダーはコンポジットで設定できません)。

- User-agent

- Content-type

- Content-length

- Server

- Server-port

- Referrer

- Authorization

- MIME-Version

- Location

37.1.2.2 HTTPバインディング・サービスの構成方法

HTTPバインディング・サービスを構成する手順は、次のとおりです。

1. 「HTTPバインディング」アイコンを「コンポーネント・パレット」からドラッグして、HTTPバインディングを構成するには、HTTPバインディング・ウィザードを起動します。

2. 「ようこそ」、「サービス名」および「アダプタ・インタフェース」ページに対する適切なレスポンスを提供します。
ウィザードのHTTPバインディング・コンポーネント・ページを使用すると、操作タイプ、動詞およびペイロード・タイプを指定できます。図37-3に詳細を示します。

図37-3 HTTPバインディングの作成ウィザード - 「HTTPバインディング構成」ページ

「図37-3 HTTPバインディングの作成ウィザード - 「HTTPバインディング構成」ページ」の説明

3. インバウンドHTTPバインディングに対して次の操作タイプを選択します。

- 一方向操作: HTTPエンドポイントとの間でメッセージを送信または受信します。

- 同期リクエスト/レスポンス操作: HTTPエンドポイントとの間で入力メッセージと出力メッセージを送受信します。

HTTP POSTリクエスト・メソッドの場合は、URLエンコード(アンパサンドで区切られた名前/値ペア)またはXMLのいずれかのペイロード・タイプを選択できます。

HTTP GETリクエスト・メソッドの場合、ペイロード・タイプはURLエンコードです。

参照バインディング・コンポーネントのHTTP GETまたはPOSTリクエスト・メソッドの場合は、エンドポイントURLも指定するように求められます。HTTP認証およびSecure Socket Layer(SSL)もサポートされています。

注意:

セキュアなHTTP(HTTPS)は、インバウンド方向およびアウトバウンド方向の両方でサポートされています。

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

5. 既存のリクエスト・メッセージ・スキーマを参照するか、「メッセージ」ページの「URL」フィールドの右にあるリンクを使用して独自のスキーマを定義します。図37-4に詳細を示します。

図37-4 HTTPバインディングの作成ウィザード - 「メッセージ」ページ

「図37-4 HTTPバインディングの作成ウィザード - 「メッセージ」ページ」の説明

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

7. 独自のスキーマを定義する場合は、要素名、データ型、最小発生数値および最大発生数値を「スキーマの作成」ダイアログで指定するように求められます。図37-5に詳細を示します。

図37-5 HTTPバインディングの作成ウィザード - 「スキーマの作成」ページ

「図37-5 HTTPバインディングの作成ウィザード - 「スキーマの作成」ページ」の説明

8. 「OK」をクリックします。
実行時には、HTTPバインディングとSOAPバインディングを使用して具体的なWSDLファイルが生成されます。これは、HTTPサポートの提供にSOAPエンドポイントが使用されているためです。

37.1.2.3 HTTPバインディングに対して基本認証を有効にする方法

インバウンドおよびアウトバウンドのHTTPバインディングでは、基本認証がサポートされています。インバウンドのHTTPバインディングに対して基本認証を有効にするには、セキュリティ・ポリシーを添付する必要があります。インバウンドHTTPバインディングは、基本認証が有効でなくても使用できます。

基本認証を有効化する手順は、次のとおりです。

1. 「公開されたサービス」スイムレーンで作成済のHTTPバインディング・サービスを右クリックし、「WSポリシーの構成」を選択します。

2. 「SOA WSポリシーの構成」ダイアログで、「セキュリティ」セクションにある「追加」アイコンをクリックします。

3. 「oracle/wss_http_token_service_policy」ポリシーを選択し、「OK」をクリックします。

4. 「SOA WSポリシーの構成」ダイアログで「OK」をクリックします。

37.1.3 JCAアダプタ

JCAアダプタを使用すると、サービスおよび参照を次のテクノロジと統合できます。

- データベース

- ファイル・システム

- FTPサーバー

- メッセージ・システム(Advanced Queueing(AQ)、Java Messaging Systems(JMS)など)

- IBM WebSphere MQ

- TCP/IPソケット

- Oracle User Messaging Service

- サード・パーティ・アダプタ(SAP、PeopleSoftなど)

JCAアダプタをSOAコンポジット・エディタのスイムレーンにドラッグすると、構成プロパティを指定するためのアダプタ構成ウィザードが起動します。

37.1.3.1 AQアダプタ

AQアダプタを使用すると、シングル・コンシューマ・キューまたはマルチ・コンシューマ・キューと相互作用できます。

Oracle Streams AQでは、使用するアプリケーション間における双方向通信および非同期通信を行うための柔軟なメカニズムが提供されます。アドバンスト・キューはOracleデータベースの機能であるため、スケーラブルで信頼性があります。複数のキューで単一のアプリケーションに対応することも可能です。メッセージを様々な方法でパーティション化し、ロード・バランシングで別のレベルのスケーラビリティを実現します。

詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

37.1.3.2 データベース・アダプタ

データベース・アダプタを使用すると、BPELプロセスでJDBCを介してOracleデータベースやサード・パーティ・データベースと通信できます。

詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

37.1.3.3 ファイル・アダプタ

ファイル・アダプタを使用すると、BPELプロセスまたはOracle Mediatorでローカル・ファイル・システムのファイルを交換(読取りおよび書込み)できます。ファイルの内容は、XMLとXML以外のデータ形式のいずれかです。

注意:

ファイル・アダプタをコールすると、Oracle Real Application Clustersの計画的停止に対して実行する際にOracle BPEL Process Managerが同じファイルを2回処理する可能性があります。これは、ファイル・アダプタがXAに準拠していないアダプタであるためです。したがって、グローバル・トランザクションに組み入れると、各ファイルを1回のみ処理するXAインタフェース仕様に逸脱する可能性があります。

詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

37.1.3.4 FTPアダプタ

FTPアダプタを使用すると、BPELプロセスまたはOracle Mediatorでファイル転送プロトコル(FTP)を使用してリモート・ファイル・システムのファイルを交換(読取りおよび書込み)できます。ファイルの内容は、XMLとXML以外のデータ形式のいずれかです。

詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

37.1.3.5 JMSアダプタ

JMSアダプタを使用すると、Oracle BPELプロセスまたはOracle MediatorでJava Messaging System(JMS)と相互作用できます。

JMSアーキテクチャは、多数のメッセージング・サーバーに対して1つのクライアント・インタフェースを使用します。JMSモデルには次の2つのメッセージング・ドメインがあります。

- Point-to-point: メッセージはキューを介して交換され、各メッセージは1つのレシーバにのみ送信されます。

- Publish-subscribe: メッセージはトピックに送信され、多数のサブスクライブ対象クライアントによる読取りが可能です。

詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

37.1.3.6 MQアダプタ

MQアダプタは、BPELプロセス、Oracle MediatorおよびWebSphere MQキューイングの各システム間のメッセージ交換機能を提供します。

Messaging and Queuing Series(MQ Series)は、IBM社が開発した製品および規格の集合です。MQ Seriesは、保証付きのメッセージ配信、セキュリティおよび優先度ベースのメッセージングを備えたキューイング・インフラストラクチャを提供します。

詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

37.1.3.7 ソケット・アダプタ

ソケット・アダプタを使用すると、クライアントまたはサーバーのソケットを作成し、接続を確立できます。このアダプタを使用すると、TCP/IPソケットを介した通信用の標準または非標準プロトコルをモデル化できます。転送するデータの形式はテキストまたはバイナリのいずれかです。

詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

37.1.3.8 サード・パーティ・アダプタ

サード・パーティ・アダプタを使用すると、PeopleSoft、SAPなどのサード・パーティ・アダプタをSOAコンポジット・アプリケーションに統合できます。これらのサード・パーティ・アダプタによって、JCAアダプタを構成できるアーティファクト(WSDLおよびJCAファイル)が生成されます。

詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

37.1.3.9Oracle User Messaging Serviceアダプタ

Oracle User Messaging Serviceは、電子メール、セキュア・メッセージング・サービス(SMS)、インスタント・メッセージ、ボイスなどのメッセージング・チャネルをサポートします。Oracle User Messaging Serviceは、BPELプロセスまたはOracle Mediatorサービス・コンポーネントと外部との間のメッセージング・プロキシを提供します。Oracle User Messaging Serviceは、双方向メッセージング(インバウンドおよびアウトバウンド)を提供します。

詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

37.1.4 Oracle Applicationsアダプタ

Oracle Applicationsアダプタは、Oracle Applicationsへの接続性を提供します。このアダプタはOracle Applicationsリリース12およびリリース11iのモジュールをすべてサポートしています。このサポートには、Oracle E-Business Suiteのバージョンに基づいたカスタム統合インタフェース・タイプの選択も含まれます。

詳細は、『Oracle Fusion Middleware Adapter for Oracle Applicationsユーザーズ・ガイド』を参照してください。

37.1.5 Oracle BAMアダプタ

Oracle BAMアダプタを使用すると、Java EEアプリケーションをOracle BAMサーバーと統合してデータを送信できます。

Oracle BAMアダプタをSOAコンポジット・エディタのスイムレーンにドラッグすると、構成プロパティを指定するためのアダプタ構成ウィザードが起動します。

詳細は、第X部「Oracle Business Activity Monitoringの使用」、および『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』を参照してください。

37.1.6 Oracle B2B

Oracle B2Bサービスを使用すると、MDSリポジトリのB2Bメタデータを参照したり、ドキュメント定義を選択することができます。

Oracle B2Bは、組織と外部取引パートナ間における安全で信頼できるトランザクション交換を可能にするE-Commerceゲートウェイです。Oracle B2BおよびOracle SOA Suiteは、セキュリティ、準拠、可視性および管理の問題に対処するインフラストラクチャ内でプロセス・オーケストレーション、エラー低減、データ・トランスレーションとデータ・トランスフォーメーションを必要とするE-Commerceビジネス・プロセス用に設計されています。

Oracle B2BをSOAコンポジット・エディタのスイムレーンにドラッグすると、構成プロパティを指定するためのB2B構成ウィザードが起動します。

詳細は、『Oracle Fusion Middleware Oracle B2Bユーザーズ・ガイド』を参照してください。

37.1.7 Oracle Healthcare Adapter

Oracle Healthcare Adapterを使用すると、SOAコンポジット・アプリケーションにエンドツーエンドHealthcare統合プロセスを作成できます。Healthcareアダプタにより、SOAコンポジット・アプリケーションと、データを共有する外部ヘルスケア・アプリケーションとの間の接続、あるいは内部トピックまたはキューとの接続が確立され、データを内部または他のシステムで使用できるようになります。自身のコンポジット・アプリケーションで、BPELプロセス、Oracle Mediatorコンポーネント、様々なアダプタなど他のOracle SOA Suiteコンポーネントを使用できます。

次のように、Oracle JDeveloperのHealthcare構成ウィザードで、ヘルスケア統合バインディング・コンポーネントをSOAコンポジット・アプリケーションに追加できます。

- このコンポーネントは、外部システムからメッセージを受信してそれらをSOAコンポジット・アプリケーションに配信するためのサービス(インバウンド)として使用されます。Oracle SOA Suite for health care integrationは、SOAコンポジット・アプリケーションへのエントリ・ポイントです。

- このコンポーネントは、SOAコンポジット・アプリケーションから外部アプリケーションにメッセージを送信するための参照(アウトバウンド)として使用されます。

Healthcare構成ウィザードの手順に従うと、Oracle SOA Suite for health care integrationで作成されたドキュメント定義を選択するプロンプトが表示されます。

適切なものが存在しない場合は、そのウィザードからOracle SOA Suite for health care integrationを起動してドキュメント定義を作成できます。これは、外部システムとの間でユーザーが送受信するペイロード、つまりメッセージです。

詳細は、Oracle Fusion Middleware Oracle SOA Suite Healthcare統合ユーザーズ・ガイドを参照してください。

37.1.8 ADF-BCサービス

ADF-BCサービスを使用すると、サービス・データ・オブジェクト(SDO)を使用してOracle Application Development Framework(ADF)アプリケーションをSOAコンポジット・アプリケーションに統合できます。

ADF-BCサービスをSOAコンポジット・エディタのスイムレーンにドラッグすると、構成プロパティを指定するための「ADF-BCサービスの作成」ダイアログが表示されます。

Oracle ADFの詳細は、次のものを参照してください。

- 第6.2項「データ・プロバイダ・サービスへのXMLデータ操作の委任」

- 第6.3項「スタンドアロンSDOベースの変数の使用」

- 『Oracle Fusion Middleware Oracle Application Development FrameworkのためのFusion開発者ガイド』

- 『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』

37.1.9 EJBサービス

EJBサービスを使用すると、SDOパラメータ(インタフェースの定義にWSDLファイルを使用)またはJavaインタフェース(インタフェースの定義にWSDLファイルを使用しない)を渡すことによって、Enterprise JavaBeansとSOAコンポジット・アプリケーションが相互作用できます。

SDOを使用すると、物理的にどのようにアクセスされているかに関係なくビジネス・データを修正できます。SOAコンポジット・アプリケーションでSDOを使用する場合、特定のバックエンド・データ・ソースへのアクセス方法についての知識は不要です。つまり、静的または動的なプログラミング・スタイルを使用して、接続および切断されたアクセスを取得できます。

Enterprise JavaBeansは、Javaでエンタープライズ・アプリケーションを作成するためのコンポーネントベースの標準アーキテクチャに適合する、サーバー側ドメイン・オブジェクトです。これらのオブジェクトは、分散化されたセキュアなトランザクション・コンポーネントになります。

Javaインタフェースの場合、WSDLファイルの定義は不要です。このタイプの統合は、次のオブジェクトをサポートします。

- ネイティブJavaオブジェクト

- Java Architecture for XML Binding(JAXB)

EJBサービスをSOAコンポジット・エディタのスイムレーンにドラッグすると、構成プロパティを指定するための「EJBサービスの作成」ダイアログが表示されます。

詳細は、第38章「Enterprise JavaBeansとSOAコンポジット・アプリケーションの統合」を参照してください。

37.1.10 直接バインディング・サービス

直接バインディング・サービスは、インバウンド方向では、直接バインディング起動APIを使用してSOAコンポジット・アプリケーションを起動し、Remote Method Invocation(RMI)を介してメッセージを交換します。このオプションでは、複数のJVM間のアイデンティティおよびトランザクションの両方の伝播がサポートされ、T3の最適化されたパスが使用されます。同期および非同期の両方の起動パターンがサポートされます。

アウトバウンド方向では、Oracle Service Bus(OSB)フローまたは別のSOAコンポジット・アプリケーションも起動できます。

直接バインディング・サービスをSOAコンポジット・エディタのスイムレーンにドラッグすると、構成プロパティを指定するための「直接バインディング・サービスの作成」ダイアログが表示されます。

直接バインディングの詳細は、第39章「直接バインディング起動APIの使用」を参照してください。

直接バインディング起動APIの詳細は、Oracle Fusion Middleware Oracle SOA Suiteインフラストラクチャ管理Java APIリファレンスを参照してください。

OSBの詳細は、『Oracle Fusion Middleware Oracle Service Bus開発者ガイド』を参照してください。

37.2 バインディング・コンポーネントとSOAコンポジット・アプリケーションの統合の概要

バインディング・コンポーネントをSOAコンポジット・アプリケーションに統合するには、対象のバインディング・コンポーネントを「コンポーネント・パレット」からドラッグします。

37.2.1 バインディング・コンポーネントとSOAコンポジット・アプリケーションの統合方法

SOAコンポジット・アプリケーションにバインディング・コンポーネントを統合する手順は、次のとおりです。

1. 「コンポーネント・パレット」の「サービス・アダプタ」セクションから、バインディング・コンポーネントを適切なスイムレーンにドラッグします。コンポーネントをドラッグするスイムレーンは、実行するアクションによって決まります。

- SOAコンポジット・アプリケーションへのエントリ・ポイントを外部に提供する場合は、バインディング・コンポーネントを「公開されたサービス」スイムレーンにドラッグします。

- SOAコンポジット・アプリケーションから外部にある外部サービスにメッセージを送信できるようにする場合は、バインディング・コンポーネントを「外部参照」スイムレーンにドラッグします。

図37-6に、コンポジットにドラッグされるWebサービスを示します。これによって、様々な構成プロパティを指定するためのダイアログが表示されます。

図37-6 Webサービス・バインディング・コンポーネントとコンポジットの統合

「図37-6 Webサービス・バインディング・コンポーネントとコンポジットの統合」の説明

バインディング・コンポーネントの追加方法の詳細は、第2.3項「サービス・バインディング・コンポーネントの追加」および第2.4項「参照バインディング・コンポーネントの追加」を参照してください。

37.2.2 ADFバインディングを使用してJSP/Javaクラスからコンポジット・アプリケーションを起動する方法

SOAコンポジット・アプリケーションでWebサービス・バインディングを使用してエンドポイント参照を定義すると、JSP/Javaクラスからコンポジットを起動できません。Webサービス・バインディングは、binding.ws port="" location=""タグを使用してcomposite.xmlファイルに定義されます。例37-2に詳細を示します。

例37-2 WSバインディング定義

<service name="client_ep" ui:wsdlLocation="BPEL.wsdl">
<interface.wsdl interface="http://xmlns.oracle.com/Application/Project/
BPEL#wsdl.interface(BPEL)"/>
<binding.ws port="http://xmlns.oracle.com/App/BPELProj/
BPELProcess#wsdl.endpoint(bpel_client_ep/BPELProcess_pt)"/>
</service>

かわりに、ADFバインディングを使用してください。ADFバインディングを使用してコンポジットをデプロイすると、JSP/Javaクラスからコンポジットを正常に起動できます。例37-3に詳細を示します。

例37-3 ADFバインディング定義

<service name="client_ep" ui:wsdlLocation="BPEL.wsdl">
<interface.wsdl interface="http://xmlns.oracle.com/Application/Project/
BPEL#wsdl.interface(BPEL)"/>
<binding.adf serviceName="bpel_client" registryName=""/>
</service>

37.3 外部参照のバインディングURLで使用するためのトークンの作成

Oracle JDeveloperで、外部参照のバインディングURL内のHTTPプロトコル、ホスト、およびポート値に対してトークンを作成できます。その後、トークンに割り当てられた値によって、composite.xmlファイルのbinding.ws要素のlocation属性内のハードコードされたHTTPホストおよびポート値が置き換えられます。

たとえば、例37-4は、プロトコル(http)、ホスト(host.us.example)およびポート(80)のハードコードされた値を持つlocation属性を示しています。

例37-4 location属性のハードコードされた値

<binding.ws
port="http://www.globalcompany.example.com/ns/CreditAuthorizationService#wsdl.
endpoint(CreditAuthorizationService/CreditAuthorizationPort)"
location="http://host.us.example:80/apps/FusionOrderDemoShared/services/
creditAuthorization/CreditAuthorizationService.wsdl">

例37-5は、トークン作成後のlocation属性を示しています。

例37-5 location属性でのトークンの使用

<binding.ws
port="http://www.globalcompany.example.com/ns/CreditAuthorizationService#wsdl.
endpoint(CreditAuthorizationService/CreditAuthorizationPort)"
location="${protocol}://${host1}:${port1}/apps/FusionOrderDemoShared/services/
creditAuthorization/CreditAuthorizationService.wsdl">

注意:

- トークンは、composite.xmlファイルのbinding.ws要素のlocation属性でのみ使用できます。

- WSDLファイル、スキーマ・ファイルなど他のファイルでプロトコル、ホストおよびポート値に対してトークンを使用することはできません。

- Oracle JDeveloperでは、ローカル・ファイル・システム上の、トークン値を含むトークン・ファイルのみが更新されます。設計時にローカル・トークン・ファイルを使用する場合、実行時にそれらのトークンをSOAサーバーに移動する必要があります。実行中のトークンの作成の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

37.3.1 外部参照のバインディングURLで使用するためのトークンの作成方法

この項の手順に従って、外部参照のバインディングURLで使用するためのトークンを作成します。

外部参照のバインディングURLで使用するためのトークンを作成する手順は、次のとおりです。

1. Oracle JDeveloperで、トークンを作成するSOAコンポジット・アプリケーションにアクセスします。

2. 「SOAコンポジット・エディタ」の上で、「バインディングURLのトークン化機能」アイコンをクリックします。図37-7に詳細を示します。

図37-7 「バインディングURLのトークン化機能」アイコン

「図37-7 「バインディングURLのトークン化機能」アイコン」の説明

図37-8のように、「バインディングURL」ダイアログが表示されます。

次のエントリで始まるcomposite.xmlファイルでlocation属性を持つbinding.ws要素が設定されている各外部参照のバインディングURLが、自動的に表示されます。

- http

- https

- ${ (ハードコードされたHTTPプロトコル、ホスト、またはポート値のかわりにトークンを使用するURLの場合)

- callbackServerURL

図37-8 「バインディングURL」ダイアログ

「図37-8 「バインディングURL」ダイアログ」の説明

図37-8のService2参照には、callbackServerURLなど参照プロパティを使用したコールバック場所のオーバーライドも含まれています。

<property name="callbackServerURL" type="xs:string" many="false">
${protocol}://${myhost1}:${myport1}/soa-infra/services/default/service/
bpelprocess1_client_ep</property>

図37-8のようにcallbackServerURLプロパティもトークン化できます。

3. 行をダブルクリックするか、行を選択して「編集」アイコンをクリックし、外部参照のバインディングURLのHTTPプロトコル、ホスト、ポート値のトークンを作成します。

図37-9のように、「バインディングURLのトークン化」ダイアログが表示されます。

図37-9 「バインディングURLのトークン化」ダイアログ

「図37-9 「バインディングURLのトークン化」ダイアログ」の説明

4. 表37-4の説明に従って、環境に適した値を指定し、「OK」をクリックします。

表37-4 「バインディングURLのトークン化」ダイアログ

フィールド

説明

トークン・ファイル

次のオプションのいずれかを実行します。

- 「参照」ボタンをクリックし、トークン名および値が含まれているトークン・ファイルを選択するためのリソース・ブラウザダイアログにアクセスします。ファイルは、ローカル・ファイル・システム上に配置されていてもかまいません。このファイルに指定した名前および値によって、binding.ws要素内のプロトコル、ホストおよびポートに対してハードコードされた名前および値が置き換えられます。このフィールドは、後続のこのダイアログの起動時に、ファイルの選択によって自動的に移入されます。ファイル・システムのトークン・ファイルを指定する場合、それは、次の形式のXMLファイルである必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM
"http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>
URL Resolver file used by the Metadata
manager to resolve $<variable> in URLs
</comment>
<entry key="protocol">oramds</entry>
<entry key="host">MyHost</entry>
<entry key="port">80</entry>
</properties>

- 新しいトークン名と値をそれぞれ「トークン」と「現在の値」のフィールドに手動で入力する場合、このフィールド全体をスキップします。
ファイルに保存されていないトークンは、コンポジットのbinding.ws要素のlocation属性にのみ配置されます。設計時に手動で入力されたものと一致するトークンを持つトークン・ファイルを実行時に指定することが予期されています。

参照

手順3で選択した外部参照を表示します。

プロトコル

プロトコル・トークン名を指定するフィールドを表示します。

- 「参照」アイコンをクリックし、「トークン・ピッカー」ダイアログから使用するトークン名を選択します。「トークン・ピッカー」ダイアログに、「トークン・ファイル」フィールドでインポートしたトークン・ファイルに含まれているトークン名が移入されます。選択したトークン名(たとえば、port1)およびそのデフォルト値(たとえば、80)が、それぞれ「トークン」と「現在の値」のフィールドに追加されます。トークン・ファイルが書込み可能(つまり、ファイル・システム内の保護されていないファイル)である場合、トークン名の現在の値を変更できます。「トークン・ピッカー」ダイアログへのアクセスの詳細は、手順5を参照してください。そのファイルが読取り専用である場合、メッセージによって警告され、その操作を取り消して続行できます。

- 使用するトークン名および値を手動で入力します。「トークン・ファイル」フィールドでファイルをインポートしたかどうかに関係なく、これらのフィールドに手動で情報を入力できます。「トークン・ファイル」フィールドで、書込み可能なファイルをインポートしてあり、トークン名を手動で入力すると、それがすでに存在していない場合は、それがそのファイルに追加されます。新しいトークン名の現在の値は、デフォルトで、トークン化中のURL内の値になります。

ホスト

ホスト・トークン名を指定するフィールドを表示します。情報の指定方法の詳細は、「プロトコル」フィールドの説明を参照してください。

ポート

ポート・トークン名を指定するフィールドを表示します。情報の指定方法の詳細は、「プロトコル」フィールドの説明を参照してください。

他の参照の同じ現在値にこれらのトークンを適用

同じプロトコル、ホストおよびポート値を持つ他の外部参照を、同じトークンで置き換えないようにするには、このチェック・ボックスの選択を解除します。

このチェック・ボックスが選択されており、URLオブジェクトの1つか2つのみをトークン化する場合は、それらのオブジェクトに対してのみ参照が変更されます。たとえば、ホスト(host1.us.oracleの現在値を持つ)のみをトークン化する場合、同じホスト値を持つすべての参照が更新されます。

5. 「プロトコル」、「ホスト」または「ポート」のフィールドで「参照」ボタンを選択した場合、図37-10のように「トークン・ピッカー」が表示されます。このダイアログには、「バインディングURLのトークン化」ダイアログの「トークン・ファイル」フィールドでインポートしたファイルで定義されているすべてのトークンがリストされます。

図37-10 「トークン・ピッカー」ダイアログ

「図37-10 「トークン・ピッカー」ダイアログ」の説明

6. 次のオプションの1つを介して、使用するトークン名を選択します。

- リストをスクロールして、トークンを選択します。

- 「トークン」フィールドに名前を入力を開始して、名前が自動的に完成され、リスト内のトークンが選択されるまで続けます。

7. 「OK」をクリックします。
選択したトークン名と値がそれぞれ、「トークン」と「現在の値」のフィールドに表示された「バインディングURLのトークン化」ダイアログに戻ります。

38 Enterprise JavaBeansとSOAコンポジット・アプリケーションの統合

この章では、サービス・データ・オブジェクト(SDO)またはJavaインタフェースを使用してEnterprise JavaBeansをSOAコンポジット・アプリケーションに統合する方法について説明します。ここでは、SDOベースのEnterprise JavaBeansアプリケーションの設計、Oracle JDeveloperでのEnterprise JavaBeansサービスの作成、Oracle SOA Suiteを起動するためのEnterprise JavaBeansクライアントの設計、Enterprise JavaBeansロールの指定およびJNDIアクセスを行う方法について説明します。

この章には次の項が含まれます:

- 第38.1項「Enterprise JavaBeansバインディングとSOAコンポジット・アプリケーションの統合の概要」

- 第38.2項「SDOベースのEnterprise JavaBeansアプリケーションの設計」

- 第38.3項「Oracle JDeveloperでのEnterprise JavaBeansサービスの作成」

- 第38.4項「Oracle SOA Suiteを起動するSDOベースのEnterprise JavaBeansクライアントの設計」

- 第38.5項「Enterprise JavaBeansロールの指定」

- 第38.6項「JNDIアクセスの構成」

注意:

Enterprise JavaBeans 3.0およびEnterprise JavaBeans 2.0の参照(つまり、Enterprise JavaBeans 2.0 Beanをコールする場合)はサポートされています。ただし、Enterprise JavaBeans 2.0のサービス(つまり、Enterprise JavaBeans 2.0 Beanを使用してコールされる場合)はサポートされていません。

38.1 Enterprise JavaBeansバインディングとSOAコンポジット・アプリケーションの統合の概要

Enterprise JavaBeansとSOAコンポジット・アプリケーションの統合方法には、次の2つのオプションがあります。

- SDOベースのEJBを使用する方法(インタフェースの定義にWSDLファイルを使用する)

- Javaインタフェースを使用する方法(インタフェースの定義にWSDLファイルを使用しない)

この章では、両方のオプションについて説明します。

JavaインタフェースとSOAコンポジット・アプリケーションの統合には、Springサービス・コンポーネントも使用できます。Springサービス・コンポーネントの使用方法の詳細は、第52章「Spring Frameworkを使用したSOAコンポジット・アプリケーションへの統合」を参照してください。

38.1.1 SDOベースのEJBを使用した統合

SDOを使用すると、物理的にどのようにアクセスされているかに関係なくビジネス・データを修正できます。SOAコンポジット・アプリケーションでSDOを使用する場合、特定のバックエンド・データ・ソースへのアクセス方法についての知識は不要です。つまり、静的または動的なプログラミング・スタイルを使用して、接続および切断されたアクセスを取得できます。

Enterprise JavaBeansは、Javaでエンタープライズ・アプリケーションを作成するためのコンポーネントベースの標準アーキテクチャに適合する、サーバー側ドメイン・オブジェクトです。これらのオブジェクトは、分散化されたセキュアなトランザクション・コンポーネントになります。

多くのOracle SOA Suiteインタフェースは、WSDLファイルで記述されます。Enterprise JavaBeansインタフェースは、Javaインタフェースで記述されます。両者の間の起動は、Oracle SOA SuiteのWSDLインタフェースに対応するEnterprise JavaBeansのJavaインタフェースによって、Oracle SOA Suiteで可能になります。

このインタフェースを介して、Oracle SOA Suiteは次の機能をサポートします。

- Enterprise JavaBeans参照バインディング・コンポーネントを介した、SDOパラメータによるEnterprise JavaBeansの起動。このシナリオでは、SOAコンポジット・アプリケーションが外部のEnterprise JavaBeansアプリケーションにSDOパラメータを渡します。

- Enterprise JavaBeansを介した、SDOパラメータによるEnterprise JavaBeansサービス・バインディング・コンポーネントの起動。このシナリオでは、Enterprise JavaBeansアプリケーションがSOAコンポジット・アプリケーションにSDOパラメータを渡します。

図38-1に概要を示します。

図38-1 SDOおよびEnterprise JavaBeansバインディングの統合

「図38-1 SDOおよびEnterprise JavaBeansバインディングの統合」の説明

この統合を定義するには、第38.3.1項「SDOベースのEnterprise JavaBeansとSOAコンポジット・アプリケーションの統合方法」で説明するように、Oracle JDeveloperの「EJBサービスの作成」ダイアログを使用します。このオプションでは、WSDLファイルを使用する必要があります。完了すると、例38-1に示すように、WSDL相互作用がinterface.wsdlエントリを介してcomposite.xmlファイルに定義されます。

例38-1 interface.wsdlエントリを介したWSDLファイルの定義

<service name="PortfolioService">
<interface.wsdl
interface="http://bigbank.com/#wsdl.interface(PortfolioService)" />
<binding.ejb javaInterface="java.class.ejb.com" serviceId="PortfolioService"
jarLocation="soaejb.jar"/>

38.1.2 Javaインタフェースを使用した統合

Enterprise JavaBeansとOracle SOA Suiteの統合には、Javaインタフェースも使用できます。この場合、WSDLファイルの定義は不要です。このタイプの統合は、次のオブジェクトをサポートします。

- ネイティブJavaオブジェクト

- Java Architecture for XML Binding(JAXB)

JavaインタフェースはSDOインタフェースとは異なります。SDOインタフェースは、XMLが中心のサービス・コンポーネント(Oracle BPEL Process Manager、Oracle Mediatorなど)を対象としているため、WSDLファイルに定義されます。Javaインタフェースを使用する場合、SDOパラメータは不要です。

この統合を定義するには、第38.3.2項「Javaインタフェース・ベースのEnterprise JavaBeansとSOAコンポジット・アプリケーションの統合方法」で説明するように、Oracle JDeveloperの「EJBサービスの作成」ダイアログを使用します。このオプションでは、WSDLファイルを使用する必要はありません。完了すると、例38-2に示すように、相互作用がinterface.javaエントリを介してcomposite.xmlファイルに定義されます。

例38-2 interface.javaエントリを介したJavaインタフェースの定義

<service name="PortfolioService">
<interface.java interface="com.bigbank.services.MyService" />
binding.ejb uri="MyJNDI" ejb-version="EJB3"/>

Javaクラスは、ユーザー・インタフェースに使用できるプロジェクトのローダー内にある必要があります。このクラスは、デプロイされるSCA-INF内にある必要があります(プロジェクト・クラスパス内のすべてのJARファイルがデプロイされるわけではありません)。これは通常、クラスがSCA-INF/classesディレクトリ内、またはSCA-INF/libディレクトリのJAR内にある必要があることを意味します。ただし、システム・クラスパスのインタフェースも使用できます。

JAXBの詳細は、Oracle Fusion Middleware Oracle TopLinkソリューション・ガイドおよび第52章「Spring Frameworkを使用したSOAコンポジット・アプリケーションへの統合」を参照してください。

38.2 SDOベースのEnterprise JavaBeansアプリケーションの設計

この項では、Enterprise JavaBeansアプリケーション設計手順の高レベルな概要を示します。詳細は、次のドキュメントを参照してください。

- 『Oracle Fusion Middleware Programming Enterprise JavaBeans, Version 3.0 for Oracle WebLogic Server』

- 『Oracle Fusion Middleware Oracle Application Development FrameworkのためのFusion開発者ガイド』

- Oracle JDeveloperオンライン・ヘルプ目次にある次のトピック

- Enterprise JavaBeans

- Enterprise JavaBeansおよびJava永続性API (JPA)のSDO

ヘルプにアクセスするには、Oracle JDeveloperで「ヘルプ」→「目次」の順に選択します。

38.2.1 SDOコンパイラを使用したSDOオブジェクトの作成方法

SDOオブジェクトを作成するには、次のいずれかのオプションを選択します。

- EclipseLinkは、Java開発者用のオープン・ソースのオブジェクト・リレーショナル・マッピング・パッケージです。EclipseLinkには、Javaオブジェクトをリレーショナル・データベースに格納したり、JavaオブジェクトをXML文書に変換するためのフレームワークが備わっています。
EclipseLinkを使用してSDOオブジェクトを作成します。EclipseLinkをインストール、構成および使用してSDOオブジェクトを作成する方法の手順は、次のURLを参照してください。

http://wiki.eclipse.org/EclipseLink/Installing_and_Configuring_EclipseLink

- Oracle JDeveloperでは、JPAエンティティに対するSDOサービス・インタフェースを作成できます。この機能は、SOAコンポジット・アプリケーションのOracle Application Development Framework(ADF)サービス・バインディングで使用する場合により適していますが、SOAコンポジット・アプリケーションのEnterprise JavaBeansサービス・バインディングでもこの機能を使用できます。SDOサービス・インタフェース機能では、必要なWSDLおよびXSDファイルが生成されます。この機能を使用する場合、Enterprise JavaBeansサービス・バインディングを処理するには、次のタスクを実行する必要があります。

- 「SOAリソース・ブラウザ」ダイアログでこのWSDLファイルを参照して選択します。このダイアログには、「EJBサービスの作成」ダイアログの「WSDL URL」フィールドからアクセスできます(第38.3項「Oracle JDeveloperでのEnterprise JavaBeansサービスの作成」の説明を参照)。

- 「BC4Jサービス・ランタイム」ライブラリをSOAプロジェクトに追加します。このライブラリを追加するには、プロジェクトをダブルクリックし、「プロジェクト・プロパティ」ダイアログで「ライブラリとクラスパス」を選択してライブラリを追加します。これで、ビジネス・ロジックを設計できる状態になります。

詳細は、Oracle JDeveloperオンライン・ヘルプのEnterprise JavaBeans/JPA用のSDOに関するトピックを参照してください(SDOサービス・インタフェースの作成方法の手順も含まれています)。

38.2.2 セッションBeanを作成してSDOオブジェクトをインポートする方法

セッションBeanを作成してSDOオブジェクトをインポートする手順は、次のとおりです。

1. 「セッションBean作成」ウィザードを使用して、単純なセッションBeanを作成します。このウィザードの使用方法の詳細は、Oracle JDeveloperオンライン・ヘルプのセッションBeanの作成に関するトピックを参照してください。

2. 「プロジェクト・プロパティ」ダイアログで、SDOオブジェクトをプロジェクトにインポートします。

3. ロジックおよび必要なインポート・ファイルとライブラリ・ファイルを追加します。特に、Commonj.sdo.jarファイルをインポートする必要があります。JARファイルは、「ライブラリとクラスパス」ダイアログで追加できます。このダイアログにアクセスするには、プロジェクトをダブルクリックし、「プロジェクト・プロパティ」ダイアログで「ライブラリとクラスパス」を選択します。これで、ロジックを設計できる状態になります。

4. メソッドをリモート・インタフェースに公開します。

38.2.3 プロファイルおよびEARファイルの作成方法

プロファイルおよびEARファイルを作成する手順は、次のとおりです。

1. 「プロジェクト・プロパティ」ダイアログで、Enterprise JavaBeansのJARプロファイルを作成します。

2. 「アプリケーション・プロパティ」ダイアログで、アプリケーション・レベルのEARファイルを作成します。

38.2.4 Enterprise JavaBeans Beanを使用したSDOタイプの定義方法

Enterprise JavaBeans BeanでSDOタイプを定義する必要があります。例38-3に詳細を示します。

注意:

defineをコールする場所が重要な場合があります。Remote Method Invocation(RMI)マーシャリングが必要になる前に、適切なヘルパー・コンテキストにタイプを定義する必要があります。EclipseLink SDO実装によって、アプリケーション名またはクラス・ローダーでヘルパー・インスタンスに索引付けされます。

Enterprise JavaBeansメソッドを起動したときに、EclipseLink SDOランタイムでアプリケーション名を使用できるようになります。EclipseLink SDOは、キーとしてアプリケーション名を使用してコンテキストを検索します。アプリケーション名が参照可能な場合は、タイプを必ず定義してください。Enterprise JavaBeansの静的ブロックの初期化時に、アプリケーション名は作成されません。したがって、静的ブロックにdefineを配置すると、デフォルトのアプリケーション名ベースのコンテキストを使用している場合は機能しません。アプリケーション名を初期化する方法の1つは、weblogic-ejb-jar.xmlファイルを使用して、3つ以上のインスタンスBeanを割り当てることです。

例38-3 SDOタイプの定義

InputStreamReader reader = new InputStreamReader(url.openStream());
StreamSource source = new StreamSource(reader);
List<SDOType> list = ((SDOXSDHelper) XSDHelper.INSTANCE).define(source, null);

weblogic-ejb-jar.xmlファイルは、デプロイメントjarに追加する必要があるディスクリプタ・ファイルです。weblogic-ejb-jar.xmlファイルは、セッションBeanを作成すると自動的に作成されます。このファイルは、例38-4に示すエントリを追加して変更する必要があります。

例38-4 weblogic-ejb-jar.xmlファイル

<?xml version = '1.0' encoding = 'windows-1252'?>
<weblogic-ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-ejb-jar
http://www.bea.com/ns/weblogic/weblogic-ejb-jar/1.0/weblogic-ejb-jar.xsd"
xmlns="http://www.bea.com/ns/weblogic/weblogic-ejb-jar">

<weblogic-enterprise-bean>
<ejb-name>HelloEJB</ejb-name>
<stateless-session-descriptor>
<pool>
<initial-beans-in-free-pool>2</initial-beans-in-free-pool>
</pool>
</stateless-session-descriptor>
</weblogic-enterprise-bean>

</weblogic-ejb-jar>

図38-2に、SDOロジックが定義されているセッションBeanのコード例を示します。

図38-2 SDOロジックが定義されているセッションBean

「図38-2 SDOロジックが定義されているセッションBean」の説明

38.2.5 Webサービス注釈の使用方法

WSDLファイルを生成するには、Enterprise JavaBeansインタフェースで次のWebサービス注釈を使用する必要があります。これらの注釈の使用については、『JSR 224: Java API for XML-Based Web Services (JAX-WS) 2.0』で説明されています。詳細は、次のURLを参照してください。

http://www.jcp.org/en/jsr/detail?id=224

また、Enterprise JavaBeansバインディング・レイヤーで現在サポートされているのは、ドキュメント/リテラルWSDLのみです。

表38-1で、使用する注釈について説明します。

表38-1 注釈

名前

説明

@javax.jws.WebResult;

@javax.jws.WebParam;

Webサービス・メッセージ・パートおよびXML要素に対する個々のパラメータのマッピングをカスタマイズします。正規化されたメッセージ・ペイロードからの適切なXML要素にSDOパラメータをマップするために、両方の注釈が使用されます。

@javax.jws.Oneway;

メソッドを、入力メッセージのみで出力メッセージのない一方向のWebサービス操作として指定します。この場合、Enterprise JavaBeansバインディング・コンポーネントは、リプライを想定しません。

@javax.xml.ws.RequestWrapper;

@javax.xml.ws.ResponseWrapper;

Enterprise JavaBeansバインディング・コンポーネントに対して、デシリアライズ・オブジェクトをアンラップするかどうか、またはシリアル化の前にラッパーを作成する必要があるかどうかを指示します。

Enterprise JavaBeansインタフェースは、既存のWSDLから生成するか、または他の手段で取得できます。WSDLが存在しない場合は生成できます。

@javax.xml.ws.WebFault;

WSDLフォルトをJava例外にマップします。この注釈は、WSDLフォルト・メッセージで参照するグローバル要素から生成される、JAXBタイプのマーシャリング時に使用されるフォルト要素名を取得します。

@oracle.webservices.PortableWebService

WSDLに使用するtargetNamespaceおよびserviceNameを指定します。例:

@PortableWebService(
targetNamespace = "http://hello.demo.oracle/",
serviceName = "HelloService")

serviceNameは、WSDLファイル名として使用されます。それが注釈内に指定されていない場合、かわりにサービス・エンドポイント・インタフェース(SEI)クラス名が使用されます。

適切なメソッド・パラメータ注釈の追加

メッセージ要素およびタイプのWSDLへのマップ方法を制御するために追加します。たとえば、インタフェースがdoc/lit/bareスタイルにある場合は、メソッドに次の注釈を追加します。

@WebMethod
@SOAPBinding(parameterStyle =
SOAPBinding.ParameterStyle.BARE)

@SDODatabinding

スキーマを生成するかわりに既存のスキーマを使用するために、インタフェース・クラスに追加します。例:

@SDODatabinding(schemaLocation = "etc/HelloService.xsd")

例38-5に、注釈を使用したEnterprise JavaBeansインタフェースの例を示します。

例38-5 注釈を使用したEnterprise JavaBeansインタフェース

@Remote
@PortableWebService(targetNamespace = "http://www.example.org/customer-example",
serviceName = "CustomerSessionEJBService")
@SDODatabinding(schemaLocation = "customer.xsd")
public interface CustomerSessionEJB {
@WebMethod(operationName="createCustomer")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@WebResult(targetNamespace = "http://www.example.org/customer-example",
partName = "parameters", name = "customer")
CustomerType createCustomer();
@WebMethod(operationName="addPhoneNumber")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@WebResult(targetNamespace = "http://www.example.org/customer-example",
partName = "parameters", name = "customer")
CustomerType addPhoneNumber(@WebParam(targetNamespace =
"http://www.example.org/customer-example", partName = "parameters", name =
"phone-number")PhoneNumber phNumber);
}

38.2.6 Enterprise JavaBeans EARファイルのデプロイ方法

Oracle JDeveloperからEARファイルをデプロイする手順は、次のとおりです。

1. アプリケーション名の右側にあるアプリケーション・コンテキスト・メニューを選択します。

2. 「デプロイ」を選択し、EARファイルを以前に作成したアプリケーション・サーバー接続にデプロイします。

38.3 Oracle JDeveloperでのEnterprise JavaBeansサービスの作成

この項では、Oracle JDeveloperでEnterprise JavaBeans参照バインディング・コンポーネントまたはEnterprise JavaBeansサービス・バインディング・コンポーネントを作成する方法について説明します。Enterprise JavaBeansサービスを使用すると、Enterprise JavaBeansアプリケーションでOracle SOA Suiteと通信できるようになり、Oracle SOA SuiteでリモートのEnterprise JavaBeansと通信できるようになります。

この項では、次のタイプの統合を作成する方法について説明します。

- SDOインタフェースを使用した統合

- Javaインタフェースを使用した統合

38.3.1 SDOベースのEnterprise JavaBeansとSOAコンポジット・アプリケーションの統合方法

SDOベースのEnterprise JavaBeansとSOAコンポジット・アプリケーションの間では、次のタイプの統合を作成できます。

- SOAコンポジット・アプリケーションからのSDOベースのEnterprise JavaBeansの起動

- SDOパラメータを使用したEnterprise JavaBeansからのSOAコンポジット・アプリケーションの起動

SDOベースのEnterprise JavaBeansをSOAコンポジット・アプリケーションに統合する手順は、次のとおりです。

1. SOAコンポジット・エディタで、「EJBサービス」アイコンを表38-2に示す適切なスイムレーンにドラッグします。

表38-2 EJBサービスに対するスイムレーン

起動対象

EJBサービスをドラッグするスイムレーン

SOAコンポジット・アプリケーションからのSDOベースのEnterprise JavaBeansの起動

外部参照

SDOパラメータを使用したEnterprise JavaBeansからのSOAコンポジット・アプリケーションの起動

公開されたサービス

2. 「インタフェース」セクションで、「WSDL」をクリックします。

3. EJBサービスをドラッグしたスイムレーンに基づいて、表38-3に示す手順を参照してください。

表38-3 スイムレーンの場所

EJBサービスをドラッグしたスイムレーン

次の手順に移動します。

外部参照

手順3a

公開されたサービス

手順3b

1. 図38-3に示すように、「外部参照」スイムレーンに表示される「EJBサービスの作成」ダイアログを確認します。

図38-3 「外部参照」スイムレーンの「EJBサービスの作成」

「図38-3 「外部参照」スイムレーンの「EJBサービスの作成」」の説明

2. 図38-4に示すように、「公開されたサービス」スイムレーンに表示される「EJBサービスの作成」ダイアログを確認します。

図38-4 「公開されたサービス」スイムレーンの「EJBサービスの作成」

「図38-4 「公開されたサービス」スイムレーンの「EJBサービスの作成」」の説明

4. 環境に適した値を入力します。「EJBサービス」アイコンをドラッグしたスイムレーンに応じて、表示されるフィールドが異なります。表38-4に詳細を示します。

表38-4 「EJBサービスの作成」ダイアログ

フィールド

値

名前

デフォルトの値をそのまま使用するか、別の名前を入力します。

タイプ

次の値が表示されます。

- このアイコンを「外部参照」スイムレーンにドラッグした場合は、「参照」と表示されます。

- このアイコンを「公開されたサービス」スイムレーンにドラッグした場合は、「サービス」と表示されます。

バージョン

サポートするEJBのバージョンをEJB2またはEJB3 (デフォルト選択)から選択します。

注意: このフィールドは、「EJBサービス」アイコンを「外部参照」スイムレーンにドラッグした場合のみ表示されます。

インタフェース

「WSDL」を選択します。

JNDI名

注意: このフィールドは、「EJBサービス」アイコンを「外部参照」スイムレーンにドラッグした場合のみ表示されます。

Enterprise JavaBeansのJNDI名を入力します。

Jarファイル

「検索」アイコンをクリックし、第38.2項「SDOベースのEnterprise JavaBeansアプリケーションの設計」で作成したEJB JARファイルを選択します。「SOAリソース・ブラウザ」ダイアログでは、現在のプロジェクト・ディレクトリのSCA-INF/libサブディレクトリで起動されるJARファイルを検索して表示します。JARファイルには、インタフェース・クラスおよび任意のサポート対象クラスが含まれます。

注意: 現在のプロジェクトの外部にあるJARファイルを選択する場合、Oracle JDeveloperは、現在のプロジェクトのSCA-INF/libディレクトリにあるJARファイルのコピーを作成します。プロンプトが表示されたら、「OK」をクリックして承認します。

JAVAインタフェース

「参照」アイコンをクリックして「クラス・ブラウザ」ダイアログを起動し、以前に作成したEnterprise JavaBeansインタフェースの完全修飾Javaクラス名を選択します。このクラスは、選択したJARファイルに存在している必要があります。JARファイルを指定しない場合、クラスは現在のプロジェクト・ディレクトリの/SCA-INF/classesサブディレクトリ内にあるとみなされます。

注意: 「Jarファイル」フィールドを使用する場合、「アプリケーション」メイン・メニューから「プロジェクト・プロパティ」→「ライブラリとクラスパス」→「JAR/ディレクトリの追加」を選択して、新規JARファイルをプロジェクトに追加する必要はありません。

WSDL URL

注意: WSDLファイルの生成前に、必ず、第38.2.5項「Webサービス注釈の使用方法」の説明に従ってEnterprise JavaBeansインタフェースの注釈を作成しておいてください。

右側にある2番目のアイコンをクリックして、Enterprise JavaBeansインタフェースを表すWSDLファイルを生成します。

第38.2.1項「SDOコンパイラを使用したSDOオブジェクトの作成方法」の説明に従ってOracle JDeveloperでSDOオブジェクトを作成した場合は、このオプションで自動的に生成されたWSDLファイルを必ず選択してください。

ポート・タイプ

ポート・タイプを選択します。

コールバック・ポート・タイプ

コールバック・ポート・タイプを選択します(非同期サービスの場合)。

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

38.3.2 Javaインタフェース・ベースのEnterprise JavaBeansとSOAコンポジット・アプリケーションの統合方法

Javaインタフェース・ベースのEnterprise JavaBeansとSOAコンポジット・アプリケーションの間では、次のタイプの統合を作成できます。

- SOAコンポジット・アプリケーションからのJavaインタフェース・ベースのEnterprise JavaBeansの起動

- Javaインタフェースを使用したEnterprise JavaBeansからのSOAコンポジット・アプリケーションの起動

Javaインタフェース・ベースのEnterprise JavaBeansをSOAコンポジット・アプリケーションに統合する手順は、次のとおりです。

1. 「EJBサービス」アイコンを適切なスイムレーンにドラッグします。

- SOAコンポジット・アプリケーションからEnterprise JavaBeans参照バインディング・コンポーネントを起動するには、アイコンを「外部参照」スイムレーンにドラッグします。

- Enterprise JavaBeansサービス・バインディング・コンポーネントからSOAコンポジット・アプリケーションを起動するには、アイコンを「公開されたサービス」スイムレーンにドラッグします。

2. 「インタフェース」セクションで、「Java」をクリックします(まだ選択していない場合)。

3. 「EJBサービスの作成」ダイアログに、図38-5で示すフィールドが表示されます。

図38-5 Javaインタフェース用の「EJBサービスの作成」

「図38-5 Javaインタフェース用の「EJBサービスの作成」」の説明

4. 表38-5に記載されている詳細を入力します。「EJBサービス」アイコンをドラッグしたスイムレーンに関係なく、表示されるフィールドは同じです。

表38-5 「EJBサービスの作成」ダイアログ

フィールド

値

名前

デフォルトの値をそのまま使用するか、別の名前を入力します。

タイプ

次の値が表示されます。

- このアイコンを「外部参照」スイムレーンにドラッグした場合は、「参照」と表示されます。

- このアイコンを「公開されたサービス」スイムレーンにドラッグした場合は、「サービス」と表示されます。

バージョン

サポートするEJBのバージョンをEJB2またはEJB3 (デフォルト選択)から選択します。

注意: このフィールドは、「EJBサービス」アイコンを「外部参照」スイムレーンにドラッグした場合のみ表示されます。

インタフェース

「Java」を選択します。

JNDI名

Enterprise JavaBeansのJNDI名を入力します。

Jarファイル

「検索」アイコンをクリックし、第38.2項「SDOベースのEnterprise JavaBeansアプリケーションの設計」で作成したEJB JARファイルを選択します。「SOAリソース・ブラウザ」ダイアログでは、現在のプロジェクト・ディレクトリのSCA-INF/libサブディレクトリで起動されるJARファイルを検索して表示します。JARファイルには、インタフェース・クラスおよび任意のサポート対象クラスが含まれます。

注意: 現在のプロジェクトの外部にあるJARファイルを選択する場合、Oracle JDeveloperは、現在のプロジェクトのSCA-INF/libディレクトリにあるJARファイルのコピーを作成します。プロンプトが表示されたら、「OK」をクリックして承認します。

JAVAインタフェース

次のいずれかのオプションを選択します。

- 手動でJavaインタフェースを入力します。

- 「クラス・ファイルの参照」アイコンをクリックし、Javaインタフェースを選択するための「クラス・ブラウザ」ダイアログを呼び出します。
クラスは、ランタイム・クラスパスで使用できる必要があります。ランタイム・クラスパスでクラスを使用できるようにする方法は、いくつかあります。その1つとして、確実にデプロイされるように設計時にクラスをSCA-INF/classesディレクトリまたはSCA-INF/libディレクトリのJARファイルに配置する方法があります。ただし、システム・クラスパスのインタフェースも使用できます。

ランタイム時にクラスを使用できるようにする方法がいくつかありますが、その1つとして、設計時にデプロイされるようにクラスまたはJARをSCA-INFに配置する方法があります。

注意: 「Jarファイル」フィールドを使用する場合、「アプリケーション」メイン・メニューから「プロジェクト・プロパティ」→「ライブラリとクラスパス」→「JAR/ディレクトリの追加」を選択して、新規JARファイルをプロジェクトに追加する必要はありません。

- 「WSDLからのJavaインタフェースの生成」アイコンをクリックして、Javaインタフェースを生成するWSDLファイルを選択します。これは、第38.3.1項「SDOベースのEnterprise JavaBeansとSOAコンポジット・アプリケーションの統合方法」で説明したオプションと同じです。

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

38.4 Oracle SOA Suiteを起動するSDOベースのEnterprise JavaBeansクライアントの設計

Enterprise JavaBeansからSDO - Enterprise JavaBeansサービスを起動するには、クライアント・ライブラリを使用する必要があります。Enterprise JavaBeansクライアントを設計するには、次のガイドラインに従ってください。

- JNDIツリーからSOAServiceInvokerBeanを検索します。

- SOAServiceFactoryのインスタンスを取得し、ファクトリにEnterprise JavaBeansサービス・インタフェースのプロキシを返すように要求します。

- クライアント側のEnterprise JavaBeans起動ライブラリ(Oracle JDeveloperホーム・ディレクトリまたはOracle WebLogic Serverにあるfabric-ejbClient.jarまたはfabric-runtime.jarファイル)を、Enterprise JavaBeansクライアント・アプリケーションに組み込むことができます。たとえば、fabric-runtime.jarファイルをJDev_Home\jdeveloper\soa\modules\oracle.soa.fabric_11.1.1ディレクトリに格納できます。
Enterprise JavaBeansアプリケーションがOracle SOA Suiteと異なるJVMで実行されている場合、Enterprise JavaBeansアプリケーションは、ejbClientライブラリを参照する必要があります。例38-6に例を示します。

serviceFactory.createServiceのMyTestEJBServiceパラメータを指定してサービスIDの完全なパスを指定する必要があります(たとえば、"default/MyTestProject!1.0/MyTestEJBService")。完全なパスが指定されていない場合、EJBException- Could not locate the serviceエラーが表示されます。

例38-6 Enterprise JavaBeansクライアント・コード

Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
props.put(Context.PROVIDER_URL, "t3://" + HOSTNAME + ":" + PORT);
InitialContext ctx = new InitialContext(props);
SOAServiceInvokerBean invoker =
(SOAServiceInvokerBean)
ctx.lookup("SOAServiceInvokerBean#oracle.integration.platform.blocks.sdox.ejb.api.
SOAServiceInvokerBean");

//--  Create a SOAServiceFactory instance
SOAServiceFactory serviceFactory = SOAServiceFactory.newInstance(invoker);

//--  Get a dynamice proxy that is essentially a remote reference
HelloInterface ejbRemote =
serviceFactory.createService("complete_path/MyTestEJBService", HelloInterface.class);

//--  Invoke methods
Item item = (Item) DataFactory.INSTANCE.create(Item.class);
item.setNumber(new BigInteger("32"));
SayHello sayHello = (SayHello)
DataFactory.INSTANCE.create(SayHello.class);
sayHello.setItem(item);

SayHelloResponse response = ejbRemote.sayHello(sayHello);
Item reply = response.getResult();

38.5 Enterprise JavaBeansロールの指定

Java EEアプリケーションからSOAコンポジット・アプリケーションを起動するために必要なロール名を指定するには、ロール名をEnterprise JavaBeansサービス構成に追加します。Enterprise JavaBeansサービスは、コール元のプリンシパルにセキュリティ・ロールがあるかどうかをチェックします。例38-7に詳細を示します。

例38-7 Enterprise JavaBeansロール

<service name="EJBService" ui:wsdlLocation="BPELEJBProcess.wsdl">
<interface.wsdl
interface="http://xmlns.oracle.com/EJBApplication/EJBProject/BPELEJBProcess#wsdl.int
erface(BPELProcess1)"callbackInterface="http://xmlns.oracle.com/EJBApplication/
EJBProject/BPELEJBProcess#
wsdl.interface(BPELEJBProcessCallback)"/>
<property name="rolesAllowed">Superuser, Admin</property>
<binding.ejb javaInterface="java.class.ejb.com" serviceId="EJBService"
jarLocation="soaejb.jar"/>
</service>

38.6 JNDIアクセスの構成

この項では、JNDIアクセスを構成する2つの方法について説明します。

38.6.1 外部JNDIの作成方法

JNDIアクセスを構成するには、次のガイドラインに従ってください。

- 外部JNDIツリーをローカル・サーバー・インスタンスにリンクするように外部JNDIプロバイダを構成して、ローカルの場合と同様にオブジェクトにアクセスできます。『Oracle Fusion Middleware Programming JNDI for Oracle WebLogic Server』を参照してください。

- また、例38-8に示すように、Enterprise JavaBeans参照のプロパティとして、JNDI環境変数を指定することもできます。Enterprise JavaBeansバインディング・コンポーネントを使用すると、独自のマップを作成するか、またはデフォルトのEJBBCバインディング・コンポーネント・マップを使用できます。EJBBCを使用する場合、mapプロパティはオプションです。セキュリティ上の理由から、JNDIセキュリティ資格証明をCSFストアに格納し、例38-8に示すように参照する必要があります。

例38-8 Enterprise JavaBeans参照の環境変数

<property name=
"java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</property>
<property name="java.naming.provider.url">t3://host:7001</property>
<property name="oracle.jps.credstore.map">default</property>
<property name="oracle.jps.credstore.key">weblogic</property>

セキュリティ資格証明は、資格証明ストア・フレームワークに格納することもできます。詳細は、『Oracle Fusion Middlewareアプリケーション・セキュリティ・ガイド』を参照してください。

38.6.2 JNDIルックアップのカスタムCSFマップの作成方法

デフォルトのEnterprise JavaBeans BC CSFマップを使用するかわりに、独自の資格証明ストア・フレームワーク(CSF)マップを作成する場合は、Domain_Home/config/fmwconfig/system-jazn.data.xmlファイルを変更して、例38-9に示す権限をfabric-runtime.jar権限付与のエントリに追加する必要があります。

例38-9 追加する権限

<class>oracle.security.jps.service.credstore.CredentialAccessPermission</class>
<name>>context=SYSTEM,mapName=*,keyName=*</name>
<actions>*</actions>
</permission>

処理後にOracle WebLogic Serverを再起動する必要があります。

CSFの詳細は、Oracle Fusion Middlewareアプリケーション・セキュリティ・ガイドを参照してください。

39 直接バインディング起動APIの使用

この章では、直接バインディング起動APIおよびSOAコンポジット・アプリケーションの起動方法について説明します。ここでは、インバウンド直接バインディング・サービスの作成方法、アウトバウンド直接バインディング参照の作成方法および直接バインディングを起動するJava 2 Platform Standard Edition (J2SE)クライアントのアイデンティティの設定方法について説明します。直接バインディング起動APIの使用のサンプルについても示します。

この章は次の項で構成されています。

- 第39.1項「直接バインディングの概要」

- 第39.2項「直接バインディング起動APIの概要」

- 第39.3項「起動APIを使用したOracle JDeveloperでのSOAコンポジット・アプリケーションの起動」

- 第39.4項「直接バインディング起動APIの使用例」

39.1 直接バインディングの概要

通常、コンポジットの起動にはSOAP over HTTPを使用します。このためには、Webサービス・バインディングを使用してコンポジットのSOAPサービスを作成する必要があります。これに対して、直接バインディングを使用すると、より緊密な統合を作成できます。Javaクライアントは、直接バインディングを使用してコンポジット・サービスを直接起動できるため、Webサービス・バインディングで必要なXMLへの中間変換が不要になります。

直接バインディングでは、次の2種類の起動スタイルがあります。

- インバウンド直接バインディング
直接サービス・バインディング・コンポーネントを使用すると、外部クライアントは直接バインディング起動APIを使用してメッセージを送信できます。この場合、直接バインディング起動APIでは、JNDI接続パラメータを使用し、クライアントにかわって接続オブジェクトが作成されます。

- アウトバウンド直接バインディング(直接参照バインディング)
直接参照バインディング・コンポーネントでは、RMIを介した外部サービスへのSOAメッセージの直接送信がサポートされています。直接インバウンド起動APIと同様に、外部サービスではSOA起動APIを実装する必要があります。

直接アウトバウンド・バインディングの場合、接続オブジェクトは、バインディングに対して構成された外部サービスBeanのJNDI名を使用して作成されます。

直接バインディングは、interface句、およびcallbackInterface句(オプション)を提供するinterface.wsdlに関連付けられている必要があります。また、コンポジットには、関連するWSDLがインポートされている必要があります。

サービス・バインディング・コンポーネントは、直接バインディングを通知するWSDLの変更済バージョンも公開します。

39.1.1 直接サービス・バインディング・コンポーネント

例39-1に、直接サービス・バインディング・コンポーネントを使用するサンプル構成を示します。

例39-1 直接サービス・バインディング・コンポーネント

<service name="direct2">
<interface.wsdl
interface="http://xmlns.oracle.com/asyncNonConvDocLit#wsdl.interface(asyncNonConvD
ocLit)"
callbackInterface="http://xmlns.oracle.com/asyncNonConvDocLit#wsdl.interface(async
NonConvDocLitCallback)" xmlns:ns="http://xmlns.oracle.com/sca/1.0"/>
<binding.direct/>
</service>

39.1.2 直接参照バインディング・コンポーネント

直接参照バインディング・コンポーネントでは、ユーザー指定のSOAインボーカに接続するために次の情報が必要です。

- プロパティ
エンド・サービスのDirectConnectionを定義する一連のプロパティ。

- ConnectionFactoryクラス名
ConnectionFactoryクラスはoracle.soa.api.invocation.DirectConnectFactoryインタフェースを実装する必要があります。

- 外部サービスで使用されるアドレス
このアドレス値は、バインディング・コンポーネントでは処理されませんが、起動時にサービスBeanに渡されます。

- AddressingVersion(オプション)
デフォルトで使用されるアドレッシング・バージョンは2005/08です。

- useSSLForCallback
コールバックJNDI接続にSecure Socket Layer (SSL)を使用します。このフラグをtrueに設定すると、WS-アドレスreplyToヘッダーは、サービスにSSL JNDIポートでのコールバックを指示します。

例39-2に、サンプル構成を示します。

例39-2 サンプル構成

<reference name="HelloReference" ui:wsdlLocation="HelloService.wsdl">
<interface.wsdl
interface="http://hello.demo.oracle/#wsdl.interface(HelloInterface)"/>
<binding.direct connection-factory="oracle.soa.api.JNDIDirectConnectionFactory"
addressingVersion="http://www.w3.org/2005/08/addressing"
address="soadirect://syncOut"
useSSLForCallback="false">
<property
name="oracle.soa.api.invocation.direct.bean">MyDirectTestServiceBean#directEjb.Tes
tInvoker</property>
<property
name="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</property
>
<property name="java.naming.provider.url">t3://@host:@port</property>
</binding.direct>
</reference>

直接バインディング・コンポーネントでは、同期および非同期の両方の起動パターンがサポートされています。図39-1で同期起動パターンのサンプルを、図39-2で非同期起動パターンのサンプルを説明します。

図39-1 同期起動パターンのサンプル

「図39-1 同期起動パターンのサンプル」の説明

図39-2 非同期起動パターンのサンプル

「図39-2 非同期起動パターンのサンプル」の説明

39.2 直接バインディング起動APIの概要

次に、直接バインディング起動APIで使用する各種パッケージを示します。

- oracle.soa.management.facade.Locator
oracle.soa.management.facade.Locatorインタフェースは、直接接続を返すcreateConnectionメソッドを公開します。例39-3に示すように、LocatorはDirectConnectionを返すためのメソッドを公開します。

例39-3 oracle.soa.management.facade.Locator

import java.util.Map;
public interface DirectConnectionFactory {
DirectConnection createDirectConnection(CompositeDN compositeDN,
String serviceName) throws Exception;

例39-4に示すように、LocatorFactory実装を使用してDirectConnectionを取得できます。

例39-4 LocatorFactory実装

Hashtable jndiProps = new Hashtable();
jndiProps.put(Context.PROVIDER_URL, "t3://" + hostname + ':' + portname + "/soa-infra");
jndiProps.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
jndiProps.put(Context.SECURITY_PRINCIPAL,"weblogic");
jndiProps.put(Context.SECURITY_CREDENTIALS,"welcome1");
jndiProps.put("dedicated.connection","true");
Locator locator = LocatorFactory.createLocator(jndiProps);
CompositeDN compositedn = new CompositeDN(domainName, compositename, version);
String serviceName = "HelloEntry";
return locator.createDirectConnection(compositedn, serviceName);

- oracle.soa.api.invocation.DirectConnection
DirectConnectionインタフェースは、直接バインディングを使用してコンポジット・サービスを起動します。詳細は、Oracle Fusion MiddlewareのOracle SOA Suite Infrastructure Management Java APIリファレンスを参照してください。

- oracle.soa.api.message.Message
Messageインタフェースは、交換されたデータをカプセル化します。詳細は、Oracle Fusion MiddlewareのOracle SOA Suite Infrastructure Management Java APIリファレンスを参照してください。

39.2.1 同期直接バインディング起動

直接バインディングでは、例39-5に示すメソッドを使用した同期直接起動もサポートされています。

例39-5 同期直接起動

<T> Message<T> request(String operationName, Message<T> message)
throws InvocationException, FaultException

39.2.2 非同期直接バインディング起動

非同期起動は、メッセージ・インスタンスに設定されているWS-Addressingヘッダーに依存します。すべてのヘッダーはWS-Addressing仕様に準拠している必要があります。

直接バインディング起動APIを使用すると、クライアントはWS-AddressingのReplyTo SOAPヘッダーを指定し、宛先と通信してレスポンスを受信できます。

注意:

サポートされているアドレッシング・バージョンは次のとおりです。

- http://www.w3.org/2005/08/addressing

- http://schemas.xmlsoap.org/ws/2004/08/addressing

- http://schemas.xmlsoap.org/ws/2003/03/addressing

例39-6に、非同期起動に使用されるWS-Addressingヘッダーの例を示します。

例39-6 WS-Addressingヘッダー

<wsa:MessageID>D6202742-D9D9-4023-8167-EF0AB81042EC</wsa:MessageID>
<wsa:ReplyTo xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:Address>sb://testserver:9001/callback</wsa:Address>
<wsa:ReferenceParameters>
<soa:callback xmlns:soa="http://xmlns.oracle.com/soa/direct"
connection-factory="mytest.MyDirectionConnectionFactory">
<soa:property name="oracle.soa.api.invocation.direct.bean"
value="myTest.MyDirectConnectionBean"/>
<soa:property name="java.naming.provider.url" value="t3://test:8001"/>
<soa:property name="java.naming.factory.initial"
value="weblogic.jndi.WLInitialContextFactory"/>
</soa:callback>
</wsa:ReferenceParameters>
</wsa:ReplyTo>

注意:

コールバックとそのプロパティ要素は、SOA直接ネームスペースを使用して正しく修飾する必要があります。

直接バインディング・コンポーネントは、メッセージ・インスタンスに設定されたAddressingヘッダーの解析を担当します。この例には、wsa:MessageIDおよびwsa:ReplyToの2つのヘッダーがあります。サービス・バインディング・コンポーネントでは、内部SOAコンポーネントに対して次のプロパティが使用可能になります。

- tracking.conversationId = D6202742-D9D9-4023-8167-EF0AB81042E

- replyToAddress = sb://testserver:9001/callback

- replyToReferenceParameter: element of WSA:ReferenceParameters

39.2.3 SOA直接アドレス構文

直接バインディング起動APIで使用するサービス・パスは、SOA直接アドレス・パターンに従います。

- soadirect:/CompositeDN/serviceName(CompositeDNはコンポジット識別名)

SOA直接アドレスでは、CompositeDNの形式は次のとおりです。

domainName/compositeName[!compositeVersion[*label]]

39.2.4 SOAトランザクション伝播

直接バインディングでは、SOAトランザクション伝播機能がサポートされています。この機能は、次の2つの方法でクライアントから起動できます。

- クライアントからJavaトランザクションを開始し、すべてのデータベース操作を実行した後にコミットします。データベース操作は、クライアント側からの正常なコミットの後にコミットする必要があります。

- クライアント側からJavaトランザクションを開始します。SOAコンポジットで操作中にフォルトがスローされた場合は、クライアント側からトランザクションをロールバックします。これで、すべてのデータベース操作がロールバックされます。

39.3 起動APIを使用したOracle JDeveloperでのSOAコンポジット・アプリケーションの起動

図39-3に示すように、Oracle JDeveloperの「直接バインディング」コンポーネントでは、RMIでのSOAとのSOAメッセージ交換がサポートされています。

図39-3 「直接バインディング」オプション

「図39-3 「直接バインディング」オプション」の説明

Oracle JDeveloperでは、Oracle Service Busまたは別のSOAコンポジットのいずれかを起動する直接サービス・バインディングと直接参照バインディングの作成がサポートされています。

注意:

クライアントが直接バインディングを使用してコンポジット・サービスを起動するには、そのクラスパスにsoa-infra-mgmt.jarとoracle-soa-client-api.jarの両方が含まれている必要があります。

直接バインディング起動APIの詳細は、第39.2項「直接バインディング起動APIの概要」を参照してください。

39.3.1 インバウンド直接バインディング・サービスの作成方法

SOAコンポジット・アプリケーションは、Oracle JDeveloperの「直接バインディング」オプションを使用して起動できます。

インバウンド直接バインディング・サービスを作成する手順は、次のとおりです。

1. Oracle JDeveloperを開きます。

2. 「コンポーネント・パレット」から「SOA」を選択します。

3. 「サービス・アダプタ」リストから、「直接バインディング」コンポーネントを「公開されたサービス」スイムレーンにドラッグします。「直接バインディングの作成」ダイアログが表示されます。

4. 表39-1に記載されている詳細を入力します。

表39-1 「直接バインディング・サービス」ダイアログのフィールドと値

フィールド

値

名前

名前を入力します。

タイプ

リストから「サービス」を選択します。

参照ターゲット

このサービスを「公開されたサービス」スイムレーンで定義する場合、このフィールドは無効になります。

WSDL URL

WSDLファイルのURLの場所。既存のWSDLがある場合は、「既存のWSDLを検索します。」オプションをクリックします。それ以外の場合は、「スキーマからWSDLを生成します。」をクリックします。

ポート・タイプ

WSDLファイルのポート・タイプ。リストからポート・タイプを選択する必要があります。

コールバック・ポート・タイプ

非同期プロセスのコールバック・ポート・タイプ。

コールバックに対するSSLの使用

コールバックに対してSSLを使用する場合に選択します。

アドレス

WSDLが具体的で少なくとも1つの直接バインディングがある場合、このフィールドは自動的に移入されます。

プロバイダURL

WSDLが具体的で少なくとも1つの直接バインディングがある場合、このフィールドは自動的に移入されます。

ローカルJNDIプロバイダの使用

ローカルJNDIプロバイダを使用する場合に選択します。

WSDLとその依存アーティファクトをプロジェクトにコピー。

このチェック・ボックスの選択を解除します。このチェック・ボックスを選択した場合は、WSDLファイルをローカルでコピーすると、リモートWSDLの更新時に同期の問題が発生する可能性があります。

完了すると、図39-4に示すように、「直接バインディングの作成」ダイアログが表示されます。

図39-4 「直接バインディングの作成」ダイアログ

「図39-4 「直接バインディングの作成」ダイアログ」の説明

5. 「OK」をクリックします。
図39-5に示すように、直接バインディング・サービスがSOAコンポジット・エディタに表示されます。丸囲みの1本の矢印は、同期する一方向の直接バインディング・コンポーネントであることを示します。

図39-5 直接バインディング・サービス

「図39-5 直接バインディング・サービス」の説明

39.3.2 アウトバウンド直接バインディング参照の作成方法

Oracle JDeveloperの「直接バインディング」オプションを使用してアウトバウンド直接バインディング参照を作成し、コンポジット・アプリケーションまたはOracle Service Busを起動できます。

注意:

Oracle SOA SuiteとOracle Service Busが異なるドメインにある場合、それらのドメイン間の信頼を有効化する必要があります。

アウトバウンド直接バインディング参照を作成する手順は、次のとおりです。

1. Oracle JDeveloperを開きます。

2. 「コンポーネント・パレット」から「SOA」を選択します。

3. 「サービス・アダプタ」リストから、「直接バインディング」コンポーネントを「外部参照」スイムレーンにドラッグします。「直接バインディングの作成」ダイアログが表示されます。

4. 表39-2に記載されている詳細を入力します。

表39-2 「直接バインディング・サービス」ダイアログのフィールドと値

フィールド

値

名前

名前を入力します。

タイプ

リストから「参照」を選択します。

参照ターゲット

直接バインディング・サービスの実行先となる参照ターゲットを選択します。

- Oracle SOAコンポジット: SOAコンポジット・アプリケーションを参照ターゲットとして直接バインディングを作成します。

- Oracle Service Bus: Oracle Service Busを参照ターゲットとして直接バインディングを作成します。

WSDL URL

WSDLファイルのURLの場所。既存のWSDLがある場合は、「既存のWSDLを検索します。」オプションをクリックします。

ポート・タイプ

WSDLファイルのポート・タイプ。リストからポート・タイプを選択する必要があります。

コールバック・ポート・タイプ

非同期プロセスのコールバック・ポート・タイプ。

コールバックに対するSSLの使用

コールバックに対してSSLを使用する場合に選択します。

アドレス

具体的なWSDL URLとポート・タイプを選択した場合、このフィールドは自動的に移入されます。ただし、具体的でないWSDLが指定されている場合、このフィールドは手動で入力する必要があります。

プロバイダURL

具体的なWSDL URLとポート・タイプを選択した場合、このフィールドは自動的に移入されます。ただし、具体的でないWSDLが指定されている場合、このフィールドは手動で入力する必要があります。

ローカルJNDIプロバイダの使用

ローカルJNDIプロバイダを使用する場合に選択します。

WSDLとその依存アーティファクトをプロジェクトにコピー。

このチェック・ボックスの選択を解除します。このチェック・ボックスを選択した場合は、WSDLファイルをローカルでコピーすると、リモートWSDLの更新時に同期の問題が発生する可能性があります。

完了すると、図39-6に示すように、「直接バインディングの作成」ダイアログが表示されます。Oracle SOA SuiteのサービスをOracle Service Busで使用する方法の詳細は、『Oracle Fusion Middleware Oracle Service Bus開発者ガイド』の「Oracle SOA Suiteのトランスポート(SOA-DIRECT)」の章を参照してください。

図39-6 「直接バインディングの作成」ダイアログ

「図39-6 「直接バインディングの作成」ダイアログ」の説明

5. 「OK」をクリックします。
図39-7に示すように、直接バインディング参照がデザイナに表示されます。丸囲みの1本の矢印は、同期する一方向の直接バインディング参照コンポーネントであることを示します。

図39-7 直接バインディング参照

「図39-7 直接バインディング参照」の説明

39.3.3 直接バインディングを起動するJ2SEクライアントのアイデンティティの設定方法

例39-7に示すように、直接バインディングの起動中にJ2SEクライアントでアイデンティティを設定できます。

例39-7 直接バインディングを起動するJ2SEクライアントのアイデンティティの設定

public static void main(String[] args) throws Exception {
String operation = "process";

// This is the request message XML
String ns = "http://xmlns.oracle.com/DirectBinding_jws/EchoBPEL/BPELProcess1";
String payloadXML = "<ns1:process xmlns:ns1=\"" + ns + "\">\n" +
"  <ns1:input>wew</ns1:input>\n" +
"</ns1:process>";

String serviceAddress = "soadirect:/default/EchoBPEL!1.0/DService1";

// Specify the direct binding connection properties
Map<String, Object> props = new HashMap<String, Object>();
props.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
props.put(Context.PROVIDER_URL, "t3://" + hostname + ':' + portname);
props.put(Context.SECURITY_PRINCIPAL,username);
props.put(Context.SECURITY_CREDENTIALS, password);

// Create the direct binding connection, using those context properties
DirectConnectionFactory factory = JNDIDirectConnectionFactory.newInstance();

try {
DirectConnection dc = factory.createConnection(serviceAddress, props);

// Parse the XML request message
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
Document doc =
dbf.newDocumentBuilder().parse(new InputSource(new StringReader(payloadXML)));

// Prepare the payload for inclusion in the Message object
Map<String, Element> payload = new HashMap<String, Element>();
payload.put("payload", doc.getDocumentElement());

Message<Element> request = XMLMessageFactory.getInstance().createMessage(payload);

Message<Element> response = dc.request(operation, request);
} finally {
dc.close();
}
}

39.3.4 同一のサーバー名/ドメイン名を持つホスト上でのSOAコンポジットの呼出しに関する注意事項

あるSOAコンポジット・アプリケーションが、異なるホスト上の別のSOAコンポジット・アプリケーションを直接バインディングを介して呼び出し、両コンポジットが同一のサーバー名/ドメイン名を持つホスト上にある場合、呼出しが失敗します。

これは、Oracle WebLogic Serverトランザクション・サブシステムでは、トランザクション管理が正常に機能するためにドメイン名およびサーバー名が異なっている必要があるためです。トランザクション・サブシステムは、これらの名前を使用してトランザクションに関連するサーバーの場所をトラッキングします。呼出し時に2つのサーバーが同一の名前を持つ場合、トランザクション・サブシステムは間違って2つのサーバーを混同してしまいます。

別個のサーバー名およびドメイン名を持つホストを使用するようにしてください。

39.4 直接バインディング起動APIの使用例

例39-8から例39-10に、このAPIの使用例を示します。この項では、接続パラメータを設定し、直接バインディングによってSOAコンポジット・アプリケーションを起動する方法、および直接バインディング起動を起動するようにメッセージ・オブジェクトを変更する方法を示します。

例39-8 接続パラメータの使用

// The JNDIDirectConnectionFactory can be used to establish SOA instance
// connections for exchanging messages over the direct binding.
DirectConnectionFactory dcFactory = JNDIDirectConnectionFactory.newInstance();

// Connections are created based on the configuration, which is a map of standard
// naming properties, which will be used for the underlying connection lookup.
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(Context.INITIAL_CONTEXT_FACTORY, jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, "t3://HOST:PORT");
properties.put(Context.SECURITY_PRINCIPAL, USERNAME);
propertie.put(Context.SECURITY_CREDENTIALS, PASSWORD);
DirectConnection conn =
dcFactory.createConnection("soadirect:/default/MyComposite!1.0/MyService",
properties);

例39-9 メッセージの使用

// Messages are created using the MessageFactory
// Message objects are subsequently modified to be used for an invocation.
Message<Element> request = XMLMessageFactory.getInstance().createMessage();

// Define a Map of WSDL part names to matching XML Element objects
Map<String, Element> partData;

Payload<Element> payload = PayloadFactory.createXMLPayload(partData);
request.setPayload(payload);

// One-way invocation
conn.post("onewayoperation", request);

// Request-reply invocation
Message<Element> response = conn.request("requestreplyoperation", request);

例39-10 LocatorFactoryおよびDirectConnectionの作成の使用

Hashtable jndiProps = new Hashtable();
jndiProps.put(Context.PROVIDER_URL, "t3://" + HOST + ':' + PORT);
jndiProps.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
jndiProps.put(Context.SECURITY_PRINCIPAL,USERNAME);
jndiProps.put(Context.SECURITY_CREDENTIALS, PASSWORD);
Locator locator = LocatorFactory.createLocator(jndiProps);
CompositeDN compositedn = new CompositeDN(domainName, compositename, version);
String serviceName = "HelloEntry";
DirectConnection conn = locator.createDirectConnection(compositedn, serviceName);

第VII部

サービス・コンポーネント間の共有機能

この部では、複数のサービス・コンポーネントで使用可能な機能について説明します。

この部は、次の章で構成されています。

- 第40章「XSLTマッパーを使用したトランスフォメーションの作成」

- 第41章「ビジネス・イベントおよびイベント配信ネットワークの使用」

40 XSLTマッパーを使用したトランスフォーメーションの作成

この章では、XSLTマッパーを使用して、Oracle BPEL Process ManagerまたはOracle Mediatorのいずれかでソース・スキーマ要素とターゲット・スキーマ要素の間のデータ・トランスフォーメーションを作成、設計およびテストする方法について説明します。データ・トランスフォーメーションの作成のサンプルも示します。バージョン1.0のXSLTがサポートされています。

この章には次の項が含まれます:

- 第40.1項「XSLTマッパーの概要」

- 第40.2項「XSLマップ・ファイルの作成」

- 第40.3項「XSLTマッパーを使用したトランスフォメーション・マップの設計」

- 第40.4項「マップのテスト」

- 第40.5項「XSLTマッパーの機能のデモンストレーション」

Oracle BPEL Process ManagerからXSLTマッパーを起動する方法は、第40.2.1項「Oracle BPEL Process ManagerでXSLマップ・ファイルを作成する方法」を参照してください。Oracle MediatorからXSLTマッパーを起動する方法は、第40.2.3項「Oracle MediatorでXSLマップ・ファイルを作成する方法」を参照してください。

40.1 XSLTマッパーの概要

マップ・ファイルの内容は、XSLTマッパーを使用して作成します。図40-1に、XSLTマッパーのレイアウトを示します。

図40-1 XSLTマッパーのレイアウト

「図40-1 XSLTマッパーのレイアウト」の説明

「ソース」および「ターゲット」スキーマはツリーとして表され、ツリー内のノードは様々なアイコンを使用して表されます。表示されているアイコンは、スキーマまたはノードのプロパティを示します。例:

- XSD属性は、XSD要素とは異なるアイコンで表されます。

- オプション要素は、必須要素とは異なるアイコンで表されます。

- 繰返し要素は、非繰返し要素とは異なるアイコンで表されます。

要素または属性を選択すると、要素および属性の様々なプロパティ(タイプ、カーディナリティなど)が、XSLTマッパーの右下にある「プロパティ・インスペクタ」に表示されます。図40-1の右上隅にある「コンポーネント・パレット」には、XSLTマッパーで提供されるすべての関数が表示されます。XSLTマッパーは、関数をドロップして、ソース・ノードおよびターゲット・ノードに接続するための実際の描画領域です。

XSLTマップを最初に作成したとき、ターゲット・ツリーにターゲットXSDの要素と属性構造が示されます。XSLTマップは、XSLTコンストラクトとXPath式をターゲット・ツリーの適切な位置に挿入して作成します。実行すると、XSLTマップは適切な要素と属性をターゲットXSDに生成します。

設計ビューまたはソース・ビューで編集できます。マップを最初に作成したときには、設計ビューが開きます。設計ビューはグラフィカルに表示され、マップの編集が可能です。作成したXSLTのテキスト表現を確認するには、ソース・ビューに切り替えます。ビューを切り替えるには、XSLTマッパーの下部にある「ソース」または「設計」タブをクリックします。

設計ビュー使用時は、「コンポーネント・パレット」の次のページを使用できます。

- 一般: 一般的に使用されるXPath関数とXSLTコンストラクトです。

- 拡張: データベース、相互参照関数などのより高度なXPath関数です。

- ユーザー定義: ユーザー定義関数とテンプレートです。このページが表示されるのは、ユーザーのXSLにテンプレートがある場合か、ユーザー定義の外部関数がプリファレンス・ページを使用して定義されている場合のみです。

- すべてのページ: すべての関数を1ページで表示します。

- コンポーネント: よく使用する関数や最近使用した関数があります。関数をよく使用する関数に追加するには、「コンポーネント・パレット」で関数を右クリックし、「お気に入りに追加」を選択します。

注意:

XSLTマッパーでは、次の関数はOracle Mediatorでのみ使用できます。Oracle BPEL Process Managerでは使用できません。

- getComponentInstanceID()

- getComponentName()

- getCompositeInstanceID()

- getCompositeName()

- getECID()

- getHeader(xpath as string, namespaces as string)

- getProperty(propertyName as string)

- setCompositeInstanceTitle(titleElement)

- setProperty(propertyName as string, value as string)

Oracle BPEL Process Managerの場合は、これらの関数をassignアクティビティで使用できます。

ソース・ビュー使用時は、「XML」と「http://www.w3.org/1999/XSL/Transform」ページを使用できます。

XSLTマッパーには、次に示す3つの個別のコンテキスト依存メニューがあります。

- ソース・パネル

- ターゲット・パネル

- 中央パネル

3つの個別パネルでそれぞれ右クリックすると、各コンテキスト・メニューを確認できます。

デフォルトでは、設計ビューにはソースおよびターゲット・ツリーの全ノードに対する定義済の接頭辞がすべて表示されます。設計ビューの中央のパネルにあるコンテキスト・メニューから「接頭辞の非表示」を選択すると、接頭辞の非表示を選択できます。接頭辞が非表示のときに「接頭辞の表示」を選択すると再度表示されます。

40.1.1 XSLT作成の概要

マップの設計ビューの表示が、ソース・ビュー内で生成されたXSLTとどのように関連するかを理解することが重要です。この項では、簡単な例を紹介します。

初期マップを作成すると、図40-2に示すように、XSLTマッパーによってソース・スキーマとターゲット・スキーマがグラフィカルに表示されます。

図40-2 ソース・スキーマとターゲット・スキーマ

「図40-2 ソース・スキーマとターゲット・スキーマ」の説明

この時点では、マップされたターゲット・フィールドはありません。ソース・ビューに切り替えると、空のXSLTマップが表示されます。XSLT文を設計ビューでグラフィカルに作成すると、XSLTテキストが生成されます。設計ビューでのマッピング操作の例を図40-3に示します。

図40-3 設計ビューでのマッピング

「図40-3 設計ビューでのマッピング」の説明

設計ビューにより、ソース・ビューに次のXSLT文が生成されます。

- ソース・ツリーの「OrderDate」属性は、図40-3中のターゲット・ツリーの「InvoiceDate」属性に線でリンクしています。この結果、例40-1に示すように、XSLT形式のvalue-of文が生成されます。

例40-1 value-of文

<xsl:attribute name="InvoiceDate">
<xsl:value-of select="/ns0:PurchaseOrder/@OrderDate"/>
</xsl:attribute>

- 図40-3に示すソース・ツリーの「First」と「Last」の名前フィールドは、XPathのconcat関数によって連結されます。この結果は、ターゲット・ツリーの「Name」フィールドにリンクされます。これによって、例40-2に示すXSLT文が生成されます。

例40-2 concat関数

<Name>
<xsl:value-of select="concat(/ns0:PurchaseOrder/ShipTo/Name/First,
/ns0:PurchaseOrder/ShipTo/Name/Last)"/>
</Name>

- 図40-3に示すターゲット・ツリーに挿入されたXSLT for-eachコンストラクトに注意してください。ソース・ツリーのHighPriorityItems/Item要素ごとにShippedItems/Item要素がターゲット・ツリーに作成され、ProductNameとQuantityがそれぞれにコピーされています。例40-3に示すXSLT構文が生成されます。

例40-3 for-eachコンストラクト

<xsl:for-each
select="/ns0:PurchaseOrder/Items/HighPriorityItems/Item">
<Item>
<ProductName>
<xsl:value-of select="ProductName"/>
</ProductName>
<Quantity>
<xsl:value-of select="Quantity"/>
</Quantity>
</Item>
</xsl:for-each>

図40-3に示したソース・ツリーの「Item」とターゲット・ツリーの「for-each」コンストラクトをリンクする線が、for-each選択属性に使用されるXPath式を決定します。一般的に、XSLTコントラクトには、主にソース・ツリー要素を参照するXPath文により移入された選択属性またはテスト属性があります。

for-eachコンストラクトの下のvalue-of文のXPath式は、for-eachコンストラクトで参照されているXPathの相対パスです。通常、XSLTマッパーは、for-each文の中に相対パスを作成します。

for-eachコンストラクトの中に絶対パスを作成する必要がある場合は、ソース・ビュー内で行う必要があります。設計ビューに戻ったときに、パスが絶対パスであり、XSLTマッパーで変更されないことに注意します。

注意:

例40-3で、ProductNameおよびQuantityのフィールドは、ソースとターゲットの両方で必要なフィールドです。これらのフィールドがソースおよびターゲットでオプションである場合は、これらのマッピングの前後に、ソース・ノードの存在をテストするxsl:if文を挿入することをお薦めします。この文を挿入しないと、入力ドキュメントにソース・ノードが存在しない場合は、ターゲット・ドキュメントに空のノードが作成されます。たとえば、ProductNameがソースとターゲットの両方でオプションの場合は、これらを次のようにマップします。

<xsl:if test="ProductName">
<ProductName>
<xsl:value-of select="ProductName"/>
</ProductName>
</xsl:if>

この例で生成されたXSLTマップ全体を例40-4に示します。

例40-4 XSLTマップ全体

<xsl:template match="/">
<tns1:Invoice>
<xsl:attribute name="InvoiceDate">
<xsl:value-of select="/ns0:PurchaseOrder/@OrderDate"/>
</xsl:attribute>
<ShippedTo>
<Name>
<xsl:value-of select="concat
(/ns0:PurchaseOrder/ShipTo/Name/First,/ns0:PurchaseOrder/ShipTo/Name/Last)"/>
</Name>
</ShippedTo>
<ShippedItems>
<xsl:for-each select="/ns0:PurchaseOrder/Items/HighPriorityItems/Item">
<Item>
<ProductName>
<xsl:value-of select="ProductName"/>
</ProductName>
<Quantity>
<xsl:value-of select="Quantity"/>
</Quantity>
</Item>
</xsl:for-each>
</ShippedItems>
</tns1:Invoice>
</xsl:template>

この章の以降の各項では、ソース要素とターゲット要素をリンクする方法、XSLTコンストラクトを追加する方法、および設計ビューでXPath式を作成する方法を説明します。

40.1.2 XSLTマッパー使用のガイドライン

- ターゲット・ツリーの1つのノードは、1回のみリンクできます(つまり、ターゲット・ツリー内の1つのノードに2つのリンクは接続できません)。

- 不完全な関数および式は、ソース・ビューのXPath式には表示されません。不完全な式が1つ以上ある状態で設計ビューからソース・ビューに切り替えると、「マッパー・メッセージ」ウィンドウに警告メッセージが表示されます。

- XSLTマッパーで重複する要素をマップすると、スタイルシートは無効になり、「設計」ビューで作業できなくなります。重複する名前の要素をマップした場合は、「ログ」ウィンドウにエラー・メッセージが表示されます。例40-5に詳細を示します。

例40-5 名前の重複によるエラー・メッセージ

Error: This Node is Already Mapped  :
"/ns0:rulebase/for-each/ns0:if/ns0:atom/ns0:rel"
Error: This Node is Already Mapped  :
"/ns0:rulebase/for-each/ns0:if/ns0:atom/choice_1/ns0:ind"
Error: This Node is Already Mapped  :
"/ns0:rulebase/for-each/ns0:if/ns0:atom/choice_1/ns0:var"

設計ビューで重複ノードを作成するには、1回実行されるfor-each文を各重複ノードの前後に記述します。

40.2 XSLマップ・ファイルの作成

トランスフォーメーションはXSLマップ・ファイル内で実行されます。このファイル内で、ソース・スキーマ要素をターゲット・スキーマ要素にマップします。この項では、XSLマップ・ファイルの作成方法について説明します。

注意:

XSLマップ・ファイルは、XSLスタイルシートからも作成できます。Oracle JDeveloperの「ファイル」メイン・メニューから、「新規」→「SOA層」→「トランスフォーメーション」→「XSLスタイルシートからのXSLマップ」を選択します。

40.2.1 Oracle BPEL Process ManagerでXSLマップ・ファイルを作成する方法

transformアクティビティにより、Oracle BPEL Process ManagerのXSLTマッパーを使用してトランスフォーメーションを作成できます。このツールを使用すると、1つ以上のソース要素をターゲット要素にマップできます。たとえば、受信したソース注文書スキーマ・データを、送信する請求書スキーマ・データにマップできます。

Oracle BPEL Process ManagerでXSLマップ・ファイルを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」から、transformアクティビティをBPELプロセス・ダイアグラムにドラッグします。図40-4に例を示します。

図40-4 transformアクティビティ

「図40-4 transformアクティビティ」の説明

2. transformアクティビティをダブルクリックします。
図40-5に示す「Transform」ダイアログが表示されます。

図40-5 「Transform」ダイアログ

「図40-5 「Transform」ダイアログ」の説明

3. 次の情報を指定します。

1. 要素のマップ元となるソース変数を追加します。追加するには、「追加」アイコンをクリックして、変数と、必要に応じて変数のパート(たとえば、注文書リクエストで構成されるペイロード・スキーマ)を選択します。

注意:

複数の入力変数を選択できます。定義されている最初の変数が、XSLマップへのメインXML入力を表します。ここで追加される他の変数は、XSLマップでは入力パラメータとして定義されます。

2. 要素のマップ先となるターゲット変数を追加します。

3. マップ先となる変数のターゲット・パート(たとえば、請求書で構成されるペイロード・スキーマ)を追加します。

4. 「マッパー・ファイル」フィールドで、マップ・ファイル名を指定するか、デフォルト名をそのまま使用します。XSLTマッパーを使用してマップ・ファイルにマッピングを作成します。

5. 「追加」アイコン(「マッパー・ファイル」フィールドの右側にある2番目のアイコン)をクリックして、マッピングを作成します。ファイルが存在する場合は、「編集」アイコン(3番目のアイコン)をクリックしてマッピングを編集します。
XSLTマッパーが表示されます。

6. 第40.1項「XSLTマッパーの概要」に移動して、XSLTマッパーの使用方法の概要を確認します。

40.2.2 Oracle BPEL Process Managerでインポートされたソースとターゲット・スキーマ・ファイルからXSLマップ・ファイルを作成する方法

注意:

拡張子が.xsltの既存のファイル(たとえば、xform.xslt)を選択すると、xform.xsltファイルを使用するつもりでもXSLTマッパーが開き、xform.xslt.xslという名前のXSLファイルが作成されます。拡張子が.xslではないすべてのファイルに.xsl拡張子が追加され、新規ファイルでマッピングを作成する必要が発生します。回避策として、ファイル名には必ず拡張子.xslを付けるようにします。XSLファイルの拡張子が.xsltである場合は、.xslに変更します。

次の手順では、po.xsdファイルとinvoice.xsdファイルを使用して、Oracle BPEL Process ManagerでXSLマップを作成する方法の概要を説明します。

Oracle BPEL Process Managerで、インポートされたソースとターゲット・スキーマ・ファイルからXSLマップ・ファイルを作成する手順は、次のとおりです。

1. Oracle JDeveloperで、新規XSLマップを作成するアプリケーション・プロジェクトを選択します。

2. プロジェクトにpo.xsdおよびinvoice.xsdファイルをインポートします。例:

1. Oracle JDeveloperの「構造」ウィンドウで、「スキーマ」を右クリックします。

2. スキーマのインポートを選択します。

3. 選択したプロジェクトを右クリックし、「新規」を選択します。
「新規ギャラリ」ダイアログが表示されます。

4. 「カテゴリ」ツリーで、「SOA層」を開いて「トランスフォーメーション」を選択します。

5. 「項目」リストで、「XSLマップ」をダブルクリックします。
「XSLマップ・ファイルの作成」ダイアログが表示されます。このダイアログでは、ターゲットのスキーマ・ファイルまたはWeb Services Description Language(WSDL)ファイルのルート要素にソースのスキーマ・ファイルまたはWSDLファイルのルート要素をマップする、XSLマップ・ファイルを作成できます。次の点に注意してください。

- プロジェクトに追加されたWSDLファイルは、「プロジェクトのWSDLファイル」の下に表示されます。

- プロジェクトに追加されたスキーマ・ファイルは、「プロジェクトのスキーマ・ファイル」の下に表示されます。

- プロジェクトの一部ではないスキーマ・ファイルは、スキーマ・ファイルのインポート機能を使用してインポートできます。「スキーマ・ファイルのインポート」アイコン(スキーマ・ファイル・リストの右上にある1番目のアイコン)をクリックしてください。

- プロジェクトの一部ではないWSDLファイルは、WSDLファイルのインポート機能を使用してインポートできます。「WSDLファイルのインポート」アイコン(スキーマ・ファイル・リストの右上にある2番目のアイコン)をクリックしてください。

6. 「「ファイル名」」フィールドに、XSLマップ・ファイルの名前を入力します。

7. ソース・ツリーとターゲット・ツリーでルート要素を選択します。図40-6の例では、ソース・ルート要素にPurchaseOrder要素が選択され、ターゲット・ルート要素にInvoice要素が選択されています。

図40-6 展開された「ターゲット」セクション

「図40-6 展開された「ターゲット」セクション」の説明

8. 「OK」をクリックします。
図40-7に示すように、新しいXSLマップが作成されます。

図40-7 新規XSLマップ

「図40-7 新規XSLマップ」の説明

9. この時点でファイルを保存して閉じるか、トランスフォーメーションの設計を開始します。XSLTマッパーの使用方法は、第40.1項「XSLTマッパーの概要」を参照してください。

10. 「コンポーネント・パレット」からtransformアクティビティをBPELプロセスにドラッグします。

11. transformアクティビティをダブルクリックします。

12. 次の情報を指定します。

1. 要素のマップ元となるソース変数を追加します。追加するには、「追加」アイコンをクリックして、変数と、必要に応じて変数のパート(たとえば、注文書リクエストで構成されるペイロード・スキーマ)を選択します。

注意:

複数の入力変数を選択できます。定義されている最初の変数が、XSLマップへのメインXML入力を表します。ここで追加される他の変数は、XSLマップでは入力パラメータとして定義されます。

2. 要素のマップ先となるターゲット変数を追加します。

3. マップ先となる変数のターゲット・パート(たとえば、請求書で構成されるペイロード・スキーマ)を追加します。

13. 「マッパー・ファイル」フィールドの右側にある「検索」アイコン(1番目のアイコン)をクリックし、ステップ6で指定したファイル名を参照します。

14. 「開く」をクリックします。

15. 「OK」をクリックします。
XSLTマッパーにXSLマップ・ファイルが表示されます。

16. 第40.1項「XSLTマッパーの概要」に移動して、XSLTマッパーの使用方法の概要を確認します。

40.2.3 Oracle MediatorでXSLマップ・ファイルを作成する方法

XSLTマッパーを使用すると、Oracle Mediatorで、XMLスキーマ間でデータを変換するためのXSLファイルを作成できます。XSLファイルを定義した後は、そのファイルを複数のルーティング・ルール仕様で再利用できます。この項では、XSLTマッパーを使用してトランスフォーメーション・マップXSLファイルを作成する方法の概要を示します。

XSLTマッパーは、Oracle JDeveloperの「アプリケーション・ナビゲータ」でXSLファイルをクリックするか、メディエータ・エディタで「トランスフォーメーション」アイコンをクリックすると使用できます。手順については次に説明します。新規のトランスフォーメーション・マップを作成するか、既存のトランスフォーメーション・マップを更新できます。

メディエータ・エディタでXSLTマッパーを起動してデータ・トランスフォーメーションXSLファイルを作成または更新するには、次の手順に従います。

メディエータ・エディタでXSLマップ・ファイルを作成する手順は、次のとおりです。

1. メディエータ・エディタを開きます。

2. 「ルーティング・ルール」の左側の「+」アイコンをクリックして「ルーティング・ルール」パネルを開きます。
「ルーティング・ルール」パネルにトランスフォーメーション・マップ・アイコンが表示されます。

3. 図40-8に示すように、「次を使用して変換」フィールドの右側にある適切なトランスフォーメーション・マップ・アイコンをクリックして、トランスフォーメーション・マップ・ダイアログを表示します。

図40-8 ルーティング・ルール

「図40-8 ルーティング・ルール」の説明

このトランスフォーメーション・マップ・ダイアログには、既存のトランスフォーメーション・マップ(XSL)ファイルを選択するか、新規のマップ・ファイルを作成するオプションが表示されます。たとえば、「同期リプライ」セクションのトランスフォーメーション・マップ・アイコンを選択すると、図40-9に示すダイアログが表示されます。

図40-9 「リプライ・トランスフォーメーション・マップ」ダイアログ

「図40-9 「リプライ・トランスフォーメーション・マップ」ダイアログ」の説明

ルーティング・ルールに同期リプライまたはフォルトが含まれている場合、「リプライ・トランスフォーメーション・マップ」ダイアログまたは「フォルト・トランスフォーメーション・マップ」ダイアログには、「リクエストをリプライ・ペイロードに含める」オプションが表示されます。 このオプションを有効化すると、リクエスト・メッセージから情報を取得できます。リクエスト・メッセージ、リプライおよびフォルト・メッセージは、複数のパートで構成できるため、複数のソース・スキーマを指定できます。コールバックとコールバック・タイムアウト・トランスフォーメーションも、複数のパートで構成できます。

各メッセージ・パートには変数が入ります。リプライ・トランスフォーメーションでは、リプライ・メッセージにはメイン・パート(検出される最初のパート)のスキーマ、およびそれに続く各パートのin.partname変数が含まれます。インクルード・リクエスト・メッセージには、各パートのinitial.partname変数が含まれます。

たとえば、リプライのメイン・パートがout1.HoustonStoreProductスキーマで、変数として処理される他の2つのパートがin.HoustonStoreProductとin.HoustonStoreProduct2であるとします。リクエスト・メッセージには、変数として処理されるinitial.expense、initial.expense2およびinitial.expense3の3つのパートが含まれます。図40-10に例を示します。

図40-10 リプライ・パート

「図40-10 リプライ・パート」の説明

4. 次のいずれかのオプションを選択します。

- 「既存のマッパー・ファイルの使用」を選択し、「検索」アイコンをクリックして既存のXSLTマッパー・ファイルを参照(またはデフォルト値をそのまま使用)します。

- 「新規マッパー・ファイルの作成」を選択し、ファイル名を入力(またはデフォルト値をそのまま使用)します。ステップ3で説明したように、WSDLファイルのソース・メッセージに複数のパートがある場合は、各パートに変数が使用されます。トランスフォーメーションのターゲットに複数のパートがある場合は、複数のトランスフォーメーション・ファイルがこれらのターゲットにマップされます。この場合、Oracle Mediatorの「トランスフォーメーション」ダイアログには、ターゲット・パートごとに別々のパネルが表示されます。たとえば、図 40-11はターゲットに3つのパートがあるリクエストを示しています。

図40-11 「リクエスト・トランスフォーメーション・マップ」ダイアログ

「図40-11 「リクエスト・トランスフォーメーション・マップ」ダイアログ」の説明

5. 「OK」をクリックします。
「新規マッパー・ファイルの作成」を選択した場合は、XSLTマッパーが開き、ソース・スキーマ要素をターゲット・スキーマ要素に関連付けることができます。

6. 第40.1項「XSLTマッパーの概要」に移動して、XSLTマッパーの使用方法の概要を確認します。

40.2.4 XSLマップ・ファイルの作成に関する注意事項

基本的なフォーマット・データ以外の既存のマッピング・エントリをすべてXSLファイルから手動で削除した場合、XSLファイルのエラーは、実行時のトランスフォーメーション中には表示されません。マッピング・エントリは必ず指定してください。たとえば、次の処理を実行するとします。

1. XSLTマッパーで、入力データから出力データへのトランスフォーメーション・マッピングを作成します。

2. 出力データをファイル・アダプタを使用してファイルに書き込むように、アプリケーションを設計します。

3. XSLファイルを手動で変更し、基本的なフォーマット・データ以外のマッピング・エントリをすべて削除します。例:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.fu
nctions.Xpath20"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:ns0="http://xmlns.oracle.com/pcbpel/adapter/file/MediaterDemo/Validation
UsingSchematron/WriteAccounInfoToFile/"
xmlns:orcl="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.fu
nctions.ExtFunc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue
"
xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.servi
ce.common.functions.GetRequestHeaderExtnFunction"
xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
xmlns:imp1="http://www.mycompany.com/MyExample/NewAccount"
xmlns:tns="http://oracle.com/sca/soapservice/MediaterDemo/ValidationUsingSchem
atron/CreateNewCustomerService"
xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRe
fXPathFunctions"
xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ora="http://schemas.oracle.com/xpath/extension"
xmlns:inp1="http://www.mycompany.com/MyExample/NewCustomer"
exclude-result-prefixes="xsi xsl tns xsd inp1 ns0 imp1 plt xp20 bpws orcl dvm
hwf mhdr ids xref ora">
</xsl:stylesheet>

この場合でも、ファイルのコンパイルは可能ですが、XSLマッピングは無効になっています。

4. SOAコンポジット・アプリケーションのインスタンスをデプロイおよび作成します。
インスタンスの作成中に、書込み操作が入力を受信しなかったために失敗し、例外エラーが発生します。ただし、XSLトランスフォーメーション中にエラーは表示されません。

40.2.5 XSLファイルを使用したコンポジットのインポートに関する注意事項

「ファイル」→「インポート」→「SOAアーカイブをSOAプロジェクトへ」を選択して、Oracle Enterprise Manager Fusion Middleware ControlからOracle JDeveloperにエクスポートされたSOAアーカイブをインポートする場合、マップ・ハンドラが削除済のため、XSLマップ・ファイルを開けません。

これを解決するには、次の手順を実行します。

1. 「ファイル」→「新規」→「SOA層」→「トランスフォーメーション」→「XSLスタイルシートからのXSLマップ」を選択し、「OK」をクリックします。
「XSLスタイルシートからのXSLマップ・ファイルの作成」が表示されます。

2. 「ファイル名」フィールドで、新しいマップ名(Transformation_new.xslなど)を入力します。

3. 「作成元のXSLスタイルシート」フィールドで、マップ・ヘッダーのないマップ・ファイル名(この例ではTransformation_old.xsl)を入力します。

4. ソースとターゲットには、マップ・ヘッダーのリカバリに使用するための正しいマップ・ソースおよびターゲット・スキーマ情報を入力します。

5. 新規マップ・ファイルを正常に作成した後、古いマップ・ファイル(Transformation_old.xsl)を削除します。

6. 参照が壊れないようにするため、リカバリされたヘッダーを持つ新規マップ・ファイルの名前を古いマップ・ファイル名に変更します(この例では、Transformation_new.xsltをTransformation_old.xslに名前を変更します)。

40.2.6 XSLマップ・ファイルを作成せずにOracle Mediatorを介してペイロードを渡した場合の実行時の処理内容

トランスフォーメーション・マッピングの定義または値の割当てを行わずに、Oracle Mediatorを介してペイロードを渡すようにSOAコンポジット・アプリケーションを設計した場合、ペイロードはOracle Mediatorを介して渡されます。ただし、ペイロードが正しく渡されるには、ソース・メッセージとターゲット・メッセージのパート名とタイプを同じにする必要があります。これらが同じでない場合、ターゲット参照は実行に失敗し、「入力ソースがNullです」または「Partが見つかりません」などのエラー・メッセージが表示される場合があります。

40.2.7 空のネームスペース・タグがある出力メッセージを受信した場合の処理内容

XSLファイルのXML表現と、シナリオで使用するXML表現(このシナリオでは、トランスフォーメーションを実行するか、assignアクティビティを使用してメッセージを渡します)は、XMLが構文的およびセマンティク的に同じであっても異なる場合があります。たとえば、Oracle Mediatorサービス・コンポーネントを使用して、ネームスペースのない要素を含むインバウンド・ペイロードをアウトバウンド・ペイロードにマップすると、出力メッセージに空のネームスペース・タグが出力されることがあります。

<Country xmlns="">US</Country>

これは正常な動作です。空のネームスペースxmlns=""は自動的に追加されます。

40.3 XSLTマッパーを使用したトランスフォメーション・マップの設計

次の各項では、Oracle BPEL Process ManagerまたはOracle MediatorでXSLTマッパーを使用する方法を説明します。

40.3.1 追加ソースを追加する方法

追加ソースを既存のXSLTマップに追加できます。これらのソースはグローバル・パラメータとして定義され、その構造を定義するスキーマを持っています。マップのロジックによっては、複数のソース文書が必要となる場合があります。たとえば、請求書を作成するには、マップの入力として注文書と顧客データ文書の両方にアクセスする必要がある場合があります。

XSLには、BPEL変数の認識機能はありません。XSL設計時に複数のソースを追加する場合は、これらの複数のソースをBPELプロセスのtransformアクティビティ内でも必ず追加してください。

追加ソースを追加する手順は、次のとおりです。

1. ソース・パネルを右クリックして、コンテキスト・メニューを表示します。図40-12に詳細を示します。

図40-12 コンテキスト・メニュー

「図40-12 コンテキスト・メニュー」の説明

2. 「ソースの追加」を選択します。
図40-13に示す「ソースの追加」ダイアログが表示されます。

3. ソースのパラメータ名を入力します(名前はネームスペースや接頭辞で修飾することもできます)。

図40-13 「ソースの追加」ダイアログ

「図40-13 「ソースの追加」ダイアログ」の説明

4. 「ソース・スキーマ」セクションで、「選択」をクリックして、新しいソースのスキーマを選択します。
「タイプ・チューザ」ダイアログが表示されます。

5. 新規XSLTマップを作成する場合と同じ方法で、パラメータに対して適切なスキーマまたはWSDLファイルを選択またはインポートします。この例では、サンプルのcustomer.xsdファイルの「Customer」要素を選択しています。

6. 「OK」をクリックします。
「パラメータとしてソースを作成」ダイアログの「ソース・スキーマ」セクションに、スキーマの定義が表示されます。

7. 「OK」をクリックします。
選択したスキーマがインポートされ、ソース・パネルのメイン・ソースの上にパラメータが表示されます。図40-14に示すように、パラメータを展開して、基礎となるスキーマの構造を表示できます。

図40-14 展開されたパラメータ

「図40-14 展開されたパラメータ」の説明

パラメータは、先頭に$を付けることで、XPath式で参照できます。たとえば、CUSTという名前のパラメータは、XPath式では$CUSTと表示されます。パラメータの下のノードも参照できます(たとえば、$CUST/customer/Header/customerid)。

40.3.2 ノードのリンクによる単純コピーの実行方法

ソースの属性またはリーフ要素をターゲットの属性またはリーフ要素にコピーするには、ソースをターゲットにドラッグします。たとえば、図40-15に示すように、要素PurchaseOrder/IDをInvoice/IDにコピーし、属性PurchaseOrder/OrderDateをInvoice/InvoiceDateにコピーします。

図40-15 ノードのリンク

「図40-15 ノードのリンク」の説明

40.3.3 定数値の設定方法

次の手順に従って、定数値を設定します。

定数値を設定する手順は、次のとおりです。

1. ターゲット・ツリーでノードを選択します。

2. マウスを右クリックして、コンテキスト・メニューを起動します。

3. 「テキストの設定」メニュー・オプションを選択します。
メニューには次の選択項目があります。

- <空>: 空のノードを作成できます。

- テキストの入力: テキストを入力できます。

4. 「テキストの入力」を選択します。
「テキストの設定」ダイアログが表示されます。

5. 「テキストの設定」ダイアログでテキストを入力します(たとえば、図40-16に示すDiscount Applied)。

図40-16 「テキストの設定」ダイアログ

「図40-16 「テキストの設定」ダイアログ」の説明

6. 「OK」をクリックして、テキストを保存します。
テキストが関連付けられたノードの横に「T」のアイコンが表示されます。入力したテキストの先頭の文字がノード名の横に表示されます。

7. ノードに関連付けられているテキストを変更するには、ノードを右クリックして「テキストの編集」を選択し、「テキストの設定」ダイアログを再度起動します。

8. テキストを変更して「OK」をクリックします。
フィールドの詳細は、「テキストの設定」ダイアログのオンライン・ヘルプを参照してください。

9. ノードに関連付けられているテキストを削除するには、ノードを右クリックして「テキストの削除」を選択します。

40.3.4 関数の追加方法

標準のXPath 1.0関数に加え、XSLTマッパーでは、多くのビルトイン拡張関数を使用できます。また、マッパーはユーザー定義関数や名前付きテンプレートにも対応しています。これらの拡張関数には、接頭辞oraextまたはorclが付加されており、XPath 2.0関数に類似しています。

次の手順に従って、関数定義を表示し、関数を使用します。

関数を追加する手順は、次のとおりです。

1. 「コンポーネント・パレット」で関数のカテゴリ(たとえば、「String Functions」)を選択します。

2. 個別の関数(lower-caseなど)を右クリックします。

3. 「ヘルプ」を選択します。図40-17に示すように、関数の説明があるダイアログが表示されます。下部にある「ページ」リンクをクリックして、World Wide Web Consortium(www.w3.org)にあるこの関数の説明にアクセスすることもできます。

図40-17 関数の説明

「図40-17 関数の説明」の説明

4. 「コンポーネント・パレット」からXSLTマッパーの中央のパネルに、関数をドラッグします。次に、ソース・ツリーのソース・パラメータを関数に接続し、関数の出力をターゲット・ツリーのノードに接続できます。次の例では、「コンポーネント・パレット」の「String」セクションから「concat」関数を中央のパネルにドラッグします。

5. PurchaseOrder/ShipTo/Name/FirstとPurchaseOrder/ShipTo/Name/Lastを連結します。姓および名からスレッドをドラッグし、concat関数の入力(左)側にドロップして、Invoice/ShippedTo/Nameに結果を設定します。

6. ShippedTo名からスレッドをドラッグし、concat関数の出力(右)側に接続します。図40-18を参照してください。

図40-18 concat関数の使用

「図40-18 concat関数の使用」の説明

40.3.4.1 関数パラメータの編集

関数のパラメータを編集するには、関数アイコンをダブルクリックして「関数の編集」ダイアログを起動します。たとえば、新規パラメータのカンマを追加して、前述の例で使用したconcat関数の出力をLast, Firstとするには、「追加」をクリックしてカンマを追加し、この出力となるようにパラメータを並べ替えます。図40-19に詳細を示します。

図40-19 関数パラメータの編集

「図40-19 関数パラメータの編集」の説明

関数パラメータを追加、削除および順序変更する方法の詳細は、「関数の編集」ダイアログのオンライン・ヘルプを参照してください。

40.3.4.2 関数の連鎖

関数の連鎖(ある関数の出力を別の関数の入力にマップすること)によって、複雑な式を作成できます。たとえば、concat関数の出力から先頭と末尾の空白をすべて削除するには、次の手順を実行します。

1. left-trim関数とright-trim関数をconcat関数の枠線の領域にドラッグします。

2. 図40-20に示すように、一方の関数の出力側から次の関数の入力側に線をドラッグして、2つの関数を連鎖します。

連鎖は、関数を接続リンクにドラッグ・アンド・ドロップして実行することもできます。

図40-20 関数の連鎖

「図40-20 関数の連鎖」の説明

40.3.4.3 名前付きテンプレートの使用

一部の複雑なマッピング・ロジックは、ビジュアル・マッピングで表現したり、実現できません。このような場合は、名前付きテンプレートが便利です。名前付きテンプレートを使用すると、共通のマッピング・ロジックを共有できます。共通のマッピング・ロジックを名前付きテンプレートとして定義すると、そのテンプレートは必要に応じて何度でも使用できます。

名前付きテンプレートは2つの方法で定義できます。

- ソース・ビューのXSLマップに直接テンプレートを追加します。

- XSLマップに組み込む外部ファイルにテンプレートを追加します。

定義したテンプレートは、「コンポーネント・パレット」の「ユーザー定義」ページにある「User Defined Named Templates」リストに表示されます。名前付きテンプレートは、他の関数とほぼ同じ方法で使用できます。唯一異なる点は、名前付きテンプレートの出力は関数または別の名前付きテンプレートにリンクできないことです。名前付きテンプレートの出力をリンクできるのは、ターゲット・ツリー内のターゲット・ノードのみです。

名前付きテンプレートの作成には、XSLT言語の知識が必要です。名前付きテンプレートの作成方法の詳細は、XSLTに関する書籍を参照するか、次のURLにアクセスしてください。

http://www.w3.org/TR/xslt

外部ファイルに定義されたテンプレートの組込み方法の詳細は、第40.3.6.7項「xsl:includeを使用した外部テンプレートのインクルード」を参照してください。

40.3.4.4 ユーザー定義関数のインポート

XSLTまたはXPath式で実行できない複雑な機能がある場合は、ユーザー定義のJava関数を作成し、インポートできます。

次の手順に従って、ユーザー独自の関数を作成して使用します。ロジックが複雑すぎるためにXSLマップ内で実行できない場合は、外部のユーザー定義関数が必要になる場合があります。

ユーザー定義関数をインポートする手順は、次のとおりです。

1. 関数をコーディングし、作成します。

XSLTマッパーの拡張関数のコード方法は、Oracle BPELプロセス・マネージャの拡張関数とは異なります。mapper-107-extension-functionsサンプル・シナリオのSampleExtensionFunctions.javaファイルには、2つの例があります。これらのサンプルやその他のサンプルをダウンロードするには、Oracle SOA Suiteサンプルを参照してください。

各関数は、静的関数として宣言する必要があります。入力パラメータと戻り値は、次のいずれかのタイプで宣言する必要があります。

- java.lang.String

- int

- float

- double

- boolean

- oracle.xml.parser.v2.XMLNodeList

- oracle.xml.parser.v2.XMLDocumentFragment

これらの関数のテキストは、次のとおりです。

// SampleExtensionFunctions.java
package oracle.sample;
/*
This is a sample XSLT Mapper User Defined Extension Functions implementation
class.
*/
public class SampleExtensionFunctions
{
public static Double toKilograms(Double lb)
{
return new Double(lb.doubleValue()*0.45359237);
}
public static String replaceChar(String inputString, String oldChar, String
newChar )
{
return inputString.replace(oldChar.charAt(0), newChar.charAt(0));
}
}

2. XML拡張関数構成ファイルを作成します。このファイルは関数とそのパラメータを定義します。
このファイルの名前は、ext-mapper-xpath-functions-config.xmlに設定する必要があります。このファイルのフォーマットに関する詳細は、B.7項「ユーザー定義XPath拡張関数の作成」を参照してください。次の構文は、手順1でコードされている関数toKilogramsおよびreplaceCharを表します。

<?xml version="1.0" encoding="UTF-8"?>
<soa-xpath-functions version="11.1.1"
xmlns="http://xmlns.oracle.com/soa/config/xpath" xmlns:sample=
"http://www.oracle.com/XSL/Transform/java/oracle.sample.SampleExtensionFunctions"
>
<function name="sample:toKilograms">
<className>oracle.sample.SampleExtensionFunctions</className>
<return type="number"/>
<params>
<param name="pounds" type="number"/>
</params>
<desc>Converts a value in pounds to kilograms</desc>
</function>
<function name="sample:replaceChar">
<className>oracle.sample.SampleExtensionFunctions</className>
<return type="string"/>
<params>
<param name="inputString" type="string"/>
<param name="oldChar" type="string"/>
<param name="newChar" type="string"/>
</params>
<desc>Returns a new string resulting from replacing all occurrences
of oldChar in this string with newChar</desc>
</function>
</soa-xpath-functions>

XSLT拡張関数の定義には、他にいくつかのルールが適用されます。

- 関数にはネームスペースの接頭辞とネームスペースが必要です。この例では、sampleとhttp://www.oracle.com/XSL/Transform/java/oracle.sample.SampleExtensionFunctionsとなります。

- Oracle XSLTプロセッサと連携する拡張関数の場合、関数ネームスペースはhttp://www.oracle.com/XSL/Transform/java/で始まる必要があります。

- ネームスペースの後半部は、この例ではoracle.sample.SampleExtensionFunctionsですが、拡張関数を実装したJavaクラスの完全な修飾名である必要があります。

- 表40-1に示したタイプおよび等価のJavaタイプは、パラメータと戻り値に対して使用できます。

表40-1 タイプおよび等価のJavaタイプ

XML構成ファイルのタイプ名

Javaタイプ

string

java.lang.String

boolean

boolean

number

int、float、double

node-set

oracle.xml.parser.v2.XMLNodeList

tree

oracle.xml.parser.v2.XMLDocumentFragment

3. XML構成ファイルとコンパイル済クラスの両方が含まれたJARファイルを作成します。構成ファイルは、JARファイル用のMETA-INFディレクトリに格納される必要があります。この項の例の場合、ディレクトリ構造は、JARファイルにoracleディレクトリとMETA-INFディレクトリが追加され、次のようになります。

- oracle

- sample(クラス・ファイルが格納されます。)

- META-INF

- ext-mapper-xpath-functions-config.xml

次に、JARファイルをOracle JDeveloperに登録する必要があります。

4. 「ツール」→「プリファレンス」→「SOA」の順に選択します。

5. 「追加」ボタンをクリックし、JARファイルに移動して選択します。

6. Oracle JDeveloperを再起動します。
新しい関数は、「コンポーネント・パレット」で、「ユーザー定義」ページの「User Defined Extension Functions」グループに表示されます。

7. 関数をランタイム環境で使用できるようにする方法の詳細は、B.7.3項「ユーザー定義関数のランタイムへのデプロイ方法」を参照してください。

40.3.5 XPath式の編集方法

XPath式を編集する手順は、次のとおりです。

1. 「コンポーネント・パレット」から、「拡張」ページを選択します。

2. 「拡張関数」グループを開きます。

3. xpath-expression関数をリストからXSLTマッパーにドラッグします。図40-21に詳細を示します。

図40-21 XPath式の編集

「図40-21 XPath式の編集」の説明

4. アイコンをダブルクリックします。
図40-22に示すように、「XPath式の編集」ダイアログが表示されます。

図40-22 「XPath式の編集」ダイアログ

「図40-22 「XPath式の編集」ダイアログ」の説明

5. [Ctrl]キーを押しながら[Space]キーを押してXPathビルディング・アシスタントを起動します。 図40-23は、XPathビルディング・アシスタントを示しています。

図40-23 XPathビルディング・アシスタント

「図40-23 XPathビルディング・アシスタント」の説明

XPathビルディング・アシスタントの使用に関する詳細は、「XPath式の編集」ダイアログのオンライン・ヘルプおよびB.6項「Oracle JDeveloperの式ビルダーでのXPath式の構築」を参照してください。

40.3.6 XSLTコンストラクトの追加方法

複雑なスキーマのマッピングでは、XSLTコンストラクトを追加できる必要があります。たとえば、特定の条件が存在する場合、ターゲットでのノードの作成が必要なことがあります。For instance, you may need to create a node in the target when a particular condition exists.これには、xsl:if文またはxsl:choose文の使用が必要です。また、受注の品目リストなど、ソースでnode-setをループ処理し、受注の各品目に対してターゲットXMLにノードを作成する必要がある場合もあります。この場合は、xsl:for-each文を使用する必要があります。XSLTマッパーには、このようなタスクを実行するためのXSLTコンストラクトが用意されています。

for-each、if、chooseなどのXSLTコントラクトをターゲットXSLTツリーに追加する方法は2種類あります。

「コンポーネント・パレット」からXSLTコントラクトを追加する手順は、次のとおりです。

1. 「一般」ページを選択して「XSLT Constructs」グループを開きます。図40-24に詳細を示します。

図40-24 「コンポーネント・パレット」から使用可能なXSLTコンストラクト

「図40-24 「コンポーネント・パレット」から使用可能なXSLTコンストラクト」の説明

2. XSLTコンストラクトをグループからターゲット・ツリーのノードにドラッグします。XSLTコントラクトがそのノードに適用できる場合は、ターゲット・ツリーに挿入されます。whenおよびotherwiseコンストラクトは、あらかじめ挿入されたchooseノードに適用する必要があります。

XSLTコンストラクトをターゲット・ツリーのコンテキスト・メニューを使用して追加する手順は、次のとおりです。

1. XSLTコンストラクトを挿入するターゲット・ツリーの要素を右クリックします。コンテキスト・メニューが表示されます。図40-25に詳細を示します。

図40-25 コンテキスト・メニューから使用可能なXSLTコンストラクト

「図40-25 コンテキスト・メニューから使用可能なXSLTコンストラクト」の説明

2. 「XSLノードの追加」を選択し、次に、挿入するXSLTコンストラクトを選択します。

XSLTコンストラクトが挿入されます。ほとんどの場合、最初はエラー・アイコンがコンストラクトの横に表示されます。これは、コンストラクトにXPath式を定義する必要があることを示しています。

たとえば、for-eachコンストラクトの場合、XPath式はfor-each文のループ対象となるノードセットを定義します。ifコンストラクトの場合、XPath式はifコントラクトの内容の実行可否を決定するために評価されるブール式を定義します。

XPath式は、ターゲット・ツリーの要素や属性のマッピングと同じ方法で作成できます。次の方法は、XSLTで基礎となるXPath式を作成する方法です。これらの方法はすべて、XPath式を設定するためにターゲット・ツリーのXSLTコンストラクトで実行できます。

- ノードのリンクによる単純コピーの作成

- 関数の追加

- XPath式の追加

次の各項では、サポートされている各XSLTコンストラクトを挿入する具体的な手順を説明します。

40.3.6.1 xsl:ifを使用した条件付き処理の使用

図40-26で、HQAccountとBranchAccountは、PurchaseOrderスキーマのchoice要素の一部であり、実際のインスタンスにはそのいずれか1つが出現します。ここでは、条件付きマッピングの具体例として、PurchaseOrder/HQAccount/AccountNumberが存在する場合のみ、Invoice/BilledToAccount/AccountNumberにコピーします。

xsl:ifを使用した条件付き処理を使用する手順は、次のとおりです。

1. ターゲット・ツリーでInvoice/BilledToAccount/AccountNumberを選択し、右クリックしてコンテキスト依存メニューを起動します。

2. 「XSLノードの追加」→「if」の順に選択し、PurchaseOrder/HQAccount/AccountNumberをInvoice/BilledToAccount/ifに接続します。

3. PurchaseOrder/HQAccount/AccountNumberをInvoice/BilledToAccount/if/AccountNumberに接続します。

図40-26に結果を示します。

図40-26 xsl:ifを使用した条件付き処理

「図40-26 xsl:ifを使用した条件付き処理」の説明

オプションのソース・ノードをオプションのターゲット・ノードにマップする場合は、ソース・ノードが存在するかどうかをテストするxsl:if文でマッピングを囲むことが重要です。このように処理しないと、入力文書にソース・ノードが存在しない場合は、ターゲット文書に空のノードが作成されます。たとえば、次のマッピングに注意してください。

<ProductName>
<xsl:value-of select="ProductName"/>
</ProductName>

ProductNameフィールドがソースおよびターゲットの両方でオプションであり、その要素がソース文書に存在しない場合は、ターゲット文書に空のProductName要素が作成されます。この状況を回避するには、次のコードに示すように、ターゲット・ノードの作成前に、ソース・ノードが存在するかどうかをテストするif文を追加します。

<xsl:if test="ProductName">
<ProductName>
<xsl:value-of select="ProductName"/>
</ProductName>
</xsl:if>

40.3.6.2 xsl:chooseを使用した条件付き処理の使用

この同じ例で、PurchaseOrder/HQAccount/AccountNumberが存在する場合は、Invoice/BilledToAccount/AccountNumberにコピーできます。存在しない場合は、PurchaseOrder/BranchAccountをInvoice/BilledToAccount/AccountNumberにコピーします。

xsl:chooseを使用した条件付き処理を使用する手順は、次のとおりです。

1. ターゲット・ツリーでInvoice/BilledToAccount/AccountNumberを選択し、右クリックしてコンテキスト依存メニューを起動します。

2. メニューから「XSLノードの追加」→「choose」の順に選択します。

3. PurchaseOrder/HQAccount/AccountNumberをInvoice/BilledToAccount/choose/whenに接続して、条件を定義します。

4. PurchaseOrder/HQAccount/AccountNumberをInvoice/BilledToAccount/choose/when/AccountNumberに接続します。

5. ターゲット・ツリーでXSL追加ノード→「choose」の順に選択し、右クリックしてコンテキスト依存メニューを起動します。

6. メニューから「XSLノードの追加」→「otherwise」の順に選択します。

7. PurchaseOrder/BranchAccount/AccountNumberをInvoice/BilledToAccount/choose/otherwise/AccountNumberに接続します。

図40-27に結果を示します。

図40-27 xsl:chooseを使用した条件付き処理

「図40-27 xsl:chooseを使用した条件付き処理」の説明

40.3.6.3 xsl:for-eachを使用したループの作成

XSLTマッパーでは、xsl:for-eachコマンドを使用したループを作成できます。例として、PurchaseOrder/Items/HighPriorityItems/ItemをInvoice/ShippedItems/Itemにコピーします。

xsl:for-eachを使用してループを作成する手順は、次のとおりです。

1. ターゲット・ツリーでInvoice/ShippedItems/Itemを選択し、右クリックしてコンテキスト依存メニューを起動します。

2. 「XSLノードの追加」→「for-each」の順に選択し、PurchaseOrder/Items/HighPriorityItems/ItemをInvoice/ShippedItems/for-eachに接続して繰返しを定義します。

3. PurchaseOrder/Items/HighPriorityItems/Item/ProductNameをInvoice/ShippedItems/for-each/Item/ProductNameに接続します。

4. PurchaseOrder/Items/HighPriorityItems/Item/QuantityをInvoice/ShippedItems/for-each/Item/Quantityに接続します。

5. PurchaseOrder/Items/HighPriorityItems/Item/USPriceをInvoice/ShippedItems/for-each/Item/PriceChargedに接続します。

図40-28に結果を示します。

図40-28 xsl:for-eachを使用したループの作成

「図40-28 xsl:for-eachを使用したループの作成」の説明

注意:

- 自動マップを実行すると、xsl:for-eachが自動的に挿入されます。自動マップの動作を参照する場合、PurchaseOrder/Items/LowPriorityItemsをInvoice/UnShippedItemsにドラッグします。for-eachコンストラクトが自動的に作成されます。

- 設計には無限ループが含まれていないことが必要です。このようなループがあると、アプリケーションのデプロイメントおよび起動時に、次のようなエラーが表示されます。

ORAMED-04001:
. . .
oracle.tip.mediator.service.BaseActionHandler requestProcess
SEVERE:
failed reference BPELProcess1.bpelprocess1_client operation = process

40.3.6.4 xsl:for-eachのクローニング

既存のxsl:for-eachをクローニングして追加のループを作成できます。たとえば、HighPriorityItemsに加えて、LowPriorityItemsをすべてShippedItemsにコピーします。

xsl:for-eachをクローニングする手順は、次のとおりです。

1. Invoice/ShippedItemsの下のfor-eachを選択します。

2. 右クリックして、「XSLノードの追加」→「'for-each'のクローニング」の順に選択します。
これで、for-eachノードのコピーがオリジナルのfor-eachの下に挿入されます。

3. PurchaseOrder/Items/LowPriorityItems/Itemをコピーしたfor-eachにドラッグし、繰返しを定義します。

4. PurchaseOrder/Items/LowPriorityItems/Item/ProductNameをコピーしたfor-eachのItem/ProductNameに接続します。

5. PurchaseOrder/Items/LowPriorityItems/Item/Quantityをコピーしたfor-eachのItem/Quantityに接続します。

6. PurchaseOrder/Items/LowPriorityItems/Item/USPriceをコピーしたfor-eachのItem/PriceChargedに接続します。

40.3.6.5 xsl:for-eachへのxsl:sortの適用

XSLTマッパーを使用すると、xsl:sort文をxsl:for-eachコマンドに追加できます。

xsl:sort文を追加する手順は、次のとおりです。

1. ターゲット・ツリーのfor-each文を右クリックします。
コンテキスト・メニューが表示されます。

2. 「XSLノードの追加」→「sort」を選択します。図40-29で示されるように、「ソート編集ダイアログ」が表示されます。

図40-29 「ソート編集ダイアログ」

「図40-29 「ソート編集ダイアログ」」の説明

3. 必要に応じて、sort文に追加するオプションを選択します。オプションの詳細は、オンライン・ヘルプを参照してください。

4. 「OK」をクリックします。for-eachの後にsort文が追加されます。

5. ソート対象のフィールドを設定するには、ソース・ツリーの必要なソート・フィールド・ノードをターゲット・ツリーのソート・ノードへドラッグします。これによって、単純なリンクが作成され、xsl:sortの選択属性に対してXPath式が設定されます。

6. sort文をさらに追加するには、「for-each」を右クリックして別のsortを追加するか、既存のソート・ノードを右クリックして、選択したソート・ノードの前に新しいsort文を挿入します。

7. ソート・ノードを編集するには、ソート・ノードをダブルクリックするか、右クリックして、コンテキスト・メニューから「ソートの編集」を選択します。この結果、「ソート編集ダイアログ」が起動され、ソート・オプションを変更できます。

40.3.6.6 xsl:copy-ofを使用したノードのコピー

ノードをその子ノードと一緒にソース・ツリーからターゲット・ツリーにコピーする場合に、XSLT copy-ofコンストラクトを使用できます。この方法は、通常anyTypeやany要素ノードを処理する場合に行われます。anyTypeやany要素ノードおよび属性ノードは、直接マップできません。copy-of、または要素置換およびタイプ置換を使用してください。

xsl:copy-ofを使用してノードをコピーする手順は、次のとおりです。

1. copy-ofコマンドで作成するノードをターゲット・ツリーで選択します。

2. 右クリックして、「XSLノードの追加」→「copy-of」の順に選択します。
選択したノードがany要素ノードでない場合は、ダイアログが表示され、選択したノードを置換するか、その子ノードを置換するように求められます。

3. アプリケーションに対して正しいオプションを選択して、「OK」をクリックします。
copy-ofコンストラクトを使用して選択したノードを置換を選択すると、copy-ofに続いて、XSL内に処理ディレクティブが即座に作成され、どのノードがcopy-ofコンストラクトによって置換されたかが示されます。XSLに処理ディレクティブがないと、設計ビューへの変換が不正に解釈されます。このため、ソース・ビュー使用中に、この処理命令を削除または編集しないでください。

4. ソース・ツリーからドラッグ・アンド・ドロップするか、またはXPath式を作成することでcopy-ofコンストラクトのソース・ノードを設定します。

注意:

copy-ofコマンドは必ず設計ビューで作成し、正しい処理ディレクティブがXSLTマッパーに作成され、copy-ofコマンドのターゲット・ツリーの中の正しい場所が指示できるようにします。

警告:

XSLTマッパーでは、現在、copy-ofコマンドを使用して実行されたデータのマッピングを検証しません。必ずcopy-ofがターゲット・ツリーに要素を正しくマップするために使用され、その結果ターゲットのXML文書に有効なデータが含まれるようにします。テスト・ツールを使用して有効性をテストできます。

40.3.6.7 xsl:includeを使用した外部テンプレートのインクルード

外部XSLファイルに定義されたテンプレートをinclude文を使用して現在のマップに含めることにより、テンプレートを再利用できます。

xsl:includeを使用して外部テンプレートをインクルードする手順は、次のとおりです。

1. ターゲット・ツリーのルート・ノードを選択し、右クリックします。

2. メニューから、「インクルード・ファイルの追加」を選択します。
インクルード・ファイル名を選択するダイアログが表示されます。

3. ファイルを選択して「OK」をクリックします。
ファイルは既存のマップ・ファイルと同じプロジェクト・ディレクトリにコピーされます。相対パス名が作成され、include文指示がターゲット・ツリーに挿入されます。

インクルード・ファイルには名前付きのテンプレート定義しか入りません。これらは解析された後、設計ビュー内で、「コンポーネント・パレット」の「ユーザー定義」ページの「User Defined Named Templates」カテゴリから使用できます。

注意:

oramds://共有ロケーションは、ユーザー定義の名前付きテンプレート・インクルード・ファイルでは参照できません。

40.3.7 ノードを自動的にマップする方法

リーフ以外のノードのマッピングでは、自動マップ機能が起動します。選択したソースとターゲットの下にあるすべての関連ノードの自動リンクが試行されます。例として、PurchaseOrder/ShipTo/AddressをInvoice/ShippedTo/Addressにマップして自動マップ機能を確認してください。図40-30のように、「Address」のすべてのノードが自動的にマップされます。

図40-30 自動マッピング

「図40-30 自動マッピング」の説明

自動マップの動作は、Oracle JDeveloperのプリファレンスの設定を変更するか、XSLTマッパーを右クリックし、「自動マップ・プリファレンス」を選択して調整できます。図40-31に示すダイアログが表示されます。

図40-31 「自動マップ・プリファレンス」

「図40-31 「自動マップ・プリファレンス」」の説明

このダイアログでは、自動マッピングを次のようにカスタマイズできます。

- 自動マッピング機能を起動できます。この機能では、選択したソースとターゲットの下にあるすべての関連ノードの自動リンクが試行されます。この機能が無効の場合は、関連ノードを個別にマップする必要があります。

- XSLTマッパーで検出されたソースからターゲットへの考えられるすべてのマッピングを表示および確認してから、作成を確定できます。

- 自動マップの起動前に、自動マップのプリファレンスをカスタマイズするかどうかを尋ねるプロンプトを表示できます。

- ソース・ノードおよびターゲット・ノードの自動マッピングに対して、「標準」または「詳細」のいずれかの方法を選択できます。この処理によって、選択したソースとターゲットの下にあるすべての関連ノードの自動リンクを、XSLTマッパーでどのように試行するかをカスタマイズできます。

- ディクショナリを管理できます。XSLTマッパーでは、ソース要素とターゲット要素の自動マップの試行時に、ディクショナリで定義されているルールが使用されます。
フィールドの詳細は、「自動マップ・プリファレンス」ダイアログのオンライン・ヘルプを参照してください。

次の手順に従って、ターゲット・ノードの潜在的なソース・マッピング候補を検索します。

ノードを自動的にマップする手順は、次のとおりです。

1. ターゲット・ノードを右クリックして、「一致アイテムの表示」を選択します。

2. 「自動マップ・プリファレンス」ダイアログで「OK」をクリックします。
図40-32に示すように、「自動マップ」ダイアログが表示されます。

図40-32 自動マッピング候補

「図40-32 自動マッピング候補」の説明

フィールドの詳細は、「自動マップ」ダイアログのオンライン・ヘルプを参照してください。

40.3.7.1 確認を伴う自動マップの使用

図40-31に示した「自動マップの結果を確認」チェック・ボックスが選択されている場合は、確認ダイアログが表示されます。一致が検出された場合は、図40-33に示すように、XSLTマッパーで検出されたソースからターゲットへの考えられるマッピングが表示されます。このダイアログでは、1つ以上のマッピングをフィルタリングできます。

図40-33 確認を伴う自動マップ

「図40-33 確認を伴う自動マップ」の説明

フィールドの詳細は、「自動マップ」ダイアログのオンライン・ヘルプを参照してください。

40.3.8 自動マッピングに関する注意事項

自動マッピング・アルゴリズムは、ソース・ノードとターゲット・ノード間の既存のマップに依存します。自動マッピングの実行前に、ソース・ノードとターゲット・ノード間にマップが存在する場合は、これらの既存のマップによって、アルゴリズムで使用される有効なシノニムが定義されます。

たとえば、図40-34に示すように、単純なソース・ツリーとターゲット・ツリーがあり、それぞれにtest1とtest2という2つの要素があるとします。

図40-34 2つの要素があるソース・ツリーとターゲット・ツリー

「図40-34 2つの要素があるソース・ツリーとターゲット・ツリー」の説明

ノードがマップされていない場合、自動マッピング・アルゴリズムで名前test1とtest2が照合されることはありません。ただし、test1ノードとtest2ノードの間にマッピングが存在する場合は、追加のマッピングに対して、名前test1とtest2がシノニムとして事前定義されます。

図40-34の例で、exampleElementをソースからターゲットにドラッグすると、自動マッピング・アルゴリズムによって、ソースのtest1ノードがターゲットのtest2ノードにマップされます。これは、この2つの名前が、マップで以前にリンクされたためです。この結果、マップは図40-35のようになります。

図40-35 exampleElementのドラッグ結果

「図40-35 exampleElementのドラッグ結果」の説明

40.3.9 マップされていないターゲット・ノードの表示方法

ソース・ノードに現在マップされていないターゲット・ノードのリストを表示できます。

マップされていないターゲット・ノードを表示する手順は、次のとおりです。

1. XSLTマッパーの中央のパネルで右クリックして、「完了ステータス」を選択します。
このダイアログの下部には、マップされていないターゲット・ノードの数に関する統計が示されます。このダイアログを使用すると、「XSLマップのテスト」ダイアログでトランスフォーメーション・マッピングのロジックをテストする前に、マップされていないノードを識別し、修正できます。

2. リストからターゲット・ノードを選択します。そのノードがハイライト表示されます。チェック・マークは、ターゲット・ノードがマップされる必要があることを示しています。マップされる必要がない場合、そのチェック・ボックスは空です。

注意:

「完了ステータス」ダイアログでは、ノードに対するXSD定義に基づいてノードが必須としてマークされます。ノードが必須としてマークされていても、その親ノードがオプションである場合やXSLマッピングの一部でない場合は、特定のマッピングに対して実際には必須でない可能性があります。

図40-36に、「完了ステータス」ダイアログの例を示します。

図40-36 「完了ステータス」

「図40-36 「完了ステータス」」の説明

40.3.10 ディクショナリの生成方法

ディクショナリは、自動マッピングで使用されるXMLファイルです。フィールド名に対するシノニムが含まれています。たとえば、要素QtyOrderedを要素Quantityにマップする必要があるとします。このとき、要素名QtyOrderedとQuantityは互いにシノニムです。このマッピングがマップ間で一般的に使用される場合は、これらのシノニムをディクショナリ・ファイルに保存することをお薦めします。保存したシノニムは、自動マッピングを使用して別のマップに再度適用できます。

ディクショナリは、既存のどのXSLマップからでも作成でき、XSLTマッパーでは既存のマップに対して自動的に生成されないすべてのマッピングを格納できます。

ディクショナリを生成して使用する手順は、次のとおりです。

1. 他のマップで再利用する特定のマッピングが含まれているXSLマップを作成します。

2. 「ツール」→「プリファレンス」→「XSLマップ」→「自動マップ」の順に選択し、現在の自動マッピングの設定をメモしておきます。

注意:

ディクショナリ・エントリは現在の自動マッピングの設定に依存しているため、将来使用するためにこれらの設定をメモしておく必要があります。ディクショナリ・マッピングを後で再度適用するには、自動マッピング・プリファレンスをディクショナリの作成時に有効だった内容に設定する方法が最善です。したがって、ディクショナリが作成された時点の自動マッピングの設定をメモしておくことが重要です。

3. XSLTマッパーの中央のパネルを右クリックして「ディクショナリの生成」を選択します。
この結果、ディクショナリ名とそのディクショナリを格納するディレクトリの入力を求めるプロンプトが表示されます。

4. 「ディクショナリを開く」チェック・ボックスを選択して、作成したディクショナリを表示します。ディクショナリ・ファイルが空の場合、このチェック・ボックスは、現在の自動マッピングの設定ではフィールドがマップされていないため、マップされたフィールドがないことを示します。

5. ディクショナリを別のマップで使用するには、「ツール」→「プリファレンス」→「XSLマップ」→「自動マップ」の順に選択して、ディクショナリをロードします。図40-37に詳細を示します。

図40-37 XSLマップ: 「自動マップ」ダイアログ

「図40-37 XSLマップ: 「自動マップ」ダイアログ」の説明

6. 「ディクショナリ」リストの下の「追加」をクリックします。

7. 類似のマップから以前に作成したディクショナリXMLファイルを参照して選択します。

8. 「OK」をクリックします。

9. 自動マッピング・プリファレンスを終了する前に、ディクショナリの作成時に使用した設定と一致するようにマッピングの設定を変更します。

10. 「OK」をクリックします。

11. 新しいマップの中で、保存済のディクショナリ・マッピングに対応するすべての部分について自動マッピングを実行します。

自動マッピングの詳細は、第40.3.7項「ノードを自動的にマップする方法」を参照してください。

40.3.11 関数が使用されている場合のディクショナリの生成に関する注意事項

関数が使用されているマッピングでは、ディクショナリを作成できません。このような状況では、自動的にマップされた要素またはXPath関数のマッピングがある要素について、ディクショナリXMLの指示が欠落します。たとえば、設計時に文字列関数を使用してXSDをマップしたとします。XSLTマッパーの中央パネルを右クリックして「ディクショナリの生成」を選択すると、ディクショナリは作成されますが、マッピング時に文字列関数を使用したすべての場所で、指示が作成されません。

単純なタイプのマッピングついては、ディクショナリを作成できます。

40.3.12 マップ・パラメータおよびマップ変数の作成方法

マップ・パラメータおよびマップ変数を作成できます。マップ・パラメータはソース・ツリーで作成し、マップ変数はターゲット・ツリーで作成します。

次の点に注意してください。

- パラメータはソース・ツリーで作成され、グローバルであるため、マッピングのすべての場所で使用できます。

- 変数はターゲット・ツリーで作成され、グローバルまたはローカルのいずれかです。ターゲット・ツリーのどの場所で定義されたかによって、グローバルであるか、ローカルであるかが決まります。

- グローバル変数は<target>ノードの直下、および実際のターゲット・スキーマ(例: POAcknowledge)のすぐ上で定義されます。グローバル変数を作成するには、<target>ノードを右クリックします。

- ローカル変数は、実際のターゲット・スキーマの下にある特定のノード(例: スキーマPOAcknowledge上のサブノードname)で定義されます。ローカル変数は、それぞれが異なるスコープ内にあれば、同じ名前を設定できます。ローカル変数はそのスコープ内でのみ使用できるのに対して、グローバル変数はマッピング内のすべての場所で使用できます。

40.3.12.1 マップ・パラメータの作成

マップ・パラメータを作成する手順は、次のとおりです。

1. ソース・ツリーのルートを右クリックし、「パラメータの追加」を選択します。
図40-38に示す「パラメータの追加」ダイアログが表示されます。

2. パラメータの詳細を指定します。この例では、discountという名前のパラメータが、数値のデフォルト値0.0で指定されます。

図40-38 「パラメータの追加」ダイアログ

「図40-38 「パラメータの追加」ダイアログ」の説明

3. 「OK」をクリックします。

40.3.12.2 マップ変数の作成

マップ変数を作成する手順は、次のとおりです。

1. ターゲット・ツリーで、ターゲット・ツリーのルートまたはいずれかのノードを右クリックして「変数の追加」を選択します。
図40-39に示す「変数の追加」ダイアログが表示されます。

2. 詳細を指定します。
変数はターゲット・ツリーに表示されるため、変数を挿入した後でターゲット・ツリーの他のXSLTコンストラクトと同じようにXPath式を設定できます。このため、このダイアログで必要な情報は変数の名前のみです。変数のコンテンツを設定するには、このダイアログを使用して入力する必要があります。コンテンツは、変数上のXSLT select属性とは別に処理されます。

図40-39 「変数の追加」ダイアログ

「図40-39 「変数の追加」ダイアログ」の説明

3. 「OK」をクリックします。
変数は、ターゲット・ツリーの選択した位置に追加されます。最初は、その変数の横に警告アイコンが表示されます。これは、選択XPath文が定義されていないことを示しています。他のターゲット要素やXSLTコンストラクトで行ったのと同じように、ソース・ノードのリンク、関数の作成、または明示的なXPath式の定義を通じてXPathを定義します。

40.3.13 ソース・ノードおよびターゲット・ノードの検索方法

ソース・ノードおよびターゲット・ノードを検索できます。たとえば、invoiceというソース・ノードでpriceというサブノードの出現箇所をすべて検索できます。

ソース・ノードとターゲット・ノードを検索する手順は、次のとおりです。

1. ソース・ノードまたはターゲット・ノードを右クリックして、コンテキスト・メニューから「検索」を選択します。
図40-40に示す「ノード検索」ダイアログが表示されます。

2. 検索キーワードを入力します。

3. 必要に応じて追加の詳細を指定します。例:

- 注釈テキストも検索対象とする場合は、「注釈の検索」を選択します。

- 検索の範囲を指定します。ソース・ツリーまたはターゲット・ツリー全体の検索、選択した位置からの検索、または選択したサブツリー内の検索を指定できます。

図40-40 「ノード検索」ダイアログ

「図40-40 「ノード検索」ダイアログ」の説明

検出された最初の一致がハイライト表示され、「検索」ダイアログが閉じます。一致が検出されない場合は、画面にメッセージが表示されます。

4. 指定した方向の次の一致を検索するには、 [F3] キーを押します。逆方向に検索するには、 [Shift] キーを押しながら [F3] キーを押します。

注意:

関数、または「テキストの設定」オプションで設定したテキスト値は検索できません。

40.3.14 マップされないターゲット要素生成の制御方法

ターゲットXSL内への空要素の生成を制御する場合は、次の5つのオプションがあります。

- マップされないノードを生成しません(デフォルトの選択)。

- すべてのマップされていないターゲット・ノードに空ノードを生成します。

- すべてのマップされていない必須ターゲット・ノードに空ノードを生成します。

- すべてのマップされていないNull値可能なターゲット・ノードに空ノードを生成します。

- すべてのマップされていない必須またはNull値可能なターゲット・ノードに空ノードを生成します。

これらのオプションは、次のように設定します。

- グローバル・レベルの場合
「ツール」→「プリファレンス」→「XSLマップ」の順に選択します。グローバル設定はマップが作成された場合のみ適用されます。

- マップ・レベルの場合
マップのコンテキスト・メニューから「XSL生成オプション」を選択します。次に、マップ・レベルでオプションを設定することで、各マップを別々に設定できます。

選択したマップされないノードに対して空の要素が生成されます。マップされないノードがnillableの場合は、xsi:nil="true"で生成されます。

40.3.15 XSLT文書の要素を無視する方法

ソース・スキーマまたはターゲット・スキーマで見つからない要素が、XSLTマッパーによってXSLT文書内で検出された場合、それらは処理されず、次のエラーが表示されます。

Invalid Source Node Path error

XSLマップの生成は失敗します。XSLTの解析中に、これら特定の要素を無視し、保存しておくようにXSLTマッパーに指示するファイルを作成およびインポートできます。これを行うには、Oracle JDeveloperの「ツール」メイン・メニューで「プリファレンス」→「XSLマップ」の順に選択します。

たとえば、事前処理によってmyElementおよびmyOtherElementWithNSという要素が作成される場合があり、これらの要素は、XSLT文書のグラフィカル表示の作成時に、XSLTマッパーによって無視されるようにするとします。無視するこれらの要素を使用し、例40-6に示す構文を記述したファイルを作成してインポートします。

例40-6 無視する要素を使用したファイル

<elements-to-ignore>
<element name="myElement"/>
<element name="myOtherElementWithNS" namespace="NS"/>
</elements-to-ignore>

このファイルをインポートした後は、Oracle JDeveloperを再起動する必要があります。

40.3.16 カスタマイズ・ファイルをインポートしてXSLTマッパーの表示プリファレンスを指定する方法

XSLTマッパーの表示プリファレンスを指定するカスタマイズ・ファイルをインポートできます。現在使用可能なオプションは、固定属性値を、XSLTマッパーのソース・ツリーおよびターゲット・ツリーの要素名の一部として表示することのみです。

例40-7に示すカスタマイズ・ファイルでは、LongName、LongName2またはNameという名前を持つ、XSLTマッパー・ツリーの要素で最初に見つかった固定属性が、要素ツリー名の一部として表示されます。固定属性値は、ツリー内の実際の要素名の右側のカッコ内に表示されます。

例40-7 カスタマイズ・ファイル

<?xml version="1.0" encoding="UTF-8" ?>
<customizeXSLTeditor>
<customization area="HL7">
<showFixedValueInElementName>
<path>@LongName</path>
<path>@LongName2</path>
<path>@Name</path>
</showFixedValueInElementName>
</customization>
</customizeXSLTeditor>

このファイルは、oracle/tip/tools/ide/common/resource/XSLTEditorOptions.xsdにあるbpm-ide-common.jarファイルに配置されているスキーマに従っている必要があります。

カスタマイズ・ファイルをインポートしてXSLTマッパーの表示プリファレンスを指定する手順は、次のとおりです。

1. Oracle JDeveloperの「ツール」メイン・メニューから、「プリファレンス」→「XSLマップ」を選択します。

2. カスタム表示オプション構成ファイルフィールドの右側にある「参照」をクリックします。

3. インポートするファイルを選択します。

40.3.17 XSLTマッパーでスキーマを置換する方法

XSLTマッパーに現在表示されているマップ・ソース・スキーマとターゲット・スキーマは置換できます。

XSLTマッパーでスキーマを置換する手順は、次のとおりです。

1. ソース・パネルまたはターゲット・パネルのいずれかで右クリックし、「スキーマの置換え」を選択します。
図40-41に示すように、「タイプ・チューザ」ダイアログが開き、使用する新しいソース・スキーマまたはターゲット・スキーマを選択できます。

図40-41 スキーマの置換

「図40-41 スキーマの置換」の説明

2. 置換スキーマを選択して「OK」をクリックします。
現在のマップの式を消去するかどうかを選択するプロンプトが表示されます。

3. 「はい」または「いいえ」を選択します。式が消去されない場合は、設計ビューを再度表示する前にソース・ビューのマップを修正する必要がある場合があります。

40.3.18 ソース・ツリーとターゲット・ツリーの要素とタイプを置換する方法

ソース・ツリーとターゲット・ツリーの要素とタイプは置換できます。

要素置換は、次の場合に使用します。

- 要素が、基礎となるスキーマ内の置換グループの先頭として定義されている場合。要素は抽象でも抽象でなくてもかまいません。置換グループの任意の要素を元の要素と置換できます。

- 要素がany要素として定義されている場合。スキーマに定義されているすべてのグローバル要素を置換できます。

タイプ置換は、次の場合に使用します。

- 基礎となるスキーマでグローバル・タイプを使用でき、そのタイプがソース・ツリーまたはターゲット・ツリーの要素のタイプから導出されている場合。この場合は、グローバル・タイプを要素の元のタイプと置換できます。抽象タイプから導出された任意のタイプをその抽象タイプと置換できます。

- ソース・ツリーまたはターゲット・ツリーの要素がanyTypeタイプとして定義されている場合。この場合は、スキーマに定義されている任意のグローバル・タイプを置換できます。

タイプ置換は、XMLのxsi:type属性の使用によってサポートされます。

ソース・ツリーとターゲット・ツリーの要素またはタイプを置換する手順は、次のとおりです。

1. ソース・ツリーまたはターゲット・ツリーで、置換を適用する要素を右クリックします。

2. コンテキスト・メニューから「要素またはタイプの置換」を選択します。このオプションが無効な場合、基礎となるスキーマの要素またはそのタイプに対して可能な置換はありません。
図40-42に示す「要素またはタイプの置換」ダイアログが表示されます。

図40-42 「要素またはタイプの置換」ダイアログ

「図40-42 「要素またはタイプの置換」ダイアログ」の説明

3. 要素の置換またはタイプの置換のいずれかを選択します(基礎となるスキーマによっては1つしか使用できない場合があります)。
置換可能なグローバル・タイプまたは要素のリストがダイアログに表示されます。

4. 置換するタイプまたは要素を選択します。

5. 「OK」をクリックします。
要素またはタイプが、最初に選択した要素と置換されます。この選択によって表示される結果は、この置換がタイプ置換と要素置換のいずれであるか、および対象がソース・ツリーまたはターゲット・ツリーのいずれであるかによって異なります。

- 要素がターゲット・ツリーにあり、タイプ置換が選択された場合
図40-43に示すように、元の要素の下にxsi:type属性が追加されます。これは設計ビューでは使用できず、選択されたタイプ値に設定されます。ノードが置換されたことを示す「S」アイコンが表示されます。置換タイプ内の任意の構造要素にマップできます。

図40-43 要素がターゲット・ツリーにあり、タイプ置換が選択された場合

「図40-43 要素がターゲット・ツリーにあり、タイプ置換が選択された場合」の説明

- 要素がソース・ツリーにあり、タイプ置換が選択された場合
図40-44に示すように、元の要素の下にxsi:type属性が追加されます。ノードが置換されたことを示す「S」アイコンが表示されます。置換タイプ内の任意の構造要素からマップできます。

図40-44 要素がソース・ツリーにあり、タイプ置換が選択された場合

「図40-44 要素がソース・ツリーにあり、タイプ置換が選択された場合」の説明

- 要素がターゲット・ツリーにあり、要素置換が選択された場合
図40-45に示すように、ツリー内の元の要素が置換要素で置換されます。コメントは元の要素名が追加されたことを示し、ノードが置換されたことを示す「S」アイコンが表示されます。置換要素内の任意の構造要素にマップできます。

図40-45 要素がターゲット・ツリーにあり、要素置換が選択された場合

「図40-45 要素がターゲット・ツリーにあり、要素置換が選択された場合」の説明

- 要素がソース・ツリーにあり、要素置換が選択された場合
図40-46に示すように、ソース・ツリーの<要素置換>という新規ノードの下に、元の要素と可能な置換の両方が表示されます。ノードが追加されたことを示す「S」アイコンが表示されます。この機能を使用すると、ソース・オブジェクトに元のノードまたは置換ノードのいずれかを格納できるマップを作成できます。置換要素内の任意の構造要素にマップできます。

図40-46 要素がソース・ツリーにあり、要素置換が選択された場合

「図40-46 要素がソース・ツリーにあり、要素置換が選択された場合」の説明

注意:

要素置換と異なり、ソース・ツリーに表示できるタイプ置換は一度に1つのみです。このために、元のタイプや置換タイプを必要に応じてソースに設定できるマップが作成できなくなるわけではありません。いつでも別のタイプに切り替えることができます。ある時点ではソース・ツリーに表示されない可能性があるノードにマップするXPath式も保持されます。

6. 置換ノードを削除するには、「S」アイコンがあるノードを右クリックし、コンテキスト・メニューから「置換の削除」を選択します。

7. 置換が可能なすべてのノードを表示するには、ソース・ツリーまたはターゲット・ツリーを右クリックして、「置換ノード・アイコンの表示」を選択します。
図40-47に示すように、置換が可能なすべてのノードには、「*」アイコンが表示されます。

図40-47 可能なすべての置換

「図40-47 可能なすべての置換」の説明

8. アイコンを非表示にするには、右クリックして「置換ノード・アイコンの非表示」を選択します。

40.3.19 XSLTマッパーでのメモリー不足問題の解決方法

メモリーが不十分な状態で実行している場合、次のオプションを検討してください。

- ide.confファイルのXmx値を増やします。(64ビット・ホストを使用している場合、この値が大きすぎることがあります。)

- ファイルの小さいセクションを一度に1つずつマップします。

- 「プリファレンス」ダイアログ - 「XSLマップ」ページで拡張レベルの限度を減らします。このページは、Oracle BPEL Designerの「ツール」 メイン・メニューで、「プリファレンス」→「XSLマップ」を選択するとアクセスできます。

40.4 マップのテスト

XSLTマッパーには、スタイルシートまたはマップをテストするためのツールが用意されています。テスト・ツールを起動するには、図40-48に示すように、「テスト」メニュー項目を選択します。

図40-48 テスト・ダイアログの起動

「図40-48 テスト・ダイアログの起動」の説明

40.4.1 トランスフォーメーション・マッピングのロジックをテストする方法

図40-49に示す「XSLマップのテスト」ダイアログでは、XSLTマッパーで設計したトランスフォーメーション・マッピングのロジックをテストできます。指定したテスト設定は保存されるため、次回のテスト時に再度入力する必要はありません。Oracle JDeveloperを閉じて再度開いた場合は、テスト設定をもう一度入力する必要があります。

図40-49 「XSLマップのテスト」ダイアログ

「図40-49 「XSLマップのテスト」ダイアログ」の説明

トランスフォーメーション・マッピングのロジックをテストする手順は、次のとおりです。

1. 「ソースXMLファイル」フィールドで、テスト用にサンプルのソースXMLファイルを生成するか、「参照」をクリックして別のソースXMLファイルを指定します。
「OK」をクリックすると、ソースXMLファイルが検証されます。検証に合格するとトランスフォーメーションが実行され、ターゲットXMLファイルが作成されます。

検証に失敗した場合、トランスフォーメーションは実行されず、画面にメッセージが表示されます。

2. マップ・ソースXSDスキーマに基づいてサンプルのXMLファイルを作成するには、「ソースXMLファイルの生成」チェック・ボックスを選択します。

3. テスト用のソースXMLファイルを表示するには、「ソースXMLファイルの表示」チェック・ボックスを選択します。ソースXMLファイルがOracle JDeveloperのXMLエディタに表示されます。
マップに定義済のパラメータがある場合は、「スキーマのあるパラメータ」または「スキーマのないパラメータ」表が表示されます。

1. 「スキーマのあるパラメータ」表が表示された場合は、「参照」ボタンを使用してそのパラメータの入力XMLファイルを指定できます。ファイルを生成する場合は「ファイルの生成」チェック・ボックスを選択します。

2. 「スキーマのないパラメータ」表が表示された場合は、「値の指定」チェック・ボックスを選択し、「タイプ」列と「値」列を適切に編集して値を指定します。

4. 「ターゲットXMLファイル」フィールドにファイル名を入力するか、トランスフォーメーションからの結果XML文書が格納されるファイルの名前を参照します。

5. テスト用のターゲットXMLファイルを表示するには、「ターゲットXMLファイルの表示」チェック・ボックスを選択します。ターゲットXMLファイルがOracle JDeveloperのXMLエディタに表示されます。

6. ソースとターゲット両方のXMLを表示する場合は、XMLエディタのレイアウトをカスタマイズできます。右上隅にある「自動レイアウトの有効化」を選択してパターンの1つをクリックします。

7. 「OK」をクリックします。
図40-50に示すように、テスト結果が表示されます。

この例では、ソースXMLとターゲットXMLが並んで表示され、その下にXSLマップが表示されています(デフォルト設定)。「スキーマのあるパラメータ」表に対応する追加のソースXMLファイルが、メイン・ソース・ファイルと同じ場所にタブとして表示されます。エディタを右クリックして「XMLの検証」を選択すると、ソースまたはターゲットのXMLを、マップのソースまたはターゲットのXSDスキーマと照合して検証できます。

図40-50 テスト結果

「図40-50 テスト結果」の説明

注意:

XSLマップ・ファイルにドメイン値マップ(DVM)および相互参照(XREF) XPath関数が含まれている場合は、テストできません。これらの関数は、設計時には実行できず、実行時にのみ実行できます。

40.4.2 レポートの生成方法

次の情報を備えたHTMLレポートを生成できます。

- XSLマップのファイル名、ソース・スキーマとターゲット・スキーマのファイル名、そのルート要素名、およびそのルート要素のネームスペース

- ターゲット文書のマッピング

- マップされていないターゲット・フィールド(必須フィールドを含む)

- サンプル・トランスフォーメーション・マップの実行

次の手順に従って、レポートを生成します。

1. 中央のパネルで右クリックして、「レポートの生成」を選択します。
図40-51に示すように、「レポートの生成」ダイアログが表示されます。マップのパラメータが定義されている場合は、適切なパラメータ表が表示されます。

図40-51 「レポートの生成」ダイアログ

「図40-51 「レポートの生成」ダイアログ」の説明

フィールドの詳細は、「レポートの生成」ダイアログのオンライン・ヘルプを参照してください。

40.4.2.1 レポート生成時のメモリー・エラーの修正

レポートを生成しようとしたときにメモリー不足のエラーが発生した場合は、次のように、JVMのヒープ・サイズを増やします。

JVMのヒープ・サイズを増やす手順は、次のとおりです。

1. JDev_Oracle_Home\jdev\bin\jdev.confファイルを開きます。

2. 次のセクションに移動します。

# Set the maximum heap to 512M
#
AddVMOption     -Xmx512M

3. 次のように、ヒープのサイズを増やします(例: 1024に変更)。

AddVMOption     -Xmx1024M

また、レポートの生成前に「レポートの生成」ダイアログの「レポートを開く」オプションの選択を解除することもできます。

40.4.3 サンプルXML生成のカスタマイズ方法

サンプルXMLの生成は、次のパラメータを指定してカスタマイズできます。Oracle JDeveloperの「ツール」メイン・メニューで、「プリファレンス」→「XSLマップ」の順に選択し、「プリファレンス」ダイアログを表示します。

- 繰返し要素の数
この数は、要素の属性maxOccursが1より大きい値に設定されている場合に、要素の繰返し作成数を指定します。指定した値が特定の要素に対するmaxOccurs属性の値より大きい場合、その特定の要素に対する繰返し作成数は、指定した数ではなく、このmaxOccursの値となります。

- オプション要素の生成
選択されている場合は、オプション要素(その属性minOccursが値0に設定されている)が必須要素(その属性minOccursが0より大きい値に設定されている)と同様に生成されます。

- 最大の深さ
サンプルXMLの生成において、オプション要素による再帰の発生を回避するために、オプション要素の生成限度であるXML文書階層ツリーの最大の深さを指定します。

40.5 XSLTマッパーの機能のデモンストレーション

このサンプルでは、XSLTマッパーの次の機能について具体的な例を示します。

- 要素置換とタイプ置換

- 複数ソースの使用

- 新規XSLコンストラクトxsl:sortおよびxsl:copy-of

- 新規変数の使用

このサンプルに加えて、ダウンロード可能な他のトランスフォーメーション・サンプルがあります。表40-2で、これらのサンプルについて説明します。これらのサンプルにアクセスするには、Oracle SOA Suiteサンプルを参照してください。

表40-2 トランスフォーメーション・サンプル

サンプル

説明

mapper-101-basic-mapping

XSLTマップの作成および基本的な編集方法を説明します。

mapper-102-import-and-test

次のXSLマッパー機能について説明します。

- 外部XSLのインポート

- テスト実行とXMLエディタ検証の概要

- レポートの実行

mapper-104-auto-mapping

XSLTマッパーの自動マッピング機能について説明します。

mapper-105-multiple-sources

複数ソースの使用について説明します。マップ・サンプルの作成プロセスで、次のトピックについても説明します。

- クローニングしたfor-eachの挿入

- XPath式への述語の追加

- 変数の使用

mapper-107-extension-functions

ユーザー定義拡張関数の使用について説明します。

mapper-108-substitution-mapping

次の場合の要素置換の使用について説明します。

- 要素が、基礎となるスキーマ内の置換グループの先頭として定義されている場合。要素は抽象でも抽象でなくてもかまいません。置換グループの任意の要素を元の要素と置換できます。

- 要素がany要素として定義されている場合。スキーマに定義されているすべてのグローバル要素をany要素と置換できます。これは、any要素の定義に設定されているネームスペース制約の影響を受けます。

mapper-109-whats-new

XSLTマッパーの11gの新機能について説明します。これらの機能は、第40.5.1項「アプリケーションのオープン方法」から第40.5.7項「マップのテスト方法」で説明します。

40.5.1 アプリケーションのオープン方法

最初にサンプル・アプリケーションを作成します。作成したアプリケーションは、ステップ1で説明するWhatsNewApplicationディレクトリで提供されるアプリケーションと同じです。

アプリケーションを開く手順は、次のとおりです。

1. Oracle SOA Suiteサンプル・サイトからmapper-109-whats-newサンプルをダウンロードします。

サンプルには、次のファイルとディレクトリが含まれています。

- artifacts/schemas/po.xsdおよびAttachment.xsd: ソース・スキーマ

- artifacts/schemas/invoice.xsdおよびReasonCodes.xsd: ターゲット・スキーマ

- artifacts/application: このサンプルの開始アプリケーション

- WhatsNewApplicationディレクトリ: 完了後のサンプル・マップ

2. artifacts/applicationフォルダを別の作業領域にコピーします。

3. Oracle JDeveloperを起動します。

4. 別の領域にコピーしたartifacts/applicationフォルダ内のWhatsNewApplication.jwsをクリックします。

5. ファイルを移行するかどうかを尋ねるプロンプトが表示された場合は、「はい」をクリックします。
「アプリケーション・ナビゲータ」に、WhatsNewApplicationが表示されます。

40.5.2 BPELプロセスでの新規XSLTマップの作成方法

ここでは、2つのソースがある新規XSLTマップを作成します。このマップは、WhatsNewApplicationアプリケーションに含まれているBPELプロセスから起動されます。

BPELプロセスで新規XSLTマップを作成する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、ProcessPO2Invoice.bpel BPELプロセスをダブルクリックします。

2. 「コンポーネント・パレット」の「Oracle Extensions」セクションから、transformアクティビティをSetDiscontinuedProducts assignアクティビティの下にドラッグします。

3. transformアクティビティをダブルクリックします。

4. 「一般」タブの「名前」フィールドにPo2Invoiceと入力します。

5. 「トランスフォーメーション」タブで、次の手順を実行します。

1. 「追加」アイコンをクリックします。

2. 「ソース変数」リストから、「inputVariable」を選択します。

3. 「ソース・パート」リストから、「payload」を選択します。
この変数には、BPELプロセスに対する入力である注文書が含まれています。

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

5. 「追加」アイコンを2回クリックし、「ソース変数」リストから「DiscontinuedList」を選択します。transformationアクティビティの前のSetDiscontinuedProducts assignアクティビティに変数が作成されます。

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

7. 「ターゲット変数」リストから、「outputVariable」を選択します。これは、BPELプロセスから戻された請求書です。

8. 「マッパー・ファイル」フィールドで、名前をxsl/Po2Invoiceに変更します。

9. 「マッパー名」フィールドの右側にある「マッピングの作成」アイコンをクリックして、マッパー・ファイルを作成し、開きます。
XSLTマッパーが開きます。

10. 「ファイル」メニューから「すべて保存」を選択します。作成したマップは図40-52のようになります。2番目のソースがDiscontinuedListという名前でパラメータとしてロードされています。

図40-52 XSLTマッパー・ファイル

「図40-52 XSLTマッパー・ファイル」の説明

40.5.3 タイプ置換を使用した注文書品目のマップ方法

ここでは、タイプ置換と要素置換を使用して、注文書の品目を請求書の品目にマップします。

タイプ置換を使用して注文書品目をマップする手順は、次のとおりです。

1. ターゲット・ツリーで、ツリーを開いてInvoice/Items/Itemを表示します。「Item」要素の横にエラー・アイコンが表示されます。

2. 要素の上にマウスを移動して、この要素が抽象タイプとして定義されていることを示すツールのヒントを表示します。
Item要素にマップするには、最初に、最終的なXML出力で要素に使用されるタイプを示す必要があります。

3. 次の手順を実行して、要素で使用するタイプを示します。

1. 「Item」要素を右クリックして、「要素またはタイプの置換」を選択します。
「要素またはタイプの置換」ダイアログが表示されます。

2. リストから「ShippedItemType」を選択して「OK」をクリックします。
Item要素の構造がすべて挿入されます。xsi:type属性によって、ターゲットXMLのItem要素のタイプが設定されます。

注意:

invoice.xsdを表示した場合は、ShippedItemTypeが、Item要素のタイプである抽象タイプItemTypeから導出されます。

4. PurchaseOrder/ItemsをInvoice/Itemsにドラッグして自動マッパーを起動し、これらのノードをマップします。自動マッピング機能を確認するには、サンプルのmapper-104-auto-mappingを参照してください。
完了すると、マップ内のItem要素は、図40-53のようになります。

図40-53 XSLTマッパー内のItem要素

「図40-53 XSLTマッパー内のItem要素」の説明

5. 「ファイル」メニューから「すべて保存」を選択して、マップ・ファイルを保存します。

40.5.4 追加のソース要素の参照方法

ここでは、追加のソース変数であるDiscontinuedListの情報を使用して、製造が中止された品目を削除します。品目の製品名がDiscontinuedListに含まれている場合、その品目は出荷できず、最終出荷品目リストに掲載することはできません。

追加のソース要素を参照する手順は、次のとおりです。

1. ターゲット・ツリーの「Item」ノードの上に「if」文を追加します。追加するには、「Item」ノードを右クリックして、「XSLノードの追加」→「if」の順に選択します。
if文では、現在の品目名を使用して、製造中止の製品が「DiscontinuedList」に存在しているかどうかをテストする必要があります。品目が出荷品目に追加されるのは、その品目が「DiscontinuedList」に含まれていない場合のみです。if文に対するテスト式を定義する方法は多数あります。その中の1つの方法を次の手順で説明します。

2. 次のように選択してif文のテスト式を定義します(変数の設定方法が、リリース10gのバージョンのOracle JDeveloperから変更されています)。

1. 「Invoice」ノードを右クリックして「変数の追加」を選択し、ターゲット・ツリーにグローバル変数を追加します。
「変数の追加」ダイアログが表示されます。

2. 「ローカル名」フィールドに、DelimitedListと入力します。以降の手順で、この変数には、製造中止製品名の区切りリストを含む文字列が設定されます。

3. 「OK」をクリックします。
変数が追加され、横に警告アイコンが表示されます。

4. 変数の値を設定するには、「コンポーネント・パレット」の「String」セクションから「create-delimited-string」関数を中央のパネルにドラッグします。

5. DiscontinuedList/ProductNameを「create-delimited-string」関数の入力側にドラッグします。

6. 「create-delimited-string」関数の出力側を「DelimitedList」という新規変数にドラッグします。

7. 「create-delimited-string」関数をダブルクリックして、「関数の編集」ダイアログを開きます。

8. 「デリミタ」フィールドに、パイプ(|)文字を追加します。

9. 「OK」をクリックします。
入力ソースは、XPath式では$DiscontinuedListで参照されます。このソースは、XPath式で入力パラメータとして参照されます。

3. if文のXPath式を設定するには、「コンポーネント・パレット」の「String」セクションから「contains」関数を中央のパネルにドラッグします。

4. 「コンポーネント・パレット」の「Logical Functions」セクションの「not」関数を、ステップ3で追加した「contains」関数を囲む影付きの領域にドラッグします。

5. 「contains」関数の出力側の線を「not」関数の入力側にドラッグします。

6. 「not」関数の出力側の線を「if」文にドラッグします。

7. 「contains」関数をダブルクリックして、「関数の編集」ダイアログを開きます。

8. 「inputString」および「searchString」に値を入力し、「OK」をクリックします。

9. 「ファイル」メニューから「すべて保存」を選択して、マップ・ファイルを保存します。
マップ・ファイルは図40-54のようになります。

図40-54 マッパー・ファイル

「図40-54 マッパー・ファイル」の説明

40.5.5 要素置換を使用した出荷先住所のマップ方法

ここでは、ソースの置換された出荷連絡先要素をターゲットのShippedTo要素にマップします。

要素置換を使用して出荷先住所をマップする手順は、次のとおりです。

1. ソースのPurchaseOrder/CustomerContacts要素を開いて「Contact」要素を表示します。
この要素の横にエラー・アイコンが表示されます。

2. 要素の上にマウスを置き、この要素が抽象であることを示すツールのヒントを表示します。
この状態で、要素置換を実行して要素をマップする必要があります。

3. ソース・ツリーの「Contact」要素を右クリックして、「要素またはタイプの置換」を選択します。
「要素またはタイプの置換」ダイアログが表示され、抽象要素Contactの置換グループの要素リストが示されます。

4. 「ShipToContact」を選択し、「OK」をクリックします。
これは、入力XMLに使用する要素です。ソース・ツリーに「ShipToContact」要素の構造が表示されます。

5. ソース・ツリーのShipToContact/InternationalAddress要素を開いて、住所のフィールドを表示します。

6. ターゲット・ツリーの「ShippedTo」要素を開いて、ターゲットの住所のフィールドを表示します。
ここでは、自動マッパーを使用できることを示すフィールド名の類似度に注意してください。

7. ソース・ツリーの「InternationalAddress」要素をターゲット・ツリーの「ShippedTo」要素にドラッグし、自動マッパーを使用して、これらの要素の下の住所フィールドをマップします。

8. マップのこのセクションが図40-55に示すとおりになるように、自動マッパーで照合されない残りの要素をマップします。

図40-55 XSLTマッパー

「図40-55 XSLTマッパー」の説明

9. 「ファイル」メニューから「すべて保存」を選択して、マップ・ファイルを保存します。

40.5.6 残りのフィールドのマップ方法

残りのフィールドをマップする手順は、次のとおりです。

1. PurchaseOrder/IDをInvoice/IDにマップします。

2. Invoice/Dataを開いて「any」要素を表示します。

3. copy-of xsl文を使用して、ソースからターゲットの「any」要素に添付ファイル・データをコピーします。

1. Invoice/Data/any要素を右クリックして、「XSLノードの追加」→「copy-of」の順に選択します。
copy-of文が追加され、元の「any」要素はグレー表示になります。これは、この要素がcopy-of文で選択されたノードで置換されることを示します。

2. copy-ofの選択内容を設定するには、ソース・ツリーのPurchaseOrder/Attachments要素を「copy-of」文にドラッグします。

4. 次の手順を実行して、PurchaseOrder/CommentフィールドをInvoice/Commentフィールドにマップします。Invoice/CommentフィールドはanyType要素です。

1. Invoice/Commentフィールドを右クリックして、「要素またはタイプの置換」を選択します。

2. 提供されているタイプ・リストから「xsd:string」を選択します。

3. PurchaseOrder/CommentフィールドをInvoice/Commentフィールドにドラッグしてフィールドをマップします。

5. XSL sort文をfor-each文に追加します。

1. ターゲット・ツリーの「for-each」文を右クリックして、「XSLノードの追加」→「sort」の順に選択します。
「ソート編集ダイアログ」が表示されます。

2. 「データ型に従ってソート」で「数値」を選択します。

3. ソート順で「降順」を選択します。

4. 「OK」をクリックします。sortノードがターゲット・ツリーに追加されます。

5. ソース・ツリーのPurchaseOrder/Items/Item/Priceをターゲット・ツリーの「sort」ノードにドラッグします。
この操作で、ソート対象のフィールドが設定されます。

6. 「ファイル」メニューから「すべて保存」を選択して、マップ・ファイルを保存します。マップは図40-56のようになります。

図40-56 XSLTマッパー

「図40-56 XSLTマッパー」の説明

40.5.7 マップのテスト方法

マップをテストする手順は、次のとおりです。

XSLマップは、XSLTマッパーを使用して、Oracle JDeveloperのBPELプロセスとは別にテストできます。XMLファイルはマップに対する各ソース入力の入力にできます。

1. 中央のパネルを右クリックし、「テスト」を選択します。
警告ダイアログが表示された後、「XSLマップのテスト」ダイアログが表示されます。警告では、独自のサンプル入力XMLを作成してマップをテストできることが通知されます。サンプルXMLジェネレータでは、ソース・ツリーの置換に対するサンプル・データは生成できません。

サンプル入力XMLファイルartifacts/xml/POInput.xmlが用意されています。

2. 次の手順に従って、テスト用のサンプル入力ファイルを選択します。

1. 「ソースXMLファイルの生成」チェック・ボックスの選択を解除します。

2. 「ソースXMLファイル」フィールドの「参照」ボタンをクリックします。

3. artifacts/xml/POInput.xmlファイルに移動して選択します。

製造中止品目データが含まれた2番目のサンプル・ファイルが作成されています。このファイルはartifacts/xml/DiscontinuedItems.xmlです。

3. 次の手順に従って、このファイルを2番目のソース入力として使用します。

1. ダイアログの「スキーマのあるパラメータ」セクションで、「DiscontinuedList」パラメータ名の左側にある「ファイルの生成」チェック・ボックスの選択を解除します。

2. 「DiscontinuedList」パラメータの「参照」をクリックし、artifacts/xml/DiscontinuedItems.xmlファイルを選択します。

4. XSLマッパーのテスト・ダイアログで「OK」をクリックして、テストを実行します。
マップの実行によってPO2Invoice-Target.xmlファイルが生成されます。PO2Invoice-Target.xmlファイルで、xsi:type属性の使用、copy-of文で作成されたAttachmentsノード、sort文による品目の順序を確認してください。

41 ビジネス・イベントおよびイベント配信ネットワークの使用

この章では、SOAコンポジット・アプリケーションでOracle MediatorまたはBPELプロセスからビジネス・イベントをサブスクライブまたは公開する方法を説明します。ビジネス・イベントは、イベント配信ネットワーク(EDN)に公開され、ビジネス環境で発生した結果として送信されるメッセージ・データから構成されます。ビジネス・イベントが公開されると、他のサービス・コンポーネントはそれをサブスクライブできます。

この章には次の項が含まれます:

- 第41.1項「ビジネス・イベントの概要」

- 第41.2項「Oracle JDeveloperでのビジネス・イベントの作成」

- 第41.3項「Oracle Mediatorサービス・コンポーネントからのビジネス・イベントのサブスクライブまたは公開」

- 第41.4項「BPELプロセス・サービス・コンポーネントからのビジネス・イベントのサブスクライブまたは公開」

- 第41.5項「Oracle ADF Business Componentビジネス・イベントをOracle Mediatorに統合する方法」

Oracle Mediatorでビジネス・イベントを使用する方法を示したサンプルは、Oracle SOA Suiteのサンプルを参照してください。

ビジネス・イベントをサブスクライブするサービス・コンポーネントでのコンポジット・センサーの作成の詳細は、第50章「コンポジット・センサーの定義」を参照してください。

スレッド数の指定、イベント配信の停止、最大配信数の指定などビジネス・イベントのトラブルシューティングの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の付録Oracle SOA SuiteおよびOracle BPM Suiteのトラブルシューティングに関する項を参照してください。

ビジネス・イベント・チューニングの詳細は、『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』を参照してください。

41.1 ビジネス・イベントの概要

目的の状況が発生したときにビジネス・イベントを起動できます。たとえば、ローン・フローのシナリオで、ローン・プロセスを実行しているBPELプロセス・サービス・コンポーネントは、プロセスの完了時にローン完了イベントを起動できます。このアプリケーションのインフラストラクチャ内の他のシステムは、これらのイベントをリスニングし、イベントのインスタンスの受信時に次の処理を実行できます。

- イベント・コンテキストを使用して、ビジネス・インテリジェンスまたはダッシュボード・データを導出します。

- 融資パッケージを顧客に送る必要があることをメール部門に知らせます。

- 別のビジネス・プロセスを起動します。

- Oracle Business Activity Monitoring(BAM)に情報を送信します。

通常、ビジネス・イベントは、ビジネスの状態変化に関する通知を送信するための一方向のfire-and-forget非同期方法です。ビジネス・プロセスは、次の処理を行いません。

- ビジネス・イベントの完了を受信するサービス・コンポーネントに依存しません。

- 他のサービス・コンポーネントがビジネス・イベントを受信しても関係ありません。

- サブスクライバの存在(存在する場合)およびデータがサブスクライバに与える影響を知る必要がありません。

これらは、Web Services Description Language (WSDL)ファイル規定に依存する直接サービス起動(SOAPサービス・クライアントなど)とビジネス・イベントの重要な相違点です。イベントの発生がイベントの受信者に依存する場合、メッセージは通常、ビジネス・イベントではなくサービス起動を通して配信する必要があります。直接サービス起動とは異なり、ビジネス・イベントはサーバーからクライアントを分離します。

ビジネス・イベントは、イベント定義言語(EDL)を使用して定義されます。EDLは、ビジネス・イベント定義の作成に使用するスキーマです。アプリケーションは、ビジネス・イベント定義のインスタンスと協調して動作します。

EDLは、次のもので構成されます。

- グローバル名
通常はJavaパッケージ名(com.acme.ExpenseReport.createdなど)ですが、必須ではありません。

- ペイロード定義
定義には、XMLスキーマ(XSD)が最も一般的に使用されます。ビジネス・イベントのペイロードはXSDを使用して定義されます。スキーマのURIは、ペイロードのルート要素に含まれます。

例41-1に、BugReportイベント定義内に2つのビジネス・イベントbugUpdatedおよびbugCreatedがあるEDLファイルを示します。ネームスペース(BugReport)および関連するスキーマ・ファイル(BugReport.xsd)が参照されます。

例41-1 2つのビジネス・イベントがあるEDLファイル

<?xml version = '1.0' encoding = 'UTF-8'?>
<definitions targetNamespace="/model/events/edl/BugReport"
xmlns:ns0="/model/events/schema/BugReport"
xmlns="http://schemas.oracle.com/events/edl">
<schema-import namespace="/model/events/schema/BugReport"
location="BugReport.xsd"/>

<event-definition name="bugCreated">
<content element="ns0:bugCreatedInfo"/>
</event-definition>

<event-definition name="bugUpdated">
<content element="ns0:bugUpdatedInfo"/>
</event-definition>
</definitions>

これら2つのイベントはOracle Mediatorのサブスクリプションで使用できます。

ビジネス・イベントは、Oracle Metadata Services (MDS)リポジトリにデプロイされます。ビジネス・イベントをそのアーティファクト(XSDなど)とともにMDSリポジトリにデプロイすることを、EDL(またはイベント定義)の公開とも呼びます。このアクションにより、EDLおよびそのアーティファクトがMDSリポジトリ内の共有領域に転送されます。MDSリポジトリ共有領域内のオブジェクトは、Oracle JDeveloperのリソース・パレット内のすべてのアプリケーションで参照できます。公開されたEDLは、他のアプリケーションでサブスクライブできます。EDLの公開を解除することはできません。定義は常に存在します。

サブスクリプションは、特定の修飾名(QName)(x.y.z/newOrdersなど)に対して行います。QNameはタプル(URI、localName)であり、xmlns:prefix=URIなどのネームスペース宣言またはネームスペース・コンテキストとの組合せで、文字列prefix:localNameから導出できます。また、コンテンツ・ベースのフィルタを使用すると、サブスクリプションをさらに絞り込むことができます。

ビジネス・イベントは、EDNに公開されます。EDNは、すべてのSOAインスタンスの範囲内で実行されます。発生したイベントはEDNにより、サブスクライブするサービス・コンポーネントに配信されます。Oracle Mediatorサービス・コンポーネントとBPELプロセス・サービス・コンポーネントはイベントをサブスクライブし、公開できます。

EDNには、次の2つの異なる実装があります。

- EDN-DB: Oracleデータベースをバックエンド・ストアとして使用し、Oracle固有の機能に依存します。

- EDN-JMS: 汎用JMSキューをバックエンド・ストアとして使用します。

Oracleデータベースを使用している場合は、EDN-JMSではなくEDN-DBを使用することをお薦めします。

注意:

EDNでは、永続サブスクリプションはサポートされません(ネイティブの詳細な問合せ(AQ)とOracle WebLogic Server JMSのどちらで返されてもサポートされません)。サブスクライブするサービス・コンポーネントを実行して、イベントを受信する必要があります。

41.1.1 ローカルおよびリモートのイベント境界

1つのSOAコンポジット・アプリケーション・インスタンスは、1つのコンテナ内に配置することも、複数のコンテナにわたってクラスタ化することもできます。別のアプリケーション(Oracle Application Development Framework(ADF)Business Componentアプリケーションなど)を構成し、SOAコンポジット・アプリケーション・インスタンスと同じコンテナ内または異なるコンテナ内で実行できます。

ローカル・イベント接続またはリモート・イベント接続を通して、Java EEアプリケーションからイベントを発生させることができます。

- ローカル・イベント接続
パブリッシャがアプリケーションと同じOracle WebLogic Serverに存在し、パブリッシャがローカル・ビジネス・イベント接続ファクトリを使用する場合、イベントはローカル・イベント接続を通して発生します。このシナリオでは、同期サブスクリプションが同期して実行されます。

- リモート・イベント接続
コール元がアプリケーションと異なるコンテナ(異なるJVM)内に存在する場合、イベントはリモート・イベント接続を通して発生します。リモート・イベント接続では、非同期サブスクリプションのみがサポートされます。

別のアプリケーション(Oracle ADF Business Componentアプリケーションなど)を構成し、SOAコンポジット・アプリケーションと同じコンテナ内で実行すると、このアプリケーションはローカル・イベント接続を使用するように最適化されます。イベントの境界は、アプリケーション・インスタンスです。イベントがアプリケーション・インスタンス内で発生すると、アプリケーション・インスタンスに登録されたサブスクリプションが実行されます。イベントは、1つのアプリケーション・インスタンスから別のインスタンスに伝播されません。伝播は、イベントをリスニングし、イベントをJMSキューに公開するOracle Mediatorを通して、両方のインスタンスで実行されます。

41.1.2 同じプロセス内で公開およびサブスクライブされたイベントが配信されない

イベントが、同じプロセス内で公開およびサブスクライブされた場合、そのイベントは、循環実行を回避するためにサブスクライバに配信されません。これは設計によります。

この機能が必要な場合は、イベントの公開を別のプロセスに委任できます。

41.2 Oracle JDeveloperでのビジネス・イベントの作成

この項では、ビジネス・イベントの作成方法およびサブスクライブ方法の高レベルな概要が提供されます。このシナリオでは、ストアフロント・アプリケーション(StoreFrontServiceサービス)でユーザーから注文を受けたときに、NewOrderSubmittedというビジネス・イベントが作成されます。その後、このビジネス・イベントをサブスクライブするOracle Mediatorサービス・コンポーネントを作成します。

41.2.1 ビジネス・イベントの作成方法

ビジネス・イベントを作成する手順は、次のとおりです。

1. SOAプロジェクトを空のコンポジットとして作成します。

2. 次の2つの方法のいずれかにより、「イベント定義の作成」ウィザードを起動します。

1. SOAコンポジット・エディタで、デザイナの上のアイコンをクリックします。図41-1に例を示します。

図41-1 「イベント定義の作成」

「図41-1 「イベント定義の作成」」の説明

2. 「ファイル」メイン・メニューから、「新規」→「SOA層」→「サービス・コンポーネント」→「イベント定義」の順に選択します。

「イベント定義の作成」ダイアログが表示されます。

3. 表41-1に記載されている詳細を入力します。

表41-1 「イベント定義の作成」ダイアログのフィールドと値

フィールド

値

イベント定義名

名前を入力します。

注意: イベント名としてスラッシュ(/)を入力しないでください。スラッシュを入力すると、名前が拡張子のみのイベント定義ファイル(.edn)が作成されます。

ディレクトリ

ディレクトリ・パスが表示されます。

ネームスペース

デフォルトのネームスペースをそのまま使用するか、イベントを配置するネームスペースに対する値を入力します。

4. 「追加」アイコンをクリックして、イベントを追加します。
「イベントの追加」ダイアログが表示されます。

5. 「検索」アイコンをクリックしてペイロードを選択し、「OK」をクリックします。図41-2に詳細を示します。

図41-2 ペイロードの選択

「図41-2 ペイロードの選択」の説明

6. 図41-3に示すように、「名前」フィールドに名前を入力します。

図41-3 「イベントの追加」ダイアログ

「図41-3 「イベントの追加」ダイアログ」の説明

7. 「OK」をクリックします。
図41-4に示すように、追加したイベントが「イベント」セクションに表示されます。

図41-4 「イベント定義の作成」ダイアログ

「図41-4 「イベント定義の作成」ダイアログ」の説明

8. エディタの上部にある、event_definition_name.edlの横のxアイコンをクリックして、エディタを閉じます。

9. 変更を保存するように求められた場合は、「はい」をクリックします。変更を保存しないとイベントは作成されず、「イベント・チューザ」ウィンドウでは選択できません。
ビジネス・イベントがOracle MDSリポジトリに公開され、SOAコンポジット・エディタに戻ります。「リソース・パレット」に、ビジネス・イベントが表示され参照できます。

41.3 Oracle Mediatorサービス・コンポーネントからのビジネス・イベントのサブスクライブまたは公開

この項では、Oracle Mediatorサービス・コンポーネントからビジネス・イベントをサブスクライブまたは公開する方法について説明します。

41.3.1 ビジネス・イベントをサブスクライブする方法

ビジネス・イベントをサブスクライブする手順は、次のとおりです。

1. 「コンポーネント・パレット」からSOAコンポジット・エディタに、メディエータ・サービス・コンポーネントをドラッグします。このサービス・コンポーネントにより、ビジネス・イベントをサブスクライブできます。

2. 「名前」フィールドに、名前を入力します。

3. 「オプション」リストから、「イベントのサブスクライブ」を選択します。
ダイアログがリフレッシュされ、イベント表が表示されます。

4. 「追加」アイコンをクリックして、イベントを選択します。
「イベント・チューザ」ダイアログが表示されます。

5. 作成したイベントを選択し、「OK」をクリックします。
「メディエータの作成」ダイアログが再び表示されます。

6. イベントと一貫性がある配信のレベルを選択します。

- 唯一
イベントは、それ自体のグローバル(つまりJTA)トランザクションのサブスクライバに配信されます。イベント処理が完了すると、そのトランザクション内でサブスクライバが行ったあらゆる変更がコミットされます。サブスクライバが失敗すると、トランザクションはロールバックされます。失敗したイベントは、設定された回数だけ再試行されます。

- 保証付き
イベントは、グローバル・トランザクションなしでサブスクライバに非同期で配信されます。サブスクライバは、処理用にサブスクライバ自体のローカル・トランザクションの作成を選択できますが、他のイベント処理とは個別にコミットされます。このオプションでは、1つのキュー(メイン・イベント・キュー)へのトリップのみが存在するため、1つのみオプションよりコストが低くなります。また、EDNではイベントの再送は試行されません(バッキング・ストアがAQであるかJMSであるかにかかわらず)。1人以上のサブスクライバがイベントの使用に失敗すると(他のサブスクライバは成功した場合)、それらのサブスクライバはメッセージを失います。その点において、保証付き配信は、実際にはベスト・エフォートの配信を意味します。つまり、各サブスクライバが確実にメッセージを使用することは保証されません。

- 即時
イベントは、パブリッシャと同じグローバル・トランザクションとスレッドで、サブスクライバに配信されます。すべての即時サブスクライバが処理を完了するまで、公開コールは返されません。いずれかのサブスクライバが例外をスローすると、追加のサブスクライバは起動されず、例外はパブリッシャにスローされます。即時処理中にエラーが発生した場合、トランザクションはロールバックされます。

7. イベントをフィルタリングするには、選択したイベントの「フィルタ」列をダブルクリックするか、またはイベントを選択して、表の上の「フィルタ」アイコン(最初のアイコン)をクリックします。これにより「式ビルダー」ダイアログが表示されます。このダイアログで、XPathフィルタ式を指定できます。フィルタ式では、サービスの起動前にメッセージのコンテンツ(ペイロードまたはヘッダー)が分析されるように指定します。たとえば、メッセージに顧客IDが含まれている場合のみサービスを起動することを指定するフィルタ式を適用できます。
式のロジックが満たされると、イベントの配信が可能になります。

フィルタの詳細は、第20.3.2.8項「メッセージをフィルタリングする式の指定方法」を参照してください。

図41-5は、「メディエータの作成」ダイアログを示しています。

図41-5 「メディエータの作成」ダイアログ

「図41-5 「メディエータの作成」ダイアログ」の説明

8. 「OK」をクリックします。
図41-6に、イベント・サブスクリプションのためにOracle Mediatorが構成されたことを示す左側のアイコンを示します。

図41-6 イベント・サブスクリプションの構成

「図41-6 イベント・サブスクリプションの構成」の説明

41.3.2 ビジネス・イベントの作成およびサブスクライブ時の処理内容

例41-2のソース・コードに、Oracle Mediatorサービス・コンポーネントのサブスクライブするイベントに関する詳細を示します。

例41-2 サブスクライブするイベント

<component name="OrderPendingEvent">
<implementation.mediator src="OrderPendingEvent.mplan"/>
<business-events>
<subscribe
xmlns:sub1="/oracle/fodemo/storefront/entities/events/edl/OrderEO"
name="sub1:NewOrderSubmitted" consistency="oneAndOnlyOne"
runAsRoles="$publisher"/>
</business-events>
</component>

この例では明示的に示されていませんが、イベントにおいてXPathフィルタを定義できます。例41-3では、初期デポジットが50000を超える場合にのみ、イベントの配信が可能になります。

例41-3 イベントに対するXPathフィルタの定義

<business-events>
. . .
. . .
<filter>
<xpath xmlns:be="http://oracle.com/fabric/businessEvent"
xmlns:ns1="http://xmlns.oracle.com/singleString"
<xpath expression= "/be:business-event/be:content/
sub1:AccountInfo/Details[@initialDeposit > 50000]" />
</filter>
. . .
. . .
</business-events>

41.3.3 ビジネス・イベントのサブスクライブに関する注意事項

SOAコンポジット・アプリケーションのデフォルト以外のリビジョンに存在するサブスクライバでも、ビジネス・イベントを取得できます。たとえば、次の動作に注意してください。

ビジネス・イベントをサブスクライブする手順は、次のとおりです。

1. M1という最初のOracle Mediatorサービス・コンポーネントとM2という2番目のOracle Mediatorサービス・コンポーネントを含む、コンポジット・アプリケーションを作成します。M1はイベントを公開し、M2はイベントをサブスクライブします。出力はディレクトリに書き込まれます。

2. コンポジット・アプリケーションをリビジョン1としてデプロイします。

3. コンポジット・アプリケーションを変更して、M3という3番目のOracle Mediatorサービス・コンポーネントを追加します。M3は、同じイベントをサブスクライブし、別のディレクトリに出力を書き込みます。

4. コンポジット・アプリケーションをリビジョン2(デフォルト)としてデプロイします。

5. リビジョン2のコンポジット・アプリケーションを起動します。
Oracle Mediator M2は、同じ内容の出力をディレクトリ内の2つのファイルに書き込みます。Oracle Mediator M3は、予想どおりに、イベントを取得し、別のディレクトリに出力を正常に書き込みます。しかし、(リビジョン1の)Oracle Mediator M2も、コンポジット・アプリケーションのリビジョン2から公開されたイベントを取得し、処理しています。したがって、同じディレクトリ内にもう1つ出力ファイルが作成されます。

41.3.4 ビジネス・イベントを公開する方法

第41.3.1項「ビジネス・イベントをサブスクライブする方法」でサブスクライブしたイベントを公開するための、2番目のOracle Mediatorを作成できます。

ビジネス・イベントを公開する手順は、次のとおりです。

1. 最初のOracle Mediatorがサブスクライブしたイベントを公開する、2番目のOracle Mediatorサービス・コンポーネントを作成します。

2. 最初のOracle Mediatorサービス・コンポーネントに戻ります。

3. 「ルーティング・ルール」セクションで、「追加」アイコンをクリックします。

4. 「ターゲット・タイプ」ウィンドウでプロンプトが表示されたら、「サービス」をクリックします。

5. 2番目のOracle Mediatorサービス・コンポーネントを選択します。

6. 「ファイル」メイン・メニューから「すべて保存」を選択します。

41.3.5 管理サーバー・アプリケーションでSOAサーバーにイベントを公開できるように外部JNDIプロバイダを構成する方法

この項では、公開側のアプリケーション(ADF EARファイルなど)がSOAサーバーではなく管理サーバーでデプロイされている場合に、外部JNDIプロバイダを構成する方法について説明します。

管理サーバー・アプリケーションでSOAサーバーにイベントを公開できるように外部JNDIプロバイダを構成する手順は、次のとおりです。

1. Oracle WebLogic Server管理コンソールにログインします。

http://host:port/console

2. 「ドメイン構造」セクションで、「サービス」→「外部JNDIプロバイダ」を展開します。

3. 「ロックして編集」をクリックします。

4. 「新規」をクリックします。

5. 「名前」フィールドに名前(SOA_JNDIなど)を入力し、「次へ」をクリックします。

6. 「AdminServer」チェック・ボックスを選択し、「終了」をクリックします。

7. 「名前」列で、ステップ5で入力したプロバイダ名をクリックします。

8. 表41-2に記載されている詳細を入力し、「保存」をクリックします。

表41-2 構成の詳細

フィールド

説明

初期コンテキスト・ファクトリ

weblogic.jndi.WLInitialContextFactoryと入力します。

プロバイダURL

t3://hostname:soa_server_portを入力します。

ユーザー

Oracle WebLogic Serverユーザー名を入力します。

パスワードおよびパスワードの確認

Oracle WebLogic Serverユーザー名のパスワードを入力します。

9. 「リンク」→「新規」をクリックします。

10. 表41-3に記載されている詳細を入力し、「OK」をクリックします。

表41-3 構成の詳細

フィールド

説明

名前

SOA_EDNDataSourceを入力します。

ローカル名

jdbc/EDNDataSourceを入力します。

リモート名

jdbc/EDNDataSourceを入力します。

11. 「新規」をクリックします。

12. 表41-4に記載されている詳細を入力し、「OK」をクリックします。

表41-4 構成の詳細

フィールド

説明

名前

SOA_EDNLocalTxDataSourceを入力します。

ローカル名

jdbc/EDNLocalTxDataSourceを入力します。

リモート名

jdbc/EDNLocalTxDataSourceを入力します。

13. 「OK」をクリックします。

14. 「変更のアクティブ化」をクリックします。

15. LinuxのFMW_Home/user_projects/domains/domain_name/bin/setDomainEnv.shファイル(または、Windowsの場合はsetDomainEnv.batファイル)を次のように変更します。

WLS_JDBC_REMOTE_ENABLED="-Dweblogic.jdbc.remoteEnabled=true"

16. サーバーを再起動します。

41.3.6 JMSベースのEDN実装の構成方法

EDN実装がJMSベース(EDN-JMS)の場合は、次に示すJNDI構成の変更が必要です。このようなシナリオでは、汎用JMSキューがバックエンド・ストアとして使用されます。この変更によって、リモート・クライアント(ADFアプリケーション・クライアントなど)は、イベントを公開する前に接続ファクトリを参照できるようになります。

JMSベースのEDN実装を構成する手順は、次のとおりです。

1. Oracle WebLogic Server管理コンソールにログインします。

http://host:port/console

2. 「ドメイン構造」セクションで、「サービス」→「データ・ソース」を展開します。
EDN-JMSデータ・ソースを使用するために、EDN-DB JNDIソースを削除する必要があります。

3. 次のEDN-DB JNDIデータ・ソースを選択し、「削除」をクリックします。

- jdbc/EDNDataSource

- jdbc/EDNLocalTxDataSource

イベント・パブリッシャが、異なるクラスタまたはEDN用のSOAサーバーとは異なるドメインで稼働中のアプリケーション(ADFなど)にある場合、SOAインフラストラクチャをターゲットとするJNDI名にマッピングするクラスタのローカルJNDI名を持つ外部JNDIプロバイダを構成する必要があります。ローカル/リモートJNDI名は、リンク内で同一になります。

4. 「ドメイン構造」セクションで、「サービス」→「外部JNDIプロバイダ」を展開します。

5. 「新規」をクリックします。

6. 「名前」フィールドに外部JNDIプロバイダ名を入力します。

7. 新規JNDIプロバイダのターゲットを選択し、「終了」をクリックします。

8. 「名前」フィールドで、新規JNDIプロバイダをクリックします。

9. プロバイダ設定(初期コンテキスト・ファクトリ、プロバイダURLなど)を指定し、「保存」をクリックします。

10. 「リンク」タブをクリックします。

11. 「新規」をクリックし、外部JNDIリンクを作成します。

12. 名前を入力し、jms/fabric/EDNConnectionFactoryのローカル/リモートJNDI名を指定します。

13. ステップ12を繰り返し、jms/fabric/xaEDNConnectionFactoryの名前およびローカル/リモートJNDI名を指定します。ステップ12を繰り返し、jms/fabric/EDNQueueの名前およびローカル/リモートJNDI名を指定します。
完了したら、3つのリンクが作成されます。

14. ターゲット・サーバーを再起動します。

15. JNDIツリー・ビューの新規JNDIプロバイダ・リンクを確認します。

このような構成変更が実行されない場合、例41-4に示されるものと同様のエラーが発生します。

例41-4 EDN-JMSエラー・メッセージ

<Aug 30, 2010 1:28:46 PM EDT> <Warning>
<oracle.adf.controller.faces.lifecycle.Utils> <BEA-000000> <ADF: Adding the
following JSF error message: [FMWGEN][SQLServer JDBC Driver][SQLServer]Could
not find stored procedure 'edn_internal_publish_event'.

oracle.fabric.common.FabricException: Error enqueueing event:
[FMWGEN][SQLServer JDBC Driver][SQLServer]Could not find stored procedure
'edn_internal_publish_event'.

at
oracle.integration.platform.blocks.event.saq.SAQRemoteBusinessEventConnection.
enqueueEvent(SAQRemoteBusinessEventConnection.java:86)

41.3.7 ビジネス・イベント公開時の処理内容

例41-5には、2つのOracle Mediatorサービス・コンポーネントが示されています。1つのサービス・コンポーネント(OrderPendingEvent)はイベントをサブスクライブし、もう1つのサービス・コンポーネント(PublishOrderPendingEvent)はイベントを公開します。

例41-5 イベントのサブスクリプションと公開

<component name="PublishOrderPendingEvent">
<implementation.mediator src="PublishOrderPendingEvent.mplan"/>
<business-events>
<publishes xmlns:sub1="/oracle/fodemo/storefront/entities/events/edl/OrderEO"
name="pub1:NewOrderSubmitted"/>
</business-events>
</component>

<component name="OrderPendingEvent">
<implementation.mediator src="OrderPendingEvent.mplan"/>
<business-events>
<subscribe
xmlns:sub1="/oracle/fodemo/storefront/entities/events/edl/OrderEO"
name="sub1:NewOrderSubmitted" consistency="oneAndOnlyOne"
runAsRoles="$publisher"/>
</business-events>
</component>

41.4 BPELプロセス・サービス・コンポーネントからのビジネス・イベントのサブスクライブまたは公開

この項では、BPELプロセス・サービス・コンポーネントからビジネス・イベントをサブスクライブまたは公開する方法について説明します。

41.4.1 ビジネス・イベントをサブスクライブする方法

ビジネス・イベントをサブスクライブする手順は、次のとおりです。

1. 「コンポーネント・パレット」からSOAコンポジット・エディタにBPELプロセス・サービス・コンポーネントをドラッグします。

2. 「名前」フィールドに、名前を入力します。他のデフォルトの選択は変更せずに、「OK」をクリックします。
BPELプロセス・サービス・コンポーネントが作成されます。

3. BPELプロセス・サービス・コンポーネントをダブルクリックします。Oracle BPELデザイナが開きます。または、BPELプロセス・サービス・コンポーネントを右クリックして「編集」をクリックすることもできます。

4. 「コンポーネント・パレット」からSOAコンポジット・エディタのreceiveInputアクティビティの下に、receiveアクティビティをドラッグします。

注意:

pickアクティビティのonMessageブランチは、EDNからイベントを受信するように設定することもできます。onMessageブランチの詳細は、第15.2項「プロセスの継続または待機を選択するpickアクティビティの作成」を参照してください。

5. receiveアクティビティをダブルクリックします。「Receive」ダイアログが開きます。または、receiveアクティビティを右クリックして「編集」をクリックすることもできます。

6. 「名前」フィールドに、名前を入力します。

7. 「相互作用タイプ」リストで「イベント」を選択します。「Receive」ダイアログのレイアウトが変更されます。

8. 「イベント」フィールドの右側にある「イベントの参照」アイコンをクリックします。図41-7に示すように、「サブスクライブ済イベント」ダイアログが表示されます。

図41-7 「サブスクライブ済イベント」ダイアログ

「図41-7 「サブスクライブ済イベント」ダイアログ」の説明

9. 「追加」アイコンをクリックして、イベントを選択します。
図41-8に示すように、「イベント・チューザ」ダイアログが表示されます。

図41-8 「イベント・チューザ」ダイアログ

「図41-8 「イベント・チューザ」ダイアログ」の説明

10. 作成したイベントを選択し、「OK」をクリックします。
「サブスクライブ済イベント」ダイアログが再び表示されます。

11. イベントと一貫性がある配信のレベルを選択します。

- 唯一
イベントは、それ自体のグローバル(つまりJTA)トランザクションのサブスクライバに配信されます。イベント処理が完了すると、そのトランザクション内でサブスクライバが行ったあらゆる変更がコミットされます。サブスクライバが失敗すると、トランザクションはロールバックされます。失敗したイベントは、設定された回数だけ再試行されます。

- 保証付き
イベントは、グローバル・トランザクションなしでサブスクライバに非同期で配信されます。サブスクライバは、処理用にサブスクライバ自体のローカル・トランザクションの作成を選択できますが、他のイベント処理とは個別にコミットされます。このオプションでは、1つのキュー(メイン・イベント・キュー)へのトリップのみが存在するため、1つのみオプションよりコストが低くなります。また、EDNではイベントの再送は試行されません(バッキング・ストアがAQであるかJMSであるかにかかわらず)。1人以上のサブスクライバがイベントの使用に失敗すると(他のサブスクライバは成功した場合)、それらのサブスクライバはメッセージを失います。その点において、保証付き配信は、実際にはベスト・エフォートの配信を意味します。つまり、各サブスクライバが確実にメッセージを使用することは保証されません。

- 即時
イベントは、パブリッシャと同じグローバル・トランザクションとスレッドで、サブスクライバに配信されます。すべての即時サブスクライバが処理を完了するまで、公開コールは返されません。いずれかのサブスクライバが例外をスローすると、追加のサブスクライバは起動されず、例外はパブリッシャにスローされます。即時処理中にエラーが発生した場合、トランザクションはロールバックされます。

12. イベントをフィルタリングするには、選択したイベントの「フィルタ」列をダブルクリックするか、またはイベントを選択して、表の上の「フィルタ」アイコン(最初のアイコン)をクリックします。これにより「式ビルダー」ダイアログが表示されます。このダイアログで、XPathフィルタ式を指定できます。フィルタ式では、サービスの起動前にメッセージのコンテンツ(ペイロードまたはヘッダー)が分析されるように指定します。たとえば、注文に注文IDが含まれている場合のみサービスを起動することを指定するフィルタ式を適用できます。
式のロジックが満たされると、イベントの配信が可能になります。

13. 「OK」をクリックして「サブスクライブ済イベント」ダイアログを閉じます。「Receive」ダイアログが再び表示されます。

注意:

このreceiveアクティビティがBPELプロセス・サービス・コンポーネント・インスタンスを起動する起動receiveアクティビティの場合は、必要に応じて「インスタンスの作成」チェック・ボックスを選択できます。この操作によって、すべての起動に対して新しいBPELプロセス・サービス・コンポーネント・インスタンスを作成できます。

この receive アクティビティが中間プロセスの receive アクティビティで、BPELインスタンスがすでに起動されている場合、この receive アクティビティは、そのBPELインスタンスの実行を続行するために、別のイベントを待機します。

14. 「OK」をクリックします。
図41-9に、イベント・サブスクリプション用に構成されたBPELプロセス・サービス・コンポーネントを示します。

図41-9 イベント・サブスクリプション用のBPELプロセス・サービス・コンポーネントの構成

「図41-9 イベント・サブスクリプション用のBPELプロセス・サービス・コンポーネントの構成」の説明

41.4.2 ビジネス・イベントを公開する方法

ビジネス・イベントを公開する手順は、次のとおりです。

1. 「コンポーネント・パレット」からSOAコンポジット・エディタのreceiveアクティビティ(第41.4.1項「ビジネス・イベントをサブスクライブする方法」で作成したアクティビティ)の下に、invokeアクティビティをドラッグします。

2. invokeアクティビティをダブルクリックします。「Invoke」ダイアログが開きます。または、invokeアクティビティを右クリックして「編集」をクリックすることもできます。

3. 「名前」フィールドに、名前を入力します。

4. 「相互作用タイプ」リストで「イベント」を選択します。「Invoke」ダイアログのレイアウトが変更されます。

5. 「イベント」フィールドの右側にある「イベントの参照」アイコンをクリックします。「イベント・チューザ」ダイアログが表示されます。

6. 作成したイベントを選択し、「OK」をクリックします。
「Invoke」ダイアログが再び表示されます。

7. 「OK」をクリックします。
図41-10は、イベントのサブスクリプションおよび公開用に構成されたBPELプロセス・サービス・コンポーネントを示します。左側にある丸囲みの青い稲妻は、イベントのサブスクリプションを示します。右側にある丸囲みの黄色い稲妻は、イベントの公開を示します。タイトル内の青い矢印をクリックすると、公開されたイベントのタイトルが表示されます。

図41-10 イベント・サブスクリプションおよび公開用のBPELプロセス・サービス・コンポーネントの構成

「図41-10 イベント・サブスクリプションおよび公開用のBPELプロセス・サービス・コンポーネントの構成」の説明

41.4.3 ビジネス・イベントのサブスクライブおよび公開時の処理内容

例41-6のソース・コードに、BPELプロセス・サービス・コンポーネントのサブスクライブおよび公開するイベントに関するcomposite.xmlソース変更の様子を示します。

例41-6 イベントのサブスクリプションと公開

<component name="EventBPELProcess">
<implementation.bpel src="EventBPELProcess.bpel"/>
<property name="configuration.monitorLocation" type="xs:string"
many="false">EventBPELProcess.monitor</property>
<business-events>
<subscribe xmlns:sub1="http://mycompany.com/events/orders"
name="sub1:OrderReceivedEvent" consistency="oneAndOnlyOne"
runAsRoles="$publisher"/>
<publishes xmlns:pub1="http://mycompany.com/events/orders"
name="pub1:ProductSoldAlert"/>
</business-events>
</component>

この例では明示的に示されていませんが、イベントにおいてXPathフィルタを定義できます。フィルタは、通常、イベント・サブスクリプションにあります。subscribe要素によって、このサービス・コンポーネントがサブスクライブされる対象のイベントのタイプが制限され、filterセクションによってさらに、コンポーネントが関連する特定のコンテンツにイベントが制限されます。例41-7では、初期デポジットが50000を超える場合にのみ、イベントの配信が可能になります。

例41-7 イベントに対するXPathフィルタの定義

<business-events>
. . .
. . .
<filter>
<xpath xmlns:be="http://oracle.com/fabric/businessEvent"
xmlns:ns1="http://xmlns.oracle.com/singleString"
<xpath expression= "/be:business-event/be:content/
sub1:AccountInfo/Details[@initialDeposit > 50000]" />
</filter>
. . .
. . .
</business-events>

特別な属性のbpelx:eventNameを使用すると、receive、invoke、onMessageおよびonEvent (BPEL 2.0)などの標準BPELアクティビティが拡張されるため、BPELプロセス・サービス・コンポーネントでEDNイベント・バスからのイベントを受信できます。例41-8に、eventName属性のスキーマを示します。

例41-8 Eventname属性のスキーマ

<xs:attribute name="eventName" type="xs:QName">
<xs:annotation>
<xs:appinfo>
<tns:parent>
<bpel11:onMessage/>
<bpel11:receive/>
<bpel11:invoke/>
</tns:parent>
</xs:appinfo>
</xs:annotation>
</xs:attribute>

例41-9に、BPELソース・ファイルでのeventName属性の使用方法を示します。

例41-9 eventName属性を使用したBPELソース・コード

<receive name="OrderPendingEvent" createInstance="yes"
bpelx:eventName="ns1:OrderReceivedEvent"/>
<invoke name="Invoke_1" bpelx:eventName="ns1:ProductSoldAlert"/>

bpelx:eventName属性をreceive、invoke、onMessageまたはonEvent (BPEL 2.0)要素で使用した場合、partnerLink、operationまたはportType属性などの標準属性は存在しません。これは、bpelx:eventName属性の存在が、このアクティビティがEDNイベント・バスからのイベントの受信またはEDNイベント・バスへのイベントの公開のみを対象としていることを表しているためです。

BPELプロセス・サービス・コンポーネントのXSDファイルは若干変更され、partnerLink、operationおよびportType属性は必須ではなくなりました。bpelx:eventName属性、またはpartnerLink、operationおよびportType属性(どちらか一方)の存在については、JDeveloperで検証ロジックを実施されます。例41-10に、BPELのreceiveアクティビティの変更されたスキーマ定義を示します。

例41-10 BPELのreceiveアクティビティのスキーマ定義

<complexType name="tReceive">
<complexContent>
<extension base="bpws:tExtensibleElements">
<sequence>
<element name="correlations" type="bpws:tCorrelations" minOccurs="0"/>
<group ref="bpws:activity"/>
</sequence>
<!- BPEL mandatory attributes relaxed to optional for supporting BPEL-EDN ->
<attribute name="partnerLink" type="NCName" use="optional"/>
<attribute name="portType" type="QName" use="optional"/>
<attribute name="operation" type="NCName" use="optional"/>
<attribute name="variable" type="NCName" use="optional"/>
</extension>
</complexContent>
</complexType>

invokeおよびonMessageアクティビティのスキーマ定義も同様に変更されています。

41.4.4 ビジネス・イベントのサブスクライブに関する注意事項

SOAコンポジット・アプリケーションのデフォルト以外のリビジョンに存在するサブスクライバでも、ビジネス・イベントを取得できます。たとえば、次の動作に注意してください。

ビジネス・イベントをサブスクライブする手順は、次のとおりです。

1. S1という最初のOracle Mediatorサービス・コンポーネントまたはBPELプロセス・サービス・コンポーネントと、S2という2番目のOracle Mediatorサービス・コンポーネントまたはBPELプロセス・サービス・コンポーネントを含む、コンポジット・アプリケーションを作成します。S1はイベントを公開し、S2はイベントをサブスクライブします。出力はディレクトリに書き込まれます。

2. コンポジット・アプリケーションをリビジョン1としてデプロイします。

3. コンポジット・アプリケーションを変更して、S3という3番目のOracle Mediatorサービス・コンポーネントまたはBPELプロセス・サービス・コンポーネントを追加します。S3は、同じイベントをサブスクライブし、別のディレクトリに出力を書き込みます。

4. コンポジット・アプリケーションをリビジョン2(デフォルト)としてデプロイします。

5. リビジョン2のコンポジット・アプリケーションを起動します。

サービス・コンポーネントS2は、同じ内容の出力をディレクトリ内の2つのファイルに書き込みます。サービス・コンポーネントS3は、予想どおりに、イベントを取得し、別のディレクトリに出力を正常に書き込みます。しかし、(リビジョン1の)サービス・コンポーネントS2も、コンポジット・アプリケーションのリビジョン2から公開されたイベントを取得し、処理しています。したがって、同じディレクトリ内にもう1つ出力ファイルが作成されます。

41.5 Oracle ADF Business Componentビジネス・イベントをOracle Mediatorに統合する方法

この項では、Oracle ADF Business Componentイベント条件をSOAコンポーネントに統合する方法に関する高レベルな概要が提供されます。SOAコンポーネントには、Oracle Mediatorサービス・コンポーネントとBPELプロセス・サービス・コンポーネントが含まれています。

Oracle ADF Business Componentのビジネス・イベントをSOAコンポーネントに統合する手順は、次のとおりです。

1. ビジネス・コンポーネント・プロジェクトを作成します。

2. ビジネス・イベント定義をプロジェクトに追加します。このアクションにより、EDLファイルおよびXSDファイルが生成されます。XSDファイルにはペイロードの定義が含まれます。また、作成時には、Oracle ADF Business Componentによってイベントが発生するように必ず指定します。

Oracle ADF Business Componentビジネス・イベントの作成および公開の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。

3. SOAコンポジット・アプリケーションを作成し、EDLスキーマ・ファイルとXSDスキーマ・ファイルをSOAプロジェクトのルート・ディレクトリに手動でコピーします。例:

JDeveloper/mywork/SOA_application_name/SOA_project_name

4. スキーマ・ファイルを、インポートに基づいて、EDLファイルからの適切な相対位置に格納します。

5. 第41.3.1項「ビジネス・イベントをサブスクライブする方法」の説明に従って、Oracle Mediatorサービス・コンポーネントを作成します。

6. 第41.3.1項「ビジネス・イベントをサブスクライブする方法」の説明に従って、「イベント・チューザ」ウィンドウでイベントのEDLファイルを選択します。

7. Oracle Mediatorを起動するために、同じSOAコンポジット・アプリケーション内にBPELプロセス・サービス・コンポーネントを作成します。「詳細」タブの「入力要素」フィールドでは、ステップ2で作成したBusiness Componentビジネス・イベントXSDのペイロードを必ず選択します。

8. BPELプロセス・サービス・コンポーネントをダブルクリックします。

9. emailアクティビティをBPELプロセス・サービス・コンポーネントにドラッグします。

10. ビジネス・イベントXSDのペイロードを参照して、「件名」フィールドおよび「本文」フィールドに入力します。

11. SOAコンポジット・エディタのOracle Mediatorサービス・コンポーネントに戻ります。

12. BPELプロセス・サービス・コンポーネントまたは2番目のOracle Mediatorサービス・コンポーネントのように、イベントを公開する2番目のサービス・コンポーネントを設計します。
これで、SOAコンポジット・アプリケーションの設計は完了です。

第VIII部

アプリケーションの完成

この部では、アプリケーションの設計を完成する方法について説明します。

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

- 第42章「ポリシーを使用したセキュリティの有効化」

- 第43章「SOAコンポジット・アプリケーションのデプロイ」

- 第44章「SOAコンポジット・アプリケーションのテストの自動化」

42 ポリシーを使用したセキュリティの有効化

この章では、SOAコンポジット・アプリケーションの設計時にバインディング・コンポーネントおよびサービス・コンポーネントにポリシーを添付する方法について説明します。ポリシーによって、メッセージ配信にセキュリティが適用されます。この章では、ポリシー構成プロパティ値のオーバーライド方法についても説明します。

この章には次の項が含まれます:

- 第42.1項「ポリシーの概要」

- 第42.2項「バインディング・コンポーネントおよびサービス・コンポーネントへのポリシーの添付」

42.1 ポリシーの概要

Oracle Fusion Middlewareでは、ポリシー・ベースのモデルを使用してWebサービスを組織全体で管理および保護します。ポリシーによって、メッセージ配信にセキュリティが適用されます。ポリシーは、開発者が設計時環境で管理することも、システム管理者が実行時環境で管理することもできます。

ポリシーは1つ以上のアサーションで構成されます。ポリシー・アサーションは、特定のアクションを実行するポリシーの最小単位です。ポリシー・アサーションはリクエスト・メッセージおよびレスポンス・メッセージに対して実行され、同じアサーション・セットが両方のタイプのメッセージに対して実行されます。アサーションはポリシーに表示されている順序で実行されます。

表42-1に、サポートされるポリシー・カテゴリを示します。

表42-1 サポートされるポリシー・カテゴリ

カテゴリ

説明

メッセージ転送最適化メカニズム(MTOM)

添付ファイルがMTOM形式であることが保証されます。この形式を使用すると、Webサービス間でバイナリ・データを送信できます。これにより、ワイヤ上の転送サイズを減らすことができます。

信頼性

WS-Reliable Messagingプロトコルをサポートします。これにより、エンドツーエンドのメッセージ配信が保証されます。

アドレッシング

Simple Object Access Protocol(SOAP)メッセージに、WS-Addressing仕様に準拠するWS-Addressingヘッダーが含まれていることを検証します。トランスポート・レベルのデータはXMLメッセージに含まれており、ネットワーク・レベルのトランスポートに依存せずに情報を伝達します。

セキュリティ

WS-Security 1.0および1.1の標準を実装します。これらの標準により、ユーザーの認証と認可、アイデンティティ伝播およびメッセージ保護(メッセージ整合性およびメッセージ機密性)が実施されます。

管理

リクエスト、レスポンスおよびフォルト・メッセージをメッセージ・ログに記録します。管理ポリシーにはカスタム・ポリシーを含めることもできます。

各カテゴリ内には、添付できるポリシー・タイプが1つ以上あります。たとえば、「信頼性」カテゴリを選択した場合は、次のタイプを選択できます。

- oracle/wsrm10_policy
Webサービスの信頼性のあるメッセージング・プロトコルのバージョン1.0をサポートします。

- oracle/wsrm11_policy
Webサービスの信頼性のあるメッセージング・プロトコルのバージョン1.1をサポートします。

- oracle/no_wsrm_policy
グローバルに添付されたWeb Services Reliable Messagingポリシーの無効化をサポートします。

使用可能なポリシー、自分の環境に使用するポリシーについて、およびグローバル・ポリシーの詳細は、『Oracle Fusion Middleware Web Servicesセキュリティおよび管理者ガイド』を参照してください。

42.2 バインディング・コンポーネントおよびサービス・コンポーネントへのポリシーの添付

SOAコンポジット・アプリケーションのサービス・バインディング・コンポーネント、サービス・コンポーネントおよび参照バインディング・コンポーネントとの間で、ポリシーを添付したり、ポリシーの添付を解除できます。設計時環境でセキュリティをテストするために、Oracle JDeveloperを使用してポリシーを添付します。アプリケーションを本番環境にデプロイする準備が整った場合は、Oracle Enterprise Manager Fusion Middleware Controlで実行時ポリシーを添付したり、ポリシーの添付を解除できます。

ポリシーの実行時管理の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

42.2.1 ポリシーをバインディング・コンポーネントおよびサービス・コンポーネントに添付する方法

バインディング・コンポーネントおよびサービス・コンポーネントにポリシーを添付する手順は、次のとおりです。

1. SOAコンポジット・エディタで、サービス・バインディング・コンポーネントまたは参照バインディング・コンポーネントを右クリックします。

2. 「WSポリシーの構成」を選択します。
SOAコンポジット・アプリケーションのインタフェース定義に応じて、オプションの追加メニューが表示される場合があります。

- 選択したサービスまたは参照が同期のBPELプロセス・サービス・コンポーネントまたはOracle Mediatorサービス・コンポーネントとインタフェースしている場合は、リクエスト・メッセージとレスポンス・メッセージの両方に対して単一のポリシーが使用されます。「SOA WSポリシーの構成」ダイアログが即時に表示されます。ステップ4に進みます。

- サービスまたは参照が非同期のBPELプロセス・サービス・コンポーネントまたはOracle Mediatorサービス・コンポーネントとインタフェースしている場合は、リクエスト・メッセージとレスポンス・メッセージに対して個別のポリシーを構成する必要があります。コールバックのポリシーは、サービスからクライアントに送信されるレスポンスに使用されます。追加のメニューが表示されます。ステップ3に進みます。

3. 使用するバインディングのタイプを選択します。

- リクエスト対象:
バインドするサービス・コンポーネントのリクエスト・バインディングを選択します。選択できるリクエスト・バインディングは1つのみです。このアクションにより、バインディング・コンポーネントとサービス・コンポーネント間の通信が可能になります。

「公開されたサービス」スイムレーンでリクエスト・バインディングがサービスに対して構成されると、そのサービスはサーバーとして機能します。「外部参照」スイムレーンでリクエスト・バインディングが参照に対して構成されると、その参照はクライアントとして機能します。

- コールバック対象: (非同期プロセスとの相互作用が必要な場合のみ)
バインドするサービス・コンポーネントのコールバック・バインディングを選択します。このアクションにより、バインディング・コンポーネントとサービス・コンポーネント間のメッセージ通信が可能になります。選択できるコールバック・バインディングは1つのみです。

「公開されたサービス」スイムレーンでコールバック・バインディングがサービスに対して構成されると、そのサービスはクライアントとして機能します。「外部参照」スイムレーンでコールバック・バインディングが参照に対して構成されると、その参照はサーバーとして機能します。

図42-1に示す「SOA WSポリシーの構成」ダイアログが表示されます。この例では、サービス・バインディング・コンポーネントに対して「リクエスト対象」オプションが選択されています。「コールバック対象」を選択した場合も、同じタイプのポリシー・カテゴリが使用可能です。

図42-1 「SOA WSポリシーの構成」ダイアログ

「図42-1 「SOA WSポリシーの構成」ダイアログ」の説明

4. 添付するポリシーのタイプの「追加」アイコンをクリックします。

- MTOM

- 信頼性

- アドレッシング

- セキュリティ

- 管理

この例では、「セキュリティ」が選択されています。図42-2に示すダイアログが表示されます。

図42-2 セキュリティ・ポリシー

「図42-2 セキュリティ・ポリシー」の説明

5. カーソルをポリシー名の上に置くと、ポリシー機能の説明が表示されます。

6. 添付するポリシーのタイプを選択します。

7. 「OK」をクリックします。
図42-3に示す「SOA WSポリシーの構成」ダイアログに戻ります。添付されたセキュリティ・ポリシーが「セキュリティ」セクションに表示されます。

図42-3 添付されたセキュリティ・ポリシー

「図42-3 添付されたセキュリティ・ポリシー」の説明

8. 必要に応じて、さらにポリシーを追加します。
ポリシーを一時的に無効にするには、添付されたポリシーの名前の左にあるチェック・ボックスの選択を解除します。このアクションはポリシーの添付を解除するものではありません。

9. ポリシーの添付を解除するには、「削除」アイコンをクリックします。

10. 完了後に、「SOA WSポリシーの構成」ダイアログで「OK」をクリックします。
SOAコンポジット・エディタに戻ります。

ポリシーをサービス・コンポーネントに添付する手順は、次のとおりです。

1. サービス・コンポーネントを右クリックします。

2. 「コンポーネントWSポリシーの構成」を選択します。
図42-4に示す「SOA WSポリシーの構成」ダイアログが表示されます。

図42-4 「SOA WSポリシーの構成」ダイアログ

「図42-4 「SOA WSポリシーの構成」ダイアログ」の説明

3. 添付するポリシーのタイプの「追加」アイコンをクリックします。

- セキュリティ

- 管理

選択したタイプに対応するダイアログが表示されます。

4. 添付するポリシーのタイプを選択します。

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

6. 必要に応じて、さらにポリシーを追加します。

7. 完了後に、「SOA WSポリシーの構成」ダイアログで「OK」をクリックします。

Oracle Enterprise Manager Fusion Middleware Controlで実行時にポリシーを添付する方法の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

42.2.2 ポリシー構成プロパティ値のオーバーライド方法

使用する環境には、同じポリシーのクライアントまたはサーバーが複数含まれている場合があります。ただし、各クライアントまたはサーバーにはそれぞれ固有のポリシー要件が設定されている可能性があります。これらのポリシー・プロパティ値は、実行時の要件に基づいてオーバーライドできます。

42.2.2.1 クライアント構成プロパティ値のオーバーライド

クライアント・ポリシー構成プロパティのデフォルト値は、各クライアントに新しいポリシーを作成しなくても、クライアントごとにオーバーライドできます。この方法では、デフォルトの構成値を定義し、その値を実行時の要件に基づいてカスタマイズするクライアント・ポリシーをオーバーライドできます。

1. 次のいずれかのバインディング・コンポーネントを右クリックします。

- 「公開されたサービス」スイムレーンでサービス・バインディング・コンポーネントを右クリックし、「コールバック対象」を選択します。

- 「外部参照」スイムレーンで参照バインディング・コンポーネントを右クリックし、「リクエスト対象」を選択します。

2. 「セキュリティ」および「管理」セクションに移動します。これらの手順は、これらのセクションにポリシーがすでに添付されていることを前提にしています。
両方のセクションで「編集」アイコンが使用可能です。図42-5に詳細を示します。

図42-5 クライアント・ポリシーの選択

「図42-5 クライアント・ポリシーの選択」の説明

3. 「編集」アイコンをクリックします。選択したポリシーに関係なく、添付したすべてのクライアント・ポリシーについて、プロパティ名、値、およびオーバーライドされた値が表示されます。

4. 「オーバーライド値」列で、「値」列に表示されたデフォルト値をオーバーライドする値を入力します。図42-6に詳細を示します。

図42-6 クライアント・ポリシーのオーバーライド値

「図42-6 クライアント・ポリシーのオーバーライド値」の説明

5. 「OK」をクリックして「構成オーバーライド・プロパティ」ダイアログを閉じます。

6. 「OK」をクリックして「SOA WSポリシーの構成」ダイアログを閉じます。

7. SOAコンポジット・エディタで「ソース」ボタンをクリックします。
オーバーライドする値はcomposite.xmlファイルのproperty name属性に反映されます。

<binding.ws port="http://xmlns.oracle.com/Application26_
jws/Project1/BPELProcess1#wsdl.endpoint(bpelprocess1_client_
ep/BPELProcess1Callback_pt)">
<wsp:PolicyReference URI="oracle/wss_http_token_client_policy"
orawsp:category="security"
orawsp:status="enabled"/>
<wsp:PolicyReference URI="oracle/wss_http_token_over_ssl_client_policy"
orawsp:category="security"
orawsp:status="enabled"/>
<wsp:PolicyReference URI="oracle/wss_oam_token_client_policy"
orawsp:category="security"
orawsp:status="enabled"/>
<wsp:PolicyReference URI="oracle/wss_saml_token_bearer_over_ssl_client_
policy"
orawsp:category="security"
orawsp:status="enabled"/>
<wsp:PolicyReference URI="oracle/wss_saml_token_over_ssl_client_policy"
orawsp:category="security"
orawsp:status="enabled"/>
<wsp:PolicyReference URI="oracle/log_policy"
orawsp:category="management"
orawsp:status="enabled"/>
<property name="user.roles.include" type="xs:string" many="false">true</property>
</binding.ws>

ポリシー設定のオーバーライドの詳細は、『Oracle Fusion Middleware Web Servicesセキュリティおよび管理者ガイド』を参照してください。

42.2.2.2 サーバー構成プロパティ値のオーバーライド

サーバー・ポリシー構成プロパティのデフォルト値は、各サーバーに新しいポリシーを作成しなくても、サーバーごとにオーバーライドできます。この方法では、デフォルトの構成値を定義し、その値を実行時の要件に基づいてカスタマイズするサーバー・ポリシーをオーバーライドできます。

サーバー構成プロパティ値をオーバーライドする手順は、次のとおりです。

1. 次のいずれかのバインディング・コンポーネントを右クリックします。

- 「公開されたサービス」スイムレーンでサービス・バインディング・コンポーネントを右クリックし、「リクエスト対象」を選択します。

- 「外部参照」スイムレーンで参照バインディング・コンポーネントを右クリックし、「コールバック対象」を選択します。

2. 「セキュリティ」および「管理」セクションに移動します。これらの手順は、これらのセクションにポリシーがすでに添付されていることを前提にしています。
デフォルトでは、両方のセクションで「編集」アイコンは使用不可です。このアイコンを使用可能にするには、明示的にポリシーを選択する必要があります。これは、サーバーのプロパティ値はほとんどオーバーライドできないためです。図42-7に詳細を示します。

図42-7 サーバー・ポリシーの選択

「図42-7 サーバー・ポリシーの選択」の説明

3. 値のオーバーライドが許可されている添付済ポリシーを選択し、「編集」アイコンをクリックします。

4. 「オーバーライド値」列で、「値」列に表示されたデフォルト値をオーバーライドする値を入力します。図42-8に詳細を示します。ポリシー・ストアが使用不可の場合は、「ストアにプロパティ・ストアが見つかりません」というメッセージが「値」列に赤色で表示されます。

図42-8 サーバー・ポリシーのオーバーライド値

「図42-8 サーバー・ポリシーのオーバーライド値」の説明

5. 「OK」をクリックして「構成オーバーライド・プロパティ」ダイアログを閉じます。

6. 「OK」をクリックして「SOA WSポリシーの構成」ダイアログを閉じます。

7. SOAコンポジット・エディタで「ソース」ボタンをクリックします。
オーバーライドする値はcomposite.xmlファイルのOverrideProperty属性に反映されます。

<wsp:PolicyReference URI="oracle/binding_authorization_denyall_policy"
orawsp:category="security" orawsp:status="enabled"/>
<wsp:PolicyReference URI="oracle/binding_authorization_permitall_policy"
orawsp:category="security" orawsp:status="enabled"/>
<wsp:PolicyReference URI="oracle/binding_permission_authorization_policy"
orawsp:category="security" orawsp:status="enabled">
<orawsp:OverrideProperty orawsp:name="permission-class"
orawsp:value="permission-different-class"/>
</wsp:PolicyReference>

ポリシー設定のオーバーライドの詳細は、『Oracle Fusion Middleware Web Servicesセキュリティおよび管理者ガイド』を参照してください。

43 SOAコンポジット・アプリケーションのデプロイ

この章では、SOAコンポジット・アプリケーションのデプロイメントのライフ・サイクルについて説明します。さらに、Oracle JDeveloperおよびantスクリプト・ツールを使用して1つのコンポジット、複数のコンポジット、およびWSDL、XSD、他のファイル・タイプなどの共有データを使用するコンポジットをデプロイする方法、および異なる環境の間でSOAコンポジット・アプリケーションを移動するための構成プランを作成する方法についても説明します。ここでは、デプロイメントの前提条件、パッケージ化、準備および構成タスクについても説明します。また、Oracle WebLogic Scripting Tool (WLST)ユーティリティを使用したデプロイに関するドキュメントへの参照についても記載します。

この章には次の項が含まれます:

- 第43.1項「デプロイメントの概要」

- 第43.2項「デプロイメントの前提条件」

- 第43.3項「パッケージ化による影響の理解」

- 第43.4項「コンポジットの構造」

- 第43.5項「ターゲット環境の準備」

- 第43.6項「デプロイメント前にターゲット環境に応じてアプリケーションをカスタマイズする方法」

- 第43.7項「SOAコンポジット・アプリケーションのデプロイ」

- 第43.8項「デプロイメント後の構成」

- 第43.9項「テストおよびトラブルシューティング」

Oracle Enterprise Manager Fusion Middleware ControlからSOAコンポジット・アプリケーションをデプロイする手順は『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』、WLSTユーティリティを使用してSOAコンポジット・アプリケーションをデプロイする手順はOracle Fusion Middleware WebLogic Scripting Toolのコマンド・リファレンスを参照してください。

43.1 デプロイメントの概要

この章では、デプロイメントのライフ・サイクルに関する次の項目について説明します。

- デプロイメントの前提条件

- パッケージ化の詳細

- コンポジットの構造

- ターゲット環境の準備

- ターゲット環境の構成タスク

- コンポジットのデプロイメント

- デプロイメント後の構成タスク

- コンポジット・アプリケーションのテストおよびトラブルシューティング

デプロイメントのライフ・サイクルの詳細は、『Oracle Fusion Middleware管理者ガイド』を参照してください。

43.2 デプロイメントの前提条件

この項では、SOAコンポジット・アプリケーションの作成とデプロイに必要な基本的な前提条件を説明します。

43.2.1 Oracle SOA Suiteスキーマの作成

Oracle SOA Suiteコンポーネントにはスキーマが必要です。このスキーマはOracleまたはMicrosoft SQL Serverのデータベースにインストールされている必要があります。スキーマの作成とロードは、リポジトリ作成ユーティリティ(RCU)を使用してデータベース内で行います。スキーマのインストールと構成の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suiteインストレーション・ガイド』および『Oracle Fusion Middleware Repository Creation Utilityユーザーズ・ガイド』を参照してください。

43.2.2 SOAドメインの作成

インストール後は、Oracle Fusion Middleware構成ウィザードを使用して、新しいOracle WebLogic Serverドメインを作成および構成し、そのドメイン内で構成する製品(Oracle SOA Suiteなど)を選択します。この新しいドメインには、構成する製品に応じて、管理サーバーおよびその他の管理対象サーバーが含まれます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suiteインストレーション・ガイド』を参照してください。

43.2.3 SOAクラスタの構成

SOAコンポジット・アプリケーションはクラスタ化された環境にもデプロイできます。クラスタ化された環境の作成および構成の詳細は、『Oracle Fusion Middleware高可用性ガイド』を参照してください。

43.3 パッケージ化による影響の理解

SOAコンポジット・アプリケーションのプロジェクト内で必要なすべてのアーティファクト・ファイルは、次のツールを使用してSOAアーカイブ(SAR)JARファイルに個別にパッケージ化できます。

- Oracle JDeveloper
「デプロイメント・アクション」ページでのデプロイ時に、「SARにデプロイ」オプションを選択します。詳細は、第43.7.1.3項「プロファイルのデプロイ」を参照してください。

- antスクリプト
ant-sca-packageスクリプトを使用して、アーティファクトをパッケージ化します。詳細は、第43.7.6.3項「コンポジットSARファイルにSOAコンポジット・アプリケーションをパッケージ化するためのantの使用方法」を参照してください。

- WLSTコマンド
sca_packageスクリプトを使用して、アーティファクトをパッケージ化します。詳細は、『Oracle Fusion Middleware WebLogic Scripting Toolコマンド・リファレンス』を参照してください。

SARファイルは、接頭辞sca_が必要な特別なJARファイルです(例: sca_HelloWorld_rev1.0.jar)。

さらに、Oracle JDeveloperの「デプロイメント・アクション」ページで「アプリケーション・サーバーへのデプロイ」オプションを選択してSOAコンポジット・アプリケーションをデプロイする場合、プロジェクト内で必要なすべてのアーティファクト・ファイルは次のいずれかのファイルに自動的にパッケージ化されます。

- 自己完結型のJARファイル(単一のSOAコンポジット・アプリケーションの場合)
自己完結型のコンポジットの詳細は、第43.7.1項「Oracle JDeveloperでの単一のSOAコンポジットのデプロイ方法」および第43.7.2項「Oracle JDeveloperでの複数のSOAコンポジット・アプリケーションのデプロイ方法」を参照してください。

- メタデータを相互に共有する複数のSOAコンポジット・アプリケーションのZIPファイル
SOAコンポジット・アプリケーション間で共有データをデプロイして使用できます。共有データは、アプリケーション・サーバー上のSOAインフラストラクチャに、Oracle Metadata Services (MDS)リポジトリのアーカイブJARファイルとしてデプロイされます。このアーカイブ・ファイルには、すべての共有リソースが含まれています。詳細は、第43.7.3項「Oracle JDeveloperでの複数のSOAコンポジット・アプリケーション間の共有データのデプロイ方法および使用方法」を参照してください。

43.4 コンポジットの構造

Oracle JDeveloperでSOAコンポジット・アプリケーションをデプロイすると、そのコンポジットはJARファイル(単一のコンポジット・アプリケーションの場合)またはZIPファイル(複数のSOAコンポジット・アプリケーションの場合)にパッケージ化されます。これらのファイルには、次のアーティファクトを含めることができます。

- バインディング・コンポーネントおよびサービス・コンポーネント。

- Oracle B2Bアグリーメント、Oracle Web Service Manager(OWSM)のポリシー、およびヒューマン・ワークフロー・タスク・フローへの参照。

- WSDLファイル、XSDファイルなどの共有データ。すべての共有データは、サーバー上の既存のSOAインフラストラクチャ・パーティションにデプロイされます。このデータは、/appsネームスペースの下にデプロイされます。Oracle JDeveloperでSOA-MDS接続を使用してこのアーティファクトを参照する場合、URLには接頭辞oramdsが付加されます。

43.5 ターゲット環境の準備

ターゲット環境とは、SOAコンポジット・アプリケーションをデプロイする先のSOAインフラストラクチャ環境です。この環境は通常、開発、テストまたは本番の環境です。あるターゲット環境から別のターゲット環境にアプリケーションを移動するときは、コンポジット・アプリケーションで使用しているコンポーネント、アイデンティティ・サービス・プロバイダおよびセキュリティ・ポリシーに応じて、追加の構成ステップが必要になる場合があります。この項では、それらのタスクについて説明します。

43.5.1 データ・ソースおよびキューの作成方法

Java Database Connectivity (JDBC)データ・ソースは、JDBC接続のプールが含まれているJava Naming and Directory Interface (JNDI)ツリーにバインドされているオブジェクトです。アプリケーションでは、JNDIツリーでデータ・ソースを参照し、そのデータ・ソースからのデータベース接続を予約できます。送信メッセージをエンキューしたり受信メッセージをデキューするためのキューを作成します。表43-1に示すOracle JCAアダプタには、デプロイメントの前に、JDBCデータ・ソースおよびキューを構成する必要があります。

表43-1 Oracle JCAアダプタのタスク

アダプタ

構成タスク

参照項目

データベース・アダプタ

JDBCデータ・ソース

『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』のデプロイメントに関する項

AQアダプタ

JDBCデータ・ソース

『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』のOracle WebLogic Server管理コンソールでのデータ・ソースの構成に関する項

JMSアダプタ

キュー

『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』のアダプタ構成ウィザードを使用したOracle JMSアダプタの構成に関する項を参照してください。

43.5.1.1 JMSリソースの作成およびJMSアダプタの再デプロイメント用のスクリプト

例43-1に、JMSリソースの作成およびJMSアダプタの再デプロイメント用のスクリプトを示します。

注意:

このスクリプトはデモ用です。使用する環境に応じて、このスクリプトの変更が必要になる場合があります。

例43-1 JMSリソースの作成およびJMSアダプタの再デプロイメント用のスクリプト

# lookup the JMSModule
jmsSOASystemResource = lookup("SOAJMSModule","JMSSystemResource")

jmsResource = jmsSOASystemResource.getJMSResource()

cfbean = jmsResource.lookupConnectionFactory('DemoSupplierTopicCF')
if cfbean is None:
print "Creating DemoSupplierTopicCF connection factory"
demoConnectionFactory =
jmsResource.createConnectionFactory('DemoSupplierTopicCF')
demoConnectionFactory.setJNDIName('jms/DemoSupplierTopicCF')
demoConnectionFactory.setSubDeploymentName('SOASubDeployment')

topicbean = jmsResource.lookupTopic('DemoSupplierTopic')
if topicbean is None:
print "Creating DemoSupplierTopic jms topic"
demoJMSTopic = jmsResource.createTopic("DemoSupplierTopic")
demoJMSTopic.setJNDIName('jms/DemoSupplierTopic')
demoJMSTopic.setSubDeploymentName('SOASubDeployment')

try:
save()
# activate the changes
activate(block="true")
print "jms topic and factory for SOA Fusion Order Demo successfully created"
except:
print "Error while trying to save and/or activate!!!"
dumpStack()

print "Creating jms adapter connection factory information"
try:
redeploy('JmsAdapter', '@deployment.plan@', upload='true', stageMode='stage')

except:
print "Error while modifying jms adapter connection factory"

43.5.1.2 データベース・リソースの作成およびデータベース・アダプタの再デプロイメント用のスクリプト

例43-2に、データベース・リソースの作成およびデータベース・アダプタの再デプロイメント用のスクリプトを示します。

注意:

このスクリプトはデモ用です。使用する環境に応じて、このスクリプトの変更が必要になる場合があります。

例43-2 データベース・リソースの作成およびデータベース・アダプタの再デプロイメント用のスクリプト

import os
connect(userName,passWord,'t3://'+wlsHost+':'+adminServerListenPort)
edit()
startEdit()

soaJDBCSystemResource1 = create('DBAdapterTestDataSource',"JDBCSystemResource")
soaJDBCResource1 = soaJDBCSystemResource1.getJDBCResource()
soaJDBCResource1.setName('DBAdapterDataSource')

soaConnectionPoolParams1 = soaJDBCResource1.getJDBCConnectionPoolParams()
soaConnectionPoolParams1.setTestTableName("SQL SELECT 1 FROM DUAL")

soaConnectionPoolParams1.setInitialCapacity(10)
soaConnectionPoolParams1.setMaxCapacity(100)

soaDataSourceParams1 = soaJDBCResource1.getJDBCDataSourceParams()
soaDataSourceParams1.addJNDIName('jdbc/dbSample')
soaDriverParams1 = soaJDBCResource1.getJDBCDriverParams()
soaDriverParams1.setUrl('jdbc:oracle:thin:@'+db_host_name+':'+db_port+':'+db_sid)
soaDriverParams1.setDriverName('oracle.jdbc.xa.client.OracleXADataSource')
soaDriverParams1.setPassword('my_password')

soaDriverProperties1 = soaDriverParams1.getProperties()
soaProperty1 = soaDriverProperties1.createProperty("user")
soaProperty1.setValue('scott')

varSOAServerTarget = '/Servers/'+serverName
soaServerTarget = getMBean(varSOAServerTarget)

soaJDBCSystemResource1.addTarget(soaServerTarget)

dumpStack()

try :

save()

activate(block="true")

except:
print "Error while trying to save and/or activate!!!"
dumpStack()

print "Creating DB adapter resource  information"
try:
redeploy('DBAdapter', '@deployment.plan@', upload='true', stageMode='stage')

except:
print "Error while modifying db adapter connection factory"

43.5.2 コネクション・ファクトリおよび接続プールの作成方法

Oracle JCAアダプタは、JCA 1.5リソース・アダプタとしてOracle WebLogic Serverコンテナにデプロイされます。複数のアダプタが、JAR形式を使用してリソース・アダプタ・アーカイブ(RAR)ファイルとしてパッケージ化されます。このRARファイルはアダプタのデプロイ時に使用され、アダプタはOracle WebLogic Serverまたは中間層プラットフォームにコネクタとして登録されます。RARファイルの内容は次のとおりです。

- ra.xmlファイル。これは、リソース・アダプタに関するデプロイメント固有の情報が記載されているデプロイメント・ディスクリプタXMLファイルです。

- Oracle WebLogic Serverとリソース・アダプタ間の規定に関する宣言情報。

アダプタでは、コネクション・ファクトリのエンドポイントを定義するweblogic-ra.xmlテンプレート・ファイルもパッケージ化されます。

コネクション・ファクトリおよび接続プールの作成の詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

43.5.3 セキュリティを有効化する方法

ヒューマン・ワークフローでアイデンティティ・サービス・プロバイダを使用したり、認証および認可ポリシーを添付する場合は、次の追加設定タスクを実行する必要があります。

- ヒューマン・ワークフローのアイデンティティ・サービス・プロバイダ
デフォルトでは、アイデンティティ・サービスでは、Oracle WebLogic Serverの組込みLDAPサーバーがデフォルトの認証プロバイダとして使用されます。ヒューマン・ワークフローを使用する場合は、Oracle Internet Directory、Microsoft Active Directory、Oracle iPlanetなどの代替アイデンティティ・サービス・プロバイダを使用するようにOracle WebLogicを構成できます。詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。組込みLDAPサーバーは、クラスタ化された環境ではサポートされません。

- 認証プロバイダ(OWSMポリシー)
特定タイプのトークン(例: ユーザー名トークン、X.509トークン、SAMLトークンなど)を使用するポリシーには、認証プロバイダが必要です。認証プロバイダの作成および構成の詳細は、『Oracle Fusion Middleware Web Servicesセキュリティおよび管理者ガイド』を参照してください。

- 認可プロバイダ(OWSMポリシー)
ユーザーが認証された後は、認可ポリシーを使用して、そのユーザーがWebサービスへのアクセスを認可されていることを検証する必要があります。認可ポリシーは、いくつかのタイプのアサーション・テンプレートを使用して作成できます。認可ポリシーおよび保護するリソースの詳細は、『Oracle Fusion Middleware Web Servicesセキュリティおよび管理者ガイド』を参照してください。

43.5.4 設計時におけるコンポジット・インスタンス名の設定方法

Oracle MediatorおよびOracle BPEL Process Managerでは、設計時にSOAコンポジット・アプリケーションのインスタンス名を設定できます。インスタンス名は、Oracle Enterprise Manager Fusion Middleware ControlでSOAコンポジット・アプリケーションのインスタンス・ページの「名前」列に表示されます。Oracle Enterprise Manager Fusion Middleware Controlで、SOAコンポジット・アプリケーションまたはSOAインフラストラクチャのインスタンス・ページに検索基準を指定するときに、この名前を「名前」フィールドに指定できます。

43.5.4.1 Oracle Mediatorでのコンポジット・インスタンス名の設定

Oracle Mediatorでコンポジット・インスタンス名を設定する手順は、次のとおりです。

- assignアクティビティでXPath式関数med:setCompositeInstanceTitleを使用します。例:

<assign>
<copy
target="$out.property.tracking.compositeInstanceTitle"
expression="med:setCompositeInstanceTitle("sample")"
xmlns:med="http://schemas.oracle.com/mediator/xpath"/>
</assign>

式med:setCompositeInstanceTitle("sample")は、タイトルを設定する際に関数全体を実行します。targetに指定される値はダミー値で、assignアクティビティが正しく動作するためにのみ使用されます。

- XSLTマッパーで、setCompositeInstanceTitle(title) XPath式関数を使用します。
図版soaapp_comptitle.gifの説明

43.5.4.2 BPELプロセスでのコンポジット・インスタンス名の設定

BPELプロセスにコンポジット・インスタンス名を設定する手順は、次のとおりです。

BPELプロセスにコンポジット・インスタンス名を設定する手順は、次のとおりです。

1. Java BPEL exec拡張要素bpelx:execを使用します。この拡張要素には組込みメソッドsetCompositeInstanceTitle(String title)が含まれており、インスタンス名を設定できます。
詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。

43.5.5 取引パートナ・アグリーメントおよびタスク・フローのデプロイ方法

Oracle B2Bまたはヒューマン・タスクを使用する場合は、次の追加設定タスクを実行する必要があります。

取引パートナ・アグリーメントおよびタスク・フローをデプロイする手順は、次のとおりです。

- 取引パートナ・アグリーメントのデプロイ
取引パートナ・アグリーメントには、2つの取引パートナ、つまり起案者と応答者がビジネス文書を交換する際の条件が定義されています。これによって、取引パートナ、取引パートナID、ドキュメント定義およびチャネルが識別されます。アグリーメントは、設計時リポジトリから実行時リポジトリにデプロイする必要があります。詳細は、『Oracle Fusion Middleware Oracle B2Bユーザーズ・ガイド』を参照してください。

- タスク・フローのデプロイ
Oracle BPM Worklistでタスク・フローを使用するには、そのタスク・フローをデプロイする必要があります。詳細は、第43.7.1.3項「プロファイルのデプロイ」を参照してください。

43.5.6 アプリケーション・サーバー接続の作成方法

データを他のコンポジットと共有しないSOAコンポジット・アプリケーションをデプロイするには、アプリケーション・サーバー接続の作成ウィザードを使用して、アプリケーション・サーバー接続を作成します。詳細は、第43.7.1.1項「アプリケーション・サーバー接続の作成」を参照してください。

43.5.7 SOA-MDS接続の作成方法

データを他のコンポジットと共有するSOAコンポジット・アプリケーションをデプロイするには、SOA-MDS接続の作成ウィザードを使用して、データベース・ベースのOracle MDSリポジトリ・サーバーへの接続を作成します。詳細は、第43.7.3.4.1項「SOA-MDS接続の作成」を参照してください。

43.5.7.1 SOA-MDS接続によりcomposite.xmlファイルを開く場合の注意事項

Oracle JDeveloperでSOA-MDS接続を作成し、接続を展開し、「リソース・パレット」からコンポジットのcomposite.xmlファイルを開く場合、ファイルは正しくロードできません。コンポジットは「アプリケーション・ナビゲータ」からのみ開いてください。

Oracle MDSリポジトリの詳細は、Oracle Fusion Middleware管理者ガイドを参照してください。

43.6 デプロイメント前にターゲット環境に応じてアプリケーションをカスタマイズする方法

開発、テストおよび本番環境間を移動するとき、すべてのカスタマイズ・タスクを手動で実行する必要はありません。この項では、構成プランを使用して、次に進むターゲット環境に応じてSOAコンポジット・アプリケーションを自動的に構成する方法について説明します。

43.6.1 ターゲット環境に応じてSOAコンポジット・アプリケーションをカスタマイズするための構成プランの使用方法

通常、プロジェクトをある環境から別の環境に(たとえば、テスト環境から本番環境に)移動する場合は、JDBC接続文字列や様々なサーバーのホスト名など、環境固有の値をいくつか変更する必要があります。構成プランと呼ばれる単一のテキスト(XML)ファイルを使用して、これらの値を変更できます。構成プランは、Oracle JDeveloper内で作成するか、またはWLSTコマンドを使用して作成します。プロセスのデプロイメント時に、構成プランを使用してSOAプロジェクトを検索し、プロジェクトを次に進むターゲット環境に適応させるために置換する必要がある値を検索します。

43.6.1.1 構成プランの概要

この項では、構成プランの作成方法と添付方法の概要を説明します。

- 次の属性やプロパティを置換できる構成プラン・ファイルを作成して編集します。

- SOAコンポジット・アプリケーション・ファイル(composite.xml)内のすべてのコンポジット、サービス・コンポーネント、参照、サービスおよびバインディング・プロパティ

- バインディング用の属性値(例: binding.wsの場所)

- WSDLファイル内のインポートのschemaLocation属性

- WSDLファイル内のインクルードのlocation属性

- XSDファイル内のインクルード、インポートおよび再定義のschemaLocation属性

- JCAアダプタ・ファイル内のすべてのプロパティ

- 次のもののためのポリシー参照

- サービス・コンポーネント

- サービス・バインディング・コンポーネントおよび参照バインディング・コンポーネント

注意:

構成プランは、SOAコンポジット・アプリケーションのXSLTアーティファクトを変更しません。XSLを変更するには、XSLTマッパーを使用します。構成プランの使用は有効ではありません。たとえば、構成プラン・ファイルを使用してXSLの参照を変更することはできません。かわりに、テスト、開発および本番環境の間を移動するときに、Oracle JDeveloperのXSLTマッパーで参照を手動で変更する必要があります。これにより、設計時にXSLTマッパーが問題なく開きます。ただし、参照を未変更のままにしても実行時の動作に影響はありません。トランスフォーメーションおよびXSLTマッパーの詳細は、第43章「SOAコンポジット・アプリケーションのデプロイ」を参照してください。

- デプロイメント時には、次のいずれかのツールを使用して、構成プラン・ファイルをSOAコンポジット・アプリケーションのJARファイルまたはZIPファイル(SOAバンドルをデプロイする場合)に添付します。

- Oracle JDeveloper
詳細は、第43.7.1.3項「プロファイルのデプロイ」を参照してください。

- antスクリプト
詳細は、第43.7.6.4項「SOAコンポジット・アプリケーションをデプロイするためのantの使用方法」を参照してください。

- WLSTコマンド
詳細は、『Oracle Fusion Middleware WebLogic Scripting Toolコマンド・リファレンス』を参照してください。

- デプロイメント時に、構成プラン・ファイルを使用して、SOAコンポジット・アプリケーションのJARまたはZIPファイルにあるcomposite.xml、WSDLおよびXSDファイルを検索し、プロジェクトを次に進むターゲット環境に適応させるために置換する必要がある値を検索します。

43.6.1.2 構成プラン・ファイルの概要

次の例は、次の項目を変更する構成プランを示しています。

- コンポジットFileAdaptorCompositeのinFileFolderプロパティは、mytestserver/newinFileFolderで置換されます。

- 次の場所のホスト名(myserver17)は、test-serverで置換され、ポート8888は8198で置換されます。

- すべてのインポートWSDL

- すべての参照binding.wsの場所

composite.xmlファイルは例43-3のようになります。

例43-3 composite.xmlファイル

<composite .....>
<import namespace="http://example.com/hr/"
location="http://myserver17.us.example.com:8888/hrapp/HRAppService?WSDL"
importType="wsdl"/>
<service name="readPO">
<interface.wsdl
interface="http://xmlns.oracle.com/pcbpel/adapter/file/readPO/#wsdl.interface(Read
_ptt)"/>
<binding.jca config="readPO_file.jca"/>
<property name="inFileFolder" type="xs:string" many="false"
override="may">/tmp/inFile</property>
</service>
<reference name="HRApp">
<interface.wsdl
interface="http://example.com/hr/#wsdl.interface(HRAppService)"/>
<binding.ws
port="http://example.com/hr/#wsdl.endpoint(HRAppService/HRAppServiceSoapHttpPort)"
location="http://myserver17.us.example.com:8888/hrapp/HRAppService?WSDL"/>
<binding.java serviceName="{http://example.com/hr/}HRAppService"
registryName="HRAppCodeGen_JBOServiceRegistry"/>
</reference>
</composite>

構成プラン・ファイルは例43-4のようになります。

例43-4 構成プラン・ファイル

<?xml version="1.0" encoding="UTF-8"?>
<SOAConfigPlan
xmlns:jca="http://platform.integration.oracle/blocks/adapter/fw/metadata"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy"
xmlns:edl="http://schemas.oracle.com/events/edl"
xmlns="http://schemas.oracle.com/soa/configplan">
<composite name="FileAdaptorComposite">
<service name="readPO">
<binding type="*">
<property name="inFileFolder">
<replace>/mytestserver/newinFileFolder</replace>
</property>
</binding>
</service>
</composite>
<!-- For all composite replace host and port in all imports wsdls -->
<composite name="*">
<import>
<searchReplace>
<search>myserver17</search>
<replace>test-server</replace>
</searchReplace>
<searchReplace>
<search>8888</search>
<replace>8198</replace>
</searchReplace>
</import>
<reference name="*">
<binding type="ws">
<attribute name="location">
<searchReplace>
<search>myserver17</search>
<replace>test-server</replace>
</searchReplace>
<searchReplace>
<search>8888</search>
<replace>8198</replace>
</searchReplace>
</attribute>
</binding>
</reference>
</composite>
</SOAConfigPlan>

ポリシーは、同じURIに対するポリシーが使用可能な場合は置換されます。それ以外の場合は追加されます。これは、変更されるが追加はされないプロパティとは異なります。

43.6.1.3 構成プランのユースケースの概要

次の手順では、開発環境からテスト環境に移動するときに構成プランを使用する方法の概要を説明します。

1. ユーザーAはSOAコンポジット・アプリケーションFooを作成します。

2. ユーザーAはFooを開発サーバーにデプロイし、ステージング領域でテストする準備が整うまで不具合を修正してプロセスを調整します。

3. ユーザーAはFoo用の構成プランを作成して編集します。これにより、テスト環境に適合するようにアプリケーション内のURLおよびプロパティを変更できます。

4. ユーザーAは、Oracle JDeveloperまたは一連のコマンドライン・スクリプト(WLSTベース可能)を使用して、Fooをテスト・サーバーにデプロイします。ステップ3で作成した構成プランにより、Foo内のURLおよびプロパティが変更されます。

5. ユーザーAは、今後、SOAコンポジット・アプリケーションBarをデプロイし、デプロイメント時に同じプランを適用します。URLおよびプロパティも変更されます。

次の手順では、環境に依存しないプロセスを作成するときに構成プランを使用する方法の概要を説明します。

注意:

このユースケースは、独自の開発サーバー、および共通の開発およびテスト・サーバーを持つユーザーが、同じプロセスの開発を共有している場合に役立ちます。同じデプロイメント環境(つまり、同じ開発サーバー)を共有するユーザーには、このユースケースは参考にならない場合があります。

1. ユーザーAはSOAコンポジット・アプリケーションFooを作成します。

2. ユーザーAはFooを開発サーバーにデプロイし、ステージング領域でテストする準備が整うまで不具合を修正してプロセスを調整します。

3. ユーザーAはFoo用の構成プランを作成します。これにより、ユーザーAの環境の設定に適合するようにプロセス内のURLおよびプロパティを変更できます。

4. ユーザーAは、ソース・コントロール・システムに対して、Fooおよびステップ3で作成した構成プランをチェックインします。

5. ユーザーBは、ソース・コントロールからFooをチェックアウトします。

6. ユーザーBは、環境に適合する構成プランのコピーを作成し、新規の構成プランをFooのアーティファクトに適用します。

7. ユーザーBはアプリケーションをOracle JDeveloperにインポートし、いくつかの変更を行います。

8. ユーザーBは、Fooおよび(ユーザーBの環境に適合する)構成プランBの両方をチェックインします。

9. ユーザーAは、両方の構成プランとともに、Fooを再度チェックアウトします。

43.6.1.4 Oracle JDeveloperでの構成プランの作成方法

この項では、構成プランの作成方法と使用方法を説明します。特に、次の項目について説明します。

- 構成プランの作成および編集

- SOAコンポジット・アプリケーションのJARファイルへの構成プランの添付

- 構成プランの検証

- 構成プランが含まれるSOAコンポジット・アプリケーションのJARまたはZIPファイルのデプロイ

Oracle JDeveloperで構成プランを作成する手順は、次のとおりです。

1. Oracle JDeveloperを開きます。

2. アプリケーション・ナビゲータで、構成プランを作成するプロジェクトのcomposite_name (composite.xml)ファイルを右クリックし、「構成プランの生成」を選択します。図43-1に詳細を示します。

図43-1 構成プランの生成

「図43-1 構成プランの生成」の説明

図43-2に示すように、「コンポジット構成プラン・ジェネレータ」が表示されます。

図43-2 「コンポジット構成プラン・ジェネレータ」ダイアログ

「図43-2 「コンポジット構成プラン・ジェネレータ」ダイアログ」の説明

3. 表43-2に示すように、構成プラン・ファイルを作成して編集します。

表43-2 構成プランの生成

フィールド

説明

構成プランのファイル名(.xml)を指定してください

構成プランの特定の名前を入力するか、またはデフォルト名をそのまま使用します。ファイルはプロジェクトのディレクトリ内に作成され、SOAコンポジット・アプリケーションのJARまたはZIPファイルにパッケージ化されます。

注意: デプロイメント時にプロンプトが表示された時点で、デプロイメント・ウィザードの「構成のデプロイ」ページで別の構成ファイルを指定できます。詳細は、第43.7.1.3項「プロファイルのデプロイ」を参照してください。

既存ファイルの上書き

既存の構成プラン・ファイルをプロジェクト・ディレクトリ内の別のファイルで上書きする場合に選択します。

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

これで、単一の構成プラン・ファイルが作成され、編集のために開きます。ファイルは例43-4のようになります。SOAコンポジット・アプリケーションのcomposite.xml、WSDLおよびスキーマ・ファイルのURLとプロパティを変更できます。図43-3に詳細を示します。

図43-3 構成プラン・エディタ

「図43-3 構成プラン・エディタ」の説明

5. サーバー名、ポート番号などの値を既存の構文に追加します。また、新しい値を指定するときは、置換専用の構文を追加できます。各セクションに複数の検索コマンドや置換コマンドを追加できます。

6. 「ファイル」メニューから「すべて保存」を選択します。

7. エディタの上部で、ファイル名の右側にあるxをクリックして構成プラン・ファイルを閉じます。

8. アプリケーション・ナビゲータで、composite_name (composite.xml)ファイルを再び右クリックし、「構成プランを検証します」を選択します。

図43-4に示すように、「コンポジット構成プラン・バリデータ」が表示されます。

図43-4 構成プランの検証

「図43-4 構成プランの検証」の説明

9. 検証する構成プランを選択します。この手順では、デプロイメント中に行われた検索および置換による変更がすべて識別されます。このオプションは、デバッグの目的でのみ使用します。

10. 検証結果が記述されたレポートが作成されたディレクトリをメモし、「OK」をクリックします。

Oracle JDeveloperの「ログ」ウィンドウには、検証が成功したかどうかが表示され、SOAコンポジット・アプリケーションのデプロイメント中に実行された検索コマンドと置換コマンドがすべてリストされます。この情報は検証レポートにも書き込まれます。

注意:

古いcomposite.xml、WSDLおよびXSDファイルは、次に進む環境に適したURLおよびプロパティの新しい値を含むファイルに置換されません。このような置換は、SOAコンポジット・アプリケーションがデプロイされた場合のみ発生します。

11. 次のいずれかの項で説明する手順に従って、SOAコンポジット・アプリケーションをデプロイします。

- 第43.7.1項「Oracle JDeveloperでの単一のSOAコンポジットのデプロイ方法」

- 第43.7.2項「Oracle JDeveloperでの複数のSOAコンポジット・アプリケーションのデプロイ方法」

- 第43.7.3項「Oracle JDeveloperでの複数のSOAコンポジット・アプリケーション間の共有データのデプロイ方法および使用方法」

Oracle JDeveloperでデプロイメント中に、第43.7.1.3項「プロファイルのデプロイ」の手順4に示されている「構成のデプロイ」ページで、SOAコンポジット・アプリケーション・アーカイブを含める構成プランを選択するよう促されます。

12. SOAコンポジット・アプリケーションとともに含める構成プランを選択します。

13. 「OK」をクリックします。

43.6.1.5 WLSTユーティリティを使用した構成プランの作成方法

Oracle JDeveloperのかわりにWLSTコマンドライン・ユーティリティを使用して、次の構成プラン管理タスクを実行できます。

- 構成プランの生成および編集

sca_generatePlan(configPlan, sar, composite, overwrite, verbose)

- SOAコンポジット・アプリケーションのJARファイルへの構成プラン・ファイルの添付

sca_attachPlan(sar, configPlan, overwrite, verbose)

- 構成プランの検証

sca_validatePlan(reportFile, configPlan, sar, composite, overwrite, verbose)

- JARファイルにパッケージ化された構成プランの抽出および編集

sca_extractPlan(sar, configPlan, overwrite, verbose)

これらのコマンドの使用方法の詳細は、『Oracle Fusion Middleware WebLogic Scripting Toolコマンド リファレンス』を参照してください。

43.6.1.6 スクリプトを使用した構成プランの添付方法

デプロイメント時には、Oracle JDeveloperのかわりにantスクリプトを使用して、構成プラン・ファイルをSOAコンポジット・アプリケーションのJARまたはZIPファイルに添付できます。手順は、第43.7.6.4項「SOAコンポジット・アプリケーションをデプロイするためのantの使用方法」を参照してください。

43.6.1.7 グローバル・トークン変数の作成方法

SOAコンポジット・アプリケーションの特定のURIに対してグローバル・トークン変数を定義できます。たとえば、10個の異なる構成プランでSOAコンポジット・アプリケーション名を更新するかわりに、その名前をグローバルに設定できます。値が取得され、その値で、デプロイ済SOAコンポジット・アプリケーションのcomposite.xmlファイルのコンポジット名に対するグローバル・トークン変数の値が置換されます。

詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。

43.7 SOAコンポジット・アプリケーションのデプロイ

この項では、次のタイプのSOAコンポジット・アプリケーションをデプロイする方法について説明します。

- Oracle JDeveloperでの単一のコンポジットのデプロイ

- Oracle JDeveloperでの複数のコンポジットのデプロイ

- Oracle JDeveloperでの共有データのデプロイおよび使用

- Oracle JDeveloperでの既存のSOAアーカイブのデプロイ

- WLSTおよびantスクリプトを使用したSOAコンポジット・アプリケーションの管理

- Oracle Enterprise Manager Fusion Middleware Controlからのデプロイ

- クラスタへのSOAコンポジット・アプリケーションのデプロイ

43.7.1 Oracle JDeveloperでの単一のSOAコンポジットのデプロイ方法

Oracle JDeveloperでは、SOAプロジェクトとアプリケーションをOracle WebLogic Serverにデプロイするためにプロファイルを使用する必要があります。

43.7.1.1 アプリケーション・サーバー接続の作成

SOAコンポジット・アプリケーションのデプロイ先となるアプリケーション・サーバーへの接続を作成する必要があります。次の手順は、Oracle WebLogic Serverへの接続の作成方法です。IBM WebSphere Serverなどの他のアプリケーション・サーバーへの接続を作成する方法は、Oracle Fusion Middlewareサード・パーティ・アプリケーション・サーバー・ガイドを参照してください。

アプリケーション・サーバー接続を作成する手順は、次のとおりです。

1. 「ファイル」メイン・メニューから、「新規」を選択します。

2. 「一般」リストから、「接続」を選択します。

3. 「アプリケーション・サーバー接続」を選択し、「OK」をクリックします。
「名前とタイプ」ページが表示されます。

4. 「接続名」フィールドに、接続の名前を入力します。

5. 「接続タイプ」リストで「WebLogic 10.3」を選択して、Oracle WebLogic Serverへの接続を作成します。

6. 「次へ」をクリックします。
「認証」ページが表示されます。

7. 「ユーザー名」フィールドに、アプリケーション・サーバーにアクセスする権限があるユーザーを入力します。

8. 「パスワード」フィールドに、このユーザーのパスワードを入力します。

9. 「次へ」をクリックします。
「構成」ページが表示されます。

10. 「Weblogicホスト名(管理サーバー)」フィールドに、Oracle WebLogic Serverがインストールされているホストを入力します。

11. 「ポート」および「SSLポート」フィールドに適切なポート値を入力するか、デフォルト値を受け入れます。

12. Secure Sockets Layer (SSL)を使用する場合は、「常にSSLを使用」チェック・ボックスを選択します。表43-3は、このチェック・ボックスを選択したときの動作について説明しています。

表43-3 HTTPSおよびHTTPサーバーへのデプロイ

チェック・ボックス

動作

選択

SSLでコンポジットをデプロイするために、HTTPSサーバーURLが存在する必要があります。そうでない場合、デプロイメントは失敗します。

サーバーにHTTPのURLしかない場合も、デプロイメントが失敗します。このオプションは、SSLでのデプロイメントが非SSLのHTTP URLを介して行われないようにし、HTTPS URLのみを介して行われるようにするためのオプションです。

選択解除

非SSL環境にデプロイするために、HTTPサーバーURLが存在する必要があります。そうでない場合、デプロイメントは失敗します。

サーバーにHTTPSとHTTPの両方のURLがある場合、デプロイメントは非SSL接続を介して行われます。このオプションは、サーバーがSSL対応であってもOracle JDeveloperからの非SSLデプロイメントを強制的に行えるようにするためのオプションです。

13. 「WebLogicドメイン」フィールドに、Oracle SOA Suiteのドメインを入力します。ドメインの指定に関する詳細は、「ヘルプ」をクリックしてください。

14. 「次へ」をクリックします。

15. 「接続のテスト」をクリックして、サーバー接続をテストします。

16. 接続に成功した場合は、「終了」をクリックします。成功しなかった場合は、「戻る」をクリックして、前のダイアログで内容を修正します。接続テストに成功しなかった場合でも接続は作成されます。

43.7.1.2 (オプション)プロジェクト・デプロイメント・プロファイルの作成

必要なデプロイメント・プロファイルは、プロジェクトに対して自動的に作成されます。アプリケーション・プロファイルには、SOAプロジェクトのJARファイルが含まれています。必要に応じて、追加のプロファイルを作成できます。

プロジェクト・デプロイメント・プロファイルを作成する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、SOAプロジェクトを右クリックします。

2. 「プロジェクト・プロパティ」を選択します。
「プロジェクト・プロパティ」ダイアログが表示されます。

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

4. 「新規」をクリックします。
「デプロイメント・プロファイルの作成」ダイアログが表示されます。

5. 表43-4に記載されている値を入力します。

表43-4 「デプロイメント・プロファイルの作成」ダイアログのフィールドと値

フィールド

説明

アーカイブ・タイプ

SOA-SARファイルを選択します。

SARは、SOAコンポジット・アプリケーションを記述するデプロイメント・ユニットです。SARは、BPELプロセス、ビジネス・ルール、ヒューマン・タスクおよびOracle Mediatorルーティング・サービスなどのサービス・コンポーネントを単一のアプリケーションにパッケージ化します。SARファイルは、以前のリリースのBPELスーツケース・アーカイブと類似していますが、上位のコンポジット・レベルで対応し、アプリケーションに含まれる追加サービス・コンポーネント(ヒューマン・タスク、ビジネス・ルールおよびOracle Mediatorルーティング・サービスなど)があります。

名前

デプロイメント・プロファイル名を入力します。

6. 「OK」をクリックします。
SARデプロイメント・プロファイル・ダイアログが表示されます。

7. 「OK」をクリックして「SARデプロイメント・プロファイルのプロパティ」ダイアログを閉じます。
図43-5に示すデプロイメント・プロファイルが、「プロジェクト・プロパティ」ダイアログに表示されます。

図43-5 プロジェクト・プロファイル

「図43-5 プロジェクト・プロファイル」の説明

43.7.1.3 プロファイルのデプロイ

次に、プロジェクト・プロファイルをOracle WebLogic Serverにデプロイします。デプロイメントを実行するには、アプリケーション・サーバー接続の作成が必要です。デプロイメント時に接続を作成するには、ステップ10で「追加」アイコンをクリックします。またはデプロイメント前に接続を作成するには、第43.7.1.1項「アプリケーション・サーバー接続の作成」の手順に従います。

プロファイルをデプロイする手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、SOAプロジェクトを右クリックします。

2. 「デプロイ」→「project_name」の順に選択します。
project_nameの値は、SOAプロジェクト名です。

「Project_Nameのデプロイ」ウィザードの「デプロイメント・アクション」ページが表示されます。図43-6に例を示します。

図43-6 「デプロイメント・アクション」ページ

「図43-6 「デプロイメント・アクション」ページ」の説明

3. 次のいずれかのデプロイメント・オプションを選択します。

- アプリケーション・サーバーへのデプロイ
選択したSOAプロジェクトのJARファイルが作成され、Oracle WebLogic Serverなどのアプリケーション・サーバーにデプロイされます。

- SARへのデプロイ
選択したSOAプロジェクトのSAR (JAR)ファイルが作成されますが、Oracle WebLogic Serverなどのアプリケーション・サーバーにはデプロイされません。このオプションは次のような環境に便利です。

- Oracle WebLogic Serverは実行中でないが、アーティファクトJARファイルを作成する場合。

- バッチ・スクリプトから複数のJARファイルをOracle WebLogic Serverにデプロイする場合。このオプションは、Oracle JDeveloperですべてのプロジェクト・プロファイル(所有権がないものが含まれている可能性があります)を開いて、それらをデプロイする方法の代替手段として提供されています。

表示されるページは、選択内容によって異なります。

4. 環境に適したデプロイメント・オプションを選択します。

表43-5 デプロイメント・ターゲット

選択

次の手順に移動します。

アプリケーション・サーバーへのデプロイ

ステップ4a

SARへのデプロイ

ステップ4b

1. 図43-7に示す「構成のデプロイ」ページが表示されていることを確認します。

図43-7 アプリケーション・サーバーへのデプロイメント用の「構成のデプロイ」ページ

「図43-7 アプリケーション・サーバーへのデプロイメント用の「構成のデプロイ」ページ」の説明

2. 図43-8に示す「構成のデプロイ」ページが表示されていることを確認します。

図43-8 SARへのデプロイメント用の「構成のデプロイ」ページ

「図43-8 SARへのデプロイメント用の「構成のデプロイ」ページ」の説明

5. 表43-6の説明に従って、環境に適した値を指定します。アプリケーション・サーバーへのデプロイを選択した場合は、追加のフィールドがページに表示されます。

表43-6 「SOAデプロイメントと構成ダイアログ」

フィールド

説明

コンポジット・リビジョンID

プロジェクトの詳細を展開表示します。

- プロジェクト

プロジェクト名が表示されます。

- 現在のリビジョンID

プロジェクトの現在のリビジョンIDが表示されます。

- 新規リビジョンID

必要に応じて、SOAコンポジット・アプリケーションのリビジョンIDを変更します。

SOA構成プラン

構成プランの詳細を展開表示します。

構成プランにより、様々な環境で使用するURLおよびプロパティ値を定義できます。プロセスのデプロイメント時に、構成プランを使用してSOAプロジェクトを検索し、プロジェクトを次に進むターゲット環境に適応させるために置換する必要がある値を検索します。

- 添付不可

構成プランをSOAコンポジット・アプリケーションのJARファイルに含めない場合に選択します。構成プランを作成していない場合、このフィールドは無効化されています。これがデフォルトの選択です。

- Configuration_plan.xml

特定の計画を選択します。この選択を使用できるようにするには、SOAプロジェクトに構成プランが存在している必要があります。

構成プランの作成手順については、第43.6.1項「ターゲット環境に応じてSOAコンポジット・アプリケーションをカスタマイズするための構成プランの使用方法」を参照してください。

BPELモニター

BPELモニターに関する詳細を表示する場合に展開します。

- BPELモニターのデプロイメント・エラーを無視します

注意: このチェック・ボックスは、アプリケーションに少なくとも1つの.monitorファイルがある場合のみ表示されます。

BPELモニターのデプロイメント・エラーを表示する場合は、このチェック・ボックスの選択を解除します。このチェック・ボックスは、monitor.config BPELプロジェクト・ファイルのignoreErrorsプロパティに対応しています。このファイルには、Oracle BAMサーバーに接続してOracle BAMデータ・オブジェクトとダッシュボードを作成するために必要なランタイム・プロパティとデプロイメント・プロパティが定義されています。Oracle BAMサーバーに接続できないときに、ignoreErrorsがtrueに設定されていると、コンポジットのデプロイメントは停止しません。falseに設定され、Oracle BAMサーバーが使用できない場合は、デプロイメントに失敗します。

コンポジット・リビジョンをデフォルトとしてマークします。

新規リビジョンをデフォルトにしない場合は、このボックスの選択を解除できます。デフォルトでは、新しくデプロイしたコンポジット・リビジョンがデフォルトになります。このリビジョンは、新しいリクエストを受信するとインスタンス化されます。

このオプションは、「デプロイメント・アクション」ページで「アプリケーション・サーバーへのデプロイ」を選択した場合のみ表示されます。

同じリビジョンIDで既存のコンポジットを上書きします。

同じリビジョン値を持つ既存のSOAコンポジット・アプリケーションを上書きする場合に選択します。

このオプションは、「デプロイメント・アクション」ページで「アプリケーション・サーバーへのデプロイ」を選択した場合のみ表示されます。

再デプロイ後にインスタンスの実行を続行します。

注意: このオプションはOracle JDeveloperにOracle BPM Suiteがインストールされている場合にのみ表示され、Oracle BPMコンポジットのデプロイに対してのみサポートされます。次をデプロイする場合はこのオプションを選択しないでください。

- Oracle BPM SuiteもインストールされているOracle JDeveloper環境のSOAコンポジット・アプリケーション

- 永続的なBPELプロセスが含まれているOracle BPMコンポジット(そのプロセスが変更されているかどうかにかかわらず)。永続的なBPELプロセスとは、実行が完了するまで時間がかかるプロセスです。永続的なBPELプロセスの例には、非同期プロセス(非同期プロセスは常に永続プロセスです)や、waitアクティビティなどの永続的なアクティビティが含まれる同期プロセスがあります。
このオプションを選択して永続的なBPELプロセスを再デプロイしようとすると、デプロイメントは失敗します。

上書きされたリビジョンの既存のインスタンスを有効にして、失効にするのではなく実行を継続する場合に選択します。これらのインスタンスは、Oracle BPMコンポジット・アプリケーションの新規リビジョンで作成した新規インスタンスと並んで実行されます。

互換性のないプロセスのデプロイメントを強制します

このオプションは、Oracle BPM Suiteコンポジットに対してのみ表示されます。

「再デプロイ後にインスタンスの実行を続行します。」が選択されている場合、このオプションが表示されます。互換性のないBPMプロセスのデプロイメントを強制するには、このチェック・ボックスを選択します。BPMプロセスを含むコンポジットが上書きされる場合、上書きされるBPMプロセスがデプロイされるプロセスと互換性があるかどうかがチェックされます。互換性がある場合、これらのプロセスのインスタンスの実行は失効としてマークされず、デプロイメントは正常に実行されます。互換性がない場合、このチェック・ボックスを選択しないとデプロイメントは失敗します。

すべてのコンポジットにSOA構成プランを使用します

「参照」をクリックして、すべてのコンポジット・アプリケーションに対して使用する同じ構成プランを選択します。このオプションは、複数のコンポジット・アプリケーションをデプロイする場合に使用します。

6. 「次へ」をクリックします。

7. デプロイメント対象として選択したSOAプロジェクトに、ヒューマン・タスク用に定義したタスク・フロー・プロジェクトが含まれている場合は、図43-9に示すように、「タスクフロー・デプロイメント」ダイアログが表示されます。
それ以外の場合は、ステップ10に進みます。

ヒューマン・タスクのタスク・フロー・フォームに対するEnterprise Resource Archive(EAR)ファイルを作成または構成します。EARファイルは、このダイアログの「デプロイ可能なタスクフロー・プロジェクト」表で選択したWeb Resource Archive(WAR)プロファイルで構成されます。

図43-9 「タスクフロー・デプロイメント」ページ

「図43-9 「タスクフロー・デプロイメント」ページ」の説明

8. 表43-7の説明に従って、環境に適した値を指定します。

表43-7 「タスクフロー・デプロイメント」ダイアログ

フィールド

説明

アプリケーション名

デプロイメントに含めるEARファイルを選択します。このリストには、現行のOracle JDeveloperアプリケーションで使用可能なすべてのEARプロファイルが表示されます。これらのEARプロファイルは、EARプロファイルを作成し、「デプロイ可能なタスクフロー・プロジェクト」表で選択したWARプロファイルに基づいてデプロイする際に、テンプレートとして使用されます。デプロイする任意のEARプロファイル名を入力することもできます。

特定のコンポジット・リビジョンおよびパーティションにデプロイ

コンポジットのリビジョン番号をEARファイル名に追加する場合に選択します。このチェック・ボックスを選択すると、コンポジット・リビジョンがEAR名、WARプロファイルおよびコンテキスト・ルートに含められます。このオプションによって、コンポジット・リビジョン固有のアプリケーションをデプロイできます。

生成されたプロファイルをアプリケーションに追加

生成されたEARプロファイルを現行のSOAコンポジット・アプリケーションのEARデプロイメント・プロファイル・リストに追加する場合に選択します。生成されたEARプロファイルを保持するには、アプリケーションの保存が必要になる場合があります。デプロイメント・プロファイルが使用可能になると、「アプリケーション」→「デプロイ」の順に選択してEARプロファイルをデプロイできます。タスク・フロー・アプリケーションのデプロイメントのみが必要な場合は、このオプションを使用すると、SOAデプロイ・ウィザードを使用する必要がありません。

既存のアプリケーションを上書き

サーバー上のEARファイルの既存のバージョンを上書きする場合に選択します。

デプロイ可能なタスクフロー・プロジェクト

EARファイルに含めるタスク・フロー・プロジェクトのWARプロファイルを選択します。タスク・フロー・プロジェクトのWARプロファイルは、そのタスク・フロー・プロジェクトに関連するヒューマン・タスクを含むコンポジットに従ってグループ化されます。「生成されたプロファイルをアプリケーションに追加」チェック・ボックスが選択されている場合は、WARのコンテキスト・ルートが変更されます。

注意: WARプロファイルを選択しないと、タスク・フローはデプロイされません。

- プロジェクト

「デプロイ可能なタスクフロー・プロジェクト」のリストから選択するか、または「プロジェクト」チェック・ボックスを選択して使用可能なすべてのタスク・フローを選択します。タスク・フローは、デプロイメント対象として選択したSOAプロジェクトまたはバンドルに含まれるコンポジットに基づいて表示されます。

- WARプロファイル

タスク・フロー・プロジェクトのWARファイルを選択します。選択できるのは、最近作成または変更されたヒューマン・タスクのタスク・フローのみです。

- アプリケーション・コンテキスト・ルート

WARプロファイルの選択内容に基づいて、アプリケーション・コンテキスト・ルート・ディレクトリが表示されます。

ヒューマン・タスク用のタスク・フォームをデプロイすると、通知の一部として、タスク・フォームの詳細が電子メールに含められます。動的なペイロードの場合、この電子メールに含まれるペイロードの内容は、特定の時点のものとなります。

タスク・フローのあるSOAコンポジット・アプリケーションの複数パーティション環境へのデプロイに関する詳細は、第43.7.1.4項「タスク・フローのあるヒューマン・タスク・コンポジットのパーティションへのデプロイに関する注意事項」を参照してください。

9. 「次へ」をクリックします。

10. 手順3で、アプリケーション・サーバーへのデプロイを選択した場合は、「サーバーの選択」ページが表示されます。このページでは、Oracle WebLogic Serverなどのアプリケーション・サーバーへの既存の接続をリストから選択するか、または「追加」アイコンをクリックしてサーバーへの新規接続を作成します。図43-10に詳細を示します。

それ以外の場合は、ステップ15に進みます。

図43-10 「サーバーの選択」ページ

「図43-10 「サーバーの選択」ページ」の説明

11. 「次へ」をクリックします。

12. このアーカイブをデプロイするターゲットSOAサーバーを選択します。複数のサーバーまたはクラスタ・ノードがある場合は、1つまたは複数のサーバーあるいはノードへのデプロイを選択します。図43-11に詳細を示します。

13. このアーカイブをデプロイするパーティションを選択します。サーバーにパーティションがない場合、このアーカイブはデプロイできません。また、サーバーが実行中の状態でない場合も、このアーカイブはデプロイできません。デフォルトでは、Oracle SOA Suiteには、defaultという名前のパーティションが自動的に含まれています。パーティションは、Oracle Enterprise Manager Fusion Middleware Controlの「パーティションの管理」ページで作成します。

注意:

タスク・マップ属性(以前のフレックス・フィールド・マッピング)およびルール(例: 休暇ルール)などのヒューマン・ワークフロー・アーティファクトは、タスク定義のネームスペースに基づいて定義されます。そのため、ヒューマン・ワークフロー・タスクのあるSOAコンポジット・アプリケーションを複数のパーティションにデプロイする場合は、次の問題が発生します。

- タスク定義タイプが同じ場合は、1つのパーティションで定義されたマップ属性は他のパーティションでも参照できます。

- 1つのパーティションのタスク定義で定義されたルールは、他のパーティションの同じ定義に適用できます。

図43-11 「SOAサーバー」ページ

「図43-11 「SOAサーバー」ページ」の説明

14. 「次へ」をクリックします。

15. 図43-12に示されている「サマリー」ページでアーカイブの詳細を確認し、「終了」をクリックします。

図43-12 「サマリー」ページ

「図43-12 「サマリー」ページ」の説明

16. 手順3で、アプリケーション・サーバーへのデプロイを選択した場合は、Oracle JDeveloperの下部にあるデプロイメント・ログ・ウィンドウに表示されるメッセージを確認します。

17. ユーザー名とパスワードを入力し、「OK」をクリックします。

デプロイメントに成功した場合は、次の処理が実行されます。

- SOAプロジェクト用のJARファイルが、Oracle JDeveloperの「deploy」フォルダの下に作成されます。ネーミング規則はsca_composite_name_revrevision_number.jarです。

- プロジェクトが、「リソース・パレット」の「application_server_connection_name」→「SOA」→「SOA_server_name」→「partition_name」の下に表示されます。

- プロジェクトが、「アプリケーション・サーバー・ナビゲータ」の「application_server_connection_name」→「SOA」→「SOA_server_name」→「partition_name」の下に表示されます。

これで、Oracle Enterprise Manager Fusion Middleware Controlからアプリケーションを監視できるようになります。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

デプロイメントに失敗した場合は、デプロイメント・ログ・ウィンドウに表示されているメッセージを確認して、修正処理を実行してください。詳細は、第43.9項「テストおよびトラブルシューティング」を参照してください。

パーティションの作成の詳細は、次のドキュメントを参照してください。

- 第43.7.6項「antスクリプトを使用したSOAコンポジット・アプリケーションの管理方法」

- Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド

- 『Oracle Fusion Middleware WebLogic Scripting Toolコマンド・リファレンス』

注意:

同じバージョンのSOAコンポジット・アプリケーションを再デプロイする場合、コンポジット名は変更できません。「構成のデプロイ」ページで「同じリビジョンIDで既存のコンポジットを上書きします。」チェック・ボックスを選択した場合は、同じリビジョン番号でデプロイできます。

43.7.1.4 タスク・フローのあるヒューマン・タスク・コンポジットのパーティションへのデプロイに関する注意事項

タスク・フローのあるSOAコンポジット・アプリケーションをOracle JDeveloperから複数パーティション環境にデプロイするには、デプロイ先パーティションがSOAコンポジット・アプリケーションのデプロイ先と同じであるタスク・フローを選択します。

EARプロファイル(EARデプロイヤを使用してタスク・フローをデプロイ)のみを使用してデプロイしたタスク・フローの場合、そのタスク・フローはパーティションに非対応です。したがって、生成されるEARファイルにパーティション名が含まれるように、hwtaskflow.xmlファイルを変更する必要があります(ファイルのプロジェクト・バージョンは変更されずに残ります)。このファイルはTaskFormプロジェクトのadfmsrcディレクトリの下に配置されます(例: HelpDeskRequestTaskFlow\adfmsrc\hwtaskflow.xml)。例43-5に詳細を示します。

例43-5 hwtaskflow.xmlファイルの変更

<hwTaskFlows
xmlns="http://xmlns.oracle.com/bpel/workflow/hwTaskFlowProperties">
<ApplicationName>worklist</ApplicationName>
<LookupType>LOCAL</LookupType>
<TaskFlowDeploy>false</TaskFlowDeploy>
<PartitionName>partition2</PartitionName>

なお、他のパーティションで同じタスク・フロー・プロジェクトを再利用する場合は、Webコンテキスト・ルートを変更する必要があります。

43.7.2 Oracle JDeveloperでの複数のSOAコンポジット・アプリケーションのデプロイ方法

SOAバンドル・プロファイルを使用して、複数のSOAコンポジット・アプリケーションをOracle WebLogic Serverなどのアプリケーション・サーバーに同時にデプロイできます。このプロファイルにより、1つ以上のSARプロファイルをバンドルに含めて、そのバンドルをアプリケーション・サーバーにデプロイできます。

注意:

- この項では、アプリケーション・サーバー接続が作成済であることを前提にしています。作成していない場合は、第43.7.1.1項「アプリケーション・サーバー接続の作成」で手順を参照してください。

- 同じSOAバンドル・プロファイル内で相互に依存している複数のSOAアプリケーションはデプロイできません。たとえば、アプリケーションAがアプリケーションBをコールする場合は、最初にアプリケーションBを個別にデプロイする必要があります。

複数のSOAコンポジット・アプリケーションをデプロイする手順は、次のとおりです。

1. 図43-13に示すように、「アプリケーション」メニューから「アプリケーション・プロパティ」を選択します。

図43-13 「アプリケーション・プロパティ」

「図43-13 「アプリケーション・プロパティ」」の説明

2. 「アプリケーション・プロパティ」ダイアログで、「デプロイメント」をクリックします。

3. 「新規」をクリックします。
「デプロイメント・プロファイルの作成」ダイアログが表示されます。

4. 「アーカイブ・タイプ」リストから、「SOAバンドル」を選択します。

5. 「名前」フィールドに、名前を入力します。
図43-14に詳細を示します。

図43-14 「SOAバンドル」の選択

「図43-14 「SOAバンドル」の選択」の説明

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

7. 左側のナビゲータで、「依存性」ノードを選択します。

8. 図43-15に示すように、このバンドルに含めるSARを選択します。

図43-15 SARの選択

「図43-15 SARの選択」の説明

9. 「OK」をクリックします。

10. 「OK」をクリックして「アプリケーション・プロパティ」ダイアログを閉じます。

11. 「アプリケーション」メニューを再度選択し、「デプロイ」→「SOA_Bundle_Name」の順に選択します。
これによりデプロイメント・ウィザードが起動します。

12. 指定する値に関する詳細は、ステップ3を参照してください。

43.7.3 Oracle JDeveloperでの複数のSOAコンポジット・アプリケーション間の共有データのデプロイ方法および使用方法

この項では、複数のSOAコンポジット・アプリケーション間でWSDL、XSD、および他のファイル・タイプなど共有データをデプロイおよび使用する方法について説明します。

共有データは、アプリケーション・サーバー上のSOAインフラストラクチャにJARファイルとしてデプロイされます。JARファイルには、共有するすべてのリソースが含まれている必要があります。Oracle JDeveloperでは、共有アーティファクト・アーカイブを作成するためのJARプロファイルを作成できます。

すべての共有データは、サーバー上の既存のSOAインフラストラクチャ・パーティションにデプロイされます。このデータは、/appsネームスペースの下にデプロイされます。たとえば、JARファイルにMyProject/xsd/MySchema.xsdファイルがある場合、このファイルはサーバー上の/appsネームスペースの下にデプロイされます。Oracle JDeveloperでSOA-MDS接続を使用してこのアーティファクトを参照する場合、URLはoramds:/apps/MyProject/xsd/MySchema.xsdになります。

注意:

- 常に、/appsの場所にデプロイします。ディレクトリ階層は、デプロイするJARファイル内に存在している必要があります。最初にOracle MDSリポジトリ内にディレクトリ階層を作成してから、その場所にJARファイルをデプロイしないでください。たとえば、/apps/demo/credit cardにデプロイするには、JARファイル内にdemo/credit cardディレクトリ階層が含まれている必要があります。

- ピリオドから始まるファイル(.designerなど)は、複数のSOAコンポジット・アプリケーション間で共有できません。

この項では、次のタスクの実行方法について説明します。

- JARプロファイルの作成および共有するアーティファクトの組込み

- JARプロファイルを組み込むSOAバンドルの作成

- アプリケーション・サーバーへのSOAバンドルのデプロイ

43.7.3.1 JARプロファイルの作成および共有するアーティファクトの組込み

JARプロファイルを作成し、共有するアーティファクトを組み込む手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、SOAプロジェクトを右クリックします。

2. 「プロジェクト・プロパティ」を選択します。
「プロジェクト・プロパティ」ダイアログが表示されます。

3. 左側のナビゲーション・ツリーにある「デプロイメント」をクリックします。

4. 「新規」をクリックします。
「デプロイメント・プロファイルの作成」ダイアログが表示されます。

5. 「アーカイブ・タイプ」リストから、「JARファイル」を選択します。

6. 「名前」フィールドに、名前を入力します(この例ではshared_archiveが入力されています)。
「デプロイメント・プロファイルの作成」ダイアログは、図43-16のようになります。

図43-16 JARファイルの選択

「図43-16 JARファイルの選択」の説明

7. 「OK」をクリックします。
「JARデプロイメント・プロファイルのプロパティ」ダイアログが表示されます。

8. 左側のナビゲーション・ツリーから「JARオプション」を選択します。

9. 図43-17に示すように、「manifestファイルを含める(META-INF/MANIFEST.MF)」の選択を解除します。
選択を解除すると、アーカイブ・ジェネレータによってmanifestファイル(META-INF/MANIFEST.MF)がJARファイルに追加されることはありません。

図43-17 JARファイルのオプション

「図43-17 JARファイルのオプション」の説明

10. 左側のナビゲーション・ツリーから、「ファイル・グループ」→「プロジェクトの出力」→「コントリビュータ」の順に選択します。

11. 図43-18に示すように、「プロジェクトの出力ディレクトリ」および「プロジェクトの依存性」オプションの選択を解除します。
選択を解除すると、アーカイブ・ジェネレータによって、プロジェクトの出力およびプロジェクトの依存性の内容がアーカイブに追加されることはありません。

図43-18 「コントリビュータ」

「図43-18 「コントリビュータ」」の説明

12. 「追加」をクリックして、新しいコントリビュータを追加します。
「コントリビュータの追加」ダイアログが表示されます。このダイアログで、アーティファクトをアーカイブに追加できます。

13. 「参照」をクリックします。

14. 図43-19に示すように、アーティファクトが存在するフォルダを選択します。この選択によって、アーカイブ内のアーティファクトの階層も決まります。

図43-19 アーティファクトの選択

「図43-19 アーティファクトの選択」の説明

15. 「選択」をクリックして、「ディレクトリの選択」ダイアログを閉じます。

16. 「OK」をクリックして「コントリビュータの追加」ダイアログを閉じます。

17. 左側のナビゲーション・ツリーから、「ファイル・グループ」→「プロジェクトの出力」→「フィルタ」の順に選択します。

18. 図43-20に示すように、アーカイブに組み込むアーティファクトのみ選択します。この例では、次のXSDファイルが含まれます。

- SOADemoComposite/xsd/DemoProcess.xsd

- SOADemoComposite/xsd/Quote.xsd

- SOADemoComposite/xsd/VacationRequest.xsd

図43-20 アーカイブに組み込むアーティファクト

「図43-20 アーカイブに組み込むアーティファクト」の説明

19. 「OK」をクリックして、変更内容をJARデプロイメント・プロファイルに保存します。

20. 「OK」をクリックして、新規デプロイメント・プロファイルを保存します。

21. 「ファイル」メイン・メニューから「すべて保存」を選択します。

43.7.3.2 JARプロファイルを組み込むSOAバンドルの作成

JARプロファイルを組み込むSOAバンドルを作成する手順は、次のとおりです。

1. 「アプリケーション・メニュー」から、「アプリケーション・プロパティ」→「デプロイメント」の順に選択します。

2. 「新規」をクリックして、SOAバンドル・プロファイルを作成します。
「デプロイメント・プロファイルの作成」ダイアログが表示されます。

3. 「アーカイブ・タイプ」リストから、「SOAバンドル」を選択します。バンドルは、複数のSOAコンポジット・アプリケーションの集まりです。

4. 「名前」フィールドに名前(例ではsharedArtifactBundle)を入力します。図43-21に詳細を示します。

図43-21 SOAバンドルの作成

「図43-21 SOAバンドルの作成」の説明

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

6. 左側のナビゲーション・ツリーから「依存性」を選択します。

7. 以前に作成したJARファイルおよびSOA-SARプロファイルを選択します(この例では、それぞれshared_archiveおよびsharedArtifactBundle)。JAR、SOA-SARまたは両方のいずれかを選択できます。図43-22に詳細を示します。

図43-22 デプロイメント・プロファイルの依存性

「図43-22 デプロイメント・プロファイルの依存性」の説明

8. 「OK」をクリックして、SOAバンドル・デプロイメント・プロファイルの変更内容を保存します。

9. 「OK」をクリックして、新規デプロイメント・プロファイルを保存します。

10. 「ファイル」メイン・メニューから「すべて保存」を選択します。

43.7.3.3 Oracle JDeveloperでのSOAバンドルのデプロイ

Oracle JDeveloperでSOAバンドルをデプロイする手順は、次のとおりです。

1. 「アプリケーション」メニューを右クリックし、「デプロイ」→「SOA_Bundle_Name」の順に選択します。
これによりデプロイメント・ウィザードが起動します。

2. 指定するレスポンスの詳細は、第43.7.1.3項「プロファイルのデプロイ」の手順3を参照してください。
これによって、SOAバンドルがアプリケーション・サーバーにデプロイされます(共有アーティファクトがOracle SOA SuiteのOracle MDSリポジトリ・データベースにデプロイされます)。

antでSOAバンドルをデプロイする手順は、次のとおりです。

第43.7.6.4項「SOAコンポジット・アプリケーションをデプロイするためのantの使用方法」を参照してください。

43.7.3.4 共有データの使用

この項では、第43.7.3項「Oracle JDeveloperでの複数のSOAコンポジット・アプリケーション間の共有データのデプロイ方法および使用方法」で作成した共有データを参照および選択する方法について説明します。

43.7.3.4.1 SOA-MDS接続の作成

SOA-MDS接続を作成する手順は、次のとおりです。

1. 「ファイル」メニューから、「新規」→「接続」→SOA-MDS接続の順に選択します。
図43-23に示す「SOA-MDS接続の作成」ダイアログが表示されます。

図43-23 「SOA-MDS接続の作成」ダイアログ

「図43-23 「SOA-MDS接続の作成」ダイアログ」の説明

2. 表43-8に示すように、環境に適した値を指定します。

表43-8 「SOA-MDS接続の作成」ダイアログ

フィールド

説明

接続の作成

「IDE接続」が選択されていることを確認します。このオプションによって、接続が「リソース・パレット」に表示され、複数のアプリケーションで使用可能になります。

「アプリケーション・リソース」オプションで接続を作成することはできません。この選択は無効化されています。

接続名

接続名を入力します。この接続の作成が正常に完了すると、この名前が「リソース・パレット」のSOA-MDSの下に表示されます。

接続タイプ

接続タイプを選択します。Oracle MDSリポジトリはファイル・ベースまたはデータベース・ベースのいずれかです。選択内容に基づいてダイアログがリフレッシュされます。

- DBベースMDS
ほとんどの本番環境では、データベース・ベース・リポジトリを使用します。Oracle SOA Suiteなど、ほとんどのコンポーネントではスキーマがデータベースにインストールされている必要があるため、データベース・ベース・リポジトリを使用する必要があります。データベース・ベース・リポジトリを使用するには、最初に、このリポジトリをリポジトリ作成ユーティリティを使用して作成する必要があります。

- ファイル・ベースMDS

データベース接続を選択します。

既存の接続を選択するか、MDSスキーマが含まれているOracle SOA Suiteデータベースへの新規接続を作成します。

MDSパーティションの選択

MDSパーティション(例: soa-infra)を選択します。

接続のテスト

SOA-MDS接続をテストする場合にクリックします。

注意: 接続テストに失敗した場合でも接続は作成されます。

ステータス

接続テストのステータスが表示されます。

3. 「OK」をクリックします。
これで、「リソース・パレット」で接続を参照し、/appsノードの下に表示される共有アーティファクトを確認できます。

43.7.3.4.2 BPELプロセスの作成

これで、様々なSOAコンポジット・アプリケーションから共有データを参照し、使用できる状態になりました。この例では、様々なアプリケーションにBPELプロセス・サービス・コンポーネントを作成します。

BPELプロセスを作成する手順は、次のとおりです。

1. 様々なアプリケーションに新規BPELプロセス・サービス・コンポーネントを作成します。

2. 「BPELプロセスの作成」ダイアログで、「入力」フィールドの右側にある「参照」アイコンをクリックします。
「タイプ・チューザ」ダイアログが表示されます。

3. 右上隅にある「スキーマ・ファイルのインポート」アイコンをクリックします。
「スキーマ・ファイルのインポート」ダイアログが表示されます。

4. 「URL」フィールドの右側にある「参照」アイコンをクリックします。
「SOAリソース・ブラウザ」ダイアログが表示されます。

5. ダイアログ上部にあるリストから、「リソース・パレット」を選択します。

6. 図43-24に示すように、共有データを選択します。この例では、第43.7.3.1項「JARプロファイルの作成および共有するアーティファクトの組込み」の手順18でアーカイブへの組込みを選択したQuote.xsdファイルが選択されています。

図43-24 「SOAリソース・ブラウザ」の共有データ

「図43-24 「SOAリソース・ブラウザ」の共有データ」の説明

7. 「OK」をクリックします。

8. 「スキーマ・ファイルのインポート」ダイアログで「OK」をクリックします。

9. 「タイプ・チューザ」ダイアログで、Quote.xsdのノード(この例ではQuoteRequest)を選択し、「OK」をクリックします。

10. 「BPELプロセスの作成」ダイアログで、「OK」をクリックして作成を完了します。

11. 「アプリケーション・ナビゲータ」で、BPELプロセスのWSDLファイルを選択します。

12. 「ソース」をクリックします。
WSDLファイルには、次の定義が含まれています。

<wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://www.mycompany.com/ns/salesquote"
schemaLocation="oramds:/apps/SOADemoComposite/xsd/Quote.xsd" />
</schema>
</wsdl:types>

13. 必要に応じて、BPELプロセスのモデル化を続行します。

14. BPELプロセスを組み込んだSOAコンポジット・アプリケーションをデプロイします。

43.7.4 Oracle JDeveloperでの既存のSOAアーカイブのデプロイ方法

Oracle JDeveloperの「アプリケーション・サーバー・ナビゲータ」から、既存のSOAアーカイブをデプロイできます。

注意:

- アーカイブは存在している必要があります。「SOAアーカイブのデプロイ」ダイアログではアーカイブを作成できません。

- ここで説明する手順は、SOAインフラストラクチャがデプロイされたOracle WebLogic管理サーバーまたはその他のサポートされているアプリケーション・サーバーへのアプリケーション・サーバー接続が作成済であることを前提にしています。Oracle WebLogic管理サーバーへの接続を作成すると、同じドメインにデプロイされたSOAコンポジット・アプリケーションを参照できます。「ファイル」メイン・メニューから、「新規」→「接続」→「アプリケーション・サーバー接続」の順に選択して、接続を作成します。

Oracle JDeveloperから既存のSOAアーカイブをデプロイする手順は、次のとおりです。

1. 「表示」メニューから、「アプリケーション・サーバー・ナビゲータ」を選択します。

2. 接続名を展開します。

3. 「SOA」フォルダを右クリックします。

4. 「SOAアーカイブのデプロイ」を選択します。
図43-25に示す「SOAアーカイブのデプロイ」ダイアログが表示されます。

図43-25 「SOAアーカイブのデプロイ」ダイアログ

「図43-25 「SOAアーカイブのデプロイ」ダイアログ」の説明

5. 表43-9の説明に従って、環境に適した値を指定します。

表43-9 「デプロイメント・プロファイルの作成」ダイアログのフィールドと値

フィールド

説明

SOAサーバー

アーカイブをデプロイするSOAサーバーを選択します。

パーティション

アーカイブをデプロイするパーティションを選択します。サーバーにパーティションがない場合、このアーカイブはデプロイできません。デフォルトでは、Oracle SOA Suiteには、defaultという名前のパーティションが自動的に含まれています。

ステータス

サーバーのステータスが表示されます。サーバーが実行中の状態でない場合、このアーカイブはデプロイできません。

サーバーURL

サーバーのURLが表示されます。

このアーカイブをデプロイするターゲットSOAサーバーを選択します

アーカイブをデプロイするOracle WebLogic管理サーバーを選択します。

SOAアーカイブ

「参照」をクリックして、ビルトインのSOAコンポジット・アプリケーション・アーカイブを選択します。アーカイブは、単一アプリケーションのJARファイル、または複数のアプリケーションを含むSOAバンドルZIPファイルで構成されています。

構成プラン(オプション)

「参照」をクリックして、SOAコンポジット・アプリケーション・アーカイブに添付する構成プランを選択します。構成プランにより、様々な環境で使用するURLおよびプロパティ値を定義できます。プロセスのデプロイメント時に、構成プランを使用してSOAプロジェクトを検索し、プロジェクトを次に進むターゲット環境に適応させるために置換する必要がある値を検索します。

構成プランの作成方法については、第43.6.1.4項「Oracle JDeveloperでの構成プランの作成方法」または第43.6.1.5項「WLSTユーティリティを使用した構成プランの作成方法」を参照してください。

コンポジット・リビジョンをデフォルトとしてマークします。

新規リビジョンをデフォルトにしない場合は、このボックスの選択を解除できます。デフォルトでは、新しくデプロイしたコンポジット・リビジョンがデフォルトになります。このリビジョンは、新しいリクエストを受信するとインスタンス化されます。

同じリビジョンIDで既存のコンポジットを上書きします。

同じリビジョンIDを持つ既存のSOAコンポジット・アプリケーションを上書き(再デプロイ)する場合に選択します。このアクションを実行すると、次のような結果になります。

- SOAコンポジット・アプリケーションの新規バージョン1.0が再デプロイされ、以前にデプロイした1.0バージョンが上書きされます。

- 現在デプロイされているこのリビジョンの古いバージョンは削除(上書き)されます。

- 現在デプロイされているリビジョンの古いバージョンに実行中のインスタンスがある場合、それらのインスタンスの状態は「失効」に変更されます。

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

「アプリケーション・サーバー・ナビゲータ」からSOAコンポジット・アプリケーションをデプロイおよびテストする方法の詳細は、第2.8項「SOAコンポジット・アプリケーションの管理とテスト」を参照してください。

43.7.5 WLSTユーティリティを使用したSOAコンポジット・アプリケーションの管理方法

WLSTユーティリティを使用して、SOAコンポジット・アプリケーションを管理できます。このユーティリティは、自動化に適しており、既存リリースのプロセスに容易に統合できます。手順は、『Oracle Fusion Middleware WebLogic Scripting Tool Command Reference』を参照してください。

43.7.6 antスクリプトを使用したSOAコンポジット・アプリケーションの管理方法

antユーティリティを使用して、SOAコンポジット・アプリケーションを管理できます。antはJavaベースのビルド・ツールであり、SOAコンポジット・アプリケーションを管理するためにOracle SOA Suiteで使用されます。構成ファイルはXMLベースであり、様々なタスクが実行されるターゲット・ツリーをコールします。 ant ユーティリティは、自動化に適しており、既存リリースのプロセスに容易に統合できます。

表43-10に、Middleware_Home\SOA_Suite_Home\binディレクトリで使用可能なantスクリプトを示します。

表43-10 ant管理スクリプト

スクリプト

説明

ant-sca-test.xml

SOAコンポジット・アプリケーションのテストを自動化します。

ant-sca-compile.xml

SOAコンポジット・アプリケーションをコンパイルします。

ant-sca-package.xml

SOAコンポジット・アプリケーションをコンポジットSARファイルにパッケージ化します。

ant-sca-deploy.xml

SOAコンポジット・アプリケーションをデプロイします。

ant-sca-deploy.xml undeploy

SOAコンポジット・アプリケーションをアンデプロイします。

ant-sca-deploy.xml exportComposite

コンポジットをSARファイルにエクスポートします。

ant-sca-deploy.xml exportUpdates

コンポジットのデプロイメント後の変更をJARファイルにエクスポートします。

ant-sca-deploy.xml importUpdates

コンポジットのデプロイメント後の変更をインポートします。

ant-sca-deploy.xml exportSharedData

指定したパターンの共有データをJARファイルにエクスポートします。

ant-sca-deploy.xml removeSharedData

トップレベルの共有データ・フォルダを削除します。

ant-sca-mgmt.xml startComposite

SOAコンポジット・アプリケーションを起動します。

ant-sca-mgmt.xml stopComposite

SOAコンポジット・アプリケーションを停止します。

ant-sca-mgmt.xml activateComposite

SOAコンポジット・アプリケーションをアクティブ化します。

ant-sca-mgmt.xml retireComposite

SOAコンポジット・アプリケーションをリタイアします。

ant-sca-mgmt.xml assignDefaultComposite

デフォルトのリビジョン・バージョンを割り当てます。

ant-sca-mgmt.xml listDeployedComposites

デプロイ済のSOAコンポジット・アプリケーションが一覧表示されます。

ant-sca-mgmt.xml listPartitions

SOAインフラストラクチャで使用可能なすべてのパーティションが一覧表示されます。

ant-sca-mgmt.xml listCompositesInPartition

パーティション内のすべてのコンポジットが一覧表示されます。

ant-sca-mgmt.xml createPartition

SOAインフラストラクチャにパーティションを作成します。

ant-sca-mgmt.xml deletePartition

パーティションを削除する前に、パーティション内のすべてのコンポジットをアンデプロイします。

ant-sca-mgmt.xml startCompositesInPartition

パーティション内のすべてのコンポジットを起動します。

ant-sca-mgmt.xml stopCompositesInPartition

パーティション内のすべてのコンポジットを停止します。

ant-sca-mgmt.xml activateCompositesInPartition

パーティション内のすべてのコンポジットをアクティブ化します。

ant-sca-mgmt.xml retireCompositesInPartition

パーティション内のすべてのコンポジットをリタイアします。

ant-sca-upgrade.xml

BPELおよびOracle Enterprise Service Bus (ESB)リリース10.1.3のメタデータをリリース11gに移行します。

注意: プロジェクト内にJavaコードが含まれている場合、11gのコンパイラで正常にコンパイルするには、コードを手動で変更する必要があります。BPELプロセスのインスタンス・データについては、10.1.3 Oracle BPEL Serverで使用されるアクティブ・データは移行されません。

antの詳細は、次のURLを参照してください。

http://ant.apache.org

43.7.6.1 SOAコンポジット・アプリケーションのテストを自動化するためのantの使用方法

例43-6に、テスト・ケースの実行例を示します。テスト・ケースを使用すると、SOAコンポジット・アプリケーションのテストを自動化できます。

例43-6 アプリケーションのテスト

ant -f ant-sca-test.xml -Dscatest.input=MyComposite
-Djndi.properties=/home/jdoe/jndi.properties

表43-11に、構文を示します。

表43-11 antテスト・コマンド

引数

定義

scatest

使用可能な入力は、次のとおりです。

- java.passed.home
JAVA_HOMEの環境値から取得されます。上書きする場合は、この入力を指定します。

- wl_home
Oracle WebLogic Serverホームの場所です(デフォルトはOracle_Home/.../wlserver_10.3)。

- scatest.input
テストするコンポジットの名前。

- scatest.format
出力ファイルのフォーマット(デフォルトはnative。他のオプションはjunit)。

- scatest.result
出力ファイルを格納する結果のディレクトリ(デフォルトはtemp_dir/out)。

- jndi.properties.input
使用するjndi.propertiesファイル。

jndi. properties

JNDIプロパティ・ファイルの絶対パス。これは、サーバーに接続するためのJNDIプロパティが含まれているプロパティ・ファイルです。例:

java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
java.naming.provider.url=t3://myserver.us.example.com:8001/soa-infra
java.naming.security.principal=weblogic
dedicated.connection=true
dedicated.rmicontext=true

(テスト・スイート内の)コンポジット・テストはSOAインフラストラクチャで実行されるため、このプロパティ・ファイルには接続情報が含まれています。この例では、これらのプロパティによって、myserver.us.example.com、ポート8001でホストされるSOAインフラストラクチャへの接続が作成され、ユーザー名weblogicが使用されます。パスワードについては、指定を求めるプロンプトが表示されます。

通常は、1つのjndi.propertiesファイルを(たとえば/home/myhome/jndi.propertiesに)作成し、そのファイルをすべてのテスト実行に対して使用します。

SOAコンポジット・アプリケーションにおけるテストの作成方法および実行方法の詳細は、第44章「SOAコンポジット・アプリケーションのテストの自動化」および『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

43.7.6.2 SOAコンポジット・アプリケーションをコンパイルするためのantの使用方法

例43-7に、SOAコンポジット・アプリケーションのコンパイル例を示します。このコンパイルでは、アプリケーションの構造および構文が検証されます。

例43-7 アプリケーションのコンパイル

ant -f ant-sca-compile.xml
-Dscac.input=/myApplication/myComposite/composite.xml

表43-12に、構文を示します。

表43-12 antコンパイル・コマンド

引数

定義

scac

使用可能な入力は、次のとおりです。

- java.passed.home
JAVA_HOMEの環境値から取得されます。上書きする場合は、この入力を指定します。

- wl_home
Oracle WebLogic Serverホームの場所です(デフォルトはOracle_Home/.../wlserver_10.3)。

- scac.input
コンパイルするcomposite.xmlファイル。

- scac.output
scacの結果が格納される出力ファイル(デフォルトはtemp_dir/out.xml)。

- scac.error
scacのエラーが格納されるファイル(デフォルトはtemp_dir/out.err)。

- scac.application.home
.adfディレクトリが内部に含まれている、コンパイル中のSOAコンポジット・アプリケーションのOracle JDeveloperアプリケーション・ホーム・ディレクトリ。

- scac.displayLevel
scac.outputファイルに書き込まれるログのレベルを制御します。値は、1、2または3のいずれかです(デフォルトは1)。

43.7.6.3 コンポジットSARファイルにSOAコンポジット・アプリケーションをパッケージ化するためのantの使用方法

例43-8に、SOAコンポジット・アプリケーションをコンポジットSARファイルにパッケージ化する例を示します。このコマンドの結果はSOAアーカイブです。結果ファイルの正確な場所については、コマンドの出力を確認してください。

例43-8 アプリケーションのパッケージ化

ant -f ant-sca-package.xml
-DcompositeDir=C:\demo\end2end-105-POProcessing\po\solutions\ch9\POProcessing\POPr
ocessing
-DcompositeName=POProcessing
-Drevision=6-cmdline
-Dsca.application.home=C:\demo\end2end-105-POProcessing\po\solutions\ch9\POProces
sing

表43-13に、構文を示します。

表43-13 antパッケージ化コマンド

引数

定義

compositeDir

コンポジット・アーティファクトが含まれるディレクトリの絶対パス。

compositeName

コンポジットの名前。

revision

コンポジットのリビジョンID。

sca.application.home

アプリケーション・ホーム・ディレクトリの絶対パス。このプロパティは、SOAコンポジット・アプリケーションがMDSリポジトリ内の共有アーティファクトにアクセスする場合に必要です。それ以外の場合は、オプションです。

oracle.home

オプション。oracle.homeプロパティ。

43.7.6.4 SOAコンポジット・アプリケーションをデプロイするためのantの使用方法

例43-9に、SOAコンポジット・アプリケーションのデプロイ例を示します。このコマンドを使用して、複数のSOAコンポジット・アプリケーション間でWSDL、XSD、および他のファイル・タイプなど共有データをデプロイすることもできます。共有データの詳細は、第43.7.3項「Oracle JDeveloperでの複数のSOAコンポジット・アプリケーション間の共有データのデプロイ方法および使用方法」を参照してください。

例43-9 アプリケーションのデプロイ

ant -f ant-sca-deploy.xml
-DserverURL=http://localhost:8001
-DsarLocation=C:\demo\end2end-105-POProcessing\po\solutions\ch9\POProcessing\POPro
cessing\deploy\sca_POProcessing_rev6-cmdline.jar
-Doverwrite=true
-Duser=weblogic
-DforceDefault=true
-Dconfigplan=C:\demo\end2end-105-POProcessing\po\solutions\ch9\POProcessing\POProc
essing\demed_cfgplan.xml
-Dscac.user.classpath=C:\jarfolder\custom.jar
-Dpartition=partition.name

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-14に、構文を示します。

表43-14 antデプロイメント・コマンド

引数

定義

serverURL

SOAインフラストラクチャ・アプリケーションをホストするサーバーのURL(例: http://myhost10:8001)。

sarLocation

次のいずれかへの絶対パス。

- SARファイル

- 複数のSARを含むZIPファイル

overwrite

オプション。サーバー上の既存のSOAコンポジット・アプリケーションを上書きするかどうかを指定します。

- false(デフォルト): ファイルを上書きしません。

- true: ファイルを上書きします。

user

オプション。コンポジットのデプロイ実行者のサーブレットにアクセスするためのユーザー名(基本認証が構成されている場合)。

password

オプション。コンポジットのデプロイ実行者のサーブレットにアクセスするためのパスワード(基本認証が構成されている場合)。

ユーザー名を入力した場合、ここでパスワードを指定しないとパスワードの入力を求めるプロンプトが表示されます。

forceDefault

オプション。デプロイするバージョンを、そのコンポジット・アプリケーションに対するデフォルト・バージョンとして設定するかどうかを指定します。

- true(デフォルト): 新規コンポジットをデフォルトのコンポジットにします。

- false: 新規コンポジットをデフォルトのコンポジットにしません。

configplan

指定したSARファイル、またはZIPファイルに組み込まれているすべてのSARファイルに適用される構成プランの絶対パス。

sysPropFile

デバッグ用、SSL構成用など、特別なシステム・プロパティの設定に有効なシステム・プロパティ・ファイルを渡します。

ファイル名(例: tmp-sys.properties)を指定した場合は、プロパティを次のように定義できます。

javax.net.debug=all

scac.user.classpath

オプション。外部カスタム・ライブラリの名前。SOAコンポジット・アプリケーションのBPELプロセス・サービス・コンポーネントでカスタムJARファイルを参照している場合は、このプロパティを設定します。

partition

オプション。SOAコンポジット・アプリケーションをデプロイするパーティションの名前。デフォルト値はdefaultです。パーティションを指定しないと、コンポジットはdefaultパーティションに自動的にデプロイされます。

注意:

タスク・マップ属性(以前のフレックス・フィールド・マッピング)およびルール(例: 休暇ルール)などのヒューマン・ワークフロー・アーティファクトは、タスク定義のネームスペースに基づいて定義されます。そのため、ヒューマン・ワークフロー・タスクのあるSOAコンポジット・アプリケーションを複数のパーティションにデプロイする場合は、次の問題が発生します。

- タスク定義タイプが同じ場合は、1つのパーティションで定義されたマップ属性は他のパーティションでも参照できます。

- 1つのパーティションのタスク定義で定義されたルールは、他のパーティションの同じ定義に適用できます。

43.7.6.5 SOAコンポジット・アプリケーションをアンデプロイアーカイブするためのantの使用方法

例43-10に、SOAコンポジット・アプリケーションのアンデプロイ例を示します。

例43-10 SOAコンポジット・アプリケーションのアンデプロイ

ant -f ant-sca-deploy.xml undeploy
-DserverURL=http://localhost:8001
-DcompositeName=POProcessing
-Drevision=rev6-cmdline
-Duser=weblogic
-Dpartition=partition.name

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-15に、構文を示します。

表43-15 antアンデプロイメント・コマンド

引数

定義

serverURL

SOAインフラストラクチャ・アプリケーションをホストするサーバーのURL(例: http://myhost10:7001)。

compositeName

SOAコンポジット・アプリケーションの名前。

revision

SOAコンポジット・アプリケーションのリビジョンID。

user

オプション。コンポジットのデプロイ実行者のサーブレットにアクセスするためのユーザー名(基本認証が構成されている場合)。

ユーザー名を入力すると、対応するパスワードの入力を求めるプロンプトが表示されます。

password

オプション。コンポジットのデプロイ実行者のサーブレットにアクセスするためのパスワード(基本認証が構成されている場合)。

partition

オプション。SOAコンポジット・アプリケーションが置かれているパーティションの名前。デフォルト値はdefaultです。パーティションを指定しないと、SOAコンポジット・アプリケーションのdefaultパーティションが検索されます。他のパーティションは検索されません。

43.7.6.6 SARファイルにコンポジットをエクスポートするためのantの使用方法

例43-11に、SARファイルへのコンポジットのエクスポート例を示します。

例43-11 SARファイルへのコンポジットのエクスポート

ant -f ant-sca-deploy.xml exportComposite -DserverURL=server.url
-DupdateType=update.type -DsarFile=sar.file
-DcompositeName=composite.name -Drevision=revision -Duser=user

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-16に、構文を示します。

表43-16 antエクスポート・コマンド

引数

定義

serverURL

SOAインフラストラクチャ・アプリケーションをホストするサーバーのURL(例: http://myhost:8001)。

updateType

エクスポートに含めるデプロイメント後の変更のタイプ。

- none: デプロイメント後の変更を含めません。

- all: デプロイメント後の変更をすべて含めます。

- property: プロパティ変更を含めます(バインディング・コンポーネント・プロパティ、監査レベル設定やペイロード検証ステータスなどのコンポジット・プロパティ、およびポリシーの添付ファイル)。

- runtime: デプロイメント後のランタイム変更を含めます(ルール・ディクショナリおよびドメイン値マップ(DVM))。

sarFile

生成されるSARファイルの絶対パス。

compositeName

エクスポートするコンポジットの名前。

revision

エクスポートするコンポジットのリビジョン。

user

オプション。サーバーにアクセスするためのユーザー名(基本構成が構成されている場合)。

password

オプション。サーバーにアクセスするためのパスワード(基本構成が構成されている場合)。

例43-12は、デプロイメント後の変更を含めずにコンポジットをエクスポートする方法を示しています。

例43-12 コンポジットのエクスポート(デプロイメント後の変更を含めない場合)

ant -f ant-sca-deploy.xml exportComposite -DserverURL=http://myhost:8001
-DupdateType=none
-DsarFile=/tmp/sca_HelloWorld_rev1.0.jar -DcompositeName=HelloWorld
-Drevision=1.0

例43-13は、デプロイメント後のすべての変更を含めてコンポジットをエクスポートする方法を示しています。

例43-13 コンポジットのエクスポート(デプロイメント後のすべての変更を含める場合)

ant -f ant-sca-deploy.xml exportComposite -DserverURL=http://myhost:8001
-DupdateType=all
-DsarFile=/tmp/sca_HelloWorld_rev1.0-all.jar -DcompositeName=HelloWorld
-Drevision=1.0

例43-14は、デプロイメント後のプロパティ更新を含めてコンポジットをエクスポートする方法を示しています。

例43-14 コンポジットのエクスポート(デプロイメント後のプロパティ更新を含める場合)

ant -f ant-sca-deploy.xml exportComposite -DserverURL=http://myhost:8001
-DupdateType=property
-DsarFile=/tmp/sca_HelloWorld_rev1.0-prop.jar -DcompositeName=HelloWorld
-Drevision=1.0

例43-15は、デプロイメント後のランタイム/メタデータ更新を含めてコンポジットをエクスポートする方法を示しています。

例43-15 コンポジットのエクスポート(デプロイメント後のランタイム/メタデータ更新を含める場合)

ant -f ant-sca-deploy.xml exportComposite -DserverURL=http://myhost:8001
-DupdateType=runtime
-DsarFile=/tmp/sca_HelloWorld_rev1.0-runtime.jar
-DcompositeName=HelloWorld -Drevision=1.0

43.7.6.7 JARファイルにコンポジットのデプロイメント後の変更をエクスポートするためのantの使用方法

例43-16に、コンポジットのデプロイメント後の変更をJARファイルにエクスポートする例を示します。

例43-16 コンポジットのデプロイメント後の変更のJARファイルへのエクスポート

ant -f ant-sca-deploy.xml exportUpdates -DserverURL=server.url
-DupdateType=update.type -DjarFile=jar.file
-DcompositeName=composite.name -Drevision=revision -Duser=user

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-17に、構文を示します。

表43-17 antデプロイメント後エクスポート・コマンド

引数

定義

serverURL

SOAインフラストラクチャ・アプリケーションをホストするサーバーのURL(例: http://myhost:8001)。

updateType

エクスポートするデプロイメント後の変更のタイプ。

- all: デプロイメント後の変更をすべて含めます。

- property: デプロイメント後のプロパティ変更のみを含めます(バインディング・コンポーネント・プロパティ、監査レベル設定やペイロード検証ステータスなどのコンポジット・プロパティ、およびポリシーの添付ファイル)。

- runtime: ランタイム変更のみを含めます(ルール・ディクショナリおよびドメイン値マップ(DVM))。

jarFile

生成されるJARファイルの絶対パス。

compositeName

エクスポートするコンポジットの名前。

revision

エクスポートするコンポジットのリビジョン。

user

オプション。サーバーにアクセスするためのユーザー名(基本構成が構成されている場合)。

password

オプション。サーバーにアクセスするためのパスワード(基本構成が構成されている場合)。

例43-17は、デプロイメント後のすべての更新をエクスポートする方法を示しています。

例43-17 デプロイメント後のすべての更新のエクスポート

ant -f ant-sca-deploy.xml exportUpdates -DserverURL=http://myhost:8001
-DupdateType=all
-DjarFile=/tmp/all-HelloWorld_rev1.0.jar -DcompositeName=HelloWorld
-Drevision=1.0

例43-18は、デプロイメント後のプロパティ更新をエクスポートする方法を示しています。

例43-18 デプロイメント後のプロパティ更新のエクスポート

ant -f ant-sca-deploy.xml exportUpdates -DserverURL=http://myhost:8001
-DupdateType=property
-DjarFile=/tmp/prop-HelloWorld_rev1.0.jar -DcompositeName=HelloWorld
-Drevision=1.0

例43-19は、デプロイメント後のランタイム/メタデータ更新をエクスポートする方法を示しています。

例43-19 デプロイメント後のランタイム/メタデータ更新のエクスポート

ant -f ant-sca-deploy.xml exportUpdates -DserverURL=http://myhost:8001
-DupdateType=runtime
-DjarFile=/tmp/runtime-HelloWorld_rev1.0.jar -DcompositeName=HelloWorld
-Drevision=1.0

43.7.6.8 コンポジットのデプロイメント後の変更をインポートするためのantの使用方法

例43-20に、コンポジットのデプロイメント後の変更をインポートする例を示します。

例43-20 コンポジットのデプロイメント後の変更のインポート

ant -f ant-sca-deploy.xml importUpdates -DserverURL=server.url -DjarFile=jar.file
-DcompositeName=composite.name -Drevision=revision -Duser=user

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-18に、構文を示します。

表43-18 antデプロイメント後インポート・コマンド

引数

定義

serverURL

SOAインフラストラクチャ・アプリケーションをホストするサーバーのURL(例: http://myhost:8001)。

jarFile

デプロイメント後の変更が含まれるJARファイルの絶対パス。

compositeName

デプロイメント後の変更をインポートするコンポジットの名前。

revision

デプロイメント後の変更をインポートするコンポジットのリビジョン。

user

オプション。サーバーにアクセスするためのユーザー名(基本構成が構成されている場合)。

password

オプション。サーバーにアクセスするためのパスワード(基本構成が構成されている場合)。

例43-21は、コンポジットのデプロイメント後の変更をインポートする方法を示しています。

例43-21 コンポジットのデプロイメント後の変更のインポート

ant -f ant-sca-deploy.xml importUpdates -DserverURL=http://myhost:8001
-DjarFile=/tmp/prop-HelloWorld_rev1.0.jar -DcompositeName=HelloWorld
-Drevision=1.0

43.7.6.9 JARファイルへ指定したパターンの共有データをエクスポートするためのantの使用方法

例43-22に、指定したパターンの共有データをJARファイルにエクスポートする例を示します。

例43-22 指定したパターンの共有データのJARファイルへのエクスポート

ant -f ant-sca-deploy.xml exportSharedData -DserverURL=server.url
-DjarFile=jar.file -Dpattern=pattern -Duser=user

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-19に、構文を示します。

表43-19 ant共有データ・エクスポート・コマンド

引数

定義

serverURL

SOAインフラストラクチャ・アプリケーションをホストするサーバーのURL(例: http://myhost:8001)。

jarFile

生成されるJARファイルの絶対パス。

pattern

Oracle MDSリポジトリ転送APIによってサポートされているファイル・パターン。複数のパターンを指定する場合はデリミタとしてセミコロン(;)を使用します。パターンには共有データ・ネームスペース/appsを含めないでください。例:

/Project1/**;/Project2/**

この例では、/apps/Project1および/apps/Project2にあるすべてのドキュメントをエクスポートします。

user

オプション。サーバーにアクセスするためのユーザー名(基本構成が構成されている場合)。

password

サーバーにアクセスするためのパスワード(基本構成が構成されている場合)。このパラメータはオプションです。

例43-23は、指定したパターンの共有データをJARファイルにエクスポートする方法を示しています。

例43-23 指定したパターンの共有データのJARファイルへのエクスポート

ant -f ant-sca-deploy.xml exportSharedData -DserverURL=http://myhost:8001
-DjarFile=/tmp/MySharedData.jar
-Dpattern="/Project1/**"

43.7.6.10 トップレベルの共有データ・フォルダを削除するためのantの使用方法

例43-24に、トップレベルの共有データ・フォルダを削除する例を示します(サービス・エンジンにデプロイされたコンポジットがある場合を含む)。

例43-24 トップレベルの共有データ・フォルダの削除

ant -f ant-sca-deploy.xml removeSharedData -DserverURL=server.url
-DfolderName=folder.name -Duser=user

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-20に、構文を示します。

表43-20 ant共有データ・フォルダ削除コマンド

引数

定義

serverURL

SOAインフラストラクチャ・アプリケーションをホストするサーバーのURL(例: http://myhost10:8001)。

foldername

削除するトップレベルの共有データ・フォルダの名前。

user

オプション。サーバーにアクセスするためのユーザー名(基本構成が構成されている場合)。

password

オプション。サーバーにアクセスするためのパスワード(基本構成が構成されている場合)。

例43-25は、Project1という名前のトップレベルの共有データ・フォルダを削除する方法を示しています。

例43-25 トップレベルの共有データ・フォルダの削除

ant -f ant-sca-deploy.xml removeSharedData -DserverURL=http://myhost:8001
-DfolderName=Project1

43.7.6.11 SOAコンポジット・アプリケーションを起動するためのantの使用方法

例43-26に、SOAコンポジット・アプリケーションを起動する例を示します。

例43-26 SOAコンポジット・アプリケーションの起動

ant -f ant-sca-mgmt.xml startComposite -Dhost=myhost -Dport=8001 -Duser=weblogic
-DcompositeName=HelloWorld -Drevision=1.0 -Dpartition=partition.name

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-21に、構文を示します。

表43-21 ant SOAコンポジット・アプリケーション起動コマンド

引数

定義

host

Oracle WebLogic Serverのホスト名(例: myhost)。

port

Oracle WebLogic Serverのポート(例: 7001)。

user

実行中のサーバーに接続してMBean情報を取得するためのユーザー名(例: weblogic)。

password

ユーザー名に対応するパスワード。

compositeName

SOAコンポジット・アプリケーションの名前。

revision

SOAコンポジット・アプリケーションのリビジョン。

label

オプション。SOAコンポジット・アプリケーションのラベル。ラベルによって、アプリケーションに関連付けられているMDSアーティファクトが識別されます。ラベルを指定しない場合は、最新のラベルが検索されます。

partition

オプション。SOAコンポジット・アプリケーションが置かれているパーティションの名前。デフォルト値はdefaultです。パーティションを指定しないと、SOAコンポジット・アプリケーションのdefaultパーティションが検索されます。他のパーティションは検索されません。

43.7.6.12 SOAコンポジット・アプリケーションを停止するためのantの使用方法

例43-27に、SOAコンポジット・アプリケーションを停止する例を示します。

例43-27 SOAコンポジット・アプリケーションの停止

ant -f ant-sca-mgmt.xml stopComposite -Dhost=myhost -Dport=8001 -Duser=weblogic
-DcompositeName=HelloWorld -Drevision=1.0 -Dpartition=partition.name

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-22に、構文を示します。

表43-22 ant SOAコンポジット・アプリケーション停止コマンド

引数

定義

host

Oracle WebLogic Serverのホスト名(例: myhost)。

port

Oracle WebLogic Serverのポート(例: 7001)。

user

実行中のサーバーに接続してMBean情報を取得するためのユーザー名(例: weblogic)。

password

ユーザー名に対応するパスワード。

compositeName

SOAコンポジット・アプリケーションの名前。

revision

SOAコンポジット・アプリケーションのリビジョン。

label

オプション。SOAコンポジット・アプリケーションのラベル。ラベルによって、アプリケーションに関連付けられているMDSアーティファクトが識別されます。ラベルを指定しない場合は、最新のラベルが検索されます。

partition

オプション。SOAコンポジット・アプリケーションが置かれているパーティションの名前。デフォルト値はdefaultです。パーティションを指定しないと、SOAコンポジット・アプリケーションのdefaultパーティションが検索されます。他のパーティションは検索されません。

43.7.6.13 SOAコンポジット・アプリケーションをアーカイブするためのantの使用方法

例43-28に、SOAコンポジット・アプリケーションをアクティブ化する例を示します。

例43-28 SOAコンポジット・アプリケーションのアクティブ化

ant -f ant-sca-mgmt.xml activateComposite -Dhost=myhost -Dport=8001
-Duser=weblogic-DcompositeName=HelloWorld -Drevision=1.0 -Dpartition=partition.name

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-23に、構文を示します。

表43-23 ant SOAコンポジット・アプリケーション・アクティブ化コマンド

引数

定義

host

Oracle WebLogic Serverのホスト名(例: myhost)。

port

Oracle WebLogic Serverのポート(例: 7001)。

user

実行中のサーバーに接続してMBean情報を取得するためのユーザー名(例: weblogic)。

password

ユーザー名に対応するパスワード。

compositeName

SOAコンポジット・アプリケーションの名前。

revision

SOAコンポジット・アプリケーションのリビジョン。

label

オプション。SOAコンポジット・アプリケーションのラベル。ラベルによって、アプリケーションに関連付けられているMDSアーティファクトが識別されます。ラベルを指定しない場合は、最新のラベルが検索されます。

partition

オプション。SOAコンポジット・アプリケーションが置かれているパーティションの名前。デフォルト値はdefaultです。パーティションを指定しないと、SOAコンポジット・アプリケーションのdefaultパーティションが検索されます。他のパーティションは検索されません。

43.7.6.14 SOAコンポジット・アプリケーションをリタイアするためのantの使用方法

例43-29に、SOAコンポジット・アプリケーションのリタイア例を示します。

例43-29 SOAコンポジット・アプリケーションのリタイア

ant -f ant-sca-mgmt.xml retireComposite -Dhost=myhost -Dport=8001 -Duser=weblogic
-DcompositeName=HelloWorld -Drevision=1.0 -Dpartition=partition.name

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-24に、構文を示します。

表43-24 ant SOAコンポジット・アプリケーション・リタイア・コマンド

引数

定義

host

Oracle WebLogic Serverのホスト名(例: myhost)。

port

Oracle WebLogic Serverのポート(例: 7001)。

user

実行中のサーバーに接続してMBean情報を取得するためのユーザー名(例: weblogic)。

password

ユーザー名に対応するパスワード。

compositeName

SOAコンポジット・アプリケーションの名前。

revision

SOAコンポジット・アプリケーションのリビジョン。

label

オプション。SOAコンポジット・アプリケーションのラベル。ラベルによって、アプリケーションに関連付けられているMDSアーティファクトが識別されます。ラベルを指定しない場合は、最新のラベルが検索されます。

partition

オプション。SOAコンポジット・アプリケーションが置かれているパーティションの名前。デフォルト値はdefaultです。パーティションを指定しないと、SOAコンポジット・アプリケーションのdefaultパーティションが検索されます。他のパーティションは検索されません。

43.7.6.15 SOAコンポジット・アプリケーションにデフォルト・バージョンを割り当てるためのantの使用方法

例43-30に、デフォルト・バージョンをSOAコンポジット・アプリケーションに割り当てる例を示します。

例43-30 SOAコンポジット・アプリケーションへのデフォルト・バージョンの割当て

ant -f ant-sca-mgmt.xml assignDefaultComposite -Dhost=myhost -Dport=8001
-Duser=weblogic -DcompositeName=HelloWorld -Drevision=1.0 -Dpartition=partition.name

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-25に、構文を示します。

表43-25 ant SOAコンポジット・アプリケーション・デフォルト・バージョン割当てコマンド

引数

定義

host

Oracle WebLogic Serverのホスト名(例: myhost)。

port

Oracle WebLogic Serverのポート(例: 7001)。

user

実行中のサーバーに接続してMBean情報を取得するためのユーザー名(例: weblogic)。

password

ユーザー名に対応するパスワード。

compositeName

SOAコンポジット・アプリケーションの名前。

revision

SOAコンポジット・アプリケーションのリビジョン。

partition

オプション。SOAコンポジット・アプリケーションが置かれているパーティションの名前。デフォルト値はdefaultです。パーティションを指定しないと、SOAコンポジット・アプリケーションのdefaultパーティションが検索されます。他のパーティションは検索されません。

43.7.6.16 デプロイ済SOAコンポジット・アプリケーションを一覧表示するためのantの使用方法

例43-31に、デプロイ済SOAコンポジット・アプリケーションを一覧表示する例を示します。

例43-31 デプロイ済SOAコンポジット・アプリケーションの一覧表示

ant -f ant-sca-mgmt.xml listDeployedComposites -Dhost=myhost -Dport=8001
-Duser=weblogic

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-26に、構文を示します。

表43-26 ant SOAコンポジット・アプリケーション・デプロイメント一覧表示コマンド

引数

定義

host

Oracle WebLogic Serverのホスト名(例: myhost)。

port

Oracle WebLogic Serverのポート(例: 7001)。

user

実行中のサーバーに接続してMBean情報を取得するためのユーザー名(例: weblogic)。

password

ユーザー名に対応するパスワード。

43.7.6.17 SOAインフラストラクチャで使用可能なすべてのパーティションを一覧表示するためのantの使用方法

例43-32に、SOAインフラストラクチャで使用可能なすべてのパーティションを一覧表示するための構文を示します。

例43-32 SOAインフラストラクチャで使用可能なすべてのパーティションの一覧表示

ant -f ant-sca-mgmt.xml listPartitions -Dhost=host -Dport=port -Duser=user

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-27に、構文を示します。

表43-27 ant SOAインフラストラクチャ・パーティション一覧表示コマンド

引数

定義

host

Oracle WebLogic Serverのホスト名(例: myhost)。

port

Oracle WebLogic Serverのポート(例: 7001)。

user

実行中のサーバーに接続してMBean情報を取得するためのユーザー名(例: weblogic)。

password

ユーザー名に対応するパスワード。

例43-33に、SOAインフラストラクチャで使用可能なすべてのパーティションを一覧表示する例を示します。

例43-33 SOAインフラストラクチャで使用可能なすべてのパーティションの一覧表示

ant -f ant-sca-mgmt.xml listPartitions -Dhost=myhost10 -Dport=8001

43.7.6.18 パーティション内のすべてのコンポジットを一覧表示するためのantの使用方法

例43-34に、パーティション内のすべてのコンポジットを一覧表示するための構文を示します。

例43-34 パーティション内のすべてのコンポジットの一覧表示

ant -f ant-sca-mgmt.xml listCompositesInPartition -Dhost=host -Dport=port -Duser=user -Dpartition=partition.name

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-28に、構文を示します。

表43-28 ant コンポジット・パーティション一覧表示コマンド

引数

定義

host

Oracle WebLogic Serverのホスト名(例: myhost)。

port

Oracle WebLogic Serverのポート(例: 7001)。

user

実行中のサーバーに接続してMBean情報を取得するためのユーザー名(例: weblogic)。

password

ユーザー名に対応するパスワード。

partition

パーティションの名前。

例43-35に、myPartitionというパーティション内のすべてのコンポジットを一覧表示する例を示します。

例43-35 パーティション内のすべてのコンポジットの一覧表示

ant -f ant-sca-mgmt.xml listCompositesInPartition -Dhost=myhost10 -Dport=8001 -Dpartition=myPartition

43.7.6.19 SOAインフラストラクチャでパーティションを作成するためのantの使用方法

例43-36に、SOAインフラストラクチャにパーティションを作成するための構文を示します。

例43-36 SOAインフラストラクチャでのパーティションの作成

ant -f ant-sca-mgmt.xml createPartition -Dhost=host -Dport=port -Duser=user
-Dpartition=partition.name

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-29に、構文を示します。

表43-29 antパーティション作成コマンド

引数

定義

host

Oracle WebLogic Serverのホスト名(例: myhost)。

port

Oracle WebLogic Serverのポート(例: 7001)。

user

実行中のサーバーに接続してMBean情報を取得するためのユーザー名(例: weblogic)。

password

ユーザー名に対応するパスワード。

partition

作成するパーティションの名前。

例43-37に、SOAインフラストラクチャにmyPartitionというパーティションを作成する例を示します。

例43-37 SOAインフラストラクチャでのパーティションの作成

ant -f ant-sca-mgmt.xml createPartition -Dhost=myhost10 -Dport=8001
-Dpartition=myPartition

43.7.6.20 SOAインフラストラクチャでパーティションを削除するためのantの使用方法

例43-38に、SOAインフラストラクチャのパーティションを削除するための構文を示します。このコマンドは、パーティションを削除する前に、パーティション内のすべてのコンポジットをアンデプロイします。

例43-38 SOAインフラストラクチャでのパーティションの削除

ant -f ant-sca-mgmt.xml deletePartition -Dhost=host -Dport=port -Duser=user
-Dpartition=partition.name

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-30に、構文を示します。

表43-30 antパーティション削除コマンド

引数

定義

host

Oracle WebLogic Serverのホスト名(例: myhost)。

port

Oracle WebLogic Serverのポート(例: 7001)。

user

実行中のサーバーに接続してMBean情報を取得するためのユーザー名(例: weblogic)。

password

ユーザー名に対応するパスワード。

partition

削除するパーティションの名前。

例43-39に、SOAインフラストラクチャにあるmyPartitionというパーティションを削除する例を示します。

例43-39 SOAインフラストラクチャでのパーティションの削除

ant -f ant-sca-mgmt.xml deletePartition -Dhost=myhost10 -Dport=8001
-Dpartition=myPartition

43.7.6.21 パーティション内のすべてのコンポジットを起動するためのantの使用方法

例43-40に、パーティション内のすべてのコンポジットを起動するための構文を示します。

例43-40 パーティション内のすべてのコンポジットの起動

ant -f ant-sca-mgmt.xml startCompositesInPartition -Dhost=host -Dport=port
-Duser=user -Dpartition=partition.name

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-31に、構文を示します。

表43-31 antパーティション起動コマンド

引数

定義

host

Oracle WebLogic Serverのホスト名(例: myhost)。

port

Oracle WebLogic Serverのポート(例: 7001)。

user

実行中のサーバーに接続してMBean情報を取得するためのユーザー名(例: weblogic)。

password

ユーザー名に対応するパスワード。

partition

パーティションの名前。

例43-41に、myPartitionというパーティション内のすべてのコンポジットを起動する例を示します。

例43-41 パーティション内のすべてのコンポジットの起動

ant -f ant-sca-mgmt.xml startCompositesInPartition -Dhost=myhost10 -Dport=8001
-Dpartition=myPartition

43.7.6.22 パーティション内のすべてのコンポジットを停止するためのantの使用方法

例43-42に、パーティション内のすべてのコンポジットを停止するための構文を示します。

例43-42 パーティション内のすべてのコンポジットの停止

ant -f ant-sca-mgmt.xml stopCompositesInPartition -Dhost=host -Dport=port
-Duser=user -Dpartition=partition.name

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-32に、構文を示します。

表43-32 antパーティション・コンポジット停止コマンド

引数

定義

host

Oracle WebLogic Serverのホスト名(例: myhost)。

port

Oracle WebLogic Serverのポート(例: 7001)。

user

実行中のサーバーに接続してMBean情報を取得するためのユーザー名(例: weblogic)。

password

ユーザー名に対応するパスワード。

partition

パーティションの名前。

例43-43に、myPartitionというパーティション内のすべてのコンポジットを停止する例を示します。

例43-43 パーティション内のすべてのコンポジットの停止

ant -f ant-sca-mgmt.xml stopCompositesInPartition -Dhost=myhost10 -Dport=8001
-Dpartition=myPartition

43.7.6.23 パーティション内のすべてのコンポジットをアーカイブするためのantの使用方法

例43-44に、パーティション内のすべてのコンポジットをアクティブ化するための構文を示します。

例43-44 パーティション内のすべてのコンポジットのアクティブ化

ant -f ant-sca-mgmt.xml activateCompositesInPartition -Dhost=host -Dport=port
-Duser=user -Dpartition=partition.name

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-33に、構文を示します。

表43-33 antパーティション・コンポジット・アクティブ化コマンド

引数

定義

host

Oracle WebLogic Serverのホスト名(例: myhost)。

port

Oracle WebLogic Serverのポート(例: 7001)。

user

実行中のサーバーに接続してMBean情報を取得するためのユーザー名(例: weblogic)。

password

ユーザー名に対応するパスワード。

partition

パーティションの名前。

例43-45に、myPartitionというパーティション内のすべてのコンポジットをアクティブ化する例を示します。

例43-45 パーティション内のすべてのコンポジットのアクティブ化

ant -f ant-sca-mgmt.xml activateCompositesInPartition -Dhost=myhost10 -Dport=8001
-Dpartition=myPartition

43.7.6.24 パーティション内のすべてのコンポジットをリタイアするためのantの使用方法

例43-46に、パーティション内のすべてのコンポジットをリタイアするための構文を示します。

例43-46 パーティション内のすべてのコンポジットのリタイア

ant -f ant-sca-mgmt.xml retireCompositesInPartition -Dhost=host -Dport=port
-Duser=user -Dpartition=partition.name

注意:

ユーザー名の指定後、プロンプトが表示された場合はパスワードを入力してください。

表43-34に、構文を示します。

表43-34 antパーティション・コンポジット・リタイア・コマンド

引数

定義

host

Oracle WebLogic Serverのホスト名(例: myhost)。

port

Oracle WebLogic Serverのポート(例: 7001)。

user

実行中のサーバーに接続してMBean情報を取得するためのユーザー名(例: weblogic)。

password

ユーザー名に対応するパスワード。

partition

パーティションの名前。

例43-47に、myPartitionというパーティション内のすべてのコンポジットをリタイアする例を示します。

例43-47 パーティション内のすべてのコンポジットのリタイア

ant -f ant-sca-mgmt.xml retireCompositesInPartition -Dhost=myhost10 -Dport=8001
-Dpartition=myPartition

43.7.6.25 SOAコンポジット・アプリケーションをアップグレードするためのantの使用方法

antを使用すると、SOAコンポジット・アプリケーションを10.1.3から11gにアップグレードできます。詳細は、Oracle Fusion Middleware Oracle SOA Suite、WebCenterポータルおよびADFアップグレード・ガイドを参照してください。

43.7.6.26 SOAコンポジット・アプリケーションを管理するためのantの使用方法

WebLogic Fusion Order Demoアプリケーションには、antスクリプトを使用してアプリケーションをコンパイル、パッケージ化およびデプロイする例が用意されています。初期antビルド・ファイルを作成するには、「ファイル」メイン・メニューから、「新規」→「Ant」→「プロジェクトからのビルドファイル」の順に選択します。

図43-26は、build.propertiesおよびbuild.xmlファイルが、作成後に「アプリケーション・ナビゲータ」に表示された状態を示しています。

図43-26 antビルド・ファイル

「図43-26 antビルド・ファイル」の説明

- build.properties
環境を反映するために編集するファイル(例: OracleホームおよびJavaホーム・ディレクトリの指定、デプロイメントに使用するホスト名やポート番号などのサーバー・プロパティの設定、デプロイするアプリケーションの指定など)。

- build.xml
antによって、build.propertiesファイルで指定したコンポジット・アプリケーションのコンパイル、ビルド、およびサーバーへのデプロイのために使用されます。

1. 環境を反映するようにbuild.propertiesファイルを変更します。

2. 「ビルド」メニューから、「project_nameでAntを実行」を選択します。
この結果、現在のプロジェクトのビルド・ファイルに定義されているターゲットがビルドされます。

43.7.7 SOAコンポジット・アプリケーションのOracle Enterprise Manager Fusion Middleware Controlからのデプロイ方法

SOAコンポジット・アプリケーションは、Oracle Enterprise Manager Fusion Middleware Controlからデプロイできます。最初に、デプロイ可能なアーカイブをOracle JDeveloperで作成するか、antやWLSTコマンドライン・ツールを使用して作成する必要があります。このアーカイブは、JARファイル内の単一のSOAコンポジット・アプリケーションのリビジョン、またはZIPファイル内の複数のコンポジット・アプリケーションのリビジョン(SOAバンドルと呼ばれます)で構成できます。詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。

43.7.8 クラスタへのSOAコンポジット・アプリケーションのデプロイ方法

SOAコンポジット・アプリケーションはクラスタ化された環境にもデプロイできます。詳細は、『Oracle Fusion Middleware高可用性ガイド』の「Oracle Fusion Middleware SOA Suiteの高可用性の構成」を参照してください。

43.8 デプロイメント後の構成

この項では、デプロイメント後の構成タスクについて説明します。

43.8.1 セキュリティ

SOAコンポジット・アプリケーションの保護の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

43.8.2 接続の更新

アプリケーション・サーバーまたはOracle MDSリポジトリに対して作成したすべての接続が、次に進むターゲット環境に適用可能なサーバーを指すように再作成されていることを確認します。詳細は、第43.7.1.1項「アプリケーション・サーバー接続の作成」および第43.7.3.4.1項「SOA-MDS接続の作成」を参照してください。

43.8.3 データ・ソースおよびキューの更新

構成済のすべてのJDBCデータ・ソース、キューおよびコネクション・ファクトリの場所が、次に進むターゲット環境に適用可能であることを確認します。詳細は、第43.5.1項「データ・ソースおよびキューの作成方法」および第43.5.2項「コネクション・ファクトリおよび接続プールの作成方法」を参照してください。

43.8.4 ポリシーの添付

Oracle Enterprise Manager Fusion Middleware Controlでの実行中に、デプロイ済SOAコンポジット・アプリケーションにポリシーを添付できます。詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。

43.9 テストおよびトラブルシューティング

この項では、SOAコンポジット・アプリケーションのテストおよびトラブルシューティングの方法について説明します。

43.9.1 デプロイメントの検証

SOAコンポジット・アプリケーションがSOAインフラストラクチャに正常にデプロイされたことを検証できます。正常にデプロイされた場合は、Oracle Enterprise Manager Fusion Middleware Controlの「SOAインフラストラクチャ」ページの「デプロイ済コンポジット」タブにデプロイされたコンポジットが表示されます。詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。

43.9.2 デプロイ済コンポジットのインスタンスの開始

デプロイ済SOAコンポジット・アプリケーションのインスタンスは、Oracle Enterprise Manager Fusion Middleware Controlの「テスト・インスタンス」ページから開始できます。詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。

43.9.3 デプロイ済コンポジットのテストの自動化

SOAコンポジット・アプリケーションのテストを自動化するテスト・ケースを作成、デプロイおよび実行できます。テスト・ケースを使用すると、本番環境へのデプロイメントの前に、SOAコンポジット・アプリケーションとWebサービス・パートナ間の相互作用をシミュレートできます。Oracle JDeveloperでテスト・ケースを作成し、SOAコンポジット・アプリケーションに組み込みます。このアプリケーションは、その後、Oracle Enterprise Manager Fusion Middleware Controlからデプロイされて管理されます。その後、Oracle Enterprise Manager Fusion Middleware Controlからテスト・ケースを実行します。

テスト・ケースの作成方法の詳細は、第44章「SOAコンポジット・アプリケーションのテストの自動化」を参照してください。

Oracle Enterprise Manager Fusion Middleware Controlからのテスト・ケースの実行の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

43.9.4 デプロイメント・エラー受取り後のプロジェクトの再コンパイル

Oracle JDeveloperからのSOAコンポジット・アプリケーションのデプロイ時に例43-48に示すエラーを受け取った場合は、プロジェクトを再コンパイルし、コンポジットを再デプロイします。このエラーは断続的に発生するため、再度発生しないようにする必要があります。

例43-48 断続的なデプロイメント・エラー・メッセージ

Error deploying BPEL suitcase.
error while attempting to deploy the BPEL component file
"/scratch/aime1/work/mw9507/user_projects/domains/WLS_SOAWC/deployed-composites
/ManagementChainParticipantRuleComposite_rev1.0/sca_ManagementChainParticipantR
uleComposite_rev1.0/soa_59d10d76-08a5-41f0-ba89-32dcc2250002";
the exception reported is: java.lang.Exception: BPEL 1.1 compilation failed

This error contained an exception thrown by the underlying deployment module.
Verify the exception trace in the log (with logging level set to debug mode).

at
com.collaxa.cube.engine.deployment.DeploymentManager.deployComponent(Deployment
Manager.java:197)
at
com.collaxa.cube.ejb.impl.CubeServerManagerBean._deployOrLoadComponent(CubeServ
erManagerBean.java:820)
at
com.collaxa.cube.ejb.impl.CubeServerManagerBean.deployComponent(CubeServerManag
erBean.java:119)

43.9.5 Javaのコンパイル・エラーを解決するためのJavaコード・サイズの削減

例43-49に示すJavaのコンパイル・エラーがサーバーのログ・ファイルに表示された場合は、Javaクラス内のコードが多すぎる可能性があります。

例43-49 Javaのコンパイル・エラー

Failed to compile bpel generated classes.
failure to compile the generated BPEL classes for BPEL process
"Review_Supply_Plan_ProcessProcess" of composite "default/Review_Supp
ly_Plan_Process!1.0*a9ca2907-8540-4375-b672-ceb560d7b826"
The class path setting is incorrect.
Ensure that the class path is set correctly. If this happens on the server
side, verify that the custom classes or jars which this BPEL process is
depending on are deployed correctly. Also verify that the runtime is using
the same release/version.
. . .
. . .
at
com.collaxa.cube.lang.compiler.template.CubeProcessGenerator.compile(CubeProce
ssGenerator.java:304)
at
com.collaxa.cube.lang.compiler.template.CubeProcessGenerator.generate(CubeProc
essGenerator.java:164)
at
com.collaxa.cube.lang.compiler.BPEL1Processor.transform(BPEL1Processor.java:25
7)
at
com.collaxa.cube.lang.compiler.BPEL1Processor.process(BPEL1Processor.java:161)

Javaのコンパイル・エラーを解決するためにJavaコード・サイズを削減する手順は、次のとおりです。

1. $MIDDLEWARE_HOME/user_projects/domains/domain_name/bin/SetDomainEnv.shファイル(Linux)またはSetDomainEnv.batファイル(Windows)を開きます。

2. このファイルでEXTRA_JAVA_PROPERTIES="-Dorabpel.codegen.density"プロパティを見つけます。このプロパティが明示的に設定されていない場合、デフォルトで64,32の値に設定されます。

3. 次のように値を削減します。

EXTRA_JAVA_PROPERTIES="-Dorabpel.codegen.density=32,16"

これらの2つの値を削減することによって、コンパイルされたプロセス・マップに対して生成されるクラスおよびメソッドの数を増やします。デフォルト設定を使用したコンパイルのプロセスが失敗した場合は、ベスト・プラクティスとして、プロパティをより小さい値に設定します。次の値の組合せを試してみることをお薦めします。

32,16
16,8
8,4
4,2

4. 変更内容を保存します。

5. サーバーを再起動します。

6. SOAコンポジット・アプリケーションを再コンパイルします。

43.9.6 デプロイメントに関する共通のエラーのトラブルシューティング

この項では、デプロイメントに関する共通のエラーのトラブルシューティング方法について説明します。

コンポジット・アプリケーションに関する一般的な問題のトラブルシューティングについては、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

43.9.6.1 Oracle JDeveloperでのデプロイメントに関する共通の問題

この項では、チェックが必要なデプロイメントに関する共通の問題について説明します。

- 単一のコンポジット・アプリケーションをデプロイする場合は、「プロジェクト」メニューからデプロイしていることを確認してください。「アプリケーション・ナビゲータ」でプロジェクト名を右クリックし、「デプロイ」→「SOA_profile_name」の順に選択します。

- 複数のコンポジット・アプリケーションをデプロイする場合は、「アプリケーション」メニューからデプロイしていることを確認してください(「アプリケーション・ナビゲータ」でアプリケーション名を右クリックし、「デプロイ」→「SOA_bundle_profile_name」の順に選択します)。

- 「デプロイ」をクリックしてプロファイル名を選択した後は、デプロイメント・ウィザードの「デプロイメント・アクション」ページが表示されていることを確認してください。

- 必要に応じて、新規リビジョンID(オプション)を入力し、構成プラン(ある場合)を選択します。

- デプロイするコンポジット・アプリケーションが同じリビジョンIDでサーバー上にすでに存在している場合は、デプロイメント・ウィザードの「構成のデプロイ」ページで「同じリビジョンIDで既存のコンポジットを上書きします。」チェック・ボックスを選択します。このオプションを選択しないと、デプロイメントは失敗します。

- コンパイルが失敗すると、デプロイメント・エラーではなくコンパイル・エラーが発生します。このエラーは、プロジェクトのコンパイル時にのみ表示されます。

- コンパイラのメッセージで不十分な場合は、コンパイラ・ログを確認してください。このログ・ファイル(scac.log)へのリンクは、「メッセージ」タブに表示されます。このメッセージは例43-50のようになります。

例43-50 コンパイル・ログ・メッセージ

Compilation of project 'FirstComposite.jpr' finished. Check '/scratch/myhome/
jdevWorkarea/mywork/Application11/FirstComposite/SCA-INF/classes/scac.log' for
details.

- コンパイルが成功すると、コンポジットに対してSAR/SOAバンドル・アーカイブが作成されます。SARアーカイブの場合は、例43-51に示すメッセージが「デプロイメント」タブに表示されます。

例43-51 アーカイブ・メッセージ

Wrote Archive Module to
/scratch/myhome/jdevWorkarea/mywork/Application11/FirstComposite/deploy/sca_
FirstComposite_rev1.0.jar

SOAバンドル・アーカイブの場合は、例43-52に示すメッセージが「デプロイメント」タブに表示されます。

例43-52 アーカイブ・メッセージ

Wrote Archive Module to
/scratch/myhome/jdevWorkarea/mywork/Application11/SecondComposite/deploy/sca_
SecondComposite_rev1.0.jar
Wrote Archive Module to
/scratch/myhome/jdevWorkarea/mywork/Application11/FirstComposite/deploy/sca_
FirstComposite_rev1.0.jar
Wrote Archive Module to
/scratch/myhome/jdevWorkarea/mywork/Application11/deploy/soabundle1.zip

- SARファイルのすべてのURLが、次の形式であることを確認します。

sca_CompositeName_revRevisionID.jar

たとえば、sca_FirstComposite_rev1.0.jarのようになります。

- この後、Oracle JDeveloperはサーバーにアーカイブ・バイナリを送信します。次のメッセージが「デプロイメント」タブに表示されます。この時点で、Oracle JDeveloperのデプロイメント・ロールは終了し、サーバー(SOAインフラストラクチャ)がデプロイメントを制御します。

Deploying sca_FirstComposite_rev1.0.jar to myhost19:7001

- デプロイメントが成功すると、例43-53に示すメッセージが「デプロイメント」タブに表示されます。

例43-53 デプロイメント成功メッセージ

Received HTTP response from the server, response code=200 Successfully deployed
archive soa_bundle_name.zip to soa_server_name

- デプロイメントが失敗すると、例43-54に示すメッセージ、およびサーバーからのエラー・メッセージ(ある場合)が「デプロイメント」タブに表示されます。

例43-54 デプロイメント・エラー・メッセージ

Error deploying the archive. Check server log for more details.
Connection refused.
Elapsed time for deployment: 8 seconds

- ほとんどの場合、サーバー上で発生したエラーに関する情報はサーバーから提供されます。サーバーからのエラー・メッセージが表示されない場合は、サーバーでsoa_server1-diagnostic.logをチェックして追加情報を検索してください(soa_server1は管理対象サーバーの名前です)。このファイルは、サーバーのdomain_home/servers/soa_server1/logsにあります。

43.9.6.2 構成プランに関する共通の問題

この項では、チェックが必要な構成プランに関する共通の問題について説明します。

- デプロイするために選択した構成プランがサーバー上で有効にならない場合は、その構成プランが含まれているSARファイルを開きます。ファイルの場所は、Oracle JDeveloperの「デプロイメント」タブで検索できます。例43-55に詳細を示します。

例43-55 アーカイブ・メッセージ

Wrote Archive Module to
/scratch/myhome/jdevWorkarea/mywork/Application11/FirstComposite/deploy/sca_
FirstComposite_rev1.0.jar

- JARファイルを開き、soaconfigplan.xmlファイルが含まれていることを確認します。このファイルは、選択した構成プランに基づいてデプロイメント時に生成されます。

- このファイルが存在しない場合は、コンポジット・アプリケーションを再度デプロイして、デプロイメント・ウィザードの「構成のデプロイ」ページで構成プランを正しく選択したことを確認してださい。

43.9.6.3 管理対象Oracle WebLogic Serverへのデプロイ

Oracle WebLogic管理サーバーを起動せずに管理対象Oracle WebLogic Serverを起動し(独立モードでの実行と呼ばれます)、Oracle JDeveloperからSOAコンポジット・アプリケーションをデプロイしようとすると、次のエラーが発生します。

Deployment cannot continue! No SOA Configured target servers found

Oracle WebLogic管理サーバーは実行中である必要があります。デプロイメントでは、Oracle SOA Suiteを実行しているサーバーの識別にOracle WebLogic管理サーバー接続が使用されます。さらに、管理対象サーバーへのアプリケーション・サーバー接続は作成しないでください。Oracle WebLogic管理サーバーへの接続のみ作成してください。

また、SOA構成済Oracle WebLogic Serverの状態が正常でない場合も同様のエラーが発生する場合があります。この状態は、Oracle WebLogic Server管理コンソールの「サーバー」ページの「ヘルス」列に表示されます。

WLSTを使用すると、Oracle WebLogic管理サーバーを起動せずに、SOAコンポジット・アプリケーションを管理対象Oracle WebLogic Serverにデプロイできます。詳細は、第43.7.5項「WLSTユーティリティを使用したSOAコンポジット・アプリケーションの管理方法」を参照してください。

43.9.6.4 双方向のSSL対応Oracle WebLogic Serverへのデプロイ

Oracle JDeveloperから双方向のSSL対応Oracle WebLogic Serverへのデプロイメントは、サポートされていません。

43.9.6.5 接続できないプロキシ・サーバーを使用したデプロイ

Oracle JDeveloperで設定したプロキシ・サーバーがホストから接続できない場合は、SOAコンポジット・アプリケーションのデプロイメント時に、図43-27に示すようなエラーが表示されます。

図43-27 デプロイメント・エラー・メッセージ

「図43-27 デプロイメント・エラー・メッセージ」の説明

ネットワークの外部にあるSOAインフラストラクチャ(例: soa_server1)にアクセスするには、有効なプロキシ設定が必要です。SOAインフラストラクチャがネットワーク内にある場合は、次のいずれかの処理を実行します。

プロキシ設定を変更する手順は、次のとおりです。

1. 「ツール」メニューから、「プリファレンス」→「Webブラウザとプロキシ」の順に選択します。

2. SOAサーバーがネットワーク内にある場合は、次のいずれかのタスクを実行します。

1. プロキシを使用せずにSOAインフラストラクチャに直接アクセスする場合は、「HTTPプロキシ・サーバーを使用」の選択を解除します。

2. 「例外」フィールドに、接続できないSOAサーバーのホスト名を入力します。

43.9.6.6 ADFタスク・フォームのEARファイルのデプロイメント・エラーを解決するためのロックの解放

SOAコンポジット・アプリケーションのJARファイルおよびADFタスク・フォームのEARファイルをデプロイする場合、SOA JARファイルは正常にデプロイされますが、EARファイルのデプロイ時に次のエラーが表示されます。

[wldeploy] weblogic.management.ManagementException: [Deployer:149163]The
domain edit lock is owned by another session in non-exclusive mode - this
deployment operation requires exclusive access to the edit lock and hence
cannot proceed. If you are using "Automatically Aquire Lock and Activate
Changes" in the console, then the lock will expire shortly so retry this
operation.

このエラーは、EARファイルを正常にデプロイするには、最初にOracle WebLogic Server管理コンソールでロックを解放する必要があることを示しています。

ADFタスク・フォームのEARファイルのデプロイメント・エラーを解決するためにロックを解放する手順は、次のとおりです。

1. Oracle WebLogic Server管理コンソールにログインします。

2. ページの一番上にあるコンソール・バナーの下で、「プリファレンス」→「ユーザー・プリファレンス」をクリックします。

3. 「ロックを自動取得して変更をアクティブ化」の選択を解除します。

4. 「保存」をクリックすると、「ロックして編集」や「構成の解放」などのボタンが表示されます。
Oracle WebLogic Server管理コンソールに次の説明が表示されます。

Automatically acquire the lock that enables configuration editing and
automatically activate changes as the user modifies, adds and deletes items
(for example, when the user clicks the 'Save' button). This feature is not
available in production mode.

このエラーは、使用しているデプロイ方法(Oracle JDeveloperを使用したデプロイや、antスクリプトを使用したデプロイなど)とは無関係に発生します。

43.9.6.7 メモリー増加によるコンパイル・エラーのリカバリ

SOAコンポジット・アプリケーションのコンパイル中にメモリー不足のエラーが発生した場合は、次の手順を実行してメモリーを増やします。

1. scac要素で、メモリー設定値を増やします。例:

<jvmarg value="-Xmx512M"/>

43.9.6.8 相関セットを使用したreceiveアクティビティのプロパティ・エイリアス定義が存在しないときのOracle JDeveloperコンパイル・エラー

相関セットを使用したreceiveアクティビティのプロパティ・エイリアス定義が存在しない場合、Oracle JDeveloperコンパイラはSCAC-50012エラーで失敗します。

44 SOAコンポジット・アプリケーションのテストの自動化

この章では、SOAコンポジット・アプリケーションのテストを自動化するテスト・ケースの作成、デプロイおよび実行方法について説明します。SOAコンポジット・アプリケーションに含まれているBPELプロセス・サービス・コンポーネントをテストするためのテスト・ケースを作成することもできます。テスト・ケースを使用すると、本番環境へのデプロイメントの前に、SOAコンポジット・アプリケーションとWebサービス・パートナ間の相互作用をシミュレートできます。これにより、本番環境へのデプロイメント準備が完了するときに、プロセスとWebサービス・パートナの相互作用が期待どおりであるかを確認できます。

この章には次の項が含まれます:

- 第44.1項「コンポジット・テスト・フレームワークの概要」

- 第44.2項「テスト・スイートのコンポーネントの概要」

- 第44.3項「テスト・スイートとテスト・ケースの作成」

- 第44.4項「テスト・ケースのコンテンツの作成」

- 第44.5項「BPELプロセス・サービス・コンポーネントのテスト」

- 第44.6項「テスト・スイートのデプロイおよび実行」

44.1 コンポジット・テスト・フレームワークの概要

Oracle SOA Suiteには、SOAコンポジット・アプリケーションに対して反復可能なテストを作成して実行するための、自動化されたテスト・スイート・フレームワークが用意されています。

テスト・スイート・フレームワークの機能は、次のとおりです。

- Webサービス・パートナの相互作用のシミュレート

- テスト・データによるプロセス・アクションの検証

- テスト結果のレポートの作成

44.1.1 テスト・ケースの概要

テスト・フレームワークは、SOAコンポジット・アプリケーション・レベルでのテストをサポートしています。このタイプのテストでは、ワイヤ、サービス・バインディング・コンポーネント、サービス・コンポーネント(BPELプロセスやOracle Mediatorのサービス・コンポーネントなど)、および参照バインディング・コンポーネントがテストされます。

詳細は、第44.3項「テスト・スイートとテスト・ケースの作成」を参照してください。

44.1.2 テスト・スイートの概要

テスト・スイートは、1つ以上のテスト・ケースの論理的な集合で構成されます。各テスト・ケースには、テスト・インスタンスの実行時に実行される一連のコマンドが含まれています。テスト・スイートを実行することをテスト実行と呼びます。各テストは単一のSOAコンポジット・アプリケーション・インスタンスに対応しています。

詳細は、次を参照してください。

- 第44.3項「テスト・スイートとテスト・ケースの作成」

- 第44.4項「テスト・ケースのコンテンツの作成」

44.1.3 エミュレーションの概要

エミュレーションにより、SOAコンポジット・アプリケーションが実行中に相互作用する次のコンポーネントの動作をシミュレートできます。

- コンポジット内部の内部サービス・コンポーネント

- コンポジット外部のバインディング・コンポーネント

別のサービス・コンポーネントまたはバインディング・コンポーネントを起動せずに、コンポーネントまたは参照からのレスポンスを指定できます。

詳細は、次を参照してください。

- 第44.2.2項「エミュレーション」

- 第44.4項「テスト・ケースのコンテンツの作成」

44.1.4 アサーションの概要

アサーションにより、変数データやプロセス・フローを検証できます。次のタイプのアサーションを実行できます。

- XML文書全体のアサーション
XML文書全体の要素値を予想される要素値と比較します。 たとえば、融資申請のXML文書全体の内容を別の文書と正確に比較します。XMLUnitパッケージ内のXMLTestCaseクラスには、XMLファイル間でアサーションを実行するための一連のメソッドが含まれています。これらのメソッドの詳細は、次のURLを参照してください。

http://xmlunit.sourceforge.net

- メッセージのパート・セクションのアサート
メッセージのパート・セクションの値を予想値と比較します。例として、XML文書メッセージ全体のペイロード・パートなどがあります。

- 非リーフ要素のアサーション
XMLフラグメントの値を予想値と比較します。例として、リーフ要素のSSN、email、customerNameおよびloanAmountが記載された融資申請があります。

- リーフ要素のアサーション
選択した文字列要素や数値要素の値、または正規表現パターンを予想値と比較します。例として、融資申請のSSNがあります。

アサートの詳細は、第44.2.3項「アサーション」を参照してください。

44.2 テスト・スイートのコンポーネントの概要

この項では、テスト・ケースを構成するテスト・コンポーネントについて例をあげて説明します。これらのテストを作成してプロセスにインポートする方法についてはこの章で後述します。

44.2.1 プロセスの開始

最初に、SOAP Webサービスなどのバインディング・コンポーネント・サービスにおけるプロセスの操作を定義します。例44-1では、TestFwk SOAコンポジット・アプリケーションを開始するinitiateの操作を定義しています。また、開始ペイロードも定義されています。

例44-1 プロセスの開始

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Generated by Oracle SCA Test Modeler version 1.0 at [6/13/07 10:50 AM]. -->
<compositeTest compositeDN="TestFwk"
xmlns="http://xmlns.oracle.com/sca/2006/test">
<about></about>
<initiate serviceName="client" operation="initiate" isAsync="true">
<message>
<part partName="payload">
<content>
<loanApplication xmlns="http://www.autoloan.com/ns/autoloan">
<SSN>111222333</SSN>
<email>joe.smith@example.com</email>
<customerName>Joe Smith</customerName>
<loanAmount>20000</loanAmount>
<carModel>Camry</carModel>
<carYear>2007</carYear>
<creditRating>800</creditRating>
</loanApplication>
</content>
</part>
</message>
</initiate>
</compositeTest>

44.2.2 エミュレーション

エミュレーションを作成して、SOAコンポジット・アプリケーションがWebサービス・パートナから受け取るメッセージ・データをシミュレートします。

例44-2のテスト・コードでは、エラーのある融資申請が開始されます。Webサービス・パートナから返信のフォルト・メッセージを受け取ります。

例44-2 エミュレーション

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Generated by Oracle SCA Test Modeler version 1.0 at [7/3/07 3:29 PM]. -->
<compositeTest compositeDN="CompositeTest"
xmlns="http://xmlns.oracle.com/sca/2006/test">
<about></about>
<initiate serviceName="client" operation="initiate" isAsync="true">
<message>
<part partName="payload">
<filePath>loanApplication.xml</filePath>
</part>
</message>
</initiate>
<wireActions wireSource="LoanBroker/CreditRatingService" operation="process">
<emulate duration="PT0S">
<fault faultName="ser:NegativeCredit" xmlns:ser="http://services.otn.com">
<message>
<part partName="payload">
<filePath>creditRatingFault.xml</filePath>
</part>
</message>
</fault>
</emulate>
</wireActions>
</compositeTest>

このエミュレーションでは、loanApplication.xmlとcreditRatingFault.xmlの2つのメッセージ・ファイルが起動します。loanApplication.xmlの融資申請に0で始まる社会保障番号が記載されている場合、creditRatingFault.xmlファイルは例44-3に示すフォルト・メッセージを返します。

例44-3 フォルト・メッセージ

<error xmlns="http://services.otn.com">
Invalid SSN, SSN cannot start with digit '0'.
</error>

詳細は、第44.4項「テスト・ケースのコンテンツの作成」を参照してください。

44.2.3 アサーション

アサーションを作成し、SOAコンポジット・アプリケーション実行中の特定時点で、XML文書全体、メッセージのパート・セクション、非リーフ要素またはリーフ要素を検証します。例44-4では、customerName変数のコンテンツが指定されたコンテンツと必ず一致するよう、Oracle SOA Suiteに対して指示しています。

例44-4 アサーション

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Generated by Oracle SCA Test Modeler version 1.0 at [6/13/07 10:51 AM]. -->
<compositeTest compositeDN="TestFwk"
xmlns="http://xmlns.oracle.com/sca/2006/test">
<about></about>
<initiate serviceName="client" operation="initiate" isAsync="true">
<message>
<part partName="payload">
<content>
<loanApplication xmlns="http://www.autoloan.com/ns/autoloan">
<SSN>111222333</SSN>
<email>joe.smith@example.com</email>
<customerName>Joe Smith</customerName>
<loanAmount>20000</loanAmount>
<carModel>Camry</carModel>
<carYear>2007</carYear>
<creditRating>800</creditRating>
</loanApplication>
</content>
</part>
</message>
</initiate>
<wireActions wireSource="client" operation="initiate">
<assert comparisonMethod="string">
<expected>
<location key="input" partName="payload"
xpath="/s1:loanApplication/s1:customerName"
xmlns:s1="http://www.autoloan.com/ns/autoloan"/>
<simple>Joe Smith</simple>
</expected>
</assert>
</wireActions>
</compositeTest>

詳細は、第44.4項「テスト・ケースのコンテンツの作成」を参照してください。

44.2.4 メッセージ・ファイル

メッセージ・インスタンス・ファイルを使用すると、Webサービス・パートナから返されたメッセージ・データをシミュレートできます。受け取ったメッセージ・データをXMLファイルに手動で入力したり、SOAコンポジット・エディタのテスト・モードを使用してファイルをロードすることができます。たとえば、次のメッセージ・ファイルは、パートナから返された信用格付け結果900をシミュレートします。

<rating xmlns="http://services.otn.com">900</rating>

メッセージ・ファイルをテスト・モードにロードする方法の詳細は、第44.4項「テスト・ケースのコンテンツの作成」を参照してください。

44.3 テスト・スイートとテスト・ケースの作成

この項では、SOAコンポジット・アプリケーション用のテスト・スイートとそのテスト・ケースを作成する方法について説明します。テスト・ケースは、テスト・インスタンスの実行時に実行される一連のコマンドで構成されています。

注意:

テスト・スイート名またはテスト・ケース名としてマルチバイト文字列を入力しないでください。マルチバイト文字列を入力すると、Oracle Enterprise Manager Fusion Middleware Controlからテストを実行するときにエラーが発生します。

44.3.1 テスト・スイートとテスト・ケースの作成方法

テスト・スイートとテスト・ケースを作成する手順は、次のとおりです。

1. SOAコンポジット・エディタを開きます。

2. テスト・スイートを作成するSOAコンポジット・アプリケーションを開きます。

3. 「アプリケーション・ナビゲータ」または「構造」ウィンドウに移動します。図44-1に示す「構造」ウィンドウが表示されない場合は、「表示」メイン・メニューから「構造」を選択します。

図44-1 「構造」ウィンドウ

「図44-1 構造ウィンドウ」の説明

4. 次の2つのいずれかの方法でテスト・スイートを作成します。

1. 「アプリケーション・ナビゲータ」でtestsuitesフォルダを右クリックし、「テスト・スイートの作成」を選択します。図44-2に詳細を示します。

図44-2 「テスト・スイートの作成」の選択

「図44-2 「テスト・スイートの作成」の選択」の説明

2. 「構造」ウィンドウで「テスト・スイート」を右クリックし、「テスト・スイートの作成」を選択します。図44-3に詳細を示します。

図44-3 「テスト・スイートの作成」の選択

「図44-3 「テスト・スイートの作成」の選択」の説明

5. テスト・スイート名(たとえば、Fusion Order DemoのOrderBookingMainTestsuite)を入力します。

6. 「OK」をクリックします。
「コンポジット・テストの作成」ダイアログが表示されます。

7. テスト名(この例では、Fusion Order DemoのNoErrorSanityTestを入力)と説明(オプション)を入力します。この説明は、Oracle Enterprise Manager Fusion Middleware Controlの「ユニット・テスト」タブの「テスト・ケース」ページにある「説明」列に表示されます。

8. 「OK」をクリックします。
これにより、「アプリケーション・ナビゲータ」にNoErrorSanityTest.xmlという名前のテストが作成され、次のサブフォルダも作成されます。

- componenttests
このフォルダはリリース11g リリース1では使用されません。

- includes
このフォルダはリリース11g リリース1では使用されません。

- messages
テスト・モード・ユーザー・インタフェースを使用してこのディレクトリにロードしたメッセージ・テスト・ファイルが格納されます。

- tests
NoErrorSanityTest.xmlが格納されます。

NoErrorSanityTest.xmlフォルダは「構造」ウィンドウにも表示されます。図44-4に詳細を示します。これは、SOAコンポジット・エディタのテスト・モードであることを示しています。テストの開始、アサーションおよびエミュレーションをテスト・モードで作成できます。テスト・モードでは、他の変更(サービス・コンポーネントのプロパティ・ダイアログの編集、サービス・コンポーネントのエディタへのドロップなど)は実行できません。

図44-4 NoErrorSanityTest.xmlフォルダ

「図44-4 NoErrorSanityTest.xmlフォルダ」の説明

次のオペレーティング・システム・テスト・スイート・ディレクトリも作成されます。

C:\JDeveloper\mywork\application_name\project_name\testsuites\OrderBookingMainTestsuite

テスト・ファイルを追加できるように、componenttests、includes、messagesおよびtestsの各サブディレクトリがOrderBookingMainTestsuiteの下に作成されます。

9. テスト・モードを終了してSOAコンポジット・エディタの設計モードに戻るには、デザイナ上部のNoErrorSanityTest.xmlの下にある最後のアイコンをクリックします。図44-5に詳細を示します。

図44-5 テスト・モードの終了

「図44-5 テスト・モードの終了」の説明

10. プロンプトが表示されたら変更内容を保存します。

11. 「アプリケーション・ナビゲータ」のtestsuitesフォルダの下にあるNoErrorSanityTest.xmlをダブルクリックしてテスト・モードに戻ります。図44-6に詳細を示します。

図44-6 テスト・モードへのアクセス

「図44-6 テスト・モードへのアクセス」の説明

注意:

- testsuitesフォルダのサブフォルダの下に表示されるfilelist.xmlファイルは編集しないでください。これらのファイルは設計時に自動的に作成され、実行時にテスト・ケースの数の計算に使用されます。

- テスト・スイート内に別のテスト・スイートを作成することはできません。ただし、テスト・スイートをサブディレクトリに編成することは可能です。

Fusion Order Demoでは、テスト・スイートの使用例を示します。Fusion Order Demoの詳細は、第3章「SOAサンプル・アプリケーションの概要」を参照してください。

44.4 テスト・ケースのコンテンツの作成

テスト・ケースは、プロセスの開始、エミュレーションおよびアサーションで構成されます。SOAコンポジット・エディタのテスト・モードで、これらのアクションをテスト・ケースに追加します。プロセスの開始を作成して、SOAコンポジット・アプリケーションへのクライアント・インバウンド・メッセージを開始します。エミュレーションを作成して、SOAコンポジット・アプリケーションがWebサービス・パートナから受け取る入出力メッセージ・データ、フォルト・データ、コールバック・データあるいはこれらすべてのタイプをシミュレートします。アサーションを作成して、プロセスの実行時に、XML文書全体、メッセージのパート・セクション、非リーフ要素およびリーフ要素を検証します。

44.4.1 インバウンド・メッセージの開始方法

インバウンド・メッセージを開始する手順は、次のとおりです。

最初に、SOAコンポジット・アプリケーションへのインバウンド・クライアント・メッセージの送信を開始する必要があります。

1. テスト・モードでSOAコンポジット・アプリケーションに移動します。

2. 図44-7に示すように、サービス・バインディング・コンポーネント(例: initiate)をダブルクリックします。

図44-7 サービス・バインディング・コンポーネントへのアクセス

「図44-7 サービス・バインディング・コンポーネントへのアクセス」の説明

「起動の編集」ダイアログが表示されます。

3. 表44-1に記載されている詳細を入力します。

表44-1 「起動の編集」ダイアログのフィールドと値

フィールド

値

サービス

バインディング・コンポーネント・サービスの名前(client)が表示されます。

操作

サービス・バインディング・コンポーネントの操作タイプ(initiate)が表示されます。

パート

送信するインバウンド・メッセージのタイプ(例: payload)を選択します。

値

次の方法で、クライアントから送信されるシミュレート済メッセージを作成します。

- 手動で入力

クリックすると、「値の入力」フィールドにメッセージ・データを手動で入力できます。「サンプルの生成」ボタンをクリックすると、テスト用のサンプル・ファイルが自動的に生成されます。「別名保存」をクリックして、サンプル・ファイルを保存します。

- ファイルからロード

「参照」アイコンをクリックすると、メッセージ・データをファイルからロードできます。ファイルは「アプリケーション・ナビゲータ」のmessagesフォルダに追加されます。

図44-8に、このダイアログを示します。

図44-8 「起動の編集」ダイアログ

「図44-8 「起動の編集」ダイアログ」の説明

クライアントからのインバウンド・プロセス開始メッセージは、次のようになります。

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Generated by Oracle SCA Test Modeler version 1.0 at [7/12/07 8:36 AM]. -->
<compositeTest compositeDN="CompositeTest"
xmlns="http://xmlns.oracle.com/sca/2006/test">
<about/>
<initiate serviceName="client" operation="initiate" isAsync="true">
<message>
<part partName="payload">
<filePath>loanApplication.xml</filePath>
</part>
</message>
</initiate>
. . .
. . .

プロセス開始ファイルで参照されるloanApplication.xmlには、次のように融資申請ペイロードが含まれます。

<loanApplication xmlns="http://www.autoloan.com/ns/autoloan">
<SSN>111222333</SSN>
<email>joe.smith@example.com</email>
<customerName>Joe Smith</customerName>
<loanAmount>20000</loanAmount>
<carModel>Camry</carModel>
<carYear>2007</carYear>
<creditRating>800</creditRating>
</loanApplication>

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

44.4.2 アウトバウンド・メッセージのエミュレート方法

アウトバウンド・メッセージをエミュレートする手順は、次のとおりです。

注意:

テスト・ケースのインスタンス内での複数エミュレーションの作成がサポートされるのは、一方のエミュレーションが出力メッセージ用で、他方のエミュレーションがコールバック・メッセージ用の場合のみです。

同期のWebサービス・パートナから返されるメッセージをシミュレートできます。

1. テスト・モードでSOAコンポジット・アプリケーションに移動します。

2. 「アプリケーション・ナビゲータ」のtestsuitesフォルダにあるテスト・ケースをダブルクリックします。図44-9に詳細を示します。

図44-9 テスト・ケースへのアクセス

「図44-9 テスト・ケースへのアクセス」の説明

SOAコンポジット・エディタ内のSOAコンポジット・アプリケーションがリフレッシュされて、テスト・モードで表示されます。このモードでは、テスト情報を定義できます。

3. テストするSOAコンポジット・アプリケーション領域のワイヤをダブルクリックします。図44-10に示す例では、LoanBrokerプロセスと同期のCreditRating Webサービスの間のワイヤが選択されています。

図44-10 ワイヤへのアクセス

「図44-10 ワイヤへのアクセス」の説明

これにより、図44-11に示す「ワイヤ・アクション」ダイアログが表示されます。このダイアログでは、SOAコンポジット・アプリケーションの選択したパートに対するエミュレーションとアサーションを設計できます。

図44-11 「ワイヤ・アクション」ダイアログ

「図44-11 「ワイヤ・アクション」ダイアログ」の説明

4. 「エミュレート」タブをクリックします。

5. 「追加」アイコンをクリックします。

6. 「出力のエミュレート」をクリックします。

7. 表44-2に記載されている詳細を入力します。

表44-2 出力メッセージのエミュレート・ダイアログのフィールドと値

フィールド

値

パート

出力を含むメッセージ・パート(例: payload)を選択します。

値

次の方法で、Webサービス・パートナから返されるシミュレート済出力メッセージを作成します。

- 手動で入力

クリックすると、「値の入力」フィールドにメッセージ・データを手動で入力できます。「サンプルの生成」ボタンをクリックすると、テスト用のサンプル・ファイルが自動的に生成されます。「別名保存」をクリックして、サンプル・ファイルを保存します。

- ファイルからロード

「参照」アイコンをクリックすると、メッセージ・データをファイルからロードできます。ファイルは「アプリケーション・ナビゲータ」のmessagesフォルダに追加されます。

期間

Webサービス・パートナからメッセージが配信されるまでの最大待機時間を入力します。

図44-12に、このダイアログを示します。

図44-12 「出力のエミュレート」が選択された状態の「エミュレート」ダイアログ

「図44-12 「出力のエミュレート」が選択された状態の「エミュレート」ダイアログ」の説明

手動入力またはファイルからロードして作成する、同期のWebサービス・パートナからのシミュレート済出力メッセージは、次のようになります。

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Generated by Oracle SCA Test Modeler version 1.0 at [7/3/07 3:26 PM]. -->
<compositeTest compositeDN="CompositeTest"
xmlns="http://xmlns.oracle.com/sca/2006/test">
<about></about>
<initiate serviceName="client" operation="initiate" isAsync="true">
<message>
<part partName="payload">
<filePath>loanApplication.xml</filePath>
</part>
</message>
</initiate>
<wireActions wireSource="LoanBroker/CreditRatingService" operation="process">
<emulate duration="PT0S">
<message>
<part partName="payload">
<filePath>creditRatingResult.xml</filePath>
</part>
</message>
</emulate>
</wireActions>
</compositeTest>

出力メッセージで参照されるcreditRatingResult.xmlメッセージ・ファイルは、信用格付け結果の詳細を提供します。

<rating xmlns="http://services.otn.com">900</rating>

8. 「OK」をクリックします。

44.4.3 コールバック・メッセージのエミュレート方法

コールバック・メッセージをエミュレートする手順は、次のとおりです。

注意:

テスト・ケースのインスタンス内での複数エミュレーションの作成がサポートされるのは、一方のエミュレーションが出力メッセージ用で、他方のエミュレーションがコールバック・メッセージ用の場合のみです。

非同期のWebサービス・パートナから返されるコールバック・メッセージをシミュレートできます。

1. 第44.4.2項「アウトバウンド・メッセージのエミュレート方法」のステップ1からステップ3を実行して、ワイヤ・アクション・ダイアログにアクセスします。

2. 「エミュレート」タブをクリックします。

3. 「追加」アイコンをクリックします。

4. 「コールバックのエミュレート」をクリックします。このフィールドは非同期プロセスの場合のみ有効になります。

5. 表44-3に記載されている詳細を入力します。

表44-3 コールバック・メッセージのエミュレートのフィールド

フィールド

値

コールバック操作

コールバック操作(例: onResult)を選択します。

コールバック・メッセージ

非同期プロセスのコールバック・メッセージ名が表示されます。

パート

コールバックを含むメッセージ・パート(例: payload)を選択します。

値

次の方法で、非同期のWebサービス・パートナから返されるシミュレート済コールバック・メッセージを作成します。

- 手動で入力

クリックすると、「値の入力」フィールドにメッセージ・データを手動で入力できます。「サンプルの生成」ボタンをクリックすると、テスト用のサンプル・ファイルが自動的に生成されます。「別名保存」をクリックして、サンプル・ファイルを保存します。

- ファイルからロード

「参照」アイコンをクリックすると、メッセージ・データをファイルからロードできます。ファイルは「アプリケーション・ナビゲータ」のmessagesフォルダに追加されます。

期間

Webサービス・パートナからコールバック・メッセージが配信されるまでの最大待機時間を入力します。

図44-13に、このダイアログを示します。

図44-13 「コールバックのエミュレート」が選択された状態の「エミュレート」ダイアログ

「図44-13 「コールバックのエミュレート」が選択された状態の「エミュレート」ダイアログ」の説明

Webサービス・パートナからのシミュレート済コールバック・メッセージは、次のようになります。このメッセージは手動で入力するか、ファイルからロードします。

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Generated by Oracle SCA Test Modeler version 1.0 at [7/3/07 3:27 PM]. -->
<compositeTest compositeDN="CompositeTest"
xmlns="http://xmlns.oracle.com/sca/2006/test">
<about></about>
<initiate serviceName="client" operation="initiate" isAsync="true">
<message>
<part partName="payload">
<filePath>loanApplication.xml</filePath>
</part>
</message>
</initiate>
<wireActions wireSource="LoanBroker/LoanService" operation="initiate">
<emulate callbackOperation="onResult" duration="PT0S">
<message>
<part partName="payload">
<filePath>loanOffer.xml</filePath>
</part>
</message>
</emulate>
</wireActions>
</compositeTest>

コールバック・メッセージで参照されるloanOffer.xmlメッセージ・ファイルは、信用格付け承認の詳細を提供します。

<loanOffer xmlns="http://www.autoloan.com/ns/autoloan">
<providerName>Bank Of America</providerName>
<selected>false</selected>
<approved>true</approved>
<APR>1.9</APR>
</loanOffer>

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

44.4.4 フォルト・メッセージのエミュレート方法

フォルト・メッセージをエミュレートする手順は、次のとおりです。

Webサービス・パートナから返されるフォルト・メッセージをシミュレートできます。このシミュレーションによって、プロセス内のフォルト処理機能をテストできます。

1. 第44.4.2項「アウトバウンド・メッセージのエミュレート方法」のステップ1からステップ3を実行して、ワイヤ・アクション・ダイアログにアクセスします。

2. 「エミュレート」タブをクリックします。

3. 「追加」アイコンをクリックします。

4. 「フォルトのエミュレート」をクリックします。

5. 表44-4に記載されている詳細を入力します。

表44-4 フォルト・メッセージのエミュレート・フィールド

フィールド

値

フォルト

パートナから返されるフォルトのタイプ(例: NegativeCredit)を選択します。

フォルト・メッセージ

メッセージ名が表示されます。

パート

フォルトを含むメッセージ・パート(例: payload)を選択します。

値

次の方法で、Webサービス・パートナから返されるシミュレート済フォルト・メッセージを作成します。

- 手動で入力

クリックすると、「値の入力」フィールドにメッセージ・データを手動で入力できます。「サンプルの生成」ボタンをクリックすると、テスト用のサンプル・ファイルが自動的に生成されます。「別名保存」をクリックして、サンプル・ファイルを保存します。

- ファイルからロード

「参照」アイコンをクリックすると、メッセージ・データをファイルからロードできます。ファイルは「アプリケーション・ナビゲータ」のmessagesフォルダに追加されます。

期間

Webサービス・パートナからフォルト・メッセージが配信されるまでの最大待機時間を入力します。

図44-14に、このダイアログを示します。

図44-14 「フォルトのエミュレート」が選択された状態の「エミュレート」ダイアログ

「図44-14 「フォルトのエミュレート」が選択された状態の「エミュレート」ダイアログ」の説明

手動入力またはファイルからロードして作成する、Webサービス・パートナからのシミュレート済フォルト・メッセージの例は、第44.2.2項「エミュレーション」を参照してください。

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

44.4.5 アサーションの作成方法

アサーションを作成する手順は、次のとおりです。

アサーションを実行して、変数データやプロセス・フローを検証します。アサーションを使用すると、プロセスの実行時に、XML文書全体のテスト・データ、メッセージのパート・セクション、非リーフ要素またはリーフ要素を検証できます。この検証は、値を抽出し、その値を予想値と比較して行います。

1. 第44.4.2項「アウトバウンド・メッセージのエミュレート方法」のステップ1からステップ3を実行して、ワイヤ・アクション・ダイアログにアクセスします。

2. 「アサート」タブをクリックします。
図44-15に、このダイアログを示します。

図44-15 「アサート」タブが選択された状態の「ワイヤ・アクション」ダイアログ

「図44-15 「アサート」タブが選択された状態の「ワイヤ・アクション」ダイアログ」の説明

3. 「追加」アイコンをクリックします。
「アサートの作成」ダイアログが表示されます。

4. 表44-5に示すように、ダイアログの上部で、実行するアサーションのタイプを選択します。この操作で入力メッセージのみがサポートされる場合は、「入力のアサート」ボタンが有効になります。この操作で入力メッセージと出力メッセージの両方がサポートされる場合は、「入力のアサート」と「出力のアサート」ボタンの両方が有効になります。

表44-5 アサーションのタイプ

タイプ

説明

入力のアサート

インバウンド方向のアサーションを作成する場合に選択します。

出力のアサート

アウトバウンド方向のアサーションを作成する場合に選択します。

コールバックのアサート

コールバックのアサーションを作成する場合に選択します。

フォルトのアサート

フォルトをアプリケーション・フローにアサートする場合に選択します。

5. 実行するアサーションのタイプに応じて、表44-6に示す各項を参照してください。

表44-6 アサーションのタイプ

アサーションの対象

参照先

- 文書のパート・セクション

- 非リーフ要素

- XML文書全体

第44.4.5.1項「パート・セクション、非リーフ要素またはXML文書全体に対するアサーションの作成」

リーフ要素

第44.4.5.2項「リーフ要素に対するアサーションの作成」

44.4.5.1 パート・セクション、非リーフ要素またはXML文書全体に対するアサーションの作成

パート・セクション、非リーフ要素またはXML文書全体に対してアサーションを作成する手順は、次のとおりです。

このテストでは、各値が予想値と比較されます。

注意:

メッセージに複数のパート(たとえば、payload1、payload2およびpayload3)がある場合は、各パートに対して個別のアサーションを作成する必要があります。

1. 「参照」をクリックして、アサートの対象となるターゲットのパート・セクション、非リーフ要素またはXML文書全体を選択します。
「アサート・ターゲットの選択」ダイアログが表示されます。

2. 値を選択して、「OK」をクリックします。たとえば、payloadなどの変数を選択してパート・セクション・アサーションを実行します。

図44-16に、このダイアログを示します。この例は、パート・セクション・アサーションの実行方法を示していますが、XML文書全体アサーションの例では、LoanBrokerRequestMessageが選択され、非リーフ・アサーションの例では、loanApplicationが選択されます。

図44-16 メッセージのパート・セクションの選択

「図44-16 メッセージのパート・セクションの選択」の説明

「アサートの作成」ダイアログは、選択した変数に基づいてリフレッシュされます。

3. 残りのフィールドに、表44-7に記載されている詳細を入力します。

表44-7 「アサートの作成」ダイアログのフィールドと値

フィールド

値

フォルト

アサートするフォルトのタイプ(例: NegativeCredit)を選択します。このフィールドは、第44.4.5項「アサーションの作成方法」のステップ4で「フォルトのアサート」を選択した場合にのみ表示されます。

アサート・ターゲット

ステップ2で選択したアサート・ターゲットが表示されます。

比較方法

比較の厳密度を指定します。

- xml-identical: XML文書の要素と属性間で正確な一致が必要な場合に使用します。2つのXML文書の間に差異がある場合、比較は失敗します。たとえば、一方の文書で要素名のpurchaseOrderが使用され、他方の文書で要素名のinvoiceが使用されている場合、比較は失敗します。また、この比較は、2つの要素の子属性は同じだが、各要素内の属性の順序が異なる場合も失敗します。

- xml-similar: コンテンツの類似性を比較するが、正確な一致は必要ない場合に使用します。たとえば、双方で同じネームスペースURIが使用されているが、それぞれのネームスペース接頭辞が異なる場合は、比較に成功します。この比較は、双方に同じ子属性を持つ同じ要素はあるが、各要素内の属性の順序が異なる場合も成功します。
前述の2つ例の差異は、リカバリ可能とみなされるため、同一と判断されます。

XMLファイルのコンテンツ比較の詳細は、XMLUnitに関する次のWebサイトを参照してください。

http://xmlunit.sourceforge.net/userguide/html/ar01s03.html#The%20Difference%20Engine

パート

XML文書を含むメッセージ・パート(例: payload)を選択します。

値

次の方法で、コンテンツをアサート・ターゲットのコンテンツと比較するXML文書を作成します。

- 手動で入力

クリックすると、「値の入力」フィールドにメッセージ・データを手動で入力できます。「サンプルの生成」ボタンをクリックすると、テスト用のサンプル・ファイルが自動的に生成されます。「別名保存」をクリックして、サンプル・ファイルを保存します。

- ファイルからロード

「参照」アイコンをクリックすると、メッセージ・データをファイルからロードできます。ファイルは「アプリケーション・ナビゲータ」のmessagesフォルダに追加されます。

説明

説明を入力します(オプション)。

図44-17に、「入力のアサート」が選択された状態のダイアログを示します。

図44-17 「入力のアサート」が選択された状態の「アサートの作成」ダイアログ

「図44-17 「入力のアサート」が選択された状態の「アサートの作成」ダイアログ」の説明

4. 「OK」をクリックします。
図44-18に示すように、「ワイヤ・アクション」ダイアログに、選択した内容が表示されます。

図44-18 「アサート」タブが選択された状態の「ワイヤ・アクション」ダイアログ

「図44-18 「アサート」タブが選択された状態の「ワイヤ・アクション」ダイアログ」の説明

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

44.4.5.2 リーフ要素に対するアサーションの作成

リーフ要素に対してアサーションを作成する手順は、次のとおりです。

このテストでは、値が予想値と比較されます。

1. 「参照」をクリックして、アサートするリーフ要素を選択します。
「アサート・ターゲットの選択」ダイアログが表示されます。

2. リーフ要素を選択して、「OK」をクリックします。たとえば、loanAmountを選択してアサーションを実行します。図44-19に詳細を示します。

図44-19 リーフ要素の選択

「図44-19 リーフ要素の選択」の説明

「アサートの作成」ダイアログは、選択したXML文書全体に基づいてリフレッシュされます。

3. 残りのフィールドに、表44-8に記載されている詳細を入力します。

表44-8 「アサートの作成」ダイアログのフィールドと値

フィールド

値

フォルト

アサートするフォルトのタイプ(例: NegativeCredit)を選択します。このフィールドは、第44.4.5項「アサーションの作成方法」のステップ4で「フォルトのアサート」を選択した場合にのみ表示されます。

コールバック操作

アサートするコールバックのタイプ(例: onResult)を選択します。このフィールドは、第44.4.5項「アサーションの作成方法」のステップ4で「コールバックのアサート」を選択した場合にのみ表示されます。

アサート・ターゲット

ステップ2で選択した変数アサート・ターゲットが表示されます。

比較方法

次の比較タイプを選択します。

- string: 文字列値を比較します。

- number: 数値を比較します。

- pattern-match: 正規表現パターン(例: [0-9]*)を比較します。Java Development Kit(JDK)の正規表現(regexp)コンストラクトがサポートされています。たとえば、パターンab[0-9]*cdの入力は、ab123cdまたはab456cdの値が適正であることを意味します。アスタリスク(*)は、任意の発生数を示します。

アサートの値

予想値を入力します。この値はアサート・ターゲットの値と比較されます。

説明

説明を入力します(オプション)。

図44-20に、「入力のアサート」が選択された状態のダイアログを示します。

図44-20 「アサートの作成」ダイアログ

「図44-20 「アサートの作成」ダイアログ」の説明

4. 「OK」をクリックします。
図44-21に示すように、「ワイヤ・アクション」ダイアログに、選択した内容が表示されます。

図44-21 「アサート」タブが選択された状態の「ワイヤ・アクション」ダイアログ

「図44-21 「アサート」タブが選択された状態の「ワイヤ・アクション」ダイアログ」の説明

44.4.6 アサーションに関する注意事項

テストが実行されて、返されたレスポンス・タイプが想定されているタイプと異なる場合、アサーションはスキップされます。たとえば、特定のメッセージに対してフォルト(RemoteFault)が返されることを想定していたが、かわりにレスポンス(BpelResponseMessage)が返される場合です。

常に想定されている動作をアサートおよびエミュレーションすることをお薦めします。

44.5 BPELプロセス・サービス・コンポーネントのテスト

新規または既存のSOAコンポジット・アプリケーションのテスト・スイートに含まれている、個別のBPELプロセス・サービス・コンポーネントのテストを自動化できます。本番環境にデプロイする前に、これらのテスト・ケースを使用して、BPELプロセスとそのWebサービス・パートナの間の相互作用をシミュレートできます。これにより、本番環境へのデプロイメント準備が完了するまでに、BPELプロセスとWebサービス・パートナの相互作用が期待どおりであるかを確認できます。

例44-5に、LoanBroker BPELプロセス・サービス・コンポーネントに対するコンポーネント・テストを含む、SOAコンポジット・アプリケーションのテスト・スイートの例を示します。

例44-5 BPEL SOAコンポジット・アプリケーションのテスト・スイートでのBPELプロセス・サービス・コンポーネント・テスト

<compositeTest compositeDN="TestFwk"
xmlns="http://xmlns.oracle.com/sca/2006/test">
<about></about>
<initiate serviceName="client" operation="initiate" isAsync="true">
<message>
<part partName="payload">
<content>
<loanApplication xmlns="http://www.autoloan.com/ns/autoloan">
<SSN>111222333</SSN>
<email>joe.smith@example.com</email>
<customerName>Joe Smith</customerName>
<loanAmount>20000</loanAmount>
<carModel>Camry</carModel>
<carYear>2007</carYear>
<creditRating>800</creditRating>
</loanApplication>
</content>
</part>
</message>
</initiate>
<componentTest componentName="LoanBroker" filePath="assert.xml"/>
</compositeTest>

例44-5では、assert.xmlテストによって、変数およびフォルトに対してアサーションが指定されています。

注意:

ビジネス・ルール、ヒューマン・タスク、Oracle MediatorまたはSpringサービス・コンポーネントのテストは自動化できません。

44.5.1 BPELプロセスのアクティビティのアサーションの概要

BPELプロセスのアクティビティに対して、変数アサーションおよびフォルト・アサーションを作成できます。例44-6では、BPELプロセスでtextVarおよびcrOutputのコンテンツが指定されたコンテンツと必ず一致するように指示しています。

例44-6 BPELアクティビティに対するアサーション

<bpelTest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/sca/2006/test"
componentName="LoanBroker">
<activityActions activityName="elementAssign">
<assert comparisonMethod="number">
<description>Some other assertion.</description>
<expected>
<location key="textVar"
xmlns:loan="http://www.autoloan.com/ns/autoloan"/>
<simple>111222333</simple>
</expected>
</assert>
</activityActions>
<activityActions activityName="invokeCR">
<assert comparisonMethod="number">
<description>Make sure we got the output.</description>
<expected>
<location key="crOutput" partName="payload" xpath="/tns:rating"
xmlns:tns="http://services.otn.com"/>
<simple>560</simple>
</expected>
</assert>
</activityActions>
</bpelTest>

BPELプロセスのアクティビティに対するアサーションの作成の詳細は、第44.5.5項「アサーションの作成方法」を参照してください。

44.5.2 Waitアクティビティの早送りアクションの概要

waitアクティビティを使用すると、プロセスは指定された期間または時間制限に達するまで待機できます。BPELプロセス・サービス・コンポーネントをテストするときには、waitアクティビティをバイパスしてテストを続行することが必要となる場合があります。早送りアクションを使用すると、waitアクティビティをバイパスして、テスト・シナリオを進める時間を指定できます。例44-7では、BPELプロセスにwaitアクティビティを1秒間バイパスするように指示しています。

例44-7 waitアクティビティの早送りアクション

<bpelTest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/sca/2006/test
TestFwk.xsd"
xmlns="http://xmlns.oracle.com/sca/2006/test"
componentName="LoanBroker">
<activityActions activityName="wait1">
<fastForward duration="PT1S"/>
</activityActions>
</bpelTest>

waitアクティビティの早送りアクションの作成の詳細は、第44.5.6項「waitアクティビティのバイパス方法」を参照してください。

44.5.3 Assertアクティビティの実行の概要

BPELプロセスでアクティビティが実行される回数を指定して検証できます。例44-8では、invoke、elementAssign、invokeCRおよびreplyOutputの各アクティビティをそれぞれ1回実行するよう、BPELプロセスに対して指示しています。

例44-8 Assertアクティビティの実行

<bpelTest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/sca/2006/test"
componentName="LoanBroker">
<assertActivityExecuted activityName="invoke" executionCount="1"/>
<assertActivityExecuted activityName="elementAssign" executionCount="1"/>
<assertActivityExecuted activityName="invokeCR" executionCount="1"/>
<assertActivityExecuted activityName="replyOutput" executionCount="1"/>
</bpelTest>

assertアクティビティ実行の作成の詳細は、第44.5.7項「アクティビティの実行回数の指定方法」を参照してください。

44.5.4 BPELプロセス・サービス・コンポーネントのテストの作成方法

BPELプロセス・サービス・コンポーネントのテストを作成する手順は、次のとおりです。

1. テスト・スイートのBPELプロセスをダブルクリックします(この例ではLoanBroker)。
テスト・スイートをまだ作成していない場合は、第44.3.1項「テスト・スイートとテスト・ケースの作成方法」を参照してください。作成するBPELプロセス・サービス・コンポーネントのテストは、SOAコンポジット・アプリケーションのテスト・スイート全体に含まれます。

図44-22に示すように、「コンポーネント・テストの作成」ダイアログが表示されます。

図44-22 「コンポーネント・テストの作成」ダイアログ

「図44-22 「コンポーネント・テストの作成」ダイアログ」の説明

2. 図44-22に示すように、デフォルト名をそのまま使用するか、または別の名前を入力します。

3. 「OK」をクリックします。
図44-23に示すように、テスト・モードのBPELプロセスが表示されます。

左下にある「構造」ウィンドウに、「アサート」、「早送り」および「アサート実行数」フォルダが表示されます。これらのフォルダを右クリックして、アサーション、早送り(waitアクティビティの実行をバイパスします)およびアサーションの実行数をそれぞれ作成します。

デザイナの上部に、次のボタンが表示されます。

- BPEL: クリックすると、Oracle BPELデザイナの設計モード(テスト・モード以外)で、BPELプロセス・サービス・コンポーネントにアクセスできます。図44-23では、BPELプロセスのテスト・モードであるため、このボタンは現在有効になっています。

- 監視: クリックすると、Oracle BPELデザイナでBPELプロセス・モニターを構成できます。BPELプロセス・モニターでは、データを分析してグラフィカル表示するために、Oracle BAMアダプタを介してデータをOracle BAMに送信できます。詳細は、第53.3項「Oracle BAM Monitor ExpressとBPELプロセスの併用」を参照してください。

- テスト: BPELプロセス・サービス・コンポーネントのテスト・モードであるため、このボタンは現在無効になっています。このボタンは、「BPEL」ボタンをクリックしてOracle BPELデザイナの設計モードになると有効になります。

図44-23 テスト・モードのBPELプロセス・サービス・コンポーネント

「図44-23 テスト・モードのBPELプロセス・サービス・コンポーネント」の説明

44.5.5 アサーションの作成方法

BPELプロセスのアクティビティで、変数およびフォルトに対してアサーションを作成できます。

アサーションを作成する手順は、次のとおりです。

1. 次の方法のいずれかを使用してアサーションを作成するアクティビティを選択します。

1. 「構造」ウィンドウで、「アサート」フォルダを右クリックして「作成」を選択するか、または「アサート」フォルダを選択して「追加」ボタンをクリックします。
「Assert」ダイアログが表示されます。

2. 「アクティビティ名」フィールドで、「参照」アイコンをクリックしてアクティビティを選択します。

または、

1. デザイナで特定のBPELアクティビティを右クリックし、「アクティビティ・テスト・データの編集」を選択します。

2. 「アサート」タブをクリックします。

3. 「追加」アイコンをクリックします。
選択したアクティビティが「アクティビティ名」フィールドに表示されます。

2. 表44-9に示すように、残りのフィールドに詳細を入力します。

図44-9 BPELアクティビティに対するアサーション

フィールド

値

変数のアサート

変数をアサートする場合に選択します。

フォルトのアサート

フォルトをアサートする場合に選択します。

ターゲット

次のようにアサートするターゲットを選択します。

- 「変数のアサート」を選択した場合は、「参照」アイコンをクリックしてアサートする変数のタイプ(/autoloan:loanApplication/autoloan:SSNなど)を選択します。

- 「フォルトのアサート」を選択した場合は、「参照」アイコンをクリックしてアサートするフォルトのタイプ(NegativeCreditなど)を選択します。

比較方法

XMLドキュメントを比較する場合は、比較の厳密度を指定します。

- XML Identical: XML文書の要素と属性間で正確な比較が必要な場合に使用します。2つのXML文書の間に差異がある場合、比較は失敗します。たとえば、一方の文書で要素名のpurchaseOrderが使用され、他方の文書で要素名のinvoiceが使用されている場合、比較は失敗します。また、この比較は、2つの要素の子属性は同じだが、各要素内の属性の順序が異なる場合も失敗します。

- XML Similar: コンテンツの類似性を比較するが、正確な一致は必要ない場合に使用します。たとえば、双方で同じネームスペースURIが使用されているが、それぞれのネームスペース接頭辞が異なる場合は、比較に成功します。この比較は、双方に同じ子属性を持つ同じ要素はあるが、各要素内の属性の順序が異なる場合も成功します。
前述の2つ例の差異は、リカバリ可能とみなされるため、同一と判断されます。

変数を比較する場合は、次のようにタイプを指定します。

- 文字列: 文字列値を比較する場合に選択します。

- Java正規表現によるパターン一致: 正規表現によるパターン(たとえば、[0-9]*)を比較する場合に選択します。Java Development Kit(JDK)の正規表現(regexp)コンストラクトがサポートされています。たとえば、パターンab[0-9]*cdの入力は、ab123cdまたはab456cdの値が適正であることを意味します。アスタリスク(*)は、任意の発生数を示します。

- 数値: 数値を比較する場合に選択します。

パート

XML文書を含むメッセージ・パート(例: payload)を選択します。

値

次の方法で、コンテンツをアサート・ターゲットのコンテンツと比較するXML文書を作成します。

- 手動で入力

クリックすると、「値の入力」フィールドにメッセージ・データを手動で入力できます。「インスタンス・サンプルの生成」アイコンをクリックすると、テスト用のサンプル・ファイルが自動的に生成されます。「別名保存」アイコンをクリックして、サンプル・ファイルを保存します。

- ファイルからロード

「参照」アイコンをクリックすると、メッセージ・データをファイルからロードできます。ファイルは「アプリケーション・ナビゲータ」のmessagesフォルダに追加されます。

説明

説明を入力します(オプション)。

3. 「OK」をクリックします。
「構造」ウィンドウで「アサート」フォルダを展開し、アサートを作成したアクティビティを表示します。図44-24に詳細を示します。

図44-24 「構造」ウィンドウの「アサート」フォルダ

「図44-24 「構造」ウィンドウの「アサート」フォルダ」の説明

44.5.6 waitアクティビティのバイパス方法

waitアクティビティをバイパスして、テスト・シナリオを進める時間を指定できます。時間制限が時間切れになると、waitアクティビティは処理されます。

waitアクティビティをバイパスする手順は、次のとおりです。

1. 次の方法のいずれかを使用して、バイパスするwaitアクティビティを選択します。

1. 「構造」ウィンドウで、「早送り」フォルダを右クリックして「作成」を選択するか、または「早送り」フォルダを選択して「追加」ボタンをクリックします。
「早送り」ダイアログが表示されます。

2. 「アクティビティ名」フィールドで、「参照」アイコンをクリックしてwaitアクティビティを選択します。

または、

1. デザイナで特定のwaitアクティビティを右クリックし、「アクティビティ・テスト・データの編集」を選択します。

2. 「早送り」タブをクリックします。このタブは、BPELプロセスにwaitアクティビティが存在する場合にのみ表示されます。

3. 「追加」アイコンをクリックします。
選択したwaitアクティビティが「アクティビティ名」フィールドに表示されます。

2. 「期間」リストで、waitアクティビティをバイパスする期間(1秒など)を指定します。

3. 「OK」をクリックします。

4. 「構造」ウィンドウで「早送り」フォルダを展開して、waitアクティビティをバイパスして、テスト・シナリオを進める時間を表示します。図44-25に詳細を示します。

図44-25 「構造」ウィンドウの「早送り」フォルダ

「図44-25 「構造」ウィンドウの「早送り」フォルダ」の説明

waitアクティビティの詳細は、第15.4項「有効期限を設定するwaitアクティビティの作成」を参照してください。

44.5.7 アクティビティの実行回数の指定方法

アクティビティを指定した回数実行するよう指定できます。これにより、アクティビティがプロセス・フローで適切な回数だけ実行されることを確認できます(Whileアクティビティが適切な回数だけ実行されることを確認するなど)。

アクティビティの実行回数を指定する手順は、次のとおりです。

1. 次の方法のいずれかを使用して、実行するアクティビティを選択します。

1. 「構造」ウィンドウで、「アサート実行数」フォルダを右クリックして「作成」を選択するか、または「アサート実行数」フォルダを選択して「追加」ボタンをクリックします。
「アサート実行数」ダイアログが表示されます。

2. 「アクティビティ名」フィールドで、「参照」アイコンをクリックして実行するアクティビティを選択します。

または、

1. デザイナで特定のBPELアクティビティを右クリックし、「アクティビティ・テスト・データの編集」を選択します。

2. 「アサート実行数」タブをクリックします。

3. 「追加」アイコンをクリックします。
選択したアクティビティが「アクティビティ名」フィールドに表示されます。

2. 「カウント」リストで値を選択します。

3. 「OK」をクリックします。
「アクティビティ・テスト・データ」ダイアログは、図44-26のようになります。

図44-26 「アクティビティ・テスト・データ」ダイアログ

「図44-26 「アクティビティ・テスト・データ」ダイアログ」の説明

4. 「構造」ウィンドウで「アサート実行数」フォルダを展開し、アクティビティに割り当てた実行数を表示します。図44-27に詳細を示します。

図44-27 「構造」ウィンドウの「アサート実行数」フォルダ

「図44-27 「構造」ウィンドウの「アサート実行数」フォルダ」の説明

44.6 テスト・スイートのデプロイおよび実行

テスト・ケースのテスト・スイートを作成した後は、そのスイートをSOAコンポジット・アプリケーションの一部としてデプロイします。その後、Oracle Enterprise Manager Fusion Middleware Controlからテスト・スイートを実行します。

- Oracle JDeveloperからのSOAコンポジット・アプリケーションのデプロイの詳細は、第43.7.1項「Oracle JDeveloperでの単一のSOAコンポジットのデプロイ方法」を参照してください。

- SOAコンポジット・アプリケーションのデプロイおよびOracle Enterprise Manager Fusion Middleware Controlからのテスト・スイートの実行の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

- sca_test WLSTコマンドを使用したテスト・スイートの実行の詳細は、Oracle Fusion Middleware WebLogic Scripting Toolコマンド・リファレンスのsca_testの項を参照してください。

- ant-sca-test.xmlのantスクリプトを使用したテスト・スイートの実行の詳細は、第43.7.6.1項「SOAコンポジット・アプリケーションのテストを自動化するためのantの使用方法」を参照してください。

第IX部

高度なトピック

この部では、高度なトピックについて説明します。

この部は、次の章で構成されています。

- 第45章「大規模ドキュメントおよび多数のインスタンスの管理」

- 第46章「SOAコンポジット・アプリケーションのカスタマイズ」

- 第47章「ドメイン値マップの使用」

- 第48章「ドメイン値マップでのOracle SOAコンポーザの使用」

- 第49章「相互参照の使用」

- 第50章「コンポジット・センサーの定義」

- 第51章「2レイヤーのビジネス・プロセス管理(BPM)の使用」

- 第52章「Spring Frameworkを使用したSOAコンポジット・アプリケーションへの統合」

45 大規模ドキュメントおよび多数のインスタンスの管理

この章では、Oracle SOA Suiteで大規模ドキュメントとメタデータを管理する場合、および多数のインスタンスがある環境を管理する場合のベスト・プラクティスについて説明します。また、大規模ドキュメントの処理のユースケース、大規模ドキュメントの同時処理に関する制限およびチューニングに関する推奨事項についても説明します。

この章には次の項が含まれます:

- 第45.1項「大規模ドキュメントを処理する場合のベスト・プラクティス」

- 第45.2項「大規模メタデータを処理する場合のベスト・プラクティス」

- 第45.3項「多数のインスタンスを処理する場合のベスト・プラクティス」

Oracle SOA Suiteのチューニングおよびパフォーマンスの詳細は、『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』を参照してください。

Oracle SOA Suiteの問題のトラブルシューティングの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の「Oracle SOA SuiteおよびOracle BPM Suiteのトラブルシューティング」の章を参照してください。

大量のデータを迅速に移動し、複雑なデータ変換を処理するOracle Data Integratorの使用については、次のURLにアクセスしてください。

http://www.oracle.com/technetwork/middleware/data-integrator

45.1 大規模ドキュメントを処理する場合のベスト・プラクティス

この項では、大規模ドキュメントを処理する次のシナリオについて説明し、各シナリオに対するベスト・プラクティスなアプローチを示します。大規模なペイロードを開発および実行する前に、これらのベスト・プラクティスに従うことをお薦めします。

45.1.1 大規模ドキュメントを処理する場合のユースケース

この項では、大規模ドキュメントを処理する場合のユースケースについて説明します。

45.1.1.1 XMLペイロードへのバイナリ・オブジェクトのBase64エンコード・テキストとしての受け渡し

この項では、バイナリ・オブジェクトをBase64エンコード・テキストとしてXMLペイロードに渡す場合のユースケースについて説明します。

45.1.1.1.1 SOAPインライン

このユースケースでは、バイナリ・アタッチメント(画像など)がテキストとしてBase64でエンコードされ、インラインでXML文書に渡されます。表45-1に詳細を示します。

表45-1 機能

機能

説明

セキュリティ

サポート対象。

フィルタ/トランスフォーメーション/割当て

トランスフォーメーションを使用すると、パフォーマンスの低下またはメモリー不足のエラー(あるいはその両方)につながる場合があります。

ファンアウト

サポート対象。

バインディング

WSバインディングが、バイナリ・アタッチメントをドキュメント・オブジェクト・モデル(DOM)として送信します。

Oracle BPEL Process Manager/Oracle Mediator

BPELプロセスでJavaのexecを使用してデコードできます。

45.1.1.1.2 SOAPのMTOM

このユースケースでは、バイナリ・アタッチメント(画像など)がテキストとしてBase64でエンコードされ、MTOM(メッセージ転送最適化メカニズム)ドキュメントとして渡されます。表45-2に詳細を示します。

表45-2 機能

機能

説明

セキュリティ

サポート対象。

フィルタ/トランスフォーメーション/割当て

assignアクティビティはサポート対象です。

ファンアウト

サポート対象。

バインディング

WSバインディングが、MTOMとして送信されるアタッチメントをマテリアライズし、Base64エンコード形式で内部に配置します(ストリーミングはサポートされていません)。

Oracle BPEL Process Manager/Oracle Mediator

追加作業は不要です。

45.1.1.1.3 ファイル/FTPアダプタによって渡される不透明(Opaque)コンテンツ

このユースケースでは、バイナリ・アタッチメント(画像など)がテキストとしてBase64でエンコードされ、インラインでXML文書に渡されます。表45-3に詳細を示します。

表45-3 機能

機能

説明

セキュリティ

サポート対象外。

フィルタ/トランスフォーメーション/割当て

パス・スルー。

ファンアウト

サポート対象。

バインディング

アダプタがBase64形式にエンコードします。

Oracle BPEL Process Manager/Oracle Mediator

サポート対象。不透明(Opaque)コンテンツは、assignアクティビティまたはtransformationアクティビティでは操作できません。

45.1.1.1.4 Oracle B2Bによって渡される不透明(Opaque)コンテンツ

このユースケースでは、バイナリ・アタッチメント(画像など)がエンコード・テキストとしてBase64でエンコードされます。表45-4に詳細を示します。

表45-4 機能

機能

説明

セキュリティ

サポート対象外。

フィルタ/トランスフォーメーション/割当て

パス・スルー。

ファンアウト

サポート対象。

Oracle B2B

Oracle B2Bは、ネイティブ・ペイロードをBase64形式にエンコードします。このシナリオの場合は、Oracle B2Bバインディングのドキュメント定義の処理が不透明になるように構成する必要があります。

45.1.1.2 アタッチメントのエンドツーエンドのストリーミング

この項では、アタッチメントをエンドツーエンドでストリーミングする場合のユースケースについて説明します。

注意:

Direct Internet Message Encapsulation (DIME)アタッチメントは、Oracle SOA Suite 11gではサポートされていません。

45.1.1.2.1 アタッチメント付きのSOAP

このユースケースでは、バイナリ・アタッチメント(画像など)がストリームとしてエンドツーエンドで渡されます。表45-5に詳細を示します。

表45-5 機能

機能

説明

セキュリティ

サポート対象外。

フィルタ/トランスフォーメーション/割当て

パス・スルー。Oracle BPEL Process ManagerでXPath拡張関数を使用する必要があります。

バインディング

WSバインディングが、SOAPアタッチメントに対するストリーム・イテレータを作成します。

Oracle BPEL Process Manager/Oracle Mediator

Oracle Mediatorは、マテリアライズなしのパス・スルーを実行できます。Oracle BPEL Process Managerはアタッチメントを保持します。

チューニング

Oracle BPEL Process Managerで使用する場合は、データベース表領域を管理します。

アタッチメント付きSOAPの定義用のWSDLコード

<mime:part>
<mime:content part="bin" type=“image/jpeg"/>
</mime:part>

注意:

- アタッチメントをWebサービスのコールバック・レスポンスの一部としてストリームすることはできません。

- Springサービス・コンポーネントでは、MIMEアタッチメントの処理がサポートされていません。サポートされるのは、MTOMアタッチメントのみです。

- 直接バインディング、Webサービスなどの様々なバインディング・コンポーネントを使用すると、大規模アタッチメントを処理できます。ただし、直接バインディングを使用した大規模アタッチメントの処理はメモリー不足のエラーにつながるため、お薦めできません。

ストリーミング・アタッチメントの使用

Oracle Fusion MiddlewareのWebサービスでは、大規模アタッチメントをストリームとして渡すことができます。アタッチメント全体がメモリー内にある場合と同様にアタッチメントを処理するJAX-RPCのAPIとは異なり、ストリームではプログラミング・モデルをより効率的に使用します。また、ストリームを使用すると、サービスの実行前にアタッチメントをメモリーにロードする必要がないため、パフォーマンスおよびスケーラビリティが向上します。

ストリーム・アタッチメントは、埋込みアタッチメントと同様に、MIMEマルチパートのバイナリ形式に準拠しています。埋込みアタッチメントとは、インラインまたはエンコードのアタッチメントを指します。

ワイヤ上では、ストリーム・アタッチメント付きのメッセージはアタッチメント付きの他のSOAPメッセージと同じです。

例45-1に、ストリーム添付ファイル付きのサンプル・メッセージを示します。メッセージの最初のパートはSOAPエンベロープ(<SOAP-ENV:Envelope...)です。2番目のパートがアタッチメント(この例ではmyImage.gif)です。

例45-1 ストリーム・アタッチメント付きのサンプル・メッセージ

MIME-Version: 1.0
Content-Type: Multipart/Related; boundary=MIME_boundary; type=text/xml;
Content-Description: This is the optional message description.

--MIME_boundary
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID: NotSure/DoesntMatter

<?xml version='1.0' ?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
. . .
<DocumentName>MyImage.gif</DocumentName>
. . .
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

--MIME_boundary
Content-Type: image/gif
Content-Transfer-Encoding: binary
Content-ID: AnythingYoudLike

...binary GIF image...
--MIME_boundary--

MIMEアタッチメントを使用するコンポジットの作成

次の手順を実行して、MIMEアタッチメントを使用するコンポジットを作成します。

MIMEアタッチメントを使用するコンポジットの作成

1. ペイロード・スキーマを使用してコンポジット(たとえば、Oracle Mediatorを介してアウトバウンドWebサービスに接続するインバウンドWebサービス)を作成します。

2. Oracle MediatorのWSDLファイル内で、次の手順を実行します。

1. WSDLデザイナで、Oracle MediatorのWSDLファイルを開きます。

2. バインディングを中央のスイムレーンにドラッグ・アンド・ドロップします。

3. RPCバインディングを選択します。

4. 名前を入力します。

5. WSDLの「ソース」ビューに移動し、MIMEマルチパートを使用してWSDLの入力と出力を変更します。

<wsdl:input>
<mime:multipartRelated>
<mime:part>
<soap:body parts="payload" use="literal"/>
</mime:part>
<mime:part>
<mime:content part="bin" type="application/octet-stream"/>
</mime:part>
</mime:multipartRelated>
</wsdl:input>

6. リクエスト/レスポンス・メッセージのMIMEパートを追加します。

<wsdl:message name="BPELProcess1RequestMessage">
<wsdl:part name="payload" element="ns1:purchaseOrder" />
<!--add below part-->
<wsdl:part name="bin" type="xsd:base64Binary"/>
</wsdl:message>

7. WSDL定義にネームスペースを追加します。

xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/">

完了すると、MIMEアタッチメントを参照するWSDLが表示されます。

<wsdl:definitions
name="PhotoCatalogService"
targetNamespace="http://examples.com/PhotoCatalog"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:types="http://examples.com/PhotoCatalog/types"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://examples.com/PhotoCatalog">
<wsdl:message name="addPhotoRequest">
<wsdl:part name="photo" type="xsd:hexBinary"/>
</wsdl:message>
<wsdl:message name="addPhotoResponse">
<wsdl:part name="status" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="replacePhotoRequest">
<wsdl:part name="oldPhoto" type="xsd:string"/>
<wsdl:part name="newPhoto" type="xsd:hexBinary"/>
</wsdl:message>
<wsdl:message name="replacePhotoResponse">
<wsdl:part name="status" type="xsd:string"/>
</wsdl:message>
<wsdl:portType name="PhotoCatalog">
<wsdl:operation name="addPhoto">
<wsdl:input message="tns:addPhotoRequest"/>
<wsdl:output message="tns:addPhotoResponse"/>
</wsdl:operation>
<wsdl:operation name="replacePhoto">
<wsdl:input message="tns:replacePhotoRequest"/>
<wsdl:output message="tns:replacePhotoResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="PhotoCatalogBinding" type="tns:PhotoCatalog">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="addPhoto">
<wsdl:input>
<mime:multipartRelated>
<mime:part>
<soap:body use="literal"/>
</mime:part>
<mime:part>
<mime:content part="photo"
type="image/jpeg"/>
</mime:part>
</mime:multipartRelated>
</wsdl:input>
<wsdl:output>
<mime:multipartRelated>
<mime:part>
<soap:body use="literal"/>
</mime:part>
<mime:part>
<mime:content part="status" type="text/plain"/>
<mime:content part="status" type="text/xml"/>
</mime:part>
</mime:multipartRelated>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="replacePhoto">
<wsdl:input>
<mime:multipartRelated>
<mime:part>
<soap:body parts="oldPhoto" use="literal"/>
</mime:part>
<mime:part>
<mime:content part="newPhoto"
type="image/jpeg"/>
</mime:part>
</mime:multipartRelated>
</wsdl:input>
<wsdl:output>
<soap:body parts="status" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>

パフォーマンス・オーバーヘッドとパス・スルー・アタッチメント

Oracle Mediatorはステートレスであるため、パス・スルー・アタッチメントに関するパフォーマンス・オーバーヘッドはありません。ただし、Oracle BPEL Process Managerでは、アタッチメントをデハイドレーション(圧縮して格納)するため、パス・スルー・アタッチメントの場合でもパフォーマンス・オーバーヘッドがあります。Oracle BPEL Process Managerでアタッチメントを一定の期間使用すると、SOAインフラストラクチャ・スキーマが最大サイズまで増加し、メモリーの問題が発生する可能性があります。大規模アタッチメントに対応するために、SOAインフラストラクチャ・スキーマに対するデータベース表領域を適切に拡張することをお薦めします。同時に、purgeスクリプトを使用して、表の添付ファイルとともに完了インスタンスをパージすることもできます。purgeスクリプトの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

同じコンポジット内の1番目のBPELプロセスが2番目のBPELプロセスをコールするシナリオでは、2番目のBPELプロセスは同じアタッチメントを再度デハイドレーションしません。

コンポジット1の1番目のBPELプロセスがコンポジット2の2番目のBPELプロセスを起動し、最適化が無効化されているシナリオでは、コンポジット1がコンポジット2へのSOAPコールを実行します。2番目のBPELプロセスがアタッチメントをデハイドレーションします。

アタッチメントをストリーミングするためのプロパティ

アタッチメントをストリームするには、composite.xmlファイルに次のプロパティを追加します。最適化が有効化されている場合は、SOAPコールのかわりにネイティブ・コールが使用されます。例45-2に詳細を示します。

例45-2 アタッチメントをストリーミングするためのプロパティ

<binding.ws
port="http://services.otn.com#wsdl.endpoint(MIMEService/MIMEService)"
xmlns:ns="http://xmlns.oracle.com/sca/1.0"
streamIncomingAttachments="true" streamOutgoingAttachments="true">
<!--Add this prop to reference bindings to make a SOAP call. -->
<property name="oracle.webservices.local.optimization">false</property>
</binding.ws>

oracle.webservices.local.optimizationプロパティの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のコンポジット間呼出しでのポリシー・アタッチメントおよびローカルの最適化に関する項およびローカルの最適化の構成に関する項を参照してください。

注意:

Oracle Web Services Manager(OWSM)では、ストリームのアタッチメントに関するポリシーの確認や実施は行いません。OWSMの詳細は、『Oracle Fusion Middleware Web Servicesセキュリティおよび管理者ガイド』を参照してください。

SOAPアタッチメントのコンテンツの読取りおよびエンコード

BPELプロセスでは、ora:getAttachmentContent関数がSOAPアタッチメントのコンテンツを読み取り、そのデータをBase64形式でエンコードします。そのためには、BPEL変数をSOAPアタッチメントのhrefを指定する引数として指定します。例45-3に、この関数の使用方法を示します。

例45-3 ora:getAttachmentContent関数

<copy>
<from expression="ora:getAttachmentContent('input','bin')"/>
<to variable="initiateTaskInput" part="payload"
query="/taskservice:initiateTask/task:task/task:attachment/task:content"/>
</copy>

例45-3では、hrefが"input/bin"変数に格納されているアタッチメントのコンテンツを、コンテンツ変数にBase64エンコード形式でコピーしています。

アタッチメント・ストリームの送信

Oracle BPEL Process Managerでは、複数のレシーバへのアタッチメント・ストリームの送信がサポートされています。Oracle BPEL Process Managerで複数のレシーバにストリームを送信する場合は、readBinaryFromFile XPath関数を使用してデータベースからアタッチメント・ストリームを読み取り、そのストリームを適切なターゲットに渡す必要があります。

デフォルトの構成では、Oracle Mediatorはアタッチメント・ストリームを1つのターゲット・レシーバにのみ渡すことができ、これは別のコンポーネントやWebサービス/アダプタの場合があります。2番目のターゲットはアタッチメントを受信できません。Oracle Mediatorコンポーネントに対してpersistStreamAttachmentプロパティを定義した場合、Oracle Mediatorではアタッチメント・ストリームを複数のターゲット・レシーバに渡すことができます。

Oracle Mediatorでは、アタッチメントが含まれているソース・メッセージが複数のターゲット・レシーバによって共有されている場合、ストリーミング・アタッチメントにpersistStreamAttachmentプロパティが必要です。複数のターゲットに対するアタッチメントのストリーミングを有効にするには、composite.xmlでこのプロパティをtrueに設定します。例45-4に詳細を示します。

例45-4 Oracle Mediatorのストリーミング・アタッチメント・プロパティ

component name="Mediator1">
<implementation.mediator src="Mediator1.mplan"/>
<property name="persistStreamAttachment">true</property>
</component>

Oracle Mediatorでの添付ファイルのパス・スルー設定のオーバーライド

Oracle Mediatorでは、パス・スルーの(つまり、トランスフォーメーションや割当てのルールが含まれない) Oracle Mediatorコンポーネントのアタッチメントはターゲット・レシーバに自動的に伝播されますが、パス・スルーでないOracle Mediatorコンポーネントのアタッチメントは伝播されません。passThroughAttachmentプロパティを使用して、アタッチメント専用のパス・スルー設定を上書きできます。このプロパティをtrueに設定すると、すべてのアタッチメントがターゲット・レシーバに暗黙的にコピーされます。

パス・スルーでないOracle Mediatorコンポーネントの場合は、このプロパティを使用してアタッチメントを伝播し、パス・スルーのMediatorコンポーネントの場合は、このプロパティを使用してアタッチメントをブロックします。パス・スルー・アタッチメントの上書きを実装するには、このプロパティをプロジェクトのcomposite.xmlファイルのOracle Mediatorコンポーネントに対応するcomponent要素に追加します。パス・スルーでないOracle Mediatorコンポーネントを上書きするには、プロパティをtrueに設定し、パス・スルーのコンポーネントを上書きするには、falseに設定します。例45-5に詳細を示します。

例45-5 アタッチメントのパス・スルー設定

<component name="Mediator">
<implementation.mediator src="Mediator.mplan"/>
<property name="passThroughAttachment">true</property>
</component>

同期フローを使用したアタッチメントの共有

Oracle BPEL Process Managerベースのコンポジットで同期フローを使用してアタッチメントを共有する場合は、同じエンドツーエンドのトランザクションを使用する必要があります。これは、コロケートされ、ローカル・コールまたは最適化されたコールを使用するコンポジットに適用できます。これを実行するには、コール・チェーンでコールされるすべてのBPELコンポーネント(コール先)に、例45-6に示すプロパティを設定します。

例45-6 bpel.config.transactionプロパティ

<property name="bpel.config.transaction" many="false"
type="xs:string">required</property>

このようなコンポジットが同じトランザクション・コンテキストの一部として実行されない場合、コール・チェーンの最初のBPELコンポーネントで保存されたアタッチメント・データはコール・チェーンの他のBPELコンポーネントに表示されません。さらに、そのコンポジットではデータベースがロックされ、次のタイムアウト例外が発生します。

"ORA-02049: timeout: distributed transaction waiting for lock"

45.1.1.2.2 ファイル/FTPアダプタのアタッチメント・オプション

このユースケースでは、アダプタがバイナリ・データをデータベースにストリームし、サービス・エンジン(Oracle BPEL Process ManagerまたはOracle Mediator)にhrefを公開します。表45-6に詳細を示します。

表45-6 機能

機能

説明

セキュリティ

なし。

フィルタ/トランスフォーメーション/割当て

アタッチメントのフィルタおよびトランスフォーメーションはサポートされていません。

ファンアウト

サポート対象。

バインディング

アダプタが非XMLをデータベースにバイナリ・ラージ・オブジェクト(BLOB)としてストリームし、そのキーをサービス・エンジンに渡します。

Oracle BPEL Process Manager/Oracle Mediator

サポート対象。

チューニング

- Oracle SOA Suiteスキーマのデータベース表領域を拡張します。

- メッセージ処理の完了後にアタッチメントを削除します。

ドキュメント

『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

アウトバウンド・ファイル・アダプタを使用したアタッチメントの書込み

例45-7に、ファイル・アダプタを使用してアタッチメントをディスクに書き込むことができるサンプル・スキーマを示します。

例45-7 アタッチメントをディスクに書き込むためのスキーマ

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://xmlns.oracle.com/attachment"
targetNamespace="http://xmlns.oracle.com/attachment"
elementFormDefault="qualified">
<xsd:element name="attach">
<xsd:complexType>
<xsd:attribute name="href" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>

フローでOracle Mediatorを使用する場合は、Oracle Mediatorのassignを使用して、ソース(Oracle Mediator)のアタッチメント・パートをターゲット(ファイル・アダプタ)にマップします。

Oracle BPEL Process Managerを使用すると、アタッチメントがデハイドレーション・ストアに書き込まれ、処理速度が低下します。

ora:doStreamingTranslate XPath関数を使用したアタッチメントの変換

ora:doStreamingTranslate XPath関数の使用は、Oracle BPEL Process ManagerまたはOracle Mediatorサービス・コンポーネント内でアタッチメントを変換する場合にのみお薦めします。この関数は、アタッチメントの場所がサーバー上の相対パスで指定されることを想定しています。また、受信アタッチメント・ストリームを変換できません。

この関数の詳細は、B.2.7項「doStreamingTranslate」を参照してください。

45.1.1.2.3 Oracle B2Bアタッチメント

このユースケースでは、Oracle B2Bがバイナリ・データをデータベースに格納し、Oracle B2B定義のXSDに基づいてサービス・エンジン(Oracle BPEL Process ManagerまたはOracle Mediator)にhrefを公開します。Oracle B2Bプロトコルがアタッチメントを定義します。表45-7に詳細を示します。

表45-7 機能

機能

説明

セキュリティ

なし。

フィルタ/トランスフォーメーション/割当て

アタッチメントのフィルタおよびトランスフォーメーションはサポートされていません。

ファンアウト

サポート対象。

バインディング

Oracle B2Bが、アタッチメントをhrefキーとしてサービス・エンジンに渡します。

チューニング

Oracle SOA Suiteスキーマのデータベース表領域を拡張します。

45.1.1.3 SOAコンポジット・アプリケーションとのMTOM最適化メッセージの送受信

SOAコンポジット・アプリケーションでは、MTOM (MIMEバイナリ)最適化メッセージを送受信するように、サービスおよび参照のバインディング・コンポーネントにOracle WS-MTOMポリシーを添付する必要があります。Oracle WS-MTOMポリシーにサービス・バインディング・コンポーネント(composite.xmlファイル内のbinding.wsの下に定義)が構成されている場合は、Oracle SOA SuiteのMTOMメッセージ処理機能が使用されます。Oracle WS-MTOMポリシーに参照バインディング・コンポーネント(これもcomposite.xmlファイル内のbinding.wsの下に定義)が構成されている場合は、Oracle SOA SuiteはMTOM最適化メッセージを送信します。

MTOMアタッチメントについては、次の点に注意してください。

- 添付をインラインにエンコードしている場合は、ファイルへの添付の書込みにファイル・アダプタを使用しないことをお薦めします。

- デフォルトのmtomThreshold値は1024バイトで、変更できません。添付が1024バイト未満の場合、アウトバウンド構成については、Oracle SOA Suiteは添付をインライン添付として送信します。サイズが1024バイトを超える場合は、添付はメッセージ内のhref属性のアタッチメント・パートとして送信され、ワイヤ上のWSDL定義形式として送信されます。ただし、(別のWebサービス・プロバイダからなどの)着信リクエストに小さいバイナリ・データ(サイズが1024バイト未満)のxop hrefノードがある場合、Oracle SOA Suiteは、フロー・トレースでペイロード内の同じhref属性を使用します。例:

<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include"
href="cid:e29caf23dc8045908451fdfaafa26dce" />

- コンポジットのサービス・バインディング・コンポーネントにOracle WS-MTOMポリシー参照が含まれていない場合は、サービスで非MTOMメッセージが受入れ可能であることを示します。これは、コール元のコンポジット(該当する参照バインディング)にOracle WS-MTOMポリシー参照がなく、そのサービスに非MTOMメッセージを送信可能であることを示します。

- 添付のMTOMストリーミングはOracle SOA Suiteではサポートされません。

- MTOMアタッチメントは、Webサービス・バインディングでのみサポートされています。他のバインド(HTTPバインディングなど)はサポートされません。

- Oracle Mediatorパス・スルー・シナリオがサポートされます。Oracle Mediatorにトランスフォーメーション文もAssign文も含まれていない場合、これはパス・スルーOracle Mediatorと呼ばれます。受信したメッセージと添付は、ペイロードと添付を変更せずにターゲットに伝播されます。同じメッセージ内の複数のMTOMアタッチメントも同様にOracle SOA Suiteで送受信されます。

- ストリーミングとMTOMメッセージ処理機能の両方を添付の送受信に使用しないことをお薦めします。ストリーミングまたはMTOMメッセージ処理機能のどちらかを使用してください。

注意:

入力がtext/xmlタイプの場合、MTOM形式でのファイル送信に大幅なファイル・サイズの減少はありません。

- ベスト・プラクティスとしては、バイナリ・データの伝播にXSLTマッパーを使用しないことをお薦めします。かわりに、assignアクティビティを使用します。バイナリ・データの伝播にスタイルシートを使用する必要がある場合は、xsl:copy-ofによる方法(copy-ofにより属性を含むすべてをコピー)を使用するか、ソースからターゲットへ属性をコピーするカスタム関数を使用することをお薦めします。

- MTOMアタッチメントのサイズはGB単位にはできません。かわりに、大きいサイズの添付にはアタッチメント付きのSOAPストリーミング機能を使用します。詳細は、第45.1.1.2.1項「アタッチメント付きのSOAP」を参照してください。

45.1.1.3.1 SwAおよびMTOM最適化アタッチメントをデータベースに格納するためのシナリオ

BPELプロセスを含むSOAコンポジット・アプリケーションがMTOM最適化SOAPメッセージを受信すると、そのMTOM最適化要素(<xop href=””>が付いたもの)それぞれのアタッチメントのコンテンツがデハイドレーション・ストアに格納されます。同様に、1つ以上のアタッチメントとともにアタッチメント付きのSOAPメッセージ(SwA)メッセージを受信すると、各アタッチメントはデハイドレーション・ストアに格納されます。これらのアタッチメントは、データベース内でそれらを識別するhref属性を使用する参照によって、受け渡すことができます。実際に、このhref属性によって、これらのアタッチメント要素のテキスト・コンテンツのすべてが削除され、置換されます。MTOM最適化メッセージの場合、<xop>要素の受信href属性の同じ値が再使用されます。同様に、SwAの場合、アタッチメント要素のhref属性が再使用されます。

メッセージがBPELプロセス・サービス・エンジンに配信されるとき(受信メッセージがDLV_MESSAGE表に保存されるとき)に、アタッチメントはデハイドレーション・ストアに格納されます。したがって、それは、composite.xmlファイルでbpel.config.oneWayDeliveryPolicyがasync.persist (デフォルト値)に設定されている一方向および非同期BPELプロセスに対してのみ適用できます。

アタッチメントは、次のユース・ケースでは永続化されません。

- SOAPメッセージが、bpel.config.oneWayDeliveryPolicyをsyncまたはasync.cacheに設定した同期BPELプロセスまたは一方向/非同期BPELプロセスによって受信された場合。

- インライン・バイナリ・コンテンツ付きのSOAPリクエスト内のすべての要素のコンテンツが永続化されず、そのままで渡されます。(つまり、それらには子要素<xop:Include>はないが、子としてbase64エンコード文字列があります。)MTOM最適化メッセージは、インラインbase64データを持つ1つ以上の要素と、いずれかのレベルでXOPパッケージ化された1つ以上の要素の組合せにすることができます。

注意:

サービス・バインディング・コンポーネントがMTOM対応であっても、それが、自動的に、そのサービスがMTOM最適化メッセージを受信することを示すわけではありません。コール元のサービスまたはアプリケーションは、MTOM最適化メッセージが確実に受信されるようにするには、ワイヤを介してそのメッセージを送信する必要があります。MTOM対応バインディングは、通常の非MTOMメッセージも受信できます。したがって、それが受信したときに、サービスに着信したSOAPリクエストには、データベースに保存されない非最適化インライン・バイナリ・データ要素が含まれていることがあります。

MTOM最適化要素またはSwAアタッチメントのコンテンツの値が実行時にhref属性によって置換される場合でも、それらの設計時のWSDLが変更されることありません。Oracle JDeveloperでこれらの変更は表示されません。それらの要素タイプ定義は、href属性で、hexBinary、base64Binaryなどから、空のコンテンツのものに変更されることはありません。

ただし、これは、ユーザーとって透過的です。たとえば、assignアクティビティを使用してそれらのコンテンツ全体をコピーすると、実行時にhref値がコピーされます。同様に、Webサービス、アダプタなどアウトバウンド参照を起動すると、Oracle SOA Suiteによってhref属性が実際のデータに自動的に解決され、起動が実行されます。

45.1.1.4 繰返しコンストラクトを使用した大規模XMLの処理

この項では、繰返しコンストラクトを使用して大規模XMLを処理する場合のユースケースについて説明します。

45.1.1.4.1 ファイル/FTPアダプタによるデバッチ

このユースケースでは、インバウンド・アダプタがソース・ドキュメントを複数のバッチのレコードに分割し、各バッチがコンポジット・インスタンスを起動します。表45-8に詳細を示します。

表45-8 機能

機能

説明

セキュリティ

なし。

フィルタ/トランスフォーメーション/割当て

サポート対象。

ファンアウト

サポート対象。

バインディング

ファイル/FTPアダプタが、ソース・ドキュメントをネイティブのXSD(NXSD)定義に基づいて小さいチャンクにデバッチします。

Oracle BPEL Process Manager/Oracle Mediator

サポート対象。

チューニング

ペイロード全体のサイズと比較して繰返し構造の方が小さいペイロードであるシナリオの場合は、繰返し構造に対してXSLTがサポートされます。assignアクティビティではシャドウ・コピーが実行されるため、assignアクティビティでの置換をお薦めします。

ドキュメント

『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

45.1.1.4.2 ファイル/FTPアダプタによるチャンク

このユースケースでは、BPELプロセス内のループが一度に1チャンクのレコードとプロセス(つまりカーソル)を読み取ります。表45-9に詳細を示します。

表45-9 機能

機能

説明

セキュリティ

サポート対象。

フィルタ/トランスフォーメーション/割当て

サポート対象。

ファンアウト

サポート対象。

Oracle BPEL Process Manager/Oracle Mediator

Oracle BPEL Process Managerでのみサポート対象。

ドキュメント

『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

45.1.1.5 複雑な構造の大規模XML文書の処理

この項では、複雑な構造の大規模XML文書を処理する場合のユースケースについて説明します。

45.1.1.5.1 ファイル/FTPアダプタによるストリーム

このユースケースでは、Oracle SOA Suiteを介して大規模XMLファイルをストリームします。表45-10に詳細を示します。

表45-10 機能

機能

説明

セキュリティ

なし。

フィルタ/トランスフォーメーション/割当て

サポート対象ですが、問題を回避するために最適化する必要があります。

ファンアウト

サポート対象。

バインディング

アダプタがペイロードをデータベースにSDOMとしてストリームし、そのキーをサービス・エンジンに渡します。

ドキュメント

『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

45.1.1.5.2 Oracle B2Bストリーム

このユースケースでは、大規模XMLファイルがSDOMとしてOracle B2BからOracle SOA Suiteに渡されます。これが実行されるのは、大規模ペイロード・サイズがOracle B2Bユーザー・インタフェースで定義されている場合のみです。表45-11に詳細を示します。

表45-11 機能

機能

説明

セキュリティ

なし。

フィルタ/トランスフォーメーション/割当て

サポート対象ですが、問題を回避するために最適化する必要があります。

ファンアウト

サポート対象。

バインディング

Oracle B2BがペイロードをデータベースにSDOMとしてストリームし、そのキーをサービス・エンジンに渡します。

Oracle BPEL Process Manager/Oracle Mediator

XPath拡張関数を使用してペイロードを操作できます。

45.1.2 大規模ドキュメントの同時処理に関する制限

この項では、大規模ドキュメントの同時処理に関する制限について説明します。

45.1.2.1 大規模ペイロードを処理するための不透明(Opaque)スキーマ

大規模なペイロードを処理するために不透明(Opaque)スキーマを使用する場合は、制限があります。不透明(Opaque)トランスレータのデータ全体が、単一のBase64エンコード文字列に変換されます。不透明(Opaque)スキーマは通常、比較的小さいデータに使用されます。大規模なデータの場合は、不透明(Opaque)トランスレータのかわりにアタッチメント機能を使用してください。

45.1.3 チューニングに関する一般的な推奨事項

この項では、チューニングに関する一般的な推奨事項について説明します。

Oracle SOA Suiteのチューニングおよびパフォーマンスの詳細は、『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』を参照してください。

45.1.3.1 一般的な推奨事項

この項では、チューニングに関する一般的な推奨事項について説明します。

- Oracle WebLogic Server管理コンソールで、JTAトランザクションのタイムアウトを500秒に増加します。手順については、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の接続タイムアウトの解決に関する項を参照してください。

- Oracle Enterprise Manager Fusion Middleware Controlで、SOAコンポジット・アプリケーション・レベルの監査レベルを「オフ」または「本番」に設定します。詳細は、第45.1.3.2項「大規模ペイロード処理に対するOracle Enterprise Managerからの監査レベルの設定」を参照してください。

- setDomainEnv.sh (Linux)またはsetDomainEnv.bat(Windows)のJAVA_OPTIONSで次の行を非コメント化して、サーバーを再起動します。この行が存在しない場合は追加します。この設定を行わないと、大規模ペイロード・シナリオは、デハイドレーション・データ・ソースに対してResourceDisabledExceptionエラーで失敗します。

-Dweblogic.resourcepool.max_test_wait_secs=30

- 次のように、setSOADomainEnv.shまたはsetDomainEnv.batのヒープのサイズを更新します。

DEFAULT_MEM_ARGS="-Xms1024m -Xmx2048m"

- 最適化されたトランスレーション機能(ora:doTranslateFromNative、ora:doTranslateToNative、ora:doStreamingTranslateなど)を使用します。この機能は大規模なペイロードのトランスフォーメーションおよびトランスレーション実行時に使用できます。
これらの関数の詳細は、付録B「XPath拡張関数」を参照してください。

- 大規模アタッチメントを処理するためにデータ・ファイルを拡張します。詳細は、『Oracle Database管理者ガイド』を参照してください。

- 大規模ドキュメントの処理時にタイムアウト・エラーが発生した場合は、次のタスクを実行します。

- タイムアウト・プロパティ値を増やします。

- 「スタック・スレッド最大時間」プロパティ値を増やします。

タイムアウト・プロパティ値は次のように増加します。

1. Oracle Web Services Manager管理コンソールにログインします。

2. 「デプロイメント」→「soa-infra」→「EJB」の順に移動します。

3. 次に示すBeanをそれぞれクリックし、「構成」を選択してタイムアウト値を増加します。

- BpelEngineBean

- BpelDeliveryBean

- CompositeMetaDataServiceBean

「スタック・スレッド最大時間」プロパティ値は次のように増加します。

1. 手順は、Oracle Fusion Middleware Oracle WebLogic Serverパフォーマンスおよびチューニングの「WebLogic 8.1のスレッド・プール・モデルの使用」の章を参照してください。

45.1.3.2 大規模ペイロード処理に対するOracle Enterprise Managerからの監査レベルの設定

大規模なペイロードを処理する際は、特定のコンポジットに対する監査レベルのロギングをオフにしてください。Oracle Enterprise Manager Fusion Middleware Controlで、コンポジットの監査レベルのオプションを「オフ」または「本番」に設定できます。コンポジットの監査レベルのオプションを「開発」に設定した場合は、大規模なペイロード全体がメモリー内文字列にシリアライズされ、メモリー不足のエラーが発生する可能性があります。

監査レベルの設定の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

45.1.3.3 Oracle BPEL Process ManagerおよびOracle Mediatorでのassignアクティビティの使用

Oracle BPEL Process ManagerまたはOracle Mediatorで、大規模なペイロードを操作するためにassignアクティビティを使用する場合は、メッセージ全体を割り当てないでください。かわりに、ペイロードの必要な部分のみを割り当ててください。

また、Oracle BPEL Process Managerでassignアクティビティを使用する場合は、可能なかぎりプロセス変数ではなくローカル変数を使用することをお薦めします。ローカル変数は、BPELプロセスのスコープ内に制限されます。これらの変数は、スコープを閉じた後はメモリーおよびデータベースから削除されます。ただし、グローバル変数のライフ・サイクルは、インスタンスのライフ・サイクルと関連付けられています。これらの変数は、インスタンスが完了するまで、メモリー内またはディスク内にとどまります。したがって、プロセス変数またはグローバル変数より、ローカル変数をお薦めします。

45.1.3.4 大規模ペイロード(Oracle BPEL Process Manager)でのXSLTトランスフォーメーションの使用

11g リリース1 11.1.1.3までは、Oracle BPEL Process ManagerでのXSLT操作は、結果のドキュメント全体がバイナリXML形式でメモリーにキャッシュされていました。これは、大規模ドキュメント処理の場合、メモリー不足エラーの原因となりました。11g リリース1 11.1.1.4からは、streamResultToTempFileプロパティが追加されています。このプロパティでは、XSLTの結果が一時ファイルにストリーミングされ、一時ファイルからロードされます。大規模ペイロードをXSLTを使用して処理する場合は、streamResultToTempFileをyesに設定します。デフォルト値はnoです。

このプロパティは、次のBPEL XPath関数を使用する場合に適用可能です。

- ora:processXSLT('template','input','properties'?)

- ora:doXSLTransformForDoc ('template','input','name', 'value')

大きなXML文書をXSLTを使用して処理するよう構成する手順は、次のとおりです。

1. BPEL共通プロパティ・スキーマを作成します。例:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace ="http://schemas.oracle.com/service/bpel/common"
xmlns:common = "http://schemas.oracle.com/service/bpel/common"
xmlns:xs = "http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" blockDefault="#all">

<xs:element name="serviceProperties"  type="common:PropertiesType"/>
<xs:element name="anyProperties"  type="common:ArrayOfNameAnyTypePairType"/>
<xs:complexType name="NameValuePairType">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="ArrayOfNameValuePairType">
<xs:sequence>
<xs:element name="item" type="common:NameValuePairType"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="NameAnyTypePairType">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="value" type="xs:anyType"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="ArrayOfNameAnyTypePairType">
<xs:sequence>
<xs:element name="item" type="common:NameAnyTypePairType"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="PropertiesType">
<xs:sequence>
<xs:element name="property" type="common:NameValuePairType"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="ArrayOfAnyTypeType">
<xs:sequence>
<xs:element name="item" type="xs:anyType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:schema>

2. BPELプロセス内で、importセクションにネームスペースを追加します。

xmlns:common = "http://schemas.oracle.com/service/bpel/common"

3. グローバル変数を作成します(この例では、propertiesXMLVarという名前で作成):

<variable name="propertiesXMLVar" element="common:anyProperties"/>

4. streamResultToTempFileプロパティをyesに設定します。このassignアクティビティはXSLTトランスフォーメーションの実行前に存在している必要があります。

<assign name="Assign_xsltprop">
<copy>
<from>
<common:anyProperties>
<common:item>
<common:name>streamResultToTempFile</common:name>
<common:value>yes</common:value>
</common:item>
</common:anyProperties>
</from>
<to variable="propertiesXMLVar"/>
</copy>
</assign>

45.1.3.5 大規模ペイロード(Oracle Mediator)でのXSLTトランスフォーメーションの使用

11g リリース1 11.1.1.3までは、Oracle MediatorでのXSLT操作は、結果のドキュメント全体がバイナリXML形式でメモリーにキャッシュされていました。これは、大規模ドキュメント処理の場合、メモリー不足エラーの原因となりました。11g リリース1 11.1.1.4からは、streamResultToTempFileプロパティを使用できます。このプロパティでは、XSLTの結果が一時ファイルにストリーミングされ、一時ファイルからロードされます。大規模ペイロードをXSLTを使用して処理する場合は、streamResultToTempFileをyesに設定します。デフォルト値はnoです。

注意:

このプロパティは、大規模なペイロードを処理する場合にのみお薦めします。このプロパティを有効にすると、通常のペイロードのパフォーマンスが低下する可能性があります。

大きなXML文書をXSLTを使用して処理するよう構成する手順は、次のとおりです。

1. Oracle MediatorコンポーネントでOracle SOA Suiteプロジェクトを作成します。

2. 「ソース」ビューでプロジェクトのcomposite.xmlファイルを開きます。

3. composite.xmlファイルで、大規模なXMLドキュメントを処理するOracle Mediatorコンポーネントを定義するコンポーネント要素にスクロールし、streamResultToTempFileプロパティを追加します。次に示すように、プロパティをyesに設定します。

<component name="Mediator1">
<implementation.mediator src="Mediator1.mplan"/>
<property name="streamResultToTempFile">yes</property>
</component>

4. ファイルを保存し、閉じます。

45.1.3.6 繰返し構造に対するXSLTトランスフォーメーションの使用

ペイロード全体と比較して繰返し構造の方がペイロードが小さい場合は、XSLTトランスフォーメーションの使用をお薦めします。これは、現在のXSLT実装ではDOM全体がメモリーにマテリアライズされるためです。たとえば、PurchaseOrder.LineItem.Supplier(大規模ペイロードの一部分)を使用します。

また、assignアクティビティではシャドウ・コピーが実行されるため、assignアクティビティを使用して置換することもできます。シャドウ・コピーではDOMはマテリアライズされませんが、ソース文書を指し示すシャドウ・ノードが作成されます。

また、大規模なペイロードのトランスフォーメーション/トランスレーション実行時に、次に示す最適化されたトランスレーション機能を使用することもできます。

- ora:doTranslateFromNativeまたはmed:doTranslateFromNative

- ora:doTranslateToNativeまたはmed:doTranslateToNative

- ora:doStreamingTranslateまたはmed:doStreamingTranslate

これらの機能の詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』の付録B「XPath拡張関数」 を参照してください。

45.1.3.7 Oracle B2Bでの大規模ドキュメントの処理

Oracle B2Bで大規模ドキュメントを処理する場合は、次のパラメータをチューニングします。

- mdsCache

- Cache Size

- Protocol Message Size

- Number of threads

- Stuck Thread Max Time

- Tablespace

次の各項では、Oracle B2Bで大規模ドキュメントを処理する場合に設定する必要があるパラメータについて説明します。

45.1.3.7.1 MDSインスタンス・キャッシュ・サイズ

Oracle Metadata Services (MDS)リポジトリ・インスタンス・キャッシュ・サイズを設定するには、例45-8に示すように、$DOMAIN_HOME/config/soa-infra/configuration/b2b-config.xmlファイルにプロパティと値を追加する必要があります。

例45-8 MDSインスタンス・キャッシュ・サイズ

<property>
<name>b2b.mdsCache</name>
<value>200000</value>
<comment>MDS Instance cache size </comment>
</property>

45.1.3.7.2 プロトコル・メッセージ・サイズ

Oracle B2Bで10MBを超えるメッセージを送受信する場合、またはインポート/エクスポート構成が10MBを超える場合は、Oracle WebLogic Server管理コンソールで次の設定を変更します。

プロトコル・メッセージ・サイズを構成する手順は、次のとおりです。

1. 「ドメイン構造」で、「環境」→「サーバー」の順に選択します。

2. 表の「名前」列で、「soa_server」を選択します。

3. 「プロトコル」タブを選択します。

4. 「最大メッセージ・サイズ」の値を変更します。

この設定は、$DOMAIN_HOME/config/config.xmlファイルで追加または変更することもできます。サーバー名構成の次で追加または変更します。例45-9に例を示します。

例45-9 max-message-sizeプロパティ

<name>soa_server1</name>
<max-message-size>150000000</max-message-size>

注意:

デフォルトで、max-message-sizeはconfig.xmlファイルで使用可能ではありません。

45.1.3.7.3 スレッド数

このパラメータによって、Oracle B2Bのメッセージ処理機能が向上します。これは、$DOMAIN_HOME/config/soa-infra/configuration/b2b-config.xmlファイルで設定する必要があります。例45-10に例を示します。

例45-10 スレッド数

<property>
<name>b2b.inboundProcess.threadCount</name>
<value>5</value>
<comment></comment>
</property>
<property>
<name>b2b.inboundProcess.sleepTime</name>
<value>10</value>
<comment></comment>
</property>
<property>
<name>b2b.outboundProcess.threadCount</name>
<value>5</value>
<comment></comment>
</property>
<property>
<name>b2b.outboundProcess.sleepTime</name>
<value>10</value>
<comment></comment>
</property>
<property>
<name>b2b.defaultProcess.threadCount</name>
<value>5</value>
<comment></comment>
</property>
<property>
<name>b2b.defaultProcess.sleepTime</name>
<value>10</value>
<comment></comment>
</property>

45.1.3.7.4 スタック・スレッド最大時間パラメータ

「スタック・スレッド最大時間」パラメータは、サーバーがスレッドをスタック状態であると判断するまでに、スレッドが継続的に動作している必要のある秒数をチェックします。Oracle WebLogic Server管理コンソールで次の設定を変更する必要があります。

スタック・スレッド最大時間パラメータを構成する手順は、次のとおりです。

1. 「ドメイン構造」で、「環境」→「サーバー」の順に選択します。

2. 表の「名前」列で、「soa_server」を選択します。

3. 「チューニング」タブを選択します。

4. 「スタック・スレッド最大時間」の値を変更します。

45.1.3.7.5 表領域

150MBを超える構成をデータ・ファイルに格納する必要がある場合は、例45-11に示すように、データ・ファイルを拡張または追加して、表領域のサイズを増やす必要があります。

例45-11 データ・ファイルの拡張

ALTER TABLESPACE sh_mds add DATAFILE 'sh_mds01.DBF' SIZE 100M autoextend on next
10M maxsize unlimited;
ALTER TABLESPACE sh_ias_temp add TEMPFILE 'sh_ias_temp01.DBF' SIZE 100M autoextend
on next 10M maxsize unlimited;

45.1.3.8 インバウンドWebサービスのメッセージ・サイズに対するサイズ制限の設定

インバウンドWebサービスのメッセージ・サイズにサイズ制限を設定する場合は、composite.xmlファイルでバインディング・コンポーネントのプロパティmax-message-sizeを構成します。プロパティ値は基礎となるWebサービス・インフラストラクチャで使用可能となり、値は受信メッセージ・サイズに対するテストに使用されます。指定した値を超えると、メッセージ・サイズが大きすぎることを示す例外がスローされ、トランザクションは処理されません。例45-12に詳細を示します。

例45-12 composite.xmlでのmax-message-sizeの設定

<composite name="LrgMsg" revision="1.0" label="2011-09-08_22-53-53_259"
mode="active" state="on">
<import namespace="http://xmlns.oracle.com/LargeMsg/LrgMsg/BPELProcess1"
location="BPELProcess1.wsdl" importType="wsdl"/>
<service name="bpelprocess1_client_ep" ui:wsdlLocation="BPELProcess1.wsdl">
<interface.wsdl
interface="http://xmlns.oracle.com/LargeMsg/LrgMsg/BPELProcess1# wsdl.interface
(BPELProcess1)"/>

<binding.ws port="http://xmlns.oracle.com/LargeMsg/LrgMsg/BPELProcess1
#wsdl.endpoint(bpelprocess1_client_ep/BPELProcess1_pt)">
<property name="max-message-size" type="xs:integer" many="false"
override="may">4</property>
</binding.ws>
</service>

<component name="BPELProcess1" version="1.1">
<implementation.bpel src="BPELProcess1.bpel"/>
</component>

<wire>
<source.uri>bpelprocess1_client_ep</source.uri>
<target.uri>BPELProcess1/bpelprocess1_client</target.uri>
</wire>
</composite>

45.1.3.9 XPath関数を使用したファイル・システムへの大規模なXSLT/XQuery出力の書込み

次の関数を使用して、大規模なXSLT/XQuery操作の結果をディレクトリ・システム内の一時ファイルに書き込むことができます。その後、ドキュメントは必要なときに一時ファイルからロードされます。これにより、ドキュメント全体をバイナリXMLとしてメモリーにキャッシュする必要がなくなります。

- ora:processXSLT

- ora:doXSLTransformForDoc

この機能を有効化にするには、ora:processXSLT関数でproperties引数を使用します。

ora:processXSLT('template','input','properties'?)

この引数の値は、XSLT内で、XSL変数からデータを抽出するのと同様な方法で取得します。properties引数は、例45-13に示されているような構造のXML要素です。大きいペイロードの結果(10MBを超えるなど)に対しては、streamResultToTempFileをyesに設定します。一時ファイルに書き込む必要のない小さいペイロードの結果には、このプロパティをデフォルト値のnoの設定のままにしておきます。

例45-13 プロパティXML

<propertiesXMLVar>
<common:item  xmlns:common="http://schemas.oracle.com/service/bpel/common">
<common:name>streamResultToTempFile</common:name>
<common:value>yes</common:value>
</common:item>
</propertiesXMLVar>

XSLT内で、名前streamResultToTempFileおよびその値yesを介して、このパラメータにアクセスできます。

Oracle BPEL Process Managerでは、ora:processXSLT('template','input','properties'?)にプロパティを移入するためにリテラルのassignが実行されます。

この関数の使用の詳細は、B.2.52項「processXSLT」を参照してください。

ora:doXSLTransformForDoc関数では、この機能を有効にするために、nameおよびvalueプロパティを設定します。

ora:doXSLTransformForDoc ('template','input','name', 'value')

この関数で、nameにstreamResultToTempFile、valueにyesが渡されます。

この関数の使用の詳細は、B.2.11項「doXSLTransformForDoc」を参照してください。

45.2 大規模メタデータを処理する場合のベスト・プラクティス

この項では、大規模メタデータの処理に関する推奨事項について説明します。

45.2.1 BPELプロセスでの多数のアクティビティの処理に対する境界

BPELプロセスで実行できるアクティビティ数には制限があります。この制限を超えると、システム・メモリーが一杯になり、タイムアウトが発生する可能性があります。たとえば、次のパラメータを使用すると、タイムアウトによって2つのフォルト・インスタンスが発生します。

- スレッド数: 100

- 思考時間(秒数): 1

- 受信リクエスト・メッセージ数: 1000

システム・メモリーの安定性を確保するために、受信リクエスト・メッセージ数を適切なレベルに保つようにしてください。

45.2.2 BPELプロセスでの多数のアクティビティの使用(flowNを使用しない場合)

多数のアクティビティ(例: 50,000)があるBPELプロセスをデプロイするには、次の設定が必要です。

MEM_ARGS: -Xms512m -Xmx1024m -XX:PermSize = 128m -XX:MaxPermSize = 256m
Number of Concurrent Threads = 20
Number of Loops = 5 Delay = 100 ms

この設定によって、flowNアクティビティを使用せずにwhileループのみを使用するBPELプロセスを、正常にデプロイおよび実行できるようになります。

45.2.3 BPELプロセスでの多数のアクティビティの使用(flowNを使用する場合)

多数のアクティビティ(例: 50,000)があるBPELプロセスをデプロイするには、次の設定が必要です。

USER_MEM_ARGS: -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=256m
Number of Concurrent Threads= 10
Number of Loops=5 Delay=100 ms

Oracle Enterprise Manager Fusion Middleware ControlのシステムMBeanブラウザで、StatsLastNプロパティを-1に設定します。

この設定によって、flowNアクティビティを使用するBPELプロセスを、正常にデプロイおよび実行できるようになります。

詳細は、第10.3.1項「BPEL 1.1のflowNアクティビティによるflowアクティビティ数のカスタマイズ」および『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のBPELプロセス・サービス・エンジン・プロパティの構成に関する項を参照してください。

45.2.4 複数シーケンスを含むフローの使用

7000までのアクティビティがあるBPELプロセスを、次の設定で正常にデプロイおよび実行できます。

USER_MEM_ARGS: -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=256m

注意:

8000を超えるアクティビティがあるBPELプロセスをデプロイすると、Oracle BPEL Process Managerのコンパイルでエラーがスローされます。

45.2.5 単一シーケンスを含むフローの使用

7000までのアクティビティがあるBPELプロセスを、次の設定で正常にデプロイおよび実行できます。

USER_MEM_ARGS: -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=512m

注意:

10,000を超えるアクティビティがあるBPELプロセスをデプロイすると、そのプロセスのコンパイルに失敗します。

45.2.6 シーケンスを含まないフローの使用

多数のアクティビティ(例: 5000まで)があるBPELプロセスを、正常にデプロイおよび実行できます。

BPELプロセスのコンパイルは、6000アクティビティの場合は失敗する可能性があります。

45.2.7 コンポジットの多数のOracle Mediator

単一のコンポジットに50を超えるOracle Mediatorを含めないことをお薦めします。環境にあわせて、JTAトランザクション・タイムアウトを高い値に増やします。

45.2.8 Oracle B2Bへの大規模データ・セットのインポート

大規模なデータ・セットのインポートには、ブラウザは使用せずにコマンドライン・ユーティリティを使用することをお薦めします。大規模なデータの構成には、次のユーティリティ・コマンドを使用してください。

- purge: リポジトリ全体をパージします。

- import: 指定したZIPファイルをインポートします。

- deploy: 名前を指定してアグリーメントをデプロイします。名前を指定しない場合は、すべてのアグリーメントがデプロイされます。

ただし、purgeimportdeployオプションは、Oracle B2B構成の転送またはデプロイには使用しないことをお薦めします。

詳細は、『Oracle Fusion Middleware Oracle B2Bユーザーズ・ガイド』を参照してください。

45.3 多数のインスタンスを処理する場合のベスト・プラクティス

この項では、多数のインスタンスおよびフォルト・メトリックの処理に関する推奨事項について説明します。

45.3.1 パージ・スクリプトを使用したインスタンスおよび拒否メッセージの削除

Oracle Enterprise Manager Fusion Middleware Controlでの数千のインスタンスおよび拒否メッセージの削除は時間を要するため、トランザクション・タイムアウトが発生する可能性があります。このタスクを実行する必要がある場合は、PL/SQLパージ・スクリプトを使用してインスタンスと拒否メッセージを削除します。

詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。

45.3.2 Oracle Enterprise Manager Fusion Middleware Controlでのページのロード時間の短縮

Oracle Enterprise Manager Fusion Middleware Controlで、大量のインスタンスとフォルト・データを表示するページのロード時間を短縮するには、SOAインフラストラクチャの「共通プロパティ」ページの「データ表示オプション」セクションで2つのプロパティを設定します。

この2つのプロパティによって、次の操作を実行できます。

- インスタンス数とフォルト数のデータのフェッチを無効化して、次のページのロード時間を短縮できます。

- SOAインフラストラクチャ、SOAコンポジット・アプリケーション、サービス・エンジンおよびサービス・コンポーネントのダッシュボード・ページ

- 「オプションを指定して削除: インスタンス」ダイアログ

この設定では、ページをロードする際にすべてのメトリック情報のロードが無効化されます。たとえば、SOAインフラストラクチャのダッシュボード・ページでは、「最新のコンポジット・インスタンス」セクションの「実行中」フィールドと「合計」フィールド、および「デプロイ済コンポジット」セクションの「インスタンス」列に通常表示される各値が、リンクに置き換えられます。これらの値が大量にある場合は、このページや類似情報が含まれた他のページのロードに時間を要する可能性があります。

- 検索基準の一部として使用するデフォルトの期間を指定して、次のページに表示される最新のインスタンスとフォルトを取得できます。

- SOAインフラストラクチャ、SOAコンポジット・アプリケーション、サービス・エンジンおよびサービス・コンポーネントのダッシュボード・ページおよびインスタンス・ページ

- サービスと参照のダッシュボード・ページ

- SOAインフラストラクチャ、SOAコンポジット・アプリケーション、サービスおよび参照のフォルト・ページおよび拒否メッセージ・ページ

- サービス・エンジンおよびサービス・コンポーネントのフォルト・ページ

これらのプロパティの設定の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

46 SOAコンポジット・アプリケーションのカスタマイズ

この章では、BPELプロセス・サービス・コンポーネントで使用可能なカスタマイズ機能を使用して、SOAコンポジット・アプリケーションをカスタマイズする方法について説明します。ここでは、カスタマイズ可能なアプリケーションの作成、バーティカル・バージョンのアプリケーションのカスタマイズ、および顧客バージョンのアプリケーションのカスタマイズを行う方法について説明します。また、次のバージョンのアプリケーションにアップグレードする方法についても説明します。

この章には次の項が含まれます:

- 第46.1項「SOAコンポジット・アプリケーションのカスタマイズの概要」

- 第46.2項「カスタマイズ可能なコンポジットの作成」

- 第46.3項「バーティカル・アプリケーションのカスタマイズ」

- 第46.4項「顧客バージョンのカスタマイズ」

- 第46.5項「コンポジットのアップグレード」

46.1 SOAコンポジット・アプリケーションのカスタマイズの概要

この項では、SOAコンポジット・アプリケーションをカスタマイズするライフ・サイクルについて説明します。たとえば、次の各組織では、同じコンポジットを使用する必要があるとします。ただし、若干の変更が必要です。

- コア・アプリケーション開発チーム

- バーティカル・アプリケーション・チーム

- 顧客

コア・アプリケーション開発チームでは、カスタマイズ可能な基本コンポジットを作成し、バーティカル・アプリケーション・チームに提供します。バーティカル・アプリケーション・チームでは、提供されたコンポジットを特定の業界(通信業界など)向けにカスタマイズします。調整されたソリューションは、通信業の顧客に販売されます。顧客は、特定の地理的なビジネス・ニーズに対応するためにコンポジットをさらにカスタマイズします。原則的には、1つの基本コンポジットと、複数レイヤーのカスタマイズ・コンポジットがあります。コンポジット・ライフ・サイクルの後半で、コア・アプリケーション開発チームは基本コンポーネントの新バージョンを作成し、バーティカル・アプリケーション・チームと顧客のアップグレード・サイクルをトリガーします。

注意:

異なるレイヤー値の同じSOAコンポジット・アプリケーションをカスタマイズしないでください。カスタマイズ用にサポートされているのは、1つのレイヤー値のみです。別のレイヤー値をサポートする必要がある場合は、必ずベース・コンポジットを別のプロジェクトにインポートし、コンポジット名を、カスタマイズするレイヤー値に固有のものに変更します。このアプローチは、同じコンポジット名で異なるレイヤー値をデプロイしないようにするデプロイメントの場合にも便利です。

46.2 カスタマイズ可能なコンポジットの作成

この項では、カスタマイズ可能な基本SOAコンポジット・アプリケーションの作成に必要な手順の概要を示します。

46.2.1 カスタマイズ可能なコンポジットの作成方法

カスタマイズ可能なコンポジットを作成する手順は、次のとおりです。

1. Oracle JDeveloperを起動し、「デフォルトのロール」を選択します。

2. 「ファイル」メニューから「新規」→「アプリケーション」→「SOAアプリケーション」の順に選択し、「OK」をクリックします。

3. SOAアプリケーションの作成ウィザードで、次の手順に従います。

4. 「SOAアプリケーションの作成」ダイアログで、BPELプロセスを使用するコンポジットと「カスタマイズ可能」の両方のチェック・ボックスを選択します。

5. BPELプロセスを設計します。

6. scopeアクティビティを作成して、BPELプロセスをカスタマイズします。デフォルトではBPELプロセスはカスタマイズ可能でないため、このアクションが必要です。

注意:

「カスタマイズ開発者」ロールでOracle JDeveloperにログインしている場合は、composite.xmlファイル、.bpelファイル(Oracle BPEL Process Managerの場合)、.mplanファイル(Oracle Mediatorの場合)および.componentTypeファイルのみカスタマイズできます。

7. スコープを右クリックし、「カスタマイズ可能」を選択します。

8. アプリケーション・ナビゲータで、「アプリケーション・リソース」→「ディスクリプタ」→「ADF META_INF」の順に開きます。

9. adf-config.xmlファイルを開き、「MDS構成」タブを選択します。

10. 「追加」アイコンをクリックし、図46-1に示すように、必要なカスタマイズ・クラスを追加します。
実際の環境では、カスタマイズ・クラスは、コア・アプリケーション・チームが提供します。独自のカスタマイズ・クラスを使用する場合は、カスタマイズ・クラスのJARファイルをプロジェクトに追加して、adf-config.xmlファイルでそのクラスを使用できるようにする必要があります。

図46-1 カスタマイズ・クラス

「図46-1 カスタマイズ・クラス」の説明

11. SOAプロジェクトを右クリックし、「デプロイ」を選択します。これにより、JARファイル・パッケージが作成されます。このJARは、SOAアーカイブ(SAR)とも呼ばれます。

12. アプリケーションをソース・コード・コントロール・システムにチェックインします。これで、バーティカル・アプリケーション・チームに提供するファイルの準備が整いました。

カスタマイズ・クラスの記述方法については、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。

46.2.2 カスタマイズ・クラスの作成方法

この項では、カスタマイズ・クラスを作成する方法について説明します。この例では、MyCustomizationLayerという名前のカスタマイズ・レイヤーのクラスを作成します。

カスタマイズ・クラスを作成する手順は、次のとおりです。

1. Oracle JDeveloperで「Javaクラスの作成」ウィザードを起動するには、「ファイル」→「新規」→「一般」→「Java」→「Java」→「クラス」の順に選択します。この選択が表示されない場合は、「新規ギャラリ」ダイアログの上部で「すべてのテクノロジ」タブが選択されていることを確認してください。

2. 次のクラスを拡張するJavaクラスを作成します。

oracle.tip.tools.ide.fabric.custom.GenericSOACustomizationClass

3. カスタマイズ・クラスに次のコンテンツを指定します。

package myCustomizationPackage;

import oracle.tip.tools.ide.fabric.custom.GenericSOACustomizationClass;

public class MyCustomizationClass extends GenericSOACustomizationClass {

public MyCustomizationClass() {
super();

// set the customization layer name
setName("MyCustomizationLayer");
}
}

「Javaクラスの作成」ウィザードによって次のコンテンツが自動的に生成されます。

package myCustomizationPackage;

import oracle.tip.tools.ide.fabric.custom.GenericSOACustomizationClass;

public class MyCustomizationClass extends GenericSOACustomizationClass {
public MyCustomizationClass(String string, String string1) {
super(string, string1);
}

public MyCustomizationClass() {
super();
}
}

4. カスタマイズ・クラスに正しいカスタマイズ・レイヤーが設定されるようにするには、パラメータなしのコンストラクタに次を追加することで、カスタマイズ・レイヤー名を設定します。

// set the customization layer name
setName("MyCustomizationLayer");

オプションで、パラメータ付きのコンストラクタを削除することもできます。

5. カスタマイズ・クラスを有効にするには、SOAプロジェクトをビルドまたはメイクしてカスタマイズ・クラスをコンパイルします。

6. ビルドが成功したことを確認します。

46.2.3 XSDまたはWSDLファイルの追加方法

XSDまたはWSDLファイルを追加する手順は、次のとおりです。

「カスタマイズ開発者」ロールでログインすると、XMLスキーマまたはWSDLドキュメントをOracle JDeveloperで追加することができます。

1. アプリケーション・ナビゲータで、Oracle SOA Suiteのプロジェクトを右クリックします。

2. 「SOA」を選択します。

3. 作成するアーティファクトを次の中から選択します。

- XMLスキーマの作成
プロジェクトで新しいXMLスキーマ・ファイルを追加する、「XMLスキーマの作成」ダイアログを起動します。完了すると、新しいスキーマ・ファイルが自動的に開きます。

- WSDLドキュメントの作成
プロジェクトで新しいWSDLファイルを追加する、WSDLの作成ダイアログを起動します。

46.2.4 BPELプロセスでのカスタマイズ・アクティビティの検索方法

Oracle JDeveloperのBPELプロセスでカスタマイズ・アクティビティを検索できます。

カスタマイズしたアクティブを検索する手順は、次のとおりです。

1. 「カスタマイズ開発者」ロールを使用してOracle JDeveloperにアクセスします。

2. デザイナの上部にあるBPELプロセスの「検索」メニューで、図46-2に示すように「カスタマイズ検索」を選択します。

図46-2 「カスタマイズ検索」オプション

「図46-2 「カスタマイズ検索」オプション」の説明

デザイナの下部にある「ログ」ウィンドウの「カスタマイズの検索」タブに検索結果が表示されます。

46.2.5 カスタマイズ・コンポジット内のアーティファクトの編集に関する注意事項

Oracle JDeveloperのアーティファクト(「カスタマイズ開発者」ロールで作成された新しいアーティファクトを除く)のソースは、別のアプリケーションの「カスタマイズ開発者」ロールで編集可能です。

カスタマイズ・コンポジット内のアーティファクトを編集する手順は、次のとおりです。

1. 「カスタマイズ開発者」オプションを選択して、SOAコンポジット・アプリケーションを作成します。

2. コンポジット内のcomposite.xmlプロパティを編集します(例として、コンポジットに含まれるOracle Mediatorサービス・コンポーネントのpassThroughHeaderプロパティを追加します)。

3. コンポジットをSARファイルにデプロイし、SARファイルを別の新しいコンポジットにインポートします。

4. Oracle JDeveloperを再起動し、「カスタマイズ開発者」ロールを使用して新しいコンポジットを開きます。

5. composite.xmlファイルの「ソース」ビューに移動し、「プロパティ・インスペクタ」からpassThroughHeaderプロパティ値の変更を試みます。
このプロパティは編集可能です。

46.2.6 Oracle JDeveloperでの検証エラーの解決に関する注意事項

カスタマイズ・ロールでは、Oracle Metadata Services (MDS)リポジトリによってカスタマイズとベース・メタデータがマージされます。マージにより、スキーマに対して無効なXMLドキュメントが作成される可能性があります。MDSリポジトリのマージでは、マージによって常に有効なXMLドキュメントが作成されることを確認するためのスキーマ検証は起動されません。このため、メタデータUIエディタをレンダリングするためにメタデータの妥当性に依存するMDSクライアントに問題が発生する可能性があります。

composite.xmlなどのSOAファイルが無効になる場合は、Oracle JDeveloperの「ソース」ビューに切り替えて、XMLソースを直接修正する必要があります。「ソース」ビューが編集不可(「カスタマイズ開発者」ロールを使用してOracle JDeveloperにアクセスした場合など)の場合は、Oracle JDeveloperの「構造」ウィンドウを使用してXMLソースを修正する必要があります。

たとえば、カスタマイズしたスコープを含むBPELプロセスで基本SOAコンポジット・アプリケーションを作成したとします。基本アプリケーションのSARファイルが新しいアプリケーションにインポートされ、「カスタマイズ開発者」ロールでOracle JDeveloperにアクセスするとき、次のコンポーネントが追加されました。

- アウトバウンド・ファイル・アダプタ

- ファイル・アダプタを起動するためのinvokeアクティビティ(カスタマイズ可能なスコープに追加)

バージョン2の基本SOAコンポジット・アプリケーションが作成されたときに、同期Oracle Mediatorサービス・コンポーネントが追加されました。これにより、BPELプロセス・サービス・コンポーネントへのルーティング・ルールが更新されました。

その後、バージョン2のベース・アプリケーションのSARファイルが、カスタマイズされたアプリケーションにインポートされました。ユーザーが「カスタマイズ開発者」ロールを使用してOracle JDeveloperにアクセスしたときに、無効なコンポジット・エラーが表示されました。「構造」ウィンドウのcomposite.xmlファイルには、次のように、一連のサービス・コンポーネントおよび参照バインディング・コンポーネントの無効な構造が表示されました。例46-1に詳細を示します。

例46-1 無効な構造

<component> </component>
<reference> </reference>
<component> </component>

<reference>コンポーネント(この場合、バージョン1のベース・アプリケーションでは、ユーザーが「カスタマイズ開発者」ロールを使用してOracle JDeveloperにアクセスしたときに追加されたアウトバウンド・ファイル・アダプタ)は、最後に表示されている必要があります。例46-2に詳細を示します。

例46-2 有効な構造

<component> </component>
<component> </component>
<reference> </reference>

このエラーを解決するには、「構造」ウィンドウに移動し、これらのコンポーネントをコピーして正しい順序で貼り付けます。このアクションにより、コンポジット検証エラーが解決されます。

46.2.7 シーケンスの競合の解決に関する注意事項

次の手順を実行すると仮定します。

シーケンスの複雑さを解決する手順は、次のとおりです。

1. バージョン1のSOAコンポジット・アプリケーションをカスタマイズします。
たとえば、「カスタマイズ開発者」ロールでOracle JDeveloperにログインしているときに、BPELプロセスのカスタマイズ可能なscopeアクティビティに新しいアクティビティを追加します。BPELプロセスにより、新しいアクティビティが追加されるsequenceアクティビティが作成されます。

2. バージョン2のSOAコンポジット・アプリケーションを作成します。
バージョン2コンポジットで、同じカスタマイズ可能なスコープに新しいアクティビティを追加すると、新しいsequenceアクティビティが作成されます。

3. バージョン2のSOAコンポジット・アプリケーションをカスタマイズされたアプリケーションにインポートします。

4. 「カスタマイズ開発者」ロールでOracle JDeveloperを開きます。
次のエラーが表示されます。

Sequence element is not expected

競合を解決する手順は、次のとおりです。

1. 「構造」ウィンドウに移動します。

2. シーケンスを展開します。

3. 各コンポーネントをコピーし、別のシーケンスに貼り付けます。

4. コピー元のシーケンス内のコンポーネントを削除します。

5. シーケンスが空の場合は削除します。

46.2.8 カスタマイズされたアプリケーションのコンパイルおよびデプロイに関する注意事項

コア・アプリケーション、バーティカル・アプリケーションまたは顧客レベルでカスタマイズされたアプリケーションをデプロイまたはコンパイルすると、例46-3に示すように、予期しないID属性を説明した警告メッセージが表示されます。これらのメッセージは、無視しても問題ありません。スキーマ定義に必要な単純型要素が含まれていないために、これらのメッセージが表示されます。これらのメッセージにより、カスタマイズされたコンポジットが正常にデプロイされないわけではありません。

例46-3 デプロイメント・エラーまたはコンパイル・エラー

[scac] warning: in
/scratch/qizhong/my-jdev/mywork/CompositeTestApp2/Project2/composite.xml(22,32):
Schema validation failed for
/scratch/qizhong/my-jdev/mywork/CompositeTestApp2/Project2/composite.xml<Line 22,
Column 32>: XML-24535: (Error) Attribute
'http://www.w3.org/XML/1998/namespace:id' not expected.
[scac] warning: in
/scratch/qizhong/my-jdev/mywork/CompositeTestApp2/Project2/composite.xml(23,32):
Schema validation failed for
/scratch/qizhong/my-jdev/mywork/CompositeTestApp2/Project2/composite.xml<Line 23,
Column 32>: XML-24535: (Error) Attribute
'http://www.w3.org/XML/1998/namespace:id' not expected.

46.3 バーティカル・アプリケーションのカスタマイズ

この項では、バーティカルSOAコンポジット・アプリケーションのカスタマイズに必要な手順の概要を示します。

46.3.1 バーティカル・アプリケーションのカスタマイズ方法

バーティカル・アプリケーションをカスタマイズする手順は、次のとおりです。

1. 次のいずれかの方法を使用して、カスタマイズ・レイヤーのレイヤー値を追加します。

1. アプリケーション固有のレイヤー値を追加するには、図46-3に示すように、「デザインタイム・カスタマイズ・レイヤー値の構成」リンクをクリックします。

図46-3 「デザインタイム・カスタマイズ・レイヤー値の構成」リンク

「図46-3 「デザインタイム・カスタマイズ・レイヤー値の構成」リンク」の説明

2. レイヤー値を追加します。
値を指定してファイルを保存すると、「アプリケーション・リソース」のMDS DTフォルダにCustomizationLayerValues.xmlファイルが表示されます。この場所のファイルをダブルクリックすると、その他の変更を行うためのエディタが開きます。

または、

1. すべてのアプリケーションに適用可能なグローバル値を追加するには、$JDEV_HOME/jdeveloper/jdevのCustomizationLayerValues.xmlファイルを開き、カスタマイズ・レイヤーのレイヤー値を追加します。たとえば、値Communicationsをindustryレイヤーに追加します。

<cust-layers xmlns="http://xmlns.oracle.com/mds/dt">
<cust-layer name="industry">
<cust-layer-value value="communications" display-name="Communications"/>
</cust-layer>
</cust-layers>

2. Oracle JDeveloperを起動し、「デフォルトのロール」を選択します。

3. コア・アプリケーションとは異なる名前で新しいSOAアプリケーションを作成します。

4. 「ファイル」メニューから、「インポート」→「SOAアーカイブをSOAプロジェクトへ」の順に選択します。

5. 「参照」をクリックし、第46.2項「カスタマイズ可能なコンポジットの作成」でコア・アプリケーション・チームが作成したコンポジット・アーカイブのJARファイルを選択します。

6. 「コンポジット名」フィールドで、コアSOAプロジェクトとは別の名前を入力します。

注意:

SOAプロジェクトは選択しないでください。インポートするJARファイルには、新規SOAプロジェクトを作成する必要があります。

7. 「カスタマイズ用にインポート」チェック・ボックスを選択します。

8. 「ツール」メニューから、「プリファレンス」→「ロール」→「カスタマイズ開発者」の順に選択します。

9. Oracle JDeveloperを再起動します。
「カスタマイズ・コンテキスト」ダイアログに、使用可能なカスタマイズ・レイヤーとレイヤー値が表示されます。

10. 図46-4に示すように、カスタマイズするレイヤーおよび値を選択します(この例では、レイヤーindustryおよび値Communicationsが選択されています)。

図46-4 カスタマイズ・コンテキスト

「図46-4 カスタマイズ・コンテキスト」の説明

11. SOAコンポジット・エディタで、BPELプロセスをダブルクリックしてOracle BPELデザイナにアクセスします。
編集できるのは、カスタマイズ可能に設定されているscopeアクティビティのみです。図46-5に示す例では、コア・アプリケーション・チームが1つのスコープのみをカスタマイズ可能に設定しています。BPELプロセスのその他のアクティビティは無効になり、編集できません。

図46-5 カスタマイズ可能な1つのスコープ

「図46-5 カスタマイズ可能な1つのスコープ」の説明

12. 「アプリケーション・ナビゲータ」でSOAプロジェクトを右クリックし、「デプロイ」を選択して、カスタマイズ・コンポジット(SAR)のJARファイルを作成します。
デプロイメントはカスタマイズ・ロールが使用可能な状態で起動されるため、現在のカスタマイズ・コンテキストに基づいて適切なレイヤーの基本コンポジットが自動的にマージされます。

13. アプリケーションをソース・コード・コントロール・システムにチェックインします。
JARファイルには、次のカスタマイズ・レベルの基本プロセスとして順に機能するマージされたコンポジットが格納されます。これで、JARファイルを顧客に提供できるようになりました。

注意:

「カスタマイズ開発者」ロールでOracle JDeveloperにログインしているときに、WSDLファイルおよびXSDファイルを作成できます。「アプリケーション・ナビゲータ」で、プロジェクト名を右クリックし、「SOA」→「作成」→「WSDL」または「SOA」→「作成」→「XSD」の順に選択します。

46.4 顧客バージョンのカスタマイズ

この項では、顧客バージョンのSOAコンポジット・アプリケーションのカスタマイズに必要な手順の概要を示します。

46.4.1 顧客バージョンのカスタマイズ方法

顧客バージョンをカスタマイズする手順は、次のとおりです。

1. 次のいずれかの方法を使用して、カスタマイズ・レイヤーのレイヤー値を追加します。

1. アプリケーション固有のレイヤー値を追加するには、第46.3項「バーティカル・アプリケーションのカスタマイズ」のステップ1に示すように、「デザインタイム・カスタマイズ・レイヤー値の構成」リンクをクリックします。

2. レイヤー値を追加します。
値を指定してファイルを保存すると、「アプリケーション・リソース」のMDS DTフォルダにCustomizationLayerValues.xmlファイルが表示されます。この場所のファイルをダブルクリックすると、その他の変更を行うためのエディタが開きます。

または、

1. すべてのアプリケーションに適用可能なグローバル値を追加するには、$JDEV_HOME/jdeveloper/jdevのCustomizationLayerValues.xmlファイルを開き、カスタマイズ・レイヤーのレイヤー値を追加します。たとえば、North America値およびAsia Pacific値をsiteレイヤーに追加します。

<cust-layers xmlns="http://xmlns.oracle.com/mds/dt">
<cust-layer name="site">
<cust-layer-value value="communications" display-name="North America"/>
<cust-layer-value value="communications" display-name="Asia Pacific"/>
</cust-layer>
</cust-layers>

2. Oracle JDeveloperを起動し、「デフォルトのロール」を選択します。

3. コア・アプリケーションまたはカスタマイズ・アプリケーションとは異なる名前で新しいSOAアプリケーションを作成します。

4. 「ファイル」メニューから、「インポート」→「SOAアーカイブをSOAプロジェクトへ」の順に選択します。

5. 「参照」をクリックし、第46.3項「バーティカル・アプリケーションのカスタマイズ」でバーティカル・アプリケーション・チームが作成したコンポジット・アーカイブのJARファイルを選択します。

6. 「カスタマイズ用にインポート」チェック・ボックスを選択します。

7. 「ツール」メニューから、「プリファレンス」→「ロール」→「カスタマイズ開発者」の順に選択します。

8. Oracle JDeveloperを再起動します。
「カスタマイズ・コンテキスト」ダイアログに、使用可能なカスタマイズ・レイヤーとレイヤー値が表示されます。

9. 図46-6に示すように、カスタマイズするレイヤーと値を選択します(この例では、siteレイヤーとNorth America値が選択されています)。

図46-6 カスタマイズ・コンテキスト

「図46-6 カスタマイズ・コンテキスト」の説明

10. BPELプロセスをカスタマイズします。

11. SOAプロジェクトを右クリックし、「デプロイ」を選択して北米地域のJARファイル(SAR)を作成します。

12. アプリケーションをソース・コード・コントロール・システムにチェックインします。

46.5 コンポジットのアップグレード

この項では、SOAコンポジット・アプリケーションの次のバージョンへのアップグレードに必要な手順の概要を示します。

46.5.1 コア・アプリケーション・チーム・コンポジットのアップグレード方法

コア・アプリケーション・チームは、不具合の修正、製品の拡張および次のバージョンのコンポジットの作成を実施します。

コア・アプリケーション・チーム・コンポジットをアップグレードする手順は、次のとおりです。

1. 第46.2項「カスタマイズ可能なコンポジットの作成」で作成したアプリケーションをソース・コントロールからチェックアウトします。

2. Oracle JDeveloperを起動し、「デフォルトのロール」を選択します。

3. 不具合を修正し、製品を拡張します。

4. コンポジットをデプロイし、次のバージョンのJARファイルを作成します。

5. JARファイルをバーティカル・アプリケーション・チームに提供します。

46.5.2 バーティカル・アプリケーション・チーム・コンポジットのアップグレード方法

バーティカル・アプリケーション・チームは、新しい基本コンポジットをカスタマイズしてJARファイル・バージョンを作成します。

バーティカル・アプリケーション・チーム・コンポジットをアップグレードする手順は、次のとおりです。

1. 第46.3項「バーティカル・アプリケーションのカスタマイズ」で作成したアプリケーションをソース・コントロールからチェックアウトします。

2. Oracle JDeveloperを起動し、「デフォルトのロール」を選択します。

3. チェックアウトしたアプリケーションを開きます。

4. 「アプリケーション・ナビゲータ」でプロジェクト・ノードを選択し、現在のプロジェクト・コンテキストを設定します。次の手順のインポート・コマンドでは、選択したプロジェクトにSOAアーカイブをインポートして基本をアップグレードするため、この手順は重要です。

5. Oracle JDeveloperの「ファイル」メニューから、第46.5.1項「コア・アプリケーション・チーム・コンポジットのアップグレード方法」で作成された新規リビジョンのJARファイルをインポートします。

6. 「ツール」メニューから、「プリファレンス」→「ロール」→「カスタマイズ開発者」の順に選択します。

7. Oracle JDeveloperを再起動します。

8. 「カスタマイズ・コンテキスト」ダイアログで、カスタマイズするレイヤーと値を選択します(たとえば、industryレイヤーとCommunicationsの値を選択します)。

9. BPELプロセスを開き、前の手順で選択したコンテキストのレイヤーに、新しい基本コンポーネントをマージできるかどうかを確認します。

10. ログ・ウィンドウで潜在的な警告およびエラーを確認します。

11. 必要な場合は、プロセスを変更してエラーおよび警告を修正します。これにより、レイヤーがバックグラウンドで編集されます。

12. コンポジットをデプロイして、カスタマイズされたJARファイルの次のリビジョンを作成し、アップグレードする顧客に提供します。

46.5.3 カスタマ・コンポジットのアップグレード方法

顧客は、第46.5.2「バーティカル・アプリケーション・チーム・コンポーネントのアップグレード方法」のバーティカル・アプリケーション・チームと同じ手順に従って、新しい基本コンポジットに独自のレイヤーを適用します。

47 ドメイン値マップの使用

この章では、異なるドメインで同じエンティティを表すために使用される用語をマップする、ドメイン値マップを作成および使用して、あるドメインの特定のフィールドで使用される値を、他のドメインの同じフィールドで使用される値にマップする方法について説明します。この章では、ドメイン値の参照に使用されるXPath関数についても説明します。

この章には次の項が含まれます:

- 第47.1項「ドメイン値マップの概要」

- 第47.2項「ドメイン値マップの作成」

- 第47.3項「ドメイン値マップの編集」

- 第47.4項「ドメイン値マップ関数の使用」

- 第47.5項「階層ルックアップ用のドメイン値マップ・ユースケースの作成」

- 第47.6項「複数の値のドメイン値マップ・ユースケースの作成」

47.1 ドメイン値マップの概要

異なるドメイン間で情報を送信する場合に、各ドメインで同じエンティティを表すのに異なる用語や処理コードを使用している場合があります。たとえば、あるドメインではメッセージ内で完全な都市名(Boston)を使用し、別のドメインでは都市を示すコード(BO)を使用している可能性があります。各ドメインでこれらのデータをいずれかの用語セットに標準化しなくても、ドメイン値マップを使用して、あるドメインで使用されている用語と他のドメインで使用されている用語をマップできます。ドメイン値マップは、実行時にアプリケーションを介して送信されるメッセージ内の実際の値に対して機能します。

通常、各ドメイン値マップでは、1つのフィールドまたはカテゴリのみのマッピングを定義しますが、1つのSOAコンポジットで複数のカテゴリのマッピングが必要になる場合もあります。そのため、1つのSOAコンポジットに複数のドメイン値マップを含めることもできます。たとえば、都市名のマッピングを定義したドメイン値マップと、州名のマッピングを定義したドメイン値マップと、国名のマッピングを定義したドメイン値マップを使用できます。

2つ以上のドメインの間で直接値をマップする方法は、ポイントツーポイント・マッピングと呼ばれます。表47-1に、2つのドメインの間で都市名をポイントツーポイント・マッピングする方法を示します。

表47-1 ポイントツーポイント・マッピング

CityCode

CityName

BELG_MN_STLouis

BelgradeStLouis

BELG_NC

BelgradeNorthCarolina

BO

Boston

NP

Northport

KN_USA

KensingtonUSA

KN_CAN

KensingtonCanada

ドメイン値マップの値は静的です。ドメイン値マップの値は、設計時にOracle JDeveloperを使用して指定し、実行時にアプリケーションによってドメイン値マップの値のルックアップが実行されます。Oracle SOAコンポーザを使用して実行時のドメイン値マップを編集する方法の詳細は、第48章「ドメイン値マップでのOracle SOAコンポーザの使用」を参照してください。

注意:

アプリケーション間の各値を動的に統合するために、Oracle SOA Suiteの相互参照機能を使用できます。相互参照の詳細は、第49章「相互参照の使用」を参照してください。

47.1.1 ドメイン値マップ機能

Oracle SOA Suiteのドメイン値マップでは、実行時に実行されるドメイン値マップのルックアップのパフォーマンスおよび結果をより詳細に調整できます。たとえば、修飾情報を指定して、マッピングを補助する追加情報を提供します。また、ドメイン値マップでは、1対多マッピングもサポートされています。

47.1.1.1 修飾子ドメイン

修飾子ドメインには、マッピングを明確にするためだけの情報が含まれます。この追加情報が定義されていないと、マッピングが不明確である場合があります。たとえば、Kensingtonという都市はCanadaとUSAの両方にあるため、都市名のマッピングを定義したドメイン値マップにKNとKensingtonのマッピングが複数存在する可能性があります。そのため、このマッピングには、どちらのマッピングを使用するかを示す修飾子(USAまたはCanada)が必要です。この例を表47-2に示します。

表47-2 修飾子サポートの例

Country(修飾子)

CityCode

CityName

USA

BO

Boston

USA

BELG_NC

Belgrade

USA

BELG_MN_Streams

Belgrade

USA

NP

Northport

USA

KN

Kensington

Canada

KN

Kensington

ドメイン値マップには、複数の修飾子ドメインを含めることができます。たとえば、表47-3では、さらに州名でマッピングを修飾しています。

表47-3 複数の修飾子サポートの例

Country(修飾子)

State(修飾子)

CityCode

CityName

USA

Massachusetts

BO

Boston

USA

North Carolina

BELG

Belgrade

USA

Minnesota

BELG

Belgrade

USA

Alabama

NP

Northport

USA

Kansas

KN

Kensington

Canada

Prince Edward Island

KN

Kensington

修飾子は、マッピングを修飾するときにのみ使用します。そのため、修飾子の値はルックアップできません。

47.1.1.2 修飾子の階層

複数の修飾子ドメインが存在する場合は、修飾子の順序を指定して、実行時のルックアップ時にそれらの修飾子ドメインがどのように使用されるかを指定できます。修飾子の順序は、より正確な一致を定義する際に、その修飾子の役割によって上位から下位に変化します。表47-3の場合は、Stateの一致がより正確な一致を示すため、State修飾子をCountry修飾子より上位の順序に指定することが考えられます。

ドメイン値マップは階層ルックアップをサポートします。ルックアップ時に修飾子の値を指定し、正確な一致が検出されなかった場合は、ルックアップ・メカニズムによって上位順序の修飾子が空の引用符("")に設定され、より一般的な一致の検出が試行されます。これは、一致が検出されるか、可能なかぎりのルックアップが終了して一致が検出されなくなるまで実行されます。図47-1に、(表47-3の値に基づいた)次のルックアップで階層ルックアップが実行される手順を示します。

State=Arkansas, Country=Canada, CityCode=KN_USA

この例では、State修飾子の順序は1で、Country修飾子の順序は2です。図47-1に示すように、ルックアップ・メカニズムでは上位順序の修飾子Stateに正確なルックアップ値Arkansasを設定し、下位順序の修飾子CountryにCanada|""を使用します。

図47-1 階層ルックアップの例

「図47-1 階層ルックアップの例」の説明

一致が検出されない場合、ルックアップ・メカニズムでは上位順序の修飾子Stateに値""を設定し、次に上位である修飾子Countryに正確な値Canadaを設定します。一致が検出されない場合、ルックアップ・メカニズムでは以前に上位順序の修飾子であったCountryに値""を設定します。CityCodeがKN_USAである一致行が1行検出された場合は、値としてKensingtonが返されます。

表47-4に、これらの手順の要約を示します。

表47-4 ドメイン値マップ・ルックアップ結果

州

国

短い値

ルックアップ結果

Arkansas

CANADA|" "

KN_USA

一致なし

" "

CANADA

KN_USA

一致なし

" "

" "

KN_USA

Kensington

47.1.1.3 1対多マッピング

ドメイン値マップでは、1つの値を複数の値にマップできます。たとえば、支払い条件のドメイン値マップには、表47-5に示すように、支払い条件と、値引率、値引期間、正味掛売り期間などの複数の値とのマッピングを格納できます。

表47-5 1対多マッピング・サポート

支払条件

値引率

値引期間

正味掛売り期間

GoldCustomerPaymentTerm

10

20

30

SilverCustomerPaymentTerm

5

20

30

RegularPaymentTerm

2

20

30

47.2 ドメイン値マップの作成

Oracle JDeveloperのSOAコンポジット・アプリケーションで1つ以上のドメイン値マップを作成し、実行時に、そのマップを使用してマップされている値をルックアップできます。ドメイン値マップを作成すると、.dvmの拡張子が付いたファイルがアプリケーション・ファイル構造に作成されます。

47.2.1 ドメイン値マップの作成方法

ドメイン値マップは、Oracle JDeveloperの「ドメイン値マップ(DVM)・ファイルの作成」ダイアログを使用して作成および構成します。このダイアログでは、2つのドメインを定義し、それぞれに1つの値を定義します。完了すると、ドメイン値マップ・エディタが表示され、追加のドメインとそれに対応する値を定義することもできます。

ドメイン値マップを作成する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、ドメイン値マップを作成するプロジェクトを右クリックし、「新規」を選択します。
「新規ギャラリ」ダイアログが表示されます。

2. 「SOA層」ノードを開き、「トランスフォーメーション」カテゴリを選択します。

3. 「項目」リストで、「ドメイン値マップ(DVM)」を選択し、「OK」をクリックします。
「ドメイン値マップ(DVM)・ファイルの作成」ダイアログが表示されます。

4. 「ファイル名」フィールドに、ドメイン値マップ・ファイルのわかりやすい一意の名前を入力します。ファイル名には、.dvmの拡張子が含まれている必要があります。

5. 「説明」フィールドに、ドメイン値マップの説明を入力します。このフィールドはオプションです。

6. 「ドメイン名」フィールドに、各ドメインの名前を入力します。これらの名前はドメイン値マップの列名で、それぞれのドメインにおけるフィールドを表します。

注意:

ドメイン名は、タイプNCName (コロンなしの名前)である必要があります。それは、コロンが付いていない有効なXML要素名です。各ドメイン名はドメイン値マップ内では一意の名前にする必要があります。ドメインは、後でさらに追加できます。

7. 「ドメイン値」フィールドに、各ドメインの対応する値を入力します。たとえば、図47-2に示すように、CityCodeドメインにBOを、CityNameドメインにBostonを入力します。

図47-2 移入後の「ドメイン値マップ・ファイルの作成」ダイアログ

「図47-2 移入後の「ドメイン値マップ・ファイルの作成」ダイアログ」の説明

8. 「OK」をクリックします。
ドメイン値マップ・エディタが表示され、新しいドメイン値マップが表示されます。

47.2.2 ドメイン値マップ作成時の処理内容

図47-3に示すように、拡張子が.dvmのファイルがプロジェクト・ファイル構造に作成され、「アプリケーション・ナビゲータ」に表示されます。

図47-3 「アプリケーション・ナビゲータ」のドメイン値マップ・ファイル

「図47-3 「アプリケーション・ナビゲータ」のドメイン値マップ・ファイル」の説明

すべての.dvmファイルは、例47-1に示すスキーマ定義(XSD)ファイルに基づいています。

例47-1 ドメイン値マップ・ファイルのXSDファイル

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright (c) 2006, Oracle. All rights reserved.  -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xmlns.oracle.com/dvm"
xmlns:tns="http://xmlns.oracle.com/dvm"
elementFormDefault="qualified"
attributeFormDefault="unqualified">

<xsd:element name="dvm">
<xsd:annotation>
<xsd:documentation>The Top Level Element
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="description" minOccurs="0" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The DVM Description.  This is optional
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="columns">
<xsd:annotation>
<xsd:documentation>This element holds DVM's column List.
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="column" minOccurs="2" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation>This represents a DVM Column
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="qualifier" default="false" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="order" use="optional" type="xsd:positiveInteger"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="rows" minOccurs="0">
<xsd:annotation>
<xsd:documentation>This represents all the DVM Rows.
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="row" minOccurs="1" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation>
Each DVM row of values
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="cell" minOccurs="2" maxOccurs="unbounded"
type="xsd:string">
<xsd:annotation>
<xsd:documentation>This is the value for this row and for
each column in the same order as defined in Columns.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:annotation>
<xsd:documentation>This Schema is used to validate the DVM Document got for
creation and
update of a DVM.
</xsd:documentation>
</xsd:annotation>
</xsd:schema>

47.3 ドメイン値マップの編集

ドメイン値マップのフレームワークを作成した後は、ドメイン値マップ・エディタを使用して、ドメインとそれに対応するドメイン値をマップに追加できます。

47.3.1 ドメイン値マップへのドメインの追加方法

(ドメイン値マップの列を表す)追加のドメインをマップに定義できます。また、それぞれの新規ドメインに含まれる値を実行時のルックアップに含めるのか、それともマッピングを修飾するためだけに使用するのかを指定できます。ドメイン(列)名は、タイプNCName (コロンなしの名前)である必要があります。それは、コロンが付いていない有効なXML要素名です。

ドメイン値マップにドメインを追加する手順は、次のとおりです。

1. ドメイン値マップ・エディタでマップ・ファイルを開いていない場合は、「アプリケーション・ナビゲータ」のDVMファイルをダブルクリックします。

2. 「マップ表」で「追加」をクリックし、「ドメインの追加」を選択します。
「ドメインの作成」ダイアログが表示されます。

3. 「名前」フィールドに、列の名前を入力します。

4. 「修飾子」フィールドで、この列を修飾子として設定する場合は「True」を選択します。そうでない場合は「False」を選択します。

ヒント:

修飾子ドメインおよび修飾子の順序の詳細は、第47.1.1.1項「修飾子ドメイン」および第47.1.1.2項「修飾子の階層」を参照してください。

5. 「修飾子順」フィールドに、修飾子ドメインの優先度を示す数値を入力します。
このフィールドが有効になるのは、「修飾子」フィールドで「True」を選択した場合のみです。

図47-4 ドメイン値マップ - 「ドメインの作成」ダイアログ

「図47-4 ドメイン値マップ - 「ドメインの作成」ダイアログ」の説明

6. 「OK」をクリックします。
「マップ表」に新しい列が表示されます。

47.3.2 ドメインの編集方法

ドメイン値マップにドメインを追加した後は、名前を変更したり、修飾子ドメインであるかどうかや修飾子の順序を変更できます。

ドメインを編集する手順は、次のとおりです。

1. ドメイン値マップ・エディタで、変更するドメインの名前を選択します。

2. 「ドメイン/値の編集」をクリックします。
「ドメインの編集」ダイアログが表示されます。

図47-5 ドメイン値マップ - 「ドメインの編集」ダイアログ

「図47-5 ドメイン値マップ - 「ドメインの編集」ダイアログ」の説明

3. ダイアログで任意のフィールドを変更し、「OK」をクリックします。

注意:

ドメイン名は、タイプNCName (コロンなしの名前)である必要があります。それは、コロンが付いていない有効なXML要素名です。

47.3.3 ドメイン値マップへのドメイン値の追加方法

ドメイン値はドメイン値マップの行に表示され、それぞれのドメインの各行に含まれる値がマップされます。ドメイン値は、ドメイン間のマッピングを完全に定義するために必要なだけ追加できます。

ドメイン値マップにドメイン値を追加する手順は、次のとおりです。

1. ドメイン値マップ・エディタで、「追加」をクリックし、「ドメイン値の追加」を選択します。
「マップ表」の既存の行の下に新しい行が表示されます。

2. 新しい行に各ドメインの値を入力します。

3. さらに行を作成するには、前述の手順を繰り返します。変更が終了したら、Oracle JDeveloperツールバーの「すべて保存」をクリックします。

47.3.4 ドメイン値の編集方法

ドメイン値マップにドメイン値を追加した後は、必要に応じて値を変更できます。

ドメイン値を変更する手順は、次のとおりです。

1. ドメイン値マップ・エディタで、変更する値が含まれている行を選択します。

2. 「ドメイン/値の編集」をクリックします。
「ドメイン値の編集」ダイアログが表示されます。

図47-6 ドメイン値マップ - 「ドメイン値の編集」

「図47-6 ドメイン値マップ - 「ドメイン値の編集」」の説明

3. ダイアログで任意のフィールドを変更し、「OK」をクリックします。

47.4 ドメイン値マップ機能の使用

ドメイン値マップを作成した後は、実行時にドメイン値マップのXPath関数を使用して適切な値をルックアップし、アプリケーションにターゲットを移入できます。

47.4.1 ドメイン値マップ関数の理解

dvm:lookupValueおよびdvm:lookupValue1MのXPath関数は、実行時に単一の値または複数の値についてドメイン値マップをルックアップします。

47.4.1.1 dvm:lookupValue

dvm:lookupValue関数では、ソース列に指定のソース値を含むドメイン値マップでターゲット列の値をルックアップすることにより、文字列が返されます。

- 例47-2に、dvm:lookupValue関数の構文の例を示します。

例47-2 dvm:lookupValue関数の構文

dvm:lookupValue(dvmMetadataURI as string, SourceColumnName as string,
SourceValue as string, TargetColumnName as string, DefaultValue as string) as
string

例47-3に、dvm:lookupValue関数の使用方法の例を示します。

例47-3 dvm:lookupValue関数の使用方法

dvm:lookupValue('cityMap.dvm','CityCodes','BO', 'CityNames',
'CouldNotBeFound')

- 例47-4に、dvm:lookupValue関数の構文の別の例を示します。

例47-4 dvm:lookupValue関数の構文

dvm:lookupValue(dvmMetadataURI as string, SourceColumnName as string,
SourceValue as string, TargetColumnName as string, DefaultValue as string,
(QualifierSourceColumn as string, QualifierSourceValue as string)*) as string

例47-5に、dvm:lookupValue関数の使用方法の別の例を示します。

例47-5 dvm:lookupValue関数の使用方法

dvm:lookupValue ('cityMap.dvm','CityCodes','BO','CityNames',
'CouldNotBeFound', 'State', 'Massachusetts')

引数

- dvmMetadataURI - ドメイン値マップのURI。

- SourceColumnName - ソース列名。

- SourceValue - ソース値(XSLTトランスフォーメーションのソース文書にバインドされるXPath式)。

- targetColumnName - ターゲット列名。

- DefaultValue - 値が見つからない場合は、デフォルト値が返されます。

- QualifierSourceColumn: 修飾子列の名前。

- QualifierSourceValue: 修飾子の値。

47.4.1.2 dvm:lookupValue1M

dvm:lookupValue1M関数では、ソース列の値がソース値と等しいドメイン値マップの複数のターゲット列の値を格納する、XML文書フラグメントが返されます。例47-6に詳細を示します。

例47-6 dvm:lookupValue1M関数の構文

dvm:lookupValue1M(dvmMetadataURI as string, SourceColumnName as string,
SourceValue as string,(TargetColumnName as string)?)as nodeset

引数

- dvmMetadataURI - ドメイン値マップのURI。

- SourceColumnName - ソース列名。

- SourceValue - ソース値(XSLTトランスフォーメーションのソース文書にバインドされるXPath式)。

- TargetColumnName - ターゲット列名。1つ以上の列名を指定する必要があります。疑問符記号(?)は複数のターゲット列名を指定できることを示します。

例47-7に、dvm:lookupValue1M関数の使用方法の例を示します。

例47-7 dvm:lookupValue1M関数の使用方法

dvm:lookupValue1M ('cityMap.dvm','CityCode','BO','CityName',
'CityNickName')

例47-8にその結果を示します。

例47-8 dvm:lookupValue1M関数の結果

<CityName>Boston</CityName>
<CityNickName>BeanTown</CityNickName>

47.4.2 トランスフォーメーションでのドメイン値マップ関数の使用方法

ドメイン値マップ関数は、BPELプロセス・サービス・コンポーネントまたはメディエータ・サービス・コンポーネントによるトランスフォーメーションに使用できます。トランスフォーメーションの実行には、XSLファイルを作成してXMLスキーマ間でデータを変換するときに表示されるXSLTマッパーを使用します。

XSLTマッパーの詳細は、第40章「XSLTマッパーを使用したトランスフォーメーションの作成」を参照してください。

トランスフォーメーションでlookupValue1M関数を使用する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、XSLファイルをダブルクリックしてXSLTマッパーを開きます。

2. XSLTマッパーで、「ソース」および「ターゲット」ペインのツリーを開きます。

3. 「コンポーネント・パレット」で、下矢印をクリックして「拡張」を選択します。

4. 図47-7に示すように、「DVM Functions」を選択します。

図47-7 「コンポーネント・パレット」のドメイン値マップ関数

「図47-7 「コンポーネント・パレット」のドメイン値マップ関数」の説明

5. ソースとターゲットの接続線にlookupValue1Mをドラッグ・アンド・ドロップします。
接続線上に「dvm:lookupValue1M」アイコンが表示されます。

6. 「lookupValue1M」アイコンをダブルクリックします。
図47-8に示すように、「関数の編集 - lookupValue1M」ダイアログが表示されます。

図47-8 「関数の編集 – lookupValue1M」ダイアログ

「図47-8 「関数の編集 – lookupValue1M」ダイアログ」の説明

7. 「関数の編集 – lookupValue1M」ダイアログの次のフィールドに値を指定します。

1. 「dvmLocation」フィールドで、ドメイン値マップ・ファイルのロケーションURIを入力するか、「dvmLocation」フィールドの右側にある「参照」をクリックして、ドメイン値マップ・ファイルを選択します。MDS(メタデータ・サービス)およびMDSの共有ロケーションからもすでにデプロイされたドメイン値マップを選択できます。これを実行するには、「リソース・パレット」を選択します。

2. 「sourceColumnName」フィールドに、ソース要素の値に関連付けられているドメイン値マップの列名を入力するか、「参照」をクリックして、以前に選択したドメイン値マップに定義されている列から列名を選択します。

3. 「sourceValue」フィールドでは、値を入力するか、[Ctrl]キーを押しながら[Space]キーを押してXPathビルディング・アシスタントを使用できます。上矢印キーおよび下矢印キーを押して、リスト内のオブジェクトを配置し、[Enter]キーを押してその項目を選択します。

4. 「targetColumnName」フィールドに、ターゲット要素の値に関連付けられているドメイン値マップの列名を入力するか、「参照」をクリックして、以前に選択したドメイン値マップに定義されている列から列名を選択します。

5. 「追加」をクリックして別の列をターゲット列として追加し、列の名前を入力します。

図47-9に、移入後の「関数の編集 - lookupValue1M」ダイアログを示します。

図47-9 移入後の「関数の編集 – lookupValue1M」ダイアログ

「図47-9 移入後の「関数の編集 – lookupValue1M」ダイアログ」の説明

8. 「OK」をクリックします。
XSLTマッパーが、「lookupValue1M」関数アイコンとともに表示されます。

9. 「ファイル」メニューから「すべて保存」を選択します。

デプロイ済のドメイン値マップを選択する方法の詳細は、第43.7.3項「Oracle JDeveloperでの複数のSOAコンポジット・アプリケーション間の共有データのデプロイ方法および使用方法」を参照してください。

47.4.3 XPath式でのドメイン値マップ関数の使用方法

「式ビルダー」ダイアログでは、ドメイン値マップ関数を使用してXpath式を作成できます。「式ビルダー」ダイアログには、Oracle Mediatorサービス・コンポーネントのフィルタ式または値の割当て機能からアクセスできます。

値の割当て機能の詳細は、第20.3.2.10項「値の割当て方法」を参照してください。

「式ビルダー」ダイアログでlookupValue関数を使用する手順は、次のとおりです。

1. 「関数」リストから「DVM Functions」を選択します。

2. dvm:lookupValue関数をダブルクリックして、「式」フィールドに追加します。

3. lookupValue関数の様々な引数を指定します。例:

dvm:lookupValue('citymap.dvm','CityCodes',$in.Customer/inp1:Customer/Address/Ci
ty,'CityNames','NotFound')

図47-10にも示すように、この式では、都市コードと等価の都市名のドメイン値マップがルックアップされます。都市コードの値は実行時に指定された値によって異なります。

図47-10 「式ビルダー」ダイアログのドメイン値マップ関数

「図47-10 「式ビルダー」ダイアログのドメイン値マップ関数」の説明

47.4.4 実行時の処理内容

実行時には、BPELプロセス・サービス・コンポーネントまたはメディエータ・サービス・コンポーネントが、ドメイン値マップを使用して適切な値をルックアップします。

47.5 階層ルックアップ用のドメイン値マップ・ユースケースの作成

この項では、SOAコンポジットでドメイン値マップを使用する場合のチュートリアルを紹介します。このユースケースは、ドメイン値マップの階層ルックアップ機能を示します。階層ルックアップのユースケースは次の手順で構成されます。

1. ReadOrdersという名前のアダプタ・サービスにより、ファイルがディレクトリから取得されます。

2. ReadOrdersアダプタ・サービスがファイル・データをProcessOrdersというメディエータに送信します。

3. 次にProcessOrdersメディエータはメッセージをアダプタ参照で必要となる構造に変換します。トランスフォーメーション中、メディエータは、UnitsOfMeasureドメイン値マップのCommonドメインの対応値をルックアップします。

4. ProcessOrdersメディエータは、WriteOrdersという外部参照にメッセージを送信します。

5. WriteOrders参照は、指定された出力ディレクトリにメッセージを書き込みます。

この項で説明するサンプル・ファイルをダウンロードするには、Oracle SOA Suiteサンプル・ページを参照してください。

47.5.1 HierarchicalValueユースケースの作成方法

この項では、SOAコンポジット・アプリケーションを作成、構築およびデプロイするための設計時タスクを説明します。これらのタスクは、表示されている順番で実行する必要があります。

47.5.1.1 タスク1: Oracle JDeveloperのアプリケーションおよびプロジェクトの作成方法

Oracle JDeveloperのアプリケーションおよびプロジェクトを作成する手順は、次のとおりです。

1. Oracle JDeveloperで「ファイル」をクリックし、「新規」を選択します。
「新規ギャラリ」ダイアログが表示されます。

2. 「新規ギャラリ」で「一般」ノードを開き、「アプリケーション」カテゴリを選択します。

3. 「項目」リストで「SOAアプリケーション」を選択し、「OK」をクリックします。
SOAアプリケーションの作成ウィザードが表示されます。

4. 「アプリケーション名」フィールドにHierarchicalと入力し、「次へ」をクリックします。
「プロジェクトの名前付け」ページが表示されます。

5. 「プロジェクト名」フィールドにHierarchicalValueと入力し、「次へ」をクリックします。
「SOA設定の構成」ページが表示されます。

6. 「コンポジット・テンプレート」リストで「空のコンポジット」を選択し、「終了」をクリックします。
Oracle JDeveloperの「アプリケーション・ナビゲータ」には新規のアプリケーションやプロジェクトが移入され、SOAコンポジット・エディタには空白のコンポジットがあります。

7. 「ファイル」メニューから「すべて保存」を選択します。

47.5.1.2 タスク2: ドメイン値マップの作成方法

ユースケース用のアプリケーションおよびプロジェクトを作成した後は、ドメイン値マップを作成します。

ドメイン値マップを作成する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、「HierarchicalValue」プロジェクトを右クリックし、「新規」を選択します。

2. 「新規ギャラリ」ダイアログで「SOA層」ノードを開き、「トランスフォーメーション」カテゴリを選択します。

3. 「項目」リストで、「ドメイン値マップ(DVM)」を選択し、「OK」をクリックします。
「ドメイン値マップ(DVM)・ファイルの作成」ダイアログが表示されます。

4. 「ファイル名」フィールドに、UnitsOfMeasure.dvmと入力します。

5. 「ドメイン名」フィールドに、SiebelとCommonを入力します。

6. Siebelドメインに対応する「ドメイン値」フィールドに、Eaと入力します。

7. Commonドメインに対応する「ドメイン値」フィールドに、Eachと入力します。

8. 「OK」をクリックします。
ドメイン値マップ・エディタが表示されます。

9. 「追加」をクリックし、次に「列の追加」を選択します。

DVM列の作成ダイアログが表示されます。

10. 「名前」フィールドに、TradingPartnerと入力します。

11. 「修飾子」リストから「True」を選択します。

12. 「QualifierOrder」フィールドに1を入力し、「OK」をクリックします。

13. ステップ9からステップ12を繰り返して、StandardCodeという名前で修飾子の順序の値が2の修飾子をもう1つ作成します。

14. 「追加」をクリックし、「ドメイン値の追加」を選択します。
この手順を繰り返し、さらに2行追加します。

15. ドメイン値マップ表に新たに追加した行に、表47-6に示す情報を入力します。

表47-6 ドメイン値マップ表の各行の情報

Siebel

Common

TradingPartner

StandardCode

EC

Each

OAG

E-RN

Each

A.C.Networks

RN

EO

Each

ABC Inc

RN

図47-11に示すように、ドメイン値マップ・エディタが表示されます。

図47-11 UnitsOfMeasureのドメイン値マップ

「図47-11 UnitsOfMeasureのドメイン値マップ」の説明

16. 「ファイル」メニューから「すべて保存」を選択して、ドメイン値マップ・エディタを閉じます。

47.5.1.3 タスク3: ファイル・アダプタ・サービスの作成方法

ドメイン値マップを作成した後は、ディレクトリからXMLファイルを読み取るReadOrdersという名前のファイル・アダプタ・サービスを作成します。

注意:

Oracle Mediatorは、Oracle Real Application Clusters(Oracle RAC)の計画的停止に対して実行する際、同じファイルを2回処理する可能性があります。これは、ファイル・アダプタがXAに準拠していないアダプタであるためです。したがって、グローバル・トランザクションに組み入れると、各ファイルを1回のみ処理するXAインタフェース仕様に逸脱する可能性があります。

ファイル・アダプタ・サービスを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「SOA」を選択します。

2. 「ファイル・アダプタ」を選択し、「公開されたサービス」スイムレーンにドラッグします。

3. アダプタ構成ウィザードの「ようこそ」ページが開いた場合は、「次へ」をクリックします。
「サービス名」ページが表示されます。

4. 「サービス名」フィールドにReadOrdersと入力し、「次へ」をクリックします。
「操作」ページが表示されます。

5. 「操作タイプ」フィールドで「Read File」を選択し、「次へ」をクリックします。
「ファイル・ディレクトリ」ページが表示されます。

6. 「着信ファイル用のディレクトリ(物理パス)」フィールドに、ファイルの読取り先のディレクトリを入力します。

7. 「次へ」をクリックします。
「ファイルのフィルタ処理」ページが表示されます。

8. 「インクルード・ファイルの名前パターン」フィールドに*.xmlと入力し、「次へ」をクリックします。
「ファイル・ポーリング」ページが表示されます。

9. 「ポーリング頻度」フィールドの値を10秒に変更し、「次へ」をクリックします。
「メッセージ」ページが表示されます。

10. 「検索」をクリックします。
「タイプ・チューザ」ダイアログが表示されます。

11. 「スキーマ・ファイルのインポート」をクリックします。
「スキーマ・ファイルのインポート」ダイアログが表示されます。

12. 「検索」をクリックして、Samplesフォルダに存在するOrder.xsdファイルを選択します。

13. 「OK」をクリックします。

14. 「タイプ・エクスプローラ」→「インポートしたスキーマ」→「Order.xsd」の順にナビゲーション・ツリーを開きます。

15. 「listOfOrder」を選択して、「OK」をクリックします。

16. 「次へ」をクリックします。
「終了」ページが表示されます。

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

18. 「ファイル」メニューから「すべて保存」をクリックします。
図47-12に、SOAコンポジット・エディタのReadOrdersサービスを示します。

図47-12 SOAコンポジット・エディタのReadOrdersサービス

「図47-12 SOAコンポジット・エディタのReadOrdersサービス」の説明

47.5.1.4 タスク4: ProcessOrdersメディエータ・コンポーネントの作成方法

ProcessOrdersという名前のメディエータを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「メディエータ」アイコンをドラッグし、SOAコンポジット・エディタの「コンポーネント」セクションにドロップします。
「メディエータの作成」ダイアログが表示されます。

2. 「名前」フィールドに、ProcessOrdersと入力します。

3. 「テンプレート」リストから、「インタフェースを後で定義」を選択します。

4. 「OK」をクリックします。
ProcessOrdersという名前のメディエータが作成されます。

5. 図47-13に示すように、SOAコンポジット・エディタで、「ReadOrders」サービスと「ProcessOrders」Oracle Mediatorを接続します。
この操作により、ファイルを入力ディレクトリから読み込む間に、ProcessOrdersメディエータを起動するファイル・アダプタ・サービスが指定されます。

図47-13 ReadOrdersサービスからProcessOrdersメディエータへの接続

「図47-13 ReadOrdersサービスからProcessOrdersメディエータへの接続」の説明

6. 「ファイル」メニューから「すべて保存」を選択します。

47.5.1.5 タスク5: ファイル・アダプタ参照の作成方法

ファイル・アダプタ参照を作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「SOA」を選択します。

2. 「ファイル・アダプタ」を選択し、「外部参照」スイムレーンにドラッグします。
「アダプタ構成ウィザード」の「ようこそ」ページが表示されます。

3. 「次へ」をクリックします。
「サービス名」ページが表示されます。

4. 「サービス名」フィールドに、WriteCommonOrderと入力します。

5. 「次へ」をクリックします。
「操作」ページが表示されます。

6. 「操作タイプ」フィールドで、「Write File」を選択します。

7. 「次へ」をクリックします。
「ファイル構成」ページが表示されます。

8. 「発信ファイルのディレクトリ(物理パス)」フィールドに、ファイルを書き込むディレクトリの名前を入力します。

9. 「ファイル・ネーミング規則」フィールドにcommon_order_%SEQ%.xmlと入力して、「次へ」をクリックします。
「メッセージ」ページが表示されます。

10. 「検索」をクリックします。
「タイプ・チューザ」ダイアログが表示されます。

11. 「タイプ・エクスプローラ」→「プロジェクトのスキーマ・ファイル」→「Order.xsd」の順に移動し、「listOfOrder」を選択します。

12. 「OK」をクリックします。

13. 「次へ」をクリックします。
「終了」ページが表示されます。

14. 「終了」をクリックします。
図47-14に、SOAコンポジット・エディタのWriteCommonOrder参照を示します。

図47-14 SOAコンポジット・エディタのWriteCommonOrder参照

「図47-14 SOAコンポジット・エディタのWriteCommonOrder参照」の説明

15. 「ファイル」メニューから「すべて保存」を選択します。

47.5.1.6 タスク6: ルーティング・ルールの指定方法

メッセージが経由するReadOrdersアダプタ・サービスから外部参照へのパスを指定する必要があります。

ルーティング・ルールを指定する手順は、次のとおりです。

1. 図47-15に示すように、「ProcessOrders」Oracle Mediatorを「WriteCommonOrder」参照に接続します。

図47-15 ProcessOrdersメディエータからWriteCommonOrder参照への接続

「図47-15 ProcessOrdersメディエータからWriteCommonOrder参照への接続」の説明

2. 「ProcessOrders」Oracle Mediatorをダブルクリックします。

3. 「次を使用して変換」フィールドの右側にあるアイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

4. 「新規マッパー・ファイルの作成」を選択し、「OK」をクリックします。
XSLTマッパーに、「listOfOrder_To_listOfOrder.xsl」ファイルが表示されます。

5. 「imp1:listOfOrder」ソース要素を「imp1:listOfOrder」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。

6. 「自動マップ中」オプションから、「祖先名を考慮した要素の一致」の選択を解除します。

7. 「OK」をクリックします。
図47-16に示すように、「listOfOrder_To_listOfOrder.xsl」ファイルが表示されます。

図47-16 imp1:listOfOrderからimp1:listOfOrderへのトランスフォーメーション

「図47-16 imp1:listOfOrderからimp1:listOfOrderへのトランスフォーメーション」の説明

8. 「コンポーネント・パレット」で、「拡張」を選択します。

9. 「DVM Functions」をクリックします。

10. 図47-17に示すように、lookupValueをunitsOfMeasure要素の接続線にドラッグ・アンド・ドロップします。

図47-17 imp1:listOfOrderからimp1:listOfOrder.xslへのlookupValue関数の追加

「図47-17 imp1:listOfOrderからimp1:listOfOrder.xslへのlookupValue関数の追加」の説明

11. 「lookupvalue」アイコンをダブルクリックします。
「関数の編集 - lookupValue」ダイアログが表示されます。

12. 「dvmLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。

13. 「UnitsofMeasure.dvm」を選択して、「OK」をクリックします。

14. 「sourceColumnName」フィールドの右側にある「検索」をクリックします。
DVM列の選択ダイアログが表示されます。

15. 「Siebel」を選択して、「OK」をクリックします。

16. 「sourceValue」列に、次の値を入力します。
/imp1:listOfOrder/imp1:order/imp1:baseData/imp1:unitOfMeasure

17. 「targetColumnName」フィールドの右側にある「検索」をクリックします。
DVM列の選択ダイアログが表示されます。

18. 「Common」を選択して、「OK」をクリックします。

19. 「defaultValue」フィールドに"No_Value_Found"と入力します。

20. 「追加」をクリックします。
「qualifierColumnName」行が追加されます。

21. 「qualifierColumnName」フィールドに"StandardCode"と入力します。

22. 「追加」をクリックします。
「qualifierValue」行が追加されます。

23. 「qualifierValue」フィールドに、次の値を入力します。
/imp1:listOfOrder/imp1:order/imp1:baseData/imp1:standard

24. 「追加」をクリックして、別の「qualifierColumnName」行を挿入します。

25. 「qualifierColumnName」フィールドに"TradingPartner"と入力します。

26. 「追加」をクリックして、別の「qualifierValue」行を挿入します。

27. 「qualifierValue」フィールドに、次の値を入力します。
/imp1:listOfOrder/imp1:order/imp1:baseData/imp1:tp

図47-18に示すように、「関数の編集 - lookupValue」ダイアログが表示されます。

図47-18 「関数の編集 - lookupValue関数」ダイアログ: 階層ルックアップ・ユースケース

「図47-18 「関数の編集 - lookupValue関数」ダイアログ: 階層ルックアップ・ユースケース」の説明

28. 「OK」をクリックします。
図47-19に示すように、トランスフォーメーションが表示されます。

図47-19 imp1:listOfOrderからimp1:listOfOrderへのトランスフォーメーションの完了

「図47-19 imp1:listOfOrderからimp1:listOfOrderへのトランスフォーメーションの完了」の説明

29. 「ファイル」メニューから「すべて保存」を選択して、上部にある「listOfOrder_To_listOfOrder.xsl」ファイルを閉じます。

47.5.1.7 タスク7: アプリケーション・サーバー接続の構成方法

SOAコンポジット・アプリケーションをデプロイするには、アプリケーション・サーバー接続が必要です。アプリケーション・サーバー接続の作成方法の詳細は、第43.7.1.1項「アプリケーション・サーバー接続の作成」を参照してください。

47.5.1.8 タスク8: コンポジット・アプリケーションのデプロイ方法

次の手順で、HierarchicalValueコンポジット・アプリケーションをアプリケーション・サーバーにデプロイします。

- アプリケーション・デプロイメント・プロファイルの作成

- アプリケーション・サーバーへのアプリケーションのデプロイ

これらの手順の詳細は、第43.7.1項「Oracle JDeveloperでの単一のSOAコンポジットのデプロイ方法」を参照してください。

47.5.2 HierarchicalValueアプリケーションの実行方法と監視方法

デプロイしたHierarchicalValueアプリケーションは、入力XMLファイルであるsampleorder.xmlを入力フォルダにコピーすることで実行できます。このファイルはsamplesフォルダにあります。正常終了した場合、common_order_1.xmlという名前のファイルが、指定された出力ディレクトリに作成されます。

実行中のインスタンスの監視には、次のURLにあるOracle Enterprise Manager Fusion Middleware Controlを使用できます。

http://hostname:port/em

ここで、hostnameは、Oracle SOA Suiteインフラストラクチャをインストールしたホストです。

これらの手順の詳細は、第43.7.1項「Oracle JDeveloperでの単一のSOAコンポジットのデプロイ方法」を参照してください。

47.6 複数の値のドメイン値マップ・ユースケースの作成

この項では、ルックアップ用の複数の値を持つドメイン値マップを作成する方法のチュートリアルを紹介します。このユースケースは、複数の値をルックアップするために、2つのエンドポイント間でドメイン値マップ・ルックアップを使用する統合シナリオを示します。たとえば、インバウンド値が州の場合、アウトバウンド値は州の略称、言語および首都になります。複数の値ルックアップのユースケースは次の手順で構成されます。

1. readFileという名前のアダプタ・サービスにより、ファイルがディレクトリから取得されます。

2. readFileアダプタ・サービスがファイル・データをLookupMultiplevaluesMediatorというOracle Mediatorに送信します。

3. 次にLookupMultiplevaluesMediator Oracle Mediatorはメッセージをアダプタ参照で必要となる構造に変換します。トランスフォーメーション中、Oracle MediatorはLongnameおよびShortnameドメインの等価値に対するmultivalueドメイン値マップをルックアップします。

4. LookupMultiplevaluesMediator Oracle Mediatorは、writeFileという外部参照にメッセージを送信します。

5. writeFile参照は、指定された出力ディレクトリにメッセージを書き込みます。

この項で説明するサンプル・ファイルをダウンロードするには、Oracle SOA Suiteサンプル・ページを参照してください。

47.6.1 Multivalueユースケースの作成方法

この項では、SOAコンポジット・アプリケーションを作成、構築およびデプロイするための設計時タスクを説明します。これらのタスクは、表示されている順番で実行します。

47.6.1.1 タスク1: Oracle JDeveloperのアプリケーションおよびプロジェクトの作成方法

Oracle JDeveloperのアプリケーションおよびプロジェクトを作成する手順は、次のとおりです。

1. Oracle JDeveloperで「ファイル」をクリックし、「新規」を選択します。
「新規ギャラリ」ダイアログが表示されます。

2. 「新規ギャラリ」で「一般」ノードを開き、「アプリケーション」カテゴリを選択します。

3. 「項目」リストで「SOAアプリケーション」を選択し、「OK」をクリックします。
SOAアプリケーションの作成ウィザードが表示されます。

4. 「アプリケーション名」フィールドにMultivalueと入力し、「次へ」をクリックします。
「プロジェクトの名前付け」ページが表示されます。

5. 「プロジェクト名」フィールドにMultivalueと入力し、「次へ」をクリックします。
「SOA設定の構成」ページが表示されます。

6. 「コンポジット・テンプレート」リストから「空のコンポジット」を選択し、「終了」をクリックします。
Oracle JDeveloperの「アプリケーション・ナビゲータ」には新規のアプリケーションやプロジェクトが移入され、SOAコンポジット・エディタには空白のコンポジットがあります。

7. 「ファイル」メニューから「すべて保存」を選択します。

47.6.1.2 タスク2: ドメイン値マップの作成方法

ユースケース用のアプリケーションおよびプロジェクトを作成した後は、ドメイン値マップを作成します。

ドメイン値マップを作成する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、「Multivalue」プロジェクトを右クリックし、「新規」を選択します。

2. 「新規ギャラリ」ダイアログで「SOA層」ノードを開き、「トランスフォーメーション」カテゴリを選択します。

3. 「項目」リストで、「ドメイン値マップ(DVM)」を選択し、「OK」をクリックします。
「ドメイン値マップ(DVM)・ファイルの作成」ダイアログが表示されます。

4. 「ファイル名」フィールドに、multivalue.dvmと入力します。

5. 「ドメイン名」フィールドに、Longname、Shortname、LanguageおよびCapitalを入力します。

6. Longnameドメインに対応する「ドメイン値」フィールドに、Karnatakaと入力します。

7. Shortnameドメインに対応する「ドメイン値」フィールドに、KAと入力します。

8. Languageドメインに対応する「ドメイン値」フィールドに、Kannadaと入力します。

9. Capitalドメインに対応する「ドメイン値」フィールドに、Bangaloreと入力します。

10. 「OK」をクリックします。
ドメイン値マップ・エディタが表示されます。

11. 「追加」をクリックし、次に「行の追加」を選択します。
この手順を繰り返し、さらに2行追加します。

12. ドメイン値マップ表に新たに追加した行に、表47-7に示す情報を入力します。

表47-7 ドメイン値マップ表の各行の情報

Longname

Shortname

Language

Capital

Karnataka

KA

Kannada

Bangalore

Tamilnadu

TN

Tamil

Chennai

Andhrapradesh

AP

Telugu

Hyderbad

Kerala

KL

Malayalam

Trivandram

図47-20に示すように、ドメイン値マップ・エディタが表示されます。

図47-20 Multivalueのドメイン値マップ

「図47-20 Multivalueのドメイン値マップ」の説明

13. 「ファイル」メニューから「すべて保存」を選択して、ドメイン値マップ・エディタを閉じます。

47.6.1.3 タスク3: ファイル・アダプタ・サービスの作成方法

ドメイン値マップを作成した後は、ディレクトリからXMLファイルを読み取るreadFileという名前のファイル・アダプタ・サービスを作成します。

注意:

メディエータは、Oracle RACの計画的停止に対して実行する際、同じファイルを2回処理する可能性があります。これは、ファイル・アダプタがXAに準拠していないアダプタであるためです。したがって、グローバル・トランザクションに組み入れると、各ファイルを1回のみ処理するXAインタフェース仕様に逸脱する可能性があります。

ファイル・アダプタ・サービスを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「SOA」を選択します。

2. 「ファイル・アダプタ」を選択し、「公開されたサービス」スイムレーンにドラッグします。

3. アダプタ構成ウィザードの「ようこそ」ページが開いた場合は、「次へ」をクリックします。
「サービス名」ページが表示されます。

4. 「サービス名」フィールドにreadFileと入力し、「次へ」をクリックします。
「アダプタ・インタフェース」ページが表示されます。

5. 「操作およびスキーマから定義(後で指定)」をクリックし、「次へ」をクリックします。
「操作」ページが表示されます。

6. 「操作タイプ」フィールドで「Read File」を選択し、「次へ」をクリックします。
「ファイル・ディレクトリ」ページが表示されます。

7. 「着信ファイル用のディレクトリ(物理パス)」フィールドに、ファイルの読取り先のディレクトリを入力します。

8. 「次へ」をクリックします。
「ファイルのフィルタ処理」ページが表示されます。

9. 「インクルード・ファイルの名前パターン」フィールドに*.xmlと入力し、「次へ」をクリックします。
「ファイル・ポーリング」ページが表示されます。

10. 「ポーリング頻度」フィールドの値を1秒に変更し、「次へ」をクリックします。
「メッセージ」ページが表示されます。

11. 「検索」をクリックします。
「タイプ・チューザ」ダイアログが表示されます。

12. 「スキーマ・ファイルのインポート」をクリックします。
「スキーマ・ファイルのインポート」ダイアログが表示されます。

13. 「検索」をクリックして、Samplesフォルダに存在するinput.xsdファイルを選択します。

14. 「OK」をクリックします。

15. 「タイプ・エクスプローラ」→「インポートしたスキーマ」→「input.xsd」の順にナビゲーション・ツリーを開きます。

16. 「Root-Element」を選択して、「OK」をクリックします。

17. 「次へ」をクリックします。
「終了」ページが表示されます。

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

19. 「ファイル」メニューから「すべて保存」を選択します。
図47-21に、SOAコンポジット・エディタのreadFileサービスを示します。

図47-21 SOAコンポジット・エディタのreadFileサービス

「図47-21 SOAコンポジット・エディタのreadFileサービス」の説明

47.6.1.4 タスク4: LookupMultiplevaluesMediatorメディエータの作成方法

LookupMultiplevaluesMediatorメディエータを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「メディエータ」アイコンをドラッグし、SOAコンポジット・エディタの「コンポーネント」セクションにドロップします。
「メディエータの作成」ダイアログが表示されます。

2. 「名前」フィールドに、LookupMultiplevaluesMediatorと入力します。

3. 「テンプレート」リストから、「インタフェースを後で定義」を選択します。

4. 「OK」をクリックします。
LookupMultiplevaluesMediatorという名前のOracle Mediatorが作成されます。

5. 図47-22に示すように、SOAコンポジット・エディタで、「readFile」サービスと「LookupMultiplevaluesMediator」Oracle Mediatorを接続します。
この操作により、ファイルを入力ディレクトリから読み込む間に、LookupMultiplevaluesMediator Oracle Mediatorを起動するファイル・アダプタ・サービスが指定されます。

図47-22 readFileサービスからLookupMultiplevaluesMediatorメディエータへの接続

「図47-22 readFileサービスからLookupMultiplevaluesMediatorメディエータへの接続」の説明

6. 「ファイル」メニューから「すべて保存」を選択します。

47.6.1.5 タスク5: ファイル・アダプタ参照の作成方法

ファイル・アダプタ参照を作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「SOA」を選択します。

2. 「ファイル・アダプタ」を選択し、「外部参照」スイムレーンにドラッグします。
「アダプタ構成ウィザード」の「ようこそ」ページが表示されます。

3. 「次へ」をクリックします。
「サービス名」ページが表示されます。

4. 「サービス名」フィールドにwriteFileと入力し、「次へ」をクリックします。
「アダプタ・インタフェース」ページが表示されます。

5. 「操作およびスキーマから定義(後で指定)」をクリックし、「次へ」をクリックします。
「操作」ページが表示されます。

6. 「次へ」をクリックします。
「操作」ページが表示されます。

7. 「操作タイプ」フィールドで、「Write File」を選択します。

8. 「次へ」をクリックします。
「ファイル構成」ページが表示されます。

9. 「発信ファイルのディレクトリ(物理パス)」フィールドに、ファイルを書き込むディレクトリの名前を入力します。

10. 「ファイル・ネーミング規則」フィールドにmultivalue_%SEQ%.xmlと入力して、「次へ」をクリックします。
「メッセージ」ページが表示されます。

11. 「検索」をクリックします。
「タイプ・チューザ」ダイアログが表示されます。

12. 「タイプ・エクスプローラ」→「プロジェクトのスキーマ・ファイル」→「output.xsd」の順に移動し、「Root-Element」を選択します。

13. 「OK」をクリックします。

14. 「次へ」をクリックします。
「終了」ページが表示されます。

15. 「終了」をクリックします。
図47-23に、SOAコンポジット・エディタのwriteFile参照を示します。

図47-23 SOAコンポジット・エディタのwriteFile参照

「図47-23 SOAコンポジット・エディタのwriteFile参照」の説明

16. 「ファイル」メニューから「すべて保存」を選択します。

47.6.1.6 タスク6: ルーティング・ルールの指定方法

メッセージが経由するreadFileアダプタ・サービスから外部参照へのパスを指定する必要があります。

ルーティング・ルールを指定する手順は、次のとおりです。

1. 図47-24に示すように、「LookupMultiplevaluesMediator」メディエータを「writeFile」参照に接続します。

図47-24 LookupMultiplevaluesMediatorメディエータからwriteFile参照への接続

「図47-24 LookupMultiplevaluesMediatorメディエータからwriteFile参照への接続」の説明

2. 「LookupMultiplevaluesMediator」メディエータをダブルクリックします。

3. 「次を使用して変換」フィールドの右側にあるアイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

4. 「新規マッパー・ファイルの作成」を選択し、「OK」をクリックします。
XSLTマッパーに、「Input_To_Output_with_multiple_values_lookup.xsl」ファイルが表示されます。

5. 「imp1:Root-Element」ソース要素を「ns2:Root-Element」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。

6. 「自動マップ中」オプション・リストから、「祖先名を考慮した要素の一致」の選択を解除します。

7. 「OK」をクリックします。
図47-25に示すように、XSLTマッパーに「Input_To_Output_with_multiple_values_lookup.xsl」ファイルが表示されます。

図47-25 imp1:Root-Elementからns2:Root-Elementへのトランスフォーメーション

「図47-25 imp1:Root-Elementからns2:Root-Elementへのトランスフォーメーション」の説明

8. 「コンポーネント・パレット」で、「拡張」を選択します。

9. 「DVM Functions」をクリックします。

10. 図47-26に示すように、lookupValue1Mを中央のパネルにドラッグ・アンド・ドロップします。

図47-26 imp1:Root-Elementからns2:Root-ElementへのlookupValue関数の追加

「図47-26 imp1:Root-Elementからns2:Root-ElementへのlookupValue関数の追加」の説明

11. 「lookupvalue1M」アイコンをダブルクリックします。
「関数の編集 - lookupValue1M」ダイアログが表示されます。

12. 「dvmLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。

13. 「multivalue.dvm」を選択して、「OK」をクリックします。

14. 「sourceColumnName」フィールドの右側にある「検索」をクリックします。
DVM列の選択ダイアログが表示されます。

15. 「Longname」を選択して、「OK」をクリックします。

16. 「sourceValue」列に、次の値を入力します。
/imp1:Root-Element/imp1:Details/imp1:Longname

17. 「targetColumnName」フィールドの右側にある「検索」をクリックします。
DVM列の選択ダイアログが表示されます。

18. 「Shortname」を選択して、「OK」をクリックします。

19. 「追加」をクリックします。
「targetColumnName」行が追加されます。

20. 「targetColumnName」フィールドに、"Language"と入力します。

21. 「追加」をクリックして、別の「targetColumnName」行を挿入します。

22. 「targetColumnName」フィールドに、"Capital"と入力します。
図47-27に示すように、「関数の編集 - lookupValue」ダイアログが表示されます。

図47-27 「関数の編集 - lookupValue関数」ダイアログ: 複数の値ルックアップ・ユースケース

「図47-27 「関数の編集 - lookupValue関数」ダイアログ: 複数の値ルックアップ・ユースケース」の説明

23. 「OK」をクリックします。
図47-28に示すように、トランスフォーメーションが表示されます。

図47-28 imp1:Root-Elementからns2:Root-Elementへのトランスフォーメーションの完了

「図47-28 imp1:Root-Elementからns2:Root-Elementへのトランスフォーメーションの完了」の説明

24. 「ファイル」メニューから「すべて保存」を選択して、「Input_To_Output_with_multiple_values_lookup.xsl」ファイルを閉じます。

47.6.1.7 タスク7: アプリケーション・サーバー接続の構成方法

SOAコンポジット・アプリケーションをデプロイするには、アプリケーション・サーバー接続が必要です。アプリケーション・サーバー接続の作成方法の詳細は、第43.7.1.1項「アプリケーション・サーバー接続の作成」を参照してください。

47.6.1.8 タスク8: コンポジット・アプリケーションのデプロイ方法

次の手順で、Multivalueコンポジット・アプリケーションをアプリケーション・サーバーにデプロイします。

- アプリケーション・デプロイメント・プロファイルの作成

- アプリケーション・サーバーへのアプリケーションのデプロイ

これらの手順の詳細は、第43.7.1項「Oracle JDeveloperでの単一のSOAコンポジットのデプロイ方法」を参照してください。

47.6.2 Multivalueアプリケーションの実行方法と監視方法

デプロイしたMultivalueアプリケーションは、入力XMLファイルであるsampleinput.xmlを入力フォルダにコピーすることで実行できます。このファイルはsamplesフォルダにあります。正常終了した場合、multivalue_1.xmlという名前のファイルが、指定された出力ディレクトリに作成されます。

実行中のインスタンスの監視には、次のURLにあるOracle Enterprise Manager Fusion Middleware Controlを使用できます。

http://hostname:port/em

ここで、hostnameは、Oracle SOA Suiteインフラストラクチャをインストールしたホストです。

Oracle Enterprise Manager Fusion Middleware ControlでMultivalueをクリックすると、プロジェクト・ダッシュボードが表示されます。

詳細な実行証跡を表示するには、インスタンス列のインスタンスIDをクリックします。「フローのトレース」ページが表示されます。

48 ドメイン値マップでのOracle SOAコンポーザの使用

この章では、Oracle SOAコンポーザを使用して実行時にOracle SOA Suiteプロジェクトのドメイン値マップを変更する方法について説明します。ドメイン値マップを使用すると、特定のドメインで使用されているある用語を、異なるドメインで使用されている別の用語にマップできます。

以前のリリースでは、実行時のドメイン値マップを編集するには、最初にOracle JDeveloperで変更を加えた後に、そのドメイン値マップをアプリケーション・サーバーに再デプロイする必要がありました。現在は、Oracle SOAコンポーザによって、実行時のドメイン値マップを編集するためのサポートが提供されています。

この章には次の項が含まれます:

- 第48.1項「Oracle SOAコンポーザの概要」

- 第48.2項「実行時のドメイン値マップの表示」

- 第48.3項「実行時のドメイン値マップの編集」

- 第48.4項「実行時のドメイン値マップの保存」

- 第48.5項「実行時の変更内容のコミット」

- 第48.6項「競合の検出」

ドメイン値マップの詳細は、第47章「ドメイン値マップの使用」を参照してください。

48.1 Oracle SOAコンポーザの概要

Oracle SOAコンポーザは、Oracle SOA Suiteインストールの一部としてインストールされるEARファイルです。Oracle SOAコンポーザを使用すると、ドメイン値マップを使用するプロジェクトを再デプロイすることなく、実行時にデプロイされたドメイン値マップを管理できます。ドメイン値マップのメタデータは、1つのSOAコンポジット・アプリケーションに関連付けたり、複数のコンポジット・アプリケーション間で共有することもできます。図48-1は、Oracle SOAコンポーザによってMDS(メタデータ・サービス)リポジトリからドメイン値マップへのアクセスが可能になる様子を示しています。

図48-1 Oracle SOAコンポーザの高レベルなデプロイメント・トポロジ

「図48-1 Oracle SOAコンポーザの高レベルなデプロイメント・トポロジ」の説明

48.1.1 Oracle SOAコンポーザへのログイン方法

Oracle SOAコンポーザにログインする手順は、次のとおりです。

1. Webブラウザに次のURLを入力します。

http://hostname:port/soa/composer

図48-2に示すように、Oracle SOAコンポーザのログイン・ページが表示されます。

図48-2 Oracle SOAコンポーザのログイン・ページ

「図48-2 Oracle SOAコンポーザのログイン・ページ」の説明

2. 「ユーザー名」フィールドに、ユーザー名を入力します。

3. 「パスワード」フィールドに、パスワードを入力します。

4. 「ログイン」をクリックします。

Oracle SOAコンポーザにログインすると、図48-3に示すように、Oracle SOAコンポーザのホームページが表示されます。

図48-3 Oracle SOAコンポーザのホームページ

「図48-3 Oracle SOAコンポーザのホーム・ページ」の説明

SOAコンポーザのメタデータにアクセスするには、SOADesignerアプリケーション・ロールが必要です。このロールは、デフォルトで、Oracle Enterprise Manager Fusion Middleware Controlの管理者権限があるすべてのユーザーに付与されます。このロールが付与されていないユーザーがOracle SOAコンポーザにログインすると、次のメッセージが表示されます。

Currently logged in user is not authorized to modify SOA metadata.

管理者権限のないユーザーに対するSOADesignerアプリケーション・ロールの追加の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

48.2 実行時のドメイン値マップの表示

実行時のドメイン値マップを表示できます。ドメイン値マップを開いて表示するには、次の手順を実行します。

48.2.1 実行時のドメイン値マップの表示方法

実行時のドメイン値マップを表示する手順は、次のとおりです。

1. 「開く」メニューから「DVMを開く」を選択します。
図48-4に示すように、「開くDVMの選択」ダイアログが表示されます。

図48-4 「開くDVMの選択」ダイアログ

「図48-4 「開くDVMの選択」ダイアログ」の説明

最近開いたドキュメントを表示する「ユーザー編集」オプションから、ドキュメントを選択することもできます。

注意:

また、「コンポジットの検索」フィールドに、ドメイン値マップが含まれているコンポジット・アプリケーションの名前を入力して、このフィールドの右側にある「検索」をクリックし、ドメイン値マップを検索できます。

2. ドメイン値マップを選択して「開く」を選択するか、単にドメイン値マップをダブルクリックして開きます。
選択したドメイン値マップがビュー・モードで開きます。

選択したドメイン値マップへの直接リンクを取得するには、「ブックマーク可能なリンク」をクリックします。選択したドメイン値マップの詳細を取得するには、「情報」ボタンを使用します。

48.3 実行時のドメイン値マップの編集

ドメイン値マップを使用するアプリケーションの実行中に、ドメイン値マップを編集できます。

48.3.1 実行時のドメイン値マップの編集方法

デフォルトでは、ドメイン値マップはビュー・モードで開きます。編集モードに変更すると、行の情報を変更できるようになります。変更が終了したら、第48.4.1項「実行時のドメイン値マップの保存方法」および第48.5.1項「実行時の変更内容のコミット方法」の説明に従って、変更内容を保存してコミットしてください。

48.3.1.1 編集モードへの変更

編集モードに変更する手順は、次のとおりです。

1. 第48.2.1項「実行時のドメイン値マップの表示方法」の説明に従って、表示するドメイン値マップを開きます。

2. 「SOAコンポーザ」メニューで、「編集」をクリックします。
ドメイン値マップが編集モードで開きます。

48.3.1.2 行の追加

行を追加するには:

行を追加する手順は、次のとおりです。

1. 「ドメイン値の追加」をクリックします。
「ドメイン値の追加」ダイアログが表示されます。

2. 値を入力し、「OK」をクリックします。
入力した値がドメイン値マップに追加されます。

48.3.1.3 行の編集

行を編集するには:

行を編集する手順は、次のとおりです。

1. 編集する行を選択します。

2. 「ドメイン値の編集」をクリックします。
「ドメイン値の編集」ダイアログが表示されます。

3. 必要に応じて値を編集し、「OK」をクリックします。

48.3.1.4 行の削除

行を削除するには:

行を削除する手順は、次のとおりです。

1. 削除する行を選択します。

2. 「ドメイン値の削除」をクリックします。

48.4 実行時のドメイン値マップの保存

編集セッションでドメイン値マップを開くたびに、各ユーザーのドメイン値マップごとにサンドボックスが1つ作成されます。変更内容を保存すると、そのサンドボックスに変更内容が保存されます。

48.4.1 実行時のドメイン値マップの保存方法

実行時のドメイン値マップを保存する手順は、次のとおりです。

1. 「保存」メニュー項目をクリックして変更内容を保存します。変更内容が正常に保存されると、通知メッセージが表示されます。
ドメイン値マップを最後に保存した状態に戻すこともできます。

2. 「元に戻す」メニュー項目をクリックします。確認ダイアログが表示されます。

3. 「はい」をクリックして変更内容を元に戻します。

48.5 実行時の変更内容のコミット

ドメイン値マップを保存し、ランタイムに反映してMDSリポジトリに永続的に保存するには、変更内容をコミットする必要があります。セッションでは、変更内容をコミットせずに保存することもできます。その場合、ドメイン値マップは保存済の状態のままです。後でドメイン値マップを再度開いて変更内容をコミットできます。

48.5.1 実行時の変更内容のコミット方法

実行時の変更内容をコミットする手順は、次のとおりです。

1. 「コミット」メニュー・オプションをクリックします。確認ダイアログが表示されます。

2. 「はい」をクリックして変更内容をコミットします。

48.6 競合の検出

Oracle SOAコンポーザは、同時ユーザー間で発生する可能性のある競合を検出します。図48-5に示すように、別のユーザーが編集しているドメイン値マップを開くと、警告が表示されます。

図48-5 ドメイン値マップの同時ユーザーに関する「確認」ダイアログ

「図48-5 ドメイン値マップの同時ユーザーに関する「確認」ダイアログ」の説明

ただし、ドメイン値マップの編集を続行する場合は、「はい」をクリックして変更を加えることができます。

他のユーザーがそのドメイン値マップを変更してコミットした場合は、自分の変更内容をコミットしようとすると通知メッセージが表示されます。

「はい」をクリックして変更内容をコミットすると、他のユーザーが加えた変更が上書きされます。

49 相互参照の使用

この章では、Oracle SOA Suiteの相互参照機能を使用して、別のアプリケーションで作成された同等のエンティティの識別子を関連付ける方法を説明します。これには相互参照表のエントリの移入、表示および保守に使用できるXRef関数が含まれます。

この章には次の項が含まれます:

- 第49.1項「相互参照の概要」

- 第49.2項「相互参照表の概要」

- 第49.4項「相互参照表の作成および変更」

- 第49.5項「相互参照表の移入」

- 第49.6項「相互参照表の参照」

- 第49.7項「相互参照表の値の削除」

- 第49.8項「相互参照ユースケースの作成および実行」

- 第49.9項「1M関数の相互参照の作成および実行」

49.1 相互参照の概要

相互参照を使用すると、別のアプリケーションで作成された同等のエンティティの値を動的にマップできます。

注意:

相互参照機能ではアプリケーション間の値を動的に統合できるのに対し、ドメイン値マップでは設計時に値を指定して実行時に値を編集できます。ドメイン値マップの詳細は、第47章「ドメイン値マップの使用」および第48章「ドメイン値マップでのOracle SOAコンポーザの使用」を参照してください。

あるアプリケーションでオブジェクトを作成または更新した場合は、その変更内容を別のアプリケーションにも伝播させる必要があります。たとえば、SAPアプリケーションで新規顧客が作成された場合、同じ顧客に関するエントリをOracle E-Business Suiteアプリケーション(EBS)でも作成する場合があります。ただし、統合対象の各アプリケーションでは、同じ情報の表現に異なるエンティティを使用している可能性があります。たとえば、SAPアプリケーションでの新規顧客の場合、CustomerデータベースにはSAP_001などの一意IDとともに新規の1行が挿入されます。この情報がOracle E-Business SuiteアプリケーションとSiebelアプリケーションに伝播するときには、EBS_1001やSBL001などの異なるIDとともに新規の1行が挿入される必要があります。このような場合、異なるアプリケーションで同一エンティティを参照するIDとして解釈できるように、各IDを相互にマップするなんらかの機能が必要になります。相互参照を使用すると、このマッピングを実行できます。

49.2 相互参照表の概要

相互参照は表形式で保存されます。表49-1に、様々なアプリケーションの顧客IDに関する情報を含む相互参照表を示します。

表49-1 相互参照表サンプル

SAP

EBS

SBL

SAP_001

EBS_1001

SBL001

SAP_002

EBS_1002

SBL002

あるアプリケーションで顧客情報が更新され、変更内容を他のアプリケーションに伝播させる必要がある場合にも、IDマッピングが必要になります。異なるIDを統合するには、相互参照表の全IDにマップする共通値統合パターンを使用する方法があります。たとえば、表49-1の相互参照表に、さらにCommonという1列を追加できます。相互参照表を更新すると、表49-2のように表示されます。

表49-2 Common列が追加された相互参照表

SAP

EBS

SBL

Common

SAP_001

EBS_1001

SBL001

CM001

SAP_002

EBS_1002

SBL002

CM002

図49-1に、共通値統合パターンを使用して様々なアプリケーションのIDをマップする方法を示します。

図49-1 共通値統合パターンの例

「図49-1 共通値統合パターンの例」の説明

相互参照表は、メタデータと実際のデータという2つの部分で構成されています。メタデータはOracle JDeveloperで作成された.xrefファイルとして保存され、XMLファイルとしてメタデータ・サービス(MDS)リポジトリに格納されています。実際のデータは、デフォルトでSOAインフラストラクチャ・データベース・スキーマにあるデータベースのXREF_DATA表に格納されます。相互参照エンティティごとにカスタム・データベース表を生成することもできます。データベース表は、相互参照エンティティのメタデータによって異なります。

次の2つの相互参照エンティティを考えてみます。

- SIEBEL、COMMONおよびEBSの相互参照列があるORDER(表49-3を参照)

- EBS、COMMONおよびPORTALの相互参照列があるCUSTOMER(表49-4を参照)

表49-3 ORDER表

列名

SIEBEL

COMMON

EBS

Column Value

SBL_101

COM_100

EBS_002

Column Value

COM_110

EBS_012

表49-4 CUSTOMER表

列名

EBS

COMMON

PORTAL

Column Value

EBS_201

COM_200

P2002

1つの汎用表にすべてのランタイム・データを保存するように選択すると、表49-5に示すように、データはXREF_DATAコード表に保存されます。

表49-5 XREF_DATA表

XREF_TABLE_NAME

XREF_COLUMN_NAME

ROW_NUMBER

VALUE

IS_DELETED

ORDER

SIEBEL

100012345

SBL_101

N

ORDER

COMMON

100012345

COM_100

N

ORDER

EBS

100012345

EBS_002

N

ORDER

COMMON

110012345

COM_110

N

ORDER

EBS

110012345

EBS_012

N

CUSTOMER

EBS

200212345

EBS_201

N

CUSTOMER

COMMON

200212345

COM_200

N

CUSTOMER

PORTAL

200212345

P2002

N

このアプローチには、次のメリットがあります。

- 相互参照エンティティの列を追加、削除および変更するプロセスが単純です。

- アプリケーションに対して相互参照エンティティを作成および削除するプロセスが明快です。

一方、このアプローチには次のデメリットがあります。

- 各相互参照セルはデータベースの異なる行にマップされるため、データベースに多数の行が生成されます。そのため、問合せのパフォーマンスが低下します。

- 汎用表では、XREF_TABLE_NAME列およびXREF_COLUMN_NAME列のデータが多数の行で繰り返されます。

これらの問題を解決するために、相互参照エンティティごとにカスタム・データベース表を生成できます。カスタム・データベース表は、相互参照エンティティのメタデータによって異なります。たとえば、XREF_ORDER表およびXREF_CUSTOMER表には、表49-6および表49-7に示すようなカスタム・データベース表を生成できます。

表49-6 XREF_ORDER表

ROW_ID

SIEBEL

COMMON

EBS

100012345

SBL_101

COM_100

EBS_002

110012345

COM_110

EBS_012

表49-7 XREF_CUSTOMER表

ROW_ID

EBS

COMMON

PORTAL

200212345

EBS_201

COM_200

P2002

このアプローチでは、データ定義言語(DDL)スクリプトを実行してカスタム・データベース表を生成する必要があります。カスタム・データベース表の詳細は、第49.4.3項「カスタム・データベース表の作成方法」を参照してください。

49.3 相互参照に対するOracle Data Integratorのサポート

Oracle Data Integrator(ODI)はE-LT(抽出、ロード、変換)モデルを使用してデータ統合を実現します。ODIを使用して、相互参照のニーズに役立てることができます。ODIには、次の機能を実行するSOA相互参照を処理するための3つのナレッジ・モジュールが用意されています。相互参照表の移入、ターゲット表の共通IDの作成、相互参照表への共通IDおよびソース主キーのプッシュ、およびソース主キーと共通ID間の相互参照を作成する一意の行番号の作成とプッシュ。モジュールを使用して、複数のソース表からターゲット表へのロードと、ソースの1つとターゲットとの間の相互参照の処理の両方を行う統合インタフェースを作成できます。

ODIおよび相互参照の詳細は、『Oracle Fusion Middleware Oracle Data Integrator接続およびナレッジ・モジュール・ガイド』のOracle SOA Suiteの相互参照に関する項を参照してください。

49.4 相互参照表の作成および変更

相互参照表はSOAコンポジット・アプリケーションで作成し、トランスフォーメーション中にBPELプロセス・サービス・コンポーネントまたはOracle Mediatorサービス・コンポーネントで使用できます。

49.4.1 相互参照メタデータの作成方法

相互参照メタデータを作成する手順は、次のとおりです。

1. Oracle JDeveloperで、相互参照を作成するSOAプロジェクトを選択します。

2. プロジェクトを右クリックし、「新規」を選択します。
「新規ギャラリ」ダイアログが表示されます。

3. 「カテゴリ」セクションから「SOA層」を選択し、次に「トランスフォーメーション」を選択します。

4. 「項目」セクションから、「相互参照(XREF)」を選択します。

5. 「OK」をクリックします。
「相互参照(XREF)の作成」ダイアログが表示されます。

6. 「ファイル名」フィールドに、相互参照ファイルの名前を指定します。たとえば、Customerを指定します。
相互参照名は相互参照表を一意に識別するために使用します。相互参照リポジトリで2つの相互参照表に同じ名前を指定することはできません。相互参照ファイル名は、相互参照表の名前に拡張子.xrefが付いたものとなります。

7. 「説明」フィールドに、相互参照の説明を入力します。例:

Cross reference of Customer identifiers.

8. 「エンド・システム」フィールドで、エンド・システム名を入力します。
エンド・システムを相互参照表の相互参照列にマップします。たとえば、最初のエンド・システム名をSAP、2番目のエンド・システム名をEBSに変更できます。各エンド・システム名は相互参照内で一意であることが必要です。

「相互参照(XREF)の作成」ダイアログのサンプルは、図49-2に表示されています。

図49-2 「相互参照(XREF)の作成」ダイアログ

「図49-2 「相互参照(XREF)の作成」ダイアログ」の説明

9. 「OK」をクリックします。
図49-3に示すように、相互参照エディタが表示されます。このエディタを使用して相互参照を変更できます。

図49-3 相互参照エディタ

「図49-3 相互参照エディタ」の説明

49.4.2 相互参照作成時の処理内容

拡張子.xrefの付いたファイルが作成され、「アプリケーション・ナビゲータ」に表示されます。すべての.xrefファイルは、例49-1に示すスキーマ定義(XSD)ファイルに基づいています。

例49-1 相互参照XSDファイル

<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xmlns.oracle.com/xref"
xmlns:tns="http://xmlns.oracle.com/xref" elementFormDefault="qualified">
<element name="xref" type="tns:xrefType"/>
<complexType name="xrefType">
<sequence>
<element name="table">
<complexType>
<sequence>
<element name="description" type="string" minOccurs="0"
maxOccurs="1"/>
<element name="columns" type="tns:columnsType" minOccurs="0"
maxOccurs="1"/>
<element name="rows" type="tns:rowsType" maxOccurs="1"
minOccurs="0"/>
</sequence>
<attribute name="name" type="string" use="required"/>
</complexType>
</element>
</sequence>
</complexType>

<complexType name="columnsType">
<sequence>
<element name="column" minOccurs="1" maxOccurs="unbounded">
<complexType>
<attribute name="name" type="string" use="required"/>
</complexType>
</element>
</sequence>
</complexType>

<complexType name="rowsType">
<sequence>
<element name="row" minOccurs="1" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="cell" minOccurs="1" maxOccurs="unbounded">
<complexType>
<attribute name="colName" type="string" use="required"/>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</schema>

49.4.3 カスタム・データベース表の作成方法

前述されているように、すべてのランタイム・データはデフォルトでXREF_DATA表に格納されます。カスタム・データベース表を作成する場合は、次の手順を実行します。

カスタム・データベース表を作成する手順は、次のとおりです。

1. 相互参照エディタの「最適化」リストで「はい」を選択します。
図49-4に示すように、生成するカスタム・データベース表の名前が「表名」フィールドに表示されます。

図49-4 カスタム・データベース表の生成

「図49-4 カスタム・データベース表の生成」の説明

「表名」フィールドは編集可能で、カスタム表の名前を変更できます。カスタム・データベース表の名前には、xref_の接頭辞を付けてください。表名にxref_接頭辞を付けないと、表を生成する際に次のエラー・メッセージが表示されます。

Table name should begin with 'xref_' and cannot be 'xref_data' or
'xref_deleted_data' which are reserved table names for XREF runtime.

2. 「表DDLの生成」をクリックします。「XREFの最適化」ダイアログが表示されます。

3. 同じ名前の表がすでに存在している場合、その表と関連する索引を削除するには、「削除DDLの生成」チェック・ボックスを選択します。このオプションを選択して「実行」をクリックすると、「削除DDLの実行の警告」ダイアログに、次のメッセージが表示されます。

Running the Drop DDL will remove the table and indexes, do you want to
continue?

4. 「実行」をクリックします。「表DDLの実行」ダイアログが表示されます。

5. 「接続」リストから、使用するデータベース接続を選択します。
使用可能な接続がない場合は、「新規データベース接続を作成します。」をクリックし、図49-5に示すように、「データベース接続の作成」ダイアログを開きます。既存の接続を編集する場合は、その接続を選択して「選択したデータベース接続の編集」をクリックし、「データベース接続の編集」ダイアログを開きます。

図49-5 「データベース接続の作成」ダイアログ

「図49-5 「データベース接続の作成」ダイアログ」の説明

6. 必要な詳細をすべて入力し、「OK」をクリックします。「表DDLの実行」ダイアログの「接続」リストに値が移入されます。

注意:

データベース表は、データベースのsoainfraスキーマに作成します。

7. 「表DDLの実行」ダイアログで「OK」をクリックし、DDLスクリプトを実行します。
「表DDL実行結果」ダイアログに、DDLスクリプトの実行ステータスが表示されます。

カスタム・データベース表では、modeおよびdbtableの2つの追加の属性が、第49.4.2項「相互参照作成時の処理内容」に記載されているスキーマ定義に追加されます。これらは、次のように記述されてtable要素に追加されます。

<attribute name="mode" type="string" default="generic" />
<attribute name="dbtable" type="string" default="xref_data"/>

49.4.4 相互参照表へのエンド・システムの追加方法

相互参照表にエンド・システムを追加する手順は、次のとおりです。

1. 「追加」をクリックします。
新しい行が追加されます。

2. 新しく追加した行をダブルクリックします。

3. エンド・システム名を入力します。たとえば、SBLと入力します。

49.5 相互参照表の移入

Oracle JDeveloperのSOAコンポジット・アプリケーションで相互参照表を作成し、これを使用して実行時に列の値を参照できます。ただし、相互参照を使用して特定の値を参照するには、実行時に相互参照を移入する必要があります。相互参照表は、相互参照XPath関数を使用して移入できます。XPath関数を使用すると、相互参照列の移入、参照の実行および列の値の削除ができます。これらのXPath関数を「式ビルダー」ダイアログで使用して式を作成するか、またはXSLTマッパーで使用してトランスフォーメーションを作成できます。たとえば、xref:populateXRefRow関数を使用して1つの値を相互参照列に移入するか、またはxref:populateXRefRow1M関数を使用して複数の値を相互参照列に移入できます。

「式ビルダー」ダイアログには、BPELプロセス・サービス・コンポーネントまたはOracle Mediatorサービス・コンポーネントのassignアクティビティ、XSLトランスフォーメーションまたはフィルタ機能からアクセスできます。図49-6に、「式ビルダー」ダイアログで相互参照関数を選択する様子を示します。

図49-6 「式ビルダー」ダイアログに相互参照関数が表示されている状態

「図49-6 「式ビルダー」ダイアログに相互参照関数が表示されている状態」の説明

XSLTマッパーは、XSLファイルを作成してXMLスキーマ間でデータを変換するときに表示されます。図49-7に、XSLTマッパーで相互参照関数を選択する様子を示します。

図49-7 XSLTマッパー・ダイアログに相互参照関数が表示されている状態

「図49-7 XSLTマッパー・ダイアログに相互参照関数が表示されている状態」の説明

相互参照表を使用するには、実行時に相互参照表を移入する必要があります。データは、デフォルトでSOAインフラストラクチャ・データベース・スキーマにあるXREF_DATA表に格納されます。xref:populateXRefRow関数を使用して1つの値を相互参照列に移入するか、またはxref:populateXRefRow1M関数を使用して複数の値を相互参照列に移入できます。

注意:

次の方法でデータ・ソースを構成することで、データを異なるデータベース・スキーマに格納することもできます。

- データ・ソースのJNDI名をjdbc/xrefと指定します。

- ORACLE_HOME/rcu/integration/soainfra/sql/xref/createschema_xref_oracle.sqlファイルをロードして、このデータ・ソースのXREF_DATA表を作成します。

49.5.1 xref:populateXRefRow関数

xref:populateXRefRow関数では、1つの値が相互参照列に移入されます。このxref:populateXRefRow関数では、移入対象の相互参照値である文字列値が返されます。たとえば、表49-8に示すOrder表には、EBS、CommonおよびSBLという列があり、各列の値はそれぞれE100、100およびSBL_001です。

表49-8 列に1つの値がある相互参照表

EBS

Common

SBL

E100

100

SBL_001

注意:

この関数の使用時に同時性の問題がある場合は、populateLookupXRefRow関数を使用することもできます。populateLookupXRefRow関数は、同時更新が行われ、一意制約の違反が発生する場合にのみ使用する必要があります。この関数については、第49.5.2項「xref:populateLookupXRefRow関数」で説明しています。

例49-2に、xref:populateXRefRow関数の構文を示します。

例49-2 xref:populateXRefRow関数

xref:populateXRefRow(xrefLocation as string, xrefReferenceColumnName as string,
xrefReferenceValue as string, xrefColumnName as string, xrefValue as string, mode
as string) as string

パラメータ

- xrefLocation: 相互参照表URI。

- xrefReferenceColumnName: 参照列の名前。

- xrefReferenceValue: 参照列名に対応する値。

- xrefColumnName: 移入される列の名前。

- xrefValue: 列に移入される値。

- mode: xref:populateXRefRow関数の列移入モード。値ADD、LINKまたはUPDATEを指定できます。表49-9に、これらのモードを示します。

表49-9 xref:populateXRefRow関数のモード

モード

説明

例外の原因

ADD

参照値と追加対象の値を追加します。

たとえば、次のモードを考えてみます。

xref:populateXRefRow("customers.xref"
,"EBS","EBS100", "Common","CM001",
"ADD")

この場合、ESB参照列に参照値EBS100が、Common列に値CM001が追加されます。

次の理由により、例外が発生する可能性があります。

- 指定の相互参照表が見つからない場合。

- 指定の列が見つからない場合。

- 提供された値が空の場合。

- 追加される値が、対象表の対象列で一意でない場合。

- 対象行の列に値が含まれている場合。

- 参照値が存在する場合。

LINK

既存の参照値に対応する相互参照値を追加します。

たとえば、次のモードを考えてみます。

xref:populateXRefRow("customers.xref"
,"Common","CM001","SBL","SBL_
001","LINK")

この場合、Common列の値CM001が、SBL列の値SBL_001にリンクされます。

次の理由により、例外が発生する可能性があります。

- 指定の相互参照表が見つからない場合。

- 指定の列が見つからない場合。

- 提供された値が空の場合。

- 参照値が見つからない場合。

- リンク対象の値が対象表の対象列に存在する場合。

UPDATE

既存の参照列と値のペアに対応する相互参照値を更新します。

たとえば、次のモードを考えてみます。

xref:populateXRefRow("customers.xref"
,"SBL","SBL_001", "SBL","SBL_
1001","UPDATE")

この場合、SBL列の値SBL_001が値SBL_1001に更新されます。

次の理由により、例外が発生する可能性があります。

- 指定の相互参照表が見つからない場合。

- 指定の列が見つからない場合。

- 提供された値が空の場合。

- 更新対象の列に複数の値が見つかった場合。

- 参照値が見つからない場合。

- 対象行の列に値がない場合。

注意:

modeパラメータ値には大/小文字区別があり、表49-9のように大文字のみで指定する必要があります。

表49-10に、xref:populateXRefRow関数のモードと各モードの例外条件を示します。

表49-10 xref:populateXRefRow関数のモードと結果

モード

参照値

追加される値

結果

ADD

なし

あり

あり

なし

なし

あり

成功

例外

例外

LINK

なし

あり

あり

なし

なし

あり

例外

成功

例外

UPDATE

なし

あり

あり

なし

なし

あり

例外

例外

成功

49.5.2 xref:populateLookupXRefRow関数

xref:populateXRefRow関数と同様に、xref:populateLookupXRefRow関数では相互参照列に単一の値が移入されます。xref:populateXRefRow関数とは異なり、xref:populateLookupXRefRow関数では、同じIDのレコードが同時に追加されたときに一意制約の違反エラーはスローされません。かわりに、ルックアップとして動作してエラーの原因となった既存のソース値を返し、処理フローを停止しません。xref:populateXRefRow関数の使用時に発生する可能性がある同時性の問題を解決するには、この関数を使用します。

xref:populateLookupXRefRow関数は文字列値を返します。この文字列値は、移入される相互参照値か、または一意制約の違反がある場合は、最初にコミットされたスレッドによってすでに移入されている相互参照値になります。たとえば、表49-8に示すXREF_CUSTOMER_DATA表には、EBS、CommonおよびSBLという列があります。xref:populateLookupXRefRow関数は、2つのスレッドによって、次の値を使用して並行して起動されます。

- スレッド1: xref: populateLookupXRefRow ("default/xref/example.xref", "EBS", "EBS100", "Common" "CM001", "ADD")

- スレッド2: xref: populateLookupXRefRow ("default/xref/example.xref", "EBS", "EBS100", "Common" "CM002", "ADD")

表49-11に示すように表に移入されます。スレッド1が最初にコミットされるため、スレッド2はコール元に「CM001」を返します。

表49-11 xref:populateLookupXRefRowによって移入される相互参照表

EBS

Common

SBL

EBS100

CM001

表49-3に、xref:populateLookupXRefRow関数の構文を示します。

例49-3 xref:populateLookupXRefRow関数

xref:populateLookupXRefRow(xrefMetadataURI as string, xrefReferenceColumnName as
string, xrefReferenceValue as string, xrefColumnName as string, xrefValue as
string, mode as string) as string

パラメータ

- xrefMetadataURI: 相互参照表URI。

- xrefReferenceColumnName: 参照列の名前。

- xrefReferenceValue: 参照列名に対応する値。

- xrefColumnName: 移入される列の名前。

- xrefValue: 列に移入される値。

- mode: xref:populateXRefRow関数の列移入モード。ADDまたはLINKを指定できます。表49-10に、これらのモードと各モードの例外条件を示します。

注意:

modeパラメータ値には大/小文字区別があり、大文字のみで指定する必要があります。

表49-12 xref:populateLookupXRefRow関数のモードと結果

モード

参照値

追加される値

結果

ADD

なし

あり

あり

なし

なし

あり

成功

例外

例外

LINK

なし

あり

あり

なし

なし

あり

例外

成功

例外

使用に関する注意

- カスタム表の方法を使用する場合は、相互参照表で一意であることが必要な列に対して、主制約を追加する必要があります。表49-11を例として使用すると、SQL文は次のようになります。

alter table xref_customer_data add constraint xref_vnx_data_pk
primary key (common, ebs);

最初に主制約列に移入してから、後続のコールで残りの列に移入します。

- データの非一貫性の問題が隠される可能性があるため、プライマリ・オブジェクトの相互参照を追加するためにこの関数を使用しないでください。主要な依存オブジェクトに対するセカンダリ・オブジェクトにのみこの関数を使用します。たとえば、顧客アカウントを作成する際にアカウントがすでに存在するかどうかを確認するためにこの関数を使用しないでください。これらの顧客アカウントの住所が同期されている場合に使用してください。

49.5.3 xref:populateXRefRow1M関数

あるエンド・システム内の2つの値を、別のシステム内の1つの値に対応付けることができます。このようなシナリオでは、xref:populateXRefRow1M関数を使用して相互参照列に値を移入する必要があります。たとえば、表49-13に示すように、SAP_001およびSAP_0011の値でEBSおよびSBLアプリケーションの1つの値を参照します。SAPなどの列を移入するには、xref:populateXRefRow1M関数を使用できます。

表49-13 列に複数の値がある相互参照表

SAP

EBS

SBL

SAP_001

SAP_0011

EBS_1001

SBL001

SAP_002

EBS_1002

SBL002

例49-4に、xref:populateXRefRow1M関数の構文を示します。

例49-4 xref:populateXRefRow1M関数

xref:populateXRefRow1M(xrefLocation as string, xrefReferenceColumnName as string,
xrefReferenceValue as string, xrefColumnName as string, xrefValue as string, mode
as string) as string

パラメータ

- xrefLocation: 相互参照URI。

- xrefReferenceColumnName: 参照列の名前。

- xrefReferenceValue: 参照列名に対応する値。

- xrefColumnName: 移入される列の名前。

- xrefValue: 列に移入される値。

- mode: xref:populateXRefRow関数の列移入モード。ADDまたはLINKのいずれかの値を指定できます。表49-14に、これらのモードを示します。

表49-14 xref:populateXRefRow1M関数のモード

モード

説明

例外の原因

ADD

参照値と追加対象の値を追加します。

たとえば、次のモードを考えてみます。

xref:populateXRefRow1M("customers.xref","
EBS","EBS_1002", "SAP","SAP_0011","ADD")

この場合、EBS参照列に参照値EBS_1002が、SAP列に値SAP_0011が追加されます。

次の理由により、例外が発生する可能性があります。

- 指定の相互参照表が見つからない場合。

- 指定の列が見つからない場合。

- 提供された値が空の場合。

- 追加される値が、対象表の対象列で一意でない場合。

- 参照値が存在する場合。

LINK

既存の参照値に対応する相互参照値を追加します。

たとえば、次のモードを考えてみます。

xref:populateXRefRow1M("customers.xref","
EBS","EBS_1002", "SAP","SAP_002","LINK")

この場合、SAP列の値SAP_002が、EBS列の値EBS_1002にリンクされます。

次の理由により、例外が発生する可能性があります。

- 指定の相互参照表が見つからない場合。

- 指定の列が見つからない場合。

- 提供された値が空の場合。

- 参照値が見つからない場合。

- 追加される値が、対象表の列で一意でない場合。

表49-15に、xref:populateXRefRow1M関数のモードと各モードの例外条件を示します。

表49-15 xref:populateXRefRow1M関数のモードと結果

モード

参照値

追加される値

結果

ADD

なし

あり

あり

なし

なし

あり

成功

例外

例外

LINK

なし

あり

あり

なし

なし

あり

例外

成功

例外

49.5.4 相互参照表の列の移入方法

相互参照表に1列を移入する手順は、次のとおりです。

1. XSLTマッパーで、「ソース」および「ターゲット」ペインのツリーを開きます。

2. ソース要素をターゲット要素にドラッグ・アンド・ドロップします。

3. 「コンポーネント・パレット」で、「拡張」を選択します。

4. 「XREF Functions」を選択します。

5. ソース・オブジェクトをターゲット・オブジェクトに接続している線に、「populateXRefRow」関数をドラッグ・アンド・ドロップします。
接続線上に「populateXRefRow」アイコンが表示されます。

6. 「populateXRefRow」アイコンをダブルクリックします。
図49-8に示すように、「関数の編集 – populateXRefRow」ダイアログが表示されます。

図49-8 「関数の編集 – populateXRefRow」ダイアログ

「図49-8 「関数の編集 – populateXRefRow」ダイアログ」の説明

7. 「関数の編集 – populateXRefRow」ダイアログの各フィールドで、次の値を指定します。

1. 「xrefLocation」フィールドに、相互参照ファイルのロケーションURIを入力します。
「xrefLocation」フィールドの右側にある「参照」をクリックして、相互参照ファイルを選択します。「リソース・パレット」を使用して、MDSおよびMDSの共有ロケーションからもすでにデプロイした相互参照を選択できます。

2. 「referenceColumnName」フィールドに、相互参照列の名前を入力します。
「referenceColumnName」フィールドの右側にある「参照」をクリックして、以前に選択した相互参照に定義されている列から列名を選択できます。

3. 「referenceValue」フィールドでは、値を手動で入力するか、[Ctrl]キーを押しながら[Space]キーを押してXPathビルディング・アシスタントを起動できます。上へ移動および下へ移動するキーを押して、リスト内のオブジェクトを配置し、[Enter]キーを押してそのオブジェクトを選択します。

4. 「columnName」フィールドに、相互参照列の名前を入力します。
「columnName」フィールドの右側にある「参照」をクリックして、以前に選択した相互参照に定義されている列から列名を選択できます。

5. 「value」フィールドでは、値を手動で入力するか、[Ctrl]キーを押しながら[Space]キーを押してXPathビルディング・アシスタントを起動できます。

6. 「mode」フィールドに、相互参照表の列を移入する際のモードを入力します。たとえば、ADDと入力します。
「参照」をクリックしてモードを選択することもできます。モードを選択できる「移入モードの選択」ダイアログが表示されます。

8. 「OK」をクリックします。
図49-9に、移入後の「関数の編集 – populateXRefRow」ダイアログを示します。

図49-9 移入後の「関数の編集 – populateXRefRow」ダイアログ

「図49-9 移入後の「関数の編集 – populateXRefRow」ダイアログ」の説明

49.6 相互参照表の参照

移入後の相互参照表を使用して、値を参照できます。xref:lookupXRefおよびxref:lookupXRef1M関数を使用すると、1つおよび複数の値の相互参照をそれぞれ参照できます。

49.6.1 xref:lookupXRef関数

xref:lookupXRef関数を使用すると、参照列の値に対応する値を相互参照列で参照できます。たとえば、次の関数では、表49-2で説明した相互参照表のCommon列で、SAP列のSAP_001値に対応する値を参照します。

xref:lookupXRef("customers.xref","SAP","SAP_001","Common",true())

例49-5に、xref:lookupXRef関数の構文を示します。

例49-5 xref:lookupXRef関数

xref:lookupXRef(xrefLocation as string, xrefReferenceColumnName as string,
xrefReferenceValue as string, xrefColumnName as string, needAnException as
boolean) as string

パラメータ

- xrefLocation: 相互参照URI。

- xrefReferenceColumnName: 参照列の名前。

- xrefReferenceValue: 参照列名に対応する値。

- xrefColumnName: 値が参照される列の名前。

- needAnException: 値がtrueに設定されると、値が見つからない場合に例外がスローされます。そうでない場合は、空の値が返されます。

例外の原因

実行時に、次の理由により例外が発生する可能性があります。

- 指定した名前の相互参照表が見つからない場合。

- 指定した列名が見つからない場合。

- 指定した参照値が空の場合。

- 複数の値が見つかった場合。

49.6.2 xref:lookupXRef1M関数

xref:lookupXRef1M関数を使用すると、参照列の値に対応する複数の値を相互参照列で参照できます。xref:lookupXRef1M関数では、複数のノードを含んだノードセットが返されます。ノードセット内の各ノードに値が含まれています。

たとえば、次の関数では、表49-13のSAP列で、EBS列のEBS_1001値に対応する複数の値を参照します。

xref:lookupXRef1M("customers.xref","EBS","EBS_1001","SAP",true())

例49-6に、xref:lookupXRefRow1M関数の構文を示します。

例49-6 xref:lookupXRefRow1M関数

xref:lookupXRef1M(xrefLocation as String, xrefReferenceColumnName as String,
xrefReferenceValue as String, xrefColumnName as String, needAnException as
boolean) as node-set

パラメータ

- xrefLocation: 相互参照URI。

- xrefReferenceColumnName: 参照列の名前。

- xrefReferenceValue: 参照列名に対応する値。

- xrefColumnName: 値が参照される列の名前。

- needAnException: 値がtrueに設定されると、参照値が見つからない場合に例外がスローされます。そうでない場合は、空のノードセットが返されます。

xref:lookupXRefRow1M関数の例

表49-16に示すように、Siebel、Billing1およびBilling2の3つの列があるOrder表について考えてみます。

表49-16 Order表

Siebel

Billing1

Billing2

100

101

102

110

111

112

1対1マッピングの場合、xref:lookupPopulatedColumns("Order","Siebel","100","false")メソッドは、例49-7に示す値を返します。

例49-7 xref:lookupPopulatedColumnsメソッド

<column name="BILLING1">101</column>
<column name="BILLING2">102</column>

この場合は、Billing1とBilling2の両方の列が移入されます。

1対多マッピングの場合、xref:lookupPopulatedColumns("Order","Siebel","110","false")メソッドは、例49-8に示す値を返します。

例49-8 xref:lookupPopulatedColumns

<column name="BILLING2">111</column>
<column name="BILLING2">112</column>

この場合、Billing1列は移入されません。

例外の原因

次の理由により、例外が発生する可能性があります。

- 指定した名前の相互参照表が見つからない場合。

- 指定した列名が見つからない場合。

- 指定した参照値が空の場合。

49.6.3 xref:lookupPopulatedColumns関数

xref:lookupPopulatedColumns関数を使用すると、特定の相互参照表、相互参照列および値に対して移入されたすべての列を参照できます。xref:lookupPopulatedColumns関数では、各ノードに列名と対応する値が含まれたノードセットが返されます。

例49-9に、xref:LookupPopulatedColumns関数の構文を示します。

例49-9 xref:LookupPopulatedColumns関数

xref:LookupPopulatedColumns(xrefTableName as String,xrefColumnName as
String,xrefValue as String,needAnException as boolean)as node-set

パラメータ

- xrefTableName: 参照表の名前。

- xrefColumnName: 参照列の名前。

- xrefValue: 参照列名に対応する値。

- needAnException: 値がtrueに設定されると、参照列に値が見つからない場合に例外がスローされます。そうでない場合は、空のノードセットが返されます。

例外の原因

次の理由により、例外が発生する可能性があります。

- 指定した名前の相互参照表が見つからない場合。

- 指定した列名が見つからない場合。

- 指定した参照値が空の場合。

49.6.4 相互参照表の値の参照方法

相互参照表列を参照する手順は、次のとおりです。

1. XSLTマッパーで、「ソース」および「ターゲット」ペインのツリーを開きます。

2. ソース要素をターゲット要素にドラッグ・アンド・ドロップします。

3. 「コンポーネント・パレット」で、「拡張」を選択します。

4. 「XREF Functions」を選択します。

5. ソース・オブジェクトをターゲット・オブジェクトに接続している線に、「lookupXRef」関数をドラッグ・アンド・ドロップします。
接続線上に「lookupXRef」アイコンが表示されます。

6. 「lookupXRef」アイコンをダブルクリックします。
図49-10に示すように、「関数の編集 – lookupXRef」ダイアログが表示されます。

図49-10 「関数の編集 – lookupXRef」ダイアログ

「図49-10 「関数の編集 – lookupXRef」ダイアログ」の説明

7. 「関数の編集 – lookupXRef」ダイアログのフィールドで、次の値を指定します。

1. 「xrefLocation」フィールドに、相互参照ファイルのロケーションURIを入力します。
「xrefLocation」フィールドの右側にある「参照」をクリックして、相互参照ファイルを選択します。「リソース・パレット」を使用して、MDSおよびMDSの共有ロケーションからもすでにデプロイされた相互参照を選択できます。

2. 「referenceColumnName」フィールドに、相互参照列の名前を入力します。
「referenceColumnName」フィールドの右側にある「参照」をクリックして、以前に選択した相互参照に定義されている列から列名を選択できます。

3. 「referenceValue」フィールドでは、値を手動で入力するか、[Ctrl]キーを押しながら[Space]キーを押してXPathビルディング・アシスタントを使用できます。上へ移動および下へ移動するキーを押して、リスト内のオブジェクトを配置し、[Enter]キーを押してそのオブジェクトを選択します。

4. 「columnName」フィールドに、相互参照列の名前を入力します。
「columnName」フィールドの右側にある「参照」をクリックして、以前に選択した相互参照に定義されている列から列名を選択できます。

5. 「needException」フィールドの右側にある「参照」をクリックします。「例外が必要」ダイアログが表示されます。値が見つからない場合に例外が発生するように指定するには、「はい」を選択します。それ以外の場合は「いいえ」を選択します。

8. 「OK」をクリックします。
図49-11に、移入後の「関数の編集 – lookupXRef」ダイアログを示します。

図49-11 移入後の「関数の編集 – lookupXRef」ダイアログ

「図49-11 移入後の「関数の編集 – lookupXRef」ダイアログ」の説明

49.7 相互参照表の値の削除

xref:markForDelete関数を使用すると、相互参照表の値を削除できます。関数に渡された列値を含む行は、XREF_DATA表から削除され、XREF_DELETED_DATA表に移動されます。この関数は、削除に成功した場合はtrueを返します。それ以外の場合はfalseを返します。

相互参照表行には最低2つのマッピングが必要です。1行に存在するマッピングが2つのみの場合、一方の値に削除マークを付けると、他方の列の値も削除されます。

例49-10に、xref:markForDelete関数の構文を示します。

例49-10 xref:markForDelete関数

xref:markForDelete(xrefTableName as string, xrefColumnName as string,
xrefValueToDelete as string) return as boolean

パラメータ

- xrefTableName: 相互参照表の名前。

- xrefColumnName: 削除対象の値を含む列の名前。

- xrefValueToDelete: 削除する値。

例外の原因

次の理由により、例外が発生する可能性があります。

- 指定した名前の相互参照表が見つからない場合。

- 指定した列名が見つからない場合。

- 指定した値が空の場合。

- 指定した値が列内で見つからない場合。

- 複数の値が見つかった場合。

49.7.1 相互参照表の値の削除方法

相互参照表の値を削除する手順は、次のとおりです。

1. XSLTマッパーで、「ソース」および「ターゲット」ペインのツリーを開きます。

2. ソース要素をターゲット要素にドラッグ・アンド・ドロップします。

3. 「コンポーネント・パレット」で、「拡張」を選択します。

4. 「XREF Functions」を選択します。

5. ソース・オブジェクトをターゲット・オブジェクトに接続している線に、「markForDelete」関数をドラッグ・アンド・ドロップします。
接続線上に「markForDelete」アイコンが表示されます。

6. 「markForDelete」アイコンをダブルクリックします。
図49-12に示すように、「関数の編集 – markForDelete」ダイアログが表示されます。

図49-12 「関数の編集 – markForDelete」ダイアログ

「図49-12 「関数の編集 – markForDelete」ダイアログ」の説明

7. 「関数の編集 – markForDelete」ダイアログの各フィールドで次の値を指定します。

1. 「xrefLocation」フィールドに、相互参照ファイルのロケーションURIを入力します。
「xrefLocation」フィールドの右側にある「検索」アイコンをクリックして、相互参照ファイルを選択します。「リソース・パレット」を使用して、MDSおよびMDSの共有ロケーションからもすでにデプロイされた相互参照を選択できます。

2. 「columnName」フィールドに、相互参照表列の名前を入力します。
「columnName」フィールドの右側にある「検索」アイコンをクリックして、以前に選択した相互参照に定義されている列から列名を選択できます。

3. 「value」フィールドは、値を手動で入力するか、[Ctrl]キーを押しながら[Space]キーを押してXPathビルディング・アシスタントを起動します。上へ移動および下へ移動するキーを押して、リスト内のオブジェクトを配置し、[Enter]キーを押してそのオブジェクトを選択します。

図49-13に、移入後の「関数の編集 – markForDelete」ダイアログを示します。

図49-13 移入後の「関数の編集 – markForDelete」ダイアログ

「図49-13 移入後の「関数の編集 – markForDelete」ダイアログ」の説明

8. 「OK」をクリックします。

49.8 相互参照ユースケースの作成および実行

この相互参照ユースケースは、Oracle EBS、SAPおよびSiebelインスタンス間の統合シナリオを実装します。このユースケースでは、SAP_01表で挿入、更新または削除操作を実行すると、EBSおよびSBL表で対応するデータが挿入または更新されます。図49-14に、このユースケースの概要を示します。

図49-14 SOAコンポジット・エディタのXrefCustAppユースケース

「図49-14 SOAコンポジット・エディタのXrefCustAppユースケース」の説明

この項で説明するサンプル・ファイルをダウンロードするには、Oracle SOA Suiteサンプル・ページを参照してください。

49.8.1 ユース-ケースの作成方法

この項では、SOAコンポジット・アプリケーションを作成、構築およびデプロイするための設計時タスクを説明します。これらのタスクは、表示されている順番で実行する必要があります。

49.8.1.1 タスク1: Oracle Databaseおよびデータベース・アダプタの構成方法

Oracle Databaseおよびデータベース・アダプタを構成する手順は、次のとおりです。

1. このユースケースには、SCOTTデータベース・アカウントとパスワードTIGERが必要です。SCOTTアカウントのロックが解除されている必要があります。
SYSDBAでログインしてから、XrefOrderApp1M/sqlディレクトリにあるsetup_user.sqlスクリプトを実行してアカウントのロックを解除できます。

2. XrefOrderApp1M/sqlディレクトリにあるcreate_schema.sqlスクリプトを実行して、このユースケースに必要な表を作成します。

3. XrefOrderApp1M/sqlディレクトリにあるcreate_app_procedure.sqlスクリプトを実行して、この統合に組み込む様々なアプリケーションをシミュレートするプロシージャを作成します。

4. OH/rcu/integration/soainfra/sql/xref/ディレクトリにあるcreateschema_xref_oracle.sqlスクリプトを実行し、ランタイムの相互参照データを格納する相互参照表を作成します。

5. ra.xmlファイルとweblogic-ra.xmlファイルを、$BEAHOME/META-INFから、使用しているコンピュータで新規作成したMETA-INFディレクトリにコピーします。

6. 次のとおり、$BEAHOME/META-INFディレクトリにあるweblogic-ra.xmlファイルを編集します。

- 次のように、プロパティをxADataSourceNameに変更します。

<property>
<name>xADataSourceName</name>
<value>jdbc/DBConnection1</value>
</property>

- jndi-nameを次のように変更します。

<jndi-name> eis/DB/DBConnection1</jndi-name>

このサンプルではeis/DB/DBConnection1を使用して新規メッセージのSAP表をポーリングし、Oracle EBSおよびSiebelインスタンスをシミュレートするプロシージャに接続します。

7. ra.xmlファイルとweblogic-ra.xmlファイルをRARファイルとしてパッケージ化し、Oracle WebLogic Server管理コンソールを使用してそのRARファイルをデプロイします。

8. Oracle WebLogic Server管理コンソールを使用して、次の値を持つデータ・ソースを作成します。

- jndi-name=jdbc/DBConnection1

- user=scott

- password=tiger

- url=jdbc:oracle:thin:@host:port:service

- connection-factory factory-class=oracle.jdbc.pool.OracleDataSource

9. Oracle WebLogic Server管理コンソールを使用して、次の値を持つデータ・ソースを作成します。

- jndi-name=jdbc/xref

- user=scott

- password=tiger

- url=jdbc:oracle:thin:@host:port:service

- connection-factory factory-class=oracle.jdbc.pool.OracleDataSource

49.8.1.2 タスク2: Oracle JDeveloperのアプリケーションおよびプロジェクトの作成方法

Oracle JDeveloperのアプリケーションおよびプロジェクトを作成する手順は、次のとおりです。

1. Oracle JDeveloperで「ファイル」をクリックし、「新規」を選択します。
「新規ギャラリ」ダイアログが表示されます。

2. 「新規ギャラリ」で「一般」ノードを開き、「アプリケーション」カテゴリを選択します。

3. 「項目」リストで「SOAアプリケーション」を選択し、「OK」をクリックします。
SOAアプリケーションの作成ウィザードが表示されます。

4. 「アプリケーション名」フィールドでXrefCustAppと入力し、「次へ」をクリックします。
「SOAプロジェクトの名前付け」ページが表示されます。

5. 「プロジェクト名」フィールドにXrefCustAppと入力し、「次へ」をクリックします。
「SOA設定の構成」ページが表示されます。

6. 「コンポジット・テンプレート」リストから「空のコンポジット」を選択し、「終了」をクリックします。
Oracle JDeveloperの「アプリケーション・ナビゲータ」は新規のアプリケーションやプロジェクトで更新され、「SOAコンポジット・エディタ」には空白のコンポジットがあります。

7. 「ファイル」メニューから「すべて保存」を選択します。

49.8.1.3 タスク3: 相互参照の作成方法

ユースケース用のアプリケーションおよびプロジェクトを作成した後は、相互参照表を作成する必要があります。

相互参照表を作成する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、「XrefCustApp」プロジェクトを右クリックし、「新規」を選択します。

2. 「新規ギャラリ」ダイアログで「SOA層」ノードを開き、「トランスフォーメーション」カテゴリを選択します。

3. 「項目」リストで「相互参照(XREF)」を選択し、「OK」をクリックします。
「相互参照(XREF)の作成」ダイアログが表示されます。

4. 「ファイル名」フィールドで、customer.xrefと入力します。

5. 「エンド・システム」フィールドで、SAP_01およびEBS_i76と入力します。

6. 「OK」をクリックします。
相互参照エディタが表示されます。

7. 「追加」をクリックします。
新しい行が追加されます。

8. 新しく追加された行にエンド・システム名としてSBL_78を入力します。

9. 「追加」をクリックし、エンド・システム名としてCommonを入力します。
図49-15に示すように、相互参照エディタが表示されます。

図49-15 顧客の相互参照

「図49-15 顧客の相互参照」の説明

10. 「ファイル」メニューから、「すべて保存」を選択して、相互参照エディタを閉じます。

49.8.1.4 タスク4: データベース・アダプタ・サービスの作成方法

データベース・アダプタ・サービスを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で「SOA」を選択します。

2. 「データベース・アダプタ」を選択し、「公開されたサービス」スイムレーンにドラッグします。
アダプタ構成ウィザードの「ようこそ」ページが表示されます。

3. 「次へ」をクリックします。
「サービス名」ページが表示されます。

4. 「サービス名」フィールドに、SAPと入力します。

5. 「次へ」をクリックします。
「サービス接続」ページが表示されます。

6. 「アプリケーション接続」フィールドで、「DBConnection1」を選択します。

7. 「JNDI名」フィールドに、eis/DB/DBConnection1と入力します。

8. 「次へ」をクリックします。
「操作タイプ」ページが表示されます。

9. 「表の新規レコードまたは更新されたレコードをポーリング」を選択し、「次へ」をクリックします。
「表の選択」ページが表示されます。

10. 「表のインポート」をクリックします。
「表のインポート」ダイアログが表示されます。

11. 「スキーマ」から「Scott」を選択します。

12. 「名前フィルタ」フィールドで%SAP%と入力し、「問合せ」をクリックします。
「選択可能」フィールドにSAP_01表名が移入されます。

13. 「SAP_01」をダブルクリックします。
「選択済」フィールドに「SAP_01」が移入されます。

14. 「OK」をクリックします。
ここで「表の選択」ページに「SAP_01」表が含まれます。

15. 「SAP_01」を選択し、「次へ」をクリックします。
「主キーの定義」ページが表示されます。

16. 「ID」を主キーとして選択し、「次へ」をクリックします。
「リレーションシップ」ページが表示されます。

17. 「次へ」をクリックします。
「属性のフィルタ処理」ページが表示されます。

18. 「次へ」をクリックします。
「読取り後」ページが表示されます。

19. 「[SAP_01]表のフィールドの更新 (論理削除)」を選択し、「次へ」をクリックします。
「論理削除」ページが表示されます。

20. 「論理削除」フィールドで、「LOGICAL_DEL」を選択します。

21. 「読取り値」フィールドで、Yと入力します。

22. 「未読取り値」フィールドで、Nと入力します。
図49-16は、アダプタ構成ウィザードの「論理削除」ページを示しています。

図49-16 「論理削除」ページ: アダプタ構成ウィザード

「図49-16 「論理削除」ページ: アダプタ構成ウィザード」の説明

23. 「次へ」をクリックします。
「ポーリング・オプション」ページが表示されます。

24. 「次へ」をクリックします。
「選択条件の定義」ページが表示されます。

25. 「次へ」をクリックします。
「終了」ページが表示されます。

26. 「終了」をクリックします。
図49-17に示すように、SAPという名前のデータベース・アダプタ・サービスが作成されます。

図49-17 SOAコンポジット・エディタのSAPデータベース・アダプタ・サービス

「図49-17 SOAコンポジット・エディタのSAPデータベース・アダプタ・サービス」の説明

27. 「ファイル」メニューから「すべて保存」を選択します。

49.8.1.5 タスク5: EBSおよびSBL外部参照の作成方法

EBSおよびSBL外部参照を作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で「SOA」を選択します。

2. 「データベース・アダプタ」を選択し、「外部参照」スイムレーンにドラッグします。

アダプタ構成ウィザードの「ようこそ」ページが表示されます。

3. 「次へ」をクリックします。
「サービス名」ページが表示されます。

4. 「サービス名」フィールドに、EBSと入力します

5. 「次へ」をクリックします。
「サービス接続」ページが表示されます。

6. 「アプリケーション接続」フィールドで、「DBConnection1」を選択します。

7. 「JNDI名」フィールドに、eis/DB/DBConnection1と入力します。

8. 「次へ」をクリックします。
「操作タイプ」ページが表示されます。

9. 「ストアド・プロシージャまたはファンクションの呼出し」を選択し、「次へ」をクリックします。
「ストアド・プロシージャの指定」ページが表示されます。

10. 「スキーマ」から「Scott」を選択します。

11. 「参照」をクリックします。
「ストアド・プロシージャ」ダイアログが表示されます。

12. 図49-18に示すように、「POPULATE_APP_INSTANCE」を選択します。

図49-18 「ストアド・プロシージャ」ダイアログ

「図49-18 「ストアド・プロシージャ」ダイアログ」の説明

13. 「OK」をクリックします。
図49-19に示すように、「ストアド・プロシージャの指定」ページが表示されます。

図49-19 アダプタ構成ウィザードの「ストアド・プロシージャの指定」ページ

「図49-19 アダプタ構成ウィザードの「ストアド・プロシージャの指定」ページ」の説明

14. 「次へ」をクリックします。
「終了」ページが表示されます。

15. 「終了」をクリックします。
図49-20に、SOAコンポジット・エディタのEBS参照を示します。

図49-20 SOAコンポジット・エディタのEBS参照

「図49-20 SOAコンポジット・エディタのEBS参照」の説明

16. 「ファイル」メニューから「すべて保存」を選択します。

17. ステップ2からステップ16を繰り返し、SBLという名前の外部参照をもう1つ作成します。
このタスクを完了すると、図49-21に示すように、SOAコンポジット・エディタが表示されます。

図49-21 SOAコンポジット・エディタのSBL参照

「図49-21 SOAコンポジット・エディタのSBL参照」の説明

49.8.1.6 タスク6: Loggerファイル・アダプタ外部参照の作成方法

Loggerファイル・アダプタ外部参照を作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「SOA」を選択します。

2. 「ファイル・アダプタ」を選択し、「外部参照」スイムレーンにドラッグします。
アダプタ構成ウィザードの「ようこそ」ページが表示されます。

3. 「次へ」をクリックします。
「サービス名」ページが表示されます。

4. 「サービス名」フィールドに、Loggerと入力します。

5. 「次へ」をクリックします。
「操作」ページが表示されます。

6. 「操作タイプ」フィールドで、「Write File」を選択します。

7. 「次へ」をクリックします。
「ファイル構成」ページが表示されます。

8. 「発信ファイルのディレクトリ(物理パス)」フィールドに、ファイルを書き込むディレクトリの名前を入力します。

9. 「ファイル・ネーミング規則」フィールドで、output.xmlと入力し、「次へ」をクリックします。
「メッセージ」ページが表示されます。

10. 「検索」をクリックします。
「タイプ・チューザ」ダイアログが表示されます。

11. 「タイプ・エクスプローラ」→「プロジェクトのスキーマ・ファイル」→「SCOTT_POPULATE_APP_INSTANCE.xsd」の順に移動し、「OutputParameters」を選択します。

12. 「OK」をクリックします。

13. 「次へ」をクリックします。
「終了」ページが表示されます。

14. 「終了」をクリックします。
図49-22に、SOAコンポジット・エディタのLogger参照を示します。

図49-22 SOAコンポジット・エディタのLogger参照

「図49-22 SOAコンポジット・エディタのLogger参照」の説明

15. 「ファイル」メニューから「すべて保存」を選択します。

49.8.1.7 タスク7: Oracle Mediatorサービス・コンポーネントの作成方法

Oracle Mediatorサービス・コンポーネントを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「メディエータ」アイコンをドラッグし、SOAコンポジット・エディタの「コンポーネント」セクションにドロップします。
「メディエータの作成」ダイアログが表示されます。

2. 「テンプレート」リストから、「インタフェースを後で定義」を選択します。

3. 「OK」をクリックします。
Mediator1という名前のOracle Mediatorが作成されます。

4. 図49-23に示すように、「SAP」サービスを「Mediator1」に接続します。

図49-23 SAPサービスのMediator1への接続

「図49-23 SAPサービスのMediator1への接続」の説明

5. 「ファイル」メニューから「すべて保存」を選択します。

6. 「コンポーネント・パレット」から別の「メディエータ」アイコンをドラッグし、SOAコンポジット・エディタの「コンポーネント」セクションにドロップします。
「メディエータの作成」ダイアログが表示されます。

7. 「テンプレート」リストから、「WSDLからのインタフェース定義」を選択します。

8. 「SOAPバインディングを持つコンポジット・サービスの作成」の選択を解除します。

9. 「WSDLファイル」フィールドの右側にある「既存のWSDLを検索します。」をクリックします。

10. Common.wsdlファイルに移動して選択します。Common.wsdlファイルは、Samplesフォルダにあります。

11. 「OK」をクリックします。

12. 「OK」をクリックします。
Commonという名前のOracle Mediatorが作成されます。

49.8.1.8 タスク8: Oracle Mediatorサービス・コンポーネントのルーティング・ルールの指定方法

次の操作のルーティング・ルールを指定する必要があります。

- 挿入

- 更新

- ID更新

- 削除

挿入操作のルーティング・ルールを作成する手順は、次のとおりです。

1. 「Mediator1」Oracle Mediatorをダブルクリックします。
メディエータ・エディタが表示されます。

2. 「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

3. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

4. 「XrefCustApp」→「メディエータ」→「Common」→「サービス」→「Common」の順に移動します。

5. 「insert」を選択し、「OK」をクリックします。

6. 「フィルタ」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。

7. 「式」フィールドに、次の式を入力します。

$in.Sap01Collection/top:Sap01Collection/top:Sap01/top:operation='INSERT'

8. 「OK」をクリックします。

9. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

10. 「新規マッパー・ファイルの作成」を選択し、SAP_TO_COMMON_INSERT.xslと入力します。

11. 「OK」をクリックします。
XSLTマッパーに、「SAP_TO_COMMON_INSERT.xsl」ファイルが表示されます。

12. 「top:SAP01」ソース要素を「inp1:Customer」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。

13. 「自動マップ中」オプションから、「祖先名を考慮した要素の一致」の選択を解除します。

14. 「OK」をクリックします。
図49-24に示すように、トランスフォーメーションが作成されます。

図49-24 SAP_TO_COMMON_INSERT.xslトランスフォーメーション

「図49-24 SAP_TO_COMMON_INSERT.xslトランスフォーメーション」の説明

15. 「コンポーネント・パレット」から、「拡張」を選択します。

16. 「XREF Functions」を選択します。

17. 「コンポーネント・パレット」からtop:id要素とinp1:id要素を接続している線まで「populateXRefRow」関数をドラッグ・アンド・ドロップします。

18. 「populateXRefRow」アイコンをダブルクリックします。
「関数の編集 - populateXRefRow」ダイアログが表示されます。

19. 「xrefLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。

20. 「customer.xref」を選択し、「OK」をクリックします。

21. 「referenceColumnName」フィールドで"SAP_01"と入力するか、または「検索」をクリックして列名を選択します。

22. 「referenceValue」列に、/top:Sap01Collection/top:Sap01/top:idと入力します。

23. 「columnName」フィールドで"Common"と入力するか、「検索」をクリックして列名を選択します。

24. 「value」フィールドに、oraext:generate-guid()と入力します。

25. 「mode」フィールドで"Add"と入力するか、「検索」をクリックして、このモードを選択します。
図49-25は、移入後の「関数の編集 – populateXRefRow」ダイアログを示しています。

図49-25 「関数の編集 – populateXRefRow」ダイアログ: XrefCustAppユースケース

「図49-25 「関数の編集 – populateXRefRow」ダイアログ: XrefCustAppユースケース」の説明

26. 「OK」をクリックします。

27. 「ファイル」メニューから、「すべて保存」を選択して、「SAP_TO_COMMON_INSERT.xsl」ファイルを閉じます。
図49-26に示すように、「ルーティング・ルール」セクションが表示されます。

図49-26 挿入操作を行う「ルーティング・ルール」セクション

「図49-26 挿入操作を行う「ルーティング・ルール」セクション」の説明

更新操作のルーティング・ルールを作成する手順は、次のとおりです。

1. 「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

2. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

3. 「XrefCustApp」→「メディエータ」→「Common」→「サービス」→「Common」の順に移動します。

4. 「update」を選択し、「OK」をクリックします。

5. 「フィルタ」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。

6. 「式」フィールドに、次の式を入力します。

$in.Sap01Collection/top:Sap01Collection/top:Sap01/top:operation='UPDATE'

7. 「OK」をクリックします。

8. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

9. 「新規マッパー・ファイルの作成」を選択し、SAP_TO_COMMON_UPDATE.xslと入力します。

10. 「OK」をクリックします。
「SAP_TO_COMMON_UPDATE.xsl」ファイルが表示されます。

11. 「top:Sap01」ソース要素を「inp1:Customer」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。

12. 「OK」をクリックします。

13. 「コンポーネント・パレット」から、「拡張」を選択します。

14. 「XREF Functions」を選択します。

15. 「コンポーネント・パレット」からtop:id要素とinp1:id要素を接続している線まで「lookupXRef」関数をドラッグ・アンド・ドロップします。

16. 「lookupXRef」アイコンをダブルクリックします。
「関数の編集 - lookupXRef」ダイアログが表示されます。

17. 「xrefLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。

18. 「customer.xref」を選択し、「OK」をクリックします。

19. 「referenceColumnName」フィールドで"SAP_01"と入力するか、または「検索」をクリックして列名を選択します。

20. 「referenceValue」列に、/top:Sap01Collection/top:Sap01/top:idと入力します。

21. 「columnName」フィールドで"COMMON"と入力するか、「検索」をクリックして列名を選択します。

22. 「needException」フィールドでtrue()と入力するか、「検索」をクリックして、このモードを選択します。
図49-27は、移入後の「関数の編集 – lookupXRef」ダイアログを示しています。

図49-27 「関数の編集 – lookupXRef」ダイアログ: XrefCustAppユースケース

「図49-27 「関数の編集 – lookupXRef」ダイアログ: XrefCustAppユースケース」の説明

23. 「OK」をクリックします。

24. 「ファイル」メニューから、「すべて保存」を選択して、「SAP_TO_COMMON_UPDATE.xsl」ファイルを閉じます。
図49-28に示すように、「ルーティング・ルール」セクションが表示されます。

図49-28 挿入操作と更新操作

「図49-28 挿入操作と更新操作」の説明

ID更新操作のルーティング・ルールを作成する手順は、次のとおりです。

次のタスクを実行して、updateID操作のルーティング・ルールを作成します。

1. 「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

2. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

3. 「XrefCustApp」→「メディエータ」→「Common」→「サービス」→「Common」の順に移動します。

4. 「updateid」を選択し、「OK」をクリックします。

5. 「フィルタ」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。

6. 「式」フィールドに、次の式を入力します。

$in.Sap01Collection/top:Sap01Collection/top:Sap01/top:operation = 'UPDATEID'

7. 「OK」をクリックします。

8. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

9. 「新規マッパー・ファイルの作成」を選択し、SAP_TO_COMMON_UPDATEID.xslと入力します。

10. 「OK」をクリックします。
「SAP_TO_COMMON_UPDATEID.xsl」ファイルが表示されます。

11. 「top:Sap01」ソース要素を「inp1:Customer」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。

12. 「OK」をクリックします。

13. 「コンポーネント・パレット」から、「拡張」を選択します。

14. 「XREF Functions」を選択します。

15. 「コンポーネント・パレット」からtop:id要素とinp1:id要素を接続している線まで「populateXRefRow」関数をドラッグ・アンド・ドロップします。

16. 「populateXRefRow」アイコンをダブルクリックします。
「関数の編集 - populateXRefRow」ダイアログが表示されます。

17. 「xrefLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。

18. 「customer.xref」を選択し、「OK」をクリックします。

19. 「referenceColumnName」フィールドで"SAP_01"と入力するか、または「検索」をクリックして列名を選択します。

20. 「referenceValue」列に、/top:Sap01Collection/top:Sap01/top:refIdと入力します。

21. 「columnName」フィールドで"SAP_01"と入力するか、「検索」をクリックして列名を選択します。

22. 「value」フィールドに、/top:Sap01Collection/top:Sap01/top:Idと入力します。

23. 「mode」フィールドで"UPDATE"と入力するか、「検索」をクリックして、このモードを選択します。
図49-29は、移入後の「関数の編集 – populateXRefRow」ダイアログを示しています。

図49-29 「関数の編集 – populateXRefRow」ダイアログ: XrefCustAppユースケース

「図49-29 「関数の編集 – populateXRefRow」ダイアログ: XrefCustAppユースケース」の説明

24. 「コンポーネント・パレット」からtop:id要素とinp1:id要素を接続している線まで「lookupXRef」関数をドラッグ・アンド・ドロップします。

25. 「lookupXRef」アイコンをダブルクリックします。
「関数の編集 - lookupXRef」ダイアログが表示されます。

26. 「xrefLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。

27. 「customer.xref」を選択し、「OK」をクリックします。

28. 「referenceColumnName」フィールドで"SAP_01"と入力するか、または「検索」をクリックして列名を選択します。

29. 「referenceValue」列に、次の値を入力します。

xref:populateXRefRow("customer.xref","SAP_
01",/top:Sap01Collection/top:Sap01/top:refId,"SAP_
01",/top:Sap01Collection/top:Sap01/top:id,"UPDATE").

30. 「columnName」フィールドで"COMMON"と入力するか、「検索」をクリックして列名を選択します。

31. 「needException」フィールドでfalse()と入力するか、「検索」をクリックして、このモードを選択します。
図49-30は、移入後の「関数の編集 – lookupXRef」ダイアログを示しています。

図49-30 「関数の編集 – lookupXRef」ダイアログ: XrefCustAppユースケース

「図49-30 「関数の編集 – lookupXRef」ダイアログ: XrefCustAppユースケース」の説明

32. 「OK」をクリックします。

33. 「ファイル」メニューから、「すべて保存」を選択して、「SAP_TO_COMMON_UPDATEID.xsl」ファイルを閉じます。
図49-31に示すように、「ルーティング・ルール」セクションが表示されます。

図49-31 挿入操作、更新操作およびID更新操作

「図49-31 挿入操作、更新操作およびID更新操作」の説明

削除操作のルーティング・ルールを作成する手順は、次のとおりです。

1. 「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

2. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

3. 「XrefCustApp」→「メディエータ」→「Common」→「サービス」→「Common」の順に移動します。

4. 「delete」を選択し、「OK」をクリックします。

5. 「フィルタ」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。

6. 「式」フィールドに、次の式を入力します。

$in.Sap01Collection/top:Sap01Collection/top:Sap01/top:operation = 'DELETE'

7. 「OK」をクリックします。

8. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

9. 「新規マッパー・ファイルの作成」を選択し、SAP_TO_COMMON_DELETE.xslと入力します。

10. 「OK」をクリックします。
「SAP_TO_COMMON_DELETE.xsl」ファイルが表示されます。

11. <sources>を右クリックし、「パラメータの追加」を選択します。
「パラメータの追加」ダイアログが表示されます。

12. 「ローカル名」フィールドに、COMMONIDと入力します。

13. 「デフォルト値の設定」を選択します。

14. 「式」を選択します。

15. 「XPath式」フィールドに、次の式を入力します。

xref:lookupXRef("customer.xref","SAP_
01",/top:Sap01Collection/top:Sap01/top:id,"COMMON",false()).

16. 「OK」をクリックします。

17. 「top:Sap01」ソース要素を「inp1:Customer」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。

18. 「OK」をクリックします。

19. 「top:id」と「inp1:id」を接続している線を削除します。

20. 「COMMONID」を「inp1:id」に接続します。

21. 「inp1:id」を右クリックして「XSLノードの追加」を選択してから、「if」を選択します。
新しいノード「if」が、「inp1:customer」と「inp1:id」の間に挿入されます。

22. 「top:id」を「if」ノードに接続します。

23. 「コンポーネント・パレット」から、「拡張」を選択します。

24. 「XREF Functions」を選択します。

25. 「コンポーネント・パレット」からtop:idノードとifノードを接続している線まで「markForDelete」関数をドラッグ・アンド・ドロップします。

26. 「markForDelete」アイコンをダブルクリックします。
「関数の編集 - markForDelete」ダイアログが表示されます。

27. 「xrefLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。

28. 「customer.xref」を選択し、「OK」をクリックします。

29. 「columnName」フィールドで"SAP_01"と入力するか、「検索」をクリックして列名を選択します。

30. 「value」フィールドに、/top:Sap01Collection/top:Sap01/top:Idと入力します。
図49-32は、移入後の「関数の編集 – markForDelete」ダイアログを示しています。

図49-32 「関数の編集 – markForDelete」ダイアログ: XrefCustAppユースケース

「図49-32 「関数の編集 – markForDelete」ダイアログ: XrefCustAppユースケース」の説明

31. 「OK」をクリックします。
図49-33に示すように、「SAP_TO_COMMON_DELETE.xsl」ファイルが表示されます。

図49-33 SAP_TO_COMMON_DELETE.xsl

「図49-33 SAP_TO_COMMON_DELETE.xsl」の説明

32. 「ファイル」メニューから、「すべて保存」を選択して、「SAP_TO_COMMON_DELETE.xsl」ファイルを閉じます。
図49-34に示すように、「ルーティング・ルール」セクションが表示されます。

図49-34 挿入操作、更新操作、ID更新操作および削除操作

「図49-34 挿入操作、更新操作、ID更新操作および削除操作」の説明

49.8.1.9 タスク9: 「Common」Oracle Mediatorのルーティング・ルールの指定方法

「Common」Oracle Mediatorの次の操作についてルーティング・ルールを指定する必要があります。

- 挿入

- 削除

- 更新

- ID更新

挿入操作のルーティング・ルールを作成する手順は、次のとおりです。

1. 「Common」Oracle Mediatorをダブルクリックします。
メディエータ・エディタが表示されます。

2. 「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。

「ターゲット・タイプ」ダイアログが表示されます。

3. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

4. 「XrefCustApp」→「参照」→「SBL」の順に移動します。

5. 「SBL」を選択し、「OK」をクリックします。

6. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

7. 「新規マッパー・ファイルの作成」を選択し、COMMON_TO_SBL_INSERT.xslと入力します。

8. 「OK」をクリックします。
「COMMON_TO_SBL_INSERT.xsl」ファイルが表示されます。

9. 「inp1:Customers」ソース要素を「db:InputParameters」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。

10. 「OK」をクリックします。
図49-35に示すように、トランスフォーメーションが作成されます。

図49-35 COMMON_TO_SBL_INSERT.xslトランスフォーメーション

「図49-35 COMMON_TO_SBL_INSERT.xslトランスフォーメーション」の説明

11. 「ファイル」メニューから、「すべて保存」を選択して、「COMMON_TO_SBL_INSERT.xsl」ファイルを閉じます。

12. 「同期リプライ」セクションで、「ターゲット・サービス操作を参照します。」をクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

13. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

14. 「XrefCustApp」→「参照」→「Logger」の順に移動します。

15. 「Write」を選択し、「OK」をクリックします。

16. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リプライ・トランスフォーメーション・マップ」ダイアログが表示されます。

17. 「新規マッパー・ファイルの作成」を選択し、SBL_TO_COMMON_INSERT.xslと入力します。

18. 「リクエストをリプライ・ペイロードに含める」を選択します。

19. 「OK」をクリックします。
「SBL_TO_COMMON_INSERT.xsl」ファイルが表示されます。

20. 「inp1:Customers」ソース要素を「db:X:APP_ID」に接続します。

21. 「コンポーネント・パレット」から接続線上に「populateXRefRow」関数をドラッグ・アンド・ドロップします。

22. 「populateXRefRow」アイコンをダブルクリックします。
「関数の編集 - populateXRefRow」ダイアログが表示されます。

23. 表示されたフィールドに次の情報を入力します。

- xrefLocation: "customer.xref"

- referenceColumnName: "Common"

- referenceValue: $initial.Customers/inp1:Customers/inp1:Customer/inp1:Id

- columnName: "SBL_78"

- value: /db:OutputParameters/db:X_APP_ID

- mode: "LINK"

24. 「OK」をクリックします。
図49-36に示すように、「SBL_TO_COMMON_INSERT.xsl」ファイルが表示されます。

図49-36 SBL_TO_COMMON_INSERT.xslトランスフォーメーション

「図49-36 SBL_TO_COMMON_INSERT.xslトランスフォーメーション」の説明

25. 「ファイル」メニューから、「すべて保存」を選択して、「SBL_TO_COMMON_INSERT.xsl」ファイルを閉じます。

26. 「同期リプライ」セクションで、「値の割当て」アイコンをクリックします。
「値の割当て」ダイアログが表示されます。

27. 「追加」をクリックします。
「値の割当て」ダイアログが表示されます。

28. 「From」セクションで、「式」を選択します。

29. 「式ビルダーの起動」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。

30. 「式」フィールドに次の式を入力し、「OK」をクリックします。

concat('INSERT-',$in.OutputParameters/db:OutputParameters/db:X_APP_ID,'.xml')

31. 「To」セクションで、「プロパティ」を選択します。

32. 「jca.file.FileName」プロパティを選択し、「OK」をクリックします。

33. 「OK」をクリックします。
図49-37に示すように、「insert」操作セクションが表示されます。

図49-37 SBLターゲット・サービスで行う挿入操作

「図49-37 SBLターゲット・サービスで行う挿入操作」の説明

34. 「ファイル」メニューから「すべて保存」を選択します。

35. ステップ2からステップ34を繰り返し、EBSというもう1つのターゲット・サービスおよびそのルーティング・ルールを指定します。
図49-38に、SBLおよびEBSターゲット・サービスの「insert」操作セクションを示します。

図49-38 SBLターゲット・サービスとEBSターゲット・サービスで行う挿入操作

「図49-38 SBLターゲット・サービスとEBSターゲット・サービスで行う挿入操作」の説明

削除操作のルーティング・ルールを作成する手順は、次のとおりです。

次のタスクを実行して、削除操作のルーティング・ルールを作成します。

1. 「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。

「ターゲット・タイプ」ダイアログが表示されます。

2. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

3. 「XrefCustApp」→「参照」→「SBL」の順に移動します。

4. 「SBL」を選択し、「OK」をクリックします。

5. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

6. 「新規マッパー・ファイルの作成」を選択し、COMMON_TO_SBL_DELETE.xslと入力します。

7. 「OK」をクリックします。
「COMMON_TO_SBL_DELETE.xsl」ファイルが表示されます。

8. 「inp1:Customers」ソース要素を「db:InputParameters」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。

9. 「OK」をクリックします。
図49-39に示すように、トランスフォーメーションが作成されます。

図49-39 COMMON_TO_SBL_DELETE.xslトランスフォーメーション

「図49-39 COMMON_TO_SBL_DELETE.xslトランスフォーメーション」の説明

10. 「コンポーネント・パレット」からinp1:idとdb:XCUSTOMER_IDを接続している線まで「lookupXRef」関数をドラッグ・アンド・ドロップします。

11. 「lookupXRef」アイコンをダブルクリックします。
「関数の編集 - lookupXRef」ダイアログが表示されます。

12. 表示されたフィールドに次の情報を入力します。

- xrefLocation: "customer.xref"

- referenceColumnName: "Common"

- referenceValue: /inp1:Customers/inp1:Customer/inp1:Id

- columnName: "SBL_78"

- needException: false()

13. 「OK」をクリックします。

14. 「ファイル」メニューから、「すべて保存」を選択して、「COMMON_TO_SBL_DELETE.xsl」ファイルを閉じます。

15. 「同期リプライ」セクションで、「ターゲット・サービス操作を参照します。」をクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

16. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

17. 「XrefCustApp」→「参照」→「Logger」の順に移動します。

18. 「Write」を選択し、「OK」をクリックします。

19. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リプライ・トランスフォーメーション・マップ」ダイアログが表示されます。

20. 「新規マッパー・ファイルの作成」を選択し、SBL_TO_COMMON_DELETE.xslと入力します。

21. 「OK」をクリックします。
「SBL_TO_COMMON_DELETE.xsl」ファイルが表示されます。

22. 「db:X_APP_ID」ソース要素を「db:X:APP_ID」ターゲットに接続します。

23. 「コンポーネント・パレット」から接続線上に「markForDelete」関数をドラッグ・アンド・ドロップします。

24. 「markForDelete」アイコンをダブルクリックします。
「関数の編集 - markForDelete」ダイアログが表示されます。

25. 表示されたフィールドに次の情報を入力します。

- xrefLocation: "customer.xref"

- columnName: "SBL_78"

- value: /db:OutputParameters/db:X_APP_ID

26. 「OK」をクリックします。

27. 「ファイル」メニューから、「すべて保存」を選択して、「SBL_TO_COMMON_DELETE.xsl」ファイルを閉じます。

28. 「同期リプライ」セクションで、「値の割当て」アイコンをクリックします。
「値の割当て」ダイアログが表示されます。

29. 「追加」をクリックします。
「値の割当て」ダイアログが表示されます。

30. 「From」セクションで、「式」を選択します。

31. 「式ビルダーの起動」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。

32. 「式」フィールドに次の式を入力し、「OK」をクリックします。

concat('DELETE-',$in.OutputParameters/db:OutputParameters/db:X_APP_ID,'.xml')

33. 「To」セクションで、「プロパティ」を選択します。

34. 「jca.file.FileName」プロパティを選択し、「OK」をクリックします。

35. 「OK」をクリックします。
図49-40に示すように、「delete」操作セクションが表示されます。

図49-40 SBLターゲット・サービスで行う削除操作

「図49-40 SBLターゲット・サービスで行う削除操作」の説明

36. 「ファイル」メニューから「すべて保存」を選択します。

37. ステップ1からステップ36を繰り返し、EBSというもう1つのターゲット・サービスおよびルーティング・ルールを指定します。
図49-41に、SBLおよびEBSターゲット・サービスの「delete」操作セクションを示します。

図49-41 SBLターゲット・サービスとEBSターゲット・サービスで行う削除操作

「図49-41 SBLターゲット・サービスとEBSターゲット・サービスで行う削除操作」の説明

更新操作のルーティング・ルールを作成する手順は、次のとおりです。

次のタスクを実行して、更新操作のルーティング・ルールを作成します。

1. 「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。

「ターゲット・タイプ」ダイアログが表示されます。

2. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

3. 「XrefCustApp」→「参照」→「SBL」の順に移動します。

4. 「SBL」を選択し、「OK」をクリックします。

5. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

6. 「新規マッパー・ファイルの作成」を選択し、COMMON_TO_SBL_UPDATE.xslと入力します。

7. 「OK」をクリックします。
「COMMON_TO_SBL_UPDATE.xsl」ファイルが表示されます。

8. 「inp1:Customers」ソース要素を「db:InputParameters」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。

9. 「OK」をクリックします。
図49-39に示すように、トランスフォーメーションが作成されます。

10. 「コンポーネント・パレット」からinp1:idとdb:XCUSTOMER_IDを接続している線まで「lookupXRef」関数をドラッグ・アンド・ドロップします。

11. 「lookupXRef」アイコンをダブルクリックします。
「関数の編集 - lookupXRef」ダイアログが表示されます。

12. 表示されたフィールドに次の情報を入力します。

- xrefLocation: "customer.xref"

- referenceColumnName: "Common"

- referenceValue: /inp1:Customers/inp1:Customer/inp1:Id

- columnName: "SBL_78"

- needException: true()

13. 「OK」をクリックします。

14. 「ファイル」メニューから、「すべて保存」を選択して、「COMMON_TO_SBL_UPDATE.xsl」ファイルを閉じます。

15. 「同期リプライ」セクションで、「ターゲット・サービス操作を参照します。」をクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

16. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

17. 「XrefCustApp」→「参照」→「Logger」の順に移動します。

18. 「Write」を選択し、「OK」をクリックします。

19. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リプライ・トランスフォーメーション・マップ」ダイアログが表示されます。

20. 「新規マッパー・ファイルの作成」を選択し、SBL_TO_COMMON_UPDATE.xslと入力します。

21. 「OK」をクリックします。
「SBL_TO_COMMON_UPDATE.xsl」ファイルが表示されます。

22. 「db:X:APP_ID」ソース要素を「db:X:APP_ID」に接続します。

23. 「ファイル」メニューから、「すべて保存」を選択して、「SBL_TO_COMMON_UPDATE.xsl」ファイルを閉じます。

24. 「同期リプライ」セクションで、「値の割当て」アイコンをクリックします。
「値の割当て」ダイアログが表示されます。

25. 「追加」をクリックします。
「値の割当て」ダイアログが表示されます。

26. 「From」セクションで、「式」を選択します。

27. 「式ビルダーの起動」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。

28. 「式」フィールドに次の式を入力し、「OK」をクリックします。

concat('UPDATE-',$in.OutputParameters/db:OutputParameters/db:X_APP_ID,'.xml')

29. 「To」セクションで、「プロパティ」を選択します。

30. 「jca.file.FileName」プロパティを選択し、「OK」をクリックします。

31. 「OK」をクリックします。
図49-42に示すように、「update」操作セクションが表示されます。

図49-42 SBLターゲット・サービスで行う更新操作

「図49-42 SBLターゲット・サービスで行う更新操作」の説明

32. 「ファイル」メニューから「すべて保存」を選択します。

33. ステップ1からステップ32を繰り返し、EBSというもう1つのターゲット・サービスおよびそのルーティング・ルールを指定します。
図49-43に、SBLおよびEBSターゲット・サービスの「update」操作セクションを示します。

図49-43 SBLターゲット・サービスとEBSターゲット・サービスで行う更新操作

「図49-43 SBLターゲット・サービスとEBSターゲット・サービスで行う更新操作」の説明

ID更新操作のルーティング・ルールを作成する手順は、次のとおりです。

次のタスクを実行して、ID更新操作のルーティング・ルールを作成します。

1. 「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。

「ターゲット・タイプ」ダイアログが表示されます。

2. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

3. 「XrefCustApp」→「参照」→「SBL」の順に移動します。

4. 「SBL」を選択し、「OK」をクリックします。

5. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

6. 「新規マッパー・ファイルの作成」を選択し、COMMON_TO_SBL_UPDATEID.xslと入力します。

7. 「OK」をクリックします。
「COMMON_TO_SBL_UPDATEID.xsl」ファイルが表示されます。

8. 「inp1:Customers」ソース要素を「db:InputParameters」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。

9. 「OK」をクリックします。
図49-39に示すように、トランスフォーメーションが作成されます。

10. 「コンポーネント・パレット」からinp1:idとdb:X_CUSTOMER_IDを接続している線まで「lookupXRef」関数をドラッグ・アンド・ドロップします。

11. 「lookupXRef」アイコンをダブルクリックします。
「関数の編集 - lookupXRef」ダイアログが表示されます。

12. 表示されたフィールドに次の情報を入力します。

- xrefLocation: customer.xref

- referenceColumnName: Common

- referenceValue: /inp1:Customers/inp1:Customer/inp1:Id

- columnName: SBL_78

- needException: false()

13. 「OK」をクリックします。

14. 「ファイル」メニューから、「すべて保存」を選択して、「COMMON_TO_SBL_UPDATEID.xsl」ファイルを閉じます。

15. 「同期リプライ」セクションで、「ターゲット・サービス操作を参照します。」をクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

16. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

17. 「XrefCustApp」→「参照」→「Logger」の順に移動します。

18. 「Write」を選択し、「OK」をクリックします。

19. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リプライ・トランスフォーメーション・マップ」ダイアログが表示されます。

20. 「リクエストをリプライ・ペイロードに含める」を選択します。

21. 「OK」をクリックします。
「SBL_TO_COMMON_UPDATEID.xsl」ファイルが表示されます。

22. 「inp1:Customers」ソース要素を「db:X:APP_ID」に接続します。

23. 「コンポーネント・パレット」から接続線上に「populateXRefRow」関数をドラッグ・アンド・ドロップします。

24. 「populateXRefRow」アイコンをダブルクリックします。
「関数の編集 - populateXRefRow」ダイアログが表示されます。

25. 表示されたフィールドに次の情報を入力します。

- xrefLocation: customer.xref

- referenceColumnName: Common

- referenceValue: $initial.Customers/inp1:Customers/inp1:Customer/inp1:Id

- columnName: SBL_78

- value: /db:OutputParameters/db:X_APP_ID

- mode: UPDATE

26. 「OK」をクリックします。

27. 「ファイル」メニューから、「すべて保存」を選択して、「SBL_TO_COMMON_UPDATEID.xsl」ファイルを閉じます。

28. 「同期リプライ」セクションで、「値の割当て」アイコンをクリックします。
「値の割当て」ダイアログが表示されます。

29. 「追加」をクリックします。
「値の割当て」ダイアログが表示されます。

30. 「From」セクションで、「式」を選択します。

31. 「式ビルダーの起動」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。

32. 「式」フィールドに次の式を入力し、「OK」をクリックします。

concat('UPDATEID-',$in.OutputParameters/db:OutputParameters/db:X_APP_ID,'.xml')

33. 「To」セクションで、「プロパティ」を選択します。

34. 「jca.file.FileName」プロパティを選択し、「OK」をクリックします。

35. 「OK」をクリックします。
図49-44に示すように、「updateid」操作セクションが表示されます。

図49-44 SBLターゲット・サービスで行うID更新操作

「図49-44 SBLターゲット・サービスで行うID更新操作」の説明

36. 「ファイル」メニューから「すべて保存」を選択します。

37. ステップ1からステップ36を繰り返し、EBSというもう1つのターゲット・サービスおよびルーティング・ルールを指定します。
図49-45に、SBLおよびEBSターゲット・サービスの「updateid」操作セクションを示します。

図49-45 SBLターゲット・サービスとEBSターゲット・サービスで行うID更新操作

「図49-45 SBLターゲット・サービスとEBSターゲット・サービスで行うID更新操作」の説明

49.8.1.10 タスク10: アプリケーション・サーバー接続の構成方法

SOAコンポジット・アプリケーションをデプロイするには、アプリケーション・サーバー接続が必要です。アプリケーション・サーバー接続の作成方法の詳細は、第43.7.1.1項「アプリケーション・サーバー接続の作成」を参照してください。

49.8.1.11 タスク11: コンポジット・アプリケーションのデプロイ方法

次の手順で、XrefCustAppコンポジット・アプリケーションをデプロイします。

- アプリケーション・デプロイメント・プロファイルの作成

- アプリケーション・サーバーへのアプリケーションのデプロイ

これらの手順の詳細は、第43.7.1項「Oracle JDeveloperでの単一のSOAコンポジットのデプロイ方法」を参照してください。

49.8.2 XrefCustAppアプリケーションの実行方法と監視方法

デプロイしたXrefCustAppアプリケーションは、XrefCustApp/sqlフォルダのinsert_sap_record.sqlファイルから任意のコマンドを使用することで実行できます。正常に完了すると、レコードがEBSおよびSBL表に挿入および更新され、Logger参照がoutput.xmlファイルに出力を書き出します。

実行中のインスタンスの監視には、次のURLにあるOracle Enterprise Manager Fusion Middleware Controlを使用できます。

http://hostname:port_number/em

ここで、hostnameは、Oracle SOA Suiteインフラストラクチャをインストールしたホストです。port_numberはサービスを実行するポートです。

49.9 1M関数の相互参照の作成および実行

相互参照ユースケースは、2つのエンド・システム(Oracle EBSインスタンスおよびSAPインスタンス)間の統合シナリオを実装します。このユースケースでは、注文はSAPからEBSに渡されます。SAPでは注文は一意のIDで表されますが、EBSではこの注文がID1とID2の2つの注文に分割されます。このシナリオはデータベース・アダプタを使用して作成されます。SAP表の更新レコードまたは新規レコードをポーリングすると、SAPインスタンスが作成されます。EBSでは、このインスタンスがプロシージャによってシミュレートされ、表に移入されます。図49-46に、このユースケースの概要を示します。

図49-46 SOAコンポジット・エディタのXrefOrderAppユースケース

「図49-46 SOAコンポジット・エディタのXrefOrderAppユースケース」の説明

この項で説明するサンプル・ファイルをダウンロードするには、Oracle SOA Suiteサンプル・ページを参照してください。

49.9.1 ユース-ケースの作成方法

この項では、SOAコンポジット・アプリケーションを作成、構築およびデプロイするための設計時タスクを説明します。これらのタスクは、表示されている順番で実行する必要があります。

49.9.1.1 タスク1: Oracle Databaseおよびデータベース・アダプタの構成方法

Oracle Databaseおよびデータベース・アダプタを構成する手順は、次のとおりです。

1. このユースケースには、SCOTTデータベース・アカウントとパスワードTIGERが必要です。SCOTTアカウントのロックが解除されている必要があります。
SYSDBAでログインしてから、XrefOrderApp1M/sqlフォルダにあるsetup_user.sqlスクリプトを実行してアカウントのロックを解除できます。

2. XrefOrderApp1M/sqlフォルダにあるcreate_schema.sqlスクリプトを実行して、このユースケースに必要な表を作成します。

3. XrefOrderApp1M/sqlフォルダにあるcreate_app_procedure.sqlスクリプトを実行して、この統合に組み込む様々なアプリケーションをシミュレートするプロシージャを作成します。

4. Oracle_Home/rcu/integration/soainfra/sql/xref/フォルダにあるcreateschema_xref_oracle.sqlスクリプトを実行し、ランタイムの相互参照データを格納する相互参照表を作成します。

5. ra.xmlファイルとweblogic-ra.xmlファイルを、$BEAHOME/META-INFから、使用しているコンピュータで新規作成したMETA-INFディレクトリにコピーします。

6. weblogic-ra.xmlファイルを編集します。このファイルは、SOAアプリケーションの$BEAHOME/src/oracle/tip/adapter/db/test/deploy/weblogic/META-INFフォルダにあります。

- 次のように、プロパティをxADataSourceNameに変更します。

<property>
<name>xADataSourceName</name>
<value>jdbc/DBConnection1</value>
</property>

- jndi-nameを次のように変更します。

<jndi-name> eis/DB/DBConnection1</jndi-name>

このサンプルではeis/DB/DBConnection1を使用して新規メッセージのSAP表をポーリングし、Oracle EBSおよびSiebelインスタンスをシミュレートするプロシージャに接続します。

7. ra.xmlファイルとweblogic-ra.xmlファイルをRARファイルとしてパッケージ化し、Oracle WebLogic Server管理コンソールを使用してそのRARファイルをデプロイします。

8. Oracle WebLogic Server管理コンソールを使用して、次の値を持つデータ・ソースを作成します。

- jndi-name=jdbc/DBConnection1

- user=scott

- password=tiger

- url=jdbc:oracle:thin:@host:port:service

- connection-factory factory-class=oracle.jdbc.pool.OracleDataSource

9. Oracle WebLogic Server管理コンソールを使用して、次の値を持つデータ・ソースを作成します。

- jndi-name=jdbc/xref

- user=scott

- password=tiger

- url=jdbc:oracle:thin:@host:port:service

- connection-factory factory-class=oracle.jdbc.pool.OracleDataSource

49.9.1.2 タスク2: Oracle JDeveloperのアプリケーションおよびプロジェクトの作成方法

Oracle JDeveloperのアプリケーションおよびプロジェクトを作成する手順は、次のとおりです。

1. Oracle JDeveloperで「ファイル」をクリックし、「新規」を選択します。
「新規ギャラリ」ダイアログが表示されます。

2. 「新規ギャラリ」で「一般」ノードを開き、「アプリケーション」カテゴリを選択します。

3. 「項目」リストで「SOAアプリケーション」を選択し、「OK」をクリックします。
SOAアプリケーションの作成ウィザードが表示されます。

4. 「アプリケーション名」フィールドでXRefOrderAppと入力し、「次へ」をクリックします。
「プロジェクトの名前付け」ページが表示されます。

5. 「プロジェクト名」フィールドにXRefOrderAppと入力し、「次へ」をクリックします。
「SOA設定の構成」ページが表示されます。

6. 「コンポジット・テンプレート」リストで「空のコンポジット」を選択し、「終了」をクリックします。
Oracle JDeveloperの「アプリケーション・ナビゲータ」は新規のアプリケーションやプロジェクトで更新され、「SOAコンポジット・エディタ」には空白のプロジェクトがあります。

7. 「ファイル」メニューから「すべて保存」を選択します。

49.9.1.3 タスク3: 相互参照の作成方法

ユースケース用のアプリケーションおよびプロジェクトを作成した後は、相互参照表を作成する必要があります。

相互参照表を作成する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」で、「XRefOrderApp」プロジェクトを右クリックし、「新規」を選択します。

2. 「新規ギャラリ」ダイアログで「SOA層」ノードを開き、「トランスフォーメーション」カテゴリを選択します。

3. 「項目」リストで「相互参照(XREF)」を選択し、「OK」をクリックします。
「相互参照(XREF)の作成」ダイアログが表示されます。

4. 「ファイル名」フィールドにorder.xrefと入力します。

5. 「エンド・システム」フィールドで、SAP_05およびEBS_i75と入力します。

6. 「OK」をクリックします。
相互参照エディタが表示されます。

7. 「追加」をクリックします。
新しい行が追加されます。

8. 「エンド・システム」名としてCOMMONを入力します。
図49-47に示すように、相互参照エディタが表示されます。

図49-47 顧客の相互参照

「図49-47 顧客の相互参照」の説明

9. 「ファイル」メニューから、「すべて保存」を選択して、相互参照エディタを閉じます。

49.9.1.4 タスク4: データベース・アダプタ・サービスの作成方法

データベース・アダプタ・サービスを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で「SOA」を選択します。

2. 「データベース・アダプタ」を選択し、「公開されたサービス」スイムレーンにドラッグします。
アダプタ構成ウィザードの「ようこそ」ページが表示されます。

3. 「次へ」をクリックします。
「サービス名」ページが表示されます。

4. 「サービス名」フィールドに、SAPと入力します。

5. 「次へ」をクリックします。
「サービス接続」ページが表示されます。

6. 「接続」フィールドで、「DBConnection1」を選択します。

7. 「JNDI名」フィールドに、eis/DB/DBConnection1と入力します。

8. 「次へ」をクリックします。
「操作タイプ」ページが表示されます。

9. 「表の新規レコードまたは更新されたレコードをポーリング」を選択し、「次へ」をクリックします。
「表の選択」ページが表示されます。

10. 「表のインポート」をクリックします。
「表のインポート」ダイアログが表示されます。

11. 「スキーマ」から「Scott」を選択します。

12. 「名前フィルタ」フィールドで%SAP%と入力し、「問合せ」をクリックします。
「選択可能」フィールドに「SAP_05」表名が移入されます。

13. 「SAP_05」をダブルクリックします。
「選択済」フィールドに「SAP_05」が移入されます。

14. 「OK」をクリックします。
ここで「表の選択」ページに「SAP_05」表が含まれます。

15. 「SAP_05」を選択し、「次へ」をクリックします。
「主キーの定義」ページが表示されます。

16. 「ID」を主キーとして選択し、「次へ」をクリックします。
「リレーションシップ」ページが表示されます。

17. 「次へ」をクリックします。
「属性のフィルタ処理」ページが表示されます。

18. 「次へ」をクリックします。
「読取り後」ページが表示されます。

19. 「[SAP_05]表のフィールドの更新 (論理削除)」を選択し、「次へ」をクリックします。
「論理削除」ページが表示されます。

20. 「論理削除」フィールドで、「LOGICAL_DEL」を選択します。

21. 「読取り値」フィールドで、Yと入力します。

22. 「未読取り値」フィールドで、Nと入力します。
図49-16は、アダプタ構成ウィザードの「論理削除」ページを示しています。

23. 「次へ」をクリックします。
「ポーリング・オプション」ページが表示されます。

24. 「次へ」をクリックします。
「選択条件の定義」ページが表示されます。

25. 「次へ」をクリックします。
「詳細オプション」ページが表示されます。

26. 「次へ」をクリックします。
「終了」ページが表示されます。

27. 「終了」をクリックします。
図49-48に示すように、SAPという名前のデータベース・アダプタ・サービスが作成されます。

図49-48 SOAコンポジット・エディタのSAPデータベース・アダプタ・サービス

「図49-48 SOAコンポジット・エディタのSAPデータベース・アダプタ・サービス」の説明

28. 「ファイル」メニューから「すべて保存」を選択します。

49.9.1.5 タスク5: EBS外部参照の作成方法

EBS外部参照を作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」で「SOA」を選択します。

2. 「データベース・アダプタ」を選択し、「外部参照」スイムレーンにドラッグします。
アダプタ構成ウィザードの「ようこそ」ページが表示されます。

3. 「次へ」をクリックします。
「サービス名」ページが表示されます。

4. 「サービス名」フィールドに、EBSと入力します

5. 「次へ」をクリックします。
「サービス接続」ページが表示されます。

6. 「接続」フィールドで、「DBConnection1」を選択します。

7. 「JNDI名」フィールドに、eis/DB/DBConnection1と入力します。

8. 「次へ」をクリックします。
「操作タイプ」ページが表示されます。

9. 「ストアド・プロシージャまたはファンクションの呼出し」を選択し、「次へ」をクリックします。
「ストアド・プロシージャの指定」ページが表示されます。

10. 「スキーマ」から「Scott」を選択します。

11. 「参照」をクリックします。
「ストアド・プロシージャ」ダイアログが表示されます。

12. 図49-49に示すように、「POPULATE_APP_INSTANCE_IM」を選択します。

図49-49 「ストアド・プロシージャ」ダイアログ

「図49-49 「ストアド・プロシージャ」ダイアログ」の説明

13. 「OK」をクリックします。
図49-50に示すように、「ストアド・プロシージャの指定」ページが表示されます。

図49-50 アダプタ構成ウィザードの「ストアド・プロシージャの指定」ページ

「図49-50 アダプタ構成ウィザードの「ストアド・プロシージャの指定」ページ」の説明

14. 「次へ」をクリックします。
「詳細オプション」ページが表示されます。

15. 「次へ」をクリックします。「終了」ページが表示されます。

16. 「終了」をクリックします。
図49-51に、SOAコンポジット・エディタのEBS参照を示します。

図49-51 SOAコンポジット・エディタのEBS参照

「図49-51 SOAコンポジット・エディタのEBS参照」の説明

17. 「ファイル」メニューから「すべて保存」を選択します。

49.9.1.6 タスク6: Loggerファイル・アダプタ外部参照の作成方法

Loggerファイル・アダプタ外部参照を作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「SOA」を選択します。

2. 「ファイル・アダプタ」を選択し、「外部参照」スイムレーンにドラッグします。
アダプタ構成ウィザードの「ようこそ」ページが表示されます。

3. 「次へ」をクリックします。
「サービス名」ページが表示されます。

4. 「サービス名」フィールドに、Loggerと入力します。

5. 「次へ」をクリックします。
「アダプタ・インタフェース」ページが表示されます。

6. 「操作およびスキーマから定義(後で指定)」をクリックします。
「操作」ページが表示されます。

7. 「操作タイプ」フィールドで、「Write File」を選択します。

8. 「次へ」をクリックします。
「ファイル構成」ページが表示されます。

9. 「発信ファイルのディレクトリ(物理パス)」フィールドに、ファイルを書き込むディレクトリの名前を入力します。

10. 「ファイル・ネーミング規則」フィールドで、output.xmlと入力し、「次へ」をクリックします。
「メッセージ」ページが表示されます。

11. 「検索」をクリックします。
「タイプ・チューザ」ダイアログが表示されます。

12. 「タイプ・エクスプローラ」→「プロジェクトのスキーマ・ファイル」→「SCOTT_POPULATE_APP_INSTANCE_1M.xsd」の順に移動し、「OutputParameters」を選択します。

13. 「OK」をクリックします。

14. 「次へ」をクリックします。
「終了」ページが表示されます。

15. 「終了」をクリックします。
図49-52に、SOAコンポジット・エディタのLogger参照を示します。

図49-52 SOAコンポジット・エディタのLogger参照

「図49-52 SOAコンポジット・エディタのLogger参照」の説明

16. 「ファイル」メニューから「すべて保存」を選択します。

49.9.1.7 タスク7: Oracle Mediatorサービス・コンポーネントの作成方法

Oracle Mediatorサービス・コンポーネントを作成する手順は、次のとおりです。

1. 「コンポーネント・パレット」から「メディエータ」アイコンをドラッグし、「コンポーネント」スイムレーンにドロップします。
「メディエータの作成」ダイアログが表示されます。

2. 「テンプレート」リストから、「インタフェースを後で定義」を選択します。

3. 「OK」をクリックします。
Mediator2という名前のOracle Mediatorが作成されます。

4. 図49-53に示すように、「SAP」サービスを「Mediator2」に接続します。

図49-53 SAPサービスのMediator2への接続

「図49-53 SAPサービスのMediator2への接続」の説明

5. 「ファイル」メニューから「すべて保存」を選択します。

6. 「コンポーネント・パレット」から「メディエータ」アイコンをドラッグし、SOAコンポジット・エディタの「コンポーネント」セクションにドロップします。
「メディエータの作成」ダイアログが表示されます。

7. 「テンプレート」リストから、「WSDLからのインタフェース定義」を選択します。

8. 「SOAPバインディングを持つコンポジット・サービスの作成」の選択を解除します。

9. 「WSDLファイル」フィールドの右側にある「既存のWSDLを検索します。」をクリックします。

10. Common.wsdlファイルに移動して選択します。Common.wsdlファイルは、Samplesフォルダにあります。

11. 「OK」をクリックします。

12. 「OK」をクリックします。
Commonという名前のOracle Mediatorが作成されます。

49.9.1.8 タスク8: Oracle Mediatorコンポーネントのルーティング・ルールの指定方法

次の操作のルーティング・ルールを指定する必要があります。

- 挿入

- 更新

挿入操作のルーティング・ルールを作成する手順は、次のとおりです。

1. 「Mediator2」Oracle Mediatorをダブルクリックします。
メディエータ・エディタが表示されます。

2. 「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

3. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

4. 「XrefOrderApp」→「メディエータ」→「Common」→「サービス」→「Common」の順に移動します。

5. 「insert」を選択し、「OK」をクリックします。

6. 「フィルタ」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。

7. 「式」フィールドに、次の式を入力します。

$in.Sap05Collection/top:Sap05Collection/top:Sap05/top:operation='INSERT'

8. 「OK」をクリックします。

9. 「トランスフォーメーションの使用」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

10. 「新規マッパー・ファイルの作成」を選択し、SAP_TO_COMMON_INSERT.xslと入力します。

11. 「OK」をクリックします。
「SAP_TO_COMMON_INSERT.xsl」ファイルが表示されます。

12. 「top:SAP05」ソース要素を「inp1:Order」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。

13. 「自動マップ中」オプション・リストから、「祖先名を考慮した要素の一致」の選択を解除します。

14. 「OK」をクリックします。
図49-54に示すように、トランスフォーメーションが作成されます。

図49-54 SAP_TO_COMMON_INSERT.xslトランスフォーメーション

「図49-54 SAP_TO_COMMON_INSERT.xslトランスフォーメーション」の説明

15. 「コンポーネント・パレット」から、「拡張」を選択します。

16. 「XREF Functions」を選択します。

17. 「コンポーネント・パレット」からtop:id要素とinp1:id要素を接続している線まで「populateXRefRow1M」関数をドラッグ・アンド・ドロップします。

18. 「populateXRefRow1M」アイコンをダブルクリックします。
「関数の編集 - populateXRefRow」ダイアログが表示されます。

19. 「xrefLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。

20. 「Order.xref」を選択し、「OK」をクリックします。

21. 「referenceColumnName」フィールドで"SAP_05"と入力するか、または「検索」をクリックして列名を選択します。

22. 「referenceValue」列に、/top:Sap05Collection/top:Sap05/top:idと入力します。

23. 「columnName」フィールドで"Common"と入力するか、「検索」をクリックして列名を選択します。

24. 「value」フィールドに、orcl:generate-guid()と入力します。

25. 「mode」フィールドで"Add"と入力するか、「検索」をクリックして、このモードを選択します。
図49-55は、移入後の「関数の編集 – populateXRefRow1M」ダイアログを示しています。

図49-55 「関数の編集 – populateXRefRow1M」ダイアログ: XrefOrderAppユースケース

「図49-55 「関数の編集 – populateXRefRow1M」ダイアログ: XrefOrderAppユースケース」の説明

26. 「OK」をクリックします。

27. 「ファイル」メニューから、「すべて保存」を選択して、「SAP_TO_COMMON_INSERT.xsl」ファイルを閉じます。
図49-56に示すように、「ルーティング・ルール」セクションが表示されます。

図49-56 挿入操作を行う「ルーティング・ルール」セクション

「図49-56 挿入操作を行う「ルーティング・ルール」セクション」の説明

更新操作のルーティング・ルールを作成する手順は、次のとおりです。

次のタスクを実行して、更新操作のルーティング・ルールを作成します。

1. 「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

2. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

3. 「XrefOrderApp」→「メディエータ」→「Common」→「サービス」→「Common」の順に移動します。

4. 「update」を選択し、「OK」をクリックします。

5. 「フィルタ」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。

6. 「式」フィールドに、次の式を入力します。

$in.Sap05Collection/top:Sap05Collection/top:Sap05/top:operation='UPDATE'

7. 「OK」をクリックします。

8. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

9. 「新規マッパー・ファイルの作成」を選択し、SAP_TO_COMMON_UPDATE.xslと入力します。

10. 「OK」をクリックします。
「SAP_TO_COMMON_UPDATE.xsl」ファイルが表示されます。

11. 「top:Sap05」ソース要素を「inp1:Order」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。

12. 「OK」をクリックします。

13. 「コンポーネント・パレット」から、「拡張」を選択します。

14. 「XREF Functions」を選択します。

15. 「コンポーネント・パレット」からtop:id要素とinp1:id要素を接続している線まで「lookupXRef」関数をドラッグ・アンド・ドロップします。

16. 「lookupXRef」アイコンをダブルクリックします。
「関数の編集 - lookupXRef」ダイアログが表示されます。

17. 「xrefLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。

18. 「customer.xref」を選択し、「OK」をクリックします。

19. 「referenceColumnName」フィールドで"SAP_05"と入力するか、または「検索」をクリックして列名を選択します。

20. 「referenceValue」列に、/top:Sap05Collection/top:Sap05/top:idと入力します。

21. 「columnName」フィールドで"COMMON"と入力するか、「検索」をクリックして列名を選択します。

22. 「needException」フィールドでtrue()と入力するか、「検索」をクリックして、このモードを選択します。
図49-57は、移入後の「関数の編集 – lookupXRef」ダイアログを示しています。

図49-57 「関数の編集 – lookupXRef」ダイアログ: XRefOrderAppユースケース

「図49-57 「関数の編集 – lookupXRef」ダイアログ: XRefOrderAppユースケース」の説明

23. 「OK」をクリックします。

24. 「ファイル」メニューから、「すべて保存」を選択して、「SAP_TO_COMMON_UPDATE.xsl」ファイルを閉じます。
図49-58に示すように、「ルーティング・ルール」セクションが表示されます。

図49-58 挿入操作と更新操作

「図49-58 挿入操作と更新操作」の説明

49.9.1.9 タスク9: 「Common」Oracle Mediatorのルーティング・ルールの指定方法

「Common」Oracle Mediatorの次の操作についてルーティング・ルールを指定する必要があります。

- 挿入

- 更新

挿入操作のルーティング・ルールを作成する手順は、次のとおりです。

1. 「Common」Oracle Mediatorをダブルクリックします。
メディエータ・エディタが表示されます。

2. 「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

3. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

4. 「XrefOrderApp」→「参照」→「EBS」の順に移動します。

5. 「EBS」を選択して、「OK」をクリックします。

6. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

7. 「新規マッパー・ファイルの作成」を選択し、COMMON_TO_EBS_INSERT.xslと入力します。

8. 「OK」をクリックします。
「COMMON_TO_EBS_INSERT.xsl」ファイルが表示されます。

9. 「inp1:Order」ソース要素を「db:InputParameters」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。

10. 右側の「db:X_APP_INSTANCE」ノードの値をEBS_i75に設定します。
「OK」をクリックします。

図49-59に示すように、トランスフォーメーションが作成されます。

図49-59 COMMON_TO_EBS_INSERT.xslトランスフォーメーション

「図49-59 COMMON_TO_EBS_INSERT.xslトランスフォーメーション」の説明

11. 「ファイル」メニューから、「すべて保存」を選択して、「COMMON_TO_EBS_INSERT.xsl」ファイルを閉じます。

12. 「同期リプライ」セクションで、「ターゲット・サービス操作を参照します。」をクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

13. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

14. 「XrefOrderApp」→「参照」→「Logger」の順に移動します。

15. 「Write」を選択し、「OK」をクリックします。

16. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リプライ・トランスフォーメーション・マップ」ダイアログが表示されます。

17. 「新規マッパー・ファイルの作成」を選択し、EBS_TO_COMMON_INSERT.xslと入力します。

18. 「リクエストをリプライ・ペイロードに含める」を選択します。

19. 「OK」をクリックします。
「EBS_TO_COMMON_INSERT.xsl」ファイルが表示されます。

20. 「inp1:Order」ソース要素を「db:X:APP_ID」に接続します。

21. 「コンポーネント・パレット」から接続線上に「populateXRefRow」関数をドラッグ・アンド・ドロップします。

22. 「populateXRefRow」アイコンをダブルクリックします。
「関数の編集 - populateXRefRow」ダイアログが表示されます。

23. 表示されたフィールドに次の情報を入力します。

- xrefLocation: order.xref

- referenceColumnName: Common

- referenceValue: $initial.Customers/inp1:Customers/inp1:Order/inp1:Id

- columnName: EBS_75

- value: /db:OutputParameters/db:X_APP_ID

- mode: LINK

24. 「OK」をクリックします。
図49-60に示すように、「EBS_TO_COMMON_INSERT.xsl」ファイルが表示されます。

図49-60 EBS_TO_COMMON_INSERT.xslトランスフォーメーション

「図49-60 EBS_TO_COMMON_INSERT.xslトランスフォーメーション」の説明

25. 「ファイル」メニューから、「すべて保存」を選択して、「EBS_TO_COMMON_INSERT.xsl」ファイルを閉じます。

26. 「同期リプライ」セクションで、「値の割当て」アイコンをクリックします。
「値の割当て」ダイアログが表示されます。

27. 「追加」をクリックします。
「値の割当て」ダイアログが表示されます。

28. 「From」セクションで、「式」を選択します。

29. 「式ビルダーの起動」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。

30. 「式」フィールドに次の式を入力し、「OK」をクリックします。

concat('INSERT-',$in.OutputParameters/db:OutputParameters/db:X_APP_ID,'.xml')

31. 「To」セクションで、「プロパティ」を選択します。

32. 「jca.file.FileName」プロパティを選択し、「OK」をクリックします。

33. 「OK」をクリックします。
図49-61に示すように、「insert」操作セクションが表示されます。

図49-61 EBSターゲット・サービスで行う挿入操作

「図49-61 EBSターゲット・サービスで行う挿入操作」の説明

34. 「ファイル」メニューから「すべて保存」を選択します。

更新操作のルーティング・ルールを作成する手順は、次のとおりです。

次のタスクを実行して、更新操作のルーティング・ルールを作成します。

1. 「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

2. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

3. 「XrefOrderApp」→「参照」→「EBS」の順に移動します。

4. 「EBS」を選択して、「OK」をクリックします。

5. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

6. 「新規マッパー・ファイルの作成」を選択し、COMMON_TO_EBS_UPDATE.xslと入力します。

7. 「OK」をクリックします。
「COMMON_TO_EBS_UPDATE.xsl」ファイルが表示されます。

8. 「inp1:Orders」ソース要素を「db:InputParameters」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。

9. 「OK」をクリックします。
図49-39に示すように、トランスフォーメーションが作成されます。

10. 「コンポーネント・パレット」からinp1:idとdb:X_APP_IDを接続している線まで「lookupXRef」関数をドラッグ・アンド・ドロップします。

11. 「lookupXRef」アイコンをダブルクリックします。
「関数の編集 - lookupXRef」ダイアログが表示されます。

12. 表示されたフィールドに次の情報を入力します。

- xrefLocation: order.xref

- referenceColumnName: Common

- referenceValue: /inp1:Customers/inp1:Order/inp1:Id

- columnName: EBS_i75

- needException: true()

13. 「OK」をクリックします。

14. 「ファイル」メニューから、「すべて保存」を選択して、「COMMON_TO_EBS_UPDATE.xsl」ファイルを閉じます。

15. 「同期リプライ」セクションで、「ターゲット・サービス操作を参照します。」をクリックします。
「ターゲット・タイプ」ダイアログが表示されます。

16. 「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。

17. 「XrefOrderApp」→「参照」→「Logger」の順に移動します。

18. 「Write」を選択し、「OK」をクリックします。

19. 「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リプライ・トランスフォーメーション・マップ」ダイアログが表示されます。

20. 「新規マッパー・ファイルの作成」を選択し、EBS_TO_COMMON_UPDATE.xslと入力します。

21. 「OK」をクリックします。
「EBS_TO_COMMON_UPDATE.xsl」ファイルが表示されます。

22. 「db:X:APP_ID」ソース要素を「db:X:APP_ID」に接続します。

23. 「ファイル」メニューから、「すべて保存」を選択して、「EBS_TO_COMMON_UPDATE.xsl」ファイルを閉じます。

24. 「同期リプライ」セクションで、「値の割当て」アイコンをクリックします。
「値の割当て」ダイアログが表示されます。

25. 「追加」をクリックします。
「値の割当て」ダイアログが表示されます。

26. 「From」セクションで、「式」を選択します。

27. 「式ビルダーの起動」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。

28. 「式」フィールドに次の式を入力し、「OK」をクリックします。

concat('UPDATE-',$in.OutputParameters/db:OutputParameters/db:X_APP_ID,'.xml')

29. 「To」セクションで、「プロパティ」を選択します。

30. 「jca.file.FileName」プロパティを選択し、「OK」をクリックします。

31. 「OK」をクリックします。
図49-62に示すように、「update」操作セクションが表示されます。

図49-62 EBSターゲット・サービスで行う更新操作

「図49-62 EBSターゲット・サービスで行う更新操作」の説明

32. 「ファイル」メニューから「すべて保存」を選択します。

49.9.1.10 タスク10: アプリケーション・サーバー接続の構成方法

SOAコンポジット・アプリケーションをデプロイするには、アプリケーション・サーバー接続が必要です。アプリケーション・サーバー接続の作成方法の詳細は、第43.7.1.1項「アプリケーション・サーバー接続の作成」を参照してください。

49.9.1.11 タスク11: コンポジット・アプリケーションのデプロイ方法

次の手順で、XrefOrderAppコンポジット・アプリケーションをアプリケーション・サーバーにデプロイします。

- アプリケーション・デプロイメント・プロファイルの作成

- アプリケーション・サーバーへのアプリケーションのデプロイ

これらの手順の詳細は、第43.7.1項「Oracle JDeveloperでの単一のSOAコンポジットのデプロイ方法」を参照してください。

50 コンポジット・センサーの定義

この章では、SOAコンポジット・アプリケーションでメッセージにトラッキング可能なフィールドを実装する手段を提供する、コンポジット・センサーを定義する方法について説明します。ここでは、ビジネス・イベントをサブスクライブしているバインディング・コンポーネントおよびサービス・コンポーネント上でセンサーを定義する方法について説明します。また、制限についても説明します。

この章には次の項が含まれます:

- 第50.1項「コンポジット・センサーの概要」

- 第50.2項「コンポジット・センサーの追加」

- 第50.3項「実行時のコンポジット・センサー・データの監視」

BPELプロセスにおけるアクティビティ、フォルト、変数の各センサーの詳細は、第18項「Oracle BPEL Process Managerセンサーの使用」を参照してください。

50.1 コンポジット・センサーの概要

コンポジット・センサーは、メッセージにトラッキング可能なフィールドを実装する手段を提供します。コンポジット・センサーを使用すると、次のタスクを実行できます。

- 受信メッセージおよび送信メッセージを監視できます。

- Oracle Enterprise Manager Fusion Middleware Controlで、SOAコンポジット・アプリケーションの「インスタンス」ページにある検索ユーティリティで、コンポジット・センサーの詳細を指定できます。この処理によって、特定のインスタンスを検索できます。

- Oracle Enterprise Manager Fusion Middleware Controlで、SOAインフラストラクチャの「インスタンス」ページにある検索ユーティリティで、SOAコンポジット・アプリケーションのインスタンスに含まれるコンポジット・センサーを指定します。

- 受信メッセージおよび送信メッセージから計算されたJMSデータをパブリッシュします。

- ビジネス・イベント・サブスクリプションによって開始されたコンポジット・インスタンスを追跡します。

コンポジット・センサーは、Oracle JDeveloperでビジネス・イベント・サブスクリプションがあるサービス・バインディング・コンポーネントおよび参照バインディング・コンポーネント、またはサービス・コンポーネントに定義します。この機能は、BPELプロセスの変数センサーに類似しています。実行時に、コンポジット・センサー・データはデータベースに維持されます。

Oracle Enterprise Manager Fusion Middleware Controlでのコンポジット・センサーの検索の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のSOAインフラストラクチャ・レベルでのSOAコンポジット・アプリケーション・インスタンスの監視と削除に関する項およびアプリケーション・ホーム・ページからのSOAコンポジット・アプリケーション・インスタンスの監視と削除に関する項を参照してください。

50.1.1 コンポジット・センサー使用上の制限

コンポジット・センサーの使用に関して、次の制限に注意してください。

- 関数はペイロードでのみ使用できます。たとえば、concat()などのXPath関数はプロパティでは使用できません。

- 式を使用するコンポジット・センサーは常に、値を文字列として取得します。この処理のため、検索で使用できるのはlike比較演算子のみです。また、値が数値の場合でも、他の<、>、=など論理演算子やこれらの組合せを使用することはできません。

- コンポジット・センサーでは、Enterprise ManagerおよびJMSの2つのタイプのセンサー・アクションのみがサポートされます。

- Webサービス・バインディングに対しては、ヘッダー・ベースのセンサーのみがサポートされています。

- Oracle B2B、サービス・データ・オブジェクト(SDO)、Web Services Invocation Framework (WSIF)およびOracle Business Activity Monitoringのバインディングに対するセンサー・アクションは、サポートされていません。

- センサー値の型は次のいずれかになります。

1. 次のスカラー型

- STRING

- NUMBER

- DATE

- DATE_TIME

2. 複合XML要素

- フィルタリング用のXPath式を作成する場合は、ノードセットを返すすべての関数を文字列として明示的にキャストする必要があります。

xpath20:upper-case(string($in.request/inp1:updateOrderStatus/inp1:orderStatus) ) = "PENDING"

- センサーは、ビジネス・イベントをサブスクライブするサービス・コンポーネント上でのみ構成できます。サブスクライブされたビジネス・イベントがサービス・コンポーネントに関連付けられていない場合、センサーを構成するオプションは使用できません。

- ビジネス・イベントを公開するサービス・コンポーネント上でセンサーを構成することはできません。

- ビジネス・イベント・ヘッダーに基づいたセンサーは許可されません(ペイロードのみが許可されます)。

- PL/SQLサブスクリプションはサポートされていません。

50.2 コンポジット・センサーの追加

SOAコンポジット・エディタで、SOAコンポジット・アプリケーションの次のコンポーネントにセンサーを追加します。

- サービス・バインディング・コンポーネントまたは参照バインディング・コンポーネント

- ビジネス・イベントをサブスクライブしているBPELプロセスやOracle Mediatorなどのサービス・コンポーネント

50.2.1 コンポジット・センサーの追加方法

コンポジット・センサーを追加する手順は、次のとおりです。

1. 次のいずれかのオプションを使用して、SOAコンポジット・エディタでコンポジット・センサーを追加します。

1. 「公開されたサービス」または「外部参照」スイムレーン、あるいはビジネス・イベントをサブスクライブしているサービス・コンポーネントで特定のサービスまたは参照バインディング・コンポーネントを右クリックします。ビジネス・イベントをサブスクライブしているサービス・コンポーネントには、サブスクライブ済という語が含まれます。

2. 「センサーの構成」を選択します。

注意:

「センサーの構成」オプションが表示されるためには、サービス・コンポーネントにすでにビジネス・イベントがサブスクライブされている必要があります。

バインディング・コンポーネントを選択すると、図50-1に示す詳細が「コンポジット・センサー」ダイアログに表示されます。この例では、サービス・バインディング・コンポーネントが選択されています。

図50-1 選択したバインディング・コンポーネントの「コンポジット・センサー」ダイアログ

「図50-1 選択したバインディング・コンポーネントの「コンポジット・センサー」ダイアログ」の説明

サービス・コンポーネントを選択すると、図50-2に示す詳細が「コンポジット・センサー」ダイアログに表示されます。

図50-2 選択したサービス・コンポーネントの「コンポジット・センサー」ダイアログ

「図50-2 選択したサービス・コンポーネントの「コンポジット・センサー」ダイアログ」の説明

3. バインディング・コンポーネントまたはサービス・コンポーネントを選択し、「追加」アイコンをクリックします。

または、

1. 図50-3に示すように、SOAコンポジット・エディタ上部にある「コンポジット・センサー」アイコンをクリックします。

図50-3 「コンポジット・センサー」アイコン

「図50-3 「コンポジット・センサー」アイコン」の説明

図50-4に示すように、SOAコンポジット・アプリケーションの「コンポジット・センサー」ダイアログが表示されます。このオプションでは、SOAコンポジット・アプリケーションの、サブスクライブされたビジネス・イベントがあるすべてのサービスおよび参照のバインディング・コンポーネントとサービス・コンポーネントが表示されます。

図50-4 「コンポジット・センサー」ダイアログ

「図50-4 「コンポジット・センサー」ダイアログ」の説明

2. コンポジット・センサーを追加するサービス、参照またはビジネス・イベントを選択し、「追加」アイコンをクリックします。

サービスなどのバインディング・コンポーネントを選択すると、図50-5に示すように「コンポジット・センサーの作成」ダイアログが表示されます。

図50-5 サービス・バインディング・コンポーネントの「コンポジット・センサーの作成」ダイアログ

「図50-5 サービス・バインディング・コンポーネントの「コンポジット・センサーの作成」ダイアログの説明」

ビジネス・イベント・サブスクリプションがあるサービス・コンポーネントを選択すると、図50-6に示すように「コンポジット・センサーの作成」ダイアログが表示されます。

図50-6 サービス・コンポーネントの「コンポジット・センサーの作成」ダイアログ

「図50-6 サービス・コンポーネントの「コンポジット・センサーの作成」ダイアログの説明」

2. 表50-1に記載されている詳細を入力します。

表50-1 「コンポジット・センサーの作成」ダイアログ

名前

説明

名前

コンポジット・センサーの名前を入力します。「式」フィールドの「編集」アイコンを使用可能にするには、名前を入力する必要があります。

サービス

サービス名が表示されます。このフィールドが表示されるのは、サービス・バインディング・コンポーネントに対するコンポジット・センサーを作成している場合のみです。このフィールドは編集できません。

サービス・センサーは、サービスが外部または別のコンポジット・アプリケーションから受信するメッセージを監視します。

参照

参照名が表示されます。このフィールドが表示されるのは、参照バインディング・コンポーネントに対するコンポジット・センサーを作成している場合のみです。このフィールドは編集できません。

参照センサーは、参照が外部または別のコンポジット・アプリケーションに送信するメッセージを監視します。

操作

サービスまたは参照のポート・タイプに対する操作を選択します。このフィールドは、サービスまたは参照バインディング・コンポーネントに対してのみ表示されます。

イベント

サービス・コンポーネントの名前が表示されます。このフィールドが表示されるのは、サービス・コンポーネントに対するコンポジット・センサーを作成している場合のみです。このフィールドは編集できません。

イベント・センサーはビジネス・イベントによって開始されたコンポジット・インスタンスを追跡します。ビジネス・イベントごとに複数のセンサーを作成できます。

イベント・タイプ

「サブスクライブ」ビジネス・イベント・タイプが表示されます。このフィールドは編集できません。パブリッシュ・ビジネス・イベント・タイプはサポートされていません。

式

「編集」アイコンをクリックすると、作成する式のタイプを選択するドロップダウン・リストが起動します。

- 変数: 変数に対する式の値を作成する場合に選択します。手順は、第50.2.1.1項「変数の追加方法」を参照してください。

- 式: XPath式を作成するための「式ビルダー」ダイアログを起動する場合に選択します。手順は、第50.2.1.2項「式の追加方法」を参照してください。

- プロパティ: 正規化されたメッセージ・ヘッダー・プロパティに対する式の値を作成する場合に選択します。これらは、invokeアクティビティ、receiveアクティビティ、replyアクティビティ、scopeアクティビティのOnEventブランチ(BPEL 2.0の場合)、およびpickアクティビティとscopeアクティビティ(BPEL 2.0の場合)のonMessageブランチの「プロパティ」タブの下に表示される同じプロパティです。手順は、第50.2.1.3項「プロパティの追加方法」を参照してください。

フィルタ

「編集」アイコンをクリックすると、式用のXPathフィルタを作成する「式ビルダー」ダイアログが起動します。このフィールドを使用可能にするには、最初に式を作成する必要があります。

たとえば、10,000を超える発注金額をトラッキングする式を作成できます。

$in.inDict/tns:inDict/ns2:KeyValueOfstringstring/ns2:Value > 10000.00

コンポジット・センサー・アクション

サポートされているセンサー・アクションを表示します。この機能を使用すると、ランタイム・センサー・データを格納できます。「Enterprise Manager」と「JMSキュー」または「JMSトピック」のいずれかとの両方を選択できます。

- Enterprise Manager
ランタイム・センサー・データをOracle Enterprise Manager Fusion Middleware ControlからSOAコンポジット・アプリケーションの「インスタンス」タブで検索できるようにするために選択します。この選択は、前のリリースのDBSensorActionの選択と同じです。

注意: 「Enterprise Manager」が選択されている場合、センサー・データはトラッキング可能フィールド表に送られます。選択されていない場合、データは送られません。ただし、いずれの場合も、Oracle Enterprise Manager Fusion Middleware Controlにはこのフィールドが表示され、センサーに基づいたコンポジット・インスタンスの検索が可能です。

詳細は、Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイドを参照してください。

- JMSキュー
コンポジット・センサー・データ(XMLペイロード)をJMSキューに格納する場合に選択します。JMSコネクション・ファクトリおよびキュー名を指定する必要があります。

- JMSトピック
コンポジット・センサー・データ(XMLペイロード)をJMSトピックに格納する場合に選択します。JMSコネクション・ファクトリおよびトピック名を指定する必要があります。

注意: 「JMSキュー」および「JMSトピック」を選択すると、コンポジット・センサー・データ(XMLペイロード)はOracle Business Activity Monitoring (BAM)やOracle Complex Event Processing (CEP)など他のコンシューマでも使用できるようになります。どちらを選択した場合も、Oracle WebLogic ServerによるJMSサポートが使用され、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』の説明にあるようなOracle SOA Suite JMSアダプタは使用されません。JMSメッセージはOracle WebLogic Server管理コンソールで表示できます。

Oracle BAMでのセンサー・データの使用の詳細は、第53章「Oracle BAMとSOAコンポジット・アプリケーションの統合」を参照してください。

3. 完了後に「OK」をクリックします。
サービスまたは参照バインディング・コンポーネントでは、図50-7に示すように、コンポジット・センサー・アイコンが右上隅に表示されます。

図50-7 バインディング・コンポーネントのセンサー・アイコン

「図50-7 バインディング・コンポーネントのセンサー・アイコンの説明」

サービス・コンポーネントでは、図50-8に示すように、コンポジット・センサー・アイコンも右上隅に表示されます。

図50-8 サービス・コンポーネントのセンサー・アイコン

「図50-8 サービス・コンポーネントのセンサー・アイコン」の説明

4. コンポジット・センサー・アイコンの上にカーソルを置くと、コンポジット・センサーに関する詳細が表示されます。

50.2.1.1 変数の追加方法

図50-9に示す「XPath式の選択」では、トラッキングする要素を選択できます。

変数を追加する手順は、次のとおりです。

1. ツリーを開き、トラッキングする要素を選択します。

図50-9 変数

「図50-9 変数」の説明

2. 完了後に「OK」をクリックします。

50.2.1.2 式の追加方法

図50-10に示す「式ビルダー」ダイアログでは、トラッキングする式を作成できます。

式を追加する手順は、次のとおりです。

1. トラッキングする要素のXPath式を作成します。

図50-10 式

「図50-10 式」の説明

2. 完了後に「OK」をクリックします。

50.2.1.3 プロパティの追加方法

図50-11に示す「プロパティの選択」ダイアログでは、トラッキングする正規化されたメッセージ・ヘッダー・プロパティを選択できます。

プロパティを追加する手順は、次のとおりです。

1. トラッキングする正規化されたメッセージ・ヘッダー・プロパティを選択します。

図50-11 プロパティ

「図50-11 プロパティ」の説明

2. 完了後に「OK」をクリックします。

正規化されたメッセージの詳細は、付録H「正規化されたメッセージのプロパティ」を参照してください。

50.2.2 重複するコンポジット・センサー名に関する注意事項

コンポジット・センサーに重複する名前を使用する場合は、次の詳細に注意してください。

- 重複する名前を持つコンポジット・センサーを作成すると、定義の内容全体が比較されます。重複する名前は、1つ以上の追加パラメータが異なる場合に許可されます(たとえば、異なる構成タイプや異なる式、フィルタ、操作名など)。重複する名前が許可されるためには、定義で何かが異なっている必要があります。

- 重複するセンサー定義がある場合は、最後に実行されたセンサー値のみが維持されます。このため、相互に排他的なパスに対してこのタイプの構成を使用できます(たとえば、コンポジットはサービス1またはサービス2によって起動されます)。したがって、両方のサービスで同じセンサー名を定義できます。ただし、サービス1と参照1に同じ名前を定義した場合、参照1のセンサー値(最後に実行されたセンサー)のみが格納されます。

- 通常は、同じ名前の複数のセンサーを使用して、異なるソースから抽出された同じ論理エンティティを指します(たとえば、Oracle Enterprise Manager Fusion Middleware Controlでは、最終的なセンサー値が表示されます)。このため、異なるソースから電子メール値と社会保障値を抽出する場合に同じセンサー名を使用すると、混乱を招く可能性があります。

- センサー・アクションは、同じセンサー名のすべての発生に適用されます。この状況は、最近定義された同じ名前のセンサーのセンサー・アクションが優先されることを意味します。

例50-1のsensor.xmlに示すシナリオでは、次のことが指定されています。

- Service1という名前に最初の2つのセンサーは同一です。さらに、構成タイプはどちらもserviceConfig(サービス・バインディング・コンポーネントで定義されたコンポジット・センサー)です。したがって、センサーは1つのエントリになります(2番目のセンサーは無視されます)。

- Service1という名前の3番目のセンサーは、異なる構成タイプeventConfig(ビジネス・イベントで定義されたコンポジット・センサー)を持ちます。したがって、このセンサーは別のエントリで表されます。

- PurchaseOrder Idという名前の2つのセンサーは、構成タイプが異なります(eventConfigおよびserviceConfig)。したがって、これらは別のエントリで表されます。

- PurchaseOrderという名前の2つのセンサーは、構成タイプは同じ(eventConfig)ですが、式は異なります。したがって、これらは別のエントリで表されます。

例50-1 複数のエンドポイントがある重複するコンポジット・センサー

<sensors xmlns="http://xmlns.oracle.com/bpel/sensor">
<sensor sensorName="Service1" kind="service" target="undefined" filter="">
<serviceConfig service="OrderPublisher_ep"
expression="$in.property.tracking.ecid" operation="execute"
outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/>
</sensor>
<sensor sensorName="Service1" kind="service" target="undefined" filter="">
<serviceConfig service="OrderPublisher_ep"
expression="$in.property.tracking.ecid" operation="execute"
outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/>
</sensor>
<sensor sensorName="Service1" kind="event" target="undefined" filter=""
xmlns:po="http://www.mycompany.com/ns/order">
<eventConfig component="EventMediator"
expression="$in/po:PurchaseOrder/po:OrderID"
event="{http://mycompany.com/events/orders}OrderReceivedEvent"
outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/>
<sensor sensorName="Event1" kind="event" target="undefined" filter="">
<eventConfig component="EventMediator" actionType="Subscribe"
expression="$in.property.tracking.ecid"
event="{http://mycompany.com/events/orders}OrderReceivedEvent"
outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/>
</sensor>
<sensor sensorName="PurchaseOrder Id" kind="event" target="undefined" filter=""
xmlns:po="http://www.mycompany.com/ns/order">
<eventConfig component="EventMediator"
expression="$in/po:PurchaseOrder/po:OrderID"
event="{http://mycompany.com/events/orders}OrderReceivedEvent"
outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/>
</sensor>
<sensor sensorName="PurchaseOrder Id" kind="service" target="undefined"
filter="">
<serviceConfig service="OrderPublisher_ep"
expression="$in.property.tracking.ecid" operation="execute"
outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/>
</sensor>
<sensor sensorName="PurchaseOrder" kind="event" target="undefined" filter=""
xmlns:po="http://www.mycompany.com/ns/order">
<eventConfig component="EventMediator" expression="$in/po:PurchaseOrder"
event="{http://mycompany.com/events/orders}OrderReceivedEvent"
outputDataType="PurchaseOrder"
outputNamespace="http://mycompany.com/events/orders"/>
</sensor>
<sensor sensorName="PurchaseOrder" kind="event" target="undefined" filter=""
xmlns:po="http://www.mycompany.com/ns/order">
<eventConfig component="EventMediator"
expression="$in/po:PurchaseOrder/po:OrderID"
event="{http://mycompany.com/events/orders}OrderReceivedEvent"
outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/>
</sensor>
</sensor>

</sensors>

50.3 実行時のコンポジット・センサー・データの監視

実行時に、Oracle Enterprise Manager Fusion Middleware Controlでコンポジット・センサー・データを監視できます。

- コンポジット・センサー・データは、SOAコンポジット・アプリケーションのフローのトレースに表示されます。

- コンポジット・センサー・データは、SOAコンポジット・アプリケーションの「インスタンス」ページで検索できます。

- コンポジット・センサーは、SOAインフラストラクチャの「インスタンス」ページで検索できます。

Oracle Enterprise Manager Fusion Middleware Controlでのコンポジット・センサーの検索の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のSOAインフラストラクチャ・レベルでのSOAコンポジット・アプリケーション・インスタンスの監視と削除に関する項およびアプリケーション・ホーム・ページからのSOAコンポジット・アプリケーション・インスタンスの監視と削除に関する項を参照してください。

51 2レイヤーのビジネス・プロセス管理(BPM)の使用

この章では、2レイヤーのビジネス・プロセス管理(BPM)の使用方法について説明します。2レイヤーのBPMを使用すると、動的ビジネス・プロセスを作成できます。動的ビジネス・プロセスの実行は、設計時に事前定義された要素ではなく、そのビジネス・プロセスが実行されるコンテキストの要素に基づいています。このような要素の例には、顧客のタイプ、地理的位置、チャネルなどがあります。

具体的に説明するために、様々なプロセスを使用してマルチチャネル・バンキングを実行するアプリケーションを使用していると仮定します。このシナリオでは、各プロセスの実行は、特定のプロセス・インスタンスごとのチャネルに基づいています。

この章には次の項が含まれます:

- 第51.1項「2レイヤーのビジネス・プロセス管理の概要」

- 第51.2項「phaseアクティビティの作成」

- 第51.3項「動的ルーティング・デシジョン表の作成」

- 第51.4項「ユースケース: 2レイヤーのBPM」

51.1 2レイヤーのビジネス・プロセス管理の概要

2レイヤーのBPMを使用すると、レイヤー・アプローチを使用してビジネス・プロセスをモデル化できます。このモデルの第1レベルは、ビジネス・プロセスに関する抽象的な仕様です。第1レベルのプロセスのアクティビティは、第2レベルのプロセスまたはサービスに作業を委任します。図51-1に、この動作を示します。

図51-1 2レイヤーのBPM

「図51-1 2レイヤーのBPM」の説明

図51-1では、ビジネス・プロセスのPhase Iアクティビティは、その作業を対応するレイヤーIIのプロセスのタスク1.1、タスク1.2またはタスク1.3のいずれかに委任できます。

2レイヤーのBPM機能を使用すると、重要な要素(つまり、phaseアクティビティ)を宣言的に作成できます。

Oracle Business Rulesのデザインタイムおよびランタイム機能を使用すると、さらにチャネルを動的に追加できます。ビジネス・プロセスを再デプロイする必要はありません。実行時デザインタイムでは、実行時に複数のルール(複数の列)を動的ルーティング・デシジョン表に追加できます。実行中にビジネス・プロセス・インスタンスはそれらの新規ルールを考慮し、最終的にリクエストを別のチャネルにルーティングします。

また、Oracle Business Rulesの実行時デザインタイム機能を使用すると、phaseアクティビティから起動されるサービスのエンドポイント参照を別のサービスを指し示すように変更できます。

注意:

Oracle SOAコンポーザとOracle Business Rules SDKを通じて、Oracle Business Rulesの実行時デザインタイム機能を使用できます。

Oracle SOAコンポーザとOracle Business Rules SDKの使用の詳細は、次を参照してください。

- 『Oracle Fusion Middleware Oracle Business Rulesユーザーズ・ガイド』

- 『Oracle Fusion Middleware Java API Reference for Oracle Business Rules』

表51-1に、2レイヤーのBPMを有効にする手順を示します。

表51-1 2レイヤーのBPMを有効にする手順

手順

情報

Oracle WebLogic Serverをインストールします。

『Oracle WebLogic Server Installation Guide』

SOAコンポジット・アプリケーションを設計します。

第51.4.1項「SOAコンポジットの設計」

要素タイプ変数(InputPhaseVariableおよびOutputPhaseVar)を作成します。

第51.4.1項「SOAコンポジットの設計」

phaseアクティビティを作成します。

第51.2項「phaseアクティビティの作成」

動的ルーティング・デシジョン表を作成および編集します。

第51.3項「動的ルーティング・デシジョン表の作成」

BPELプロセス・モデルにassignアクティビティを追加します。

A.2.3項「Assignアクティビティ」

アプリケーション・デプロイメント・プロファイルを作成します。

第43章「SOAコンポジット・アプリケーションのデプロイ」

アプリケーション・サーバー接続を作成します。

第43.7.1.1項「アプリケーション・サーバー接続の作成」

アプリケーションをデプロイします。

第43章「SOAコンポジット・アプリケーションのデプロイ」

51.2 phaseアクティビティの作成

2レイヤーのBPMでは、フェーズはBPELプロセスのレベル1アクティビティです。これは、既存の上位レベルのOracle Business Rulesおよびヒューマン・タスクBPELアクティビティを補完します。

Oracle BPELデザイナで、フェーズをプロセスに宣言的に追加するには、「コンポーネント・パレット」の「Oracle Extensions」セクションからプロセス・モデルにフェーズをドラッグ・アンド・ドロップします。図51-2に詳細を示します。

図51-2 BPELデザイナでのphaseアクティビティ

「図51-2 BPELデザイナでのphaseアクティビティ」の説明

注意:

参照WSDL(レイヤー2またはコールした参照)には、自動作成されるフェーズ参照と同じ抽象的なWSDLが必要です。

51.2.1 phaseアクティビティの作成方法

コンポジット・アプリケーションのphaseアクティビティは、第51.4.1項「SOAコンポジットの設計」の説明に従って必要な変数を作成した後に作成します。

phaseアクティビティを作成する手順は、次のとおりです。

1. Phaseアクティビティをダブルクリックします。

2. 「名前」フィールドに、値を入力します。

3. 「入力変数および出力変数」セクションで、入出力変数を追加する「追加」アイコンを選択します。

4. 「入力変数の追加」を選択します。変数を選択するためのダイアログが表示されます。

5. 「プロセス」→「変数」→「phaseIn」の順に選択します。

6. 「OK」をクリックします。phaseIn変数が移入された状態の「フェーズ」ダイアログが表示されます。

7. 「入力変数および出力変数」アイコンから「出力変数の追加」を選択します。変数を選択するためのダイアログが表示されます。「プロセス」→「変数」→「phaseOut」の順に選択します。

8. 「OK」をクリックします。入出力変数名が移入された状態の「Phase」ダイアログが表示されます。「OK」をクリックします。Oracle BPELデザイナにBPELプロセスが表示されます。

9. 「ファイル」メニューから「すべて保存」を選択します。

10. BPELプロセスを閉じます。

11. Oracle BPELデザイナの「composite.xml」リンクをクリックします。SOAコンポジット・エディタが表示されます。

51.2.2 phaseアクティビティ作成時の処理内容

phaseアクティビティを作成すると、表51-2に記載されているアーティファクトが作成されます。

表51-2 phaseアクティビティとともに作成されるアーティファクト

アーティファクト

説明

BPELスコープ

phaseアクティビティをドロップしたBPELプロセス内の場所に、新しいBPELスコープが作成されてBPELプロセスに挿入されます。スコープには、phaseアクティビティの名前が指定されます。スコープ内にはいくつかの標準BPELアクティビティが作成されます。最も重要なアクティビティは、Oracle MediatorへのinvokeアクティビティとOracle Mediatorからのreceiveアクティビティです。

Oracle Mediatorコンポーネント

BPELプロセス・サービス・コンポーネントのSOAコンポジット・アプリケーションとともに、新しいOracle Mediatorサービス・コンポーネントが作成されます。Oracle Mediatorサービス・コンポーネントは、BPELコンポーネントのphaseアクティビティに接続されます。このBPELコンポーネントは、プロセス・モデル内でphaseアクティビティがドロップされたレベル1のBPELプロセスを構成するコンポーネントです。Oracle Mediatorサービス・コンポーネントの入出力は、phaseアクティビティの入出力によって定義されます。

Oracle Mediatorプラン(Oracle Mediatorサービス・コンポーネントの処理命令)は非常に単純です。処理命令の作成はOracle Business Rulesサービス・コンポーネントに委任されます。

Oracle Business Rulesコンポーネント

BPELプロセス・サービス・コンポーネントのSOAコンポジット・アプリケーション内に、新しいOracle Business Rulesサービス・コンポーネントが作成され、BPELプロセス・サービス・コンポーネントのphaseアクティビティに関連付けられているOracle Mediatorコンポーネントに接続されます。Oracle Business Rulesサービス・コンポーネントには、ルール・ディクショナリが含まれています。ルール・ディクショナリには、ファクト・タイプ、ルールセット、ルール、デシジョン表や同様のアーティファクトなど、Oracle Business Rulesエンジン・アーティファクトのメタデータが含まれています。ルール・ディクショナリは、Oracle Business Rulesサービス・コンポーネントの作成過程で、次のデータを使用して事前に初期化されます。

- ファクト・タイプ・モデル: ルールのモデル化に使用するデータ・モデル。ルール・ディクショナリには、phaseアクティビティの入力に対応するファクト・タイプ・モデルと、Oracle Mediatorサービス・コンポーネントとOracle Business Rulesサービス・コンポーネント間の規定の一部として必要な固定データ・モデルの一部が移入されます。

- ルールセット: ルールのコンテナであり、ルールのグループ化メカニズムとして使用されます。ルールセットはサービスとして公開できます。1つのルールセットがルール・ディクショナリ内に作成されます。

- デシジョン表: Oracle Business Rulesエンジンから見ると、デシジョン表は、ルールの条件およびアクション部分のファクト・タイプ・モデルの要素が同じであるルールの集合で、それらのルールは表形式で表示できます。新規デシジョン表はルールセット内に作成されます。

- デシジョン・サービス: ルールセットをOracle Business Rulesサービス・コンポーネントのサービスとして公開するために作成されます。Oracle Mediatorでは、サービス・インタフェースを使用してデシジョン表を評価します。

51.2.3 phaseアクティビティを作成した場合の実行時の処理内容

phaseアクティビティの入力は、実行時に動的ルーティング・デシジョン表を評価するために使用されます。評価は、phaseアクティビティの特定のデシジョン・コンポーネントによって実行されます。この評価の結果が、Oracle Mediatorに対する指示になります。Oracle Mediatorは、デシジョン・コンポーネントからの指示に基づいて、リクエストをサービスにルーティングします。

注意:

現在のリリースでは、非同期のphaseアクティビティがサポートされています。同期または一方向のphaseアクティビティはサポートされていません。

51.2.4 phaseアクティビティの作成に関する注意事項

phaseアクティビティを作成する場合は、次の事項について理解している必要があります。

- デシジョン・サービスで構成または作成する必要のあるルール。これは、ルールの評価に使用するペイロードのデータに基づきます。

- デシジョン・サービスで作成した各ルールがtrueと評価されたときに起動する必要のある、対応するエンドポイントURLを認識している必要があります。Oracle Mediatorでは、このエンドポイントURLを使用してレイヤー2のサービスを起動します。
エンドポイントの指定方法の詳細は、第51.4.3項「動的ルーティング・デシジョン表の作成および編集」を参照してください。

注意:

ペイロードに対するトランスフォーメーション、割当てまたは検証は実行できません。

51.3 動的ルーティング・デシジョン表の作成

動的ルーティング・デシジョン表は、Oracle Business Rulesによって評価されるデシジョン表です。phaseアクティビティの入力データに対して条件が評価されます。この評価の結果が、Oracle Mediatorに対するルーティング指示になります。

51.3.1 動的ルーティング・デシジョン表の作成方法

phaseアクティビティを作成すると、ウィザードによってOracle JDeveloperのOracle Business Rulesデザイナが起動され、動的ルーティング・デシジョン表を編集できるようになります。図51-3に、Oracle Business Rulesデザイナ内のデシジョン表のサンプルを示します。

図51-3 デシジョン表のサンプル

「図51-3 デシジョン表のサンプル」の説明

レベル2のプロセス・フェーズのモデリング中にはaction属性serviceBindingInfoの情報を空にしておき、Oracle SOAコンポーザを使用してレベル1のプロセスをデプロイした後で完了することができます。

動的ルーティング・デシジョン表を作成および編集すると、図51-4に示すように、新規のレベル1のphaseアクティビティがOracle JDeveloperのBPELプロセスに表示されます。

図51-4 Oracle JDeveloperでの完成したレベル1フェーズ

「図51-4 Oracle JDeveloperでの完成したレベル1フェーズ」の説明

51.3.2 動的ルーティング・デシジョン表作成時の処理内容

動的ルーティング・デシジョン表を作成することで、着信ペイロードに適用される条件を動的に評価し、対応するルーティング・ルールをOracle Mediatorに提供するデシジョン・サービスが構成されます。Oracle Mediatorは、これらのルールをレイヤー2のサービスの起動時に実行します。

動的ルーティング・デシジョン表を作成すると、具体的には、設計時に次の処理が行われます。

- 新しいデシジョン・コンポーネントがプロジェクトのコンポジットに作成されます。

- 新しいルール・ディクショナリがコンポジット・プロジェクトのディレクトリに作成されます。

- ルール・ディクショナリに、フェーズ入力のデータ・モデルを反映するデータ・モデルが移入されます。つまり、フェーズ入力のXMLスキーマがルール・ディクショナリにインポートされます。

51.4 ユースケース: 2レイヤーのBPM

この項では、顧客の注文をルーティングするサンプルのSOAコンポジット・アプリケーションを作成する方法を説明します。

サンプルを作成して実行する手順は、次のとおりです。

1. 次のタスクを実行して、サンプルをモデル化します。

1. 第51.4.1項「SOAコンポジットの設計」の説明に従って、SOAコンポジットを設計します。

2. 第51.4.2項「phaseアクティビティの作成」の説明に従って、phaseアクティビティを作成します。

3. 第51.4.3項「動的ルーティング・デシジョン表の作成および編集」の説明に従って、動的ルーティング・デシジョン表の作成と編集を実行します。

4. 第51.4.4項「BPELプロセス・モデルへのassignアクティビティの追加」の説明に従って、assignアクティビティをBPELプロセス・モデルに追加します。

2. 第51.4.5項「サンプルのデプロイおよびテスト」の説明に従って、Oracle JDeveloperを使用してサンプルをデプロイします。

51.4.1 SOAコンポジットの設計

Oracle JDeveloperでSOAコンポジット・アプリケーションを設計します。

SOAコンポジット・アプリケーションを設計する手順は、次のとおりです。

1. Oracle JDeveloperで、「ファイル」メニューから「新規」を選択します。「新規ギャラリ」ダイアログが表示されます。デフォルトでは、「汎用アプリケーション」が選択されています。

2. 「OK」をクリックします。汎用アプリケーションの作成ウィザードの第1ページが表示されます。

3. 「アプリケーション名」フィールドにBPELPhaseActivityと入力し、「次へ」をクリックします。汎用アプリケーションの作成ウィザードの第2ページが表示されます。

4. 「プロジェクト名」フィールドに、BPELPhaseCustomerRouterと入力します。

5. 「プロジェクト・テクノロジ」タブの「選択可能」セクションから、「SOA」を選択して「選択済」セクションに移動します。

6. 「次へ」をクリックします。汎用アプリケーションの作成ウィザードの第3ページが表示されます。

7. 「コンポジット・テンプレート」リストからBPELプロセスを使用するコンポジットを選択し、「終了」をクリックします。
「BPELプロセスの作成」ダイアログが表示されます。

8. 「BPELプロセスの作成」ダイアログの「名前」フィールドに、CustomerRouterBPELProcessと入力します。

9. 「テンプレート」リストから、「非同期BPELプロセス」を選択します。

10. スキーマ・ファイル(この例では、CustomerData.xsdという名前)をプロジェクトのxsdフォルダにインポートします。XMLスキーマ定義(XSD)には、XML文書に表示する要素や属性のタイプ、それらの相互の関係、そこに含まれるデータのタイプなどを指定します。

1. 「入力」フィールドで、「入力要素の参照」アイコンをクリックします。
「タイプ・チューザ」ダイアログが表示されます。

2. 図51-5に示すように、「スキーマ・ファイルのインポート」アイコンをクリックします。

図51-5 「スキーマ・ファイルのインポート」アイコン

「図51-5 「スキーマ・ファイルのインポート」アイコン」の説明

「スキーマ・ファイルのインポート」ダイアログが表示されます。

3. 「URL」フィールドの右側にある「リソースの参照」アイコンをクリックします。
「SOAリソース・ブラウザ」が表示されます。

4. 「ファイルシステム」を選択し、「場所」セクションで、artifacts/schemaフォルダのスキーマ・ファイル(この例ではCustomerData.xsd)を検索し、「OK」をクリックします。

5. 「スキーマのインポート」ダイアログで、「URL」フィールドにスキーマ・ファイル(この例ではCustomerData.xsd)が表示され、「プロジェクトにコピー」オプションが選択されていることを確認して、「OK」をクリックします。
「ファイルのローカライズ」ダイアログに、スキーマ・ファイルおよび付随するファイルのインポートに関するプロンプトが表示されます。

6. 「インポートされたファイルの元のディレクトリ構造を保持」オプションの選択を解除し、「OK」をクリックしてファイルをインポートします。
「タイプ・チューザ」ダイアログが表示されます。

7. 図51-6に示すように、「プロジェクトのスキーマ・ファイル」→「schema_file」(この例ではCustomerData.xsd)→「Customer」の順に開き、「OK」をクリックします。

図51-6「タイプ・チューザ」ダイアログ

「図51-6 「タイプ・チューザ」ダイアログ」の説明

11. スキーマ・ファイルをインポートした後、「CustomerRouterBPELProcess」BPELプロセスを開きます。

変数を作成する手順は、次のとおりです。

注意:

要素タイプのフェーズ変数のみを使用できます。

1. 「変数」アイコンをクリックします。「変数」ダイアログが表示されます。

2. 「作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。

3. 「名前」フィールドに、InputPhaseVariableと入力します。

4. 「要素」オプションをクリックします。

5. 「要素の参照」アイコンをクリックします。「タイプ・チューザ」ダイアログが表示されます。

6. 「プロジェクトのスキーマ・ファイル」→「schema_file」(この例ではCustomerData.xsd)→「Customer」の順に選択し、「OK」をクリックします。要素名が移入された状態の「変数の作成」ダイアログが表示されます。

7. 「OK」をクリックします。変数名が移入された状態の「変数」ダイアログが表示されます。

8. 「変数」ダイアログで、「作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。

9. 「名前」フィールドに、OutputPhaseVariableと入力します。

10. 「タイプ」セクションで、「要素」オプションを選択します。

11. 「要素の参照」アイコンをクリックします。「タイプ・チューザ」ダイアログが表示されます。

12. 「プロジェクトのスキーマ・ファイル」→「schema_file」(この例ではCustomerData.xsd)→「Customer」の順に選択し、「OK」をクリックします。要素名が移入された状態の「変数の作成」ダイアログが表示されます。

13. 「OK」をクリックします。入出力変数名が移入された状態の「変数」ダイアログが表示されます。

14. 「OK」をクリックします。変数の作成が完了し、「CustomerRouterBPELProcess」BPELプロセスが表示されます。

51.4.2 phaseアクティビティの作成

phaseアクティビティを作成する手順は、次のとおりです。

1. 「CustomerRouterBPELProcess」BPELプロセスで、phaseアクティビティを、「コンポーネント・パレット」からプロセス・モデルの「receiveInput」と「replyOutput」の間にドラッグ・アンド・ドロップします。「Phase」ダイアログが表示されます。

2. 「名前」フィールドに、CustomerRoutingPhase_1と入力します。

3. 「入力変数および出力変数」アイコンから「入力変数の追加」を選択します。「入力変数の追加」ダイアログが表示されます。

4. 「プロセス」→「変数」→「variable_name」 (この例ではphaseIn)を選択し、「OK」をクリックします。変数が移入された状態の「Phase」ダイアログが表示されます。

5. 「入力変数および出力変数」アイコンから「出力変数の追加」を選択します。「出力変数の追加」ダイアログが表示されます。

6. 「プロセス」→「変数」→「variable_name」 (この例ではOutputPhaseVar)を選択します。

7. 「OK」をクリックします。「Phase」ダイアログに入力変数名および出力変数名が表示されます。

8. 「OK」をクリックします。「CustomerRouterBPELProcess」BPELプロセスが表示されます。

9. 「ファイル」メニューから「すべて保存」を選択します。

10. 「CustomerRouterBPELProcess」BPELプロセスを閉じます。

11. 「composite.xml」をクリックします。SOAコンポジット・エディタが表示されます。

注意:

- phaseアクティビティのウィザードの一環として、Oracle Business Rules、Oracle Mediatorおよび動的参照の3つのコンポーネントが作成されます。

- Oracle Business Rulesサービス・コンポーネントは、定義されているルールにより、Oracle Mediatorサービス・コンポーネントに対して実行可能なケースを返します。

- Oracle Mediatorサービス・コンポーネントは、Oracle Business Rulesサービス・コンポーネントから受信したルーティング・ルールに基づきルーティングします。

- 動的参照コンポーネントは、第2レベルのプロセスのダミー参照です。

- ルール・ディクショナリに、Oracle Mediatorのファクト・タイプ・モデルと、phaseアクティビティの入力に対応するファクト・タイプ(この例ではCustomerData)が移入されます。

- ルーティング表と呼ばれる空のデシジョン表が作成されますが、動的ルーティング・ルールの場合は編集する必要があります。

51.4.3 動的ルーティング・デシジョン表の作成および編集

動的ルーティング・デシジョン表を作成して編集する手順は、次のとおりです。

1. 「CustomerRouterBPELProcess」BPELプロセスを開き、プロセス・ダイアグラムでphaseアクティビティをダブルクリックします。「Phase」ダイアログが表示されます。

2. 「動的ルールの編集」ボタンをクリックします。Oracle Business Rulesデザイナ・ページが表示されます。

3. 「ルールセット」の下にある「Ruleset_1」をクリックします。図51-7に示すように、「Ruleset_1」ページに空のルーティング表が表示されます。

図51-7 「ルールセット」ページ

「図51-7 「ルールセット」ページ」の説明

4. 「DecisionTable_1」で、「追加」アイコン→「アクション」→「新規アサート」の順にクリックします。表の「アクション」セクションが表示されます。

5. 「serviceBindingInfo」で、SOAPエンドポイントを指定し、ホスト名とホスト・ポートをSOAサーバーの詳細で置換します。この例では、localhostがホスト・サーバー、8001がホストのポートです。この例のコンポジットはCustomerRouterという名前で、あらかじめデプロイされている必要があります。

- 「otherwise」列に、次の値を入力します。

http://hostname:host_port/soa-infra/services/default/CustomerRouter!1.0/
DefaultCustomerRouterService

- 「Intel」列に、次の値を入力します。

http://hostname:host_port/soa-infra/services/default/CustomerRouter!1.0/
SilverCustomerRouterService

- 「Cisco」列に、次の値を入力します。

http://hostname:host_port/soa-infra/services/default/CustomerRouter!1.0/
GoldCustomerRouterService

- 「HP」列に、次の値を入力します。

http://hostname:host_port/soa-infra/services/default/CustomerRouter!1.0/
PlatinumCustomerRouterService

51.4.4 BPELプロセス・モデルへのassignアクティビティの追加

phaseアクティビティをデプロイする前に、フェーズ変数を初期化する必要があります。これを実行するには、BPELプロセスのフェーズにassignアクティビティを追加します。

assignアクティビティをBPELプロセス・モデルに追加する手順は、次のとおりです。

1. 「CustomerRouterBPELProcess」BPELプロセスをクリックします。

2. assignアクティビティを、「コンポーネント・パレット」からプロセス・モデルのreceiveInputアクティビティとphaseアクティビティの間にドラッグ・アンド・ドロップします。assignアクティビティがプロセス・モデルに追加されます。

3. assignアクティビティをダブルクリックします。「Assign」ダイアログが表示されます。

4. 「一般」タブを選択します。

5. 「名前」フィールドに、AssignInputと入力します。

6. 「コピー・ルール」タブを選択します。

7. ソース・セクションを選択します。この例では、「変数」→「プロセス」→「変数」→「inputVariable」→「ペイロード」→「ns1:Customer」を選択します。

8. ターゲット・セクションを選択します。この例では、「変数」→「プロセス」→「変数」→「inputVariable」→「ペイロード」→「ns1:Customer」を選択します。

9. ソース・ノードをターゲット・ノードにドラッグ(たとえば、ソースのns1:Customerノードをターゲットのns1:Customerノードにドラッグ)します。
表51-3に示すように、「Assignの編集」ダイアログの下部には、入力のコピー・ルールが記録されます。

図51-3 assignアクティビティを追加するための入力のコピー・ルール

コピー元

コピー先

inputVariable/payload//ns1:Customer

InputPhaseVar///payload/ns1:Customer

10. 「OK」をクリックします。「CustomerRouterBPELProcess」プロセスが再度表示されます。

11. 別のassignアクティビティを、「コンポーネント・パレット」からプロセス・モデルのphaseアクティビティとreplyOutputアクティビティの間にドラッグ・アンド・ドロップします。新しいassignアクティビティがプロセス・モデルに追加されます。

12. assignアクティビティをダブルクリックします。「Assign」ダイアログが表示されます。

13. 「一般」タブの「名前」フィールドにAssignOutputと入力します。

14. 「コピー・ルール」タブを選択します。

15. ソース・セクションを選択します。この例では、「変数」→「プロセス」→「変数」→「OutputPhaseVar」→「ペイロード」→「ns1:Customer/ns1:status」を選択します。

16. ターゲット・セクションを選択します。この例では、「プロセス」→「変数」→「outputVariable」→「ペイロード」→「client:processResponse」→「client:result」を選択します。

17. ソースのns1:statusノードをターゲットのclient:resultノードにドラッグします。
表51-4に示すように、出力のコピー・ルールが記録されます。

図51-4 assignアクティビティを追加するための出力のコピー・ルール

コピー元

コピー先

OutputPhaseVar///ns1:Customer/ns1:status

outputVariable/payload//client:processResponse/client:result

18. 「OK」をクリックします。入出力のassignアクティビティが作成された後に、「CustomerRouterBPELProcess」BPELプロセスが表示されます。

19. 「ファイル」メニューから「すべて保存」を選択します。

51.4.5 サンプルのデプロイおよびテスト

サンプルをデプロイする方法については、第43.7項「SOAコンポジット・アプリケーションのデプロイ」を参照してください。

Oracle Enterprise Manager Fusion Middleware Controlでコンポジット・インスタンスをテストする手順の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

52 Spring Frameworkを使用したSOAコンポジット・アプリケーションへの統合

この章では、Spring Frameworkを使用して、Javaインタフェースを使用するコンポーネントをSOAコンポジット・アプリケーションに統合する方法について説明します。Oracle SOA Suiteでは、Oracle WebLogic ServerのWebLogic Service Component Architecture(SCA)で提供されるSpring Framework機能を使用します。また、この章では、Javaインタフェースを使用するコンポーネントとWSDLファイルを使用するコンポーネントを同じSOAコンポジット・アプリケーション内に統合する方法についても説明します。また、JavaクラスをXMLデータにマップするための、Java Architecture for XML Binding(JAXB)およびEclipseLink O/X-Mapper(OXM)の使用についても説明します。

この章には次の項が含まれます:

- 第52.1項「Springサービス・コンポーネントの概要」

- 第52.2項「同じSOAコンポジット・アプリケーション内でのJavaベース・コンポーネントとWSDLベース・コンポーネントの統合」

- 第52.3項「Oracle JDeveloperでのSpringサービス・コンポーネントの作成」

- 第52.4項「グローバルSpringコンテキストを介したカスタムSpring Beanの定義」

- 第52.5項「事前定義済のSpring Beanの使用」

- 第52.6項「Fusion Order DemoでのSpringサービス・コンポーネントの統合」

- 第52.7項「JAXBおよびOXMのサポート」

- 第52.8項「Springサービス・コンポーネントによるGroovyおよびAspectjクラスの構成」

- 第52.9項「Springエラーのトラブルシューティング」

Oracle SOA Suiteで使用するWebLogic SCA機能の詳細は、Oracle Fusion Middleware Oracle WebLogic ServerのためのWebLogic SCAアプリケーションの開発を参照してください。

Spring Frameworkの使用方法の例は、Oracle SOA Suiteのサンプルのサイトを参照してください。

52.1 Springサービス・コンポーネントの概要

Spring Frameworkは、様々なタイプのサービスを簡単に使用できるようにする軽量のコンテナです。この軽量のコンテナは、特定のタイプのコンポーネントではなく、すべてのJavaBeanを受け入れることができます。

WebLogic SCAによって、ユーザーはSpring Frameworkを使用して、plain old Java object(POJO)を使用するJavaアプリケーションを作成し、コンポーネントをSCAサービスおよび参照として公開できます。SCAの観点では、WebLogic Spring Framework SCAアプリケーションは、各クラスをSCAサービスおよび参照と結び付けるSpring SCA コンテキスト・ファイルとPOJOの集合です。

Spring Frameworkを使用すると、サービス・コンポーネントを作成し、依存関係インジェクション機能を使用してSOAコンポジット・アプリケーション内に接続できます。Spring Framework機能は、SCAによって次のように拡張できます。

- Spring Beanを、他のSCAコンポーネントまたはリモート・クライアントがアクセスできるSCAコンポーネント・サービスとして公開します。

- 他のコンポーネントのサービスに接続されたサービス参照のSpring Beanを提供します。

すべてのサービス・コンポーネントと同様に、SpringコンポーネントにもcomponentTypeファイルがあります。componentTypeファイルに定義されているインタフェースは、interface.java定義を使用してサービスおよび参照インタフェースを識別します。

サービスはBeanによって実装され、Springコンテキスト・ファイルでターゲット設定されます。参照は、実行時に暗黙的(または仮想的)なBeanとしてSpringコンテキスト・ファイルで提供されます。

Javaインタフェースを使用してEnterprise JavaBeans (EJB)をSOAコンポジット・アプリケーションに統合することもできます(SDOパラメータは不要です)。詳細は、第38章「Enterprise JavaBeansとSOAコンポジット・アプリケーションの統合」を参照してください。

52.2 同じSOAコンポジット・アプリケーション内でのJavaベース・コンポーネントとWSDLベース・コンポーネントの統合

11g リリース1 11.1.1.3より前のリリースでは、SOAコンポジット・アプリケーション内のコンポーネントはすべてWSDLベースでした。11g リリース1 11.1.1.3からは、SOAコンポジット・エディタを使用して、Javaインタフェースを使用するコンポーネントとWSDLファイルを同じSOAコンポジット・アプリケーション内で統合できるようになりました。この統合によって、たとえば、Springサービス・コンポーネントでOracle BPEL Process Managerを起動したり、Oracle Mediatorサービス・コンポーネントでEJBを起動することができます。

次のタイプのコンポーネント統合がサポートされています。

- JavaコンポーネントからWSDLコンポーネント
Javaインタフェース(EJBサービス、Springサービス・コンポーネントなど)からJavaインタフェースをサポートしていないコンポーネント(Oracle Mediator、Oracle BPEL Process Managerなど)にワイヤをドラッグすると、コンポーネント・インタフェースに対して互換性のあるWSDLが生成されます。

- WSDLコンポーネントからJavaコンポーネント
WSDLインタフェースから、WSDLファイルをサポートしていないコンポーネント(Springサービス・コンポーネントなど)にワイヤをドラッグすると、互換性のあるJavaインタフェースが自動的に生成されます。さらに、既存のWSDLインタフェースを既存のJavaインタフェースに接続することも可能です。この場合、WSDLインタフェースとJavaインタフェース間の互換性はチェックされません。互換性が適正であることを確認する必要があります。

- JavaコンポーネントからJavaコンポーネント
Springサービス・コンポーネントの作成時には、Javaインタフェース・ベースのEJBサービス・バインディング・コンポーネントと参照バインディング・コンポーネントを使用して、Springサービス・コンポーネントを自動的に構成できます。WSDLファイルは不要です。

52.2.1 JavaベースおよびWSDLベースの統合例

2つのサービス・コンポーネント(またはサービス・コンポーネントとバインディング・コンポーネント)を接続するときは、接続の両端にインタフェースを定義します。これらのインタフェースには、XMLを使用して同じWSDL定義を指定する必要があるため、composite.xmlファイルまたはcomponent.componentTypeファイルのinterface.wsdlを使用して定義します。

JAX-WSの観点からは、(interface.javaで定義された)JavaインタフェースをWSDLインタフェースに接続すると、2つのインタフェースは互換性があるとみなされます。通常、これはOracle JDeveloperで規定され自動化されます。

注意:

この項で説明するcomposite.xml、componentTypeおよびSpringコンテキスト・ファイルの作成と変更には、Oracle JDeveloperのみを使用します。これらのファイルは、「ソース」ビューで直接編集しないでください。次の各例は、JavaインタフェースとWSDLファイルをSOAコンポジット・アプリケーションに統合する方法を示しています。Oracle JDeveloperを使用してこの機能を実現する方法については、この章の後続の項で説明します。

たとえば、例52-1に示すように、サービスのJavaインタフェースがあるとします。

例52-1 サービスのJavaインタフェース

public interface PortfolioService {
public double getPorfolioValue(String portfolioId);
}

実装では、別のコンポーネント(BPELプロセス、外部Webサービス、EJBなど)によって実装された追加のStockQuoteサービスを使用できるとします。例52-2に詳細を示します。

例52-2 サービスの追加のJavaインタフェース

public interface StockQuote {
public double getQuote (String symbol);
}

Spring FrameworkのcomponentTypeファイルには、interface.java定義を使用してPortfolioServiceサービスとStockQuoteサービスがリストされます。例52-3に詳細を示します。

例52-3 componentTypeファイル

<componentType xmlns="http://xmlns.oracle.com/sca/1.0">
<service name="PortfolioService ">
<interface.java interface="com.bigbank.PortfolioService"/>
</service>
<reference name="StockService">
<interface.java interface="com.bigbank.StockQuote"/>
</reference>
</componentType>

実装クラスによって、サービス・インタフェースが実装され、参照インタフェースのセッターが提供されます。例52-4に詳細を示します。

例52-4 サービス・インタフェースの実装

public class PortfolioServiceImpl implements PortfolioService {
StockQuote stockQuoteRef;

public void setStockService (StockQuote ref) {
stockQuoteRef = ref;
}

public double getPorfolioValue(String portfolioId) {
//--  use stock service
//--  return value
}
}

Springコンテキスト・ファイルは、サービスおよび参照をコールアウトして実装にバインドします。例52-5に詳細を示します。

例52-5 Springコンテキストによるサービスおよび参照のコールアウト

<beans ...>
<sca:service  name="PortfolioService" type="com.bigbank.PortfolioService"
target="impl">
</sca:service>

<sca:reference  name="StockService" type="com.bigbank.StockQuote">
</sca:reference>

<bean id ="impl" class ="com.bigbank.PortfolioServiceImpl">
<property name="stockService" ref="StockService"/>
</bean>
</beans>

コンポジットのcomposite.xmlファイルには、コンポーネントと参照が定義されています。例52-6に詳細を示します。

例52-6 composite.xmlファイルでのコンポーネントと参照の定義

<composite ...>
<import location="PortfolioService.wsdl" />
<service name="PortfolioService">
<interface.wsdl
interface="http://bigbank.com/#wsdl.interface(PortfolioService)" />
<binding.ws
port="http://bigbank.com/#wsdl.endpoint(PortfolioService/PortfolioServicePort)"/>
</service>
<wire>
<source.uri>PortfolioService</source.uri>
<target.uri>PortfolioComp/PortfolioService</target.uri>
</wire>
<component name="PortfolioComp">
<implementation.spring src="spring-context.xml"/>
</component>
<wire>
<source.uri>PortfolioService/StockService</source.uri>
<target.uri>StockService</target.uri>
</wire>
<reference name="StockService">
<interface.java interface="com.bigbank.StockQuote"/>
<binding.ejb uri="StockService#com.bigbank.StockQuote"/>
</reference>
</composite>

52.2.2 Spring Frameworkでのコールバックの使用

Oracle SOA Suiteでは、interface.wsdlおよびinterface.javaの両方でコールバックを使用します。ただし、Spring Frameworkにはコールバックの概念が存在しません。Oracle SOA Suiteのサービスおよび参照の場合、コールバックは、interface.wsdlの2番目のポート・タイプ、またはinterface.javaの2番目のJava名として(メタデータに)指定されます。Springメタデータには、sca:servicesおよびsca:referencesのみが含まれ、コールバックを指定する方法がありません。

Springでコールバックを設計するには、特定の名前を指定したsca:servicesおよびsca:referencesを用意する必要があります。ネーミング規則のsomeServiceおよびsomeServiceCallbackを使用してsca:serviceおよびsca:referenceの両方を作成すると、Oracle SOA Suiteでは、このネーミング規則が認識され、コールバックがある単一のサービスまたは参照が作成されます。

たとえば、Oracle JDeveloperのSpringエディタを使用して、Springコンテキスト・ファイルに例52-7に示すような構文を作成するとします。

例52-7 Springサービス・コンポーネントでのコールバック

<sca:service  name="StockService"
type="oracle.integration.platform.blocks.java.callback.StockService"
target="impl" />
<sca:reference  name="StockServiceCallback"
type="oracle.integration.platform.blocks.java.callback.StockServiceReply" />

Oracle SOA Suiteでは、例52-8に示すように、単一のサービスをSpringのcomponentTypeファイルに自動的に作成します。

例52-8 単一のサービス

<service name="StockService">
<interface.java
interface="oracle.integration.platform.blocks.java.callback.StockService"
callbackInterface="oracle.integration.platform.blocks.java.callback.StockServiceRe
ply"/>
</service>

SOAコンポジット・エディタで、コールバック・インタフェースがあるSpringのinterface.javaをWSDLコンポーネント(Oracle BPEL Process Manager、Oracle Mediatorなど)にドラッグすると、2つのポート・タイプがあるWSDLが生成されます(技術的にはラッパーWSDLと呼ばれ、それぞれ単一のポート・タイプがある別の2つのWSDLをインポートするWSDLです)。

コールバックがあるWSDLインタフェースまたはJavaインタフェースをSpringサービス・コンポーネントにドラッグすると、SOAコンポジット・エディタには単一のインタフェースが表示されます。ただし、Springエディタには、同じネーミング規則(someServiceおよびsomeServiceCallback)を使用するsca:serviceおよびsca:referenceの両方が表示されます。

52.3 Oracle JDeveloperでのSpringサービス・コンポーネントの作成

この項では、Oracle JDeveloperでSpringサービス・コンポーネントを作成し、そのコンポーネントを次のように接続する方法について説明します。

- Javaインタフェース・ベースのEJBサービスおよび参照への接続(JavaからJavaへの統合)

- Oracle Mediatorサービス・コンポーネントへの接続(JavaからWSDLへの統合)

Fusion Order DemoでのSpringサービス・コンポーネントの統合の概要は、第52.6項「Fusion Order DemoでのSpringサービス・コンポーネントの統合」を参照してください。

52.3.1 Oracle JDeveloperでのSpringサービス・コンポーネントの作成方法

Oracle JDeveloperでSpringサービス・コンポーネントを作成する手順は、次のとおりです。

1. 図52-1に示すように、「コンポーネント・パレット」から「Springコンテキスト」サービス・コンポーネントをSOAコンポジット・エディタにドラッグします。

図52-1 Springコンテキスト・サービス・コンポーネント

「図52-1 「Springコンテキスト」サービス・コンポーネント」の説明

「Springの作成」ダイアログが表示されます。

2. 「名前」フィールドに、Springサービス・コンポーネントの名前を入力します。この名前は、コンポーネント名とSpringコンテキスト・ファイル名の両方になります。図52-2に詳細を示します。
既存のコンテキストの使用を選択し、「参照」をクリックして、既存のSpringファイルを選択することもできます。たとえば、Oracle JDeveloperで作成されたがOracle SOA Suiteの外部にあるSpringコンテキストをインポートできます。別のプロジェクトから参照して選択したSpringコンテキストは、SOAプロジェクトにコピーされます。

図52-2 「Springの作成」ダイアログ

「図52-2 「Springの作成」ダイアログ」の説明

注意:

WebLogic SCAのスタンドアロンのSpringバージョンも使用可能です。通常、このバージョンはOracle SOA Suiteの外部で使用されます。このバージョンにアクセスするには、Springエディタ内での作業中に、「コンポーネント・パレット」からSpring 2.5 JEEを選択します。

3. 「OK」をクリックします。
SOAコンポジット・エディタにSpringアイコンが表示されます。

4. このアイコンをダブルクリックすると、SpringエディタにSpringコンテキストの内容が表示されます。

<?xml version="1.0" encoding="windows-1252" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:sca="http://xmlns.oracle.com/weblogic/weblogic-sca"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/tool
http://www.springframework.org/schema/tool/spring-tool-2.5.xsd
http://xmlns.oracle.com/weblogic/weblogic-sca META-INF/weblogic-sca.xsd">
<!--Spring Bean defintions go here-->
</beans>

5. 「コンポーネント・パレット」のドロップダウン・リストから、「WebLogic SCA」を選択します。
リストがリフレッシュされ、図52-3に示すように、選択内容が表示されます。

図52-3 「WebLogic SCA」メニュー

「図52-3 「WebLogic SCA」メニュー」の説明

6. 「サービス」アイコンをSpringエディタにドラッグします。
「サービスの挿入」ダイアログが表示されます。

7. 表52-1に示すフィールドに入力して、ターゲットBeanおよびJavaインタフェースを定義します。

表52-1 「サービスの挿入」ダイアログ

フィールド

説明

名前

名前を入力します。

ターゲット

ターゲットBeanを入力します。このアクションにより、Beanをサービスとして公開できます。

注意: このターゲットが存在していることを確認してください。このターゲットの存在をチェックする検証機能はサポートされていません。

タイプ

Javaインタフェースを入力します。

完了すると、「サービスの挿入」ダイアログは図52-4のようになります。

図52-4 「サービスの挿入」ダイアログ

「図52-4 「サービスの挿入」ダイアログ」の説明

8. 「OK」をクリックします。
ターゲットBeanは、Springコンテキストでサービス・インタフェースになります。

<?xml version="1.0" encoding="windows-1252" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:sca="http://xmlns.oracle.com/weblogic/weblogic-sca"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/tool
http://www.springframework.org/schema/tool/spring-tool-2.5.xsd
http://xmlns.oracle.com/weblogic/weblogic-sca META-INF/weblogic-sca.xsd">
<!--Spring Bean defintions go here-->
<sca:service name="scaserv1" target="ep" type="oracle.mypackage.myinterface"/>
</beans>

Springエディタを閉じてSOAコンポジット・エディタに戻ると、図52-5に示すように、Springサービス・コンポーネントの左側にハンドルが追加されています。

図52-5 サービス・ハンドル

「図52-5 サービス・ハンドル」の説明

9. Springエディタに戻ります。

10. 図52-3に示すリストから、「参照」アイコンをSpringエディタにドラッグします。
「参照の挿入」ダイアログが表示されます。

11. 表52-2に示すようにダイアログに入力して、「OK」をクリックします。

表52-2 「参照の挿入」ダイアログ

フィールド

説明

名前

名前を入力します。

タイプ

Javaインタフェースを入力します。

完了すると、Springエディタに、Springコンテキストのサービスおよび参照が表示されます。

<?xml version="1.0" encoding="windows-1252" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:sca="http://xmlns.oracle.com/weblogic/weblogic-sca"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/tool
http://www.springframework.org/schema/tool/spring-tool-2.5.xsd
http://xmlns.oracle.com/weblogic/weblogic-sca META-INF/weblogic-sca.xsd">
<!--Spring Bean defintions go here-->
<sca:service name="scaserv1" target="ep" type="oracle.mypackage.myinterface"/>
<sca:reference name="scaref1" type="external.bean.myInterface"/>
</beans>

12. 図52-6に示すように、Springコンテキスト・ファイルを閉じます。

図52-6 Springコンテキスト・ファイル

「図52-6 Springコンテキスト・ファイル」の説明

図52-7に示すように、Springサービス・コンポーネントの右側にハンドルが追加されています。

図52-7 参照ハンドル

「図52-7 参照ハンドル」の説明

13. 図52-8に示すように、左側のハンドルを「公開されたサービス」スイムレーンにドラッグして、サービス・バインディング・コンポーネントを作成します。

図52-8 サービス・バインディング・コンポーネント

「図52-8 サービス・バインディング・コンポーネント」の説明

図52-9に示すように、サービスをWebサービスとして公開するか、またはEJBサービスとして公開するかを選択するように求めるプロンプトが表示されます。

図52-9 作成するサービス・タイプ

「図52-9 作成するサービス・タイプ」の説明

- EJB: EJBサービスをJavaインタフェースから公開します。このオプションを選択した場合、WSDLファイルを使用する必要はありません。

- Webサービス: WebサービスをSOAP WSDLインタフェースから公開します。このオプションを選択すると、Springサービス・コンポーネントとの互換性を維持するために、JavaインタフェースからWSDLが生成されます。

14. このサービスをEJBサービスとして公開するか、またはWebサービスとして公開するかを選択します。「公開されたサービス」スイムレーンにサービスが自動的に作成され、Springサービス・コンポーネントに接続されます(この例では「EJB」が選択されています)。図52-10に詳細を示します。

図52-10 Springサービス・コンポーネントに接続されたEJBサービス・バインディング・コンポーネント

「図52-10 Springサービス・コンポーネントに接続されたEJBサービス・バインディング・コンポーネント」の説明

15. EJBサービスをダブルクリックすると、図52-11に示すように、自動的に設定された構成が表示されます。この構成詳細は、ステップ7で「サービスの挿入」ダイアログに入力した値から作成されています。

図52-11 「公開されたサービス」スイムレーンの「EJBサービス」ダイアログ

「図52-11 「公開されたサービス」スイムレーンの「EJBサービス」ダイアログ」の説明

16. 自動的に生成されたデフォルトのJNDI名を、環境に適用可能な名前に置き換えます。

17. ダイアログを閉じます。

18. Springサービス・コンポーネントの右側のハンドルを「外部参照」スイムレーンにドラッグして、参照バインディング・コンポーネントを作成します。
ステップ13で説明した内容と同じSpringタイプ・オプションのメッセージが表示されます。

19. この参照を公開するオプションを選択します。「外部参照」スイムレーンに参照が自動的に作成され、Springサービス・コンポーネントに接続されます(この例では「EJB」が選択されています)。図52-12に詳細を示します。

図52-12 Springサービス・コンポーネントに接続されたEJB参照バインディング・コンポーネント

「図52-12 Springサービス・コンポーネントに接続されたEJB参照バインディング・コンポーネント」の説明

20. EJB参照をダブルクリックすると、図52-13に示すように、自動的に設定された構成が表示されます。この構成詳細は、ステップ11で「参照の挿入」ダイアログに入力した値から作成されています。

図52-13 「外部参照」スイムレーンの「EJB参照」ダイアログ

「図52-13 「外部参照」スイムレーンの「EJB参照」ダイアログ」の説明

21. ダイアログを閉じて、図52-14に示すようにSOAコンポジット・エディタに戻ります。

図52-14 Javaインタフェース・ベースのEJBサービスおよびEJB参照バインディング・コンポーネント

「図52-14 Javaインタフェース・ベースのEJBサービスおよびEJB参照バインディング・コンポーネント」の説明

22. 図52-15に示すように、カーソルをサービスの右ハンドルに置き、次に、図52-16に示すように、Springサービス・コンポーネントの左ハンドルに置きます。Javaインタフェースが表示されます。

図52-15 サービスのJavaインタフェース

「図52-15 サービスのJavaインタフェース」の説明

図52-16 Springサービス・コンポーネントのJavaインタフェース

「図52-16 Springサービス・コンポーネントのJavaインタフェース」の説明

23. Springサービス・コンポーネントの右ハンドル、および参照バインディング・コンポーネントの左ハンドルでも同様にカーソルを置いて、Javaインタフェースを表示します。

24. componentTypeファイル内のSpringサービス・コンポーネントのインタフェースを表示する場合は、アプリケーション・ナビゲータでこのファイルを選択します。両方のコンポーネントのインタフェースはinterface.javaで定義されています。

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Generated by Oracle SOA Modeler version 1.0 at [2/27/10 1:13 PM]. -->
<componentType
xmlns="http://xmlns.oracle.com/sca/1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ui="http://xmlns.oracle.com/soa/designer/">
<service name="scaserv1">
<interface.java interface="oracle.mypackage.myinterface"/>
</service>
<reference name="scaref1">
<interface.java interface="external.bean.myInterface"/>
</reference>
</componentType>

25. 「アプリケーション・ナビゲータ」で、composite.xmlファイルを選択して同様の詳細を表示します。

<service name="scaserv1">
<interface.java interface="oracle.mypackage.myinterface"/>
<binding.ejb uri="scaserv1_ejb_ep" ejb-version="EJB3"/>
</service>
<component name="MySpring">
<implementation.spring src="MySpring.xml"/>
</component>
<reference name="scaref1">
<interface.java interface="external.bean.myInterface"/>
<binding.ejb uri="scaref1_ejb_ep" ejb-version="EJB3"/>
</reference>
<wire>
<source.uri>orderprocessor_client_ep</source.uri>
<target.uri>OrderProcessor/orderprocessor_client</target.uri>
</wire>
<wire>
<source.uri>scaserv1</source.uri>
<target.uri>MySpring/scaserv1</target.uri>
</wire>
<wire>
<source.uri>MySpring/scaref1</source.uri>
<target.uri>scaref1</target.uri>
</wire>
</composite>

26. Springサービス・コンポーネントの右ハンドルを、Javaインタフェース・ベースのEJB参照ではなく、XMLベースのコンポーネント(Oracle Mediatorなど)に接続すると、互換性のあるWSDLファイルが生成されます。次の手順で詳細を説明します。

1. 図52-17に示すように、Springサービス・コンポーネントの右ハンドルをOracle Mediatorにドラッグします。

図52-17 Springサービス・コンポーネントとOracle Mediatorの統合

「図52-17 Springサービス・コンポーネントとOracle Mediatorの統合」の説明

2. Oracle MediatorのWSDLファイルから互換性のあるインタフェースが作成されたことを確認するプロンプトが表示された場合は、「OK」をクリックします。

図52-18 Oracle MediatorのWSDLファイルからのJavaファイル作成

「図52-18 Oracle MediatorのWSDLファイルからのJavaファイル作成」の説明

JavaインタフェースとWSDLベース・コンポーネント間の接続をドラッグすると、(Javaインタフェース名に基づく)デフォルト名のWSDLファイルがすでに存在する場合、4つのオプションがプロンプトされます。接続の作成を取り消すには、「取消」をクリックします。図52-19に詳細を示します。

図52-19 既存のWSDLファイル

「図52-19 既存のWSDLファイル」の説明

3. 互換性のあるインタフェースを表示するには、図52-20に示すように、カーソルをSpringサービス・コンポーネントの右ハンドルに置き、次に、図52-21に示すように、Oracle Mediatorの左ハンドルに置きます。

図52-20 Springサービス・コンポーネントのインタフェース

「図52-20 Springサービス・コンポーネントのインタフェース」の説明

図52-21 Oracle Mediatorのインタフェース

「図52-21 Oracle Mediatorのインタフェース」の説明

4. Springサービス・コンポーネントをダブルクリックすると、SpringエディタにSpringコンテキスト・ファイルの内容が表示されます。

<?xml version="1.0" encoding="windows-1252" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:sca="http://xmlns.oracle.com/weblogic/weblogic-sca"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/tool
http://www.springframework.org/schema/tool/spring-tool-2.5.xsd
http://xmlns.oracle.com/weblogic/weblogic-sca META-INF/weblogic-sca.xsd">
<!--Spring Bean defintions go here-->
<sca:service name="scaserv1" target="ep" type="oracle.mypackage.myinterface"/>
<sca:reference type="mediator1.project1.application4.com.oracle.xmlns.Execute_
ptt" name="Mediator1.Mediator1"/>
</beans>

Javaインタフェースを使用するコンポーネントとWSDLファイルを使用するコンポーネントを同じSOAコンポジット・アプリケーションに統合する方法の詳細は、第52.6項「Fusion Order DemoでのSpringサービス・コンポーネントの統合」を参照してください。

注意:

- Javaインタフェースを使用するコンポーネントとWSDLファイルを使用するコンポーネントとをSOAコンポジット・エディタで統合する際、インタフェース・クラスがクラスパスになく、ソース・ファイルがSOAプロジェクトに存在する場合は、現行のローダーのSCA-INF/libディレクトリにあるJARファイルが、インタフェース・クラスを見つけるために自動的にリフレッシュされます。

- Javaインタフェースを使用するサービスとのBPELプロセスのパートナ・リンクを作成することもできます。パートナ・リンクの作成時に、「サービス・エクスプローラ」ダイアログでこのサービスのタイプを選択します。詳細は、第4.3項「パートナ・リンクの概要」を参照してください。

52.3.2 JavaからWSDLへの変換時のJavaクラス・エラーに関する注意事項

JavaからWSDLへの変換が不正なJavaクラスにより失敗し、問題に対処するためJavaコードを変更した場合は、Oracle JDeveloperを再起動する必要があります。そうしないと、新規クラスが再ロードされないためにJavaからWSDLへの変換が失敗します。

52.4 グローバルSpringコンテキストを介したカスタムSpring Beanの定義

カスタムSpring Beanは、グローバルSpringコンテキスト定義を介して定義できます。この構成では、グローバル・レベルで1回のみ、これらのBeanを定義できます。

52.4.1 グローバルSpringコンテキストを介したカスタムSpring Beanの定義方法

グローバルSpringコンテキストを介してカスタムSpring Beanを定義する方法は、次のとおりです。

1. カスタムSpring Bean定義を次のファイルに追加します。

SOA_HOME/soa/modules/oracle.soa.ext_11.1.1/classes/
springse-extension-global-beans.xml

2. 対応するクラスをlibディレクトリ(JARファイルとして)またはクラス・ディレクトリ(JARファイルの抽出ファイルとして)に追加します。

SOA_HOME/soa/modules/oracle.soa.ext_11.1.1/lib | classes

詳細は、次のディレクトリにあるreadme.txtファイルを参照してください。

SOA_HOME/soa/modules/oracle.soa.ext_11.1.1

注意:

新しく追加されたSpring Beanを使用するにはサーバーを再起動する必要があります。

52.5 事前定義済のSpring Beanの使用

Oracle SOA Suiteには、次の事前定義済のSpring Beanがあります。

- headerHelperBean: ヘッダー・プロパティを取得および設定します。

- instanceHelperBean: 次の情報を取得および設定します。

- 現在実行中のコンポジット・インスタンスのインスタンスID。

- 現在実行中のコンポーネント・インスタンスのインスタンスID。

- コンポーネントが含まれているコンポジットの識別名(DN)。

- Springサービス・コンポーネントの名前。

- loggerBean: コンテキスト対応のロギング・メッセージの提供。Oracle Enterprise Manager Fusion Middleware Controlで、ロガー・ハンドラを定義し、そのハンドラのロギング・レベルを構成できます。そのロガーは、oracle.integration.platform.blocks.java.beans.implという名前になります。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の構成ログ・ファイルに関する項を参照してください。

事前定義済のSpring Beanは、Springサービス・コンポーネントに自動的に挿入されます。ただし、Springコンテキスト・ファイル内にそのBeanへの参照を挿入することで事前定義済のSpring BeanをSOAコンポジット・アプリケーションに明示的に統合する必要があります。

Springコンテキスト・ファイル内のloggerBeanおよびheaderHelperBeanの参照方法の例は、第52.5.4項「Springコンテキスト・ファイル内の事前定義済Spring Beanの参照方法」を参照してください。

52.5.1 headerHelperBeanのIHeaderHelperBean.javaインタフェース

例52-9は、headerHelperBean BeanのIHeaderHelperBean.javaインタフェースを示しています。

例52-9 IHeaderHelperBean.javaインタフェース

package oracle.soa.platform.component.spring.beans;
/**
* Interface for getting and setting header properties.
* These properties will be set on the normalized message - and passed on
* to the respective reference that the local reference is wired to on
* composite level.
* <br/>
* To use this bean from within your context, declare property
* with ref="headerHelperBean". E.g.
* &lt;property name="headerHelper" ref="<b>headerHelperBean</b>"/>
*/
public interface IHeaderHelperBean
{
/**
* Get a property from the normalized message header. Note that these
* properties are defined, and are the same ones, one can get/set via
* mediator or bpel process
* @param pKey the property key, case sensitive
* @return the value, or null in case not found
*/
public String getHeaderProperty (String pKey);
/**
* Set a property on the normalized message header. Note that these
* properties are defined, and are the same ones, one can get/set via
* mediator or bpel process
* @param pKey the property key, case sensitive
* @param pValue the value to be set
*/
public void setHeaderProperty (String pKey, String pValue);
}

52.5.2 instancerHelperBeanのIInstanceHelperBean.javaインタフェース

例52-10は、instanceHelperBean BeanのIInstanceHelperBean.javaインタフェースを示しています。

例52-10 IInstanceHelperBean.javaインタフェース

package oracle.soa.platform.component.spring.beans;

import oracle.integration.platform.instance.engine.ComponentInstanceContext;
/**
* Instancehelper Bean, gives access to composite / component + instance
information
* <br/>
* To use this bean from within your context, declare property
* with ref="instanceHelperBean". E.g.
* &lt;property name="instanceHelper" ref="<b>instanceHelperBean</b>"/>
*/
public interface IInstanceHelperBean
{
/**
* Returns the instance id of the composite instance currently running
* @return the composite instance id
*/
public String getCompositeInstanceId ();

/**
* Returns the instance id of the component instance currently running
* @return the component instance id
*/
public String getComponentInstanceId ();

/**
* Returns the composite dn containing this component
* @return the composite dn
*/
public String getCompositeDN ();

/**
* Returns the name of this spring component
* @return the component name
*/
public String getComponentName ();

}

52.5.3 loggerBeanのILoggerBean.javaインタフェース

例52-11は、loggerBean BeanのILoggerBean.javaインタフェースを示しています。

例52-11 ILoggerBean.javaインタフェース

package oracle.soa.platform.component.spring.beans;

import java.util.logging.Level;

/**
* Logger bean interface, messages will be logged as
* [&lt;composite instance id>/&lt;component instance id>] &lt;message>
* <br/>
* To use this bean from within your context, declare property
* with ref="loggerBean". E.g.
* &lt;property name="logger" ref="<b>loggerBean</b>"/>
*/
public interface ILoggerBean
{

/**
* Log a message, with Level.INFO
* @param message
*/
public void log (String message);

/**
* Log a message with desired level
* @param pLevel the log level
* @param message the message to log
*/
public void log (Level pLevel, String message);

/**
* Log a throwable with the desired level
* @param level the level to log with
* @param message the message
* @param th the exception (throwable) to log
*/
public void log (Level level, String message, Throwable th);

}

52.5.4 Springコンテキスト・ファイル内の事前定義済Spring Beanの参照方法

Springコンテキスト・ファイル内の事前定義済Beanへの参照を作成します。

Springコンテキスト・ファイル内の事前定義済Spring Beanを参照する方法は、次のとおりです。

1. Oracle JDeveloperの「ソース」ビューでSpringコンテキスト・ファイルを開きます。

2. 事前定義済BeanのloggerBeanおよびheaderHelperBeanへの参照を追加します。

<?xml version="1.0" encoding="windows-1252" ?>
. . .
. . .
<!--
The below sca:service(s) corresponds to the services exposed by the
component type file: SpringPartnerSupplierMediator.componentType
-->

<!-- expose the InternalPartnerSupplierMediator + EJB as service

<service name="IInternalPartnerSupplier">
<interface.java
interface="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>
</service>

-->
<sca:service name="IInternalPartnerSupplier"
target="InternalPartnerSupplierMediator"
type="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>

<!-- expose the InternalPartnerSupplierMediator + Mock as service

<service name="IInternalPartnerSupplierSimple">
<interface.java
interface="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>
</service>

-->
<sca:service name="IInternalPartnerSupplierSimple"
target="InternalPartnerSupplierMediatorSimple"
type="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>

<!-- the partner supplier mediator bean with the mock ep -->
<bean id="InternalPartnerSupplierMediatorSimple"
class="com.otn.sample.fod.soa.internalsupplier.InternalSupplierMediator"
scope="prototype">
<!-- inject the external partner supplier bean -->
<property name="externalPartnerSupplier"
ref="IExternalPartnerSupplierServiceMock"/>
<!-- inject the quoteWriter -->
<property name="quoteWriter" ref="WriteQuoteRequest"/>
<!-- context aware logger, globally available bean [ps3] -->
<property name="logger" ref="loggerBean"/>
<!-- headerHelper bean -->
<property name="headerHelper" ref="headerHelperBean"/>
</bean>

<!-- the partner supplier mediator bean with the ejb -->
<bean id="InternalPartnerSupplierMediator"
class="com.otn.sample.fod.soa.internalsupplier.InternalSupplierMediator"
scope="prototype">
<!-- inject the external partner supplier bean -->
<property name="externalPartnerSupplier"
ref="IExternalPartnerSupplierService"/>
<!-- inject the quoteWriter -->
<property name="quoteWriter" ref="WriteQuoteRequest"/>
<!-- context aware logger, globally available bean [ps3] -->
<property name="logger" ref="loggerBean"/>
<!-- headerHelper bean -->
<property name="headerHelper" ref="headerHelperBean"/>
</bean>
. . .
. . .

この構文は、Fusion Order DemoのPartner Supplier CompositeアプリケーションのSpringコンテキスト・ファイルに含まれています。詳細は、第52.6項「Fusion Order DemoでのSpringサービス・コンポーネントの統合」を参照してください。

52.6 Fusion Order DemoでのSpringサービス・コンポーネントの統合

Fusion Order DemoのPartner Supplier Compositeアプリケーションは、Springサービス・コンポーネントでパートナの倉庫から見積を取得する方法を提示します。図52-22に、このコンポジット・アプリケーションのSOAコンポジット・エディタを示します。

図52-22 Springサービス・コンポーネントを使用したPartner Supplier Composite

「図52-22 Springサービス・コンポーネントを使用したPartner Supplier Composite」の説明

IInternalPartnerSupplierは、外部クライアント・サービスとして「公開されたサービス」スイムレーンに公開されます。

Oracle Mediatorサービス・コンポーネントのPartnerSupplierMediatorは、見積金額に基づいてクライアント・リクエストを次のようにルーティングします。

- $2000未満の見積は、Oracle BPEL Process Managerにルーティングされます。

- $2000以上$3000未満のリクエストは、Springサービス・コンポーネントのSpringPartnerSupplierMediatorにルーティングされます。外部EJB参照バインディング・コンポーネントのIExternalPartnerSupplierServiceが起動して見積を取得します。また、外部ファイル・アダプタのWriteQuoteRequestが起動して見積結果をファイルに書き込みます。

- $3000以上のリクエストは、Springサービス・コンポーネントのSpringPartnerSupplierMediatorにルーティングされます。ただし、このリクエストは外部EJB参照バインディング・コンポーネントにルーティングされません。かわりに、EJBインタフェースを実装することにより、内部的に処理されます。また、外部ファイル・アダプタのWriteQuoteRequestが起動して見積結果をファイルに書き込みます。

図52-23に、この動作の概要を示します。

$2000以上$3000未満のリクエストの場合は、ターゲットBeanのInternalPartnerSupplierMediatorがサービスとして公開されます。ここでは、JavaインタフェースのIInternalPartnerSupplierが使用されます。「外部参照」スイムレーンでは、JavaインタフェースのIExternalPartnerSupplierServiceが外部EJBとして公開され、見積を取得します。

$3000以上のリクエストの場合は、ターゲットBeanのInternalPartnerSupplierMediatorSimpleがサービスとして公開されます。ここでは、JavaインタフェースのIInternalPartnerSupplierが使用されます。内部JavaインタフェースのIExternalPartnerSupplierServiceMockを使用して、見積を取得します。「外部参照」スイムレーンのIExternalPartnerSupplierService参照は起動されません。

「外部参照」スイムレーンでは、WriteQuoteRequest参照でWSDLベースのファイル・アダプタが使用され、Javaインタフェースはサポートされていないため、互換性のあるWSDLファイルが生成されます。

図52-23 Fusion Order DemoのSpringアーキテクチャ

「図52-23 Fusion Order DemoのSpringアーキテクチャ」の説明

例52-12に、IInternalPartnerSupplier.javaファイルを示します。IInternalPartnerSupplierはInternalSupplierMediatorによって実装されます。

例52-12 IInternalPartnerSupplier.java

package com.otn.sample.fod.soa.internalsupplier;
import
com.otn.sample.fod.soa.internalsupplier.exception.InternalSupplierException;
import java.util.List;
/**
* The interface for the spring based service, with a typed list.
*
*                 !!! ATTENTION !!!
* This interface was used to generate the wsdl
*  (IInternalPartnerSupplierService.wsdl) - DO NOT MODIFY!
*
*/
public interface

IInternalPartnerSupplier
{
/**
* Get a price for a list of orderItems
* @param pOrderItems the list of orderitems
* @return the price
*/
public double getPriceForOrderItemList(List<Orderitem> pOrderItems)
throws InternalSupplierException;

}

例52-13のSpringPartnerSupplierMediator.componentTypeファイルは、図52-23に示すSpringサービス・コンポーネントに対して定義されたサービスおよび参照を示します。

例52-13 SpringPartnerSupplierMediator.componentTypeファイル

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Generated by Oracle SOA Modeler version 1.0 at [7/16/09 2:36 PM]. -->
<componentType
xmlns="http://xmlns.oracle.com/sca/1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ui="http://xmlns.oracle.com/soa/designer/">
<service name="IInternalPartnerSupplier">
<interface.java
interface="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>
</service>
<service name="IInternalPartnerSupplierSimple">
<interface.java
interface="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>
</service>
<reference name="IExternalPartnerSupplierService">
<interface.java
interface="com.otn.sample.fod.soa.externalps.IExternalPartnerSupplierService"/>
</reference>
<reference name="WriteQuoteRequest">
<interface.java
interface="writequoterequest.partnersuppliercomposite.weblogicfusionorderdemo.file
.adapter.pcbpel.com.oracle.xmlns.Write_ptt"/>
</reference>
</componentType>

例52-14に、Springコンテキスト・ファイルのSpringPartnerSupplierMediator.xmlを示します。

例52-14 Springコンテキスト・ファイルのSpringPartnerSupplierMediator.xml

<?xml version="1.0" encoding="windows-1252" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:sca="http://xmlns.oracle.com/weblogic/weblogic-sca">
<!--
The below sca:service(s) corresponds to the services exposed by the
component type file: SpringPartnerSupplierMediator.componentType
-->

<!-- expose the InternalPartnerSupplierMediator + EJB as service

<service name="IInternalPartnerSupplier">
<interface.java
interface="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>
</service>

-->
<sca:service name="IInternalPartnerSupplier"
target="InternalPartnerSupplierMediator"
type="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>

<!-- expose the InternalPartnerSupplierMediator + Mock as service

<service name="IInternalPartnerSupplierSimple">
<interface.java
interface="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>
</service>

-->
<sca:service name="IInternalPartnerSupplierSimple"
target="InternalPartnerSupplierMediatorSimple"
type="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>

<!-- the partner supplier mediator bean with the mock ep -->

<bean id="InternalPartnerSupplierMediatorSimple"
class="com.otn.sample.fod.soa.internalsupplier.InternalSupplierMediator"
scope="prototype">

<!-- inject the external partner supplier bean -->
<property name="externalPartnerSupplier"
ref="IExternalPartnerSupplierServiceMock"/>
<!-- inject the quoteWriter -->

<property name="quoteWriter" ref="WriteQuoteRequest"/>
<!-- context aware logger, globally available bean [ps3] -->
<property name="logger" ref="loggerBean"/>
<!-- headerHelper bean -->
<property name="headerHelper" ref="headerHelperBean"/>
</bean>
<!-- the partner supplier mediator bean with the ejb -->

<bean id="InternalPartnerSupplierMediator"
class="com.otn.sample.fod.soa.internalsupplier.InternalSupplierMediator"
scope="prototype">
<!-- inject the external partner supplier bean -->
<property name="externalPartnerSupplier"
ref="IExternalPartnerSupplierService"/>
<!-- inject the quoteWriter -->
<property name="quoteWriter" ref="WriteQuoteRequest"/>
<!-- context aware logger, globally available bean [ps3] -->
<property name="logger" ref="loggerBean"/>
<!-- headerHelper bean -->
<property name="headerHelper" ref="headerHelperBean"/>
</bean>

<!-- mock bean for the IExternalPartnerSupplierService -->
<bean id="IExternalPartnerSupplierServiceMock"

class="com.otn.sample.fod.soa.externalps.test.MockExternalPartnerSupplierTest"/>

<!--
Use a reference from the outside world based on the
IExternalPartnerSupplierService interface.
The below is specified on the SpringPartnerSupplierMediator.componentType -
and wired to an external EJB binding.
<reference name="IExternalPartnerSupplierService">
<interface.java
interface="com.otn.sample.fod.soa.externalps.IExternalPartnerSupplierService"/>
</reference>   -->
<sca:reference name="IExternalPartnerSupplierService"
type="com.otn.sample.fod.soa.externalps.IExternalPartnerSupplierService"/>
<!--
<reference name="WriteQuoteRequest">
<interface.java
interface="writequoterequest.partnersuppliercomposite.weblogicfusionorderdemo.file
.adapter.pcbpel.com.oracle.xmlns.Write_ptt"/>
</reference>   -->
<sca:reference
type="writequoterequest.partnersuppliercomposite.weblogicfusionorderdemo.file.adap
ter.pcbpel.com.oracle.xmlns.Write_ptt"
name="WriteQuoteRequest"/>
</beans>

Fusion Order Demoのダウンロードとインストール方法、およびPartner Supplier Compositeの使用方法の詳細は、第3.2項「Fusion Order Demoアプリケーションの設定」を参照してください。

ダウンロードした後は、次のFusion Order Demoディレクトリで、Partner Supplier Compositeで使用するJavaコードのサンプルを参照してください。

CompositeServices\PartnerSupplierComposite\src\com\otn\sample\fod\soa

52.6.1 Javaベクトル・タイプ・パラメータを使用したEJBの使用方法

Javaコードにはベクトルを含めることができます。ただし、コンテンツPOJOを宣言しないと、ベクトルをXMLにシリアライズできません。次の例では、この問題を解決して、Fusion Order Demoのコード・サンプルを使用する方法の概要を示します。

Javaベクトル・タイプ・パラメータを使用してEJBを使用する手順は、次のとおりです。

1. 図52-24に示すように、Javaコードにベクトルが含まれているとします。

図52-24 ベクトル

「図52-24 ベクトル」の説明

2. Javaインタフェース・クラスおよびJNDI名に基づいて、EJBバインディング参照を作成します。図52-25に例を示します。

図52-25 EJBバインディング参照の作成

「図52-25 EJBバインディング参照の作成」の説明

3. 図52-26に示すように、EJB参照をSpringサービス・コンポーネントに接続します。

図52-26 Springサービス・コンポーネントに接続されたEJB参照

「図52-26 Springサービス・コンポーネントに接続されたEJB参照」の説明

新しい参照がSpringコンテキスト・ファイルに作成されます。図52-27に詳細を示します。

図52-27 Springコンテキスト・ファイルへの参照の追加

「図52-27 Springコンテキスト・ファイルへの参照の追加」の説明

4. IExternalPartnerSupplierServiceタイプのpublicメンバーを宣言してSpringを有効にし、参照をクラスに挿入します。図52-28に詳細を示します。

図52-28 publicメンバーの宣言

「図52-28 publicメンバーの宣言」の説明

5. メンバーの名前でプロパティをIExternalPartnerSupplierServiceに追加し、ExternalPartnerSupplier参照Beanを参照します。図52-29に詳細を示します。

図52-29 メンバーの名前で追加したプロパティ

「図52-29 メンバーの名前で追加したプロパティ」の説明

これによって、ベクトルがEJBパラメータに変換されます。

52.7 JAXBおよびOXMのサポート

Oracle Fusion Middlewareでは、JavaクラスをXMLデータにマップするために、JAXBおよびEclipseLink OXMの使用がサポートされています。これによって、データを任意のXML形式でメモリーに保存および取得できるため、プログラムのクラス構造に対する一連の固有なXMLルーチンの実装は不要です。このサポートによって、次の操作を実行できます。

- XMLデータへのJavaオブジェクトのマップ

- JavaオブジェクトへのXMLデータのマップ

JAXBマッピング用の外部メタデータの設計情報は、次のURLを参照してください。

http://wiki.eclipse.org/EclipseLink/DesignDocs/277920

JAXB OXMおよびOXMマッピング・ファイル(eclipselink-oxm.xsd)の詳細は、次のURLを参照してください。

http://wiki.eclipse.org/EclipseLink/FAQ/WhatIsMOXy

http://wiki.eclipse.org/EclipseLink/Examples/MOXy

http://wiki.eclipse.org/Category:XML

EJBをSOAコンポジット・アプリケーションに統合する場合は、JavaクラスをXMLデータにマップすることもできます。詳細は、第38章「Enterprise JavaBeansとSOAコンポジット・アプリケーションの統合」を参照してください。

52.7.1 拡張されたマッピング・ファイル

Oracle SOA Suiteでは、拡張されたマッピング(EXM)ファイルを使用することにより、JAXBおよびOXMファイルのサポートが拡張されています。EXMファイルが設計時プロジェクトのクラスパス内に存在する場合は、そのファイルをJavaからWSDLへの変換に使用できます。EXMファイルには、次の場合のデータ・バインディング・メタデータが用意されています。

- JAXB注釈をJavaソースに追加できず、個別に指定する必要がある場合

- シナリオがJAXBの対象外である場合(例: メソッドなど最上位レベル要素がタイプまたはパラメータ・タイプを戻す場合)

外部JAXB注釈は、EXMファイルに直接指定するか、またはEXMファイルから参照可能な個別のTopLink JAXBマッピングOXMファイルに含めることができます。

EXMファイル名はJavaクラス名と一致し、同じパッケージの場所に存在する必要があります。たとえば、Javaクラスの名前がpack1.pack2.myJavaInterface.classの場合、EXMファイルの名前はpack1/pack2/myJavaInterface.exmにする必要があります。

Oracle SOA Suiteでは、設計時に、EXMファイルをソース・パス(SCA-INF/src)またはクラスパス(SCA-INF/classes、またはSCA-INF/libのJAR)のいずれかに配置できます。

EXMファイルをソース・パス(SCA-INF/src)に配置すると、Oracle JDeveloperを使用してEXMを編集できます(クラスパス内のファイルはOracle JDeveloperの「アプリケーション・ナビゲータ」に表示されません)。プロジェクトのコンパイルが完了すると、EXMファイル(およびすべてのインポートされたXMLファイル)はデプロイメントのクラス・パス(SCA-INF/classes)にコピーされます。EXMファイルがソース・パスにある場合にも、対応する同じディレクトリ構造内にある必要があります。

EXM(およびOXM)ファイルをSCA-INF/srcに置く場合は、Oracle JDeveloperプロジェクトが、SCA-INF/srcがデフォルトのソース・ディレクトリになるように構成されていることを確認します(プロジェクト名を右クリックし、「プロジェクト・プロパティ」→「Javaソースパス」を選択します)。EXMファイルは、プロジェクトのクラス・パスにあるJARファイルにもあります。

Javaインタフェース(Enterprise JavaBeans)をBPELプロセスにドラッグ・アンド・ドロップすると、Oracle SOA SuiteではEXMファイルが存在するかどうかが確認されます。存在する場合は、Webサービスjava2wsdl APIに渡されます。

WSDLファイルが生成された後、情報メッセージが表示されます。EXMファイルが使用された場合、メッセージは次の書式で表示されます。

The WSDL file {0} was generated based on the JAVA class {1} using extended mapping file {2}

例52-15に、EXMファイルの例を示します。

例52-15 EXMサンプル・ファイル

<java-wsdl-mapping name="com.hello.sei.MyServiceEndpointInterface"
xmlns="http://xmlns.oracle.com/weblogic/weblogic-wsee-databinding"
xmlns:oxm="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
databinding="toplink.jaxb">

<xml-schema-mapping>
<toplink-oxm-file java-package="com.hello.foo"  file-path="./foo-oxm.xml"/>
<toplink-oxm      java-package="com.hello.coo">
<xml-bindings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm">
<xml-schema
element-form-default="QUALIFIED"
attribute-form-default="UNQUALIFIED"
namespace="urn:customer">
<xml-ns prefix="ns1" namespace-uri="urn:customer" />
</xml-schema>
<java-types>
<java-type name="Person" xml-transient="true">
<java-attributes>
<xml-transient java-attribute="id"/>
</java-attributes>
</java-type>
<java-type name="Customer">
<xml-see-also>org.example.employee.Employee</xml-see-also>
</java-type>
</java-types>
</xml-bindings>
</toplink-oxm>
</xml-schema-mapping>
. . .
</java-wsdl-mapping>

データ・バインディング・フレームワークに対する外部マッピング・メタデータのEXMスキーマ・ファイルは、次のURLから入手できます。

http://www.oracle.com/technology/weblogic/weblogic-wsee-databinding/1.1/weblogic-wsee-databinding.xsd

このデータによって、特定のJava Webサービス・エンドポイントの属性が定義されます。このスキーマでは、次の3タイプのXMLコンストラクトが定義されます。

- JAX-WSまたはJSR-181に類似したコンストラクト。このコンストラクトは、サービス・エンドポイント・インタフェース(SEI)の属性、およびSEIのインタフェースで使用される値タイプのJAXB注釈を上書きまたは定義します。

- 追加のマッピング仕様。この仕様は、標準のJAX-WSまたはJAXB注釈を使用する場合は使用不可で、主にjava.util.Collections APIで使用します。

- Toplink OXMファイルから外部JAXBマッピング・メタデータへの参照。

コンストラクトがJAX-WS、JSR-181またはJAXB注釈に非常に類似している場合、スキーマ内のコメントには、次のような注釈が表示されます。

Corresponding Java annotation: javax.jws.WebParam.Mode

52.8 Springサービス・コンポーネントによるGroovyおよびAspectjクラスの構成

Spring構成ファイルでGroovyまたはAspectjクラスを構成する場合は、次の規則に従う必要があります。

- classpathプロトコルを使用します。

script-source="classpath:"

SCAパッケージはクラス・ローダーの通常のJARファイルとして処理されないため、相対ファイル・パスは使用できません。たとえば、次のclasspathプロトコルはクラス・パスからGroovyファイルを検索することを示します。

script-source="classpath:service/GroovyGreeter.groovy"

- classpathプロトコルを使用する場合は、GroovyファイルとAspectjファイルを次のいずれかのディレクトリに追加します。他のディレクトリは使用できません。

- SCA-INF/classes

- SCA-INF/lib

- 共有SOA lib

ビルド・スクリプトがclassesディレクトリを削除するように構成されている場合は、GroovyファイルをSCA-INF/libディレクトリに格納するか、またはビルド・スクリプトを削除が行われないように設計します。

- GroovyまたはAspectjのSpring拡張JARファイル・ライブラリを管理対象サーバーのsetDomainENV.shまたはsetDomainENV.batファイルのクラス・パスに追加し、サーバーを再起動します。これにより、デプロイメントが正常に実行されることが保証されます。SpringではJavaリフレクションを使用してアスペクト指向プログラミング(AOP)がインスタンス化されるため、再起動が必要です。リフレクションの使用により、クラスの検索がシステム・クラス・ローダーに限定されます。システム・クラス・ローダーに変更を加えた場合は、サーバーの再起動が必要になります。

52.9 Springエラーのトラブルシューティング

SOAコンポジット・アプリケーションがあり、その中でBPELプロセスによってSpringコンテキストが起動されるとします。しかし、起動するためのSpring Beanインタフェースが見つかりません。管理サーバー診断ログ・ファイルに、例52-16に示すエラーが表示されます。

例52-16 Spring Bean起動エラー

[2012-04-09T10:30:07.499-07:00] [AdminServer] [NOTIFICATION] [SOA-31704]
[oracle.integration.platform.blocks.java] [tid: [ACTIVE].ExecuteThread: '2' for
queue: 'weblogic.kernel.Default (self-tuning)'] [userId: <anonymous>] [ecid:
11d1def534ea1be0:2058db3f:1369787a1b8:-8000-0000000000002be6,0:2] [WEBSERVICE_
PORT.name: SOACohSpringBPELProcess_pt] [APP: soa-infra] [composite_name:
SOACohSpringProj] [component_name: SOACohSpringBPELProcess] [component_instance_
id: 270006] [J2EE_MODULE.name: fabric] [WEBSERVICE.name: soacohspringbpelprocess_
client_ep] [J2EE_APP.name: soa-infra] No mapping found for class
SOACohSpringProj.CohEJBInterface.

その1つのクラスを含むJARファイルをSCA-INF/libディレクトリにデプロイするか、複数のクラスをSARファイルのSCA-INF/classesディレクトリにデプロイします。

第X部

Oracle Business Activity Monitoringの使用

この部では、Oracle Business Activity Monitoringについて説明します。

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

- 第53章「Oracle BAMとSOAコンポジット・アプリケーションの統合」

- 第54章「Oracle BAMデータ・コントロールの使用」

- 第55章「Oracle BAMデータ・オブジェクトの定義および管理」

- 第56章「Oracle BAMエンタープライズ・メッセージ・ソースの作成」

- 第57章「Oracle Data IntegratorとOracle BAMの併用」

- 第58章「外部データ・ソースの作成」

- 第59章「Oracle BAM Webサービスの使用」

- 第60章「Oracle BAMアラートの作成」

- 第61章「ICommandの使用」

53 Oracle BAMとSOAコンポジット・アプリケーションの統合

この章では、Oracle JDeveloperでOracle Business Activity Monitoring(Oracle BAM)アダプタをSOAコンポジット・アプリケーションに統合し、アクティビティ・モニターおよび監視オブジェクト(カウンタ、ビジネス・インジケータ、間隔など)を使用して、BPELプロセス・メトリックを取得する方法について説明します。ここでは、Oracle BAM Monitor Expressを使用して、キー・パフォーマンス・インディケータ(KPI)をトラッキングする方法について説明し、デプロイ済BPELプロセスに関するデータを取得するMonitor Expressデータ・オブジェクトについて詳細に説明します。イベントベースのデータをパブリッシュするためのBPELセンサーとOracle BAMセンサー・アクションの統合に関する情報についても説明します。

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

- 第53.1項「Oracle BAMとSOAコンポジット・アプリケーションの統合の概要」

- 第53.2項「Oracle BAMアダプタの構成」

- 第53.3項「Oracle BAM Monitor ExpressとBPELプロセスの併用」

- 第53.4項「Oracle BAMサーバーへの設計時接続の作成」

- 第53.5項「SOAコンポジット・アプリケーションでのOracle BAMアダプタの使用」

- 第53.6項「BPELプロセスでのOracle BAMアダプタの使用」

- 第53.7項「Oracle BAMセンサー・アクションを使用したBPELセンサーの統合」

- 第53.8項「エンタープライズ・メッセージ・リソースを使用したSOAアプリケーションとOracle BAMの統合」

53.1 Oracle BAMとSOAコンポジット・アプリケーションの統合の概要

Oracle BAMアダプタは、Oracle BAMサーバーにデータとイベントを送信するためにJava EEクライアントから使用できるJava Connector Architecture(JCA)準拠のアダプタです。Oracle BAMアダプタでは、Oracle BAMデータ・オブジェクトに対する挿入、更新、アップサートおよび削除の各操作がサポートされています。

Oracle BAMアダプタは、これらの操作をRemote Method Invocation(RMI)コール(同じファームにデプロイされている場合)、直接Javaオブジェクト起動(同じコンテナにデプロイされている場合)、またはSimple Object Access Protocol(SOAP)(両者の間にファイアウォールがある場合)を介して実行できます。

Oracle BAMアダプタは、これらのいずれかの接続プールを提供するために、Oracle WebLogic Server管理コンソール内で構成されます。詳細は、第53.2項「Oracle BAMアダプタの構成」を参照してください。

構成によっては、SOAコンポジット・アプリケーションをOracle BAMに接続する必要があります。詳細は、第53.4項「Oracle BAMサーバーへの設計時接続の作成」を参照してください。

Oracle BAMアダプタをSOAコンポジット・アプリケーションの様々な機能とともに使用して、Oracle BAMサーバーにデータを送信できます。

- Oracle BAMアダプタは、BPELプロセス・モニターから、自動生成されるOracle BAMデータ・オブジェクトにデータを転送します。詳細は、第53.3項「Oracle BAM Monitor ExpressとBPELプロセスの併用」を参照してください。

- Oracle BAMアダプタは、SOAコンポジット・アプリケーションで参照バインディング・コンポーネントとして使用できます。たとえば、Oracle Mediatorは、Oracle BAMアダプタを使用してOracle BAMにデータを送信できます。詳細は、第53.5項「SOAコンポジット・アプリケーションでのOracle BAMアダプタの使用」を参照してください。

- Oracle BAMアダプタは、Business Process Execution Language(BPEL)プロセスでパートナ・リンクとして使用し、プロセスの1つのステップとしてOracle BAMにデータを送信することもできます。詳細は、第53.6項「BPELプロセスでのOracle BAMアダプタの使用」を参照してください。

- (Oracle BAM Adapterを使用する)Oracle BAMセンサー・アクションをBPELプロセス内に組み込み、イベントベースのデータをOracle BAMデータ・オブジェクトにパブリッシュできます。詳細は、第53.7項「Oracle BAMセンサー・アクションを使用したBPELセンサーの統合」を参照してください。

BPELセンサーのJMSセンサー・アクションは、Oracle BAMにフィード・データを送信し、Oracle BAMアダプタを回避することもできます。詳細は、第53.8項「エンタープライズ・メッセージを使用したSOAアプリケーションとOracle BAMの統合」を参照してください。

SOAコンポジット・アプリケーション・レベルのJMSセンサー・アクションは、Oracle BAMにフィード・データを送信できます。詳細は、第50章「コンポジット・センサーの定義」を参照してください。

53.2 Oracle BAMアダプタの構成

Oracle BAMサーバーとのランタイム接続にOracle BAMアダプタを使用する場合は、Oracle BAMアダプタのJava Naming and Directory Interface(JNDI)接続プールを構成する必要があります。構成の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のOracle BAMアダプタの構成に関する項を参照してください。

Oracle BAMアダプタのプロパティで構成するJDNI名をメモしておき、Oracle JDeveloperのOracle BAMアダプタ・ウィザード、Monitor Express構成およびOracle BAMセンサー・アクションの構成で使用できるようにしてください。

SOAコンポジット・アプリケーションとOracle BAMサーバー間でRMI接続を使用している場合、つまり両者が別々のドメインにデプロイされている場合は、信頼できるドメインの構成をOracle WebLogic Server管理コンソールで実行する必要があります。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のOracle BAMアダプタの構成に関する項を参照してください。

53.3 Oracle BAM Monitor ExpressとBPELプロセスの併用

Oracle BAMが提供するMonitor Expressには、Oracle BAMデータ・オブジェクトのデプロイメントおよび移入を自動的に処理する、BPELプロセスの高度なインストゥルメンテーションが用意されています。図53-1に詳細を示します。

図53-1 Oracle BAM Monitor Expressダッシュボード

「図53-1 Oracle BAM Monitor Expressダッシュボード」の説明

アクティビティ・モニターと監視オブジェクトを使用してBPELプロセス・メトリックが取得されます。BPELプロセス・メトリックは、Oracle BAMサーバーに送信され、分析およびグラフィック表示に使用されます。接続、設計およびデプロイメントの構成はすべて、Oracle JDeveloperで実行します。

Monitor Expressには、自動的にデプロイされたデータ・オブジェクトに基づいて構築できるソリューションをデモするためのサンプル・ダッシュボードが同梱されています。Oracle BAM Active StudioまたはADFアプリケーション内のOracle BAMデータ・コントロールを使用して、Monitor Expressによって生成されるデータ・オブジェクト上にカスタム・ ダッシュボードを構築することもできます。

Oracle JDeveloperでBPELデザイナの「監視」ビューを使用すると、BPELプロセスに関する次のタイプのモニターを作成できます。

- アクティビティ・モニターでは、BPELプロセスのアクティビティ、スコープおよびヒューマン・タスクの実行時データが取得されます。アクティビティ・モニターは、BPELプロセスのボトルネックの識別に役立ちます。詳細は、第53.3.2項「アクティビティ・モニターの構成方法」を参照してください。

- カウンタ監視オブジェクトでは、BPELプロセス内で特定のBPELアクティビティ・イベントが発生した日時が取得されます。カウンタは、特定のアクティビティが一定期間に実行される回数をレポートする場合に役立ちます。詳細は、第53.3.4項「カウンタの構成方法」を参照してください。

- 間隔監視オブジェクトでは、プロセスが、あるBPELアクティビティ・イベントから別のBPELアクティビティ・イベントに移行するまでに要した時間が取得されます。間隔監視オブジェクトは、BPELプロセスのボトルネックの識別に役立ちます。詳細は、第53.3.5項「間隔の構成方法」を参照してください。

- ビジネス・インジケータ監視オブジェクトは、BPELプロセス内の指定されたアクティブ・イベントでBPEL変数または式のスナップショットを取得します。詳細は、第53.3.6項「ビジネス・インジケータの構成方法」を参照してください。

SOAコンポジット・アプリケーションをデプロイすると、BPELプロセス・モニターに対応するOracle BAMデータ・オブジェクトが自動的に作成または更新されます。

関連ドキュメント

- 第55章「Oracle BAMデータ・オブジェクトの定義および管理」

- 『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』

53.3.1 BPELデザイナの「監視」ビューへのアクセス方法

BPELプロセス・モニターを構成するには、BPELデザイナの「監視」ビューを使用します。BPELデザイナの「監視」ビューにアクセスするには、BPELデザイナのツールバーにある「監視」を選択します。

図bam_mon_menu.gifの説明

「監視」ビューの「構造」ウィンドウに、「オブジェクトの監視」フォルダが表示されます。フォルダを開くと、「ビジネス・インジケータ」、「間隔」および「カウンタ」の各フォルダが表示されます。

図bam_mon_struct.gifの説明

53.3.2 アクティビティ・モニターの構成方法

個別のBPELアクティビティ、スコープおよびヒューマン・タスクを含め、BPELプロセスの開始時間と終了時間に関するデータを取得するには、アクティビティ・モニターを構成し、有効にします。

アクティビティ・モニターを構成する手順は、次のとおりです。

1. BPELプロセスの「監視」ビューで、BPELデザイナ・ツールバーにある「構成の監視」をクリックします。
図bpel_mon_actconfig.gifの説明

注意:

グローバルな「監視の有効化」フラグは、ローカル設定をオーバーライドします。

2. 「構成の監視」ダイアログで、「アクティビティ監視の有効化」を選択し、監視のレベルを構成する「モード」を選択します。
図bpel_mon_actdialog.gifの説明

- 「すべてのアクティビティ」オプションを選択すると、個別のアクティビティ、スコープおよびヒューマン・タスクを含め、BPELプロセスの全アクティビティの開始時間と終了時間に関するデータが取得されます。アクティビティは、アクティビティに対するアクティブ化イベントが開始されると開始し、完了イベントが終了すると終了します。

- 「スコープとヒューマン・タスクのみ」オプションを選択すると、BPELプロセスに定義されているすべてのスコープおよびヒューマン・タスクの開始時間と終了時間に関するデータが取得されます。スコープは、スコープ内の最初のアクティビティのアクティブ化イベントが開始されると開始し、スコープ内の最終アクティビティの完了イベントが終了すると終了します。ヒューマン・タスク・アクティビティは、ヒューマン・タスク・アクティビティに対するアクティブ化イベントが開始されると開始し、ヒューマン・タスク・アクティビティの完了イベントが終了すると終了します。

- 「ヒューマン・タスクのみ」オプションを選択すると、BPELプロセスに定義されているすべてのヒューマン・タスク・アクティビティの開始時間と終了時間に関するデータが取得されます。

- 「BPELプロセスのみ」オプションを選択すると、BPELプロセスの開始時間と終了時間に関するデータが取得されます。

アクティビティ・モニターを無効にするには、「アクティビティ監視の有効化」チェック・ボックスの選択を解除します。

3. 「OK」をクリックします。
アクティビティ・モニターが有効な場合、データは実行時にOracle BAMデータ・オブジェクトに送信されます。オブジェクトを監視するためのOracle BAMデータ・オブジェクトに関する詳細は、第53.3.10項「Monitor Expressデータ・オブジェクトに関する注意事項」を参照してください。

53.3.3 BPELプロセス監視オブジェクトの作成方法

Oracle JDeveloperでBPELデザイナの「監視」ビューを使用して、BPELプロセス監視オブジェクトを作成します。

BPELプロセス監視オブジェクトを作成する手順は、次のとおりです。

1. 「監視」ビューを表示している状態で、BPELプロセス・ダイアグラムでアクティビティのコンテキスト・メニューを開き、「作成」を選択して、リストから監視オブジェクトのタイプを選択します。
図bam_mon_create_act.gifの説明

または、BPELデザイナのウィンドウの左上にある「オブジェクトの監視」メニューを使用して、監視オブジェクトを作成します。

図bam_mon_create_menu.gifの説明

別の方法として、「構造」ウィンドウで各「オブジェクトの監視」タイプのフォルダに対するコンテキスト・メニューを開いて、監視オブジェクトを作成することもできます。

図bam_mon_create_struc.gifの説明

BPELプロセスの構成可能な監視オブジェクトは、「カウンタ」、「間隔」および「ビジネス・インジケータ」の3つのタイプで使用できます。詳細は、次の各項を参照してください。

- 第53.3.4項「カウンタの構成方法」

- 第53.3.5項「間隔の構成方法」

- 第53.3.6項「ビジネス・インジケータの構成方法」

2. 実行時にBPELプロセス監視オブジェクトを有効にするには、BPELデザイナの「監視」ビューの左上にある「監視の有効化」チェック・ボックスが選択されていることを確認します。図53-2に詳細を示します。

図53-2 「監視の有効化」チェック・ボックス

「図53-2 「監視の有効化」チェック・ボックス」の説明

BPELデザイナの「監視の有効化」オプションを選択している場合は、現在のSOAコンポジット・アプリケーションに含まれる全BPELプロセスのモニターとセンサーがすべて有効になります。監視オブジェクト・レベルの有効化フラグはすべて上書きされます。

「監視の有効化」オプションを選択していない場合は、enableProcessSensorsというプロパティが値falseでcomposite.xmlに追加されます。このプロパティによって、現在のSOAコンポジット・アプリケーションに含まれる全BPELプロセスのモニターとセンサーがすべて無効になります。

53.3.4 カウンタの構成方法

BPELプロセスが(BPELプロセス・ダイアグラムでアクティビティに添付されている)カウンタのスナップショットを渡すたびに、データがOracle BAMに送信されます。カウンタによって、BPELアクティビティの発生頻度が示され、時間データを含む新規レコードがOracle BAMデータ・オブジェクトに作成されます。

「カウンタ」ダイアログを使用して、カウンタ監視オブジェクトを構成します。

図bam_mon_countconfig.gifの説明

「有効」チェック・ボックスによって、この特定の監視オブジェクトが有効または無効になります。有効にしない場合、カウンタはBPELプロセス時に評価されないため、Oracle BAMにデータは送信されません。

カウンタのスナップショットをBPELアクティビティに添付するには、「カウンタ」ダイアログで「追加」アイコンをクリックします。表示されるリストからアクティビティを選択します。

図bam_mon_countact.gifの説明

次に、参照アイコンをクリックして、評価イベント(アクティビティ内のイベント)を選択します。

図bam_mon_evalbrowse.gifの説明

「評価イベント・チューザ」ダイアログが開き、1つ以上の評価イベントを選択できます。

図bam_mon_eventchooser.gifの説明

カウンタ・スナップショットの構成が完了すると、BPELプロセス・ダイアグラムのアクティビティの横に「N」アイコンとして表示されます。

図bam_mon_counticon.gifの説明

カウンタとそのスナップショットが「構造」ウィンドウに表示されます。

図bam_mon_countstruc.gifの説明

53.3.5 間隔の構成方法

間隔監視オブジェクトでは、BPELプロセス内のあるアクティビティが別のアクティビティに移行するまでに要した時間が取得されます。開始時間と終了時間が取得され、Oracle BAMデータ・オブジェクトに送信されます。

「間隔」ダイアログを使用して、間隔監視オブジェクトを構成します。

図bam_mon_intconfig.gifの説明

「有効」チェック・ボックスによって、この特定の監視オブジェクトが有効または無効になります。有効にしない場合、間隔はBPELプロセス時に評価されないため、Oracle BAMにデータは送信されません。

「開始アクティビティ」で間隔の開始を定義します。リストから開始アクティビティを選択し、「評価イベント」リストから1つ選択します。

「終了アクティビティ」で間隔の終了を定義します。リストから終了アクティビティを選択し、「評価イベント」リストから1つ選択します。

BPELプロセスにビジネス・インジケータを事前に定義している場合は、「関連付けられた参照」を選択できます。関連インジケータを選択すると、選択したビジネス・インジケータに関する2つのスナップショットが自動的に提供されます。この結果、間隔の開始時と終了時にビジネス・インジケータ・メトリックが取得されます。

注意:

関連インジケータのスナップショットを間隔に組み込む場合は、「アクティブ化」評価イベントで、開始ポイントまたは終了ポイントとしてmainまたはreceiveInputアクティビティを使用しないことをお薦めします。これは、XPath式の変数がまだ移入されていない可能性があるためです。

タイプがreceiveのBPELアクティビティ(通常はreceiveInputという名前)では、プロセスは一致するメッセージの受信を待機できます。受信メッセージは、アクティビティの定義に指定された変数にコピーされます。コピー操作は、activate以前ではなく、activate評価イベントとcomplete評価イベントの間に行われます。したがって、タイプがreceiveのBPELアクティビティに監視オブジェクトのスナップショットを定義する場合は注意が必要であり、activate評価イベントを選択している場合は特に注意する必要があります。

間隔が「構造」ウィンドウに表示されます。

図bam_mon_intstruc.gifの説明

実行時に、間隔の開始時間と終了時間がデータ・オブジェクトの新規レコードとしてOracle BAMに送信されます。Oracle BAMデータ・オブジェクトの詳細は、第53.3.10項「Monitor Expressデータ・オブジェクトに関する注意事項」を参照してください。

空の間隔(開始アクティビティと終了アクティビティおよび評価イベントが同じである間隔)は有効であり、ビジネス・インジケータのスナップショットをラベル付けできます。間隔によって、単一のビジネス・インジケータに対する複数のスナップショットを一意に識別できます。「ビジネス・インジケータ」ダイアログでスナップショットを構成するかわりに、ビジネス・インジケータに対して作成する各スナップショットごとに空の間隔を作成して、各間隔でビジネス・インジケータのインジケータ参照を選択できます。

53.3.6 ビジネス・インジケータの構成方法

ビジネス・インジケータ監視オブジェクトでは、ビジネス・インジケータで指定されたイベントがBPELプロセスで発生したときに、ビジネス・インジケータのメトリックによって指定されたBPEL変数のスナップショットが取得されるか、または式が評価されます。

「ビジネス・インジケータ」ダイアログを使用して、ビジネス・インジケータ監視オブジェクトを構成します。

図bam_mon_biconfig.gifの説明

「有効」チェック・ボックスによって、この特定の監視オブジェクトが有効または無効になります。有効にしない場合、ビジネス・インジケータの構成済の式はBPELプロセス時に評価されないため、Oracle BAMにデータは送信されません。

「メトリック」は、ビジネス・インジケータで指定されたイベントがBPELプロセスで発生したときに、式または変数を評価するために定義します。

メトリックを構成するには、緑のプラス・アイコンをクリックします。メトリックには、名前、データ型およびXPath式があります。

図bam_mon_bimetric.gifの説明

「XPath」フィールドに式を直接入力するか、または「編集」をクリックして「メトリック」構成ダイアログを開き、「編集」をクリックして「式ビルダー」を使用します。

図bam_mon_metric.gifの説明

「スナップショット」では、ビジネス・インジケータをBPELプロセス内のアクティビティと関連付けます。また、ビジネス・インジケータのメトリックを評価するポイントをBPELプロセスに通知します。スナップショットを作成するには、緑のプラス・アイコンをクリックします。

図bam_mon_bisnapact.gifの説明

注意:

空の間隔監視オブジェクトを使用すると、特定のビジネス・インジケータのスナップショットを一意に識別できます。詳細は、第53.3.5項「間隔の構成方法」を参照してください。

「評価イベント」では、アクティビティのどのポイントでビジネス・インジケータのメトリックを評価するかを示します。表のスナップショットを選択し、「編集」をクリックして評価イベントを1つ以上選択します。BPELアクティビティ内でメトリックを評価する評価イベントを複数選択できます。

注意:

mainまたはreceiveInputアクティビティの「アクティブ化」評価イベント時のスナップショット構成はお薦めしません。これは、XPath式の変数がまだ移入されていない可能性があるためです。

構成を保存すると、BPELプロセス・ダイアグラムの関連アクティビティの右上に、「ビジネス・インジケータ」アイコンが表示されます。

図bam_mon_bi_icon.gifの説明

ビジネス・インジケータは、そのメトリックとスナップショットとともに「構造」ウィンドウにも表示されます。

図bam_mon_bistruc.gifの説明

実行時に、BPELプロセスでビジネス・インジケータが発生すると、メトリックが評価され、結果がデータ・オブジェクトの新規レコードとしてOracle BAMに送信されます。Oracle BAMデータ・オブジェクトの詳細は、第53.3.10項「Monitor Expressデータ・オブジェクトに関する注意事項」を参照してください。

53.3.7 アクティビティへの既存の監視オブジェクトの追加方法

BPELデザイナの「監視」ビューで提供されるショートカット・メニューを使用して、以前に作成したカウンタおよびビジネス・インジケータをBPELプロセスのアクティビティに追加できます。追加すると、選択したカウンタまたはビジネス・インジケータに新規スナップショットが作成されます。

アクティビティにモニターを追加する手順は、次のとおりです。

1. モニターを追加するアクティビティを右クリックし、「追加」を選択します。
図bam_mon_add.gifの説明

2. 「カウンタ」または「ビジネス・インジケータ」を選択します。

3. ダイアログで1つ以上の監視オブジェクトを選択し、「OK」をクリックします。[Shift]キーを押しながらクリックすると、複数の監視オブジェクトを選択できます。
図bam_mon_select.gifの説明

4. アクティビティ境界内にアイコンが表示されます。
図bam_mon_icon.gifの説明

53.3.8 デプロイメント用のBPELプロセス・モニターの構成方法

現在のSOAコンポジット・アプリケーション内のBPELプロセスに監視オブジェクトが含まれている場合は、そのコンポジットのデプロイメント時に、monitor.configファイルに指定されているOracle BAMサーバー内の場所に、Oracle BAMデータ・オブジェクトが作成されます。

注意:

monitor.configファイルは必要に応じて作成されます。BPELプロセスにモニターが構成されていない場合、monitor.configファイルは存在しません。

monitor.configファイルは、最初の監視オブジェクトを作成したとき、Oracle JDeveloperの「アプリケーション・ナビゲータ」に自動的には表示されません。ユーザーは、プロジェクト内のすべてのファイルを保存(「すべて保存」を使用)した後、「アプリケーション・ナビゲータ」をリフレッシュする必要があります。

デプロイメントは累積されます。つまり、既存のデータ・オブジェクトは削除されず、監視オブジェクト構成で必要な場合に列がデータ・オブジェクトに追加されます。データ・オブジェクトの詳細は、第53.3.10項「Monitor Expressデータ・オブジェクトに関する注意事項」を参照してください。

デプロイメント・プロパティを構成する手順は、次のとおりです。

「アプリケーション・ナビゲータ」のプロジェクト・フォルダで、編集のためにmonitor.configファイルを開きます。

図bam_mon_config.gifの説明

monitor.configファイルでは、データ・オブジェクトを作成および移入するために、Oracle BAMサーバーとの接続に必要なデプロイメント・プロパティとランタイム・プロパティを定義します。

注意:

BPELProcess.monitorファイルは編集しないでください。これは内部ファイルであるため、手動で編集しないでください。これには、特定のBPELプロセス内の全BPELプロセス・モニターに関するメタデータが格納されます。

次の例に、デフォルトのmonitor.configファイルを示します。

<?xml version="1.0" encoding="UTF-8"?>
<MonitorConfig>
<Connection>
<BAM dataObjectsFolder="/Samples/Monitor Express/"
adapterConnectionFactoryJNDI="eis/bam/rmi" batch="true"
deploymentProtocol="http">
</BAM>
</Connection>
<Deployment ignoreErrors="true"/>
</MonitorConfig>

表53-1でプロパティについて説明します。

BPELプロジェクトごとに接続ブロックを1つのみ定義します。

表53-1 モニター構成のプロパティ

プロパティ

デフォルト

説明

dataObjectsFolder

/Samples/Monitor Express/

SOAコンポジット・アプリケーションに対するすべてのBPELプロセスで構成されたモニターに関するデータ・オブジェクトの位置へのパス。ディレクトリが存在しない場合は、デプロイメント時に作成されます。パスは、Oracle BAMサーバーのルート・データ・オブジェクト・フォルダに対する相対パスです。

データ・オブジェクト・フォルダは、SOAコンポジット・アプリケーションごとに1つのみです。アプリケーションには多数のBPELプロセスを含めることができます。アプリケーション内のすべてのBPELプロセスに関連付けられたデータ・オブジェクトはすべて、この場所に作成されます。

adapterConnectionFactoryJNDI

eis/bam/rmi

Oracle WebLogic Server管理コンソールで構成されるOracle BAMアダプタ接続プール。Oracle BAMアダプタは、デプロイメントおよびランタイム前に構成する必要があります。

RMIプロトコルを使用する場合は、Oracle SOAサーバーとOracle BAMサーバーが別々のドメインにデプロイされている場合であるため、Oracle SOAサーバーとOracle BAMサーバーの両方のドメインに対して、信頼できるドメイン資格証明を構成する必要もあります。

詳細は、第53.2項「Oracle BAMアダプタの構成」および『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

batch

true

Oracle BAMアダプタを使用したバッチ処理が有効であることを示します。構成プロパティのバッチ処理の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

deploymentProtocol

http

有効な値はhttpのみです。

ignoreErrors

true

Oracle BAMサーバーに接続できないか、またはOracle BAMデータ・オブジェクトのデプロイメントに問題がある場合でも、このプロパティがtrueに設定されていると、コンポジットのデプロイメントは停止しません。falseに設定されていてOracle BAMサーバーが使用不可の場合、デプロイメントは失敗します。

このプロパティは、デプロイメント構成ウィザードの「BPELモニターのデプロイメント・エラーを無視します」チェック・ボックスに対応します。

53.3.9 Monitor Expressダッシュボードの使用に関する注意事項

Oracle BAMには、BPELプロセスの監視にすぐに使用できるサンプル・ダッシュボードが用意されています。

Monitor Expressダッシュボードとデータ・オブジェクトのサンプルを使用すると、Oracle JDeveloper内から比較的少ない手順で、SOAコンポジット・アプリケーション用にOracle BAMを有効にできます。すぐに使用できるダッシュボードには単一の統合ビューが用意されており、キー・パフォーマンス・インディケータ(KPI)をリアルタイムで追跡し、作業効率を高めることができます。Oracle JDeveloperのBPELモニター・インストゥルメンテーションによって、監視のための高度なユーザー操作性が実現しています。

データ・オブジェクトは、Oracle BAMアーキテクトのSamples/Monitors/データ・オブジェクト・ディレクトリに格納され、サンプルのレポートは、Oracle BAMアクティブ・ビューアのShared Reports/Samples/Monitor Express/フォルダに格納されています。

サンプルがシステムにインストールされていない場合、インストール・スクリプトと指示は、SOA_ORACLE_HOME/bam/samples/bam/monitorexpressディレクトリにあります。

53.3.10 Monitor Expressデータ・オブジェクトに関する注意事項

Oracle BAMデータ・オブジェクトは、有効化されたBPELプロセス・モニターを含むSOAコンポジット・アプリケーションがデプロイされるときに自動的にデプロイされます。Samples/Monitor Express/ディレクトリに、事前にシードされているサンプル・データ・オブジェクトがあります。

これらのデータ・オブジェクトを使用して、Oracle BAMダッシュボードを構成できます。Oracle BAMアクティブ・スタジオでダッシュボードを作成する方法の詳細は、『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』を参照してください。

Oracle BAMアーキテクトを使用して、データ・オブジェクトに列と索引を追加できます。Oracle BAMアーキテクトで追加するカスタムの列と索引は、BPELプロセス・モニター構成の変更を含む改訂済SOAコンポジット・アプリケーションがデプロイされた場合でも保持されます。列と索引の追加方法の詳細は、第55章「Oracle BAMデータ・オブジェクトの定義および管理」を参照してください。

デプロイメント時に、構成された場所にデータ・オブジェクトがすでに存在している場合は、そのデータ・オブジェクトがそのまま使用されるか、またはBPELプロセス・モニターからのメッセージにあわせて適切な追加列で更新されます。

Oracle BAMデータ・オブジェクトは、使用中は変更できません。BPELプロセス監視データ・オブジェクトに対して開いているOracle BAMダッシュボードがあり、デプロイメント時にデータ・オブジェクトを変更する必要がある場合、データ・オブジェクトの更新は失敗します。

注意:

既存の監視データ・オブジェクトの列名は変更しないでください。

Oracle BAMアダプタの構成

BPELプロセス・モニターでは、Oracle BAMアダプタを使用して、メッセージをOracle BAMサーバーに伝達します。デプロイメント時に、Oracle BAMサーバーに接続できない場合、デプロイメントは失敗します。実行時にOracle BAMサーバーに接続できない場合、再試行動作はOracle BAMアダプタの構成によって決まります。第53.2項「Oracle BAMアダプタの構成」および『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のOracle BAMアダプタの構成に関する項を参照してください。

データ・オブジェクトおよびトラブルシューティング情報の詳細は、次の各項を参照してください。

- 第53.3.10.1項「COMPONENTデータ・オブジェクトの理解」

- 第53.3.10.2項「COUNTERデータ・オブジェクトの理解」

- 第53.3.10.3項「INTERVALデータ・オブジェクトの理解」

- 第53.3.10.4項「ビジネス・インジケータ・データ・オブジェクトの理解」

- 第53.3.10.5項「トラブルシューティング」

53.3.10.1 COMPONENTデータ・オブジェクトの理解

COMPONENTデータ・オブジェクトは、メイン・ディメンション表です。BPELプロセス・インスタンスの実行に要した時間、およびBPELプロセス・インスタンスが少なくとも1回失敗したかどうかに関する情報が収集されます。

少なくとも1つの監視オブジェクトが構成されている場合、またはアクティビティ監視を有効にしている場合は、このデータ・オブジェクトに常にデータが移入されます。

表53-2 COMPONENTデータ・オブジェクトのフィールド

列名

説明

COMPOSITE_INSTANCE_ID

SCAコンポジット・インスタンスID番号。

COMPONENT_INSTANCE_ID

SCAコンポーネント・インスタンスID番号。BPELの場合は、BPELインスタンスID番号です。

DOMAIN_NAME

パーティション名。

COMPOSITE_NAME

SOAコンポジット・アプリケーションの名前。

COMPOSITE_REVISION

SOAコンポジット・アプリケーションのリビジョン番号。

COMPOSITE_LABEL

SOAコンポジット・アプリケーションの内部ラベル。

このラベルはデプロイするたびに作成され、リビジョンIDを上書きする場合でも作成されます。

COMPONENT_TYPE

コンポーネント・タイプ(たとえば、BPELプロセスの場合はBPEL)。

COMPONENT_NAME

コンポーネントの表示名(たとえば、BPELプロセス名)。

COMPONENT_START_TIME

コンポーネントの実行が開始した日時。

COMPONENT_END_TIME

コンポーネントの実行が終了した日時。

COMPONENT_FAULT_FLAG

コンポーネントで少なくとも1回フォルトが発生しているかどうかを示します。1=フォルトあり。0=フォルトなし。

FAULT_NAME

発生した最終フォルトの名前。

COMPONENT_RUNNING_FLAG

コンポーネントが現在実行中かどうかを示します。1=コンポーネント実行中。0=コンポーネントは実行中ではありません。

COMPONENT_RUNNING_TIME_IN_SEC

COMPONENT_START_TIMEおよびCOMPONENT_END_TIME間の計算された期間(秒)。

COMPONENT_RUNNING_TIME_IN_MIN

COMPONENT_START_TIMEおよびCOMPONENT_END_TIME間の計算された期間(分)。

COMPONENT_COMPLETED_NO_FAULT_FLAG

コンポーネントがフォルトなしで完了したかどうかを示します。1=フォルトなしで完了。0=未完了またはフォルトありで完了。

COMPONENT_INCOMPLETE_FLAG

コンポーネントが未完了であり、少なくとも1回フォルトは発生していることを示します。1=未完了で、少なくとも1回はフォルトが発生。0=それ以外。

ECID

単一のSOAリクエストによって実行される複数のBPELプロセス・インスタンスについて、データを集計するレポートを作成できます。

53.3.10.2 COUNTERデータ・オブジェクトの理解

COUNTERデータ・オブジェクトには、BPELプロセスで発生したすべてのカウンタ監視オブジェクトによって取得されたデータが含まれます。

表53-3 COUNTERデータ・オブジェクトのフィールド

列名

説明

COMPOSITE_INSTANCE_ID

SCAコンポジット・インスタンスID番号。

COMPONENT_INSTANCE_ID

SCAコンポーネント・インスタンスID番号。BPELの場合は、BPELインスタンスID番号です。

DOMAIN_NAME

COMPONENTデータ・オブジェクトのDOMAIN_NAMEフィールドの参照。

COMPOSITE_NAME

COMPONENTデータ・オブジェクトのCOMPOSITE_NAMEフィールドの参照。

COMPOSITE_REVISION

COMPONENTデータ・オブジェクトのCOMPOSITE_REVISIONフィールドの参照。

COMPOSITE_LABEL

COMPONENTデータ・オブジェクトのCOMPOSITE_LABELフィールドの参照。

COMPONENT_TYPE

COMPONENTデータ・オブジェクトのCOMPONENT_TYPEフィールドの参照。

COMPONENT_NAME

COMPONENTデータ・オブジェクトのCOMPONENT_NAMEフィールドの参照。

COMPONENT_START_TIME

COMPONENTデータ・オブジェクトのCOMPONENT_START_TIMEフィールドの参照。

COMPONENT_END_TIME

COMPONENTデータ・オブジェクトのCOMPONENT_END_TIMEフィールドの参照。

COMPONENT_FAULT_FLAG

COMPONENTデータ・オブジェクトのCOMPONENT_FAULT_FLAGフィールドの参照。

FAULT_NAME

COMPONENTデータ・オブジェクトのFAULT_NAMEフィールドの参照。

COUNTER_NAME

カウンタ監視オブジェクトの名前。

SUBCOMPONENT_ID

キー・フィールドとして使用される内部値。

SUBCOMPONENT_TYPE

カウンタ・データが取得されたサブコンポーネントのタイプ(たとえば、sequenceはBPEL sequenceアクティビティを示します)。ヒューマン・タスク・アクティビティにはhuman taskタイプが使用されます。

SUBCOMPONENT_NAME

カウンタ・データが取得されたサブコンポーネントの名前(たとえば、receiveInput)。BPELではアクティビティ名です。

EVALUATION_EVENT

データが取得される、BPELアクティビティのライフ・サイクル内のイベント(たとえば、アクティブ化)。

SNAPSHOT_TIME

カウンタ・データが取得された日時。

53.3.10.3 INTERVALデータ・オブジェクトの理解

INTERVALデータ・オブジェクトには、BPELプロセスで構成したすべての間隔監視オブジェクトとアクティビティ・モニターによって取得されたデータが含まれます。

表53-4 INTERVALデータ・オブジェクトのフィールド

列名

説明

COMPOSITE_INSTANCE_ID

SCAコンポジット・インスタンスID番号。

COMPONENT_INSTANCE_ID

SCAコンポーネント・インスタンスID番号。BPELの場合は、BPELインスタンスID番号です。

DOMAIN_NAME

COMPONENTデータ・オブジェクトのDOMAIN_NAMEフィールドの参照。

COMPOSITE_NAME

COMPONENTデータ・オブジェクトのCOMPOSITE_NAMEフィールドの参照。

COMPOSITE_REVISION

COMPONENTデータ・オブジェクトのCOMPOSITE_REVISIONフィールドの参照。

COMPOSITE_LABEL

COMPONENTデータ・オブジェクトのCOMPOSITE_LABELフィールドの参照。

COMPONENT_TYPE

COMPONENTデータ・オブジェクトのCOMPONENT_TYPEフィールドの参照。

COMPONENT_NAME

COMPONENTデータ・オブジェクトのCOMPONENT_NAMEフィールドの参照。

COMPONENT_START_TIME

COMPONENTデータ・オブジェクトのCOMPONENT_START_TIMEフィールドの参照。

COMPONENT_END_TIME

COMPONENTデータ・オブジェクトのCOMPONENT_END_TIMEフィールドの参照。

COMPONENT_FAULT_FLAG

COMPONENTデータ・オブジェクトのCOMPONENT_FAULT_FLAGフィールドの参照。

FAULT_NAME

COMPONENTデータ・オブジェクトのFAULT_NAMEフィールドの参照。

INTERVAL_NAME

間隔監視オブジェクトの名前、またはアクティビティ・モニターによる監視対象のアクティビティ、ヒューマン・タスクまたはスコープの名前が表示されます。

INTERVAL_TYPE

データが取得されたBPELプロセスのタイプを示します。

CUSTOMは、カスタムの開始時間と終了時間で構成された間隔監視オブジェクトを示します。間隔監視オブジェクトについては、53.3.5項「間隔の構成方法」を参照してください。

SUBCOMPONENTは、アクティビティ・モニターを示します。アクティビティ・モニターについては、第53.3.2項「アクティビティ・モニターの構成方法」を参照してください。

INTERVAL_START_TIME

間隔またはアクティビティ・モニターの開始アクティビティの発生時に記録された日時。

INTERVAL_END_TIME

間隔またはアクティビティ・モニターの終了アクティビティの発生時に記録された日時。

START_SUBCOMPONENT_ID

キー・フィールドとして使用される内部値。

START_SUBCOMPONENT_TYPE

間隔による監視対象のBPELプロセス・アクティビティのタイプ。ヒューマン・タスク・アクティビティにはhuman taskタイプが使用されます。

START_SUBCOMPONENT_NAME

間隔による監視対象のプロセス・アクティビティの表示名。

START_EVALUATION_EVENT

データが取得される、BPELアクティビティのライフ・サイクル内のイベント(たとえば、アクティブ化)。

END_SUBCOMPONENT_ID

キー・フィールドとして使用される内部値。

END_SUBCOMPONENT_TYPE

間隔による監視対象のBPELプロセス・アクティビティのタイプ。ヒューマン・タスク・アクティビティにはhuman taskタイプが使用されます。

END_SUBCOMPONENT_NAME

間隔による監視対象のプロセス・アクティビティの表示名。

END_EVALUATION_EVENT

データが取得される、BPELアクティビティのライフ・サイクル内のイベント(たとえば、アクティブ化)。

SUBCOMPONENT_CREATOR

将来使用する予定の列。

INTERVAL_RUNNING_FLAG

間隔またはアクティビティ・モニターの終了アクティビティが実行中かどうかを示します。1は、終了アクティビティが発生していないことを示します。0はそれ以外の場合を示します。

INTERVAL_RUNNING_TIME_IN_SEC

INTERVAL_START_TIMEおよびINTERVAL_END_TIME間の期間(秒)。

INTERVAL_RUNNING_TIME_IN_MIN

INTERVAL_START_TIMEおよびINTERVAL_END_TIME間の期間(分)。

53.3.10.4 ビジネス・インジケータ・データ・オブジェクトの理解

BPELプロセスに構成されているすべてのビジネス・インジケータ・メトリックによって取得されたデータが含まれるデータ・オブジェクトは、BI_Partition_Name_Composite_Name_BPELPROCESS_Nameという名前です。

ビジネス・インジケータ監視オブジェクトが含まれる、SOAコンポジット・アプリケーション内のBPELプロセスごとに別々のデータ・オブジェクトが作成されます。

ビジネス・インジケータが間隔監視オブジェクトによって参照される場合は、間隔に関連するデータの一部(INTERVAL_NAME、INTERVAL_START_FLAGおよびINTERVAL_END_FLAG)がビジネス・インジケータ・データ・オブジェクトに取得されます。

注意:

評価(スナップショット)時にいずれかのメトリックが失敗した場合、データはOracle BAMに送信されませんが、ビジネス・インジケータに構成されている残りのメトリックはスナップショット時に評価されます。失敗したビジネス・インジケータ・メトリックが別のスナップショット時に発生した場合、BPELエンジンはこのビジネス・インジケータ・メトリックの評価を試行します。

表53-5 ビジネス・インジケータ・データ・オブジェクトのフィールド

列名

説明

COMPOSITE_INSTANCE_ID

SCAコンポジット・インスタンスID番号。

COMPONENT_INSTANCE_ID

SCAコンポーネント・インスタンスID番号。BPELの場合は、BPELインスタンスID番号です。

DOMAIN_NAME

COMPONENTデータ・オブジェクトのDOMAIN_NAMEフィールドの参照。

COMPOSITE_NAME

COMPONENTデータ・オブジェクトのCOMPOSITE_NAMEフィールドの参照。

COMPOSITE_REVISION

COMPONENTデータ・オブジェクトのCOMPOSITE_REVISIONフィールドの参照。

COMPOSITE_LABEL

COMPONENTデータ・オブジェクトのCOMPOSITE_LABELフィールドの参照。

COMPONENT_TYPE

COMPONENTデータ・オブジェクトのCOMPONENT_TYPEフィールドの参照。

COMPONENT_NAME

COMPONENTデータ・オブジェクトのCOMPONENT_NAMEフィールドの参照。

COMPONENT_START_TIME

COMPONENTデータ・オブジェクトのCOMPONENT_START_TIMEフィールドの参照。

COMPONENT_END_TIME

COMPONENTデータ・オブジェクトのCOMPONENT_END_TIMEフィールドの参照。

COMPONENT_FAULT_FLAG

COMPONENTデータ・オブジェクトのCOMPONENT_FAULT_FLAGフィールドの参照。

FAULT_NAME

COMPONENTデータ・オブジェクトのFAULT_NAMEフィールドの参照。

BI_NAME

ビジネス・インジケータの名前。

SNAPSHOT_TIME

ビジネス・インジケータ・データの取得時に記録された日時。

SUBCOMPONENT_ID

キー・フィールドとして使用される内部値。

SUBCOMPONENT_TYPE

ビジネス・インジケータ・データが取得されたサブコンポーネントのタイプ(たとえば、invokeはBPEL invokeアクティビティを示します)。ヒューマン・タスク・アクティビティにはhuman taskタイプが使用されます。

SUBCOMPONENT_NAME

ビジネス・インジケータ・データが取得されたサブコンポーネントの名前(たとえば、callbackClient)。

EVALUATION_EVENT

データが取得される、BPELアクティビティのライフ・サイクル内のイベント(たとえば、アクティブ化)。

INTERVAL_NAME

ビジネス・インジケータのデータ取得が実行される、ビジネス・インジケータを組み込んだ間隔監視オブジェクトの名前。

データがアクティビティ・モニター内で取得された場合、このフィールドはNULLです。

INTERVAL_START_FLAG

データが間隔開始アクティビティで取得されたかどうかを示します。1=間隔開始アクティビティで取得された場合。NULL=それ以外の場合。

データがアクティビティ・モニター内で取得された場合、このフィールドはNULLです。

INTERVAL_END_FLAG

データが間隔終了アクティビティで取得されたかどうかを示します。1=間隔終了アクティビティで取得された場合。NULL=それ以外の場合。

データがアクティビティ・モニター内で取得された場合、このフィールドはNULLです。

LATEST

特定のコンポジット/コンポーネント・インスタンス(COMPOSITE_INSTANCE_IDおよびCOMPONENT_INSTANCE_IDに基づく)のビジネス・インジケータ・レコードの最新スナップショットを示します(値"Y")。

最新のレコードのみが使用されるように、ビジネス・インジケータ・レコードをフィルタ処理するダッシュボードを作成できます(1つのビジネス・プロセスは同じプロセス内に複数のスナップショットを持つことができますが、LATESTは任意の時点での最新を示します)。

METRIC_NAME

NAMEメトリックで評価されたXPath式の結果が含まれます。

各METRIC_NAMEフィールドは、メトリックで構成されたデータ型です。

これらの列名のNAMEの部分は、ビジネス・インジケータで構成されたメトリックの表示名です。

BPELプロセスで構成されたメトリックと同じ数のMETRIC_NAMEフィールドがあります。

メトリック名は、このデータ・オブジェクトで名前の競合が発生しないように、BPELプロセス内で一意である必要があります。

53.3.10.5 トラブルシューティング

この項では、Monitor Expressのトラブルシューティング情報について説明します。

53.3.10.5.1 Oracle BAMデータ・オブジェクト・サイズの管理

Oracle BAMサーバー・データ・オブジェクトでは、データ・オブジェクトが大きくなりすぎないように、アラート・ルールを使用して古いデータをパージできます。

アラートの一般情報は、第60章「Oracle BAMアラートの作成」、削除アクションの構成の詳細は、F.3.8項「データ・オブジェクトから行を削除」を参照してください。

53.3.10.5.2 ログの使用

Monitor Expressランタイムでは、oracle.soa.bpel.engine.sensorロガーを使用してメッセージが記録されます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の構成ログ・ファイルに関する項を参照してください。

53.4 Oracle BAMサーバーへの設計時接続の作成

Oracle JDeveloperでのアプリケーションの設計中に、使用可能なデータ・オブジェクトを参照し、トランスフォーメーションを作成するには、Oracle BAMサーバーへの接続を作成する必要があります。

注意:

Oracle BAMサーバー接続は、「アプリケーション・リソース」で直接作成するか、または「リソース・カタログ」から既存の接続をコピーする必要があります。

53.4.1 Oracle BAMサーバーへの接続の作成方法

Oracle BAMサーバーへの接続は、Oracle BAMサーバーで使用可能なデータ・オブジェクトを参照するために作成します。

Oracle BAMサーバーへの接続を作成する手順は、次のとおりです。

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

2. 「一般」カテゴリから、「接続」を選択します。

3. 「項目」リストから、「BAM接続」を選択し、「OK」をクリックします。
BAM接続ウィザードが表示されます。

4. 必ず、「アプリケーション・リソース」が選択されているようにしてください。

5. 接続の名前を指定します。

6. 「次へ」をクリックします。

7. 表53-6に記載されているOracle BAMサーバー・ホストの接続情報を入力します。

表53-6 Oracle BAMサーバー接続情報

フィールド

説明

BAM Webホスト

Oracle BAMレポート・サーバーとWebアプリケーションがインストールされているホストの名前を入力します。ほとんどの場合、Oracle BAM Webアプリケーション・ホストとOracle BAMサーバー・ホストは同一です。

BAMサーバー・ホスト

Oracle BAMサーバーがインストールされているホストの名前を入力します。

ユーザー名

Oracle BAMサーバー・ユーザー名を入力します。

パスワード

ユーザー名のパスワードを入力します。

HTTPポート

ポート番号を入力するか、またはデフォルト値9001をそのまま使用します。これは、Oracle BAM Webアプリケーション・ホスト用のHTTPポートです。

JNDIポート

ポート番号を入力するか、またはデフォルト値9001をそのまま使用します。JNDIポートは、Oracle BAMサーバーの一部であるOracle BAMレポート・キャッシュ用です。

HTTPSの使用

設計時にOracle BAMサーバーへの接続にセキュアなHTTP(HTTPS)を使用する場合は、このチェック・ボックスを選択します。選択しない場合は、HTTPが使用されます。

8. 「次へ」をクリックします。

9. 「接続のテスト」をクリックして、接続をテストします。接続に成功した場合は、次のメッセージが表示されます。

Testing HTTP connection ... success.
Testing Data Object browsing ... success.
Testing JNDI connection ... success.

3 of 3 tests successful.

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

53.5 SOAコンポジット・アプリケーションでのOracle BAMアダプタの使用

Oracle BAMアダプタは、SOAコンポジット・アプリケーションによるSOAコンポジット・アプリケーション外部のOracle BAMサーバーへのデータ送信を可能にする参照として使用されます。

53.5.1 SOAコンポジット・アプリケーションでのOracle BAMアダプタの使用方法

SOAコンポジット・アプリケーションによるSOAコンポジット・アプリケーション外部のOracle BAMサーバーへのデータ送信を可能にする、Oracle BAMアダプタ参照を追加できます。

Oracle BAMアダプタ参照を追加する手順は、次のとおりです。

1. 「コンポーネント・パレット」で「SOA」を選択します。

2. 「BAMアダプタ」を右側のスイムレーンにドラッグします。
これにより、アダプタ構成ウィザードが起動されます。

3. 「サービス名」ページで、「サービス名」を指定します。

4. 「データ・オブジェクト操作とキー」ページで、次の手順を実行します。

1. 「BAMデータ・オブジェクト・チューザ」ダイアログ・ボックスを使用して、「データ・オブジェクト」を選択します。
「参照」をクリックすると、「BAMデータ・オブジェクト・チューザ」ダイアログ・ボックスが開き、使用可能なOracle BAMサーバー接続を「BAMデータ・オブジェクト・エクスプローラ」ツリーで参照できます。データ・オブジェクトを選択して「OK」をクリックします。

2. リストから「操作」を選択します。
「挿入」では、データ・オブジェクトに行が追加されます。

「アップサート」では、データ・オブジェクトに行が存在する場合は、既存の行に新規データが挿入されます。行が存在しない場合は、新規行が作成されます。データ・オブジェクトの行をアップサートするには、「選択可能」列からキーを選択する必要があります。

「削除」では、データ・オブジェクトから行が削除されます。データ・オブジェクトの行を削除するには、「選択可能」列からキーを選択する必要があります。

「更新」では、データ・オブジェクト内の既存の行に新規データが挿入されます。データ・オブジェクトの行を更新するには、「選択可能」列からキーを選択する必要があります。

3. SOAコンポジット・アプリケーションにおけるこの操作の適切な表示名を、「操作名」フィールドに指定します。

4. Oracle BAMサーバーへのバッチ転送を有効にするには、「有効バッチ」チェック・ボックスを選択します。
Oracle BPEL Process ManagerランタイムのOracle BAMアダプタによってメモリーにキャッシュされるデータは、Oracle BAMサーバーに定期的にフラッシュ(送信)されます。自動定義された下限値から上限値までの範囲内のデータ・オブジェクトがキャッシュ内にいくつか存在する場合は、Oracle BAMコンポーネントによって、バッチ・タイムアウト前にデータを送信するかどうかが決定されます。

バッチ処理プロパティは、BAMCommonConfig.xml内で構成されます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

5. 「JNDI名」ページで、Oracle BAMサーバー接続の「JNDI名」を指定します。
JNDI名は、Oracle WebLogic Server管理コンソール内で構成されます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のOracle BAMアダプタの構成に関する項を参照してください。

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

53.6 BPELプロセスでのOracle BAMアダプタの使用

プロセスの1つのステップとしてOracle BAMにデータを送信するには、Oracle BAMアダプタをBPELプロセスでパートナ・リンクとして使用します。

詳細は、第4.3項「パートナ・リンクの概要」を参照してください。

53.6.1 BPELプロセスでのOracle BAMアダプタの使用方法

Oracle BAMアダプタをBPELプロセスに追加すると、プロセスの1つのステップとしてOracle BAMにデータを送信できます。Oracle BAMアダプタは、パートナ・リンクとして使用され、BPELプロセスのアクティビティに接続されます。

Oracle BAMパートナ・リンクを追加する手順は、次のとおりです。

1. Oracle JDeveloperのSOAコンポジット・エディタで、BPELプロセスのアイコンをダブルクリックして、そのプロセスをBPEL Process Designerで開きます。

2. 「コンポーネント・パレット」で「BPELサービス」パネルを開きます。

3. 「BAMアダプタ」をBPEL Process Designerの右側の「パートナ・リンク」スイムレーンにドラッグ・アンド・ドロップします。

4. アダプタ構成ウィザードで、「サービス名」フィールドに表示名を入力し、「次へ」をクリックします。
ウィザードが完了すると、「アプリケーション・ナビゲータ」に、BPELプロセスまたはOracle Mediatorメッセージ・フロー用のWeb Services Description Language(WSDL)ファイルがこの名前で表示されます。このファイルには、このウィザードで指定したアダプタ構成設定が含まれます。

5. 「データ・オブジェクト操作とキー」ページで、次の手順を実行します。

1. 「BAMデータ・オブジェクト・チューザ」ダイアログ・ボックスを使用して、「データ・オブジェクト」を選択します。
「参照」をクリックすると、データ・オブジェクト・チューザのダイアログ・ボックスが開き、使用可能なOracle BAMサーバー接続を「BAMデータ・オブジェクト・エクスプローラ」ツリーで参照できます。データ・オブジェクトを選択して「OK」をクリックします。

2. リストから「操作」を選択します。
「挿入」では、データ・オブジェクトに行が追加されます。

「アップサート」では、データ・オブジェクトに行が存在する場合は、既存の行に新規データが挿入されます。行が存在しない場合は、新規行が作成されます。

「削除」では、データ・オブジェクトから行が削除されます。

「更新」では、データ・オブジェクト内の既存の行に新規データが挿入されます。

3. SOAコンポジット・アプリケーションにおけるこの操作の適切な表示名を、「操作名」フィールドに指定します。

4. Oracle BAMサーバーへのバッチ転送を有効にするには、「有効バッチ」チェック・ボックスを選択します。
Oracle BPEL Process ManagerランタイムのOracle BAMアダプタによってメモリーにキャッシュされるデータは、Oracle BAMサーバーに定期的にフラッシュ(送信)されます。自動定義された下限値から上限値までの範囲内のデータ・オブジェクトがキャッシュ内にいくつか存在する場合は、Oracle BAMコンポーネントによって、バッチ・タイムアウト前にデータを送信するかどうかが決定されます。

バッチ処理プロパティは、BAMCommonConfig.xml内で構成されます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

6. 「JNDI名」ページで、Oracle BAMサーバー接続の「JNDI名」を指定します。
JNDI名は、Oracle WebLogic Server管理コンソール内で構成されます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のOracle BAMアダプタの構成に関する項を参照してください。

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

8. BPELプロセスにタイプ「メッセージ・タイプ」の新規プロセス変数を作成し、「タイプ・チューザ」ダイアログ・ボックスを参照して、Oracle BAMサーバー上の書込み先となるデータ・オブジェクトのWDSLを選択します。
Oracle BPEL Process Managerの使用方法の詳細は、第4章「Oracle BPEL Process Managerの基本操作」を参照してください。

9. BPELプロセスで、作成した新規変数にソース・データをマップするために使用できるアクティビティを追加します。

10. BPELプロセスで、作成したOracle BAMアダプタ・パートナ・リンクにデータを送信するinvokeアクティビティを追加します。作成した変数を入力変数として追加します。

11. プロジェクト・ファイルをすべて保存します。

53.7 Oracle BAMセンサー・アクションを使用したBPELセンサーの統合

Oracle BPEL Process Managerでセンサー・アクションを作成し、センサー・データをOracle BAMサーバーの既存のデータ・オブジェクトにパブリッシュできます。センサー・アクションを作成するときは、データの取得元のOracle BPEL Process Manager変数センサーまたはアクティビティ・センサー、およびセンサー・データをパブリッシュするOracle BAMサーバーのデータ・オブジェクトを選択できます。

Oracle BAMアダプタでは操作のバッチ処理がサポートされていますが、バッチ処理を使用した場合の動作は、バッチ処理を使用しない場合の動作と異なります。Oracle BAMアダプタがBPELセンサー・アクションに適用されるとき、Oracle BAMセンサー・アクションはBPELトランザクションの一部ではありません。バッチ処理が有効な場合、BPELはOracle BAMの操作が完了するのを待機しません。これは非同期コールです。

バッチ処理が無効な場合、BPELはOracle BAMの操作が完了するのを待機し、完了後にBPELプロセスを処理しますが、Oracle BAMで例外が発生した場合、ロールバックまたは停止は行われません。Oracle BAMセンサー・アクションは、BPELと同じセンサー・アクション・ロガーにメッセージを記録します。バッチ処理動作の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のOracle BAMバッチ処理プロパティの構成に関する項を参照してください。

これらの手順は、Oracle BAMがインストールおよび構成済であることを前提にしています。

注意:

コネクション・ファクトリの構成は、Oracle BAMセンサー・アクションの使用前に完了している必要があります。また、Oracle BAMアダプタでプレーン・テキストのユーザー名とパスワードではなく、資格証明を使用している場合、Oracle BAMアダプタ(BPELで使用するOracle BAMセンサー・アクションを含む)でOracle BAMサーバーに接続するには、資格証明も設定およびマップしている必要があります。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のOracle BAMアダプタの構成に関する項を参照してください。

53.7.1 センサーの作成方法

Oracle BAMセンサー・アクションを作成するには、最初に、BPELプロセスに変数センサーまたはアクティビティ・センサーを作成する必要があります。

- 変数センサー
制限: 変数センサーの変数は、スタンドアロンXSDで定義する必要があります。この変数はWSDLファイル内でインラインで定義しないでください。変数にメッセージ・パートがある場合、そのメッセージ・パートは1つのみである必要があります。

- センサー変数を1つのみ含むアクティビティ・センサー
制限: センサー・データを単一のOracle BAMサーバーのデータ・オブジェクトにマップするため、アクティビティ・センサーに使用できる変数は1つのみです。変数センサーの制限もすべて適用されます。

注意:

これらのルールに従わないセンサーは、Oracle BAMセンサー・アクションの構成ダイアログ・ボックスからフィルタ処理されます。また、センサーが制限に従って作成された場合でも、変数が削除された場合(センサーが無効になります)、センサーはOracle BAMセンサー・アクションの構成ダイアログ・ボックスに表示されません。

センサーの作成方法の詳細は、第18.2項「Oracle JDeveloperでのセンサーとセンサー・アクションの構成」を参照してください。

53.7.2 Oracle BAMセンサー・アクションの作成方法

Oracle BAMセンサー・アクションを作成するときは、データの取得元のBPEL変数センサーまたはアクティビティ・センサーを選択し、センサー・データをパブリッシュするOracle BAMサーバーのデータ・オブジェクトを選択します。

Oracle BAMセンサー・アクションを作成する手順は、次のとおりです。

1. Oracle JDeveloperのBPELプロセスに移動します。

2. BPELデザイナのツールバーにある「監視」を選択します。
図bam_mon_menu.gifの説明

3. 「構造」ウィンドウで、「センサー・アクション」を選択して右クリックします。
図bam_sens_struct.gifの説明

「構造」ウィンドウが開いていない場合は、「表示」→「構造ウィンドウ」の順に選択して開きます。

4. 「作成」→「BAMセンサー・アクション」の順に選択します。
「センサー・アクションの作成」ダイアログ・ボックスが表示されます。

図bp_sensors_bam.gifの説明

5. 表53-7に記載されている詳細を入力します。

表53-7 「センサー・アクションの作成」ダイアログ・ボックスのフィールドと値

フィールド

説明

アクション名

センサー・アクションに対する、識別可能な一意の名前を入力します。

有効化

センサー・アクションを有効にするには、このオプションを選択します。無効にすると、センサー・アクション・データはOracle BAMに送信されません。

センサーは、Oracle Enterprise Manager Fusion Middleware Controlを使用して無効にすることもできます。

センサー

監視するBPELセンサーを選択します。これは、センサー・データをOracle BAMサーバーのデータ・オブジェクトにマッピングするために、第53.7.1項「センサーの作成方法」で作成したセンサーです。

データ・オブジェクト

「参照」アイコンをクリックして「BAMデータ・オブジェクト・チューザ」ダイアログ・ボックスを開き、センサー・データをパブリッシュするOracle BAMサーバーのデータ・オブジェクトを選択します。

データ・オブジェクトを選択するには、Oracle BAMサーバーへの接続を作成しておく必要があります。そのためには、「BAMデータ・オブジェクト・チューザ」ダイアログ・ボックスの右上隅にあるアイコンをクリックします。

操作

Oracle BAMサーバー・データベースの行に対する操作として、「削除」、「更新」、「挿入」または「アップサート」を選択します。「アップサート」では、最初に行の存在を確認し、存在している場合は更新します。行が存在しない場合は、挿入されます。

使用可能なキー/選択したキー

「削除」、「更新」または「アップサート」操作を選択した場合は、このセンサー・オブジェクトに一致する行を決定するためのキーとして使用する、Oracle BAMサーバー・データベースの列名も選択する必要があります。キーは1つの列の場合もあり、複数の列で構成されるコンポジット・キーの場合もあります。キーを選択して「>」ボタンをクリックします。すべてを選択するには、「>>」ボタンをクリックします。

マップ・ファイル

(「センサー」リストで選択した)センサー・データと(「データ・オブジェクト」リストで選択した)Oracle BAMサーバー・データ・オブジェクト間のマッピングを作成するファイル名を指定します。マッパー・ダイアログ・ボックスは、「マッピングの作成」アイコン(2番目のアイコン)または「マッピングの編集」アイコン(3番目のアイコン)をクリックして起動することもできます。

フィルタ

Oracle BAMに送信するセンサー・アクション・データをフィルタ処理するXPath式を入力します。実行時に、フィールドに入力されたXPath式が評価されます。センサー・アクションが起動するにはtrueが返される必要があります。

フィルタ・ロジックはブール式で入力します。フィルタを使用すると、特定の範囲内のセンサー・データを監視できます。たとえば、融資金額が$100,000を超える融資申請を監視するとします。この場合は、次のような式を入力できます。

boolean(/s:actionData/s:payload/s:variableData/s:data/autoloan:loanAmount > 100000)

例については、図18-9「フィルタ付きのセンサー・アクションの作成」を参照してください。

BAMコネクション・ファクトリJNDI

Oracle BAMサーバーのコネクション・ファクトリのJNDI名を指定します。

JNDI名は、Oracle WebLogic Server管理コンソール内で構成されます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のOracle BAMアダプタの構成に関する項を参照してください。

有効バッチ

Oracle BPEL Process ManagerランタイムのOracle BAMコンポーネントによって累積されるデータは、Oracle BAMサーバーに定期的にフラッシュ(送信)されます。自動定義された下限値から上限値までの範囲内のデータ・オブジェクトがキュー内にいくつか存在する場合は、Oracle BAMコンポーネントによって、バッチ・タイムアウト前にデータを送信するかどうかが決定されます。

バッチ処理が有効な場合、パフォーマンスは大幅に向上しますが、トランザクション保証はありません。BPELプロセスは、データがOracle BAMサーバーに到達するのを待機せずに実行を続行します。

バッチ処理が無効な場合、BPELプロセスは、Oracle BAMサーバーがレコード操作の完了を確認するまで待機します。ただし、エラーが発生した場合、Oracle BAMサーバーからの例外はログに記録され、BPELプロセスは処理を続行します。BPELでは、Oracle BAMで例外が発生した場合、操作のロールバックまたは停止は行われません。

バッチ処理動作の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のOracle BAMバッチ処理プロパティの構成に関する項を参照してください。

警告:

Oracle BPEL Serverを再起動すると、バッチ処理中のメッセージはすべて失われます。すべてのメッセージのバッチ処理が完了してからOracle BPEL Serverを再起動するようにしてください。

注意:

「センサー・アクションの作成」ダイアログ・ボックスで、「マッピングの作成」、「マッピングの編集」または「OK」ボタンをクリックした後は、BPELファイルを明示的に保存する必要があります。

6. 「OK」をクリックして「センサー・アクションの作成」ダイアログ・ボックスを閉じます。
センサー・アクションXMLスキーマをOracle BAMデータ・オブジェクト・スキーマにマップするXSLTを完了する必要があります。

53.8 エンタープライズ・メッセージ・リソースを使用したSOAアプリケーションとOracle BAMの統合

BPEL JMSセンサー・アクションを使用すると、Oracle BAMエンタープライズ・メッセージ・ソースを使用して、SOAコンポジット・アプリケーションからOracle BAMにJMSトピックまたはキューを介してデータを送信できます。

また、SOAコンポジットまたはBPELレベルで汎用JMSアダプタを使用することもでき、エンタープライズ・メッセージ・ソースによってそのデータをOracle BAMに読み込むことができます。

BPEL JMSセンサー・アクションからペイロードを変換するには、XSLを使用する必要があります。XSLの使用など、Oracle BAMエンタープライズ・メッセージ・ソースで高度なXML処理オプションを使用すると、XML内の属性またはノードにアクセスできます。

詳細は、次のドキュメントを参照してください。

- 第56章「Oracle BAMエンタープライズ・メッセージ・ソースの作成」

- 第18.2項「Oracle JDeveloperでのセンサーとセンサー・アクションの構成」

- 『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』のOracle JCA Adapter for JMSに関する項

54 Oracle BAMデータ・コントロールの使用

この章では、アクティブ・データ・サービスのサポートを含むOracle ADFモデルのバインディング・コンポーネントである、Oracle Business Activity Monitoring(Oracle BAM)データ・コントロールを作成して使用する方法について説明します。ここでは、Oracle BAMサーバー接続をOracle JDeveloperに追加して、Oracle BAMデータ・コントロールを使用するプロジェクトおよびWebサービスを作成する方法について説明します。データをフラット・リストで表示したり、データのグループや集計を使用してツリーやグラフで表示するために、パラメータを使用してOracle BAMデータ・コントロールの問合せを作成する方法についても説明します。

Oracle ADFモデルのデータ・バインディングおよびアクティブ・データ・サービスの使用方法に関する包括的な情報は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。

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

- 第54.1項「Oracle BAMデータ・コントロールの概要」

- 第54.2項「Oracle BAMデータ・コントロールを使用できるプロジェクトの作成」

- 第54.3項「Oracle BAMサーバー接続の作成」

- 第54.4項「Oracle ADFデータ・コントロールを使用したOracle BAMの公開」

- 第54.5項「Oracle BAMデータ・コントロールの問合せの作成」

- 第54.6項「ADFページでのOracle BAMデータ・コントロールの使用」

- 第54.7項「Oracle BAMデータ・コントロールを使用したアプリケーションのデプロイ」

54.1 Oracle BAMデータ・コントロールの概要

Oracle BAMデータ・コントロールを使用すると、ADF開発者は、リアルタイムのビジネス・イベントに基づいて変化する動的なユーザー・インタフェースを備えたアプリケーションを作成できます。Oracle BAMデータ・コントロールを使用して、Oracle BAMデータ・オブジェクトのデータをADFページのデータバインドされたUIコンポーネントにバインドします。

Oracle BAMデータ・コントロールは、Oracle BAMデータ・コレクションを記述する標準のメタデータ・インタフェースを使用して、Oracle BAMデータ・オブジェクトの問合せを抽象化します。JDeveloperを使用すると、情報をアイコンとして表示でき、そのアイコンをページにドラッグ・アンド・ドロップできます。これらのアイコンを使用すると、「データ・コントロール」パネルからページのビジュアル・エディタにアイコンをドラッグ・アンド・ドロップすることによって、(JSF JSPページ用の)データバインドされたUIコンポーネントを作成できます。JDeveloperによって、ページからOracle BAMデータ・オブジェクトへのバインドを記述したメタデータが自動的に作成されます。実行時に、ADFモデル・レイヤーによって、データ・コントロールとバインドの両方のメタデータ情報が適切なXMLファイルから読み取られ、ユーザー・インタフェースとOracle BAMデータ・オブジェクト間の接続が実装されます。Oracle BAMデータ・コントロールは読取り専用です。

Oracle ADFデータ・コントロールの一般情報、およびADS(アクティブ・データ・サービス)の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。

54.2 Oracle BAMデータ・コントロールを使用できるプロジェクトの作成

Oracle BAMデータ・コントロールは、有効なADF Webアプリケーションによって管理する必要があります。また、ADF Facesコンポーネントの中でアクティブ・データをサポートしているのは一部のセットのみです。このため、Oracle BAMデータ・コントロールの主要機能を利用できるのは、ADF Facesコンポーネントの一部のセットに限定されます。アクティブ・データをサポートするコンポーネントのリストなど、ADF Webアプリケーションの作成に関する詳細は、Oracle JDeveloper ADFのドキュメントを参照してください。

Oracle BAMデータ・コントロールは、アクティブ・データをサポートしないビュー・コンポーネントでも使用できます。

Oracle BAMデータ・コントロールを使用するには、プロジェクトにADF FacesとADFページ・フローのテクノロジが含まれている必要があります。これらのテクノロジは、JDeveloperの「Fusion Webアプリケーション(ADF)」テンプレートに含まれています。

54.3 Oracle BAMサーバー接続の作成

JDeveloperで使用可能なデータ・オブジェクトを参照するには、Oracle BAMへの接続を作成する必要があります。この接続情報は、デプロイメントおよび実行時に自動的に使用されます。接続の作成方法の詳細は、第53.4項「Oracle BAMサーバーへの設計時接続の作成」を参照してください。

注意:

Oracle BAMデータ・コントロールでは、「アプリケーション・リソース」パネルに表示されている接続のみが使用されます。「リソース・パレット」の接続は検索されません。Oracle JDeveloperを使用すると、「リソース・パレット」からアプリケーションの「アプリケーション・リソース」パネルに接続を簡単にコピーできます。

注意:

SSL対応のOracle BAMサーバーに対するOracle BAMデータ・コントロールを作成するには、-J-Djavax.net.ssl.trustStoreオプションを指定してOracle JDeveloperを起動している必要があります。このオプションは、キー・ストアの場所を指し示している必要があります。このオプションを指定せずにOracle BAMサーバーへの接続を作成することはできません。

例:

C:\jdevrc1\jdeveloper\jdev\bin>jdev -J-Djavax.net.ssl.trustStore=C:\jdevrc1\wlserver_10.3\server\lib\DemoTrust.jks

54.3.1 Oracle BAMサーバーへのOracle BAMデータ・コントロール接続の変更方法

各Oracle BAMデータ・コントロールにはOracle BAM接続が関連付けられています。接続名が変更された場合、または接続がアプリケーション・リソースから削除された場合、その接続に関連付けられたデータ・コントロールを使用しようとするとエラーが発生します。失われた接続を解決するには、次のいずれかを実行します。

- データ・コントロールが参照している接続と同じ名前の新しいOracle BAM接続を作成します。詳細は、第54.3項「Oracle BAMサーバー接続の作成」を参照してください。

- 現在のプロジェクトのDataControls.dcxファイルを新規または既存のOracle BAM接続の名前で更新します。詳細は、第54.3.1.1項「BAMデータ・コントロールを新規Oracle BAM接続と関連付ける方法」を参照してください。

54.3.1.1 BAMデータ・コントロールを新規Oracle BAM接続と関連付ける方法

特定のデータ・コントロールと関連付けられているOracle BAM接続を変更するには、現在のプロジェクトのDataControls.dcxファイルを編集する必要があります。BAMDataControl要素のconnection属性を、使用するOracle BAM接続の名前に変更します。

Oracle BAMデータ・コントロール内のOracle BAM接続を変更する手順は、次のとおりです。

1. 必要に応じて、アプリケーションに新規Oracle BAM接続を作成します。
このデータ・コントロールに使用するBAM接続が「アプリケーション・リソース」に含まれていない場合は、新規接続を作成します。詳細は、第54.3項「Oracle BAMサーバー接続の作成」を参照してください。

2. プロジェクトのDataControls.dcxファイルを検索し、開いて編集します。
DataControls.dcxファイルは、プロジェクト名が付いたノードの下にある「アプリケーション・ソース」ディレクトリにあります。

図bam_dc_connection_update.gifの説明

ADFアプリケーションの各プロジェクトにはDataControl.dcxファイルが関連付けられています。各DataControls.dcxファイルに、データ・コントロール定義が1つ以上含まれている場合があります。変更するデータ・コントロールの定義が現在のプロジェクトに含まれていない場合は、現在のアプリケーションの他のプロジェクトで検索します。

3. 「ソース」ビューで、該当するデータ・コントロール定義を検索し、その定義内でBAMDataControl要素を検索します。
「ソース」ビューで、データ・コントロールの表示名と一致するidのAdapterDataControlブロックを検索します。

図bam_dc_connection_update2.gifの説明

4. connection属性を、新規Oracle BAM接続の名前に変更します。

5. DataControls.dcxファイルを保存して閉じます。

54.4 Oracle ADFデータ・コントロールを使用したOracle BAMの公開

Oracle BAMデータ・オブジェクトを作成して、JDeveloperからOracle BAMサーバーへの接続を確立した後は、JDeveloperを使用して、これらのデータ・オブジェクトにUIコンポーネントを宣言的にバインドするために必要な情報を提供するデータ・コントロールを作成できます。データ・コントロールは、多数のXMLメタデータ・ファイルで構成されています。これらのファイルでは、実行時にバインディングと連動するサービスの機能が定義されます。

Oracle BAMデータ・オブジェクトの作成方法の詳細は、第55章「Oracle BAMデータ・オブジェクトの定義および管理」を参照してください。Oracle BAMインスタンスへの接続の作成方法の詳細は、第54.3項「Oracle BAMサーバー接続の作成」を参照してください。

54.4.1 Oracle BAMデータ・コントロールの作成方法

Oracle BAMデータ・コントロールは、JDeveloperの「アプリケーション・ナビゲータ」から作成します。

データ・コントロールを作成する手順は、次のとおりです。

1. 「アプリケーション・ナビゲータ」内の「アプリケーション・リソース」パネルで、Oracle BAMサーバー接続のデータ・オブジェクト・フォルダを開きます。

2. データ・コントロールを作成するOracle BAMデータ・オブジェクトを右クリックして、コンテキスト・メニューから「データ・コントロールの作成」を選択します。
図bam_dc_menu_create.gifの説明

3. BAMデータ・コントロール・ウィザードを完了して、データ・コントロールの問合せを作成します。
詳細は、第54.5項「Oracle BAMデータ・コントロールの問合せの作成」を参照してください。

54.4.2 Oracle BAMデータ・コントロール作成時のプロジェクトにおける処理内容

Oracle BAMデータ・オブジェクトに基づいて作成したデータ・コントロールには、選択したすべてのフィールドに対する問合せの表現が含まれています。この問合せは、JDeveloperのBAMデータ・コントロール・ウィザードを使用して構成したグループ、集計、フィルタ、パラメータおよびその他の計算フィールドに基づいて作成されます。

データ・コントロールがサービスおよびバインディングと直接連携するように、JDeveloperによって次のメタデータXMLファイルが作成されます。

- データ・コントロール定義ファイル(DataControls.dcx)

- このサービスが公開するすべての構造化オブジェクトに対する構造定義ファイル

- 設計時XMLファイル

JDeveloperによって、データバインドされたUIコンポーネントの作成に使用できるアイコンも「データ・コントロール」パネルに追加されます。

54.4.2.1 「データ・コントロール」パネルでのOracle BAMデータ・コントロールの表示

「データ・コントロール」パネルには、アプリケーションのビジネス・サービス用に作成されたすべてのデータ・コントロールがリストされ、UIコンポーネントへのバインドに使用できるすべての問合せが公開されます。このパネルは、データ・コントロールによって返されるデータの構造の直接表現です。データ・コントロールを編集すると、パネルに表示される要素を変更できます。

図54-1 Oracle JDeveloperの「データ・コントロール」パネル

「図54-1 Oracle JDeveloperの「データ・コントロール」パネル」の説明

54.5 Oracle BAMデータ・コントロールの問合せの作成

アイテムを特定のUIコンポーネントとして「データ・コントロール」パネルからページにドラッグ・アンド・ドロップすると、データバインドされたユーザー・インタフェースを設計できます。Oracle BAMデータ・コントロールを使用してUIコンポーネントを作成すると、選択したデータ・コントロールにコンポーネントをバインドするために必要な様々なコードやオブジェクトがJDeveloperによって自動的に作成されます。

Oracle BAMデータ・コントロール・ウィザードを使用して、Oracle BAMデータ・コントロールの問合せを作成できます。このウィザードで、フラット問合せの作成またはグループ問合せの作成を選択できます。

次の各項では、問合せを作成するウィザードの各ページの使用方法を説明します。

- 第54.5.1項「問合せタイプの選択方法」

- 第54.5.2項「パラメータの作成方法」

- 第54.5.4項「計算フィールドの作成方法」

- 第54.5.5項「フィールドの選択、編成およびソート方法」

- 第54.5.6項「フィルタの作成方法」

- 第54.5.7項「グループの選択および編成方法」

- 第54.5.8項「集計の作成方法」

54.5.1 問合せタイプの選択方法

Oracle BAMデータ・コントロール・ウィザードの「名前」ページでは、データ・コントロール名の設定およびメタデータXMLファイルの場所の選択の他に、フラット問合せの作成またはグループ問合せの作成を選択できます。

「BAMデータ・コントロール名」フィールドに、データ・コントロールの表示名を入力します。

「ディレクトリ名」フィールドに、データ・コントロールのメタデータXMLファイルを保存するディレクトリを入力します。

「データ・オブジェクト」パスには、問合せの作成元のデータ・オブジェクトの場所が表示されます。

ツリーまたはグラフで表示するデータのグループや集計を作成する場合は、「グループ問合せ」を選択します。「グループ問合せ」を選択した場合のみ有効になる「縮小済」チェック・ボックスを選択すると、グループ問合せの構造がフラットになります。

データをフラットな表またはリストで表示する場合は、「フラット問合せ」を選択します。

「新規レコードの位置」で、新しいレコードをグラフの先頭と最後のどちらに追加するかを選択します。たとえば、棒グラフの右側に新しい棒を表示するには、「最後」を選択します。新しい行をリストの先頭に挿入するには、「先頭」を選択します。

図bam_dc_wiz_name.gifの説明

Oracle BAMデータ・コントロールを含むADFアプリケーションの資格証明を使用して実行時にOracle BAMサーバーに接続するには、「ADF資格証明を使用してBAMに接続します」チェック・ボックスを選択します。この機能は、ADFアプリケーション・ユーザーのアイデンティティを使用して、そのユーザーが表示を許可されているデータのみを表示することで、Oracle BAMサーバーが提供する行レベルのセキュリティを利用します。

この機能を使用するには、Oracle BAMサーバーとADFサーバーの両方が同じ資格証明ストアを使用する必要があります。この機能を無効にする(チェックを解除する)と、ランタイムはOracle JDeveloperまたはOracle Enterprise Manager Fusion Middleware Controlで指定するOracle BAM接続で指定された資格証明を使用してOracle BAMサーバーに接続します。

行レベル・セキュリティの詳細は、第55.6項「セキュリティ・フィルタの作成」を参照してください。

54.5.2 パラメータの作成方法

Oracle BAMデータ・コントロール・ウィザードの「パラメータ」ページで、ウィザードの「フィルタ」ページのフィルタに値を渡すために使用するパラメータを作成できます。フィルタの作成方法の詳細は、第54.5.6項「フィルタの作成方法」を参照してください。

パラメータに値を渡す方法の詳細は、第54.5.3項「パラメータへの値の受け渡し方法」を参照してください。

パラメータを作成する手順は、次のとおりです。

1. 「追加」をクリックしてパラメータを追加します。
「パラメータ」ボックスの右上にある「追加」アイコンをクリックします。

図bam_dc_paramadd.gifの説明

2. パラメータの名前を変更するには、「名前」フィールドにテキストを入力します。
図bam_dc_paramname.gifの説明

3. 「タイプ」リストからデータ型を選択します。
図bam_dc_paramname.gifの説明

表54-1 Oracle BAMタイプとJavaタイプのマッピング

Javaタイプ

Oracle BAMタイプ

java.lang.Integer

整数

java.lang.String

文字列

java.util.Date

日時、タイムスタンプ

java.lang.Boolean

ブール

java.lang.BigDecimal

小数

jave.lang.Double

浮動小数

フィールド*

*「フィールド」パラメータ・タイプは、実行時にグループを指定するためにグラフで使用されます。このパラメータ・タイプを使用すると、データ・オブジェクトのグループ化するフィールドをユーザーが選択できます。詳細は次のトピックを参照してください。

- 第54.5.7項「グループの選択および編成方法」

- 第54.5.3項「パラメータへの値の受け渡し方法」

4. データ・コントロール問合せのロード時にパラメータのデフォルト値を提供するには、「デフォルト値の有効化」を選択してデフォルト値を選択します。
図bam_dc_paramdefault.gifの説明

パラメータのデフォルト値を入力するには、使用可能なデフォルト値の1つを選択するか、または最初のオプションを選択してフィールドに値を入力します。

- 「すべて」は、すべての値を含む行を返します。

- 「NULL」は、NULL値を含む行を返します。

- 「空白」は、空白の文字列を含む行を返します。

54.5.3 パラメータへの値の受け渡し方法

パラメータを使用するOracle BAMデータ・コントロールの問合せが作成されるたびに、操作setParametersがOracle BAMデータ・コントロール構造に表示されます。

図bam_dc_parampass.gifの説明

パラメータをOracle BAMデータ・コントロールに渡すには、問合せの実行前に、Oracle BAMデータ・コントロールでsetParameters操作をコールする必要があります。

この方法は多数ありますが、その1つはADFパラメータ・フォームを使用する方法です。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』を参照してください。

54.5.4 計算フィールドの作成方法

計算フィールドを使用すると、物理的なデータ・オブジェクトを更新せずに、既存のフィールドから導出されたデータに基づいて新しい列を作成できます。Oracle BAMデータ・コントロール・ウィザードの「計算済フィールド」ページを使用して、計算フィールドを作成します。

計算フィールドを作成する手順は、次のとおりです。

1. 「追加」をクリックして、計算フィールドを追加します。
ボックスの右上にある「追加」アイコンをクリックします。

図bam_dc_calcadd.gifの説明

計算リストに新しいデフォルトのフィールド名が表示されます。この名前は、有効な式を入力した後で変更できます。

図bam_dc_calcdefault.gifの説明

2. 式を入力するには、「式」リストから式を選択し、「式の挿入」をクリックします。
図bam_dc_calcinsert.gifの説明

右側のボックスで式を完成し、「検証」をクリックして式の構文をチェックします。

図bam_dc_calcexp.gifの説明

事前作成済の式をいくつか使用できます。各式の例および詳細は、『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』を参照してください。

3. 「名前の変更」をクリックして、計算フィールドの表示名を変更します。
図bam_dc_calcrename.gifの説明

4. 計算でデータ・オブジェクト・フィールドを使用するには、フィールド・リストからフィールドを選択し、「フィールドの挿入」をクリックします。
図bam_dc_calcfield.gifの説明

54.5.4.1 計算フィールドでのグループの作成

計算ページでグループを作成できます。

計算でグループを作成する手順は、次のとおりです。

1. 計算リストで計算を選択します。

2. 「グループ化」をクリックします。
図bam_dc_calcgroup.gifの説明

3. グループ化するフィールドを選択し、「OK」をクリックします。
上矢印および下矢印を使用してグループ順を変更できます。

図bam_dc_calcgroupdia.gifの説明

54.5.5 フィールドの選択、編成およびソート方法

すべてのフィールドの選択を解除するには、「ALL」チェック・ボックスの選択を解除し、個々のフィールドを選択します。

リストの最上位にあるフィールドが、ADFページの最終表の最も左の列に表示されます。フィールドの表示順序を変更するには、フィールドを選択し、青の矢印を使用してリストを上下に移動します。

フィールドをソートするには、「ソート」列のソート・タイプをクリックし、リストから新しいソート・タイプを選択します。

注意:

アクティブ・データを使用する場合、ソートは更新操作時、アップサート操作時には保持されますが、挿入操作時には保持されません。

54.5.6 フィルタの作成方法

Oracle BAMデータ・コントロールのグループ問合せとフラット問合せの両方のタイプにフィルタを適用できます。複雑なフィルタ式を作成するには、エントリとヘッダーを組み合せて追加します。

54.5.6.1 フィルタ・ヘッダーの作成方法

既存のヘッダーにサブヘッダーを作成する手順は、次のとおりです。

1. 「BAMデータ・コントロールの作成」ウィザードの「フィルタ」ページで、サブヘッダーを追加するヘッダーを選択し、「ヘッダーの追加」をクリックします。
フィルタ式の上にあるメイン・ヘッダーを選択すると、その下にサブヘッダーを作成できます。

2. 演算子(デフォルトは「すべて」)を変更するには、ヘッダーを選択し、「編集」をクリックします。次の演算子のオプションでは、次に示す条件の場合にデータが返されます。

- すべて:含まれているすべてのエントリがtrueの場合

- なし:含まれているすべてのエントリがtrueの場合

- 1つ以上:含まれているエントリの少なくとも1つ(複数の可能性あり)がtrueの場合

- すべてではない:含まれている一部のエントリがtrueであるか、またはすべてのエントリがtrueではない(trueではないエントリが含まれている)場合

3. 「フィルタ」リストから演算子を選択し、「OK」をクリックします。

54.5.6.2 フィルタ・エントリの作成方法

フィルタ・エントリを作成する手順は、次のとおりです。

1. 「BAMデータ・コントロールの作成」ウィザードの「フィルタ」ページで、フィルタ・エントリを追加するヘッダーを選択します。
フィルタ式にヘッダーを作成する方法の詳細は、第54.5.6.1項「フィルタ・ヘッダーの作成方法」を参照してください。

2. 「フィルタ・エントリの追加」をクリックします。
「フィルタ・エントリの追加」ダイアログが表示されます。

3. 「フィールド」リストからフィールドを選択します。

4. 「比較」リストから式を選択します。選択項目は次のとおりです。

- 「次と等しい」は、完全に一致する値を含む行を返します。
比較値の構成の詳細は、第54.5.6.3項「比較値の入力」を参照してください。

- 「次と等しくない」は、指定した値以外のすべての値を含む行を返します。

- 「次より小さい」は、指定した値より小さい値を含む行を返します。

- 「次以下」は、指定した値以下の値を含む行を返します。

- 「次より大きい」は、指定した値より大きい値を含む行を返します。

- 「次以上」は、指定した値以上の値を含む行を返します。

- 「類似」は、文字列パターンと一致する値を含む行を返します。文字列内の1文字のワイルドカードとしてアンダースコア(_)、1文字以上のワイルドカードとしてパーセント記号(%)を含めます。ワイルドカード文字は、組み合せることができます。たとえば、%mm _00と指定すると、すべての列(35mm 200、35mm 400、35mm 800)が返されます。空白はデータ照合で文字として処理されるため、式に空白を入力しないでください。

- 「非類似」は、文字列パターンと一致しない値を含む行を返します。

- 「NULL」は、列がNULLの値を含む行を返します。この比較を選択すると、フィルタ構成は完了します。「OK」をクリックしてフィルタを作成します。数値データ型の場合、0(ゼロ)の値を返すフィルタに対してNULLは返されません。つまり、0(ゼロ)はNULL値として処理されません。NULLはフィールドのデータが欠落していることを表します。

- 「NULLではない」は、列がNULLではない値を含む行を返します。この比較を選択すると、フィルタ構成は完了します。「OK」をクリックしてフィルタを作成します。数値データ型の場合、0(ゼロ)の値を返すフィルタに対してNULLは返されません。つまり、0(ゼロ)はNULL値として処理されません。NULLはフィールドのデータが欠落していることを表します。

- 「リストにある」は、リストに含まれた値を含む行を返します。リストを作成するには、「編集」をクリックします。フィールドに値を入力し、「追加」をクリックしてその値をリストに追加します。必要な数の値を追加します。「参照」をクリックすると、現在データ・オブジェクトにある値を選択できます。値を削除するには、「削除」をクリックします。「OK」をクリックして、ダイアログを閉じます。

- 「リストにない」は、リストに含まれていない値を含む行を返します。リストを作成するには、「編集」をクリックします。フィールドに値を入力し、「追加」をクリックしてその値をリストに追加します。必要な数の値を追加します。「参照」をクリックすると、現在データ・オブジェクトにある値を選択できます。値を削除するには、「削除」をクリックします。「OK」をクリックして、ダイアログを閉じます。

- 「時間間隔内」は、指定した時間間隔内に発生した値を含む行を返します。提供されているリストを使用して時間間隔を構成します。「タイプ」を選択し、フィールドに乗算子を入力し、「単位」を選択します。
日時フィールドまたはタイムスタンプ・フィールドに対してフィルタ処理を実行する場合は、「すぐに有効」を有効にすると、表示される時間間隔を時間が経過しても現在の時間間隔に保つことができます。表示をリフレッシュする頻度は、「すぐに有効の間隔」を構成して指定します。詳細は、第54.5.6.4項「「すぐに有効」の使用」を参照してください。

- 「現行の期間内」は、現在の指定した時間単位内に発生した値を含む行を返します。リストから「単位」を選択します。
日時フィールドまたはタイムスタンプ・フィールドに対してフィルタ処理を実行する場合は、「すぐに有効」を有効にすると、表示される期間を時間が経過しても現在の期間に保つことができます。詳細は、第54.5.6.4項「「すぐに有効」の使用」を参照してください。

- 「期間内」は、指定した期間内に発生した値を含む行を返します。提供されているリストを使用して期間を構成します。「オフセット」フィールドに値を入力し、「単位」を選択し、「タイプ」を選択します。
日時フィールドまたはタイムスタンプ・フィールドに対してフィルタ処理を実行する場合は、「すぐに有効」を有効にすると、表示される期間を時間が経過しても現在の期間に保つことができます。詳細は、第54.5.6.4項「「すぐに有効」の使用」を参照してください。

5. 「OK」をクリックしてフィルタ式にエントリを追加します。

54.5.6.3 比較値の入力

ほとんどの「比較」値で、「値」リストから「値」、「フィールド」または「計算」を選択する必要があります。

ただし、次に示す比較には比較値は必要ありません。

- NULL

- NULLではない

- リストにある

- リストにない

- 時間間隔内

- 現行の期間内

- 期間内

54.5.6.3.1 値との比較

「値」を選択した場合は、次のいずれかを実行します。

- 「参照」をクリックして、データ・オブジェクトに存在する値のリストを表示します。リストから値を選択します。リストには最大50個の値が表示されます。フィールドを空白のままにすると、空白文字列に対するフィルタを作成できます。

注意:

フィールドの値が50個を超える場合は、すべての値が「参照」リストに表示されるわけではありません。リストに表示する行数は、Oracle Business Activity Monitoring管理者が構成できます。詳細は、『Oracle Business Activity Monitoring インストレーション・ガイド』を参照してください。

- フィールドに値を手動で入力します。

54.5.6.3.2 計算との比較

「計算」を選択した場合は、最初のフィールドと比較する式をフィールドに入力します。

たとえば、サンプルのCall Centerデータ・オブジェクトを使用してリスト・ビューを作成し、次の属性を指定してフィルタを作成するとします。

- フィールド:Total

- 比較: 次と等しい

- 値。計算

- 「計算」フィールド:Quantity*2

このフィルタでは、Total列の値がQuantity列の値の2倍と等しい行のみが取得されます。

54.5.6.3.3 フィールドとの比較

「フィールド」を選択した場合は、「フィールド」リストで選択したフィールドと比較するフィールドを最後のリストから選択します。

54.5.6.3.4 パラメータとの比較

「パラメータ」を選択した場合は、右側のリストからパラメータを選択します。パラメータを使用してフィルタを作成すると、実行時にフィルタの値を変更できます。

リストには、「Oracle BAMデータ・コントロールの作成」ウィザードの「パラメータ」ステップで作成したパラメータが表示されます。パラメータの作成方法の詳細は、第54.5.2項「パラメータの作成方法」を参照してください。

54.5.6.4 「すぐに有効」の使用

データのフィルタ処理で「すぐに有効」機能を使用すると、常に、定義した時間ウィンドウ内の部分のデータをビューに表示できます。時間経過に従って、ビューはフィルタに定義された時間間隔内のデータで更新されます。時間経過とともに、古いデータはビューから削除され、新しいデータが追加されます。

「すぐに有効」は、次のいずれかの比較式を選択した場合に使用できます。

- 時間間隔内

- 現行の期間内

- 期間内

「すぐに有効」の動作は、選択した比較式によって異なります。

「時間間隔内」を選択した場合は、「すぐに有効の間隔」設定を使用して、データのリフレッシュ頻度を制御できます。

たとえば、「時間間隔内」、「前へ」タイプ、「1」、「時」単位、および「すぐに有効」を使用するフィルタを作成し、「すぐに有効の間隔」を60秒に設定した場合は、現在の時刻が3:25 p.m.だとすると、2:25 p.m.から3:25 p.m.のデータがビューに表示されます。現在の時刻が3:26 p.m.に変わると、2:26 p.m.から3:26 p.m.のデータがビューに表示されます。60秒ごとに、最も古い1分間のデータがビューから削除され、最新の1分間のデータが追加されます。

「現行の期間内」または「期間内」を選択した場合は、期間が変わるときにデータがリフレッシュされます。

たとえば、「現行の期間内」、「時」単位、および「すぐに有効の間隔」を使用するフィルタを作成した場合は、現在の時刻が3:25 p.m.だとすると、現在の時刻が4:00 p.m.になるまでは、3:00 p.m.から3:59 p.m.のデータのみがビューに表示されます。4:00 p.m.になると、3:00 p.m.から3:59 p.m.のデータはすべてビューから削除され、4:00 p.m.から4:59 p.m.の時間間隔内に累積されるデータがビューに表示されます。

54.5.7 グループの選択および編成方法

グループを指定する手順は、次のとおりです。

1. 「BAMデータ・コントロールの作成」ウィザードの「グループ」ページで、「グループ・フィールド」リストから1つ以上のフィールドを選択します。
「フィールド」パラメータを作成した場合は、そのパラメータがリストに表示されます。フィールド・パラメータの作成方法の詳細は、第54.5.2項「パラメータの作成方法」を参照してください。

数値フィールドでグループ化するには、最初に、リスト下部にある「数値フィールドの表示」を選択します。

2. グループがグラフに表示される順序を変更するには、選択したフィールドに対して、「ソート」リストからソート・オプションを選択します。

3. 「フィールド」リストで日時フィールドを選択した場合は、ウィザード・ページの右側で、時間グループの構成にいくつかのオプションを使用できるようになります。
詳細は、第54.5.7.1項「時間グループと時系列の構成方法」を参照してください。

54.5.7.1 時間グループと時系列の構成方法

日時フィールドに基づいてグループ化(X軸)したグラフを作成できます。

時間グループを構成する手順は、次のとおりです。

1. 「BAMデータ・コントロールの作成」ウィザードの「グループ」ページで、「グループ・フィールド」リストから日時型のフィールドを1つ選択します。
このアクションによって、ウィザード・ページの右側にある「時間グループ」オプションが有効になります。

2. 「連続した時系列」を選択して、データが含まれていない時間間隔に対する空グループを表示します。
データ・オブジェクトにエントリがなかった場合、時間の空白部分が存在する場合があります。「連続した時系列」機能を使用すると、値が0(ゼロ)のグループも結果に追加されるため、結果をグラフに表示する際に、X軸上の時系列が連続して表示されます。

「連続した時系列」は、グループ化する日時型フィールドを1つ選択している場合のみ有効です。追加のグループ・フィールドを選択した場合、「連続した時系列」はサポートされません。

3. 「時系列の使用」または「時間グループの使用」のいずれかを選択します。

- 「時系列の使用」を選択すると、データ・オブジェクト内で使用可能な最初の日時データ・ポイントから、構成した時間間隔の最後までのデータが表示されます。

- 「時間グループの使用」を選択すると、時間間隔の設定数にグループ化されたデータが表示されます。たとえば、時間単位リストから「月」を選択すると、データがあるすべての年の1月の全データが、グラフ上の1つのデータ・ポイントにグループ化されます。

4. リストから時間単位を選択します。
「時間グループの使用」を選択した場合のグループについて、次に説明します。

- 年: データがあるすべての年のグループが表示されます。

- 四半期: 1年の四半期(1月から3月、4月から6月、7月から9月、10月から12月)を表す4つのグループが表示されます。

- 月: 1年の月を表す12のグループが表示されます。

- 週: 1年の週を表す52のグループが表示されます。

- 通算日付(年): 1年の365日を表すグループが表示されます。

- 日付: 1か月の日を表す31のグループが表示されます。

- 曜日: 1週間の曜日を表す7つのグループが表示されます。

- 時: 1日の時間を表す24のグループが表示されます。

- 分: 1時間の分を表す60のグループが表示されます。

- 秒: 1分の秒を表す60のグループが表示されます。

5. グループ化する時間単位の数量を入力します。たとえば、月時間単位の横に2と入力すると、2か月ごとのグループが表示されます(1月と2月がグラフ上で1つのデータ・ポイントにグループ化されます)。

6. 「次へ」または「終了」をクリックします。

54.5.8 集計の作成方法

フィールドの集計を指定する手順は、次のとおりです。

1. 「BAMデータ・コントロールの作成」ウィザードの「集計」ページで、「フィールド」リストからフィールドを選択します。
選択したフィールドのデータ型に対して有効なサマリー関数が有効になります。

2. 有効なサマリー関数を1つ以上選択します。
「サマリー値」リストに式が表示されます。

54.5.9 問合せの変更方法

Oracle BAMデータ・コントロールの問合せを編集するには、データ・コントロールのノードを右クリックし、「定義の編集」を選択します。「BAMデータ・コントロールの編集」ウィザードが表示され、問合せの該当する部分を編集するためのページに移動できます。

54.6 ADFページでのOracle BAMデータ・コントロールの使用

Oracle BAMデータ・コントロールは、すべてのADF Facesコンポーネントで使用できます。ADS(アクティブ・データ・サービス)に対応しているのは、ADF Facesコンポーネントのサブセットのみです。ADSをサポートしているADF Facesコンポーネントの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』を参照してください。

Oracle BAMデータ・コントロール・インスタンスでは、接続先のOracle BAMサーバー・インスタンスのリソースが使用されます。これらのリソースは、データ・コントロールがリリースされるとリリースされます。これらのリソースを適時にリリースするには、Oracle BAMデータ・コントロールを、バインドされたADFタスク・フロー内で使用し、データ・コントロール・スコープをisolatedに設定する必要があります。リソースが適時にリリースされるように、web.xmlのセッション・タイムアウトを適切な値に設定することをお薦めします。データ・コントロールの一般的なライフ・サイクルの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』を参照してください。

注意:

Oracle BAMデータ・コントロール・インスタンスの共有はサポートされていません。2つ以上のADF Facesコンポーネントで同じデータを表示する必要があり、これらのコンポーネントが同じOracle BAMデータ・コントロール定義にバインドされている場合は、必ず、バインドされたADFタスク・フローに各ADF Facesコンポーネントをラップし、データ・コントロール・スコープをisolatedに設定してください。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』を参照してください。

タスク・フロー内にsetParametersを含むOracle BAMデータ・コントロールを使用する場合は、パラメータをタスク・フローに渡して、問合せコール前にメソッドがコールされるようにします。

54.6.1 JSFページでのOracle BAMデータ・コントロールの使用方法

JSFページでOracle BAMデータ・コントロールを使用する手順は、次のとおりです。

1. デフォルト・ブラウザを設定します。

1. JDeveloperの「ツール」メニューで、「プリファレンス」を選択します。

2. 「プリファレンス」ダイアログで、「Webブラウザとプロキシ」を選択します。

3. 「ブラウザのコマンドライン」フィールドにブラウザの実行可能ファイルへのパスを入力してデフォルトのブラウザを選択し、適用可能なプロキシ情報を入力し、「OK」をクリックします。

2. バインドされたADFタスク・フローを作成します。

- プロジェクトを右クリックして「新規」を選択し、「Web層」カテゴリの「JSF」を選択し、「項目」リストで「ADFタスク・フロー」を選択します。

- 「バインド・タスク・フローとして作成」オプションを選択していることを確認します。

- 「コンポーネント・パレット」からADFタスク・フロー・エディタに、「ビュー」をドラッグ・アンド・ドロップします。

- 「コンポーネント・パレット」の「ソース要素」の下にあるdata-control-scopeを、ADFタスク・フロー・エディタにドラッグ・アンド・ドロップします。

- 「プロパティ・インスペクタ」で、「データ・コントロール・スコープ」をisolatedに変更します。

3. 以前にADFタスク・フロー・エディタにドロップしたビューをダブルクリックして、JSFページ・フラグメントを作成します。

4. アクセッサ・ノードを「データ・コントロール」パネルからJSFページ・エディタにドラッグ・アンド・ドロップします。

5. データ視覚化コンポーネントを選択します。
ADFコンポーネントのサブセットでアクティブ・データがサポートされます。データ・コントロールをデータ視覚化コンポーネントにバインドする方法の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。

6. すべてを保存し、Oracle JDeveloperツールバーで、「プロジェクトの実行」をクリックします。

54.7 Oracle BAMデータ・コントロールを使用したアプリケーションのデプロイ

実行時に、Oracle BAMデータ・コントロールは、Oracle BAM接続を使用してOracle BAMサーバーに接続する必要があります。

統合WebLogic Serverへのデプロイメントは自動ですが、スタンドアロンのOracle WebLogic Serverへのデプロイメントでは、追加の手順をいくつか実行する必要があります。詳細は、第54.7.1項「開発モードのOracle WebLogic Serverへのデプロイ方法」および第54.7.2項「本番モードのOracle WebLogic Serverへのデプロイ方法」を参照してください。

Fusion Webアプリケーションのデプロイの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。

54.7.1 開発モードのOracle WebLogic Serverへのデプロイ方法

開発モードのOracle WebLogic Serverへのデプロイメント前に、Oracle WebLogic Serverの起動時にJavaシステム・プロパティjps.app.credential.overwrite.allowedをtrueに設定していることを確認します。

次の記述をORACLE_HOME/user_projects/domains/domain/bin/setDomainEnv.shファイルのJAVA_PROPERTIESエントリに追加します。

-Djps.app.credential.overwrite.allowed=true

デプロイメント後の構成は必要ありません。

54.7.2 本番モードのOracle WebLogic Serverへのデプロイ方法

Oracle BAMデータ・コントロールを使用してADFアプリケーションを本番モードのOracle WebLogic Serverにデプロイする前後に、次の手順を実行する必要があります。

1. アプリケーションは、MDS(メタデータ・データ・サービス)を使用してデプロイする必要があります。MDSを有効にする手順は、次のとおりです。

1. MDSリポジトリを作成または登録(あるいはその両方)します。

2. adf-config.xmlファイルを編集して、次のブロックを追加します。

<adf-mds-config xmlns="http://xmlns.oracle.com/adf/mds/config">
<mds-config xmlns="http://xmlns.oracle.com/mds/config" version="11.1.1.000">
<persistence-config>
<metadata-store-usages>
<metadata-store-usage default-cust-store="true" deploy-target="true" id="myRepos">
</metadata-store-usage>
</metadata-store-usages>
</persistence-config>
</mds-config>
</adf-mds-config>

3. デプロイメント時に、表示される「MDSリポジトリ」ダイアログから適切なリポジトリを選択した後で、アプリケーションをOracle WebLogic Serverにデプロイします。

2. デプロイメント後は、Oracle Enterprise Manager Fusion Middleware ControlでOracle BAM接続を再作成する必要があります。
「ADF接続構成」ページに移動し、「BAM」接続を作成します。

1. Oracle Enterprise Manager Fusion Middleware Controlを開きます(http://host:port_number/em)。

2. 左側のペインで、「デプロイメント」を選択し、次にアプリケーションを選択します。

3. 右側のペインで、「アプリケーションのデプロイ」を選択し、メニューから「ADF」→「ADF接続の構成」の順に選択します。

4. 「接続タイプ」で「BAM」を選択します。

5. Oracle JDeveloperで定義した接続タイプと同じ「接続タイプ」を入力します。

6. 「接続の作成」を選択して、「BAM接続」の下に新規行を追加します。

7. 新しい接続を選択して「編集」アイコンをクリックし、ダイアログですべての接続パラメータに適切な値を指定し、「OK」をクリックします。
図bam_em_adf_conn.gifの説明

Oracle BAM Web層は、レポート・サーバーが実行されている場所です。「BAM Web層プロトコル」の有効な値は、httpおよびhttpsです。

設計時に構成されたOracle BAM接続と同じ「接続名」を入力する必要があります(第53.4項「Oracle BAMサーバーへの設計時接続の作成」を参照)。

8. 「適用」をクリックしてページを再実行します。

55 Oracle BAMデータ・オブジェクトの定義および管理

この章では、Oracle Business Activity Monitoring(Oracle BAM)アーキテクトでデータ・オブジェクトを作成して管理する方法(権限の割当て、フォルダの管理、セキュリティ・フィルタの作成、ディメンションと階層の追加など)について説明します。

この章には次の項が含まれます:

- 第55.1項「Oracle BAMデータ・オブジェクトの概要」

- 第55.2項「データ・オブジェクトの定義」

- 第55.3項「データ・オブジェクトに対する権限の作成」

- 第55.4項「既存のデータ・オブジェクトの表示」

- 第55.5項「データ・オブジェクト・フォルダの使用」

- 第55.6項「セキュリティ・フィルタの作成」

- 第55.7項「ディメンションの作成」

- 第55.8項「データ・オブジェクトの名前の変更および移動」

- 第55.9項「索引の作成」

- 第55.10項「データ・オブジェクトの消去」

- 第55.11項「データ・オブジェクトの削除」

55.1 Oracle BAMデータ・オブジェクトの概要

データ・オブジェクトは、RAWデータをデータベースに格納する表です。各データ・オブジェクトには特定のレイアウトがあり、データ・フィールド、参照フィールドおよび計算フィールドを組み合せることができます。

データ・オブジェクトは、Oracle BAMアクティブ・スタジオでのレポートの作成、ADFアプリケーションでのアクティブ・データ視覚化コンポーネントの作成などに使用します。データ・オブジェクトの使用方法の詳細は、『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』のレポートの作成および管理に関する項、および第54章「Oracle BAMデータ・コントロールの使用」を参照してください。

定義するデータ・オブジェクトは、エンタープライズ・メッセージ・ソース(EMS)から使用可能なタイプのデータに基づきます。これはOracle BAMアーキテクトで定義できます。データ・オブジェクトには、列を定義する必要があります。データ・オブジェクトの作成時、そのデータ・オブジェクトにデータは含まれていません。データ・オブジェクトには、次の各章で説明するテクノロジを使用して、データをロードまたはストリームする必要があります。

- 第53章「Oracle BAMとSOAコンポジット・アプリケーションの統合」

- 第56章「Oracle BAMエンタープライズ・メッセージ・ソースの作成」

- 第57章「Oracle Data IntegratorとOracle BAMの併用」

- 第58章「外部データ・ソースの作成」

- 第59章「Oracle BAM Webサービスの使用」

データ・オブジェクトは、Oracle BAMアラートからアクセスおよび更新することもできます。詳細は、第60章「Oracle BAMアラートの作成」を参照してください。

警告:

データベース内のデータを直接読み取ったり、操作しないでください。データにアクセスする場合は、常にOracle BAMアーキテクトまたはOracle BAMアクティブ・データ・キャッシュAPIを使用する必要があります。

55.2 データ・オブジェクトの定義

データ・オブジェクトはOracle BAMアーキテクトを使用して定義されます。詳細は次のトピックを参照してください。

- 第55.2.1項「データ・オブジェクトの定義方法」

- 第55.2.2項「データ・オブジェクトへの列の追加方法」

- 第55.2.3項「データ・オブジェクトへの参照列の追加方法」

- 第55.2.4項「データ・オブジェクトへの計算列の追加方法」

- 第55.2.5項「データ・オブジェクトへのタイムスタンプ列の追加方法」

- 第55.2.6項「システム・データ・オブジェクトに関する注意事項」

- 第55.2.7項「Oracle Data Integratorデータ・オブジェクトに関する注意事項」

55.2.1 データ・オブジェクトの定義方法

データ・オブジェクトを定義する手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「データ・オブジェクト」を選択します。

2. 「データ・オブジェクトの作成」をクリックします。

3. データ・オブジェクトの名前を入力します。

注意:

Oracle BAMオブジェクト名(データ・オブジェクト名、レポート名、エンタープライズ・メッセージ・ソース名など)に一重引用符または二重引用符が含まれていると、実行時エラーが発生します。

Oracle BAMオブジェクト名には、一重引用符または二重引用符を含めないでください。

4. フォルダ・ツリー内のデータ・オブジェクトの格納先のパスを入力します。「フォルダの選択」ダイアログを使用する場合は、「参照」をクリックします。

5. 必要に応じて、データ・オブジェクトの説明を入力します。

6. このデータ・オブジェクトを外部データ・ソース(EDS)からロードする場合は、「外部データ・ソース」チェック・ボックスを選択して、次のように構成します。

- リストから「外部データ・ソース」を選択します。EDS定義は、「外部データ・ソース」画面で構成します。詳細は、第58章「外部データ・ソースの作成」を参照してください。

- 「外部表名」を選択します。

注意:

EDSに対するデータ・オブジェクトを作成する場合は、ユーザーに属している表のみが表示されます。

EDSに対して複数のタイムスタンプ・フィールドがあるデータ・オブジェクトを作成する方法は、サポートされていません。

7. 「フィールドの追加」または「1つ以上の参照フィールドの追加」オプションを使用して、データ・オブジェクトに列を追加します。
詳細は、第55.2.2項「データ・オブジェクトへの列の追加方法」と第55.2.3項「データ・オブジェクトへの参照列の追加方法」を参照してください。

8. 列または参照列の追加の終了後、「データ・オブジェクトの作成」をクリックします。

55.2.2 データ・オブジェクトへの列の追加方法

データ・オブジェクトに列を追加する手順は、次のとおりです。

1. 作成中または編集中のデータ・オブジェクトで、「フィールドの追加」をクリックします。

2. 列名、データ型、最大サイズ(小数列のスケール)、NULL値可能かどうか、パブリックかどうか、およびヒント・テキストを指定します。
外部データ・ソースに基づいて列をデータ・オブジェクトに追加する場合は、「外部フィールド名」も指定する必要があります。

データ型には、次のものがあります。

- 文字列:一連の文字が含まれているテキスト列。
最大サイズが0(ゼロ)より大きく2000以下の文字列は、Oracleデータベースのデータ型VARCHARフィールドになります。最大サイズが0(ゼロ)未満または2000より大きい場合、文字列フィールドはCLOBに格納されます。CLOBフィールドを取得するには、文字列フィールドを2000より大きい最大サイズで定義します。

- 整数:-2,147,483,648から2,147,483,648までの整数が含まれている数値列。

- 浮動小数:倍精度の浮動小数点数。
Oracle BAMの浮動小数型は、OracleデータベースのFloat型にマップされません。Oracle BAMの浮動小数による数値データの切捨ては非常に高精度です。精度が失われないようにする場合は、Oracle BAMの小数型(OracleデータベースのNUMBER)を必要なスケールで使用してください。

- 小数:スケール数値が定義されている小数を含む数値。この数値は、値の桁ごとに文字が使用される文字列として格納されます。
Oracle BAMの小数データ型は、OracleデータベースにNUMBER (38, X)として格納されます。最初の引数の38は精度であり、ハードコードされます。2番目の引数のXはスケールであり、この値は調整できます。スケール値は38より大きい値にできません。

- ブール:値としてtrueまたはfalseが指定されるブール列。

- 自動増加整数:自動的に増分される整数列。

- 日時:実数として組み合される日付と時刻。

- タイムスタンプ:ミリ秒単位で生成される日付タイムスタンプ。データ・オブジェクトに含めることができるタイムスタンプ・フィールドは1つのみです。詳細は、第55.2.5項「データ・オブジェクトへのタイムスタンプ列の追加方法」を参照してください。
「日時」フィールドは、Oracleデータベースのデータ型DATEとして格納されます。「タイムスタンプ」フィールドは、Oracleデータベースのデータ型TIMESTAMP(6)として格納されます。「タイムスタンプ」フィールドへのデータの移入方法によっては、Oracle BAMによってタイムスタンプ値が入力される場合があります。たとえば、Oracle BAMアーキテクトでは、行の追加時にタイムスタンプの値は指定できませんが、タイムスタンプの値がICommandインポート・ファイルで指定されている場合は、その指定値が現在の時間のかわりにタイムスタンプの値として追加されます。

- 計算済:計算列は、式によって生成され、別のデータ型として保存されます。詳細は、第55.2.4項「データ・オブジェクトへの計算列の追加方法」を参照してください。

「フィールドの追加」および「1つ以上の参照フィールドの追加」を使用して、必要なすべての列が表示されるまで列の追加を続けます。データ・オブジェクト内の列を削除するには、「削除」をクリックします。

3. 「変更の保存」をクリックします。

55.2.3 データ・オブジェクトへの参照列の追加方法

データ・オブジェクトには、参照列を追加できます。これによって、指定したデータ・オブジェクト内のキー列で参照を実行し、現行のデータ・オブジェクトに列を返します。複数の列を照合して、複数の参照列を返すことができます。

データ・オブジェクトに参照列を追加する手順は、次のとおりです。

1. 作成中または編集中のデータ・オブジェクトで、「1つ以上の参照フィールドの追加」をクリックします。
「参照フィールドの定義」ダイアログが表示されます。

2. 参照に使用するデータ・オブジェクトを選択します。

3. データ・オブジェクトから参照列を選択します。[Shift]または[Ctrl]キーを押しながら選択すると、1つ以上の列を選択できます。複数の列を選択すると、データ・オブジェクトに複数の参照列が作成されます。これらの列が返される列です。

4. 参照データ・オブジェクトから、照合する列を選択します。

5. 現行のデータ・オブジェクトから、照合する列を選択します。このデータ・オブジェクトには、他の列を事前に作成し、選択する列が存在している必要があります。

6. 「追加」をクリックします。

一致した列名がリストに表示されます。作成した一致ペアを削除するには、「削除」をクリックします。

7. ステップ4から6を繰り返して、複数の一致列を作成できます。これは、コンポジット・キーとも呼ばれます。

8. 「OK」をクリックして変更内容を保存し、ダイアログを閉じます。
新しい参照列がデータ・オブジェクトに追加されます。参照列に変更を加えるには、「レイアウト」→「レイアウトの編集」ページの「参照フィールドの変更」をクリックします。戻り列は、新しい参照の定義時に複数選択できますが、既存の参照の変更時には複数選択できません。

作成した参照フィールドを削除するには、「削除」をクリックします。

注意:

Oracle Business Activity Monitoringでは、非関連表またはスター・スキーマという2種類のスキーマ・モデルがサポートされます。これらのモデルに適合しない他の種類のスキーマは、パフォーマンスの問題またはデッドロックの原因になります。スノーフレーク・ディメンション(デジーチェーン化された参照)は、サポートされません。

サポートされる例:

Table 1 (with no lookups to any other tables)
Table 1 > Lookup > Table 2

サポートされない例:

Table 1 > Lookup > Table 2 > Lookup > Table 3

55.2.4 データ・オブジェクトへの計算列の追加方法

データ・オブジェクトに計算列を作成するときは、演算子および式関数を列名と組み合せて使用して新しい列を作成できます。

表55-1に、計算列の作成に使用可能な演算子を示します。

計算列で使用できる式の構文と例は、『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』に記載されています。

計算列(フィールド)で使用する場合、小数型の数値には文字接尾辞"D"が必要です。詳細は、『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』を参照してください。

表55-1 計算列で使用する演算子

演算子

機能

+(プラス記号)

加算

-(マイナス記号)

減算

*(アスタリスク)

乗算

/(スラッシュ)

除算

%(パーセント記号)

係数

()(カッコ)

操作順序の決定

&&(二重アンパサンド)

論理AND

!=(感嘆符と等価符号)

論理NOT

||(二重パイプ)

論理OR

次に例を示します。

if ((CallbackClientTime == NULL) ||
(ReceiveInputTime == NULL)) then (-1) else
(CallbackClientTime-ReceiveInputTime)

==(二重等価符号)

等価

=(等価符号)

代入

表55-1にリストされている演算子、二重引用符、空白などの特殊文字が含まれている列名は、中カッコ{}で囲む必要があります。列名に含まれているのが数値、文字およびアンダースコアのみで、列名が文字またはアンダースコアで始まる場合、中カッコは必要ありません。たとえば、列名がSales+Costsの場合、計算での正しい入力方法は{Sales+Costs}です。

二重引用符内で二重引用符を使用する場合は、別の二重引用符のセットでエスケープする必要があります。たとえば、Length("""Hello World, "" I said")のように記述します。

警告:

データ・オブジェクトに入力した計算列の構文が不適切な場合は、データ・オブジェクトの定義が失われる可能性があります。

55.2.5 データ・オブジェクトへのタイムスタンプ列の追加方法

Timestampデータ型を選択すると、ミリ秒単位で生成される日付タイムスタンプ列を作成できます。データ・オブジェクト内のこの列は、タイムスタンプ・データを作成できるように、Oracle BAM ADCによってデータ・オブジェクトに移入が行われる際に空である必要があります。

55.2.6 システム・データ・オブジェクトに関する注意事項

システム・データ・オブジェクト・フォルダには、Oracle Business Activity Monitoringの実行に使用するデータ・オブジェクトが含まれています。これらのデータ・オブジェクトは、次のデータ・オブジェクトを除き、変更しないでください。

- カスタム・パラメータ: アクション・ボタンのグローバル・パラメータを定義できます。

- アクション・フォーム・テンプレート: アクション・フォーム・ビューのHTMLフォームを定義できます。

- グラフのテーマ: ビュー・フォーマットの色テーマを追加または変更できます。

- マトリックスのテーマ: マトリックス・ビューの色テーマを追加または変更できます。

- ユーティリティ・テンプレート: アクション・フォーム・ビューでコンテンツの変換に使用するテンプレートを定義できます。

マトリックス・テーマ、色テーマ、アクション・ボタンおよびアクション・フォームの詳細は、『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』を参照してください。

55.2.7 Oracle Data Integratorデータ・オブジェクトに関する注意事項

Oracle BAMとOracle Data Integratorの統合ファイルをインストールすると、Oracle BAMアーキテクトでは、/System/ODI/フォルダに、「コンテキスト」、「シナリオ」および「変数」の3つのデータ・オブジェクトが作成されます。これらのデータ・オブジェクトはOracle BAMアーキテクトから削除しないでください。また、その構成を変更しないでください。

55.3 データ・オブジェクトに対する権限の作成

データ・オブジェクトに対してユーザーおよびグループの権限を追加できます。データ・オブジェクトに対する読取り権限を所有しているユーザーは、レポートの作成時にデータ・オブジェクトを選択できます。

55.3.1 データ・オブジェクトに対する権限を作成する方法

データ・オブジェクトに対する権限を追加する手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「データ・オブジェクト」を選択します。

2. データ・オブジェクトを選択します。
右側のフレームにデータ・オブジェクトの一般情報が表示されます。

3. 「権限」をクリックします。

4. 「権限の編集」をクリックします。
また、別のデータ・オブジェクトから権限をコピーすることもできます。詳細は、第55.3.3項「他のデータ・オブジェクトからの権限のコピー方法」を参照してください。

5. 「データ・オブジェクトへのアクセスを特定のユーザーまたはグループに制限する」チェック・ボックスをクリックします。
ユーザーとグループのリストおよび権限が表示されます。

6. 次のオプションを選択して、表示内容を選択できます。

- すべてのユーザーおよびグループを表示

- 権限のあるユーザーおよびグループのみを表示

- ユーザーのみを表示

- グループのみを表示

7. リストの最上位にあるボタンをクリックすると、リスト全体に権限を設定できます。
設定できる権限は、読取り、更新および削除です。ユーザー名またはグループ名の横にある権限列内のチェック・ボックスを選択すると、リスト内の個々のユーザーまたはグループに権限を設定できます。

注意:

削除権限と更新権限は、ユーザーに読取り権限も付与されていないと有効になりません。

管理者ロールのメンバーには、すべてのデータ・オブジェクトに対するすべての権限があり、その権限は編集できません。

8. 選択したチェック・ボックスで権限を指定した後、「変更の保存」をクリックします。
変更が保存されたことを確認するメッセージが表示されます。

9. データ・オブジェクトに対するアクションを表示するには、「続行」をクリックします。

55.3.2 ユーザーのグループの追加方法

管理者ロールを割り当てられているユーザーは、すべてのデータ・オブジェクトにアクセスできます。データ・オブジェクト権限は、管理者ロールによって上書きされます。

リストにグループを追加する手順は、次のとおりです。

1. 「グループをリストに追加」をクリックします。

2. 表示されたフィールドにWindowsのグループ名を入力します。このグループは、ドメイン・グループとしてすでに存在している必要があります。

3. 「OK」をクリックします。
リストにグループが追加されます。

55.3.3 他のデータ・オブジェクトからの権限のコピー方法

別のデータ・オブジェクトから権限をコピーし、保存する前にその権限に追加の変更を加えることができます。

データ・オブジェクト用のOracle BAMアーキテクトで、「権限」をクリックした後、「コピー元」をクリックします。コピーする権限が含まれているデータ・オブジェクトを選択し、「OK」をクリックします。コピーした権限を編集し、「変更の保存」をクリックできます。

別のデータ・オブジェクトから権限をコピーする手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「データ・オブジェクト」を選択します。

2. セキュリティ・フィルタを追加するデータ・オブジェクトをクリックします。
右側のフレームにデータ・オブジェクトの一般情報が表示されます。

3. 「権限」をクリックします。

4. 「コピー元」をクリックします。
「データ・オブジェクトの選択」ダイアログが表示されます。

5. コピーする権限が含まれているデータ・オブジェクトを選択し、「OK」をクリックします。

6. 以前に割り当てられた権限がデータ・オブジェクトに存在しない場合は、「データ・オブジェクトへのアクセスの制限」チェック・ボックスを選択します。

7. コピーした権限を編集するか、またはリストにグループを追加できます。

8. 「変更の保存」をクリックします。

55.4 既存のデータ・オブジェクトの表示

この項では、データ・オブジェクトに関する情報の表示方法について説明します。

55.4.1 データ・オブジェクトの一般情報の表示方法

データ・オブジェクトの一般情報には、所有者、作成日時、最終変更日時および行数が表示されます。

データ・オブジェクトの一般情報を表示する手順は、次のとおりです。

- リスト内のデータ・オブジェクトをクリックします。
現在、データ・オブジェクトのレイアウトまたはコンテンツを表示している場合は、「汎用」をクリックします。

右側のフレームに一般情報が表示されます。次の情報が含まれます。

- 作成日時:データ・オブジェクトが作成された日時。

- 最終変更: データ・オブジェクトが最後に変更された日時。

- 行件数: データ・オブジェクト内のデータの行数。

- 場所: データ・オブジェクトの場所。

- タイプ: データ・オブジェクトのタイプ。

- データ・オブジェクトID: データ・オブジェクトの識別に使用するID。これは名前に基づいています。ただし、このIDは、依存性に影響を及ぼすことなく名前を編集できるようにシステム全体で使用されます。

注意:

行数が500,000行を超えている場合、一般情報には、パフォーマンスを向上させるために概算の行数が表示されます。概算の行数と実際の行数との誤差は、5から10%以内です。概算の行数ではなく、正確な行数を表示する場合は、「完全件数の表示」をクリックします。正確な行数が表示されます。データ・オブジェクトに何百万もの行が含まれている場合は、この操作に数分かかる場合があります。

55.4.2 データ・オブジェクトのレイアウトの表示方法

レイアウトでは、データ・オブジェクトの列が説明されています。これらの列は、名前、列ID、データ型、許容最大長、スケール、NULL値可能、パブリック、計算、ヒント・テキストおよび参照ごとに説明されています。

データ・オブジェクトのレイアウトを表示する手順は、次のとおりです。

1. データ・オブジェクトを選択します。

2. 右側のフレームに一般情報が表示されます。

3. 「レイアウト」をクリックします。
右側のフレームにレイアウト情報が表示されます。次の情報が含まれます。

- フィールド名: 列の名前。

- フィールドID: >システムによって生成されます。

- 外部名: 外部データ・ソースの外部列名(外部データ・ソースに基づいたデータ・オブジェクトの場合にのみ表示されます)。

- フィールド・タイプ: 列のデータ型。

- 最大長: 列値で許容される最大文字数。

- スケール: 小数点の右側の桁数。

- NULL可能: データ型にNULL値を含めることが可能かどうか。

- パブリック: この設定によって、Oracle BAMアクティブ・スタジオのレポートでこの列を使用できるかどうかが決定されます。このボックスが選択されていない場合、列はOracle BAMアクティブ・スタジオに表示されません。これは、レポートに表示しない計算用の列をデータ・オブジェクトに含める場合に便利です。

- 参照: 参照列の指定内容の表示。

- 計算済: 計算列の式の表示。

- ヒント・テキスト: 列に関する有効な情報。

55.4.3 データ・オブジェクトのコンテンツの表示方法

データ・オブジェクトのコンテンツを表示すると、データ・オブジェクトに格納されている行データを表示できます。また、データ・オブジェクトのコンテンツを編集することもできます。

データ・オブジェクトのコンテンツを表示する手順は、次のとおりです。

1. データ・オブジェクトを選択します。
右側のフレームに一般情報が表示されます。

2. 「コンテンツ」をクリックします。
右側のフレームにデータ・オブジェクトの最初の100行が表示されます。

(このデフォルトを変更するには、Architect_Content_PageSizeプロパティを更新します。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。)

Oracle BAMアーキテクトには、データ・オブジェクトの合計行数と表示可能な行数が表示されます。サーバーのパフォーマンス向上のために、Oracle BAMアーキテクトに表示される行数は構成プロパティによって制限されます。

内部データ・オブジェクトを「行番号を非表示」モード(デフォルト)で表示する場合は、ナビゲーション・ツールを使用して、データ・オブジェクトのすべてのレコードを表示できます。

内部データ・オブジェクトを「行番号を表示」モードで表示する場合は、表示できるレコード数が制限されます。この数はデフォルトで64000で、BAMServerConfig.xmlのADCMaxViewsetRowCountプロパティを変更すると変更できます。

外部データ・オブジェクトは、いずれのモードで表示しても表示できるレコード数が制限されます。この数はデフォルトで64000で、BAMServerConfig.xmlのImport_Maxsizeプロパティを変更すると変更できます。

3. 他の行セットを表示するために移動するには、「次へ」、「前へ」、「最初」および「最後」をクリックします。
行は、「行ID」列とともに表示されます。行IDのみを表示すると、大きいデータ・オブジェクトの場合により高速なページングが可能になります。行IDは、各行に1回割り当てられます。行IDによって、データ・オブジェクトの消去およびリロード時に連続した行数が保持されます。

「行番号を表示」をクリックして、1から始まる現行の行数が含まれている追加列を表示できます。行数列を再度非表示にするには、「行番号を非表示」をクリックします。

4. 「リフレッシュ」をクリックして、使用可能な最新のコンテンツを取得します。

55.5 データ・オブジェクト・フォルダの使用

データ・オブジェクトは、フォルダとそのサブフォルダを作成して分類できます。データ・オブジェクトのフォルダを作成する場合、ユーザーとアクションをそのフォルダに関連付け、権限を割り当てることができます。

55.5.1 フォルダの作成方法

データ・オブジェクトの分類のために新しいフォルダを作成できます。その後で、様々な目的やユーザーに応じて、個別のフォルダにデータ・オブジェクトを移動または作成できます。フォルダを作成した後、フォルダ権限を設定し、そこに含まれているデータ・オブジェクトを表示できるユーザーを制限できます。

新しいフォルダを作成する手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「データ・オブジェクト」を選択します。
現行のデータ・オブジェクト・フォルダが、ツリー階層で表示されます。

2. 「サブフォルダの作成」をクリックします。
新しいフォルダに名前を付けるためのフィールドが表示されます。

3. フォルダの名前を入力し、「フォルダの作成」をクリックします。
「データ・オブジェクト」フォルダの下のサブフォルダとしてフォルダが作成され、新しいフォルダが作成されたことを確認するメッセージが表示されます。

4. 「続行」をクリックしてフォルダを表示します。

55.5.2 フォルダを開く方法

フォルダを開く手順は、次のとおりです。

1. 「データ・オブジェクト」フォルダの横にある+(プラス記号)をクリックして、フォルダのツリーを開きます。
システム・サブフォルダには、Oracle Business Activity Monitoringを実行するためのデータ・オブジェクトが含まれています。これらのデータ・オブジェクトの詳細は、第55.2.6項「システム・データ・オブジェクトに関する注意事項」を参照してください。

2. フォルダの横のリンクをクリックして開きます。
フォルダが開き、フォルダ内のデータ・オブジェクトがフォルダ・ツリーの下のリストに表示されます。フォルダの一般プロパティが右フレームに表示され、次のリンクが現行のフォルダに適用されます。

表示: このフォルダの一般プロパティ(名前、作成日、最終変更日時、最終変更者など)を表示します。「表示」は、初めてフォルダをクリックした際は選択されています。

サブフォルダの作成: 選択したフォルダ内に別のフォルダを作成します。

削除: 選択したフォルダおよびそのフォルダに含まれているすべてのデータ・オブジェクトを削除します。

名前の変更: フォルダ名を変更します。

移動: このフォルダを新しい場所(別のフォルダ内のサブフォルダなど)に移動します。

権限: このフォルダに対して権限を設定します。

データ・オブジェクトの作成: このフォルダにデータ・オブジェクトを作成します。

55.5.3 フォルダ権限の設定方法

フォルダの作成時には、そのフォルダに含まれているデータ・オブジェクトに他のユーザーがアクセスできるように権限を設定できます。

フォルダに対する権限を設定する手順は、次のとおりです。

1. 「データ・オブジェクト」フォルダで、権限を変更するフォルダを選択します。

2. 「権限」をクリックします。

3. 「権限の編集」をクリックします。

4. 「データ・オブジェクトへのアクセスを特定のユーザーまたはグループに制限する」チェック・ボックスを選択します。
ユーザーとグループのリストおよび権限が表示されます。

5. 次のオプションを選択して、表示内容を選択できます。

- すべてのユーザーおよびグループを表示

- 権限のあるユーザーおよびグループのみを表示

- ユーザーのみを表示

- グループのみを表示

6. リストの最上位にある列ヘッダーをクリックすると、リスト全体に権限を設定できます。
設定できる権限は、読取り、更新および削除です。ユーザー名またはグループ名の横にある権限列内のチェック・ボックスを選択すると、リスト内の個々のユーザーまたはグループに権限を設定できます。

注意:

削除権限と更新権限は、ユーザーに読取り権限も付与されていないと有効になりません。

7. 選択したチェック・ボックスで権限を指定した後、「変更の保存」をクリックします。
変更が保存されたことを確認するメッセージが表示されます。

8. データ・オブジェクトに対するアクションを表示するには、「続行」をクリックします。

リストにグループを追加する手順は、次のとおりです。

1. 「グループをリストに追加」リンクをクリックします。

2. 表示されたフィールドにWindowsのグループ名を入力します。このグループは、ドメイン・グループとしてすでに存在している必要があります。

3. 「OK」をクリックします。
リストにグループが追加されます。

55.5.4 フォルダの移動方法

フォルダを移動する手順は、次のとおりです。

1. 移動するフォルダを選択します。

2. 「移動」をクリックします。

3. 「参照」をクリックして、フォルダの新しい場所を選択します。

4. 「OK」をクリックして、ダイアログを閉じます。

5. 「フォルダの移動」をクリックします。
フォルダが移動されます。

6. 「続行」をクリックします。

55.5.5 フォルダの名前の変更方法

フォルダの名前を変更する手順は、次のとおりです。

1. 名前を変更するフォルダを選択します。

2. 「名前の変更」をクリックします。

3. 新しい名前を入力し、「フォルダ名の変更」をクリックします。
フォルダの名前が変更されます。親フォルダ内では、一意のフォルダ名を割り当てる必要があります。

4. 「続行」をクリックします。

55.5.6 フォルダの削除方法

フォルダを削除すると、そのフォルダ内のすべてのデータ・オブジェクトも削除されます。

フォルダを削除する手順は、次のとおりです。

1. 削除するフォルダを選択します。

2. 「削除」をクリックします。
フォルダおよびそのすべてのコンテンツを削除することを確認するメッセージが表示されます。

3. 「OK」をクリックします。
フォルダが削除されます。

4. 「続行」をクリックします。

55.6 セキュリティ・フィルタの作成

特定のユーザーのみがデータ・オブジェクト内の特定の行を表示できるように、データ・オブジェクトにセキュリティ・フィルタを追加できます。これは、すべてのレポート設計者またはレポート表示者を対象とはしていない機密情報が含まれているデータ・オブジェクトに対して作業を行う場合に有効です。

セキュリティ・フィルタでは、ユーザー名またはグループ名が含まれている別のデータ・オブジェクト(セキュリティ・データ・オブジェクトと呼ばれる)を使用して検索が実行されます。セキュリティ・フィルタを追加する前に、ユーザー名またはグループ名、および各ユーザー名または各グループ名に対して使用可能な値が列内に含まれているセキュリティ・データ・オブジェクトを作成する必要があります。セキュリティ・データ・オブジェクトにNULL値は指定できません。

ユーザーがビューをオープンしているときにそのユーザーのセキュリティ・フィルタを変更した場合、現在オープンしているビューへの影響はありません。ユーザーがそのビューを再オープンした場合に、新しいセキュリティ・フィルタ設定が適用されます。セキュリティ・フィルタの設定は、ビューの作成時にバックグラウンドで問合せを作成する際に使用されます。このため、セキュリティ・フィルタの変更は、すでに作成されたビューでは確認できません。

55.6.1 セキュリティ・フィルタの作成方法

データ・オブジェクトにセキュリティ・フィルタを追加する手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「データ・オブジェクト」を選択します。

2. セキュリティ・フィルタを追加するデータ・オブジェクトを選択します。
右側のフレームにデータ・オブジェクトの一般情報が表示されます。

3. 「セキュリティ・フィルタ」を選択します。
データ・オブジェクトにセキュリティ・フィルタが含まれている場合は、フィルタ名が表示され、情報を展開および表示できます。

4. 「フィルタの追加」をクリックします。
セキュリティ・フィルタを定義するためのフィールドが表示されます。

5. 次の情報を入力します。
このセキュリティ・フィルタの名前:このフィルタの名前を入力します。

セキュリティ・データ・オブジェクト:マップされた列が含まれているセキュリティ・データ・オブジェクトの名前を選択します。

IDのタイプ:ドロップダウン・リストから「ユーザー別」または「グループ別」のいずれかを選択します。セキュリティ・データ・オブジェクトには、ID列の値にマップされたドメイン・ユーザー、ドメイン・グループ、ローカル・ユーザー、ローカル・グループのいずれかが含まれている必要があります。

セキュリティ・データ・オブジェクトのID列:ユーザー名またはグループ名を含めるための列の名前を選択します。

セキュリティ・データ・オブジェクトの一致列:セキュリティ・データ・オブジェクトで照合する列を選択します。

このデータ・オブジェクトの一致列:このデータ・オブジェクトで照合する列の名前を選択します。

6. 「追加」をクリックします。

7. 複数のセキュリティ・フィルタがデータ・オブジェクトで作成される場合は、「OR」または「AND」条件を選択します。
図bam_sec_filter.gifの説明

デフォルトでは、セキュリティ・フィルタはOR条件とともに適用されます。つまり、いずれかのセキュリティ・データ・オブジェクトで一致があれば、指定されたユーザーまたはグループはデータ・オブジェクトにアクセスできます。AND条件の場合、フィルタで保護されるデータ・オブジェクトにアクセスするには、すべてのセキュリティ・データ・オブジェクトでユーザーまたはグループを指定する必要があります。

注意:

3つ以上のセキュリティ・フィルタがある場合、ANDとORの両方を使用することはできません。すべてのフィルタにANDまたはORを使用する必要があります。

セキュリティ・フィルタ: 例

たとえば、次のデータ・オブジェクトにセキュリティ・フィルタを追加するには、セキュリティ検索を実行するためのリージョン情報が含まれているセキュリティ・データ・オブジェクトが必要です。

サンプル・データ・オブジェクト:

ユーザー

リージョン

販売

John Smith

1

$55,000

Bob Wright

1

$43,000

Betty Reid

2

$38,000

セキュリティ・データ・オブジェクト:

ログイン

リージョンID

DomainName\jsmith

1

DomainName\jsmith

2

DomainName\bwright

1

DomainName\breid

2

bwrightアカウントで、リージョンIDおよびリージョンに基づいてセキュリティ・フィルタが適用されているデータ・オブジェクトにアクセスするレポートを表示する場合は、jsmithおよびbwrightに関する情報にのみアクセス可能です。breidに関する情報は、その同じリージョンに対するデータを表示できないため表示できません。一方、jsmithアカウントは、1および2の両方のリージョンのデータが表示されるように設定されています。

55.6.2 他のデータ・オブジェクトからのセキュリティ・フィルタのコピー方法

別のデータ・オブジェクトからセキュリティ・フィルタをコピーして、編集するデータ・オブジェクトに適用します。

別のデータ・オブジェクトからセキュリティ・フィルタをコピーする手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「データ・オブジェクト」を選択します。

2. セキュリティ・フィルタを追加するデータ・オブジェクトを選択します。
右側のフレームにデータ・オブジェクトの一般情報が表示されます。

3. 「セキュリティ・フィルタ」を選択します。
データ・オブジェクトにセキュリティ・フィルタが含まれている場合は、フィルタ名が表示され、情報を展開および表示できます。

4. 「コピー元」をクリックします。
「データ・オブジェクトの選択」ダイアログが表示されます。

5. コピーするセキュリティ・フィルタが含まれているデータ・オブジェクトを選択し、「OK」をクリックします。

6. セキュリティ・フィルタに変更を加えるには、フィルタの詳細を表示して「編集」をクリックします。

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

55.7 ディメンションの作成

Oracle BAMアーキテクトでは、データ・オブジェクトにディメンションを追加して、Oracle BAMアクティブ・スタジオのグラフに対してドリル・パスを定義できます。ディメンションには、列が階層で含まれています。エンド・ユーザーは、グラフで階層を選択すると、情報の階層をドリルアップおよびドリルダウンできます。また、グラフ内でドリルダウンすると、より詳細なレベルのデータを表示できます。

階層は、データ・オブジェクト内のディメンションの属性です。各データ・オブジェクトに、複数のディメンションを作成できます。データ・オブジェクト内の各列は、1つのディメンションにのみ属すことができます。複数の独立した階層を作成および編集できます。

グラフ内で階層をドリル・パスとして使用する場合は、レポート設計者が、ドリル・パスとして使用する階層を選択する必要があります。ディメンションを作成するには、ディメンションとして保存する複数の列を選択する必要があります。その後、それらの列を階層に編成します。

次に、ディメンションおよび階層の例を示します。

ディメンション

階層

Sales

Category

Brand

Description

55.7.1 ディメンションの作成方法

ディメンションおよび階層を追加する手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「データ・オブジェクト」を選択します。

2. ディメンションを追加するデータ・オブジェクトを選択します。
右側のフレームにデータ・オブジェクトの一般情報が表示されます。

3. 「ディメンション」を選択します。

4. 「新規ディメンションの追加」をクリックします。

5. ディメンション名を入力します。

6. ディメンションの説明を入力します。説明は構成をドリルするために必要です。

7. ディメンションに含める列名を選択します。たとえば、「Sales」、「Category」、「Brand」、「Description」などです。
これらの列名は、「データ・オブジェクト・フィールド」リストから「ディメンション・フィールド」リストに移動し、選択されていることが示されます。

8. 「保存」をクリックします。

9. 「続行」をクリックします。
新しいディメンションが表示されます。さらに列の階層を定義する必要があります。

10. 「新規階層の追加」をクリックします。

11. 階層名を入力します。

12. 階層の説明を入力します。

13. ディメンションの属性として定義する列名を選択します。たとえば、「Sales」は「ディメンション・フィールド」リストに残ります。「Category」、「Brand」および「Description」をクリックして、これらのフィールドを一般的な順序から特定の順序に並び替えます。列は、クリックした順に「階層フィールド」リストに表示されます「階層フィールド」リストの最上位には一般的なグループ化フィールドを、「階層フィールド」の最下位には詳細なフィールドを配置します。

14. 「保存」をクリックします。

15. 「続行」をクリックします。
新しい階層が表示されます。階層およびディメンションは、リンクをクリックして編集または削除できます。また、ディメンションに対する複数の階層の定義を継続したり、データ・オブジェクトへの新しいディメンションの追加を行うことができます。

55.7.2 時間ディメンションの作成方法

ディメンションに日時データ型列が含まれている場合は、階層に含める時間レベルを選択できます。

時間レベルを選択する手順は、次のとおりです。

1. 日時データ型列が含まれているディメンションで、階層を追加します。

2. 日時データ型列を選択します。既存の時間レベルを編集する場合は、「時間レベルの編集」をクリックします。
「時間レベル定義」ダイアログが表示されます。

3. 階層に含めるレベルをクリックします。レベルには、次のものがあります。

- 年:年を表す4桁の数値。

- 四半期:1月、2月、3月を示す第1四半期から始まる4つの四半期を表す1から4の数値。

- 月:1月から始まる月を表す1から12の数値。

- 該当年の週: 1月1日から該当週までを表す数値。

- 該当年の日: 1月1日から該当日までを表す数値。

- 該当月の日:該当日の日付を表す数値。

- 曜日:日曜日から土曜日までの曜日を表す数値。

- 時間:1から24の数値。

- 分:1から60の数値。

- 秒:1から60の数値。

4. 「OK」をクリックして、ダイアログを閉じます。

55.8 データ・オブジェクトの名前の変更および移動

データ・オブジェクトは、編集または消去せずに名前の変更および移動を行うことができます。データ・オブジェクトの名前または説明のみを変更する場合は、「名前の変更」オプションを使用します。

55.8.1 データ・オブジェクトの名前の変更方法

データ・オブジェクトの名前を変更する手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「データ・オブジェクト」を選択します。

2. 名前を変更するデータ・オブジェクトを選択します。
右側のフレームにデータ・オブジェクトの一般情報が表示されます。

3. 「名前の変更/移動」を選択します。

4. データ・オブジェクトの新しい名前、ヒント・テキストおよび説明を入力します。

5. 「変更の保存」をクリックします。

55.8.2 データ・オブジェクトの移動方法

データ・オブジェクトを移動する手順は、次のとおりです。

1. リストから「データ・オブジェクト」を選択します。

2. 名前を変更するデータ・オブジェクトを選択します。
右側のフレームにデータ・オブジェクトの一般情報が表示されます。

3. 「名前の変更/移動」を選択します。

4. 「参照」をクリックして、データ・オブジェクトの新しい場所を入力します。

5. 「変更の保存」をクリックします。

55.9 索引の作成

索引を使用すると、多数の行が含まれている大きなデータ・オブジェクトのパフォーマンスが向上します。索引を使用しないでデータにアクセスする場合は、データ・オブジェクト内のすべての行をスキャンする必要があります。スキャンは、非常に大きなデータ・オブジェクトに対しては非効率的です。索引は、指定した値で列内の行を検索する場合に役立ちます。

リクエストした列の索引がデータ・オブジェクトに存在する場合は、すべてのデータを検索せずに情報が検出されます。索引は、列内の値ごとの行の検索、データの集計およびデータのソートを行う場合に最も有効です。

55.9.1 索引の作成方法

索引は、データ・オブジェクトの作成時に索引付けする列を選択して、データ・オブジェクトに追加できます。

索引を追加する手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「データ・オブジェクト」を選択します。

2. 索引を追加するデータ・オブジェクトを選択します。

3. 「索引」を選択します。

4. 「索引の追加」をクリックします。
「索引の追加」ダイアログが表示されます。

5. 索引の「名前」および「説明」を入力します。

6. 必要な数の列を追加して表の索引を作成します。
索引から列を削除するには、右側のリスト内の列をクリックします。

7. 「OK」をクリックします。
索引が追加され、その索引に含まれている列に基づいて名前が付けられます。複数の索引を作成できます。作成した索引を削除するには、索引名の横にある索引の削除をクリックします。

55.10 データ・オブジェクトの消去

データ・オブジェクトを消去すると、Oracle BAM ADCからデータ・オブジェクトを削除することなく、現行のコンテンツが削除されます。

55.10.1 データ・オブジェクトの消去方法

データ・オブジェクトを消去する手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「データ・オブジェクト」を選択します。

2. 消去するデータ・オブジェクトを選択します。
右側のフレームにデータ・オブジェクトの一般情報が表示されます。

3. 「クリア」をクリックします。

55.11 データ・オブジェクトの削除

データ・オブジェクトを削除する場合は、そのデータ・オブジェクトを使用しているレポートとアラートから参照を削除する必要があります。アクティブなアラートまたはレポートで使用中のデータ・オブジェクトは、Oracle BAMアーキテクトで削除できません。

55.11.1 データ・オブジェクトの削除方法

データ・オブジェクトを削除する手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「データ・オブジェクト」を選択します。

2. 削除するデータ・オブジェクトをクリックします。
右側のフレームにデータ・オブジェクトの一般情報が表示されます。

3. 「削除」をクリックします。

56 Oracle BAMエンタープライズ・メッセージ・ソースの作成

この章では、Oracle Business Activity Monitoring(Oracle BAM)アーキテクトのアプリケーションでエンタープライズ・メッセージ・ソース(EMS)を作成して使用する方法について説明します。ここでは、EMS XMLフォーマット構成パラメータの使用方法、日時パターンやロケール情報の指定方法、EMSペイロードのエラー処理方法、リモート・プロバイダでホストされているJava Message Service(JMS)リソースの使用方法について説明します。

この章には次の項が含まれます:

- 第56.1項「エンタープライズ・メッセージ・ソースの概要」

- 第56.2項「エンタープライズ・メッセージ・ソースの作成」

- 第56.3項「エンタープライズ・メッセージ・ソースの使用」

- 第56.4項「外部JMSプロバイダの使用」

- 第56.5項「ユースケース: Oracle Streams AQ JMSプロバイダに対するEMSの作成」

56.1 エンタープライズ・メッセージ・ソースの概要

エンタープライズ・メッセージ・ソース(EMS)は、Java Message Service(JMS)をOracle BAMサーバーに直接接続するアプリケーションで使用されます。JMSは、アプリケーション・コンポーネント間でデータを受け渡し、異種およびレガシー環境間でのビジネス統合を可能にするための標準メッセージングAPIです。

EMSは、抽出、変換およびロード(ETL)シナリオを構成せず、かわりにメッセージからOracle BAMサーバー上のデータ・オブジェクトに直接マップされます。ただし、XMLスタイルシート言語(XSL)はこれらの間でトランスフォーメーションを実行するために継続して使用できます。各EMSは特定のJMSトピックまたはキューに接続され、その情報はOracle BAMアクティブ・データ・キャッシュのデータ・オブジェクトに配信されます。Oracle BAMアーキテクトWebアプリケーションを使用して、EMS定義を構成します。

次のJMSプロバイダがサポートされています。

- Oracle WebLogic Serverのメッセージング

- Oracle以外の動作確認済JMSプロバイダ

- IBM WebSphere MQ 6.0

- Tibco JMS

- Apache ActiveMQ

詳細は、第56.4項「外部JMSプロバイダの使用」を参照してください。

次のメッセージ・タイプがサポートされています。

- マップ・メッセージ

- XMLペイロードを使用したテキスト・メッセージ

次のXMLフォーマット・オプションがテキスト・メッセージ・トランスフォーメーションでサポートされています。

- 事前処理

- メッセージ仕様

- 列値(列値はXMLペイロードの要素または属性として提供できます)。

既存のEMS定義を表示するには、Oracle BAMアーキテクトの機能リストから「エンタープライズ・メッセージ・ソース」を選択します。

図56-1 Oracle BAMアーキテクトの機能リスト

「図56-1 Oracle BAMアーキテクトの機能リスト」の説明

56.2 エンタープライズ・メッセージ・ソースの作成

EMSを定義する場合は、受信するメッセージ内のすべてのフィールドを指定します。可変数のユーザー定義フィールドを持つメッセージ・システムもあれば、固定数のフィールドを持つシステムもあります。

任意の文字列タイプ・フィールドに対して、そのフィールドにフォーマットを適用し、フィールドの内容を分離された個別のフィールドに分けることができます。これは、ユーザー定義のフィールドを作成できないため、メッセージ本文全体が1つの大きなフィールドとして受信されるメッセージ・システムで役立ちます。フォーマット仕様を使用すると、XMLツリー内の場所のパスを指定した後、属性またはタグをフィールドとして抽出できます。

56.2.1 エンタープライズ・メッセージ・ソースの作成方法

EMSを定義する前に、Oracle BAMアーキテクトでメッセージ・ソース接続の詳細を指定できるように、メッセージを提供するサード・パーティ・アプリケーションについて理解しておく必要があります。さらに、(キュー/トピックをホストしている)JMSサーバーは、Oracle BAMサーバーをホストしているシステムとは別のシステムで構成可能です。(Oracle Advanced Queuing (AQ)の場合は、データベースでJMSサーバーをホストするためOracle BAMと同じサーバーでホストできますが、他の場合は別のシステムでJMSサーバーをホストすることをお薦めします。)

EMSを定義する手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「エンタープライズ・メッセージ・ソース」を選択します(図56-1を参照)。

2. 「作成」をクリックします。
図bam_ar_ems_create.gifの説明

3. 表56-1を参考にして、各フィールドに適切な値を入力します。示されている例は、Messaging for Oracle WebLogic Serverに接続する場合の例です。

注意:

Oracle BAMオブジェクト名(データ・オブジェクト名、レポート名、EMS名など)に一重引用符または二重引用符が含まれていると、実行時エラーが発生します。Oracle BAMオブジェクト名には、一重引用符または二重引用符を含めないでください。

同じトピックまたはキューに2つのエンタープライズ・メッセージ・ソースを構成しないでください。同じキューで2つのエンタープライズ・メッセージ・ソースを要求した場合には、各EMSに別々の「メッセージ・セレクタ」値を指定する必要があります。そうしないと、両方のエンタープライズ・メッセージ・ソースでメッセージが重複するためです。

Oracle WebLogic Server以外のJMSサーバー(Tibcoなど)を使用する場合は、作成するどのエンタープライズ・メッセージ・ソースでも永続サブスクリプション名を繰り返さないでください。一部のJMSサーバーでは、クライアントが1つのトピック宛先に複数のConnectionFactoryを持つことはできないため、Oracle BAMが同じトピックに対して同じConnectionFactoryを再利用することはサポートされていません。

図bam_ar_ems_form.gifの説明

4. 「TextMessage」タイプを使用している場合は、表56-2を参考にして、「XMLフォーマット」セクションに適切なパラメータを構成します。
図bam_ar_ems_xmlform.gifの説明

5. 「ソース値フォーマット」セクションの「日時仕様」の構成方法は、第56.2.2項「日時仕様の構成方法」を参照してください。
「日時仕様」が無効な(選択されていない)場合、入力値の書式はxsd:dateFormatである必要があります。つまり、「日時仕様」が構成されていない場合は、xsd:dateFormat([-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm])がデフォルト書式です。

次に、xsd:dateTimeの有効な値パターンの例を示します。

- 2001-10-26T21:32:52

- 2001-10-26T21:32:52+02:00

- 2001-10-26T19:32:52Z

- 2001-10-26T19:32:52+00:00

- -2001-10-26T21:32:52

- 2001-10-26T21:32:52.12679

6. ソースからデータ・オブジェクトへのフィールド・マッピングのセクションで、ソース・メッセージのフィールドを、選択したデータ・オブジェクトにマップします。
図bam_ar_ems_map.gifの説明

1. 「追加」をクリックし、マップしたフィールドを追加します。

2. フィールドがキーの場合は、「キー」チェック・ボックスを選択します。

3. 「タグ/属性名」フィールドに、ソース・タグまたは属性名を入力します。

4. 「データ・オブジェクト・フィールド」リストからターゲットのデータ・オブジェクト・フィールドを選択します。

注意:

EMSペイロードにタイムスタンプ・フィールドが含まれる場合、次の点を考慮する必要があります。

タイムスタンプ・フィールドにnullを挿入すると、EMSのようなクライアントの管理下ではなくなる可能性があります。

(Oracle BAMアーキテクトのように)タイムスタンプ・フィールドに値を指定しない場合、EMSは現在の日時を割り当てます。

受信タイムスタンプ値がxsd:dateTimeまたはEMSで指定された日時書式に従っていない場合は、現在の日時が挿入されます。

いつでも、1つのEMSで複数のデータ・オブジェクトを更新しないようにすることをお薦めします。それにより、同じDataObjectに複数の手段で書き込んだ結果として発生する不一致を回避するとともに、イベントの順序を保持できます。

ソース・イベントが複数のソースから公開されている場合であっても、それらはすべて、そのDataObject用の同じメッセージ・セレクタ(必要な場合)で同じJMSトピック/キューに書き込むことができます。

7. EMSペイロードにおけるエラーの処理方法を「フォルト」セクションで構成します。オプションの詳細は、第56.2.4項「EMSエラー処理の構成方法」を参照してください。
図bam_fault_basic.gifの説明

8. 「保存」をクリックして、EMSを保存します。

表56-1 EMS構成パラメータ

パラメータ

説明

名前

Oracle BAMアーキテクトのEMSリストに表示される、一意の表示名。

初期コンテキスト・ファクトリ

特定のJMSコネクション・ファクトリまたは宛先の検索に使用される、初期コンテキスト・ファクトリ。例:

weblogic.jndi.WLInitialContextFactory

JNDIサービス・プロバイダURL

使用するサービス・プロバイダの構成情報。javax.naming.Context.PROVIDER_URLプロパティを設定するために使用され、initialContext()に対する引数として渡されます。不適切なプロバイダのURLが最も一般的なエラーの原因です。例:

t3://localhost:7001

トピック/キューConnectionFactory名

以前に作成されたJMSコネクション・ファクトリのJNDIルックアップで使用される名前。例:

jms/QueueConnectionFactory

トピック/キュー名

以前に作成されたJMSトピックまたはキューのJNDIルックアップで使用される名前。例:

jms/demoQueue

jms/demoTopic

JNDIユーザー名

JNDIサービス呼出し元を認証する本人の本人証明。このユーザーにはRMIログイン許可が必要です。

javax.naming.Context.SECURITY_PRINCIPALを設定するために使用され、initialContext()に渡されます。

JNDIパスワード

JNDIサービス呼出し元を認証する本人の本人証明。

javax.naming.Context.SECURITY_CREDENTIALSを設定するために使用され、initialContext()に渡されます。

JMSメッセージ・タイプ

TextMessageまたはMapMessage。

TextMessageを選択した場合は、XMLを使用してペイロードの内容を指定し、XMLフォーマット構成パラメータの追加セットを完成する必要があります。詳細は、表56-2を参照してください。

永続サブスクライバ名

サブスクライバの名前を入力します。例: BAMFilteredSubscription。永続サブスクライバ名は、イベント・パブリッシャのサブスクライバ名プロパティ(指定されている場合)と一致する必要があります。

永続サブスクリプションを使用すると、サブスクライバがアクティブでない間にトピックについてパブリッシュされたメッセージを保持できます。これによって、Oracle BAMをJMSプロバイダから一定期間切断した状態にし、後でそのプロバイダに再接続して、切断していた期間中にパブリッシュされたメッセージを処理できます。

EMSの開始後にEMSを永続サブスクリプションからサブスクライブ解除する方法の詳細は、第56.3.3項「エンタープライズ・メッセージ・ソースをサブスクライブおよびサブスクライブ解除する方法」を参照してください。

メッセージ・セレクタ(オプション)

アプリケーション固有の基準を使用するかわりに、JMSプロバイダによるメッセージの選択またはフィルタリングを可能にする、単一の名前と値のペア(現在は、名前と値の1つのペアのみサポート)。このパラメータを設定すると、アプリケーションが定義したメッセージ・プロパティ値は、メッセージ受信用に指定された基準に一致する必要があります。メッセージ・プロパティ値を設定するには、メッセージ・インタフェースのstringProperty()を使用します。

名前と値のペアの書式は、name=valueである必要があります。例: message=mymessage。等価符号(=)は、名前/値ペアのセパレータです。

データ・オブジェクト名

メッセージ・データを格納しておくOracle BAMのデータ・オブジェクト。EMSごとに1つのデータ・オブジェクトのみ操作可能です。データ・オブジェクトに「参照」列を含めることができます。

「参照」をクリックして、データ・オブジェクトを選択します。

操作

リストから次の操作を選択します。

挿入: すべての新しいデータを新しい行として挿入

アップサート: データを既存の行にマージ

更新: 既存の行を更新

削除: データ・オブジェクトから行を削除

バッチング

EMSが、バッチ処理対応のOracle BAMアクティブ・データ・キャッシュAPIと通信するかどうかを指定します。バッチ処理を使用すると、複数のメッセージを単一のテキスト・メッセージで挿入できます。バッチ処理が無効(デフォルトの状態)な場合、JMSから読み取られた各行は、行バッチの一部ではなく、個別の単位としてアクティブ・データ・キャッシュに送信されます。

バッチ処理プロパティは構成ファイルに格納されます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

トランザクション

トランザクションを有効にすると、バッチ処理が有効な場合に、操作がアトミックになります(バッチ処理を使用すると、複数のメッセージを単一のテキスト・メッセージで挿入できます)。

トランザクション自体はアクティブ・データ・キャッシュのバッチ処理に影響を与えませんが、「トランザクション」をtrueに設定することで、メッセージ・バッチング(多数のメッセージを単一のバッチで処理する場合)のすべてのメッセージがアトミック操作の一部になります。表56-2の「メッセージ・バッチング」を参照してください。

BAMサーバーの起動時に起動

EMSが、Oracle BAMサーバーの起動(または再起動)後すぐにメッセージを読み取り、アクティブ・データ・キャッシュに送信するかどうかを指定します。

JMSユーザー名(オプション)

JMSパスワード(オプション)

コネクション・ファクトリで新しいJMSコネクションが作成されたときに、この情報をオプションとして提供できます。アプリケーション管理またはコンテナ管理された認証用JMSプロバイダへの接続を認証するために使用します。

表56-2 EMS XMLフォーマット構成パラメータ

パラメータ

説明

事前処理

XSLトランスフォーメーションは、メッセージ取得および列のマッピングが行われる前に、受信テキスト・メッセージに適用できます。詳細は、第56.2.3項「拡張XMLフォーマットの使用方法」を参照してください。

XML名は修飾できます。修飾されている場合は、「修飾されたネームスペース」ボックスを選択し、フィールドにネームスペースURIを入力します。

メッセージ要素名

サブ要素または属性に列の値を含む親要素です。

XML名は修飾できます。修飾されている場合は、「修飾されたネームスペース」ボックスを選択し、フィールドにネームスペースURIを入力します。

メッセージ・バッチング

複数のメッセージを1つのJMSメッセージにまとめることができます。この場合は、ラッパー要素を「バッチ要素名」にコンテナ要素として指定する必要があります。

修飾されている場合は、「修飾されたネームスペース」ボックスを選択し、フィールドにネームスペースURIを入力します。

列値

列値はXMLペイロードの要素または属性を使用して提供できます。ペイロードにどの列値タイプが提供されるか指定します。

56.2.2 日時仕様の構成方法

日時パターンを入力して、ロケール情報を指定できます。

日時仕様を構成する手順は、次のとおりです。

1. 図56-2に示すように、「日時仕様」チェック・ボックスを選択します。

2. 「パターン」フィールドに、日時パターンを入力します。
ドロップダウン・リストに表示される、サポートされている推奨パターンの1つを選択するか、またはテキスト・ボックスに手動で入力できます。

Java SimpleDateFormatに準拠した有効な日時パターンを入力する必要があります。表56-3でSimpleDateFormatの構文要素を示し、表56-4でいくつか例を示します。

注意:

Oracle AQ JMSを通じて日時/タイムスタンプ・データをOracle BAM EMSに送信する場合は、日時仕様を構成するときに次の点を考慮する必要があります。

Oracleデータベース内のデフォルトの日時書式は、NLSセッション・パラメータNLS_DATE_FORMAT、NLS_TIMESTAMP_FORMATおよびNLS_TIMESTAMP_TZ_FORMATを使用して明示的に、またはNLSセッション・パラメータNLS_TERRITORYを使用して暗黙的に指定されます。

トリガー処理コード(PL/SQL)が明示的な書式で日付書式をオーバーライドしない場合、日付はデータベース・セッションのNLSパラメータで指定された書式に従って書式設定され、それに応じてEMSに送信されます。つまり、受信データを解析および解釈するために、EMS日時仕様はNLSパラメータに相当する書式を必要とします。

ただし、データベース管理者がNLSパラメータを変更した場合、EMS側で問題が発生します。デフォルトのNLSパラメータで指定された書式に依存するのではなく、to_char()関数を使用して明示的な書式設定を使用するのが常に安全な方法です。

トリガー処理コードの次の例のような行を

'<HIREDATE>' || :new.HIREDATE || '</HIREDATE>' ||

次のように変更する必要があります。

'<HIREDATE>' || to_char(:new.HIREDATE, 'MM/dd/yy HH24:MI:SS') || '</HIREDATE>' ||

「EMS日時仕様」ドロップダウンから選択された、対応する書式はMM/dd/yy H:mm:ssです。

同様に、タイムスタンプ・データの場合、to_char()関数を使用してデータベース側で選択された書式はMM/dd/yy HH24:MI:SS.FFです。対応するEMS日時仕様の書式はMM/dd/yy H:mm:ss:SSSです。

注意:

HH:mm:ss日時書式を明示的に選択した場合、日付にはデフォルト値1/1/1970が挿入されます。この日付の値はEMSでは無視されます。

日時書式として日付のみを明示的に選択した(時、分および秒を選択しない)場合、日付は、時、分および秒が12:00:00 AMに設定されて挿入されます。この時間の値はEMSでは無視されます。

3. オプションで、「言語」、「国」および「変数」の各フィールドにロケール情報を入力できます。

図56-2 EMS構成の「ソース値フォーマット」セクション

「図56-2 EMS構成の「ソース値フォーマット」セクション」の説明

表56-3 SimpleDateFormatの構文要素

記号

意味

表示

例

G

時代

テキスト

AD

y

年

数値

2003

M

月

テキストまたは数値

July、Jul、07

w

年内の週数(1から53)

数値

27

W

月内の週数(1から5)

数値

2

D

年内の日数(1から365または1から364)

数値

189

d

月内の日数

数値

10

F

月内の週数(1から5)

数値

2

E

週内の曜日

テキスト

Tuesday、Tue

a

午前/午後マーカー

テキスト

AM

H

時間(0から23)

数値

0

k

時間(1から24)

数値

24

K

時間(0から11 AM/PM)

数値

0

h

時間(1から12 AM/PM)

数値

12

m

時間内の分数

数値

30

s

分内の秒数

数値

55

S

ミリ秒(0から999)

数値

978

z

タイムゾーン

一般的なタイムゾーン

太平洋標準時、PST、GMT-08:00

Z

タイムゾーン

RFC 822タイムゾーン

-0800

'

テキスト用のエスケープ

デリミタ

MMM ''01→Jul '01

表56-4の例は、日時パターンが米国のロケールでどのように解釈されるかを示しています。すべての例で使用されている日時は、アメリカ太平洋標準時タイムゾーンの2001-07-04 12:08:56ローカル時間です。

表56-4 日時パターンの例

日時パターン

結果

"yyyy.MM.dd G 'at' HH:mm:ss z"

2001.07.04 AD at 12:08:56 PDT

"EEE, MMM d, '' yy"

Wed, Jul 4, '01

"h:mm a"

12:08 PM

"hh 'o''clock' a, zzzz"

12 o'clock PM, 太平洋夏時間

"K:mm a, z"

0:08 PM, PDT

"yyyyy.MMMMM.dd GGG hh:mm aaa"

02001.July.04 AD 12:08 PM

"EEE, d MMM yyyy HH:mm:ss Z"

Wed, 4 Jul 2001 12:08:56 -0700

"yyMMddHHmmssZ"

010704120856-0700

"yyyy-MM-dd'T'HH:mm:ss.SSSZ"

2001-07-04T12:08:56.235-0700

56.2.3 拡張XMLフォーマットの使用方法

拡張フォーマット・オプションを使用すると、EMSでは、メッセージ内のフォーマットされた各フィールドにユーザーが指定したXSLトランスフォーメーション(XSLT)を含めることができます。

XSLTは、次の目的で使用されます。

- 階層データの処理。データ・フローでは、階層データは処理されません。XSLTでは、受信したXMLを、繰返しフィールドが含まれた単一のレコードにフラット化できます。

- 単一のキュー内に複数のタイプのメッセージが含まれているメッセージ・キューの処理。データ・フローでは、Message Receiverからのすべてのレコードは同じスキーマのものである必要があります。EMS出力は、受信するメッセージ・スキーマの結合スーパーセットとして定義できます。また、XSLトランスフォーメーションによって、各メッセージ・タイプを識別して、必要に応じてこのスーパーセット・スキーマにマップできます。

- データは階層では表されていないが、必要なデータが複数のレベルで含まれているXMLの処理。EMSフォーマットでは、XMLの1つのレベルのみから読取りを行うことができます。XSLトランスフォーメーションによって、入力XML内の様々なレベルで必要なデータを識別し、すべてのデータが1つのレベルで結合される新しいXMLにすべてを出力できます。

XSLトランスフォーメーションを指定する手順は、次のとおりです。

1. 定義中または編集中のEMSで、「XMLフォーマット」セクションの「事前処理」を選択します。
図bam_ar_ems_advanced.gifの説明

2. 「拡張フォーマット・オプション」をクリックします。
「拡張フォーマット」ダイアログが表示されます。

3. このフィールドにXML変換用のXSLマークアップを入力するか、または貼り付けます。別の編集ツールでXSLマークアップを記述した後で、このダイアログにそのコードをコピーして貼り付けることができます。

4. 「変換するサンプルXML」フィールドに、変換をテストするためのサンプルXMLを入力します。サンプルXMLは、このダイアログには保存されません。このダイアログを閉じて開くと、サンプルXMLは表示されなくなります。

5. 「変換構文の確認」をクリックしてXSL構文を確認します。

6. 「サンプルXMLのテスト変換」をクリックして変換をテストします。
結果は、リンクの下のフィールドに表示されます。XSL構文内、サンプルXML構文内または変換時にエラーが検出された場合は、このフィールドにエラー・テキストが表示されます。

56.2.4 EMSエラー処理の構成方法

「フォルト」セクションで、EMSペイロード・エラーの処理方法を構成します。EMSペイロードにおけるエラーの処理方法は、ログ・ファイルにエラー・メッセージを書き込むか、エラー・メッセージをデータ・オブジェクトに挿入するか、またはJMSトピックやJMSキューにエラー・メッセージをパブリッシュするという方法で構成できます。

フォルト処理を構成する手順は、次のとおりです。

1. 定義または編集中のEMSで、「フォルト・メッセージをログ」を選択してエラー・メッセージをログに送信するか、または「フォルト・メッセージを書込み」を選択してエラー・メッセージをOracle BAMデータ・オブジェクトまたはJMSトピックに書き込みます。
フォルト・メッセージのログと書込みのオプションを両方選択できます。

2. 「フォルト・メッセージをログ」を選択した場合、ログのエラー・メッセージにペイロードを含めるには、「ペイロードを含める」を選択します。
図bam_fault_log.gifの説明

3. 「フォルト・メッセージを書込み」を選択した場合、メッセージをデータ・オブジェクトに挿入するには「データ・オブジェクトへ」を選択し、メッセージをJMSに書き込むには「JMSキュー/トピックへ」を選択します。その後、表56-5を使用して、選択したオプションに対して追加情報を指定します。
図bam_fault_write_do.gifの説明

図bam_fault_write_jms.gifの説明

表56-5 「フォルト・メッセージを書込み」オプションのパラメータ

オプション

パラメータ

説明

データ・オブジェクトへ

エラー・データ・オブジェクト名

エラー・メッセージを書き込むデータ・オブジェクト名。

エラー・データ・オブジェクト・フィールド

エラー・メッセージを書き込むデータ・オブジェクト内のフィールド。最長のエラー・ペイロードに対応できる十分な長さの文字列フィールドを選択してください。

JMSキュー/トピックへ

初期コンテキスト・ファクトリ

特定のJMSコネクション・ファクトリまたは宛先の検索に使用される、初期コンテキスト・ファクトリ。例:

weblogic.jndi.WLInitialContextFactory

JNDIサービス・プロバイダURL

使用するサービス・プロバイダの構成情報。javax.naming.Context.PROVIDER_URLプロパティを設定するために使用され、initialContext()に対する引数として渡されます。不適切なプロバイダのURLが最も一般的なエラーの原因です。例:

t3://localhost:7001

トピック/キュー接続ファクトリ名

以前に作成されたJMSコネクション・ファクトリのJNDIルックアップで使用される名前。例:

jms/QueueConnectionFactory

トピック/キュー名

エラー・メッセージをポストする場合に使用するトピック/キュー。例:

jms/demoQueue

jms/demoTopic

JNDIユーザー名

JNDIサービス呼出し元を認証する本人の本人証明。このユーザーにはRMIログイン許可が必要です。

JNDIパスワード

JNDIサービス呼出し元を認証する本人の本人証明。

JMSユーザー名(オプション)

JMSパスワード(オプション)

コネクション・ファクトリで新しいJMSコネクションが作成されたときに、この情報をオプションとして提供できます。アプリケーション管理またはコンテナ管理された認証用JMSプロバイダへの接続を認証するために使用します。

次の例は、パブリッシュされたメッセージのフォーマットを示しています。

EMS <<EMS Name>> failed to process the payload: <<payload>> with the following exception:<<Exception details>>.

例:

EMS MyInsertEMS, failed to process the payload: <testems><test>abcd</test1> with the following exception:

The end-tag for element type "test" must end with a '>' delimiter.

JMSトピックまたはJMSキューにエラー・メッセージをパブリッシュする場合のフォルト処理を設計するときは、注意してください。次に、このトピックまたはキューが別の(または同じ)EMSに対して構成される場合、このEMSに同じメッセージが再度使用され、これにより、再帰的な失敗が発生します。Oracle BAMでは、CDATAを使用してメッセージをエンコードすることによってメッセージを処理しますが、再帰的な失敗が発生する可能性のあるSQL例外などの、他の問題が発生する場合があります。

56.3 エンタープライズ・メッセージ・ソースの使用

Oracle BAMアーキテクトの「エンタープライズ・メッセージ・ソース」ページを使用して、EMS定義を表示し、EMS定義に対する操作を実行します。「エンタープライズ・メッセージ・ソース」リストでEMSを選択し、そのEMSの情報を表示して操作します。

図bam_ar_ems_links.gifの説明

EMS定義ページ(ブラウザ・ウィンドウの右側のペイン)上部に表示されるリンクを使用して、EMSに対する操作を実行します。

56.3.1 エンタープライズ・メッセージ・ソースの編集、コピーおよび削除方法

個々のEMS定義ページにある「編集」、「コピー」および「削除」の各リンクを使用して、現在のEMS定義を編集、コピーまたは削除します。

56.3.2 エンタープライズ・メッセージ・ソースの開始および停止方法

個々のEMS定義ページにある「開始」および「停止」の各リンクを使用して、EMSを開始および停止します。EMSを停止すると、コンシューマが「停止済」ステータスで非アクティブになります。

サブスクライブ済の永続EMSの場合は、「停止」をクリックしても、コンシューマが非アクティブになるのみです。EMSは永続サブスクリプションからサブスクライブ解除されません。詳細は、第56.3.3項「エンタープライズ・メッセージ・ソースをサブスクライブおよびサブスクライブ解除する方法」を参照してください。

デフォルトで、EMSはOracle BAMサーバーの起動時に開始されます。

「編集」をクリックすると、「BAMサーバーの起動時に起動」プロパティを変更できます。

図bam_ar_ems_start.gifの説明

56.3.3 エンタープライズ・メッセージ・ソースをサブスクライブおよびサブスクライブ解除する方法

個々のEMS定義ページにある「サブスクライブ解除」リンクを使用して、サブスクライブ済の永続EMSをサブスクライブ解除します。

サブスクライブ済の永続EMSの場合は、「停止」をクリックしても、コンシューマが「停止済」ステータスで非アクティブになるのみです。

「サブスクライブ解除」をクリックするとサブスクライブ解除され、EMSステータスには「サブスクライブ解除済」と表示されます。

サブスクライブ済の非永続EMSの場合は、「サブスクライブ解除」をクリックしても何も影響はありません。この場合は、機能を適用できないことを示すメッセージが表示されます。

「永続サブスクライバ名」プロパティの構成の詳細は、表56-1を参照してください。

56.3.4 エンタープライズ・メッセージ・ソースのテスト方法

個々のEMS定義ページにある「テスト」リンクを使用して、データ・ソースおよびマップされたデータ・オブジェクトのフィールドに対してEMS定義をテストします。テスト結果は、EMS定義の「ステータス」フィールドに表示されます。

テストが正常に終了した場合、ステータスは「ステータス」フィールドに「テストOK」として表示されます。問題がある場合は、「テストが失敗しました - exception」と表示されます。また、「テスト」リンクをクリックすると、次のように動作します。

- EMSがすでに開始している場合、EMSは停止し、再度開始します。

- EMSが停止の状態である場合、EMSは開始し、再度停止します。

56.3.5 エンタープライズ・メッセージ・ソースのリフレッシュ方法

個々のEMS定義ページにある「リフレッシュ」リンクを使用して、EMS定義ページをリフレッシュします。通常は、EMSの現在のステータスを取得するためにページをリフレッシュします。

56.3.6 エンタープライズ・メッセージ・ソースのメトリックの監視方法

個々のEMS定義ページにある「メトリック」リンクを使用して、選択したEMS統計を監視します。「メトリック」ページには、「受信されたメッセージの合計」、「ADCでコミットされたメッセージの合計」および「失われたメッセージの合計」のカウンタが表示されます。これらの値は、最後の開始時またはリセット時から累積されます。

「失われたメッセージの合計」は、「受信されたメッセージの合計」から「ADCでコミットされたメッセージの合計」を減算して計算されます。

これらの最新のカウンタ値を表示するには、「リフレッシュ」をクリックします。

カウンタ値を0(ゼロ)に設定するには、「リセット」をクリックします。

56.4 外部JMSプロバイダの使用

Oracle WebLogic Serverでは、Oracle WebLogic Server以外の(外部)JMSプロバイダと、Oracle WebLogic ServerにデプロイされているOracle BAMなどのアプリケーションとの統合がサポートされています。外部JMSプロバイダには、独自のJMSクライアントおよびJava Naming and Directory Interface(JNDI)クライアントAPIが設定されています。これらの依存性を識別し、リモート・プロバイダでホストされているJMSリソースをOracle WebLogic Serverにデプロイされているアプリケーションによって参照できるようOracle WebLogic ServerでこれらのAPIを使用できるようにするには、いくつかの構成を行う必要があります。

詳細は、『Oracle Fusion Middleware Configuring and Managing JMS for Oracle WebLogic Server』のサード・パーティJMSプロバイダにアクセスするための外部サーバー・リソースの構成に関する項を参照してください。

「ユースケース: Oracle Streams AQ JMSプロバイダに対するEMSの作成」の第56.5.3項「外部JMSサーバーの作成」で、詳細な例を示します。

高レベルの構成手順は、次のとおりです。

1. 外部プロバイダのJMSおよびJNDIクライアント・ライブラリを、Oracle WebLogic Serverにデプロイされているアプリケーションで使用できるようにします。
外部プロバイダのJMSおよびJNDIクライアントのJavaアーカイブ(JAR)ファイルを識別し、これらのファイルをDOMAIN_HOME/libディレクトリに格納します。

2. Oracle WebLogic Server管理コンソールを使用して外部サーバーを作成します。
Oracle WebLogic Server管理コンソールの「JMSモジュール」に移動し、新規モジュールを作成します。

このモジュール内で、「新規」をクリックし、「外部サーバー」を選択し、すべてのページの指示に従って新規外部サーバーを作成します。

外部サーバー定義に対するリモート・プロバイダの適切なJNDIプロパティを指定します。

3. 外部JMSサーバーのJMSリソース(つまり、コネクション・ファクトリと宛先)を作成します。
「外部サーバー」リンク内で、「宛先」タブを選択して、次に対するリンクを作成します。

- リモート・コネクション・ファクトリ

- リモート宛先(キュー/トピック)

これらの宛先に対して構成したローカルJNDI名は、EMSの構成時に、これらの宛先からのメッセージを消費するために使用する必要があります。

4. Oracle BAMアーキテクトでEMS定義を構成して、外部宛先からのメッセージを消費するようにします。
外部プロバイダでホストされているJMSリソースへのアクセスの全体プロセスは、Oracle BAMサーバーには透過的です。前述の手順に正しく従うと、外部JMSプロバイダからのリモート宛先がローカルWLサーバーのJNDIツリー上に公開され、サーバーにデプロイされているアプリケーション(Oracle BAM EMSなど)で、他の関連付けられているOracle WebLogic Server JMSリソースと同様にそれらを参照できます。Oracle WebLogic Serverは、実行時に適切な外部JMSプロバイダとの通信を処理します。

56.5 ユースケース: Oracle Streams AQ JMSプロバイダに対するEMSの作成

次の手順で、Oracle WebLogic ServerでOracle Streams AQ JMSプロバイダ(AQ-JMS)を構成し、Oracle BAMアーキテクトでEMS定義を構成します。

1. AQ-JMSでのJMSトピックの作成

2. Oracle WebLogic Serverでのデータ・ソースの作成

3. 外部JMSサーバーの作成

4. Oracle BAMアーキテクトでのEMSの定義

5. SQL表のレコードの挿入と更新

56.5.1 AQ-JMSでのJMSトピックの作成

SQLplusコマンド・プロンプトを開き、次の手順を実行します。

1. sysdbaでログインします。

sqlplus sys as sysdba

2. プロンプトが表示された場合は、システムDBAアカウントのパスワードを入力します。

3. 次に示すスクリプトを次の順序で作成し、実行します(スクリプトの内容は例56-1、例56-2および例56-3を参照)。

@<SCRIPT_PATH>/usertabletopiccreation.sql
@<SCRIPT_PATH>/createtable.sql
@<SCRIPT_PATH>/createtrigger.sql

スクリプトにより、次の処理が実行されます。

1. ユーザーMyChannelDemoUserの下に新規スキーマを作成します。

2. AQ-JMSにJMSトピックを作成します。

3. EMPという名前のSQL表を作成します。

4. EMPの挿入/更新時に、メッセージをAQ-JMSトピックにパブリッシュするトリガーを作成します。

例56-1 usertabletopiccreation.sqlの内容

DROP USER MyChannelDemoUser CASCADE;

GRANT connect, resource,AQ_ADMINISTRATOR_ROLE TO MyChannelDemoUser IDENTIFIED BY
MyChannelDemoPassword;
GRANT execute ON sys.dbms_aqadm TO MyChannelDemoUser;
GRANT execute ON sys.dbms_aq    TO MyChannelDemoUser;
GRANT execute ON sys.dbms_aqin  TO MyChannelDemoUser;
GRANT execute ON sys.dbms_aqjms TO MyChannelDemoUser;

connect MyChannelDemoUser/MyChannelDemoPassword;

BEGIN
--dbms_aqadm.stop_queue( queue_name => 'MY_TOPIC' );
--dbms_aqadm.drop_queue( queue_name  => 'MY_TOPIC');
--DBMS_AQADM.DROP_QUEUE_TABLE (queue_table => 'TTab');
dbms_aqadm.create_queue_table( queue_table => 'TTab', queue_payload_type =>
'sys.aq$_jms_text_message', multiple_consumers => true );
dbms_aqadm.create_queue( queue_name  => 'MY_TOPIC', queue_table => 'TTab' );
dbms_aqadm.start_queue( queue_name => 'MY_TOPIC' );
END;
/

例56-2 createtable.sqlの内容

connect MyChannelDemoUser/MyChannelDemoPassword;

CREATE TABLE EMP ( EMPNO NUMBER(4), ENAME VARCHAR2(10),  JOB VARCHAR2(9), MGR
NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2) );

quit;

例56-3 createtrigger.sqlの内容

connect MyChannelDemoUser/MyChannelDemoPassword;
create or replace
trigger employee AFTER INSERT OR Update ON EMP
FOR each row
declare
xml_complete varchar2(1000);
v_enqueue_options dbms_aq.enqueue_options_t;
v_message_properties dbms_aq.message_properties_t;
v_msgid raw(16);
temp sys.aq$_jms_text_message;
v_recipients        dbms_aq.aq$_recipient_list_t;

Begin
temp:=sys.aq$_jms_text_message.construct;
xml_complete :=
'<?xml version="1.0"?>' ||
'<row>' ||
'<EMPNO>' || :new.EMPNO || '</EMPNO>' ||
'<ENAME>' || :new.ENAME || '</ENAME>' ||
'<JOB>' || :new.JOB || '</JOB>' ||
'<MGR>' || :new.MGR || '</MGR>' ||
'<HIREDATE>' || :new.HIREDATE || '</HIREDATE>' ||
'<SAL>' || :new.SAL || '</SAL>' ||
'<COMM>' || :new.COMM || '</COMM>' ||
'<DEPTNO>' || :new.DEPTNO || '</DEPTNO>' ||
'</row>' ;
temp.set_text(xml_complete);
dbms_aq.enqueue(queue_name => 'MY_TOPIC',
enqueue_options => v_enqueue_options,
message_properties => v_message_properties,
payload => temp,
msgid => v_msgid );
End ;
/
quit;

56.5.2 Oracle WebLogic Serverでのデータ・ソースの作成

データ・ソースが存在する場合、この手順はスキップできます。既存のデータ・ソースをこのセクションで再利用することもできます。

1. 次のように入力して、Oracle WebLogic Server管理コンソールを開きます。
http://hostname:7001/console

hostnameは、Oracle BAMサーバーがインストールされているシステム名です。

2. コンソールにログインした後、「JDBC」セクションにある「データ・ソース」リンクをクリックし、「新規」をクリックします。

3. データ・ソースの名前を入力します(例: BAMAQDataSource)。

4. データ・ソースからJNDI名を入力します(例: jdbc/oracle/bamaq)。この名前は、外部JMSサーバーの構成に使用されます。

5. 「データベースのタイプ」に「Oracle」を選択します。

6. 「データベース・ドライバ」フィールドに、Oracle's Driver (Thin)を選択し、「次へ」をクリックします。

7. グローバル・トランザクションのサポートの選択を解除し、「次へ」をクリックします。

8. 「データベース名」フィールドにデータベースSIDを入力します(例: ORCL)。

9. 「ホスト名」に、データベースがインストールされているシステムのホスト名を入力します(例: localhost)。

10. データベースのポート番号を入力します(例: 1521)。

11. ユーザー名を入力します(例: MyChannelDemoUser)。

12. パスワードを入力し、「次へ」を入力します。

13. 「構成のテスト」をクリックして構成をテストします。

14. 成功した場合は、「終了」をクリックします。

56.5.3 外部JMSサーバーの作成

外部JMSサーバーを作成する手順は、次のとおりです。

1. Oracle WebLogic Server JMSモジュールを追加します。

1. Oracle WebLogic Server管理コンソールで、ホームページから「JMSモジュール」ページに移動します。

2. 「新規」をクリックして、Oracle WebLogic Server JMSモジュールを作成します。

3. JMSモジュールの名前を入力します(例: BAMAQsystemModule)。

4. 「次へ」をクリックして適切なターゲットを割り当てます。

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

2. AQ-JMS外部サーバーをJMSモジュールに追加します。

1. 作成したJMSモジュールを選択します。

2. 「新規」をクリックし、追加するJMSリソースのリストに移動します。

3. 「外部サーバー」オプションを選択し、「次へ」をクリックします。

4. 外部サーバーの名前を入力し(例: BAMAQForeignServer)、「終了」をクリックします。

3. AQ-JMS外部サーバーを構成します。

1. 作成したAQ-JMS外部サーバーを選択します。

2. 「JNDI初期コンテキスト・ファクトリ」フィールドに、次の値を入力します。

oracle.jms.AQjmsInitialContextFactory

3. 「JNDIプロパティ」領域に、次の値を入力します。

datasource=datasource_jndi_location

datasource_jndi_locationは、データ・ソースのJNDIロケーションです(例: jdbc/oracle/bamaq)。

4. AQ-JMS外部サーバーにコネクション・ファクトリを追加します。

1. 作成したAQ-JMS外部サーバーを選択します。

2. 「接続ファクトリ」タブを選択します。

3. コネクション・ファクトリの名前を入力します。これは、Oracle WebLogic Serverによって参照される論理名です。

4. 「ローカルJNDI名」フィールドに、Oracle BAM EMSがこのコネクション・ファクトリを参照するために使用するローカルJNDI名を入力します(例: jms/BAMAQTopicCF)。

5. 「リモートJNDI名」フィールドに、次の値を入力します。

- TopicConnectionFactory (select for this use case)
- QueueConnectionFactory
- ConnectionFactory

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

5. AQ-JMS外部サーバーに宛先を追加します。

1. 作成したAQ-JMS外部サーバーを選択します。

2. 「宛先」タブを選択します。

3. この宛先の名前を入力します。これは、Oracle WebLogic Serverによって参照される論理名で、宛先名とは関係ありません。

4. 「ローカルJNDI名」フィールドに、Oracle BAM EMSがこの宛先を参照するために使用するローカルJNDI名を入力します(例: jms/BAMAQTopic)。

5. 「リモートJNDI名」フィールドに、宛先がキューの場合は、次の値を入力します。

Queues/queue_name

宛先がトピックの場合は、次の値を入力します。

Topics/topic_name

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

6. Oracle WebLogic Serverを再起動します。

56.5.4 Oracle BAMアーキテクトでのEMSの定義

1. Oracle BAMアーキテクトを開き、ドロップダウン・リストで「エンタープライズ・メッセージ・ソース」を選択します。

2. 作成したメッセージ・ソースの情報を入力します。

3. 「初期コンテキスト・ファクトリ」の値を入力します。

weblogic.jndi.WLInitialContextFactory

4. JNDIプロバイダのURLを入力します。

t3://hostname:7001

5. 「接続ファクトリ名」を入力します(例: jms/BAMAQTopicCF)。

6. 「宛先名」を入力します(例: jms/BAMAQTopic)。

7. AQ-JMSサーバーから受信した値を送信するOracle BAMデータ・オブジェクトを選択します。

8. 選択したデータ・オブジェクトの適切なフィールドに受信XMLのデータをマップできるように、ソースからデータ・オブジェクトへのフィールド・マッピングの指定を完了します。

56.5.5 SQL表のレコードの挿入と更新

これまでの作業で、EMPデータベース表内のいくつかレコードを挿入または更新して、機能をエンドツーエンドでテストできる状態になりました。

SQLPlusを使用してSQL問合せを実行できます。

ここでは、データ・オブジェクトに挿入されるレコードの値を確認する必要があります。

例:

insert into emp values (25,'Ford','ANALYST',7566,sysdate,60000,3000,20);

update emp set ENAME='McOwen' where ENAME='Ford';

57 Oracle Data IntegratorとOracle BAMの併用

この章では、Oracle Business Activity Monitoring(Oracle BAM)とOracle Data Integrator(ODI)間の統合を設定する方法、およびODIにOracle BAMターゲットを作成する方法について説明します。ここでは、ソース・データ・ストアからのロード、ターゲット・データ・ストアへの統合、チェック、リバース・エンジニアリング、ジャーナル化およびサービスの作成のためのOracle BAMナレッジ・モジュールについて詳細に説明します。

この章には次の項が含まれます:

- 第57.1項「Oracle Data Integrator (ODI)とOracle BAMとの統合に関する注意事項」

- 第57.2項「Oracle Data Integrator統合ファイルのインストール」

- 第57.3項「Oracle BAMナレッジ・モジュールの使用」

- 第57.4項「Oracle BAMターゲットの作成」

- 第57.5項「Oracle BAMスキーマのリバース・エンジニアリング」

- 第57.6項「Oracle Data Integrator外部データ・ソース定義の更新」

- 第57.7項「Oracle BAMアラートからのOracle Data Integratorシナリオの起動」

- 第57.8項「Oracle BAMが組み込まれたOracle Data IntegratorエージェントのデーモンまたはMicrosoft Windowsサービスとしての実行」

- 第57.9項「Oracle BAMとOracle Data Integratorとの統合のためのインストール・ファイル」

Oracle Data Integratorのドキュメントは、次のOracle Technology Network Webサイトにあります。

http://www.oracle.com/technetwork/middleware/data-integrator

57.1 Oracle Data Integrator (ODI)とOracle BAMとの統合に関する注意事項

Oracle BAM 11gリリース1 (11.1.1.7.0)では、ODIとの統合に新機能が導入されています。この機能は、Oracle BAMとODIの両方がOracle WebLogic Server上にインストールされている場合にサポートされます。次のリリースの構成がサポートされています。

- Oracle BAM 11.1.1.x.0とODI 10.1.3.5(パッチ・レベル10.1.3.6.8以下)

- Oracle BAM 11.1.1.7.0とODI 11.1.1.7.0

IBM WebSphere上では、Oracle BAM自体はサポートされていますが、ODIとのこの統合はサポートされていません。

57.1.1 11g リリース1 (11.1.1.7.0)におけるアプリケーション・サーバー内のOracle BAM

11g リリース1 (11.1.1.7.0)以降、Oracle BAMは、Oracle WebLogic Server内とIBM WebSphere内のいずれでも実行できます。このタイプのデプロイメントでは、アプリケーション・サーバーの多くの利点を得られるだけでなく、ODIとOracle BAMのインストールおよび更新をそれぞれ独立して簡単に実行できるようになります。

ODIのIBM WebSphere実装は使用できません。

57.1.2 ODIエージェントのタイプ

Oracle BAMは、ODIエージェントを使用してODIと通信します。このODIエージェントは、使用しているOracle BAMのリリースに応じて3つの種類のうちのいずれかになります。

- 11.1.1.7.0より前のOracle BAMを使用している場合、ODIエージェントは、スタンドアロンJavaアプリケーションであるかODIクライアントに埋め込まれているかのいずれかです。

- ODI 11.1.1.7.0とOracle BAM 11.1.1.7.0を使用している場合、ODIエージェントもJ2EEアプリケーションにすることができます。
このタイプのODIエージェントは、共有J2EEライブラリを参照し、第57.3項「Oracle BAMナレッジ・モジュールの使用」で説明するOracle BAMナレッジ・モジュール内のコードを実行します。この共有J2EEライブラリは、oracle.bam.odi_11.1.1.jarという名前であり、ODI環境の一部であるODI J2EEエージェントと同じアプリケーション・サーバーにデプロイされている必要があります。第57.2.1項「スクリプトを使用したOracle BAM-ODI統合ファイルのインストール方法」で説明するスクリプトを実行することによって、共有J2EEライブラリをデプロイできます。

57.1.3 リリース11gのOracle BAM-ODI統合における追加のインストール手順

Oracle BAM-ODI統合は、シェル・スクリプト、Javaコードおよびantスクリプトでインストールします。これらのファイルは、Oracle BAMのインストール・バイナリが配置されているORACLE_HOMEのサブディレクトリ(たとえば、ORACLE_HOME/bam/)に配置されています。

Oracle BAMリリース11.1.1.7.0より前のリリースでは、BAM-ODIインストール全体がシェル・スクリプトbam-odi-configuration.sh (または.bat)によって起動されます。このスクリプトは、バージョン11.1.1.7.0でも、ODI 10gとODI 11gの両方に対するOracle BAM-ODI統合に使用されます(下位互換性があります)。

ただし、ODI 11gの場合、このシェルはOracle BAM-ODIインストール全体向けではありません。これは、前にODI 10gで使用可能であったもの、つまり、ODI 11gのクライアント側の機能のみを提供します。ODI 11gで提供される新機能(たとえば、ODI J2EEエージェントとの統合)を含めるには、この章で説明するように、Oracle BAM-ODI統合の追加手順が必要です。

57.1.4 Oracle BAMとともにOracle Data Integratorを使用するためのヒント

Oracle Data IntegratorとOracle BAMを併用する場合は、次のことに注意してください。

- Oracle Data Integratorインタフェース内では、空白が含まれているフィールド名は引用符で囲む必要があります。

- Oracle Data Integratorでは、Oracle BAMのタイプ「参照」、「計算済」、「自動増加整数」および「タイムスタンプ」の読取り専用フィールドにデータを挿入することはできません。これらのフィールドには、データが自動的に移入されます。Oracle Data Integratorでは、これらのフィールドをターゲット・フィールドとして選択できますが、フィールドに値が移入された状態でOracle Data Integratorを実行すると、例外がスローされます。

- Oracle BAMをステージング領域として使用しないでください。たとえば、Oracle BAMが(ロード・ナレッジ・モジュールを使用する場合のように)ソースとして使用されている場合、このソースをステージング領域として使用しないでください。Oracle BAMが(統合ナレッジ・モジュールを使用する場合のように)ターゲットとして使用されている場合は、そのターゲットをステージング領域として使用しないでください。

57.1.5 Oracle BAM-ODI統合のインストールに関する前提条件

Oracle BAM-ODI統合は、Oracle BAMとODIの両方の上に別のコンポーネントとしてインストールされます。統合コンポーネントをインストールする前に、Oracle BAMとODIの両方をインストールしてください。

この章では、次のことを想定しています。

- Oracleデータベースがインストール済で接続が可能であること。

- Oracle BAMがインストール済で実行されていること。

- Oracle Data Integratorがインストール済で基本構成(Oracle Data Integratorマスター・リポジトリの作成、リポジトリ接続の構成、作業リポジトリの作成と接続、ソース・トポロジの構成)が終了していること。

- Oracle Data Integratorが別のホストにインストールされている場合、Oracle BAMとOracle Data Integratorの統合を処理するには、Java 1.6がOracle Data Integratorホストにインストールされている必要があります。

57.2 Oracle Data Integrator統合ファイルのインストール

Oracle BAMとOracle Data Integratorの統合を設定する方法には、次の2通りがあります。

1番目は、インストール・スクリプトを使用する方法です。これは通常、Oracle Data IntegratorとOracle BAMが同じシステムまたは同じネットワーク・ファイル・システムにデプロイされている場合に使用します(第57.2.1項「スクリプトを使用したOracle BAM-ODI統合ファイルのインストール方法」)。

2番目は、手動ステップを使用して、プロパティを構成し、必要なファイルをOracle Data Integratorディレクトリにコピーする方法です(第57.2.3項「手動による統合ファイルのインストール方法」)。この方法は通常、Oracle BAMがインストールされているシステムからODI_HOMEドライブをマップできない場合(通常はOracle Data IntegratorとOracle BAMが異なるネットワークまたはファイル・システムにインストールされている場合)に使用します。

ログには、インストールに関する情報と統合メッセージが保存されます。詳細は、第57.2.4項「ログの使用」を参照してください。

Oracle Data IntegratorとOracle BAMの併用時の推奨メモリー設定

Oracle Data Integratorのデフォルトのメモリー設定は、odiparams.shスクリプト(Windowsの場合はodiparams.bat)に含まれています。ODI_INIT_HEAPプロパティとODI_MAX_HEAPプロパティの値は、32MBと256MBにデフォルト設定されています。これらの値をそれぞれ256MBと1024MBに変更することをお薦めします。この設定によって、Oracle Data Integratorのパフォーマンスが向上します。ただし、メモリーを大量に使用するタスクの実行時には、OutOfMemoryエラーが発生する可能性があります。

57.2.1 スクリプトを使用したOracle BAM-ODI統合ファイルのインストール方法

Oracle Data IntegratorとOracle BAMを同じシステムまたは同じネットワーク・ファイル・システムにインストールしている場合は、インストール・スクリプトを使用します。

インストールに問題がある場合は、utility.logというログ・ファイルが作成されます。このファイルの場所は、utility.logging.propertiesファイルによって制御されます。詳細は、第57.2.4項「ログの使用」を参照してください。

統合ファイルをインストールする手順は、次のとおりです。

1. Oracle BAMサーバーが実行され、Oracle Data Integratorホストからアクセス可能であることを確認します。

2. Oracle BAMホストで、ORACLE_HOME\bam\configディレクトリに移動し、bam_odi_configuration.propertiesファイルを編集します。そのファイル内で、WL_SERVERプロパティを指定します。このプロパティには、Oracle BAMシステム上のOracle WebLogic Serverフォルダ名を指定します。デフォルト値はwlserver_10.3です。

注意:

- Oracle BAMサーバーとOracle Data Integratorが2つの異なるホストにデプロイされている場合は、Oracle BAMのシステムにOracle Data Integratorのドライブをマップし、そのマップしたドライブを使用してODI_HOMEのパスを設定し、統合構成スクリプトを正しく使用できるようにします。ドライブのマッピングができない場合は、第57.2.3項「手動による統合ファイルのインストール方法」を参照してください。

- リリース11gでは、ODI_HOMEは、Studioコンポーネントを含む開発者インストール・タイプでインストールされます。

3. ./config/ディレクトリにあるファイルbam-odi-configuration.propertiesで、次のプロパティを変更します。

- ODI_HOME: ODIクライアント・ディレクトリ、つまり、oraclediディレクトリ。
例: /scratch/jdoe/odiHome11g/oracledi

- WL_SERVER: Oracle WebLogic Serverサーバー・ディレクトリ名。Weblogic上で実行されていない場合、このプロパティは無視されます。

- ODI_VERSION: BAM-ODI統合で使用されるODIのバージョン。10gまたは11gを指定します。

- SERVER_NAME: Oracle BAMサーバーが実行されているマシンの名前またはIPアドレス。デフォルトは、localhostです。

- SERVER_PORT: Oracle BAMサーバーがリスニングしているポート。デフォルトは、9001です。

4. リリース11gを使用している場合、共有ライブラリをデプロイします。共有ライブラリは、ファイルoracle.bam-odi_11.1.1.jarであり、それをデプロイするには、スクリプトdeploy_shared_lib.shを実行します。プロンプトが表示されたら、ユーザー名とパスワードを入力します。オプションで、serverNameおよびserverPortの引数も入力できます。
スクリプトdeploy_shared_lib.shによって、ファイルoracle.bam.odi.jarが、指定したターゲット管理サーバー(またはデフォルトのlocalhost)の指定したポート(またはデフォルトの7001)にデプロイされます。たとえば、deploy_shared_lib.sh weblogic welcome1 localhost 7001とします。

共有ライブラリをアンデプロイするには、ユーザー名およびパスワード、さらにオプションでserverNameおよびserverPortの引数を指定してundeploy_shared_lib.shを実行します。たとえば、undeploy_shared_lib.sh weblogic welcome1 localhost 7001とします。

5. Oracle BAMサーバーが配置されているアプリケーション・サーバーが実行中であることを確認します。

6. ORACLE_HOME\bam\binのbam_odi_configuration.sh(またはMicrosoft Windowsホストの場合はbam_odi_configuration.bat)を実行します。
スクリプトの要求に従って値を入力します。スクリプトの実行を完了するには、Oracle Data Integratorマスター・リポジトリおよびOracle Data Integrator作業リポジトリのアカウント資格証明が必要です。

[値]とともに表示されるプロンプトの場合、カッコ内はデフォルト値です。デフォルトを選択するには[Enter]を押します。カッコで囲まれたデフォルト値が表示されない場合は、値を入力する必要があります。入力しないとスクリプトが停止します。

注意:

現在の環境でスクリプトを使用できない場合は、第57.2.3項「手動による統合ファイルのインストール方法」の手順を使用してください。

注意:

bam_odi_configuration.shを実行するたびに、BAMODIConfig.xmlファイルのタイムスタンプ付きバックアップが同じディレクトリに作成され、古いファイルは新しいファイルで上書きされます。古いバージョンのBAMODIConfig.xmlでプロパティ設定の変更を行った場合は、最新バージョンのファイルでそれらの変更を再度行う必要があります。

57.2.2 スクリプトを使用したOracle BAM-ODI統合ファイルのインストール時の処理内容

このスクリプトは、手順3でファイルbam-odi-configuration.propertiesに指定した値に従って、サーバー・プラットフォーム・タイプ(Oracle WebLogic ServerとIBM WebSphereのいずれか)およびODIバージョン(10gと11gのいずれか)に応じて分岐します。

動作保証の疑問点は、次のURLのOracle Fusion Middlewareのサポートされるシステム構成を参照してください。

http://www.oracle.com/technetwork/middleware/ias/downloads/fusion-certification-100350.html

リリース10gをインストールすることを指定した場合:

スクリプトは、Oracle BAM Webアプリケーションに必要なリソースを作成し、Oracle Data IntegratorにOracle BAMの構成プロパティを設定し、Oracle WebLogic ServerクライアントJavaアーカイブ(JAR)を生成してOracle Data Integratorシステムにデプロイし、必要なファイルをすべて適切なOracle Data Integratorディレクトリにコピーします。

スクリプトの実行中に、次のメッセージが表示される場合があります: Oracle BAMサーバーへの接続を試行しています。数分かかる可能性があります。Oracle BAMサーバーにアクセスできない場合は、接続の再試行が複数回繰り返されます。

リリース11をインストールすることを指定した場合:

- Oracle BAMおよびODIに、Oracle BAM外部データ・ソースおよび他のデータ・オブジェクトを作成するための資格証明を付与するように要求されます。その後、ICommandによってOracle BAMサーバーに接続し、これらのデータ・オブジェクトが作成されます。

- ODIクライアントに必要なOracle BAM Jarファイルは、~user/.odi/oracledi/userlibディレクトリにコピーされます。これは、ODIクライアント・クラスパスに含まれている必要がある外部Jarファイル用にODIによって指定されているディレクトリです。

- ODI-BAM統合のための構成ファイルであるBAMODIConfig.xmlは、oracle-bam-odi-config.jarから解凍されます。その後、それは、serverPlatformに適した値および他の必要な値に変更されます。変更後、それは再度圧縮されてJarファイルになります。

- Oracle BAMナレッジ・モジュールが、ODIクライアント用に指定されたディレクトリにコピーされます。

- ODIクライアントのロギング構成ファイルODI-logging-config.xmlがバックアップされます。このファイルは、その後、Oracle BAM用のロギング構成が追加されることによって変更されます。

さらに、このスクリプトによって次の事項が実行されます。

- Oracle Data Integrator EDSエンタープライズ・データ・ソースを再作成します。

- odiparams.shファイルを変更します。

- Oracle BAM JARファイルとナレッジ・モジュールをコピーします。

既存のOracle Data Integrator作業環境では、Oracle BAMアーティファクトをコピーするだけで済みます。そのためには、PATCHコマンドライン・パラメータを使用してスクリプトを実行します。例:

sh bam_odi_configuration.sh PATCH

スクリプトによって、このコマンドライン・パラメータが検出されると、Oracle BAM JARファイルおよびナレッジ・モジュールがコピーされます。Oracle Data Integrator EDSエンタープライズ・データ・ソースが再作成されることもodiparams.shファイルが変更されることもありません。

これで、Oracle Data Integratorトポロジ・マネージャでOracle BAMターゲットを作成できます。手順は、第57.4項「Oracle BAMターゲットの作成」を参照してください。

57.2.3 手動による統合ファイルのインストール方法

Oracle Data IntegratorとOracle BAMサーバーが異なるネットワークのホストにインストールされている場合、またはなんらかの理由で現在の環境でスクリプトを使用できない場合は、次の手順を使用します。

このプロセスには、次の5つの主な手順があります。

1. JAVA_HOMEの設定

2. Oracle Data Integrator用の外部データ・ソースの作成

3. Oracle Data Integrator構成プロパティの設定

4. Oracle Data Integratorディレクトリへのファイルのコピー

5. Oracle WebLogic ServerクライアントJARの生成

JAVA_HOMEの設定

Oracle Data Integratorアプリケーションを起動する環境で、環境変数JAVA_HOMEをJavaバージョン1.6.xに設定する必要があります。この状況は、Javaバージョン1.6.xがホストにインストールされている必要があることを意味します。環境変数は、次のように設定します。

Microsoft Windowsの場合は、「コントロール パネル」に移動し、「システム」アイコンをクリックします。「システムのプロパティ」で、「詳細設定」タブに移動し、「環境変数」ボタンをクリックします。「環境変数」ウィンドウで、ユーザー(上のボックス)の変数JAVA_HOMEを作成または編集し、値をJavaインストールのパス(例: c:\PROGRA~1\Java\jdk1.6.0_12)に設定します。「OK」をクリックします。Oracle Data Integratorを起動するときは、必ず新しいコマンド・プロンプトから起動して、この新規環境変数を取得します。

UNIXの場合は、シェル・スクリプトの手順に従って環境変数JAVA_HOMEを作成します。このスクリプトは、起動スクリプト(ユーザーのホーム・ディレクトリにある.cshrcなど)で実行するか、またはOracle Data Integratorを起動する前にコマンドラインで実行できます。

Oracle Data Integrator用の外部データ・ソースの作成

Oracle BAMアーキテクトで外部データ・ソースを作成します。

1. Oracle BAMアーキテクトを開き、「外部データ・ソース」ページを選択します。
図bam_architect_menu_eds.gifの説明

2. 「作成」をクリックし、表57-1および表57-2に示されている値を指定して、2つの外部データ・ソース(ODI_MasterおよびODI_Work)を構成します。

表57-1 ODI_Master外部データ・ソースの値

プロパティ

値

外部データ・ソース名

ODI_Master

ドライバ

oracle.jdbc.driver.OracleDriver

ログイン

Oracle Data Integratorマスター・リポジトリのアカウント・ユーザー名

パスワード

Oracle Data Integratorマスター・リポジトリのアカウント・パスワード

接続文字列

jdbc:oracle:thin:@ip_address:port_number:db_service_name

表57-2 ODI_Work外部データ・ソースの値

プロパティ

値

外部データ・ソース名

ODI_Work

ドライバ

oracle.jdbc.driver.OracleDriver

ログイン

Oracle Data Integrator作業リポジトリのアカウント・ユーザー名

パスワード

Oracle Data Integrator作業リポジトリのアカウント・パスワード

接続文字列

jdbc:oracle:thin:@ip_address:port_number:db_service_name

Oracle Data Integrator構成プロパティの設定

ODI_HOME/binにあるodiparams.sh(bat)ファイルのODI_JAVA_OPTIONSおよびODI_ADDITIONAL_CLASSPATHの値を、例57-1および例57-2に示すように変更します。

例57-1 ODI_JAVA_OPTIONSの変更

Windowsの場合:

SET ODI_JAVA_OPTIONS=-Djava.security.policy=server.policy
-Djava.util.logging.config.file=../lib/bam_odi.logging.properties

Linuxの場合:

SET ODI_JAVA_OPTIONS="-Djava.security.policy=server.policy
-Djava.util.logging.config.file=../lib/bam_odi.logging.properties"

例57-2 ODI_ADDITIONAL_CLASSPATHの変更

SET ODI_ADDITIONAL_CLASSPATH=../lib/weblogic/wlfullclient.jar

Oracle Data Integratorディレクトリへのファイルのコピー

この手順では、いくつかのJARファイル、ロギング・プロパティ・ファイルおよびナレッジ・モジュールをOracle Data Integratorディレクトリにコピーします。

1. 次のファイルを
ORACLE_HOME/bam/modules/oracle.bam_11.1.1から
ODI_HOME/libにコピーします。

- oracle-bam-common.jar

- oracle-bam-etl.jar

- oracle-bam-adc-ejb.jar

2. 次のファイルを
ORACLE_HOME/bam/modules/oracle.bam.thirdparty_11.1.1から
ODI_HOME/libにコピーします。

- commons-codec-1.3.jar

- xstream-1.1.3.jar

3. 次のファイルを
ORACLE_HOME/modules/oracle.odl_11.1.1から
ODI_HOME/libにコピーします。

- ojdl.jar

4. 次のファイルを
ORACLE_HOME/modules/oracle.jps_11.1.1から
ODI_HOME/libにコピーします。

- jps-api.jar

5. 次のファイルを
ORACLE_HOME/modules/oracle.dms_11.1.1から
ODI_HOME/libにコピーします。

- dms.jar

6. 次のファイルを
ORACLE_HOME/modulesから
ODI_HOME/libにコピーします。

- org.jaxen_1.1.1.jar

7. 次のファイルを
ORACLE_HOME/bam/configから
ODI_HOME/libにコピーします。

- bam.odi.logging.properties

8. 次のファイルを
ORACLE_HOME/bam/ODI/configから
ODI_HOME/lib/configにコピーします。

- BAMODIConfig.xml

9. すべてのXMLファイルを
ORACLE_HOME/bam/odi/knowledge_modulesから
ODI_HOME/impexpにコピーします。

Oracle WebLogic ServerクライアントJARの生成

1. Oracle WebLogic Server JarBuilderツールを使用して、wlfullclient.jarファイルを生成します。手順は、『Oracle Fusion Middleware Programming Stand-alone Clients for Oracle WebLogic Server』のWebLogic JARBuilderツールの使用に関する項を参照してください。

2. ODI_HOME/oracledi/lib/weblogicという名前のサブディレクトリを作成します。

3. wlfullclient.jarをODI_HOME/oracledi/lib/weblogicにコピーします。

57.2.4 ログの使用

インストール・ログ

インストール・プロセスの一部でOracle BAM ICommandが使用され、このプロセスに関連するログが、構成スクリプトを実行しているディレクトリ(ORACLE_HOME\bam\bin)内のファイルに書き込まれます。

インストール・ログのロギング・プロパティは、同じディレクトリ内にあるutility.logging.propertiesファイルで構成します。デフォルトのロギング・レベルはINFOに設定されています。

実行時ログ

Oracle Data IntegratorをOracle BAMとともに実行しているときに発生するメッセージのロギングを構成するには、bam_odi.logging.propertiesファイルを使用します。このファイルはODI_HOME/libにあります。

57.3 Oracle BAMナレッジ・モジュールの使用

ナレッジ・モジュールは、データ統合パターンに必要な一連のコマンドが含まれている汎用コード・テンプレートです。ナレッジ・モジュールには、Oracle Data Integratorが特定の記憶域テクノロジに対して特定のタスク・セットを実行するために必要なナレッジが含まれています。特定の記憶域テクノロジに関連するメソッドが定義されており、そのテクノロジに対するプロセスの生成を可能にします。

(ソース・データ・ストアからの)ロード、(ターゲット・データ・ストアへの)統合、チェック、リバース・エンジニアリング、ジャーナル化およびサービスの作成ごとに異なるナレッジ・モジュールがあります。ナレッジ・モジュールはすべて、実行時にナレッジ・モジュール・インタプリタによって実行されるコードを生成することによって機能します。

Oracle Data Integrator内には、Oracle BAM機能に固有のナレッジ・モジュールのセットがあります。これらのナレッジ・モジュールは、統合ファイルのインストール時にODI_HOME/oracledi/impexpディレクトリにインストールされます。ただし、リリース11gでは、それらはODI_HOME/oracledi/xml-referenceディレクトリにインストールされます。これらのOracle BAM固有のナレッジ・モジュールを使用するには、Oracle Data Integratorデザイナ・アプリケーションの適切なプロジェクトにインポートする必要があります。表57-3で、Oracle BAM固有のナレッジ・モジュールについて説明します。

ナレッジ・モジュールのインポート方法については、Oracle Data Integratorユーザーズ・ガイドのナレッジ・モジュールのインポートに関する項を参照してください。Oracle Data Integratorのドキュメントは、次のOracle Technology Network Webサイトにあります。

http://www.oracle.com/technetwork/middleware/data-integrator

表57-3 Oracle BAMナレッジ・モジュール

ナレッジ・モジュール

説明

CKM Get Oracle BAM Metadata

統合ナレッジ・モジュール手順の前に内部的に使用されるチェック・ナレッジ・モジュール。このチェック・ナレッジ・モジュールは、Oracle BAMテクノロジのデフォルト・ナレッジであり、Oracle Data Integratorによって自動的に取得されます。このチェック・ナレッジ・モジュールでは、同じJavaセッション内のOracle BAM固有の統合ナレッジ・モジュールによって後で使用される2つの配列が作成されます。

このナレッジ・モジュールにオプションはありません。

IKM SQL to Oracle BAM (delete)

一致するキー列の値を送信してOracle BAMデータ・オブジェクトから行を削除できる統合ナレッジ・モジュール。次のオプションがあります。

COMMIT_SIZE

BATCH_SIZE

DATETIME_PATTERN

KEY_CONDITION

LAST_BAM_TASK

LOCALE_COUNTRY

LOCALE_LANGUAGE

LOCALE_VARIANT

IKM SQL to Oracle BAM (insert)

異種データ・ソースからOracle BAMデータ・オブジェクトに行を挿入できる統合ナレッジ・モジュール。次のオプションがあります。

BATCH_SIZE

COMMIT_SIZE

CREATE_TARG_TABLE

DATETIME_PATTERN

LAST_BAM_TASK

LOCALE_COUNTRY

LOCALE_LANGUAGE

LOCALE_VARIANT

IKM SQL to Oracle BAM (looksert natural)

異種データ・ソースからOracle BAMデータ・オブジェクトに行を挿入できる統合ナレッジ・モジュール。IKM SQL to Oracle BAM (insert)と異なる点は、エントリが存在しない場合に、ディメンション表(参照列が参照しているデータ・オブジェクト)への新規エントリの挿入も行うことです。

ルックサート統合ナレッジ・モジュールでは、参照フィールドに基づいてOracle BAMターゲットへの挿入が行われます。通常は、スター・スキーマのファクト表のロードに使用されます(スター・スキーマの特徴は、データ・ウェアハウスの主要情報が含まれる1つ以上の大規模なファクト表と、それより小規模のディメンション表(または参照表)がいくつか存在し、各ディメンション表にファクト表内の特定の属性に対するエントリの情報が含まれていることです)。

この統合ナレッジ・モジュールは、パフォーマンスを向上させるために提供されています。次のオプションがあります。

BATCH_SIZE

COMMIT_SIZE

DATETIME_PATTERN

LAST_BAM_TASK

LOCALE_COUNTRY

LOCALE_LANGUAGE

LOCALE_VARIANT

NON_KEY_MATCHING

IKM SQL to Oracle BAM (looksert surrogate)

異種データ・ソースからOracle BAMデータ・オブジェクトに行を挿入できる統合ナレッジ・モジュール。IKM SQL to Oracle BAM (looksert natural)に類似しており、異なる点は、ファクト・データ・オブジェクトとディメンション・オブジェクトの間で、自然キーではなくサロゲート・キーを使用することです。

ルックサート統合ナレッジ・モジュールでは、参照フィールドに基づいてOracle BAMデータ・オブジェクトへの挿入が行われます。通常は、スター・スキーマのファクト表のロードに使用されます(スター・スキーマの特徴は、データ・ウェアハウスの主要情報が含まれる1つ以上の大規模なファクト表と、それより小規模のディメンション表(または参照表)がいくつか存在し、各ディメンション表にファクト表内の特定の属性に対するエントリの情報が含まれていることです)。

参照フィールドの値が関連ディメンション表に存在しない場合は、値が自動的に挿入されます。

この統合ナレッジ・モジュールは、LKM Get Source MetadataおよびCKM Get Oracle BAM Metadataとともに使用する必要があります。

このナレッジ・モジュールには次のオプションがあります。

BATCH_SIZE

COMMIT_SIZE

DATETIME_PATTERN

LAST_BAM_TASK

LOCALE_COUNTRY

LOCALE_LANGUAGE

LOCALE_VARIANT

NON_KEY_MATCHING

IKM SQL to Oracle BAM (update)

異種データ・ソースからOracle BAMデータ・オブジェクトの行を更新できる統合ナレッジ・モジュール。次のオプションがあります。

BATCH_SIZE

COMMIT_SIZE

DATETIME_PATTERN

LAST_BAM_TASK

LOCALE_COUNTRY

LOCALE_LANGUAGE

LOCALE_VARIANT

IKM SQL to Oracle BAM (upsert)

異種データ・ソースからOracle BAMデータ・オブジェクトに行をマージ(アップサート)(つまり、一致する行が存在する場合はデータ・オブジェクトを更新し、新しい行の場合はデータ・オブジェクトを挿入)できる統合ナレッジ・モジュール。次のオプションがあります。

BATCH_SIZE

COMMIT_SIZE

DATETIME_PATTERN

LAST_BAM_TASK

LOCALE_COUNTRY

LOCALE_LANGUAGE

LOCALE_VARIANT

注意: 実行時に、アップサート操作の数は「更新数」フィールドにレポートされます。これは、Oracle Data Integratorオペレータ・ユーザー・インタフェースにアップサート数のフィールドがないためです。さらに、Oracle BAMデータベースに対する挿入および更新の全件数は「更新」フィールドにレポートされ、個別にはレポートされません。

LKM Get Source Metadata

ロード・ナレッジ・モジュール。これは、従来のロード・ナレッジ・モジュールではなく、ソースからステージング領域にデータをロードしません。かわりに、統合ナレッジ・モジュールIKM SQL to Oracle BAM (looksert surrogate)で必要なメタデータの収集のみを実行します。

IKM ORACLE to BAM (looksert surrogate)は、SQLソースからOracle BAMターゲットに直接ロードするタスクを実行します。この実行時に、LKM Get Source Metadataで提供されたメタデータを使用します。

このナレッジ・モジュールにオプションはありません。

LKM Oracle BAM to SQL

クライアント・アプリケーションでOracle BAMからデータをロードできるようにするロード・ナレッジ・モジュール。

Oracle BAMロード・ナレッジ・モジュールをインタフェースでソースとして使用する場合(たとえば、LKM Oracle BAM to SQL)、ユーザーは、ターゲット内の各マップ・フィールドに対するデフォルトの「実行」ボタンを「ステージング領域」に変更する必要があります。デフォルトの「ソース」のままにした場合は、エラーが発生します。Oracle BAMなど、ステージング領域を考慮しないテクノロジでは、トランスフォーメーションを実行しないでください。

次のオプションがあります。

DELETE_TEMPORARY_OBJECTS

DROP_PURGE

LAST_BAM_TASK

RKM Oracle BAM

Oracle BAM用のカスタマイズ・リバース・エンジニアリング・ナレッジ・モジュール。次のオプションがあります。

GET_COLUMNS

GET_FOREIGN_KEYS

GET_INDEXES

GET_PRIMARY_KEYS

LOG_FILE_NAME

USE_LOG

表57-4では、Oracle BAMナレッジ・モジュールで使用されるパラメータについて説明します。

表57-4 Oracle BAMナレッジ・モジュールのパラメータ

パラメータ

説明

BATCH_SIZE

クライアントからサーバーにバッチとして送信される最大レコード数。

クライアントからサーバーにバッチを送信するために使用されるバッチ・サイズ。Java仮想マシンのサイズが大きくなり大規模なホストが使用されるようになると、パフォーマンスを向上させるためにこのパラメータを増加する場合があります。

デフォルト値: 1024

COMMIT_SIZE

単一トランザクションの最大レコード数。デフォルトは0(ゼロ)で、これは1つのトランザクションですべての入力レコードをコミットすることを意味します。ゼロ以外の正の値は、一度にコミットするレコードの最大数を示します。このオプションでは負の値は無効です。

デフォルト値: 0

CREATE_TARG_TABLE

Oracle BAMサーバーにターゲット・データ・オブジェクトを作成する場合は、このオプションを選択します。

DATETIME_PATTERN

このオプションおよびロケール仕様(例: LOCALE_LANGUAGE、LOCALE_COUNTRYおよびLOCALE_VARIANT)は、日時のデータ文字列の解析で使用されるJava SimpleDateFormatオブジェクトを作成するために使用します。

SimpleDateFormatの詳細は、第56.2.2項「日時仕様の構成方法」を参照してください。

DELETE_TEMPORARY_OBJECTS

統合後に一時オブジェクトを保持する場合は、このオプションをNOに設定します。このオプションはデバッグに有効です。

DROP_PURGE

作業表の削除のみでなくパージも行う場合は、このオプションをYESに設定します。表を削除した場合、表はデータベースのごみ箱でリカバリ可能な状態です。表を削除してパージした場合、表は完全に削除されます。

GET_COLUMNS

列をリバース・エンジニアリングする場合は、Yesに設定します。

GET_FOREIGN_KEYS

外部キーをリバース・エンジニアリングする場合は、Yesに設定します。

GET_INDEXES

索引をリバース・エンジニアリングする場合は、Yesに設定します。

GET_PRIMARY_KEYS

主キーをリバース・エンジニアリングする場合は、Yesに設定します。

KEY_CONDITION

ターゲットに対してソースの1つ以上の対応する行を一致させる場合は、このオプションを設定します。次の演算子を使用します。*、=、!=、<、<=、>、>=。一致する値(つまり、where句の値)は、Oracle Data Integratorデザイナのインタフェース用の「ダイアグラム」タブにある、ターゲット・データ・ストアのキー・フィールドに対するマッピング値として指定する必要があります。

*演算子をKEY_CONDITIONオプションの値として選択した場合、そのキー・フィールドのマッピング値に関係なく、すべての行がターゲット・データ・ストアから削除されます。

LAST_BAM_TASK

Oracle BAM JDBC接続のライフ・サイクルを管理する場合は、このオプションを使用します。このタスクがワークフロー内の最後のOracle BAMタスクの場合は、JDBC接続をクローズします。それ以外の場合は、接続をオープンしたままにします。

LOCALE_COUNTRY

国オプションは有効なISO国コードです。これらのコードは、ISO-3166で定義されている大文字の2文字のコードです。

Javaロケール・オブジェクトを作成するには、このオプションとLOCALE_LANGUAGEおよびLOCALE_VARIANTを組み合せて使用します。

LOCALE_LANGUAGE

言語オプションは有効なISO言語コードです。これらのコードは、ISO-639で定義されている小文字の2文字のコードです。

Javaロケール・オブジェクトを作成するには、このオプションとLOCALE_COUNTRYおよびLOCALE_VARIANTを組み合せて使用します。

LOCALE_VARIANT

変数オプションは、ベンダーまたはブラウザ固有のコードです。たとえば、WindowsにはWIN、MacintoshにはMAC、POSIXにはPOSIXを使用します。2つの変数がある場合は、アンダースコアで区切り、最も重要な変数を最初に記述します。たとえば、古スペイン語照合では、言語、国および変数のパラメータをes, ES, Traditional_WINのように使用してロケールが作成されます。

Javaロケール・オブジェクトを作成するには、このオプションとLOCALE_LANGUAGEおよびLOCALE_COUNTRYを組み合せて使用します。

LOG_FILE_NAME

USE_LOGをYesに設定した場合に指定します。ログのパスとファイル名を指定します。リバース・エンジニアリングを実行する前に、このプロパティの値を必ず正しく設定してください(つまり、ユーザーに書込み権限がある場所を選択します)。

NON_KEY_MATCHING

入力のキー以外の列値をディメンション表内のキー以外の列値と比較するかどうかを決定します。

NON_KEY_MATCHINGをtrueに設定すると、入力のキー以外の列値がディメンション表内の列値と一致する場合は、行がファクト表(ターゲット・データ・ストア)に挿入されます。一致しない場合、その行の挿入は失敗し、トランザクション全体がロールバックされる場合(COMMIT_SIZEが0(ゼロ)に設定されていた場合)もあります。COMMIT_SIZEが1の場合は、この行のみがロールバックされて無視され、他の行の挿入はすべて通常どおり処理されます。

NON_KEY_MATCHINGをfalseに設定し、参照が成功した場合、ディメンション表に対する入力のキー以外の列値は無視されます。

USE_LOG

リバース・エンジニアリング・プロセスでログ・ファイルに詳細を記録する場合は、Yesに設定します。LOG_FILE_NAMEオプションを使用してログ・ファイルの場所を指定します。

57.4 Oracle BAMターゲットの作成

この項では、Oracle Data Integratorトポロジ・マネージャを使用してOracle BAMターゲットを作成する手順を詳細に説明します。

Oracle Data Integratorの使用方法の詳細は、次のOracle Technology Network WebサイトにあるOracle Data Integratorのドキュメントを参照してください。

http://www.oracle.com/technetwork/middleware/data-integrator

57.4.1 Oracle BAMターゲットの作成方法

Oracle Data IntegratorでOracle BAMターゲットを作成する手順は、次のとおりです。

1. Oracle Data Integratorトポロジ・マネージャを開きます。

2. 「物理アーキテクチャ」→「テクノロジ」→Oracle BAMの順に移動します。

3. 右クリックしてデータ・サーバーの挿入を選択します。

4. 「データ・サーバー定義」タブで次の項目を構成します。

- 名前: Oracle BAMターゲット名。

- サーバー(データ・サーバー): 空白のままにします。

- ユーザー: Oracle BAM管理者のユーザー名。

- パスワード: Oracle BAM管理者のパスワード。

5. 「JDBC」タブで次の項目を構成します。

- JDBCドライバ: any_text_will_do。ただし、11gでは、JDBCドライバにoracle.jdbc.OracleDriverを指定します。

- JDBC URL: instance1:hostname:port_number
instance1の文字列は、任意の文字列にできます。

hostnameの値は、BAMCommonConfig.xmlファイルのServerNameプロパティの値と同じである必要があります。また、port_numberの値は、BAMCommonConfig.xmlファイルのServerPortプロパティの値と同じである必要があります。

- このダイアログの「テスト」ボタンはOracle BAMとOracle Data Integrator間の統合では機能しないため、使用しないでください。Oracle BAMモデルのデータ・オブジェクトが正常にリバース・エンジニアリングされた後、接続情報が正しいことを検証できます。

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

7. 物理データ・サーバー・ダイアログで次の項目を構成します。

- 「物理スキーマ定義」タブで次のように設定します。

- 「ローカル・オブジェクト・マスク」を %OBJECTに変更します。

- 「コンテキスト」タブで次のように設定します。

- 新しい行を作成します。この行には、Globalという「コンテキスト」名の行が自動的に挿入されます。
この行の「論理スキーマ」の値は最初は「<未定義>」です。「<未定義>」のテキストを選択して、Oracle BAMの表示名に置換する必要があります。

- 新しい「論理スキーマ」の名前として、Oracle BAMターゲットの表示名(例: BAM_TARGET)を入力します。Oracle Data Integratorによって、論理スキーマが自動的に作成されます。

- 「OK」をクリックします。

57.5 Oracle BAMスキーマのリバース・エンジニアリング

特定のOracle BAMデータ・オブジェクトに対する操作を実行するには、その前に、Oracle Data IntegratorでOracle BAMスキーマを確認できる必要があります。そのためには、表57-3に記載されているRKM Oracle BAMナレッジ・モジュールを使用して、Oracle BAMスキーマ(つまり、Oracle BAMのすべてのデータ・オブジェクト)をリバース・エンジニアリングする必要があります。

Oracle BAMスキーマをリバース・エンジニアリングする手順は、次のとおりです。

1. 第57.4項「Oracle BAMターゲットの作成」で作成したOracle BAMターゲットで、モデルを作成します。

2. 「定義」タブで次の項目を構成します。

- テクノロジ: Oracle BAMターゲット

- 論理スキーマ: BAM_TARGET

3. 「リバース」タブで次の項目を構成します。

- カスタマイズしたリバースを選択します。

- コンテキスト: グローバル

- KMを選択します: RKM Oracle BAM

注意:

リバース・エンジニアリングはJDBCドライバを使用して実行されないため、データ・ストアを右クリックしてそのデータを表示することはできません。

4. 「リバース」をクリックしてリバース・エンジニアリングを開始します。
リバース・エンジニアリング・プロセスは、Oracle Data Integratorオペレータでその進行状況を表示して監視できます。

リバース・エンジニアリングでは、reverse.logファイルが生成されます。このログ・ファイルの名前と場所は、LOG_FILE_NAMEオプションで変更できます。

ナレッジ・モジュールの各オプションはこのタブで変更できます(オプションについては表57-4で説明します)。

5. リバース・エンジニアリングが完了すると、Oracle BAMスキーマのメタデータが、Oracle Data IntegratorデザイナのOracle BAMターゲット・ノードの下に表示されます。
ソース・データ・モデルおよびターゲット・データ・モデルを作成するユース・ケースを試行できます。その後、リバース・エンジニアリングを完了したら、関連するナレッジ・モジュールを使用してインタフェースを作成します。

57.6 Oracle Data Integrator外部データ・ソース定義の更新

Oracle Data Integrator用のOracle BAM統合ファイルを、適切に移入したプロパティ・ファイルとともにインストールした場合は、Oracle BAMで他の構成を実行する必要はありません。インストール・プロセス中に作成された2つの外部データ・ソース(EDS)定義には、Oracle BAMサーバーをOracle Data IntegratorのODI_MasterリポジトリとODI_Workリポジトリに接続するための適切な値が移入されます。これらのOracle Data Integrator固有のEDS定義は削除しないでください。

次の場合は、Oracle Data Integrator EDS定義を更新する必要があります。

- Oracle Data Integratorログイン資格証明を変更した場合。Oracle BAMアーキテクトでOracle Data Integrator EDS定義を更新する必要があります。

- ODI_MasterリポジトリまたはODI_Workリポジトリを初期インストール後に別のホストに移動した場合。Oracle BAMアーキテクトで対応するEDS定義を更新する必要があります。

57.6.1 Oracle Data Integrator外部データ・ソース定義の更新方法

Oracle Data Integrator外部データ・ソース定義を更新する手順は、次のとおりです。

1. Oracle BAMアーキテクトを開き、「外部データ・ソース」ページに移動します。

図57-1 Oracle BAMアーキテクトで「外部データ・ソース」ページを開く方法

「図57-1 Oracle BAMアーキテクトで「外部データ・ソース」ページを開く方法」の説明

2. 「ODI_Master」または「ODI_Work」を選択し、「編集」をクリックします。

図57-2 ODI_Master外部データ・ソースの編集

「図57-2 ODI_Master外部データ・ソースの編集」の説明

3. 必要に応じて「ログイン」、「パスワード」または「接続文字列」パラメータを更新し、「保存」をクリックします。

57.7 Oracle BAMアラートからのOracle Data Integratorシナリオの起動

Oracle BAMで作成したアラートで、指定した条件を満たす場合にOracle Data Integratorシナリオを起動できます。詳細は、F.3.10項「Oracle Data Integratorシナリオの実行」を参照してください。

適切な値を使用して次のファイルを手動で構成する必要があります。

- BAMServerConfig.xml

表57-5 BAMServerConfig.xmlの値

プロパティ

値

Datasource JNDI

jdbc/oracle/bam/adc

ODI User

SUPERVISOR

ログイン

Oracle Data Integratorマスター・リポジトリのアカウント・ユーザー名

ODI Password

welcome1

ODI作業リポジトリ名

WORKREP

ODI AgentHost

localhost

ODI Agent Port

8001

- BAMCommonConfig.xml
アプリケーションURL: http://localhost:9001

- BAMWebConfig.xml

表57-6 BAMWebConfig.xmlの値

プロパティ

値

ADCservername

localhost

ADC serverPort

9001

57.8 Oracle BAMが組み込まれたOracle Data IntegratorエージェントのデーモンまたはMicrosoft Windowsサービスとしての実行

Oracle BAM機能が組み込まれたOracle Data Integratorシナリオを実行するには、複数の方法があります。この項では、Oracle Data IntegratorエージェントをデーモンまたはMicrosoft Windowsサービスとして実行する場合のOracle BAMの構成方法について説明します。BAM-ODI 11gを使用している場合、これらの構成手順を無視できます。

1. Oracle BAMホストで、ORACLE_HOME\bam\ODI\tools\wrapper\confディレクトリに移動します。

2. そのディレクトリに格納されている2つのファイル(snpsagent.conf.bamとreadme.txt)を、ODI_HOME\tools\wrapper\confディレクトリにある、Oracle Data Integratorエージェントをデーモンまたはサービスとして実行するホストにコピーします。

3. そのディレクトリでreadme.txtの説明に従って、Oracle Data IntegratorエージェントをOracle BAMとともに実行するように構成します。

agent.bat(またはagent.sh)ファイルの実行により、他のOracle Data Integratorアプリケーション(デザイナ、トポロジ、オペレータなど)の場合と同様に環境変数が取得されます。agentスクリプトを実行するOracle Data Integratorディレクトリに対してOracle Data Integratorの統合インストールが実施されている場合は、Oracle Data Integratorエージェントをスタンドアロン・アプリケーション、デーモンまたはサービスとして実行するために必要な追加ステップはありません。

57.9 Oracle BAMとOracle Data Integratorとの統合のためのインストール・ファイル

表57-7では、BAM-ODIインストールに重要なファイルをリストして説明します。

表57-7

ディレクトリ

ファイル名

説明

11gで新たに導入されたか。11gより前に存在していたか。名前が変更されたか。

./bin

bam-odi-configuration.sh

メイン・シェル・スクリプト: ユーザーはこれを呼び出してインストールを開始します。このスクリプトによつて、それがどのサーバー・プラットフォームにインストールされているのか(WeblogicまたはWebSphere)が判別され、そのサーバー・プラットフォームに基づいてサブスクリプトがコールされます。

既存

./bin

bam-odi-config-was.sh

BAMがインストールされているサーバー・プラットフォームがWebSphereである場合に、bam-odi-configuration.shによってコールされるシェル・スクリプト。現在、これはODI 10gでのみ動作します。

既存

./bin

bam-odi-config-wls.sh

BAMがインストールされているサーバー・プラットフォームがWeblogicである場合に、bam-odi-configuration.shによってコールされるシェル・スクリプト。これによって、構成ディレクトリ内の構成ファイルbam-odi-configuration.propertiesから値が読み込まれます。環境変数ODI_VERSIONの値に従って、この値に基づいてサブスクリプトがコールされます。

新規

./bin

bam-odi10g-config-wls.sh

ODI_VERSION = 10gである場合に、bam-odi-config-wls.shによってコールされるシェル・スクリプト。このスクリプトは、その名前以外は、このプロジェクトで変更されていません。このスクリプトは、javaコード(oracle-bam-etl.jar内に配置されている)およびantスクリプトbam-odi10g-config.xml (その名前以外は変更されていない)を呼び出すことによってインストールを実行します。このファイルの旧称は、bam-odi-config-wls.shです。

名前変更済

./bin

bam-odi11g-config-wls.sh

ODI_VERSION = 11gである場合に、bam-odi-config-wls.shによってコールされるシェル・スクリプト。これは、このプロパティの新規スクリプトです。これによって、このインストールに機能を追加するためにリファクタされているoracle-bam-etl.jarのjavaコードが実行されます。また、antスクリプトbam-odi11g-config.xml (これも新規スクリプト)も実行されます。

新規

./bin

deploy_shared_library.sh

oracle-bam-odi_11.1.1.jar (BAM-ODI共有ライブラリ)をデプロイするシェル・スクリプト。このスクリプトは、BAMユーザー名およびパスワードを必要とし、オプションで、それがデプロイされているアプリケーション・サーバーのserverNameおよびserverPortを取ります。

新規

./bin

undeploy_shared_library.sh

oracle-bam-odi_11.1.1.jar (BAM-ODI共有ライブラリ)をデプロイするシェル・スクリプト。このスクリプトは、BAMユーザー名およびパスワードを必要とします。

新規

./config

bam-odi-configuration.properties

インストーラ・スクリプトによって読み込まれるプロパティ・ファイル。その変数ODI_VERSIONは、ODI 10gとODI 11gのいずれのバージョンのBAM-ODI統合をインストールするのかを示します。これは新しい変数であるため、プロパティ・ファイルにこれが存在しない場合は、インストーラによってODI 10g用にインストールすると想定されます。

既存

./config

bam-odi10g-config.xml

bam-odi10g-config.shによって呼び出されるantスクリプト。このスクリプトは、その名前以外は、このプロジェクトで変更されていません。このファイルの旧称は、bam-odi-config.xmlです。

名前変更済

./config

bam-odi11g-config.xml

bam-odi11g-config.shによって呼び出されるantスクリプト。これは、新しいスクリプトであり、これによってインストール・プロセスの残りの部分が実行されます。

新規

/modules/oracle-bam_11.1.1

oracle-bam-adc-ejb.jar

oracle-bam-common.jar

oracle-bam-etl.jar

oracle-bam-odi-config.jar

oracle-bam-odi_11.1.1.jar

これらは、BAM-ODI統合を実行するために必要なoracle jarです。最初の4つのjarが、ODIクライアントのクラスパスにコピーされます。最後のjarは、ODI J2EEエージェントによってアクセスされるアプリケーション・サーバー上にデプロイされるBAM-ODI共有ライブラリです。

既存

既存

既存

新規

新規

58 外部データ・ソースの作成

この章では、Oracle Business Activity Monitoring(Oracle BAM)アーキテクトの外部データ・ソース(EDS)を作成して管理する方法について説明します。ここでは、EDSを使用してデータ・オブジェクトを作成する方法、およびOracle Business Intelligence Enterprise Editionで使用するようにEDS定義を構成する方法について説明します。

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

- 第58.1項「外部データ・ソースの概要」

- 第58.2項「外部データ・ソースの作成」

- 第58.3項「外部データ・ソースの例」

- 第58.4.1項「ユースケース: Oracle Business Intelligence Enterprise Editionに対するEDSの作成」

58.1 外部データ・ソースの概要

外部データ・ソース(EDS)とは、外部データベースへの接続のことです。通常、EDSには、変更されることが少ないデータまたは大きすぎてOracle BAMアクティブ・データ・キャッシュ(ADC)に収まらないデータが格納されます。

Oracle BAMのEDS定義は、外部データへのポインタとして機能します。たとえば、顧客管理システム内の顧客コードに基づいて顧客名を参照する場合があります。顧客名とコードのマッピングは非常に静的であるため、その外部データをOracle BAMに取り込む必要はありません。

EDS定義は、ICommandを使用してエクスポートおよびインポートできますが、コンテンツは、ICommandやOracle BAMアーキテクトを使用してインポートしたり、編集することはできません。

パスワードの入力は、クリアテキストで行います。DSN(データ・ソース名)を使用することはできません。

既存のEDSを表示する手順は、次のとおりです。

- Oracle BAMアーキテクトの機能リストから「外部データ・ソース」を選択します。

図58-1 Oracle BAMアーキテクトの機能リスト

「図58-1 Oracle BAMアーキテクトの機能リスト」の説明

58.2 外部データ・ソースの作成

Oracle BAM外部データ・ソースは、Oracle BAMアーキテクトを使用して、作成、編集および削除します。

58.2.1 外部データ・ソースの作成方法

EDSを定義する手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「外部データ・ソース」を選択します。

2. 「作成」をクリックします。

3. EDSの名前および説明を入力します。

注意:

Oracle BAMオブジェクト名(データ・オブジェクト名、レポート名、エンタープライズ・メッセージ・ソース名など)に一重引用符または二重引用符が含まれていると、実行時エラーが発生します。

Oracle BAMオブジェクト名には、一重引用符または二重引用符を含めないでください。

4. 「ドライバ」に、たとえばOracle用のoracle.jdbc.driver.OracleDriverを入力します。

5. 「ログイン」および「パスワード」フィールドに、データベース・ユーザーの資格証明を入力します。

6. 「接続文字列/URL」を入力します。次に例を示します。

jdbc:oracle:thin:@db_host_name:db_port:db_instance

58.2.2 Oracle Data Integrator外部データ・ソースに関する注意事項

Oracle BAMとOracle Data Integratorの統合ファイルをインストールすると、Oracle BAMアーキテクトでは、ODI_MasterとODI_Workの2つのEDS定義が作成されます。これらのEDS定義はOracle BAMアーキテクトから削除できません。また、その構成はOracle Data Integratorのホストを更新する場合を除いて変更しないでください。

58.2.3 外部データ・ソースの編集方法

EDSを編集する手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「外部データ・ソース」を選択します。

2. 編集するEDSを選択します。
EDSのプロパティが表示されます。

3. 「編集」を選択します。

4. 変更を行い、「保存」をクリックします。

58.2.4 外部データ・ソースの削除方法

注意:

Oracle BAMアーキテクトに表示されているEDSのODI_MasterとODI_Workは削除しないでください。これらのEDS定義は、Oracle BAMとOracle Data Integrator間の統合で使用されます。

EDSを削除する手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「外部データ・ソース」を選択します。

2. 削除するEDSを選択します。
データ・ソースのプロパティが表示されます。

3. 「削除」を選択します。

4. 「OK」をクリックして、データ・ソースを削除することを確認します。
データ・ソースが削除されます。

58.3 外部データ・ソースの例

この例では、SCOTTユーザー・アカウントと、OracleデータベースのEMP表を使用します。この例を進める前に、アカウントのロックを解除する必要がある場合があります。

ステップ1: EDSの作成

1. Oracle BAMアーキテクトの機能リストから「外部データ・ソース」を選択します。

2. 「作成」をクリックします。

3. 「外部データ・ソース名」フィールドにmyDataSourceと入力します。

4. 「説明」フィールドにMy Example External Data Sourceと入力します。

5. 「ドライバ」フィールドにMicrosoft ODBC for Oracleと入力します。

6. 「ログイン」フィールドにscottと入力し、「パスワード」フィールドにtigerと入力します。
このサンプル・アカウントは、Oracleデータベースのインストールに付属しています。このサンプル・アカウントがない場合は、新しいアカウントを作成して、このサンプルで使用できます。

7. 「接続文字列/URL」にserver=net_service_nameと入力します。
このエントリは、tnsnames.oraファイルで定義されたネット・サービス名である必要があります。

8. 「保存」をクリックします。

9. 「続行」をクリックします。
EDS情報が画面に表示されます。

ステップ2: EDSを使用したデータ・オブジェクトの作成

1. Oracle BAMアーキテクトの機能リストから「データ・オブジェクト」を選択します。

2. 「データ・オブジェクトの作成」をクリックします。

3. 「新規データ・オブジェクトの名前」フィールドにEmployeesと入力します。

4. 「新規データ・オブジェクトの場所」フィールドのスラッシュ(/)はそのままにします。
データ・オブジェクトが、最上位レベルの「データ・オブジェクト」フォルダに表示されます。

5. 「ヒント・テキスト」フィールドは空白のままにします。

6. 「説明」フィールドにOracle Database Sample EMP Tableと入力します。

7. 「外部データ・ソース」チェック・ボックスを選択します。

8. 「外部データ・ソース」リストからmyDataSourceを選択します。

9. 「外部表名」フィールドにempと入力します。

10. 次のフィールドをデータ・オブジェクトに追加します。

表58-1 Employeesデータ・オブジェクトのフィールド

フィールド

外部フィールド名

フィールド・タイプ

ename

ename

文字列

empno

empno

整数

job

job

文字列

mgr

mgr

整数

hiredate

hiredate

日時

sal

sal

小数

comm

comm

小数

deptno

deptno

整数

表で指定されていないフィールドの属性は、デフォルト設定のままにします。

11. 「データ・オブジェクトの作成」をクリックします。

12. 「続行」をクリックします。

13. 「コンテンツ」をクリックして、データ・オブジェクトのコンテンツを表示します。
Employeesデータ・オブジェクトのデータは、OracleデータベースのサンプルEMP表と一致しているはずです。

58.4 ユース・ケース

この項では、いくつかのユース・ケースについて説明します。

58.4.1 ユースケース: Oracle Business Intelligence Enterprise Editionに対するEDSの作成

次の手順で、Oracle BAMアーキテクトでEDS定義を構成し、Oracle Business Intelligence Enterprise Editionで使用します。

1. bijdbc.jarファイルを取得し、Oracle WebLogic Serverのクラスパスに追加します。
次のWEBLOGIC_CLASSPATHにJARを追加します。

WLS_HOME/wlserver 10.3/common/bin/commEnv.cmd

2. Oracle BAMアーキテクトで次の詳細を使用して、EDSを作成します。
ドライバ: oracle.bi.jdbc.AnaJdbcDriver

ログイン: Oracle Business Intelligenceサーバーに対するユーザー名

パスワード: Oracle Business Intelligenceサーバーに対するパスワード

接続文字列/URL:
jdbc:oraclebi://host_name:port_number/catalog=catalog_name;

例: jdbc:oraclebi://bihost:9703/catalog=Paint;

EDS構成の例は、「ステップ1: EDSの作成」を参照してください。

3. EDSに基づいてデータ・オブジェクトを作成します。例については、「ステップ2: EDSを使用したデータ・オブジェクトの作成」を参照してください。

58.4.2 ユース・ケース: Sybaseに対する外部データ・ソースの作成

標準データ・オブジェクト・ユーザーを使用してSybase内にEDSを作成する場合、データ・オブジェクト内の表を表示できなくなります。

Oracle BAMでEDSを使用してデータ・オブジェクト表をリストできるようにするには、このユース・ケースで説明する手順を実行します。

Sybaseに対して外部データ・ソースを作成する手順は、次のとおりです。

1. 新規ユーザーを作成します。

2. EDSを作成する対象となる表に新規ユーザーを関連付けます。

3. ログインとしてこの新規ユーザーを使用してEDSを作成します。

4. 新しく作成したEDSに基づいてデータ・オブジェクトを作成します。
これで、Oracle BAMで、データ・オブジェクト内の表をリストできるようになります。

5. ファイルjconn4.jar (SybaseドライバJARファイル)を入手し、それをOracle WebLogic Serverクラス・パスに追加します。
次のWEBLOGIC_CLASSPATHにJARを追加します。

WLS_HOME/wlserver 10.3/common/bin/commEnv.cmd

6. EDSを次のように構成します。
ドライバ: weblogic.jdbc.sybase.SybaseDriver@ Login: <User> (dbo以外)@ 例: jdbc:weblogic:sybase://machine.us.example.com:5000;databaseName=bamtest

ログイン: <User> (dbo以外)

パスワード: 前述のユーザーの<Password>

接続文字列:

jdbc:weblogic:sybase://sybasehost:sybaseport;databaseName=database name

58.4.3 ユース・ケース: Microsoft SQL Serverに対する外部データ・ソースの作成

標準データ・オブジェクト・ユーザーを使用してMicrosoft SQL Server内にEDSを作成する場合、データ・オブジェクト内の表を表示できなくなります。

Oracle BAMでEDSを使用してデータ・オブジェクト表をリストできるようにするには、このユース・ケースで説明する手順を実行します。

Microsoft SQL Serverに対して外部データ・ソースを作成する手順は、次のとおりです。

1. 新規ユーザーを作成します。

2. EDSを作成する対象となる表に新規ユーザーを関連付けます。

3. ログインとしてこの新規ユーザーを使用してEDSを作成します。

4. 新しく作成したEDSに基づいてデータ・オブジェクトを作成します。
これで、Oracle BAMで、データ・オブジェクト内の表をリストできるようになります。

59 Oracle BAM Webサービスの使用

この章では、Oracle Business Activity Monitoring(Oracle BAM) Webサービス(DataObjectOperations、DataObjectDefinition、ManualRuleFireなど)を使用して、リアルタイムのチャートやダッシュボードで使用するためのデータをOracle BAMサーバーにパブリッシュするアプリケーションを作成する方法について説明します。

この章には次の項が含まれます:

- 第59.1項「Oracle BAM Webサービスの概要」

- 第59.2項「DataObjectOperations Webサービスの使用」

- 第59.3項「DataObjectDefinition Webサービスの使用」

- 第59.4項「ManualRuleFire Webサービスの使用」

- 第59.5項「ICommand Webサービスの使用」

59.1 Oracle BAM Webサービスの概要

Oracle BAM Webサービスを使用すると、リアルタイムのチャートやダッシュボードで使用するためのデータをOracle BAMサーバーにパブリッシュするアプリケーションを作成できます。標準のWebサービスと通信できるすべてのクライアントでは、これらのAPIを使用してOracle BAMにデータをパブリッシュできます。Oracle BAM Webサービス・インタフェースによって、Oracle BPEL Process ManagerやOracle Mediatorなどの他のコンポーネントにOracle BAMが統合され、SOAコンポジット・アプリケーションの開発が容易になります。

注意:

このオプションは、複雑なメッセージ処理、データを補足するためのOracle BAMアクティブ・データ・キャッシュでの参照の実行、またはスター・スキーマを設定するための初期一括アップロードには使用できません。

Oracle BAMサーバーのデータ・オブジェクトは、Oracle BAM Webサービスを使用して利用できます。ICommand Webサービスを使用して利用できる他のメタ・オブジェクトもいくつかあります。

外部Webサービスは、Oracle BAMアラート・ルールによってコールできます。詳細は、第60.2項「アラート・ルールの作成」を参照してください。

Oracle BAMには、次に示すタイプ付きでない静的なWebサービスAPIが用意されています。

- DataObjectOperations10131を使用すると、Oracle BAM 10.1.3.xサーバー用に開発されたクライアントで、DataObjectOperationsへのWebサービス・コールをOracle BAM 11gサーバー上で実行できます。

- DataObjectOperationsByIDを使用すると、開発者は、それぞれのID(例: _Call_Center)で、データ・オブジェクトと通信できます。

- DataObjectOperationsByNameを使用すると、開発者は、それぞれの表示名(例: Call Center)で、データ・オブジェクトと通信できます。

- DataObjectDefinitionは、データ・オブジェクトの定義を取得、作成、削除および更新する操作を実行します。

- ManualRuleFireは、Oracle BAMアクティブ・スタジオで作成されたルールを起動するために他のOracle BAMサービスによって使用されます。

- ICommandは、Oracle BAMサーバーのアイテムに対して様々な操作を実行する一連のコマンドを提供する、DOSコマンドライン・ユーティリティです。ICommand Webサービスは、すべてのICommand機能をWebサービスを介して公開します。

これらのサービスは、WSILインタフェースを使用してOracle BAMサーバー内で検出できます。

59.2 DataObjectOperations Webサービスの使用

DataObjectOperations Webサービスを使用すると、データ・オブジェクト内の行に対して、挿入、更新、削除およびアップサートを実行することによって、Oracle BAMサーバーのデータ・オブジェクトを操作できます。

DataObjectOperations Webサービス・インタフェースでは、次の操作がサポートされています。

- バッチでは、データ・オブジェクトに対してバッチ操作が実行されます。バッチは、DataObjectOperationsByName Webサービスに対してはサポートされていません。

- 「削除」では、データ・オブジェクトから行が削除されます。

- 取得では、XMLペイロードの仕様ごとにデータ・オブジェクトから詳細がフェッチされます。取得はDataObjectOperationsByName Webサービスでのみ使用できます。

- 「挿入」では、データ・オブジェクトに行が追加されます。

- 「アップサート」では、データ・オブジェクトに行が存在する場合は、既存の行に新規データが挿入されます。行が存在しない場合は、新規行が作成されます。

- 「更新」では、データ・オブジェクト内の既存の行に新規データが挿入されます。

リクエスト・メッセージとレスポンス・メッセージは、使用する操作によって異なります。各Webサービスでサポートされている操作の使用方法については、E.1項「DataObjectOperations10131」、E.2項「DataObjectOperationsByName」およびE.3項「DataObjectOperationsByID」を参照してください。

59.2.1 DataObjectOperations Webサービスの使用方法

DataObjectOperations Webサービスを使用するには、Oracle JDeveloperでアプリケーションにWebサービス・プロキシを作成します。

DataObjectOperations WebサービスのWeb Services Description Language(WSDL)ファイルは、Oracle BAM Webサービスがインストールされているシステム上の次のURLで使用できます。

http://host_name:7001/OracleBAMWS/Services/DataObject/DataObjectOperations.asmx?WSDL

http://host_name:7001/OracleBAMWS/WebServices/DataObjectOperationsByID?WSDL

http://host_name:7001/OracleBAMWS/WebServices/DataObjectOperationsByName?WSDL

注意:

管理サーバー上のOracle BAM Webサービスのデフォルト・ポートは7001です。管理対象サーバーのデフォルトのポート番号は9001です。

作成したWebサービス・プロキシは、図59-1に示すように、「アプリケーション・ナビゲータ」では、プロジェクトの「アプリケーション・ソース」フォルダの下に表示されます。

図59-1 「アプリケーション・ソース」内のDataObjectOperations Webサービス・プロキシ

「図59-1 「アプリケーション・ソース」内のDataObjectOperations Webサービス・プロキシ」の説明

59.3 DataObjectDefinition Webサービスの使用

DataObjectDefinition Webサービスを使用すると、Webサービス・クライアントで、データ・オブジェクト定義を作成、更新、削除および取得できます。

DataObjectDefinition Webサービスでは、次の操作がサポートされています。

- 「作成」では、データ・オブジェクトが作成されます。詳細は、E.4.1項「作成」を参照してください。

- 「削除」では、サーバーからデータ・オブジェクトが削除されます。詳細は、E.4.2項「削除」を参照してください。

- 取得では、既存のデータ・オブジェクトの定義が返されます。詳細は、E.4.3項「取得」を参照してください。

- 「更新」では、データ・オブジェクトの定義が変更されます。詳細は、E.4.4項「更新」を参照してください。

リクエスト・メッセージとレスポンス・メッセージは、使用する操作によって異なります。詳細は、E.4項「DataObjectDefinitionの操作」を参照してください。

59.3.1 DataObjectDefinition Webサービスの使用方法

DataObjectDefinition Webサービスを使用するには、Oracle JDeveloperでアプリケーションにWebサービス・プロキシを作成します。

DataObjectDefinition WebサービスのWSDLファイルは、Oracle BAM Webサービスがインストールされているシステム上の次のURLで使用できます。

http://host_name:7001/OracleBAMWS/WebServices/DataObjectDefinition?WSDL

注意:

管理サーバー上のOracle BAM Webサービスのデフォルト・ポートは7001です。管理対象サーバーのデフォルトのポート番号は9001です。

作成したWebサービス・プロキシは、図59-2に示すように、「アプリケーション・ナビゲータ」では、プロジェクトの「アプリケーション・ソース」フォルダの下に表示されます。

図59-2 「アプリケーション・ソース」内のDataObjectDefinition Webサービス・プロキシ

「図59-2 「アプリケーション・ソース」内のDataObjectDefinition Webサービス・プロキシ」の説明

59.4 ManualRuleFire Webサービスの使用

ManualRuleFire Webサービスを使用すると、Oracle BAMサーバーでルールを起動できます。FireRuleByNameが使用可能な操作です。詳細は、E.5項「ManualRuleFireの操作」を参照してください。

59.4.1 ManualRuleFire Webサービスの使用方法

ManualRuleFire Webサービスを使用するには、Oracle JDeveloperでアプリケーションにWebサービス・プロキシを作成します。

ManualRuleFire WebサービスのWSDLファイルは、Oracle BAM Webサービスがインストールされているシステム上の次のURLで使用できます。

http://host_name:7001/OracleBAMWS/WebServices/ManualRuleFire?WSDL

注意:

管理サーバー上のOracle BAM Webサービスのデフォルト・ポートは7001です。管理対象サーバーのデフォルトのポート番号は9001です。

作成したWebサービス・プロキシは、「アプリケーション・ナビゲータ」では、プロジェクトの「アプリケーション・ソース」フォルダの下に表示されます。

59.5 ICommand Webサービスの使用

ICommandは、HTTPを介してICommand機能と通信する必要があるアプリケーション開発者用のWebサービスとして使用できます。

ICommand Webサービスには、コマンドライン・ユーティリティとほとんど同じ機能が含まれています。たとえば、次の操作に使用できます。

- データ・オブジェクトの削除

- データ・オブジェクトへの行のインポート

- レポートのエクスポート

主な相違点は、Webサービスではリモート・システム上のファイルにアクセスできないということに起因しています。そのため、importコマンドまたはexportコマンドを使用する場合に、ファイル名を渡すことができません。

かわりに、importコンテンツをインラインで渡す必要があります。同様に、exportコンテンツをインラインで受信します。

通常、importおよびexport以外のコマンドは、コマンドライン・ユーティリティの場合と同様に動作します。

ICommandで提供されているコマンドおよびパラメータの詳細は、付録G「Oracle BAM ICommandの操作とファイル・フォーマット」を参照してください。

ICommand Webサービスには、Batchと呼ばれる単一のメソッドが含まれています。これは1つの入力パラメータを持ち、このパラメータは一連のコマンドが含まれた文字列で、G.3項「コマンド・ファイルのフォーマット」で説明されている構文を使用します。戻り値は、各コマンドの実行結果が含まれた文字列で、G.4項「ログ・ファイルのフォーマット」で説明されているログ構文で返されます。

59.5.1 ICommand Webサービスの使用方法

ICommand WebサービスのWSDLファイルは、Report Serverがインストールされているシステムで使用できます。次のURLにあります。

http://host_name:7001/OracleBAMWS/WebServices/ICommand?WSDL

注意:

管理サーバー上のOracle BAM Webサービスのデフォルト・ポートは7001です。管理対象サーバーのデフォルトのポート番号は9001です。

例59-1 データ・オブジェクトの削除(入力)

<OracleBAMCommands>
<Delete type="dataobject" name="/test123"/>
</OracleBAMCommands>

60 Oracle BAMアラートの作成

この章では、Oracle Business Activity Monitoring(Oracle BAM)のアラートを作成して使用する方法について説明します。ここでは、アラートによって起動されるイベントや条件を指定するルールの定義、アラート・ルールへのメッセージの組込み、依存ルールのあるネストされたルールの管理、および外部アクションを使用したルールのカスタム・アクションの作成を行う方法について説明します。

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

- 第60.1項「アラートの作成の概要」

- 第60.2項「アラート・ルールの作成」

- 第60.3項「テンプレートからのアラート・ルールの作成」

- 第60.4項「メッセージを含むアラート・ルールの作成」

- 第60.5項「複合アラートの作成」

- 第60.6項「アラート履歴の使用」

- 第60.7項「Webサービスの起動によるアラートの起動」

- 第60.8項「外部アクションのコール」

- 第60.9項 「外部電子メール・アカウントへのアラートの送信」

60.1 アラートの作成の概要

アラートは、指定されたイベントと条件のセット(ルールと呼ばれる)によって起動されます。アラートは、レポート内のデータ変更によって起動されるようにしたり、毎日、毎時または設定された間隔でユーザーにレポートを送信するために使用できます。アラート・ルールにおけるイベントには、期間、特定の時間、または特定のレポート内の変更を指定できます。条件に応じて、アラート・ルールを特定の時間または日付の間に発生するイベントに制限できます。イベントおよび条件の結果として、電子メールを介してユーザーにレポートを送信できます。

Oracle BAMアーキテクトおよびOracle BAMアクティブ・スタジオの両方のWebアプリケーションで、アラートを作成して表示できます。Oracle BAMアーキテクトでは、図60-1に示すように、機能リストから「アラート」を選択します。Oracle BAMアクティブ・スタジオでは、図60-2に示すように、「アラート」タブを選択します。

図60-1 Oracle BAMアーキテクトの機能リスト

「図60-1 Oracle BAMアーキテクトの機能リスト」の説明

図60-2 Oracle BAMアクティブ・スタジオの機能タブ

「図60-2 Oracle BAMアクティブ・スタジオの機能タブ」の説明

Oracle BAMアーキテクトでは、図60-3に示すように、アラートが表で表示され、この表の「アラート所有者」列にアラートを作成したユーザーが表示されることがあります。「アラート所有者」列は、現在のユーザーが管理ロールのメンバー(つまり、管理者ユーザー)である場合にのみ表示されます。管理者ユーザーは、自分が作成したアラートと他のユーザー(管理者および管理者以外)が作成したアラートを表示できます。

図60-3 「アラート所有者」列を含むアラート表

「図60-3 「アラート所有者」列を含むアラート表」の説明

Oracle BAMアクティブ・スタジオでは、アラートが「アラート・ルール」表に表示され(図60-4)、この表の「最終起動日」列にアラート・ルールが最後に起動された時刻が表示されます。Oracle BAMアーキテクトと同様に、各アラート名の横には、そのステータスを示すアイコン(表60-1を参照)が表示され、管理者以外のユーザーでは自分が作成したアラートのみが表示されます。現在のユーザーが管理者ユーザーである場合は、表にすべてのアラートが表示され、「アラート所有者」列にアラートを作成したユーザーが表示されます。

図60-4 Oracle BAMアクティブ・スタジオの「アラート・ルール」表

「図60-4 Oracle BAMアクティブ・スタジオの「アラート・ルール」表」の説明

表60-1 アラート・ルールのアイコン

アイコン

説明

「標準」は、アラートがアクティブであり、ルールに指定した条件に従って起動されることを示しています。

無効は、エラーによって、アラートが孤立または不完全な状態になっていることを示します。このアイコンは、アラートがイベント・エンジンに正しくロードできない場合に表示されます。ルールを修正する必要がある場合があります。

たとえば、レポートが削除され、そのレポートに基づいたアラートがまだ存在する場合、そのアラートは正しくロードできません。

このアイコンは、ルールがイベント・エンジンに(再起動時に)ロードされた場合のみ表示されます。このアイコンとともに表示されるアラートは、編集して修正するまで起動されません。

期限切れは、アラートが再度起動されないことを示します。このアイコンは、1回のみ起動される時間ベースのアラートに、そのアラートが起動された後で表示されます。ただし、これらのアラートは編集して再使用でき、状態を「標準」にリセットできます。

非アクティブのアラートと期限切れのアラートでは動作が異なります。アラートを非アクティブ化できるのは実行中のみです。この動作は、ユーザーが一定期間アラートを受信しないようにするが、適切な時期にアラートをアクティブ化する機能は保持しておく場合に便利です。アクティブではなくても有効であるアラート(「標準」アイコンで表示されるアラート)は、再度アクティブ化できます。

期限切れのアラートは、指定した条件に対して実行されたアラートであり、再実行はされません。再実行のためにアクティブ化することはできません。ただし、期限切れのアラートを再利用する場合は、アラートをダブルクリックし、有効なルールになるように定義を更新して、アラート・ルール定義を保存します。アラートは再ロードされ、再度起動できる状態になります。

注意:

Oracle BAMサーバー・システムで時間またはタイムゾーンを変更した場合は、Oracle BAMサーバー・アプリケーションを再起動する必要があります。再起動しないと時間ベースのアラートが失敗します。

60.2 アラート・ルールの作成

ルールでは、アラートが起動するイベントや条件を指定します。

注意:

アラートは、アラートが定義(または再有効化)された時点以降にそのトリガー・イベント条件が満たされた場合にのみ起動されます。アラートが定義される前または無効化されている間にその条件が満たされていた場合は起動されません。

60.2.1 アラート・ルールの作成方法

Oracle BAMアラート・ルールを作成する手順は、Oracle BAMアーキテクトとOracle BAMアクティブ・スタジオで同じです。

ルールを作成する手順は、次のとおりです。

1. Oracle BAMアーキテクトの機能リストから「アラート」を選択します。
Oracle BAMアクティブ・スタジオでは、「アラート」タブを選択します。

2. 「新規アラートの作成」をクリックします。
「ルールの作成および編集」ダイアログが開きます。

3. 「ルールの作成」をクリックします。

4. ルールの名前を入力します。

注意:

Oracle BAMオブジェクト名(データ・オブジェクト名、レポート名、エンタープライズ・メッセージ・ソース名など)に一重引用符または二重引用符が含まれていると、実行時エラーが発生します。

Oracle BAMオブジェクト名には、一重引用符または二重引用符を含めないでください。

5. アラートを起動するイベントを選択します。
各イベントについては、F.1項「イベント」を参照してください。

6. 「次へ」をクリックします。

7. 必要に応じて、1つ以上の条件を選択します。
各条件については、F.2項「条件」を参照してください。

8. 1つ以上のアクションを選択します。各アクションについては、F.3項「アクション」を参照してください。

9. ルール式で下線付きの各アイテムをクリックし、値を指定してアラート・ルールを完成します。
たとえば、「レポートの選択」をクリックし、開いているダイアログ・ボックスでレポートを選択します。定義する他の値には、レポートを受信するユーザー名、日付と時間、時間間隔、特定のフィールドのフィルタ式などがあります。条件またはアクションの追加を続行するには、式の最後の行をクリックし、別の条件またはアクションを選択します。

「戻る」および「次へ」ボタンをクリックして、イベントのページとアクションや条件が表示されているページ間を移動し、作成済のアラート・ルール式の該当部分を変更できます。

10. 「頻度の制限」ボタンをクリックすると、アラートの起動頻度に制限を設定できます。
デフォルトでは、アラートの頻度制限は5秒です。数値を入力し、時間の単位(秒、分、時間など)を選択して「OK」をクリックします。頻度制限を無効にするには、「制限の有効化」チェック・ボックスの選択を解除します。頻度制限の詳細は、F.4項「頻度制限」を参照してください。

11. アラート・ルールから行を削除するには、「この式の削除」をクリックします。

12. 「OK」をクリックします。
アラート・ルールがリストに追加され、アクティブになります。

60.2.2 アラートのアクティブ化の方法

アラート・ルールは、作成すると自動的にアクティブになります。アラートを削除しないで一時的に非アクティブな状態にする場合は、「アクティブ化」チェック・ボックスの選択を解除することで無効にできます。

管理ロール・ユーザーは、自分のアラートと、他の管理者や管理者以外のユーザーが作成したアラートのアクティビティ・ステータスを変更できます。

アラート・ルールのアクティビティ・ステータスを変更する手順は、次のとおりです。

1. 変更するアラートを選択します。

2. アラート・ルールの「アクティブ化」チェック・ボックスを選択します。

チェック・ボックスが選択されている場合、アラート・ルールがアクティブであることを意味します。

チェック・ボックスの選択が解除されている場合、アラート・ルールが非アクティブであることを意味します。

「アクティブ化」チェック・ボックスを選択しても、アラートは起動されません。指定したイベントが発生した場合にアラートが起動されるように、ルールが有効化されるのみです。

アラート・アイコンに感嘆符が表示された場合、アラートが起動済で再度有効にならないか、またはアラートが参照するアイテムが欠落していて起動できないことを示しています。

60.2.3 アラート・ルールの変更方法

テンプレートから作成したアラート・ルールを変更する場合は、テンプレートを使用せずにアラート・ルールを作成する場合と同様に、新しい行を追加し、条件とアクションを選択できます。

別のユーザーによって作成されたアラートを管理ロール・ユーザーが変更した場合、アラートは元のアラート所有者の名前で保存されます。

アラート・ルールを変更する手順は、次のとおりです。

1. 編集するアラート・ルールを選択します。

2. 「アラート・アクション」リストで「編集」をクリックするか、「アクション」リストで「アラートの編集」をクリックします。
「ルールの作成および編集」ダイアログ・ボックスが表示されます。

3. アラートを変更して「OK」をクリックします。

60.2.4 アラートの削除方法

管理ロール・ユーザーは、自分のアラートと、他の管理者や管理者以外のユーザーが作成したアラートを削除できます。

アラートを削除する手順は、次のとおりです。

1. 削除するアラートを選択します。

2. 「アラート・アクション」リストで「削除」をクリックするか、「アクション」リストで「アラートの削除」をクリックします。
アラートを削除することを確認するダイアログ・ボックスが表示されます。

3. 「OK」をクリックします。
アラートが削除されます。

60.2.5 アラートの変更に関する注意事項

管理ロール・ユーザーは、すべてのアラート(つまり、自分が所有するアラートに加えて、他の管理者ユーザーや管理者以外のユーザーが作成したアラート)のアクティブ化または非アクティブ化、編集および削除を行うことができます。

管理者ユーザーが、管理者以外のユーザーのアラートでレポートの選択が含まれるアラートを編集する場合、「レポートの選択」ダイアログで(自分のレポートではなく)アラート所有者のレポートのみを表示して選択できます。Oracle BAMアーキテクトおよびOracle BAMアクティブ・スタジオでは、次のいずれかのイベント、条件またはアクションが含まれたアラートを編集するときに、レポートを選択するオプションが表示されます。

- レポートの変更時

- レポートのデータ・フィールドが特定の条件を満たす場合

- 電子メールでレポートを送信する場合

- 電子メールでレポートを送信し、特定の時間経過後別のユーザーにエスカレートする場合

- レポートへのハイパーリンクが含まれたメッセージを作成する場合

- パラメータ化されたメッセージを送信する場合

- データ・オブジェクトのすべての一致する行に対し、パラメータ化されたメッセージを送信する場合

たとえば、管理者ユーザーが、「レポートの変更時」イベントを使用する管理者以外のユーザーのアラートを編集する場合、「レポートの選択」ダイアログ(図60-5)で、(自分のレポートではなく)アラート所有者のレポートのみを表示して選択できます。同様に、「アラート・メッセージ - Webページ」ダイアログでメッセージを編集する場合、管理者ユーザーは、アラート所有者のレポートへのリンクのみをメッセージ本文で送信するために追加できます(図60-6)。

図60-5 「レポートの選択」ダイアログ

「図60-5 「レポートの選択」ダイアログ」の説明

図60-6 「アラート・メッセージ - Webページ」ダイアログ

「図60-6 「アラート・メッセージ - Webページ」ダイアログ」の説明

また、管理者以外のユーザーのアラートを「ルールの作成および編集」ダイアログで編集する場合、「ルールの式」ボックス(図60-7)で、管理者ユーザーが「<user name>として実行」オプションや他の管理者固有のオプションを追加することはできません。

図60-7 「ルールの作成および編集」ダイアログ

「図60-7 「ルールの作成および編集」ダイアログ」の説明

60.3 テンプレートからのアラート・ルールの作成

アラート・ルール・テンプレートは、一般的なユースケースに基づいて事前に選択された、イベントと条件の有効なグループです。

60.3.1 テンプレートからのアラート・ルールの作成方法

テンプレートからOracle BAMアラート・ルールを作成する手順は、Oracle BAMアーキテクトとOracle BAMアクティブ・スタジオで同じです。

テンプレートからアラート・ルールを作成する手順は、次のとおりです。

1. 「新規アラートの作成」をクリックします。
「ルールの作成および編集」ダイアログが開きます。

2. 「テンプレートからルールを作成」をクリックします。

3. アラート・ルールの名前を入力します。

4. リストからテンプレートを選択します。

5. 「ルールの式」ボックスで、下線付きの各アイテムをクリックし、値を指定してアラート・ルールを完成します。たとえば、「レポートの選択」をクリックし、開いているダイアログ・ボックスでレポートを選択します。定義する他の値には、レポートを受信するユーザー名、日付と時間、時間間隔、特定のフィールドのフィルタ式などがあります。

6. 「頻度の制限」をクリックすると、アラートを起動できる頻度を設定できます。デフォルトでは、アラートの頻度制限は5秒です。数値を入力し、時間の単位(秒、分、時間など)を選択して「OK」をクリックします。

7. 「このルールの変更」をクリックすると、テンプレートを使用せずにルールを変更できます。これによって、ルール作成におけるオプションが多くなります。

8. 「OK」をクリックします。
アラート・ルールがリストに追加され、アクティブになります。

60.4 メッセージを含むアラート・ルールの作成

メッセージを送信するアラート・ルールを作成できます。メッセージには、レポート名、レポートへのリンク、ユーザー名などの情報を含めることができます。また、メッセージには、イベントの発生時刻、イベントを起動したデータなど、アラートの起動時に設定される変数を含めることもできます。データ変数を使用するには、イベントがデータに基づいている必要があります。

60.4.1 メッセージを含むアラート・ルールの作成方法

メッセージを送信するアラート・ルールを作成できます。メッセージには、レポート名、レポートへのリンク、ユーザー名などの情報を含めることができます。また、メッセージには、イベントの発生時刻、イベントを起動したデータなど、アラートの起動時に設定される変数を含めることもできます。データ変数を使用するには、イベントがデータに基づいている必要があります。

メッセージを含むアラート・ルールを作成する手順は、次のとおりです。

1. アラート・ルールの作成を開始します。

2. アクション「電子メールでメッセージを送信」を選択します。

3. ルール式で、「メッセージの作成」をクリックします。
「アラート・メッセージ」ダイアログ・ボックスが表示されます。

4. 「件名」行に件名を入力します。

5. 「メッセージ・テキスト」ボックスにメッセージを入力します。

6. メッセージに特殊フィールドを含めます。
特殊フィールドは、「アラート・メッセージ」ダイアログ・ボックスの左下にあるボックスに表示されます。表示される特殊フィールドは、ダイアログ・ボックスの右側でレポートを選択すると変更されます。

特殊フィールドをメッセージに挿入する手順は、次のとおりです。

1. リストから特殊フィールドを選択します。

2. 「件名に挿入」または「テキストに挿入」をクリックします。

同じタイプの値を複数挿入できます。たとえば、様々なレポートへの複数のリンクを挿入できます。

- レポート名の送信: 選択されたレポートの名前を挿入します。

- レポート所有者の送信: 選択されたレポートの所有者名を挿入します。

- レポート・リンクの送信: 選択されたレポートへのリンクを挿入します。

- 変更済のレポート名: 変更されたレポートの名前を挿入します。

- 変更済のレポート所有者: 変更されたレポートの所有者名を挿入します。

- ターゲット・ユーザー: メッセージ受信者のユーザー名を挿入します。

- 送信日時: メッセージが送信された日時を挿入します。

7. 「OK」をクリックします。

60.5 複合アラートの作成

ネストされたルールを多くのアクションで作成したり、他のルールを起動する連鎖ルールを作成することができます。

次のような2つのタイプのルールを作成すると、ルールを連鎖関係にすることができます。

- 別のルールによって起動される依存ルール。

- 依存ルールを起動するアクションを持つルール。

60.5.1 依存ルールの作成方法

依存ルールを作成する手順は、次のとおりです。

1. イベント「このルールの起動時」を含むルールを作成します。このイベントに値は必要ありません。

2. アクション「ルールの起動」または「アクションが失敗した場合、ルールを起動」を含むルールを作成します。「アクションが失敗した場合、ルールを起動」は、ルールに含まれるすべてのアクションに適用されます。

3. アクションで、「ルールの選択」をクリックします。
「依存ルールの選択」ダイアログ・ボックスが表示されます。

4. 依存ルールを選択します。リストに表示されるのは、「このルールの起動時」イベントを含むルールのみです。

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

アクションが失敗した場合に対処するには、アクション「アクションが失敗した場合、ルールを起動」を追加します。たとえば、ルールがメッセージを送信することになっていても、なんらかの理由でメッセージが送信されない場合、別のルールを起動して通知を送信できます。

60.6 アラート履歴の使用

「アラート履歴」表は、Oracle BAMアクティブ・スタジオで使用できます。この表には、トリガーされたアラート・ルールとそのステータス・メッセージが表示されます。

図bam_alerthistmsg.gifの説明

60.6.1 「アラート履歴」リストの表示方法

Oracle BAMアクティブ・スタジオの「アラート」タブでは、アラート・アクティビティの最近の履歴を表示できます。「アラート履歴」リストには、最近起動された25のアラートが表示されます。

「アラート履歴」リストには、最近起動されたアラートの名前、アラートに関連付けられたメッセージ、アラートを作成したユーザー、およびアラート・ルールがトリガーされた日時が表示されます。

電子メールを送信するアラート・ルールの場合、「アラート履歴」リストにアラートが表示されるのは、現在ログインしているユーザーが電子メール・アラートの受信者である場合のみです。ユーザーがアラートの作成者であってもアラートの受信者でない場合、「アラート履歴」リストには表示されません。

ただし、アラートがアラート受信者へのメールの送信に失敗した場合、アラート所有者が「アラート履歴」ペインにエラー・メッセージを表示し、必要に応じて修正措置を実行できるように、メッセージはその所有者の名前で記録されます。存在しない名前をアラート受信者の名前として記録することはできません。

アラート履歴のメッセージ

「アラート履歴」リストの「メッセージ」列には、アラート配信の成功または失敗に関する情報が表示されます。アラートの配信に成功した場合は、メッセージの横に緑色のチェックマークが表示されます。アラートの配信に失敗した場合は、赤色のxアイコンと、ロードまたは処理時にアラートがどのように失敗したかを示すメッセージが表示されます。xアイコンをクリックすると、エラーに関する追加情報が表示されます。

アラートによって参照されているレポートが削除されても、ユーザーに警告はありません。アラートがトリガーされると、エラー・メッセージ「電子メールの送信中にエラーが発生しました」が表示されますが、削除されたレポートへの参照が壊れていることに関する具体的なエラーはありません。レポートの削除時にレポートがアラートによって参照されていないことを確認することが重要であり、そうしないとこのエラーが発生します。

60.6.2 「アラート履歴」リストの消去方法

多数のアラートがアクティブに起動しており、アラート履歴リストが大きくなった場合は、リストを消去できます。

アラート履歴リストを消去するには:

1. 「アラート」タブの「アクション」リストで、「アラート履歴のクリア」をクリックします。
アラート履歴リストの消去を確認するメッセージが表示されます。

2. 「OK」をクリックします。
アラート履歴リストが削除されます。消去後に起動された新しいアラートが、アラート履歴リストに表示されます。

60.7 Webサービスの起動によるアラートの起動

アラートのWebサービスを使用すると、アラートを手動で起動できます。詳細は、次を参照してください:

http://host:http_port/OracleBAMWS/WebServices/ManualRuleFire?wsdl

ルール名は、次の書式を使用して定義します。

username.alertname

注意:

アラートおよびレポート・リンクに使用されているOracle BAMアクティブ・スタジオのURLには、キャッシングやパフォーマンスを目的として、製品ビルド番号を使用した仮想ディレクトリが含まれています。このディレクトリはリンクに含める必要があり、このようなリンクは編集しないことをお薦めします。以前のバージョンのOracle BAMで作成されたリンクは、製品のアップグレード後は機能しません。アラートを編集するか、またはレポートのショートカットを再度コピーする必要があります。

60.8 外部アクションのコール

外部アクションのコールは、カスタム・アクションの開発に使用します。Oracle BAMが提供するアクションではユーザーの要件を満たすことができない場合は、この機能を使用してアクション・セットを拡張します。

外部で動作するアクションは、デフォルトではOracle BAMアラート・ユーザー・インタフェースに表示されません。これらのアクションをユーザー・インタフェースに表示するには、Oracle BAMへの登録が必要です。

このタスクを実行するには、EventEngineインタフェースを実装し、このインタフェースに基づいてアクションを開発する必要があります。これは、Javaコードを記述し、コンパイル済のコードをJARファイルにバンドルする必要があることを意味します。次に、Oracle BAMアーキテクトで、システム/アラート/外部アクション・データ・オブジェクトのアクションとしてそれを登録します。

外部アクションのコール・アクションでは、Webサービスを起動する必要はありません。このアクションは、11gより前のリリースではWebサービスをコールする方法で使用されましたが、Oracle BAM 11gでは、「Webサービスのコール」アクションに置き換わりました。「Webサービスのコール」アクションでは、より高度で動的なWebサービス・クライアントが使用され、実行時にWSDLを読み取ることによってサービスを起動できます。

60.9 外部電子メール・アカウントへのアラートの送信

Oracle BAM共通構成ファイルでプロパティが設定されている場合、Oracle BAMからのアラートを、Oracle BAMで認識されていない電子メール・アカウントに送信できます。

この機能は、「電子メールでレポートを送信」および「電子メールでメッセージを送信」のアクションでのみ使用できます。

外部電子メール・アカウントにアラートを送信する手順は、次のとおりです。

1. BAMCommonConfig.xml構成ファイルで、プロパティAlertActionAllowExternalEmailをtrueに設定します。
Oracle BAM構成ファイルの編集の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の拡張プロパティの構成に関する項を参照してください。

2. Oracle BAMを再起動します。

3. ユーザーにメッセージを送信するアクションを含むアラート・ルールを作成します。

4. 「ユーザーの選択」をクリックし、電子メール・アドレスをセミコロンで区切って「外部電子メール・アドレスの入力」ボックスに入力します。
図版bam_alert_ext.gifの説明

61 ICommandの使用

この章では、ICommandコマンドライン・ユーティリティを使用して、アクティブ・データ・キャッシュにあるアイテムに対して操作(エクスポート、インポート、名前の変更など)を実行する方法について説明します。また、リモート・システムからICommandを実行する方法、およびリモートにあるサーバー上でコマンドを実行する方法についても説明します。

この章には次の項が含まれます:

- 第61.1項「ICommandの概要」

- 第61.2項「ICommandの実行」

- 第61.3項「コマンドおよびオプションの構文の指定」

- 第61.4項「コマンドライン専用パラメータの使用」

- 第61.5項「ICommandのリモート実行」

61.1 ICommandの概要

ICommandは、アクティブ・データ・キャッシュのアイテム上で様々な操作を実行する一連のコマンドを提供する、コマンドライン・ユーティリティ(およびWebサービス)です。ICommandを使用すると、アクティブ・データ・キャッシュからのアイテムのエクスポート、インポート、名前の変更、消去および削除が可能です。これらのコマンドは、一連のコマンドとして入力XMLファイル内に含めることも、単一のコマンドとしてコマンドラインに入力することもできます。情報メッセージおよびエラー・メッセージは、コマンド・ウィンドウまたはXMLファイルのいずれかに出力されます。

ICommand Webサービスの使用方法の詳細は、第59.5項「ICommand Webサービスの使用」を参照してください。

個々のコマンドとそのパラメータの詳細は、付録G「Oracle BAM ICommandの操作とファイル・フォーマット」を参照してください。

61.2 ICommandの実行

ICommandは、Microsoft WindowsプラットフォームでORACLE_HOME\bam\bin\icommand.batファイルを使用して実行することも、UNIXプラットフォーム上でORACLE_HOME\bam\bin\icommand.shシェル・スクリプトを使用して実行することもできます。

コマンドラインでicommandと入力すると、ICommandの操作とパラメータの要約が表示されます。

ICommandを実行するには、その前に、JAVA_HOME環境変数が、サポートされているJava Development Kitのバージョンのルート・ディレクトリを指すように設定されている必要があります(サポートされているJDKのバージョンについては、Oracle Technology Network WebサイトにあるOracle BAMサポート・マトリックスを参照してください)。

注意:

Oracle BAMがインストールされると、ICommandは、デフォルトでポート9001でOracle BAMサーバーを検索します。Oracle BAMサーバーのポート番号が、Oracle BAMの設定および構成時にデフォルトから変更されている場合は、ファイルBAMICommandConfig.xml内のポート番号を9001から新しいポート番号に手動で変更する必要があります。

次のプロパティを変更します。

<ServerPort>9001</ServerPort>

BAMICommandConfig.xmlファイルは、WLS_HOME/user_projects/domains/base_domain/config/fmwconfig/servers/bam_server1/applications/oracle-bam_11.1.1/config/にあります。

61.3 コマンドおよびオプションの構文の指定

ICommandのコマンドライン入力の基本構造は次のようになります。

icommand -username user_name -cmd command_name -name value -type value [-parameter value]

コマンドラインで指定するすべてのパラメータの形式は次のとおりです。

-parameter value

parameter部分では、大/小文字は区別されません。value部分に空白または他の特殊文字を含める場合は、それらを二重引用符で囲む必要があります。次に例を示します。

icommand -cmd export -name "/Samples/Call Center" -type dataobject
-file C:\CallCenter.xml

空白およびその他の特殊文字が含まれているレポート名およびファイル名は、引用符で囲む必要があります。

一部のパラメータでは、valueを省略できます。個々のパラメータ値の詳細は、G.2項「操作に関する詳細な説明」を参照してください。

61.3.1 セキュリティ資格証明の指定方法

ICommandでは、操作の実行時にユーザーがセキュリティ資格証明を指定する必要があります。セキュリティ資格証明が構成ファイルに指定されていない場合、ICommandでは、安全な方法でユーザー名とパスワードの入力が求められます。

デフォルトの資格証明を使用するには、WLS_HOME/user_projects/domains/base_domain/config/fmwconfig/servers/bam_server1/applications/oracle-bam_11.1.1/config/BAMICommandConfig.xmlファイルに、ICommand_Default_User_NameおよびICommand_Default_Passwordプロパティを追加します。例:

<ICommand_Default_User_Name>user_name</ICommand_Default_User_Name>
<ICommand_Default_Password>password</ICommand_Default_Password>

ただし、コマンドライン入力は常に、構成ファイルに指定したプロパティを上書きします。

ICommand操作の実行に使用するユーザー名とパスワードは、構成ファイル、コマンドライン・プロンプトまたはコマンドライン・オプションから次のように取得されます。

- ユーザー名とパスワードを構成ファイルにのみ指定している場合(つまり、-usernameパラメータをコマンドラインで使用していない場合)は、構成ファイルのICommand_Default_User_NameおよびICommand_Default_Passwordの値が使用されます。

- ユーザー名のみを構成ファイルで指定し、パスワードを指定していない場合は、そのユーザー名の値が使用され、コマンドラインでパスワードの入力が求められます。

- コマンドラインでユーザー名を指定した場合は、その値が使用され、パスワードの入力が求められます。パスワードのプロンプトは、構成ファイルに指定されているプロパティに関係なく表示されます。例:

icommand -cmd export -name TestDO -file C:\TestDO.xml -username user_name

61.3.2 コマンドの指定方法

コマンドラインでは、コマンドはcmdパラメータの値で指定されます。コマンドのオプションは追加パラメータで指定されます。次に例を示します。

icommand -cmd export -name TestDO
-type dataobject -file C:\TestDO.xml

XMLコマンド・ファイルでは、XMLタグでコマンドが指定されます。コマンドのオプションは、コマンド・タグのXML属性値として、parametername=valueの形式で指定されます。

コマンド名およびパラメータ値(アクティブ・データ・キャッシュのアイテム名は除く)では、大/小文字は区別されません。

個々のコマンドとそのパラメータの詳細は、付録G「Oracle BAM ICommandの操作とファイル・フォーマット」を参照してください。

61.3.3 オブジェクト名の指定方法

オブジェクト名をコマンドに指定する場合は、常に次のルールが適用されます。

一般的ルール

コマンドラインで指定する際に、DOSまたはUNIXで特殊な意味となる空白または文字を名前に含める場合は、コマンドラインのルールに従ってその名前を引用符で囲む必要があります。

XMLコマンドラインで指定する際に、XMLでは特殊な意味となる文字を名前に含める場合は、標準XMLエスケープを使用する必要があります。

データ・オブジェクト

データ・オブジェクトがルートに存在しない場合は、フルパス名を指定する必要があります。次に例を示します。

/MyFolder/MySubfolder/MyDataObject

データ・オブジェクトがルートに存在する場合、先頭のスラッシュ(/)はオプションです。次の2つの例は同等です。

/MyDataObject
MyDataObject

データ・オブジェクト・フォルダ

データ・オブジェクト内のフォルダを指定するには、フォルダのパスの先頭に接頭辞/public/DataObject/を指定する必要があります。

/public/DataObject/MyFolder/MySubfolder

レポートとレポート・フォルダ

次の例に示すように、フルパス名と適切な接頭辞を指定する必要があります。

共有レポートの場合は、次に示すように/public/Report/接頭辞を指定する必要があります。

"/public/Report/Subfolder1/My Report"

プライベート・レポートの場合は、/private:user_name/Report/接頭辞を指定する必要があります。

"/private:jsmith/Report/Subfolder1/My Report"

ICommandを実行しているユーザーがレポートを所有しているユーザーである場合は、接頭辞の/private:user_name/の部分を省略できます。

"Report/Subfolder1/My Report"

接頭辞publicまたはprivateが付いていないパス情報はエクスポート・ファイルに保存されます。

同様に、レポート・フォルダも適切な接頭辞を使用して指定できます。

/public/Report/Subfolder1

/private:jsmith/Report/Subfolder1

アラート・ルール

アラートの名前またはフルネームのいずれかを指定できます。次の2つの例は、ICommandを実行するユーザーがAlert1を所有するユーザーである場合は同等です。

Alert1

/private:user_name/Rule/Alert1

ICommandを実行するユーザーがAlert1の所有者でない場合は、2つ目の形式のみを使用できます。

その他のすべてのオブジェクト・タイプ

オブジェクトのフルネームを指定します。

61.3.4 複数パラメータ・ターゲットの指定方法

アクティブ・データ・キャッシュの各オブジェクト・タイプ(データ・オブジェクト、フォルダ、レポートおよびルールなど)に対して、特定のコマンドを実行するために別々のコマンドラインを作成するかわりに、ICommandでは、複数のオブジェクト・タイプに同じコマンドラインでパラメータ値を渡すことができます。

例:

icommand -cmd export -type all -report,rule,folder:owner 1
-dataobject,folder:permissions 1 -systemobjects 1 -file filename.xml

この例では、システム内のすべてのオブジェクトがエクスポートされますが、owner = 1は、レポート、ルールおよびフォルダの各アクティブ・データ・キャッシュ・オブジェクト・タイプに渡されます。また、permissions = 1は、データ・オブジェクトおよびフォルダの各オブジェクト・タイプに渡されます。カンマ(,)でオブジェクト・タイプが区切られ、コロン(:)の後にパラメータがリストされています。

この例の単一コマンドラインで複数の値を指定する方法は、次の3つのコマンドと同じ結果となります。

icommand -cmd export -type report -owner 1 ...
icommand -cmd export -type rule -owner 1 ...
icommand -cmd export -type folder -owner 1 ...

61.4 コマンドライン専用パラメータの使用

次のパラメータは、コマンドラインでのみ指定できます。

- Cmd

-cmd commandname

実行する単一のコマンドを指定するオプションのパラメータ。そのコマンドに必要なパラメータをコマンドラインに指定する必要もあります。

Cmdfileおよびcmdパラメータは相互に排他的です。いずれかのみを指定する必要があります。

- Cmdfile

-cmdfile file_name

処理されるコマンドが含まれているファイルの名前を指定するオプションのパラメータ。このファイルはXMLファイルであるため、通常、XML拡張子が使用されますが、必須ではありません。

Cmdfileおよびcmdパラメータは相互に排他的です。いずれかのみを指定する必要があります。

- Debug

-debug flag

エラーが発生した場合に追加のデバッグ情報を出力するかどうかを指定するオプションのパラメータ。0(ゼロ)以外の値の場合または値を指定しない場合は、デバッグ情報が出力されます。このパラメータが存在しない場合、デバッグ情報は出力されません。

- Domain

-domain domain_name

アクティブ・データ・キャッシュへのログインに使用するドメイン名(アクティブ・データ・キャッシュ・サーバーが実行されているコンピュータの名前)を指定するオプションのパラメータ。

このパラメータを省略すると、mainが使用されます。この場合、ICommand.exe.configファイル内のServerNameプロパティからサーバー情報が取得されます。

予約値ADCInProcServerが使用されると、ICommandは、アクティブ・データ・キャッシュ・サーバーには接続せずに、(ICommandが実行されているシステムと同じシステムにローカルで存在する必要がある)アクティブ・データ・キャッシュ・データベースに直接アクセスします。このオプションは、アクティブ・データ・キャッシュ・サーバーが実行されていない場合にのみ必要です。それ以外の場合に使用すると、データベースが破損する可能性があります。アクティブ・データ・キャッシュ・データベースの場所および構造に関する情報は、ICommand.exe.configファイルの様々なキーから取得されます。

- Logfile

-logfile file_name

結果およびエラーが記録されるファイルの名前を指定するオプションのパラメータ。このファイルが存在しない場合は作成されます。このファイルが存在する場合は、コンテンツが上書きされます。このファイルはXMLファイルであるため、通常、XML拡張子が使用されますが、必須ではありません。

このパラメータが存在しない場合、結果およびエラーはコンソールに出力されます。

ログ・ファイルのフォーマットに関する詳細は、G.4項「ログ・ファイルのフォーマット」を参照してください。

- Logmode

-logmode mode

既存のログ・ファイルが上書きされるか、既存のログ・ファイルに追加されるかを指定するオプションのパラメータ。このパラメータに指定可能な値は、appendまたはoverwriteです。いずれの場合も、このファイルが存在しない場合は作成されます。

このパラメータが存在しない場合は、overwriteが使用されます。

ログ・ファイルにはXMLが追加されるため、appendオプションを使用すると、生成されるXMLが厳密な正規表現にならない場合があります。これは、追加を連続していって生成されたXMLには最上位のルート・タグが存在しなくなるため(ICommandを実行するたびに同じタグが追加されるため)です。これは、ユーザーが対処する必要があります。

- Username

-username user_name

コマンドを実行するとみなすユーザー名を指定するオプションのパラメータ。パスワード・パラメータはありません。

ICommandでは、コマンドの実行時にユーザーがセキュリティ資格証明を指定する必要があります。ICommandでは、安全な方法でユーザー名とパスワードの入力が求められます。コマンドラインに-usernameパラメータを指定している場合は、パスワードの入力のみが求められます。

61.5 ICommandのリモート実行

リモート・システム(Oracle BAMがインストールされた)からICommandを実行して、リモートにあるサーバー上でコマンドを実行できます。ICommandをリモートで実行するには、プロパティである「ServerName」と「ServerPort」を、下記に示されているようにWLS_HOME/user_projects/domains/base_domain/config/fmwconfig/servers/bam_server1/applications/oracle-bam_11.1.1/config/BAMICommandConfig.xmlに追加します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<BAMICommand>
<ServerName>host_name</ServerName>
<ServerPort>7001</ServerPort>
<Communication_Protocol>t3</Communication_Protocol>
<SensorFactory>oracle.bam.common.statistics.noop.SensorFactoryImpl</SensorFactor
y>
<GenericSatelliteChannelName>invm:topic/oracle.bam.messaging.systemobjectnotific
ation</GenericSatelliteChannelName>
</BAMICommand>

リモート・システムにインストールされているOracle BAMバージョンは、Oracle BAMサーバー・バージョンと同一である必要があります(つまり、両サーバーともに同じラベルであること)。

第XI部

Oracle User Messaging Serviceの使用

この部では、Oracle User Messaging Serviceの使用方法について説明します。

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

- 第62章「Oracle User Messaging Service」

- 第63章「ユーザー・メッセージング・サービスEJB APIを使用したメッセージの送受信」

- 第64章「ユーザー・メッセージング・サービスJava APIを使用したメッセージの送受信」

- 第65章「ユーザー・メッセージング・サービスWebサービスAPIを使用したメッセージの送受信」

- 第66章「Parlay X Webサービス・マルチメディア・メッセージングAPI」

- 第67章「ユーザー・メッセージング・プリファレンス」

62 Oracle User Messaging Service

この章では、Oracle User Messaging Service(UMS)の機能およびアーキテクチャについて説明します。

項目は次のとおりです。

- 第62.1項「ユーザー・メッセージング・サービスの概要」

62.1 ユーザー・メッセージング・サービスの概要

Oracle User Messaging Serviceは、ユーザーとデプロイされたアプリケーション間での双方向通信を可能にします。主な機能は次のとおりです。

- 様々なメッセージング・チャネルに対するサポート: メッセージは、電子メール、IM(XMPP)、SMS(SMPP)およびボイスを介して送受信できます。メッセージはユーザーのSOA/Oracle WebCenter Portalワークリストにも配信できます。

- 双方向メッセージング: アプリケーションからユーザーへのメッセージの送信(アウトバウンド・メッセージング)に加えて、ユーザーからメッセージング相互作用を開始(インバウンド・メッセージング)できます。たとえば、ユーザーは指定のアドレスに電子メールまたはテキスト・メッセージを送信でき、そのメッセージは適切なアプリケーションにルーティングされ、そのアプリケーションはユーザーに応答したり、ビジネス・ロジックに基づいて他のプロセスを呼び出したりできます。

- ユーザー・メッセージング・プリファレンス: エンド・ユーザーは、Webインタフェースを使用して、メッセージング通知の送信方法と送信時間に関するプリファレンスを定義できます。アプリケーションでは、ユーザーの電子メール・アドレスやインスタント・メッセージ・クライアントへの送信を判断せずに、その柔軟性によって、単にメッセージをユーザーに送信し、その先のメッセージのルーティングをユーザーのプリファレンスに従ってUMSに任せます。

- 強力なメッセージ配信: UMSは、メッセージング・ゲートウェイが提供する配信ステータス情報を継続して記録し、アプリケーションに提供します。これによって、アプリケーションは失敗した配信に対応できます。また、アプリケーションでは、初期のアドレスへの配信が失敗した場合に備えて、メッセージに対して1つ以上のフェイルオーバー・アドレスを指定できます。UMSのフェイルオーバー機能を使用することで、アプリケーション開発者は、複雑な再試行ロジックの実装から解放されます。

- Fusion Middleware内の広範な統合: UMSは、他のFusion Middlewareコンポーネントと統合して、単一の統合された双方向のユーザー・メッセージング・サービスを提供します。

- Oracle BPELとの統合: Oracle JDeveloperには、メッセージング操作に対応した事前作成のBPELアクティビティが含まれています。開発者は、必要なアクティビティを任意のワークフローにドラッグ・アンド・ドロップして、メッセージング機能をSOAコンポジット・アプリケーションに追加できます。

- Oracle Human Workflowとの統合: UMSによって、ヒューマン・ワークフロー・エンジンは、アクション可能なメッセージをユーザーに送信し、電子メールを介して返信を受信できるようになります。

- Oracle BAMとの統合: Oracle BAMでは、UMSを使用し、イベントの監視に対応した電子メール・アラートを送信します。

- Oracle WebCenter Portalとの統合: 開発者は、Oracle WebCenter Portal: スペースに対するアプリケーションの作成にUMS APIを使用できます。このAPIは、Parlay X Web Services for Multimedia Messagingのバージョン2.1(強力なメッセージングに対する標準のWebサービス・インタフェース)を実現したものです。

62.1.1 コンポーネント

Oracle User Messaging Serviceを構成するコンポーネントには、次の3つのタイプがあります。これらのコンポーネントは標準のJava EEアプリケーションであるため、デプロイが容易であり、Oracle WebLogic Serverが提供する標準のツールを使用して管理できます。

- UMSサーバー: UMSサーバーは、アプリケーションとユーザー間のメッセージ・フローを統合します。このサーバーは、アウトバウンド・メッセージをクライアント・アプリケーションから適切なドライバにルーティングし、インバウンド・メッセージを適切なクライアント・アプリケーションにルーティングします。また、このサーバーは、以前送信したメッセージのリポジトリを永続ストアで保守し、配信ステータスの情報を以前送信したメッセージに関連付けます。

- UMSドライバ: UMSドライバは、UMSをメッセージング・ゲートウェイに接続し、UMSでサポートされている様々なプロトコルに対してコンテンツを適合させます。これらのドライバは、特定のインストールで使用できるメッセージング・チャネルに従って、相互に独立してデプロイまたはアンデプロイできます。

- UMSクライアント・アプリケーション: UMSクライアント・アプリケーションは、メッセージの送受信に関するビジネス・ロジックを実装しています。UMSクライアント・アプリケーションは、BPELワークフローの1手順としてメッセージを送信するSOAアプリケーション、またはWebインタフェースからメッセージを送信できるスペース・アプリケーションの場合があります。

UMS自体を構成するコンポーネントに加え、メッセージング環境における他の主なエンティティは、各メッセージング・チャネルに必要な外部ゲートウェイです。これらのゲートウェイは、UMSまたはOracle WebLogic Serverの一部ではありません。UMSドライバは、広範に適合できるメッセージング・プロトコルをサポートしているため、企業の電子メール・サーバーやXMPP(Jabber)サーバーなどの既存のインフラストラクチャにUMSを統合できます。また、UMSは、SMPPをサポートするSMSサービスや、VoiceXMLをサポートする音声変換サービスの外部プロバイダに接続できます。

62.1.2 アーキテクチャ

図62-1に、Oracle User Messaging Serviceのシステム・アーキテクチャを示します。

柔軟性を最大にするために、UMSの各コンポーネントは、それぞれが個別のJava EEアプリケーションです。このため、それらを相互に独立してデプロイおよび管理できます。たとえば、他のすべてのチャネルでのメッセージ配信に影響を与えずに、特定のドライバを停止して再構成できます。

UMSクライアント・アプリケーションとUMSサーバー間のデータ交換は、SOAP/HTTP WebサービスによるWebサービス・クライアントのリクエスト時に発生するか、リモートEJBとJMSによるBPELメッセージング・アクティビティのコールを介して発生します。UMSサーバーとUMSドライバ間のデータ交換は、JMSキューを介して発生します。

Oracle UMSのサーバーとドライバは、SOAまたはBAMとともに、それぞれのWebLogic Serverインスタンスにインストールされます。Oracle WebCenter Portalのインストールには、UMSクライアント・アプリケーションとして機能するために必要なライブラリが組み込まれ、SOAインスタンスにデプロイされているサーバーを起動します。

図62-1 UMSのアーキテクチャ

「図62-1 UMSのアーキテクチャ」の説明

63 ユーザー・メッセージング・サービスEJB APIを使用したメッセージの送受信

この章では、ユーザー・メッセージング・サービス(UMS) EJB APIを使用したアプリケーションの開発方法、およびusermessagingsample-ejb.earとusermessagingsample-echo-ejb.earの2つのサンプル・アプリケーションの作成方法について説明します。

注意:

この章で説明するユーザー・メッセージング・サービスEJB APIは非推奨です。かわりに、第64章「ユーザー・メッセージング・サービスJava APIを使用したメッセージの送受信」で説明するユーザー・メッセージング・サービスJava APIを使用してください。

この章には次の項が含まれます:

- 第63.1項「UMS Java APIの概要」

- 第63.2項「UMSクライアント・インスタンスの作成」

- 第63.3項「メッセージの送信」

- 第63.4項「メッセージの受信」

- 第63.5項「UMS Enterprise JavaBeansクライアントAPIを使用したクライアント・アプリケーションの作成」

- 第63.6項「UMS Enterprise JavaBeansクライアントAPIを使用したクライアント・エコー・アプリケーションの作成」

- 第63.7項「新規アプリケーション・サーバー接続の作成」

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、次の場所にあるサンプルを参照してください。

http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.html

63.1 UMS Java APIの概要

UMS Java APIは、Enterprise JavaBeansクライアント用アプリケーションの開発をサポートします。これは、次のようにグループ化されたパッケージで構成されています。

- 共通およびクライアントのパッケージ

- oracle.sdp.messaging

- oracle.sdp.messaging.filter: アプリケーションでMessageFilterを使用すると、配信されるメッセージをより強力に制御できます。

- ユーザー・プリファレンス・パッケージ

- oracle.sdp.messaging.userprefs

- oracle.sdp.messaging.userprefs.tools

63.1.1 Java EEアプリケーション・モジュールの作成

UMS Enterprise JavaBeansクライアントAPIを使用するJava EEアプリケーション・モジュールについては、次の2つの選択肢があります。

- Enterprise JavaBeansアプリケーション・モジュール - ステートレス・セッションBean: メッセージ送受信の中核となるバック・エンドのアプリケーションです。

- Webアプリケーション・モジュール - HTMLまたはWebフロント・エンドを使用するアプリケーション用です。

どちらのアプリケーション・モジュールを選択した場合でも、UMSクライアントAPIを使用してアプリケーションをUMSサーバーに登録し、次に、メッセージの送信または受信、ステータスの取得、およびアクセス・ポイントの登録または登録解除を行う操作を起動します。操作の完全なリストは、UMS Javadocを参照してください。

ソース・コードを含むサンプルは、Oracle Technology Network(OTN)から入手できます。

63.2 UMSクライアント・インスタンスの作成

この項では、UMS Enterprise JavaBeansクライアントを作成するための要件を説明します。MessagingEJBClientインスタンスは、MessagingClientFactoryクラスのコードを使用して作成できます。

UMS Enterprise JavaBeansクライアントを使用して作成したアプリケーションは、EARファイルとしてパッケージ化され、usermessagingclient-ejb.jarモジュールがEnterprise JavaBeansモジュールとしてバンドルされている必要があります。

63.2.1 プログラミングまたは宣言的な方法によるMessagingEJBClientインスタンスの作成

例63-1に、プログラミングによってMessagingEJBClientインスタンスを作成する場合のコードを示します。

例63-1 プログラミングによるMessagingEJBClientインスタンスの作成

ApplicationInfo appInfo = new ApplicationInfo();
appInfo.setApplicationName("SampleApp");
appInfo.setApplicationInstanceName("SampleAppInstance");
MessagingClient mClient =
MessagingClientFactory.createMessagingEJBClient(appInfo);

MessagingEJBClientインスタンスは、宣言的な方法でも作成できます。宣言的な方法を使用するとデプロイメント時に変更が可能になるため、通常はこの方法をお薦めします。

Java EEモジュールのディスクリプタ(ejb-jar.xmlまたはweb.xml)には、必要なすべてのアプリケーション情報プロパティを環境エントリとして指定する必要があります。

例63-2に、宣言的な方法でMessagingEJBClientインスタンスを作成する場合のコードを示します。

例63-2 宣言的な方法によるMessagingEJBClientインスタンスの作成

MessagingClient mClient = MessagingClientFactory.createMessagingEJBClient();

63.2.2 MessagingClientFactoryクラスのAPIリファレンス

MessagingClientFactoryクラスのAPIリファレンスには、Javadocからアクセスできます。

63.3 メッセージの送信

メッセージは、MessageFactoryクラスのコードおよびoracle.sdp.messagingのMessageインタフェースを使用して作成できます。

作成できるメッセージのタイプには、プレーン・テキスト・メッセージ、text/plainパートとtext/htmlパートで構成できるマルチパート・メッセージ、および異なる配信タイプを使用して、複数受信者用の単一メッセージに配信チャネル(DeliveryType)固有のペイロードを作成するメッセージがあります。

63.3.1 メッセージの作成

この項では、作成できる様々なタイプのメッセージについて説明します。

63.3.1.1 プレーン・テキスト・メッセージの作成

例63-3に、UMS Java APIを使用してプレーン・テキスト・メッセージを作成する方法を示します。

例63-3 UMS Java APIを使用したプレーン・テキスト・メッセージの作成

Message message = MessageFactory.getInstance().createTextMessage("This is a Plain Text message.");
Message message = MessageFactory.getInstance().createMessage();
message.setContent("This is a Plain Text message.", "text/plain");

63.3.1.2 Text/PlainパートとText/HTMLパートを持つマルチパート/代替メッセージの作成

例63-4に、UMS Java APIを使用してマルチパート・メッセージまたは代替メッセージを作成する方法を示します。

例63-4 UMS Java APIを使用したマルチパート・メッセージまたは代替メッセージの作成

Message message = MessageFactory.getInstance().createMessage();
MimeMultipart mp = new MimeMultipart("alternative");
MimeBodyPart mp_partPlain = new MimeBodyPart();
mp_partPlain.setContent("This is a Plain Text part.", "text/plain");
mp.addBodyPart(mp_partPlain);
MimeBodyPart mp_partRich = new MimeBodyPart();
mp_partRich
.setContent(
"<html><head></head><body><b><i>This is an HTML part.</i></b></body></html>",
"text/html");
mp.addBodyPart(mp_partRich);
message.setContent(mp, "multipart/alternative");

63.3.1.3 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

メッセージを宛先アドレスに送信する際は、複数のチャネルが関連する場合があります。Oracle UMSアプリケーション開発者は、各チャネルに対して正しいマルチパート書式を指定する必要があります。

例63-5に、異なる配信タイプを使用して、複数受信者用の単一メッセージに、配信チャネル(DeliveryType)固有のペイロードを作成する方法を示します。

複数ペイロードのマルチパート/代替メッセージの各最上位パートには、このヘッダーの値が1つ以上含まれている必要があります。このヘッダーの値は、有効な配信タイプの名前である必要があります。DeliveryTypeの使用可能な値は、列挙DeliveryTypeを参照してください。

例63-5 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

Message message = MessageFactory.getInstance().createMessage();

// create a top-level multipart/alternative MimeMultipart object.
MimeMultipart mp = new MimeMultipart("alternative");

// create first part for SMS payload content.
MimeBodyPart part1 = new MimeBodyPart();
part1.setContent("Text content for SMS.", "text/plain");

part1.setHeader(Message.HEADER_NS_PAYLOAD_PART_DELIVERY_TYPE, "SMS");

// add first part
mp.addBodyPart(part1);

// create second part for EMAIL and IM payload content.
MimeBodyPart part2 = new MimeBodyPart();
MimeMultipart part2_mp = new MimeMultipart("alternative");
MimeBodyPart part2_mp_partPlain = new MimeBodyPart();
part2_mp_partPlain.setContent("Text content for EMAIL/IM.", "text/plain");
part2_mp.addBodyPart(part2_mp_partPlain);
MimeBodyPart part2_mp_partRich = new MimeBodyPart();
part2_mp_partRich.setContent("<html><head></head><body><b><i>" + "HTML content for EMAIL/IM." +
"</i></b></body></html>", "text/html");
part2_mp.addBodyPart(part2_mp_partRich);
part2.setContent(part2_mp, "multipart/alternative");

part2.addHeader(Message.HEADER_NS_PAYLOAD_PART_DELIVERY_TYPE, "EMAIL");
part2.addHeader(Message.HEADER_NS_PAYLOAD_PART_DELIVERY_TYPE, "IM");

// add second part
mp.addBodyPart(part2);

// set the content of the message
message.setContent(mp, "multipart/alternative");

// set the MultiplePayload flag to true
message.setMultiplePayload(true);

63.3.2 MessageFactoryクラスのAPIリファレンス

MessageFactoryクラスのAPIリファレンスには、Javadocからアクセスできます。

63.3.3 MessageインタフェースのAPIリファレンス

MessageインタフェースのAPIリファレンスには、Javadocからアクセスできます。

63.3.4 列挙DeliveryTypeのAPIリファレンス

列挙DeliveryTypeのAPIリファレンスには、Javadocからアクセスできます。

63.3.5 メッセージのアドレス指定

この項では、アドレスのタイプおよびAddressオブジェクトの作成方法について説明します。

63.3.5.1 アドレスのタイプ

アドレスには、デバイス・アドレスとユーザー・アドレスの2種類があります。デバイス・アドレスには、電子メール・アドレス、インスタント・メッセージ・アドレス、電話番号など、様々なタイプがあります。ユーザー・アドレスは、ユーザー・リポジトリにあるユーザーIDです。

63.3.5.2 Addressオブジェクトの作成

Addressインタフェースで定義するAddressオブジェクトは、AddressFactoryクラスを使用してメッセージの送信者と受信者のアドレスを指定することで作成できます。

63.3.5.2.1 単一のAddressオブジェクトの作成

例63-6に、単一のAddressオブジェクトを作成するコードを示します。

例63-6 単一のAddressオブジェクトの作成

Address recipient = AddressFactory.getInstance().createAddress("Email:john.doe@example.com");

63.3.5.2.2 1つのバッチ内での複数のAddressオブジェクトの作成

例63-7に、1つのバッチ内に複数のAddressオブジェクトを作成するコードを示します。

例63-7 1つのバッチ内での複数のAddressオブジェクトの作成

String[] recipientsStr = {"Email:john.doe@example.com", "IM:jabber|john.doe@example.com"};
Address[] recipients = AddressFactory.getInstance().createAddress(recipientsStr);

63.3.5.2.3 メッセージへの送信者または受信者のアドレスの追加

例63-8に、送信者または受信者のアドレスをメッセージに追加するコードを示します。

例63-8 メッセージへの送信者または受信者のアドレスの追加

Address sender = AddressFactory.getInstance().createAddress("Email:john.doe@example.com");
Address recipient = AddressFactory.getInstance().createAddress("Email:jane.doe@example.com");
message.addSender(sender);
message.addRecipient(recipient);

63.3.5.3 フェイルオーバー・アドレスを使用した受信者の作成

例63-9に、フェイルオーバー・アドレスを使用して受信者を作成するコードを示します。

例63-9 フェイルオーバーを使用した単一のAddressオブジェクトの作成

String recipientWithFailoverStr = "Email:john.doe@example.com, IM:jabber|john.doe@example.com";
Address recipient = AddressFactory.getInstance().createAddress(recipientWithFailoverStr);

63.3.5.4 AddressFactoryクラスのAPIリファレンス

AddressFactoryクラスのAPIリファレンスには、Javadocからアクセスできます。

63.3.5.5 AddressインタフェースのAPIリファレンス

AddressインタフェースのAPIリファレンスには、Javadocからアクセスできます。

63.3.6 メッセージ・ステータスの取得

Oracle UMSを使用すると、メッセージ・ステータスを同期または非同期で取得できます。

63.3.6.1 メッセージ・ステータスの同期取得

現行ステータスの同期取得を実行するには、MessagingClient APIから次のフローを使用します。

String messageId = messagingClient.send(message);
Status[] statuses = messagingClient.getStatus(messageId);

または、

Status[] statuses = messagingClient.getStatus(messageId, address[]) --- where
address[] is an array of one or more of the recipients set in the message.

63.3.6.2 メッセージ・ステータスの非同期通知

メッセージ・ステータスの非同期通知を取得する手順は、次のとおりです。

1. ステータス・リスナーを実装します。

2. ステータス・リスナーを宣言的な方法で登録します。

3. メッセージ(messagingClient.send(message);)を送信します。

4. アプリケーションでは、ステータス・リスナーのonStatus(status)コールバックを介してステータスを自動的に取得します。

63.4 メッセージの受信

この項では、アプリケーションでメッセージを受信する方法について説明します。メッセージを受信するには、最初にアクセス・ポイントを登録する必要があります。アプリケーション側から見ると、メッセージを受信するモードには同期と非同期があります。

63.4.1 アクセス・ポイントの登録

AccessPointは、着信メッセージを受信するための1つ以上のデバイス・アドレスを表します。着信メッセージを受信するアプリケーションでは、メッセージの受信者アドレスを表すアクセス・ポイントを1つ以上登録する必要があります。サーバーでは、着信メッセージの受信者アドレスと一連の登録済アクセス・ポイントを照合し、一致したアクセス・ポイントを登録したアプリケーションに、その着信メッセージをルーティングします。

AccessPointFactory.createAccessPointを使用してアクセス・ポイントを作成し、そのアクセス・ポイントをMessagingClient.registerAccessPointを使用してメッセージ受信用に登録できます。

番号9000のSMSアクセス・ポイントを登録するには、次のように指定します。

AccessPoint accessPointSingleAddress =
AccessPointFactory.createAccessPoint(AccessPoint.AccessPointType.SINGLE_ADDRESS,
DeliveryType.SMS, "9000");
messagingClient.registerAccessPoint(accessPointSingleAddress);

番号が9000から9999の範囲内のSMSアクセス・ポイントを登録するには、次のように指定します。

AccessPoint accessPointRangeAddress =
AccessPointFactory.createAccessPoint(AccessPoint.AccessPointType.NUMBER_RANGE,
DeliveryType.SMS,"9000,9999");
messagingClient.registerAccessPoint(accessPointRangeAddress);

63.4.2 同期受信

メッセージの同期受信には、メソッドMessagingClient.receiveを使用できます。このメソッドは、メッセージの非同期受信による構成オーバーヘッドを望まない軽量なクライアント向けの便利なポーリング・メソッドです。このメソッドは、アプリケーションのインバウンド・キューですぐに使用できるメッセージのリストを戻します。このメソッドは非ブロック・コールを実行するため、現在使用できるメッセージがない場合はNULLを戻します。

注意:

1回の起動で、使用可能なメッセージがすべて取得される保証はありません。ポーリングして、使用可能なすべてのメッセージを受信したことを確認する必要があります。

63.4.3 非同期受信

非同期受信には、MDBの構成、ステートレス・セッションBeanメッセージ・リスナーの記述など、多数のタスクが関連しています。詳細な手順については、サンプル・アプリケーションusermessagingsample-echoを参照してください。

63.4.4 メッセージ・フィルタ

アプリケーションでMessageFilterを使用すると、配信されるメッセージをより強力に制御できます。MessageFilterには、一致基準とアクションが含まれています。アプリケーションでは、一連のメッセージ・フィルタを登録できます。登録されたメッセージ・フィルタは、着信(受信)メッセージに順に適用され、メッセージが基準と一致するとアクションが実行されます。たとえば、アプリケーションでMessageFiltersを使用して必要なブラックリストを実装すると、指定した送信者アドレスからのすべてのメッセージを拒否できます。

MessageFilterFactory.createMessageFilterを使用してメッセージ・フィルタを作成し、そのメッセージ・フィルタをMessagingClient.registerMessageFilterを使用して登録できます。フィルタは、アプリケーションの現行フィルタ・チェーンの最後に追加されます。受信したメッセージは、フィルタ・チェーンを順に通過します。メッセージがフィルタの基準に一致すると、そのフィルタのアクションが即時に実行されます。メッセージがフィルタに一致しない場合のデフォルト・アクションでは、そのメッセージが受信されてアプリケーションに配信されます。たとえば、件名が"spam"のメッセージを拒否するには、次のように指定します。

MessageFilter subjectFilter = MessageFilterFactory.createMessageFilter("spam",
MessageFilter.FieldType.SUBJECT, null, MessageFilter.Action.REJECT);
messagingClient.registerMessageFilter(subjectFilter);

電子メール・アドレスspammer@foo.comからのメッセージを拒否するには、次のように指定します。

MessageFilter senderFilter =
MessageFilterFactory.createBlacklistFilter("spammer@foo.com");
messagingClient.registerMessageFilter(senderFilter);

63.5 UMS Enterprise JavaBeansクライアントAPIを使用したクライアント・アプリケーションの作成

この項では、usermessagingsampleというアプリケーションの作成方法について説明します。このアプリケーションは、アウトバウンド・メッセージングおよびメッセージ・ステータスの同期取得の両方に対してUMS Enterprise JavaBeansクライアントAPIを使用するWebクライアント・アプリケーションです。usermessagingsampleはインバウンド・メッセージングもサポートしています。デプロイして構成したusermessagingsampleを使用すると、電子メール・クライアントにメッセージを送信できます。

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、Oracle SOA Suiteのサンプルを参照してください。

このページにナビゲートした後は、検索条件の「UMS」を入力して「検索」をクリックすることで、Oracle User Messaging Serviceのコード・サンプルを検出できます。

第63.1.1項「Java EEアプリケーション・モジュールの作成」で説明した2つのアプリケーション・モジュール選択肢の内、このサンプルはWebアプリケーション・モジュール(WAR)に重点を置き、いくつかのHTMLフォームとサーブレットを定義します。Webアプリケーション・モジュールのコードと対応するXMLファイルは、提供されているusermessagingsample-src.zipソースから使用できます。サーブレットでは、UMS Enterprise JavaBeansクライアントAPIを使用して、UMS Enterprise JavaBeansクライアント・インスタンスを作成し(次に、アプリケーションの情報を登録します)、メッセージを送信します。

このアプリケーションはusermessagingsample-ejb.earというEnterprise Archive(EAR)ファイルとしてパッケージ化されており、その構造は次のとおりです。

- usermessagingsample-ejb.ear

- META-INF

- application.xml -- すべてのアプリケーション・モジュール用のディスクリプタ・ファイル。

- weblogic-application.xml -- oracle.sdp.messaging共有ライブラリのimportを含むディスクリプタ・ファイル。

- usermessagingclient-ejb.jar -- メッセージEnterprise JavaBeansクライアントのデプロイメント・ディスクリプタが格納されます。

- META-INF

- ejb-jar.xml

- weblogic-ejb-jar.xml

- usermessagingsample-web.ear -- Webベースのフロント・エンドおよびサーブレットが格納されます。

- WEB-INF

- web.xml

- weblogic.xml

ビルトインのサンプル・アプリケーションおよびソース・コード(usermessagingsample-src.zip)は、OTNで入手できます。

63.5.1 開発の概要

次の各項では、usermessagingsample-ejb.earを例にして、アウトバウンド・メッセージング機能を持つアプリケーションの作成プロセスを説明します。

1. 第63.5.2項「電子メール・ドライバの構成」

2. 第63.5.3項「JDeveloper 11gを使用したアプリケーションの作成」

3. 第63.5.4項「アプリケーションのデプロイ」

4. 第63.5.5項「アプリケーションのテスト」

63.5.2 電子メール・ドライバの構成

Oracle User Messaging Serviceの電子メール・ドライバを有効にしてアウトバウンド・メッセージングおよびステータスの取得を実行するには、電子メール・ドライバを次のように構成します。

- OutgoingMailServerプロパティの値として、SMTPメール・サーバーの名前を入力します。

注意:

このサンプル・アプリケーションは汎用的であるため、適切なメッセージング・ドライバがデプロイされて構成されている場合は、他のチャネル経由のアウトバウンド・メッセージングもサポートできます。

63.5.3 JDeveloper 11gを使用したアプリケーションの作成

この項では、Windowsベース・ビルドのJDeveloperを使用して、usermessagingsampleを作成、コンパイルおよびデプロイする手順を説明します。

63.5.3.1 プロジェクトを開く

1. Oracle JDeveloperで、usermessagingsample.jws(.zipファイルに含まれています)を開きます。

図63-1 Oracle JDeveloperのメイン・ウィンドウ

「図63-1 Oracle JDeveloperのメイン・ウィンドウ」の説明

Oracle JDeveloperのメイン・ウィンドウにプロジェクトが表示されます。

2. Webモジュールで「Oracle UMS Client」ライブラリが使用されていることを確認して、サンプル・アプリケーションのビルド依存性を満たします。

1. 「アプリケーション・ナビゲータ」で、Webモジュール「usermessagingsample-web」を右クリックし、「プロジェクト・プロパティ」を選択します。

2. 左側のペインで、「ライブラリとクラスパス」を選択します。

図63-2 ライブラリの確認

「図63-2 ライブラリの確認」の説明

3. 「OK」をクリックします。

3. usermessagingclient-ejbプロジェクトがアプリケーションに存在していることを確認します。これは、UMSアプリケーションで使用するメッセージング・クライアントBeanをパッケージ化したEnterprise JavaBeansモジュールです。このモジュールによって、アプリケーションはUMSサーバーに接続できます。

4. usermessagingsample-webプロジェクトの下にあるJavaファイルを検索し、メッセージング・クライアントAPIを使用してメッセージの送信、ステータスの取得およびメッセージの同期受信を実行する方法を確認します。UMSサーバーに登録されるアプリケーション情報は、プロジェクトのSampleUtils.javaにプログラムによって指定されます(例63-10)。

例63-10 アプリケーション情報

ApplicationInfo appInfo = new ApplicationInfo();
appInfo.setApplicationName(SampleConstants.APP_NAME);
appInfo.setApplicationInstanceName(SampleConstants.APP_INSTANCE_NAME);
appInfo.setSecurityPrincipal(request.getUserPrincipal().getName());

63.5.4 アプリケーションのデプロイ

アプリケーションをデプロイする手順は、次のとおりです。

1. ナビゲーション・ペインでアプリケーションを右クリックし、「新規」を選択して、アプリケーション・サーバー接続を作成します。第63.7項「新規アプリケーション・サーバー接続の作成」の説明に従います。

2. アプリケーションをデプロイするには、「usermessagingsample application」→「デプロイ」→「usermessagingsample」→「デプロイ先」→「SOA_server」の順に選択します(図63-3)。

図63-3 プロジェクトのデプロイ

「図63-3 プロジェクトのデプロイ」の説明

3. メッセージBuild Successfulがログに表示されていることを確認します。

4. メッセージDeployment Finishedがデプロイメント・ログに表示されていることを確認します。
アプリケーションが正常にデプロイされました。

サンプルを実行するには、その前に、Oracle User Messaging Serviceの追加ドライバを構成し、必要に応じて、ユーザー・メッセージング・プリファレンスでメッセージを受信するユーザー用のデフォルト・デバイスを構成する必要があります。

注意:

詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

63.5.5 アプリケーションのテスト

Oracle WebLogic Serverの実行中のインスタンスにusermessagingsampleをデプロイした後は、次の手順を実行します。

1. Webブラウザを起動し、サンプル・アプリケーションのアドレスをhttp://host:http-port/usermessagingsample/と入力します。たとえば、ブラウザのナビゲーション・バーにhttp://localhost:7001/usermessagingsample/と入力します。
プロンプトが表示された場合は、ログイン資格証明を入力します。たとえば、ユーザー名はweblogicと入力します。メッセージ・サンプルをテストするためのブラウザ・ページが表示されます(図63-4)。

図63-4 サンプル・アプリケーションのテスト

「図63-4 サンプル・アプリケーションのテスト」の説明

2. サンプル・メッセージの送信をクリックします。「メッセージの送信」ページが表示されます(図63-5)。

図63-5 テスト・メッセージのアドレス指定

「図63-5 テスト・メッセージのアドレス指定」の説明

3. (オプション)送信者アドレスを次の書式で入力します。
Email:sender_address

たとえば、Email:sender@example.comと入力します。

4. 受信者アドレスを1つ以上入力します。たとえば、Email:recipient@example.comと入力します。複数のアドレスを入力する場合は、次のようにカンマ区切りリストで入力します。
Email:recipient_address1, Email:recipient_address2

ユーザー・メッセージング・プリファレンスを構成している場合、メッセージのアドレスは単にUser:usernameと指定できます。たとえば、User:weblogicと入力します。

5. (オプション)件名、つまり電子メールの内容を入力します。

6. 「送信」をクリックします。メッセージ・ステータス・ページが表示され、トランザクションの進捗が表示されます(図63-6には、メッセージング・エンジンが受信して処理するメッセージが表示されています)。

図63-6 メッセージ・ステータス

「図63-6 メッセージ・ステータス」の説明

7. リフレッシュをクリックしてステータスを更新します。電子メール・メッセージが電子メール・サーバーに配信されると、「ステータスの内容」フィールドに「リモート・ゲートウェイへのアウトバウンド・メッセージの配信に成功しました。」と表示されます。

63.6 UMS Enterprise JavaBeansクライアントAPIを使用したクライアント・エコー・アプリケーションの作成

この項では、usermessagingsample-echoというアプリケーションの作成方法について説明します。このアプリケーションは、UMS Enterprise JavaBeansクライアントAPIを使用して、電子メール・アドレスからメッセージを非同期で受信し、リプライを送信者にエコーして戻すデモ・クライアント・アプリケーションです。

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、Oracle SOA Suiteのサンプルを参照してください。

このページにナビゲートした後は、検索条件の「UMS」を入力して「検索」をクリックすることで、Oracle User Messaging Serviceのコード・サンプルを検出できます。

このアプリケーションはusermessagingsample-echo-ejb.earというEnterprise Archive(EAR)ファイルとしてパッケージ化されており、その構造は次のとおりです。

- usermessagingsample-echo-ejb.ear

- META-INF

- application.xml -- すべてのアプリケーション・モジュール用のディスクリプタ・ファイル。

- weblogic-application.xml -- oracle.sdp.messaging共有ライブラリのimportを含むディスクリプタ・ファイル。

- usermessagingclient-ejb.jar -- メッセージEnterprise JavaBeansクライアントのデプロイメント・ディスクリプタが格納されます。

- META-INF

- ejb-jar.xml

- weblogic-ejb-jar.xml

- usermessagingsample-echo-ejb.jar -- 受信したメッセージを処理してエコー・レスポンスを戻すアプリケーション・セッションBean(ClientSenderBean、ClientReceiverBean)が格納されます。

- META-INF

- ejb-jar.xml

- weblogic-ejb-jar.xml

- usermessagingsample-echo-web.war -- Webベースのフロント・エンドおよびサーブレットが格納されます。

- WEB-INF

- web.xml

- weblogic.xml

ビルトインのサンプル・アプリケーションおよびソース・コード(usermessagingsample-echo-src.zip)は、OTNで入手できます。

63.6.1 開発の概要

次の各項では、usermessagingsample-echo-ejb.earを例にして、非同期のインバウンドおよびアウトバウンド・メッセージング機能を持つアプリケーションの作成プロセスを説明します。

1. 第63.6.2項「電子メール・ドライバの構成」

2. 第63.6.3項「JDeveloper 11gを使用したアプリケーションの作成」

3. 第63.6.4項「アプリケーションのデプロイ」

4. 第63.6.5項「アプリケーションのテスト」

63.6.2 電子メール・ドライバの構成

Oracle User Messaging Serviceの電子メール・ドライバを有効にしてインバウンドやアウトバウンド・メッセージングおよびステータスの取得を実行するには、電子メール・ドライバを次のように構成します。

- OutgoingMailServerプロパティの値として、SMTPメール・サーバーの名前を入力します。

- IncomingMailServerプロパティの値として、IMAP4/POP3メール・サーバーの名前を入力します。受信ユーザー名とパスワードも構成します。

注意:

このサンプル・アプリケーションは汎用的であるため、適切なメッセージング・ドライバがデプロイされて構成されている場合は、他のチャネル経由のインバウンドおよびアウトバウンド・メッセージングもサポートできます。

63.6.3 JDeveloper 11gを使用したアプリケーションの作成

この項では、Windowsベース・ビルドのJDeveloperを使用して、usermessagingsample-echoを作成、コンパイルおよびデプロイする手順を説明します。

63.6.3.1 プロジェクトを開く

1. usermessagingsample.echo-src.zipをJDEV_HOME/communications/samples/ディレクトリに解凍します。共有ライブラリ参照をプロジェクトで有効にするには、このディレクトリを使用する必要があります。

注意:

別のディレクトリを使用する場合は、oracle.sdp.messagingライブラリ・ソース・パスをJDEV_HOME/
communications/modules/oracle.sdp.messaging_11.1.1/
sdpmessaging.jarに更新する必要があります。

2. Oracle JDeveloperで、usermessagingsample-echo.jws(.zipファイルに含まれています)を開きます。
Oracle JDeveloperのメイン・ウィンドウにプロジェクトが表示されます(図63-7)。

図63-7 Oracle JDeveloperのメイン・ウィンドウ

「図63-7 Oracle JDeveloperのメイン・ウィンドウ」の説明

3. 次のライブラリがusermessagingsample-echo-webおよびusermessagingsample-echo-ejbモジュールに追加されていることを確認して、サンプル・アプリケーションのビルド依存性が満たされていることを確認します。

- ライブラリ: oracle.sdp.messaging、クラスパス: JDEV_HOME/
communications/modules/oracle.sdp.messaging_11.1.1/
sdpmessaging.jar。これはJavaライブラリで、UMS、およびUMSを使用してメッセージを送受信するアプリケーションで使用されます。

各モジュールに対して次の手順を実行します。

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

2. 左側のペインで、「ライブラリとクラスパス」を選択します(図63-8)。

図63-8 ライブラリの確認

「図63-8 ライブラリの確認」の説明

3. 「OK」をクリックします。

4. usermessagingclient-ejbプロジェクトがアプリケーションに存在していることを確認します。これは、UMSアプリケーションで使用するメッセージング・クライアントBeanをパッケージ化したEnterprise JavaBeansモジュールです。このモジュールによって、アプリケーションはUMSサーバーに接続できます。

5. usermessagingsample-echo-ejbプロジェクトの下にあるJavaファイルを検索し、メッセージング・クライアントAPIを使用して非同期でメッセージを受信(ClientReceiverBean)したり、メッセージを送信(ClientSenderBean)する方法を確認します。

6. usermessagingsample-echo-webプロジェクトの下にあるJavaファイルを検索し、メッセージング・クライアントAPIを使用してアクセス・ポイントを登録および登録解除する方法を確認します。

7. UMSサーバーに登録したアプリケーション情報は、usermessagingclient-ejbプロジェクトのejb-jar.xmlファイルに宣言的に指定されることに注意してください(例63-11)。

例63-11 アプリケーション情報

<env-entry>
<env-entry-name>sdpm/ApplicationName</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>UMSEchoApp</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>sdpm/ApplicationInstanceName</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>UMSEchoAppInstance</env-entry-value>
</env-entry>

<env-entry>
<env-entry-name>sdpm/ReceivingQueuesInfo</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>OraSDPM/QueueConnectionFactory:OraSDPM/Queues/OraSDPMAppDefRcvQ1<
/env-entry-value>
</env-entry>

<env-entry>
<env-entry-name>
sdpm/MessageListenerSessionBeanJNDIName
</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>
ejb/umsEchoApp/ClientReceiverLocal</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>
sdpm/MessageListenerSessionBeanHomeClassName</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>
oracle.sdp.messaging.sample.ejbApp.ClientReceiverHomeLocal
</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>
sdpm/StatusListenerSessionBeanJNDIName
</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>ejb/umsEchoApp/ClientReceiverLocal</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>sdpm/StatusListenerSessionBeanHomeClassName</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>oracle.sdp.messaging.sample.ejbApp.ClientReceiverHomeLocal</env-e
ntry-value>
</env-entry>

8. アプリケーション名(UMSEchoApp)とアプリケーション・インスタンス名(UMSEchoAppInstance)は、MessageDispatcherBean MDBのメッセージ・セレクタでも使用されることに注意してください。このメッセージ・セレクタは、アプリケーション受信キューに配置されたメッセージとステータスの非同期受信で使用されます(例63-12)。

例63-12 アプリケーション情報

<activation-config-property>
<activation-config-property-name>
messageSelector
</activation-config-property-name>
<activation-config-property-value>
appName='UMSEchoApp' or sessionName='UMSEchoApp-UMSEchoAppInstance'
</activation-config-property-value>
</activation-config-property>

注意:

自身のアプリケーションに対して別のアプリケーション名とアプリケーション・インスタンス名を選択した場合は、このメッセージ・セレクタを更新する必要があります。そうしないと、非同期受信が機能しません。

63.6.4 アプリケーションのデプロイ

アプリケーションをデプロイする手順は、次のとおりです。

1. ナビゲーション・ペインでアプリケーションを右クリックし、「新規」を選択して、アプリケーション・サーバー接続を作成します。第63.7項「新規アプリケーション・サーバー接続の作成」の説明に従います。

2. アプリケーションをデプロイするには、「usermessagingsample-echo application」→「デプロイ」→「usermessagingsample-echo」→「デプロイ先」→「SOA_server」の順に選択します(図63-9)。

図63-9 プロジェクトのデプロイ

「図63-9 プロジェクトのデプロイ」の説明

3. メッセージBuild Successfulがログに表示されていることを確認します。

4. メッセージDeployment Finishedがデプロイメント・ログに表示されていることを確認します。
アプリケーションが正常にデプロイされました。

サンプルを実行するには、その前に、Oracle User Messaging Serviceの追加ドライバを構成し、必要に応じて、ユーザー・メッセージング・プリファレンスでメッセージを受信するユーザー用のデフォルト・デバイスを構成する必要があります。

注意:

詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

63.6.5 アプリケーションのテスト

Oracle WebLogic Serverの実行中のインスタンスにusermessagingsample-echoをデプロイした後は、次の手順を実行します。

1. Webブラウザを起動し、サンプル・アプリケーションのアドレスをhttp://host:http-port/usermessagingsample-echo/と入力します。たとえば、ブラウザのナビゲーション・バーにhttp://localhost:7001/usermessagingsample-echo/と入力します。
プロンプトが表示された場合は、ログイン資格証明を入力します。たとえば、ユーザー名はweblogicと入力します。メッセージ・サンプルをテストするためのブラウザ・ページが表示されます(図63-10)。

図63-10 サンプル・アプリケーションのテスト

「図63-10 サンプル・アプリケーションのテスト」の説明

2. アクセス・ポイントの登録/登録解除をクリックします。「アクセス・ポイントの登録」ページが表示されます(図63-11)。

図63-11 アクセス・ポイントの登録

「図63-11 アクセス・ポイントの登録」の説明

3. アクセス・ポイントのアドレスを次の書式で入力します。
EMAIL:server_address

たとえば、EMAIL:myserver@example.comと入力します。

4. アクションとして登録を選択し、送信をクリックします。登録ステータス・ページが表示され、図63-12に示すように登録済と表示されます。

図63-12 アクセス・ポイントの登録ステータス

「図63-12 アクセス・ポイントの登録ステータス」の説明

5. メッセージ・クライアント(電子メールの場合は電子メール・クライアント)から、前の手順でアクセス・ポイントとして登録したアドレスに、メッセージを送信します。
該当するチャネル用のUMSメッセージング・ドライバが正しく構成されている場合は、usermessagingsample-echoアプリケーションから戻されるエコー・メッセージを受信できるはずです。

63.7 新規アプリケーション・サーバー接続の作成

次の手順を実行し、アプリケーション・サーバー接続を作成します。

1. プロジェクトを右クリックし、「新規」→「接続」→「アプリケーション・サーバー接続」の順に選択して、新規アプリケーション・サーバー接続を作成します(図63-13)。

図63-13 新規アプリケーション・サーバー接続

「図63-13 新規アプリケーション・サーバー接続」の説明

2. 接続にSOA_serverという名前を付けて、「次へ」をクリックします(図63-14)。

3. 「接続タイプ」に「WebLogic 10.3」を選択します。

図63-14 新規アプリケーション・サーバー接続

「図63-14 新規アプリケーション・サーバー接続」の説明

4. 認証情報を入力します。ユーザー名の一般的な値はweblogicです。

5. 「接続」ダイアログで、SOA管理サーバーのホスト名、ポートおよびSSLポートを入力し、WLSドメインのドメイン名を入力します。

6. 「次へ」をクリックします。

7. 「テスト」ダイアログで、「接続のテスト」をクリックします。

8. メッセージSuccess!が表示されていることを確認します。
アプリケーション・サーバー接続が作成されました。

64 ユーザー・メッセージング・サービスJava APIを使用したメッセージの送受信

この章では、ユーザー・メッセージング・サービス(UMS)クライアントAPIを使用してアプリケーションを開発する方法について説明します。このAPIは、Fusion Middlewareアプリケーション開発者がメッセージ機能をエンタープライズ・アプリケーション内に組み込む際のプログラム上のエントリ・ポイントとして機能します。

このAPIには、Plain Old Java(POJO/POJI)プログラミング・モデルが用意されているため、アプリケーション開発者は、UMS機能にアクセスするためにアプリケーションで様々なJava EEモジュール(EJBモジュールなど)をパッケージ化して実装する必要がありません。開発者はモジュールの追加パッケージ化を実行したり、パッケージ・タスクを実行するための特別なツールを取得せずに、Java EEコンテナで実行するアプリケーションを作成できるため、開発時間が削減されます。

UMS Java APIのコンシューマは、環境エントリや他のJava EEデプロイメント・ディスクリプタ・アーティファクトなどのJava EEメカニズムを使用する必要がありません。Java EEディスクリプタの管理に関するオーバーヘッドの他に、多くのクライアント・アプリケーションには、Java EEディスクリプタに依存しない構成フレームワークがあります。

この章には次の項が含まれます:

- 第64.1項「UMS Java APIの概要」

- 第64.2項「UMSクライアント・インスタンスの作成とランタイム・パラメータの指定」

- 第64.3項「メッセージの送信」

- 第64.4項「メッセージ・ステータスの取得」

- 第64.5項「メッセージの受信」

- 第64.6項「クラスタ環境の構成」

- 第64.7項「セキュリティの構成」

- 第64.8項「スレッド・モデル」

- 第64.9項「UMSクライアントAPIを使用したクライアント・アプリケーションの作成」

- 第64.10項「UMSクライアントAPIを使用したクライアント・エコー・アプリケーションの作成」

- 第64.11項「新規アプリケーション・サーバー接続の作成」

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、次の場所にあるサンプルを参照してください。

http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.html

64.1 UMS Java APIの概要

UMS Java APIは、POJO/POJI APIとして公開されています。このAPIのコンシューマは、ファクトリ・メソッドを使用してMessagingClientオブジェクトのインスタンスを取得できます。コンシューマは、EJBや他のJava EEモジュールをそれぞれのアプリケーションにデプロイする必要はありませんが、アプリケーションのランタイム・クラスパスでUMSライブラリが使用可能であることを確認する必要があります。デプロイメントは、共有ライブラリ「oracle.sdp.client」としてです。

UMS Java APIは、次のようにグループ化されたパッケージで構成されています。

- 共通およびクライアントのパッケージ

- oracle.sdp.messaging

- oracle.sdp.messaging.filter: アプリケーションでMessageFilterを使用すると、配信されるメッセージをより強力に制御できます。

ソース・コードを含むサンプルは、Oracle Technology Network(OTN)から入手できます。

64.2 UMSクライアント・インスタンスの作成とランタイム・パラメータの指定

この項では、UMSクライアントを作成するための要件を説明します。MessagingClientインスタンスは、MessagingClientFactoryクラスのコードを使用して作成できます。具体的には、このインスタンスの作成にはMessagingClientFactory.createMessagingClient()メソッドを使用します。

クライアント・アプリケーションでは、クライアント・オブジェクトのインスタンス化の実行時に一連のパラメータを指定できます。たとえば、MessagingClientインスタンスを構成するには、複数のパラメータをキーと値のペアのマップとしてjava.util.Map<String, Object>に指定します。特に、これらの構成パラメータは、クライアント・アプリケーションの識別、UMSサーバーの指定およびセキュリティ資格証明の確立に役立ちます。クライアント・アプリケーションでは、使用可能なメカニズムを使用して構成パラメータを保存およびロードする必要があります。

表64-1に、Java APIに設定可能な構成パラメータの一部を示します。通常のユースケースでは、ほとんどのパラメータは指定する必要がなく、APIの実装では適切なデフォルト値が使用されます。

表64-1 実行時に指定する構成パラメータ

パラメータ

ノート

APPLICATION_NAME

オプション。デフォルトでは、クライアントはそのデプロイメント名で識別されます。この識別子は、ApplicationInfo.APPLICATION_NAMEキーに値を指定することで上書きできます。

APPLICATION_INSTANCE_NAME

オプション。指定が必要なのは、クラスタ化された特定のユースケースの場合か、セッションベースのルーティングを利用する場合のみです。

SDPM_SECURITY_PRINCIPAL

オプション。デフォルトでは、クライアントのリソースは、同じアプリケーション名のすべてのアプリケーションおよびすべてのセキュリティ・プリンシパルで使用できます。この動作は、ApplicationInfo.SDPM_SECURITY_PRINCIPALキーに値を指定することで上書きできます。セキュリティ・プリンシパルが指定されている場合、アプリケーションのリソース(メッセージ、アクセス・ポイントなど)に関連する後続のすべてのリクエストは、同じセキュリティ・プリンシパルを使用して実行する必要があります。

MESSAGE_LISTENER_THREADS
STATUS_LISTENER_THREADS

オプション。メッセージまたはステータスの非同期受信にリスナーを使用する場合、リスナー・ワーカー・スレッドの数は、MessagingConstants.MESSAGE_LISTENER_THREADSおよびMessagingConstants.STATUS_LISTENER_THREADSの各キーに値を指定することで制御できます。

RECEIVE_ACKNOWLEDGEMENT_MODE
LISTENER_ACKNOWLEDGEMENT_MODE

オプション。メッセージの受信時には、MessagingConstants.RECEIVE_ACKNOWLEDGEMENT_MODE(同期受信)およびMessagingConstants.
LISTENER_ACKNOWLEDGEMENT_MODE(非同期受信)の各キーに値を指定して、信頼性モードを制御できます。

MessagingClientインスタンスで使用するリソースが不要となったときに解放するには、MessagingClientFactory.remove(client)をコールします。このメソッドをコールしない場合は、ワーカー・スレッドやJMSリスナーなど一部のリソースがアクティブのまま残る場合があります。

例64-1に、プログラミングによってMessagingClientインスタンスを作成する場合のコードを示します。

例64-1 プログラミングによるMessagingClientインスタンスの作成

Map<String, Object> params = new HashMap<String, Object>();
// params.put(key, value);  // if optional parameters need to be specified.
MessagingClient messagingClient = MessagingClientFactory.createMessagingClient(params);

インスタンス化された後のMessagingClientは、再構成できません。かわりに、任意の構成を使用してMessagingClientクラスの新しいインスタンスを作成する必要があります。

64.2.1 MessagingClientFactoryクラスのAPIリファレンス

MessagingClientFactoryクラスのAPIリファレンスには、Javadocからアクセスできます。

64.3 メッセージの送信

クライアント・アプリケーションでは、oracle.sdp.messagingのMessagingFactoryクラスを使用して、メッセージ・オブジェクトを作成できます。MessagingFactory。このクラスの他のメソッドを使用して、Addresses、AccessPoints、MessageFiltersおよびMessageQueriesを作成できます。これらのメソッドの詳細は、Javadocを参照してください。

これで、クライアント・アプリケーションではメッセージを送信できます。APIは、メッセージの配信ステータスを取得するために後でクライアント・アプリケーションで使用できる文字列識別子を戻します。戻されたステータスは、UMSの内部処理と外部ゲートウェイから受信した配信通知に基づいた最新のステータスです。

作成できるメッセージのタイプには、プレーン・テキスト・メッセージ、text/plainパートとtext/htmlパートで構成できるマルチパート・メッセージ、および異なる配信タイプを使用して、複数受信者用の単一メッセージに配信チャネル(DeliveryType)固有のペイロードを作成するメッセージがあります。

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

- メッセージの作成

- MessagingFactoryクラスのAPIリファレンス

- MessageインタフェースのAPIリファレンス

- 列挙DeliveryTypeのAPIリファレンス

- メッセージのアドレス指定

- ユーザー・プリファレンス・ベースのメッセージング

64.3.1 メッセージの作成

この項では、作成できる様々なタイプのメッセージについて説明します。

64.3.1.1 プレーン・テキスト・メッセージの作成

例64-2に、UMS Java APIを使用してプレーン・テキスト・メッセージを作成する方法を示します。

例64-2 UMS Java APIを使用したプレーン・テキスト・メッセージの作成

Message message = MessagingFactory.createTextMessage("This is a Plain Text message.");

または、

Message message = MessagingFactory.createMessage();
message.setContent("This is a Plain Text message.", "text/plain");

64.3.1.2 Text/PlainパートとText/HTMLパートを持つマルチパート/代替メッセージの作成

例64-3に、UMS Java APIを使用してマルチパート・メッセージまたは代替メッセージを作成する方法を示します。

例64-3 UMS Java APIを使用したマルチパート・メッセージまたは代替メッセージの作成

Message message = MessagingFactory.createMessage();
MimeMultipart mp = new MimeMultipart("alternative");
MimeBodyPart mp_partPlain = new MimeBodyPart();
mp_partPlain.setContent("This is a Plain Text part.", "text/plain");
mp.addBodyPart(mp_partPlain);
MimeBodyPart mp_partRich = new MimeBodyPart();
mp_partRich
.setContent(
"<html><head></head><body><b><i>This is an HTML part.</i></b></body></html>",
"text/html");
mp.addBodyPart(mp_partRich);
message.setContent(mp, "multipart/alternative");

64.3.1.3 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

メッセージを宛先アドレスに送信する際は、複数のチャネルが関連する場合があります。Oracle UMSアプリケーション開発者は、各チャネルに対して正しいマルチパート書式を指定する必要があります。

例64-4に、異なる配信タイプを使用して、複数受信者用の単一メッセージに、配信チャネル(DeliveryType)固有のペイロードを作成する方法を示します。

複数ペイロードのマルチパート/代替メッセージの各最上位パートには、このヘッダーの値が1つ以上含まれている必要があります。このヘッダーの値は、有効な配信タイプの名前である必要があります。DeliveryTypeの使用可能な値は、列挙DeliveryTypeを参照してください。

例64-4 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

Message message = MessagingFactory.createMessage();

// create a top-level multipart/alternative MimeMultipart object.
MimeMultipart mp = new MimeMultipart("alternative");

// create first part for SMS payload content.
MimeBodyPart part1 = new MimeBodyPart();
part1.setContent("Text content for SMS.", "text/plain");

part1.setHeader(Message.HEADER_NS_PAYLOAD_PART_DELIVERY_TYPE, "SMS");

// add first part
mp.addBodyPart(part1);

// create second part for EMAIL and IM payload content.
MimeBodyPart part2 = new MimeBodyPart();
MimeMultipart part2_mp = new MimeMultipart("alternative");
MimeBodyPart part2_mp_partPlain = new MimeBodyPart();
part2_mp_partPlain.setContent("Text content for EMAIL/IM.", "text/plain");
part2_mp.addBodyPart(part2_mp_partPlain);
MimeBodyPart part2_mp_partRich = new MimeBodyPart();
part2_mp_partRich.setContent("<html><head></head><body><b><i>" + "HTML content for EMAIL/IM." +
"</i></b></body></html>", "text/html");
part2_mp.addBodyPart(part2_mp_partRich);
part2.setContent(part2_mp, "multipart/alternative");

part2.addHeader(Message.HEADER_NS_PAYLOAD_PART_DELIVERY_TYPE, "EMAIL");
part2.addHeader(Message.HEADER_NS_PAYLOAD_PART_DELIVERY_TYPE, "IM");

// add second part
mp.addBodyPart(part2);

// set the content of the message
message.setContent(mp, "multipart/alternative");

// set the MultiplePayload flag to true
message.setMultiplePayload(true);

64.3.2 MessagingFactoryクラスのAPIリファレンス

MessagingFactoryクラスのAPIリファレンスには、Javadocからアクセスできます。

64.3.3 MessageインタフェースのAPIリファレンス

MessageインタフェースのAPIリファレンスには、Javadocからアクセスできます。

64.3.4 列挙DeliveryTypeのAPIリファレンス

列挙DeliveryTypeのAPIリファレンスには、Javadocからアクセスできます。

64.3.5 メッセージのアドレス指定

この項では、アドレスのタイプおよびAddressオブジェクトの作成方法について説明します。

64.3.5.1 アドレスのタイプ

アドレスには、デバイス・アドレスとユーザー・アドレスの2種類があります。デバイス・アドレスには、電子メール・アドレス、インスタント・メッセージ・アドレス、電話番号など、様々なタイプがあります。ユーザー・アドレスは、ユーザー・リポジトリにあるユーザーIDです。

64.3.5.2 Addressオブジェクトの作成

Addressインタフェースで定義するAddressオブジェクトは、MessagingFactoryクラスを使用してメッセージの送信者と受信者のアドレスを指定することで作成できます。

64.3.5.2.1 単一のAddressオブジェクトの作成

例64-5に、単一のAddressオブジェクトを作成するコードを示します。

例64-5 単一のAddressオブジェクトの作成

Address recipient = MessagingFactory.createAddress("Email:john@example.com");

64.3.5.2.2 1つのバッチ内での複数のAddressオブジェクトの作成

例64-6に、1つのバッチ内に複数のAddressオブジェクトを作成するコードを示します。

例64-6 1つのバッチ内での複数のAddressオブジェクトの作成

String[] recipientsStr = {"Email:john@example.com", "SMS:123456"};
Address[] recipients = MessagingFactory.createAddress(recipientsStr);

64.3.5.2.3 メッセージへの送信者または受信者のアドレスの追加

例64-7に、送信者または受信者のアドレスをメッセージに追加するコードを示します。

例64-7 メッセージへの送信者または受信者のアドレスの追加

Address sender = MessagingFactory.createAddress("Email:john@example.com");
Address recipient = MessagingFactory.createAddress("Email:jane@example.com");
message.addSender(sender);
message.addRecipient(recipient);

64.3.5.3 フェイルオーバー・アドレスを使用した受信者の作成

例64-8に、フェイルオーバー・アドレスを使用して受信者を作成するコードを示します。

例64-8 フェイルオーバーを使用した単一のAddressオブジェクトの作成

String recipientWithFailoverStr = "Email:john@example.com, SMS:123456";
Address recipient = MessagingFactory.createAddress(recipientWithFailoverStr);

64.3.5.4 MessagingFactoryクラスのAPIリファレンス

MessagingFactoryクラスのAPIリファレンスには、Javadocからアクセスできます。

64.3.5.5 AddressインタフェースのAPIリファレンス

AddressインタフェースのAPIリファレンスには、Javadocからアクセスできます。

64.3.6 ユーザー・プリファレンス・ベースのメッセージング

ユーザー受信者にメッセージを送信(してユーザーのメッセージング・プリファレンスを活用)する際、メッセージで様々なビジネス条件の現在の値をメタデータとして渡すことができます。UMSサーバーでは、メッセージで指定されたファクトを、ユーザーのメッセージング・フィルタで指定されているビジネス条件の条件と照合します。

注意:

すべてのファクトはメタデータとしてMessage.NAMESPACE_NOTIFICATION_PREFERENCES名前空間に追加する必要があります。他の名前空間のメタデータは(ユーザー・メッセージング・プリファレンスの解決においては)無視されます。

図64-9は、ユーザー受信者を指定し、メッセージのユーザー・プリファレンスでビジネス条件のファクトを指定する方法を示します。サポートされているビジネス条件の完全なリストは、第67章「ユーザー・メッセージング・プリファレンス」を参照してください。

例64-9 ユーザー・プリファレンス・ベースのメッセージング

Message message = MessagingFactory.createMessage();
// create and add a user recipient
Address userRecipient1 = MessagingFactory.createAddress("USER:sampleuser1");
message.addRecipient(userRecipient1);
// specify business term facts
message.setMetaData(Message.NAMESPACE_NOTIFICATION_PREFERENCES, "Customer
Name", "ACME");
//  where "Customer Name" is the Business Term name, and "ACME" is the
Business Term value (i.e, fact).

64.4 メッセージ・ステータスの取得

メッセージを送信した後は、Oracle UMSを使用して、メッセージ・ステータスを同期または非同期で取得できます。

64.4.1 メッセージ・ステータスの同期取得

現行ステータスの同期取得を実行するには、MessagingClient APIから次のフローを使用します。

String messageId = messagingClient.send(message);
Status[] statuses = messagingClient.getStatus(messageId);

または、

Status[] statuses = messagingClient.getStatus(messageId, address[]) --- where
address[] is an array of one or more of the recipients set in the message.

64.4.2 メッセージ・ステータスの非同期取得

ステータスを非同期で受信する場合は、クライアント・アプリケーションによってListenerオブジェクトとオプションの相関機能オブジェクトが指定されます。受信ステータスが着信すると、リスナーのonStatusコールバックが起動されます。当初指定の相関機能オブジェクトもコールバック・メソッドに渡されます。

64.4.2.1 プログラムによるリスナーの作成

リスナーは純粋なプログラムです。リスナーは、oracle.sdp.messaging.Listenerインタフェースを実装して作成します。このインタフェースは、具体クラス(既存クラスの1つ、新規クラス、あるいは無名クラスか内部クラス)として実装できます。

次のコード例は、ステータス・リスナーの実装方法を示しています。

import oracle.sdp.messaging.Listener;

public class StatusListener implements Listener {

@Override
public void onMessage(Message message, Serializable correlator) {
}
@Override
public void onStatus(Status status, Serializable correlator) {
System.out.println("Received Status: " + status + " with optional correlator: " +

correlator);
}
}

Listenerオブジェクトへの参照は、「デフォルトのステータス・リスナー」および「メッセージごとのステータス・リスナー」の説明に従って、setStatusListenerまたはsendメソッドに渡します。メッセージのステータスが着信すると、UMSインフラストラクチャでは、リスナーのonStatusメソッドが必要に応じて起動されます。

64.4.2.2 デフォルトのステータス・リスナー

クライアント・アプリケーションでは通常、デフォルトのステータス・リスナー(例64-10)が設定されます。クライアント・アプリケーションでメッセージが送信されると、そのメッセージの配信ステータス・コールバックによって、デフォルト・リスナーのonStatusメソッドが起動されます。

例64-10 デフォルトのステータス・リスナー

messagingClient.setStatusListener(new MyStatusListener());
messagingClient.send(message);

64.4.2.3 メッセージごとのステータス・リスナー

この方法では、クライアント・アプリケーションによってメッセージが送信され、リスナー・オブジェクトとオプションの相関機能オブジェクトが指定されます(例64-11)。該当するメッセージに対して配信ステータス・コールバックが使用できる場合は、指定したリスナーのonStatusメソッドが起動されます。当初指定の相関機能オブジェクトもコールバック・メソッドに渡されます。

例64-11 メッセージごとのステータス・リスナー

messagingClient.send(message, new MyStatusListener(), null);

64.5 メッセージの受信

この項では、アプリケーションでメッセージを受信する方法について説明します。メッセージを受信するには、最初にアクセス・ポイントを登録する必要があります。アプリケーション側から見ると、メッセージを受信するモードには同期と非同期があります。

64.5.1 アクセス・ポイントの登録

クライアント・アプリケーションではアクセス・ポイントを作成して登録し、特定のアドレスに送信された着信メッセージを受信するように指定できます。クライアント・アプリケーションにはメッセージ・リスナーが指定されていないため、受信したすべてのメッセージはUMSに保持されます。この場合、クライアント・アプリケーションでは、受信メソッドを起動して保留中のメッセージをフェッチできます。アクセス・ポイントの指定なしでメッセージを受信した場合、アプリケーションでは、登録したすべてのアクセス・ポイントのメッセージを受信します。アクセス・ポイントが指定されている場合、アプリケーションでは、そのアクセス・ポイントに送信されたメッセージを受信します。

AccessPointは、着信メッセージを受信するための1つ以上のデバイス・アドレスを表します。着信メッセージを受信するアプリケーションでは、メッセージの受信者アドレスを表すアクセス・ポイントを1つ以上登録する必要があります。サーバーでは、着信メッセージの受信者アドレスと一連の登録済アクセス・ポイントを照合し、一致したアクセス・ポイントを登録したアプリケーションに、その着信メッセージをルーティングします。

MessagingFactory.createAccessPointを使用してアクセス・ポイントを作成し、そのアクセス・ポイントをMessagingClient.registerAccessPointを使用してメッセージ受信用に登録できます。

番号9000のSMSアクセス・ポイントを登録するには、次のように指定します。

AccessPoint accessPointSingleAddress =
MessagingFactory.createAccessPoint(AccessPoint.AccessPointType.SINGLE_ADDRESS,
DeliveryType.SMS, "9000");
messagingClient.registerAccessPoint(accessPointSingleAddress);

番号が9000から9999の範囲内のSMSアクセス・ポイントを登録するには、次のように指定します。

AccessPoint accessPointRangeAddress =
MessagingFactory.createAccessPoint(AccessPoint.AccessPointType.NUMBER_RANGE,
DeliveryType.SMS,"9000,9999");
messagingClient.registerAccessPoint(accessPointRangeAddress);

64.5.2 同期受信

受信は非ブロック操作です。アプリケーションやアクセス・ポイントに関して保留中のメッセージがない場合、該当するコールでは、空のリストが即時に戻されます。受信によって、すべての使用可能なメッセージが戻される保証はありませんが、効率上の理由から使用可能なメッセージのサブセットのみを戻すことはできます。

メッセージの同期受信には、メソッドMessagingClient.receiveを使用できます。このメソッドは、メッセージの非同期受信による構成オーバーヘッドを望まない軽量なクライアント向けの便利なポーリング・メソッドです。このメソッドは、アプリケーションのインバウンド・キューですぐに使用できるメッセージのリストを戻します。

このメソッドは非ブロック・コールを実行するため、現在使用できるメッセージがない場合はNULLを戻します。

注意:

1回の起動で、使用可能なメッセージがすべて取得される保証はありません。ポーリングして、使用可能なすべてのメッセージを受信したことを確認する必要があります。

64.5.3 非同期受信

メッセージを非同期で受信する場合は、クライアント・アプリケーションによってアクセス・ポイントが登録され、Listenerオブジェクトとオプションの相関機能オブジェクトが指定されます。受信メッセージが指定のアクセス・ポイント・アドレスに着信すると、リスナーのonMessageコールバックが起動されます。当初指定の相関機能オブジェクトもコールバック・メソッドに渡されます。

64.5.3.1 プログラムによるリスナーの作成

リスナーは純粋なプログラムです。リスナーは、oracle.sdp.messaging.Listenerインタフェースを実装して作成します。このインタフェースは、具体クラス(既存クラスの1つ、新規クラス、あるいは無名クラスか内部クラス)として実装できます。

次のコード例は、メッセージ・リスナーの実装方法を示しています。

import oracle.sdp.messaging.Listener;

public class MyListener implements Listener {

@Override
public void onMessage(Message message, Serializable correlator) {
System.out.println("Received Message: " + message + " with optional correlator: " +
correlator);
}
@Override
public void onStatus(Status status, Serializable correlator) {
System.out.println("Received Status: " + status + " with optional correlator: " +
correlator);
}

}

リスナー・オブジェクトへの参照は、「デフォルトのメッセージ・リスナー」および「アクセス・ポイントごとのメッセージ・リスナー」の説明に従って、setMessageListenerまたはregisterAccessPointメソッドに渡します。アプリケーションのメッセージが着信すると、UMSインフラストラクチャでは、リスナーのonMessageメソッドが起動されます。

64.5.3.2 デフォルトのメッセージ・リスナー

クライアント・アプリケーションでは通常、デフォルトのメッセージ・リスナー(例64-12)が設定されます。このリスナーは、このクライアント・アプリケーションによって送信されたメッセージの中で、関連するリスナーがないメッセージの配信ステータスに対して起動されます。Oracle UMSでは、このクライアント・アプリケーションによって登録されたアクセス・ポイント宛てのメッセージを受信すると、そのクライアント・アプリケーションのデフォルトのリスナーに対してonMessageコールバックが起動されます。

デフォルトのリスナーを削除するには、nullの引数を指定してこのメソッドをコールします。

例64-12 デフォルトのメッセージ・リスナー

messagingClient.setMessageListener(new MyListener());

非同期受信の詳細な手順については、サンプル・アプリケーションusermessagingsample-echoを参照してください。

64.5.3.3 アクセス・ポイントごとのメッセージ・リスナー

クライアント・アプリケーションでは、アクセス・ポイントを登録し、Listenerオブジェクトとオプションの相関機能オブジェクトを指定できます(例64-13)。受信メッセージが指定のアクセス・ポイント・アドレスに着信すると、指定したリスナーのonMessageメソッドが起動されます。当初指定の相関機能オブジェクトもコールバック・メソッドに渡されます。

例64-13 アクセス・ポイントごとのメッセージ・リスナー

messagingClient.registerAccessPoint(accessPoint, new MyListener(), null);

64.5.4 メッセージ・フィルタ

アプリケーションでMessageFilterを使用すると、配信されるメッセージをより強力に制御できます。MessageFilterには、一致基準とアクションが含まれています。アプリケーションでは、一連のメッセージ・フィルタを登録できます。登録されたメッセージ・フィルタは、着信(受信)メッセージに順に適用され、メッセージが基準と一致するとアクションが実行されます。たとえば、アプリケーションでMessageFiltersを使用して必要なブラックリストを実装すると、指定した送信者アドレスからのすべてのメッセージを拒否できます。

MessagingFactory.createMessageFilterを使用してメッセージ・フィルタを作成し、そのメッセージ・フィルタをMessagingClient.registerMessageFilterを使用して登録できます。フィルタは、アプリケーションの現行フィルタ・チェーンの最後に追加されます。受信したメッセージは、フィルタ・チェーンを順に通過します。メッセージがフィルタの基準に一致すると、そのフィルタのアクションが即時に実行されます。メッセージがフィルタに一致しない場合のデフォルト・アクションでは、そのメッセージが受信されてアプリケーションに配信されます。たとえば、件名が"spam"のメッセージを拒否するには、次のように指定します。

MessageFilter subjectFilter = MessagingFactory.createMessageFilter("spam",
MessageFilter.FieldType.SUBJECT, null, MessageFilter.Action.REJECT);
messagingClient.registerMessageFilter(subjectFilter);

電子メール・アドレスspammer@foo.comからのメッセージを拒否するには、次のように指定します。

MessageFilter senderFilter =
MessagingFactory.createBlacklistFilter("spammer@foo.com");
messagingClient.registerMessageFilter(senderFilter);

64.6 クラスタ環境の構成

APIでは、クラスタ環境にクライアント・アプリケーションとUMSサーバーがデプロイされている環境をサポートしています。クラスタ化されたデプロイメントが期待どおりに機能するためには、クライアント・アプリケーションを正しく構成する必要があります。次のルールが適用されます。

- 2つのクライアント・アプリケーションで同じApplicationName構成パラメータが使用されている場合、それらは同じアプリケーションのインスタンスであるとみなされます。通常、このパラメータはAPI実装によって統合されているため、アプリケーション開発者による移入は不要です。

- 同じアプリケーションのインスタンスでは、それらの構成のほとんどが共有され、1つのインスタンスによって登録されたAccessポイントやメッセージ・フィルタなどのアーティファクトは、すべてのインスタンスによって共有されます。

- ApplicationInstanceName構成パラメータを使用すると、各インスタンスを区別できます。通常、このパラメータはAPI実装によって統合されているため、アプリケーション開発者による移入は不要です。この値を移入する必要がある場合については、Javadocを参照してください。

- アプリケーション・セッションは、インスタンス固有です。メッセージにセッション・フラグを設定すると、メッセージを送信したインスタンスが受信した返信を確認できます。

- リスナー相関機能は、インスタンス固有です。1つのアプリケーションの2つの異なるインスタンスで複数のリスナーが登録され、異なる相関機能が提供されている場合は、インスタンスAのリスナーが起動されると相関機能Aが提供され、インスタンスBのリスナーが起動されると相関機能Bが提供されます。

64.7 セキュリティの構成

クライアント・アプリケーションには、セキュアなリスナーを確立するために、1つ以上の追加構成パラメータの指定が必要な場合があります(表64-1を参照)。

64.8 スレッド・モデル

通常、UMS Java APIを使用するクライアント・アプリケーションはマルチスレッド化されています。通常のシナリオにはEJBインスタンスのプールが含まれ、各シナリオではMessagingClientインスタンスと、Webコンテナの複数のスレッドによって提供されるサーブレット・インスタンスが使用されます。UMS Java APIは、次のスレッド・モデルをサポートしています。

- MessagingClientFactory.createMessagingClientの各コールでは、新しいMessagingClientインスタンスが戻されます。

- MessagingClientFactory.createMessagingClientと等しいパラメータ・マップを渡して作成した2つのMessagingClientインスタンスは、同じクライアントのインスタンスです。異なるパラメータ・マップを渡して作成したインスタンスは、個別のクライアントのインスタンスです。

- MessagingClientのインスタンスは、MessagingClientFactory.createMessagingClientを使用して取得した場合、スレッド・セーフではありません。クライアント・アプリケーションでは、所定のインスタンスが一度に1つのスレッドのみで使用されていることを確認する必要があります。この確認は、一度に1つのインスタンスのみが1つのスレッドに対して表示されていることを確認するか、MessagingClientインスタンスに対するアクセスを同期化することで実行できます。

- 同じクライアントの2つのインスタンス(同じパラメータ・マップを使用して作成)は、いくつかのリソースを共有します。特に、これらのインスタンスが、メッセージとステータスのリスナーを共有し、ワーカー・スレッドの共通プールを使用して非同期メッセージング操作を実行することに注意してください。たとえば、インスタンスAがsetMessageListener()をコールし、次にインスタンスBがsetMessageListener()をコールした場合は、Bのリスナーがアクティブなデフォルトのメッセージ・リスナーとなります。

次に、典型的なユースケースを示します。

- EJB(メッセージドリブンBeanまたはセッションBeanのいずれか)アプリケーションからUMS Java APIを使用するための推奨方法は、MessagingClientインスタンスをBeanのejbCreate(または同等の@PostConstruct)メソッドに作成し、そのMessagingClientインスタンスをBeanクラスのインスタンス変数に保存することです。EJBコンテナでは、一度に1つのスレッドのみが所定のEJBインスタンスを使用していることが確認され、これによって一度に1つのスレッドのみがBeanのMessagingClientインスタンスにアクセスしていることが確認されます。

- サーブレットからUMS Java APIを使用するには、いくつかの方法があります。通常、Webコンテナでは、サーブレット・クラスの単一のインスタンスが作成されます。このインスタンスには複数のスレッドが同時にアクセスできます。作成した単一のMessagingClientインスタンスがサーブレット・インスタンス変数に保存されている場合、そのインスタンスへのアクセスは同期している必要があります。
他の方法は、複数のサーブレット・スレッド間で共有するMessagingClientインスタンスのプールを作成することです。

最終的には、個別のMessagingClientインスタンスを個別のHTTPセッションに関連付けることができます。この方法を使用すると、すべてのサーブレット・リクエストに対して単一のMessagingClientを指定するよりも同時性が向上します。ただし、同時クライアント・リクエストが原因で複数のスレッドが1つのHTTPセッションに同時にアクセスする可能性があります。この場合は、同期がさらに必要になります。

64.8.1 リスナー・スレッド

非同期リスニングを実行するには、受信メッセージとステータス用に構成したJMSキューをリスニングする1つ以上のワーカー・スレッドを生成します。デフォルトでは、受信メッセージと受信ステータス通知に対して1つのワーカー・スレッドがそれぞれ生成されます(少なくとも1つのメッセージまたはステータス・リスナーがそれぞれ登録されていることが前提です)。クライアント・アプリケーションでは、追加のワーカー・スレッドを構成して非同期処理の同時性を向上させることができます。これを実行するには、MessagingConstants.MESSAGE_LISTENER_THREADSキーとMessagingConstants.STATUS_LISTENER_THREADSキーに整数値を指定し、これらの値をMessagingClientインスタンスの作成時に使用した構成パラメータで、必要なワーカー・スレッドの数に設定します。

64.9 UMSクライアントAPIを使用したクライアント・アプリケーションの作成

この項では、usermessagingsampleというアプリケーションの作成方法について説明します。このアプリケーションは、アウトバウンド・メッセージングおよびメッセージ・ステータスの同期取得の両方に対してUMSクライアントAPIを使用するWebクライアント・アプリケーションです。usermessagingsampleはインバウンド・メッセージングもサポートしています。デプロイして構成したusermessagingsampleを使用すると、電子メール・クライアントにメッセージを送信できます。

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、Oracle SOA Suiteのサンプルを参照してください。

このページにナビゲートした後は、検索条件の「UMS」を入力して「検索」をクリックすることで、Oracle User Messaging Serviceのコード・サンプルを検出できます。

このサンプルはWebアプリケーション・モジュール(WAR)に重点を置き、いくつかのHTMLフォームとサーブレットを定義します。Webアプリケーション・モジュールのコードと対応するXMLファイルは、提供されているusermessagingsample-src.zipソースから使用できます。サーブレットでは、UMSクライアントAPIを使用して、UMSクライアント・インスタンスを作成し(次に、アプリケーションの情報を登録します)、メッセージを送信します。

このアプリケーションはusermessagingsample.earというEnterprise Archive(EAR)ファイルとしてパッケージ化されており、その構造は次のとおりです。

- usermessagingsample.ear

- META-INF

- application.xml -- すべてのアプリケーション・モジュール用のディスクリプタ・ファイル。

- weblogic-application.xml -- oracle.sdp.messaging共有ライブラリのimportを含むディスクリプタ・ファイル。

- usermessagingsample-web.ear -- Webベースのフロント・エンドおよびサーブレットが格納されます。

- WEB-INF

- web.xml

- weblogic.xml

ビルトインのサンプル・アプリケーションおよびソース・コード(usermessagingsample-src.zip)は、OTNで入手できます。

64.9.1 開発の概要

次の各項では、usermessagingsample.earを例にして、アウトバウンド・メッセージング機能を持つアプリケーションの作成プロセスを説明します。

1. 第64.9.2項「電子メール・ドライバの構成」

2. 第64.9.3項「JDeveloper 11gを使用したアプリケーションの作成」

3. 第64.9.4項「アプリケーションのデプロイ」

4. 第64.9.5項「アプリケーションのテスト」

64.9.2 電子メール・ドライバの構成

Oracle User Messaging Serviceの電子メール・ドライバを有効にしてアウトバウンド・メッセージングおよびステータスの取得を実行するには、電子メール・ドライバを次のように構成します。

- OutgoingMailServerプロパティの値として、SMTPメール・サーバーの名前を入力します。

注意:

このサンプル・アプリケーションは汎用的であるため、適切なメッセージング・ドライバがデプロイされて構成されている場合は、他のチャネル経由のアウトバウンド・メッセージングもサポートできます。

64.9.3 JDeveloper 11gを使用したアプリケーションの作成

この項では、Windowsベース・ビルドのJDeveloperを使用して、usermessagingsampleを作成、コンパイルおよびデプロイする手順を説明します。

64.9.3.1 プロジェクトを開く

1. Oracle JDeveloperで、usermessagingsample.jws(.zipファイルに含まれています)を開きます。

図64-1 Oracle JDeveloperの「アプリケーションを開く」ウィンドウ

「図64-1 Oracle JDeveloperの「アプリケーションを開く」ウィンドウ」の説明

Oracle JDeveloperのメイン・ウィンドウにプロジェクトが表示されます。

図64-2 Oracle JDeveloperのメイン・ウィンドウ

「図64-2 Oracle JDeveloperのメイン・ウィンドウ」の説明

2. Webモジュールで「Oracle UMS Client」ライブラリが使用されていることを確認して、サンプル・アプリケーションのビルド依存性を満たします。

1. 「アプリケーション・ナビゲータ」で、Webモジュール「usermessagingsample-web」を右クリックし、「プロジェクト・プロパティ」を選択します。

2. 左側のペインで、「ライブラリとクラスパス」を選択します。

図64-3 ライブラリの確認

「図64-3 ライブラリの確認」の説明

3. 「OK」をクリックします。

3. usermessagingsample-webプロジェクトの下にあるJavaファイルを検索し、メッセージング・クライアントAPIを使用してメッセージの送信、ステータスの取得およびメッセージの同期受信を実行する方法を確認します。MessagingClientインスタンスは、プロジェクトのSampleUtils.javaに作成されます。

64.9.4 アプリケーションのデプロイ

アプリケーションをデプロイする手順は、次のとおりです。

1. ナビゲーション・ペインでアプリケーションを右クリックし、「新規」を選択して、アプリケーション・サーバー接続を作成します。第64.11項「新規アプリケーション・サーバー接続の作成」の説明に従います。

2. アプリケーションをデプロイするには、「usermessagingsample application」→「デプロイ」→「usermessagingsample」→「デプロイ先」→「SOA_server」の順に選択します(図64-4)。

図64-4 プロジェクトのデプロイ

「図64-4 プロジェクトのデプロイ」の説明

3. メッセージBuild Successfulがログに表示されていることを確認します。

4. メッセージDeployment Finishedがデプロイメント・ログに表示されていることを確認します。
アプリケーションが正常にデプロイされました。

サンプルを実行するには、その前に、Oracle User Messaging Serviceの追加ドライバを構成し、必要に応じて、ユーザー・メッセージング・プリファレンスでメッセージを受信するユーザー用のデフォルト・デバイスを構成する必要があります。

注意:

詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

64.9.5 アプリケーションのテスト

Oracle WebLogic Serverの実行中のインスタンスにusermessagingsampleをデプロイした後は、次の手順を実行します。

1. Webブラウザを起動し、サンプル・アプリケーションのアドレスをhttp://host:http-port/usermessagingsample/と入力します。たとえば、ブラウザのナビゲーション・バーにhttp://localhost:7001/usermessagingsample/と入力します。
プロンプトが表示された場合は、ログイン資格証明を入力します。たとえば、ユーザー名はweblogicと入力します。メッセージ・サンプルをテストするためのブラウザ・ページが表示されます(図64-5)。

図64-5 サンプル・アプリケーションのテスト

「図64-5 サンプル・アプリケーションのテスト」の説明

2. サンプル・メッセージの送信をクリックします。「メッセージの送信」ページが表示されます(図64-6)。

図64-6 テスト・メッセージのアドレス指定

「図64-6 テスト・メッセージのアドレス指定」の説明

3. (オプション)送信者アドレスを次の書式で入力します。
Email:sender_address

たとえば、Email:sender@example.comと入力します。

4. 受信者アドレスを1つ以上入力します。たとえば、Email:recipient@example.comと入力します。複数のアドレスを入力する場合は、次のようにカンマ区切りリストで入力します。
Email:recipient_address1, Email:recipient_address2

ユーザー・メッセージング・プリファレンスを構成している場合、メッセージのアドレスは単にUser:usernameと指定できます。たとえば、User:weblogicと入力します。

5. (オプション)件名、つまり電子メールの内容を入力します。

6. 「送信」をクリックします。メッセージ・ステータス・ページが表示され、トランザクションの進捗が表示されます(図64-7には、メッセージング・エンジンが受信して処理するメッセージが表示されています)。

図64-7 メッセージ・ステータス

「図64-7 メッセージ・ステータス」の説明

7. リフレッシュをクリックしてステータスを更新します。電子メール・メッセージが電子メール・サーバーに配信されると、図64-8に示すように、「ステータスの内容」フィールドに「リモート・ゲートウェイへのアウトバウンド・メッセージの配信に成功しました。」と表示されます。

図64-8 メッセージ・ステータスの確認

「図64-8 メッセージ・ステータスの確認」の説明

64.10 UMSクライアントAPIを使用したクライアント・エコー・アプリケーションの作成

この項では、usermessagingsample-echoというアプリケーションの作成方法について説明します。このアプリケーションは、UMSクライアントAPIを使用して、電子メール・アドレスからメッセージを非同期で受信し、リプライを送信者にエコーして戻すデモ・クライアント・アプリケーションです。

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、Oracle SOA Suiteのサンプルを参照してください。

このページにナビゲートした後は、検索条件の「UMS」を入力して「検索」をクリックすることで、Oracle User Messaging Serviceのコード・サンプルを検出できます。

このアプリケーションはusermessagingsample-echo.earというEnterprise Archive(EAR)ファイルとしてパッケージ化されており、その構造は次のとおりです。

- usermessagingsample-echo.ear

- META-INF

- application.xml -- すべてのアプリケーション・モジュール用のディスクリプタ・ファイル。

- weblogic-application.xml -- oracle.sdp.messaging共有ライブラリのimportを含むディスクリプタ・ファイル。

- usermessagingsample-echo-web.war -- Webベースのフロント・エンドおよびサーブレットが格納されます。受信したメッセージを処理してエコー・レスポンスを戻すリスナーも含まれています。

- WEB-INF

- web.xml

- weblogic.xml

ビルトインのサンプル・アプリケーションおよびソース・コード(usermessagingsample-echo-src.zip)は、OTNで入手できます。

64.10.1 開発の概要

次の各項では、usermessagingsample-echo.earを例にして、非同期のインバウンドおよびアウトバウンド・メッセージング機能を持つアプリケーションの作成プロセスを説明します。

1. 第64.10.2項「電子メール・ドライバの構成」

2. 第64.10.3項「JDeveloper 11gを使用したアプリケーションの作成」

3. 第64.10.4項「アプリケーションのデプロイ」

4. 第64.10.5項「アプリケーションのテスト」

64.10.2 電子メール・ドライバの構成

Oracle User Messaging Serviceの電子メール・ドライバを有効にしてインバウンドやアウトバウンド・メッセージングおよびステータスの取得を実行するには、電子メール・ドライバを次のように構成します。

- OutgoingMailServerプロパティの値として、SMTPメール・サーバーの名前を入力します。

- IncomingMailServerプロパティの値として、IMAP4/POP3メール・サーバーの名前を入力します。受信ユーザー名とパスワードも構成します。

注意:

このサンプル・アプリケーションは汎用的であるため、適切なメッセージング・ドライバがデプロイされて構成されている場合は、他のチャネル経由のインバウンドおよびアウトバウンド・メッセージングもサポートできます。

64.10.3 JDeveloper 11gを使用したアプリケーションの作成

この項では、Windowsベース・ビルドのJDeveloperを使用して、usermessagingsample-echoを作成、コンパイルおよびデプロイする手順を説明します。

64.10.3.1 プロジェクトを開く

1. usermessagingsample-echo-src.zipをJDEV_HOME/communications/
samples/ディレクトリに解凍します。共有ライブラリ参照をプロジェクトで有効にするには、このディレクトリを使用する必要があります。

注意:

別のディレクトリを使用する場合は、oracle.sdp.messagingライブラリ・ソース・パスをJDEV_HOME/
communications/modules/oracle.sdp.messaging_11.1.1/
sdpmessaging.jarに更新する必要があります。

2. Oracle JDeveloperで、usermessagingsample-echo.jws(.zipファイルに含まれています)を開きます(図64-9)。

図64-9 プロジェクトを開く

「図64-9 プロジェクトを開く」の説明

Oracle JDeveloperのメイン・ウィンドウにプロジェクトが表示されます(図64-10)。

図64-10 Oracle JDeveloperのメイン・ウィンドウ

「図64-10 Oracle JDeveloperのメイン・ウィンドウ」の説明

3. 次のライブラリがusermessagingsample-echo-webモジュールに追加されていることを確認して、サンプル・アプリケーションのビルド依存性が満たされていることを確認します。

- ライブラリ: oracle.sdp.messaging、クラスパス: JDEV_HOME/
communications/modules/oracle.sdp.messaging_11.1.1/
sdpmessaging.jar。これはJavaライブラリで、UMS、およびUMSを使用してメッセージを送受信するアプリケーションで使用されます。

各モジュールに対して次の手順を実行します。

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

2. 左側のペインで、「ライブラリとクラスパス」を選択します(図64-11)。

図64-11 ライブラリの確認

「図64-11 ライブラリの確認」の説明

3. 「OK」をクリックします。

4. usermessagingsample-echo-webプロジェクトの下にあるJavaファイルを検索し、メッセージング・クライアントAPIを使用してアクセス・ポイントを登録および登録解除する方法、およびEchoListenerを使用してメッセージを非同期で受信する方法を確認します。

64.10.4 アプリケーションのデプロイ

アプリケーションをデプロイする手順は、次のとおりです。

1. ナビゲーション・ペインでアプリケーションを右クリックし、「新規」を選択して、アプリケーション・サーバー接続を作成します。第64.11項「新規アプリケーション・サーバー接続の作成」の説明に従います。

2. アプリケーションをデプロイするには、「usermessagingsample-echo application」→「デプロイ」→「usermessagingsample-echo」→「デプロイ先」→「SOA_server」の順に選択します(図64-12)。

図64-12 プロジェクトのデプロイ

「図64-12 プロジェクトのデプロイ」の説明

3. メッセージBuild Successfulがログに表示されていることを確認します。

4. メッセージDeployment Finishedがデプロイメント・ログに表示されていることを確認します。
アプリケーションが正常にデプロイされました。

サンプルを実行するには、その前に、Oracle User Messaging Serviceの追加ドライバを構成し、必要に応じて、ユーザー・メッセージング・プリファレンスでメッセージを受信するユーザー用のデフォルト・デバイスを構成する必要があります。

注意:

詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

64.10.5 アプリケーションのテスト

Oracle WebLogic Serverの実行中のインスタンスにusermessagingsample-echoをデプロイした後は、次の手順を実行します。

1. Webブラウザを起動し、サンプル・アプリケーションのアドレスをhttp://host:http-port/usermessagingsample-echo/と入力します。たとえば、ブラウザのナビゲーション・バーにhttp://localhost:7001/usermessagingsample-echo/と入力します。
プロンプトが表示された場合は、ログイン資格証明を入力します。たとえば、ユーザー名はweblogicと入力します。メッセージ・サンプルをテストするためのブラウザ・ページが表示されます(図64-13)。

図64-13 サンプル・アプリケーションのテスト

「図64-13 サンプル・アプリケーションのテスト」の説明

2. アクセス・ポイントの登録/登録解除をクリックします。「アクセス・ポイントの登録」ページが表示されます(図64-14)。

図64-14 アクセス・ポイントの登録

「図64-14 アクセス・ポイントの登録」の説明

3. アクセス・ポイントのアドレスを次の書式で入力します。
EMAIL:server_address

たとえば、EMAIL:myserver@example.comと入力します。

4. アクションとして登録を選択し、送信をクリックします。登録ステータス・ページが表示され、図64-15に示すように登録済と表示されます。

図64-15 アクセス・ポイントの登録ステータス

「図64-15 アクセス・ポイントの登録ステータス」の説明

5. メッセージ・クライアント(電子メールの場合は電子メール・クライアント)から、前の手順でアクセス・ポイントとして登録したアドレスに、メッセージを送信します。
該当するチャネル用のUMSメッセージング・ドライバが正しく構成されている場合は、usermessagingsample-echoアプリケーションから戻されるエコー・メッセージを受信できるはずです。

64.11 新規アプリケーション・サーバー接続の作成

次の手順を実行し、アプリケーション・サーバー接続を作成します。

1. プロジェクトを右クリックし、「新規」→「接続」→「アプリケーション・サーバー接続」の順に選択して、新規アプリケーション・サーバー接続を作成します(図64-16)。

図64-16 新規アプリケーション・サーバー接続

「図64-16 新規アプリケーション・サーバー接続」の説明

2. 接続にSOA_serverという名前を付けて、「次へ」をクリックします(図64-17)。

3. 「接続タイプ」に「WebLogic 10.3」を選択します。

図64-17 新規アプリケーション・サーバー接続

「図64-17 新規アプリケーション・サーバー接続」の説明

4. 認証情報を入力します。ユーザー名の一般的な値はweblogicです。

5. 「接続」ダイアログで、SOA管理サーバーのホスト名、ポートおよびSSLポートを入力し、WLSドメインのドメイン名を入力します。

6. 「次へ」をクリックします。

7. 「テスト」ダイアログで、「接続のテスト」をクリックします。

8. メッセージSuccess!が表示されていることを確認します。
アプリケーション・サーバー接続が作成されました。

65 ユーザー・メッセージング・サービスWeb サービスAPIを使用したメッセージの送受信

この章では、ユーザー・メッセージング・サービス(UMS)WebサービスAPIを使用してアプリケーションを開発する方法について説明します。このAPIは、Fusion Middlewareアプリケーション開発者が、UMSサーバーに関連するリモート・コンテナで実行されるUMSメッセージング・アプリケーションを実装する際の、プログラム上のエントリ・ポイントとして機能します。

この章には次の項が含まれます:

- 第65.1項「UMS WebサービスAPIの概要」

- 第65.2項「UMSクライアント・インスタンスの作成とランタイム・パラメータの指定」

- 第65.3項「メッセージの送信」

- 第65.4項「メッセージ・ステータスの取得」

- 第65.5項「メッセージの受信」

- 第65.6項「クラスタ環境の構成」

- 第65.7項「セキュリティの構成」

- 第65.8項「スレッド・モデル」

- 第65.9項「WebサービスAPIを使用したサンプル・チャット・アプリケーション」

- 第65.10項「新規アプリケーション・サーバー接続の作成」

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、次の場所にあるサンプルを参照してください。

http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.html

65.1 UMS WebサービスAPIの概要

UMS WebサービスAPIは、機能的にはJava APIと同じです。Webサービス・タイプおよびインタフェースのJAX-WSおよびJAXBバインディングは、対応するJava APIクラスと同じように命名されているものの、別個のパッケージ空間にあります。この2つのAPIのクラスには相互運用性はありません。

このAPIのコンシューマは、ファクトリ・メソッドを使用してMessagingClientオブジェクトのインスタンスを取得できます。デプロイメントは、共有ライブラリ「oracle.sdp.client」としてです。

UMS WebサービスAPIは、次のようにグループ化されたパッケージで構成されています。

- 共通およびクライアントのパッケージ

- oracle.ucs.messaging.ws

- oracle.ucs.messaging.ws.types

- WebサービスAPIのWeb Service Definition Language(WSDL)ファイル

- messaging.wsdl: Webサービス・クライアントによって起動される操作を定義します。

- listener.wsdl: 非同期メッセージまたはステータス通知を受信するためにクライアントで実装する必要のあるコールバック操作を定義します。

ソース・コードを含むサンプルは、Oracle Technology Network(OTN)から入手できます。

65.2 UMSクライアント・インスタンスの作成とランタイム・パラメータの指定

この項では、UMSクライアントを作成するための要件を説明します。oracle.ucs.messaging.ws.MessagingClientのインスタンスはパブリック・コンストラクタを使用して作成できます。クライアント・アプリケーションでは、クライアント・オブジェクトのインスタンス化の実行時に一連のパラメータを指定できます。たとえば、MessagingClientインスタンスを構成するには、複数のパラメータをキーと値のペアのマップとしてjava.util.Map<String, Object>に指定します。特に、これらの構成パラメータは、通信先のUMSサーバーを識別することによるWebサービスのエンドポイントURLの識別、およびセキュリティ・ポリシーなどの他のWebサービス関連情報の識別に役立ちます。クライアント・アプリケーションでは、使用可能なメカニズムを使用して構成パラメータを保存およびロードする必要があります。

デプロイメントに適した構成ストレージ・メカニズムがどのようなものであっても、それへのパラメータのマッピング、またはそこからのパラメータのマッピングは、ユーザーの責任です。MessagingClientクラスでは指定されたキーと値のペアが構成のために使用され、ベースとなるJAX-WSサービスにすべてのパラメータが渡されます。JAX-WSで認識されるパラメータはいずれも有効です。表65-1に、最も一般的な構成パラメータを示します。

表65-1 実行時に指定する構成パラメータ

キー

用途

javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY

リモートUMS WSのエンドポイントURL。これは通常「http://<host>:<port>/ucs/messaging/webservice」です。

javax.xml.ws.BindingProvider.USENAME_PROPERTY

該当する場合にWS-Securityヘッダーにアサートされるユーザー名。

oracle.ucs.messaging.ws.ClientConstants.POLICIES

クライアントの要求に添付する一連のOWSM WS-Securityポリシー。サーバー側で指定されたポリシーと一致する必要があります。

oracle.wsm.security.util.SecurityConstants.Config.KEYSTORE_RECIPIENT_ALIAS_PROPERTY

OWSMポリシーのアタッチに使用されます。資格証明ストアからの暗号化キーおよび署名キーの参照に使用する代替エイリアスを指定します。

oracle.wsm.security.util.SecurityConstants.ClientConstants.WSS_CSF_KEY

OWSMポリシーのアタッチに使用されます。Oracle Web Services Management資格証明ストア・マップからのリモート・ユーザー名/パスワード情報の参照に使用する資格証明ストア・キーを指定します。

インスタンス化された後のMessagingClientは、再構成できません。かわりに、新しい構成を使用してMessagingClientクラスの新しいインスタンスを作成する必要があります。

例65-1に、ユーザー名/トークンによるセキュリティを使用して、プログラミングによってMessagingClientインスタンスを作成する場合のコードを示します。

例65-1 プログラミングによるMessagingClientインスタンスの作成(ユーザー名/トークンによるセキュリティ)

HashMap<String, Object> config = new HashMap<String, Object>();
config.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://example.com:8001/ucs/messaging/webservice");
config.put(ClientConstants.POLICIES, new String[] {"oracle/wss11_username_token_
with_message_protection_client_policy"});
config.put(BindingProvider.USERNAME_PROPERTY, "user1");
config.put(oracle.wsm.security.util.SecurityConstants.Config.CLIENT_CREDS_
LOCATION, oracle.wsm.security.util.SecurityConstants.Config.CLIENT_CREDS_LOC_
SUBJECT);
config.put(oracle.wsm.security.util.SecurityConstants.ClientConstants.WSS_CSF_KEY,
"user1-passkey");
config.put(MessagingConstants.APPLICATION_NAME, "MyUMSWSApp");
mClient = new MessagingClient(config);

例65-2に、SAMLトークンによるセキュリティを使用して、プログラミングによってMessagingClientインスタンスを作成する場合のコードを示します。

例65-2 プログラミングによるMessagingClientインスタンスの作成(SAMLトークンによるセキュリティ)

HashMap<String, Object> config = new HashMap<String, Object>();
config.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://example.com:8001/ucs/messaging/webservice");
config.put(ClientConstants.POLICIES, new String[] {"oracle/wss11_saml_token_
identity_switch_with_message_protection_client_policy"});
config.put(BindingProvider.USERNAME_PROPERTY, "user1");
config.put(oracle.wsm.security.util.SecurityConstants.Config.CLIENT_CREDS_
LOCATION, oracle.wsm.security.util.SecurityConstants.Config.CLIENT_CREDS_LOC_
SUBJECT);
config.put(oracle.wsm.security.util.SecurityConstants.Config.KEYSTORE_RECIPIENT_
ALIAS_PROPERTY, "example.com");
config.put(MessagingConstants.APPLICATION_NAME, "MyUMSWSApp");
mClient = new MessagingClient(config);

インスタンス化された後のMessagingClientは、再構成できません。かわりに、任意の構成を使用してMessagingClientクラスの新しいインスタンスを作成する必要があります。

WebサービスAPIタイプを作成するためのファクトリ・メソッドが、クラス「oracle.ucs.messaging.ws.MessagingFactory」に用意されています。

65.3 メッセージの送信

sendメソッドを起動すると、メッセージがUMSに配信されて適切に処理されます。sendメソッドは、メッセージの配信ステータスを取得したり、リスナーに配信される非同期ステータス通知と関連付けたりするために後でクライアント・アプリケーションで使用できる、String message識別子を戻します。戻されたステータスは、UMSの内部処理と外部ゲートウェイから受信した配信通知に基づいた最新のステータスです。

作成できるメッセージのタイプには、プレーン・テキスト・メッセージ、text/plainパートとtext/htmlパートで構成できるマルチパート・メッセージ、および異なる配信タイプを使用して、複数受信者用の単一メッセージに配信チャネル(DeliveryType)固有のペイロードを作成するメッセージがあります。

65.3.1 メッセージの作成

この項では、作成できる様々なタイプのメッセージについて説明します。

65.3.1.1 プレーン・テキスト・メッセージの作成

例65-3に、UMS WebサービスAPIを使用してプレーン・テキスト・メッセージを作成する2つの方法を示します。

例65-3 UMS WebサービスAPIを使用したプレーン・テキスト・メッセージの作成

Message message = MessagingFactory.createTextMessage("This is a Plain Text
message.");

or

Message message = MessagingFactory.createMessage();
message.setContent(new DataHandler(new StringDataSource("This is a Plain Text
message.", "text/plain; charset=UTF-8")));

65.3.1.2 テキスト・パートとバイナリ・パートを持つマルチパート/混合メッセージの作成

例65-4に、UMS WebサービスAPIを使用してマルチパート/混合メッセージを作成する方法を示します。

例65-4 UMS WebサービスAPIの使用によるマルチパート/混合メッセージの作成

Message message = MessagingFactory.createMessage();
MimeMultipart mp = new MimeMultipart("mixed");

// Create the first body part
MimeBodyPart mp_partPlain = new MimeBodyPart();
StringDataSource plainDS = new StringDataSource("This is a Plain Text part.",
"text/plain; charset=UTF-8");
mp_partPlain.setDataHandler(new DataHandler(plainDS));
mp.addBodyPart(mp_partPlain);

byte[] imageData;
// Create or load image data in the above byte array (code not shown for brevity)

// Create the second body part
MimeBodyPart mp_partBinary = new MimeBodyPart();
ByteArrayDataSource binaryDS = new ByteArrayDataSource(imageData, "image/gif");
mp_partBinary.setDataHandler(binaryDS);
mp.addBodyPart(mp_partBinary);

message.setContent(new DataHandler(mp, mp.getContentType()));

65.3.1.3 Text/PlainパートとText/HTMLパートを持つマルチパート/代替メッセージの作成

例65-5に、UMS WebサービスAPIを使用してマルチパート/代替メッセージを作成する方法を示します。

例65-5 UMS WebサービスAPIの使用によるマルチパート/代替メッセージの作成

Message message = MessagingFactory.createMessage();
MimeMultipart mp = new MimeMultipart("alternative");
MimeBodyPart mp_partPlain = new MimeBodyPart();
StringDataSource plainDS = new StringDataSource("This is a Plain Text part.", "text/plain; charset=UTF-8");
mp_partPlain.setDataHandler(new DataHandler(plainDS));
mp.addBodyPart(mp_partPlain);

MimeBodyPart mp_partRich = new MimeBodyPart();
StringDataSource richDS = new StringDataSource(
"<html><head></head><body><b><i>This is an HTML part.</i></b></body></html>",
"text/html");
mp_partRich.setDataHandler(new DataHandler(richDS));
mp.addBodyPart(mp_partRich);

message.setContent(new DataHandler(mp, mp.getContentType()));

65.3.1.4 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

メッセージを宛先アドレスに送信する際は、複数のチャネルが関連する場合があります。Oracle UMSアプリケーション開発者は、各チャネルに対して正しいマルチパート書式を指定する必要があります。

例65-6に、異なる配信タイプを使用して、複数受信者用の単一メッセージに、配信チャネル(DeliveryType)固有のペイロードを作成する方法を示します。

複数ペイロードのマルチパート/代替メッセージの各最上位パートには、このヘッダーの値が1つ以上含まれている必要があります。このヘッダーの値は、有効な配信タイプの名前である必要があります。DeliveryTypeの使用可能な値は、列挙DeliveryTypeを参照してください。

例65-6 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

Message message = MessagingFactory.createMessage();

// create a top-level multipart/alternative MimeMultipart object.
MimeMultipart mp = new MimeMultipart("alternative");

// create first part for SMS payload content.
MimeBodyPart part1 = new MimeBodyPart();
part1.setDataHandler(new DataHandler(new StringDataSource("Text content for SMS.",
"text/plain; charset=UTF-8")));
part1.setHeader(Message.HEADER_NS_PAYLOAD_PART_DELIVERY_TYPE, "SMS");
// add first part
mp.addBodyPart(part1);

// create second part for EMAIL and IM payload content.
MimeBodyPart part2 = new MimeBodyPart();
MimeMultipart part2_mp = new MimeMultipart("alternative");
MimeBodyPart part2_mp_partPlain = new MimeBodyPart();
part2_mp_partPlain.setDataHandler(new DataHandler(new StringDataSource("Text
content for EMAIL/IM.", "text/plain; charset=UTF-8")));
part2_mp.addBodyPart(part2_mp_partPlain);
MimeBodyPart part2_mp_partRich = new MimeBodyPart();
part2_mp_partRich.setDataHandler(new DataHandler(new
StringDataSource("<html><head></head><body><b><i>" + "HTML content for EMAIL/IM."
+
"</i></b></body></html>", "text/html; charset=UTF-8")));
part2_mp.addBodyPart(part2_mp_partRich);
part2.setContent(part2_mp, part2_mp.getContentType());
part2.addHeader(Message.HEADER_NS_PAYLOAD_PART_DELIVERY_TYPE, "EMAIL");
part2.addHeader(Message.HEADER_NS_PAYLOAD_PART_DELIVERY_TYPE, "IM");
// add second part
mp.addBodyPart(part2);

// set the content of the message
message.setContent(new DataHandler(mp, mp.getContentType()));

// set the MultiplePayload flag to true
MimeHeader multiHeader = new MimeHeader();
multiHeader.setName(oracle.sdp.messaging.Message.HEADER_SDPM_MULTIPLE_PAYLOAD);
multiHeader.setValue(Boolean.TRUE.toString());
message.getHeaders().add(multiHeader);

65.3.2 MessageインタフェースのAPIリファレンス

MessageインタフェースのAPIリファレンスには、Javadocからアクセスできます。

65.3.3 列挙DeliveryTypeのAPIリファレンス

列挙DeliveryTypeのAPIリファレンスには、Javadocからアクセスできます。

65.3.4 メッセージのアドレス指定

この項では、アドレスのタイプおよびAddressオブジェクトの作成方法について説明します。

65.3.4.1 アドレスのタイプ

アドレスには、デバイス・アドレスとユーザー・アドレスの2種類があります。デバイス・アドレスには、電子メール・アドレス、インスタント・メッセージ・アドレス、電話番号など、様々なタイプがあります。ユーザー・アドレスは、ユーザー・リポジトリにあるユーザーIDです。

65.3.4.2 Addressオブジェクトの作成

Addressインタフェースで定義するAddressオブジェクトは、MessagingFactoryクラスを使用してメッセージの送信者と受信者のアドレスを指定することで作成できます。

65.3.4.2.1 単一のAddressオブジェクトの作成

例65-7に、単一のAddressオブジェクトを作成するコードを示します。

例65-7 単一のAddressオブジェクトの作成

Address recipient = MessagingFactory.createAddress("Email:john@example.com");

65.3.4.2.2 1つのバッチ内での複数のAddressオブジェクトの作成

例65-8に、1つのバッチ内に複数のAddressオブジェクトを作成するコードを示します。

例65-8 1つのバッチ内での複数のAddressオブジェクトの作成

String[] recipientsStr = {"Email:john@example.com", "IM:john@example.com"};
Address[] recipients = MessagingFactory.createAddress(recipientsStr);

65.3.4.2.3 メッセージへの送信者または受信者のアドレスの追加

例65-9に、送信者または受信者のアドレスをメッセージに追加するコードを示します。

例65-9 メッセージへの送信者または受信者のアドレスの追加

Address sender = MessagingFactory.createAddress("Email:john@example.com");
Address recipient = MessagingFactory.createAddress("Email:jane@example.com");
message.addSender(sender);
message.addRecipient(recipient);

65.3.4.3 フェイルオーバー・アドレスを使用した受信者の作成

例65-10に、フェイルオーバー・アドレスを使用して受信者を作成するコードを示します。

例65-10 フェイルオーバーを使用した単一のAddressオブジェクトの作成

String recipientWithFailoverStr = "Email:john@example.com, IM:john@example.com";
Address recipient = MessagingFactory.createAddress(recipientWithFailoverStr);

65.3.4.4 受信者のタイプ

WS APIでは、電子メール・ドライバで使用されるTo/Cc/Bcc受信者を使用したメッセージの送受信をサポートしています。

- メッセージの送信でCc/Bcc受信者を指定するには、oracle.ucs.messaging.ws.MessagingFactory.buildAddressメソッドを使用してoracle.ucs.messaging.ws.Addressオブジェクトを作成します。引数はアドレス値(たとえばuser@domain.com)、配信タイプ(たとえばDeliveryType.EMAIL)および電子メール・モード(たとえば「Cc」や「Bcc」)です。

- (たとえば受信したメッセージ内にある)既存のアドレス・オブジェクトの受信者タイプを特定するには、oracle.ucs.messaging.ws.MessagingFactory.getRecipientTypeメソッドを使用してAddressオブジェクトを渡します。それに対して受信者タイプを示す文字列が戻されます。

65.3.4.5 MessagingFactoryクラスのAPIリファレンス

MessagingFactoryクラスのAPIリファレンスには、Javadocからアクセスできます。

65.3.4.6 AddressインタフェースのAPIリファレンス

AddressインタフェースのAPIリファレンスには、Javadocからアクセスできます。

65.3.5 ユーザー・プリファレンス・ベースのメッセージング

ユーザー受信者にメッセージを送信(してユーザーのメッセージング・プリファレンスを活用)する際、メッセージで様々なビジネス条件のファクト(現在の値)をメタデータとして渡すことができます。UMSサーバーでは、メッセージで指定されたファクトを、ユーザーのメッセージング・フィルタで指定されているビジネス条件の条件と照合します。

注意:

すべてのファクトはメタデータとしてoracle.sdp.messaging.Message.NAMESPACE_NOTIFICATION_PREFERENCES名前空間に追加する必要があります。他の名前空間のメタデータは(ユーザー・メッセージング・プリファレンスの解決においては)無視されます。

図65-11は、ユーザー受信者を指定し、メッセージのユーザー・プリファレンスでビジネス条件のファクトを指定する方法を示します。サポートされているビジネス条件の完全なリストは、第67章「ユーザー・メッセージング・プリファレンス」を参照してください。

例65-11 ユーザー・プリファレンス・ベースのメッセージング

Message message = MessagingFactory.createMessage();
// create and add a user recipient
Address userRecipient1 = MessagingFactory.createAddress("USER:sampleuser1");
message.addRecipient(userRecipient1);
// specify business term facts
MessagingFactory.setMetadata(message, oracle.sdp.messaging.Message.NAMESPACE_
NOTIFICATION_PREFERENCES, "Customer Name", "ACME");
//  where "Customer Name" is the Business Term name, and "ACME" is the
Business Term value (i.e, fact).

65.4 メッセージ・ステータスの取得

メッセージを送信した後は、Oracle UMSを使用して、メッセージ・ステータスを同期または非同期で取得できます。

65.4.1 メッセージ・ステータスの同期取得

現行ステータスの同期取得を実行するには、MessagingClient APIから次のフローを使用します。

String messageId = messagingClient.send(message);
List<Status> statuses = messagingClient.getStatus(messageId, null)

または、

List<Status> statuses = messagingClient.getStatus(messageId, addresses) --- where
addresses is a "List<Address>" of one or more of the recipients set in the message.

65.4.2 メッセージ・ステータスの非同期取得

ステータスを非同期的で取得するには、listener.wsdlに記載されているListener Webサービスがクライアント・アプリケーションで実装されている必要があります。リスナー・エンドポイントの実装方法に制約はありません。たとえば、1つの方法は、javax.xml.ws.Endpoint JAX-WS Service APIを使用してWebサービス・エンドポイントをパブリッシュすることです。このメカニズムはJava SE 6で利用でき、コンシューマはJava EEサーブレット・モジュールを明示的に定義する必要はありません。

ただし、サーブレット・ベースのリスナー実装も可能です。

メッセージを送信する際、クライアント・アプリケーションは、エンドポイントURLおよびSOAPインタフェース名で構成されるリスナー・エンドポイントへの参照を提供できます。ステータスはメッセージの処理中に生成されるため、UMSサーバーはリスナー・エンドポイントのonStatusメソッドを呼び出してクライアント・アプリケーションに通知します。

65.4.2.1 プログラムによるリスナーの作成

リスナーは純粋なプログラムです。リスナーは、oracle.ucs.messaging.ws.Listenerインタフェースを実装して作成します。このインタフェースは、具体クラス(既存クラスの1つ、新規クラス、あるいは無名クラスか内部クラス)として実装できます。

次のコード例は、ステータス・リスナーの実装方法を示しています。

@PortableWebService(serviceName="ListenerService",
targetNamespace="http://xmlns.oracle.com/ucs/messaging/",
endpointInterface="oracle.ucs.messaging.ws.Listener",
wsdlLocation="META-INF/wsdl/listener.wsdl",
portName="Listener")
public class MyListener implements Listener {
public MyListener() {
}

@Override
public void onMessage(Message message, byte[] correlator) throws MessagingException {
System.out.println("I got a message!");
}  @Override
public void onStatus(Status status, byte[] correlator) throws MessagingException {
System.out.println("I got a status!");
}
}

65.4.2.2 コールバック・サービスのパブリッシュ

コールバック・サービスをパブリッシュするには、アプリケーション内のWebモジュールのweb.xmlでサーブレットを宣言するか、またはJAX-WSのjavax.xml.ws.Endpointクラスのパブリッシュ・メソッドを使用してプログラムによりWSエンドポイントをパブリッシュします(例65-12)。

例65-12 コールバック・サービスのパブリッシュ

Listener myListener = new MyListener();
String callbackURL = "http://host:port/umswscallback";
Endpoint myEndpoint = javax.xml.ws.Endpoint.publish(callbackURL, myListener);

65.4.2.3 動的にパブリッシュされたエンドポイントの停止

動的にパブリッシュされたエンドポイントを停止するには、Endpoint.publish()から戻されたEndpointオブジェクトでstop()メソッドを呼び出します(例65-13)。

例65-13 動的にパブリッシュされたエンドポイントの停止

// When done, stop the endpoint, ideally in a finally block or other reliable cleanup mechanism
myEndpoint.stop();

65.4.2.4 登録

リスナーWebサービスがパブリッシュされると、そのようなエンドポイントがクライアントにあることを登録する必要があります。MessagingClient APIには次の関連メソッドがあります。

- setStatusListener(ListenerReference listener)

- send(Message message, ListenerReference listener, byte[] correlator)

setStatusListener()ではデフォルトのステータス・リスナーを登録し、着信ステータス・メッセージに対してはそのリスナーのコールバックが呼び出されます。send()に渡されたリスナーは、対応するメッセージに関連するステータス更新に対してのみ呼び出されます。

65.5 メッセージの受信

この項では、アプリケーションでメッセージを受信する方法について説明します。メッセージを受信するには、最初にアクセス・ポイントを登録する必要があります。アプリケーション側から見ると、メッセージを受信するモードには同期と非同期があります。

65.5.1 アクセス・ポイントの登録

クライアント・アプリケーションではアクセス・ポイントを作成して登録し、特定のアドレスに送信された着信メッセージを受信するように指定できます。アクセス・ポイントを登録する際、クライアント・アプリケーションでは、エンドポイントURLおよびSOAPインタフェース名で構成されるリスナー・エンドポイントへの参照を指定できます。メッセージが届くと、UMSサーバーではリスナー・エンドポイントのonMessageメソッドを呼び出してクライアント・アプリケーションに通知します。

この場合、クライアント・アプリケーションでは、受信メソッドを起動して保留中のメッセージをフェッチできます。アクセス・ポイントの指定なしでメッセージを受信した場合、アプリケーションでは、登録したすべてのアクセス・ポイントのメッセージを受信します。アクセス・ポイントが指定されている場合、アプリケーションでは、そのアクセス・ポイントに送信されたメッセージを受信します。

AccessPointは、着信メッセージを受信するための1つ以上のデバイス・アドレスを表します。着信メッセージを受信するアプリケーションでは、メッセージの受信者アドレスを表すアクセス・ポイントを1つ以上登録する必要があります。サーバーでは、着信メッセージの受信者アドレスと一連の登録済アクセス・ポイントを照合し、一致したアクセス・ポイントを登録したアプリケーションに、その着信メッセージをルーティングします。

MessagingFactory.createAccessPointを使用してアクセス・ポイントを作成し、そのアクセス・ポイントをMessagingClient.registerAccessPointを使用してメッセージ受信用に登録できます。

番号9000のSMSアクセス・ポイントを登録するには、次のように指定します。

AccessPoint accessPointSingleAddress =
MessagingFactory.createAccessPoint(AccessPointType.SINGLE_ADDRESS,
DeliveryType.SMS, "9000");
messagingClient.registerAccessPoint(accessPointSingleAddress);

番号が9000から9999の範囲内のSMSアクセス・ポイントを登録するには、次のように指定します。

AccessPoint accessPointRangeAddress =
MessagingFactory.createAccessPoint(AccessPointType.NUMBER_RANGE,
DeliveryType.SMS,"9000,9999");
messagingClient.registerAccessPoint(accessPointRangeAddress);

65.5.2 同期受信

受信は非ブロック操作です。アプリケーションやアクセス・ポイントに関して保留中のメッセージがない場合、該当するコールでは、空のリストが即時に戻されます。受信によって、すべての使用可能なメッセージが戻される保証はありませんが、効率上の理由から使用可能なメッセージのサブセットのみを戻すことはできます。

メッセージの同期受信には、メソッドMessagingClient.receiveを使用できます。このメソッドは、メッセージの非同期受信による構成オーバーヘッドを望まない軽量なクライアント向けの便利なポーリング・メソッドです。このメソッドは、アプリケーションのインバウンド・キューですぐに使用できるメッセージのリストを戻します。

このメソッドは非ブロック・コールを実行するため、現在使用できるメッセージがない場合はNULLを戻します。

注意:

1回の起動で、使用可能なメッセージがすべて取得される保証はありません。ポーリングして、使用可能なすべてのメッセージを受信したことを確認する必要があります。

65.5.3 非同期受信

メッセージを非同期で受信するには、listener.wsdlに記載されているListener Webサービスがクライアント・アプリケーションで実装されている必要があります。リスナー・エンドポイントの実装方法に制約はありません。たとえば1つのメカニズムは、javax.xml.ws.Endpoint JAX-WS Service APIを使用してWebサービス・エンドポイントをパブリッシュすることです。このメカニズムはJava SE 6で利用でき、コンシューマはJava EEサーブレット・モジュールを明示的に定義する必要はありません。ただし、サーブレット・ベースのリスナー実装も可能です。

65.5.3.1 プログラムによるリスナーの作成

リスナーは純粋なプログラムです。リスナーは、oracle.ucs.messaging.ws.Listenerインタフェースを実装して作成します。このインタフェースは、具体クラス(既存クラスの1つ、新規クラス、あるいは無名クラスか内部クラス)として実装できます。

次のコード例は、メッセージ・リスナーの実装方法を示しています。

@PortableWebService(serviceName="ListenerService",
targetNamespace="http://xmlns.oracle.com/ucs/messaging/",
endpointInterface="oracle.ucs.messaging.ws.Listener",
wsdlLocation="META-INF/wsdl/listener.wsdl",
portName="Listener")
public class MyListener implements Listener {
public MyListener() {
}

@Override
public void onMessage(Message message, byte[] correlator) throws MessagingException {
System.out.println("I got a message!");
}  @Override
public void onStatus(Status status, byte[] correlator) throws MessagingException {
System.out.println("I got a status!");
}
}

リスナー・オブジェクトへの参照は、「デフォルトのメッセージ・リスナー」および「アクセス・ポイントごとのメッセージ・リスナー」の説明に従って、setMessageListenerまたはregisterAccessPointメソッドに渡します。アプリケーションのメッセージが着信すると、UMSインフラストラクチャでは、リスナーのonMessageメソッドが起動されます。

65.5.3.2 デフォルトのメッセージ・リスナー

クライアント・アプリケーションでは通常、デフォルトのメッセージ・リスナー(例65-14)が設定されます。このリスナーは、このクライアント・アプリケーションによって送信されたメッセージの中で、関連するリスナーがないメッセージの配信ステータスに対して起動されます。Oracle UMSでは、このクライアント・アプリケーションによって登録されたアクセス・ポイント宛てのメッセージを受信すると、そのクライアント・アプリケーションのデフォルトのリスナーに対してonMessageコールバックが起動されます。

デフォルトのリスナーを削除するには、nullの引数を指定してこのメソッドをコールします。

例65-14 デフォルトのメッセージ・リスナー

ListenerReference listenerRef = new ListenerReference();
listenerRef.setEndpoint("url_to_your_webservice_message_listener");
messagingClient.setMessageListener(listenerRef);

65.5.3.3 アクセス・ポイントごとのメッセージ・リスナー

クライアント・アプリケーションでは、アクセス・ポイントを登録し、Listenerオブジェクトとオプションの相関機能オブジェクトを指定できます(例65-15)。受信メッセージが指定のアクセス・ポイント・アドレスに着信すると、指定したリスナーのonMessageメソッドが起動されます。当初指定の相関機能オブジェクトもコールバック・メソッドに渡されます。

例65-15 アクセス・ポイントごとのメッセージ・リスナー

AccessPoint accessPoint =
MessagingFactory.createAccessPoint(AccessPointType.SINGLE_ADDRESS,
DeliveryType.EMAIL, "test@example.org");
ListenerReference listenerRef = new ListenerReference();
listenerRef.setEndpoint("url_to_your_webservice_message_listener");
byte[] correlator = null; // Not to correlate the callback
messagingClient.registerAccessPoint(accessPoint, listenerRef, correlator);

65.5.4 メッセージ・フィルタ

アプリケーションでMessageFilterを使用すると、配信されるメッセージをより強力に制御できます。MessageFilterには、一致基準とアクションが含まれています。アプリケーションでは、一連のメッセージ・フィルタを登録できます。登録されたメッセージ・フィルタは、着信(受信)メッセージに順に適用され、メッセージが基準と一致するとアクションが実行されます。たとえば、アプリケーションでMessageFiltersを使用して必要なブラックリストを実装すると、指定した送信者アドレスからのすべてのメッセージを拒否できます。

MessagingFactory.createMessageFilterを使用してメッセージ・フィルタを作成し、そのメッセージ・フィルタをMessagingClient.registerMessageFilterを使用して登録できます。フィルタは、アプリケーションの現行フィルタ・チェーンの最後に追加されます。受信したメッセージは、フィルタ・チェーンを順に通過します。メッセージがフィルタの基準に一致すると、そのフィルタのアクションが即時に実行されます。メッセージがフィルタに一致しない場合のデフォルト・アクションでは、そのメッセージが受信されてアプリケーションに配信されます。たとえば、件名が"spam"のメッセージを拒否するには、次のように指定します。

MessageFilter subjectFilter = MessagingFactory.createMessageFilter("spam",
FilterFieldType.SUBJECT, null, FilterActionType.REJECT);
messagingClient.registerMessageFilter(subjectFilter);

電子メール・アドレスspammer@foo.comからのメッセージを拒否するには、次のように指定します。

MessageFilter senderFilter =
MessagingFactory.createBlacklistFilter("spammer@foo.com");
messagingClient.registerMessageFilter(senderFilter);

65.6 クラスタ環境の構成

APIでは、クラスタ環境にクライアント・アプリケーションとUMSサーバーがデプロイされている環境をサポートしています。クラスタ化されたデプロイメントが期待どおりに機能するためには、クライアント・アプリケーションを正しく構成する必要があります。次のルールが適用されます。

- 2つのクライアント・アプリケーションで同じApplicationName構成パラメータが使用されている場合、それらは同じアプリケーションのインスタンスであるとみなされます。

- ApplicationInstanceName構成パラメータを使用すると、各インスタンスを区別できます。

- アプリケーション・セッションは、インスタンス固有です。メッセージにセッション・フラグを設定すると、メッセージを送信したインスタンスが受信した返信を確認できます。

- リスナー相関機能は、インスタンス固有です。1つのアプリケーションの2つの異なるインスタンスで複数のリスナーが登録され、異なる相関機能が提供されている場合は、インスタンスAのリスナーが起動されると相関機能Aが提供され、インスタンスBのリスナーが起動されると相関機能Bが提供されます。

65.7 セキュリティの構成

次の項ではセキュリティに関する考慮事項が説明されています。

- 第65.7.1項「クライアントおよびサーバーのセキュリティ」

- 第65.7.2項「リスナー/コールバックのセキュリティ」

65.7.1 クライアントおよびサーバーのセキュリティ

UMS Web サービスでは、Security Assertions Markup Language(SAML)トークンとユーザー名トークンの2つのセキュリティ・モードがサポートされています。

サポートされているSAMLベースのポリシーは「oracle/wss11_saml_token_with_message_protection_client_policy」です。このポリシーにより、暗号キーの交換に基づいて、クライアント・アプリケーションとUMSサーバーの間の信頼関係が確立されます。これにより、クライアント・アプリケーションではUMSサーバーによって受け付けられるユーザー・アイデンティティをアサートできるようになります。WS-SecurityでSAMLトークンを使用するには、クライアントとサーバーの両方でキーストアの構成がいくらか必要になります。UMS Webサービス・クライアントでのSAMLセキュリティの構成の詳細は、例65-2を参照してください。

サポートされているユーザー名トークン・ポリシーは"oracle/wss11_username_token_with_message_protection_client_policy"です。このポリシーがWS-Securityヘッダーで暗号化されたユーザー名/パスワードのトークンを渡し、指定された資格証明をサーバーが認証します。ユーザー名とパスワードは資格証明ストアに格納することをお薦めします。こうすると、MessagingClientコンストラクタには資格証明ストア・キーのみを渡せばよいため、安全性の低い形で資格証明をハードコードしたり格納したりする必要がなくなります。UMS Webサービス・クライアントでのSAMLセキュリティの構成の詳細は、例65-1を参照してください。

65.7.2 リスナー/コールバックのセキュリティ

ユーザー名トークンおよびSAMLトークンによるセキュリティは、リスナー・コールバックWebサービスでもサポートされています。リスナーの登録時に、クライアント・アプリケーションでは、セキュリティ・ポリシーおよびセキュアな接続を確立するのにサーバーで必要となるキーや資格証明の参照情報を指定する、追加のパラメータを指定する必要があります。

例65-16は、ユーザー名トークンによるセキュリティを使用してセキュアなコールバック・エンドポイントを確立する方法を示しています。

例65-16 ユーザー名トークンによるセキュリティの使用によるセキュアなコールバック・エンドポイントの確立

MessagingClient client = new MessagingClient(clientParameters);
...
ListenerReference listenerRef = new ListenerReference();
// A web service implementing the oracle.ucs.messaging.ws.Listener
// interface must be available at the specified URL.
listenerRef.setEndpoint(myCallbackURL);
Parameter policyParam = new Parameter();
policyParam.setName(ClientConstants.POLICY_STRING);
policyParam.setValue("oracle/wss11_username_token_with_message_protection_client_policy");
listenerRef.getParameters.add(policyParam);
// A credential store entry with the specified key must be
// provisioned on the server side so it will be available when the callback
// is invoked.
Parameter csfParam = new Parameter();
csfParam.setName(oracle.wsm.security.util.SecurityConstants.ClientConstants.WSS_CSF_KEY);
csfParam.setValue("callback-csf-key");
listenerRef.getParameters.add(csfParam);
client.setMessageListener(listenerRef);

65.8 スレッド・モデル

JAX-WSスタックによって提供される基礎となるサービスにより、WS MessagingClientクラスのインスタンスはスレッドセーフではありません。そのため、各インスタンスが一度に1つのスレッドでのみ使用されていることを確認する必要があります。

65.9 WebサービスAPIを使用したサンプル・チャット・アプリケーション

この項では、OTNでOracle User Messaging Serviceが提供するWebサービスAPIを使用して、サンプル・チャット・アプリケーションを作成、デプロイおよび実行する方法を説明します。

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、Oracle SOA Suiteのサンプルを参照してください。

このページにナビゲートした後は、検索条件の「UMS」を入力して「検索」をクリックすることで、Oracle User Messaging Serviceのコード・サンプルを検出できます。

注意:

Oracle User Messaging Serviceのアーキテクチャとコンポーネントの詳細は、『Oracle Fusion Middleware Oracle SOA Suiteスタート・ガイド』を参照してください。

この章には次の項が含まれます:

- 第65.9.1項「概要」

- 第65.9.2項「事前作成されたサンプルの実行」

- 第65.9.3項「サンプルのテスト」

65.9.1 概要

このサンプルは、電子メール、SMSまたはIMを通じてメッセージを送受信するWebベースのチャット・アプリケーションの作成方法を示します。このサンプルでは、サービスWebサービスAPIを使用してユーザー・メッセージング・サーバーと相互作用します。Oracle JDeveloperでアプリケーション・サーバー接続を定義し、アプリケーションをデプロイして実行します。事前作成されたOracle JDeveloperプロジェクトとして提供されるこのアプリケーションには、単純なWebチャット・インタフェースが含まれています。

65.9.1.1 提供されるファイル

サンプル・アプリケーションには、次のファイルが含まれています。

- usermessagingsample-ws-src.zip - ソース・コードおよびOracle JDeveloperプロジェクト・ファイルが格納されたアーカイブです。

- usermessagingsample-ws.ear - コンテナにデプロイ可能な、事前作成されたサンプル・アプリケーションです。

65.9.2 事前作成されたサンプルの実行

次の手順を実行して、事前作成されたサンプル・アプリケーションを実行し、デプロイします。

1. 「usermessagingsample-ws-src.zip」を抽出し、usermessagingsample-ws.jwsをOracle JDeveloperで開きます。

図65-1 Oracle JDeveloperでプロジェクトを開く

「図65-1 Oracle JDeveloperでプロジェクトを開く」の説明

Oracle JDeveloperのメイン・ウィンドウにプロジェクトが表示されます。

図65-2 Oracle JDeveloperのメイン・ウィンドウ

「図65-2 Oracle JDeveloperのメイン・ウィンドウ」の説明

このアプリケーションには、1つのWebモジュールが含まれています。アプリケーションのソース・コードはすべて設定済です。

2. Webモジュールで「Oracle UMS Client」ライブラリが使用されていることを確認して、サンプル・アプリケーションのビルド依存性を満たします。

1. 「アプリケーション・ナビゲータ」で、Webモジュール「usermessagingsample-ws-war」を右クリックし、「プロジェクト・プロパティ」を選択します。

2. 左側のペインで、「ライブラリとクラスパス」を選択します。

図65-3 ライブラリの追加

「図65-3 ライブラリの追加」の説明

3. 「OK」をクリックします。

3. ナビゲーション・ペインでプロジェクトを右クリックし、「新規」を選択して、アプリケーション・サーバー接続を作成します。第65.10項「新規アプリケーション・サーバー接続の作成」の説明に従います。

4. プロジェクトをデプロイするには、「usermessasgingsample-ws project」→「デプロイ」→「usermessasgingsample-ws」→「デプロイ先」→「SOA_server」の順に選択します(図65-4)。

図65-4 プロジェクトのデプロイ

「図65-4 プロジェクトのデプロイ」の説明

5. メッセージBuild Successfulがログに表示されていることを確認します。

6. メッセージDeployment Finishedがデプロイメント・ログに表示されていることを確認します。
アプリケーションが正常にデプロイされました。

65.9.3 サンプルのテスト

次の手順を実行し、サンプルを実行およびテストします。

1. Webブラウザを開きます。

2. 次のようにアプリケーションのURLに移動し、ログインします。
http://host:port/usermessagingsample-ws/

メッセージングWebサービス・サンプルWebページが表示されます(図65-5)。このページには、ナビゲーション・タブ、およびアプリケーションの手順が表示されます。

図65-5 メッセージングWebサービス・サンプルWebページ

「図65-5 メッセージングWebサービス・サンプルWebページ」の説明

3. 「構成」をクリックして、次の値を入力します(図65-6)。

- Webサービスのエンドポイントを指定します。例: http://example.com:8001/ucs/messaging/webservice

- ユーザー名とパスワードを指定します。

- ポリシーを指定します(ユーザー・メッセージング・サービスのインスタンスでWS-Securityが有効になっている場合に必要)。

- 図65-6 Webサービスのエンドポイントおよび資格証明の構成

「図65-6 Webサービスのエンドポイントおよび資格証明の構成」の説明

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

5. 「管理」をクリックします。

6. メッセージを受信するアドレスおよびオプションのキーワードを入力します(図65-7)。

図65-7 アクセス・ポイントの登録

「図65-7 アクセス・ポイントの登録」の説明

7. 「開始」をクリックします。
メッセージRegistration operation succeededが表示されていることを確認します。

8. 「チャット」をクリックします(図65-8)。

9. 図65-8に示す書式で受信者をTo:フィールドに入力します。

10. メッセージを入力します。

11. 「送信」をクリックします。

12. メッセージが受信されていることを確認します。

13. 図65-8 サンプルの実行

「図65-8 サンプルの実行」の説明

65.10 新規アプリケーション・サーバー接続の作成

次の手順を実行し、アプリケーション・サーバー接続を作成します。

1. プロジェクトを右クリックし、「新規」→「接続」→「アプリケーション・サーバー接続」の順に選択して、新規アプリケーション・サーバー接続を作成します(図65-9)。

図65-9 新規アプリケーション・サーバー接続

「図65-9 新規アプリケーション・サーバー接続」の説明

2. 接続にSOA_serverという名前を付けて、「次へ」をクリックします(図65-10)。

3. 「接続タイプ」に「WebLogic 10.3」を選択します。

図65-10 新規アプリケーション・サーバー接続

「図65-10 新規アプリケーション・サーバー接続」の説明

4. 認証情報を入力します。ユーザー名の一般的な値はweblogicです。

5. 「接続」ダイアログで、SOA管理サーバーのホスト名、ポートおよびSSLポートを入力し、WLSドメインのドメイン名を入力します。

6. 「次へ」をクリックします。

7. 「テスト」ダイアログで、「接続のテスト」をクリックします。

8. メッセージSuccess!が表示されていることを確認します。
アプリケーション・サーバー接続が作成されました。

66 Parlay X Webサービス・マルチメディア・メッセージングAPI

この章では、Oracle User Messaging Serviceで使用可能なParlay X Multimedia Messaging Web Service、およびParlay X Web Services Multimedia Messaging APIを使用してOracle User Messaging Serviceを介してメッセージを送受信する方法について説明します。

Oracle User Messaging Serviceのアーキテクチャとコンポーネントの詳細は、『Oracle Fusion Middleware Oracle SOA Suiteスタート・ガイド』を参照してください。

注意:

この章で説明するParlay X Multimedia Messaging APIは非推奨です。かわりに、第64章「ユーザー・メッセージング・サービスJava APIを使用したメッセージの送受信」で説明するユーザー・メッセージング・サービスJava APIを使用してください。

この章には次の項が含まれます:

- 第66.1項「Parlay X Messaging操作の概要」

- 第66.2項「SendMessageインタフェース」

- 第66.3項「ReceiveMessageインタフェース」

- 第66.4項「Parlay X Messagingに対するOracleの拡張機能」

- 第66.5項「Parlay X Messaging Client APIおよびClient Proxy Package」

- 第66.6項「Parlay X APIを使用したサンプル・チャット・アプリケーション」

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、次の場所にあるサンプルを参照してください。

http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.html

注意:

Oracle User Messaging Serviceには、Parlay X APIを実装したJavaクライアント・ライブラリも含まれています。

66.1 Parlay X Messaging操作の概要

次の項では、サポートされている各操作のセマンティクスおよびParlay X Gatewayの実装固有の詳細について説明します。次の各表はParlay X仕様から直接抽出したもので、各操作に対する入力および出力メッセージ・パラメータの説明が記載されています。

Oracle User Messaging Serviceには、Parlay X 2.1 Multimedia Messaging仕様のサブセットが実装されています。特に、Oracle User Messaging Serviceは、SendMessageインタフェースおよびReceiveMessageインタフェースをサポートしています。MessageNotificationインタフェースおよびMessageNotificationManagerインタフェースはサポートされていません。

66.2 SendMessageインタフェース

SendMessageインタフェースでは、sendMessage操作で1つ以上の受信者アドレスにメッセージを送信したり、getMessageDeliveryStatus操作で以前送信したメッセージの配信ステータスを取得することができます。次の要件が適用されます。

- 受信者アドレスは、Oracle User Messaging Serviceのアドレス書式要件に準拠している必要があります(また、URIも有効である必要があります)。一般的な書式はdelivery_type:protocol_specific_addressで、email:user@domain、sms:5551212、im:user@jabberdomainなどのように記述します。

- URIでは使用できない文字もあり、アドレスに含める必要がある場合には、エンコードまたはエスケープする必要があります。適切にエンコードされたURIを作成する方法は、java.net.URIのJavaDocを参照してください。

- WSDLでは送信者アドレスに対してすべての文字が使用可能ですが、Oracle User Messaging Serviceでは、その送信者アドレスが有効なメッセージ・アドレスである必要があります。

- Oracle User Messaging Serviceでは、配信タイプごとに送信者アドレスを指定する必要があります。そのため、電子メールなどの特定の配信タイプの受信者に適用する送信者アドレスについては、その送信者アドレスにも、電子メールの配信タイプを指定する必要があります。この操作では、複数の受信者アドレスと単一の送信者アドレスの処理が可能であるため、送信者アドレスは同じ配信タイプの受信者にのみ適用されます。

- Oracle User Messaging Serviceは、MessageNotificationインタフェースをサポートしていないため、receiptRequestが指定されている場合でも、配信確認を生成しないでください。つまり、receiptRequestパラメータは無視されます。

66.2.1 sendMessage操作

表66-1に、sendMessage操作のsendMessageRequest入力メッセージの説明を示します。

表66-1 sendMessage入力メッセージの説明

パート名

パート・タイプ

オプション

説明

addresses

xsd:anyURI[0..unbounded]

いいえ

このメッセージの宛先アドレス。

senderAddress

xsd:string

はい

メッセージの送信者アドレス。このパラメータは、すべてのサード・パーティのプロバイダに対して使用不可です。Parlay Xサーバーは、このパラメータを特定アプリケーションのSLAに従って処理する必要があるため、その使用によって、PolicyExceptionが発生する場合があります。

subject

xsd:string

はい

メッセージの件名。SMSにマップされた場合、このパラメータは、個別のsenderAddressが指定されている場合でも、senderAddressとして使用されます。

priority

MessagePriority

はい

メッセージの優先度。存在しない場合は、ネットワークによって、演算子のポリシーに基づいた優先度が割り当てられます。このメッセージに適用するように指定します。

charging

common:
ChargingInformation

はい

このメッセージに適用するように指定してください。

receiptRequest

common:SimpleReference

はい

アプリケーション・エンドポイント、インタフェース名および相関機能を定義します。これらの定義内容は、アプリケーションに、メッセージが端末に配信されたときや配信が不可能な場合を通知するために使用されます。

表66-2に、sendMessage操作のsendMessageResponse出力メッセージの説明を示します。

表66-2 sendMessageResponse出力メッセージの説明

パート名

パート・タイプ

オプション

説明

result

xsd:string

いいえ

この相関識別子は、すべての送信済メッセージの配信ステータスをポーリングするために、getMessageDeliveryStatus操作の起動で使用されます。

66.2.2 getMessageDeliveryStatus操作

getMessageDeliveryStatus操作では、以前送信したメッセージの配信ステータスを取得します。入力requestIdentifierは、sendMessage操作によるresult値です。これは、他のMessagingドキュメントでメッセージIDと呼ばれている識別子と同じ識別子です。

表66-3に、getMessageDeliveryStatus操作のgetMessageDeliveryStatusRequest入力メッセージの説明を示します。

表66-3 getMessageDeliveryStatusRequest入力メッセージの説明

パート名

パート・タイプ

オプション

説明

registrationIdentifier

xsd:string

いいえ

配信ステータス・リクエストに関連する識別子。

表66-4に、getMessageDeliveryStatus操作のgetMessageDeliveryStatusResponse出力メッセージの説明を示します。

表66-4 getMessageDeliveryStatusResponse出力メッセージの説明

パート名

パート・タイプ

オプション

説明

result

DeliveryInformation
[0..unbounded]

はい

以前送信したメッセージのステータスの配列。各配列の要素は、送信したメッセージ、宛先アドレスおよび配信ステータスを表しています。

66.3 ReceiveMessageインタフェース

ReceiveMessageインタフェースには3つの操作があります。getReceivedMessages操作では、最後にgetReceivedMessagesを起動した以降に受信したメッセージについてサーバーをポーリングします。このgetReceivedMessagesでは、必ずしもすべてのメッセージ・コンテンツを戻すわけではないことに注意してください。通常は、メッセージ・メタデータのみを戻します。

他の2つの操作(getMessageおよびgetMessageURIs)は、メッセージ・コンテンツの取得に使用されます。

66.3.1 getReceivedMessages操作

この操作では、受信したメッセージについてサーバーをポーリングします。次の要件に注意してください。

- 登録IDパラメータは、アプリケーションがメッセージを受信するエンドポイント・アドレスを識別する文字列です。詳細は、ReceiveMessageManagerインタフェースの説明を参照してください。

- Parlay X仕様では、登録IDが未指定の場合、このアプリケーションに対するすべてのメッセージが戻されます。ただし、WSDLでは登録IDパラメータは必須です。そのため、ここでの実装では、空の文字列("")を指定なしの値として処理します。空の文字列を登録IDとしてgetReceivedMessagesをコールした場合は、このアプリケーションのすべてのメッセージを取得します。したがって、空の文字列は、startReceiveMessagesをコールする場合の登録IDとして許可されない値です。

- 受信したメッセージ・コンテンツがParlay X仕様に従った純粋なASCIIテキストの場合、そのメッセージ・コンテンツは、MessageReferenceオブジェクト内のインラインで戻され、messageIdentifier(メッセージID)要素はNULLです。ここでの実装では、この操作の目的のために、Content-Typeがtext/plainのすべてのコンテンツ、us-asciiを純粋なASCIIテキストとしてエンコードしているすべてのコンテンツを処理します。MIME仕様では、エンコードが指定されていない場合はus-asciiとみなされ、Content-Typeが指定されていない場合はtext/plainとみなされます。

- 優先度パラメータは現在無視されています。

表66-5に、getReceivedMessages操作のgetReceivedMessagesRequest入力メッセージの説明を示します。

表66-5 getReceivedMessagesRequest入力メッセージの説明

パート名

パート・タイプ

オプション

説明

registrationIdentifier

xsd:string

いいえ

オフライン・プロビジョニングの手順を識別します。この手順によって、アプリケーションではメッセージの受信通知を指定の基準に従って受信できます。

priority

MessagePriority

はい

Parlay Xゲートウェイからポーリングするメッセージの優先度。指定した優先度以上のすべてのメッセージを取得します。指定しない場合は、すべてのメッセージが戻されます。つまり、優先度をLowに指定した場合と同じです。

表66-6に、getReceivedMessages操作のgetReceivedMessagesResponse出力メッセージの説明を示します。

表66-6 getReceivedMessagesResponse出力メッセージの説明

パート名

パート・タイプ

オプション

説明

registrationIdentifier

xsd:string

いいえ

オフライン・プロビジョニングの手順を識別します。この手順によって、アプリケーションではメッセージの受信通知を指定の基準に従って受信できます。

priority

MessagePriority

はい

Parlay Xゲートウェイからポーリングするメッセージの優先度。指定した優先度以上のすべてのメッセージを取得します。指定しない場合は、すべてのメッセージが戻されます。優先度をLowに指定した場合と同じです。

66.3.2 getMessage操作

getMessage操作では、以前のgetReceivedMessagesの起動時のメッセージIDを使用してメッセージ・コンテンツを取得します。レスポンス・メッセージにはSOAP本体がありません。コンテンツは単一のSOAP添付ファイルとして戻されます。

表66-7に、getMessage操作のgetMessageRequest入力メッセージの説明を示します。

表66-7 getMessageRequest入力メッセージの説明

パート名

パート・タイプ

オプション

説明

messageRefIdentifier

xsd:string

いいえ

メッセージのアイデンティティ。

getMessage操作に対するgetMessageResponse出力メッセージはありません。

66.3.3 getMessageURIs操作

getMessageURIsでは、メッセージ・コンテンツをURIのリストとして取得します。次の要件に注意してください。

- これらのURIは、参照を解除してコンテンツを取得できるHTTP URLです。

- インバウンド・メッセージのContent-Typeがmultipartの場合は、サブパートごとに複数のURIが戻されます。Content-Typeがmultipartでない場合は、単一のURIが戻されます。

- インバウンド・メッセージがParlay X仕様に従った本体テキスト・パートの場合、そのインバウンド・メッセージは、ASCIIテキストとしてエンコードされた場合のメッセージ本体として定義され、MessageURIオブジェクト内のインラインで戻されます。ここでの実装の目的のために、この動作を次のように定義します。

- メッセージのContent-Typeがtext/*(任意のテキスト・タイプ)で、charsetパラメータがus-asciiの場合、コンテンツはMessageURIオブジェクトのインラインで戻されます。インラインで戻された内容以外にコンテンツがないため、戻されるURIはありません。

- メッセージのContent-Typeがmultipart/(任意のマルチパート・タイプ)で、最初の本体パートのContent-Typeがtext/で、charsetがus-asciiである場合、そのパートはMessageURIオブジェクトのインラインで戻され、そのパートに対応して戻されるURIはありません。

- MIME仕様では、charsetパラメータが省略されている場合は、us-asciiがデフォルト値とみなされます。Content-Typeヘッダーがメッセージに指定されていない場合、Content-Typeはtext/plainとみなされます。

表66-8に、getMessageURIs操作のgetMessageURIsRequest入力メッセージの説明を示します。

表66-8 getMessageURIsRequest入力メッセージの説明

パート名

パート・タイプ

オプション

説明

messageRefIdentifier

xsd:string

いいえ

取得するメッセージのID。

表66-9に、getMessageURIs操作のgetMessageURIsResponse出力メッセージの説明を示します。

表66-9 getMessageURIsResponse出力メッセージの説明

パート名

パート・タイプ

オプション

説明

result

MessageURI

いいえ

メッセージのテキストのパートで構成された完了メッセージ(存在する場合)、およびメッセージの添付ファイルに関するファイル・リファレンスのリスト(ある場合)が含まれます。

66.4 Parlay X Messagingに対するOracleの拡張機能

Parlay X Messagingの仕様では、メッセージ・フローの特定部分が未定義のままです。未定義状態の主要な領域は、クライアントを、(ReceiveMessageインタフェースを介して)同期受信するアドレスにバインディングするためのプロセス部分です。

Oracle User Messaging Serviceには、このプロセスをサポートするために、Parlay Xへの拡張インタフェースが含まれています。この拡張インタフェースは、Oracle XMLネームスペース内の個別のWSDLとして実装されていますが、Parlay X公認ではありません。クライアントはこの追加インタフェースを使用しないか、モジュール型の方法で使用するかを選択できます。後者の場合は、このインタフェースの中核となるメッセージング・ロジックはParlay X仕様に完全に準拠することになります。

66.4.1 ReceiveMessageManagerインタフェース

ReceiveMessageManagerは、メッセージを受信するクライアントの登録を管理するためのOracle固有のインタフェースです。クライアントはこのインタフェースを使用して、特定のアドレスでのメッセージの受信を開始、および停止します(これは、Messaging APIでのアクセス・ポイントの登録/登録解除の概念に類似しています)。

66.4.1.1 startReceiveMessage操作

この操作を起動すると、クライアントは、メッセージを受信するために、クライアント自体を指定のエンドポイントにバインドできます。次の要件に注意してください。

- エンドポイントは、アドレスおよびオプションの基準で構成されています。この基準は、Parlay Xの仕様では、メッセージの件名またはコンテンツの最初の空白デリミタ付きトークンとして定義されています。

- エンドポイント情報の他に、クライアントでは、この操作の起動時に登録IDも指定できます。このIDは一意の文字列で、後でstopReceiveMessage操作とgetReceivedMessages操作でこの特定のバインディングを参照するために使用できます。

- 他のクライアント・アプリケーションによって、エンドポイントがすでに登録されている場合、または登録IDがすでに使用されている場合は、ポリシー・エラーが発生します。

- 特定の文字はURIに使用できません。特定の文字をアドレスに含める必要がある場合、それらの文字はエンコードまたはエスケープできます。適切にエンコードされたURIの作成方法の詳細は、java.net.URIのjavadocを参照してください。たとえば、XMPPメッセージを受信するように登録する場合は、IM:jabber|user@example.comのようにアドレスを指定する必要があります。ただし、パイプ(|)文字はURIに使用できないため、サーバーへの送信前にエスケープする必要があります。

- 指定したエンドポイント・アドレスで、サーバーが実際にメッセージを受信できる保証はありません。受信の可否は、Oracle User Messaging Service全体の構成、特にシステムにデプロイされているメッセージング・ドライバによって決まります。サーバーがメッセージを受信できないアドレスにクライアントがバインドされている場合、エラーは表示されません。

startReceiveMessage操作には次の入出力があります。

表66-10に、startReceiveMessage操作のstartReceiveMessageRequest入力メッセージの説明を示します。

表66-10 startReceiveMessageRequest入力メッセージの説明

パート名

パート・タイプ

オプション

説明

registrationIdentifier

xsd:string

いいえ

登録識別子。

messageService
ActivationNumber

xsd:anyURI

いいえ

メッセージ・サービスのアクティブ化番号。

criteria

xsd:string

はい

説明文字列。

startReceiveMessage操作に対するstartReceiveMessageResponse出力メッセージはありません。

66.4.1.2 stopReceiveMessage操作

この操作を起動すると、クライアントと受信エンドポイント間ですでに確立されているバインディングが削除されます。クライアントは、破損しているエンドポイントのバインディングを識別するために、startReceiveMessageのコール時に指定した登録IDと同じ登録IDを指定します。このアプリケーションのサーバーに認識されている、対応する登録IDのバインディングがない場合は、ポリシー・エラーが発生します。

表66-11に、stopReceiveMessage操作のstopReceiveMessageRequest入力メッセージの説明を示します。

表66-11 stopReceiveMessageRequest入力メッセージの説明

パート名

パート・タイプ

オプション

説明

registrationIdentifier

xsd:string

いいえ

登録識別子。

stopReceiveMessage操作に対するstopReceiveMessageResponse出力メッセージはありません。

66.5 Parlay X Messaging Client APIおよびClient Proxy Package

Parlay X Messaging Clientは、Parlay X WSDLファイルおよびWebサービス・アセンブリ・ツールのみを使用してアセンブルできますが、サポート対象のParlay X Messagingインタフェースに対しては、事前作成のWebサービス・スタブおよびインタフェースが用意されています。SOAP添付ファイルがあるWebサービスをParlay Xで指定されているスタイルでアセンブルすることは困難であるため、WSDLから開始せずに提供されているAPIを使用することをお薦めします。

Parlay X Messaging APIで使用可能なクラスの完全なリストは、Messaging JavaDocを参照してください。このAPIに対する主要なエントリ・ポイントは、次のクライアント・クラスを経由します。

- oracle.sdp.parlayx.multimedia_messaging.send.SendMessageClient

- oracle.sdp.parlayx.multimedia_messaging.receive.ReceiveMessageClient

- oracle.sdp.parlayx.multimedia_messaging.extension.receive_manager.ReceiveMessageManager

各クライアント・クラスにより、クライアント・アプリケーションは対応するインタフェースで操作を起動できます。クライアント・クラスのインスタンスを構成するときは、リモート・ゲートウェイURLなどの追加のWebサービス・パラメータ、および必要なセキュリティ資格証明が提供されます。詳細は、Javadocを参照してください。セキュリティ資格証明は、Parlay Xの仕様で指定されている標準的なWS-Securityヘッダーを使用してサーバーに伝播されます。

クライアント・アプリケーションの一般的なプロセスは、前述のクライアント・クラスのいずれかを作成し、必要な構成項目(エンドポイント、ユーザー名、パスワード)を設定してビジネス・メソッド(SendMessageClient.sendMessage()など)のいずれかを起動することです。このAPIの使用方法の例については、Oracle Technology Network(OTN)で入手できるメッセージ・サンプル、特にusermessagingsample-parlayx-src.zipを参照してください。

66.6 Parlay X APIを使用したサンプル・チャット・アプリケーション

この項では、OTNでOracle User Messaging Serviceが提供するParlay X APIを使用して、サンプル・チャット・アプリケーションを作成、デプロイおよび実行する方法を説明します。

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、Oracle SOA Suiteのサンプルを参照してください。

このページにナビゲートした後は、検索条件の「UMS」を入力して「検索」をクリックすることで、Oracle User Messaging Serviceのコード・サンプルを検出できます。

注意:

Oracle User Messaging Serviceのアーキテクチャとコンポーネントの詳細は、『Oracle Fusion Middleware Oracle SOA Suiteスタート・ガイド』を参照してください。

この章には次の項が含まれます:

- 第66.6.1項「概要」

- 第66.6.2項「事前作成されたサンプルの実行」

- 第66.6.3項「サンプルのテスト」

- 第66.6.4項「新規アプリケーション・サーバー接続の作成」

66.6.1 概要

このサンプルは、電子メール、SMSまたはIMを通じてメッセージを送受信するWebベースのチャット・アプリケーションの作成方法を示します。このサンプルでは、標準ベースのParlay X Web Service APIを使用してユーザー・メッセージング・サーバーと相互作用します。このサンプル・アプリケーションには、3つのWebサービス・インタフェース(Parlay Xで定義されたSendMessageサービス、ReceiveMessageサービス、Parlay Xに対するOracleの拡張機能であるReceiveMessageManagerサービス)のそれぞれに対するWebサービス・プロキシ・コードが含まれていますOracle JDeveloperでアプリケーション・サーバー接続を定義し、アプリケーションをデプロイして実行します。事前作成されたOracle JDeveloperプロジェクトとして提供されるこのアプリケーションには、単純なWebチャット・インタフェースが含まれています。

66.6.1.1 提供されるファイル

サンプル・アプリケーションには、次のファイルが含まれています。

- Project – アーカイブされたOracle JDeveloperプロジェクト・ファイルを含むディレクトリ

- Readme.txt

- リリース・ノート

66.6.2 事前作成されたサンプルの実行

次の手順を実行して、事前作成されたサンプル・アプリケーションを実行し、デプロイします。

1. Oracle JDeveloperで、usermessagingsample-parlayx.jws(.zipファイルに含まれています)を開きます。
Oracle JDeveloperのメイン・ウィンドウにプロジェクトが表示されます。

図66-1 Oracle JDeveloperのメイン・ウィンドウ

「図66-1 Oracle JDeveloperのメイン・ウィンドウ」の説明

2. Oracle JDeveloperで、「ファイル」→「開く」の順に選択し、前述のディレクトリに移動して、ワークスペース・ファイル「usermessagingsample-parlayx.jws」を開きます。
これにより、Parlay Xサンプル・アプリケーションに対して事前作成されたJDeveloperアプリケーションが開きます。このアプリケーションには、1つのWebモジュールが含まれています。アプリケーションのソース・コードはすべて設定済です。インストールに固有のパラメータは構成する必要があります。

3. Webモジュールで「Oracle UMS Client」ライブラリが使用されていることを確認して、サンプル・アプリケーションのビルド依存性を満たします。

1. 「アプリケーション・ナビゲータ」で、Webモジュール「usermessagingsample-parlayx-war」を右クリックし、「プロジェクト・プロパティ」を選択します。

2. 左側のペインで、「ライブラリとクラスパス」を選択します。

図66-2 ライブラリの追加

「図66-2 ライブラリの追加」の説明

3. 「OK」をクリックします。

4. ナビゲーション・ペインでプロジェクトを右クリックし、「新規」を選択して、アプリケーション・サーバー接続を作成します。第66.6.4項「新規アプリケーション・サーバー接続の作成」の説明に従います。

5. プロジェクトをデプロイするには、「usermessasgingsample-parlayx project」→「デプロイ」→「usermessasgingsample-parlayx」→「デプロイ先」→「SOA_server」の順に選択します(図66-3)。

図66-3 プロジェクトのデプロイ

「図66-3 プロジェクトのデプロイ」の説明

6. メッセージBuild Successfulがログに表示されていることを確認します。

7. デフォルトのリビジョンを入力し、「OK」をクリックします。

8. メッセージDeployment Finishedがデプロイメント・ログに表示されていることを確認します。
アプリケーションが正常にデプロイされました。

サンプルを実行するには、その前に、次の項の説明に従って、Oracle User Messaging Serviceの追加ドライバを構成し、ユーザー・メッセージング・プリファレンスでメッセージを受信するユーザー用のデフォルト・デバイスを構成する必要があります。

注意:

詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

66.6.3 サンプルのテスト

次の手順を実行し、サンプルを実行およびテストします。

1. Webブラウザを開きます。

2. 次のようにアプリケーションのURLに移動し、ログインします。
http://host:port/usermessagingsample-parlayx/

メッセージングParlay XサンプルWebページが表示されます(図66-4)。このページには、ナビゲーション・タブ、およびアプリケーションの手順が表示されます。

図66-4 メッセージングParlay XサンプルWebページ

「図66-4 メッセージングParlay XサンプルWebページ」の説明

3. 「構成」をクリックして、次の値を入力します(図66-5)。

- 送信エンドポイントを指定します。例: http://localhost:port/sdpmessaging/parlayx/SendMessageService

- 受信エンドポイントを指定します。例: http://localhost:port/sdpmessaging/parlayx/ReceiveMessageService

- 受信マネージャ・エンドポイントを指定します。例: http://localhost:port/sdpmessaging/parlayx/ReceiveMessageMessageService

- ユーザー名とパスワードを指定します。

- ポリシーを指定します(ユーザー・メッセージング・サービスのインスタンスでWS-Securityが有効になっている場合に必要)。

- 図66-5 Webサービスのエンドポイントおよび資格証明の構成

「図66-5 Webサービスのエンドポイントおよび資格証明の構成」の説明

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

5. 「管理」をクリックします。

6. 登録IDを入力して、登録およびメッセージを受信するアドレスを指定します(図66-6)。このページを使用すると、アドレスでのメッセージの受信を停止することもできます。

図66-6 登録IDの指定

「図66-6 登録IDの指定」の説明

7. 「開始」をクリックします。
メッセージRegistration operation succeededが表示されていることを確認します。

8. 「チャット」をクリックします(図66-7)。

9. 図66-7に示す書式で受信者をTo:フィールドに入力します。

10. メッセージを入力します。

11. 「送信」をクリックします。

12. メッセージが受信されていることを確認します。

13. 図66-7 サンプルの実行

「図66-7 サンプルの実行」の説明

66.6.4 新規アプリケーション・サーバー接続の作成

次の手順を実行し、アプリケーション・サーバー接続を作成します。

1. プロジェクトを右クリックし、「新規」→「接続」→「アプリケーション・サーバー接続」の順に選択して、新規アプリケーション・サーバー接続を作成します(図66-8)。

図66-8 新規アプリケーション・サーバー接続

「図66-8 新規アプリケーション・サーバー接続」の説明

2. 接続にSOA_serverという名前を付けて、「次へ」をクリックします(図66-9)。

3. 「接続タイプ」に「WebLogic 10.3」を選択します。

図66-9 新規アプリケーション・サーバー接続

「図66-9 新規アプリケーション・サーバー接続」の説明

4. 認証情報を入力します。ユーザー名の一般的な値はweblogicです。

5. 「接続」ダイアログで、SOA管理サーバーのホスト名、ポートおよびSSLポートを入力し、Oracle WebLogic Serverドメインのドメイン名を入力します。

6. 「次へ」をクリックします。

7. 「テスト」ダイアログで、「接続のテスト」をクリックします。

8. メッセージSuccess!が表示されていることを確認します。
アプリケーション・サーバー接続が作成されました。

67 ユーザー・メッセージング・プリファレンス

この章では、Oracle User Messaging Serviceにパッケージ化されているユーザー・メッセージング・プリファレンスについて説明します。ここでは、メッセージング・チャネルの使用方法、およびメッセージング・フィルタを使用した連絡ルールの作成方法について説明します。

注意:

Oracle User Messaging Serviceのアーキテクチャとコンポーネントの詳細は、『Oracle Fusion Middleware Oracle SOA Suiteスタート・ガイド』を参照してください。

この章には次の項が含まれます:

- 第67.1項「ユーザー・メッセージング・プリファレンスの概要」

- 第67.2項「メッセージング・チャネルの管理方法」

- 第67.3項「フィルタを使用した連絡先ルールの作成」

- 第67.4項「設定の構成」

67.1 ユーザー・メッセージング・プリファレンスの概要

ユーザー・メッセージング・プリファレンスを使用すると、複数のチャネル(配信タイプ)にアクセスするユーザーは、メッセージを受信する方法、時期および場所を制御できます。ユーザーは、フィルタ(配信プリファレンス)を定義して、メッセージの配信先チャネルとその環境を指定します。ユーザーのデバイスおよびフィルタに関する情報は、Oracle Fusion Middlewareでの使用がサポートされているデータベースに格納されます。

アプリケーション開発者にとっては、ユーザー・メッセージング・プリファレンスを使用すると柔軟性が増します。電子メールを送信するか、SMSメッセージを送信するかを決定するためのビジネス・ロジックが必要なアプリケーションとは異なり、このアプリケーションでは、単にユーザーにメッセージを送信するのみで、そのメッセージはユーザーのプリファレンスに従って配信されます。

プリファレンスはデータベースに格納されるため、プリファレンスの情報は、ドメイン内のユーザー・メッセージング・プリファレンスの全インスタンス間で共有されます。

oracle.sdp.messaging.userprefsパッケージには、ユーザー・メッセージング・プリファレンスのAPIクラスが含まれています。詳細は、Javadocを参照してください。

67.1.1 用語

ユーザー・メッセージング・プリファレンスでは次の用語が定義されます。

- チャネル: たとえば電子メール、ボイスまたはSMSなどのトランスポート・タイプ。また一般に、電話やPDAなどの物理的なチャネル。

- チャネル・アドレス: チャネルが通信できるアドレスの1つ。

- フィルタ: 一連の通知配信プリファレンス。

- システム条件: 管理者が拡張できない事前定義済のビジネス条件。

- ビジネス条件: システム管理者がEnterprise Managerを通して定義し、管理するルール条件。ビジネス条件は、定義、追加または削除できます。

- ルール条件: システム条件またはビジネス条件。

- 演算子: 比較演算子「等しい」、「等しくない」、「含む」または「含まない」。

- ファクト: 送信時刻や送信者など、評価のためにメッセージから渡されるデータ。

- ルール・エンジン: フィルタを処理し、評価するユーザー・メッセージング・プリファレンスのコンポーネント。

- 比較: ルール条件および関連する比較演算子。

- アクション: 全員に送信、フェイルオーバーまたはチャネルに送信しないなど、ルールで指定された条件を満たす場合に実行されるアクション。

67.1.2 通知配信プリファレンスの構成

ユーザー・メッセージング・プリファレンスでは、次の内容に基づいて、通知配信プリファレンスを構成できます。

- 適切に定義された一連のルール条件(システム条件またはビジネス条件)

- Oracle User Messaging Serviceによってサポートされる一連のチャネルおよび対応するアドレス

- ルール・エンジンによって透過的に処理される一連のユーザー・メッセージング・プリファレンスのフィルタ

通知配信プリファレンスの1つのユースケースとして、不具合追跡システムに入力された不具合に対して使用される場合があります。たとえば、ユーザーAlexは、「type = Premium」の顧客から自分の製品に対して報告された「priority = 1」の不具合について、SMSおよび電子メールによる通知を望んでいます。その他すべての「priority > 1」の不具合については、電子メールによる通知のみを望んでいるとします。Alexのプリファレンスは、次のように記述できます。

例67-1 通知配信プリファレンス

Rule (1): if (Customer Type = Premium) AND (priority = 1) then notify [Alex] using
SMS and EMAIL.

Rule (2): if (Customer Type = Premium) AND (priority > 1) then notify [Alex] using
EMAIL.

ランタイム・サービス、Oracle Rules Engineは、ユーザー・リクエストの通知配信を処理するためにフィルタを評価します。

67.1.3 配信プリファレンス・ルール

配信プリファレンス・ルールは、ルール比較およびルール・アクションで構成されます。ルール比較は、ルール条件(システム条件またはビジネス条件)と、それに関連する比較演算子で構成されています。ルール・アクションは、ルール内に指定した条件を満たす場合に実行されるアクションです。

67.1.3.1 データ型

表67-2に、ユーザー・メッセージング・プリファレンスによってサポートされるデータ型を示します。各システム条件およびビジネス条件には関連するデータ型があり、各データ型には一連の事前定義済比較演算子があります。管理者はこれらの演算子を拡張できません。

表67-1 ユーザー・メッセージング・プリファレンスでサポートされるデータ型

データ型

比較演算子

サポートされる値

日付

isEqual、isNotEqual、isGreaterThan、isGreaterThanOrEqual、isLessThan、isLessThanOrEqual、Between、isWeekday、isWeekend

日付は、java.util.Dateオブジェクト、つまりEpochと呼ばれる標準基準時間(1970年1月1日00:00:00 GMT時間)以降のミリ秒を表す文字列として受け取られます(実際の値はjava.util.Date.getTime()またはjava.util.Calendar.getTime()から取得されます)。

時間

isEqual、isNotEqual、Between

時刻を表す4桁のHHMM形式の整数。最初の2桁は24時間形式の時間です。後半の2桁は分です。

数値(小数)

isEqual、isNotEqual、Between、isGreaterThan、isGreaterThanOrEqual、isLessThan、isLessThanOrEqual、isMultipleOf、isNotMultipleOf

java.lang.Doubleオブジェクト、つまり倍精度の浮動小数点数を表す文字列。

文字列

isEqual、isNotEqual、Contains、NotContains

任意の文字列。

注意:

文字列データ型は正規表現をサポートしていません。

時間データ型は、システム条件でのみ使用できます。

67.1.3.2 システム条件

表67-2に、事前定義済のビジネス条件であるシステム条件を示します。管理者はシステム条件を拡張できません。

表67-2 ユーザー・メッセージング・プリファレンスでサポートされるシステム条件

システム条件

データ型

サポートされる値

日付

日付

日付は、java.util.Dateオブジェクト、つまりEpochと呼ばれる標準基準時間(1970年1月1日00:00:00 GMT時間)以降のミリ秒を表す文字列として受け取られます(実際の値はjava.util.Date.getTime()またはjava.util.Calendar.getTime()から取得されます)。

時間

時間

時刻を表す4桁のHHMM形式の整数。最初の2桁は24時間形式の時間です。後半の2桁は分です。

67.1.3.3 ビジネス条件

ビジネス条件は、Oracle Application Server11g Enterprise Managerを通してシステム管理者が定義し、管理するルール条件です。ビジネス条件の追加、定義および削除の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。ビジネス条件は、キー、データ型、オプションの説明およびオプションの値リスト(LOV)で構成されています。

表67-3に、ユーザー・メッセージング・プリファレンスによってサポートされる事前定義済のビジネス条件を示します。

表67-3 ユーザー・メッセージング・プリファレンス用の事前定義済ビジネス条件

ビジネス条件

データ型

サービス名

文字列

プロセス名

文字列

システム・コード

文字列

エラー・コード

文字列

発生数

数値(小数)

組織

文字列

優先度

文字列

アプリケーション

文字列

アプリケーション・タイプ

文字列

有効期限

日付

送信元

文字列

宛先

文字列

顧客名

文字列

顧客タイプ

文字列

ステータス

文字列

金額

数値(小数)

期日

日付

プロセス・タイプ

文字列

支出タイプ

文字列

コスト合計

数値(小数)

処理時間

数値(小数)

順序タイプ

文字列

サービス・リクエスト・タイプ

文字列

グループ名

文字列

ソース

文字列

分類

文字列

期間

数値(小数)

ユーザー

文字列

ロール

文字列

67.1.4 ルール・アクション

特定のルールに対して、ユーザー・メッセージング・プリファレンスのユーザーは、次のいずれかのアクションを定義できます。

- 全員に送信: ブロードキャスト・メッセージをブロードキャスト・アドレス・リストのすべてのチャネルに送信します。

- フェイルオーバー: 1つのメッセージの送信に成功するまで、アドレス・リストのチャネルに対してメッセージを順に送信します。つまり、現在のチャネルが失敗ステータスを戻すと、次のチャネルへの送信が実行されます。ユーザーは、ユーザー・メッセージング・プリファレンスを使用してチャネル固有のステータス・コードまたは有効期限を指定することはできません。

- チャネルに送信しない: すべてのチャネルにメッセージを送信しません。

ヒント:

ユーザー・メッセージング・プリファレンスでは、指定されたチャネルに送信しないように指示するフィルタ・アクションは提供されません。ルールには、肯定アクションのみを指定し、否定アクションを指定しないことをお薦めします。

- デフォルト・アドレス: アクションを定義しない場合は、Enterprise Managerの「メッセージング・チャネル」ページで定義した1つ以上のデフォルト・アドレスにメッセージが送信されます。

67.2 メッセージング・チャネルの管理方法

ユーザーが作成したすべてのチャネルは、そのユーザーのシステムIDに関連付けられます。Oracle User Messaging Serviceにおけるチャネルは、携帯電話などの物理的なチャネルおよびデスクトップで実行している電子メール・クライアント・アプリケーションの両方を表し、「メッセージング・チャネル」タブ(図67-1)で構成できます。

注意:

- UMS環境で有効な拡張ドライバが構成されている場合、ポップアップ・メッセージング・チャネルがデフォルトとして選択されます。設定されているデフォルト値は、popup:usernameです。拡張ドライバの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のメッセージング拡張ドライバに関する項を参照してください。

- デフォルトとして他のチャネルが選択されておらず、LDAP設定から「勤務先電子メール」が利用可能な場合は、「勤務先電子メール」がデフォルトとして自動的に設定されます。
ユーザーによって代替のデフォルト・チャネルが構成されている場合は、ユーザー設定が使用されます。

代替のデフォルト・チャネルが使用できない場合、ユーザーはデフォルトの「勤務先電子メール」チャネル設定を編集および変更できません。

LDAP設定の構成の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のLDAPユーザー・プロファイルへのユーザー・メッセージング・サービス・アクセスの構成に関する項を参照してください。

図67-1 「メッセージング・チャネル」タブ

「図67-1 「メッセージング・チャネル」タブ」の説明

「メッセージング・チャネル」タブを使用すると、次のタスクを実行できます。

67.2.1 チャネルの作成

チャネルを作成する手順は、次のとおりです。

1. 「作成」(図67-2)をクリックします。

図67-2 「作成」アイコン

「図67-2 「作成」アイコン」の説明

2. 「名前」フィールドにチャネルの名前を入力します(図67-3)。

3. 「タイプ」ドロップダウン・メニューからチャネルのトランスポート・タイプを選択します。

4. 選択したトランスポート・タイプに対して適切な数値またはアドレスを入力します。

5. チャネルをデフォルト・チャネルとして設定するには、「デフォルト」チェック・ボックスを選択します。デフォルト・チャネルは複数指定できます。

図67-3 チャネルの作成

「図67-3 チャネルの作成」の説明

6. 「OK」をクリックしてチャネルを作成します。チャネルは「チャネル」ページに表示されます。「チャネル」ページでは、チャネルを編集または削除できます。

67.2.2 チャネルの編集

チャネルを編集するには、「チャネル」リストからそのチャネルを選択して「編集」をクリックします(図67-4)。チャネルの編集ページが表示され、第67.2.1項「チャネルの作成」で説明したチャネル・プロパティを変更できます。

図67-4 チャネルの編集

「図67-4 チャネルの編集」の説明

チャネルがアイデンティティ・ストアのユーザー・プロファイルから取得した情報に基づいている場合、アドレスはユーザー・メッセージング・プリファレンスで変更できません(図67-5)。このようなチャネルで実行できるのは、そのチャネルをデフォルトに設定する操作のみです。

図67-5 アイデンティティ・ストアをバックにしたチャネルの編集

「図67-5 アイデンティティ・ストアをバックにしたチャネルの編集」の説明

67.2.3 チャネルの削除

チャネルを削除するには、そのチャネルを選択して「削除」(図67-6)をクリックします。

図67-6 「削除」アイコン

「図67-6 「削除」アイコン」の説明

67.2.4 デフォルト・チャネルの設定

1つ以上のチャネルをデフォルト・チャネルとして構成できます。通知の受信方法のデフォルトとしては電子メールが事前構成されています。チャネルをデフォルト・チャネルとして追加または削除できます。

追加のチャネルをデフォルトとして設定するには、そのチャネルを選択して「編集」をクリックし、「デフォルト・チャネルとして設定」をクリックします。選択したチャネルの横にチェックマーク(図67-7)が表示され、通知を受信するデフォルトの方法であることが示されます。必要な場合は、この手順を繰り返してさらにデフォルト・チャネルを追加します。

図67-7 「デフォルト」アイコン

「図67-7 「デフォルト」アイコン」の説明

67.3 フィルタを使用した連絡先ルールの作成

「メッセージング・フィルタ」タブ(図67-8)を使用すると、ユーザーは受信する通知のタイプを指定するフィルタのみでなく、比較演算子(「は次と等しい」、「は次と等しくない」など)の組合せでこれらの通知を受信するためのチャネル、通知タイプ、コンテンツやソースを説明するビジネス条件、そして最後に通知アクション(すべてのチャネルへの通知の送信、チャネルの通知受信のブロック、または最初に使用可能なチャネルへの通知の送信)を指定するフィルタを作成できます。

図67-8 「メッセージング・フィルタ」タブ

「図67-8 「メッセージング・フィルタ」タブ」の説明

図67-9に、「Travel Filter」というフィルタの作成を示します。このフィルタは、weblogicという名前のユーザーが、自分が出張している間の顧客に関する通知の処理方法を指定しています。すべてのフィルタ条件に一致した通知は、最初に「業務用携帯電話番号」チャネルに送信されます。このチャネルが使用できない場合、次に使用できるチャネルとして「勤務先電子メール」が選択されているため、Oracle User Messaging Serviceは通知を電子メールとして送信します。

図67-9 フィルタの作成

「図67-9 フィルタの作成」の説明

67.3.1 フィルタの作成

フィルタを作成する手順は、次のとおりです。

1. 「作成」(図67-2)をクリックします。「フィルタの作成」ページが表示されます(図67-9)。

2. 「フィルタ名」フィールドにフィルタの名前を入力します。

3. 必要に応じて、「説明」フィールドにフィルタの説明を入力します。

4. 「次のすべての条件」または「次の任意の条件」オプションを選択して、通知がすべての条件を満たす必要があるのか、それとも一部の条件なのかを選択します。

5. 次のように、 「条件」 セクションのリストおよびフィールドを使用して、フィルタ条件を定義します。

1. 通知の属性を選択します。これらの属性のリストは、表67-3を参照してください。

2. 選択した条件タイプを表67-1で説明した比較演算子のいずれかと組み合せます。

3. 属性または演算を示す適切な値を追加します。

たとえば、「日付」属性を選択する場合は、比較演算子を1つ選択し、次に日付チューザから適切な日付を選択します。

6. 「追加」(図67-6)をクリックして、属性と比較演算子を表に追加します。

7. この手順を繰り返してフィルタ条件をさらに追加します。フィルタ条件を削除するには、「削除」(図67-6)をクリックします。

8. 次の配信ルールの1つを選択します。

- 選択したすべてのチャネルにメッセージを送信 -- リストしたすべてのチャネルにメッセージを送信するには、このオプションを選択します。

- 最初の使用可能なチャネルに送信(順にフェイルオーバー) -- フィルタ基準に一致するメッセージを優先チャネル(上矢印や下矢印を使用して設定)または次の使用可能なチャネルに送信するには、このオプションを選択します。

- メッセージを送信しない -- フィルタ条件に一致するメッセージの受信をブロックするには、このオプションを選択します。

9. 配信チャネルを設定するには、「通知チャネルの追加」リストからチャネルを選択し、次に「追加」(図67-6)をクリックします。チャネルを削除するには、「削除」(図67-6)をクリックします。

10. 必要に応じて、上矢印や下矢印を使用してチャネルに優先順位を付けます。「最初の使用可能なチャネルに送信」を選択すると、最上位のチャネル(使用可能な場合)がフィルタ基準に一致したメッセージを受信します。

11. 「OK」をクリックしてフィルタを作成します。このフィルタは、「取消」をクリックすると破棄されます。

67.3.2 フィルタの編集

フィルタを編集するには、最初にそのフィルタを選択し、次に「編集」をクリックします(図67-9)。フィルタの編集ページが表示され、第67.3.1項「フィルタの作成」で説明したフィルタ・プロパティを追加または変更できます。

67.3.3 フィルタの削除

フィルタを削除するには、最初にそのフィルタを選択し、次に「削除」(図67-6)をクリックします。

67.4 設定の構成

右上の領域からアクセスできる「設定」タブ(図67-10)を使用して、ユーザーは次のパラメータを設定できます。

- アクセシビリティ・モード: 「標準」または「スクリーン・リーダー」を選択します。

- ロケール・ソース: 「アイデンティティ・ストアから」または「ブラウザから」を選択します。

図67-10 設定の構成

「図67-10 設定の構成」の説明

第XII部

付録

この部では、Oracle SOA Suiteの付録について説明します。

この部は、次の付録で構成されています。

- 付録A「BPELプロセスのアクティビティとサービス」

- 付録B「XPath拡張関数」

- 付録C「デプロイメント・ディスクリプタのプロパティ」

- 付録D「センサー・パブリック・ビューとセンサー・アクションXSDの理解」

- 付録E「Oracle BAM Webサービスの操作」

- 付録F「Oracle BAMアラート・ルール・オプション」

- 付録G「Oracle BAM ICommandの操作とファイル・フォーマット」

- 付録H「正規化されたメッセージのプロパティ」

- 付録I「ルール・ディクショナリ・エディタのタスク・フローによって実装されるインタフェース」

- 付録J「Oracle User Messaging Serviceアプリケーション」

- 付録K「Oracle SOA Suiteのプロパティのロード・マップ」

A BPELプロセスのアクティビティとサービス

この付録では、SOAコンポジット・アプリケーションでBPELプロセスを設計する際に使用するBPELプロセスのアクティビティとサービスについて説明します。また、Oracle Service Registryを公開および参照する方法と、Oracle Enterprise Repositoryによる設計時ガバナンスの提供方法についても説明します。

項目は次のとおりです。

- A.1項「アクティビティおよびコンポーネントの概要」

- A.2項「BPEL 1.1および2.0アクティビティの概要」

- A.3項「BPELサービスの概要」

- A.4項「Oracle Service Registryの公開および参照」

- A.5項「Oracle Enterprise Repositoryによる設計時ガバナンスの提供」

- A.6項「プロセス・ダイアグラムのロード時の検証」

A.1項 アクティビティおよびコンポーネントの概要

Oracle BPELデザイナの「コンポーネント・パレット」で「SOAコンポーネント」を開くと、サービス・コンポーネントが表示されます。図A-1に、BPEL 1.1プロセスで表示されるコンポーネントを示します。BPEL 2.0プロセスで表示されるコンポーネントも同じです。

図A-1 SOAコンポーネント

「図A-1 SOAコンポーネント」の説明

これらのサービス・コンポーネントの詳細は、次に示す項を参照してください。

- BPELプロセス
第II部「BPELプロセス・サービス・コンポーネントの使用」を参照してください。

- ビジネス・ルール
第IV部「ビジネス・ルール・サービス・コンポーネントの使用」を参照してください。

- ヒューマン・タスク
第V部「ヒューマン・ワークフロー・サービス・コンポーネントの使用」

- メディエータ
第III部「Oracle Mediatorサービス・コンポーネントの使用」を参照してください。

Oracle BPELデザイナの詳細は、第4章「Oracle BPEL Process Managerの基本操作」を参照してください。

A.2 BPEL 1.1および2.0アクティビティの概要

この項では、BPELアクティビティの概要を紹介し、それらのアクティビティの使用方法が説明されているドキュメントを参照先として示します。

Oracle BPELデザイナには、BPELプロセスに追加できるBPEL 1.1およびBPEL 2.0アクティビティが含まれています。これらのアクティビティを使用すると、プロセス内で特定のタスクを実行できます。一部のアクティビティはBPEL 1.1とBPEL 2.0のどちらでも使用できます。その他はBPEL 1.1かBPEL 2.0の一方でのみ使用できます。

これらのアクティビティにアクセスするには、Oracle BPELデザイナの「コンポーネント・パレット」に移動します。アクティビティは、2つのカテゴリのいずれかの下に表示されます。

- BPELコンストラクト: BPEL 1.1および2.0の標準機能で提供されるコア・アクティビティ(コンストラクトとも言います)が表示されます。このカテゴリのアクティビティは、BPEL 1.1の場合は「Webサービス」、「アクティビティ」、「構造化アクティビティ」、BPEL 2.0の場合は「Webサービス」、「基本アクティビティ」、「構造化アクティビティ」という追加サブカテゴリの下にそれぞれ表示されます。

- Oracle Extensions: BPEL 1.1および2.0機能に価値と使いやすさを追加する拡張アクティビティが表示されます。

表A-1に、使用可能なアクティビティを示します。

表A-1 BPEL 1.1とBPEL 2.0のコンストラクトおよび拡張

アクティビティ

上位のカテゴリ

BPEL 1.1でサポートされているか

BPEL 2.0でサポートされているか

参照先

Assign

BPELコンストラクト

はい

はい

A.2.3項「Assignアクティビティ」

Assert

Oracle Extensions

はい

はい

A.2.4項「Assertアクティビティ」

Bind Entity

Oracle Extensions

はい

いいえ

A.2.5項「Bind Entityアクティビティ」

Compensate

BPELコンストラクト

はい

はい

A.2.6項「Compensateアクティビティ」

CompensateScope

BPELコンストラクト

いいえ

はい

A.2.7項「CompensateScopeアクティビティ」

Create Entity

Oracle Extensions

はい

いいえ

A.2.8項「Create Entityアクティビティ」

Dehydrate

Oracle Extensions

はい

はい

A.2.9項「Dehydrateアクティビティ」

Email

Oracle Extensions

はい

はい

A.2.10項「Emailアクティビティ」

Empty

BPELコンストラクト

はい

はい

A.2.11項「Emptyアクティビティ」

Exit

BPELコンストラクト

いいえ

はい

注意: BPEL 2.0ではterminateアクティビティから置き換わります。

A.2.12項「Exitアクティビティ」

Flow

BPELコンストラクト

はい

はい

A.2.13項「Flowアクティビティ」

FlowN

Oracle Extensions

はい

いいえ

注意: BPEL 2.0ではforEachアクティビティに置き換わります。

A.2.14項「FlowNアクティビティ」

forEach

BPELコンストラクト

いいえ

はい

注意: BPEL 2.0ではFlowNアクティビティから置き換わります。

A.2.15項「forEachアクティビティ」

If

BPELコンストラクト

いいえ

はい

注意: BPEL 2.0ではswitchアクティビティから置き換わります。

A.2.16項「Ifアクティビティ」

IM

Oracle Extensions

はい

はい

A.2.17項「IMアクティビティ」

Invoke

BPELコンストラクト

はい

はい

A.2.18項「Invokeアクティビティ」

Java Embedding

Oracle Extensions

はい

はい

A.2.19項「Java Embeddingアクティビティ」

Partner Link

BPELコンストラクト

はい

はい

A.2.20項「Partner Linkアクティビティ」

Phase

Oracle Extensions

はい

はい

A.2.21項「Phaseアクティビティ」

Pick

BPELコンストラクト

はい

はい

A.2.22項「Pickアクティビティ」

Receive

BPELコンストラクト

はい

はい

A.2.23項「Receiveアクティビティ」

Receive Signal

Oracle Extensions

はい

はい

A.2.24項「Receive Signalアクティビティ」

Remove Entity

Oracle Extensions

はい

いいえ

A.2.25項「Remove Entityアクティビティ」

RepeatUntil

BPELコンストラクト

いいえ

はい

A.2.26項「RepeatUntilアクティビティ」

Replay

Oracle Extensions

はい

はい

A.2.27項「Replayアクティビティ」

Reply

BPELコンストラクト

はい

はい

A.2.28項「Replyアクティビティ」

Rethrow

BPELコンストラクト

いいえ

はい

A.2.29項「Rethrowアクティビティ」

Scope

BPELコンストラクト

はい

はい

A.2.30項「Scopeアクティビティ」

Sequence

BPELコンストラクト

はい

はい

A.2.31項「Sequenceアクティビティ」

Signal

Oracle Extensions

はい

はい

A.2.32項「Signalアクティビティ」

SMS

Oracle Extensions

はい

はい

A.2.33項「SMSアクティビティ」

Switch

BPELコンストラクト

はい

いいえ

注意: BPEL 2.0ではIfアクティビティに置き換わります。

A.2.34項「Switchアクティビティ」

Terminate

BPELコンストラクト

はい

いいえ

注意: BPEL 2.0ではExitアクティビティに置き換わります。

A.2.35項「Terminateアクティビティ」

Throw

BPELコンストラクト

はい

はい

A.2.36項「Throwアクティビティ」

Transform

Oracle Extensions

はい

はい

A.2.37項「Transformアクティビティ」

User Notification

Oracle Extensions

はい

はい

A.2.38項「User Notificationアクティビティ」

Validate

Oracle Extensions (BPEL 1.1)

BPELコンストラクト(BPEL 2.0)

はい

はい

A.2.39項「Validateアクティビティ」

Voice

Oracle Extensions

はい

はい

A.2.40項「Voiceアクティビティ」

Wait

BPELコンストラクト

はい

はい

A.2.41項「Waitアクティビティ」

While

BPELコンストラクト

はい

はい

A.2.42項「Whileアクティビティ」

アクティビティの詳細は、次のURLにアクセスして、Business Process Execution Language for Web Services Specification Version 1.1またはWeb Services Business Process Execution Language Specification Version 2.0を参照してください。

http://www.oasis-open.org

A.2.1 多くのアクティビティに共通のタブ

アクティビティはそれぞれ特定のタスクを実行しますが、同様のタスクを実行できるタブが多くのアクティビティに用意されています。この項では、これらの共通タブについて説明します。

A.2.1.1 「注釈」タブ

「注釈」タブはすべてのアクティビティで表示され、コードへのコメントや名前と値のペアの割当てという形でアクティビティを説明するために使用できます。

「注釈」タブには、注釈の順序を変更するための方法が用意されていません。解決策として、Oracle BPELデザイナでプロジェクトのBPELファイルの「ソース」ビューを使用して注釈の順序を変更します。

A.2.1.2 「アサーション」タブ

「アサーション」タブは、invoke、receive、replyの各アクティビティと、pickおよびscopeアクティビティのonMessageブランチで表示されます。これらのアクティビティでのリクエスト/レスポンス操作時にコールバック・メッセージを受信すると、一連のアサーションが実行されます。アサーションには、falseと評価された場合にアクティビティからBPELフォルトをスローするXPath式を指定します。この機能は、パートナ・コールバック後に多数のswitch、assignおよびthrowアクティビティを使用する可能性がある場合の代替手段として提供されています。

条件を実行するタイミングを次の中から選択できます。

- Preassert: この条件は、invokeアクティビティまたはreplyアクティビティがアウトバウンド・メッセージを送信する前に実行されます。

- Postassert: この条件は、invokeアクティビティ、receiveアクティビティまたはonMessageブランチがインバウンド・メッセージを受信した後に実行されます。

詳細は、このタブのオンライン・ヘルプと、第12.14項「アサーション条件によるフォルトのスロー」を参照してください。

A.2.1.3 「相関」タブ

「相関」タブは、invoke、receive、replyの各アクティビティ、pickアクティビティのonMessageブランチ、およびscopeアクティビティのonMessage変数で表示されます。相関セットを使用すると、サービス・インスタンスにおける操作の相関グループを明示的に指定できるため、プロセスとそのパートナ間の複雑な相互作用の処理が可能になります。相関トークンのセットは、相関グループのすべてのメッセージで共有されるプロパティのセットとして定義されます。

詳細は、このタブのオンライン・ヘルプと、第9.1項「非同期サービスでの相関セットの使用」を参照してください。

A.2.1.4 「ドキュメント」タブ

「ドキュメント」タブでは、BPELファイルのアクティビティにヒューマン・ドキュメントを埋め込むことができます。これらのコメントは、BPELファイルのソース・コードでのみ表示されます。表A-1に詳細を示します。

例A-1 「ドキュメント」タブ

<invoke>
. . .
<documentation>
Invokes the credit rating service partner link
</documentation>
. . .

注意:

このタブは、BPEL 2.0プロジェクトでのみ使用できます。

A.2.1.5 「ヘッダー」タブ

「ヘッダー」タブは、invoke、receive、replyの各アクティビティと、pickおよびscope (BPEL 1.1の場合)アクティビティのonMessageブランチで表示されます。アドバンスト・キューイング(AQ)、ファイル、FTP、MQおよびJava Message Service(JMS)アダプタで使用するヘッダー変数を作成します。

詳細は、このタブのオンライン・ヘルプと、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

A.2.1.6 「プロパティ」タブ

「プロパティ」タブは、invoke、receive、replyの各アクティビティと、pickおよびscopeアクティビティのonMessageブランチで表示されます。Oracle BPEL Process Manager、Oracle Mediator、Oracle JCAアダプタおよびOracle B2Bに対して正規化されたメッセージ・ヘッダー・プロパティを定義できます。

詳細は、このタブのオンライン・ヘルプと、付録H「正規化されたメッセージのプロパティ」を参照してください。

A.2.1.7 「スキップ条件」タブ

「スキップ条件」タブは、ほとんどのアクティビティで表示され、指定したXPath式がtrueと評価された場合に、そのアクティビティがスキップされるようにできます。この拡張機能は、条件付きアクティビティの作成に使用するswitchアクティビティのcaseパターンの代替手段として提供されています。

詳細は、このタブのオンライン・ヘルプと、第11.5項「アクティビティの実行をバイパスするためのXPath式の指定」を参照してください。

A.2.1.8 「ソース」タブと「ターゲット」タブ

「ソース」タブと「ターゲット」タブでは、フロー・アクティビティで実行するソースとターゲットのアクティビティを定義できます。この機能を使用すると、フロー・アクティビティ内でアクティビティの実行を同期し、ターゲット・アクティビティがソース・アクティビティの完了後にのみ実行されるようにできます。

注意:

これらのタブは、BPEL 2.0プロジェクトでのみ使用できます。BPEL 1.1プロジェクトの場合、この機能を使用するには、BPELファイルを直接編集する必要があります。

詳細は、このタブのオンライン・ヘルプと、第10.2.3項「flowアクティビティ内のアクティビティ実行の同期化」を参照してください。

A.2.1.9 「タイムアウト」タブ

「タイムアウト」タブは、receiveアクティビティで表示され、リクエスト/レスポンス操作に対するタイムアウト設定が提供されます。この機能は、パートナ・コールバックのタイムアウト期間を指定する場合に使用する必要があるpickアクティビティのonMessageブランチとonAlarmブランチの代替手段として提供されています。

詳細は、このタブのオンライン・ヘルプと、第15.3項「receiveアクティビティのリクエスト/リプライ操作および入力専用操作に対するタイムアウトの設定」を参照してください。

A.2.2 BPELプロジェクトでのアクティビティのコピーおよび貼付け

同じBPELプロジェクト内またはBPELプロジェクト間で、アクティビティをコピーして貼り付けることができます。これにより、類似したアクティビティ全体を複数回作成する必要がなくなります。アクティビティを1回設計して複数の場所で使用し、必要に応じて編集できます。

注意:

個別のOnAlarmアクティビティを1つのscopeアクティビティからコピーして、別のscopeアクティビティに貼り付けることができます。個別のOnAlarmアクティビティを1つのpickアクティビティからコピーして、別のpickアクティビティに貼り付けることもできます。

次の制約に注意してください:

- BPEL 1.1プロジェクトからBPEL 2.0プロジェクトに、またはBPEL 2.0プロジェクトからBPEL 1.1プロジェクトにアクティビティをコピーすることはできません。

- BPEL 2.0プロジェクトでは、個別のOnAlarmアクティビティをpickアクティビティからscopeアクティビティにコピーしたり、その逆を行うことはできません。ただし、このタイプのコピーおよび貼付けは、BPEL 1.1プロジェクトではサポートされています。

- scopeアクティビティをコピーして貼り付ける場合、最初のscopeアクティビティで参照される変数はコピーされません。

アクティビティをコピーして貼り付ける手順は、次のとおりです。

1. コピーするアクティビティを右クリックします。

2. 「コピー」を選択します。

3. アクティビティを貼り付けるプロジェクトに移動します。

4. 次のいずれかのタスクを実行してください。

1. このアクティビティを貼り付ける場所に最も近いアクティビティを右クリックします。

2. 選択したアクティビティの前後どちらに貼り付けるかを選択します。

または、

1. 図A-2に示すように、BPELプロセスをハイライト表示します。

図A-2 選択されたBPELプロセス

「図A-2 選択されたBPELプロセス」の説明

2. 右クリックして「中に貼付け」を選択します。
アクティビティがBPELプロセスの上部に貼り付けられます。

A.2.3 Assignアクティビティ

このアクティビティには、変数の内容を別の変数にコピーする操作など、データ操作のメソッドが用意されています。コピー操作により、変数、式、エンドポイントおよびその他の要素の間で情報を転送できます。

図A-3に、BPEL 1.1における「割当て」ダイアログの「コピー・ルール」タブを示します。次の方法のいずれかで、ツリー内のソース・ノードとターゲット・ノードの間のマッピングを作成します。

- ソース・ノードをターゲット・ノードにドラッグして、ソース・ノードからターゲット・ノードへのBPELコピー・ルールを作成します。このアクションで、ソースとターゲットのタイプを接続する線が作成されます。

- ソース・ノードを選択してから、ターゲット・ノードを選択し、ダイアログの下部にある表の上の「追加」アイコンをクリックします。その後、マッピングが表に追加され、それらのノード間の接続線がツリー内に描画されます。

コピー・ルールは、ダイアログの下部にある「開始」セクションと「終了」セクションに表示されます。

図A-3 割当ての編集ダイアログの「コピー・ルール」タブ

「図A-3 割当ての編集ダイアログの「コピー・ルール」タブ」の説明

ソース・ノード・セクションの上にある「挿入モードの選択」リストを使用すると、作成する次のコピー・ルールを、ダイアログの下部で選択されているルールの前か後ろに挿入できます。

ターゲット・ノードの上に表示されるアイコンを使用すると、ターゲット・ノードに対して次のタスクを実行できます(左から右の順)。デフォルトでは、センター・キャンバスが開きます。それが閉じている場合は、開いているバーをドラッグし、センター・キャンパスを表示します。

- 「式」アイコン: このアイコンをターゲット・ノードにドラッグすると、そのノードにXPath式を割り当てるための「式ビルダー」ダイアログが開きます。このアイコンを、センター・キャンバスにドラッグしてこのダイアログを呼び出し、式を指定し、ダイアログを保存して閉じ、アイコンをターゲット・ノードにドラッグすることもできます。

- 「リテラル」(BPEL 2.0仕様)アイコンまたは「フラグメント」(BPEL 1.1仕様)アイコン: このアイコンをターゲット・ノードにドラッグすると、そのターゲット・ノードにリテラル(BPELプロジェクトがBPEL 2.0仕様をサポートしている場合)またはXMLフラグメント(BPELプロジェクトがBPEL 1.1仕様をサポートしている場合)を割り当てるためのダイアログが開きます。このアイコンを、センター・キャンバスにドラッグしてこのダイアログを呼び出し、値を指定し、ダイアログを保存して閉じ、アイコンをターゲット・ノードにドラッグすることもできます。

- 「削除」アイコン: このアイコンをターゲット・ノードにドラッグして、bpelx:remove拡張ルールを作成します。このアイコンを、センター・キャンバスにドラッグしてこのダイアログを呼び出し、ルールを指定し、ダイアログを保存して閉じ、アイコンをターゲット・ノードにドラッグすることもできます。

- 「名前の変更」アイコン: このアイコンをドラッグして、ターゲット・ノードの名前を変更します。こうすると、elementTo属性にbpelx:rename拡張ルールが追加されます。このアイコンを、センター・キャンバスにドラッグしてダイアログを呼び出し、ルールを指定し、ダイアログを保存して閉じ、アイコンをターゲット・ノードにドラッグすることもできます。

- 「再キャスト」アイコン: このアイコンをドラッグして、ターゲット・ノードを再キャストします。こうすると、typeCastTo属性にbpelx:rename拡張ルールが追加されます。XML出力で、xsi:type属性になります。このアイコンを、センター・キャンバスにドラッグしてダイアログを呼び出し、ルールを指定し、ダイアログを保存して閉じ、アイコンをターゲット・ノードにドラッグすることもできます。

選択したコピー・ルールをbpelx拡張タイプ(bpelx:copyList、bpelx:insertAfter、bpelx:insertBefore、bpelx:append)に変更することもできます。

選択の方法は、BPEL 1.1とBPEL 2.0で異なります。

図A-4に、BPEL 1.1における拡張タイプの選択方法を示します。コピー・ルールを選択して「コピー」ドロップダウン・リストを選択し、適切な拡張を選択します。

図A-4 コピー・ルールをBPEL 1.1のbpelx拡張に変更

「図A-4 コピー・ルールをBPEL 1.1のbpelx拡張に変更」の説明

図A-5に、BPEL 2.0における拡張タイプの選択方法を示します。コピー・ルールを右クリックしてルール・タイプの変更を選択し、適切な拡張を選択します。

図A-5 コピー・ルールをBPEL 2.0のbpelx拡張に変更

「図A-5 コピー・ルールをBPEL 2.0のbpelx拡張に変更」の説明

bpelx拡張によるXMLデータの操作の詳細は、第6.14項「bpelx拡張要素を使用したXMLデータの操作」を参照してください。

「送信元XPath」と「送信先XPath」の各フィールドで、ソース・タイプの左にあるアイコンにカーソルを重ねて、実行する操作(コピー、追加など)を表示することもできます。それぞれの操作が、タイプごとに異なるアイコンで表されます。コピー・ルールを右クリックして、実行するアクションのリストを表示することも可能です。

- 「'From'式の編集」または「'To'式の編集」: 作成したコピー・ルールにソース・ノードまたはターゲット・ノードへの問合せが含まれるときにXPath式を編集するには、このオプションを選択します。これを選択すると、「式ビルダー」ダイアログが開きます。表示されるメニュー・オプションは、コピー・ルールの現在の選択内容によって異なります。

- ignoreMissingFromData: コピー・ルールのignoreMissingFromData属性の有効と無効を切り替える場合は、このオプションを選択します。有効にすると、bpel:selectionFailure標準フォルトが抑制されます。

- insertMissingToData: コピー・ルールのinsertMissingToData属性の有効と無効を切り替える場合は、このオプションを選択します。

- keepSrcElementName (BPEL 2.0プロジェクトでのみ): コピー・ルールのkeepSrcElementName属性の有効と無効を切り替える場合は、このオプションを選択します。このオプションを使用すると、ターゲットの要素名(to-specで指定される)を、ソースの要素名で置き換えることができます。

- ルール・タイプの変更 (BPEL 2.0プロジェクトでのみ): 選択したルールのタイプを、BPEL拡張ルールであるbpelx:copyList、bpelx:insertAfter、bpelx:insertBefore、bpelx:appendのいずれかに変更する場合は、このオプションを選択します。

- 「ルールの削除」: 選択したルールを削除する場合は、このオプションを選択します。

ignoreMissingFromData、insertMissingToData、keepSrcElementNameの各属性の詳細は、第6.14.7項「assign拡張要素の属性の使用方法」を参照してください。

「終了」セクションの上にあるアイコンを使用すると、選択したコピー・ルールの追加、削除および上下への移動が可能です。

assignアクティビティの詳細は、「コピー・ルール」ダイアログのオンライン・ヘルプと、第6章「BPELプロセスでのXMLデータの操作」を参照してください。

注意:

assignアクティビティに複数のbpelx:append設定が含まれる場合は、このアクティビティを2つのassignアクティビティに分割する必要があります。分割しないと、bpelx:appendがそれぞれリストの最後に移動し、問題が発生する可能性があります。解決策として、この設定を手動で移動します。

A.2.4 Assertアクティビティ

このアクティビティを使用すると、指定した式に対してアサーションを実行できます。

これは、アサーションを指定するスタンドアロンのアクティビティです。このアクティビティは、BPELプロセス・フロー内のすべての場所に配置できます。invokeアクティビティ、replyアクティビティ、receiveアクティビティおよびpickアクティビティとscopeアクティビティのonMessageブランチで、「アサーション」タブからメッセージ交換アクティビティのアサーションを指定することもできます。

図A-6は、「アサート」ダイアログを示しています。

図A-6 「Assert」ダイアログ

「図A-6 「Assert」ダイアログ」の説明

スタンドアロンのassertアクティビティの詳細は、第12.14.1.7項「スタンドアロンassertアクティビティでのアサーション条件」と、第12.14.4項「アサーション条件作成時の処理内容」を参照してください。

A.2.5 bind entityアクティビティ

このアクティビティを使用すると、エンティティ変数を選択できます。エンティティ変数は、様々なデータ・プロバイダ・サービス・テクノロジにアクセスし、プラグインするためのデータ・ハンドルとして機能します。

エンティティ変数は、サービス・データ・オブジェクト(SDO)ベースのデータを使用して、Oracle Application Development Framework(ADF)Business Componentデータ・プロバイダ・サービスと一緒に使用できます。エンティティ変数を使用すると、基礎となるデータ・プロバイダ・サービスがBPELデータ操作を実行するように指定できます。データ・プロバイダ・サービスはデータ・ストア内でデータ操作をバックグラウンドで実行しますが、Oracle BPEL Process Manager提供の他のデータ・ストア関連の機能(たとえば、データベース・アダプタ)を使用しません。この操作により、BPEL Process Managerの実行時パフォーマンスを高め、コンパイルおよび実行時に、基礎となるデータ・プロバイダ・サービスのネイティブの機能を組み込みます。

注意:

このアクティビティは、BPEL 1.1プロジェクトでのみサポートされます。

図A-7は、「Bind Entity」ダイアログを示しています。

図A-7 「Bind Entity」ダイアログ

「図A-7 「Bind Entity」ダイアログ」の説明

A.2.6 Compensateアクティビティ

このアクティビティは、正常に完了している内側のscopeアクティビティでの補正を起動します。このアクティビティを起動できるのは、フォルト・ハンドラまたは別の補正ハンドラの中からのみです。補正は、プロセスでいくつかの操作を完了できず、その他の操作は完了している場合に行われます。プロセスは、以前に完了した操作に戻り、それらを元に戻す必要があります。たとえば、あるプロセスがレンタカー、ホテルおよび航空券を予約するように設計されているとします。レンタカーとホテルを予約しましたが、正しい日付の航空券を予約できません。この場合、レンタカーとホテルの予約を取り消すことで補正を実行します。compensateアクティビティ(補正ハンドラが起動されるスコープを指定)で補正ハンドラが起動されます。

図A-8は、BPEL 1.1における「Compensate」ダイアログを示しています。次のタスクを実行できます。

- 「一般」タブをクリックし、アクティビティに意味のある名前を付けます。

- 補正ハンドラを起動するscopeアクティビティを選択します。

図A-8 「Compensate」ダイアログ

「図A-8 「Compensate」ダイアログ」の説明

BPEL 2.0の場合、「Compensate」ダイアログには「ドキュメント」タブがあります。

compensateアクティビティの詳細は、第12.12項「一連の操作を元に戻した後の補正の使用」を参照してください。

A.2.7 CompensateScopeアクティビティ

このアクティビティを使用すると、正常に完了している特定の内側のscopeに対して補正を開始できます。このアクティビティは、フォルト・ハンドラ、別の補正ハンドラまたは終了ハンドラ内からのみ使用します。

注意:

このアクティビティは、BPEL 2.0プロジェクトでのみサポートされます。

図A-9は、「CompensateScope」ダイアログを示しています。

図A-9 「CompensateScope」ダイアログ

「図A-9 「CompensateScope」ダイアログ」の説明

compensateScopeアクティビティの詳細は、第12.12項「一連の操作を元に戻した後の補正の使用」を参照してください。

A.2.8 create entityアクティビティ

このアクティビティを使用すると、エンティティ変数を作成できます。エンティティ変数は、SDOベースのデータを使用して、Oracle ADF Business Componentデータ・プロバイダ・サービスと一緒に使用できます。

注意:

このアクティビティは、BPEL 1.1プロジェクトでのみサポートされます。

図A-10は、「Create Entity」ダイアログを示しています。

図A-10 「Create Entity」ダイアログ

「図A-10 「Create Entity」ダイアログ」の説明

詳細は、第6.2項「データ・プロバイダ・サービスへのXMLデータ操作の委任」を参照してください。

A.2.9 Dehydrateアクティビティ

デフォルトでは、waitやreceiveなどのアクティビティにデハイドレーションが設定されます。dehydrateアクティビティを使用すると、デハイドレーション・ポイントを明示的に指定できます。このアクティビティは、非同期コールバックの待機中、長期間にわたる非同期プロセスとその現在の状態の情報をデータベースに自動的に保持するためのデハイドレーション・ポイントとして機能します。データベースにプロセスを格納することにより、プロセスを維持し、システムの停止やネットワークの問題が発生した場合の状態や信頼性の低下を防ぎます。この機能により、BPELプロセスの信頼性とスケーラビリティの両方が向上します。

bpelx:dehydrate拡張は、デハイドレーションを実装します。BPELバージョン1.1をサポートするBPELの場合、構文は次のようになります。

<bpelx:dehydrate name="DehydrateInstance"/>

BPELバージョン2.0をサポートするBPELの場合、構文は例A-2のようになります。

例A-2 BPEL 2.0におけるbpelx:dehydrate拡張

<extensionActivity>
<bpelx:dehydrate name="DehydrateInstance"/>
</extensionActivity>

図A-11は、BPEL 2.0における「Dehydrate」ダイアログを示しています。

図A-11 「Dehydrate」ダイアログ

「図A-11 「Dehydrate」ダイアログ」の説明

A.2.10 Emailアクティビティ

このアクティビティを使用すると、イベントに関する電子メール通知を送信できます。

たとえば、オンライン書店のオンライン・ショッピング・ビジネス・プロセスで、商品を出荷した後、ユーザーに儀礼的な電子メール・メッセージを送信するとします。ビジネス・プロセスは、ユーザーIDおよび通知メッセージを指定して通知サービスをコールします。通知サービスは、Oracle Internet Directoryから電子メール・アドレスを取得します。

図A-12は、BPEL 1.1における「Email」ダイアログを示しています。

図A-12 「Email」ダイアログ

「図A-12 「Email」ダイアログ」の説明

emailアクティビティの詳細は、第17.3.1項「電子メール通知チャネルの構成方法」を参照してください。

A.2.11 Emptyアクティビティ

このアクティビティを使用すると、操作なしの命令をプロセスに挿入できます。このアクティビティは、何もしないアクティビティを使用する必要がある場合(フォルトを捕捉して抑止する必要がある場合など)に便利です。

図A-13は、BPEL 1.1における「Empty」ダイアログを示しています。

図A-13 「Empty」ダイアログ

「図A-13 「Empty」ダイアログ」の説明

BPEL 2.0の場合、「Empty」ダイアログには「ドキュメント」タブがあります。

emptyアクティビティの詳細は、第12.10.9項「操作なしの命令をビジネス・プロセスに挿入するemptyアクティビティの作成方法」を参照してください。

A.2.12 Exitアクティビティ

このアクティビティを使用すると、終了ハンドラ、フォルト・ハンドラ、補正ハンドラのメカニズムを利用せずに、すべてのパラレル・ブランチで現在実行されているすべてのアクティビティを即時終了できます。

注意:

BPEL 2.0プロジェクトでは、このアクティビティのかわりにterminateアクティビティが使用されます。

図A-14は、「Exit」ダイアログを示しています。

図A-14 「Exit」ダイアログ

「図A-14 「Exit」ダイアログ」の説明

exitアクティビティの詳細は、第12.13.2項「BPEL 2.0のexitアクティビティによるビジネス・プロセス・インスタンスの即時終了」を参照してください。

A.2.13 Flowアクティビティ

このアクティビティを使用すると、1つ以上のアクティビティを同時に実行するように指定できます。flowアクティビティは、フロー内のすべてのアクティビティが処理を終了したときに完了します。flowアクティビティが完了しても、許可条件がfalseの場合はスキップされている可能性があります。

たとえば、flowアクティビティを使用して、2つの融資斡旋業者(United LoanサービスおよびStar Loanサービス)をパラレルで起動できるようにするとします。この場合、flowアクティビティには2つのパラレル・アクティビティ(United Loanサービスを起動するシーケンスとStar Loanサービスを起動するシーケンス)が含まれます。各サービスは、任意の時間をかけて融資プロセスを完了できます。

図A-15に、パラレル処理用の2つのパネルを持つ初期flowアクティビティを示します。アクティビティを両方のパネルにドラッグしてパラレル処理を作成します。完了したflowアクティビティは図A-16のようになります。

図A-15 「Flow」ダイアログ(作成時)

「図A-15 「Flow」ダイアログ(作成時)」の説明

図A-16 「Flow」ダイアログ(設計完了後)

「図A-16 「Flow」ダイアログ(設計完了後)」の説明

flowアクティビティ内で、アクティビティの実行を同期することもできます。こうすると、特定のアクティビティを他のアクティビティの完了後にのみ実行することができます。

注意:

OracleのBPEL実装では、個別のスレッドではなく、BPELプロセスの同一で単一の実行スレッドでフローが実行されます。

flowアクティビティの詳細は、第10.2項「パラレル・フローの作成」を参照してください。

A.2.14 FlowNアクティビティ

このアクティビティを使用すると、Nの値に等しい複数のフローを作成できます。この値は、使用可能なデータおよびプロセス内のロジックに基づいて実行時に定義されます。索引変数は、Nの値に到達するまで、新しいブランチが作成されるたびに増分されます。

注意:

このアクティビティは、BPEL 2.0プロジェクトではforEachアクティビティに置き換えられます。

図A-17は、「FlowN」ダイアログを示しています。

図A-17 「FlowN」ダイアログ

「図A-17 「FlowN」ダイアログ」の説明

flowNアクティビティの詳細は、第10.3.1項「BPEL 1.1のflowNアクティビティによるflowアクティビティ数のカスタマイズ」を参照してください。

A.2.15 forEachアクティビティ

このアクティビティを使用すると、アクティビティの複数のセットを順次、または並行して処理できます。forEachアクティビティは、それに含まれている(子)scopeアクティビティを正確にN+1回実行し、Nは、最終カウンタ値から、「For Each」ダイアログの「カウンタの値」タブで指定する開始カウンタ値を引いた値に等しくなります。flowアクティビティなど、他の構造化アクティビティは、含まれているアクティビティとして任意のタイプのアクティビティを使用できますが、forEachアクティビティにはscopeアクティビティのみ使用することができます。

注意:

BPEL 2.0プロジェクトでは、このアクティビティのかわりにflowNアクティビティが使用されます。

図A-18に、内部のscopeを伴うforEachアクティビティを示します。

図A-18 forEachアクティビティ

「図A-18 forEachアクティビティ」の説明

forEachアクティビティの詳細は、第10.3.2項「BPEL 2.0のforEachアクティビティによるアクティビティの複数のセットの処理」を参照してください。

A.2.16 Ifアクティビティ

このアクティビティを使用すると、特定のアクティビティが複数のブランチから処理を判定する条件処理を定義できます。ブランチのセットから、実行するアクティビティが1つだけ選択されます。

注意:

BPEL 2.0プロジェクトでは、このアクティビティのかわりにswitchアクティビティが使用されます。

図A-19に、ifアクティビティと、後続のif、elseif、elseブランチが定義されている例を示します。

図A-19 ifアクティビティ

「図A-19 ifアクティビティ」の説明

ifアクティビティの詳細は、第11.2.2項「BPEL 2.0のifアクティビティの作成による条件分岐の定義」を参照してください。

A.2.17 IMアクティビティ

このアクティビティを使用すると、非同期のインスタント・メッセージ(IM)通知をユーザー、グループまたは宛先アドレスに自動的に送信できます。図A-20は、「IM」ダイアログを示しています。

図A-20 「IM」ダイアログ

「図A-20 「IM」ダイアログ」の説明

詳細は、第17.3.2項「IM通知チャネルの構成方法」を参照してください。

A.2.18 Invokeアクティビティ

このアクティビティを使用すると、サービス(パートナ・リンクで識別)に対して起動する操作を指定できます。操作は、サービスによって指定されたポートでの一方向またはリクエスト/レスポンスです。invokeアクティビティで変数を自動的に作成することも可能です。invokeアクティビティは、同期Webサービスを起動するか、非同期Webサービスを開始します。

invokeアクティビティは、プロセス内でデータを送受信するためのポートをオープンします。このポートを使用して、必要なデータの送信およびレスポンスの受信を行います。同期コールバックの場合、関数の送受信に必要なポートは1つのみです。

invokeアクティビティは、bpelx:inputPropertyおよびbpelx:outputProperty拡張要素をサポートしており、これにより、SOAPヘッダーを介してプロパティを受渡し、有用な情報に関するSOAランタイム・システム・プロパティ(tracking.compositeInstanceIdやtracking.conversationIdなど)を取得します。

図A-21は、BPEL 1.1における「Invoke」ダイアログを示しています。次のタスクを実行できます。

- アクティビティに意味のある名前を付けます。

- 操作を指定するパートナ・リンクを選択します。

- 実行する操作を選択します。

- データ(ペイロード)をトランスポートするための変数を自動的に作成するか、既存の変数を選択します。

図A-21 「Invoke」ダイアログ

「図A-21 「Invoke」ダイアログ」の説明

BPEL 2.0の場合、「Invoke」ダイアログには「ドキュメント」、「ターゲット」および「ソース」タブがあります。invokeアクティビティの詳細は、次を参照してください。

- 第5章「BPELプロセスの相互作用パターンの概要」

- 第6.17項「BPEL 2.0でのWSDLメッセージ・パートのマップ」

- 第7.2.2.3項「リクエストを実行するためのinvokeアクティビティ」

- 第8.2.1.2項「invokeアクティビティの追加」

- 第12.9.2項「非同期相互作用でフォルトを返す方法」

- 第12.14項「アサーション条件によるフォルトのスロー」

A.2.19 Java Embeddingアクティビティ

このアクティビティによって、Java BPELの拡張要素であるbpelx:execを使用してBPELプロセスにカスタムJavaコードを追加できます。この方法は、関数を実行できるJavaコードが存在していて、最初からコーディングしなおすのではなくこの既存のコードを使用する場合に役立ちます。BPEL 2.0プロジェクトでは、bpelx:exec拡張要素とJavaコードが<extensionActivity>要素でラップされます。

図A-22は、BPEL 1.1における「Java Embeddingの編集」ダイアログを示しています。

図A-22 「Java Embeddingの編集」ダイアログ

「図A-22 「Java Embeddingの編集」ダイアログ」の説明

Java Embeddingアクティビティの詳細は、第14章「BPELプロセスへのJavaおよびJava EEコードの組込み」を参照してください。

A.2.20 partner linkアクティビティ

このアクティビティでは、プロセスと連係する外部サービスを定義できます。パートナ・リンク・タイプは、対話において各サービスが果たす役割を定義すること、および対話の中でメッセージを受信するために各サービスが提供するポート・タイプを指定することで、2つのサービス間での対話関係の特性を決定します。たとえば、信用格付けサービスおよび2つの融資斡旋業者サービス(United LoanおよびStar Loan)と対話するプロセスを作成する場合、3つのサービスすべてにパートナ・リンクを作成します。

図A-23は、BPEL 1.1における「パートナ・リンク」ダイアログを示しています。次の詳細を指定します。

- サービスの意味のある名前。

- 外部サービスのWeb Services Description Language(WSDL)ファイル。

- 実際のサービス・タイプ(パートナ・リンク・タイプとして定義)。

- サービスのロール(パートナ・ロールとして定義)。

- サービスをリクエストするプロセスのロール(マイ・ロールとして定義)。

図A-23 「パートナ・リンク」アクティビティ

「図A-23 「パートナ・リンク」アクティビティ」の説明

BPEL 2.0の場合、「パートナ・リンク」ダイアログに「ドキュメント」タブはありません。

パートナ・リンクの詳細は、第8章「BPELプロセスからの非同期Webサービスの起動」を参照してください。

A.2.21 Phaseアクティビティ

このアクティビティは、BPELプロセスと統合するためのOracle Mediatorおよびビジネス・ルール・サービス・コンポーネントを作成します。メッセージ・リクエストの入力変数およびメッセージ・レスポンスの出力変数を作成し、BPELプロセスの変数のコンテンツを評価するビジネス・ルールを設計します。

これらのタスクを完了すると、次のアクティビティとサービス・コンポーネントが作成されます。

- assignアクティビティ: メッセージ・リクエストの入力変数およびメッセージ・レスポンスの出力変数が含まれます。

- invokeアクティビティ: BPELプロセスでOracle Mediatorパートナ・リンクを起動するように自動的に設計されます。

- Oracle Mediatorパートナ・リンク: メッセージ・リクエストの入力変数を、このBPELプロセスが含まれるSOAコンポジット・アプリケーションのビジネス・ルール・サービス・コンポーネントにルーティングするように自動的に設計されます。ビジネス・ルール・サービス・コンポーネントはSOAコンポジット・エディタに表示されます。Oracle Mediatorもサービス・コンポーネントとしてSOAコンポジット・エディタに表示されます。

- ビジネス・ルール・サービス・コンポーネント: メッセージ・リクエストの入力変数のコンテンツを評価し、メッセージ・レスポンスの出力変数の結果をOracle Mediatorに戻します。Oracle Mediatorはルーティングを決定し、メッセージを適切なターゲット宛先にルーティングします。

図A-24は、BPEL 1.1における「Phase」ダイアログを示しています。

図A-24 「Phase」ダイアログ

「図A-24 「Phase」ダイアログ」の説明

BPEL 2.0の場合、「Phase」ダイアログには「ドキュメント」タブがあります。

詳細は、第51章「2レイヤーのビジネス・プロセス管理(BPM)の使用」を参照してください。

A.2.22 Pickアクティビティ

このアクティビティは、イベント・セット内の特定イベントの発生を待機し、そのイベントに関連するアクティビティを実行します。多くの場合、イベントの発生は相互に排他的です(プロセスは承認メッセージと却下メッセージの両方ではなくどちらかを受信します)。複数のイベントが発生した場合、実行するアクティビティは、どちらのイベントが先に発生したかに基づいて選択されます。イベントがほとんど同時に発生した場合は競争になり、実行するアクティビティはタイミングと実装の両方に基づいて選択されます。

pickアクティビティには、OnMessageブランチがあります。BPEL 1.1で「OnMessage」アイコンをクリックすると、図A-25に示すダイアログが表示されます。

図A-25 「OnMessage」ダイアログ

「図A-25 「OnMessage」ダイアログ」の説明

BPEL 2.0の場合、「OnMessage」ダイアログには「ドキュメント」タブがあります。

pickアクティビティの2つのブランチは次のとおりです。

- OnMessage (pickアクティビティ・アイコンの下に自動的に表示されます)
(融資サービスなどから)リプライを受信するためのコードが含まれています。

- OnAlarm (自動的には表示されません。pickアクティビティ・アイコンを選択して「OnAlarmの追加」アイコンをクリックし、手動で追加する必要があります)
タイムアウト(1分後など)のコードが含まれています。

先に完了したブランチが実行されます。もう一方のブランチは実行されません。最初に条件が満たされたブランチが実行されます。

図A-26は、BPEL 1.1でのpickアクティビティの「OnAlarm」ダイアログを示しています。

図A-26 pickアクティビティのonAlarmブランチ

「図A-26 pickアクティビティのonAlarmブランチ」の説明

BPEL 2.0の場合、「OnAlarm」ダイアログには「ドキュメント」タブがあります。

注意:

BPEL 1.1のscopeアクティビティにおけるOnMessageブランチと、BPEL 1.1および2.0のscopeアクティビティにおけるOnAlarmブランチも作成できます。Oracle JDeveloperでscopeアクティビティを開き、左側でアイコンを参照して追加するブランチを検索します。

onMessageブランチに相関を追加する場合は、相関構文がassignアクティビティの構文の後ろに配置されます。相関構文をassignアクティビティの前に移動する必要があります。

assignアクティビティの前に相関構文を配置する手順は次のとおりです。

1. Oracle JDeveloperで相関セットを作成します。

2. この相関セットをonMessageブランチに割り当てます。

3. 残りの設計タスクを完了します。

4. BPELソース・コード内で相関構文をassignアクティビティの前に移動してから、BPELプロセスを作成またはデプロイします。

pickアクティビティの詳細は、次を参照してください。

- 第5章「BPELプロセスの相互作用パターンの概要」

- 第6.17項「BPEL 2.0でのWSDLメッセージ・パートのマップ」

- 第12.14項「アサーション条件によるフォルトのスロー」

- 第15.2項「プロセスの継続または待機を選択するpickアクティビティの作成」

- 第15.6項「永続同期プロセスに対するタイムアウトの設定」

A.2.23 Receiveアクティビティ

このアクティビティでは、情報の受信先となるパートナ・リンクと、起動するパートナ・リンクのポート・タイプおよび操作を指定します。このアクティビティは、サービス(融資申請の承認サービスなど)からの非同期コールバック・レスポンス・メッセージを待機します。待機中のBPELプロセスは、コールバック・メッセージが到着するまでデハイドレーション(圧縮して格納)されます。このレスポンスの内容は、プロセスのレスポンス変数に格納されます。

receiveアクティビティは、bpelx:property拡張機能をサポートし、SOAPヘッダーを介したプロパティの受渡し、および有用な情報に関するSOAランタイム・システム・プロパティ(tracking.compositeInstanceIdやtracking.conversationIdなど)の取得を容易にします。

図A-27は、BPEL 1.1における「Receive」ダイアログを示しています。次のタスクを実行できます。

- 意味のある名前を付けます。

- 操作を指定するパートナ・リンク・サービスを選択します。

- 実行する操作を選択します。

- コールバック・レスポンスをトランスポートするための変数を自動的に作成するか、既存の変数を選択します。

図A-27 「Receive」ダイアログ

「図A-27 「Receive」ダイアログ」の説明

BPEL 2.0の場合、「Receive」ダイアログには「ドキュメント」、「ターゲット」および「ソース」タブがあります。

receiveアクティビティの詳細は、次を参照してください。

- 第5章「BPELプロセスの相互作用パターンの概要」

- 第6.17項「BPEL 2.0でのWSDLメッセージ・パートのマップ」

- 第8.2.1.3項「receiveアクティビティの追加」

- 第12.14項「アサーション条件によるフォルトのスロー」

- 第15.3項「receiveアクティビティのリクエスト/リプライ操作および入力専用操作に対するタイムアウトの設定」

A.2.24 receive signalアクティビティ

このアクティビティは、詳細プロセスではマスター・プロセスからの処理開始の通知シグナルを待機するために使用し、マスター・プロセスではすべての詳細プロセスからの処理の完了を示す通知シグナルを待機するために使用します。

図A-28は、「Receive Signal」編集ダイアログを示しています。

図A-28 「Receive Signal」ダイアログ

「図A-28 「Receive Signal」ダイアログ」の説明

詳細は、第16章「マスター・プロセスと詳細プロセスの調整」を参照してください。

A.2.25 remove entityアクティビティ

このアクティビティを使用すると、エンティティ変数を削除できます。このアクションによって行が削除されます。

注意:

このアクティビティは、BPEL 1.1プロジェクトでのみサポートされます。

図A-29は、「Remove Entity」ダイアログを示しています。

図A-29 「Remove Entity」ダイアログ

「図A-29 「Remove Entity」ダイアログ」の説明

A.2.26 RepeatUntilアクティビティ

アクティビティの本体を1回以上実行する必要がある場合には、このアクティビティを使用します。repeatUntilアクティビティのXPath式の条件は、アクティビティの本文が完了した後に評価されます。条件は、指定したブール条件がtrueになるまで繰返し評価されます(アクティビティの本体も処理されます)。図A-30は、「Repeat Until」ダイアログを示しています。

注意:

このアクティビティは、BPEL 2.0プロジェクトでのみサポートされます。

図A-30 「Repeat Until」ダイアログ

「図A-30 「繰返し期限」ダイアログ」の説明

repeatUntilアクティビティの詳細は、第11.4項「repeatUntilアクティビティによる条件分岐の定義」を参照してください。

A.2.27 Replayアクティビティ

このアクティビティを使用すると、選択した範囲内でアクティビティを再実行することができます。

図A-31は、BPEL 1.1での「Replay」ダイアログを示しています。

図A-31 「Replay」ダイアログ

「図A-31 「Replay」ダイアログ」の説明

BPEL 1.1の場合、「Replay」ダイアログには「ドキュメント」タブ、「ターゲット」タブまたは「ソース」タブがありません。replayアクティビティの詳細は、第12.11項「replayアクティビティによるscopeアクティビティ内でのアクティビティの再実行」を参照してください。

A.2.28 Replyアクティビティ

このアクティビティでは、receiveアクティビティで受信したメッセージに応答するメッセージを送信できます。receiveアクティビティとreplyアクティビティを組み合せると、プロセスのWSDLポート・タイプでのリクエスト/レスポンス操作が形成されます。

図A-32は、BPEL 1.1での「Reply」ダイアログを示しています。

図A-32 「Reply」ダイアログ

「図A-32 「Reply」ダイアログ」の説明

BPEL 2.0の場合、「Reply」ダイアログには「ドキュメント」、「ターゲット」および「ソース」タブがあります。

replyアクティビティの詳細は、次を参照してください。

- 第5章「BPELプロセスの相互作用パターンの概要」

- 第6.17項「BPEL 2.0でのWSDLメッセージ・パートのマップ」

- 第12.9.1項「同期相互作用でフォルトを返す方法」

A.2.29 Rethrowアクティビティ

このアクティビティを使用すると、直接囲んでいるフォルト・ハンドラによって当初取得されたフォルトを再スローできます。

注意:

このアクティビティは、BPEL 2.0プロジェクトでのみサポートされます。

図A-33に、フォルト・ハンドラ(catchアクティビティ)内部のrethrowアクティビティを示します。

図A-33 rethrowアクティビティ

「図A-33 rethrowアクティビティ」の説明

rethrowアクティビティの詳細は、第12.8項「rethrowアクティビティによるフォルトの再スロー」を参照してください。

A.2.30 Scopeアクティビティ

このアクティビティは、独自のローカル変数、フォルト・ハンドラ、補正ハンドラなどを含めることができる、ネストされたアクティビティの集合で構成されます。scopeアクティビティは、プログラミング言語の{ }ブロックに似ています。

各スコープには、その動作を定義するプライマリ・アクティビティがあります。1次アクティビティは、その中に多数のアクティビティが任意の深さにネストされている複雑な構造化アクティビティでもかまいません。スコープは、すべてのネストされたアクティビティによって共有されます。

図A-34は、BPEL 1.1における「Scope」ダイアログを示しています。scopeアクティビティ内に適切なアクティビティを定義します。

図A-34 「Scope」ダイアログ

「図A-34 「Scope」ダイアログ」の説明

BPEL 2.0の場合、「Scope」ダイアログには「ドキュメント」、「ターゲット」および「ソース」タブがあります。

フォルト処理はscopeアクティビティに関連付けられています。その目的は、フォルトが発生したscopeアクティビティの失敗した不完全な処理を元に戻すことです。scopeアクティビティでcatchアクティビティを定義すると、カスタム・フォルト処理アクティビティのセットを作成できます。各catchアクティビティは、特定のタイプのフォルトを捕捉するように定義します。

図A-35に、scopeアクティビティ内の「Catchの追加」アイコンを示します。図A-36は、「Catchの追加」アイコンをクリックすると表示されるcatchアクティビティ領域を示しています。「アクティビティをここにドロップ」という領域に、追加のアクティビティをドラッグし、例外の捕捉と管理を行うフォルト処理ロジックを作成します。

たとえば、顧客は融資の申請の際に信用格付けサービスに社会保障番号を提示します。この番号を使用して信用調査が行われます。信用履歴に問題があることが確認された場合や、社会保障番号が無効であると認識された場合は、catchアクティビティ内のassignアクティビティにより、融資提案が却下されたことが顧客に通知されます。融資申請プロセス全体がterminateアクティビティで終了します。

図A-35 Catchブランチの作成

「図A-35 Catchブランチの作成」の説明

図A-36 Catchアクティビティ・アイコン

「図A-36 Catchアクティビティ・アイコン」の説明

scopeアクティビティおよびフォルト処理の詳細は、次を参照してください。

- 第5章「BPELプロセスの相互作用パターンの概要」

- 第6.17項「BPEL 2.0でのWSDLメッセージ・パートのマップ」

- 第12.10項「scopeアクティビティによるアクティビティ・グループの管理」

A.2.31 Sequenceアクティビティ

このアクティビティを使用すると、順に実行するアクティビティの集合を定義できます。たとえば、次のアクティビティを特定の順序で実行できます。

- receiveアクティビティで顧客リクエストを受信します。

- 同時動作を可能にするflowアクティビティ内でリクエストを処理します。

- replyアクティビティで、リクエストの最終承認ステータスを含むリプライ・メッセージを顧客に戻します。

sequenceアクティビティでは、リクエストを妥当な時間内に処理できると想定しています。この想定により、インボーカが同期レスポンスを待機する必要性が正当化されます(このサービスがリクエスト/レスポンス操作として提供されるため)。

この想定ができない場合は、顧客との相互作用を非同期メッセージ交換のペアとして定義することをお薦めします。

「Sequence」アイコンをダブルクリックすると、図A-37に示すアクティビティ領域が表示されます。sequenceアクティビティ内に適切なアクティビティをドラッグして定義します。

図A-37 sequenceアクティビティ

「図A-37 sequenceアクティビティ」の説明

sequenceアクティビティの詳細は、次を参照してください。

- 第5章「BPELプロセスの相互作用パターンの概要」

- 第10.2項「パラレル・フローの作成」

A.2.32 Signalアクティビティ

このアクティビティは、マスター・プロセスでは実行時に処理を実行するように詳細プロセスに通知するために使用し、詳細プロセスでは処理が完了したことをマスター・プロセスに通知するために使用します。図A-38は、シグナルの編集ダイアログを示しています。

図A-38 「Signal」ダイアログ

「図A-38 「Signal」ダイアログ」の説明

詳細は、第16章「マスター・プロセスと詳細プロセスの調整」を参照してください。

A.2.33 SMSアクティビティ

このアクティビティを使用すると、イベントに関するショート・メッセージ・システム(SMS)通知を送信できます。

図A-39は、BPEL 1.1およびBPEL 2.0における「SMS」ダイアログを示しています。

図A-39 「SMS」ダイアログ

「図A-39 「SMS」ダイアログ」の説明

SMSアクティビティの詳細は、第17.3.3項「SMS通知チャネルの構成方法」を参照してください。

注意:

faxアクティビティおよびpagerアクティビティは、11gではサポートされていません。

A.2.34 Switchアクティビティ

このアクティビティは、caseブランチに定義された1つ以上の条件付きブランチ(オプションでotherwiseブランチが続く)の順序付きリストで構成されます。ブランチは、出現順に考慮されます。条件がtrueである最初のブランチが選択され、switchに対して実行されるアクティビティを提供します。条件付きブランチが選択されない場合は、otherwiseブランチが選択されます。otherwiseブランチが明示的に指定されていない場合は、emptyアクティビティがあるotherwiseブランチが使用可能とみなされます。選択されたブランチのアクティビティが完了すると、switchアクティビティは完了します。

switchアクティビティは、flowアクティビティとは機能的に異なります。たとえば、flowアクティビティを使用すると、1つのプロセスで2つの融資提案を同時に収集できますが、それぞれの値は比較されません。2つの提案の値を比較して決定を下すには、switchアクティビティを使用します。定義された条件(caseブランチ内)が満たされると、最初のブランチが実行されます。条件が満たされない場合はotherwiseブランチが実行されます。

注意:

このアクティビティは、BPEL 2.0プロジェクトではifアクティビティに置き換えられます。

図A-40に、次のブランチが定義されたswitchアクティビティを示します。

図A-40 switchアクティビティ

「図A-40 switchアクティビティ」の説明

switchアクティビティの詳細は、次を参照してください。

- 第5章「BPELプロセスの相互作用パターンの概要」

- 第11.2.1項「BPEL 1.1のswitchアクティビティの作成による条件分岐の定義」

A.2.35 Terminateアクティビティ

このアクティビティでは、アクティビティのタスク(たとえば、catchブランチのフォルト処理タスク)を終了できます。たとえば、顧客の信用履歴に問題があることが確認された場合や、社会保障番号が無効であると認識された場合は、融資申請プロセスが終了し、顧客の融資申請の申込書は融資サービス業者に提出されません。

注意:

このアクティビティは、BPEL 2.0プロジェクトではexitアクティビティに置き換えられます。

図A-41に、switchアクティビティのotherwiseブランチにある複数のterminateアクティビティを示します。

図A-41 terminateアクティビティ

「図A-41 terminateアクティビティ」の説明

terminateアクティビティの詳細は、第12.13.1項「BPEL 1.1のterminateアクティビティによるビジネス・プロセス・インスタンスの停止」を参照してください。

A.2.36 Throwアクティビティ

このアクティビティは、ビジネス・プロセス内からフォルトを生成します。

図A-42は、BPEL 1.1の「Throw」ダイアログを示しています。

図A-42 「Throw」ダイアログ

「図A-42 「Throw」ダイアログ」の説明

BPEL 2.0の場合、「Throw」ダイアログには「ドキュメント」、「ターゲット」および「ソース」タブがあります。

throwアクティビティの詳細は、第12.7項「throwアクティビティによる内部フォルトのスロー」を参照してください。

A.2.37 Transformアクティビティ

このアクティビティを使用すると、ソース要素をターゲット要素にマップ(たとえば、受信した注文書データを送信する注文確認書データにマップ)するトランスフォーメーションを作成できます。

図A-43は、BPEL 1.1における「Transform」ダイアログを示しています。このダイアログでは、次のタスクを実行できます。

- マップするソースおよびターゲットの変数とパートを定義します。

- トランスフォーメーション・マッパー・ファイルを指定します。

- 「マッパー・ファイル」フィールドの右側にある2番目のアイコン(「追加」アイコン)をクリックして、XSLTマッパーにアクセスします。XSLTマッパーで、新規のXSLファイルを作成し、ソース要素とターゲット要素をグラフィカルにマッピングします。既存のXSLファイルを編集する場合は、「編集」アイコン(3番目のアイコン)をクリックします。

図A-43 「Transform」ダイアログ

「図A-43 「Transform」ダイアログ」の説明

BPEL 2.0の場合、「Transform」ダイアログには「ドキュメント」、「ターゲット」および「ソース」タブがあります。

transformアクティビティの詳細は、第40章「XSLTマッパーを使用したトランスフォーメーションの作成」を参照してください。

A.2.38 user notificationアクティビティ

このアクティビティを使用すると、設計時に通知チャネルを明示的に選択せずに、通知を送信する必要性のみを示すBPELプロセスを設計できます。通知の送信に使用するチャネルは、Oracle User Messaging Serviceのユーザー・メッセージング・プリファレンス・ユーザー・インタフェースでエンド・ユーザーが定義したプリファレンスに基づいて、実行時に決定されます。したがって、通知チャネルの選択権は、Oracle BPELデザイナからエンド・ユーザーに移動します。エンド・ユーザーが優先チャネルまたはルールを選択していない場合、そのユーザーへの通知の送信には、デフォルトで電子メールが使用されます。図A-44に詳細を示します。

図A-44 「User Notification」ダイアログ

「図A-44 「User Notification」ダイアログ」の説明

詳細は、第17.4項「エンド・ユーザーによる通知チャネル選択の許可」を参照してください。

A.2.39 Validateアクティビティ

このアクティビティを使用すると、リストの変数を検証できます。変数は、XMLスキーマと照合して検証されます。

図A-45は、BPEL 1.1における「Validate」ダイアログを示しています。

図A-45 「Validate」ダイアログ

「図A-45 「Validate」ダイアログ」の説明

BPEL 2.0の場合、「Validate」ダイアログには「ドキュメント」、「ターゲット」および「ソース」タブがあります。

validateアクティビティの詳細は、第6.15項「XMLデータの検証」を参照してください。

A.2.40 Voiceアクティビティ

このアクティビティを使用すると、イベントに関する電話ボイス通知を送信できます。

図A-46は、「Voice」ダイアログを示しています。

図A-46 「Voice」ダイアログ

「図A-46 「Voice」ダイアログ」の説明

voiceアクティビティの詳細は、第17.3.4項「ボイス通知チャネルの構成方法」を参照してください。

A.2.41 Waitアクティビティ

このアクティビティでは、一定期間内、または特定の期限に達するまでの遅延を指定できます。このアクティビティの典型的な用途は、一定の時間に操作を起動することです。このアクティビティを使用すると、指定された期間、または指定された時刻まで待機できます。有効期限条件を1つのみ指定する必要があります。

図A-47は、BPEL 1.1での「Wait」ダイアログを示しています。

図A-47 「Wait」ダイアログ

「図A-47 「Wait」ダイアログ」の説明

BPEL 2.0の場合、「Wait」ダイアログには「ドキュメント」、「ターゲット」および「ソース」タブがあります。

waitアクティビティの詳細は、第15.4項「有効期限を設定するwaitアクティビティの作成」を参照してください。

A.2.42 Whileアクティビティ

このアクティビティは、指定された反復アクティビティの繰返し実行をサポートします。反復アクティビティは、特定のwhile条件がtrueでなくなるまで繰り返されます。

図A-48は、BPEL 1.1における「While」ダイアログを示しています。このダイアログで式を入力できます。

図A-48 「While」ダイアログ

「図A-48 「While」ダイアログ」の説明

BPEL 2.0の場合、「While」ダイアログには「ドキュメント」、「ターゲット」および「ソース」タブがあります。

whileアクティビティの詳細は、第11.3項「whileアクティビティによる条件分岐の定義」を参照してください。

A.3 BPELサービスの概要

BPELプロセスは、Webサービス、Oracle ADFのビジネス・コンポーネント(BC)サービス、JCAアダプタ、Oracle B2Bサービス、Oracle Healthcareサービス、Oracle Business Activity Monitoring、HTTPバインディング、ダイレクト・バインディング、EJBサービス、Oracle E-Business Suite、およびパートナ・リンクを通じてWebベースのアプリケーションおよびクライアントと通信できます。

BPELサービスにアクセスする手順は、次のとおりです。

1. Oracle BPELデザイナの「コンポーネント・パレット」で、「BPELサービス」を開いてサービスを表示します。

2. サービスを適切なスイムレーンにドラッグ・アンド・ドロップします。表A-2に使用可能なサービスをリストし、これらのサービスについて説明されているドキュメントを参照先として示します。

表A-2 BPELサービス

BPELサービス

詳細の参照先

ADF-BCサービス

第37.1.8項「ADF-BCサービス」

AQアダプタ

- 第37.1.3.1項「AQアダプタ」

- 『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』

Oracle B2B

- 第37.1.6項「Oracle B2B」

- 『Oracle Fusion Middleware Oracle B2Bユーザーズ・ガイド』

Oracle Business Activity Monitoring(BAM)

- 第37.1.5項「Oracle BAMアダプタ」

- 第X部「Oracle Business Activity Monitoringの使用」

- 『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』

データベース・アダプタ

- 第37.1.3.2項「データベース・アダプタ」

- 『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』

直接バインディング・サービス

- 第37.1.10項「直接バインディング・サービス」

- 第39章「直接バインディング起動APIの使用」

- Oracle Fusion Middleware Oracle SOA Suiteインフラストラクチャ管理Java APIリファレンス

EJBサービス

- 第37.1.9項「EJBサービス」

- 第38章「Enterprise JavaBeansとSOAコンポジット・アプリケーションの統合」

ファイル・アダプタ

- 第37.1.3.3項「ファイル・アダプタ」

- 『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』

FTPアダプタ

- 第37.1.3.4項「FTPアダプタ」

- 『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』

Oracle User Messaging Service

- 第37.1.3.9項「Oracle User Messaging Serviceアダプタ」

- 『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』

Healthcareアダプタ

- 第37.1.7項「Oracle Healthcare Adapter」

- Oracle Fusion Middleware Oracle SOA Suite Healthcare Integrationユーザーズ・ガイド

HTTPバインディング

第37.1.2項「HTTPバインディング・サービス」

JMSアダプタ

- 第37.1.3.5項「JMSアダプタ」

- 『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』

MQアダプタ

- 第37.1.3.6項「MQアダプタ」

- 『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』

Oracle Applicationアダプタ

- 第37.1.4項「Oracle Applicationsアダプタ」

- 『Oracle Fusion Middleware Adapter for Oracle Applicationsユーザーズ・ガイド』

ソケット・アダプタ

- 第37.1.3.7項「ソケット・アダプタ」

- 『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』

サード・パーティ・アダプタ

- 第37.1.3.8項「サード・パーティ・アダプタ」

- 『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』

Webサービス

- 第2.3項「サービス・バインディング・コンポーネントの追加」

- 第37.1.1項「Webサービス」

A.4 Oracle Service Registryの公開および参照

Oracle Service Registry(OSR)では、Webサービスを公開したり、Webサービスの情報を検出するための共通の標準が提供されます。この項では、個別にインストールしたOracle SOA Suite環境に対してOSRを構成する方法について説明します。

Oracle SOA Suiteでは、次のバージョンのOSRを使用できます。

- OSR 11g

- OSR 10.3(Oracle WebLogic Server 10.3で使用)

- OSR 10.1.3

OSRの詳細は、次のURLを参照してください。

http://www.oracle.com/technetwork/middleware/registry/overview/index.html

注意:

- この項では、Oracle JDeveloperに組み込まれたOracle WebLogic Serverに対してOSRを構成する方法については説明しません。

- OSR 10.3は、バージョン10.3.0.0のOracle WebLogic Serverにデプロイされます。

- OSR 10.3は、バージョン10.3.1.0のOracle WebLogic Serverをサポートしていません。

A.4.1 ビジネス・サービスの公開方法

この項では、ビジネス・サービスの公開方法の概要を説明します。手順の詳細は、次のURLにあるドキュメントを参照してください。

http://www.oracle.com/technetwork/middleware/registry/overview/index.html

レジストリ・ドキュメントリンクをクリックしてドキュメントにアクセスすることもできます。

ビジネス・サービスを公開する手順は、次のとおりです。

1. レジストリ・コントロールに移動します:

http://hostname:port/registry/uddi/web

2. 「パブリッシュ」→「WSDL」の順にクリックします。

3. プロンプトが表示された時点でログインします。

4. アクセス・ポイントのURLを指定してビジネス・サービスのWSDLを公開するために、このページの各フィールドを完了します。

注意:

エンドポイントの場所を後で変更した場合は、レジストリ・コントロールでWSDLの場所も更新する必要があります。そうしないと、実行時にUDDIの起動に失敗します。A.4.4.1項「レジストリ・コントロールにおけるエンドポイントの場所の変更」を参照してください。

A.4.2 レジストリへの接続の作成方法

レジストリへの接続を作成する手順は、次のとおりです。

1. Oracle JDeveloperに移動します。

2. 「ファイル」→「新規」→「接続」→「UDDIレジストリ接続」の順に選択して、UDDI接続を作成します。

3. 接続名を入力します。

4. 照会エンドポイントURLを入力します。例:

http://myhost.us.example.com:7001/registry/uddi/inquiry

5. 「ビジネス・ビュー」ボタンが必ず選択されているようにします。

6. 「次へ」をクリックします。

7. 「接続のテスト」をクリックします。

8. 成功した場合は、「終了」をクリックします。成功しなかった場合は、「戻る」ボタンをクリックし、エラーを修正します。

A.4.3 SOAプロジェクトを構成してレジストリからサービスを起動する方法

SOAプロジェクトを構成してレジストリからサービスを起動する手順は、次のとおりです。

1. ビジネス・サービスへの参照を作成するSOAプロジェクトを開きます。

2. 「Webサービス」アイコンを「外部参照」スイムレーンにドラッグします。
「Webサービスの作成」ダイアログが表示されます。

3. 「WSDL URL」フィールドの右側にあるアイコンをクリックし、WSDLを選択します。

4. 上部のリストから「リソース・パレット」を選択します。

5. ナビゲーション・ツリーを開きます。

6. 「UDDIレジストリ」→「ビジネス・サービス」の順に開きます。

7. 公開したビジネス・サービスを選択して、「OK」をクリックします。図A-49に詳細を示します。

図A-49 ビジネス・サービス

「図A-49 ビジネス・サービス」の説明

「UDDIデプロイメント・オプション」ダイアログが表示されます。

8. 次のいずれかのデプロイメント・オプションを選択します。

- 実行時にSOAPエンドポイントの場所を動的に解決します

- 実行時に具体WSDLの場所を動的に解決します

図A-50に詳細を示します。

図A-50 「UDDIデプロイメント・オプション」ダイアログ

「図A-50 「UDDIデプロイメント・オプション」ダイアログ」の説明

9. 「OK」をクリックします。
「Webサービスの作成」ダイアログが再び表示されます。

10. 「UDDIデプロイメント・オプション」ダイアログでの選択内容に応じて、次の項を参照してください。

- A.4.3.1項「SOAPエンドポイントの場所の動的解決」

- A.4.3.2項「WSDLエンドポイントの場所の動的解決」

A.4.3.1 SOAPエンドポイントの場所の動的解決

SOAPエンドポイントの場所を動的に解決する手順は、次のとおりです。

1. 「Webサービスの作成」ダイアログの残りのフィールドを完成し、「OK」をクリックします。
図A-51に示すように、「Webサービスの作成」ダイアログが表示されます。

図A-51 「Webサービスの作成」ダイアログ - SOAPエンドポイントの場所

「図A-51 「Webサービスの作成」ダイアログ - SOAPエンドポイントの場所」の説明

2. 適切なサービス・コンポーネントを使用して参照に接続します。

3. SOAコンポジット・エディタで「ソース」をクリックします。
composite.xmlファイルにserviceKeyが表示されます。このプロパティによって、実行時にエンドポイント・バインディングの場所が動的に解決されます。

<property name="oracle.soa.uddi.servicekey" type="xs:string" many="false">uddi:
d3611b59-1c79-478e-9ae5-874007eb20c4">

4. 必要な場合は、「プロパティ・インスペクタ」でoracle.soa.uddi.servicekeyプロパティを明示的に追加して、SOAPエンドポイントの場所を解決することもできます。この操作によって、Webサービスの外部参照について、実行時にSOAPエンドポイントの場所が動的に解決されます。図A-52に詳細を示します。

1. 「外部参照」スイムレーンの参照バインディング・コンポーネントをハイライト表示します。

2. 「プロパティ・インスペクタ」で「プロパティ」セクションを開きます。

3. 「追加」アイコンをクリックします。

4. 「名前」リストに、oracle.soa.uddi.servicekeyと入力します。

5. 「値」フィールドに、composite.xmlファイルのoracle.soa.uddi.servicekeyの値を指定します。

図A-52 serviceKeyプロパティ

「図A-52 serviceKeyプロパティ」の説明

A.4.3.2 WSDLエンドポイントの場所の動的解決

WSDLエンドポイントの場所を動的に解決する手順は、次のとおりです。

1. 「Webサービスの作成」ダイアログの残りのフィールドを完成し、「OK」をクリックします。
図A-53に示すように、「Webサービスの作成」ダイアログが表示されます。

図A-53 「Webサービスの作成」ダイアログ - WSDLエンドポイントの場所

「図A-53 「Webサービスの作成」ダイアログ - WSDLエンドポイントの場所」の説明

2. 適切なサービス・コンポーネントを使用して参照に接続します。

3. SOAコンポジット・エディタで「ソース」をクリックします。
composite.xmlファイルに、WSDLの場所が具体的なURL(HTTP URLなど)ではなく、orauddi:/uddi_service_keyの抽象的なURLであることが示されます。orauddiプロトコルによって、実行時にWSDLの場所が動的に解決されます。

<location="orauddi:/uddi:d3689250-6ff5-11de-af2b-76279200af27">

A.4.3.3 エンドポイントの解決

Oracle SOA Suiteは、エンドポイントを解決するためにサービスを呼び出します。例と説明は、表A-3を参照してください。

表A-3 エンドポイントの解決

エンドポイントの解決

説明

例

正規化されたメッセージUDDI serviceKey

OSR UDDI serviceKeyは、Oracle MediatorまたはOracle BPEL Process Managerのassignアクティビティ(serviceKey)内で、正規化されたメッセージのプロパティに指定されます。

たとえば、Oracle Mediatorでは次のようになります。

<copy target="$out.property.oracle.soa.uddi.serviceKey"
value="uddi:10a55fa0-99e8-11df-9edf-7d5e3ef09eda"/>

正規化されたメッセージendpointURI

正規化されたメッセージendpointURIプロパティは、Oracle MediatorまたはOracle BPEL Process Managerのassignアクティビティ(endpointURI)内で指定されます。

たとえば、Oracle Mediatorでは次のようになります。

<copy target="$out.property.endpointURI"
value="http://hostname:8001/soa-infra/services
/partition/Project/endpoint_ep"/>

composite.xml UDDI serviceKey

OSR UDDI serviceKeyプロパティ(oracle.soa.uddi.serviceKey)は、composite.xmlのバインディング・コンポーネント・セクションで指定されます。

注意: これは、Oracle Enterprise Manager Fusion Middleware Controlで上書きできます。

<binding.ws
port="http://xmlns.oracle.com/UDDIPublishApplication
/Proj/BPELProcess1#wsdl.endpoint(bpelprocess1_client
_ep/BPELProcess1_pt)"
. . .>
<property name="oracle.soa.uddi.serviceKey"
type="xs:string"
many="false">uddi:31040650-9ce7-11df-9ee1-7d5e3e
f09eda</property>
</binding.ws>

composite.xml endpointURI

endpointURIプロパティは、composite.xmlのバインディング・コンポーネント・セクションで指定されます。

注意: これは、Oracle Enterprise Manager Fusion Middleware Controlで上書きできます。

<binding.ws
port="http://xmlns.oracle.com/UDDIPublishApplica
tion/Project/BPELProcess1#wsdl.endpoint(bpelproc
ess1_client_ep/BPELProcess1_pt)"
. . . >
<property name="oracle.soa.uddi.endpointURI"
value="http://hostname:8001/soa-infra/services/
Partition/Project/bpelprocess1_client_ep"</property>
</binding.ws>

composite.xml具体WSDLのエンドポイントの場所

エンドポイントの場所は、composite.xmlのバインディング・コンポーネント・セクションの具体WSDLで指定されます。

<binding.ws
port="http://xmlns.oracle.com/UDDIPublishApplication
/Project/BPELProcess1#wsdl.endpoint(bpelprocess1_
client_ep/BPELProcess1_pt)"
location="http://hostname:8001/soa-infra/services
/Partition/Project/bpelprocess1_client_ep?wsdl"
soapVersion="1.1">

エンドポイントを解決するときのフェイルオーバー・シナリオは次のとおりです。

- 正規化されたメッセージUDDI serviceKey

- エンドポイント・アクセスでエラー

- サーバー・エラーをログに記録する

- ユーザーにエラーを返す

- 正規化されたメッセージendpointURI

- エンドポイント・アクセスでエラー

- サーバー・エラーをログに記録する

- ユーザーにエラーを返す

- composite.xml UDDI serviceKey

- OSR接続でエラー

- サーバー・エラーをログに記録する

- コーディングされている場合は、composite.xml endpointURIを使用する

- それ以外の場合、ユーザーにエラーを返す

- 接続で無効なserviceKeyのエラー

- サーバー・エラーをログに記録する

- コーディングされている場合は、composite.xml endpointURIを使用する

- それ以外の場合、ユーザーにエラーを返す

- エンドポイント・アクセスでエラー

- 警告エラーをログに記録する

- 存在する場合は、2つ目(または3つ目)のバインディング・テンプレートを使用する

- それ以外の場合は、composite.xml endpointURIにフェイルオーバーする

- composite.xml endpointURI

- エンドポイント・アクセスでエラー

- 警告エラーをログに記録する

- composite.xml具体WSDLのエンドポイントの場所にフェイルオーバーする

- composite.xml具体WSDLのエンドポイントの場所

- エンドポイント・アクセスでエラー

- サーバー・エラーをログに記録する

- ユーザーにエラーを返す

A.4.4 ランタイムの照会URL、UDDIサービス・キーおよびエンドポイント・アドレスの構成方法

照会URL、UDDIサービス・キーおよびエンドポイント・アドレスは、実行時にOracle Enterprise Manager Fusion Middleware Controlで設定できます。

ランタイムの照会URL、UDDIサービス・キーおよびエンドポイント参照を構成する手順は、次のとおりです。

1. Oracle Enterprise Manager Fusion Middleware Controlにログインします。

2. 次のプロパティに値を指定します。

- 「SOAインフラストラクチャの共通プロパティ」ページで、「UDDIレジストリ接続の作成」ウィザードで指定したUDDI照会URLを指定します。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のSOAインフラストラクチャのプロパティの構成に関する項を参照してください。

- 参照バインディング・コンポーネントの「プロパティ」ページでは、設計時に作成したエンドポイント参照およびサービス・キーの値を変更できます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のサービス・バインディング・コンポーネントおよび参照バインディング・コンポーネントのプロパティの構成に関する項を参照してください。

3. SOAインフラストラクチャを再起動します。

4. Oracle Enterprise Manager Fusion Middleware Controlを終了します。

5. エンドポイントの統計を表示するために、レジストリ・コントロールに戻ります。

6. 「管理」ページに移動し、キャッシュされていない場合(最初)の起動数の増加を確認します。
デフォルトでは、実行時にWSDL URLのキャッシュが発生します。orauddiプロトコルを使用してWSDL URLが解決された場合、後続の起動では、WSDL URLはOSRからではなくキャッシュから取得されます。キャッシュから取得したエンドポイントのWSDLにアクセスできない場合は、キャッシュがリフレッシュされて、新規エンドポイントのWSDLの場所を取得するためにOSRに接続されます。Oracle Enterprise Manager Fusion Middleware Controlで不要になりSOAインフラストラクチャで使用されないサービスは、アンデプロイすることをお薦めします。停止またはリタイア状態の(アンデプロイしていない)エンドポイント・サービスには引き続きアクセスできます。したがって、キャッシュはリフレッシュされません。

ビジネス・サービスWSDLをあるホストから別のホストに移動する場合は、必ずレジストリ・コントロールで場所を変更してください。Oracle JDeveloperまたはOracle Enterprise Manager Fusion Middleware Controlでの変更は不要です。

必要に応じて、サービス・キーによる照会のためにWSDL URLをキャッシュで使用できる時間を増加できます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のサービス・バインディング・コンポーネントおよび参照バインディング・コンポーネントのプロパティの構成に関する項を参照してください。

注意:

11gでは、キャッシュは自動的に発生します。Oracle SOA Suite 10.1.3を使用している場合は、bpel.xmlでCacheRegistryWSDLプロパティをtrueに設定することでキャッシュがサポートされます。このプロパティをfalseに設定すると、キャッシュは無効になります。

A.4.4.1 レジストリ・コントロールにおけるエンドポイントの場所の変更

レジストリ・コントロールには、エンドポイントの場所を変更するオプションがあります。これは2ステップのプロセスです。次の手順で概要を示します。詳細は、Oracle Service Registryのドキュメントを参照してください。

http://www.oracle.com/technetwork/middleware/registry/overview/index.html

WSDLバインディングを更新する手順は、次のとおりです。

1. レジストリ・コントロールにログインします。

2. 「検索」→「ビジネス」をクリックします。

3. 「追加」→「名前」をクリックします。

4. 「名前」フィールドで、検索基準を入力します。

5. 「検索」をクリックします。

6. 検索結果で、表示されたビジネス名をクリックします。

7. 右側で「サービス」タブをクリックします。

8. サービスのリストで、サービス名をクリックします。

9. 下部で「編集」ボタンをクリックします。

10. 右側で「バインド」タブをクリックします。

11. バインディングのリストで、説明列の隣にあるメモ帳アイコンを選択します。
Oracle Service Registryが、バインディングの編集モードになります。

12. 「アクセス・ポイント」フィールドで必要なURLを変更し、変更内容を保存します。図A-54に詳細を示します。

図A-54 サービスとバインディングの変更

「図A-54 サービスとバインディングの変更」の説明

WSDLバインディングのサマリー・ドキュメントを更新する手順は、次のとおりです。

1. レジストリ・コントロールで、「検索」をクリックします。

2. 「tModel名」フィールドに名前を入力し、「tModelの検索」をクリックします。

3. 「名前」列で、「wsdl:type representing portType」という説明の付いた名前をクリックします。

4. WSDLの詳細が正しく表示されていることを確認します。

5. 「編集」ボタンをクリックします。

6. 右側で「サマリー・ドキュメント」タブをクリックします。

7. 「説明の追加」ボタンの下で、「編集」アイコンをクリックします。

8. 新しいURLをクリックします。

9. 「更新」をクリックし、変更内容を保存します。図A-55に詳細を示します。

図A-55 WSDL URLの検証

「図A-55 WSDL URLの検証」の説明

10. 検証を行うには、サービスにナビゲートし、WSDLのURLが新しい場所を指していることを確認します。

A.4.4.2 複数のSOAパーティションからのWSDLの発行

次の手順に従って、レジストリ・コントロールを使用して複数のSOAパーティションからWSDLを発行し、個別のserviceKeyとバインディングを使用してそれらにアクセスします。

複数のSOAパーティションからWSDLを発行する手順は、次のとおりです。

1. レジストリ・コントロールにログインします。

http://host:port/registry/uddi/web

2. 最初のパーティションからWSDLを発行します。

3. 2番目のパーティションからWSDLを発行します。

1. 「パブリッシュ」→「WSDL」の順にクリックします。

2. 「ビジネス・キー」フィールドと「WSDLの場所(URI)」フィールドに値を入力します。

3. 「拡張モード」チェック・ボックスを選択します。

4. 「公開」をクリックします。

5. 左ペインのナビゲーション・ツリーで、エンドポイント、バインディング、ポート・タイプを選択し、「"新規"モード」オプションが選択されていることを確認します。図A-56に詳細を示します。

図A-56 拡張モード

「図A-56 拡張モード」の説明

6. 「公開」をクリックします。

A.4.5 複数のパーティションでUDDIにWSDLを発行する方法

Oracle Enterprise Manager Fusion Middleware ControlからWSDLサービスを発行する際には、次の制限があります。

- 異なるSOAパーティションから、または異なるホストから同じターゲット・ネームスペースで同じサービスを発行することはできません。

- 独自のサービス・キーを入力するオプションはありません。

かわりに、レジストリ・コンソールを使用して、異なるパーティションにデプロイされている同じWSDLサービスをOSRに発行します。

複数のパーティションのUDDIにWSDLを発行する手順は、次のとおりです。

1. レジストリ・コンソールにログインします。

2. 最初のパーティションのWSDLを発行します。

3. 前述のサービス名を一意の名前に変更します。

4. 2番目のパーティションのWSDLを発行します。
これで2つのサービスがOSRに作成されます。

A.5 Oracle Enterprise Repositoryによる設計時ガバナンスの提供

Oracle Enterprise Repositoryは、サービスのライフ・サイクル、記憶域の配信機能、およびコンポジット、サービス、ビジネス・プロセスのメタデータや他のIT関連アセットの管理をサポートする際に設計時ガバナンスを提供します。

Oracle Enterprise Repositoryは、Oracle SOA Suite情報の中核的なソースとして機能し、サービスのライフ・サイクルにおけるすべての参加者に対して、計画済サービス、既存のサービスおよびリタイア状態のサービスに対応した人間中心の検出環境を提供します。

また、Oracle Enterprise Repositoryには、記述対象となるアセットのアーティファクト・ストアへのロール・ベースのリンク、および設計ドキュメント、承認ドキュメント、テスト・プラン、サポート・プラン、ポリシーおよびその他の形式のドキュメントへのリンクが用意されています。

Oracle JDeveloperなどの統合開発環境(IDE)からは、次のタスクを実行できます。

- Oracle SOA Suiteプロジェクトのアーティファクト(BPEL、WSDL、XSD、XSLTのファイルやファイル・ディレクトリなど)の収集。アーティファクトを収集すると、Oracle Enterprise Repositoryによって、アセットの作成、アセット・メタデータの移入、およびアーティファクト・ファイルの情報に基づいたリレーション・リンクの生成が自動的に実行されます。

- Oracle Enterprise Repositoryの使用可能なアーティファクトの参照。

- アセット詳細(説明、使用履歴、削減予測、関連など)の表示。

- プロジェクトへのアセットのアーティファクト(ペイロード)のダウンロード。通常、アセット・ペイロードは、サービス(WSDLファイルなど)を使用したり、サービスをコード・ベース(バイナリやBPELファイルなど)に組み込む際に必要な機能です。

- Oracle Enterprise RepositoryのWSDLファイルやサービスの使用。

これらのタスクの詳細およびIDEでOracle Enterprise Repositoryを構成して使用する方法については、Oracle Fusion Middleware Oracle Enterprise Repository統合ガイドを参照してください。

Oracle JDeveloperからのアーティファクトの収集の詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

A.6 プロセス・ダイアグラムのロード時の検証

scopeやassignなどのアクティビティを初めて作成して開くと、無効な設定を示すアイコン(感嘆符が付いた黄色い三角形)が表示されることがあります。設定が無効なのは、まだ詳細を入力していないためです。現在のプロジェクトでこのオプションをオフにするには、次の手順を実行します。

プロセス・ダイアグラムの検証を無効化する手順は、次のとおりです。

1. BPELダイアグラムを右クリックし、「表示」→「ダイアグラム・プロパティ」の順に選択します。

2. 「自動検証の有効化」オプションの選択を解除します。

3. 「OK」をクリックします。

4. 「ファイル」メイン・メニューから「すべて保存」を選択します。

B XPath拡張関数

この付録では、Oracle SOA Suite、Oracle BPEL Process Manager、Oracle Mediatorおよびヒューマン・ワークフロー用のXPath拡張関数について説明します。また、より高度なXPath関数、Oracle JDeveloperにおける式ビルダーでのXPath式の作成方法およびユーザー定義XPath拡張関数の作成方法についても説明します。Oracleには、新しい関数を追加するためにOracle SOA SuiteおよびXPath標準に組み込まれた機能を使用する、XPath関数が用意されています。

項目は次のとおりです。

- B.1項「SOA XPath拡張関数」

- B.2項「BPEL XPath拡張関数」

- B.3項「Oracle Mediator XPath拡張関数」

- B.4項「拡張関数」

- B.5項「ワークフロー・サービス関数」

- B.6項「Oracle JDeveloperにおける式ビルダーでのXPath式の構築」

- B.7項「ユーザー定義XPath拡張関数の作成」

XPath関数の詳細は、次のURLを参照してください。

http://www.w3.org

B.1 SOA XPath拡張関数

この項では、次のタイプのSOA XPath拡張関数について説明します。

- データベース関数

- 日付関数

- 算術関数

- 文字列関数

B.1.1 データベース関数

この項では、次のデータベース関数について説明します。

B.1.1.1 lookup-table

この関数は、パラメータから生成されたSQL問合せに基づいて文字列を返します。

文字列は、次の問合せを実行することによって取得されます。

SELECT outputColumn FROM table WHERE inputColumn = key

それを、JDBC接続文字列(jdbc:oracle:thin:username/password@host:port:sid)、またはデータソースJNDI識別子のいずれかのデータソースに対して実行します。JDBC接続文字列を使用する場合は、Oracle Thinドライバのみがサポートされます。

例:

oraext:lookup-table('employee','id','1234','last_name','jdbc:oracle:thin:xyz/xyz@localhost:1521:ORCL')

シグネチャ:

oraext:lookup-table(table, inputColumn, key, outputColumn, data source)

引数:

- table: - データの抽出元の表。

- inputColumn: 表内の列。

- key: 入力列のキーの値。

- outputColumn: データを出力する列。

- data source: データのソース。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.1.1.2 query-database

この関数は、指定されたデータベースに対してSQL問合せを実行して、ノードセットを返します。

シグネチャ:

oraext:query-database(sqlquery as string, rowset as boolean, row as boolean, data source as string)

引数:

- sqlquery: 実行するSQL問合せ。

- rowset: 行を要素で囲むかどうかを指定します。

- row: 各行を要素で囲むかどうかを指定します。

- data source: データベースのJDBC接続文字列(jdbc:oracle:thin:username/password@host:port:sid)またはJNDI名。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.1.1.3 sequence-next-val

この関数は、Oracleの順序の次の値を返します。

次の値は、次の問合せを実行することによって取得されます。

SELECT sequence.nextval FROM dual

それを、JDBC接続文字列(jdbc:oracle:thin:username/password@host:port:sid)、またはデータソースJNDI識別子のいずれかのデータソースに対して実行します。JDBC接続文字列を使用する場合は、Oracle Thinドライバのみがサポートされます。

例:

oraext:sequence-next-val('employee_id_sequence','jdbc:oracle:thin:xyz/xyz@localhost:1521:ORCL')

シグネチャ:

oraext:sequence-next-val(sequence as string, data source as string)

引数:

- sequence: データベース内の順序番号。

- data source: JDBC接続文字列またはデータソースJNDI識別子。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.1.2 日付関数

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

B.1.2.1 add-dayTimeDuration-to-dateTime

この関数は、指定された期間にdateTimeを加算した新しい日時の値を返します。

期間の値が負の場合、返される値はdateTimeより前の日時になります。

シグネチャ:

xpath20:add-dayTimeDuration-from-dateTime(dateTime as string, duration as string)

引数:

- dateTime as string: 期間を加算するdateTime(文字列書式)。

- duration as string: dateTimeに加算する期間、または期間が負の場合は減算する期間(文字列書式)。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.2.2 current-date

この関数は、現在の日付をISO書式YYYY-MM-DDで返します。

シグネチャ:

xpath20:current-date(object)

引数:

- Object: 標準書式の時間。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.2.3 current-dateTime

この関数は、現在の日時の値をCCYY-MM-DDThh:mm:ss.sTZDのISO書式(sはミリ秒単位の時間を示す)で返します。

たとえば、時間が、タイムゾーンzの2004年5月12日の午後(PM)の6時17分15秒125ミリ秒である場合、current-dateTimeは次の値を返します。

2004-05-12T18:17:15.125Z

setDomainEnvファイルでcom.oracle.soa.xpath.datetimeWithoutMillisがtrueに設定されている場合、この関数によって次の書式で現在の日時の値が返されます(ssは秒単位の時間を示します)。

CCYY-MM-DDThh:mm:ss.TZD

秒単位で日時の値を表示する手順は、次のとおりです。

1. 次のファイルを開きます。

- UNIXオペレーティング・システムでは、$MIDDLEWARE_HOME/user_projects/domains/domain_name/bin/setDomainEnv.shを開きます。

- Windowsオペレーティング・システムでは、MIDDLEWARE_HOME\user_projects\domains\domain_name\bin\setDomainEnv.batを開きます。

2. JAVA_OPTIONSセクションにcom.oracle.soa.xpath.datetimeWithoutMillisを追加して、値をtrueに設定します。たとえば、JAVA_OPTIONSは、現在、次のように設定されています。

JAVA_OPTIONS="${JAVA_OPTIONS} ${JAVA_PROPERTIES}
-Dwlw.iterativeDev=${iterativeDevFlag} -Dwlw.testConsole=${testConsoleFlag}
-Dwlw.logErrorsToConsole=${logErrorsToConsoleFlag} "

変更後、JAVA_OPTIONSは次のようになります。

JAVA_OPTIONS="${JAVA_OPTIONS} ${JAVA_PROPERTIES}
-Dwlw.iterativeDev=${iterativeDevFlag} -Dwlw.testConsole=${testConsoleFlag}
-Dwlw.logErrorsToConsole=${logErrorsToConsoleFlag}
-Dcom.oracle.soa.xpath.datetimeWithoutMillis=true"

3. サーバーを再起動します。
IBM WebSphereでのこのプロパティの設定の詳細は、Oracle Fusion Middlewareサード・パーティ・アプリケーション・サーバー・ガイドを参照してください。

シグネチャ:

xpath20:current-dateTime(object)

引数:

- object: 標準書式の時間。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.2.4 current-time

この関数は、現在の時間をISO書式で返します。書式はhh:mm:ssTZDです。

シグネチャ:

xpath20:current-time(object)

引数:

- object: 標準書式の時間。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.2.5 day-from-dateTime

この関数は、dateTimeから日を返します。デフォルトの日は1です。

シグネチャ:

xpath20:day-from-dateTime(object)

引数:

- object: 文字列としての標準書式の時間。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.2.6 format-dateTime

この関数は、指定された書式を使用して書式設定したdateTimeの文字列を返します。日時書式文字列の例は、W3C XSL Transformationsドキュメントを参照してください。たとえば、[Y0001]-[M01]-[D01]です。

シグネチャ:

xpath20:format-dateTime(dateTime as string, format as string)

引数:

- dateTime: 書式設定の対象となるdateTime。

- format: 出力の書式。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.2.7 hours-from-dateTime

この関数は、dateTimeから時間を返します。デフォルトの時間は0です。

シグネチャ:

xpath20:hours-from-dateTime(dateTime as string)

引数:

- dateTime: 日時の文字列。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.2.8 implicit-timezone

この関数は、現在のタイムゾーンを協定世界時(UTC)からの偏差を示すISO書式+/- hh:mmで返します。

シグネチャ:

xpath20:implicit-timezone

引数:

この関数は引数を使用しません。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.2.9 minutes-from-dateTime

この関数は、dateTimeから分を返します。デフォルトの分は0です。

シグネチャ:

xpath20:minutes-from-dateTime(dateTime as string)

引数:

- dateTime as string: 日時。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.2.10 month-from-dateTime

この関数は、dateTimeから月を返します。デフォルトの月は1(1月)です。

シグネチャ:

xpath20:month-from-dateTime(dateTime as string)

引数:

- dateTime as string: 書式設定の対象となるdateTime。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.2.11 seconds-from-dateTime

この関数は、dateTimeから秒を返します。デフォルトの秒は0です。

シグネチャ:

xpath20:seconds-from-dateTime(dateTime as string)

引数:

- dateTime as a string: 文字列としてのdateTime。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.2.12 subtract-dayTimeDuration-from-dateTime

この関数は、dateTimeから期間を減算して、新規のdateTimeを返します。

期間の値が負の場合、返されるdateTime値は指定したinput-dateTimeより後の日時になります。

シグネチャ:

xpath20:subtract-dayTimeDuration-from-dateTime(dateTime as string, duration as string)

引数:

- dateTime as string: 期間を減算するdateTime(文字列書式)。

- duration as string: dateTimeから減算する期間、または期間が負の場合は加算する期間(文字列書式)。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xp20

B.1.2.13 timezone-from-dateTime

この関数は、dateTimeからタイムゾーンを返します。デフォルトのタイムゾーンはGMT+00:00です。

シグネチャ:

xpath20:timezone-from-dateTime(dateTime as string)

引数:

- dateTime as string: タイムゾーンを返す対象となるdateTime。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.2.14 year-from-dateTime

この関数は、dateTimeから年を返します。

シグネチャ:

xpath20:year-from-dateTime(dateTime as string)

引数:

- dateTime: 文字列としてのdateTime。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.3 算術関数

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

B.1.3.1 abs

この関数は、inputNumberの絶対値を返します。inputNumberが負でない場合は、inputNumberを返します。inputNumberが負の場合は、inputNumberからマイナス符号をとった値を返します。

例:

abs(-1)は、1を返します。

シグネチャ:

xpath20:abs(inputNumber as number)

引数:

- inputNumber as number: 絶対値を返す対象となる数値。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.4 文字列関数

この項では、文字列関数について説明します。

B.1.4.1 compare

この関数は、inputStringとcompareStringの各文字のUnicode値を比較して、これらの文字列間の辞書的な差異を返します。

inputStringがcompareStringより辞書的に前にある場合は、-1を返します。

inputStringとcompareStringが等しい場合は、0を返します。

inputStringがcompareStringより辞書的に後にある場合は、1を返します。

例:

xpath20:compare('Audi', 'BMW') returns -1

シグネチャ:

xpath20:compare(inputString as string, compareString as string)

引数:

- variableName: データのソース変数。

- propertyName: プロパティの修飾名(QName)。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.4.2 compare-ignore-case

この関数は、大/小文字を無視してinputStringとcompareStringの各文字のUnicode値を比較して、これらの文字列間の辞書的な差異を返します。表B-1に詳細を示します。

表B-1 戻り値

この関数からの戻り値

条件

-1

inputStringがcompareStringより辞書的に前にあります。

0

inputStringとcompareStringの両方が同等です。

1

inputStringがcompareStringより辞書的に後にあります。

例:

xpath20:compare-ignore-case('Audi','bmw')は、-1を返します。

シグネチャ:

xp:compare-ignore-case(inputString as string, compareString as string)

引数:

- inputString: 検索されるデータの文字列

- CompareString: 入力文字列と比較される文字列。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.4.3 create-delimited-string

この関数は、nodeSetから作成されたデリミタ付き文字列を返します。

シグネチャ:

oraext:create-delimited-string(nodeSet as node-set, delimiter as string)

引数:

- nodeSet: デリミタ付き文字列に変換するノードセット。

- delimiter: 出力文字列の項目を区切る文字(例 - カンマ、セミコロン)。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.1.4.4 ends-with

この関数は、inputStringがsearchStringで終わる場合にtrueを返します。

例:

xpath20:ends-with('XSL Map','Map')は、trueを返します。

シグネチャ:

xpath20:ends-with(inputString as string, searchString as string)

引数:

- inputString: 検索されるデータの文字列

- searchString: 検索する文字列。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.4.5 format-string

この関数は、渡された引数で書式設定されたメッセージを返します。引数は、少なくとも1つが必須で最大10個までサポートされます。

例:

oraext:format-string('{0} + {1} = {2}','2','2','4')は、'2 + 2 = 4'を返します。

シグネチャ:

oraext:format-string(string,string,string...)

引数:

- string: 書式設定された出力に使用する文字列の1つ。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.1.4.6 get-content-as-string

この関数は、入力要素のXML表現を返します。

シグネチャ:

oraext:get-content-as-string(element as node-set)

引数:

- element as node-set: XML表現として返される入力要素。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.1.4.7 get-content-from-file-function

この関数は、指定されているネイティブ・フォーマットのファイルを解析します。この関数は、BPELプロセスのassignアクティビティを設計する場合に使用します。

シグネチャ:

oraext:get-content-from-file-function(fileName, nxsdTemplate?, nxsdRoot?)

例:

oraext:get-content-from-file-function("file:/c:/Ftab.txt",

"file:/c:/Ftab_1.xsd","root")

引数:

- fileName: ファイルの名前。

- nxsdTemplate: 出力のネイティブXSD (NXSD)テンプレート。

- nxsdRoot-: NXSDルート。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.1.4.8 get-localized-string

この関数は、キーに対しロケール固有の文字列を返します。この関数は言語、国、変数およびリソースのバンドルを使用して正しいリソース・バンドルを識別します。すべてのパラメータは文字列書式である必要があります。パラメータ値を、get-localized-stringに送信する前に文字列に変換するには、string()関数を使用します。

リソース・バンドルは、resourceLocationに対してresourceBaseURLを解決することによって取得されます。URLは、/で終わる場合にかぎりディレクトリとみなされます。

使用方法: oraext:get-localized-string(resourceBaseURL as string, resourceLocation as string, resource bundle as string, language as string, country as string, variant as string, key as string)

例: oraext:get-localized-string('file:/c:/','','MyResourceBundle','en','US','','MSG_KEY')は、C:\ディレクトリにあるリソース・バンドル'MyResourceBundle'からロケール固有の文字列を返します。

シグネチャ:

oraext:get-localized-string(resourceURL,resourceLocation,resourceBundleName,language,country,variant,messageKey)

引数:

- resourceURL: リソースのURL。

- resourceLocation: リソースのサブディレクトリの場所。

- resourceBundleName: リソース・バンドルが含まれるZIPファイルの名前。

- language: ローカライズされる出力の言語。

- country: ローカライズされる出力の国。

- variant: ローカライズされる出力の言語変数。

- messageKey: リソース・バンドルのメッセージ・キー。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.1.4.9 index-within-string

この関数は、inputString内で最初に出現するsearchStringのゼロから始まる索引を返します。

searchStringが見つからない場合は-1を返します。

例:

oraext:index-within-string('ABCABC, 'B') returns 1

シグネチャ:

oraext:index-within-string(inputString as string, searchString as string)

引数:

- inputString: 検索されるデータの文字列

- searchString: inputString内で検索する文字列。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.1.4.10 last-index-within-string

この関数は、inputString内で最後に出現するsearchStringのゼロから始まる索引を返します。

searchStringが見つからない場合は-1を返します。

例:

oraext:last-index-within-string('ABCABC', 'B') returns 4

シグネチャ:

oraext:last-index-within-string(inputString as string, searchString as string)

引数:

- inputString: 検索されるデータの文字列

- searchString: inputString内で検索する文字列。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.1.4.11 left-trim

この関数は、inputStringから先頭の空白文字をすべて削除した値を返します。

例:

oraext:left-trim(' account ') returns 'account '

シグネチャ:

oraext:left-trim(inputString)

引数:

- inputString: 先頭の空白を削除する文字列。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.1.4.12 lower-case

この関数は、inputStringのすべての文字を対応する小文字に変換した値を返します。

例:

xpath20:lower-case('ABc!D')は、'abc!d'を返します。

シグネチャ:

xpath20:lower-case(inputString)

引数:

- inputString: 小文字にするデータの文字列。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.4.13 matches

この関数は、intputStringが正規表現パターンregexPatternに一致する場合にtrueを返します。

例:

xpath20:matches('abracadabra', '^a.*a$') returns true

シグネチャ:

xpath20:matches(intputString, regexPattern)

引数:

- inputString: 一致する必要のあるデータの文字列。

- regexPattern: 正規表現パターン。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.1.4.14 right-trim

この関数は、inputStringから末尾の空白文字をすべて削除した値を返します。

例:

oraext:right-trim(' account ') returns ' account'

シグネチャ:

oraext:right-trim(inputString as string)

引数:

- inputString: 末尾の空白を削除する入力文字列。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.1.4.15 upper-case

この関数は、inputStringのすべての文字を対応する大文字に変換した値を返します。

例:

xpath20:upper-case('abCd0')は、'ABCD0'を返します。

シグネチャ:

xpath20:upper-case(inputString as string)

引数:

- inputString: 大文字にするデータの文字列。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20

- namespace-prefix: xpath20

B.2 BPEL XPath拡張関数

この項では、次のBPEL XPath拡張関数について説明します。

注意:

- ora:getDomainid() XPath関数がOracle JDeveloperの「XPath式ビルダー」ダイアログに表示されていても、使用しないでください。この関数は、リリース10gからリリース11gへのBPELプロセスのアップグレードの一部として使用されるため表示されるのみであり、11g SOAコンポジット・アプリケーションには適用できません。

- processXSLTAttachment関数およびprocessXSQL関数は、リリース11gでは非推奨です。これらのXPath関数がOracle JDeveloperの「XPath式ビルダー」ダイアログに表示されていても、使用しないでください。

B.2.1 addQuotes

この関数は、stringの内容を一重引用符で囲んで返します。

シグネチャ:

ora:addQuotes(string)

引数:

- string: 引用符を追加する文字列。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.2 authenticate

この関数はLDAPユーザーを認証し、trueまたはfalseを返します。

authenticate、listUsers、lookupUser、searchのXPath関数は、LDAPサーバーからの情報(通常はLDAPユーザーの詳細)を取得する参照と検索の機能を提供します。

これらのXPath関数は、構成ファイルを使用してJNDIのサーバー・アクセス情報を取得します(たとえば、コンテキスト・ファクトリ、LDAPサーバーのプロバイダURL、認証タイプなど)。構成ファイルはdirectories.xmlという名前で、BPELプロジェクトの.bpelファイルと同じディレクトリに格納されている必要があります。これらのXPath関数をコールするには、このファイルを用意する必要があります。

例B-1に、directories.xmlファイルの形式を示します。

例B-1 directories.xmlファイルの形式

<?xml version="1.0" ?>
<directories>
<directory name='people'>
<property name="java.naming.provider.url">ldap://servername:port</property>
<property
name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</property>
<property name="java.naming.security.principal">[username]</property>
<property name="java.naming.security.authentication">simple</property>

<property name="java.naming.security.credentials">[passord]</property>
<property name="entryDN">[entry dn]</property>

</directory>
</directories>

例B-2に、directories.xmlファイルの例を示します。

例B-2 directories.xmlファイルの例

<?xml version="1.0" ?>
<directories>
<directory name='people'>
<property
name="java.naming.provider.url">ldap://myhost.us.example.com:7001</property>
<property
name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</property>
<property name="java.naming.security.principal">cn=admin</property>
<property name="java.naming.security.credentials">weblogic</property>
<property name="java.naming.security.authentication">simple</property>
<property name="entryDN">ou=people,ou=myrealm,dc=soainfra</property>
</directory>
</directories>

- シグネチャ:

ldap:authenticate('directoryName','userId','password')

- パラメータ:

- directoryName: directories.xmlファイルで指定されているディレクトリ名。

- userId: LDAPサーバー・ログインのユーザーID。

- password: LDAPサーバー・ログインのパスワード。

- 戻り値:
trueまたはfalse

例:

ldap:authenticate('people','weblogic','weblogic')

このXPath関数の場合、directories.xmlファイルで指定する必要があるプロパティは2つだけです。

- java.naming.provider.url

- java.naming.factory.initial

B.2.3 appendToList

注意:

appendToList関数は非推奨です。ノード・リストにデータを追加する場合は、assignアクティビティのbpelx:copyList拡張を使用することをお薦めします。

この関数はノード・リストに追加します。NULLまたは空のノード・リストは追加先にできません。

シグネチャ:

ora:appendToList('variableName', 'partName'?, 'locationPath'?, Object)

引数:

- variableName: データのソース変数。

- partName: 変数から選択するパート(オプション)。

- locationPath: パートを表すドキュメント・フラグメント内のサブツリーのルートを明確にした絶対ロケーション・パスを指定します(/により、パート全体を表す、ドキュメント・フラグメントのルートを表します。オプションです)。

- Object: リストまたは単一のアイテムを指定できます。リストを指定した場合は、リスト内の各アイテムが追加されます。追加される各アイテムは、要素、または作成されるノードの文字列値を持つ要素です。

プロパティID:

- deprecated
リストに追加するには、bpelx:copyListまたはbpelx:append拡張アクティビティを使用してください。

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.4 copyList

注意:

copyList関数を引き続き使用することもできますが、ノード・リストまたはノードのコピーにはbpelx:copyList拡張を使用することをお薦めします。詳細は、第6.14.6項「bpelx:copyListの使用方法」を参照してください。

この関数は、ノード・リストまたはノードをコピーします。NULLまたは空のノード・リストはコピー先にできません。

シグネチャ:

ora:copyList('variableName', 'partName'?, 'locationPath'?, Object)

引数:

- variableName: データのソース変数。

- partName: 変数から選択するパート(オプション)。

- locationPath: パートを表すドキュメント・フラグメント内のサブツリーのルートを明確にした絶対ロケーション・パスを指定します(/により、パート全体を表す、ドキュメント・フラグメントのルートを表します。オプションです)。

- Object: リストまたは単一のアイテムを指定できます。リストを指定した場合は、リスト内の各アイテムがコピーされます。コピーされる各アイテムは、要素、または作成されるノードの文字列値を持つ要素です。

プロパティID:

- deprecated
リストに追加するには、bpelx:copyList拡張アクティビティを使用してください。

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.5 countNodes

注意:

countNodes関数を引き続き使用することもできますが、要素のサイズを整数として返すには、バージョン1.0のXPath count()関数を使用することをお薦めします。

この関数は、要素のサイズを整数として返します。

シグネチャ:

ora:countNodes('variableName', 'partName'?, 'locationPath'?)

引数:

- variableName: データのソース変数。

- partName: 変数から選択するパート(オプション)。

- locationPath: パートを表すドキュメント・フラグメント内のサブツリーのルートを明確にした絶対ロケーション・パスを指定します(/により、パート全体を表す、ドキュメント・フラグメントのルートを表します。オプションです)。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.6 doc

この関数は、XMLファイルのコンテンツを返します。

シグネチャ:

ora:doc('fileName','xpath'?)

引数:

- fileName: XMLファイルの名前。

- xpath: XMLファイルの一部(ノードセット、ノード・リスト、リーフ・ノードなど)。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.7 doStreamingTranslate

この関数は、ストリーミングXPath APIを使用して変換します。これは、バッチ処理と呼ばれる固有の概念を使用し、トランスフォーメーション・エンジンによってトランスフォーメーションの結果がメモリーにマテリアライズされないようにします。この結果、ギガバイト単位の大規模なペイロードを任意に処理できるようになります。ただし、処理できるのは、for-eachなど、順方向のみのXSLコンストラクトのみです。targetTypeには、SDOMまたはATTACHMENTを指定できます。

シグネチャ:

ora:doStreamingTranslate('input SDOM or attachment element', 'streaming xpath context', 'SDOM or ATTACHMENT', 'attachment element?')

引数:

- input SDOM or attachment element

- streaming xpath context

- SDOM or ATTACHMENT

- attachment element

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

詳細は、「ora:doStreamingTranslate XPath関数を使用したアタッチメントの変換」を参照してください。

B.2.8 doTranslateFromNative

この関数は、入力データをXMLに変換します。入力データには、Base64エンコード・データが含まれる文字列、添付ファイルまたは要素を指定できます。targetTypeには、DOM、ATTACHMENTまたはSDOMを指定できます。

シグネチャ:

ora:doTranslateFromNative('input','nxsdTemplate','nxsdRoot','targetType','attachment element?')

引数:

- input: XPath関数の入力データ。

- nxsdTemplate: 入力データからXMLフォーマットへの変換に使用するNXSDスキーマ。

- nxsdRoot: NXSDスキーマのルート要素。

- targetType: XPath関数がネイティブ・データをXMLに変換する方法を指定します。

- attachment element: 返されるXMLの添付ファイルです。このパラメータはオプションです。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.9 doTranslateToNative

この関数は、入力のDOMを文字列または添付ファイルに変換します。targetTypeは、STRINGまたはATTACHMENTです。

シグネチャ:

ora:doTranslateToNative('input','nxsdTemplate','nxsdRoot','targetType','attachment element?')

引数:

- input: XPath関数の入力データ。このデータには、カンマ区切り値(CSV)などのネイティブ・フォーマットに変換する必要があるDOMまたはSDOMデータを使用できます。
入力ノードは通常、受信するDOMのルート要素です。例B-3に詳細を示します。

例B-3 doTranslateToNative関数

med:doTranslateToNative($in.request/inp1:Root-Element, 'xsd/address_csv.xsd',
@ 'Root-Element','STRING')"

ただし、入力ノードとして、受信するDOMのルート要素ではなくサブ要素を使用できます。例B-4に詳細を示します。

例B-4 doTranslateToNative関数

med:doTranslateToNative($in.request/inp1:requestToNative/ns1:Root-Element,
'xsd/address_csv.xsd', 'Root-Element','ATTACHMENT',
$in.request/inp1:requestToNative/inp1:attachment)

このような場合は、この関数を適切に実行するために、NXSDのスキーマ・ノードに次のプロパティを設定する必要があります。

nxsd:useArrayIdentifiers="true"

入力が大規模な場合は、この設定によってこの関数のパフォーマンスに悪影響を与える可能性があります(その場合は、dostreamingxlate関数を使用します)。

- nxsdTemplate: 入力データからXMLフォーマットへの変換に使用するNXSDスキーマ。

- nxsdRoot: NXSDスキーマのルート要素。

- targetType: XPath関数がネイティブ・データをXMLに変換する方法を指定します。

- attachment element: 返されるXMLの添付ファイルです。このパラメータはオプションです。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.10 doXSLTransform

この関数は、XSLTの複数パラメータをサポートするWS-BPEL 2.0のdoXSLTransform機能を実装します。この関数を使用する場合は、XSL template matchをルート(/)に設定しないでください。ルート要素に設定する必要があります。

シグネチャ:

ora:doXSLTransform('url_to_xslt',input,['paramQname',paramValue]*)

引数:

- url_to_xslt: XSLスタイルシートのURLを指定します。

- input: 入力変数名を指定します。

- paramQname: パラメータQNameを指定します。

- paramValue: パラメータ値を指定します。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.11 doXSLTransformForDoc

この関数は、doXSLTransform()の補完XPath関数です。目的は、XSLTテンプレートがドキュメントに一致したときにトランスフォーメーションを実行することです。

例B-5に、doXSLTransformForDoc関数を示します。

例B-5 doXSLTransformForDoc Functions

<function name="ora:doXSLTransformForDoc">
<className>com.collaxa.cube.xml.xpath.functions.xml.DoXSLTransformForDocument
</className>
<return type="node-set"/>
<params>
<param name="template" type="string"/>
<param name="input" type="string"/>
<param name="properties" type="string" minOccurs="0" maxOccurs="unbounded"/>
</params>
<desc resourceKey="PI_FUNCTION_DESC_DOXSLTRANSFORM_FOR_DOC"></desc>
<detail resourceKey="PI_FUNCTION_DESC_LONG_DOXSLTRANSFORM_FOR_DOC">
This function is a complement xpath function to doXSLTransform(). It aims
to do the transformation when the xslt template matching the
document. The signature of this function is <i>ora:doXSLTransformForDoc('url_to_
xslt',input,['paramQname',paramValue]*)</i>.
</detail>
<group>BPEL XPath Extension Functions</group>
</function>

シグネチャ:

ora:doXSLTransformForDoc('url_to_xslt',input,['paramQname',paramValue]*)

引数:

- url_to_xslt: XSLスタイルシートのURLを指定します。

- input: 入力変数名を指定します。

- paramQname: パラメータQNameを指定します。

- paramValue: パラメータ値を指定します。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

ora:doXSLTransformForDoc関数を使用すると、大きいXSLT/XQuery操作の結果をシステム・ディレクトリの一時ファイルに書き込むことができます。その後、ドキュメントは必要なときに一時ファイルからロードされます。これにより、ドキュメント全体をバイナリXMLとしてメモリーにキャッシュする必要がなくなります。

詳細は、第45.1.3.9項「XPath関数を使用し、大きいXSLT/XQuery出力をファイル・システムに書き込み」を参照してください。

B.2.12 formatDate

この関数は、標準XSD日付書式を出力に適した文字に変換します。

シグネチャ:

ora:formatDate('dateTime', 'format')

引数:

- dateTime: XSD書式の日付関連値を指定します。引数が文字列でない場合、この関数は、string()関数が適用された場合と同じように動作します。引数が日付でない場合、出力は空の文字列になります。引数が有効なXSD日付で、フィールドの一部が空の場合は、未指定のフィールドの充填が試みられます。たとえば、2003-06-10T15:56:00のようになります。

- format: java.text.SimpleDateFormat書式に従って書式設定された文字列を指定します。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.13 generateGUID

一意のGUIDを生成します。

シグネチャ:

ora:generateGUID()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.14 getApplicationName

この関数は、アプリケーション名を返します。

シグネチャ:

ora:getApplicationName()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.15 getAttachmentContent

この関数は、href関数から添付ファイルのコンテンツを取得します。

シグネチャ:

ora:getAttachmentContent(varName[, partName[, query]])

引数:

- varName: データのソース変数を指定します。

- partName: 変数から選択するパートを指定します(オプション)。

- query: 絶対ロケーション・パスを指定して(/は、パート全体を表す文書フラグメントのルートを意味する)、パートを表す文書フラグメント内のサブツリーのルートを識別します(オプション)。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

詳細は、「SOAPアタッチメントのコンテンツの読取りおよびエンコード」を参照してください。

B.2.16 getComponentName

この関数は、コンポーネント名を返します。

シグネチャ:

ora:getComponentName()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.17 getComponentInstanceID

この関数は、コンポーネント・インスタンスIDを返します。

シグネチャ:

ora:getComponentInstanceID()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.18 getCompositeName

この関数は、コンポジット名を返します。

シグネチャ:

ora:getCompositeName()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.19 getCompositeInstanceID

この関数は、BPELプロセスのコンポジット・インスタンスIDを返します。

シグネチャ:

ora:getCompositeInstanceID()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.20 getCompositeURL

この関数は、コンポジットURLを返します。

シグネチャ:

ora:getCompositeURL()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.21 getContentAsString

この関数は、要素のコンテンツをXML文字列として返します。

シグネチャ:

ora:getContentAsString(element elementAsNodeList)

引数:

- element: 要素(データのソース)。

- elementAsNodeList: ノード・リストとしての要素。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.22 getConversationId

この関数は、対話IDを返します。

シグネチャ:

ora:getConversationId()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.23 getCreator

この関数は、インスタンスの作成者を返します。

シグネチャ:

ora:getCreator()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.24 getCurrentDate

この関数は、現在の日付を文字列として返します。

シグネチャ:

ora:getCurrentDate('format'?)

引数:

- format: java.text.SimpleDateFormat書式に従って書式設定された文字列を指定します(オプション)。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

詳細は、第6.12.1項「日付または時間を割り当てる方法」を参照してください。

B.2.25 getCurrentDateTime

この関数は、現在の日時を文字列として返します。

シグネチャ:

ora:getCurrentDateTime('format'?)

引数:

- format: java.text.SimpleDateFormat書式に従って書式設定された文字列を指定します(オプション)。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.26 getCurrentTime

この関数は、現在の時間を文字列として返します。

シグネチャ:

ora:getCurrentTime('format'?)

引数:

- format: java.text.SimpleDateFormat書式に従って書式設定された文字列を指定します(オプション)。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.27 getECID

この関数は、実行コンテキストID (ECID)を返します。

シグネチャ:

ora:getECID()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.28 getElement

この関数は、要素の配列から、indexを使用して要素を返します。

シグネチャ:

ora:getElement('variableName', 'partName', 'locationPath', index)

引数:

- variableName: データのソース変数。

- partName: 変数から選択するパート(必須)。

- locationPath: パートを表すドキュメント・フラグメント内のサブツリーのルートを明確にした絶対ロケーション・パスを指定します(/により、パート全体を表す、ドキュメント・フラグメントのルートを表します。必須です)。

- index: 動的索引値。最初のノードの索引は1です。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.29 getFaultAsString

この関数は、フォルトを文字列値として返します。

シグネチャ:

ora:getFaultAsString()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

詳細は、第12.6項「getFaultAsString XPath拡張関数によるフォルト詳細の取得」を参照してください。

B.2.30 getFaultName

この関数は、フォルト名を返します。

シグネチャ:

ora:getFaultName()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.31 getGroupIdsFromGroupAlias

この関数は、BPELスーツケース・ディスクリプタのTaskServiceAliasesセクションで指定されているグループ・エイリアスのユーザーIDのリストを返します。

シグネチャ:

ora:getGroupIdsFromGroupAlias(String aliasName)

引数:

- aliasName: ユーザーまたはグループのリストのエイリアス。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.32 getInstanceId

この関数は、インスタンスIDを返します。

シグネチャ:

ora:getInstanceId()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.33 getNodeValue

この関数は、DOMノードの値を文字列として返します。

シグネチャ:

ora:getNodeValue(node)

引数:

- node: DOMノード。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.34 getNodes

この関数は、ノード・リストを取得します。これは、ノード・リストを返さないbpws:getVariableDataの代用として実装されます。

シグネチャ:

ora:getNodes('variableName', 'partName'?, 'locationPath'?)

引数:

- variableName: データのソース変数。

- partName: 変数から選択するパート(オプション)。

- locationPath: パートを表すドキュメント・フラグメント内のサブツリーのルートを明確にした絶対ロケーション・パスを指定します(/により、パート全体を表す、ドキュメント・フラグメントのルートを表します。オプションです)。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.35 getOwnerDocument

この関数は、ノードに関連付けられているドキュメント・オブジェクトを返します。

シグネチャ:

ora:getOwnerDocument(node)

引数:

- node: XMLノードを指定します。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.36 getParentComponentInstanceID

この関数は、BPELプロセス・インスタンスの親コンポーネント・インスタンスIDを返します。

シグネチャ:

ora:getParentComponentInstanceID()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.37 getPreference

この関数は、BPELスーツケース・ディスクリプタのpreferencesセクションで指定されているプロパティの値を返します。

シグネチャ:

ora:getPreference(preferenceName)

引数:

- preferenceName: BPELスーツケース・ディスクリプタで指定されているプリファレンスの名前。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.38 getProcessId

この関数は、現在のBPELプロセスのIDを返します。

シグネチャ:

ora:getProcessId()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.39 getProcessOwnerId

この関数は、プロセスの所有者であるユーザーがBPELスーツケース・ディスクリプタのTaskServiceAliasesセクションで指定されている場合に、そのユーザーのIDを返します。

シグネチャ:

ora:getProcessOwnerId()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.40 getProcessURL

この関数は、現在のBPELプロセスのルートURLを返します。

シグネチャ:

ora:getProcessURL()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.41 getProcessVersion

この関数は、現在のプロセス・バージョンを返します。

シグネチャ:

ora:getProcessVersion()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.42 getUserAliasId

この関数は、BPELスーツケース・ディスクリプタのTaskServiceAliasesセクションで指定されているエイリアスのユーザーIDを返します。

シグネチャ:

ora:getUserAliasId (String aliasName)

引数:

- aliasName: ユーザーまたはグループのリストのエイリアス。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.43 getUserIdsFromGroupAlias

この関数は、BPELスーツケース・ディスクリプタのTaskServiceAliasesセクションで指定されているグループ・エイリアスのユーザーIDのリストを返します。

シグネチャ:

ora:getUserIdsFromGroupAlias( String aliasName )

引数:

- aliasName - グループのエイリアス名。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.44 setCompositeInstanceTitle

この関数は、タイトルをコンポジット・インスタンスに設定します。このタイトルは、後でインスタンスの検索時に基準の1つとして使用できます。この関数は、引数として渡される文字列と同じ文字列を返します。

シグネチャ:

med:setCompositeInstanceTitle(title)

引数:

- title: コンポジット・インスタンスのタイトルを指定します。このタイトルは、XPath式としてメッセージ・ペイロードに指定できます。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.45 instanceOf

この関数は、BPEL変数から任意の値を抽出します。

シグネチャ:

ora:instanceOf(an_xpath_expression, 'typeQName')

引数:

- an_xpath_expression: 要素を返すXPath式。

- typeQName - グローバル宣言済XSDタイプのQName。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.46 integer

この関数は、ノードのコンテンツを整数として返します。

シグネチャ:

ora:integer(node)

引数:

- node: 入力ノード。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.47 listUsers

この関数はLDAPユーザーのリストを返します。

シグネチャ:

ldap:listUsers('directoryName',filter')

引数:

- directoryName: directories.xmlファイルで指定されているディレクトリ名。directories.xmlファイルの詳細は、B.2.2項「authenticate」を参照してください。

- filter: 検索に使用するフィルタ式で、この値をnullにすることはできません。

戻り値:

ユーザーのリストを含むXML要素。このXPath関数の場合は、すべてのプロパティをdirectories.xmlファイルで指定する必要があります。

例:

ldap:listUsers('people','ou=people');

例B-6に、出力の例を示します。

例B-6 listUsersの出力

<users xmlns="http://schemas.oracle.com/bpel/ldap">
<user dn="uid=weblogic">
<uid>weblogic</uid>
<userpassword>
Unknown macro: {ssha}

bHDVJRfWVt/Uwlzb4TKU+QTOLB4FLySO</userpassword>

<objectclass>inetOrgPerson</objectclass>
<objectclass>organizationalPerson</objectclass>
<objectclass>person</objectclass>
<objectclass>top</objectclass>
<objectclass>wlsUser</objectclass>
<description>This user is the default administrator.</description>
<wlsMemberOf>cn=Administrators,ou=groups,ou=myrealm,dc=soainfra</wlsMember
Of>
<orclguid>8AC1B6206FDD11DEBF9A7F3D47003274</orclguid>
<sn>weblogic</sn>
<cn>weblogic</cn>
</user>
</users>

B.2.48 lookupUser

この関数はLDAPユーザー情報を返します。

シグネチャ:

ldap:lookupUser('directoryName','userId')

引数:

- directoryName: directories.xmlファイルで指定されているディレクトリ名。directories.xmlファイルの詳細は、B.2.2項「authenticate」を参照してください。

- userId: 検索するユーザーID。

戻り値:

ユーザー情報を含むXML要素です。

このXPath関数の場合は、すべてのプロパティをdirectories.xmlファイルで指定する必要があります。

例:

ldap:lookupUser('people','ou=people');

例B-7に、出力の例を示します。

例B-7 lookupUserの出力

<user dn="" xmlns="http://schemas.oracle.com/bpel/ldap">
<ou>people</ou>
<objectclass>organizationalUnit</objectclass>
<objectclass>top</objectclass>
<orclguid>8ABB9BA06FDD11DEBF9A7F3D47003274</orclguid>
</user>

B.2.49 parseEscapedXML

この関数は、文字列をDOMに解析します。

シグネチャ:

oraext:parseEscapedXML(contentString)

引数:

- contentString: DOMに解析する文字列。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: oraext

この関数の詳細は、第6.20.1項「文字列からXML要素への変換方法」を参照してください。

B.2.50 parseXML

この関数は、文字列をDOM要素に解析します。

シグネチャ:

oraext:parseXML(contentString)

引数:

- contentString: DOM要素に解析する文字列。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.2.51 processXQuery

この関数は、XQueryトランスフォーメーションの結果を返します。

シグネチャ:

ora:processXQuery('template','context'?)

引数:

- template: XSLTテンプレート。

- input: 変換する入力データ。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.52 processXSLT

この関数は、Oracle XDK XSLTプロセッサを使用してXSLTトランスフォーメーションの結果を返します。

例B-8に、11gバージョンのprocessXSLTを示します。

例B-8 11gバージョンのprocessXSLT

<function name="ora:processXSLT">
<className>com.collaxa.cube.xml.xpath.functions.xml.GetElementFromXDKXSLTFunction
</className>
<return type="node-set"/>
<params>
<param name="template" type="string"/>
<param name="input" type="string"/>
<param name="properties" type="string" minOccurs="0" maxOccurs="unbounded"/>
</params>
<desc resourceKey="PI_FUNCTION_DESC_PROCESSXSLT"></desc>
<detail resourceKey="PI_FUNCTION_DESC_LONG_PROCESSXSLT">
This function returns result of XSLT transformation by using Oracle XDK
XSLT processor.
</detail>
<group>BPEL XPath Extension Functions</group>
</function>

例B-9は、10gバージョンのprocessXSLTを示しています。これは、下位互換性のために提供されています。

例B-9 10gバージョンのprocessXSLT

<function name="xdk:processXSLT">
<className>com.collaxa.cube.xml.xpath.functions.xml.GetElementFromXDKXSLTFunction
</className>
<return type="node-set"/>
<params>
<param name="template" type="string"/>
<param name="input" type="string"/>
<param name="properties" type="string" minOccurs="0" maxOccurs="unbounded"/>
</params>
<desc resourceKey="PI_FUNCTION_DESC_PROCESSXSLT"></desc>
<detail resourceKey="PI_FUNCTION_DESC_LONG_PROCESSXSLT">
This is same as 11g, for backward compatiablity this function uses the
old 10.1.2 namespace. This function returns the result of XSLT transformation
by using Oracle XDK XSLT processor.
</detail>
<group>BPEL XPath Extension Functions</group>
</function>

シグネチャ:

- 11gバージョンのシグネチャ:
ora:processXSLT('template','input','properties'?)

- 10gバージョンのシグネチャ:
xdk:processXSLT('template','input','properties'?)

引数:

- template: XSLTテンプレート。HTTP URLとファイルURLの両方がサポートされています。

- input: 変換する入力データ。

- properties: コンストラクト<xsl:param name="paramName"/>を使用してXSLマップ内でアクセスできるXSLパラメータに変換されるプロパティ。プロパティは次のように定義されます。

1. params.xsdファイルを作成し、名前/値ペアを定義します(どのプロパティも名前と値のペアです)。例:

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.oracle.com/service/bpel/common"
targetNamespace="http://schemas.oracle.com/service/bpel/common"
elementFormDefault="qualified">
<!-- Root Element for Parameters -->
<xsd:element name="parameters">
<xsd:complexType>
<xsd:sequence>
<!-- Each Parameter is represented by an "item" node that contains
one unique name and a string value
-->
<xsd:element name="item" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="value" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

2. SetParams.xslファイルを作成してプロパティを移入します。XSLT内では、パラメータにはその名前を通じてアクセスできます。この例では、パラメータ名がuserNameとlocationで、それぞれの値がjsmithとCAです。

<?xml version="1.0" encoding="UTF-8" ?>
<?oracle-xsl-mapper
<mapSources>
<source type="XSD">
<schema location="TestXSLParams.xsd"/>
<rootElement name="TestXSLParamsProcessRequest"
namespace="http://xmlns.oracle.com/TestXSLParams"/>
</source>
</mapSources>
<mapTargets>
<target type="XSD">
<schema location="params.xsd"/>
<rootElement name="ArrayOfNameAnyTypePairType"
namespace="http://schemas.oracle.com/service/bpel/common"/>
</target>
</mapTargets>
<!-- GENERATED BY ORACLE XSL MAPPER 10.1.3.1.0(build 061009.0802) AT [WED
APR 18 14:35:04 PDT 2007]. -->
?>
<xsl:stylesheet version="1.0"
xmlns:ns2="http://schemas.oracle.com/service/bpel/common"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services
.functions.Xpath20"

xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ora="http://schemas.oracle.com/xpath/extension"
xmlns:ehdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.esb.server.
headers.ESBHeaderFunctions"
xmlns:ns0="http://www.w3.org/2001/XMLSchema"
xmlns:orcl="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services
.functions.ExtFunc"
xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
xmlns:ns1="http://xmlns.oracle.com/TestXSLParams"
exclude-result-prefixes="xsl ns0 ns1 ns2 xp20 bpws ora ehdr
orcl ids hwf">
<xsl:template match="/">
<ns2:parameters>
<ns2:item>
<ns2:name>
<xsl:value-of select="'userName'"/>
</ns2:name>
<ns2:value>
<xsl:value-of select="'jsmith'"/>
</ns2:value>
</ns2:item>
<ns2:item>
<ns2:name>
<xsl:value-of select="'location'"/>
</ns2:name>
<ns2:value>
<xsl:value-of select="'CA'"/>
</ns2:value>
</ns2:item>
</ns2:parameters>
</xsl:template>
</xsl:stylesheet>

3. .bpelファイルからSetParams.xslを呼び出します。例:

- assignアクティビティinitializeXSLParameters内で、XSLT内からアクセス対象の情報を持つ特定のBPEL変数から、パラメータ変数を初期化します。

- assignアクティビティexecuteXSLT内で、パラメータを関数processXSLTのproperties(3番目)引数として、XSLTを呼び出します。

例:

<process name="TestXSLParams"
. . .
. . .
<sequence name="main">
<receive name="receiveInput" partnerLink="client"
portType="client:TestXSLParams" operation="initiate"
variable="inputVariable" createInstance="yes"/>
<assign name="initializeXSLParameters">
<bpelx:annotation>
<bpelx:pattern>transformation</bpelx:pattern>
</bpelx:annotation>
<copy>
<from expression="ora:processXSLT ('SetParams.xsl',
bpws:getVariableData('inputVariable','payload'))"/>
<to variable="propertiesXMLVar"/>
</copy>
</assign>
<assign name="executeXSLT">
<bpelx:annotation>
<bpelx:pattern>transformation</bpelx:pattern>
</bpelx:annotation>

<copy>
<from expression="ora:processXSLT('TestXSLParams.xsl',
bpws:getVariableData('inputVariable','payload'),
bpws:getVariableData('propertiesXMLVar'))"/>
<to variable="outputVariable" part="payload"/>
</copy>
</assign>
<invoke name="callbackClient" partnerLink="client"
portType="client:TestXSLParamsCallback"
operation="onResult"
inputVariable="outputVariable"/>
</sequence>
</process>

4. BPELプロセスでは、これらのプロパティを使用してXSLT関数にアクセスします。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora (11g)

- namespace-prefix: xdk (10g)

ora:processXSLT関数を使用すると、大きいXSLT/XQuery操作の結果をシステム・ディレクトリの一時ファイルに書き込むことができます。その後、ドキュメントは必要なときに一時ファイルからロードされます。これにより、ドキュメント全体をバイナリXMLとしてメモリーにキャッシュする必要がなくなります。

詳細は、第45.1.3.9項「XPath関数を使用し、大きいXSLT/XQuery出力をファイル・システムに書き込み」を参照してください。

B.2.53 readBinaryFromFile

この関数は、ファイルからデータを読み取ります。

シグネチャ:

ora:readBinaryFromFile(fileName)

引数:

- fileName: データの読取り元のファイル名。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

詳細は、「アタッチメント・ストリームの送信」を参照してください。

B.2.54 readFile

この関数は、ファイルのコンテンツを返します。

シグネチャ:

ora:readFile('fileName','nxsdTemplate'?,'nxsdRoot'?)

引数:

- fileName: ファイルの名前。または、HTTP URLも指定できます。
この関数では、デフォルトで、プロセス用のスーツケースJARファイルからの相対パスでファイルが読み取られます。読み取るファイルが別のディレクトリ・パスにある場合は、絶対パスであることを示す追加のディレクトリのスラッシュ(/)を指定する必要があります。次に例を示します。

ora:readFile('file:///c:/temp/test.doc')

ディレクトリのスラッシュの指定が2つのみ(//)の場合は、例B-10に示すようなエラーを受け取ります。

例B-10 readFile関数でのエラー・メッセージ

XPath expression failed to execute.
Error while processing xpath expression,
the expression is "ora:readFile("file://c:/temp/test.doc")",
the reason is c. Verify the xpath query.

- nxsdTemplate: 出力用のNXSDテンプレート。

- nxsdRoot - NXSDルート。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

注意:

現在、readFile関数では、認可が必要なWebサーバーのファイルにアクセスする機能がサポートされていません。そのようなファイルへのアクセスを試行すると、次のエラーを受け取ります。

java.io.IOException: Server returned HTTP response code: 401 for URL

B.2.55 search

この関数はLDAPエントリのリストを返します。

シグネチャ:

ldap:search('directoryName','filter','scope')

パラメータ:

- directoryName: directories.xmlファイルで指定されているディレクトリ名。directories.xmlファイルの詳細は、B.2.2項「authenticate」を参照してください。

- filter: 検索に使用するフィルタ式で、この値をnullにすることはできません。

- scope: 検索範囲。値は次のいずれかです。1: 1レベル、2: サブツリー、0: 指定したオブジェクト。このパラメータはオプションです。デフォルトでは、値は2です。

戻り値:

エントリのリストを含むXML要素。このXPath関数の場合は、すべてのプロパティをdirectories.xmlファイルで指定する必要があります。

例

ldap:search('people','cn=weblogic');

例B-11に、出力の例を示します。

例B-11 searchの出力

<searchResult xmlns="http://schemas.oracle.com/bpel/ldap">
<searchResultEntry dn="uid=weblogic" xmlns="urn:oasis:names:tc:DSML:2:0:core">
<attr name="uid">
<value>weblogic</value>
</attr>
<attr name="userpassword">
<value>
Unknown macro: {ssha}

bHDVJRfWVt/Uwlzb4TKU+QTOLB4FLySO</value>

</attr>

<attr name="objectclass">
<value>inetOrgPerson</value>
<value>organizationalPerson</value>
<value>person</value>
<value>top</value>
<value>wlsUser</value>
</attr>
<attr name="description">
<value>This user is the default administrator.</value>
</attr>
<attr name="wlsMemberOf">
<value>cn=Administrators,ou=groups,ou=myrealm,dc=soainfra</value>
</attr>
<attr name="orclguid">
<value>8AC1B6206FDD11DEBF9A7F3D47003274</value>
</attr>
<attr name="sn">
<value>weblogic</value>
</attr>
<attr name="cn">
<value>weblogic</value>
</attr>
</searchResultEntry>
<searchResultEntry xmlns="urn:oasis:names:tc:DSML:2:0:core"/>
</searchResult>

B.2.56 writeBinaryToFile

この関数は、変数(または変数のパート)のバイナリ・バイトを指定のファイル名のファイルに書き込みます。

シグネチャ:

ora:writeBinaryToFile(varName[, partName[, query]])

引数:

- varName: 変数の名前。

- partName: messageType変数のパートの名前。

- query: ルート要素の子に対する問合せ文字列。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.57 BPEL 1.1とBPEL 2.0におけるBPEL拡張関数

この項では、BPEL拡張関数について説明します。

表B-2に、BPEL仕様のバージョン1.1または2.0でサポートされているBPEL拡張関数をリストします。関数が特定のバージョンでサポートされている場合には、Oracle JDeveloperで「式ビルダー」ダイアログの「BPEL拡張関数」リストに選択対象として表示されます。それ以外の場合は表示されません。BPELバージョン1.1の関数は、ネームスペース接頭辞bpwsを使用します。BPELバージョン1.1の関数は、ネームスペース接頭辞bpelを使用します。

表B-2 BPEL 1.1またはBPEL 2.0でサポートされているBPEL拡張関数

関数

BPEL 1.1でサポートされているか

BPEL 2.0でサポートされているか

bpws:getLinkStatus

はい

いいえ

bpws:getVariableData

はい

いいえ

getVariableProperty

はい

いいえ

bpel:getVariableProperty

いいえ

はい

B.2.57.1 getLinkStatus

この関数は、リンクのステータスを示すブール値を返します。リンクのステータスが正の場合、この値はtrueになります。そうでない場合はfalseです。この関数はjoin条件でのみ使用できます。

linkName引数は、join条件に関連付けられたアクティビティの着信リンクの名前を表します。

シグネチャ:

bpws:getLinkStatus ('linkName')

引数:

- variableName: データのソース変数。

- propertyName: プロパティのQName。

プロパティID:

- namespace-uri: http://schemas.xmlsoap.org/ws/2003/03/business-process/

- namespace-prefix: bpws

B.2.57.2 getVariableData

この関数は、BPEL変数から任意の値を抽出します。

第1引数のみが指定されている場合は、変数の値を抽出しますが、この場合、変数はXMLスキーマの単純型または要素を使用して定義されている必要があります。それ以外の場合、この関数の戻り値は、メッセージ・タイプのパート全体(第2引数が指定され、第3引数が指定されない場合)、またはlocationPathに基づく選択の結果(オプションの引数が両方とも指定されている場合)を表す単一ノードが含まれるノードセットです。

シグネチャ:

bpws:getVariableData ('variableName', 'partName'?, 'locationPath'?)

引数:

- variableName: データのソース変数。

- partName: 変数から選択するパート(オプション)。

- locationPath: パートを表すドキュメント・フラグメント内のサブツリーのルートを明確にした絶対ロケーション・パスを指定します(/により、パート全体を表す、ドキュメント・フラグメントのルートを表します。オプションです)。

プロパティID:

- namespace-uri: http://schemas.xmlsoap.org/ws/2003/03/business-process/

- namespace-prefix: bpws

B.2.57.2.1 結果ノードセットのサイズが実行時に選択されるノードセットのサイズと異なる場合にスローされるselectionFailureフォルト

Business Process Execution Language for Web Services Specification Version 1.1に従って、locationPath引数によって選択されるノードセットのサイズが実行時に選択されるノードセットのサイズと異なる場合は、準拠実装により標準のフォルトbpws:selectionFailureがスローされる必要があります。

たとえば、例B-12に示すcount()関数は、StoreRequestの下にproduct要素のエントリが複数ある場合に機能せず、selectionFailureフォルトがスローされます。

例B-12 count()関数のエラー

count(bpws:getVariableData('inputVariable',
'payload','/ns2:StoreRequest/ns2:product'))

この関数を機能させるには、構文を次のように変更します。

"count($inputVariable.payload/ns2:product)"

B.2.57.3 getVariableProperty (BPEL 1.1)

この関数は、BPEL変数から任意の値を抽出します。第1引数ではデータのソース変数を指定し、第2引数ではその変数から選択するプロパティのQNameを指定します。特定のプロパティが、実行中に1以外のサイズのノードセットを選択する場合、標準フォルトbpws:selectionFailureがスローされます。

シグネチャ:

bpws:getVariableProperty ('variableName', 'propertyname')

引数:

- variableName: データのソース変数。

- propertyName: プロパティのQName。

プロパティID:

- namespace-uri: http://schemas.xmlsoap.org/ws/2003/03/business-process/

- namespace-prefix: bpws

B.2.57.4 getVariableProperty (BPEL 2.0)

この関数は、BPEL変数から任意の値を抽出します。第1引数ではデータのソース変数を指定し、第2引数ではその変数から選択するプロパティのQNameを指定します。特定のプロパティが、実行中に1以外のサイズのノードセットを選択する場合、標準フォルトbpws:selectionFailureがスローされます。

シグネチャ:

bpel:getVariableProperty ('variableName', 'propertyname')

引数:

- variableName: データのソース変数。

- propertyName: プロパティのQName。指定されたプロパティによって選択されるノードセットのサイズが実行時に選択されるノードセットのサイズと異なる場合は、標準のフォルトselectionFailureがスローされます。

プロパティID:

- namespace-uri: http://schemas.xmlsoap.org/ws/2003/03/business-process/

- namespace-prefix: bpel

B.2.58 ユーティリティ関数

この項では、ユーティリティ関数について説明します。

B.2.58.1 batchProcessActive

この関数は、バッチ内のアクティブ・プロセス数を返します。

シグネチャ:

ora:batchProcessActive(String rootId, String processId)

引数:

- rootId: ルートのID。

- processId: プロセスのID。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.58.2 batchProcessCompleted

この関数は、バッチ内の完了プロセス数を返します。

シグネチャ:

ora:batchProcessCompleted(String rootId, String processId)

引数:

- rootId: ルートのID。

- processId: プロセスのID。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.58.3 format

この関数は、Javaのメッセージ書式を使用してメッセージを書式設定します。

シグネチャ:

ora:format(formatStrings, args+)

引数:

- formatStrings: 書式設定するデータの文字列。

- args+: 書式文字列の書式指定子によって参照される引数。引数が書式指定子よりも多い場合、余分な引数は無視されます。引数の数は変数で、0(ゼロ)の場合があります。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.58.4 genEmptyElem

この関数は、指定されたQNameに対する空要素のリストを生成します。

シグネチャ:

ora:genEmptyElem('ElemQName',size?, 'TypeQName'?, xsiNil?)

引数:

- ElemQName: 最初の引数は、空要素のQNameです。

- size: 2番目の引数は整数型で、空要素の数を示します(オプション)。指定されていない場合、デフォルトのサイズは1です。

- TypeQName: 3番目の引数は、生成される空の名前のxsi:typeとなるQNameです(オプション)。このxsi:typeパターンは、SOAPENC:Arrayに相当します。指定されていないか、空の文字列である場合、xsi:type属性は生成されません。

- xsiNil: 4番目の引数はブール型で、生成される空の要素において、XSD-nillableがtrueの場合に、XSI - nilをtrueにするかどうかを指定します(オプション)。デフォルトはfalseです。指定されていないか、falseである場合、xsi:nilは生成されません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

この関数の詳細は、第6.19.4.4項「空要素の配列と等価の機能の生成」を参照してください。

B.2.58.5 getChildElement

この関数は、指定された要素の子要素を取得します。

シグネチャ:

ora:getChildElement(element, index)

引数:

- element: データのソース。

- index: 子要素の索引の整数値。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.58.6 getMessage

この関数は、引数に基づいてメッセージを取得します。

シグネチャ:

ora:getMessage(locale, relativeLocation, resourceName, resourceKey, resourceLocation?)

引数:

- locale: メッセージのロケール。

- relativeLocation: メッセージのサブディレクトリ。

- resourceName: メッセージ・リソースの名前。

- resourceKey: リソースのキー。

- resourceLocation: リソースの場所。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: ora

B.2.58.7 max-value-among-nodeset

この関数は、入力数値のリストであるノードセットinputNumberから最大値を返します。

ノードセットinputNumberには、テキスト・ノードの集合、またはテキスト・ノードが含まれる要素の集合を指定できます。

要素の場合、最初のテキスト・ノードの値が対象になります。

シグネチャ:

oraext:max-value-among-nodeset(inputNumber as node-set)

引数:

- inputNumber: 入力数値のノードセット。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.2.58.8 min-value-among-nodeset

この関数は、入力数値のリストであるノードセットinputNumbersから最小値を返します。ノードセットには、テキスト・ノードの集合、またはテキスト・ノードが含まれる要素の集合を指定できます。要素の場合、最初のテキスト・ノードの値が対象になります。

シグネチャ:

oraext:min-value-among-nodeset(inputNumbers as node-set)

引数:

- inputNumber: 入力数値のノードセット。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.2.58.9 square-root

この関数は、inputNumberの平方根を返します。

例:

oraext:square-root(25)は、5を返します。

シグネチャ:

oraext:square-root(inputNumber as number)

引数:

- inputNumber: 平方根を計算する入力数値。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.3 Oracle Mediator XPath拡張関数

この項では、Oracle Mediator XPath拡張関数について説明します。

B.3.1 doStreamingTranslate

この関数は、ストリーミングXPath APIを使用して変換します。これは、バッチ処理と呼ばれる固有の概念を使用し、トランスフォーメーション・エンジンによってトランスフォーメーションの結果がメモリーにマテリアライズされないようにします。この結果、ギガバイト単位の大規模なペイロードを任意に処理できるようになります。ただし、処理できるのは、for-eachなど、順方向のみのXSLコンストラクトのみです。targetTypeには、SDOMまたはATTACHMENTを指定できます。

シグネチャ:

med:doStreamingTranslate('input','streaming xpath context','targetType','attachment element'?)

引数:

- input: XPath関数の入力データ。これはSDOMまたはattachment elementになります。

- streaming xpath context

- targetType: XPath関数がネイティブ・データをXMLに変換する方法を指定します。

- attachment element: 返されるXMLの添付ファイルです。このパラメータはオプションです。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: med

例:

med.doStreamingTranslate($in.request/inp1:request/inp1:sourceAttachmentElement,$in.request/inp1:request/inp1:streamingcontext, 'ATTACHMENT', $in.request/inp1:request/inp1:targetAttachmentElement)

B.3.2 doTranslateFromNative

この関数は、入力データをXMLに変換します。入力データには、変換する文字列、ファイルまたはFTPアダプタ添付ファイル、添付ファイル、またはBase64エンコード・データを含む要素を指定できます。targetTypeには、DOM、ATTACHMENTまたはSDOMを指定できます。

シグネチャ:

med:doTranslateFromNative('input','nxsdTemplate','nxsdRoot','targetType','attachment element'?)

引数:

- input: XPath関数の入力データ。データは、カンマ区切り値(CSV)などのネイティブ・フォーマットです。

- nxsdTemplate: 入力データからXMLフォーマットへの変換に使用するNXSDスキーマ。

- nxsdRoot: NXSDスキーマのルート要素。

- targetType: XPath関数がネイティブ・データをXMLに変換する方法を指定します。

- attachment element: 返されるXMLの添付ファイルです。このパラメータはオプションです。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: med

例:

med:doTranslateFromNative(string($in.request/inp1:request/inp1:source),'xsd/address_csv.xsd','Root-Element','DOM')

B.3.3 doTranslateToNative

この関数は、入力のDOMを文字列または添付ファイルに変換します。targetTypeは、STRINGまたはATTACHMENTです。

シグネチャ:

med:doTranslateToNative('input','nxsdTemplate','nxsdRoot','targetType','attachment element'?)

引数:

- input: XPath関数の入力データ。このデータには、カンマ区切り値(CSV)などのネイティブ・フォーマットに変換する必要があるDOMまたはSDOMデータを使用できます。
入力ノードは通常、例B-13に示すように、受信するDOMのルート要素です。

例B-13 doTranslateToNative関数のルート要素としての入力ノード

med:doTranslateToNative($in.request/inp1:Root-Element, 'xsd/address_csv.xsd',
@ 'Root-Element','STRING')"

ただし、例B-14に示すように、入力ノードとして受信するDOMのルート要素ではなくサブ要素を使用することもできます。

例B-14 doTranslateToNative関数のサブ要素としての入力ノード

med:doTranslateToNative($in.request/inp1:requestToNative/ns1:Root-Element,
'xsd/address_csv.xsd', 'Root-Element','ATTACHMENT',
$in.request/inp1:requestToNative/inp1:attachment)

この場合、次に示すように、NXSDのスキーマ・ノードでuseArrayIdenitiferプロパティをtrueに設定する必要があります。

nxsd:useArrayIdentifiers="true"

入力が大規模な場合は、この設定によってこの関数のパフォーマンスに悪影響を与える可能性があります。その場合は、dostreamingxlate関数を使用できます。

- nxsdTemplate: 入力データからXMLフォーマットへの変換に使用するNXSDスキーマ。

- nxsdRoot: NXSDスキーマのルート要素。

- targetType: XPath関数がネイティブ・データをXMLに変換する方法を指定します。

- attachment element: 返されるXMLの添付ファイルです。このパラメータはオプションです。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: med

例:

med:doTranslateToNative($in.request/inp1:Root-Element,'xsd/address_csv.xsd','Root-Element','STRING')

B.3.4 getAttachmentContent

この関数は、添付ファイルのコンテンツを取得してデータをBase64形式にエンコードします。

シグネチャ:

med:getAttachmentContent(xpathExpr)

引数:

- xpathExpr: 受信アタッチメントを参照するXPath式。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: med

例:

med:getAttachmentContent($in.bin/bin)

B.3.5 getComponentInstanceID

この関数は、コンポーネント・インスタンスIDを返します。

シグネチャ:

mdhr:getComponentInstanceId()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: mdhr

B.3.6 getComponentName

この関数は、コンポーネント名を返します。

シグネチャ:

mdhr:getComponentName()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: mdhr

B.3.7 getCompositeInstanceID

この関数は、コンポジット・インスタンスIDを返します。

シグネチャ:

mdhr:getComponentInstanceId()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: mdhr

B.3.8 getCompositeName

この関数は、コンポジット名を返します。

シグネチャ:

mdhr:getCompositeName()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: mdhr

B.3.9 getHeader

この関数は、Oracle Mediatorメッセージ・ヘッダーからXPath式の値を返します。

注意:

getHeader関数は、2つのパラメータが指定された場合のみ機能します。

シグネチャ:

mdhr:getHeader(xpath as string, namespaces as string)

引数:

- xpath: 横断するスキーマからのパスを表します。

- namespaces: XPath式のコンテキストを格納する抽象コンテナを表します。この引数は必須です。ネームスペース宣言の形式は、次のとおりです。

'prefix=namespace;

ネームスペース宣言の後にセミコロンがあることに注意してください。例:

getHeader("in.header.ns9_name/ns9:name/ns9:first","ns9=http//exmaple.com;")

1. Oracle JDeveloperのXSLTマッパーで、getHeader関数をマッパーにドラッグします。

2. 「関数の編集 - getHeader」ダイアログで、「追加」をクリックします。
namespaces引数が追加されるため、ここで必須情報を入力します。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix:mdhr

B.3.10 getECID

この関数はECIDを返します。

シグネチャ:

mdhr:getECID()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: mdhr

B.3.11 getParentComponentInstanceID

この関数は、Oracle Mediatorインスタンスの親コンポーネント・インスタンスIDを返します。

シグネチャ:

mdhr:getParentComponentInstanceId()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: mdhr

B.3.12 readBinaryFromFile

この関数は、指定されたファイル名からバイナリ・データを読み取ることにより、添付ファイルを作成します。これは、作成された添付ファイルを保持する要素を返します。

シグネチャ:

med:readBinaryFromFile(location)

引数:

- location: データを読み取るパスおよびファイル名。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: mdhr

B.3.13 setCompositeInstanceTitle

この関数は、タイトルをコンポジット・インスタンスに設定します。このタイトルは、後でインスタンスの検索時に基準の1つとして使用できます。この関数は、引数として渡される文字列と同じ文字列を返します。

シグネチャ:

mdhr:setCompositeInstanceTitle(title)

引数:

- title: コンポジット・インスタンスのタイトルを指定します。このタイトルは、XPath式としてメッセージ・ペイロードに指定できます。

プロパティID:

- namespace-uri: http://schemas.oracle.com/xpath/extension

- namespace-prefix: mdhr

B.4 拡張関数

この項では、拡張関数について説明します。

B.4.1 create-nodeset-from-delimited-string

この関数は、デリミタ付き文字列を入力としてとり、nodeSetを返します。

シグネチャ:

oraext:create-nodeset-from-delimited-string(qname, delimited-string, delimiter)

引数:

- qname: 作成するノードセット内ノードのすべてに付ける修飾名。QNameは、次の2つの形式で表現できます。

- task:assignee

- {http://mytask/task}assignee

- delimited-string: デリミタで区切られた複数の要素からなる文字列。

- delimiter: 入力文字列内の項目を区切る文字(たとえば、カンマやセミコロン)。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.4.2 generate-guid

この関数は、一意のGUIDを生成します。

シグネチャ:

oraext:generate-guid()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.4.3 lookupPopulatedColumns

この関数は、参照列の値に対応する単一または複数の値を相互参照列で参照します。

シグネチャ:

xref:lookupPopulatedColumns(tableName,columnName,value,needAnException)

引数:

- xrefTableName: 参照表の名前。

- xrefColumnName: 参照列の名前。

- xrefValue: 参照列名に対応する値。

- needAnException: 値がtrueに設定されると、参照列に値が見つからない場合に例外がスローされます。そうでない場合は、空のノードセットが返されます。

プロパティID:

- namespace-uri:http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions

- namespace-prefix: xref

B.4.4 lookupValue

この関数は、ソース列に指定のソース値を含むドメイン値マップでターゲット列の値をルックアップすることにより、文字列を返します。

シグネチャ:

dvm:lookupValue(dvmLocation,sourceColumnName,sourceValue,targetColumnName,defaultValue)

引数:

- dvmLocation: ドメイン値マップのURI。

- sourceColumnName: ソース列名。

- sourceValue: ソース値(XSLTトランスフォーメーションのソース文書にバインドされるXPath式)。

- targetColumnName: ターゲット列名。

- defaultValue: 値が見つからない場合は、デフォルト値が返されます。

- QualifierSourceColumn: 修飾子列の名前。

- QualifierSourceValue: 修飾子の値。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue

- namespace-prefix: dvm

詳細は、第47.4.1.1項「dvm:lookupValue」を参照してください。

B.4.5 lookupValue1M

この関数は、ソース列の値がソース値と等しいドメイン値マップの複数のターゲット列の値を格納する、XML文書フラグメントを返します。

シグネチャ:

dvm:lookupValue1M(dvmLocation,sourceColumnName,sourceValue,targetColumnName1,targetColumnName2...)

引数:

- dvmMetadataURI: ドメイン値マップのURI。

- SourceColumnName: ソース列名。

- SourceValue: ソース値(XSLTトランスフォーメーションのソース文書にバインドされるXPath式)。

- TargetColumnName: ターゲット列名。1つ以上の列名を指定する必要があります。疑問符記号(?)は複数のターゲット列名を指定できることを示します。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue

- namespace-prefix:dvm

詳細は、第47.4.1.2項「dvm:lookupValue1M」を参照してください。

B.4.6 lookupXRef

この関数は、参照列の値に対応する値を相互参照列で参照します。

シグネチャ:

xref:lookupXRef(tableName,referenceColumnName,referenceValue,columnName,needAnException)

引数:

- xrefLocation: 相互参照URI。

- xrefReferenceColumnName: 参照列の名前。

- xrefReferenceValue: 参照列名に対応する値。

- xrefColumnName: 値が参照される列の名前。

- needAnException: 値がtrueに設定されると、値が見つからない場合に例外がスローされます。そうでない場合は、空の値が返されます。

プロパティID:

- namespace-uri:http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions

- namespace-prefix: xref

詳細は、第49.6.1項「xref:lookupXRef関数」を参照してください。

B.4.7 lookupXRef1M

この関数は、参照列の値に対応する複数の値を相互参照列で参照します。

シグネチャ:

xref:lookupXRef1M(tableName,referenceColumnName,referenceValue,columnName,needAnException)

引数:

- xrefLocation: 相互参照URI。

- xrefReferenceColumnName: 参照列の名前。

- xrefReferenceValue: 参照列名に対応する値。

- xrefColumnName: 値が参照される列の名前。

- needAnException: この値がtrueに設定される場合は、参照される値が見つからないときに例外がスローされます。そうでない場合は、空のノードセットが返されます。

プロパティID:

- namespace-uri:http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions

- namespace-prefix: xref

詳細は、第49.6.2項「xref:lookupXRef1M関数」を参照してください。

B.4.8 lookup-xml

この関数は、XMLファイル(docURL)で、親XPath(parentXPath)、キーXPath(keyXPath)およびキー値(key)を指定されたlookupXPathで定義されている要素の文字列値を返します。

例:

oraext:lookup-xml('file:/d:/country_data.xml', '/Countries/Country', 'Abbreviation', 'FullName', 'UK')は、ファイルD:\country_data.xmlで、Abbreviation = 'UK'である/Countries/Countryの子要素FullNameの値を返します。

シグネチャ:

oraext:lookup-xml(docURL, parentXPath, keyXPath, lookupXPath, key)

引数:

- docURL: XMLファイル。

- parentXPath: 親XPath。

- keyXPath: キーXPath。

- lookupXPath: 参照XPath。

- key: キー値。

プロパティID:

- namespace-uri: http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc

- namespace-prefix: oraext

B.4.9 markForDelete

この関数は、相互参照表の値を削除します。関数に渡された列値を含む行は、XREF_DATA表から削除され、XREF_DELETED_DATA表に移動されます。この関数は、削除に成功した場合はtrueを返します。それ以外の場合はfalseを返します。

シグネチャ:

xref:markForDelete(tableName,columnName,value)

引数:

- xrefTableName: 相互参照表の名前

- xrefColumnName: 削除対象の値を含む列の名前。

- xrefValueToDelete: 削除する値。

プロパティID:

- namespace-uri:http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions

- namespace-prefix: xref

詳細は、第49.7.1項「相互参照表の値の削除方法」を参照してください。

B.4.10 populateXRefRow

この関数は、参照列に参照値がある相互参照表(XREF)に列名を移入します。

シグネチャ:

xref:populateXRefRow(tableName,referenceColumnName,referenceValue,columnName,value,mode)

引数:

- xrefLocation: 相互参照URI。

- xrefReferenceColumnName: 参照列の名前。

- xrefReferenceValue: 参照列名に対応する値。

- xrefColumnName: 値が参照される列の名前。

- xrefvalue: 参照列名に対応する値。

- xrefmode: XREFの移入モードの名前

プロパティID:

- namespace-uri:http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions

- namespace-prefix: xref

詳細は、第49.5.1項「xref:populateXRefRow関数」を参照してください。

B.4.11 populateXRefRow1M

この関数は、参照列に参照値がある相互参照表(XREF)の列に複数の値を移入します。

シグネチャ:

xref:populateXRefRow1M(tableName,referenceColumnName,referenceValue,columnName,value,mode)

引数:

- xrefLocation: 相互参照URI。

- xrefReferenceColumnName: 参照列の名前。

- xrefReferenceValue: 参照列名に対応する値。

- xrefColumnName: 値が参照される列の名前。

- xrefvalue: 参照列名に対応する値。

- xrefmode: XREFの移入モードの名前

プロパティID:

- namespace-uri:http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions

- namespace-prefix: xref

詳細は、第49.5.3項「xref:populateXRefRow1M関数」を参照してください。

B.5 ワークフロー・サービス関数

この項では、ワークフロー・サービス関数について説明します。

B.5.1 clearTaskAssignees

この関数は、現在のタスク割当て先を消去します。

シグネチャ:

hwf:clearTaskAssignees(taskID)

引数:

- task: タスクのタスクID。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/workflow/xpath

- namespace-prefix: hwf

B.5.2 createWordMLDocument

この関数は、Microsoft Word ML文書をBase 64でエンコードされた文字列として作成します。

シグネチャ:

hwf:createWordMLDocument(node, xsltURI)

引数:

- node: このノードは、トランスフォーメーションへの入力であるXMLノードです。

- xsltURI: ノード(第1引数)からMicrosoft Word MLへの変換に使用されるXSLT。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/workflow/xpath

- namespace-prefix: hwf

B.5.3 getNotificationProperty

この関数は、通知プロパティを取得します。通知ごとに対応する値に評価されます。この関数は、通知コンテンツのXPath式でのみ使用してください。他の場所で使用すると、nullが返されます。

シグネチャ:

hwf:getNotificationProperty(propertyName)

引数:

- propertyName: 通知プロパティの名前。次のいずれかの値です。

- recipient: 通知の受信者。

- recipientDisplay: 受信者の表示名。

- taskAssignees: タスクの割当て先。

- taskAssigneesDisplay: タスク割当て先の表示名。

- locale: 受信者のロケール。

- taskId: 通知対象となるタスクのタスクID。

- taskNumber: 通知対象となるタスクのタスク番号。

- appLink: Oracle BPM Worklistのタスク詳細ページへのHTMLリンク。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/workflow/xpath

- namespace-prefix: hwf

B.5.4 getNumberOfTaskApprovals

この関数は、タスクが承認された回数を計算します。

シグネチャ:

hwf:getNumberOfTaskApprovals(taskId)

引数:

- taskId: タスクのID

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/workflow/xpath

- namespace-prefix: hwf

B.5.5 getPreviousTaskApprover

この関数は、前のタスク承認者を取得します。

シグネチャ:

hwf:getPreviousTaskApprover(taskId)

引数:

- taskId: タスクのID

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/workflow/xpath

- namespace-prefix: hwf

B.5.6 getTaskAttachmentByIndex

この関数は、指定された索引にあるタスクの添付ファイルを取得します。

シグネチャ:

hwf:getTaskAttachmentByIndex(taskId, attachmentIndex)

引数:

- taskId: タスクのタスクID。

- attachmentIndex: 添付ファイルの索引。索引は1から始まります。attachmentIndex引数には、値が索引番号の文字列として評価されるノードを指定できます(すべてのノード値は文字列です)。静的に指定する場合は、'1'として指定できます。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/workflow/xpath

- namespace-prefix: hwf

B.5.7 getTaskAttachmentByName

この関数は、添付ファイル名でタスクの添付ファイルを取得します。

シグネチャ:

hwf:getTaskAttachmentByName(taskId, attachmentName)

引数:

- taskId: タスクのタスクID。

- attachmentName: 添付ファイルの名前。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/workflow/xpath

- namespace-prefix: hwf

B.5.8 getTaskAttachmentContents

この関数は、添付ファイル名でタスクの添付ファイルのコンテンツを取得します。

シグネチャ:

hwf:getTaskAttachmentContents(taskId, attachmentName)

引数:

- taskId: タスクのタスクID。

- attachmentName: 添付ファイルの名前。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/workflow/xpath

- namespace-prefix: hwf

B.5.9 getTaskAttachmentsCount

この関数は、タスクの添付ファイル数を取得します。

シグネチャ:

hwf:getTaskAttachmentsCount(taskId)

引数:

- taskId: タスクのタスクID。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/workflow/xpath

- namespace-prefix: hwf

B.5.10 getTaskResourceBundleString

この関数は、タスク定義に関連付けられているリソース・バンドルから国際化されたリソース値を返します。

シグネチャ:

hwf:getTaskResourceBundleString(taskId, key, locale?)

引数:

- taskId: タスクのタスクID。

- key: リソースへのキー。

- locale: ロケール(オプション)。この値は、デフォルトでシステム・ロケールに設定されます。この場合、ネームスペースhttp://xmlns.oracle.com/bpel/services/taskServiceのresourceString XML要素が返されます。これにはリソース・バンドルからの文字列が含まれます。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/workflow/xpath

- namespace-prefix: hwf

B.5.11 wfDynamicGroupAssign

この関数は、指定の割当てパターンに従って選択されたアイデンティティ・サービス・グループの名前を取得します。グループは、指定したグループの下位グループ(単一のグループ名を指定した場合)またはグループ・リスト(ユーザー名リストを指定した場合)から選択されます。アイデンティティ・サービスが複数のレルムで構成されている場合は、グループのレルム名も指定する必要があります。追加の割当てパターン固有のパラメータも指定できます。これらの追加パラメータは、使用する特定の割当てパターンの詳細によってはオプションです。

この関数には2つのシグネチャがあります。

シグネチャ1:

hwf:wfDynamicGroupAssign('patternName','groupName','realmName'?,'patternParam1'?,'patternParam2'?,...,'patternParamN'?)

引数1:

- patternName: 割当てパターン名(ROUND_ROBINなど)。

- groupName: 下位グループの選択元となるグループの名前。

- realmName: グループが属しているアイデンティティ・サービス・レルムの名前。

- patternParam1...patternParamN: 割当てパターン実装に必要な追加パラメータ(パターンによってはオプション)。

シグネチャ2:

hwf:wfDynamicGroupAssign('patternName','groupList','realmName'?,'patternParam1'?,'patternParam2'?,...,'patternParamN'?)

引数2:

- patternName: 割当てパターン名(ROUND_ROBINなど)。

- groupList: グループの選択元となるグループ・リスト。

- realmName: グループが属しているアイデンティティ・サービス・レルムの名前。

- patternParam1...patternParamN: 割当てパターン実装に必要な追加パラメータ(パターンによってはオプション)。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/workflow/xpath

- namespace-prefix: hwf

B.5.12 wfDynamicUserAssign

この関数は、指定の割当てパターンに従って選択されたアイデンティティ・サービス・ユーザーの名前を返します。ユーザーは、指定したグループの下位ユーザー(単一のグループ名を指定した場合)またはユーザー・リスト(ユーザー名リストを指定した場合)から選択されます。アイデンティティ・サービスが複数のレルムで構成されている場合は、グループおよびユーザーのレルム名も指定する必要があります。追加の割当てパターン固有のパラメータも指定できます。これらの追加パラメータは、使用する特定の割当てパターンの詳細によってはオプションです。

この関数には2つのシグネチャがあります。

シグネチャ1:

hwf:wfDynamicUserAssign('patternName','groupName','realmName'?,'patternParam1'?,....,'patternParam2'?,...,'patternParamN'?)

引数1:

- patternName: 割当てパターン名(ROUND_ROBINなど)。

- groupName: 下位ユーザーの選択元となるグループの名前。

- realmName: グループが属しているアイデンティティ・サービス・レルムの名前。

- patternParam1 ... patternParamN: 割当てパターン実装に必要な追加パラメータ(パターンによってはオプション)。

シグネチャ2:

hwf:wfDynamicUserAssign(patternName,userList,realmName?,patternParam1?,patternParam2?,...,patternParamN?)

引数2:

- patternName: 割当てパターン名(ROUND_ROBINなど)。

- userList: ユーザーの選択元となるユーザー・リスト。

- realmName: ユーザーが属しているアイデンティティ・サービス・レルムの名前。

- patternParam1...patternParamN: 割当てパターン実装に必要な追加パラメータ(パターンによってはオプション)。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/workflow/xpath

- namespace-prefix: hwf

B.5.13 アイデンティティ・サービス関数

この項では、アイデンティティ・サービス関数について説明します。

B.5.13.1 getDefaultRealmName

この関数は、デフォルトのレルム名を返します。

シグネチャ:

ids:getDefaultRealmName()

引数:

この関数には引数がありません。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/services/IdentityService/xpath

- namespace-prefix: ids

B.5.13.2 getGroupProperty

この関数は、指定したグループのプロパティ値を返します。グループまたは属性が存在しない場合は、nullを返します。

シグネチャ:

ids:getGroupProperty(groupName, attributeName, realmName)

引数:

- groupName: 属性を取得するグループを含む文字列または要素。

- attributeName: グループ属性の名前を含む文字列または要素。
アイデンティティ・サービスでLDAP providerTypeまたはJAZN LDAPベースのプロバイダが使用される場合は、これらの属性で検索できるようにLDAPサーバーを構成します。

- realmName: レルム名。これはオプションです。指定しない場合は、デフォルトのレルムが使用されます。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/services/IdentityService/xpath

- namespace-prefix: ids

B.5.13.3 getManager

この関数は、指定したユーザーのマネージャを取得します。ユーザーが存在しない、またはこのユーザーにマネージャが存在しない場合は、nullを返します。

シグネチャ:

ids:getManager(userName, realmName)

引数:

- userName: ユーザー名。

- realmName: レルム名。これはオプションです。指定しない場合は、デフォルトのレルムが使用されます。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/services/IdentityService/xpath

- namespace-prefix: ids

B.5.13.4 getReportees

この関数は、ユーザーの報告先を取得します。ユーザーが存在しない場合は、nullを返します。この関数はノードのリストを返します。リストの各ノードはuserです。

シグネチャ:

ids:getReportees(userName, upToLevel, realmName)

引数:

- userName: ユーザー名。

- upToLevel: 結果に含める間接報告先のレベル数を定義します。値が1の場合は、直接報告先のみが返されます。値が-1の場合は、全レベルの報告先が返されます。値xsd:numberを含む要素、または文字列(例: '1')のいずれかを指定できます。

- realmName: レルム名。これはオプションで、指定しない場合はデフォルトのレルムが使用されます。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/services/IdentityService/xpath

- namespace-prefix: ids

B.5.13.5 getSupportedRealmNames

この関数は、サポートされるレルム名を返します。

シグネチャ:

ids:getSupportedRealms()

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/services/IdentityService/xpath

- namespace-prefix: ids

B.5.13.6 getUserProperty

この関数は、ユーザーのプロパティを返します。ユーザーが存在しない場合は、nullを返します。適切な属性が存在しない場合は、カスタム属性を使用します。

シグネチャ:

ids:getUserProperty(userName, attributeName, realmName)

引数:

- userName: 属性を取得するユーザーを含む文字列または要素。

- attributeName: user属性の名前。
アイデンティティ・サービスでLDAP providerTypeまたはJAZN LDAPベースのプロバイダが使用される場合は、これらの属性で検索できるようにLDAPサーバーを構成します。

- realmName: レルム名。これはオプションです。指定しない場合は、デフォルトのレルム名が使用されます。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/services/IdentityService/xpath

- namespace-prefix: ids

詳細は、第17.3.5項「電子メール・アドレスと電話番号を動的に選択する方法」を参照してください。

B.5.13.7 getUserRoles

この関数は、ユーザー・ロールを取得します。roleTypeに応じて、アプリケーション・ロールまたはグループのいずれかのオブジェクト・リストを返します。ユーザーまたはロールが存在しない場合は、nullを返します。

シグネチャ:

ids:getUserRoles(userName, roleType, direct)

引数:

- userName: ロールを取得するユーザーを含む文字列または要素。

- roleType: ロール・タイプ。3つの値ApplicationRole、EnterpriseRoleまたはAnyRoleのいずれかです。

- direct: 直接ロールをフェッチするか間接ロールをフェッチするかを示す文字列または要素。これはオプションです。指定しない場合は、直接ロールのみがフェッチされます。xsd:booleanまたは文字列true/falseを指定します。

プロパティID:

- namespace-uri:http://xmlns.oracle.com/bpel/services/IdentityService

- namespace-prefix: ids

B.5.13.8 getusersinapprole

この関数は、このアプリケーション・ロールを付与されているユーザーのリストを返します。入力として指定されたアプリケーション・ロール名またはアプリケーション名がNULLの場合は、NULLを戻します。

シグネチャ: ids:getUsersInAppRole(appRoleName, appName, direct, realmName)

引数:

- appRoleName: 取得するメンバーが属しているアプリケーション・ロールを含む文字列または要素。

- appName: アプリケーション・ロールを作成するアプリケーション名。

- direct: 直接の権限受領者のみを取得するか、すべてのユーザーを取得するかを示す文字列または要素。

- realmName: レルム名を含む文字列または要素。これはオプションであり、指定しなければデフォルト・レルムが使用されます。

B.5.13.9 getUsersInGroup

この関数は、グループ内のユーザーを取得します。グループが存在しない場合は、nullを返します。この関数はノードのリストを返します。リストの各ノードはuserです。

シグネチャ:

ids:getUsersInGroup(groupName, direct, realmName)

引数:

- groupName: グループ名。

- direct: ブール・フラグ。trueの場合は、直接ユーザー権限受領者が返され、それ以外の場合はすべてのユーザー権限受領者が返されます。値xsd:booleanを含む要素、または文字列'true'/'false'のいずれかを指定できます。

- realmName: レルム名。これはオプションです。指定しない場合は、デフォルトのレルム名が使用されます。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/services/IdentityService/xpath

- namespace-prefix: ids

B.5.13.10 isUserInRole

この関数は、ユーザーに指定ロールがあるかどうかを検証します。

シグネチャ:

ids:isUserInRole(userID, roleName, realmName)

引数:

- userID: ロールの付与を検証するユーザーを含む文字列または要素。

- roleName: ロール名。

- realmName: レルム名。これはオプションです。指定しない場合は、デフォルトのレルム名が使用されます。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/services/IdentityService/xpath

- namespace-prefix: ids

B.5.13.11 lookupGroup

この関数は、グループを取得します。グループが存在しない場合は、nullを返します。

シグネチャ:

ids:lookupGroup(groupName, realmName)

引数:

- groupName: グループ名。

- realmName: レルム名。これはオプションです。指定しない場合は、デフォルトのレルム名が使用されます。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/services/IdentityService/xpath

- namespace-prefix: ids

B.5.13.12 lookupUser

この関数は、ユーザー・オブジェクトを取得します。ユーザーが存在しない場合は、nullを返します。

シグネチャ:

ids:lookupUser(userName, realmName)

引数:

- userName: ユーザー名。

- realmName: レルム名。これはオプションです。指定しない場合は、デフォルトのレルム名が使用されます。

プロパティID:

- namespace-uri: http://xmlns.oracle.com/bpel/services/IdentityService/xpath

- namespace-prefix: ids

B.6 Oracle JDeveloperにおける式ビルダーでのXPath式の構築

「式ビルダー」ダイアログとXPathビルディング・アシスタントを使用して、XPath式を作成できます。「式ビルダー」ダイアログで、BPELプロセスのXPath式、ヒューマン・ワークフロー、またはOracle Mediatorサービス・コンポーネントをビジュアルに設計できます。

B.6.1 式ビルダーの使用方法

式ビルダーを使用する手順は、次のとおりです。

1. 「関数」リストで、使用する関数のカテゴリ(たとえば、「アイデンティティ・サービス関数」).

2. 関数(たとえばgetManager)を選択します。

3. 図B-1に示すように、「式に挿入」をクリックします。

図B-1 「式ビルダー」ダイアログ

「図B-1 「式ビルダー」ダイアログ」の説明

上部の「式」フィールドに関数を挿入します。

4. 図B-2のように、「式」フィールドで、関数のカッコの間にカーソルを置きます。

図B-2 カーソルを置く位置

「図B-2 カーソルを置く位置」の説明

5. 図B-3のように、「スキーマ」セクションでスキーマ・パスを拡張して選択を行います。

図B-3 スキーマの選択

「図B-3 スキーマの選択」の説明

6. 「式に挿入」をクリックします。
図B-4のように、式が関数に挿入されます。

図B-4 XPath式の作成

「図B-4 XPath式の作成」の説明

B.6.2 XPathビルディング・アシスタントの概要

次のダイアログなど、いくつかのダイアログでは、XPathビルディング・アシスタントを使用してXPath式を指定できます。

- 「式ビルダー」ダイアログの「式」フィールド

- BPEL 2.0における「変数の作成」ダイアログの「初期化」タブの「式」フィールド

- XSLTマッパーの「XPath式の編集」および「関数の編集」ダイアログ

長い式および複雑な式を手動で指定できますが、非効率的で間違いやすいプロセスになる可能性があります。XPathビルディング・アシスタントには、このプロセスを簡素化する一連の機能が用意されています。

- 次の項目に関する自動完了機能

- 要素および属性

- 関数

- BPEL変数およびパート

- 関数パラメータのツールのヒント

- XPathの構文検証およびセマンティク検証

B.6.3 XPathビルディング・アシスタントの使用方法

この項では、XPathビルディング・アシスタントを使用して、「式ビルダー」ダイアログの「式」フィールドで式を作成する方法の例を示します。

XPathビルディング・アシスタントを使用する手順は、次のとおりです。

1. 「式」フィールドの中をクリックし、[Ctrl]キーを押しながら[Space]キーを押します。使用可能なオプションのメニューが表示されます。

2. 次のいずれかの方法で、リストから選択します。

- リストを下へスクロールして、関数をダブルクリックします。

- 最初の1文字(たとえばc)を入力してその文字で始まる項目のみを表示し、適切な関数をダブルクリックします。

図B-5に詳細を示します。

図B-5 式を作成するための値リスト

「図B-5 式を作成するための値リスト」の説明

この値が「式」フィールドに追加されます。別のオプションのリストが再度自動的に表示され、XPath式の次の部分を入力するように求められます。

3. 次の部分を選択してダブルクリックします。図B-6に詳細を示します。

図B-6 関数の次の部分の起動

「図B-6 関数の次の部分の起動」の説明

この値が「式」フィールドに追加されます。リストが再度自動的に表示され、XPath式の次の部分を入力するように求められます。

4. このプロセスを続けて実行して、XPath式の残りの部分を作成します。

5. 必要に応じて手動でテキストを追加します。図B-7に詳細を示します。

図B-7 手動によるテキストの追加

「図B-7 手動によるテキストの追加」の説明

注意:

XPathビルディング・アシスタントのポップアップで選択対象をダブルクリックするかわりに、[Enter]キーを使用して選択することもできます。式が完成しても情報の入力を求められる場合には、[Esc]を押してください。リストが閉じます。

B.6.4 XSLTマッパーでのXPathビルディング・アシスタントの使用

この項では、XPathビルディング・アシスタントを使用して、XSLTマッパーの「XPath式の編集」ダイアログで式を作成する方法の例を示します。

XSLTマッパーでXPathビルディング・アシスタントを使用する手順は、次のとおりです。

1. XSLTマッパーに移動します。

2. 「コンポーネント・パレット」 リストから、「拡張関数」を選択します。

3. リストを下へスクロールして「xpath-expression」関数を見つけます。

4. 図B-8に示すように、「xpath-expression」関数をXSLTマッパーにドラッグ・アンド・ドロップします。

図B-8 xpath-expression

「図B-8 xpath-expression」の説明

5. 関数をダブルクリックして、「XPath式の編集」ダイアログを表示します。

6. 「XPath式」フィールド内でカーソルをクリックします。

7. 図B-9に示すように、[Ctrl]キーを押しながら[Space]キーを押して、式を作成するための値リストを表示します。

図B-9 式を作成するための値リスト

「図B-9 式を作成するための値リスト」の説明

8. 次のいずれかの方法でリストから値を選択します(この例では、「concat(String) as String」を選択)。

- リストを下へスクロールして、「concat(String) as String」をダブルクリックします。

- cを入力して、その文字で始まる項目のみを表示し、「concat(String) as String」を選択してダブルクリックします。

図B-10に詳細を示します。

図B-10 式リストの選択

「図B-10 式リストの選択」の説明

この選択値が「XPath式」フィールドに追加されます。別のオプションのリストが再度自動的に表示され、XPath式の次の部分を入力するように求められます。

9. このプロセスを続けて実行して、XPath式の残りの部分を作成します。

10. 完了後、「OK」をクリックして「XPath式の編集」ダイアログを閉じます。

B.6.5 関数パラメータのツールのヒント

関数パラメータのツールのヒントでは、選択したXPath関数の適切な引数が表示されます。たとえば、関数concatを手動で入力し、次に(を入力すると、パラメータのツールのヒントが表示され、concat関数の適切な引数が表示されます。関数の現在の引数名が太字でハイライト表示されます。図B-11に詳細を示します。

図B-11 関数の現在の引数名

「図B-11 関数の現在の引数名」の説明

1つの引数の指定が終わり、カンマを入力して次の引数に進むと、ツールのヒントが更新されて2番目の引数名が太字でハイライト表示されます。以降も同様に処理されます。関数が含まれている既存のXPathの編集中に、パラメータのツールのヒントを再起動するには、関数内にカーソルを置き、[Ctrl] キーと [Shift] キーを押しながら [Space] キーを押します。

B.6.6 構文検証およびセマンティク検証

Oracle JDeveloper内では、XPath式は、XPath 1.0仕様に準拠している場合は構文的に有効であるとみなされます。XPathビルディング・アシスタントでは、構文的に誤りのあるXPath(例: カッコやアポストロフィの欠落)については、誤りのある部分に赤い下線が付けられて警告されます。この部分にマウス・ポインタを移動します。これにより、エラー・メッセージがツールのヒントとして表示されます。エラーを修正すると、赤い下線付きのエラー表示は表示されなくなります。図B-12に詳細を示します。

図B-12 構文的に誤りのあるXPath

「図B-12 構文的に誤りのあるXPath」の説明

構文的に有効なXPathがセマンティク的には無効な場合があります。この場合は、実行時に予期しないエラーが発生する可能性があります。たとえば、要素、変数、関数またはパートの名前の綴りが間違っていることがあります。XPathビルディング・アシスタントでは、セマンティク・エラーについては、誤りのある部分に青い下線が付けられて警告されます。この部分にマウス・ポインタを移動します。これにより、エラー・メッセージがツールのヒントとして表示されます。エラーを修正すると、青い下線付きのエラー表示は表示されなくなります。図B-13に詳細を示します。

図B-13 セマンティク的に誤りのあるXPath

「図B-13 セマンティク的に誤りのあるXPath」の説明

B.6.7 フリー・フォーム・テキストおよびXPath式を使用した式の作成

一部のダイアログでは、フリー・フォーム・テキストとXPath式を組み合せて使用できます。

1. フィールドにカーソルを置くと、この機能を説明するポップアップ・メッセージが表示されます。図B-14に詳細を示します。

図B-14 機能説明のメニュー

「図B-14 機能説明のメニュー」の説明

2. フリー・フォーム・テキストを入力します(この例では、'Hello, your telephone number')。図B-15に詳細を示します。

図B-15 フリー・フォーム・テキスト

「図B-15 フリー・フォーム・テキスト」の説明

3. XPathビルディング・アシスタントを起動する準備が整ったところで<%と入力します。図B-16に詳細を示します。

図B-16 XPathビルディング・アシスタントの起動準備

「図B-16 XPathビルディング・アシスタントの起動準備」の説明

赤い下線が表示されます。これは、追加情報の入力を求められていることを示します。

4. [Ctrl]キーを押しながら[Space]キーを押して、XPathビルディング・アシスタントを起動します。図B-17に詳細を示します。

図B-17 XPathビルディング・アシスタントの起動

「図B-17 XPathビルディング・アシスタントの起動」の説明

5. リストを下へスクロールして、選択する値をダブルクリックします。

6. このプロセスを続けて実行して、式の残りの部分を作成します。

B.6.8 Windows上でXPath関数でディレクトリ・パスにダブル・スラッシュを使用するとエラーが発生する可能性がある

Windowsオペレーティング・システム上では、XPath拡張関数でディレクトリ・パスを表すためにスラッシュを使用すると、次の2通りに解釈されます。

- ダブル・スラッシュの場合。例: file://c:/Ftab.txt

- シングル・スラッシュの場合。例: file:/c:/Ftab.txt

ダブル・スラッシュを指定してエラー・メッセージが表示される場合は、シングル・スラッシュを指定してみてください。

たとえば、次のようにダブル・スラッシュを使用しても機能しません。

oraext:get-content-from-file-function("file://c:/Ftab.txt","file:
//c:/Ftab_1.xsd","root")

しかし、次のようにシングル・スラッシュを使用すると適切に機能します。

oraext:get-content-from-file-function("file:/c:/Ftab.txt","file:
/c:/Ftab_1.xsd","root")

B.7 ユーザー定義XPath拡張関数の作成

Oracle SOA Suiteで使用するためのユーザー定義(カスタム)XPath拡張関数を作成できます。これらの関数は、次のコンポーネントに対して作成できます。

- Oracle BPEL Process Manager

- Oracle Mediator

- XSLTマッパー

- ヒューマン・ワークフロー

- これらのすべてのコンポーネントで共有

Oracle SOA SuiteのXPath拡張関数は、次の標準に従います。

- 単一のスキーマで、システム関数とユーザー定義関数の両方の構成構文を定義します。

- XPath関数は、使用方法(Oracle BPEL Process Manager、Oracle Mediator、ヒューマン・ワークフロー、XSLTマッパーおよびすべてで共通使用)に基づいて分類されます。

- システム関数は、ユーザー定義関数と区別されます。

- リポジトリで、システム関数の構成ファイルとユーザー定義関数の構成ファイルの両方をホストします。

- リポジトリで、ユーザー定義関数の実装JARファイルをホストし、自動的にJava仮想マシン(JVM)(クラス・ローダー)で使用できるようにします。

関数の作成に関する次の規則に従うことをお薦めします。

- 可能な場合は、すべてのコンポーネントで共有できる関数を作成します。すべてのコンポーネントで共有される関数は、ext-soa-xpath-functions-config.xmlという構成ファイルに作成できます。XSLTマッパーの関数は、Oracle BPEL Process Manager、Oracle Mediatorおよびヒューマン・ワークフローの関数と異なる方法で実装する必要があります。
これらの実装の相違点の詳細は、B.7.1項「ユーザー定義XPath拡張関数の実装方法」を参照してください。

- あるコンポーネント用で他のコンポーネントでは使用できない関数(例: Oracle Mediatorまたはヒューマン・ワークフローで使用できないOracle BPEL Process Manager用の関数)を作成する場合は、その関数をそのコンポーネントに固有の構成ファイルに作成します。この例では、Oracle BPEL Process Managerの関数をext-bpel-xpath-functions-config.xmlという構成ファイルに作成する必要があります。

例B-15に、システム関数およびユーザー定義関数で使用される関数スキーマを示します。

例B-15 関数スキーマ

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://xmlns.oracle.com/soa/config/xpath"
targetNamespace="http://xmlns.oracle.com/soa/config/xpath"
elementFormDefault="qualified">
<element name="soa-xpath-functions" type="tns:XpathFunctionsConfig"/>
<element name="function" type="tns:XpathFunction"/>
<complexType name="XpathFunctionsConfig">
<sequence>
<element ref="tns:function" minOccurs="1" maxOccurs="unbounded"/>
</sequence>
<attribute name="resourceBundle" type="string"/>
<attribute name="version" type="string"/>
</complexType>

<complexType name="XpathFunction">
<sequence>
<element name="className" type="string"/>
<element name="return">
<complexType>
<attribute name="type" type="tns:XpathType"
use="required"/>
</complexType>
</element>
<element name="params" type="tns:Params" minOccurs="0"
maxOccurs="1"/>
<element name="desc">
<complexType>
<simpleContent>
<extension base="string">
<attribute name="resourceKey"
type="string"/>
</extension>
</simpleContent>
</complexType>
</element>
<element name="detail" minOccurs="0">
<complexType>
<simpleContent>
<extension base="string">
<attribute name="resourceKey"
type="string"/>
</extension>
</simpleContent>
</complexType>
</element>
<element name="icon" minOccurs="0">
<complexType>
<simpleContent>
<extension base="string">
<attribute name="resourceKey"
type="string"/>
</extension>
</simpleContent>
</complexType>
</element>
<element name="helpURL" minOccurs="0">
<complexType>
<simpleContent>
<extension base="string">
<attribute name="resourceKey"
type="string"/>
</extension>
</simpleContent>
</complexType>
</element>
<element name="group" minOccurs="0">
<complexType>
<simpleContent>
<extension base="string">
<attribute name="resourceKey" type="string"/>
</extension>
</simpleContent>
</complexType>
</element>
<element name="wizardClass" type="string" minOccurs="0"/>
</sequence>
<attribute name="name" type="string" use="required"/>
<attribute name="deprecated" type="boolean" use="optional"/>
</complexType>

<complexType name="Params">
<sequence>
<element name="param" minOccurs="1" maxOccurs="unbounded">
<complexType>
<attribute name="name" type="string" use="required"/>
<attribute name="type" type="tns:XpathType"
use="required"/>
<attribute name="minOccurs" type="string"
default="1"/>
<attribute name="maxOccurs" type="string"
default="1"/>
<attribute name="wizardEnabled" type="boolean"
default="false"/>
</complexType>
</element>
</sequence>
</complexType>
<simpleType name="XpathType">
<restriction base="string">
<enumeration value="string"/>
<enumeration value="boolean"/>
<enumeration value="number"/>
<enumeration value="node-set"/>
<enumeration value="tree"/>
</restriction>
</simpleType>
</schema>

B.7.1 ユーザー定義XPath拡張関数の実装方法

この項では、Oracle SOA Suiteコンポーネントのユーザー定義XPath拡張関数を実装する方法を説明します。

B.7.1.1 XSLTマッパーに対する関数の実装方法

XSLTマッパーのユーザー定義XPath拡張関数の実装は、他のコンポーネントと次のように異なります。

- 各XSLTマッパー関数に、public staticクラスの対応するpublic staticメソッドが必要です。関数名とメソッド名が一致する必要があります。

- XSLTマッパー関数のネームスペースの形式はhttp://www.oracle.com/XSL/Transform/java/mypackage.MyFunctionClassである必要があります。mypackage.MyFunctionClassは、関数のpublic staticメソッドが含まれているpublic staticクラスの完全修飾クラス名です。

XSLTマッパーのユーザー定義XPath拡張関数の作成に関する詳細は、第40.3.4.4項「ユーザー定義関数のインポート」を参照してください。

B.7.1.2 他のすべてのコンポーネントに対する関数の実装方法

Oracle BPEL Process Manager、Oracle Mediatorおよびヒューマン・ワークフローの関数では、oracle.fabric.common.xml.xpath.IXPathFunctionインタフェース(fabric-runtime.jarファイルで定義)またはjavax.xml.xpath.XPathFunctionを実装する必要があります。

他のすべてのコンポーネントに対する関数を実装する手順は、次のとおりです。

1. XPath関数用のoracle.fabric.common.xml.xpath.IXPathFunctionインタフェースを実装します。IXPathFunctionインタフェースには、call(context, args)という1つのメソッドがあります。例B-16に、このメソッドのシグネチャを示します。

例B-16 oracle.fabric.common.xml.xpath.IXPathFunctionの実装

package oracle.fabric.common.xml.xpath;
public interface IXPathFunction
{
/** Call this function.
*
*  @param context The context at the point in the
*         expression when the function is called.
*  @param args List of arguments provided during
*         the call of the function.
*/
public Object call(IXPathContext context, List args) throws
XPathFunctionException;
}

説明:

- context: 関数をコールした時点の式内のコンテキスト。

- args: 関数のコール時に指定する引数のリスト。

例B-17に示す例では、w3c nodeの値を取得するgetNodeValue(arg1)という関数が実装されます。

例B-17 getNodeValue(arg1)関数の実装

package com.collaxa.cube.xml.xpath.dom.functions;
import oracle.fabric.common.xml.xpath.IXPathFunction;
import oracle.fabric.common.xml.xpath.IXPathFunction
. . .

public class GetNodeValue implements IXPathFunction {
Object call(IXPathContext context, List args) throws XPathFunctionException
{
org.w3c.dom.Node node = (org.w3c.dom.Node) args.get(0);
return node.getNodeValue()
}
}

B.7.2 ユーザー定義XPath拡張関数の構成方法

この項では、ユーザー定義XPath拡張関数の構成方法について説明します。

ユーザー定義XPath拡張関数を構成する手順は、次のとおりです。

1. 関数を定義するXPath拡張構成ファイルを作成します。例B-18に、B.7項「ユーザー定義XPath拡張関数の作成」の例B-15で示した関数スキーマに基づくサンプル構成ファイルを示します。この例では、mf:myFunction1とmf:myFunction2の2つの関数が作成されます。

例B-18 XML拡張構成ファイルのサンプル

<?xml version="1.0" encoding="UTF-8"?>
<soa-xpath-functions resourceBundle="myPackage.myResourceBundle"
xmlns="http://xmlns.oracle.com/soa/config/xpath"
xmlns:mf="http://www.my-functions.com">
<function name="mf:myFunction1">
<className>myPackage.myFunctionClass1</className>
<return type="node-set"/>
<params>
<param name="p1" type="node-set" wizardEnabled="true"/>
<param name="p2" type="string"/>
<param name="p3" type="number" minOccurs="0"/>
<param name="p4" type="boolean" minOccurs="0"  maxOccurs="3"/>
</params>
<desc resourceKey="func1-desc-key">this is my first function</desc>
<detail resourceKey="func2-long-desc-key">my first function does ... </detail>
<icon>myPackage/resource/image/myFunction1.png</icon>
<group resourceKey="func-group-key">My Function Group</group>
<wizardClass>myPackage.myWizardClass1</wizardClass>
</function>
<function name="mf:myFunction2">
<className>myPackage.myFunctionClass2</className>
<return type="string"/>
<params>
<param name="p1" type="node-set" wizardEnabled="true"/>
<param name="p2" type="string"/>
<param name="p3" type="number" minOccurs="0"/>
<param name="p4" type="boolean" minOccurs="0"  maxOccurs="unbounded"/>
</params>
<desc resourceKey="func2-desc-key">this is my second function</desc>
<detail resourceKey="func2-long-desc-key">my second function does ...</detail>
<icon>myPackage/resource/image/myFunction2.png</icon>
<group resourceKey="func-group-key">My Function Group</group>
<wizardClass>myPackage.myWizardClass2</wizardClass>
</function>
</soa-xpath-functions>

表B-3に、構成ファイルの要素を示します。各関数の構成ファイルで、そのルート要素としてsoa-xpath-functionsが使用されます。ルート要素にはオプションのresourceBundle属性があります。resourceBundleの値は、すべての関数構成に対するNational Language Support (NLS)を提供するリソース・バンドル・クラスの完全修飾クラス名です。

表B-3 関数スキーマの要素

要素

説明

className

関数実装クラスの完全修飾クラス名。

return

関数の戻り型。XPathおよびXSLTでサポートされているstring、number、boolean、ノードセットおよびtreeのいずれかを指定できます。

params

関数のパラメータ。関数にはパラメータがない場合があります。パラメータには次の属性があります。

- name: パラメータの名前。

- type: パラメータのタイプ。XPathおよびXSLTでサポートされているstring、number、boolean、ノードセットおよびtreeのいずれかを指定できます。

- minOccurs: パラメータの最少繰返し数。0に設定した場合、パラメータはオプションです。1に設定した場合は必須です。現在の制限では、この属性に指定できる値は0または1のみで、オプションのパラメータは必須パラメータの後に定義する必要があります。この属性を指定しない場合、デフォルト値は1です。

- maxOccurs: パラメータの最大繰返し数。unboundedに設定した場合、パラメータの繰返し数に制限はありません。このパラメータにより、無制限のパラメータを使用する可能性がある、XPath 1.0関数のconcat()などの関数をサポートできます。現在の制限では、関数の最終パラメータ以外のパラメータには、maxOccursに1より大きい値またはunboundedを指定できません。この属性を指定しない場合、デフォルト値は1です。

- wizardEnabled: パラメータ値の入力にウィザードを使用可能にするかどうかを示します。この指定によって、パラメータ値を入力する必要があるユーザー・インタフェースがサポートされます。trueに設定すると、パラメータ値のフィールドの横にウィザード起動ボタンが表示されます。ウィザード起動ボタンを押すと、ユーザーがパラメータ値を簡単に入力できるポップアップ・ウィザードが起動されます。ウィザード・クラスを後で指定する必要があります。この属性を指定しない場合のデフォルト値はfalseで、デフォルトでは、パラメータに関するウィザードのサポートはありません。

desc

関数の説明(オプション)。resourceKeyを指定した場合、説明はルート要素で前に指定したリソース・バンドルから取得されます。

detail

関数の長い(詳細な)説明(オプション)。resourceKeyを指定した場合、説明はルート要素で前に指定したリソース・バンドルから取得されます。

icon

関数のアイコンのURL(オプション)。resourceKeyを指定した場合、アイコンのURLはルート要素で前に指定したリソース・バンドルから取得されます。関数を表示する必要があるユーザー・インタフェースをサポートするための要素です。

helpURL

関数のヘルプHTMLのURL(オプション)。resourceKeyを指定した場合、ヘルプのURLはルート要素で前に指定したリソース・バンドルから取得されます。関数のヘルプ・リンクを表示する必要があるユーザー・インタフェースをサポートするための要素です。

group

関数のグループ名(オプション)。resourceKeyを指定した場合、グループ名はルート要素で前に指定したリソース・バンドルから取得されます。関数をグループ化する必要があるユーザー・インタフェースをサポートするための要素です。グループ名を指定しない場合、関数は、ユーザー・インタフェースでグループ化される際に組込みの拡張関数に分類されます。

wizardClass

ウィザードを使用可能にしたすべてのパラメータに対するウィザード・クラスの完全修飾クラス名。パラメータ値を入力する必要があるユーザー・インタフェースをサポートするための要素です。このウィザード・クラスは、ウィザード起動ボタンを押すと起動され、ユーザーがパラメータ値を簡単に入力できるようにします。ウィザードを使用可能にするパラメータを指定していない場合、この要素は指定しないでください。

注意: この要素は、ユーザー定義関数ではサポートされていません。この機能を現在サポートしているのはシステム関数のみです。

2. 関数を使用するコンポーネント・タイプに基づいて、ユーザー定義のXPath拡張構成ファイルの名前を指定します。表B-4に、ユーザー定義構成ファイルに使用するネーミング規則を示します。

表B-4 ユーザー定義構成ファイル

関数を使用するコンポーネント

使用する構成ファイル名

Oracle BPEL Process Manager

ext-bpel-xpath-functions-config.xml

Oracle Mediator

ext-mediator-xpath-functions-config.xml

XSLTマッパー

ext-mapper-xpath-functions-config.xml

ヒューマン・ワークフロー

ext-wf-xpath-functions-config.xml

すべてのコンポーネント

ext-soa-xpath-functions-config.xml

3. 構成ファイルをコンパイル済クラスとともにJARファイル内に配置します。JARファイル内で、構成ファイルはMETA-INFディレクトリに格納される必要があります。JARファイルは特定のディレクトリに存在する必要はありません。

注意:

customXpathFunction JARは、SOAコンポジットの一部ではないため、明示的に追加する必要があります。

4. Oracle JDeveloperで、「ツール」→「プリファレンス」→「SOA」の順に選択します。

5. 「追加」ボタンをクリックし、JARファイルを選択します。

6. 変更を有効にするためにOracle JDeveloperを再起動します。
JARファイルがJVMのクラスパスに自動的に追加され、使用可能になります。

B.7.3 ユーザー定義関数のランタイムへのデプロイ方法

カスタムのJARファイルとクラスを追加するために、soa/modules/oracle.soa.ext_11.1.1ディレクトリが用意されています。詳細は、第14.3項「カスタム・クラスとJARファイルの追加」を参照してください。

C デプロイメント・ディスクリプタのプロパティ

この付録では、Oracle WebLogic Server、Oracle Enterprise Manager、またはその両方で実行時に使用されるBPELプロセス・サービス・コンポーネントのデプロイメント・ディスクリプタ構成およびパートナ・リンク・プロパティを定義する方法について説明します。

項目は次のとおりです。

- C.1項「デプロイメント・ディスクリプタのプロパティの概要」

- C.2項「非推奨の10.1.3プロパティ」

注意:

デプロイメント・ディスクリプタのプロパティを実行時に指定することはできません。

デプロイメント・ディスクリプタのプロパティの詳細は、『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』の「Oracle BPEL Process Managerのパフォーマンス・チューニング」の章を参照してください。

C.1 デプロイメント・ディスクリプタのプロパティの概要

デプロイメント・ディスクリプタは、Oracle WebLogic ServerまたはOracle Enterprise Manager(あるいはその両方)で実行時に使用されるBPELプロセス・サービス・コンポーネントのプロパティです。プロパティには、次の2種類があります。

- 構成

- パートナ・リンク・バインディング

表C-1は、構成のデプロイメント・ディスクリプタのプロパティを示しています。

構成プロパティを定義する場合は、プロパティ名にbpel.configの接頭辞を追加する必要があります。たとえば、inMemoryOptimizationプロパティは、bpel.config.inMemoryOptimizationとして定義する必要があります。Oracle JDeveloperのプロパティ・インスペクタでプロパティを定義する方法については、項C.1.1「プロパティ・インスペクタでデプロイメント・ディスクリプタのプロパティを定義する方法」を参照してください。

表C-1 configurationsデプロイメント・ディスクリプタのプロパティ

プロパティ名

説明

completionPersistPolicy

このプロパティは、インスタンス・データの保存方法を構成します。BPELサービス・コンポーネント・レベルでのみ設定できます。使用可能な値は、次のとおりです。

- on(デフォルト): 終了したインスタンスは通常どおり保存されます。

- deferred: 終了したインスタンスは保存されますが、異なるスレッドを使用して別のトランザクションで保存されます。

- faulted: 失敗したインスタンスのみ保存されます。
注意: 未処理のフォルトが発生した場合は、これらのフラグに関係なく、インスタンスの監査情報がcube_instance表に保持されます。

- off: このプロセスのインスタンスは保存されません。

disableAsserts

このプロパティをtrueに設定すると、BPELプロジェクトでアサーションが無効になります。

globalTxMaxRetry

非同期BPELプロセスでアウトバウンド・アダプタを使用している場合は、リモート・フォルトに対する最大再試行回数を指定します。

globalTxRetryInterval

非同期BPELプロセスでアウトバウンド・アダプタを使用している場合は、リモート・フォルトに対する再試行間隔(ミリ秒単位)を指定します。

inMemoryOptimization

デフォルト値はfalseです。このプロパティをtrueに設定できるのは、デハイドレーション・ポイントがない場合のみです。wait、receive、onMessage、onAlarmなどのアクティビティでは、プロセス内にデハイドレーション・ポイントが作成されます。このプロパティをtrueに設定すると、to-spec問合せ時にこのプロセスのインスタンスに対するメモリー内最適化が試行されます。

keepGlobalVariables

インスタンスの完了後に、サーバーがグローバル変数値をインスタンス・ストアに保持できるかどうかを指定します。

- false(デフォルト): インスタンスが完了すると、グローバル変数値は削除されます。

- true: グローバル変数値は削除されません。

oneWayDeliveryPolicy

このプロパティは、プロセスの永続ポリシーを配信レイヤーに設定します。可能な値は次のとおりです。

- async.persist: メッセージはデータベースに保存されます。この設定の場合、信頼性は確保されますが、データベースのパフォーマンスに多少の影響が出ます。システムの全体的なパフォーマンスに影響が出ることもあります。

- async.cache: 受信した配信メッセージはメモリー内キャッシュにのみ保存されます。信頼性よりパフォーマンスを優先する場合は、この設定を検討してください。async.cacheに設定すると、一方向メッセージの到着頻度が配信の頻度よりかなり高い場合や、サーバー障害が発生した場合には、メッセージが失われる可能性があります。また、システムが過負荷の状態になり(メッセージがスケジュール済キューにたまり)、メモリー不足エラーが発生することもあります。各自のユースケース・シナリオを検討し、この設定が適切かどうかを判断してください。
高可用性環境でoneWayDeliveryPolicyをasync.cacheに設定すると、サーバー・クラッシュ発生時に実行途中の起動メッセージおよびコールバック・メッセージが失われたり、重複したりすることがあります。async.cacheに対しては、サーバーのフェイルオーバーはサポートされていません。詳細は、『Oracle Fusion Middleware高可用性ガイド』のOracle BPEL Process Managerの高可用性アーキテクチャとフェイルオーバーに関する考慮事項に関する項を参照してください。

- sync: 同じスレッドで直接起動が発生します。呼出しキューのメッセージのスケジューリングはバイパスされ、BPELインスタンスが同期的に呼び出されます。この設定は、データベースのパフォーマンスに影響を与えることがあります。

BPELプロセスを作成するときのこのプロパティの設定の詳細は、第4.1.1項「BPELプロセス・サービス・コンポーネントの追加方法」を参照してください。

詳細は、『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』のBPELに対するデータベース永続性のチューニングに関する項を参照してください。

reenableAggregationOnComplete

このプロパティは、メッセージをルーティングするために作成して使用するインスタンス数を制御します。可能な値は次のとおりです。

- true: 同じ相関のメッセージを処理する新規インスタンスが作成されます。

- false: メッセージを処理するインスタンスが1つのみ作成されます。

詳細は、第9.2項「同じインスタンスへのメッセージのルーティング」を参照してください。

sensorActionLocation

センサー・アクションXMLファイルの場所。センサー・アクションXMLファイルには、イベントに対するアクション・ルールが構成されています。

sensorLocation

センサーXMLファイルの場所。センサーXMLファイルは、イベントが記録されるセンサーのリストを定義したものです。

transaction

このプロパティは、コールを開始するBPELインスタンスのトランザクション動作を構成します。

- requiresNew: 新規トランザクションが実行のために作成され、既存のトランザクションがある場合はそのトランザクションが一時停止されます。この動作は、リクエスト/レスポンス(開始)環境、およびbpel.config.oneWayDeliveryPolicyがsyncに設定されている一方向開始環境の両方に適用されます。

- required: リクエスト/レスポンス(開始)環境では、この設定によって、トランザクションがある場合はコール元トランザクションが結合され、トランザクションがない場合は新規トランザクションが作成されます。bpel.config.oneWayDeliveryPolicyがsyncに設定されている一方向開始環境では、起動メッセージは、同じトランザクションの同一スレッドを使用して処理されます。

注意: このプロパティは、中間プロセスのreceiveアクティビティには適用されません。この場合は、別のトランザクションの別のスレッドを使用してメッセージが処理されます。これは、相関が必要であり、常に非同期で処理されるためです。

BPELプロセスを作成するときのこのプロパティの設定の詳細は、第4.1.1項「BPELプロセス・サービス・コンポーネントの追加方法」を参照してください。

表C-2は、パートナ・リンク・バインディングのデプロイメント・ディスクリプタのプロパティを示しています。

パートナ・リンク・バインディング・プロパティを定義する場合は、プロパティ名にbpel.partnerLink.partner_link_nameの接頭辞を追加する必要があります。たとえば、nonBlockingInvokeプロパティは、bpel.partnerLink.partner_link_name.nonBlockingInvokeとして定義する必要があります。Oracle JDeveloperのプロパティ・インスペクタでプロパティを定義する方法については、項C.1.1「プロパティ・インスペクタでデプロイメント・ディスクリプタのプロパティを定義する方法」を参照してください。

表C-2 partnerLinkBindingデプロイメント・ディスクリプタのプロパティ

プロパティ名

説明

idempotent

idempotentアクティビティとは、再試行可能なアクティビティ(assignアクティビティやinvokeアクティビティなど)です。非idempotentアクティビティの後にインスタンスが保存されます。このプロパティは、永続プロセスと一時プロセスの両方に適用されます。

- true (デフォルト): サーバーに障害が発生した場合、再起動後にアクティビティが再度実行されます。これは、アクティビティの呼出し直後にサーバーがデハイドレーションされず、アクティビティの実行が記録されていないためです。

- false: アクティビティは実行直後にデハイドレーションされ、デハイドレーション・ストアに記録されます。idempotentをfalseに設定すると、フェイルオーバーによる保護は強化されますが、BPELプロセスがデハイドレーション・ストアに頻繁にアクセスする場合はパフォーマンスに影響が出ることがあります。
idempotentプロパティをfalseに設定した場合のフォルト処理の使用方法の詳細は、第12.10.6項「idempotentプロパティとフォルト処理に関する注意事項」を参照してください。

idempotentプロパティの詳細は、第8.4項「パートナ・リンク操作レベルでの冪等性の管理」を参照してください。

nonBlockingInvoke

デフォルト値はfalseです。trueに設定されている場合は、独立したスレッドを生成して起動を行うため、invokeアクティビティによってインスタンスがブロックされることはありません。

詳細は、第10.1.1項「シングル・スレッドでのフローのブランチのパラレル実行に関する注意事項」を参照してください。

validateXML

メッセージの境界の検証を有効化します。trueに設定すると、このパートナ・リンクに対するreceiveアクティビティおよびinvokeアクティビティ中に、XMLメッセージがXMLスキーマと照合して検証されます。XMLメッセージが無効な場合は、bpelx:invalidVariables実行時フォルトがスローされます。これによって、ドメイン・レベルのvalidateXMLプロパティが上書きされます。次の例では、StarLoanServiceパートナのみの検証が可能です。

<partnerLinkBinding name="StarLoanService">
<property name="wsdlLocation">
http://<hostname>:9700/orabpel/default/StarLoan/Sta
rLoan?wsdl</property>
<property name="validateXML">true</property>
</partnerLinkBinding>

C.1.1 プロパティ・インスペクタでデプロイメント・ディスクリプタのプロパティを定義する方法

構成およびパートナ・リンク・バインディングのデプロイメント・ディスクリプタのプロパティと値は、Oracle JDeveloperのプロパティ・インスペクタで定義します。完了すると、composite.xmlファイルのBPELプロセス・サービス・コンポーネント・セクションにプロパティが表示されます。

1. SOAコンポジット・エディタで、図C-1に示すように、BPELプロセス・サービス・コンポーネントを選択します。

図C-1 選択されたBPELプロセス・サービス・コンポーネント

「図C-1 選択されたBPELプロセス・サービス・コンポーネント」の説明

2. Oracle JDeveloperの右下の隅にある「プロパティ・インスペクタ」に移動します。「プロパティ・インスペクタ」が表示されない場合は、「表示」メイン・メニューから「プロパティ・インスペクタ」を選択します。

3. 図C-2に示すように、「プロパティ」セクションで「追加」アイコンをクリックします。
この例では、BPELプロセスの作成時に「BPELプロセスの作成」ダイアログで「配信」オプションが選択されていたため、oneWayDeliveryPolicyプロパティがすでに定義されています。BPELプロセスを作成するときのこのプロパティの設定の詳細は、第4.1.1項「BPELプロセス・サービス・コンポーネントの追加方法」を参照してください。

図C-2 プロパティ・インスペクタ

「図C-2 プロパティ・インスペクタ」の説明

「プロパティの作成」ダイアログが表示されます。

4. 「名前」フィールドに、デプロイメント・ディスクリプタのプロパティを入力します。この例では、構成のデプロイメント・ディスクリプタのプロパティinMemoryOptimizationが定義されています。そのため、bpel.configの接頭辞が必要です。構成のデプロイメント・ディスクリプタのプロパティの詳細は、表C-1を参照してください。
そのかわりにパートナ・リンク・バインディング・プロパティを追加する場合は、bpel.partnerLink.partner_link_nameの接頭辞が必要です(partner_link_nameはパートナ・リンクの名前です。例: LoanService)。パートナ・リンク・バインディングのデプロイメント・ディスクリプタのプロパティの詳細は、表C-2を参照してください。

5. 「値」フィールドに、このプロパティに適用可能な値(たとえばtrue)を入力します。
図C-3は、完成した「プロパティの作成」ダイアログを示しています。

図C-3 「プロパティの作成」ダイアログ

「図C-3 「プロパティの作成」ダイアログ」の説明

6. 「OK」をクリックします。
プロパティ・インスペクタに、追加されたデプロイメント・ディスクリプタのプロパティが表示されます。

図C-4 プロパティ・インスペクタのデプロイメント・ディスクリプタのプロパティ

「図C-4 プロパティ・インスペクタのデプロイメント・ディスクリプタのプロパティ」の説明

7. SOAコンポジット・エディタで「ソース」をクリックします。
例C-1に示すように、composite.xmlファイル内にbpel.configの接頭辞が付いたinMemoryOptimization構成プロパティが表示されます。

例C-1 composite.xmlの構成プロパティ定義

<component name="LoanApproval" version="1.1">
<implementation.bpel src="LoanApproval.bpel"/>
<property name="bpel.config.oneWayDeliveryPolicy" type="xs:string"
many="false">async.persist</property>
<property name="bpel.config.inMemoryOptimization" type="xs:string"
many="false" override="may">true</property>
</component>

プロパティ・インスペクタで、かわりにパートナ・リンク・バインディングのデプロイメント・ディスクリプタのプロパティ(たとえば、nonBlockingInvokeパートナ・リンク・バインディング・プロパティ)を定義した場合は、例C-2に示すように、composite.xmlファイル内に表示されます。接頭辞が、このタイプのプロパティに必要なbpel.partnerLink.partner_link_nameであることに注目してください。

例C-2 composite.xmlのパートナ・リンク・バインディング・プロパティの定義

...
<component name="myBPELServiceComponent">
....
<property name="bpel.partnerLink.partner_link_name.
nonBlockingInvoke">false</property>
</component>

C.1.2 BPELプロセス内でのプリファレンス値の取得方法

プロパティの値は、XPath拡張関数ora:getPreference(myPref)を使用してBPELプロセスで読み取ることができます。これによって、bpel.preference.myPrefの値を取得します。

この関数は、単純なassign文の一部として、または条件式の中で、あるいはより複雑なXPath式の一部として使用できます。

C.2 非推奨の10.1.3プロパティ

表C-3に、今後使用できなくなる非推奨プロパティを示します。

表C-3 非推奨プロパティ

プロパティ

デプロイメント・ディスクリプタ・タイプ

非推奨となったリリース

completionPersistLevel

configurations

11g リリース1

defaultInput

configurations

11g リリース1

initializeVariables

configurations

11g リリース1

loadSchema

configurations

11g リリース1

noAlterWSDL

configurations

11g リリース1

optimizeVariableCopy

configurations

11g リリース1

relaxTypeChecking

configurations

11g リリース1

relaxXPathQName

configurations

11g リリース1

transaction

configurations

10.1.3.4

SLACompletionTime

configurations

11g リリース1

xpathValidation

configurations

11g リリース1

user

configurations

11g リリース1

pw

configurations

11g リリース1

role

configurations

11g リリース1

correlation

partnerLinkBinding

11g リリース1

contentType

partnerLinkBinding

10.1.3

retryInterval

partnerLinkBinding

10.1.3.3のフォルト・ポリシー機能で非推奨

retryMaxCount

partnerLinkBinding

10.1.3.3のフォルト・ポリシー機能で非推奨

wsdlLocation

partnerLinkBinding

11g リリース1

wsdlRuntimeLocation

partnerLinkBinding

11g リリース1

wsseHeaders

partnerLinkBinding

11g リリース1

wsseUsername

partnerLinkBinding

11g リリース1

wssePassword

partnerLinkBinding

11g リリース1

preferredPort

partnerLinkBinding

11g リリース1

fullWSAddressing

partnerLinkBinding

11g リリース1

D センサー・パブリック・ビューとセンサー・アクションXSDの理解

この付録では、利用可能なセンサー・パブリック・ビュー、およびOracle BPEL Designerにインポート可能なセンサー・アクションXSDファイルについて説明します。

項目は次のとおりです。

- D.1項「センサー・パブリック・ビューとセンサー・アクションXSDファイルの概要」

- D.2項「センサー・パブリック・ビュー」

- D.3項「センサー・アクションXSDファイル」

詳細は、第18章「Oracle BPEL Process Managerセンサーの使用」を参照してください。

D.1 センサー・パブリック・ビューとセンサー・アクションXSDファイルの概要

データを使用する任意のアプリケーションからセンサー値へのSQLアクセスを実行できるように、一連のパブリック・ビューが公開されています。また、Oracle BPELデザイナへのインポート用に、サンプルのセンサー・アクション・スキーマが用意されています。

D.2 センサー・パブリック・ビュー

Oracle BPEL Process Managerのセンサー・フレームワークには、BPELインスタンスの処理によって生成されたセンサー値を、Oracle BPEL Process Managerのデハイドレーション・ストアに保存されたリレーショナル・スキーマに保持する機能があります。データは、Oracle Enterprise Manager Fusion Middleware Controlでプロセス・インスタンスのセンサー値を表示するために使用されます。

D.2.1 BPMスキーマ

データベース・パブリッシャは、データベースで事前定義されたリレーショナル・スキーマにセンサー・データを保持します。次のパブリック・ビューをクライアント(Oracle Warehouse、ポータルなど)から使用して、センサー値をSQLで問い合せることができます。

注意:

表D-1から表D-4で、「索引付きまたは一意」列には、一意の索引名と属性の順序が表示されます。たとえば「U1,2」は、その属性が「U1」という名前の一意の索引の2番目であることを示します。「PK」は主キーであることを表します。

D.2.1.1 BPEL_PROCESS_INSTANCES

表D-1には、Oracle BPEL Process Managerのすべてのプロセス・インスタンスの概要が含まれます。

表D-1 BPEL_PROCESS_INSTANCESビュー

属性名

SQL型

属性サイズ

索引付きまたは一意

NULL可

コメント

INSTANCE_KEY

NUMBER

--

PK

n

一意のインスタンスID

APPLICATION_NAME

VARCHAR2

500

--

n

ユーザー定義のアプリケーション名

COMPOSITE_NAME

VARCHAR2

500

--

n

ユーザー定義のコンポジット名

REVISION

VARCHAR2

50

--

n

ユーザー定義のリビジョン番号

LABEL

VARCHAR2

500

--

n

ユーザー定義のラベル

COMPONENT_NAME

VARCHAR2

500

--

n

ユーザー定義のコンポーネント名

TITLE

NVARCHAR2

200

--

y

BPELプロセスのユーザー定義タイトル

STATE

NUMBER

--

--

y

BPELプロセス・インスタンスの状態

STATE_TEXT

VARCHAR2

21

--

y

状態属性のテキスト表現

PRIORITY

NUMBER

--

--

y

BPELプロセス・インスタンスのユーザー定義の優先度

STATUS

NVARCHAR2

200

--

y

BPELプロセスのユーザー定義のステータス

STAGE

VARCHAR2

100

--

y

BPELプロセスのユーザー定義のステージ・プロパティ

CONVERSATION_ID

VARCHAR2

256

--

y

BPELプロセスのユーザー定義の対話ID

CREATION_DATE

TIMESTAMP

6

--

n

プロセス・インスタンス作成のタイムスタンプ

MODIFY_DATE

TIMESTAMP

6

--

y

プロセス・インスタンス変更のタイムスタンプ

TS_DATE

DATE

--

--

y

modify_dateの日付部分

TS_HOUR

NUMBER

--

--

y

modify_dateの時間部分

EVAL_TIME

NUMBER

--

--

y

プロセス・インスタンスの評価時間(ミリ秒)

D.2.1.2 BPEL_ACTIVITY_SENSOR_VALUES

表D-2には、監視しているBPELプロセスのすべてのアクティビティ・センサー値が含まれます。

表D-2 BPEL_ACTIVITY_SENSOR_VALUESビュー

属性名

SQL型

属性サイズ

索引付きまたは一意

NULL可

コメント

SENSOR_NAME

NVARCHAR2

200

U1,2

n

起動されたセンサーの名前

SENSOR_TARGET

NVARCHAR2

512

--

n

起動されたセンサーのターゲット

ACTION_NAME

NVARCHAR2

200

U1,3

n

センサー・アクションの名前

ACTION_FILTER

NVARCHAR2

512

--

y

アクションのフィルタ

CREATION_DATE

TIMESTAMP

6

--

n

アクティビティ・センサー値の作成日時

MODIFY_DATE

TIMESTAMP

6

--

y

最終変更のタイムスタンプ

TS_DATE

DATE

--

--

y

modify_dateの日付部分

TS_HOUR

NUMBER

--

--

y

modify_dateの時間部分

CRITERIA_SATISFIED

VARCHAR2

1

--

y

NULL、YまたはN

ACTIVITY_NAME

NVARCHAR2

200

--

n

BPELアクティビティの名前

ACTIVITY_TYPE

VARCHAR2

30

--

n

BPELアクティビティのタイプ

ACTIVITY_STATE

VARCHAR2

30

--

y

BPELアクティビティの状態

EVAL_POINT

VARCHAR2

30

--

n

アクティビティ・センサーの評価ポイント

ERROR_MESSAGE

NCLOB

--

--

y

エラー・メッセージ

RETRY_COUNT

NUMBER

--

--

y

アクティビティの再試行回数

EVAL_TIME

NUMBER

--

--

y

アクティビティの評価時間(ミリ秒)

ID

NUMBER

--

PK

n

一意のID

INSTANCE_KEY

NUMBER

--

U1,1

n

BPELプロセスID

APPLICATION_NAME

VARCHAR2

500

--

n

ユーザー定義のアプリケーション名

COMPOSITE_NAME

VARCHAR2

500

--

n

ユーザー定義のコンポジット名

REVISION

VARCHAR2

50

--

n

ユーザー定義のリビジョン番号

LABEL

VARCHAR2

500

--

n

ユーザー定義のラベル

COMPONENT_NAME

VARCHAR2

500

--

n

ユーザー定義のコンポーネント名

D.2.1.3 BPEL_FAULT_SENSOR_VALUES

表D-3には、すべてのフォルト・センサー値が含まれます。

表D-3 BPEL_FAULT_SENSOR_VALUESビュー

属性名

SQL型

属性サイズ

索引付きまたは一意

NULL可

コメント

ID

NUMBER

--

PK

n

一意のID

INSTANCE_KEY

NUMBER

--

U1,1

n

BPELプロセスID

APPLICATION_NAME

VARCHAR2

500

--

n

ユーザー定義のアプリケーション名

COMPOSITE_NAME

VARCHAR2

500

--

n

ユーザー定義のコンポジット名

REVISION

VARCHAR2

50

--

n

ユーザー定義のリビジョン番号

LABEL

VARCHAR2

500

--

n

ユーザー定義のラベル

COMPONENT_NAME

VARCHAR2

500

--

n

ユーザー定義のコンポーネント名

SENSOR_NAME

NVARCHAR2

200

U1,2

n

起動されたセンサーの名前

SENSOR_TARGET

NVARCHAR2

512

--

n

起動されたセンサーのターゲット

ACTION_NAME

NVARCHAR2

200

U1,3

n

センサー・アクションの名前

ACTION_FILTER

NVARCHAR2

512

--

y

アクションのフィルタ

CREATION_DATE

TIMESTAMP

6

--

n

アクティビティ・センサー値の作成日時

MODIFY_DATE

TIMESTAMP

6

--

y

最終変更のタイムスタンプ

TS_DATE

DATE

--

--

y

modify_dateの日付部分

TS_HOUR

NUMBER

--

--

y

modify_dateの時間部分

CRITERIA_SATISFIED

VARCHAR2

1

--

y

NULL(アクション・フィルタの指定なし)、Y(アクション・フィルタが指定されており、評価がtrue)、N(それ以外)

ACTIVITY_NAME

NVARCHAR2

200

--

n

BPELアクティビティの名前

ACTIVITY_TYPE

VARCHAR2

30

--

n

BPELアクティビティのタイプ

MESSAGE

CLOB

--

--

y

フォルト・メッセージ

D.2.1.4 BPEL_VARIABLE_SENSOR_VALUES

表D-4には、すべての変数センサー値が含まれます。

表D-4 BPEL_VARIABLE_SENSOR_VALUESビュー

属性名

SQL型

属性サイズ

索引付きまたは一意

NULL可

コメント

ID

NUMBER

--

PK

n

一意のID

INSTANCE_KEY

NUMBER

--

U1,1

n

BPELプロセスID

APPLICATION_NAME

VARCHAR2

500

--

n

ユーザー定義のアプリケーション名

COMPOSITE_NAME

VARCHAR2

500

--

n

ユーザー定義のコンポジット名

REVISION

VARCHAR2

50

--

n

ユーザー定義のリビジョン番号

LABEL

VARCHAR2

500

--

n

ユーザー定義のラベル

COMPONENT_NAME

VARCHAR2

500

--

n

ユーザー定義のコンポーネント名

SENSOR_NAME

NVARCHAR2

200

U1,2

n

起動されたセンサーの名前

SENSOR_TARGET

NVARCHAR2

512

--

n

センサーのターゲット

ACTION_NAME

NVARCHAR2

200

U1,3

n

アクションの名前

ACTION_FILTER

NVARCHAR2

512

--

y

アクションのフィルタ

ACTIVITY_SENSOR

NUMBER

--

--

y

対応するアクティビティ・センサー値のID

CREATION_DATE

TIMESTAMP

6

--

n

作成日時

TS_DATE

DATE

--

--

n

creation_dateの日付部分

TS_HOUR

NUMBER

--

--

n

creation_dateの時間部分

VARIABLE_NAME

NVARCHAR2

512

--

n

BPEL変数の名前

EVAL_POINT

VARCHAR2

30

--

y

対応するアクティビティ・センサーの評価ポイント

CRITERIA_SATISFIED

VARCHAR2

1

--

y

NULL、YまたはN

TARGET

NVARCHAR2

512

--

--

--

UPDATER_NAME

NVARCHAR2

200

--

n

変数を更新したアクティビティまたはイベントの名前

UPDATER_TYPE

NVARCHAR2

200

--

n

BPELアクティビティまたはイベントのタイプ

SCHEMA_NAMESPACE

NVARCHAR2

512

--

y

変数センサー値のネームスペース

SCHEMA_DATATYPE

NVARCHAR2

512

--

y

変数センサー値のデータ型

VALUE_TYPE

NUMBER

--

--

n

変数の値の型(java.sql.Typesの値に対応)

VARCHAR2_VALUE

NVARCHAR2

4000

--

y

文字列形式の変数の値

NUMBER_VALUE

NUMBER

--

--

y

DATE_VALUE

TIMESTAMP

6

--

y

ユーザー定義の日付

DATE_VALUE_TZ

VARCHAR2

10

--

y

ユーザー定義のタイムゾーン

BLOB_VALUE

BLOB

--

--

y

CLOB_VALUE

CLOB

--

--

y

D.3 センサー・アクションXSDファイル

例D-1に、Oracle BPELデザイナにインポート可能なセンサー・アクション・スキーマのサンプルを示します。このスキーマは、カスタム・データ・パブリッシャにも関連します。

例D-1 センサー・アクション・スキーマのサンプル

<?xml version="1.0" encoding="utf-8"?>
<!--
This schema contains the sensor definition. Sensors monitor data
and execute callbacks appropriately.
-->
<xsd:schema blockDefault="#all" elementFormDefault="qualified"
targetNamespace="http://xmlns.oracle.com/bpel/sensor"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://xmlns.oracle.com/bpel/sensor">

<xsd:simpleType name="tSensorActionPublishType">
<xsd:annotation>
<xsd:documentation>
This enumeration lists the possibe publishing types for probes.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="BpelReportsSchema"/>
<xsd:enumeration value="JMSQueue"/>
<xsd:enumeration value="JMSTopic"/>
<xsd:enumeration value="Custom"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:complexType name="tSensorActionProperty">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="name" use="required" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>

<!--
Attributes of a sensor action
-->
<xsd:attributeGroup name="tSensorActionAttributes">
<xsd:attribute name="name" type="xsd:string" use="optional"/>
<xsd:attribute name="enabled" type="xsd:boolean" use="optional"
default="true"/>    <xsd:attribute name="filter" type="xsd:string"/>
<xsd:attribute name="publishName" type="xsd:string" use="required"/>
<xsd:attribute name="publishType" type="tns:tSensorActionPublishType"
use="required"/>
<!--
the name of the JMS Queue/Topic or custom java API, ignored for other
publishTypes
-->
<xsd:attribute name="publishTarget" type="xsd:string" use="optional"/>
</xsd:attributeGroup>

<!--
The sensor action type. A sensor action consists:
+ unique name
+ effective date
+ expiration date - Optional. If not defined, the probe is active
indefinitely.
+ filter (to potentially suppress data publishing even if a sensor marks
it as interesting). - Optional. If not defined, no filter is
used.
+ publishName A name of a publisher
+ publishType What to do with the sensor data?
+ publishTarget Name of a JMS Queue/Topic or custom publisher.
+ potentially many sensors.
-->
<xsd:complexType name="tSensorAction">
<xsd:sequence>
<xsd:element name="sensorName" type="xsd:string" minOccurs="1"
maxOccurs="unbounded"/>
<xsd:element name="property" minOccurs="0" maxOccurs="unbounded"
type="tns:tSensorActionProperty"/>
</xsd:sequence>
<xsd:attributeGroup ref="tns:tSensorActionAttributes"/>
</xsd:complexType>

<!--
define a listing of sensor actions in a single document. It might be a good
idea  to
have one sensor action list per business process.
-->
<xsd:complexType name="tSensorActionList">
<xsd:sequence>
<xsd:element name="action" type="tns:tSensorAction" minOccurs="0"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>

<xsd:simpleType name="tSensorKind">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="fault"/>
<xsd:enumeration value="variable"/>
<xsd:enumeration value="activity"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:complexType name="tActivityConfig">
<xsd:annotation>
<xsd:documentation>
The configuration part of an activity sensor comprises of a mandatory
'evalTime' attribute
and an optional list of variable configurations
</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="tns:tSensorConfig">
<xsd:sequence>
<xsd:element name="variable" type="tns:tActivityVariableConfig"
maxOccurs="unbounded" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="evalTime" type="xsd:string" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="tAdapterConfig">
<xsd:annotation>
<xsd:documentation>
The configuration part of a adapter activity extends the activty
configuration with additional attributes for adapters
</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="tns:tActivityConfig">
<xsd:attribute name="headerVariable" use="required" type="xsd:string"/>
<xsd:attribute name="partnerLink" use="required" type="xsd:string"/>
<xsd:attribute name="portType" use="required" type="xsd:string"/>
<xsd:attribute name="operation" use="required" type="xsd:string"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="tVariableConfig">
<xsd:complexContent>
<xsd:extension base="tns:tSensorConfig">
<xsd:attribute name="outputDataType" use="required" type="xsd:string"/>
<xsd:attribute name="outputNamespace" use="required" type="xsd:string"/>
<xsd:attribute name="queryName" use="optional" type="xsd:string"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="tActivityVariableConfig">
<xsd:complexContent>
<xsd:extension base="tns:tVariableConfig">
<xsd:attribute name="target" type="xsd:string" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="tFaultConfig">
<xsd:complexContent>
<xsd:extension base="tns:tSensorConfig"/>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="tNotificationSvcConfig">
<xsd:complexContent>
<xsd:extension base="tns:tActivityConfig">
<xsd:attribute name="inputVariable" use="required" type="xsd:string"/>
<xsd:attribute name="outputVariable" use="required" type="xsd:string"/>
<xsd:attribute name="operation" use="required" type="xsd:string"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="tSensorConfig">
<xsd:sequence>
<xsd:element name="action" type="tns:tInlineSensorAction" minOccurs="0"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="tInlineSensorAction">
<xsd:complexContent>
<xsd:restriction base="tns:tSensorAction"/>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="tSensor">
<xsd:sequence>
<xsd:element name="activityConfig" type="tns:tActivityConfig"
minOccurs="0"/>
<xsd:element name="adapterConfig" type="tns:tAdapterConfig" minOccurs="0"/>
<xsd:element name="faultConfig" type="tns:tFaultConfig" minOccurs="0"/>
<xsd:element name="notificationConfig" type="tns:tNotificationSvcConfig"
minOccurs="0"/>
<xsd:element name="variableConfig" type="tns:tVariableConfig"
minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="sensorName" use="required" type="xsd:string"/>
<xsd:attribute name="kind" use="required" type="tns:tSensorKind"/>
<xsd:attribute name="classname" use="required" type="xsd:string"/>
<xsd:attribute name="target" use="required" type="xsd:string"/>
</xsd:complexType>

<xsd:complexType name="tSensorList">
<xsd:sequence>
<xsd:element name="sensor" type="tns:tSensor" minOccurs="0"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="tRouterData">
<xsd:sequence>
<xsd:element name="header" type="tns:tHeaderInfo"/>
<xsd:element name="payload" type="tns:tSensorData"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="tHeaderInfo">
<xsd:sequence>
<xsd:element name="processName" type="xsd:string"/>
<xsd:element name="processRevision" type="xsd:string"/>
<xsd:element name="domain" type="xsd:string"/>
<xsd:element name="instanceId" type="xsd:integer"/>
<xsd:element name="midTierInstance" type="xsd:string"/>
<xsd:element name="timestamp" type="xsd:dateTime"/>
<xsd:element name="sensor" type="tns:tSensor"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="tSensorData">
<xsd:sequence>
<xsd:element name="activityData" type="tns:tActivityData" minOccurs="0"/>
<xsd:element name="faultData" type="tns:tFaultData" minOccurs="0"/>
<xsd:element name="adapterData" minOccurs="0" type="tns:tAdapterData"/>
<xsd:element name="variableData" type="tns:tVariableData" minOccurs="0"
maxOccurs="unbounded"/>
<xsd:element name="notificationData" type="tns:tNotificationData"
minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="tFaultData">
<xsd:sequence>
<xsd:element name="activityName" type="xsd:string"/>
<xsd:element name="activityType" type="xsd:string"/>
<xsd:element name="data" type="xsd:anyType" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="tActivityData">
<xsd:sequence>
<xsd:element name="activityType" type="xsd:string"/>
<xsd:element name="evalPoint" type="xsd:string"/>
<xsd:element name="errorMessage" nillable="true" minOccurs="0"
type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>

<!--
xml type that is provided to sensors for variable Datas. Note the
any element represents variable data.
-->
<xsd:complexType name="tVariableData">
<xsd:sequence>
<xsd:element name="target" type="xsd:string"/>
<xsd:element name="queryName" type="xsd:string"/>
<xsd:element name="updaterName" type="xsd:string" minOccurs="1"/>
<xsd:element name="updaterType" type="xsd:string" minOccurs="1"/>
<xsd:element name="data" type="xsd:anyType"/>
<xsd:element name="dataType" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="tNotificationData">
<xsd:complexContent>
<xsd:extension base="tns:tActivityData">
<xsd:sequence>
<xsd:element name="messageID" type="xsd:string" minOccurs="0"
maxOccurs="unbounded"/>
<xsd:element name="fromAddress" type="xsd:string" minOccurs="0"/>
<xsd:element name="toAddress" type="xsd:string" minOccurs="0"/>
<xsd:element name="deliveryChannel" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>

</xsd:complexType>
<xsd:complexType name="tAdapterData">
<xsd:complexContent>
<xsd:extension base="tns:tActivityData">
<xsd:sequence>
<xsd:element name="endpoint" type="xsd:string"/>
<xsd:element name="direction" type="xsd:string"/>
<xsd:element name="adapterType" type="xsd:string"/>
<xsd:element name="priority" type="xsd:string" minOccurs="0"/>
<xsd:element name="messageSize" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<!--
The header of the document contains some metadata.
-->
<xsd:complexType name="tSensorActionHeader">
<xsd:sequence>
<xsd:element name="processName" type="xsd:string"/>
<xsd:element name="processVersion" type="xsd:string"/>
<xsd:element name="processID" type="xsd:long"/>
<xsd:element name="midTierInstance" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="actionName" use="required" type="xsd:string"/>
</xsd:complexType>

<!--
Sensor Action data is presented in the form of a header and potentially many
data elements depending on how many sensors associated to the sensor action
marked the data as interesting.
-->
<xsd:complexType name="tSensorActionData">
<xsd:sequence>
<xsd:element name="header" type="tns:tHeaderInfo"/>
<xsd:element name="payload" type="tns:tSensorData" minOccurs="1"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
<!--
<xsd:simpleType name="tActivityEvalPoint">
<xsd:restriction>
<xsd:enumeration value="start"/>
<xsd:enumeration value="complete"/>
<xsd:enumeration value="fault"/>
<xsd:enumeration value="compensate"/>
<xsd:enumeration value="retry"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="tNotificationAction">
<xsd:restriction>
<xsd:enumeration value="creation"/>
<xsd:enumeration value="statusUpdate"/>
</xsd:restriction>
</xsd:simpleType>
-->

<!--
The process sensor value header comprises of a timestamp
where the sensor was triggered and the sensor metadata
-->
<xsd:complexType name="tProcessSensorValueHeader">
<xsd:sequence>
<xsd:element name="timestamp" type="xsd:dateTime"/>
<xsd:element ref="tns:sensor"/>
</xsd:sequence>
</xsd:complexType>

<!--
Extend tActivityData to include more elements
-->
<xsd:complexType name="tProcessActivityData">
<xsd:complexContent>
<xsd:extension base="tns:tActivityData">
<xsd:sequence>
<xsd:element name="creationDate" type="xsd:dateTime" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="modifyDate" type="xsd:dateTime" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="evalTime" type="xsd:long" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="retryCount" type="xsd:int" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

<!--
Extend tVariableData to include more elements
-->
<xsd:complexType name="tProcessVariableData">
<xsd:complexContent>
<xsd:extension base="tns:tVariableData">
<xsd:sequence>
<xsd:element name="creationDate" type="xsd:dateTime" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="modifyDate" type="xsd:dateTime" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

<!--
Extend tFaultData to include more elements
-->
<xsd:complexType name="tProcessFaultData">
<xsd:complexContent>
<xsd:extension base="tns:tFaultData">
<xsd:sequence>
<xsd:element name="creationDate" type="xsd:dateTime" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="modifyDate" type="xsd:dateTime" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

<!--
Extend tAdapterData to include more elements
-->
<xsd:complexType name="tProcessAdapterData">
<xsd:complexContent>
<xsd:extension base="tns:tAdapterData">
<xsd:sequence>
<xsd:element name="creationDate" type="xsd:dateTime" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="modifyDate" type="xsd:dateTime" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

<!--
Extend tNotificationData to include more elements
-->
<xsd:complexType name="tProcessNotificationData">
<xsd:complexContent>
<xsd:extension base="tns:tNotificationData">
<xsd:sequence>
<xsd:element name="creationDate" type="xsd:dateTime" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="modifyDate" type="xsd:dateTime" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<!--
Copy of tSensorData type with some modified types.
-->
<xsd:complexType name="tProcessSensorData">
<xsd:sequence>
<xsd:element name="activityData" type="tns:tProcessActivityData"
minOccurs="0"/>
<xsd:element name="faultData" type="tns:tProcessFaultData" minOccurs="0"/>
<xsd:element name="adapterData" minOccurs="0"
type="tns:tProcessAdapterData"/>
<xsd:element name="variableData" type="tns:tProcessVariableData"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="notificationData" type="tns:tProcessNotificationData"
minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
<!--
A single process sensor value comprises of the sensor value metadata
(sensor and timestamp) and the payload (the value) of the sensor
-->
<xsd:complexType name="tProcessSensorValue">
<xsd:sequence>
<xsd:element name="header" type="tns:tProcessSensorValueHeader"/>
<xsd:element name="payload" type="tns:tProcessSensorData"/>
</xsd:sequence>
</xsd:complexType>

<!--
Process instance header.
-->
<xsd:complexType name="tProcessInstanceInfo">
<xsd:sequence>
<xsd:element name="processName" type="xsd:string"/>
<xsd:element name="processRevision" type="xsd:string"/>
<xsd:element name="domain" type="xsd:string"/>
<xsd:element name="instanceId" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>

<!--
The list of sensor values comprises of a process header describing the
BPEL process with name, cube instance id etc. and a list of sensor values
comprising of sensor metadata information and sensor values.
-->
<xsd:complexType name="tProcessSensorValueList">
<xsd:sequence>
<xsd:element name="process" type="tns:tProcessInstanceInfo" minOccurs="1"
maxOccurs="1"/>
<xsd:element name="sensorValue" type="tns:tProcessSensorValue" minOccurs="0"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>

<!-- The sensor list is the root element of the sensor.xml document in the
bpel process suitcase and is used to define sensors. -->
<xsd:element name="sensors" type="tns:tSensorList"/>

<!-- A sensor is used to monitor a particular aspect of a bpel process -->
<xsd:element name="sensor" type="tns:tSensor"/>

<!-- The actions element is the root element of the sensorAction.xml document
in the bpel process suitcase and is used to define sensor actions.
Sensor actions define how to publish data captured by sensors -->
<xsd:element name="actions" type="tns:tSensorActionList"/>

<!-- actionData elements are produced by the sensor framework and sent to the
appropriate data publishers when sensors 'fire' -->
<xsd:element name="actionData" type="tns:tSensorActionData"/>

<!-- This element is used when the client API is used to query sensor values
stored in the default reports schema -->
<xsd:element name="sensorValues" type="tns:tProcessSensorValueList"/>
</xsd:schema>

E Oracle BAM Webサービスの操作

この付録では、Oracle Business Activity Monitoring(Oracle BAM)のDataObjectOperations、DataObjectDefinitionおよびManualRuleFire Webサービスによって提供される作業の参照情報について説明します。

項目は次のとおりです。

- E.1項「DataObjectOperations10131」

- E.2項「DataObjectOperationsByName」

- E.3項「DataObjectOperationsByID」

- E.4項「DataObjectDefinitionの操作」

- E.5項「ManualRuleFireの操作」

Oracle BAM Webサービスの詳細は、第59章「Oracle BAM Webサービスの使用」を参照してください。

E.1 DataObjectOperations10131

DataObjectOperations10131 Webサービスでは、次の操作がサポートされています。

- E.1.1項「バッチ」

- E.1.2項「削除」

- E.1.3項「挿入」

- E.1.4項「更新」

- E.1.5項「アップサート」

E.1.1 バッチ

バッチでは、データ・オブジェクトに対してバッチ操作が実行されます。

E.1.1.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

dataObject (xsd:string)

データ・オブジェクトの完全な相対パスと名前。例:

/Samples/Employees

xmlPayload (xsd:string)

実行するすべての操作に対するバッチ・ペイロードが含まれています。例:

<payload>
<_Employees operation="insert">
<_Salesperson>Tim Bray</_Salesperson>
<_Sales_Area>EMEA</_Sales_Area>
<_Sales_Number>12345</_Sales_Number>
</_Employees>
<_Employees operation="update" keys="_Sales_Number">
<_Salesperson>Tim Bray</_Salesperson>
<_Sales_Area>EMEA</_Sales_Area>
<_Sales_Number>12345</_Sales_Number>
</_Employees>
</payload>

E.1.2 削除

「削除」では、データ・オブジェクトから行が削除されます。

E.1.2.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

dataObject (xsd:string)

データ・オブジェクトの完全な相対パスと名前。例:

/Samples/Employees

keysCSV (xsd:string)

キーとして使用する必要があるカンマ区切りの列ID。例:

_Sales_Number,_Sales_Area

xmlPayload (xsd:string)

データ・オブジェクトの行を削除するwhere句のペイロード゛。例:

<_Employees>
<_Sales_Number>12345</_Sales_Number>
</_Employees>

E.1.3 挿入

「挿入」では、データ・オブジェクトが追加されます。

E.1.3.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

dataObject (xsd:string)

データ・オブジェクトの完全な相対パスと名前。例:

/Samples/Employees

xmlPayload (xsd:string)

ペイロードは各データ・オブジェクトに固有です。

<_Employees>
<_Salesperson>Time Bray</_Salesperson>
<_Sales_Area>EMEA</_Sales_Area>
<_Sales_Number>12345</_Sales_Number>
</_Employees>

E.1.4 更新

「更新」操作では、既存のデータがデータ・オブジェクト内の新規データで更新されます。

E.1.4.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

dataObject (xsd:string)

データ・オブジェクトの完全な相対パスと名前。例:

/Samples/Employees

keysCSV (xsd:string)

キーとして使用する必要があるカンマ区切りの列ID。例:

_Sales_Number,_Sales_Area

xmlPayload (xsd:string)

データ・オブジェクトの行を更新するUPDATE文およびWHERE句のペイロード。例:

<_Employees>
<_Sales_Area>Asia Pacific</_Sales_Area>
<_Sales_Number>12345</_Sales_Number>
</_Employees>

E.1.5 アップサート

「アップサート」操作では、既存のデータがデータ・オブジェクト内の既存の行にある新規データで更新されます。行が存在しない場合は、新規行が作成されます。

E.1.5.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

dataObject (xsd:string)

データ・オブジェクトの完全な相対パスと名前。例:

/Samples/Employees

keysCSV (xsd:string)

キーとして使用する必要があるカンマ区切りの列ID。例:

_Sales_Number,_Sales_Area

xmlPayload (xsd:string)

データ・オブジェクトの行をアップサートするINSERTまたはUPDATE文、およびWHERE句のペイロード。例:

<_Employees>
<_Salesperson>Time Bray</_Salesperson>
<_Sales_Area>EMEA</_Sales_Area>
<_Sales_Number>12345</_Sales_Number>
</_Employees>

E.2 DataObjectOperationsByName

DataObjectOperations10131、DataObjectOperationsByNameおよびDataObjectOperationsByIDのWebサービスでは、次の操作がサポートされています。

- E.2.1項「削除」

- E.2.2項「取得」

- E.2.3項「挿入」

- E.2.4項「更新」

- E.2.5項「アップサート」

E.2.1 削除

「削除」では、データ・オブジェクトから行が削除されます。

E.2.1.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

keysCSV (xsd:string)

キーとして使用する必要があるカンマ区切りの列ID。例:

Sales Number, Sales Area

xmlPayload (xsd:string)

データ・オブジェクトの行を削除するWHERE句のペイロード゛。例:

<DataObject Name="Employees" Path="/Samples">
<Contents>
<Row>
<Column Name="Salesperson" Value="Greg Guan" />
</Row>
</Contents>
</DataObject>

E.2.2 取得

取得では、XMLペイロードの仕様ごとにデータ・オブジェクトから詳細がフェッチされます。

取得はDataObjectOperationsByName Webサービスでのみ使用できます。

E.2.2.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

keysCSV (xsd:string)

キーとして使用する必要があるカンマ区切りの列ID。例:

Sales Number, Sales Area

xmlPayload (xsd:string)

ペイロードによって、データ・オブジェクトからの取得内容が指定されます。

DataObjectOperationsByName Webサービスの場合、ペイロードには、次の例に示すようにデータ・オブジェクト名が指定されます。

<DataObject Name="Employees" Path="/Samples">
<Contents>
<Row>
<Column Name="Salesperson" Value="Greg Masters"/>
</Row>
</Contents>
</DataObject>

E.2.3 挿入

「挿入」では、データ・オブジェクトが追加されます。

E.2.3.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

xmlPayload (xsd:string)

ペイロードは各データ・オブジェクトに固有です。

<DataObject Name="Employees" Path="/Samples">
<Contents>
<Row>
<Column Name="Salesperson" Value="Greg Guan" />
<Column Name="Sales Area" Value="Northeast" />
<column Name="Sales Number" Value="5671" />
</Row>
</Contents>
</DataObject>

E.2.4 更新

「更新」操作では、既存のデータがデータ・オブジェクト内の新規データで更新されます。

E.2.4.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

keysCSV (xsd:string)

キーとして使用する必要があるカンマ区切りの列ID。例:

Sales Number, Sales Area

xmlPayload (xsd:string)

データ・オブジェクトの行を更新するUPDATE文およびWHERE句のペイロード。例:

<DataObject Name="Employees" Path="/Samples">
<Contents>
<Row>
<Column Name="Salesperson" Value="Greg Guan" />
</Row>
</Contents>
</DataObject>

E.2.5 アップサート

「アップサート」操作では、既存のデータがデータ・オブジェクト内の既存の行にある新規データで更新されます。行が存在しない場合は、新規行が作成されます。

E.2.5.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

keysCSV (xsd:string)

キーとして使用する必要があるカンマ区切りの列ID。例:

Sales Number, Sales Area

xmlPayload (xsd:string)

データ・オブジェクトの行をアップサートするINSERTまたはUPDATE文、およびWHERE句のペイロード。例:

<DataObject Name="Employees" Path="/Samples">
<Contents>
<Row>
<Column Name="Salesperson" Value="Greg Guan" />
<Column Name="Sales Area" Value="Northeast" />
<column Name="Sales Number" Value="5671" />
</Row>
</Contents>
</DataObject>

E.3 DataObjectOperationsByID

DataObjectOperations10131、DataObjectOperationsByNameおよびDataObjectOperationsByIDのWebサービスでは、次の操作がサポートされています。

- E.3.1項「バッチ」

- E.3.2項「削除」

- E.3.3項「挿入」

- E.3.4項「更新」

- E.3.5項「アップサート」

E.3.1 バッチ

バッチでは、データ・オブジェクトに対してバッチ操作が実行されます。

E.3.1.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

dataObject (xsd:string)

データ・オブジェクトの完全な相対パスと名前。例:

/Samples/Employees

xmlPayload (xsd:string)

実行するすべての操作に対するバッチ・ペイロードが含まれています。例:

<payload>
<_Employees operation="insert">
<_Salesperson>Tim Bray</_Salesperson>
<_Sales_Area>EMEA</_Sales_Area>
<_Sales_Number>12345</_Sales_Number>
</_Employees>
<_Employees operation="update" keys="_Sales_Number">
<_Salesperson>Tim Bray</_Salesperson>
<_Sales_Area>EMEA</_Sales_Area>
<_Sales_Number>12345</_Sales_Number>
</_Employees>
</payload>

E.3.2 削除

「削除」では、データ・オブジェクトから行が削除されます。

E.3.2.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

dataObject (xsd:string)

データ・オブジェクト名とパスはペイロードに含まれているため、このパラメータはDataObjectOperationsByName Webサービスでは不要です。

データ・オブジェクトの完全な相対パスと名前。例:

/Samples/Employees

keysCSV (xsd:string)

キーとして使用する必要があるカンマ区切りの列ID。例:

_Sales_Number,_Sales_Area

xmlPayload (xsd:string)

データ・オブジェクトの行を削除するWHERE句のペイロード゛。例:

<_Employees>
<_Sales_Number>12345</_Sales_Number>
</_Employees>

E.3.3 挿入

「挿入」では、データ・オブジェクトが追加されます。

E.3.3.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

dataObject (xsd:string)

データ・オブジェクトの完全な相対パスと名前。例:

/Samples/Employees

xmlPayload (xsd:string)

ペイロードは各データ・オブジェクトに固有です。

DataObjectOperationsByName Webサービスの場合、ペイロードには、次の例に示すようにデータ・オブジェクト名が指定されます。

<_Employees>
<_Salesperson>Time Bray</_Salesperson>
<_Sales_Area>EMEA</_Sales_Area>
<_Sales_Number>12345</_Sales_Number>
</_Employees>

E.3.4 更新

「更新」操作では、既存のデータがデータ・オブジェクト内の新規データで更新されます。

E.3.4.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

dataObject (xsd:string)

データ・オブジェクトの完全な相対パスと名前。例:

/Samples/Employees

keysCSV (xsd:string)

キーとして使用する必要があるカンマ区切りの列ID。例:

_Sales_Number,_Sales_Area

xmlPayload (xsd:string)

データ・オブジェクトの行を更新するUPDATE文およびWHERE句のペイロード。例:

<_Employees>
<_Sales_Area>Asia Pacific</_Sales_Area>
<_Sales_Number>12345</_Sales_Number>
</_Employees>

E.3.5 アップサート

「アップサート」操作では、既存のデータがデータ・オブジェクト内の既存の行にある新規データで更新されます。行が存在しない場合は、新規行が作成されます。

E.3.5.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

dataObject (xsd:string)

データ・オブジェクトの完全な相対パスと名前。例:

/Samples/Employees

keysCSV (xsd:string)

キーとして使用する必要があるカンマ区切りの列ID。例:

_Sales_Number,_Sales_Area

xmlPayload (xsd:string)

データ・オブジェクトの行をアップサートするINSERTまたはUPDATE文、およびWHERE句のペイロード。例:

<_Employees>
<_Salesperson>Time Bray</_Salesperson>
<_Sales_Area>EMEA</_Sales_Area>
<_Sales_Number>12345</_Sales_Number>
</_Employees>

E.4 DataObjectDefinitionの操作

DataObjectDefinition Webサービスでは、次の操作がサポートされています。

- E.4.1項「作成」

- E.4.2項「削除」

- E.4.3項「取得」

- E.4.4項「更新」

E.4.1 作成

「作成」では、新しいデータ・オブジェクトが作成されます。コラム要素を指定することで、通常のフィールドの他に、例に示すような計算フィールドと参照フィールドを作成できます。

E.4.1.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

xmlPayload (xsd:string)

データ・オブジェクトを作成するためのペイロードが含まれています。

表E-1 xmlPayload要素の説明と有効値

要素

説明と値

/DataObject/@External

0(ゼロ)は、データ・オブジェクトが外部データ・ソースによるものでないことを示します(デフォルト)。

1は、データ・オブジェクトが外部データ・ソースによるものであることを示します。

/DataObject/@Name

作成するデータ・オブジェクトの名前(ディレクトリ・パスは含まれていません)。

/DataObject/@Path

データ・オブジェクトが作成されるディレクトリ・パス。

/DataObject/@Version

データ・オブジェクトのバージョンは、0(デフォルト)から14の範囲です。

/DataObject/@TipText

作成するデータ・オブジェクトの説明。

/DataObject/Layout/Column/@Name

データ・オブジェクトの列(フィールド)の名前。

/DataObject/Layout/Column/@Type

列タイプでは、次の値が有効です。
自動増加整数
ブール値
計算値
CLOB
日時
少数
浮動小数
iterID
整数
参照
文字列
タイムスタンプ

/DataObject/Layout/Column/@Nullable

1(デフォルト)は、列でNULL値がサポートされることを示します。

0(ゼロ)は、列でNULL値がサポートされないことを示します。

/DataObject/Layout/Column/@Public

1(デフォルト)は、列がパブリックであることを示します。

0(ゼロ)は、列がパブリックでないことを示します。

/DataObject/Layout/Column/@MaxSize

文字列型の列の場合は、この属性によって、文字列の最大許容サイズが指定されます。

デフォルト値は30です。

/DataObject/Layout/Column/@Precision

小数型の列の場合は、この属性によって、小数型の値の精度が指定されます。

/DataObject/Layout/Column/@Scale

小数型の列の場合は、この属性によって、小数型の値のスケールが指定されます。

/DataObject/Layout/Column/@TipText

列の説明。

例E-1 通常列を使用してデータ・オブジェクトを作成するためのxmlPayload

<DataObject Version="14" Name="Employees3" ID="_Employees3" Path="/Samples"
External="0">
<Layout>
<Column Name="Salesperson" ID="_Salesperson" Type="string" MaxSize="30"
Nullable="1" Public="1" />
<Column Name="Sales Number" ID="_Sales_Number" Type="decimal"
Nullable="1" Public="1" />
<Column Name="Timestamp" ID="_Timestamp" Type="timestamp"
Nullable="0" Public="1" />
<Indexes />
</Layout>
</DataObject>

例E-2 参照フィールドを使用してデータ・オブジェクトを作成するためのxmlPayload

<DataObject Version="14" Name="LookupDO" ID="_LookupDO" Path="/Samples">
<Layout>
<Description><![CDATA[Lookup]]></Description>
<Column Name="Name" ID="_Name" Type="string" MaxSize="100"
Nullable="1" Public="1" />
<Column Name="ID" ID="_ID" Type="integer" Nullable="1" Public="1" />
<Column Name="Sales Area" ID="_Sales_Area" Type="lookup">
<Lookup>
<DataObject>
<ID>_Employees</ID>
<Path>/Samples</Path>
</DataObject>
<LookupFieldID>_Sales_Area</LookupFieldID>
<MatchFields>
<KeyPair>
<PrimaryKeyID>_Sales_Number</PrimaryKeyID>
<ForeignKeyID>_ID</ForeignKeyID>
</KeyPair>
</MatchFields>
</Lookup>
</Column>
<Indexes />
</Layout>
</DataObject>

作成操作用のXMLペイロードを構成するときに、データ・オブジェクトのバージョンが12未満の場合は、PrimaryKeyIDのかわりにPrimaryKey、ForeignKeyIDのかわりにForeignKey、LookupFieldIDのかわりにLookupFieldをそれぞれ使用し、これらのフィールドにはIDのかわりに名前の値を指定してください。

例E-3 計算フィールドを使用してデータ・オブジェクトを作成するためのxmlPayload

<DataObject Version="14" Name="CalculatedDO" ID="_CalculatedDO" Path="/Samples">
<Layout>
<Description><![CDATA[Calculated Column]]></Description>
<Column Name="Name" ID="_Name" Type="string" MaxSize="100" Nullable="1"
Public="1" />
<Column Name="Address" ID="_Address" Type="string" MaxSize="100" Nullable="1"
Public="1" />
<Column Name="Salary" ID="_Salary" Type="decimal" Scale="10" Nullable="1"
Public="1" />
<Column Name="Income Tax" ID="_Income_Tax" Type="calculated"
CalculatedExpression="&lt;expression type=&quot;MathExpression&quot;
&gt;&lt;operation&gt;&lt;left&gt;&lt;type&gt;FieldID&lt;/type&gt;&lt;ivalue&gt;
_Salary&lt;/ivalue&gt;&lt;/left&gt;&lt;operator&gt;*&lt;/operator&gt;&lt;right&gt;
&lt;type&gt;DECIMAL&lt;/type&gt;&lt;ivalue&gt;0.3&lt;/ivalue&gt;&lt;/right&gt;&lt;
/operation&gt;&lt;/expression&gt;" ExpressionUserText="(Salary * 0.3)" />
<Indexes />
</Layout>
</DataObject>

E.4.1.2 レスポンス・メッセージ

void

E.4.2 削除

「削除」では、データ・オブジェクトの定義とその内容が削除されます。

E.4.2.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

dataObjectFullName (xsd:string)

削除するデータ・オブジェクトの完全な相対パスと名前。例:

/Samples/Employees

E.4.2.2 レスポンス・メッセージ

void

E.4.3 取得

取得では、既存のデータ・オブジェクトの定義が取得されます。

E.4.3.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

dataObjectFullName (xsd:string)

データ・オブジェクトの完全な相対パスと名前。例:

/Samples/Sales

E.4.3.2 レスポンス・メッセージ

レスポンス・メッセージには、次のパラメータが含まれています。

xmlPayload (xsd:string)

データ・オブジェクトのXML説明が返されます。使用されるスキーマは、「作成」操作と「更新」操作で説明した定義と同じです。この操作を使用すると、データ・オブジェクトのID値とすべての列を検索できます。

例E-4 取得操作のxmlPayload

<DataObject Version="14" Name="Employees" Path="/Samples" External="0">
<Layout>
<Column Name="Salesperson" ID="_Salesperson" Type="string" MaxSize="100"
Nullable="1" Public="1" />
<Column Name="Sales Area" ID="_Sales_Area" Type="string" MaxSize="100"
Nullable="1" Public="1" />
<Column Name="Sales Number" ID="_Sales_Number" Type="integer" Nullable="1"
Public="1" />
<Column Name="Timestamp" ID="_Timestamp" Type="timestamp" Nullable="0" />
Public="1" />
<Indexes />
</Layout>
</DataObject>

E.4.4 更新

「更新」では、既存のデータ・オブジェクトの定義が更新されます。元の定義に指定の列がある場合は、新しい列の定義によって古い定義が上書きされます。既存の定義にある列が、新しい定義に指定されていない場合、その列の定義は削除されます。データ・オブジェクトの索引定義も同様に更新できます。

E.4.4.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

xmlPayload (xsd:string)

「更新」操作のペイロードは、属性を1つ加えた「作成」ペイロードに類似しています。例:

<DataObject Version="14" Name="Employees4" ID="_Employees4" Path="/Samples" External="0">
<Layout>
<Column Name="Salesperson" ID="_Salesperson" Type="string" MaxSize="50"
Nullable="1" Public="1" />
<Column Name="Sales Number" ID="_Sales_Number" Type="integer"
Nullable="1" Public="1" />
<Column Name="Timestamp" ID="_Timestamp" Type="timestamp"
Nullable="0" Public="1" />
<Indexes />
</Layout>
</DataObject>

E.4.4.2 レスポンス・メッセージ

void

E.5 ManualRuleFireの操作

ManualRuleFire Webサービスでは、次の操作がサポートされています。

- E.5.1項「FireRuleByName」

E.5.1 FireRuleByName

この操作を使用して、ルールを手動で起動します。

このWebサービスは、ユーザー名の後にピリオド(.)、その後にアラート名が続く文字列パラメータを取得します。例:

user_name.alertname

ピリオドは、ユーザー名とアラート名間のセパレータとして使用されます。Webサービスでは、文字列内の最後のピリオドを常にセパレータとして処理するため、ユーザー名にピリオドを含めることができます。次に例を示します。

user.nema.alerrtname

したがって、アラート名にピリオドを含めることはできません。ManualRuleFire Webサービスで名前にピリオドが含まれるアラートを使用する必要がある場合は、アラートの名前を変更してピリオドを含めないようにする必要があります。

E.5.1.1 リクエスト・メッセージ

リクエスト・メッセージには、次のパラメータが含まれています。

xmlPayload (xsd:string)

次に例を示します。

<FireRuleByName xmlns="http://xmlns.oracle.com/bam">
<strRuleName>string</strRuleName>
</FireRuleByName>

E.5.1.2 レスポンス・メッセージ

Returns (xsd:string)

<FireRuleByNameResponse xmlns="http://xmlns.oracle.com/bam">
<FireRuleByNameResult>string</FireRuleByNameResult>
</FireRuleByNameResponse>

F Oracle BAMアラート・ルール・オプション

この付録では、Oracle Business Activity Monitoring(Oracle BAM)アラート・ルールを定義する場合に使用されるイベント、条件およびアクションについて説明します。

項目は次のとおりです。

- F.1項「イベント」

- F.2項「条件」

- F.3項「アクション」

- F.4項「頻度制限」

ユーザーが管理ロールのメンバーである場合のアラートの変更の詳細は、第60.2.5項「アラートの変更に関する注意事項」を参照してください。

F.1 イベント

イベントは、ルールを起動し、アクションをトリガーします。各ルールに含まれるイベントは1つのみです。Oracle BAMには、次のイベントがあります。

- 特定の時間

- 本日の特定の時間

- 指定日の特定の時間

- 時間間隔ごと

- 指定日の特定の時間以降の日付間隔ごと

- レポートの変更時

- データ・オブジェクトのデータ・フィールド変更時

- レポートのデータ・フィールドが特定の条件を満たす場合

- データ・オブジェクトのデータ・フィールドが特定の条件を満たす場合

- このルールの起動時

F.1.1 特定の時間

「特定の時間」イベントを選択したときは、秒、分または時間で時間間隔を選択してルール式を完成する必要があります。

F.1.2 本日の特定の時間

「本日の特定の時間」イベントを選択したときは、アラートを起動する時間を選択してルール式を完成する必要があります。

F.1.3 指定日の特定の時間

「指定日の特定の時間」イベントを選択したときは、アラートを起動する日付と時刻の両方を選択してルール式を完成する必要があります。

F.1.4 時間間隔ごと

「時間間隔ごと」イベントを選択したときは、次の設定を構成してルール式を完成する必要があります。

- 時間間隔の選択
アラートを起動する間隔を分数、時間数または日数で設定します。

- 時間の選択
ルールが有効となりアラートが起動される時間の範囲を設定します。

F.1.5 指定日の特定の時間以降の日付間隔ごと

「指定日の特定の時間以降の日付間隔ごと」イベントを選択したときは、次の設定を構成してルール式を完成する必要があります。

- 日付間隔の選択
アラートを起動する間隔を毎日、毎週、毎月または毎年に設定します。

- 日付の選択
ルールが有効となりアラートが起動される日付を設定します。

- 時間の選択
ルールが有効となりアラートが起動される時刻を設定します。

F.1.6 レポートの変更時

「レポートの変更時」は、レポートにランタイム変更(レポート定義の変更はなし)が発生したときに起動し、そのたびに変更リストがOracle BAMサーバーのレポートに配信されます。レポートの変更には、データ・オブジェクトのデータに対する変更、および「すぐに有効」設定による変更を含めることができます。

「レポートの変更時」イベントを選択したときは、次の設定を構成してルール式を完成する必要があります。

- レポートの選択
変更を監視するレポートを選択します。

- <user_name>として実行 (このオプションは、アラートを作成するユーザーが管理者ロールのメンバーである場合のみ表示されます。)
選択したレポートを実行するOracle BAMユーザーを選択します。選択できる実行ユーザーは1人のみです。デフォルトの実行ユーザーは、アラートを作成するログイン済のOracle BAMユーザーです。

レポート変更に関する通知を受信するのは、実行ユーザーと同等かそれ以上のセキュリティ権限がある受信者のみです。また、レポートで使用するデータ・オブジェクトでは、Oracle BAMアーキテクトによる実装に従って、行レベルのセキュリティが優先されます。

先頭にハッシュ(#)がある名前は、ディストリビューション・リストです。

レポートのデータ・オブジェクト行に変更があり、アラート受信者の誰にもその行へのアクセス権がない場合、受信者への通知はありません。

F.1.7 データ・オブジェクトのデータ・フィールド変更時

「データ・オブジェクトのデータ・フィールド変更時」イベントを選択したときは、次の設定を構成してルール式を完成する必要があります。

注意:

「データ・オブジェクトのデータ・フィールドが特定の条件を満たす場合」イベントは、行の挿入と行の更新に対してのみ対応し、行の削除には対応しません。ただし、「データ・オブジェクトのデータ・フィールド変更時」イベントは行の削除に対応します。

- データ・フィールドの選択
変更を監視するデータ・オブジェクト・フィールドを選択します。「フィールドの選択」ダイアログ・ボックスの左上にあるセクションでデータ・オブジェクトを検索し、次に右上にあるセクションでフィールドを選択します。最後に、グループ化する1つ以上のフィールドを選択し、選択したフィールドに対して集計関数を選択します。

- <user_name>として実行 (このオプションは、アラートを作成するユーザーが管理者ロールのメンバーである場合のみ表示されます。)
選択したレポートを実行するOracle BAMユーザーを選択します。選択できる実行ユーザーは1人のみです。デフォルトの実行ユーザーは、アラートを作成するログイン済のOracle BAMユーザーです。

レポート変更に関する通知を受信するのは、実行ユーザーと同等かそれ以上のセキュリティ権限がある受信者のみです。また、レポートで使用するデータ・オブジェクトでは、Oracle BAMアーキテクトによる実装に従って、行レベルのセキュリティが優先されます。

先頭にハッシュ(#)がある名前は、ディストリビューション・リストです。

レポートのデータ・オブジェクト行に変更があり、アラート受信者の誰にもその行へのアクセス権がない場合、受信者への通知はありません。

F.1.8 レポートのデータ・フィールドが特定の条件を満たす場合

「データ・オブジェクトのデータ・フィールド変更時」イベントを選択したときは、次の設定を構成してルール式を完成する必要があります。

- レポートの選択
変更を監視するレポートを選択します。

- このデータ・フィールドにはxの条件があります
「アラート・ルール・エディタ」ダイアログ・ボックスで、監視するデータ・オブジェクトを選択します。これで、アラートを起動する条件を設定できます。

- 行フィルタ - データ・オブジェクトのフィールドにフィルタを作成して、条件を満たしたときにルールを起動する条件を示します。レポート・フィルタで使用できるすべての機能が用意されています。詳細は、『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』のデータのフィルタに関する項を参照してください。

- グループ・フィルタ - 「グループ・フィルタ」は、レポート・フィルタで使用できるすべてのフィルタ機能が用意されている点で「行フィルタ」に類似しています。ここでの特別な機能は、集計関数が適用されているフィールドに対してフィルタを作成できることです。フィルタ式の作成方法の詳細は、『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』のデータのフィルタに関する項を参照してください。

- グループ - 1つ以上のフィールドを選択してグループを作成し、「行フィルタ」タブまたは「グループ・フィルタ」タブで作成したフィルタに複雑性を追加します。

- <user_name>として実行 (このオプションは、アラートを作成するユーザーが管理者ロールのメンバーである場合のみ表示されます。)
選択したレポートを実行するOracle BAMユーザーを選択します。選択できる実行ユーザーは1人のみです。デフォルトの実行ユーザーは、アラートを作成するログイン済のOracle BAMユーザーです。

レポート変更に関する通知を受信するのは、実行ユーザーと同等かそれ以上のセキュリティ権限がある受信者のみです。また、レポートで使用するデータ・オブジェクトでは、Oracle BAMアーキテクトによる実装に従って、行レベルのセキュリティが優先されます。

先頭にハッシュ(#)がある名前は、ディストリビューション・リストです。

レポートのデータ・オブジェクト行に変更があり、アラート受信者の誰にもその行へのアクセス権がない場合、受信者への通知はありません。

F.1.9 データ・オブジェクトのデータ・フィールドが特定の条件を満たす場合

「データ・オブジェクトのデータ・フィールドが特定の条件を満たす場合」イベントを選択したときは、次の設定を構成してルール式を完成する必要があります。

注意:

「データ・オブジェクトのデータ・フィールドが特定の条件を満たす場合」イベントは、行の挿入と行の更新に対してのみ対応し、行の削除には対応しません。ただし、「データ・オブジェクトのデータ・フィールド変更時」イベントは行の削除に対応します。

- このデータ・フィールドにはxの条件があります
「アラート・ルール・エディタ」ダイアログ・ボックスで、監視するデータ・オブジェクトを選択します。これで、アラートを起動する条件を設定できます。

- 行フィルタ - データ・オブジェクトのフィールドにフィルタを作成して、条件を満たしたときにルールを起動する条件を示します。レポート・フィルタで使用できるすべての機能が用意されています。詳細は、『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』のデータのフィルタに関する項を参照してください。

- グループ・フィルタ - 「グループ・フィルタ」は、レポート・フィルタで使用できるすべてのフィルタ機能が用意されている点で「行フィルタ」に類似しています。ここでの特別な機能は、集計関数が適用されているフィールドに対してフィルタを作成できることです。フィルタ式の作成方法の詳細は、『Oracle Fusion Middleware Oracle Business Activity Monitoringユーザーズ・ガイド』のデータのフィルタに関する項を参照してください。

- グループ - 1つ以上のフィールドを選択してグループを作成し、「行フィルタ」タブまたは「グループ・フィルタ」タブで作成したフィルタに複雑性を追加します。

- <user_name>として実行 (このオプションは、アラートを作成するユーザーが管理者ロールのメンバーである場合のみ表示されます。)
選択したレポートを実行するOracle BAMユーザーを選択します。選択できる実行ユーザーは1人のみです。デフォルトの実行ユーザーは、アラートを作成するログイン済のOracle BAMユーザーです。

先頭にハッシュ(#)がある名前は、ディストリビューション・リストです。

レポート変更に関する通知を受信するのは、実行ユーザーと同等かそれ以上のセキュリティ権限がある受信者のみです。また、レポートで使用するデータ・オブジェクトでは、Oracle BAMアーキテクトによる実装に従って、行レベルのセキュリティが優先されます。

レポートのデータ・オブジェクト行に変更があり、アラート受信者の誰にもその行へのアクセス権がない場合、受信者への通知はありません。

F.1.10 このルールの起動時

「このルールの起動時」イベントは、「ルールの起動」アクションを使用している他のルールに従ってルールを作成する場合に使用します。階層内で「このルールの起動時」を使用すると、複数のルールを作成できます。

F.2 条件

条件はアラートが起動される期間を制限するためのオプション設定です。条件はいくつでも、どのような組合せでも選択できます。Oracle BAMには、次の条件があります。

- 時間間隔の場合

- 日間隔の場合

- 特定の曜日の場合

F.2.1 時間間隔の場合

ルールを起動する時間範囲を示す2つの時刻を選択します。

F.2.2 日間隔の場合

ルールを起動する日付範囲を示す2つの日付を選択します。

F.2.3 特定の曜日の場合

ルールを起動する曜日を選択します。

F.3 アクション

アクションは、ルール式で満たした条件とイベントの結果です。アクションはいくつでも、どのような組合せでも構成できます。Oracle BAMには、次のアクションがあります。

- 電子メールでレポートを送信

- 電子メールでメッセージを送信

- 電子メールでレポートを送信し、指定期間の経過後別のユーザーにエスカレート

- パラメータ化されたメッセージを送信

- データ・オブジェクトのすべての一致する行に対し、パラメータ化されたメッセージを送信

- ルールの起動

- アクションが失敗した場合、ルールを起動

- データ・オブジェクトから行を削除

- Webサービスのコール

- Oracle Data Integratorシナリオの実行

- 外部アクションのコール

F.3.1 電子メールでレポートを送信

レポートを選択し、そのレポートをレポート・リンクまたはレンダリングされたレポートとして送信するように選択して、受信者を選択します。

受信者は、Oracle BAMユーザーから選択するか、Oracle BAMでプロパティが設定されている場合は、外部電子メール・アカウントから選択できます。詳細は、第60.9項「外部電子メール・アカウントへのアラートの送信」を参照してください。

F.3.2 電子メールでメッセージを送信

送信する電子メール・メッセージを作成し、受信者を選択します。

受信者は、Oracle BAMユーザーから選択するか、Oracle BAMでプロパティが設定されている場合は、外部電子メール・アカウントから選択できます。詳細は、第60.9項「外部電子メール・アカウントへのアラートの送信」を参照してください。

F.3.3 電子メールでレポートを送信し、指定期間の経過後別のユーザーにエスカレート

指定したユーザーに送信するレポートを選択します。最初の受信者が指定時間内に応答しない場合にメッセージを受信する2番目の受信者を選択します。2番目の受信者は、1人のユーザーまたはディストリビューション・リストのいずれかです。

アラート・ルールの条件を満たすと、レポート・リンクが受信者に送信されます。このアラートに応答するために、受信者は、レポート・リンクをクリックしてレポートを表示する必要があります。受信者がレポートを表示しないと、そのレポートは2番目のユーザー(またはディストリビューション・リスト)にエスカレートされます。

受信者は、Oracle BAMユーザーから選択するか、Oracle BAMでプロパティが設定されている場合は、外部電子メール・アカウントから選択できます。詳細は、第60.9項「外部電子メール・アカウントへのアラートの送信」を参照してください。

F.3.4 パラメータ化されたメッセージを送信

このオプションを使用すると、パラメータ入力が必要なレポートをOracle BAMユーザーに電子メールで送信できます。このアクションでは、完全に構成可能な電子メール・メッセージと、レポートに渡されるパラメータ値を作成できます。

Oracle BAMダッシュボードでのプロンプトおよびパラメータの作成方法については、『Oracle Fusion Middleware User's Guide for Oracle Business Activity Monitoring』のプロンプトおよびパラメータの使用に関する項を参照してください。

このオプションを使用すると、アラート・メッセージに指定した条件に従って、レポートを他のユーザーに送信できます。このアクションは、「データ・オブジェクトのデータ・フィールド変更時」および「データ・オブジェクトのデータ・フィールドが特定の条件を満たす場合」イベントで使用できます。

このアラート・アクションでは、「メッセージの作成」と「パラメータの設定」の2つのプロパティを構成する必要があります。

図bam_alert_param_expr.gifの説明

メッセージを作成するには:

1. ルール式で、「メッセージの作成」をクリックします。

2. 受信者に送信する件名およびメッセージを入力します。図F-1に示すように、メッセージ本文で、送信するレポートへのリンクを選択することもできます。

図F-1 「アラート・メッセージ」ダイアログ・ボックス

「図F-1 「アラート・メッセージ」ダイアログ・ボックス」の説明

受信者がレポートを開くときにレポートに渡されるパラメータ値を構成する手順は、次のとおりです。

1. ルール式で、「パラメータの設定」をクリックします。

2. 「アラート・アクション・パラメータの作成および編集」ダイアログ・ボックスで、「ユーザー」と「レポート」の各フィールドに事前定義済の値を移入するか、または「データ・オブジェクト」フィールドから動的に移入します。各ボタンを使用してフィールド値を設定します。「フィールドの選択」を使用すると、データ・オブジェクトのフィールドを値として選択できます。

図F-2 「アラート・アクション・パラメータの作成および編集」ダイアログ・ボックス

「図F-2 「アラート・アクション・パラメータの作成および編集」ダイアログ・ボックス」の説明

- 「ユーザー」フィールド
「ユーザーの選択」ボタンを使用してこのフィールドに移入する場合は、図F-3に示すように、Oracle BAMアドミニストレータにリスト表示されるOracle BAMユーザーから受信者を選択します。

図F-3 「名前の選択」ダイアログ・ボックス

「図F-3 「名前の選択」ダイアログ・ボックス」の説明

- 「レポート」フィールド
「レポートの選択」ボタンを使用してこのフィールドに移入する場合、このフィールドに表示される値は、レポートの表示名です。

データ・オブジェクトからこのフィールドに移入する場合の値は、レポートの表示名ではなくレポートIDである必要があります。レポートIDを取得するには、レポートをクリックし、「ショートカットのコピー」リンクをクリックします。次のようなリンクが示されているウィンドウが開きます。

http://myServer/oraclebam/ReportServer/default.aspx?Event=ViewReport&
ReportDef=1&Buttons=False

このリンクでは、ReportDefの値(1)がレポートEmp_ReportのレポートIDです。Oracle Business Activity Monitoring内のすべてのレポートに、一意のレポートIDがあります。

3. レポート・パラメータ値を構成します。
レポートに必要なすべてのパラメータを入力します。

「レポート・パラメータ値」リストで、「新規」をクリックし、パラメータを構成します。

図bam_alert_para_cfg_cr.gifの説明

「名前」フィールドにパラメータ名を入力して、「フィールドの選択」をクリックし、パラメータが機能するフィールドを選択します。

図bam_alert_para_cfg_nm.gifの説明

パラメータ値を入力するか、「フィールドの選択」ダイアログ・ボックスでフィールドを選択し、「OK」をクリックします。

特殊な値には、_ALL_、_BLANK_、_NULL_など、アンダースコア(_)を使用します。

図bam_alert_para_cfg_fld.gifの説明

選択したフィールドIDが「値」テキスト・ボックスに表示されます。「OK」をクリックして確認し、パラメータ・リストに戻ります。

図bam_alert_para_cfg_sel.gifの説明

F.3.5項 データ・オブジェクトのすべての一致する行に対し、パラメータ化されたメッセージを送信

このアクションでは、静的データ・オブジェクトの行から受信者、メッセージの内容およびメッセージの件名を選択できます。条件付通知に使用するデータ・オブジェクト行を選択するためのフィルタ基準を構成画面で指定できます。このアクションは、任意のイベント、条件またはアクションで構成できます。

このアクションが起動されると、フィルタ基準に一致するデータ・オブジェクト内の行を使用して、(アクションで指定されているデータ・オブジェクト・パラメータを使用して)受信者に送信される電子メール・メッセージが作成されます。メッセージ作成は、F.3.4項「パラメータ化されたメッセージを送信」でのメッセージ作成に似ています。

アクションを構成する手順は、次のとおりです。

1. 「このデータ・フィールドにはxの条件があります」リンクをクリックし、データ・オブジェクトおよび目的の行を選択するためのフィルタ基準を選択します。

注意:

データ・オブジェクト・フィールドを表示するために、まずデータ・オブジェクトおよびフィルタ基準を選択する必要があります。

2. 「メッセージの作成」リンクをクリックし、F.3.4項「パラメータ化されたメッセージを送信」と同様に、必要に応じてデータ・オブジェクト・フィールドを使用して電子メール・メッセージを作成します。

3. 「パラメータの設定」リンクをクリックし、F.3.4項「パラメータ化されたメッセージを送信」と同様に(「ユーザー」で)ユーザーおよびレポート(オプション)を選択します。

4. 「OK」をクリックしてルールを保存します。

F.3.6 ルールの起動

「このルールの起動時」イベントを含む依存ルールを選択します。依存ルールの構成例については、第60.5項「複合アラートの作成」を参照してください。

F.3.7 アクションが失敗した場合、ルールを起動

ルールに含まれるアクションのいずれかが失敗したときに起動する依存ルールを選択します。依存ルールの構成例については、第60.5項「複合アラートの作成」を参照してください。

F.3.8 データ・オブジェクトから行を削除

データ・オブジェクトを選択し、フィルタ条件が満たされたときに行がデータ・オブジェクトから削除されるフィルタ・エントリを構成します。

削除するデータが10,000行を超える場合は、次の項目について考慮してください。

- 「データ・オブジェクトから行を削除」アクションの実行時に、削除するデータのデータ・オブジェクトに依存しているレポートが開いている場合は、ビューセットでアクティブなデータが停止し、削除の完了後に再ロードされます。また、依存しているデータ・オブジェクトに対する削除アクションの進行中にユーザーがレポートを開こうとすると、レポートがスタック状態になったり、出力が未定義状態になる場合があります。このアクションが進行中の間は、データ・オブジェクトに依存するレポートを開かないことをお薦めします。アクションが終了すると、レポートはアクティブなデータの受信を続行します。

- さらに、「データ・オブジェクトから行を削除」の実行時に、データ・オブジェクトに依存するアラートが内部で一時的に無効化されます。このアクションが実行されている間、そのデータ・オブジェクトを使用して作成された新規アラート、または無効化されて再度有効化された依存する既存アラートはシステムでスタック状態になります。このアクションが進行中の間は、データ・オブジェクトに依存するアラートを作成、無効化または再有効化しないことをお薦めします。アクションが終了すると、アラートは通常の機能を続行します。

F.3.9 Webサービスのコール

このアクションを選択した場合は、次の手順に従ってWebサービスを構成します。

1. WebサービスまたはWSILエンドポイントURLを入力します。URLは、「http」スキームで開始し、有効な拡張子(?WSDL、.WSDLまたは.WSIL)で終了している必要があります。
例:

http://host_name:port_number/OracleBAMWS/WebServices/DataObjectOperationsByID?WSDL

http://api.google.com/GoogleSearch.wsdl

http://host_name:port_number/inspection.wsil

安全性の高いWebサービスの場合は、ボックスを選択し、必要な資格証明を入力します。

注意:

Oracle BAMでは、Webサービスをホストしているサーバーが保護サーバーの背後にあるかどうかを判断できません。WebサービスがHTTP基本認証ベース・サーバーの背後にあるかどうかを示すことは開発者の責任であり、資格証明が必要な場合は、有効な資格証明を入力する必要があります。

一方向SSLを実現するには、Webサービス・クライアントのアラートで検索可能な信頼ストアを参照し、提示される証明書が存在するかどうかを判断する必要があります。これを行うには、BAMCommonConfig.xmlでプロパティを設定します。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のセキュアなWebサービスのコールに関する項を参照してください。

2. 安全性の高いWebサービスの場合は、「セキュアなWebサービス」チェック・ボックスを選択し、必要な資格証明を入力します。

3. 「サービスの表示」をクリックして、フィールドに入力したURLの使用可能なサービスを表示します。

4. WSDL/WSILと資格証明を入力して操作リストを取得し、操作を選択すると、最初は無効で空であった「エンドポイントURL」フィールドに値が移入されます。
これには、WebサービスのWSDLファイルに定義されているエンドポイントURLが移入されます。このエンドポイントURLが古い場合(たとえば、Webサービス実装を別のエンドポイントに移動して新規のWSDLを指定していないが、新規エンドポイントURLを認識している場合など)や不正確な場合、または上書きする場合は、このURLを編集できます。Oracle BAMイベント・エンジンがWebサービスを起動する場合は、構成済のエンドポイントURLを使用してWebサービスを起動します。

5. 「パラメータのマップ」をクリックします。
イベントがデータ・オブジェクトの変更に基づいている場合(例: 「データ・オブジェクトのデータ・フィールド変更時」、「レポートのデータ・フィールドが特定の条件を満たす場合」、「データ・オブジェクトのデータ・フィールドが特定の条件を満たす場合」)は、パラメータをマップできるフィールドの選択リストが表示されます。

パラメータをマップするには 「データ・オブジェクト・フィールド」オプションを選択し、「Webサービスのアラート - パラメータ・マッピング」ダイアログ・ボックスに表示された各Webサービス・パラメータの横にあるリストからデータ・オブジェクト・フィールドを選択します。

イベントがデータ・オブジェクトの変更に基づいていない場合は、値をテキスト・ボックスに入力します。

6. 「OK」をクリックして「Webサービスのアラート - パラメータ・マッピング」ダイアログ・ボックスと「Webサービス設定のアラート」ダイアログを閉じます。

具体的な例については、F.3.9.1項「Webサービスのコールの使用方法: 例」を参照してください。

注意:

Webサービスがコールに応答しない場合、レスポンスなしや失敗に関する使用可能なログはありません。

F.3.9.1 Webサービスのコールの使用方法: 例

次に、Webサービスを起動するアラートを作成する手順について詳しく説明します。ここでは、サンプルのEmployeesデータ・オブジェクトを使用してデータ・オブジェクトに行を挿入します。

Webサービスのコールを使用する手順は、次のとおりです。

1. Oracle BAMインスタンスに/Samples/Employeesデータ・オブジェクトが存在していることを確認します。

2. Oracle BAM Webアプリケーションにログインし、Oracle BAMアクティブ・スタジオを開きます。

3. 「アラート」タブを選択し、「新規アラートの作成」をクリックします。

4. 「ルールの作成」をクリックします。

5. 「イベントの選択」リストで、最初のオプションの「特定の時間」を選択します。

6. 「ルールの式」パネルで「時間間隔の選択」をクリックし、時間として「1秒」を選択します。

7. 「OK」をクリックし、次に「次へ」をクリックします。

8. 「アクションの選択」リストで、「Webサービスのコール」アクションを選択します。

9. 「ルールの式」パネルで、「Webサービスの設定」をクリックします。
「Webサービス設定のアラート」ダイアログが開きます。

10. インスタンスにDataObjectOperationByName WebサービスのWSDLを指定します。URLは次のようになります。

http://host_name:port_number/OracleBAMWS/WebServices/
DataObjectOperationsByName?WSDL

host_nameとport_numberは、Oracle BAMインスタンスのホスト名とポート番号に置き換えます。

11. 「セキュアなWebサービス」チェック・ボックスを選択し、資格証明を指定します。

12. 「操作の表示」をクリックし、リストされている操作から「挿入」操作を選択します。
これによって、WebサービスのエンドポイントURLが移入されます。Webサービスのエンドポイントが変更されている場合、または他の実装でこのエンドポイントを上書きする場合は、新規のエンドポイントURLを指定します。それ以外の場合はそのまま使用します。

13. 「パラメータのマップ」をクリックし、このWebサービスのパラメータにマップする値を指定します。
この例のWebサービス操作では、唯一のパラメータであるXMLペイロードに対する値が必要です。このXMLペイロードには、データ・オブジェクトに挿入する行が含まれています。

xmlpayload値に次のテキストを入力してクリックします。

<DataObject Name="Employees" Path="/Samples"><Contents><Row><Column
Name="Salesperson" Value="Greg Guan Gan" /><Column Name="Sales Area"
Value="Northeast" /><Column Name="Sales Number" Value="1234"
/></Row></Contents></DataObject>

14. 「OK」をクリックして「Webサービス設定のアラート」ダイアログを閉じ、「ルールの作成および編集」ダイアログで「OK」をクリックします。

15. その後にOracle BAMアーキテクトが開くため、/Samples/Employeesデータ・オブジェクトのコンテンツをチェックして、「Salesperson」の名前が「Greg Guan Gan」の新規行がデータ・オブジェクトに挿入されていることを確認します。

F.3.10 Oracle Data Integratorシナリオの実行

このアクションを使用して、Oracle Data Integratorにあるシナリオをトリガーします。このアクションを使用できるのは、Oracle Data Integrator統合ファイルがインストールされている場合のみです。詳細は、Oracle Fusion Middleware Oracle SOA Suite開発者ガイドのOracle Data Integrator統合ファイルのインストールを参照してください。

Oracle Data Integratorエージェントが実行中で、そのエージェントのホスト、ポートおよびログイン資格証明がOracle Enterprise Manager Fusion Middleware Controlに適切に構成されている必要があります。Oracle BAMではOracle Data Integratorエージェントが実行中であることの検証はされません。エージェントが実行中でない場合、アラートは起動しますが、必要なアクションは実行されません。また、Oracle Data IntegratorシナリオをトリガーするOracle BAMアラートは、Oracle Data Integratorシナリオ・コールの成功または失敗を追跡せず、Oracle BAM側で記録されることもありません。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のOracle Data Integratorプロパティの構成に関する項を参照してください。

「アラートの作成」ダイアログで、ドロップダウン・リストからシナリオの名前とバージョンを選択して、起動するOracle Data Integratorシナリオを選択します。

シナリオで変数が使用されている場合は、値を選択(値を入力するか、データ・オブジェクトからフィールド値を選択)して、同じ画面の「シナリオ変数」に渡します。

F.3.11 外部アクションのコール

外部アクションのコールは、カスタム・アクションの開発に使用します。Oracle BAMが提供するアクションではユーザーの要件を満たすことができない場合は、この機能を使用してアクション・セットを拡張します。

このアクションの構成方法の詳細は、第60.8項「外部アクションのコール」を参照してください。

F.4 頻度制限

頻度制限機能は、特定の時間間隔の間に送信できるアラート・メッセージの件数を制限することによって、ユーザーの電子メール受信ボックスがアラートでいっぱいになることを防止します。

頻度制限は、選択したイベントに対して適切な場合にのみ編集できます。そうでない場合は、使用できません。これは、時間の値(秒、分または時間)に設定できます。

これによって、ある期間にルールが起動する回数が制限されます。リアルタイム・データでは、トランザクションが1ミリ秒ごとに発生する可能性があるため、アラートの頻度を制御する必要があります。

G Oracle BAM ICommandの操作とファイル・フォーマット

この付録では、ICommandコマンドライン・ユーティリティとWebサービスで使用できる操作とパラメータについてそれぞれ詳細に説明します。

項目は次のとおりです。

- G.1項「個々の操作の要約」

- G.2項「操作に関する詳細な説明」

- G.3項「コマンド・ファイルのフォーマット」

- G.4項「ログ・ファイルのフォーマット」

- G.5項「サンプル・エクスポート・ファイル」

- G.6項「正規表現」

ICommandの詳細は、次の各トピックを参照してください。

- 第61章「ICommandの使用」

- 第59.5項「ICommand Webサービスの使用」

G.1 個々の操作の要約

この項では、各ICommand操作で使用可能なパラメータの要約を示します。これらの操作の要約は、コマンド・プロンプトでicommand(パラメータなし)と入力してコマンド・ウィンドウに表示することもできます。

表G-1に、ICommandで使用できるコマンドの要約を示します。

表G-1 ICommandコマンドの要約

コマンド

パラメータ

clear

-name itemname

[-type [dataobject|folder|distributionlist]]

clearの詳細は、G.2.1項「clear」を参照してください。

delete

[-name itemname]

[-type [dataobject|folder|report|rule|securityfilters|

distributionlist|ems|eds|all]]

[-match pattern]

[-regex regularexpression]

[-all [0|1]]

[-systemobjects [0|1]]

deleteの詳細は、G.2.2項「delete」を参照してください。

export

-file file_name

[-name itemname]

[-type [dataobject|folder|report|rule|securityfilters|

distributionlist|ems|eds|all]]

[-match pattern]

[-regex regularexpression]

[-all [0|1]]

[-systemobjects [0|1]]

[-dependencies [0|1]]

[-layout [0|1]]

[-contents [0|1]]

[-permissions [0|1]]

[-owner [0|1]]

[-header [0|1]]

[-footer [0|1]]

[-append [0|1]]

[-preview [0|1]]

exportの詳細は、G.2.3項「export」を参照してください。

import

-file file_name

-continueonerror

[-delay milliseconds]

[-updatelayout]

[-mode [preserveid|update|overwrite|append|rename|error]]

[-preserveowner]

[-setcol col_name/[null|now|value:override_value]]

[-preview]

importの詳細は、G.2.4項「import」を参照してください。

rename

-name itemname

-newname newitemname

[-type [dataobject|folder|report|rule|distributionlist|ems|

eds]]

renameの詳細は、G.2.5項「rename」を参照してください。

G.2 操作に関する詳細な説明

この項では、ICommandコマンド、各種パラメータおよびその例の詳細を説明します。次の項目が含まれます。

- G.2.1項「clear」

- G.2.2項「delete」

- G.2.3項「export」

- G.2.4項「import」

- G.2.5項「rename」

G.2.1 clear

アクティブ・データ・キャッシュにあるアイテムのコンテンツを消去します。

消去の意味は、アイテム・タイプによって異なります。

- データ・オブジェクトの場合は、データ・オブジェクト内の既存のすべての行が削除されます。

- フォルダの場合は、フォルダのすべてのコンテンツが削除されます。

- ディストリビューション・リストでは、すべてのメンバー(ユーザーおよびグループ)がそのディストリビューション・リストから削除されます。

表G-2 clearコマンドのパラメータ

パラメータ

説明

-name itemname

消去するアイテムの名前。必須です。

-type itemtype

消去するアイテムのタイプ。次の値が有効です。

- dataobject(例G-1を参照)

- folder

- distributionlist

このパラメータを省略すると、dataobjectが使用されます。

例G-1 データ・オブジェクトの消去

icommand -cmd clear -name "/Samples/Call Center" -type dataobject

G.2.2 delete

アクティブ・データ・キャッシュからアイテムを削除します。

表G-3 deleteコマンドのパラメータ

パラメータ

説明

-all [0|1]

指定したタイプのすべてのアイテムを削除するかどうかを制御します(例G-5を参照)。

0(ゼロ)以外の値を指定した場合または値を省略した場合は、指定したタイプのすべてのアイテムが削除され、0(ゼロ)を指定した場合は、指定した(一致した)アイテムのみが削除されます。このパラメータを省略すると、0(ゼロ)が使用されます。

-match pattern

アスタリスク(*)および疑問符(?)を使用するDOS形式のパターン一致文字列。名前がパターンと一致するアイテムが削除されます。

-name itemname

削除するアイテムの名前。

-regex regularexpr

正規表現パターン一致文字列。名前がパターンと一致するアイテムが削除されます。詳細は、G.6項「正規表現」を参照してください。

-systemobjects [0|1]

all、matchまたはregexパラメータを使用した場合にSystemフォルダ内のデータ・オブジェクトが含まれるかどうかを制御します。0(ゼロ)を指定すると、データ・オブジェクトは含まれません。このパラメータを省略すると、0(ゼロ)が使用されます。

-type itemtype

削除するアイテムのタイプ。次の値が有効です。

- dataobject(例G-2を参照)

- folder

- report (例G-5を参照)

- rule

- securityfilters(指定したデータ・オブジェクトの場合)

- distributionlist

- ems(エンタープライズ・メッセージ・ソース)

- eds(外部データ・ソース)

- all(例G-6を参照)

このパラメータを省略すると、dataobjectが使用されます。

例G-2 データ・オブジェクトの削除

TestDOという名前のデータ・オブジェクトを削除します。typeパラメータを指定しない場合は、dataobjectタイプが使用されます。

icommand -cmd delete -name TestDO

例G-3 アラート・ルールの削除

ICommand操作でアラートが発生する場合、typeパラメータの値はruleです。このコマンドで、MyAlertという名前のルールを削除します。

icommand -cmd delete -type rule -name "MyAlert"

例G-4 データ・オブジェクトに定義されているセキュリティ・フィルタの削除

データ・オブジェクトに定義されているセキュリティ・フィルタを削除するには、セキュリティ・フィルタの名前ではなくデータ・オブジェクトの名前を指定する必要があります。このコマンドで、データ・オブジェクトMyDataObjectに定義されているすべてのセキュリティ・フィルタを削除します。

icommand -cmd delete -type securityfilters -name "MyDataObject"

例G-5 すべてのレポートの削除

reportタイプのすべてのオブジェクトを削除します。

icommand -cmd delete -type report -all 1

例G-6 すべてのオブジェクトの削除

システム・オブジェクト(Systemフォルダのデータ・オブジェクト)を除くすべてのアイテムを削除します。

icommand -cmd delete -type all

G.2.3 export

アクティブ・データ・キャッシュの1つ以上のオブジェクトに関する情報をXMLファイルにエクスポートします。エクスポートされたデータ・オブジェクトの例は、G.5項「サンプル・エクスポート・ファイル」を参照してください。

表G-4 exportコマンドのパラメータ

パラメータ

説明

-all [0|1]

指定したタイプのすべてのアイテムについて、エクスポートするかどうかを制御します。

0(ゼロ)以外の値を指定した場合または値を省略した場合は、指定したタイプのすべてのアイテムがエクスポートされ、0(ゼロ)を指定した場合は、指定した(一致した)アイテムのみがエクスポートされます。このパラメータを省略すると、0(ゼロ)が使用されます。

レポート、フォルダおよびルールの場合は、ICommandを実行しているユーザーが管理者でないかぎり、そのICommandを実行しているユーザーが所有しているアイテムのみがエクスポートされます。管理者がICommandを実行すると、すべてのユーザーのアイテムがエクスポートされます。

例G-14「システム内のすべてのレポートのエクスポート」を参照してください。

-append [0|1]

エクスポートされた情報を既存のファイルに追加するかどうかを制御します。

0(ゼロ)以外の値を指定すると、追加されます。0(ゼロ)を指定すると、既存ファイルのコンテンツが上書きされます。このパラメータを省略するか、または値を省略すると、0(ゼロ)が使用されます。

appendパラメータは、例G-23「エクスポートでのappendパラメータの使用」の説明に従って、ヘッダー・パラメータおよびフッター・パラメータとともに使用する必要があります。

appendパラメータを使用する場合は、ヘッダー・パラメータとフッター・パラメータを定義する必要があります。これらのパラメータを定義しないと、エクスポート・ファイルへの各appendごとに、XMLヘッダー情報タグとXML </OracleBAMExport>終了タグが含まれます。このファイルはOracle BAMへのインポートに使用できません。これは、最初の</OracleBAMExport>終了タグが検出された時点でインポートが停止し、残りのオブジェクトが無視されるためです。

-contents [0|1]

コンテンツ情報(行、列値)をエクスポートするかどうかを制御します。データ・オブジェクトに対してのみ適用されます。contentsパラメータは他のアーティファクトに対して使用できないため、-type allパラメータとともに使用することはできません。

0(ゼロ)以外の値を指定すると、コンテンツ情報がエクスポートされます。0(ゼロ)を指定すると、コンテンツ情報はエクスポートされません。このパラメータを省略するか、または値を省略すると、0(ゼロ)以外の値が使用されます。

また、次の場合にのみ使用できます。

- すべてのデータ・オブジェクトが、パラメータ-all 1を使用してエクスポートされる場合

- 一連のデータ・オブジェクトが、regexまたはmatchパラメータを使用してエクスポートされる場合

- 単一のデータ・オブジェクトがエクスポートされる場合

-dependencies [0|1]

レポートおよびデータ・オブジェクトに対して適用されます。

レポート: 指定されているレポートが依存しているレポートがエクスポートされるかどうかを制御します。

Icommandでは、指定されているレポートが他のレポートに依存しているかどうかが自動的に判別され、それらが自動的にエクスポートされます。1つ以上の依存レポートが最初にエクスポートされ、その後にコマンドで指定されているレポートが続きます。

レポート・ファイルをインポートする場合、すべての依存レポートが最初にインポートされ、その後に、エクスポートするように選択したレポートが続きます。このパラメータの使用方法の例は、例G-22「関連する依存レポートとともにレポートをエクスポートする」を参照してください。

データ・オブジェクト: エクスポート対象のデータ・オブジェクトが依存する他のデータ・オブジェクトが参照列にある場合、それらをエクスポートするかどうかを制御します。

ゼロ以外の値の場合または値を指定せずにパラメータのみが指定されている場合は、レポートまたはデータ・オブジェクトの依存関係がエクスポートされます。このパラメータを省略すると、0(ゼロ)が使用されます。

-file file_name

エクスポート先のファイルの名前。必須です。

このファイルが存在しない場合は作成されます。このファイルが存在する場合は、appendパラメータを使用しないかぎり、コンテンツは上書きされます。このファイルにはXMLが含まれるため、通常XML拡張子が使用されます。

-footer [0|1]

XMLの終了情報をエクスポート・ファイルの最後に書き込むかどうかを制御します。これを使用すると、ICommandを連続実行して、同じファイルに繰り返し追加を行うことで1つのXMLファイルをアセンブルできます。

0(ゼロ)以外の値を指定すると、終了情報に書込みが行われます。0(ゼロ)を指定すると、終了情報に書込みは行われません。このパラメータを省略するか値を省略すると、0(ゼロ)以外の値が使用されます。

appendパラメータと併用する場合は、フッター値を適切に設定する必要があります。適切に設定しないと、そのファイルはICommandインポートで使用できません。フッターが定義されていないと、各appendに</OracleBAMExport>終了タグが含まれ、最初の終了タグが読み取られた時点でインポートが停止し、このファイルに定義されている残りのオブジェクトはインポートされません。

このパラメータを使用したサンプルについては、例G-23「エクスポートでのappendパラメータの使用」を参照してください。

-header [0|1]

XMLヘッダー情報をエクスポート・ファイルの先頭に書き込むかどうかを制御します。これを使用すると、ICommandを連続実行して、同じファイルに繰り返し追加を行うことで1つのXMLファイルをアセンブルできます。

0(ゼロ)以外の値を指定すると、ヘッダーに書込みが行われます。0(ゼロ)を指定すると、ヘッダーに書込みは行われません。このパラメータを省略するか値を省略すると、0(ゼロ)以外の値が使用されます。

このパラメータを使用したサンプルについては、例G-23「エクスポートでのappendパラメータの使用」を参照してください。

-layout [0|1]

データ・オブジェクトに対してのみ適用されます。レイアウト情報をエクスポートするかどうかを制御します。

0(ゼロ)以外の値を指定すると、レイアウト情報がエクスポートされます。0(ゼロ)を指定すると、レイアウト情報はエクスポートされません。このパラメータを省略するか、または値を省略すると、0(ゼロ)以外の値が使用されます。

-match pattern

アスタリスク(*)および疑問符(?)を使用するDOS形式のパターン一致文字列。名前がパターンと一致するアイテムがエクスポートされます(例G-21「一致パラメータを使用したデータ・オブジェクトのエクスポート」を参照)。

-name itemname

エクスポートするアイテムの名前。

-owner [0|1]

フォルダ、レポートおよびルールに対してのみ適用されます。エクスポート対象のアイテムの所有者に関する情報をエクスポートに含めるかどうかを制御します。

0(ゼロ)以外の値を指定すると、所有者情報がエクスポートされます。0(ゼロ)を指定すると、所有者情報はエクスポートされません。このパラメータを省略するか値を省略すると、0(ゼロ)以外の値が使用されます。

-permissions [0|1]

データ・オブジェクトおよびフォルダに対してのみ適用されます。権限情報をエクスポートするかどうかを制御します。

0(ゼロ)以外の値を指定すると、エクスポート対象のデータ・オブジェクトまたはフォルダの権限設定に関する情報がエクスポートされます。0(ゼロ)を指定すると、権限に関する情報はエクスポートされません。このパラメータを省略するか、または値を省略すると、0(ゼロ)が使用されます。

データ・オブジェクトの場合は、データ・オブジェクト自体の権限のみがエクスポートされます。データ・オブジェクトが含まれているフォルダまたはサブフォルダに対する権限は含まれません。

フォルダの場合は、対象となる権限に、エクスポート対象のフォルダのすべての親フォルダの累積権限が反映されます。

-preview [0|1]

previewモードでICommandを実行すると、指定したすべてのアイテムがエクスポートされますが、実際に情報は出力されません。このモードを使用すると、指定したコマンドラインでエクスポートされる情報および発生する可能性があるエラーを確認できます。このモードの場合、preview以外のモードではエクスポートが停止するようなエラーが発生した後も、ICommand exportの処理は続行されます。

0(ゼロ)以外の値を指定すると、previewモードになります。この値を省略すると、0(ゼロ)以外の値が使用されます。パラメータを省略すると、0(ゼロ)が使用されます。

-regex regularexpr

正規表現パターン一致文字列。名前がパターンと一致するアイテムがエクスポートされます。詳細は、G.6項「正規表現」を参照してください。

-systemobjects [0|1]

all、matchまたはregexパラメータを使用した場合にシステム・フォルダ内のデータ・オブジェクトが含まれるかどうかを制御します。0(ゼロ)を指定すると、データ・オブジェクトは含まれません。このパラメータを省略すると、0(ゼロ)が使用されます。

-type itemtype

エクスポートするアイテムのタイプ。次の値が有効です。

- dataobject(例G-7および例G-8を参照)

- folder(例G-9、例G-10および例G-11を参照)

- report(例G-12、例G-13および例G-14を参照)

- rule(例G-15を参照)

- securityfilters(指定したデータ・オブジェクトの場合)(例G-16を参照)

- distributionlist(例G-17を参照)

- ems(エンタープライズ・メッセージ・ソース)(例G-18を参照)

- eds(外部データ・ソース)(例G-19を参照)

- all(例G-20を参照)

このパラメータを省略すると、dataobjectが使用されます。

例G-7 データ・オブジェクトのフォルダ内へのエクスポート

icommand -cmd export -name "/Samples/Call Center" -file "C:\CallCenter.xml"

typeパラメータはこの例に含まれていないことに注意してください。デフォルトでは、指定がない場合typeにはdataobjectが割り当てられます。

例G-8 データ・オブジェクトのルートへのエクスポート

icommand -cmd export -name TestDataObject -file "C:\TestDataObject.xml"

データ・オブジェクト名の前にスラッシュ(/)がないことに注意してください。データ・オブジェクトがルートのData Objectsフォルダにある場合、スラッシュは必要ありません。

例G-9 マイ・レポートからフォルダをエクスポート

最初のケースの場合、フォルダをエクスポートしているユーザーがフォルダの所有者ではないため、nameパラメータにprivate:owner/Report接頭辞が使用されます。

icommand -cmd export -name "/private:bamadmin/Report/TestMainFolder/TestSubFolder"
-type folder -file C:\FolderExportTest.xml

2番目のケースの場合、フォルダをエクスポートしているユーザーがフォルダの所有者であるため、nameパラメータにprivate:owner/Report接頭辞は使用されません。

icommand -cmd export -name "/TestMainFolder/TestSubFolder" -type folder -file
C:\FolderExportTest.xml

例G-10 共有レポートからフォルダをエクスポート

icommand -cmd export -name "/public/Report/MainFolderInShared" -type folder -file
C:\FolderExportTest2.xml

public接頭辞がnameパラメータに追加されていることに注意してください。

例G-11 データ・オブジェクトからフォルダをエクスポート

icommand -cmd export -name "/public/DataObject/Test Sub folder" -type folder -file
C:\foldertest1.xml

例G-12 プライベート・レポートのエクスポート

例G-9にあるように、プライベート・レポートのエクスポート方法は2種類あります。

icommand -cmd export -name "/private:bamadmin/Report/MyReport" -type report -file C:\MyReport.xml

icommand -cmd export -name MyReport -type report -file C:\MyReport.xml

例G-13 共有レポートのエクスポート

icommand -cmd export -name "/public/Report/SharedReport" -type report -file C:\SharedReport.xml

例G-14 システム内のすべてのレポートのエクスポート

icommand -cmd export -type report -all -file C:\temp\TestAll.xml

例G-15 アラート・ルールのエクスポート

icommand -cmd export -name Alert1 -type rule -file C:\Alert1.xml

例G-16 セキュリティ・フィルタのエクスポート

icommand -cmd export -type securityfilters -name "TestDO" -file "C:\TestFilter.xml"

nameパラメータでは、セキュリティ・フィルタの名前ではなくデータ・オブジェクトの名前が指定されていることに注意してください。

例G-17 ディストリビューション・リストのエクスポート

icommand -cmd export -name MyDistList -type distributionlist -file C:\MyDistList.xml

例G-18 エンタープライズ・メッセージ・ソースのエクスポート

icommand -cmd export -type ems -name TestEMS -file C:\TestEMS.xml

例G-19 外部データ・ソースのエクスポート

icommand -cmd export -type eds -name TestEDS -file C:\TestEDS.xml

例G-20 システム内のすべてのOracle BAMオブジェクトのエクスポート

icommand -cmd export -type all -file C:\temp\TestAll.xml

例G-21 一致パラメータを使用したデータ・オブジェクトのエクスポート

icommand -cmd export -match "/M*" -file "c:/exportDOstartingwithM.xml"

例G-22 関連する依存レポートとともにレポートをエクスポートする

icommand -cmd export -type report -name Report1 -dependencies 1 -file Report1.xml

依存レポートは自動的に判別され、最初にエクスポートされます。それらは、指定したレポートをインポートするときに、再びインポートされます。

例G-23 エクスポートでのappendパラメータの使用

最初のケース(不適切な例)では、appendをヘッダー・パラメータとフッター・パラメータを設定せずに使用しています(デフォルトでは、ヘッダーとフッターは1に設定されます)。

icommand -cmd export -type dataobject -name "/Samples/Call Center" -file do.xml
icommand -cmd export -type dataobject -name "/Samples/Employees" -file do.xml -append
icommand -cmd export -type dataobject -name "/Samples/Film Sales" -file do.xml  -append

これらのコマンドからの出力を次に示します。ファイルへの各appendごとに、XMLヘッダー・タグと終了タグが含まれていることに注意してください。データをOracle BAMにインポートするためにこのファイルを使用すると、最初のオブジェクトのみがインポートされます。4行目にある最初の</OracleBAMExport>が読み取られると、インポートは停止します。

<?xml version="1.0"?>
<OracleBAMExport Version="2020">
<exported object/>
</OracleBAMExport>
<?xml version="1.0"?>
<OracleBAMExport Version="2020">
<exported object/>
</OracleBAMExport>
<?xml version="1.0"?>
<OracleBAMExport Version="2020">
<exported object/>
</OracleBAMExport>

2番目のケース(適切な例)では、必要な出力を生成するために、ヘッダー・パラメータとフッター・パラメータが指定されています。

icommand -cmd export -type dataobject -name "/Samples/Call Center" -file do2.xml
-header 1 -footer 0
//only the footer is supressed in the first command
icommand -cmd export -type dataobject -name "/Samples/Employees" -file do2.xml
-append 1 -header 0 -footer 0
//both the header and the footer are suppressed in the intermediate commands
icommand -cmd export -type dataobject -name "/Samples/Film Sales" -file do2.xml
-append 1 -header 0 -footer 1
//only the header is suppressed in the last commands

これらのコマンドによって生成された出力ファイルによって、オブジェクトをOracle BAMサーバーにインポートできます。

<?xml version="1.0"?>
<OracleBAMExport Version="2020">
<exported object>
<exported object>
</OracleBAMExport>

G.2.4 import

XMLファイルからの情報をアクティブ・データ・キャッシュのオブジェクトにインポートします。このオブジェクトは、作成、置換または更新できます。

このオブジェクトが存在しない場合、可能であれば作成されます。データ・オブジェクトの場合、入力ファイルには、データ・オブジェクトを作成するためにレイアウト情報を含める必要があります。また、このファイルにコンテンツ情報が含まれていない場合は、空のデータ・オブジェクトが作成されます。

ICommandを実行しているユーザーが管理者でない場合、レポートは、ICommandを実行しているユーザーのプライベート・フォルダに常にインポートされます。インポート・ファイル内のパス情報が、ICommandを実行しているユーザーの既存のプライベート・フォルダと完全に一致する場合、インポートされたファイルはその場所に格納されます。そうでない場合は、ユーザーのプライベート・フォルダのルートに格納されます。

ICommandを実行しているユーザーが管理者の場合は、preserveownerオプションを使用すると、フォルダ、レポートおよびルールをそれらの元の場所に元の所有権のままでインポートできることがあります。

表G-5 importコマンドのパラメータ

パラメータ

説明

-continueonerror [0|1]

ファイルからオブジェクトをインポートする際、デフォルトでは、ICommandはエラーが起きるたびに停止します。複数のオブジェクトをインポートしている際にそのうちの1つにエラーが見つかっても停止しないようにするには、コマンドで指定したオブジェクトの残りのインポートを継続するようにcontinueonerrorパラメータを使用します。

エラーを無視して他のオブジェクトのインポートを継続する場合は1を指定します(例G-24を参照)。

-delay millisec

データ・オブジェクトに対してのみ適用されます。行の挿入または行の更新を行ってから次の行の挿入または行の更新を行うまでの遅延を指定する値。

これを使用すると、指定した速度でアクティブ・データをシミュレートできます。

この数値は、次の行に対して処理を行うまで待機する時間(ミリ秒)です。0(ゼロ)より大きい必要があります。

このパラメータを省略すると、遅延は発生しません。

例G-24「遅延を伴うデータ・オブジェクトのインポート」を参照してください。

-file file_name

インポート元のファイルの名前。必須です。通常、これは、exportコマンドで作成されたファイルです。

-preserveowner

フォルダ、レポートおよびルールに対してのみ適用されます。アイテムのインポート時に、アイテムの所有権をインポート・ファイルに指定されているとおりに設定するかどうかを制御します。

この所有権の設定は、エクスポート時に所有権がファイルに付与されていた場合およびICommandを実行しているユーザーが管理者の場合にのみ行うことができます。

0(ゼロ)以外の値を指定すると、インポート・ファイルに指定されているとおりに所有権が設定されます。0(ゼロ)は、ICommandを実行しているユーザーがインポートしたアイテムを所有していることを意味します。このパラメータを省略するか、または値を省略すると、0(ゼロ)が使用されます。

-preview [0|1]

previewモードでICommandを実行すると、指定したすべてのアイテムがインポートされますが、実際に情報は入力されません。このモードを使用すると、指定したコマンドラインでインポートされる情報および発生する可能性があるエラーを確認できます。このモードでは、preview以外のモードではインポートが停止するようなエラーが発生した後も、ICommand importの処理は続行されます。

0(ゼロ)以外の値を指定すると、previewモードになります。この値を省略すると、0(ゼロ)以外の値が使用されます。パラメータを省略すると、0(ゼロ)が使用されます。

このパラメータは、ルール、ディストリビューション・リスト、EDS、EMS、レポート、フォルダおよびセキュリティ・フィルタの各オブジェクトに対してサポートされます。

例G-25「プレビュー・モードでのレポートのインポート」を参照してください。

-mode mode

デフォルトでは、モード・パラメータの指定がない場合、タイプがフォルダ、レポート、EDS、EMSおよびディストリビューション・リストのオブジェクトに対してerrorの値が使用されます。

次のモード値は、フォルダ、レポート、EMSおよびEDSの各オブジェクトに対して有効です。

- overwrite
アイテムが存在している場合は、インポートしたアイテムに置換されます。

- rename
アイテムが存在している場合は、インポートしたアイテムの名前が変更されます。新しい名前は、自動的に計算され、メッセージでレポートされます。

- error
アイテムが存在している場合はインポートが終了し、エラーが戻されます。

次の値は、ディストリビューション・リスト・オブジェクトに対して有効です。

- overwrite
アイテムが存在している場合は、インポートしたアイテムに置換されます。

- rename
アイテムが存在している場合は、インポートしたアイテムの名前が変更されます。新しい名前は、自動的に計算され、メッセージでレポートされます。

- append
アイテムが存在している場合は、インポートしたリスト内のユーザーが既存のリストに追加されます。

- error
アイテムが存在している場合はインポートが終了し、エラーが戻されます。

データ・オブジェクトまたはレポートに対しては、次の値がサポートされています。

- preserveid
このオプションは重要です。レポートなどの他の一部のアイテムでは、使用されるオブジェクトが名前ではなくIDで示されるためです。

データ・オブジェクトの使用:

インポートしたデータ・オブジェクトが存在しないため、それらを作成する必要がある場合は、ICommandによって、エクスポートしたデータ・オブジェクトに含まれている内部IDと同じ内部IDがデータ・オブジェクトに割り当てられます。これが不可能な場合はインポートが終了し、エラーが戻されます。

レポートの使用:

インポートしたレポートが存在しないため、それらを作成する必要がある場合は、ICommandによって、エクスポートしたレポートに含まれている内部IDと同じ内部IDがレポートに割り当てられます。これが不可能な場合はインポートが終了し、エラーが戻されます。

-mode mode(続き)

次の値は、データ・オブジェクトに対してのみ有効です。

- update
通常、ICommandでデータ・オブジェクトをインポートすると、新しいデータ・オブジェクトが作成されるか、または既存のデータ・オブジェクトが検索され、インポートした行がそのデータ・オブジェクトに挿入されます。

updateモードでは、かわりに、既存の一致する行が行IDで検索され、それらの既存の行がインポート・ファイル内の値で更新されます。一致しない行は挿入されます。インポート・ファイル内の一致する行IDにデータ列が指定されていない場合、その行は既存のデータ・オブジェクトから削除されます。

セキュリティ・フィルタの場合、サポートされている値はoverwriteのみです。データ・オブジェクトに1つ以上のセキュリティ・フィルタが含まれている場合は、overwriteを指定しないとインポートが終了し、エラーが戻されます。

このパラメータは、ルールに対してはサポートされていません。

-setcol

インポート時にコマンドラインから列値の上書き(現在の日時への設定など)を実行できます。

-setcol column_name/NULL

-setcol column_name/NOW

-setcol column_name/VALUE:override-value

column_nameは、インポート対象データ・オブジェクト内の列の名前です。検索型または計算型の列は指定できません。インポート対象の入力XMLに含まれていない列名は、インポート先のデータ・オブジェクト内の列である場合に指定できます。スラッシュの後の部分によって、インポートする各行上の該当する列のかわりに使用される値を指定します。この場合、インポート・ファイル内の該当する列のすべての値が無視(上書き)されます。スラッシュは列名に使用できない文字の1つであるため、この構文の列名で競合が発生する可能性はありません。

NULLによって、列値がNULLに設定されるように指定します。この列は、データ・オブジェクトのレイアウトでNULL値可能と定義されている必要があります。

NOWによって、列値が行に設定された日時に、列値が設定されるように指定します。このオプションは、日時型、タイムスタンプ型および文字列型の列に対してのみ使用できます。

VALUE:override-valueによって、列に設定される任意の定数値を(コロンの後に)指定します。この値は、列の型に対して有効な値である必要があります。複数の列を上書き可能にするために、多数のsetcolパラメータが存在する場合があります。ただし、パラメータの重複は許容されないため、ICommandでは、setcolで始まるすべてのパラメータ名(setcol1、setcol2など)がsetcolパラメータとして認識されます。次にサンプル・コマンドラインを示します。

icommand -cmd import -file myfile.xml -setcol1 Field1/null -setcol2 Field3/now -setcol3 "Customer Name/value:John Q. Public"

-updatelayout

データ・オブジェクトに対してのみ適用されます。インポート対象のデータ・オブジェクトが存在する場合にそのデータ・オブジェクトのレイアウト(スキーマ)を、インポート・ファイル内のレイアウト情報に従って更新するかどうかを制御します。

パラメータが存在する場合はtrueで、存在しない場合はfalseです。

例G-24 遅延を伴うデータ・オブジェクトのインポート

icommand -cmd import -file C:\TestDO.xml -delay 1000 -continueonerror 1

例G-25 プレビュー・モードでのレポートのインポート

icommand -cmd import -file C:\TestReport.xml -preview 1

G.2.5 rename

アクティブ・データ・キャッシュにあるアイテムの名前を変更します。

表G-6 renameコマンドのパラメータ

パラメータ

説明

-name itemname

名前を変更するアイテムの名前。必須です。

フォルダ・タイプのオブジェクトの名前を変更する場合は、フォルダのフルパスを指定する必要があります(例G-27「フォルダの名前の変更」を参照)。

-newname newitemname

アイテムの新しい名前。必須です。

フォルダ・タイプのオブジェクトの名前を変更する場合は、フォルダのフルパスを指定する必要があります(例G-27「フォルダの名前の変更」を参照)。

データ・オブジェクトおよびレポートの場合は、新しいベース名のみをパスなしで指定する必要があります(たとえば、-newname "MyReport"などです)。

-type itemtype

名前を変更するオブジェクトのタイプ。次の値が有効です。

- dataobject(例G-26を参照)

- folder(例G-27を参照)

- report (例G-28を参照)

- rule

- distributionlist(例G-29を参照)

- ems(エンタープライズ・メッセージ・ソース)

- eds(外部データ・ソース)

このパラメータを省略すると、dataobjectが使用されます。allは、renameコマンドのアイテム・タイプとしてサポートされていません。

例G-26 フォルダ内のデータ・オブジェクトの名前の変更

icommand -cmd rename -type dataobject -name "/TestDataObjectFolder/TestDataObject"
-newname NewTestDataObject

例G-27 フォルダの名前の変更

データ・オブジェクト・フォルダの名前の変更

icommand -cmd rename -type folder -name "/public/DataObject/TestFolder"
-newname "/public/DataObject/NewTestFolder"

プライベート・レポート・フォルダの名前の変更

icommand -cmd rename -type folder -name "/private:weblogic/Report/MySubFolder"
-newname "/private:weblogic/Report/NewMySubFolder"

共有レポート・フォルダの名前の変更

icommand -cmd rename -type folder -name "/public/Report/TestSubFolder"
-newname "/public/Report/NewTestSubFolder"

例G-28 プライベート・フォルダ内のレポートの名前の変更

icommand -cmd rename -type report -name "/TestReportFolder/TestReport" -newname
NewTestReport

例G-29 ディストリビューション・リストの名前の変更

icommand -cmd rename -type distributionlist -name TestList -newname MyDistList

例G-30 アラート・ルールの名前の変更

ICommand操作でアラートが発生する場合、typeパラメータの値はruleです。このコマンドで、MyAlertというルールの名前を削除します。

icommand -cmd rename -type rule -name "MyAlert" -newname "MyRenamedAlert"

G.3 コマンド・ファイルのフォーマット

この項のトピックは、次のとおりです。

- G.3.1項「インライン・コンテンツ」

- G.3.2項「コマンドID」

- G.3.3項「エラー時も続行」

コマンド・ファイルには、ルート・タグOracleBAMCommandsが含まれています。

ルート・タグ内には、すべてのコマンドを実行するタグがあります。タグ名はコマンド名です。また、コマンドのパラメータは属性です。

サンプル・コマンド・ファイル

<?xml version="1.0" encoding="utf-8"?>
<OracleBAMCommands continueonerror="1">
<Export name="Samples/Media Sales" file="MediaSales.xml" contents="0" />
<Rename name="Samples/Call Center" newname="Call Centre" />
<Delete type="EMS" name="WebLog" />
<Delete type="EMS" name="WebLog2" />
</OracleBAMCommands>

このサンプル・コマンド・ファイルの出力は、G.4項「ログ・ファイルのフォーマット」を参照してください。

G.3.1 インライン・コンテンツ

コマンド・ファイルを使用してインポートする場合、inlineオプションを使用するとインポートするコンテンツを、別のインポート・ファイル内ではなくコマンド・ファイル内に含めることができます。次に例を示します。

<?xml version="1.0"?>
<OracleBAMCommands>
<Import inline="1">
<OracleBAMExport Version="2013">
<DataObject Version="14" Name="Employees_Inline" ID="_Employees_Inline"
Path="/Samples" External="0">
<Layout>
<Column Name="Salesperson" ID="_Salesperson" Type="string" MaxSize="100"
Nullable="1" Public="1"/>
<Column Name="Sales Area" ID="_Sales_Area" Type="string" MaxSize="100"
Nullable="1" Public="1"/>
<Column Name="Sales Number" ID="_Sales_Number" Type="integer"
Nullable="1" Public="1"/>
<Column Name="Timestamp" ID="_Timestamp" Type="timestamp" Nullable="0"
Public="1"/>
<Indexes/>
</Layout>
<Contents>
<Row ID="1">
<Column ID="_Salesperson" Value="Greg Masters"/>
<Column ID="_Sales_Area" Value="Northeast"/>
<Column ID="_Sales_Number" Value="567"/>
<Column ID="_Timestamp" Value="2004-09-14T14:07:41.0000560PDT"/>
</Row>
<Row ID="2">
<Column ID="_Salesperson" Value="Lynette Jones"/>
<Column ID="_Sales_Area" Value="Southwest"/>
<Column ID="_Sales_Number" Value="228"/>
<Column ID="_Timestamp" Value="2004-09-14T14:07:41.0000560PDT"/>
</Row>
<Row ID="3">
<Column ID="_Salesperson" Value="Noel Rogers"/>
<Column ID="_Sales_Area" Value="Northwest"/>
<Column ID="_Sales_Number" Value="459"/>
<Column ID="_Timestamp" Value="2004-09-14T14:07:41.0000560PDT"/>
</Row>
</Contents>
</DataObject>
</OracleBAMExport>
</Import>
</OracleBAMCommands>

G.3.2 コマンドID

この機能は、出力をログ・ファイルに送信する場合にのみ使用されます。ログ結果の解析を簡単にするために、各コマンドにIDを指定できます。このIDは、該当するコマンドに関連する出力の結果要素またはエラー要素に含まれます。

入力例

<OracleBAMCommands continueonerror="1">
<Delete id="1" type="dataobject" name="Data Object A"/>
<Delete id="2" type="dataobject" name="Data Object B"/>
</OracleBAMCommands>

出力ログ・ファイル例

<?xml version="1.0"?>
<ICommandLog Login="weblogic">
<Results Command="Delete" ID="1">Data Object &quot;/Data Object A&quot;
deleted.</Results>
<Error Command="Delete" ID="2">
<![CDATA[BAM-02409: There is no Data Object named "Data Object B".
[ErrorSource="ICommandEngine",ErrorID="ICommandEngine.DOExist"]]]>
</Error>
</ICommandLog>

G.3.3 エラー時も続行

通常、ICommandでは、障害が発生するまで、またはすべてのコマンドが正常に完了するまでコマンド・ファイル内のコマンドが実行されます。つまり、コマンド・ファイルに20のコマンドが含まれていて、2つ目のコマンドで障害が発生した場合、それ以降のコマンドは実行されません。continueonerror属性をグローバル・レベルで使用するか、または各コマンドに対して使用することによって、この動作を変更できます。

例G-31に、continueonerror属性を使用して、障害が発生したかどうかに関係なくすべてのコマンドを実行する方法を示します。

例G-31 グローバル・レベルでのContinueOnErrorモードの有効化

<OracleBAMCommands  continueonerror="1">
<Delete id="1" type="dataobject" name="Data Object A"/>
<Delete id="2" type="dataobject" name="Data Object B"/>
</OracleBAMCommands>

例G-32で、continueonerrorが適用されているのは、データ・オブジェクトAを削除するコマンドのみです。このコマンドが失敗した場合、ICommandはエラーを出力して処理を続行します。しかし、他のコマンドが失敗した場合、ICommandはただちに停止します。

例G-32 コマンド・レベルでのContinueOnErrorモードの有効化

<OracleBAMCommands>
<Delete id="1" type="dataobject" name="Data Object A" continueonerror="1"/>
<Delete id="2" type="dataobject" name="Data Object B"/>
<Delete id="3" type="dataobject" name="Data Object C"/>
<Delete id="4" type="dataobject" name="Data Object D"/>
</OracleBAMCommands>

G.4 ログ・ファイルのフォーマット

ログ・ファイルには、ルート・タグICommandLogが含まれています。

ルート・タグ内には、記録されたすべてのエラー・メッセージまたは情報メッセージのエントリがあります。

エラーは、Errorタグ付きで記録されます。

情報メッセージは、Resultsタグ付きで記録されます。

ResultsとErrorの両方のタグには、必要に応じてCommand=cmdnameという形式の属性が含まれます。この属性には、エラー・メッセージまたは情報メッセージを生成したコマンドの名前が含まれます。

このサンプル・ログ・ファイルは、G.3項「コマンド・ファイルのフォーマット」で指定したコマンド・ファイルの出力です。

<?xml version="1.0" encoding="utf-8"?>
<ICommandLog Login="user_name">
<Results Command="Export">Data Object "/Samples/Media Sales" exported
successfully (0 rows).</Results>
<Results Command="Export">1 items exported successfully.</Results>
<Results Command="Rename">Data Object "/Samples/Call Center" renamed to
"/Samples/Call Centre".</Results>
<Results Command="Delete">Enterprise Message Source "WebLog" deleted.</Results>
<Error Command="Delete"><![CDATA[Error while processing command "Delete".
[ErrorSource="ICommand", ErrorID="ICommand.Error"] There is no Enterprise Message
Source named "WebLog2". [ErrorSource="ICommand",
ErrorID="ICommand.EMSExist"]]]></Error>
</ICommandLog>

G.5 サンプル・エクスポート・ファイル

次の例は、データ・オブジェクトをエクスポートした結果生じたサンプル・ファイルを示しています。

<?xml version="1.0"?>
<OracleBAMExport Version="2018">
<DataObject Version="14" Name="Employees" ID="_Employees" Path="/Samples"
External="0">
<Layout>
<Column Name="Salesperson" ID="_Salesperson" Type="string" MaxSize="100"
Nullable="1" Public="1"/>
<Column Name="Sales Area" ID="_Sales_Area" Type="string" MaxSize="100"
Nullable="1" Public="1"/>
<Column Name="Sales Number" ID="_Sales_Number" Type="integer" Nullable="1"
Public="1"/>
<Column Name="Timestamp" ID="_Timestamp" Type="timestamp" Nullable="0"
Public="1"/>
<Indexes/>
</Layout>
<Contents>
<Row ID="1">
<Column ID="_Salesperson" Value="Greg Masters"/>
<Column ID="_Sales_Area" Value="Northeast"/>
<Column ID="_Sales_Number" Value="567"/>
<Column ID="_Timestamp" Value="2004-09-14T14:07:41.0000560PDT"/>
</Row>
<Row ID="2">
<Column ID="_Salesperson" Value="Lynette Jones"/>
<Column ID="_Sales_Area" Value="Southwest"/>
<Column ID="_Sales_Number" Value="228"/>
<Column ID="_Timestamp" Value="2004-09-14T14:07:41.0000560PDT"/>
</Row>
<Row ID="3">
<Column ID="_Salesperson" Value="Noel Rogers"/>
<Column ID="_Sales_Area" Value="Northwest"/>
<Column ID="_Sales_Number" Value="459"/>
<Column ID="_Timestamp" Value="2004-09-14T14:07:41.0000560PDT"/>
</Row>
</Contents>
</DataObject>
</OracleBAMExport>

G.6 正規表現

exportコマンドとdeleteコマンドでは、必要に応じてregexパラメータ付きの正規表現が使用されます。

正規表現は、通常の文字(たとえば、aからzの英字)と、メタ文字と呼ばれる特殊文字で構成されるテキストのパターンです。このパターンによって、アイテムを名前で検索するときに一致する1つ以上の文字列を表します。

注意:

ICommandの-regexの動作は、文字シーケンスを正規表現で指定したパターンと照合するためのjava.util.regexパッケージと同じです。

表G-7に、メタ文字の完全なリストおよび正規表現におけるメタ文字の動作を示します。

表G-7 正規表現で使用するメタ文字

文字

説明

\

次に続く文字が特殊文字、リテラル、前方参照または8進エスケープであることを示します。たとえば、「n」は文字「n」と一致します。「\\」は「\」と一致し、「\(」は「(」と一致します。

^

入力文字列の先頭と一致します。RegExpオブジェクトのMultilineプロパティが設定されている場合は、「\n」または「\r」の直後とも一致します。

$

入力文字列の末尾と一致します。RegExpオブジェクトのMultilineプロパティが設定されている場合は、「\n」または「\r」の直前とも一致します。

*

直前の文字または部分式と0回以上一致します。たとえば、「zo*」は「z」と「zoo」のどちらにも一致します。「*」は「{0,}」と同じ意味です。

+

直前の文字または部分式と1回以上一致します。たとえば、「zo+」は「zo」や「zoo」とは一致しますが、「z」とは一致しません。「+」は「{1,}」と同じ意味です。

?

直前の文字または部分式と0回または1回一致します。たとえば、「do(es)?」は「do」または「does」の「do」と一致します。「?」は「{0,1}」と同じ意味です。

{n}

nには、0以上の整数を指定します。直前の文字と正確にn回一致します。たとえば、「o{2}」は「Bob」の「o」とは一致しませんが、「food」の2つの「o」とは一致します。

{n,}

nには、0以上の整数を指定します。直前の文字とn回以上一致します。たとえば、「o{2,}」は「Bob」のoとは一致しませんが、「foooood」のすべての「o」とは一致します。「o{1,}」は「o+」と同じ意味です。「o{0,}」は「o*」と同じ意味です。

{n,m}

mおよびnには0以上の整数を指定します。n <= mです。nからm回一致します。たとえば、「o{1,3}」は「fooooood」の最初の3つの「o」と一致します。「o{0,1}」は「o?」と同じ意味です。カンマと数の間には空白を入れません。

?

他の量指定子(*、+、?、{n}、{n,}、{{n,m})の直後に指定すると、一致パターンが最短一致になります。デフォルトの最長一致パターンでは、できるだけ多くの文字列と一致しますが、最短一致パターンでは、できるだけ少ない文字列と一致します。たとえば、文字列「oooo」に対して、「o+?」を指定すると1つの「o」と一致し、「o+」を指定するとすべての「o」と一致します。

.

「\n」以外の任意の1文字に一致します。「\n」を含めて任意の文字と一致させるには、「[\s\S]」などのパターンを指定します。

(pattern)

patternと一致した文字列を保存する部分式。一致した文字列が見つかった場合は、Matchesコレクションから$0...$9プロパティを使用して取得できます。カッコ( )と一致させるには、「\(」または「\)」を指定します。

(?:pattern)

patternと一致しても、その文字列を保存しない部分式(後で使用するための保存は行わない非保存一致)。これは、「または」を意味する(|)を使用して、パターンの一部を結合するときに便利です。たとえば、「industr(?:y|ies)」と指定するより、「industry|industries」と指定する方が簡潔です。

(?=pattern)

肯定先読み検索を実行する部分式です。patternと一致する文字列が始まる位置にある検索文字列と一致します。これは、非保存一致で、一致した文字列は後で使用できません。たとえば、「Windows (?=95|98|NT|2000)」は「Windows 2000」の「Windows」には一致しますが、「Windows 3.1」の「Windows」には一致しません。先読み処理では、文字は検索対象ではありません。一致の検出後、次の検索処理は、先読みされた文字の後からではなく、一致文字列のすぐ後から開始されます。

(?!pattern)

否定先読み検索を実行する部分式です。patternに一致しない文字列が始まる位置にある検索文字列と一致します。これは、非保存一致で、一致した文字列は後で使用できません。たとえば、「Windows (?!95|98|NT|2000)」は「Windows 3.1」の「Windows」には一致しますが、「Windows 2000」の「Windows」には一致しません。先読み処理では、文字は検索対象ではありません。一致の検出後、次の検索処理は、先読みされた文字の後からではなく、一致文字列のすぐ後から開始されます。

x|y

xまたはyと一致します。たとえば、「z|food」は「z」または「food」と一致します。「(z|f)ood」は「zood」または「food」と一致します。

[xyz]

キャラクタ・セットを指定します。大カッコで囲まれたいずれかの文字に一致します。たとえば、「[abc]」は「plain」の「a」と一致します。

[^xyz]

除外するキャラクタ・セットを指定します。大カッコで囲まれた文字以外の文字に一致します。たとえば、「[^abc]」は「plain」の「p」に一致します。

[a-z]

文字の範囲を指定します。指定した範囲に含まれる任意の文字に一致します。たとえば、「[a-z]」はaからzの範囲にある任意の小文字と一致します。

[^a-z]

除外する文字の範囲を指定します。指定した範囲に含まれていない任意の文字と一致します。たとえば、「[^a-z]」はaからzの範囲外にある任意の文字と一致します。

\b

単語の境界と一致します。単語の境界とは、単語と空白との間の位置のことです。たとえば、「er\b」は「never」の「er」とは一致しますが、「verb」の「er」とは一致しません。

\B

単語の境界以外と一致します。たとえば、「er\B」は「verb」の「er」とは一致しますが、「never」の「er」とは一致しません。

\cx

xで指定した制御文字と一致します。たとえば、\cMはControl-Mまたは復帰改行文字と一致します。xの値は、AからZまたはaからzの範囲内で指定します。そうでない場合、cはリテラル文字の「c」と見なされます。

\d

任意の10進文字と一致します。[0-9]と同じ意味です。

\D

10進数字以外と一致します。[^0-9]と同じ意味です。

\f

フォーム・フィード文字と一致します。\x0cおよび\cLと同じ意味です。

\n

改行文字と一致します。\x0aおよび\cJと同じ意味です。

\r

復帰文字と一致します。\x0dおよび\cMと同じ意味です。

\s

空白、タブ、フォーム・フィードなどの任意の空白文字と一致します。[ \f\n\r\t\v]と同じ意味です。

\S

空白文字以外の任意の文字と一致します。[^ \f\n\r\t\v]と同じ意味です。

\t

タブ文字と一致します。\x09および\cIと同じ意味です。

\v

垂直タブ文字と一致します。\x0bおよび\cKと同じ意味です。

\w

単語に使用される任意の文字と一致します。アンダースコアも含まれます。[A-Za-z0-9_]と同じ意味です。

\W

単語に使用される文字以外の任意の文字と一致します。[^A-Za-z0-9_]と同じ意味です。

\xn

nと一致します。nには16進のエスケープ値を指定します。16進数のエスケープ値は2桁である必要があります。たとえば、「\x41」は「A」と一致します。「\x041」は「\x04」および「1」と同じ意味です。この表記によって、正規表現でASCIIコードを使用できるようになります。

\num

numと一致します。numには正の整数を指定します。すでに保存されている部分を参照します。たとえば、「(.)\1」は連続する2つの同じ文字と一致します。

\n

8進数のエスケープ値または前方参照を指定します。\nの前にn個以上の保存された部分式がある場合、nは前方参照になります。それ以外の場合でnが8進数(0から7)である場合、nは8進エスケープ値です。

\nm

8進数のエスケープ値または前方参照を指定します。\nmの前にnm個以上の保存された部分式がある場合、nmは前方参照になります。\nmの前にn個以上の保存された部分式がある場合、nが前方参照で、リテラルmが後に続きます。いずれの条件も当てはまらない場合でnおよびmが8進数(0から7)である場合、\nmは8進エスケープ値nmと一致します。

\nml

nが8進数値の0から3で、mおよびlが8進数(0から7)の場合は、8進エスケープ値nmlと一致します。

\un

nと一致します。nにはUnicode文字で表した4桁の16進数を指定します。たとえば、\u00A9は著作権記号(©)と一致します。

H 正規化されたメッセージのプロパティ

この付録では、正規化されたメッセージのプロパティをメッセージ・ヘッダーを介して伝播できるように設定する方法について説明します。

項目は次のとおりです。

- H.1項「正規化されたメッセージの概要」

- H.2項「Oracle BPEL Process Managerのプロパティ」

- H.3項「Oracle Web Services Addressingのプロパティ」

- H.4項「bpelx拡張による正規化されたメッセージのプロパティの操作」

H.1 正規化されたメッセージの概要

ヘッダーの操作と伝播は、重要なビジネス統合メッセージング要件です。Oracle BPEL Process Manager、Oracle Mediator、Oracle JCAアダプタおよびOracle B2Bは、顧客の統合ニーズを解決する上でヘッダー・サポートに大きく依存しています。たとえば、メッセージ・ヘッダーを介してファイル名を伝播することで、そのファイル名をソース・ディレクトリからターゲット・ディレクトリに保存できます。Oracle BPEL Process ManagerとOracle Mediatorでは、様々なユーザー・インタフェース・サポート・レベルでヘッダーにアクセスし、操作して設定できます。

図H-1に詳細を示します。

図H-1 正規化されたメッセージ・ヘッダー・プロパティの「プロパティ」タブ

「図H-1 正規化されたメッセージ・ヘッダー・プロパティの「プロパティ」タブ」の説明

正規化されたメッセージは、プロパティとペイロードという2つの部分のみを持つように簡素化されています。

通常、プロパティはスカラー型の名前/値ペアです。既存の複雑なヘッダーがプロパティに収まるように、プロパティはスカラー型にフラット化されます。

複雑なプロパティは事前に決定されているため、設計時にヘッダーを操作する際のユーザー操作は合理化されています。メディエータ・エディタまたはOracle BPELデザイナでは、なんらかの予約済キーワードを使用してヘッダーを操作できます。

ただし、この方法はユーザー入力に基づいて動的に生成されるプロパティに対処していません。選択内容に基づいてヘッダーが定義されます。これらの定義は事前に決定されていないため、事前決定済のプロパティ定義のリストでは考慮できません。動的プロパティのヘッダー操作は、定義するまで設計できません。この制限に対処するには、必要なサービス(コンポジット・エントリ・ポイント)と参照をすべて生成しておく必要があります。この制限は、動的プロパティを生成する必要のあるサービスに適用されます。動的プロパティが生成された後、コンポジットごとに格納される必要があります。その後にのみ、メディエータ・エディタまたはOracle BPELデザイナで動的プロパティを操作できます。

正規化されたメッセージのプロパティの詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』および『Oracle Fusion Middleware Oracle B2Bユーザーズ・ガイド』を参照してください。

H.2 Oracle BPEL Process Managerのプロパティ

表H-1に、Oracle BPEL Process Managerの正規化メッセージに対して事前に決定されているプロパティを示します。

表H-1 Oracle BPEL Process Managerのプロパティ

プロパティ名

伝播可能(はい/いいえ)

方向(インバウンド/アウトバウンド)

データ型

有効値の範囲

説明

bpel.instanceIndex1

いいえ

インバウンド

文字列

文字列、サイズ制限: 100。

ci_indexes表に格納されます(cube_instanceに対する追加索引になります)。

bpel.instanceIndex2

いいえ

インバウンド

文字列

文字列、サイズ制限: 100。

ci_indexes表に格納されます(cube_instanceに対する追加索引になります)。

bpel.instanceIndex3

いいえ

インバウンド

文字列

文字列、サイズ制限: 100。

ci_indexes表に格納されます(cube_instanceに対する追加索引になります)。

bpel.metadata

はい

両方

文字列

文字列、サイズ制限: 1000。

BPELインスタンスを関連付ける必要がある追加情報が含まれます。渡されたすべての情報は、cube_instance表のメタデータ列に格納されます。

bpel.priority

はい

インバウンド

整数に解釈可能な文字列

[1-10]. 1が最も優先度の高い値です。

cube_instanceの優先度列に格納されます。優先順位を付けるためにシステムで使用されます。

bpel.retryFatalConnection

はい

インバウンド

ブール

true (デフォルト値)またはfalse

一方向起動(つまり、非同期BPELプロセスの起動)に対してtrueに設定した場合、致命的な接続障害が発生したときにBPELプロセス・サービス・エンジンによって再試行されます。再試行の回数は、FMW_HOME/user_projects/domains/soainfra/bin/startManagedWebLogic.shファイルのJAVA_OPTIONSセクションでJVMパラメータbpel.fatal.connection.max.retryを使用して構成されます。このJVMパラメータは、Oracle WebLogic Server管理コンソールから設定することもできます。

bpel.title

いいえ

インバウンド

文字列

文字列、サイズ制限: 100。

cube_instance表のtitle列に格納されます。

H.3 Oracle Web Services Addressingのプロパティ

表H-2に、Web Services Addressing (WS-Addressing)の正規化メッセージに対して事前に決定されているプロパティを示します。

表H-2 Oracle Web Services Addressingのプロパティ

プロパティ名

伝播可能(はい/いいえ)

方向(インバウンド/アウトバウンド)

データ型

有効値の範囲

説明

wsa.messageId

いいえ

両方

文字列

URI形式

このプロパティは、メッセージの識別子と、そのメッセージに対する応答の送信先であるエンドポイントをエンドポイント参照として指定します。

wsa.relatesTo

いいえ

両方

文字列

URI形式

このオプションの(繰返し)要素情報アイテムは、1つの抽象リレーションシップ・プロパティ値を(IRI, IRI)ペアの形式で提供します。この要素のコンテンツ(xs:anyURIタイプ)は、関連メッセージのメッセージIDを伝達します。

wsa.replyToAddress

いいえ

両方

文字列

URI形式

非同期で通信する2つのコンポーネント間の規約を表します。

wsa.replyToPortType

いいえ

両方

QName

任意のQName

この値は、サービスのコールバックのportTypeを構成するためにWebサービスに渡されます。WS-Addressingコールバックのエンドポイント参照のPortType要素に変換されます。

wsa.replyToService

いいえ

両方

QName

任意のQName

この値は、サービスのコールバックのサービスを構成するためにWebサービスに渡されます。WS-Addressingコールバックのエンドポイント参照のServiceName要素に変換されます。

wsa.action

いいえ

両方

文字列

URI形式

この必須要素(コンテンツがxs:anyURIタイプ)は、アクション・プロパティの値を伝達します。

wsa.to

いいえ

両方

文字列

URI形式

このオプション要素(コンテンツがxs:anyURIタイプ)は、宛先プロパティの値を提供します。この要素が指定されない場合、宛先プロパティの値はhttp://www.w3.org/2005/08/addressing/anonymousになります。

H.4 bpelx拡張による正規化されたメッセージのプロパティの操作

Oracle BPEL Process Managerはbpelx拡張を使用して、メッセージ交換処理で、正規化されたメッセージのプロパティを操作します。構文は、BPELプロジェクトでBPELバージョン1.1と2.0のどちらがサポートされているかによって異なります。

H.4.1 BPEL 1.1のbpelx拡張構文

例H-1は、BPEL 1.1におけるbpelx拡張構文を示しています。

例H-1 BPEL 1.1において正規化されたメッセージ・ヘッダーのbpelx拡張構文

<invoke ...>
<bpelx:inputProperty name="NCName" expression="string" variable="NCName"
part="NCName" query="string"/>*
<bpelx:outputProperty name="NCName" expression="string" variable="NCName"
part="NCName" query="string"/>*
</invoke>

<receive ...>
<bpelx:property name="NCName" expression="string" variable="NCName"
part="NCName" query="string"/>*
</receive>

<onMessage...>
<bpelx:property name="NCName" expression="string" variable="NCName"
part="NCName" query="string"/>*
</onMessage>

<reply ...>
<bpelx:property name="NCName" expression="string" variable="NCName"
part="NCName" query="string"/>*
</reply>

H.4.2 BPEL 2.0のbpelx拡張構文

例H-2は、BPEL 2.0におけるbpelx拡張構文を示しています。

例H-2 BPEL 2.0において正規化されたメッセージ・ヘッダーのbpelx拡張構文

<invoke ...>
<bpelx:fromProperties>?
<bpelx:fromProperty name="NCName" .../>+
</bpelx:fromProperties>
<bpelx:toProperties>?
<bpelx:toProperty name="NCName" .../>+
</bpelx:toProperties>
</invoke>

<receive ...>
<bpelx:fromProperties>?
<bpelx:fromProperty name="NCName" .../>+
</bpelx:toProperties>
</receive>

<onEvent ...>
<bpelx:fromProperties>?
<bpelx:fromProperty name="NCName" .../>+
</bpelx:fromProperties>
</onEvent>

<reply...>
<bpelx:toProperties>?
<bpelx:toProperty name="NCName" .../>+
</bpelx:toProperties>
</reply>

<reply ...>
<bpelx:toProperties>
<bpelx:toProperty name="NCName" .../>
</bpelx:toProperties>
</reply>

次の点に注意してください。

- toPropertyはfrom-specです。from-specから、指定した名前のプロパティに値をコピーします。

- fromPropertyはto-specです。プロパティからto-specに値をコピーします。

I ルール・ディクショナリ・エディタのタスク・フローによって実装されるインタフェース

この付録では、ADFベースのWebアプリケーションを作成する際にMetadataDetailsおよびNLSPrefrencesのインタフェースを実装する、Oracle Business Rulesディクショナリ・エディタのタスク・フローについて説明します。これらのインタフェースはsoaComposerTemplates.jarファイルで定義されます。

項目は次のとおりです。

- I.1項「MetadataDetailsインタフェース」

- I.2項「NLSPreferencesインタフェース」

I.1 MetadataDetailsインタフェース

MetadataDetailsインタフェースはoracle.integration.console.metadata.model.shareパッケージの一部であり、soaComposerTemplates.jarファイルで定義されます。

例I-1に示すように、MetadataDetailsインタフェースは3つのメソッドを定義します。

例I-1 MetadataDetailsインタフェース

public interface MetadataDetails {
/**
* Retrieve the details of the metadata document
* @return document in string format.
*/
String getDocument();

/**
* Get related document.
*/
String getRelatedDocument(final RelatedMetadataPath relatedPath);

/**
* Update the metadata document.
* @param doc represents the updated document.
*/
void setDocument(String doc) throws Exception;
}

I.1.1 getDocumentメソッド

このメソッドは、ルール・ファイルを文字列書式で取得するために使用します。このアクションを実行するには、Oracle Metadata Repository(MDS)またはファイル・システムに接続して、ルール・ファイルを文字列書式で返す必要があります。

例I-2に、ローカル・ファイル・システムからファイルを取得する方法を示します。

例I-2 getDocumentメソッド

private static final String RULES_FILE1 =
"file:///C:/scratch/<username>/system/mywork/linkedD/AutoAppProj/oracle/rules/credit/CreditRatingRules.rules";

public String getDocument() {
URL url = null;
try {
url = new URL(RULES_FILE1);
return readFile(url);
} catch (IOException e) {
System.err.println(e);
}
return "";
}

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

I.1.2 getRelatedDocumentメソッド

リンク・ディクショナリを使用する場合、このメソッドは必須です。MDSに接続して関連するディクショナリ・ファイルを検出し、そのファイルを文字列書式で返す必要があります。例I-3に、ローカル・ファイル・システムの../oracle/rulesディレクトリ内に格納されているリンク・ディクショナリへのパスを検出する方法を示します。

例I-3 getRelatedDocumentメソッド

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

I.1.3 setDocumentメソッド

このメソッドは、ルール・ファイルを格納するために使用します。このメソッドは、文字列のdoc値を返します。この値は、ルール・ディクショナリ・エディタのタスク・フローを使用して実行されたユーザーの編集を基に更新されたディクショナリの名前です。ルール・ファイルはMDSまたはファイル・システムに格納する必要があります。例I-4に、ローカル・ファイル・システムにドキュメントを保存する方法を示します。

例I-4 setDocumentメソッド

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

I.2 NLSPreferencesインタフェース

例I-5に示すように、NLSPrefrencesインタフェースは4つのメソッドを定義します。

例I-5 NLSPreferencesインタフェース

public interface NLSPreferences
{
/**
* Returns the locale to be used.
**/
Locale getLocale();

/**
* Return the timezone to be used.
**/
TimeZone getTimeZone();

/**
* Return the dateformat to be used.
*/
String getDateFormat();

/**
* Return the time format to be used.
*/
String getTimeFormat();
}

例I-6は、NLSPreferencesインタフェースのサンプル実装です。

例I-6 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 Locale getLocale() {
return Locale.FRENCH;
}

public TimeZone getTimeZone() {
return TimeZone.getTimeZone("America/Los_Angeles");
}

public String getDateFormat() {
return DATE_STYLE;
}

public String getTimeFormat() {
return TIME_STYLE;
}
}

J Oracle User Messaging Serviceアプリケーション

この付録では、提供されているプロシージャおよびコードを使用して、独自のOracle User Messaging Serviceアプリケーションを作成する方法について説明します。

項目は次のとおりです。

- J.1項「SOAおよびUser Messaging Serviceのインストールおよび構成」

- J.2項「ユーザー指定のチャネルへのメッセージの送信」

- J.3項「添付ファイル付き電子メールの送信」

注意:

アプリケーション・コードのサンプルは、http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.htmlで入手できます

J.1 SOAおよびUser Messaging Serviceのインストールおよび構成

SOAおよびUser Messaging Serviceは、ホストされたインスタンスにすでにインストールされており、サンプル・ユーザーは設定済です。soa-infraでの通知を可能にするには、次の手順を実行します(実行していない場合)。

1. Enterprise Managerを使用して「SOAインフラストラクチャ」メニューに移動し、「SOA管理」→「ワークフロー構成」→「メーラー」タブの順に選択して、「通知モード」を「すべて」に設定します。

2. 必要な場合は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のドライバの構成に関する項の説明に従って、User Messagingドライバを構成します。

3. ユーザーweblogicの電子メール・アドレスは、JXplorer LDAPブラウザを使用して設定します。「LDAPユーザー・プロファイルのアドレスの更新」を参照してください。

4. サーバーを再起動します。

J.1.1 LDAPユーザー・プロファイルのアドレスの更新

ユーザーweblogicの電子メール・アドレスをJXplorer LDAPブラウザを使用して設定するには、次の手順を実行します。

J.1.1.1 インストール

http://www.jxplorer.orgからJXplorerをダウンロードしてインストールします。

J.1.1.2 接続

1. 組込みLDAPサーバー管理パスワードを次のように設定します。

- Oracle WebLogic Server管理コンソールにログインします。

- ドメイン名のリンク→「セキュリティ」→「組込みLDAP」の順にクリックします。

- 新しい「資格証明」と「資格証明の確認」(例: weblogic)を入力します。

- 「保存」をクリックします。

2. 表J-1に示す各フィールドに値を指定し、JXplorerから接続します。

表J-1 JXplorerの接続に関するフィールド

フィールド

値

ホスト

Oracle WebLogic管理サーバーのホスト名

ポート

Oracle WebLogic管理サーバーのポート

プロトコル

LDAP v3

セキュリティ・レベル

ユーザーおよびパスワード

ユーザーDN

cn=Admin

パスワード

パスワード

J.1.1.3 LDAPのユーザー・メッセージング・デバイス・アドレスの設定

次の例では、ユーザーweblogicを使用します。追加のユーザーを作成して使用できます。

1. ドメイン→「myrealm」→「people」→「weblogic」の順にLDAPツリーを開きます。

2. ユーザー・エントリをクリックします。

3. 右側で「HTML view」タブを選択します。

4. 必須の「Email Address」と「Mobile Phone Number」を入力します。

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

J.2 ユーザー指定のチャネルへのメッセージの送信

この項では、Oracle User Messaging Serviceで提供されている、SendMessageアプリケーションを作成して実行する方法を説明します。

アプリケーションを作成および実行する前に、J.1項「SOAおよびUser Messaging Serviceのインストールおよび構成」の説明に従って、SOAおよびUser Messaging Serviceをインストールして構成する必要があります。

注意:

Oracle User Messaging Serviceのアーキテクチャとコンポーネントの詳細は、『Oracle Fusion Middleware Oracle SOA Suiteスタート・ガイド』を参照してください。

この項は、次のトピックで構成されています。

- J.2.1項「SendMessageアプリケーションの概要」

- J.2.2項「サンプルの作成」

- J.2.3項「新規アプリケーション・サーバー接続の作成」

- J.2.4項「プロジェクトのデプロイ」

- J.2.5項「ユーザー・メッセージング・プリファレンスの構成」

- J.2.6項「サンプルのテスト」

J.2.1 SendMessageアプリケーションの概要

SendMessageアプリケーションでは、BPELプロセスによって、ユーザー・メッセージング・プリファレンスで指定されたメッセージング・チャネルを経由して、ユーザーにメッセージを送信できることを具体的な例で示します。サポートされるチャネルおよびデフォルト・デバイスのそれぞれに対してデバイスおよびメッセージ・チャネルのアドレスを構成すると、Oracle User Messaging Serviceは、構成された優先チャネルの設定に基づいて、メッセージをユーザーにルーティングします。

J.2.1.1 提供されるファイル

このアプリケーションには、次のファイルが含まれています。

- SendMessage.pdf – このドキュメント

- Project – Oracle JDeveloperプロジェクト・ファイルを含むディレクトリ

- Readme.txt

- リリース・ノート

J.2.2 サンプルの作成

次の手順を実行してサンプルを新規に作成すると、SOAコンポジット・アプリケーションにメッセージを追加して、ユーザー・メッセージング・プリファレンスを使用する方法を学習できます。

注意:

SOAコンポジット・アプリケーションとプロジェクトを作成してデプロイするには、Oracle SOA Suite拡張機能をインストールしておく必要があります。この拡張機能をOracle JDeveloper用にインストールする手順は、『Oracle Fusion Middleware Oracle JDeveloperインストレーション・ガイド』を参照してください。

1. Oracle JDeveloper 11gを開きます。

2. 「File」→「新規」→「一般」→「アプリケーション」→「SOAアプリケーション」を選択して、新規アプリケーションを作成します。「OK」をクリックします。

3. 「アプリケーション名」を入力し、「次へ」をクリックします(図J-1)。

図J-1 新規アプリケーションおよび新規プロジェクトの作成(1/3)

「図J-1 新規アプリケーションおよび新規プロジェクトの作成(1/3)」の説明

4. プロジェクトの名前を入力し、「次へ」をクリックします(図J-2)。

5. 図J-2 新規アプリケーションおよび新規プロジェクトの作成(2/3)

「図J-2 新規アプリケーションおよび新規プロジェクトの作成(2/3)」の説明

6. コンポジット・テンプレートとして、BPELプロセスを使用するコンポジットを選択します(図J-3)。「終了」をクリックします。

図J-3 新規アプリケーションおよび新規プロジェクトの作成(3/3)

「図J-3 新規アプリケーションおよび新規プロジェクトの作成(3/3)」の説明

7. 「BPELプロセスの作成」ダイアログで、BPELプロセス名としてSendMessageと入力します(図J-4)。「OK」をクリックします。

図J-4 BPELプロセスの作成

「図J-4 BPELプロセスの作成」の説明

8. 「SOAPサービスとして公開」が選択されていることを確認します。「OK」をクリックします。

9. これで、空のデフォルトBPELアプリケーションが作成されました(図J-5)。
「Oracle JDeveloper」メイン・ウィンドウの「Composite.xml」タブの下に、次のようなアプリケーションのコンポーネントが表示されます。

- 左のボックスは、アプリケーションを初期化するために使用するWebサービス・クライアントの定義です。

- 中央のボックスは、メッセージを作成して書式設定し、メッセージ・サービスをコールするBPELプロセスです。

注意:

User Notification BPELプロセスの作成時にメッセージ送信に使用するメッセージ・サービス・リソースは、後で作成します(ステップ13から19)。

図J-5 空のデフォルトBPELアプリケーション

「図J-5 空のデフォルトBPELアプリケーション」の説明

10. 「アプリケーション・ナビゲータ」の「xsd」フォルダを開き、「SendMessage.xsd」をダブルクリックして開きます。

11. 「ソース」タブをクリックします(図J-6)。

12. このBPELアプリケーションの入力に対して次の変更を行います。
プロジェクトの「アプリケーション・ナビゲータ」の「xsd」フォルダ内に生成されたファイルSendMessage.xsdには、次のinput要素定義がデフォルトで作成されます。

<element name="input" type="string"/>

このXSD要素は、BPELプロセスの入力を定義します。

「ソース」タブ(図J-6)を選択し、前述の行を次の3行に置換します。

<element name="to" type="string"/>
<element name="subject" type="string"/>
<element name="body" type="string"/>

図J-6 SendMessage.xsdファイルの入力内容の変更

「図J-6 SendMessage.xsdファイルの入力内容の変更」の説明

13. 「ファイル」メニューから「すべて保存」を選択します。

14. 展開されたプロセス要素を表示します(図J-7)。

図J-7 展開されたプロセス要素の表示

「図J-7 展開されたプロセス要素の表示」の説明

15. このプロセスでメッセージングを可能にするには、「コンポーネント・パレット」にある「Oracle Extensions」から「User Notification」を、receiveInputアクティビティとcallbackClientアクティビティの間にドラッグ・アンド・ドロップします(図J-8)。

図J-8 「コンポーネント・パレット」から「ユーザー通知」アイコンをドラッグ・アンド・ドロップ

「図J-8 「コンポーネント・パレット」から「ユーザー通知」アイコンをドラッグ・アンド・ドロップ」の説明

user notificationアクティビティが表示されます(図J-9)。

図J-9 入力構成前のuser notificationアクティビティ

「図J-9 入力構成前のuser notificationアクティビティ」の説明

16. 「To」入力ボックスの右側にある「XPath式ビルダー」アイコンをクリックします。

17. 「To」受信者の式を次のように変更します。

- 「BPEL変数」ペインで、「変数」→「inputVariable」→「payload」→「clientprocess」→「client:to」の順に選択します(図J-10)。

- 「式に挿入」をクリックします。

- 「OK」をクリックします。

図J-10 受信者(「To」)を指定する式の定義

「図J-10 受信者(「To」)を指定する式の定義」の説明

18. 「件名」入力ボックスの右側にある「XPath式ビルダー」アイコンをクリックします。

19. 「件名」の式を次のように変更します。

- 「BPEL変数」ペインで、「変数」→「InputVariable」→「payload」→「clientprocess」→「client:subject」の順に選択します(図J-11)。

- 「式に挿入」をクリックします。

- 「OK」をクリックします。

図J-11 件名式の定義

「図J-11 件名式の定義」の説明

20. 「通知メッセージ」入力ボックスの右にある「XPath式ビルダー」アイコンをクリックします。

21. 通知メッセージの式を次のように変更します。

- 「BPEL変数」ペインで、「変数」→「InputVariable」→「payload」→「clientprocess」→「client:body」の順に選択します(図J-12)。

- 「式に挿入」をクリックします。

図J-12 本文式の定義

「図J-12 本文式の定義」の説明

- 「OK」をクリックします。

- 「適用」をクリックしてから「OK」をクリックし、変更内容を適用します(図J-13)。

図J-13 入力に対する変更の確認

「図J-13 入力に対する変更の確認」の説明

入力の変更は保存され、user notificationアクティビティの構成が完了します。これで、user notificationアクティビティをBPELアプリケーションで参照できます(図J-14)。SOAコンポジットは完了です。

図J-14 入力構成後のuser notificationアクティビティ

「図J-14 入力構成後のuser notificationアクティビティ」の説明

22. 「ファイル」→「すべて保存」の順にクリックします。

J.2.3 新規アプリケーション・サーバー接続の作成

次の手順を実行し、アプリケーション・サーバー接続を作成します。

1. プロジェクトを右クリックし、「新規」→「接続」→「アプリケーション・サーバー接続」の順に選択して、新規アプリケーション・サーバー接続を作成します(図J-15)。

図J-15 新規アプリケーション・サーバー接続

「図J-15 新規アプリケーション・サーバー接続」の説明

2. 「接続名」フィールドで接続の名称を指定します(たとえば、Figure J-16に示すSOA_managed_serverなど)。

3. 「接続タイプ」に「WebLogic 10.3」を選択します。

図J-16 新規アプリケーション・サーバー接続

「図J-16 新規アプリケーション・サーバー接続」の説明

4. 認証情報を入力します。ユーザー名の一般的な値はweblogicです。

5. 「接続」ダイアログで、SOA管理サーバーのホスト名、ポートおよびSSLポートを入力し、Oracle WebLogic Serverドメインのドメイン名を入力します。

6. 「次へ」をクリックします。

7. 「テスト」ダイアログで、「接続のテスト」をクリックします。

8. メッセージSuccess!が表示されていることを確認します。
アプリケーション・サーバー接続が作成されました。

J.2.4 プロジェクトのデプロイ

次の手順を実行し、プロジェクトをデプロイします。

1. 「アプリケーション・ナビゲータ」で、SOAプロジェクトを右クリックします。

2. 「デプロイ」→「project_name」の順に選択します。
project_nameの値は、SOAプロジェクト名です。

「Project_Nameのデプロイ」ウィザードの「デプロイメント・アクション」ページが表示されます。

3. 「アプリケーション・サーバーへのデプロイ」を選択し、「次へ」をクリックします。

4. デフォルトのリビジョンを入力し、「次へ」をクリックします。

5. リストからアプリケーション・サーバーへの既存の接続を選択します(たとえば、J.2.3項「新規アプリケーション・サーバー接続の作成」の説明に従って作成した接続SOA_managed_serverを選択します)。

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

7. メッセージBuild Successfulがログに表示されていることを確認します。

8. メッセージDeployment Finishedがデプロイメント・ログに表示されていることを確認します(図J-17)。

図J-17 デプロイメント成功の確認

「図J-17 デプロイメント成功の確認」の説明

アプリケーションが正常にデプロイされました。

サンプルを実行するには、その前に、次の項の説明に従って、Oracle User Messaging Serviceの追加ドライバを構成し、ユーザー・メッセージング・プリファレンスでメッセージを受信するユーザー用のデフォルト・デバイスを構成する必要があります。

注意:

詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

J.2.5 ユーザー・メッセージング・プリファレンスの構成

通知を受信するユーザーは、ユーザー・メッセージング・プリファレンスを介してメッセージにアクセスする際に使用するデバイスを登録する必要があります。次の手順を実行します。

1. 次のいずれかのURLで、ユーザー・メッセージング・プリファレンス・アプリケーションにログインします。

- http://server:port/sdpmessaging/userprefs-uiで直接ログインします。

- http://server:port/integration/worklistappで、ワークリスト・アプリケーションの「プリファレンス」→「通知」タブを介してログインします。

ユーザー・メッセージング・プリファレンス・アプリケーションが表示されます。

2. 「メッセージング・チャネル」タブをクリックします(図J-18)。

図J-18 「メッセージング・チャネル」タブ

「図J-18 「メッセージング・チャネル」タブ」の説明

ログイン資格証明の入力を求められます。

3. 「メッセージング・チャネル」タブで、チャネルを選択します。

4. デバイス・フォルダを開いてから、選択したチャネルの横の「デフォルトとして設定」をクリックして、デフォルトとしてチャネルを設定します。
選択したチャネルの横にチェックマークが表示され、デフォルトの通知受信方法として指定されます。そのユーザーに送信されるすべてのメッセージが、そのチャネルに送信されます。

J.2.6 サンプルのテスト

次に、Oracle Enterprise Manager Fusion Middleware Controlを介してテスト・メッセージを転送する方法を説明します。

次の手順を実行し、サンプルを実行およびテストします。

1. Webブラウザ・ウィンドウを開き、SOAドメインのOracle Enterprise Managerにログインします。たとえば、http://host:port/emなどです。

2. Enterprise Managerで、ナビゲーション・ツリーの「SOA」フォルダを開いて、デプロイされた「SendMessageProj」コンポジット・アプリケーションをクリックします。「テスト」ボタンをクリックして、テスト・クライアント・ページを起動します。

3. 「引数を入力」セクションでは、SendMessageProjを起動するための入力値が提供されます。
次の値を入力します。

- to: weblogic(ユーザー)

- subject: 通知テスト(件名)

- body: メッセージ・コンテンツ

4. 「Webサービスのテスト」をクリックします。

J.2.6.1 電子メール送信実行の確認

ヒューマン・ワークフロー・エンジンにログインします。送信通知とそのステータスを「通知管理」タブから確認します(図J-19)。

図J-19 送信通知の表示

「図J-19 送信通知の表示」の説明

J.3 添付ファイル付き電子メールの送信

この項では、Oracle User Messaging Serviceで提供されている、添付ファイル付き電子メールの送信アプリケーションを作成して実行する方法を説明します。

注意:

Oracle User Messaging Serviceのアーキテクチャとコンポーネントの詳細は、『Oracle Fusion Middleware Oracle SOA Suiteスタート・ガイド』を参照してください。

この項は、次のトピックで構成されています。

- J.3.1項「SendEmailWithAttachmentアプリケーションの概要」

- J.3.2項「事前作成されたサンプルの実行」

- J.3.3項「サンプルのテスト」

- J.3.4項「サンプルの作成」

J.3.1 SendEmailWithAttachmentアプリケーションの概要

「SendEmailWithAttachment」アプリケーションでは、電子メールを添付ファイルとともに送信するBPELプロセスを具体的な例で示します。BPELプロセスは、アイデンティティ・ストアからユーザーの電子メール・アドレスを参照し、ファイル・システムからファイルを読み取り、電子メールのコンテンツを作成してから、電子メールをそのユーザーに送信します。J.3.4項「サンプルの作成」では、添付ファイル付き電子メールをSOAコンポジット・アプリケーションに追加し、使用しているアプリケーションでメッセージングに対応できるようにする方法を説明します。このアプリケーションを最初からモデル化する場合は、「サンプルの作成」の項に進んでください。あるいは、このチュートリアルで提供されている事前作成のプロジェクトを直接使用できます。事前作成のサンプルを実行したり、アプリケーションを最初から作成するには、その前に、J.1項「SOAおよびUser Messaging Serviceのインストールおよび構成」の説明に従って、サーバーをインストールして構成する必要があります。デフォルトでは、soa-infraによる通知の送信はありません。次に、電子メール・サーバーとの通信に必要な電子メール・ドライバをインストールして構成する手順を説明します。

J.3.1.1 提供されるファイル

サンプル・アプリケーションには、次のファイルが含まれています。

- ns_sendemail.pdf – このドキュメント

- Project – Oracle JDeveloperプロジェクト・ファイルを含むディレクトリ

- Readme.txt

- リリース・ノート

J.3.2 事前作成されたサンプルの実行

次の手順を実行して、事前作成されたサンプル・アプリケーションを実行し、デプロイします。

アプリケーションを作成および実行する前に、J.1項「SOAおよびUser Messaging Serviceのインストールおよび構成」の説明に従って、SOAおよびUser Messaging Serviceをインストールして構成する必要があります。

1. Oracle JDeveloperで、SendEmailWithAttachmentsApp.jws(.zipファイルに含まれています)を開きます。
「Oracle JDeveloper」メイン・ウィンドウの「Composite.xml」タブの下に、次のようなサンプル・アプリケーションのコンポーネントが表示されます。

図J-20 Oracle JDeveloperのメイン・ウィンドウ

「図J-20 Oracle JDeveloperのメイン・ウィンドウ」の説明

- 左のボックスは、アプリケーションを初期化するために使用するWebサービス・クライアントの定義です。

- 中央のボックスは、メッセージを作成して書式設定し、メッセージ・サービスをコールするBPELプロセスです。

- 右のボックスは、メッセージの送信に使用するメッセージ・サービス・リソースです。

2. ナビゲーション・ペインでプロジェクトを右クリックし、「新規」を選択して、アプリケーション・サーバー接続を作成します。J.2.3項「新規アプリケーション・サーバー接続の作成」の説明に従います。

3. J.2.4項「プロジェクトのデプロイ」の説明に従ってプロジェクトをデプロイします。

4. メッセージBuild Successfulがログに表示されていることを確認します。

5. メッセージDeployment Finishedがデプロイメント・ログに表示されていることを確認します。
アプリケーションが正常にデプロイされました。

サンプルを実行するには、その前に、次の項の説明に従って、Oracle User Messaging Serviceの追加ドライバを構成し、ユーザー・メッセージング・プリファレンスでメッセージを受信するユーザー用のデフォルト・デバイスを構成する必要があります。

注意:

詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

J.3.3 サンプルのテスト

次に、Oracle Enterprise Managerを介してテスト・メッセージを転送する方法を説明します。

次の手順を実行し、サンプルを実行およびテストします。

1. Webブラウザ・ウィンドウを開き、SOAドメインのOracle Enterprise Managerにログインします。たとえば、http://host:port/emなどです。

2. Enterprise Managerで、ナビゲーション・ツリーの「SOA」フォルダを開いて、デプロイされた「SendEmailWithAttachmentsProj」コンポジット・アプリケーションをクリックします。「テスト」ボタンをクリックして、テスト・クライアント・ページを起動します。

3. 「引数を入力」セクションでは、SendEmailWithAttachmentsProjを起動するための入力値が提供されます。
次の値を入力します。

- to: weblogic(ユーザー)

- subject: 通知テスト(件名)

- body: メッセージ・コンテンツ

- attachmentName: 拡張子も含めた添付ファイルの名前

- attachmentMimeType: たとえば、image/gif
PDF、DOC、GIF、JPEGなどのバイナリ・ファイルを送信する場合、attachmentMimeTypeエントリには、次の値を使用できます。

- file-name.doc – attachmentMimeType: application/msword

- file-name.pdf – attachmentMimeType: application/pdf

- file-name.jpg – attachmentMimeType: image/jpeg

- file-name.gif – attachmentMimeType: image/gif

HTML、XML、プレーン・テキストなどのテキスト・ファイルを送信する場合、attachmentMimeTypeエントリには、次の値を使用できます。

- file-name.txt – attachmentMimeType: text/plain

- file-name.html – attachmentMimeType: text/html

注意:

ASCII以外の文字がUTF-8でエンコードされて含まれているテキスト・ファイルの場合は、attachmentMimeTypeでcharset属性(「text/plain;charset=UTF-8」など)を指定する必要があります。また、コンテンツ自体はbase64エンコーディングを使用して送信する必要があります。この手順については、「base64エンコーディングでのテキスト・コンテンツの送信」を参照してください。

- attachmentURI: SOAサーバーがファイルをダウンロードするURL

4. 「Webサービスのテスト」をクリックします。

J.3.3.1 実行の確認

weblogic電子メール・アカウントを確認します。添付ファイル付きの電子メールを受信しているはずです。

J.3.4 サンプルの作成

次の手順を実行してサンプルを新規に作成すると、SOAコンポジット・アプリケーションにメッセージを追加して、ユーザー・メッセージング・プリファレンスを使用する方法を学習できます。

1. Oracle JDeveloper 11gを開きます。

2. 「File」→「新規」→「アプリケーション」→「SOAアプリケーション」を選択して、新規アプリケーションを作成します。「@OK」をクリックします。

3. 「アプリケーション名」を入力し、「次へ」をクリックします(図J-21)。

図J-21 新規アプリケーションおよび新規プロジェクトの作成(1/3)

「図J-21 新規アプリケーションおよび新規プロジェクトの作成(1/3)」の説明

4. プロジェクトの名前を入力し、「次へ」をクリックします(図J-22)。

図J-22 新規アプリケーションおよび新規プロジェクトの作成(2/3)

「図J-22 新規アプリケーションおよび新規プロジェクトの作成(2/3)」の説明

5. コンポジット・テンプレートとして、BPELプロセスを使用するコンポジットを選択します(図J-23)。「終了」をクリックします。

図J-23 新規アプリケーションおよび新規プロジェクトの作成(3/3)

「図J-23 新規アプリケーションおよび新規プロジェクトの作成(3/3)」の説明

6. 「BPELプロセスの作成」ダイアログで、BPELプロセス名としてSendEmailWithAttachmentsと入力します(図J-24)。「OK」をクリックします。

図J-24 BPELプロセスの作成

「図J-24 BPELプロセスの作成」の説明

7. 「SOAPサービスとして公開」が選択されていることを確認します。「OK」をクリックします。

8. これで、空のデフォルトBPELアプリケーションが作成されました。
「Oracle JDeveloper」メイン・ウィンドウの「Composite.xml」タブの下に、次のようなサンプル・アプリケーションのコンポーネントが表示されます。

- 左のボックスは、アプリケーションを初期化するために使用するWebサービス・クライアントの定義です。

- 中央のボックスは、メッセージを作成して書式設定し、メッセージ・サービスをコールするBPELプロセスです。

注意:

User Notification BPELプロセスの作成時にメッセージ送信に使用するメッセージ・サービス・リソースは、後で作成します(ステップ13から19)。

9. 「アプリケーション・ナビゲータ」の「xsd」フォルダを開き、「SendEmailWithAttachments.xsd」をダブルクリックして開きます(図J-25)。

図J-25 SendEmailWithAttachments.xsdファイルへのアクセス

「図J-25 SendEmailWithAttachments.xsdファイルへのアクセス」の説明

10. 「ソース」タブをクリックします(図J-25)。

11. このBPELアプリケーションの入力に対して次の変更を行います。
プロジェクトの「アプリケーション・ナビゲータ」のxsdフォルダ内に生成されたファイルSendEmailWithAttachments.xsdには、次のprocess要素定義がデフォルトで作成されます。

<element name="process">
<complexType>
<sequence>
<element name="input" type="string"/>
</sequence>
</complexType>
</element>

「ソース」タブを選択し、前述の行を次の内容で置換します。

<element name="process">
<complexType>
<sequence>
<element name="to" type="string"/>
<element name="subject" type="string"/>
<element name="body" type="string"/>
<element name="attachmentName" type="string"/>
<element name="attachmentMimeType" type="string"/>
<element name="attachmentURI" type="string"/>
</sequence>
</complexType>
</element>

このxsd要素は、BPELプロセスの入力を定義します。

12. プロジェクトを保存します。

13. SendEmailWithAttachments.bpelのエディタ画面を選択します。

14. 「コンポーネント・パレット」にある「Oracle Extensions」からemailアクティビティを、receiveInputアクティビティとcallbackClientアクティビティの間にドラッグ・アンド・ドロップします(図J-26)。

図J-26 Emailの編集

「図J-26 Emailの編集」の説明

15. 「Emailの編集」ウィンドウでは、「送信元アカウント」を「Default」のままにします。

図J-27 「Emailの編集」ウィンドウ

「図J-27 「Emailの編集」ウィンドウ」の説明

16. 「To」に対して式を作成するには、「XPath式ビルダー」を選択して、次の手順を実行します。

- 関数のドロップダウン・リストから「Identity Service Functions」を選択します。

- getUserProperty()関数を選択して「式に挿入」を選択します。

- 「BPEL変数」で、「変数」→「プロセス」→「変数」→「inputVariable」
→「payload」→「client:process」→「client:to」の順に選択します。

- 「式に挿入」をクリックします。

- 文字列mailを手動で入力します。

- カッコを適切に修正します。

- 「OK」をクリックします。

この式(図J-28を参照)は、Webサービスからデータを取得し、そのデータをローカルSOAユーザーのビジネス電子メールにマップします。

図J-28 Toパスに対する式ビルダー

「図J-28 Toパスに対する式ビルダー」の説明

式は、次のように表示されます。

ids:getUserProperty(  bpws:getVariableData('inputVariable','payload', '/client:process/client:to'),'mail')

17. 「件名」に対して式ビルダーを選択します。「BPEL拡張関数」から「getVariableData」を選択し、「式に挿入」をクリックします。

18. 「BPEL変数」で、「変数」→「プロセス」→「変数」→「inputVariable」
→「payload」→「client:process」→「client:subject」の順に選択します。
式は、次のように表示されます。

bpws:getVariableData( 'inputVariable', 'payload','/client:process/ client:subject')

19. 「本体」に対して式ビルダーを選択します。「BPEL拡張関数」から「getVariableData」を選択し、「式に挿入」をクリックします。

20. 「BPEL変数」で、「変数」→「プロセス」→「変数」→「inputVariable」
→「payload」→「client:process」→「client:body」の順に選択します。
式は、次のように表示されます。

bpws:getVariableData('inputVariable','payload','/client:process/client:body')

21. 「電子メールの編集」ダイアログ(図J-29)で、「添付ファイル」タブを選択し、追加アイコン(プラス・アイコン)を使用して、添付ファイルを追加します。
電子メールに複数のパートがある場合、添付ファイルの件数には、前述のウィザードで設定した本体が含まれます。前述のウィザードで指定した本体は、最初の本体部分として設定されます。たとえば、1つの添付ファイルがあるマルチパート・メールを表現するには、2つの本体部分を指定します。添付ファイルが1つある場合は、本体部分を1つ指定します。

各添付ファイルには、名前、MIMEタイプおよび値の3つの要素があります。各添付ファイルの3つの要素すべてに対して式を設定する必要があります。

図J-29 「Emailの編集」ウィンドウ

「図J-29 「Emailの編集」ウィンドウ」の説明

22. 添付ファイルの「名前」要素に対して式を作成するには、「名前」フィールドの近くにある「参照」ボタンをクリックして「XPath式ビルダー」を開き、次の手順を実行します。

1. 「BPEL拡張関数」から「getVariableData」を選択し、「式に挿入」をクリックします。

2. 「BPEL変数」で、「変数」→「プロセス」→「変数」→「inputVariable」
→「payload」→「client:process」→「client:attachmentName」の順に選択します。

3. 「式に挿入」をクリックします。カッコが一致していることを確認します。

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

式は、次のように表示されます。

bpws:getVariableData('inputVariable','payload','/client:process/client:attachmentName')

23. 添付ファイルの「MIMEタイプ」要素に対して式を作成するには、「名前」フィールドの近くにある「参照」ボタンをクリックして「XPath式ビルダー」を開き、次の手順を実行します。

1. 「BPEL拡張関数」から「getVariableData」を選択し、「式に挿入」をクリックします。

2. 「BPEL変数」で、「変数」→「プロセス」→「変数」→「inputVariable」
→「payload」→「client:process」→「client:attachmentMimeType」の順に選択します。

3. 「式に挿入」をクリックします。カッコが一致していることを確認します。

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

式は、次のように表示されます。

bpws:getVariableData('inputVariable','payload','/client:process/client:attachmentMimeType')

24. 添付ファイルの「値」要素に対して式を作成するには、「名前」フィールドの近くにある「参照」ボタンをクリックして「XPath式ビルダー」を開き、次の手順を実行します。

1. 「BPEL XPath拡張関数」から「readFile」を選択し、「式に挿入」をクリックします。

2. 「BPEL変数」で、「変数」→「プロセス」→「変数」→「inputVariable」
→「payload」→「client:process」→「client:attachmentURI」の順に選択します。

3. 「式に挿入」をクリックします。カッコが一致していることを確認します。

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

式は、次のように表示されます。

ora:readFile(  bpws:getVariableData('inputVariable','payload', '/client:process/client:attachmentURI'))

25. プロジェクトを保存します。

複数のコピー・ルールを含むassignアクティビティで構成されたBPELフラグメントが生成されます。コピー・ルールの1つによって添付ファイルがコピーされます。

生成されたデフォルトのコピー・ルールを表示し、新しいコピー・ルールを作成してデータを変換するには、次の手順を実行します。

1. プラス記号アイコンを選択して、Emailノードを展開します(図J-30)。

図J-30 Emailノードの展開

「図J-30 Emailノードの展開」の説明

2. EmailParamsAssignノードをダブルクリックします(図J-31)。

図J-31 EmailParamsAssignノード

「図J-31 EmailParamsAssignノード」の説明

J.3.4.1 base64エンコーディングでのテキスト・コンテンツの送信

ASCII以外の文字(UTF-8エンコードなど)が含まれたテキスト・ファイルの添付ファイルを送信するには、base64エンコーディングでテキスト・コンテンツを送信する必要があります。次の追加手順を実行します。

1. SendEmailWithAttachments.bpelファイルのソース・エディタを開きます。

2. マルチパート・コンテンツの適切な本体部分(<MultiPart>内の適切な<BodyPart>タグを検索)に次を追加します。

<ContentEncoding
xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService"/>

例J-1 マルチパートへのContentEncodingタグの追加

<copy xml:id="id33">
<from xml:id="id31">
<Content xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService">
<MimeType xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService">
multipart/mixed</MimeType>
<ContentBody xmlns="http://xmlns.oracle.com/ias/pcbpel/
NotificationService">
<MultiPart xmlns="http://xmlns.oracle.com/ias/pcbpel/
NotificationService">
<BodyPart xmlns="http://xmlns.oracle.com/ias/pcbpel/
NotificationService">
<MimeType xmlns="http://xmlns.oracle.com/ias/pcbpel/
NotificationService"/>
<ContentBody xmlns="http://xmlns.oracle.com/ias/pcbpel/
NotificationService"/>
<BodyPartName xmlns="http://xmlns.oracle.com/ias/pcbpel/
NotificationService"/>
</BodyPart>
<BodyPart xmlns="http://xmlns.oracle.com/ias/pcbpel/
NotificationService">
<MimeType xmlns="http://xmlns.oracle.com/ias/pcbpel/
NotificationService"/>
<ContentBody xmlns="http://xmlns.oracle.com/ias/pcbpel/
NotificationService"/>
<BodyPartName xmlns="http://xmlns.oracle.com/ias/pcbpel/
NotificationService"/>
<ContentEncoding xmlns="http://xmlns.oracle.com/ias/pcbpel/
NotificationService"/>
</BodyPart>
</MultiPart>
</ContentBody>
</Content

3. base64エンコーディングでテキストを送信するには、次の<copy>要素を追加します。

<copy>
<from expression="string('base64')"/>
<to variable="varNotificationReq" part="EmailPayload"
query="/EmailPayload/ns1:Content/ns1:ContentBody/ns1:MultiPart/ns1:BodyPart[2]/ns1:ContentEncoding"/>
</copy>

4. 「OK」をクリックしてプロジェクトを保存します。

これで、J.3.2項「事前作成されたサンプルの実行」の説明に従って、アプリケーションをデプロイして実行できます。

K Oracle SOA Suiteのプロパティのロード・マップ

この付録では、Oracle SOA Suiteの設計時および実行時の構成プロパティについて説明し、これらのプロパティの構成方法が説明されているドキュメントを参照先として示します。

項目は次のとおりです。

- K.1項「Oracle BPEL Process Managerデプロイメント・ディスクリプタのプロパティ」

- K.2項「正規化されたメッセージ・ヘッダー・プロパティ」

- K.3項「SOAコンポジット・アプリケーションのプロパティ」

- K.4項「フォルト・ポリシーとアダプタ拒否メッセージのプロパティ」

- K.5項「Oracle B2Bのシステム・プロパティ」

- K.6項「Oracle Enterprise Manager Fusion Middleware Controlのプロパティ・ページ」

- K.7項「システムMBeanブラウザのプロパティ」

K.1 Oracle BPEL Process Managerデプロイメント・ディスクリプタのプロパティ

デプロイメント・ディスクリプタは、Oracle WebLogic ServerまたはOracle Enterprise Manager(あるいはその両方)で実行時に使用されるBPELプロセス・サービス・コンポーネントのプロパティです。これらのプロパティは、設計時にSOAコンポジット・アプリケーションのcomposite.xmlファイルで設定します。表K-1に示すタイプのプロパティを設定できます。

表K-1 configurationsデプロイメント・ディスクリプタのプロパティ

プロパティ名

説明

completionPersistPolicy

インスタンス・データの保存方法。

disableAsserts

BPEL 1.1プロジェクトでアサーションを無効にするかどうか。

globalTxMaxRetry

リモート・フォルトに対する最大再試行回数。

globalTxRetryInterval

リモート・フォルトに対する再試行間隔(ミリ秒単位)。

inMemoryOptimization

プロセスのインスタンスに対するメモリー内最適化。

reenableAggregationOnComplete

BPELプロセスでメッセージをルーティングするために作成して使用するインスタンス数

keepGlobalVariables

インスタンスの完了後にサーバーがグローバル変数値をインスタンス・ストアに保持できるかどうか。

oneWayDeliveryPolicy

配信レイヤーでのプロセスの永続ポリシー。

sensorActionLocation

センサー・アクションXMLファイルの場所。

sensorLocation

センサーXMLファイルの場所。

transaction

コールを開始するBPELインスタンスのトランザクション動作。

idempotent

idempotentアクティビティとは、再試行可能なアクティビティ(assignアクティビティやinvokeアクティビティなど)です。非idempotentアクティビティの後にインスタンスが保存されます。このプロパティは、永続プロセスと一時プロセスの両方に適用されます。

nonBlockingInvoke

独立したスレッドを生成して起動を行い、invokeアクティビティによってインスタンスがブロックされないようにするかどうか。

validateXML

メッセージの境界の検証の有効化。

使用可能なデプロイメント・ディスクリプタのプロパティの詳細は、C.1.1項「プロパティ・インスペクタでデプロイメント・ディスクリプタのプロパティを定義する方法」および第13章「BPELプロセスでのトランザクションおよびフォルト伝播のセマンティクス」を参照してください。

K.2 正規化されたメッセージ・ヘッダー・プロパティ

ヘッダーの操作と伝播は、重要なビジネス統合メッセージング要件です。正規化されたメッセージ・ヘッダー・プロパティは、設計時に、receiveアクティビティ、invokeアクティビティ、pickアクティビティおよび(BPEL 1.1の場合)scopeアクティビティのonMessageブランチ、およびreplyアクティビティの「プロパティ」タブで設定できます。次のコンポーネントのプロパティを設定できます。

- Oracle JCAアダプタ

- Oracle BPEL Process Manager

- Oracle Web Services Addressing

- Oracle B2B

詳細は、付録H「正規化されたメッセージのプロパティ」を参照してください。

K.2.1 Oracle JCAアダプタのメッセージ・ヘッダー・プロパティ

Oracle JCAアダプタは基礎となるバック・エンド操作固有のプロパティをヘッダー要素として公開するため、これらの要素をビジネス・プロセス内で操作できます。

使用可能なOracle JCAアダプタのメッセージ・ヘッダー・プロパティの詳細は、次のガイドを参照してください。

- ファイル、FTP、AQ、JMS、ソケット、データベース、Oracle User Messaging ServiceおよびMQ Seriesのプロパティについては『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』の付録A「Oracle JCAアダプタのプロパティ」

- Oracle Applicationsアダプタのプロパティについては『Oracle Fusion Middleware Adapter for Oracle Applicationsユーザーズ・ガイド』

K.2.2 Oracle BPEL Process ManagerおよびOracle Web Services Addressingのメッセージ・ヘッダー・プロパティ

Oracle BPEL Process ManagerおよびOracle Web Services Addressingは、顧客の統合ニーズを解決する上でヘッダー・サポートに大きく依存しています。

使用可能なOracle BPEL Process ManagerおよびOracle Web Services Addressingのメッセージ・ヘッダー・プロパティの詳細は、付録H「正規化されたメッセージのプロパティ」を参照してください。

K.2.3 Oracle B2Bのメッセージ・ヘッダー・プロパティ

Oracle B2Bでは、予約済キーワードを使用してヘッダーを操作できます。

使用可能なOracle B2Bのメッセージ・ヘッダー・プロパティの詳細は、『Oracle Fusion Middleware Oracle B2Bユーザーズ・ガイド』の付録C「バック・エンド・アプリケーションのインタフェース」を参照してください。

K.3 SOAコンポジット・アプリケーションのプロパティ

composite.xmlファイルに対するほとんどの更新は、設計時にSOAコンポジット・エディタのダイアログ内から実行されますが、一部のプロパティは、「ソース」ビュー内からこのファイルに手動で追加する必要があります。表K-2では、これらのプロパティをリストし、これらのプロパティの構成方法が説明されているドキュメントを参照先として示します。

表K-2 Oracle SOA Suiteのプロパティ

プロパティ

説明

参照先

endpointURI

パートナ・リンクの複数のエンドポイント・ロケーションを指定します。この機能は、最初のエンドポイントが停止した場合に、フェイルオーバーするのに便利です。

第8.2.2.8項「複数のランタイム・エンドポイント・ロケーション」

oracle.composite.faultPolicyFile

フォルト・ポリシー・ファイルの場所を指定します(デフォルトの場所と異なる場合)。このオプションは、1つのフォルト・ポリシーを複数のSOAコンポジット・アプリケーションで使用する必要がある場合に便利です。

第12.4項「フォルト管理フレームワークを使用したフォルトの処理」

oracle.composite.faultBindingFile

フォルト・バインディング・ファイルの場所を指定します(デフォルトの場所と異なる場合)。このオプションは、1つのフォルト・ポリシーを複数のSOAコンポジット・アプリケーションで使用する必要がある場合に便利です。

第12.4項「フォルト管理フレームワークを使用したフォルトの処理」

passThroughHeader

デフォルトでは、SOAPヘッダーはOracle Mediatorを介して渡されません。SOAPヘッダーを渡すには、このプロパティを対応するOracle Mediatorルーティング・サービスに追加します。

第20.3.2.10項「値の割当て方法」

第20.3.2.12項「フィルタおよび割当てのためのヘッダー・アクセス方法」

rolesAllowed

Java EEアプリケーションからSOAコンポジット・アプリケーションを起動するために必要なロール名を指定します。

第38.5項「Enterprise JavaBeansロールの指定」

streamIncomingAttachments

および

streamOutgoingAttachments

これらのプロパティは、SOAPでアタッチメントをストリームするために指定します。

第45.1.1.2.1項「アタッチメント付きのSOAP」

oracle.webservices.local.optimization

ポリシーのローカル最適化設定を上書きする場合に指定します。

第45.1.1.2.1項「アタッチメント付きのSOAP」

および

Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド

oracle.soa.local.optimization.force

oracle.webservices.local.optimizationプロパティをオーバーライドし、最適化を強制できます。

Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド

one.way.returns.fault

一方向インタフェースのSOAPコールについて、フォルトおよび一方向メッセージの処理方法を制御します。

第24.1項「一方向メッセージ交換パターン」

mtomThreshold

添付ファイルのサイズをバイト単位で指定します。

第45.1.1.3項「SOAコンポジット・アプリケーションとのMTOM最適化メッセージの送受信」

K.4 フォルト・ポリシーとアダプタ拒否メッセージのプロパティ

フォルト・ポリシー・ファイルには、フォルト条件および対応するフォルト・リカバリ・アクションを定義します。それぞれのフォルト条件で、処理を試みる特定のフォルトまたは一連のフォルトを指定し、それに対応するアクションを指定します。

フォルト・ポリシーのフレームワーク・ファイルに追加プロパティを入力することもできます。表K-3では、これらのプロパティをリストし、これらのプロパティの構成方法が説明されているドキュメントを参照先として示します。

表K-3 Oracle SOA Suiteのフォルト・ポリシーのプロパティ

プロパティ

説明

参照先

retryInterval

アクティビティの再試行から次の再試行までの遅延(秒単位)を指定します。

第12.4.1.2項「自動フォルト・リカバリに対するフォルト・ポリシー・ファイルの作成」

retryCount

アクティビティを指定された回数だけ再試行します。

第12.4.1.2項「自動フォルト・リカバリに対するフォルト・ポリシー・ファイルの作成」

org.quartz.scheduler.idleWaitTime

スケジューラが再試行前に待機する時間(秒単位)を指定します。

第22.1.1.2項「アクション」

設計時に、フォルト・ポリシーのフレームワーク・ファイルにアダプタ拒否メッセージのプロパティを入力することもできます。

詳細は、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』のエラー処理に関する項を参照してください。

K.5 Oracle B2Bのシステム・プロパティ

Oracle B2Bのほとんどのプロパティは、Oracle B2Bインタフェースの「構成」タブで設定できます。これらの設定は、Oracle Enterprise Manager Fusion Middleware Controlで実行されたプロパティ設定よりも優先されます。

使用可能なOracle B2Bのプロパティの詳細は、『Oracle Fusion Middleware Oracle B2Bユーザーズ・ガイド』の「B2Bのシステム・パラメータの構成」の章を参照してください。

K.6 Oracle Enterprise Manager Fusion Middleware Controlのプロパティ・ページ

次のコンポーネントのプロパティは、実行時にOracle Enterprise Manager Fusion Middleware Controlのプロパティ・ページで構成できます。

- SOAインフラストラクチャ

- Oracle BPEL Process Manager

- ヒューマン・ワークフロー通知とタスク・サービス

- Oracle Mediator

- 相互参照

- Oracle B2B

- サービス・バインディング・コンポーネントと参照バインディング・コンポーネント(JCAアダプタ、WebサービスおよびOracle Service Registry)

K.6.1 SOAインフラストラクチャのプロパティ

SOAインフラストラクチャのプロパティを構成できます。これらのプロパティは、SOAインフラストラクチャで実行されるすべてのSOAコンポジット・アプリケーションに適用できます。次のタイプのプロパティを設定できます。

- 監査レベル

- キャプチャするコンポジット・インスタンスの状態

- ペイロード検証

- UDDI(Universal Description, Discovery, and Integration)レジストリ

- コールバック・サーバーとサーバーURL

- ページ上の最新のインスタンス、フォルトおよびカウント・メトリックの表示

- 最新のインスタンスおよびフォルトの取得の検索基準

- JNDI(Java Naming and Directory Interface)データ・ソース

- Webサービス・バインディング・プロパティ

使用可能なSOAインフラストラクチャのプロパティの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の「SOAインフラストラクチャの構成」の章を参照してください。

K.6.2 Oracle BPEL Process Managerのプロパティ

BPELプロセス・サービス・エンジンのプロパティを構成できます。これらのプロパティは、BPELサービス・コンポーネントの処理時にBPELプロセス・サービス・エンジンによって使用されます。次のタイプのプロパティを設定できます。

- 監査証跡レベル

- 監査証跡と大規模ドキュメントのしきい値

- ディスパッチャ・スレッド

- ペイロード・スキーマ検証

- BPELモニターおよびセンサーの有効化

使用可能なOracle BPEL Process Managerのプロパティの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の「BPELプロセス・サービス・コンポーネントとエンジンの構成」の章を参照してください。

K.6.3 ヒューマン・ワークフロー通知とタスク・サービス

ヒューマン・ワークフロー通知とタスク・サービスのプロパティを構成できます。これらのプロパティは、ヒューマン・ワークフロー・サービス・コンポーネントの処理時にヒューマン・ワークフロー・サービス・エンジンによって使用されます。次のタイプのプロパティを設定できます。

- メッセージの通知モード

- アクション可能なアドレス

- アクション可能な電子メールのアカウント名

- ワークフロー・セッションのタイムアウトとカスタム・クラス・パスのURL値

- 割当てサービスの動的割当てとタスク・エスカレーション関数

使用可能なヒューマン・ワークフロー通知とタスク・サービスのプロパティの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の「ヒューマン・ワークフローのサービス・コンポーネントとエンジンの構成」の章を参照してください。

K.6.4 Oracle Mediator

Oracle Mediatorのプロパティを構成できます。これらのプロパティは、Oracle Mediatorサービス・コンポーネントの処理時にOracle Mediatorサービス・エンジンによって使用されます。次のタイプのプロパティを設定できます。

- 監査レベルとメトリック・レベル

- パラレル・ワーカー・スレッド

- パラレルが取得する最大行数

- パラレル・ロッカー・スレッド・スリープとエラー・ロッカー・スレッド・スリープ

- カスタム構成パラメータ

- コンテナIDリフレッシュ時間とコンテナIDリース・タイムアウト

- リシーケンサ・ロッカー・スレッド・スリープ、ロックする最大グループ数およびワーカー・スレッド

使用可能なOracle Mediatorのプロパティの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の「Oracle Mediatorのサービス・コンポーネントとエンジンの構成」の章を参照してください。

K.6.5 相互参照

相互参照を構成すると、別のアプリケーションで作成された同等のエンティティの値を動的にマップできます。

使用可能な相互参照プロパティの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の「相互参照の管理」の章を参照してください。

K.6.6 Oracle B2B

Oracle B2BのDMS(ダイナミック・モニタリング・サービス)メトリックを有効化できます。

使用可能なOracle B2Bのプロパティの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の「Oracle B2Bの構成」の章を参照してください。

K.6.7 サービス・バインディング・コンポーネントと参照バインディング・コンポーネントのプロパティ

次のサービス・バインディング・コンポーネントと参照バインディング・コンポーネントのプロパティを構成できます。

- ファイル、FTP、AQ、JMS、ソケット、データベース、Oracle User Messaging ServiceおよびMQ Seriesのアダプタのアクティブ化仕様(サービス用)、相互作用仕様(参照用)およびエンドポイント・プロパティ(タイムアウト、しきい値、最大間隔など)。

- Webサービスのプロパティ(RESTの有効化など)。WSDL、メタデータ交換、Webサービスのエンドポイントなどを有効化します。

- Oracle Service Registry統合のエンドポイント参照およびサービス・キーのプロパティ

使用可能なサービスおよび参照バインディング・コンポーネントのプロパティの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の「サービス・バインディング・コンポーネントおよび参照バインディング・コンポーネントの構成」の章を参照してください。

K.7 システムMBeanブラウザのプロパティ

Oracle Enterprise Manager Fusion Middleware ControlのシステムMBeanブラウザでは、K.6項「Oracle Enterprise Manager Fusion Middleware Controlのプロパティ・ページ」で説明されているプロパティ・ページには表示されない拡張プロパティを変更できます。これらの拡張プロパティは、次のコンポーネントのプロパティ・ページの下部にあるリンクの下に表示されます。

- SOAインフラストラクチャ

- Oracle BPEL Process Manager

- Oracle Mediator

- ヒューマン・ワークフロー通知とタスク・サービス

- Oracle Service Registry

注意:

システムMBeanブラウザには、拡張プロパティに加えて、K.6項「Oracle Enterprise Manager Fusion Middleware Controlのプロパティ・ページ」で説明したプロパティ・ページに表示されるプロパティと同じプロパティが表示され、これらのプロパティを変更できます。

K.7.1 SOAインフラストラクチャのプロパティ

SOAインフラストラクチャでシステムMBeanブラウザのプロパティをすぐに表示するには、SOAインフラストラクチャの「共通プロパティ」ページの下部にある「詳細SOAインフラ拡張構成プロパティ」リンクをクリックします。表示される変更可能なプロパティの一部を次に示します。

- 起動例外で再試行可能な最大回数

- 起動例外の再試行から次の再試行までの秒数

- HTTPプロキシ認証レルム

- HTTPプロキシ認証タイプ

- HTTPプロキシ・ホスト

- 認証が必要なHTTPプロキシのパスワード

- HTTPプロキシのポート番号

- 認証が必要なHTTPプロキシのユーザー名

- WSDLファイルでプロセスのSOAPアドレスの一部として公開されるHTTPプロトコルURL

- WSDLファイルでプロセスのSOAPアドレスの一部として公開されるHTTPSプロトコルURL

- Oracle SOA Suiteキーストアへのパス

- UDDIエンドポイントのキャッシュ存続期間

使用可能なSOAインフラストラクチャのシステムMBeanブラウザのプロパティの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の「SOAインフラストラクチャの構成」の章を参照してください。

K.7.2 Oracle BPEL Process Managerのプロパティ

BPELプロセスのシステムMBeanブラウザのプロパティを表示するには、「BPELサービス・エンジン・プロパティ」ページの下部にある「詳細BPEL構成プロパティ」リンクをクリックします。表示される変更可能なプロパティの一部を次に示します。

- BPEL生成Javaソースをコンパイルする際に含める追加のBPELクラスパス

- 失敗した期限切れコール(wait/onAlarm)が失敗する前に再試行される最大回数

- 期限切れ再試行から次の期限切れ再試行までの遅延

- 各フェッチ時にデハイドレーション・ストアから割り当てられるインスタンスIDのブロック・サイズ

- メモリー内キャッシュに格納される起動メッセージ数

- 一方向起動メッセージを配信するかどうか

- 最近処理されたリクエスト・リストのサイズ

- リクエストおよびレスポンス操作がタイムアウトになる前に確保しておく最大時間

使用可能なOracle BPEL Process ManagerのシステムMBeanブラウザのプロパティの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の「BPELプロセス・サービス・コンポーネントとエンジンの構成」の章を参照してください。

K.7.3 Oracle Mediatorのプロパティ

Oracle MediatorのシステムMBeanブラウザのプロパティを表示するには、「メディエータ・サービス・エンジン・プロパティ」ページの下部にある「詳細メディエータ構成プロパティ」リンクをクリックします。Oracle Mediatorに表示されるシステムMBeanブラウザのほとんどのプロパティは、「メディエータ・サービス・エンジン・プロパティ」ページでも変更できます。

使用可能なOracle MediatorのシステムMBeanブラウザのプロパティの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の「Oracle Mediatorのサービス・コンポーネントとエンジンの構成」の章を参照してください。

K.7.4 ヒューマン・ワークフロー通知とタスク・サービスのプロパティ

ヒューマン・ワークフローのシステムMBeanブラウザのプロパティを表示するには、「ワークフロー通知プロパティ」ページの下部にある「詳細ワークフロー通知構成プロパティ」リンクをクリックするか、「ワークフロー・タスク・サービス・プロパティ」ページの下部にある「詳細ワークフロー・タスクサービス構成プロパティ」リンクをクリックします。表示される変更可能なプロパティの一部を次に示します。

- 受信インスタント・メッセージ(IM)を受信するアドレス

- カスタム通知サービスのプロパティ名を返すかどうか

- 構成されたFax送付状の返信数

使用可能なヒューマン・ワークフロー通知とタスク・サービスのシステムMBeanブラウザのプロパティの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の「ヒューマン・ワークフローのサービス・コンポーネントとエンジンの構成」の章を参照してください。

K.7.5 Oracle Service RegistryのWSDL URLキャッシュ構成

Oracle Enterprise Manager Fusion Middleware ControlでUddiCacheLifetimeプロパティを指定したサービス・キーによって、キャッシュ内のエンドポイントWSDL URLが照会に対して使用可能な時間の長さを増やすことができます。

UddiCacheLifetimeプロパティの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の「サービス・バインディング・コンポーネントおよび参照バインディング・コンポーネントの構成」の章を参照してください。

索引

A B C D E F G H I J K L M N O P Q R S T U V W X Y

A

abs関数

説明, B.1.3.1

アクセス・ポイント, 63.4.1, 64.5.1, 65.5.1 アクセス・ポリシー

タスク・コンテンツ, 29.9.1

アクセシビリティ・オプション

Oracle BPM Worklist, 1.9

Oracle SOAコンポーザ, 1.9

アクション・タイプ, 29.5.2.3 アクション可能な電子メール, 34.2.7

デジタル署名が有効な場合、実行時に送信されない, 34.2.7

アクティビティ

「注釈」タブ, A.2.1.1

assert, A.2.4

「アサーション」タブ, 12.14.2, A.2.1.2

assign, A.2.3

bind entity, A.2.5

実行のバイパス, 11.5

compensate, A.2.6

compensateScope, A.2.7

BPELプロジェクト間でのコピーおよび貼付け, A.2.2

同じBPELプロジェクト内でのコピーおよび貼付け, A.2.2

「相関」タブ, A.2.1.3

create entity, A.2.8

定義, 4.2

dehydrate, A.2.9

「ドキュメント」タブ, A.2.1.4

email, A.2.10

empty, A.2.11

exit, A.2.12

flow, A.2.13

flowN, A.2.14

forEach, A.2.15

「ヘッダー」タブ, A.2.1.5

if, A.2.16

IM, A.2.17

invoke, A.2.18

Java embedding, A.2.19

概要, 4.2, A.2

partner link, A.2.20

phase, A.2.21

pick, A.2.22

「プロパティ」タブ, A.2.1.6

receive, A.2.23

receive signal, A.2.24

remove entity, A.2.25

repeatUntil, A.2.26

replay, A.2.27

reply, A.2.28

アクティビティのコピーおよび貼付けの制限, A.2.2

rethrow, A.2.29

scope, A.2.30

sequence, A.2.31

signal, A.2.32

「スキップ条件」タブ, 11.5.1, A.2.1.7

SMS, A.2.33

「ソース」タブ, A.2.1.8

switch, A.2.34

アクティビティ実行の同期化, 10.2.3

「ターゲット」タブ, A.2.1.8

多くのアクティビティに共通のタブ, A.2.1

terminate, A.2.35

throw, A.2.36

「タイムアウト」タブ, 15.3, A.2.1.9

transform, A.2.37

user notification, A.2.38

validate, A.2.39

voice, A.2.40

wait, A.2.41

while, A.2.42

アクティビティ・センサー

定義, 18.1

アダプタ構成ウィザード

開始, 4.5

アダプタ

バインディング・コンポーネント, 2.3.1, 2.4.1

構成, 4.5

定義, 1.5.2, 4.5, 37.1.3, A.3

Oracle JDeveloper, 4.5

Oracle BAM, 53.1

概要, 1.5.2, 37.1.3, A.3

サービス名, 4.5

サポート対象, 1.5.2, 37.1.3, A.3

add-dayTimeDuration-to-dateTime関数

説明, B.1.2.1

相互参照表列の追加, 49.4.4 ドメイン値マップへの列の追加, 47.3.1 ドメイン値マップへの行の追加, 47.3.3 addQuotes関数

説明, B.2.1

ADFバインディング

ファイル, 54.4.2

JSP/Javaクラスからコンポジットを起動するための使用, 37.2.2

ADFバインディング・フィルタ, 35.1.4 ADFモデル・レイヤー、概要, 54.1 ヒューマン・タスク用のADFタスク・フロー, 30.3 ADF、Oracle BAMの使用, 54.4 ADF-BCサービス

バインディング・コンポーネント, 2.3.1, 2.4.1

定義, 37.1.8

adfBindingsバインディング・フィルタ, 35.1.4 adf-desktop-integration.jar, 35.1.4 adfdiExcelDownloadダウンロード・フィルタ, 35.1.4 adfdiRemoteサーブレット, 35.1.4 ADFLibraryFilterフィルタ, 35.1.4 admin.server.hostパラメータ, 3.5.7 admin.server.portパラメータ, 3.5.7 拡張フォーマット、メッセージ・ソース, 56.2.3 計算で使用する集計関数, 55.2.4 アラート

履歴, 60.6

Oracle BAM

概要, 60.1

アクション, F.3

アクティブ化, 60.2.2

アクティビティ, 60.6

管理ロール・ユーザー, 60.1, 60.2.5

条件, F.2

作成, 60.2

依存性, 60.5

イベント, F.1

頻度制限, F.4

履歴, 60.6

メッセージ, 60.4

パラメータ化, F.3.4

テンプレート, 60.3

Webサービス, 60.7

alidateFodConfigSettings antスクリプト, 3.5.7 「注釈」タブ

アクティビティ, A.2.1.1

antスクリプト

パーティション内のすべてのコンポジットのアクティブ化, 43.7.6.23

アプリケーションのアクティブ化, 43.7.6.13

SOAコンポジット・アプリケーションへのデフォルト・バージョンの割当て, 43.7.6.15

compile-deploy-all, 3.5.7

SOAコンポジット・アプリケーションのコンパイル, 43.7.6.2

SOAインフラストラクチャでのパーティションの作成, 43.7.6.19

パーティションの削除, 43.7.6.20

SOAコンポジット・アプリケーションのデプロイ, 43.7.6.4

テスト・ケースの実行, 43.7.6.1

SARファイルへのSOAコンポジット・アプリケーションのエクスポート, 43.7.6.6

コンポジットのデプロイメント後の変更のJARファイルへのエクスポート, 43.7.6.7

指定したパターンの共有データのJARファイルへのエクスポート, 43.7.6.9

SOAインフラストラクチャで使用可能なすべてのパーティションの一覧表示, 43.7.6.17

パーティション内のすべてのコンポジットの一覧表示, 43.7.6.18

デプロイ済SOAコンポジット・アプリケーションの一覧表示, 43.7.6.16

コンポジットの管理, 43.7.6

コンポジットSARファイルへのSOAコンポジット・アプリケーションのパッケージ化, 43.7.6.3

トップレベルの共有データ・フォルダの削除, 43.7.6.10

パーティション内のすべてのコンポジットのリタイア, 43.7.6.24

アプリケーションのリタイア, 43.7.6.14

seedBAMServerObjects, 3.5.7, 3.5.7

seedDemoUsers, 3.5.7

seedFodJmsResources, 3.5.7

server-setup-seed-deploy-test, 3.5.7

パーティション内のすべてのコンポジットの起動, 43.7.6.21

アプリケーションの起動, 43.7.6.11, 43.7.6.12, 43.7.6.13, 43.7.6.14, 43.7.6.15, 43.7.6.16

パーティション内のすべてのコンポジットの停止, 43.7.6.22

アプリケーションの停止, 43.7.6.12

SOAコンポジット・アプリケーションのアンデプロイ, 43.7.6.5

validateFodConfigSettings, 3.5.7

appendToList関数

説明, B.2.3

アプリケーション・ナビゲータ

Oracle JDeveloper内での位置, 4.1.1

アプリケーション・ロール

定義, 27.2.1.1.3

アプリケーション・テンプレート, 35.1.3 AQアダプタ

定義, 37.1.3.1

配列

トランスフォーメーション, 40.3.6.3

操作, 6.19

maxOccurs属性, 6.19

SOAPでエンコードされた配列, 6.19.2

静的な索引付け, 6.19.1

AspectJクラス

Springサービス・コンポーネントによる構成, 52.8

assertアクティビティ

機能, A.2.4

アサーション条件

作成, 12.14.2

無効化, 12.14.3

XMLスキーマ・ブール値タイプに評価されない式によるフォルトのスロー, 12.14.1.6

インスタンス監査証跡へのイベントの記録, 12.14.1.5

複数, 12.14.1.3

フォルトのスロー, 12.14

組込みおよびカスタムのXPath関数と$variable参照の使用, 12.14.1.4

アサーションのテスト

概要, 44.1.4

アサーション

値のアサートの作成, 44.4.5.1

コンポジット・テスト・スイート, 44.2.3

「アサーション」タブ

アサーション条件の作成, 12.14.2

アクティビティ, A.2.1.2

assignアクティビティ

非同期サービスへの追加, 8.2.1.4

ターゲット・ノードへのリテラルまたはXMLフラグメントの割当て, A.2.3

BPEL 1.1のbpelx拡張要素, 6.14

BPEL 2.0のbpelx拡張要素, 6.14

機能, A.2.3

コピー・ルールのbpelx拡張要素タイプへの変更, A.2.3

データのコピー, 6.5.1, A.2.3

ターゲット・ノードでのbpelx:rename拡張ルールの作成, A.2.3

ターゲット・ノードでのXPath式の作成, A.2.3

説明, 6.1.2

データ操作用, 6.1.2, A.2.3

電子メール・メッセージ本文のHTMLとしての書式設定, 17.3.1.2

非同期サービス, 8.2.1.4

大きいスキーマの受渡しでの制限, 6.1.2

ターゲット・ノードの再キャスト, A.2.3

ターゲット・ノードの名前の変更, A.2.3

BPEL 1.1における拡張タイプの選択方法, A.2.3

BPEL 2.0における拡張タイプの選択方法, A.2.3

ignoreMissingFromData属性の選択, A.2.3

insertMissingToData属性の選択, A.2.3

keepSrcElementName属性の選択, A.2.3

2つのアクティビティへの分割, A.2.3

複数のbpelx:append設定の使用, A.2.3

「コピー・ルール」タブの使用, 6.14, A.2.3

assign拡張要素の属性

ignoreMissingFromData, 6.14.7

insertMissingToData, 6.14.7

keepSrcElementName, 6.14.7

使用, 6.14.7

割当てサービス

構成, 34.3

カスタム割当てサービスのデプロイ, 34.3.2.3

Dynamic Assignment Function, 34.3.1, 34.3.1.1, 34.3.1.2, 34.3.1.3

タスク参加者の動的割当て, 34.3.2

実装例, 34.3.2.2

実装, 34.3.2.1

通知タイマー付き非同期相互作用

クライアントとしてのBPELプロセス, 5.5.1

サービスとしてのBPELプロセス, 5.5.2

定義, 5.5

タイムアウト付き非同期相互作用

クライアントとしてのBPELプロセス, 5.4.1

サービスとしてのBPELプロセス, 5.4.2

定義, 5.4

非同期相互作用

クライアントとしてのBPELプロセス, 5.3.1

サービスとしてのBPELプロセス, 5.3.2

定義, 5.3

フォルトを返す, 12.9.2

非同期プロセス

デハイドレーション・ストア, 8.2.2.7, 8.2.2.7

非同期サービス

assignアクティビティ, 8.2.1.4

コール, 8.2

相関ID, 8.2.2.5

invokeアクティビティ, 8.2.1.2, 8.2.2.5

パラレル・フロー, 10.1

パートナ・リンク, 8.2.1.1, 8.2.2.2, 8.2.2.3

receiveアクティビティ, 8.2.1.3, 8.2.2.5

WS-Addressing, 8.2.2.5

添付ファイル

WebサービスへのMTOMアタッチメントの追加, 45.1.1.3

URLファイルの添付, 32.4.3

エンドツーエンドのストリーミング, 45.1.1.2

SOAP, 45.1.1.2.1

MIME, 45.1.1.2.1

有効な最適化, 45.1.1.2.1

ファイルおよびFTPアダプタのオプション, 45.1.1.2.2

Oracle B2B, 45.1.1.2.3

パフォーマンス・オーバーヘッドとパス・スルー・アタッチメント, 45.1.1.2.1

アタッチメントをストリーミングするためのプロパティ, 45.1.1.2.1

SOAPアタッチメントのコンテンツの読取りおよびエンコード, 45.1.1.2.1

ストリーミング・アタッチメントの送信, 45.1.1.2.1

通知ウィザードによる送信, 17.3.1.1

同期フローを使用したアタッチメントの共有, 45.1.1.2.1

ストリーミング, 45.1.1.2.1

電子メール通知によるタスクの添付ファイル, 34.2.8

ora:doStreamingTranslate XPath関数を使用したアタッチメントの変換, 45.1.1.2.2

WordMLスタイルシートの使用, 29.6.1

アウトバウンド・ファイル・アダプタを使用したアタッチメントの書込み, 45.1.1.2.2

属性ラベル

国際化, 34.1.9.1

属性

操作, 6.13

監査レベル

設定, 45.1.3.1

authenticate関数

説明, B.2.2

自動マッピング

トランスフォーメーション, 40.3.7

トランスフォーメーションでの確認, 40.3.7.1

自動化されたテスト

BPELプロセス・サービス・コンポーネント, 44, 44.5

SOAコンポジット・アプリケーション, 2.8.2, 44

B

B2B 「Oracle B2B」を参照

B2BX12OrderGatewayプロジェクト, 3.3.1

bam.server.hostパラメータ, 3.5.7

bam.server.passwordパラメータ, 3.5.7

bam.server.portパラメータ, 3.5.7

bam.usernameパラメータ, 3.5.7

バッチ処理

Oracle Business Activity Monitoringでのメッセージのバッチ処理の制限, 53.7.2

batchProcessActive関数

説明, B.2.58.1

batchProcessCompleted関数

説明, B.2.58.2

ベスト・プラクティス

SOAコンポジット・エディタでのBPELおよびメディエータ・サービス・コンポーネントの作成および接続, 4.3

大規模ドキュメントの処理, 45.1

大規模メタデータの処理, 45.2

多数のインスタンスの処理, 45.3

チューニングに関する推奨事項, 45.1.3

binプロジェクト, 3.3.1 bindアクティビティ

BPEL 1.1プロジェクトでのみサポート, A.2.5

bind entityアクティビティ

機能, A.2.5

バインディング・コンポーネント

アダプタ, 2.3.1, 2.4.1

参照の追加, 2.4.1

サービスの追加, 2.3.1

ADF-BCサービス, 2.3.1, 2.4.1, 37.1.8

定義, 1.5.2, 1.6

参照の削除, 2.4.2

サービスの削除, 2.3.5

直接バインディング・サービス, 2.3.1, 2.4.1, 37.1.10

編集, 2.3.4

EJBサービス, 2.3.1, 2.4.1, 37.1.9

HTTPバインディング, 2.3.1, 2.4.1, 37.1.2

SOAコンポジット・アプリケーションへの統合, 37.2

概要, 37.1

JCAアダプタ, 37.1.3

Oracle B2B, 2.3.1, 2.4.1, 37.1.6

Oracle BAM, 37.1.5

Oracle Healthcare, 2.3.1, 2.4.1

Oracle Healthcare Adapter, 37.1.7

サポート対象, 1.5.2, 2.3.1

Webサービス, 2.3.1, 2.4.1, 37.1.1

WS-Atomicトランザクション, 37.1.1.1

bindingFault

定義, 12.3.2.1

ブール値

割当て, 6.11

ボトムアップ設計アプローチ, 1.7 bpel

BPEL 2.0ネームスペース接頭辞, 6.1.2, B.2.57

BPEL 1.1

アクティビティの概要, A.2

BPEL 2.0

$variable構文, 6.8.1

アクティビティの概要, A.2

assignアクティビティ, 6.1.2

日付または時刻の割当て, 6.12.1

ブール値の割当て, 6.11.1

bpelx:append拡張要素, 6.14.1.2

bpelx:copyList拡張要素, 6.14.6.2

bpelx:insertAfter拡張要素, 6.14.3.2

bpelx:insertBefore拡張要素, 6.14.2.2

bpelx:remove拡張要素, 6.14.4.2

bpelx:rename拡張要素, 6.14.5.2

バージョン1.1および2.0をサポートする単一BPELプロジェクトは作成できない, 4.1.1

compensateScopeアクティビティ, 12.12.4, A.2.7

条件分岐, 11.2.2

BPELプロジェクトの作成, 4.1.1

custid属性, 6.13.1

拡張ネームスペースの宣言, 6.23

BPELプロジェクト・バージョン番号の決定, 4.1.1

要素ベースの変数, 6.6.1

exitアクティビティ, 12.13.2, A.2.12

式のコピー, 6.9.1

forEachアクティビティ, 10.3.2, A.2.15

fromParts要素, 6.17

ifアクティビティ, 11.2.2, A.2.16

プロセス定義のインポート, 6.18

インラインの変数の初期化, 6.5.2, 8.2.1.3

制限事項

インバウンド・メッセージ・アクティビティ・サポート, 8.2.4

WSDLメッセージ・パートのマップ, 6.17 メッセージ・タイプベース変数の定義, 6.6.1 ネームスペース接頭辞, 6.1.2 フォルト処理の優先順位, 12.2.2.1 repeatUntilアクティビティ, 11.4, A.2.26 rethrowアクティビティ, 12.8, A.2.29 複数のパートを持つfromParts要素を使用したIMAの相関の設定, 9.1.3 同時onMessageブランチ, 15.2.3 SOAPでエンコードされた配列, 6.19.2.1 標準フォルト, 12.2.2 サポートされているアクティビティ, A.2 toParts要素, 6.17 メッセージ交換アクティビティでの要素変数の使用, 6.16 onEventブランチを使用してメッセージ着信を待機, 15.5 BPEL設計環境

概要, 4.1

BPEL拡張関数

BPEL 1.1, B.2.57

BPEL 2.0, B.2.57

BPELモニター

定義, 4.6

BPELプロセスのテスト

assertアクティビティの実行, 44.5.3

BPELプロセスのアクティビティのアサーション, 44.5.1

テストの自動化, 44.5

waitアクティビティのバイパス, 44.5.6

アサーションの作成, 44.5.5

BPELプロセス・サービス・コンポーネントのテストの作成, 44.5.4

waitアクティビティに対する早送りアクションの指定, 44.5.2

アクティビティの実行回数の指定, 44.5.7

BPELプロセス

共通の相互作用パターン, 5, 24

作成, 3.5.1, 3.5.2, 4.1.1

定義, 1.4

ネーミング規則, 4.1.1

サービス・コンポーネント, 2.2.1

サポートされているバージョン, 1.4

トランザクション・セマンティクス, 13.1

BPELプロジェクト

BPELプロジェクト・バージョン番号の決定, 4.1.1

ネーミング規則, 4.1.1

BPELセンサー

Oracle BAM, 53.7

BPEL XPath拡張関数, 6.1.2, B.2

例, 6.1.2

bpelx拡張要素

bpel:rename, A.2.3

bpelx:append, 6.14.1.1, 6.14.1.2, 6.19.2, 6.19.4.2, 17.3.1.3, A.2.3

bpelx:append拡張要素, 6.14.1

bpelx:conversationId, 8.2.5.1

bpelx:copyList, 6.14.6.1, 6.14.6.2, A.2.3

bpelx:dehydrate name, A.2.9

bpelx:detailLabel, 16.1.1.1

bpelx:eventName, 9.2.2

bpelx:exec, 14.2.3, 14.5

bpelx:flowN, 10.3.1.2

bpelx:for, 15.3.1.1

bpelx:fromProperties, H.4.2

bpelx:headerVariable, 6.22

bpelx:ignoreMissingFromData, 6.14.7.1

bpelx:inputProperty, H.4.1

bpelx:insertAfter, 6.14.3.1, 6.14.3.2, A.2.3

bpelx:insertBefore, 6.14.2.1, 6.14.2.2, A.2.3

bpelx:insertMissingToData, 6.14.7.2

bpelx:invokeAsDetail, 16.1.1

bpelx:outputProperty, H.4.1

bpelx:postAssert, 12.14

bpelx:preAssert, 12.14

bpelx:receiveSignal, 16.1.1, 16.1.1

bpelx:remove, 6.3.2, 6.14.4.1, 6.14.4.2, A.2.3

bpelx:rename, 6.14.5.1, 6.14.5.2, A.2.3

bpelx:rollback, 13.1.1.1

bpelx:sdoCapable, 6.3.1

bpelx:signal, 16.1.1

bpelx:skipCondition, 11.5

bpelx:target, 6.3.2, 6.14.5.1

bpelx:timeout, 15.3.1.4

bpelx:until, 15.3.1.2

bpelx:validate, 6.15.1

assignアクティビティ, A.2.3

BPEL 1.1のassignアクティビティ, 6.14

BPEL 2.0のassignアクティビティ, 6.14

XMLデータ操作, 6.14

bpelx:append拡張要素

ノード・リストへのデータの追加, B.2.3

シーケンスへの新しい項目の追加, 6.19.4.2

コピー・ルールの変更, A.2.3

説明, 6.14.1

emailアクティビティのメッセージ・コンテンツ, 17.3.1.3

SOAPでエンコードされた配列, 6.19.2

SDOベースの変数でサポートされない, 6.3.2

使用, 6.14.1.1, 6.14.1.2

bpelx:assert拡張要素

XMLスキーマ・ブール値タイプに評価されない式によるフォルトのスロー, 12.14.1.6

複数のアサーション, 12.14.1.3

条件に基づいたフォルトのスロー, 12.14

組込みおよびカスタムのXPath関数と$variable参照の使用, 12.14.1.4

faultName属性とmessage属性の使用, 12.14.1.2

bpelx:conversationId拡張要素, 8.2.5.1 bpelx:copyList拡張要素

コピー・ルールの変更, A.2.3

ノード・リストまたはノードのコピー, B.2.4

説明, 6.14.6

使用, 6.14.6.1, 6.14.6.2

bpelx:dehydrate name拡張要素

説明, A.2.9

bpelx:detailLabel拡張要素, 16.1.1.1 bpelx:eventName拡張要素

同じインスタンスへのイベントのルーティング, 9.2.2

bpelx:exec拡張要素, 14.2.3, 14.5

組込みメソッド, 14.2.6

SDOの埋込み, 14.5

bpelx:flowN拡張要素, 10.3.1.2 bpelx:for拡張要素, 15.3.1.1 bpelx:fromProperties拡張要素, H.4.2 bpelx:gnoreMissingFromData拡張要素

使用, 6.14.7.1

bpelx:headerVariable拡張要素, 6.22

説明, 6.22

bpelx:inputProperty拡張要素, H.4.1 bpelx:insertAfter拡張要素

コピー・ルールの変更, A.2.3

説明, 6.14.3

使用, 6.14.3.1, 6.14.3.2

bpelx:insertBefore拡張要素

コピー・ルールの変更, A.2.3

説明, 6.14.2

使用, 6.14.2.1, 6.14.2.2

bpelx:insertMissingToData拡張要素

使用, 6.14.7.2

bpelx:invokeAsDetail拡張要素, 16.1.1 bpelx:outputProperty拡張要素, H.4.1 bpelx:postAssert拡張要素, 12.14 bpelx:preAssert拡張要素, 12.14 bpelx:receiveSignal拡張要素, 16.1.1, 16.1.1 bpelx:remove拡張要素

作成, A.2.3

説明, 6.14.4

使用, 6.14.4.1, 6.14.4.2

bpelx:rename拡張要素

追加, A.2.3

説明, 6.14.5

使用, 6.14.5.1, 6.14.5.2

bpelx:rollback拡張要素, 13.1.1.1 bpelx:sdoCapable拡張要素

SDOベースの変数の宣言, 6.3.1

bpelx:signal拡張要素, 16.1.1 bpelx:skipCondition拡張要素

アクティビティの実行のバイパス, 11.5

アクティビティをバイパスするために指定, 11.5

bpelx:target拡張要素, 6.3.2, 6.14.5.1 bpelx:timeout拡張要素, 15.3.1.4

アクティビティ・タイムアウト時にスローされるフォルト, 15.3.1.4

bpelx:until拡張要素, 15.3.1.2 bpelx:validate拡張要素

説明, 6.15

BPEL 1.1での使用, 6.15.1

bpws

BPEL 1.1ネームスペース接頭辞, 6.1.2, B.2.57

ドメイン値マップ関数を使用した式の作成, 47.4.3 build.propertiesファイル

WebLogic Fusion Order Demo

build.propertiesファイル, 3.5.7

ビジネス・イベント

コンポジット・センサーの追加, 50.2

作成, 41.2

定義, 41.1

直接サービス起動との差異, 41.1

イベント定義言語(EDL), 41.1

イベント配信ネットワーク, 41.1

同じプロセスに対して公開およびサブスクライブしたイベントは配信されない, 41.1.2

ローカルおよびリモートの境界, 41.1.1

公開, 41.3.4

コールバック・クラスの指定, 29.11.1.2

サブスクライブ, 41.3.1, 41.4.1

エントリと中間プロセスの両方のreceiveアクティビティにおけるbpelx:eventNameによる操作属性の置換, 9.2.2

ビジネス・フォルト

定義, 12.3, 12.3.1

ビジネス・プロセス・インスタンス

停止, 12.13

ビジネス・ルール

アクション・タイプ, 29.5.2.3

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

設計環境の概要, 25.3

ファクト・タイプ, 29.5.2.2

リンク・ディクショナリのサポート, 29.5.2.5

OrderBookingComposite、使用, 3.4

ルーティング・ポリシー, 29.5

サービス・コンポーネント, 2.2.1, 25.4.2

拡張ルーティング・ルールの指定, 29.5.2

データ検証および制約チェックのためのユースケース, 25.1.1

動的処理のためのユースケース, 25.1.1

プロセスのデシジョン・ポイントの外部化のためのユースケース, 25.1.1

ヒューマン・ワークフローのためのユースケース, 25.1.1

ユースケース, 25.1.1

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

宣言コンポーネントの使用, 26.2

ビジネス・ルール・デザイナ

概要, 25.2

レイアウト, 25.2

C

計算フィールド, 55.2.4

計算

集計関数, 55.2.4

日付関数, 55.2.4

式, 55.2.4

文字列関数, 55.2.4

コールバック・クラス

ビジネス・イベントの指定, 29.11.1.2

タスク・ステータスに指定, 29.11.1

コールバック

クラスのロード, 34.4

BPELコールバックのタスク・ルーティングとカスタマイズ, 29.11.2

Springでの使用, 52.2.2

表示, 28.4.5.1

大/小文字の区別

ヒューマン・ワークフロー, 34.5.6

グループ名, 29.2.7.1

catchブランチ

作成, 12.10.7, A.2.30

定義, 12.10.5

フォルト処理, 12.10

catchAllブランチ

定義, 12.10.5

チャネル

チャネルを削除しても統合されたパートナ・リンクが削除されない, 17.3

電子メール, 17.3.1

IM, 17.3.2

SMS, 17.3.3

ボイス・メール, 17.3.4

キャラクタ・セット・エンコーディング

変更, 29.8.4

チャンク

ファイルおよびFTPアダプタによる, 45.1.1.4.2

クラスパス

リモートEnterprise JavaBeansを使用するクライアント, 33.5

SOAPを使用するクライアント, 33.4

データ・オブジェクトの消去, 55.10 clearTaskAssignees関数

説明, B.5.1

compare関数

説明, B.1.4.1

compare-ignore-case関数

説明, B.1.4.2

compensateアクティビティ

機能, A.2.6

定義, 12.12

フォルト処理, 12.12

compensateScopeアクティビティ

機能, A.2.7

BPEL 2.0プロジェクトでのみサポート, A.2.7

使用, 12.12.4

コンパイル

メモリー増加によるエラーのリカバリ, 43.9.6.7

compile-deploy-all antスクリプト, 3.5.7 completionPersistPolicyプロパティ

説明, C.1

複雑な構造

大規模XML文書の処理, 45.1.1.5

複合型

変数, 6.6

コンポーネント・パレット

概要, 2.1.2

Oracle JDeveloper内での位置, 4.1.1

componentTypeファイル

定義, 2.1.2

コンポジット・センサー

追加, 50.2

プロパティの追加, 50.2.1.3

変数の追加, 50.2.1.1

式の追加, 50.2.1.2

バインディング・コンポーネントへの追加, 50.2

ビジネス・イベントをサブスクライブするサービス・コンポーネントへの追加, 50.2

定義, 50.1

実行時の監視, 50.3

使用上の制限, 50.1.1

コンポジット・テスト

アサーションの概要, 44.1.4

BPELプロセスのテスト, 44.5

テスト・スイートの作成, 44.3

値のアサートの作成, 44.4.5.1

定義, 44.1

テスト・スイートのデプロイ, 44.6

インバウンド・メッセージのエミュレート, 44.4.1

エミュレーションの概要, 44.1.3

テスト・スイートとテスト・ケースのネーミング制限, 44.3

テスト・ケースの概要, 44.1.1

テスト・スイートのアサーション, 44.2.3

テスト・スイートのコンポーネント, 44.2

テスト・スイートのエミュレーション, 44.2.2

テスト・スイートの概要, 44.1.2

テスト・スイート・プロセスの開始, 44.2.1

XMLのアサート, 44.1.4

composite.xmlファイル

定義, 2.1.2, 2.1.2

デプロイメント・ディスクリプタ, C.1.1, C.1.1

SOA-MDS接続により開く, 43.5.7.1

センサーとセンサー・アクションの登録, 18.2.6

concat関数

説明, 6.10

条件分岐ロジック

定義, 11

XPath式の使用, 11.1

switchアクティビティの使用, 11.2.1

whileアクティビティの使用, 11.3

条件付き処理

xsl chooseを使用, 40.3.6.2

xsl ifを使用, 40.3.6.1

構成プラン

XSLTアーティファクトを編集できない, 43.6.1.1

作成, 43.6.1.4

WLSTユーティリティを使用した作成, 43.6.1.5

定義, 43.6.1

ユースケース, 43.6.1.3

構成プロパティ

デプロイメント・ディスクリプタ, C.1

接続

SOA-MDS接続の作成, 43.7.3.4.1

アプリケーション・サーバー接続の作成, 43.7.1.1

SOA-MDS接続によりcomposite.xmlを開く, 43.5.7.1

Oracle BAMサーバー, 53.4, 54.3

定数値

トランスフォーメーション, 40.3.3

対話ID

追加, 8.2.5

コンポジットの別々のリビジョンに対する同じ対話IDの使用に関する制限, 9.1.2

「コピー・ルール」タブ

assignアクティビティでの使用, A.2.3

セキュリティ・フィルタのコピー, 55.6.2 copyList関数

説明, B.2.4

コアXPath関数

例, 6.1.2

相関ID

WS-Addressing, 8.2.2.5

相関セット

メッセージの集約, 9.2

receiveアクティビティとの関連付け, 9.1.1.5

作成, 9.1.1.4

プロパティ・エイリアスの作成, 9.1.1.6

コンポジットの別々のリビジョンに対する同じ対話IDの使用に関する制限, 9.1.2

メッセージの競合状態, 9.2.3

新規または既存のインスタンスへのメッセージのルーティング, 9.2.3

receiveアクティビティのエントリと中間プロセスのreceiveアクティビティにおける同じ操作の使用, 9.2.2

相関

pickアクティビティのonMessageブランチへの追加, A.2.22

複数のパートを持つfromParts要素を使用したIMAの設定, 9.1.3

非同期サービスでの使用, 9.1

「相関」タブ

アクティビティ, A.2.1.3

使用, 9.1.1.5.1, 9.1.1.5.1, 9.1.1.5.2, 9.1.1.5.2, 9.1.1.5.3, 9.1.1.5.3

countNodes関数

説明, B.2.5

ドメイン値マップの作成, 47.2 create entityアクティビティ

機能, A.2.8

BPEL 1.1プロジェクトでのみサポート, A.2.8

インスタンスの作成

定義, 8.2.2.5

receiveアクティビティ, 8.2.2.5

create-delimited-string関数

説明, B.1.4.3

createInstance属性, 8.2.2.6 create-nodeset-from-delimited-string関数

説明, B.4.1

createWordMLDocument関数

説明, B.5.2

相互参照表の作成, 49.4.1 データ・オブジェクトのフォルダの作成, 55.5 CreditCardAuthorizationプロジェクト, 3.3.1 相互参照表の参照, 49.6

xref

lookupXRef関数, 49.6.1

相互参照表, 49.1

列の追加, 49.4.4

作成, 49.4

値の削除, 49.7

参照, 49.6

変更, 49.4

列への移入, 49.5

xref

lookupXRef関数, 49.6.1

markForDelete関数, 49.7

populateXRefRow1M関数, 49.5.3

相互参照

XSLTマッパーで設計時にテストできない, 40.4.1

作成, 49.4

概要, 49.1

変更, 49.4

概要, 49.1

current-date関数

説明, B.1.2.2

current-dateTime関数

説明, B.1.2.3

current-time関数

説明, B.1.2.4

カスタム・クラス

SOAコンポジット・アプリケーションへの追加, 14.3

カスタム・エスカレーション関数

使用, 34.3.3

カスタム・センサー

パブリッシュ・タイプ, 18.1

カスタム・タスク・フォーム・ウィザード

タスク表示フォームの作成, 30.4.3

カスタマイズ

XSDまたはWSDLファイルの追加, 46.2.3

カスタマイズされたアプリケーションのコンパイルおよびデプロイ, 46.2.8

カスタマイズされたSOAコンポジット・アプリケーションの作成, 46.2

カスタマイズ・コンポジット内のアーティファクトの編集, 46.2.5

リンクされたビジネス・ルール・ディクショナリのサポート, 29.5.2.5

SOAコンポジット・アプリケーション, 46.1

1つのレイヤーのカスタマイズのみがサポートされている, 46.1

シーケンスの競合の解決, 46.2.7

Oracle JDeveloperでの検証エラーの解決, 46.2.6

カスタマイズ・アクティビティの検索, 46.2.4

顧客SOAコンポジット・アプリケーション, 46.4

バーティカルSOAコンポジット・アプリケーション, 46.3

SOAコンポジット・アプリケーションのアップグレード, 46.5

カスタマイズ

「カスタマイズ開発者」ロールでのWSDLおよびXSDファイルの作成, 46.3.1

D

データ・コントロール、Oracle BAM

概要, 54.1

集計, 54.5.8

計算フィールド, 54.5.4

作成, 54.4.1

フィールドの選択、ソート, 54.5.5

フィルタ, 54.5.6

フラット問合せ, 54.5.1

グループ問合せ, 54.5.1

グループ, 54.5.7

パラメータ, 54.5.2

問合せタイプ, 54.5

時間グループ, 54.5.7.1

データ・コントロール

作成, 54.4.1

「データ・コントロール」パネルでの表示, 54.4.2.1

「データ・コントロール」パネル

定義されているアイコン, 54.4.2.1

ユーザー・インタフェースの作成に使用, 54.5

データ操作

複合型変数のフィールドへのアクセス, 6.6

ブール値の割当て, 6.11

日付または時刻の割当て, 6.12

リテラル文字列の割当て, 6.9

数値の割当て, 6.7

文字列の連結, 6.10

文字列から構造化XMLオブジェクト・タイプへの変換, 6.20

変数間のデータのコピー, 6.5

データ・シーケンスへの動的な索引付け, 6.19.4

genEmptyElem関数を使用した配列と等価の機能の生成, 6.19.4.4

変数の初期化, 6.4

配列の操作, 6.19

属性の操作, 6.13

XPath関数を使用した数学的計算, 6.8

データ・シーケンスへの静的な索引付け, 6.19.1

assignアクティビティ, 6.1.2, 6.5.1

XQueryおよびXSLT, 6.1.2

データ・オブジェクト

概要, 55.1

ディメンションの追加, 55.7

計算列, 55.2.4

コンテンツの消去, 55.10

コンテンツ, 55.4.3

フォルダの作成, 55.5

日時列, 55.2.5

定義, 55.2

削除, 55.11, 55.11

ディメンション, 55.7

一般情報, 55.4.1

索引, 55.9

レイアウト, 55.4.2

参照列, 55.2.3

移動, 55.8

Oracle Data Integrator, 55.2.7

分類, 55.5

権限, 55.3

フォルダ, 55.5.3

名前の変更, 55.8, 55.8 セキュリティ・フィルタ, 55.6 システム, 55.2.6 表示, 55.4 データ・シーケンス

サイズの決定, 6.19.3

動的な索引付け, 6.19.4

データベース

センサーのパブリッシュ・タイプ, 18.1

データベース・アダプタ

定義, 37.1.3.2

データベース・ビュー

ヒューマン・ワークフロー, 34.8

DataObjectDefinition Webサービス, 59.3 DataObjectOperations Webサービス, 59.2 日付タイムスタンプ・フィールド, 55.2.5 日付

割当て, 6.12

計算で使用する日付関数, 55.2.4 day-from-dateTime関数

説明, B.1.2.5

db.adminUserパラメータ, 3.5.3 db.demoUser.tablespaceパラメータ, 3.5.3 デバッチ

ファイルおよびFTPアダプタによるデバッチ, 45.1.1.4.1

宣言コンポーネント

定義, 26.1

使用, 26.2

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

フォルト・ハンドラの定義, 12.5.1 dehydrateアクティビティ

機能, A.2.9

デハイドレーション・ストア, 8.2.2.7

定義, 8.2.2.7

相互参照表の値の削除, 49.7

xref

markForDelete関数, 49.7

データ・オブジェクトの削除, 55.11 フォルダの削除, 55.5.6 デプロイメント

コンポジットの構造, 43.4

チェックが必要な構成プランに関する共通の問題, 43.9.6.2

チェックが必要なデプロイメントに関する共通の問題, 43.9.6.1

アプリケーション・サーバー接続の作成, 43.7.1.1

ターゲット環境に応じたアプリケーションのカスタマイズ, 43.6

パーティション, 43.7.1.3

他のデプロイ済コンポジットの起動, 2.7

デプロイ済のコンポジットの管理, 2.8.1

単一のコンポジット, 43.7.1

タスク・フロー, 43.7.1.3

既存のアーカイブ, 43.7.4

複数のコンポジット, 43.7.2

コンポジット間の共有メタデータ, 43.7.3

SOAコンポジット・アプリケーション, 2.7, 2.8.1

アーティファクト・ファイルのパッケージ化, 43.3

デプロイメント後の構成, 43.8

ターゲット環境の準備, 43.5

前提条件, 43.2

ADFタスク・フォームのEARファイルのデプロイメント・エラーを解決するためのロックの解放, 43.9.6.6

クラスタへのデプロイ, 43.7.8

管理対象Oracle WebLogic Serverへ, 43.9.6.3

SARへのデプロイ, 43.7.1.3

双方向のSSL対応Oracle WebLogic Serverはサポートされない, 43.9.6.4

アプリケーション・サーバーへのデプロイ, 43.7.1.3

トラブルシューティング, 43.9.6

接続できないプロキシ・サーバーを使用, 43.9.6.5

antスクリプトを使用, 43.7.6

WLSTユーティリティを使用, 43.7.5

デプロイメント・ディスクリプタ・ファイル

「web.xmlファイル」を参照

デプロイメント・ディスクリプタ

composite.xmlファイル, C.1.1, C.1.1

構成プロパティ, C.1, C.1, C.1

プロパティ・インスペクタでの構成プロパティの定義, C.1.1

非推奨, C.2

プロパティの概要, K.1

デザイナ・ウィンドウ

Oracle JDeveloper内での位置, 4.1.1

ディクショナリ

トランスフォーメーション, 40.3.10

関数が使用されている場合のディクショナリの生成に関する制限, 40.3.11

リンク・ディクショナリのサポート, 29.5.2.5

デジタル署名, 34.1.10

署名が必要なタスクの操作, 32.4.4

実行時に送信されないアクション可能な電子メール, 34.2.7

指定, 29.9.2

DIME添付ファイル

未サポート,45.1.1.2

ディメンション

データ・オブジェクトへの追加, 55.7

データ・オブジェクト, 55.7

時間, 55.7.2

直接バインディング

同じサーバー名およびドメイン名を持つ複数のホスト上でのコンポジットの起動, 39.3.4

信頼できるドメイン, 39.3.2

直接バインディング起動API, 39.2 直接バインディング・サービス

非同期直接バインディング起動, 39.2.2

バインディング・コンポーネント, 2.3.1, 2.4.1

定義, 1.5.2, 37.1.10

直接バインディング起動API, 39.2

Oracle Service Busフローの起動, 37.1.10

Oracle Service Busの起動, 37.1.10, 39.3

大規模ドキュメントの処理には非推奨, 45.1.1.2.1

概要, 39.2

起動APIの使用例, 39.4

SOA直接アドレス構文, 39.2.3

SOAトランザクション伝播, 39.2.4

同期直接バインディング起動, 39.2.1

disableAssertsプロパティ

説明, C.1

doc関数

説明, B.2.6

「ドキュメント」タブ

アクティビティ, A.2.1.4

BPEL 2.0プロジェクトでのみ使用可能, A.2.1.4

ドメイン値マップ

列の追加, 47.3.1

行の追加, 47.3.3

XSLTマッパーで設計時にテストできない, 40.4.1

SOAコンポーザを使用した実行時の変更内容のコミット, 48.5

作成, 47.2

dvm

lookupValue関数, 47.4.1.1

lookupValue1M関数, 47.4.1.2

編集, 47.3 SOAコンポーザを使用した実行時の編集, 48.1, 48.3 機能, 47.1.1, 47.1.1

1対多マッピング, 47.1.1.3

修飾子の順序, 47.1.1.2

修飾子, 47.1.1.1

1対多マッピング, 47.1.1.3 修飾子の順序, 47.1.1.2 修飾子, 47.1.1.1 SOAコンポーザを使用した実行時の保存, 48.4 使用, 47.4 トランスフォーメーションでの使用, 47.4.2 lookupValue関数の使用, 47.4.3 SOAコンポーザを使用した実行時の表示, 48.2 ドメイン値マップ関数

dvm

lookupValue, 47.4.1.1

lookupValue1M, 47.4.1.2

ドメイン値マップの修飾子, 47.1.1.1 ダウンロード・フィルタ, 35.1.4 永続サブスクリプション

イベント配信ネットワークではサポートされない, 41.1

dvm

lookupValue関数, 47.4.1.1

lookupValue1M関数, 47.4.1.2

Dynamic Assignment Function

構成, 34.3.1.2

表示名の構成, 34.3.1.3

定義, 34.3.1

実装, 34.3.1.1

動的パートナ・リンク

使用, 8.5

動的ルーティング・デシジョン表

2レイヤーのビジネス・プロセス管理の使用, 51.3

E

EclipseLink O/X Mapper(OXM)

「OXM」を参照

ドメイン値マップの編集

列の追加, 47.3.1

行の追加, 47.3.3

EDN

「イベント配信ネットワーク」を参照

EJBサービス

バインディング・コンポーネント, 2.3.1, 2.4.1

要素

XSLTドキュメントでの無視, 40.3.15

電子メール

アドレスの動的設定, 17.3.5

電子メールのアクション可能化, 34.2.7

通知サポート, 17.1, 17.3.1

emailアクティビティ

機能, A.2.10

通知サポート, 17.3.1

電子メール添付ファイル

通知サポート, 17.3.1.1

電子メール・メッセージ

メッセージ本文のHTMLコンテンツ, 17.3.1.2

CDATA関数を必要とするメッセージ・コンテンツに対する動的HTMLの使用, 17.3.1.3

emptyアクティビティ

機能, A.2.11

定義, 12.10.9

フォルト処理, 12.10.9

エミュレーション・テスト

概要, 44.1.3

エミュレーション

インバウンド・メッセージのエミュレート, 44.4.1

BPELテスト・スイート, 44.2.2

enable.bam.sensorsパラメータ, 3.5.7 終了

タスク, 29.7

エンドポイントの場所

複数, 8.2.2.8

endpointURI

プロパティ, K.3

ends-with関数

説明, B.1.4.4

Enterprise JavaBeans

Enterprise JavaBeansサービスの作成, 1.5.2, 38.3

定義要素をコールする場所の判別, 38.2.4

JavaインタフェースとSOAコンポジット・アプリケーションとの統合, 38.1.2

SOAコンポジット・アプリケーションとの相互作用, 38.1, 38.1

ワークフロー・サービスでのサポート, 34.1.1

サポートされているバージョン, 38

Enterprise JavaBeans (EJB)サービス

Enterprise JavaBeansサービスの作成, 37.1.9

エンタープライズ・メッセージ・ソース

概要, 56.1

作成, 56.2

日時仕様, 56.2.2

定義, 56.2, 58.2

ペイロードのエラーの処理, 56.2.4

XMLフォーマット, 56.2.3

エンティティ変数

バインディング・キー, 6.2.1.4

作成, 6.2.1

定義, 6.2

BPEL 1.1プロジェクトでのみサポート, 6.2

使用, 6.2

エラー割当て先

構成, 29.5.4

定義, 27.2.1.3

エラー

EMSエラー処理構成, 56.2.4

無効な設定, A.6

エスカレート

タスク, 29.7

エスカレーション・ポリシー

エスカレートまでの時間, 29.7.5

概要, 29.7.1, 29.7.1

指定, 29.7.6

評価時間

定義, 18.2.2

イベント定義言語(EDL)

定義, 41.1

イベント配信ネットワーク

公開されるビジネス・イベント, 41.1

永続サブスクリプションはサポートされない, 41.1

EDN-DB, 41.1

EDN-JMS, 41.1

実装, 41.1

エビデンス・ストア・サービス, 34.1.10

定義, 34.1.10

Enterprise JavaBeans、SOAPおよびJavaサポート, 34.1.1

WSDLファイルの場所, 34.1.1

Excelワークブック

MIMEマッピング, 35.1.4

例外, 12.3 exitアクティビティ

機能, A.2.12

ビジネス・プロセス・インスタンスの即時終了, 12.13.2

BPEL 2.0ではterminateアクティビティに置換, A.2

EXM

SOAコンポジット・アプリケーションでのサポート, 52.7.1

有効期限ポリシー

期限切れまでの時間, 29.7.3

期限切れなし, 29.7.2

概要, 29.7.1, 29.7.1

期限更新までの時間, 29.7.4

エクスポート・ファイルのサンプル

ICommand, G.5

「式ビルダー」ダイアログ

ドメイン値マップ関数の使用, 47.4.3

式定数

変数の初期化, 6.4

計算で使用する式, 55.2.4 拡張されたマッピング(EXM)

「EXM」を参照

拡張ネームスペース

BPEL 2.0で,の宣言, 6.23

外部データ・ソース

概要, 58.1

作成, 58.2

Oracle Data Integrator, 58.2.2

外部ルーティング

ルーティング・ポリシー, 29.5.3

ExternalLegacyPartnerSupplierプロジェクト, 3.3.1

F

ファセット

タスク表示フォーム, 30.4.3

ファクト・タイプ, 29.5.2.2 フォルト・バインディング, 22.1.2 フォルト処理, 12.5.1

作成, 12, 12.5.1

定義, 12.1

EMSペイロード・エラー構成, 56.2.4

フォルト・ポリシー, 12.4

RuntimeFault.wsdlのインポート, 12.5.1

WSDLファイルの変更, 12.5.1

BPEL 2.0での優先順位, 12.2.2.1

外部フォルトを返す, 12.9, 12.9.2

アサーション条件の指定, 12.14

内部フォルトのスロー, 12.7

catchブランチの使用, 12.10

compensateアクティビティの使用, 12.12

emptyアクティビティの使用, 12.10.9

scopeアクティビティの使用, 12.10

terminateアクティビティの使用, 12.13.1

getFaultAsString関数の使用, 12.6

throwアクティビティの使用, 12.7

フォルト管理フレームワーク

フォルト・ポリシー・バインディングへのフォルト・ポリシーの関連付け, 12.4.1.3

定義, 12.4

設計, 12.4.1

フォルト・ポリシーの実行, 12.4.2

Javaアクション・フォルト・ポリシーの使用, 12.4.3

フォルト・ポリシー, 22.1.1

アクション, 22.1.1.2

フォルト・ポリシー・バインディングへの関連付け, 12.4.1.3

コンポーネント・レベル, 22.1.2

コンポジット・レベル, 22.1.2

条件, 22.1.1.1

定義, 12.4

設計, 12.4.1

実行, 12.4.2

Oracle BPM Suiteの定義, 12.4.4

Javaアクション・フォルト・ポリシーの使用, 12.4.3

フォルト・ポリシー・バインディング

サンプル・ファイル, 12.4.1.4

フォルト・センサー

定義, 18.1

fault-bindings.xml, 22.4.2

フォルト・ポリシー・バインディング・ファイル, 12.4

fault-policies.xml, 22.4.1

フォルト・ポリシー・ファイル, 12.4

フォルト

BPELフォルト・カテゴリ, 12.3

同期BPELプロセスでのシステム・フォルトの処理と伝播, 12.3.3

Qnameフォルト名, 12.3

外部フォルトを返す, 12.9, 12.9.2

標準フォルト, 12.2

内部フォルトのスロー, 12.7

アサーション条件によるスロー, 12.14

フィールド

計算, 55.2.4

参照, 55.2.3

タイムスタンプ, 55.2.5

ファイル・アダプタ

チャンク, 45.1.1.4.2

デバッチ, 45.1.1.4.1

定義, 37.1.3.3

Oracle Real Application Clusters環境での同じファイルの2回の処理, 37.1.3.3

ストリーミング, 45.1.1.5.1

フィルタ

adfBindings, 35.1.4

adfdiExcelDownload, 35.1.4

ADFLibraryFilter, 35.1.4

バインディング・フィルタ, 35.1.4

コピー, 55.6.2

Oracle BAMセキュリティ, 55.6

センサー, 18.2.3

Fire and Forget

一方向メッセージ, 5.1

フレックス・フィールド

「マップ済属性」を参照

flowアクティビティ

機能, A.2.13

パラレル・フローの作成, 10.2

シングル・スレッドで実行されるフロー, A.2.13

BPEL 1.1と2.0におけるリンク初期化構文の差, 10.2.3

アクティビティ実行の同期化, 10.2.3

flowNアクティビティ

機能, A.2.14

flowアクティビティ数のカスタマイズ, 10.3.1

定義, 10.3.1

BPEL 2.0ではforEachアクティビティに置換, A.2

fod.application.issoaenabledプロパティ, 3.5.4 フォルダ権限, 55.5.3 フォルダ

削除, 55.5.6

名前の変更, 55.5.5

forEachアクティビティ

機能, A.2.15

アクティビティの複数のセットの処理, 10.3.2

BPEL 2.0ではflowNアクティビティに置換, A.2

successfulBranchesOnly属性はサポートされない, 10.3.2

foreign.mds.typeパラメータ, 3.5.7 format関数

説明, B.2.58.3

formatDate関数

説明, B.2.12

format-dateTime関数

説明, B.1.2.6

format-string関数

説明, B.1.4.5

FTPアダプタ

チャンク, 45.1.1.4.2

デバッチ, 45.1.1.4.1

定義, 37.1.3.4

ストリーミング, 45.1.1.5.1

関数

abs, B.1.3.1

add-dayTimeDuration-to-dateTime, B.1.2.1

addQuotes, B.2.1

拡張関数, B.4

appendToList, B.2.3

authenticate, B.2.2

batchProcessActive, B.2.58.1

batchProcessCompleted, B.2.58.2

BPEL XPath拡張関数, B.2

トランスフォーメーションでの連鎖, 40.3.4.2

clearTaskAssignees, B.5.1

compare, B.1.4.1

compare-ignore-case, B.1.4.2

concat, 6.10

copyList, B.2.4

countNodes, B.2.5

create-delimited-string, B.1.4.3

create-nodeset-from-delimited-string, B.4.1

createWordMLDocument, B.5.2

ユーザー定義XPath拡張関数の作成, B.7

current-date, B.1.2.2

current-dateTime, B.1.2.3

current-time, B.1.2.4

day-from-dateTime, B.1.2.5

説明, 40.3.4

doc, B.2.6

電子メール・アドレスと電話番号の動的設定, 17.3.5

トランスフォーメーションでの編集, 40.3.4.1

トランスフォーメーションでのXPath式の編集, 40.3.5

ends-with, B.1.4.4

例, 6.1.2

format, B.2.58.3

formatDate, B.2.12

format-dateTime, B.1.2.6

format-string, B.1.4.5

接頭辞がxp20またはorclの関数, 40.3.4

genEmptyElem, 6.19.4.4, B.2.58.4

generateGUID, B.2.13

generate-guid, B.4.2

getChildElement, B.2.58.5

getContentAsString, B.2.21

get-content-as-string, B.1.4.6

getConversationId, B.2.22

getCreator, B.2.23

getCurrentDate, 6.12, B.2.24

getCurrentDateTime, 6.12, B.2.25

getCurrentTime, 6.12, B.2.26

getDefaultRealmName, B.5.13.1

getDomainは非推奨, B.2

getElement, B.2.28

getFaultAsString, 12.6

getGroupIdsFromGroupAlias, B.2.31

getGroupProperty, B.5.13.2

getInstanceId, B.2.32

getLinkStatus, B.2.57.1

get-localized-string, B.1.4.8

getManager, B.5.13.3

getMessage, B.2.58.6

getNodes, B.2.34

getNodeValue, B.2.33

getNotificationProperty, B.5.3

getNumberOfTaskApprovals, B.5.4

getPreference, B.2.37

getPreviousTaskApprover, B.5.5

getProcessId, B.2.38

getProcessOwnerId, B.2.39

getProcessURL, B.2.40

getProcessVersion, B.2.41

getReportees, B.5.13.4

getTaskAttachmentByIndex, B.5.6

getTaskAttachmentByName, B.5.7

getTaskAttachmentContents, B.5.8

getTaskAttachmentsCount, B.5.9

getTaskResourceBindingString, B.5.10

getUserAliasId, B.2.42

getUserProperty, 17.3.5, B.5.13.6

getUserRoles, B.5.13.7

getUsersInGroup, B.5.13.9

getVariableData, 17.3.5, B.2.57.2

getVariableProperty, B.2.57.3

hours-from-dateTime, B.1.2.7

implicit-timezone, B.1.2.8

トランスフォーメーション, 40.3.4

index-within-string, B.1.4.9

integer, B.2.46

isUserInRole, B.5.13.10

last-index-within-string, B.1.4.10

left-trim, B.1.4.11

listUsers, B.2.47

関数説明の場所, 6.1.2

lookupGroup, B.5.13.11

lookup-table, B.1.1.1

lookupUser, B.2.48, B.5.13.12

lookup-xml, B.4.8

lower-case, B.1.4.12

matches, B.1.4.13

max-value-among-nodeset, B.2.58.7

メディエータXPath拡張関数, B.3

minutes-from-dateTime, B.1.2.9

min-value-among-nodeset, B.2.58.8

month-from-dateTime, B.1.2.10

parseEscapedXML, 6.20, B.2.49

position, 6.19.1

接頭辞がxp20またはorcl, 40.3.4

processXQuery, B.2.51

processXSLT, 17.3.1.2, B.2.52

processXSLTAttachmentは非推奨, B.2

processXSQLは非推奨, B.2

query-database, B.1.1.2

readBinaryFromFile, B.2.53, B.3.12

readFile, B.2.54

right-trim, B.1.4.14

search, B.2.55

seconds-from-dateTime, B.1.2.11

データ・シーケンス要素の選択, 6.19.1

sequence-next-val, B.1.1.3

SOA XPath拡張関数, B.1

square-root, B.2.58.9

subtract-dayTimeDuration-from-dateTime, B.1.2.12

timezone-from-dateTime, B.1.2.13

upper-case, B.1.4.15

Windowsでのディレクトリ・パスに対するダブル・スラッシュの使用によりエラーが発生する可能性がある, B.6.8

wfDynamicGroupAssign, B.5.11

wfDynamicUserAssign, B.5.12

ワークフロー・サービス, B.5

writeBinaryToFile, B.2.56

year-from-dateTime, B.1.2.14

Fusion Order Demo

デプロイ, 3.5

パーティションへのデプロイ, 3.5.7

スキーマのインストール, 3.5.3

Springとの統合, 52.6

概要, 3.1

実行, 3.6

設定, 3.2

ストアフロント・モジュール, 3.1.1

WebLogic Fusion Order Demo, 3.1.2

概要, 3.1.2

Fusion Webアプリケーション(ADF)のアプリケーション・テンプレート, 35.1.3 FusionOrderDemo_R1PS5.zip, 3.2.2 FYI割当て先

構成, 29.4.6

定義, 27.2.1.1.2, 29.4.6

FYIタスクはまず申告してから終了することが必要, 30.4.4

タスクはアクション可能ではない, 29.8.7

ワークフローの参加者タイプ, 27.2.1.1.2, 29.4.6

G

genEmptyElem関数

説明, 6.19.4.4, B.2.58.4

generateGUID関数

説明, B.2.13

generate-guid関数

説明, B.4.2

getChildElement関数

説明, B.2.58.5

getContentAsString関数

説明, B.2.21

get-content-as-string関数

説明, B.1.4.6

getConversationId関数

説明, B.2.22

getCreator関数

説明, B.2.23

getCurrentDate関数

説明, 6.12, B.2.24

getCurrentDateTime関数

説明, 6.12, B.2.25

getCurrentTime関数

説明, 6.12, B.2.26

getDefaultRealmName関数

説明, B.5.13.1

getDomain関数

非推奨, B.2

getElement関数

説明, B.2.28

getFaultAsString関数

説明, 12.6

getGroupIdsFromGroupAlias関数

説明, B.2.31

getGroupProperty関数

説明, B.5.13.2

getInstanceId関数

説明, B.2.32

getLinkStatus関数

説明, B.2.57.1

get-localized-string関数

説明, B.1.4.8

getManager関数

説明, B.5.13.3

getMessage関数

説明, B.2.58.6

getNodes関数

説明, B.2.34

getNodeValue関数

説明, B.2.33

getNotificationProperty関数

説明, B.5.3

getNumberOfTaskApprovals関数

説明, B.5.4

getPreference関数

説明, B.2.37

getPreviousTaskApprover関数

説明, B.5.5

getProcessId関数

説明, B.2.38

getProcessOwnerId関数

説明, B.2.39

getProcessURL関数

説明, B.2.40

getProcessVersion関数

説明, B.2.41

getReportees関数

説明, B.5.13.4

getTaskAttachmentByIndex関数

説明, B.5.6

getTaskAttachmentByName関数

説明, B.5.7

getTaskAttachmentContents関数

説明, B.5.8

getTaskAttachmentsCount関数

説明, B.5.9

getTaskResourceBindingString関数

説明, B.5.10

getUserAliasId関数

説明, B.2.42

getUserProperty関数

説明, B.5.13.6

例, 17.3.5

getUserRoles関数

説明, B.5.13.7

getUsersInGroup関数

説明, B.5.13.9

getVariableData関数

説明, 6.10, B.2.57.2

例, 17.3.5

結果ノードセットのサイズが1を超える場合のselectionFailureのスロー, B.2.57.2.1

数学的計算での使用, 6.8

getVariableProperty関数

説明, B.2.57.3

グローバル・タスク変数名

ヒューマン・タスク・アクティビティでの指定, 28.4.4.1

グローバル変数

トランスフォーメーション, 40.3.12

globalTxMaxRetryプロパティ

説明, C.1

globalTxRetryIntervalプロパティ

説明, C.1

ガバナンス

Oracle Enterprise Repository, A.5

Groovyクラス

Springサービス・コンポーネントによる構成, 52.8

グループ名

デフォルトで大/小文字を区別, 29.2.7.1

グループ投票

構成, 29.4.4

同意パーセント, 29.4.4.1

最小のパーセントに達するとただちに投票結果がトリガーされる, 29.4.4.1

グループ投票詳細の指定, 29.4.4.1

結果をトリガーせずにすべての投票の完了まで待機, 29.4.4.1

H

ヘッダー

正規化されたメッセージ・ヘッダー・プロパティ, H.1

SOAPヘッダー, 6.22

「ヘッダー」タブ

アクティビティ, A.2.1.5

Healthcare 「Oracle Healthcare」を参照 ヒープ・サイズ

増加, 40.4.2.1, 45.1.3.1

「履歴」ウィンドウ

Oracle JDeveloper内での位置, 4.1.1

hours-from-dateTime関数

説明, B.1.2.7

HTTPバインディング

バインディング・コンポーネント, 2.3.1, 2.4.1

HTTPバインディング・ウィザードによる構成, 37.1.2.2

独自のスキーマの作成, 37.1.2.2

基本認証の有効化, 37.1.2.3

SOAコンポジット・アプリケーション, 37.1.2

SOAコンポジット・アプリケーションでの制限, 37.1.2

インバウンド方向およびアウトバウンド方向でのHTTPSのサポート, 37.1.2.2

サポートされているインバウンド方向およびアウトバウンド相互作用, 37.1.2.1

サポートされている操作タイプ, 37.1.2.2

サポートされているXSDタイプ, 37.1.2.1

サポート対象外のHTTPヘッダー, 37.1.2.1

HTTPヘッダー

サポート対象外, 37.1.2.1

ヒューマン・タスク

サービス・コンポーネント, 2.2.1

ヒューマン・タスク・アクティビティ

BPELプロセスとの関連付け, 28.4.1

識別キー, 28.4.4.3

他のタスクのタスク履歴の追加, 28.4.4.6

スコープ名とグローバル・タスク変数名, 28.4.4.1

タスク起案者とタスク優先度の指定, 28.4.3.2

タスクのタイトルの指定, 28.4.3.1

タスク・パラメータの指定, 28.4.3.3

タスク所有者, 28.4.4.2

BPELコールバックの表示, 28.4.5.1

ヒューマン・タスク定義

BPELプロセスとの関連付け, 28.1.2

ヒューマン・タスク・エディタ

条件付き中途完了, 29.5.1.2

セクションへのアクセス, 29.1.1

アクション可能な電子メール, 34.2.7

全参加者による他の参加者の招待を許可, 29.5.1.1

名前または式によるタスク参加者の割当て, 29.4.3.1.1, 29.5.4

タスク参加者のバイパス, 29.4.3.4, 29.4.4.5, 29.4.5.4

キャラクタ・セット・エンコーディングの変更, 29.8.4

エラー割当て先の構成, 29.5.4

ヒューマン・タスクの作成, 28.2

通知ヘッダーのカスタマイズ, 29.8.10

通知メッセージの編集, 29.8.2

「エスカレートまでの時間」ポリシー, 29.7.5

タスクのエスカレート、期限更新または終了, 29.7

エスカレーションおよび有効期限のポリシーの概要, 29.7.1, 29.7.1

エスカレーション・ルール, 29.7.6

「期限切れまでの時間」ポリシー, 29.7.3

FYI割当て先タスク参加者, 29.4.6, 29.4.6

グループ投票詳細, 29.4.4.1

他のタスク参加者の招待, 29.4.3.3, 29.4.4.4, 29.4.5.3

電子メール・メッセージのアクション可能化, 29.8.7

多言語設定, 29.6.2, 34.2.6

「期限切れなし」ポリシー, 29.7.2

通知プリファレンス, 29.8

受信者へのタスク・ステータス変更の通知, 29.8.1

パラレル・タスク参加者, 29.4.4

「期限更新までの時間」ポリシー, 29.7.4

通知のセキュア化, 29.8.5, 34.2.10

グループおよびアプリケーション・ロールへの電子メール通知の送信, 29.8.9

電子メール通知によるタスクの添付ファイルの送信, 29.8.8

シリアル・タスク参加者, 29.4.5, 29.4.5

リマインダの設定, 29.8.3

タスク参加者との添付ファイルおよびコメントの共有, 29.4.4.1

Oracle BPM Worklist URLを通知に表示, 29.8.6

単一の承認者のタスク参加者, 29.4.3

アクセス・ポリシーの指定, 29.9.1

ビジネス・イベント・コールバックの指定, 29.11.1.2

コールバック・クラスの指定, 29.11.1

デジタル署名の指定, 29.9.2

電子メール通知によるタスクの添付ファイル, 34.2.8

タスク・カテゴリ, 29.2.6

タスクの結果, 29.2.4

ユーザー・ディレクトリを使用したタスク所有者の指定, 29.2.7.1

XPath式を使用したタスク所有者の指定, 29.2.7.2

タスク参加者, 29.4

タスク・ペイロード・データ構造, 29.3

タスク優先度, 29.2.5

BPELコールバックのタスク・ルーティングとカスタマイズ, 29.11.2

タスクのタイトル, 29.2.2

タスクの操作に対する時間制限, 29.4.3.2, 29.4.4.3, 29.4.5.2

添付ファイルのWordMLスタイルシート, 29.6.1

ヒューマン・タスク

作成, 28.2

ヒューマン・タスクの設計, 31.1

ヒューマン・ワークフロー

アクセス・ルール, 27.2.1.7.4

アプリケーション・ロール, 27.2.1.1.3

大/小文字の区別, 34.5.6

概念, 27.2

データベース・ビュー, 34.8

定義, 27.1

グループ, 27.2.1.1.3

Oracle WebLogic Serverとの統合, 34.6

参加者の割当て, 27.2.1.1.3

参加者タイプ, 27.2.1.1.2

参加者, 27.2.1.1.1

ルーティング・ポリシー, 29.5

システムMBeanブラウザのプロパティ, K.7.4

タスク割当て, 27.2.1.2

タスク期限, 27.2.1.4

タスクのステークホルダ, 27.2.1.3

ユースケース, 27.3.1

ユーザー, 27.2.1.1.3

I

ICommand

clear, G.2.1

コマンドライン, 61.4

delete, G.2.2

コマンドの詳細な説明, G.2

export, G.2.3

サンプル, G.5

一般的なコマンドおよびオプションの構文, 61.3 import, G.2.4 ログ, G.4 操作, G.1 正規表現, G.6, G.6 リモート実行, 61.5 rename, G.2.5 実行, 61.2 サンプル・エクスポート・ファイル, G.5 コマンドの要約, G.1 構文, 61.3 構文、オブジェクト名, 61.3.3 XMLファイル, G.3 ICommandユーティリティ, 61 ICommand Webサービス, 59.5 冪等性

パートナ・リンク操作レベルでの定義, 8.4

idempotentプロパティ

説明, C.1

識別キー

ヒューマン・タスク・アクティビティでの指定, 28.4.4.3

アイデンティティ・サービス

定義, 27.4.1, 34.1.5

ユーザーのローカル言語とタイムゾーンの決定, 32.12, 32.12

Enterprise JavaBeans、SOAPおよびJavaサポート, 34.1.1

関数

getDefaultRealmName, B.5.13.1

getGroupProperty, B.5.13.2

getManager, B.5.13.3

getReportees, B.5.13.4

getUserProperty, B.5.13.6

getUserRoles, B.5.13.7

getUsersInGroup, B.5.13.9

isUserInRole, B.5.13.10

lookupGroup, B.5.13.11

lookupUser, B.5.13.12

プロバイダ, 34.1.5.1, 34.1.5.1.1 ワークフロー内でのサポート, 34.1.5 サポートされているタスク操作, 34.1.5 JAZNとの使用, 34.1.5, 34.1.5.1 LDAPとの使用, 34.1.5, 34.1.5.1 WSDLファイルの場所, 34.1.1 ifアクティビティ

機能, A.2.16

条件分岐の定義, 11.2.2

BPEL 2.0ではswitchアクティビティに置換, A.2

ignoreMissingFromData属性

assignアクティビティで選択, A.2.3

使用, 6.14.7.1

IMアクティビティ

機能, A.2.17

通知サポート, 17.3.2

implicit-timezone関数

説明, B.1.2.8

インポート

ソース・スキーマおよびターゲット・スキーマからトランスフォーメーション, 40.2.2

索引

データ・オブジェクト, 55.9

索引付けメソッド

XPathの使用, 6.19.1

index-within-string関数

説明, B.1.4.9

インライン変数の初期化

BPEL 2.0, 8.2.1.3

inMemoryOptimizationプロパティ

説明, C.1

insertMissingToData属性

assignアクティビティで選択, A.2.3

使用, 6.14.7.2

インスタンス名

設計時における名前の設定, 43.5.4

インスタンス

同じインスタンスへのメッセージのルーティング, 9.2

設計時におけるコンポジット・インスタンス名の設定, 43.5.4

新しいインスタンスの起動, 8.2.2.6

integer関数

説明, B.2.46

統合

同じコンポジット内のJavaベース・コンポーネントとWSDLベース・コンポーネント, 38.1, 52.2, 52.3.1

相互作用パターン

通知タイマー付き非同期相互作用, 5.5

タイムアウト付き非同期相互作用, 5.4

非同期相互作用, 5.3

BPELプロセスと別のアプリケーションの間で共通のパターン, 5, 24

複数の相互作用, 5.10

BPELプロセスと別のアプリケーションの間の相互作用, 5, 24

1リクエストと必須/オプション・レスポンス, 5.8

1リクエストと複数レスポンス, 5.6

1リクエストと二者択一レスポンス, 5.7

一方向メッセージ, 5.1

部分処理, 5.9

同期相互作用, 5.2

無効な設定のエラー・メッセージ, A.6 invokeアクティビティ

対話IDの追加, 8.2.5

非同期サービスへの追加, 8.2.1.2

機能, A.2.18

定義, 4.2, 7.1

非同期サービス, 8.2.1.2, 8.2.2.5

同期サービス, 7.1, 7.2.2.3

アサーション条件によるフォルトのスロー, 12.14

isUserInRole関数

説明, B.5.13.10

J

JAR

「.JARファイル」を参照

.JARファイル

カスタム・クラスおよびJARファイルの追加, 14.3

adf-desktop-integration.jar, 35.1.4

デプロイメントのためのJARの作成, 43.7.1.3

resourcebundle.jarファイル, 35.1.4

wsclient.jar, 35.1.4

Java

ワークフロー・サービスでのサポート, 34.1.1

Javaアプリケーション

SOAPサービスとしてラップ, 14.2.1

Java Connector Architecture(JCA)

定義, 1.4

Java埋込み

bpelx:exec拡張要素, 14.2.6

例, 14.4

BPEL 1.1のimport構文, 14.2.4

BPEL 2.0のimport構文, 14.2.4

BPELプロセス, 14

BPEL 2.0プロセスのJavaコード・スニペット, 14.2.4

bpelx:execタグを使用したBPELプロセスへのJavaコード・スニペットの埋込み, 14.2.3

小さいコード・セグメントの組込みに関する推奨事項, 14.2.3

thread.sleep()の使用, 14.4.2

SOAPサービスとしてのJavaコードのラップ, 14.2.2

Java Embeddingアクティビティ

機能, A.2.19

BPELプロセスでのJava埋込みの使用, 14.4

Javaインタフェース

SOAコンポジット・アプリケーションとのJavaインタフェース統合の作成, 38.3.2

Enterprise JavaBeansとSOAコンポジット・アプリケーションの統合, 38.1, 38.1.2

同じSOAコンポジット・アプリケーション内でのJavaベース・コンポーネントとWSDLベース・コンポーネントの統合, 52.2

パートナ・リンクの作成時の選択, 4.3

Springサービス・コンポーネントを使用, 52.2

JAXB

ワークフロー・クライアントの構成, 34.6.1.2.1

SOAコンポジット・アプリケーションでのサポート, 52.7

JAZN

ユーザーのローカル言語とタイムゾーンの保存, 32.12

アイデンティティ・サービスとの使用, 34.1.5, 34.1.5.1

jdbc.portパラメータ, 3.5.3 jdbc.sidパラメータ, 3.5.3 jdbc.urlBaseパラメータ, 3.5.3 jdeveloper.homeパラメータ, 3.5.3 JMS

定義, 1.4

JMSアダプタ

定義, 37.1.3.5

センサーのパブリッシュ・タイプ, 18.1

JMSキュー

定義, 18.1

センサーのパブリッシュ・タイプ, 18.1

JMSトピック

定義, 18.1

センサーのパブリッシュ・タイプ, 18.1

結合条件

ターゲット・アクティビティでの使用, 10.2.6

K

keepGlobalVariablesプロパティ

説明, C.1

keepSrcElementName属性

定義, 6.1.2

assignアクティビティで選択, A.2.3

使用, 6.14.7.3

ナレッジ・モジュール

Oracle BAM, 57.2

L

言語

変更

jazn xmlファイルから, 32.12.4

プリファレンス, 32.12 JAZNでの設定, 32.12 LDAPでの設定, 32.12 大規模ドキュメント

処理のベスト・プラクティス, 45.1

Oracle B2Bへの大規模データ・セットのインポート, 45.2.8

コンポジットの多数のメディエータ, 45.2.7

同時処理に関する制限, 45.1.2

大規模なペイロードを処理するための不透明(Opaque)スキーマ, 45.1.2.1

Oracle B2Bでの処理, 45.1.3.7

大規模ドキュメントに対するデフォルトのJTAタイムアウトの設定, 45.1.3.1

監査レベルの設定, 45.1.3.2

処理する場合のユースケース, 45.1.1

複数シーケンスを含むフローの使用, 45.2.4

シーケンスを含まないフローの使用, 45.2.6

単一シーケンスを含むフローの使用, 45.2.5

BPELおよびメディエータでのassignアクティビティの使用, 45.1.3.3

BPELプロセスでの多数のアクティビティの使用(flowNを使用する場合), 45.2.3

BPELプロセスでの多数のアクティビティの使用(flowNを使用しない場合), 45.2.2

繰返し構造に対するXSLTトランスフォーメーションの使用, 45.1.3.6

大規模なペイロードに対するXSLTトランスフォーメーションの使用(BPELおよびメディエータ用), 45.1.3.4, 45.1.3.5

大規模XML文書

複雑な構造での処理, 45.1.1.5

繰返しコンストラクトを使用した処理, 45.1.1.4

last-index-within-string関数

説明, B.1.4.10

レイアウト、データ・オブジェクト, 55.4.2 LDAP

ユーザーのローカル言語とタイムゾーンの保存, 32.12

アイデンティティ・サービスとの使用, 34.1.5, 34.1.5.1

left-trim関数

説明, B.1.4.11

listUsers関数

説明, B.2.47

リテラル文字列

割当て, 6.9

リテラルXML

変数の初期化, 6.4

ローカル変数

トランスフォーメーション, 40.3.12

ローカライズ、ワークリスト, 32.12 「ログ」ウィンドウ

Oracle JDeveloper内での位置, 4.1.1

ロギング

Spring, 52.5

相互参照表の参照, 49.6, 49.6

xref

lookupXRef関数, 49.6.1

参照フィールド, 55.2.3 lookupGroup関数

説明, B.5.13.11

lookup-table関数

説明, B.1.1.1

lookupUser関数

説明, B.2.48, B.5.13.12

lookupValue関数

dvm

lookupValue関数, 47.4.1.1

lookupValue1M関数, 47.4.1.2

lookup-xml関数

説明, B.4.8

lower-case関数

説明, B.1.4.12

M

managed.serverパラメータ, 3.5.7

managed.server.portパラメータ, 3.5.7

管理チェーン

定義, 29.4.3.1

参加者リスト, 29.4.3.1.2

ルールベース, 29.4.3.1

ManualRuleFire Webサービス, 59.4 マップ・パラメータ

トランスフォーメーションでの作成, 40.3.12

マップ変数

トランスフォーメーションでの作成, 40.3.12

マップ済属性, 32.10, 32.10.1

使用, 32.10

値, 34.1.9

マスター・プロセスと詳細プロセス

作成, 16.2

定義, 16.1

receive signalアクティビティ, A.2.24

signalアクティビティ, A.2.32

matches関数

説明, B.1.4.13

maxOccurs属性, 6.19, 6.19.1

トランスフォーメーションの設定, 40.4.3

max-value-among-nodeset関数

説明, B.2.58.7

メディエータの作成

操作またはイベント・サブスクリプションのプロパティの指定, 19.8

メディエータXPath拡張関数, B.3 メモリー

XSLTマッパーのメモリーの問題の解決, 40.3.19

メッセージ集約

BPELプロセス, 9.2

メッセージ・フィルタ, 63.4.4, 64.5.4, 65.5.4 メッセージ・スキーマ

更新, 2.3.3

表示, 2.3.3

メッセージ・ソースの拡張フォーマット, 56.2.3 メッセージ・ソース, 56.1 メッセージ・タイプ

メッセージ・パートでの単純型のサポート, 2.3.2

MessageFilter, 63.4.4, 64.5.4, 65.5.4 MessageFilterFactory, 63.4.4, 64.5.4, 65.5.4 メッセージ

ビジネス・イベントでの使用, 9.2.2

メッセージをルーティングするために作成するインスタンスの数の制御, 9.2.1

競合状態, 9.2.3

受信, 63.4, 64.5, 65.5

拒否, 63.4.4, 64.5.4, 65.5.4

相関セットを使用している場合の、新規または既存のインスタンスへのメッセージのルーティング, 9.2.3

同じインスタンスへのルーティング, 9.2

receiveアクティビティのエントリと中間プロセスのreceiveアクティビティにおける同じ操作の使用, 9.2.2

MessagingClientFactory, 63.2.1 MessagingClient.receive, 63.4.2, 64.5.2, 65.5.2 MessagingClient.registerAccessPoint, 63.4.1, 64.5.1, 65.5.1 MessagingClient.registerMessageFilter, 63.4.4, 64.5.4, 65.5.4 メタデータ

サービス・コンポーネント, 25.4.2

メタデータ・サービス(MDS)

SOA-MDS接続の作成, 43.7.3.4.1

MIME

MIMEアタッチメントを使用するコンポジットの作成, 45.1.1.2.1

MIMEマッピング

Excelワークブック, 35.1.4

MinBPELWaitプロパティ, 15.4.1 最小待機時間

MinBPELWaitプロパティ, 15.4.1

minOccurs属性

トランスフォーメーションの設定, 40.4.3

minutes-from-dateTime関数

説明, B.1.2.9

min-value-among-nodeset関数

説明, B.2.58.8

モード

xref

populateLookupXRefRow関数, 49.5.2

populateXRefRow関数, 49.5.1

populateXRefRow1M関数, 49.5.3

メディエータの変更, 19.9

イベント・サブスクリプションの変更, 19.9.2

操作の変更, 19.9.1

相互参照表の変更

列の追加, 49.4.4

メディエータ・イベント・サブスクリプションの変更, 19.9.2 メディエータ操作の変更, 19.9.1 month-from-dateTime関数

説明, B.1.2.10

MQアダプタ

定義, 37.1.3.6

MTOM

WebサービスへのMTOMアタッチメントの追加, 45.1.1.3

SOAPの使用, 45.1.1.1.2

多言語設定

タスクでの指定, 29.6.2, 34.2.6

マルチパートのWSDL

コンポジットへの追加, 2.3.2

myRole属性

定義, 8.2.2.3

N

名前付きテンプレート

作成, 40.3.4.3

関数, 40.3.4.3

名前と式

定義, 29.4.3.1

参加者リスト, 29.4.3.1.1

ルールベース, 29.4.3.1

ネームスペース接頭辞, B.2.57 ネームスペース

BPEL 1.1接頭辞, 6.1.2, B.2.57

BPEL 2.0接頭辞, 6.1.2, B.2.57

BPEL 2.0での拡張ネームスペースの宣言, 6.23

WSDLネームスペースの一意性の確認, 2.3.2

ネーミング規則

BPELプロジェクト, 4.1.1

nonBlockingInvokeプロパティ

説明, C.1

正規化されたメッセージ・ヘッダー・プロパティ

Oracle BPEL Process Manager, H.2

Oracle Web Services Addressing, H.3

NOT演算子, 55.2.4 通知メッセージ

編集, 29.8.2

通知サービス

アクション可能な電子メール, 34.2.7

通知チャネルの構成, 34.2.5

カスタム通知ヘッダー, 34.2.14

定義, 27.4.1

エラー・メッセージのサポート, 34.2.2

多言語設定, 34.2.6

通知コンテンツ, 34.2.1

信頼性のサポート, 34.2.3

インバウンドおよびアウトバウンド添付ファイルの送信, 34.2.8

インバウンド・コメントの送信, 34.2.9

リマインダの送信, 34.2.12

セキュアな通知の送信, 34.2.10

未処理メッセージに対する自動返信の設定, 34.2.13

参加者通知プリファレンスの指定, 29.8

通知

エンド・ユーザーによる通知チャネル選択の許可, 17.4

Oracle JDeveloperでの構成, 17.3

通知ヘッダーのカスタマイズ, 29.8.10

定義, 27.2.1.5

電子メール・アドレスと電話番号の動的設定, 17.3.5

電子メール添付ファイルのサポート, 17.3.1.1

電子メールのサポート, 17.1, 17.3.1

電子メール・メッセージ本文のHTMLとしての書式設定, 17.3.1.2

IMのサポート, 17.3.2

電子メール・メッセージのアクション可能化, 29.8.7

詳細を除くセキュア化, 29.8.5

ユーザー・ディレクトリの参照による受信者の選択, 17.3.6

グループおよびアプリケーション・ロールへの電子メール通知の送信, 29.8.9

電子メール通知によるタスクの添付ファイルの送信, 29.8.8

設定, 17.2

Oracle BPM Worklist URLの表示, 29.8.6

SMSのサポート, 17.3.3

ボイス・メールのサポート, 17.3.4

通知およびリマインダ

タスク, 34.2

数値

割当て, 6.7

O

onAlarmブランチ

pickアクティビティ, 15.2, A.2.22

scopeアクティビティ, 15.2, A.2.22

1リクエストと必須/オプション・レスポンス

クライアントとしてのBPELプロセス, 5.8.1

サービスとしてのBPELプロセス, 5.8.2

1リクエストと複数レスポンス

クライアントとしてのBPELプロセス, 5.6.1

サービスとしてのBPELプロセス, 5.6.2

1リクエストと二者択一レスポンス

クライアントとしてのBPELプロセス, 5.7.1

サービスとしてのBPELプロセス, 5.7.2

1対多マッピング, 47.1.1.3 onEventブランチ

scopeアクティビティで作成, 15.5.2

メッセージ着信を待機するイベントの指定, 15.5

一方向起動

概要, 13.2

一方向のメッセージ相互作用

クライアントとしてのBPELプロセス, 5.1.1

サービスとしてのBPELプロセス, 5.1.2

oneWayDeliveryPolicyプロパティ

説明, 4.1.1, C.1

設定, 13.2

BPELプロセス作成中の設定, 4.1.1

高可用性環境での設定, C.1

高可用性環境でのasync.cacheへの設定, 4.1.1

one.way.returns.fault

プロパティ, K.3

onMessageブランチ

pickアクティビティ, 15.2, A.2.22

scopeアクティビティ, 15.2, A.2.22

BPEL 2.0での同時onMessageブランチ, 15.2.3

演算子

AND演算子, 55.2.4

最適化

ストリーミング・アタッチメント, 45.1.1.2.1

OR演算子, 55.2.4 Oracle Application Development Framework(ADF)

バインディング・コンポーネント, 1.5.2

Oracle Applicationsアダプタ

定義, 37.1.4

Oracle B2B

アタッチメント, 45.1.1.2.3

バインディング・コンポーネント, 2.3.1, 2.4.1

定義, 1.5.2, 37.1.6

プロパティ, K.5

ストリーミング, 45.1.1.5.2

Oracle BAM, 53.7

定義, 1.5.2, 37.1.5

「Oracle Business Activity Monitoring」を参照

サーバー接続, 54.3

Oracle BAMアダプタ, 53.1 Oracle BAMナレッジ・モジュール, 57.2 Oracle BAMサーバー

BPELセンサーの作成, 53.7.1

BPELセンサー・アクションの作成, 53.7.2

接続の作成, 53.4.1

Oracle BAMサーバー接続, 53.4 Oracle BPELデザイナ

レイアウト, 4.1.1

Oracle BPEL Process Manager

システムMBeanブラウザのプロパティ, K.7.2

Oracle BPM Worklist

アクセシビリティ・オプション, 1.9

「ワークリスト」を参照

Oracle Business Activity Monitoring

Oracle BAMサーバーのBPELセンサー・アクションの作成, 53.7.2

Oracle BAMサーバーのBPELセンサーの作成, 53.7.1

Oracle BAMサーバーへの接続の作成, 53.4.1

定義

Oracle BPEL Process Managerセンサーとの統合, 53.7

メッセージのバッチ処理の制限, 53.7.2

概要, 53.7

Oracle Enterprise Manager Fusion Middleware Control

ページのロード時間の短縮, 45.3.2

プロパティ, K.6

Oracle Enterprise Repository

設計時ガバナンス, A.5

Oracle Healthcare

バインディング・コンポーネント, 2.3.1, 2.4.1

定義, 1.5.2

Oracle Healthcare Adapter

定義, 37.1.7

Oracle Internet Directory

ユーザーのローカル言語とタイムゾーンの保存, 32.12

Oracle JDeveloper

アダプタ, 4.5

通知の構成, 17.3

センサーの作成, 18.2.1

Oracle SOA Suite拡張機能のインストール, 2.1.1, J.2.2

アプリケーション・ナビゲータの位置, 4.1.1

コンポーネント・パレットの位置, 4.1.1

デザイナ・ウィンドウの位置, 4.1.1

「履歴」ウィンドウの位置, 4.1.1

「ログ」ウィンドウの位置, 4.1.1

プロパティ・インスペクタの位置, 4.1.1

「ソース」ウィンドウの位置, 4.1.1

「構造」ウィンドウの位置, 4.1.1

ルール・デザイナ環境の概要, 25.3.1

トランスフォーメーション, 40.2

Oracle JDeveloperプロジェクト

デスクトップ統合、追加, 35.1.3

Oracle Mediator

ルーティング・ルールの定義, 20.3

定義, 19.1

ルーティング・ルール, 20.1

サービス・コンポーネント, 2.2.1

システムMBeanブラウザのプロパティ, K.7.3

2つのOracle Mediatorを接続したときに発生する無限ループ, 2.5.3

Oracle Mediatorエディタ, 19.3

環境

アプリケーション・ナビゲータ, 19.3

「履歴」ウィンドウ, 19.3

「ログ」ウィンドウ, 19.3

Oracle Mediatorエディタ, 19.3

プロパティ・インスペクタ, 19.3

「ソース」ビュー, 19.3

「構造」ウィンドウ, 19.3

レイアウト, 19.3 Oracle Mediatorのエラー処理

アクション, 22.1.1.2

条件, 22.1.1.1

フォルト・バインディング, 22.1.2

フォルト・ポリシー, 22.1.1

概要, 22.1

使用, 22.2

XMLスキーマ・ファイル, 22.4

Oracle Metadata Services (MDS)リポジトリ

定義, 1.6

Oracle Service Bus

直接バインディング・サービスによる起動, 39.3

直接バインディング・サービス経由の起動, 37.1.10

Oracle Service Bus(OSB)

直接バインディング・サービスによる起動, 37.1.10

Oracle Service Registry

レジストリ・コントロールにおけるエンドポイントの場所の変更, A.4.4.1

レジストリからサービスを起動するためのSOAプロジェクトの構成, A.4.3

ランタイムの照会URL、UDDIサービス・キーおよびエンドポイント・アドレスの構成, A.4.4

接続の作成, A.4.2

SOAPエンドポイントの場所の動的解決, A.4.3.1

WSDLエンドポイントの場所の動的解決, A.4.3.2

ビジネス・サービスの公開, A.4.1

公開および参照, A.4

複数のSOAパーティションからのWSDLの発行, A.4.4.2

複数のパーティションでUDDIにWSDLを発行, A.4.5

システムMBeanブラウザのプロパティ, K.7.5

Oracle SOA Composer

アクセシビリティ・オプション, 1.9

Oracle SOA Suite

定義, 1.3

Oracle User Messaging Service(UMS)

構成, 62

定義, 17.1

Oracle User Messaging Serviceアダプタ

定義, 37.1.3.9

oracle.composite.faultBindingFile

プロパティ, 12.4, K.3

oracle.composite.faultPolicyFile

プロパティ, 12.4, K.3

oracle.homeパラメータ, 3.5.7 oracle.webservices.local.optimization

プロパティ, K.3

ストリーミング・アタッチメント, 45.1.1.2.1

OrderAppovalHumanTaskプロジェクト, 3.3.1 OrderBookingCompositeコンポジット

ビジネス・ルール、使用, 3.4

OrderBookingCompositeプロジェクト, 3.3.1

記載されているフロー, 3.4

OrderProcessor BPELプロセス, 3.4 OrderSDOCompositeプロジェクト, 3.3.1 データ・オブジェクトの分類, 55.5 org.quartz.scheduler.idleWaitTime

プロパティ, K.4

概要, 18.1 OXM

SOAコンポジット・アプリケーションでのサポート, 52.7

P

パッケージ化

デプロイメントのためのアーティファクト・ファイル, 43.3

ページ

Oracle Enterprise Manager Fusion Middleware Controlでのページのロード時間の短縮, 45.3.2

パラレル

定義, 29.4.4

ワークフローの参加者タイプ, 29.4.4

パラレル・ブロック

定義, 29.4.1

パラレル・ブランチ

数のカスタマイズ, 10.3

パラレル・フロー

定義, 10

パラレル参加者タイプ

サブタスク・ペイロードの格納場所の指定, 29.5.4

parseEscapedXML関数

説明, 6.20, B.2.49

部分処理

クライアントとしてのBPELプロセス, 5.9.1

サービスとしてのBPELプロセス, 5.9.2

定義, 5.9

参加者の割当て

定義, 27.2.1.1.3

参加者リスト

ルールセット, 29.4.3.1.3

値ベースの管理チェーン, 29.4.3.1.2

値ベースの名前と式, 29.4.3.1.1

参加者タイプ

FYI割当て先, 27.2.1.1.2, 27.2.1.1.2, 29.4.6

パラレル, 27.2.1.1.2, 29.4.4

シリアル, 27.2.1.1.2, 29.4.5

単一の承認者, 27.2.1.1.2, 29.4.3

パーティション

antスクリプト, 43.7.6.17

作成, 43.7.1.3

デフォルトのパーティション, 43.7.1.3

デプロイメント, 43.7.1.3, 43.7.1.3

Fusion Order Demo, 3.5.7

ヒューマン・ワークフローを使用する同一コンポジットを複数のパーティションへデプロイする場合の問題, 43.7.1.3, 43.7.6.4

デプロイメント時のパーティションの選択, 43.7.1.3

partner linkアクティビティ

機能, A.2.20

パートナ・リンク

非同期サービスへの追加, 8.2.1.1

作成, 4.4

冪等性の定義, 8.4

定義, 4.3

インバウンド・アダプタ用, 4.4.1.2

アウトバウンド・アダプタ用, 4.4.1.1

抽象的なWSDLからサービスをコール, 4.4.1.3

抽象的なWSDLからサービスを実装, 4.4.1.4

既存のヒューマン・タスク、ビジネス・ルールまたはOracle Mediatorから, 4.4.1.6

非同期サービス, 8.2.1.1, 8.2.2.2, 8.2.2.3

同期サービス, 7.1

Oracle BAM, 53.6.1

概要, 4.3

WSDLファイルの指定, 4.3

実行時の動的パートナ・リンクの使用, 8.5

ヒューマン・タスクまたはビジネス・ルールと, 4.4.1.5

partnerLinkType

定義, 8.2.2.2

partnerRole属性

定義, 8.2.2.3

PartnerSupplierCompositeプロジェクト, 3.3.1 passThroughHeader

プロパティ, K.3

権限

コピー, 55.3.3

データ・オブジェクト, 55.3

フォルダに対する設定, 55.5.3

phaseアクティビティ

BPELスコープの作成, 51.2.2

ビジネス・ルール・サービス・コンポーネントの作成, 51.2.2

機能, A.2.21

Mediatorサービス・コンポーネントの作成, 51.2.2

2レイヤーのビジネス・プロセス管理の使用, 51.2

pickアクティビティ

onMessageブランチへの相関の追加, A.2.22

機能, A.2.22

コード例, 15.2.2

条件分岐, 15.2

作成, 15.2.1

receiveアクティビティとの差異, 15.2

タイムアウト用, 15.1

onAlarmブランチ, 15.2, A.2.22

onMessageブランチ, 15.2, A.2.22

BPEL 2.0での同時onMessageブランチ, 15.2.3

アサーション条件によるフォルトのスロー, 12.14

ポリシー

セキュリティ・ポリシーの追加, 2.6

添付, 42.2

定義, 42.1

クライアント・プロパティ値のオーバーライド, 42.2.2.1

構成プロパティ値のオーバーライド, 42.2.2

サーバー・プロパティ値のオーバーライド, 42.2.2.2

サポートされるカテゴリ, 42.1

相互参照表の移入, 49.5

xref

populateXRefRow1M関数, 49.5.3

ポートレット

「タスク・リスト・ポートレット」を参照

ポート

同期サービス, 7.1

portType

定義, 8.2.2.1

position関数

説明, 6.19.1

プロセス定義

BPEL 2.0で,のインポート, 6.18

プロセスの開始

BPELテスト・スイート, 44.2.1

プロセス

ネーミング規則, 4.1.1

processXQuery関数

説明, B.2.51

processXSLT関数

説明, B.2.52

例, 17.3.1.2

processXSLTAttachment関数

非推奨, B.2

processXSQL関数

非推奨, B.2

プロジェクト

ネーミング規則, 4.1.1

ViewController, 35.1.3

プロパティ

アダプタ拒否メッセージ, K.4

completionPersistPolicy, C.1, K.1

composite.xmlファイルのプロパティ, K.3

相互参照, K.6.5

デプロイメント・ディスクリプタの概要, K.1

disableAsserts, C.1, K.1

endpointURI, K.3

フォルト・ポリシー, K.4

globalTxMaxRetry, C.1, K.1

globalTxRetryInterval, C.1, K.1

ヒューマン・ワークフロー通知, K.6.3

ヒューマン・ワークフローのシステムMBeanブラウザ, K.7.4

ヒューマン・ワークフロー・タスク・サービス, K.6.3

idempotent, C.1, K.1

inMemoryOptimization, C.1, K.1

JCAアダプタの正規化されたメッセージ・ヘッダー・プロパティの概要, K.2.1

keepGlobalVariables, C.1, K.1

nonBlockingInvoke, C.1, K.1

正規化されたメッセージ・ヘッダー・プロパティの概要, K.2

正規化されたメッセージのプロパティ, H

oneWayDeliveryPolicy, 4.1.1, 13.2, C.1, K.1

one.way.returns.fault, K.3

Oracle B2B, K.5, K.6.6

Oracle B2Bの正規化されたメッセージ・ヘッダー・プロパティの概要, K.2.3

Oracle BPEL Process Manager, K.6.2

Oracle BPEL Process Managerの正規化されたメッセージ・ヘッダー・プロパティの概要, K.2.2

Oracle BPEL Process ManagerのシステムMBeanブラウザ, K.7.2

Oracle Enterprise Manager Fusion Middleware Control, K.6

Oracle Mediator, K.6.4

Oracle MediatorのシステムMBeanブラウザ, K.7.3

Oracle Service Registry, K.7.5

Oracle Web Services Addressingの正規化されたメッセージ・ヘッダー・プロパティの概要, K.2.2

oracle.composite.faultBindingFile, 12.4, K.3

oracle.composite.faultPolicyFile, 12.4, K.3

oracle.webservices, K.3

org.quartz.scheduler.idleWaitTime, K.4

passThroughHeader, K.3

reenableAggregationOnComplete, 9.2.1, C.1, K.1

retryCount, K.4

retryInterval, K.4

rolesAllowed, K.3

sensorActionLocation, C.1, K.1

sensorLocation, C.1, K.1

サービス・バインディング・コンポーネントと参照バインディング・コンポーネント, K.6.7

SOAインフラストラクチャ, K.6.1

SOAインフラストラクチャのシステムMBeanブラウザ, K.7.1

streamIncomingAttachments, K.3

streamOutgoingAttachments, K.3

システムMBeanブラウザ, K.7

トランザクション, 4.1.1

トランザクション, 13.1.1, 13.1.1.1, 13.1.1.2, C.1, K.1

uddiCacheLifetime, K.7.5

validateXML, C.1, K.1

「プロパティ」タブ

アクティビティ, A.2.1.6

プロパティ・エイリアス

相関セットの作成, 9.1.1.6

プロパティ・インスペクタ

デプロイメント・ディスクリプタのプロパティの定義, C.1.1

編集, 9.2.1

Oracle JDeveloper内での位置, 4.1.1

パブリック・ビュー

センサー, D.1, D.2

パブリッシュ・タイプ

選択, 18.2.3

パブリッシュ・タイプ

カスタム・パブリッシャの作成, 18.2.5

カスタム, 18.1

データベース, 18.1

定義, 18.1

JMSアダプタ, 18.1

JMSキュー, 18.1

JMSトピック, 18.1

パージ・スクリプト

インスタンスおよび拒否メッセージの削除, 45.3.1

Q

Qname

フォルト名, 12.3

修飾子, 47.1.1.1

修飾子の順序, 47.1.1.2

修飾子の順序, 47.1.1.2 query-database関数

説明, B.1.1.2

R

競合状態

メッセージ集約, 9.2.3

readBinaryFromFile関数

説明, B.2.53, B.3.12

readFile関数

説明, B.2.54

承認が必要なWebサーバー・アクセス・ファイルに関する制限, B.2.54

絶対ディレクトリ・パスからのファイルの読取り, B.2.54

receiveアクティビティ

非同期サービスへの追加, 8.2.1.3

相関セットとの関連付け, 9.1.1.5

機能, A.2.23

インスタンスの作成, 8.2.2.5

新規インスタンスの作成, 8.2.2.6

pickアクティビティとの差異, 15.2

非同期サービス, 8.2.1.3, 8.2.2.5

リクエスト/レスポンス操作に対するタイムアウトの設定, 15.3

アサーション条件によるフォルトのスロー, 12.14

receive signalアクティビティ

機能, A.2.24

マスター・プロセスと詳細プロセス, 16.2.1

メッセージの受信, 63.4, 64.5, 65.5 reenableAggregationOnCompleteプロパティ

説明, 9.2.1, C.1

参照

追加, 2.4.1, 2.4.2

定義, 1.5.2, 1.6, 2.3.2

削除, 2.4.2

ワイヤリング, 2.5.2

正規表現

ICommand, G.6

メッセージの拒否, 63.4.4, 64.5.4, 65.5.4 リマインダ

タスク通知, 34.2.12

remoteFault

定義, 12.3.2.2

remove entityアクティビティ

機能, A.2.25

データ・オブジェクトの名前の変更, 55.8 フォルダの名前の変更, 55.5.5 期限更新

タスク, 29.7

繰返しコンストラクト

大規模XMLの処理, 45.1.1.4

繰返し要素

トランスフォーメーション, 40.3.6.3

repeatUntilアクティビティ

機能, A.2.26

条件分岐の定義, 11.4

replayアクティビティ

機能, A.2.27

作成, 12.11.1

scopeアクティビティ内でのアクティビティの再実行, 12.11

replayFault

定義, 12.3.2.3

replyアクティビティ

機能, A.2.28

レポート・スキーマ

センサーのデータベース・パブリッシュ・タイプ, D.2.1

レポート

トランスフォーメーションの生成時のメモリー・エラーの修正, 40.4.2.1

トランスフォーメーションのサンプルXML生成のカスタマイズ, 40.4.3

トランスフォーメーションの生成, 40.4.2

ワークリスト, 32.11.1

再順序付け

ベスト・エフォート再シーケンサ, 23.2.3

構成, 23.3

方法の構成, 23.3.2

定義, 23.1

レベルの決定, 23.3.1

FIFO再シーケンサ, 23.2.2

グループおよび順序ID, 23.1.1

グループと順序IDの識別, 23.1.2

順序のタイプ, 23.2

標準再シーケンサ, 23.2.1

リソース・バンドル, 34.5

クラスのロード, 34.4

様々な言語でのタスクの表示, 29.6.2, 34.2.6

ステージ名と参加者名の指定, 34.5.5

リソース・パレット

概要, 2.1.2

使用, 2.3.2

resourcebundle.jarファイル, 35.1.4 rethrowアクティビティ

機能, A.2.29

フォルトの再スロー, 12.8

BPEL 2.0プロジェクトでサポート, A.2.29

retryCount

プロパティ, K.4

retryInterval

プロパティ, K.4

リビジョン

アクティブ化, 2.8.1

デフォルト・リビジョンの起動, 2.4.5

リタイア, 2.8.1

デフォルト・リビジョンの設定, 2.8.1, 2.8.1

停止, 2.8.1

開始, 2.8.1

アンデプロイ, 2.8.1

right-trim関数

説明, B.1.4.14

ロール

非同期サービスのパートナ・リンク, 8.2.2.2

rolesAllowed

プロパティ, K.3

ルーティング・ポリシー

使用可能なタイプ, 29.5

ビジネス・ルール, 29.5

早期完了するサブタスクの親サブタスクの完了, 29.5.1.4

パラレル・サブタスクでの早期完了の有効化, 29.5.1.3

外部ルーティング, 29.5, 29.5.3

指定した順序での全参加者へのタスクのルーティング, 29.5

選択, 29.5

ルーティング・ルール, 20.1

定義, 20.3

定義中, 20.3

フィルタ式, 20.3.2.8

概要, 20.1

ルーティング・スリップ

定義, 29.4.3.2

RPC形式

ドキュメント・リテラル形式のWSDLファイルとの違い, 6, 6.21

ルールセット

管理チェーン, 29.4.3.1

名前と式, 29.4.3.1

参加者リスト, 29.4.3.1.3

ランタイム構成サービス

定義, 27.4.1

Enterprise JavaBeans、SOAPおよびJavaサポート, 34.1.1

サポートされているタスク操作, 34.1.9

WSDLファイルの場所, 34.1.1

実行時の例外, 12.3 実行時フォルト

定義, 12.3, 12.3.2

例, 12.5.1

RuntimeFault.wsdlファイル

プロセスへのインポート, 12.5.1

S

サンプル

ビジネス・イベント, 41

ビジネス・ルール, 25.7

ドメイン値マップ, 47.6

Dynamic Assignment Function, 34.3.1.3

電子メール通知, 30.7.1

Hello World, 7

ヒューマン・ワークフロー, 29.5.2.4, 29.11.1.2, 31.13

属性ラベルの国際化, 34.1.9.1

反復設計, 29.5.2.4

通知, 17.3.1.1

Oracle SOA Suite, 1.8

トランスフォーメーション, 40.3.4.4

2レイヤーのビジネス・プロセス管理, 51.4

ワークフロー・イベント・コールバック, 29.11.1.2

SARファイル

定義, 1.6.3, 43.3

デプロイ, 43.7.1.2

SCA 「サービス・コンポーネント・アーキテクチャ」を参照 sca-build.propertiesファイル, 3.5.7 スキーマ・ファイル

インポートされたスキーマからのトランスフォーメーション・マップ・ファイルの作成, 40.2.2

XSLTマッパーでの置換, 40.3.17

スキーマ

メッセージ・スキーマの更新, 2.3.3

メッセージ・スキーマの表示, 2.3.3

scopeアクティビティ

説明ノートおよびイメージの追加, 12.10.2

機能, A.2.30

作成, 12.10.3

onEventブランチの作成, 15.5.1

フォルト処理, 12.10

replayアクティビティによる再実行, 12.11

scopeアクティビティでのフォルト・ハンドラの使用, 12.10.5

スコープ名

ヒューマン・タスク・アクティビティでの指定, 28.4.4.1

SDO

「サービス・データ・オブジェクト(SDO)」を参照

search関数

説明, B.2.55

seconds-from-dateTime関数

説明, B.1.2.11

セキュリティ・フィルタ

コピー, 55.6.2

データ・オブジェクト, 55.6

セキュリティ・モデル

ワークフロー・サービス, 34.1.2

SOAP Webサービス, 34.1.2.1

ユーザーにかわるワークフロー・コンテキスト, 34.1.2.2

セキュリティ・ポリシー

「ポリシー」を参照

seed.bam.doパラメータ, 3.5.7 seedBAMServerObjects antスクリプト, 3.5.7, 3.5.7 seedDemoUsers antスクリプト, 3.5.7 seedFodJmsResources antスクリプト, 3.5.7 センサー・アクション

構成, 18.2.3

Oracle BAMサーバー監視用のBPELセンサー・アクションの作成, 53.7.2

メタデータの表示, 18.3

XSDスキーマ・ファイル, D.3

センサー・データ

レポート・スキーマに保持, D.2.1

sensorActionLocationプロパティ

説明, C.1

sensorLocationプロパティ

説明, C.1

センサー, 18.1, 53.7

アクティビティ・センサー, 18.1

BPELレポート・スキーマ, D.2.1

構成, 18.2.2

Oracle BAMサーバー監視用のBPELセンサーの作成, 53.7.1

Oracle BAMサーバーへの接続の作成, 53.4.1

カスタム・パブリッシュ・タイプの作成, 18.2.5

Oracle JDeveloperでの作成, 18.2.1

定義, 18.1

評価時間, 18.2.2

フォルト・センサー, 18.1

フィルタ, 18.2.3

Oracle Business Activity Monitoringとの統合, 53.7

JMSキュー, 18.1

パブリック・ビュー, D.1, D.2

パブリッシュ・タイプ, 18.1

センサー・アクションXSDスキーマ・ファイル, D.3

変数センサー, 18.1

メタデータの表示, 18.3

sequenceアクティビティ

機能, A.2.31

sequence-next-val関数

説明, B.1.1.3

順次ブロック

定義, 29.4.1

承認者の順序リスト

構成, 29.4.5

シリアル

定義, 29.4.5

ワークフローの参加者タイプ, 29.4.5

サーバー接続、Oracle BAM, 54.3 server.passwordパラメータ, 3.5.7 server-setup-seed-deploy-test antスクリプト, 3.5.7 server.targetsパラメータ, 3.5.7 server.userパラメータ, 3.5.7 サービス・コンポーネント・アーキテクチャ

定義, 1.4

説明, 1.5

サービス・コンポーネント

追加, 2.2, 2.2.1, 2.2.2

使用可能なタイプ, 1.5.1

BPELプロセス, 1.5.1, 2.2.1, 4.1

ビジネス・ルール, 1.5.1, 2.2.1, 25.4.2

定義, 1.5.1

削除, 2.2.2

編集, 2.2.3

ヒューマン・タスク, 1.5.1, 2.2.1, 28, 29

概要, 2.2.1, 2.3.1, 2.4.1

メディエータ, 1.5.1

メタデータ, 25.4.2

Oracle Mediator, 2.2.1, 19.1

spring, 1.5.1, 2.2.1

タイプ, 2.2.1

Webサービス, 25.4.2

ワイヤリング, 2.5.1, 2.5.2

サービス・データ・オブジェクト(SDO), 6.2

SOAコンポジット・アプリケーションとのEnterprise JavaBeans統合の作成, 38.3.1

定義, 1.4

XMLからSDOへの変換, 6.3.2

SDOベースの変数の宣言, 6.3.1

bpelx:execによる埋込み, 14.5 エンティティ変数のサポート, 6.2.1 Enterprise JavaBeansとSOAコンポジット・アプリケーションの間のパラメータの受け渡し, 38.1, 38.1.1 Enterprise JavaBeans Javaインタフェースでの使用

Enterprise JavaBeansアプリケーションでの使用, 38.2

スタンドアロンSDOベースの変数の使用, 6.3 サービス・エンジン

定義, 1.6

説明, 1.6.2

ヒューマン・ワークフロー, 27.4.3

サービス・インフラストラクチャ

定義, 1.6

サービス名

アダプタ, 4.5

サービス指向アーキテクチャ(SOA)

定義, 1.1

サービス

追加, 2.3.1, 2.3.5

ADF-BC, 1.5.2, 37.1.8, A.3

AQアダプタ, A.3

SOAPサービスとして自動的に公開, 2.3.1

データベース・アダプタ, A.3

定義, 1.2, 1.5.2, 1.6, 2.3.2

削除, 2.3.5

直接バインディング・サービス, 37.1.10, 39, A.3

編集, 2.3.4

Enterprise JavaBeans (EJB)サービス, 37.1.9, A.3

ファイル・アダプタ, A.3

FTPアダプタ, A.3

HTTPバインディング, 37.1.2, A.3

JMSアダプタ, A.3

MQアダプタ, A.3

Oracle Applicationsアダプタ, A.3

Oracle B2B, A.3

Oracle Business Activity Monitoring, A.3

概要, A.3

WSDLの選択, 2.3.2

ソケット・アダプタ, A.3

サード・パーティ・アダプタ, A.3

Webサービス, A.3

ワイヤリング, 2.5.1

サーブレット

adfdiRemote, 35.1.4

setDomainEnv.cmdファイル, 3.2.3 setDomainEnv.shファイル, 3.2.3 フォルダ権限の設定, 55.5.3 設定, 34.2.7 signalアクティビティ

BPEL 2.0構文はextensionActivity要素で囲む, 16.1.1

機能, A.2.32

マスター・プロセスと詳細プロセス, 16.2.1

単純型

メッセージ・パートとしてサポート, 2.3.2

単一の承認者

構成, 29.4.3

定義, 29.4.3

ワークフローの参加者タイプ, 29.4.3

「スキップ条件」タブ

アクティビティの実行のバイパス, 11.5.1

アクティビティ, A.2.1.7

SMSアクティビティ

機能, A.2.33

通知サポート, 17.3.3

SOAコンポーザ

アクセス, 48.1.1

実行時の変更内容のコミット, 48.5

定義, 48.1

同時ユーザー間での競合の検出, 48.6

実行時のドメイン値マップの編集, 48.3

実行時のドメイン値マップの保存, 48.4

メタデータのアクセスに必要なSOADesignerロール, 48.1.1

実行時のドメイン値マップの表示, 48.2

SOAコンポジット・アプリケーション

アクティブ化, 2.8.1

作成, 2.1

カスタマイズ, 46.1

単一のコンポジットのデプロイ, 43.7.1

既存のアーカイブのデプロイ, 43.7.4

複数のコンポジットのデプロイ, 43.7.2

コンポジット間の共有メタデータのデプロイ, 43.7.3

デプロイメント, 2.8.1

Enterprise JavaBeansとの相互作用, 38.1, 38.1

他のコンポジットの起動, 2.7.1

デフォルト・リビジョンの起動, 2.4.5

アプリケーション名に関する制限, 2.1.1

リタイア, 2.8.1

デフォルト・リビジョンとして設定, 2.8.1

停止, 2.8.1

開始, 2.8.1

テスト, 2.8

アンデプロイ, 2.8.1

SOAコンポジット・エディタ

レイアウト, 2.1.2

SOAガバナンス

Oracle Enterprise Repository, A.5

SOAインフラストラクチャ

プロパティ, K.6.1

システムMBeanブラウザのプロパティ, K.7.1

SOA XPath拡張関数, B.1 SOA-MDS接続

composite.xmlファイルを開く, 43.5.7.1

soa.only.deploymentパラメータ, 3.5.7 SOAP

定義, 1.4

SOAPアタッチメントのコンテンツの読取りおよびエンコード, 45.1.1.2.1

SOAP Webサービスのセキュリティ, 34.1.2.1

ワークフロー・サービスでのサポート, 34.1.1

アタッチメント付き, 45.1.1.2.1

SOAPヘッダー, 6.22

BPELでの受信, 6.22.1

BPELでの送信, 6.22.2

SOAPサービス

パフォーマンスの問題, 14.2.1

Javaコードの使用, 14.2.1

SOAPでエンコードされた配列, 6.19.2

BPEL 2.0, 6.19.2.1

wsdlの使用

スキーマ内のarrayType属性, 6.19.2.2

soa.server.oracle.homeパラメータ, 3.5.7 ソケット・アダプタ

定義, 37.1.3.7

「ソース」ウィンドウ

Oracle JDeveloper内での位置, 4.1.1

ソース

メッセージ, 56.1

「ソース」タブ

BPEL 2.0プロジェクトでのみ使用可能, 10.2.4, A.2.1.8

アクティビティ, A.2.1.8

操作またはイベント・サブスクリプションのプロパティの指定, 19.8 Spring

クラスパスで見つからないが、ソース・ファイルが存在するインタフェース・クラスの自動検出, 52.3.1

Aspectjクラスの構成, 52.8

Groovyクラスの構成, 52.8

componentTypeファイルの内容, 52.3.1

Springコンテキスト・ファイルの内容, 52.3.1

Oracle JDeveloperでのSpringサービス・コンポーネントの作成, 52.3

EXMファイル, 52.7.1

Fusion Order Demo, 3.3.1, 52.6

統合

同じコンポジット内のJavaベース・コンポーネントとWSDLベース・コンポーネント, 52.2

概要, 52.1 起動エラー, 52.9 JavaからWSDLへの変換中のJavaクラス・エラー, 52.3.2 JAXBおよびOXMのサポート, 52.7 ロギング, 52.5 MIME添付ファイル処理はサポートされていない, 45.1.1.2.1 サービス・コンポーネント, 2.2.1 コールバックの使用, 52.2.2 square-root関数

説明, B.2.58.9

SSL

アプリケーション・サーバー接続の作成時に構成, 43.7.1.1

ステージ

定義, 29.4

標準フォルト

BPEL 1.1, 12.2.1

BPEL 2.0, 12.2.2

定義, 12.2

ストアフロント・モジュール

デプロイ, 3.5.6

fod.application.issoaenabledプロパティ, 3.5.4

注文, 3.6

StoreFrontServiceプロジェクト, 3.1.1

StoreFrontServiceプロジェクト, 3.1.1 StoreFrontUIプロジェクト, 3.1.1, 3.1.1 streamIncomingAttachments

プロパティ, K.3

streamIncomingAttachmentsプロパティ, 45.1.1.2.1 ストリーミング

アタッチメント, 45.1.1.2.1

Oracle B2B, 45.1.1.5.2

アタッチメントをストリーミングするためのプロパティ, 45.1.1.2.1

アタッチメント・ストリームの送信, 45.1.1.2.1

ファイルおよびFTPアダプタによる, 45.1.1.5.1

streamOutgoingAttachments

プロパティ, K.3

streamOutgoingAttachmentsプロパティ, 45.1.1.2.1 計算で使用する文字列関数, 55.2.4 文字列

連結, 6.10

XML要素への変換, 6.20

「構造」ウィンドウ

Oracle JDeveloper内での位置, 4.1.1

subtract-dayTimeDuration-from-dateTime関数

説明, B.1.2.12

switchアクティビティ

機能, A.2.34

条件分岐ロジック, 11.2.1

BPEL 2.0ではifアクティビティに置換, 7.2.1, A.2

同期

アクティビティ実行, 10.2.3

同期BPELプロセス

システム・フォルトの処理と伝播, 12.3.3

非同期プロセスの起動, 5.2.3

同期コールバック, 7

操作の概念, 7.2

SyncMaxWaitTimeプロパティ, 7.3

同期相互作用

クライアントとしてのBPELプロセス, 5.2.1

サービスとしてのBPELプロセス, 5.2.2

定義, 5.2

フォルトを返す, 12.9

同期プロセス

一方向メディエータのコール, 7.4

タイムアウトの設定, 15.6

同期受信, 63.4.2, 64.5.2, 65.5.2 同期リクエスト

タイムアウトのない, 7.3.2

同期サービス

パートナ・リンクとinvokeアクティビティを使用したコールバック, 7.1

コール, 7.2

invokeアクティビティ, 7.2.2.3

ポート, 7.1

SyncMaxWaitTimeプロパティ

同期コールバック, 7.3

タイムアウトのない同期リクエスト, 7.3.2

システム・フォルト

同期BPELプロセスでの処理と伝播, 12.3.3

システムMBeanブラウザ

プロパティ, K.7

T

「ターゲット」タブ

BPEL 2.0プロジェクトでのみ使用可能, 10.2.4, A.2.1.8

アクティビティ, A.2.1.8

タスク・アクションの時間制限

指定, 29.4.3.2, 29.4.4.3, 29.4.5.2

タスク管理者

定義, 27.2.1.3

タスク割当て

動的, 27.2.1.2

制限, 29.10

ルールベース, 27.2.1.2

静的, 27.2.1.2

タスク・カテゴリ

指定, 29.2.6

タスク条件

条件付き中途完了, 29.5.1.2

タスク期限

定義, 27.2.1.4

タスク表示フォーム

自動生成, 30.4.1

作成, 30.4, 30.4.5, 30.4.6

カスタム・タスク・フォーム・ウィザードを使用したタスク・フォームの作成, 30.4.3

定義, 28.1.3, 30.1

デプロイ, 30.8, 30.8.1

表示, 30.9

ファセットのコンテンツの生成, 30.4.3

カスタム・ページ・テンプレートにライブラリJARファイルを登録, 30.4.2

.taskファイル

BPELプロセスとの関連付け, 28.1.2, 28.4.1

定義, 28.1.1, 28.2.3

タスク・フロー

ADF

ヒューマン・タスク用のタスク表示フォーム, 30.3

デプロイ, 43.7.1.3 タスク履歴

ヒューマン・タスク・アクティビティでの指定, 28.4.4.6

タスク起案者

定義, 27.2.1.3

指定, 28.4.3.2

タスク・インスタンス属性, 34.1.11 タスク・リスト・ポートレット

割当てフィルタの定数, 36.4.1

EJBアイデンティティ伝播の構成, 36.2.3.2

アイデンティティ・ストアの構成, 36.2.3.3

リモートSOAサーバーへのタスク・リスト・プロデューサの接続, 36.2.3

タスク・リスト・ポートレットを埋め込むポートレット・コンシューマ・アプリケーションの作成, 36.3

外部JNDIプロバイダの定義, 36.2.3.1

ポートレット・サーバーへのタスク・リスト・プロデューサ・アプリケーションのデプロイ, 36.2

デプロイメントの前提条件, 36.2.1

すべての列制約を含むファイルの例, 36.4.2

概要, 36.1

ワークリスト・ポートレット・パラメータの受け渡し, 36.4

タスク・リスト・ポートレット・プロデューサ・アプリケーションの保護, 36.2.4

コンシューマとプロデューサに添付されたセキュリティ・ポリシーの一致の必要性, 36.2.5

インバウンド・セキュリティ・ポリシーの指定, 36.2.5

タスク・メタデータ・サービス

定義, 27.4.1

Enterprise JavaBeans、SOAPおよびJavaサポート, 34.1.1

サポートされているタスク操作, 34.1.6

WSDLファイルの場所, 34.1.1

タスク通知

通知メッセージの編集, 29.8.2

電子メールのアクション可能化, 34.2.7

受信者へのタスク・ステータス変更の通知, 29.8.1

概要, 29.8

リマインダ, 34.2.12

通知のセキュア化, 34.2.10

リマインダの設定, 29.8.3

電子メール通知によるタスクの添付ファイル, 34.2.8

タスクの結果

指定, 29.2.4

タスクの結果

カスタム名の指定に関する制限, 29.2.4

タスク所有者

定義, 27.2.1.3

ユーザー・ディレクトリの参照による指定, 29.2.7.1

ヒューマン・タスク・アクティビティでの指定, 28.4.4.2

XPath式による指定, 29.2.7.2

タスク・パラメータ

指定, 28.4.3.3

タスク参加者

全参加者による他の参加者の招待を許可, 29.5.1.1

名前または式によるタスク参加者の割当て, 29.4.3.1.1, 29.5.4

バイパス, 29.4.3.4, 29.4.4.5, 29.4.5.4

割当てサービスによる動的割当て, 34.3.2

他のタスク参加者の招待, 29.4.3.3, 29.4.4.4, 29.4.5.3

添付ファイルとコメントの共有, 29.4.4.1

指定, 29.4

タスク・ペイロード・データ構造

指定, 29.3

タスク優先度

指定, 28.4.3.2, 29.2.5

タスク問合せサービス

定義, 27.4.1

Enterprise JavaBeans、SOAPおよびJavaサポート, 34.1.1

サポートされているタスク操作, 34.1.4

WSDLファイルの場所, 34.1.1

タスクのリマインダ

設定, 29.8.3

タスク・レポート・サービス

Enterprise JavaBeans、SOAPおよびJavaサポート, 34.1.1

サポートされているタスク操作, 34.1.8

WSDLファイルの場所, 34.1.1

タスク・レビューア

定義, 27.2.1.3

タスク・ルーティング・サービス

定義, 27.4.1

タスク・サービス

定義, 27.4.1

Enterprise JavaBeans、SOAPおよびJavaサポート, 34.1.1

サポートされているタスク操作, 34.1.3

WSDLファイルの場所, 34.1.1

タスクのステージ

定義, 27.2.1.7.3

タスクのタイトル

指定, 28.4.3.1

タスク

タスクのエスカレート、期限更新または終了, 29.7

通知およびリマインダ, 34.2

TCPトンネリング

非同期サービス用のTCPリスナーの設定, 8.8.1.1.2

同期サービス用のTCPリスナーの設定, 8.8.1.1.1

terminateアクティビティ

機能, A.2.35

定義, 12.13.1

フォルト処理, 12.13.1

BPEL 2.0ではexitアクティビティに置換, A.2

テスト・スイート

コンポーネント, 44.2

作成, 44.3

定義, 44.1.2

マルチバイト文字名の制限, 44.3

サード・パーティ・アダプタ

定義, 37.1.3.8

thread.sleep()

Java Embeddingアクティビティでの使用, 14.4.2

throwアクティビティ

機能, A.2.36

内部フォルトのスロー, 12.7

時間

関数を使用した割当て, 6.12

時間ディメンション, 55.7.2 期間のフォーマット, 15.2 タイムスタンプ・フィールド, 55.2.5 タイムゾーン、変更, 32.12.6 「タイムアウト」タブ

アクティビティ, 15.3, A.2.1.9

receiveアクティビティのリクエスト/レスポンス操作に対する設定, 15.3

タイムアウト

タイムアウト時に監査証跡に追加されるイベント, 15.3.1.5

JTAトランザクション・タイムアウト値の増加, 45.1.3.1

BPELプロセス, 15.1

サーバー再起動時にリカバリ可能なタイムアウト・アクティビティ, 15.3.1.6

receiveアクティビティのリクエスト/レスポンス操作に対する設定, 15.3, 15.3.2

アクティビティの起動時からの相対的な設定, 15.3.1.1

絶対的な日時での設定, 15.3.1.2

XPath式を使用して動的に計算される設定, 15.3.1.3

SyncMaxWaitTimeプロパティ, 7.3

pickアクティビティの使用, 15.1

waitアクティビティの使用, 15.4

timezone-from-dateTime関数

説明, B.1.2.13

タイトル

ヒューマン・タスクでの指定, 29.2.2

トップダウン設計アプローチ, 1.7 トラッキング可能フィールド

コンポジット・センサー, 50.1

transactionプロパティ

説明, 4.1.1

BPELプロセス作成中の設定, 4.1.1

transactionプロパティ

説明, C.1

設定, 13.1.1, 13.1.1.1, 13.1.1.2

トランザクション・セマンティクス

BPELプロセス, 13.1

トランザクションのタイムアウト値

指定, 7.3

トランザクション・タイムアウト

JTAトランザクション・タイムアウト値の増加, 45.1.3.1

transformアクティビティ

機能, A.2.37

作成, 40.2

トランスフォーメーション

XSLTコンストラクトの追加, 40.3.6

自動マッピング, 40.3.7

確認を伴う自動マップ, 40.3.7.1

関数の連鎖, 40.3.4.2

メモリー・エラーの修正, 40.4.2.1

作成, 40.2

インポートされたスキーマからのマップ・ファイルの作成, 40.2.2

新規マップ・ファイルの作成, 40.2.1

XSLスタイルシートからのXSLマップの作成, 40.2

サンプルXML生成のカスタマイズ, 40.4.3

ディクショナリ, 40.3.10

関数の編集, 40.3.4.1

XPath式の編集, 40.3.5

重複する要素のマップ時のエラー, 40.1.2

関数, 40.3.4

接頭辞がxp20またはorclの関数, 40.3.4

オプション要素の生成, 40.4.3

レポートの生成, 40.4.2

グローバル変数, 40.3.12

要素を無視, 40.3.15

ソース・ターゲット・ノードのリンク, 40.3.2

ローカル変数, 40.3.12

マップ・パラメータと変数の作成, 40.3.12

関数の名前付きテンプレート, 40.3.4.3

繰返し要素, 40.3.6.3

スキーマの置換, 40.3.17

ルール, 40.1.2

ソース・ノードとターゲット・ノードの検索, 40.3.13

定数値の設定, 40.3.3

最大の深さの設定, 40.4.3

繰返し要素の数の設定, 40.4.3

マップ・ファイルのテスト, 40.4

配列の使用, 40.3.6.3

XSLTマッパーの使用, 40.3

XQueryおよびXSLTの使用, 6.1.2

マップされていないターゲット・ノードの表示, 40.3.9

xsl choose条件付き処理, 40.3.6.2

xsl if条件付き処理, 40.3.6.1

トラブルシューティング

デプロイメント, 43.9.6

Spring起動エラー, 52.9

信頼できるドメイン

Oracle SOA SuiteとOracle Service Busが異なるドメインにある場合の有効化, 39.3.2

チューニング

一般的な推奨事項, 45.1.3

2レイヤーのビジネス・プロセス管理

定義, 51

動的ルーティング・デシジョン表, 51.3

phaseアクティビティ, 51.2

ユースケース, 51.4

U

UDDI 「Oracle Service Registry」を参照

uddiCacheLifetime

プロパティ, K.7.5

アンデプロイメント

SOAコンポジット・アプリケーション, 2.8.1

Unicodeのサポート, 2.1.1 upper-case関数

説明, B.1.4.15

ユーザー・ディレクトリ

ディレクトリの参照による通知受信者の選択, 17.3.6

ユーザー・メタデータ・サービス

定義, 27.4.1

Enterprise JavaBeans、SOAPおよびJavaサポート, 34.1.1

サポートされているタスク操作, 34.1.7

WSDLファイルの場所, 34.1.1

user notificationアクティビティ

エンド・ユーザーによる通知チャネル選択の許可, 17.4.1

機能, A.2.38

ユーザー通知

定義, 17.4

ドメイン値マップの使用, 47.4 トランスフォーメーションでのドメイン値マップの使用, 47.4.2 エラー処理の使用, 22.2 lookupValue関数の使用, 47.4.3 Oracle Mediatorのエラー処理の使用, 22.2

V

validateアクティビティ

機能, A.2.39

「有効な構文(XSD)の検証」プロパティ

操作またはイベント・サブスクリプションのプロパティの指定, 19.8

validateXMLプロパティ

説明, C.1

検証

bpelx:validateを使用したXMLデータ, 6.15

プロセス・ダイアグラムのロード時, A.6

変数センサー

定義, 18.1

変数

複合型, 6.6

変数間のデータのコピー, 6.5

BPEL 2.0のメッセージ交換アクティビティの要素変数, 6.16

BPEL 2.0におけるインラインの変数の初期化, 8.2.1.3

BPEL 2.0プロジェクトのインラインfrom-specを使用した初期化, 6.5.2

式定数を使用した初期化, 6.4

リテラルXMLを使用した初期化, 6.4

ViewControllerプロジェクト, 35.1.3 voiceアクティビティ

機能, A.2.40

通知サポート, 17.3.4

ボイス・メール

電話番号の動的設定, 17.3.5

通知サポート, 17.3.4

W

waitアクティビティ

機能, A.2.41

作成, 15.4.2

定義, 15.4

有効期限の設定, 15.4

Webサービス

WSDLファイルの追加, 2.3.2

バインディング・コンポーネント, 2.3.1, 2.4.1

SOAP over HTTPを使用した接続, 1.5.2

DataObjectDefinition, 59.3

DataObjectOperations, 59.2

定義, 37.1.1

ICommand, 59.5

ManualRuleFire, 59.4

サービス・コンポーネント, 25.4.2

WS-Atomicトランザクションのサポート, 37.1.1.1

WSDLファイル, 25.4.2

WebLogic Fusion Order Demoアプリケーション

B2BX12OrderGatewayプロジェクト, 3.3.1

binプロジェクト, 3.3.1

composite.xmlファイル, 3.3.2

CreditCardAuthorizationプロジェクト, 3.3.1

デプロイ, 3.5.7, 3.5.7

ExternalLegacyPartnerSupplierプロジェクト, 3.3.1

OrderAppovalHumanTaskプロジェクト, 3.3.1

OrderBookingCompositeプロジェクト, 3.3.1

OrderSDOCompositeプロジェクト, 3.3.1

概要, 3.3

PartnerSupplierCompositeプロジェクト, 3.3.1

記載されている処理, 3.4

プロジェクト, 3.3.1

設定, 3.2

Oracle JDeveloperでの表示, 3.3

web.xmlファイル, 35.1.4, 35.1.4 wfDynamicGroupAssign関数

説明, B.5.11

wfDynamicUserAssign関数

説明, B.5.12

whileアクティビティ

機能, A.2.42

条件分岐ロジック, 11.3

ワイヤ

追加, 2.5, 2.5.3

定義, 1.5.3

削除, 2.5.3

使用, 2.5.1

サービス・コンポーネントと参照の接続, 2.5.2

2つのOracle Mediatorを接続したときに発生する無限ループ, 2.5.3

WLSTユーティリティ

構成プランの作成, 43.6.1.5

コンポジットの管理, 43.7.5

WordMLスタイルシート

添付ファイルへの使用, 29.6.1

ワークフロー・コンテキスト

ユーザーにかわって作成, 34.1.2.2

ワークフロー関数

概要, 34.1

ワークフロー・サービス・クライアント, 33.3

インタフェース, 33.3.1

ワークフロー・サービス

条件付き中途完了, 29.5.1.2

アクション可能な電子メール, 34.2.7

全参加者による他の参加者の招待を許可, 29.5.1.1

名前または式によるタスク参加者の割当て, 29.4.3.1.1, 29.5.4

割当てサービスの構成, 34.3

ヒューマン・タスク・アクティビティとBPELプロセスの関連付け, 28.4.1

ヒューマン・タスク定義とBPELプロセスの関連付け, 28.1.2

タスク参加者のバイパス, 29.4.3.4, 29.4.4.5, 29.4.5.4

キャラクタ・セット・エンコーディングの変更, 29.8.4

通知ヘッダーのカスタマイズ, 29.8.10

通知メッセージの編集, 29.8.2

Enterprise JavaBeansのサポート, 34.1.1

「エスカレートまでの時間」ポリシー, 29.7.5

タスクのエスカレート、期限更新または終了, 29.7

エスカレーションおよび有効期限のポリシーの概要, 29.7.1, 29.7.1

エスカレーション・ルール, 29.7.6

「期限切れまでの時間」ポリシー, 29.7.3

関数, B.5

clearTaskAssignees, B.5.1

createWordMLDocument, B.5.2

getNotificationProperty, B.5.3

getNumberOfTaskApprovals, B.5.4

getPreviousTaskApprover, B.5.5

getTaskAttachmentByIndex, B.5.6

getTaskAttachmentByName, B.5.7

getTaskAttachmentContents, B.5.8

getTaskAttachmentsCount, B.5.9

getTaskResourceBindingString, B.5.10

wfDynamicGroupAssign, B.5.11

wfDynamicUserAssign, B.5.12

FYI割当て先タスク参加者, 29.4.6, 29.4.6 グループ投票詳細, 29.4.4.1 識別キー, 28.4.4.3 アイデンティティ・サービス, 27.4.1 他のタスクのタスク履歴の追加, 28.4.4.6 他のタスク参加者の招待, 29.4.3.3, 29.4.4.4, 29.4.5.3 Javaサポート, 34.1.1 電子メール・メッセージのアクション可能化, 29.8.7 多言語設定, 29.6.2, 34.2.6 「期限切れなし」ポリシー, 29.7.2 通知コンテンツ, 34.2.1 通知プリファレンス, 29.8 通知サービス, 27.4.1, 34.2.5 通知, 34.2 受信者へのタスク・ステータス変更の通知, 29.8.1 概要, 34.1 パラレル・タスク参加者, 29.4.4 「期限更新までの時間」ポリシー, 29.7.4 ルーティング・スリップ

定義, 29.4.3.2

ランタイム構成サービス, 27.4.1 スコープ名とグローバル・タスク変数名, 28.4.4.1 通知のセキュア化, 29.8.5, 34.2.10 セキュリティ・モデル, 34.1.2, 34.1.2.1 グループおよびアプリケーション・ロールへの電子メール通知の送信, 29.8.9 電子メール通知によるタスクの添付ファイルの送信, 29.8.8 シリアル・タスク参加者, 29.4.5, 29.4.5 リマインダの設定, 29.8.3 タスク参加者との添付ファイルおよびコメントの共有, 29.4.4.1 Oracle BPM Worklist URLを通知に表示, 29.8.6 単一の承認者のタスク参加者, 29.4.3 SOAPサポート, 34.1.1 タスク起案者とタスク優先度の指定, 28.4.3.2 タスクのタイトルの指定, 28.4.3.1 コールバック・クラスの指定, 29.11.1 タスク・パラメータの指定, 28.4.3.3 アイデンティティ・サービスのサポート, 34.1.5 電子メール通知によるタスクの添付ファイル, 34.2.8 タスク・カテゴリ, 29.2.6 タスク表示フォーム, 28.1.3, 30.1 .taskファイル

定義, 28.1.1, 28.2.3

タスク・メタデータ・サービス, 27.4.1 タスク通知, 34.2 タスクの結果, 29.2.4 タスク所有者, 28.4.4.2 ユーザー・ディレクトリを使用したタスク所有者の指定, 29.2.7.1 XPath式を使用したタスク所有者の指定, 29.2.7.2 タスク参加者, 29.4 タスク・ペイロード・データ構造, 29.3 タスク優先度, 29.2.5 タスク問合せサービス, 27.4.1 BPELコールバックのタスク・ルーティングとカスタマイズ, 29.11.2 タスク・ルーティング・サービス, 27.4.1 タスク・サービス, 27.4.1 タスクのタイトル, 29.2.2 タスクの操作に対する時間制限, 29.4.3.2, 29.4.4.3, 29.4.5.2 ユーザー・メタデータ・サービス, 27.4.1 BPELコールバックの表示, 28.4.5.1 添付ファイルのWordMLスタイルシート, 29.6.1 ワークリスト

タスクの操作, 32.4.3

デジタル署名が必要なタスクの操作, 32.4.4

管理機能, 32.8

タスクの承認, 32.5

複数の割当て先があるタスクの割当てルール, 32.7.3

To Doリストの作成, 32.3.4

ワークリスト・ビューの作成とカスタマイズ, 32.3.2

グループ・ルールの作成, 32.7.2

ユーザー・ルールの作成, 32.7.1

タスク・ステータス・グラフのカスタマイズ, 32.3.3

定義, 32.1

タスクのフィルタ, 32.3.1

ログイン, 32.2

メッセージング・チャネルの管理, 32.9.3

メッセージング・フィルタの管理, 32.9.4

ルールの管理, 32.8.1

マップ済属性のマッピング, 32.10.1

メッセージング・フィルタ・ルール, 32.9.1

レポート, 32.11, 32.11.1

ルール・アクション, 32.9.2

休暇期間の設定, 32.6

ルールの設定, 32.7

通知設定の指定, 32.9

システム・アクション, 32.4.1

「タスクの詳細」ページ、タスク操作, 32.4

タスク履歴, 32.4.2

タスク・リスト・ページの内容, 32.2.2

タスク・リスト・ページ、カスタマイズ, 32.3

マップ済属性の使用, 32.10

ワークリスト・クライアント

ワークフロー・サービスの作成, 33.1

リモートEnterprise JavaBeansを使用するクライアント用クラスパス, 33.5

SOAPを使用するクライアント用クラスパス, 33.4

カスタマイズ, 33.1

パッケージとクラス, 33.2

writeBinaryToFile関数

説明, B.2.56

WS-Addressing

相関IDの送信, 8.2.2.5

非同期サービスでの使用, 8.8

WS-Atomicトランザクション

composite.xmlファイルの構文, 37.1.1.1

BPELプロセスの参加の有効化, 37.1.1.1.1

最適化が有効な場合にサポートされない, 37.1.1.1.2

SOAコンポジット・アプリケーションでのサポート, 37.1.1.1

wsclient.jarファイル, 35.1.4 WSDLファイル

Webサービスへの追加, 2.3.2

定義, 1.4

ドキュメント・リテラル形式とRPC形式の違い, 6, 6.21

ソース・ビューでサポートされていない編集, 2.3.2

同じSOAコンポジット・アプリケーション内でのJavaベース・コンポーネントとWSDLベース・コンポーネントの統合, 52.2

デフォルト・リビジョンの起動, 2.4.5

WSDLファイルでのメッセージ・タイプの混在に関する制限, 2.4.4

エビデンス・ストア・サービスの場所, 34.1.1

アイデンティティ・サービスの場所, 34.1.1

ランタイム構成サービスの場所, 34.1.1

タスク・メタデータ・サービスの場所, 34.1.1

タスク問合せサービスの場所, 34.1.1

タスク・レポート・サービスの場所, 34.1.1

タスク・サービスの場所, 34.1.1

ユーザー・メタデータ・サービスの場所, 34.1.1

フォルトを生成するための変更, 12.5.1

参照, 2.4.3

選択, 2.3.2

サービス・コンポーネントのメタデータ, 25.4.2

パートナ・リンクの作成時の指定, 4.3

メッセージ・スキーマの更新, 2.3.3

既存のWSDLファイルの使用, 2.3.2

メッセージ・スキーマの表示, 2.3.3

複数パートの使用, 2.3.2

WSDLネームスペースは一意にすることが必要, 2.3.2

X

XMLのアサート

概要, 44.1.4

BPELでのXMLデータ, 6.1.1 XMLデータ操作

bpelx:append拡張要素, 6.14.1

bpelx:copyList拡張要素, 6.14.6

bpelx:insertAfter拡張要素, 6.14.3

bpelx:insertBefore拡張要素, 6.14.2

bpelx:remove拡張要素, 6.14.4

bpelx:rename拡張要素, 6.14.5

bpelx:validate拡張要素, 6.15

XML文書

操作, 6.1.2, 6.1.2

概要, 6.1.2, 6.1.2

XML Facade

定義, 14.2.5

Java埋込み, 14.2.5

XMLスキーマ・ファイル

エラー処理, 22.4

fault-bindings.xml, 22.4.2

fault-policies.xml, 22.4.1

XMLスキーマ

メッセージ・タイプおよび変数タイプ, 6

XPathビルディング・アシスタント

使用, B.6

XSLTマッパーでの使用, 40.3.5, B.6.4

XPath式

数値の割当て, 6.7

switchアクティビティ内のブール式, 11.2.1.1

別のXPath式の動的作成, 6.19.4

電子メール・アドレスと電話番号の動的設定, 17.3.5

トランスフォーメーションでの編集, 40.3.5

例, 6.1.2

データ・シーケンス要素のフェッチ, 6.19.4

条件分岐ロジック, 11.1

タスク所有者の指定, 29.2.7.2

XPath拡張関数

ユーザー定義関数の作成, B.7

dvm

lookupValue関数, 47.4.1.1

lookupValue1M関数, 47.4.1.2

Windowsでのディレクトリ・パスに対するダブル・スラッシュの使用によりエラーが発生する可能性がある, B.6.8 XPath関数

トランスフォーメーション, 40.3.4

索引付けメソッド, 6.19.1

数学的計算, 6.8

XPath問合せ

データのコピー, 6.6

例, 6.1.2

XQuery, 6.1.2, 6.1.2 xref

lookupXRef関数, 49.6.1

例外の原因, 49.6.1

パラメータ, 49.6.1

lookupXRef1M関数

例外の原因, 49.6.2, 49.6.3

パラメータ, 49.6.2, 49.6.3

markForDelete関数, 49.7

例外の原因, 49.7

パラメータ, 49.7

populateLookupXRefRow関数

モード, 49.5.2

パラメータ, 49.5.2

populateXRefRow関数

モード, 49.5.1

パラメータ, 49.5.1

populateXRefRow1M関数, 49.5.3

モード, 49.5.3

パラメータ, 49.5.3

xsl choose

条件付き処理, 40.3.6.2

xsl if

条件付き処理, 40.3.6.1

XSLマップ

XSLスタイルシートからの作成, 40.2

XSLスタイルシート

XSLマップの作成, 40.2

XSLトランスフォーメーション

定義, 1.4

XSLT, 6.1.2, 6.1.2 XSLTコンストラクト

トランスフォーメーションへの追加, 40.3.6

XSLTマッパー

XSLTコンストラクトの追加, 40.3.6

自動マッピング, 40.3.7

確認を伴う自動マップ, 40.3.7.1

関数の連鎖, 40.3.4.2

レポート生成時のメモリー・エラーの修正, 40.4.2.1

マップ・ファイルの作成, 40.1

インポートされたスキーマからのマップ・ファイルの作成, 40.2.2

新規マップ・ファイルの作成, 40.2.1

transformアクティビティの作成, 40.2

XSLスタイルシートからのXSLマップの作成, 40.2

トランスフォーメーションのサンプルXML生成のカスタマイズ, 40.4.3

ディクショナリ, 40.3.10

設計時にドメイン値マップ関数および相互参照関数を実行できない, 40.4.1

関数の編集, 40.3.4.1

XPath式の編集, 40.3.5

重複する要素のマップ時のエラー, 40.1.2

関数, 40.3.4

Oracle Mediatorで使用可能でBPELプロセスでは使用不可の関数, 40.1

接頭辞がxp20またはorclの関数, 40.3.4

オプション要素の生成, 40.4.3

レポートの生成, 40.4.2

要素を無視, 40.3.15

Oracle JDeveloperでのレイアウト, 40.1

ソース・ノードとターゲット・ノードのリンク, 40.3.2

マップ・パラメータと変数の作成, 40.3.12

メモリーの問題, 40.3.19

関数の名前付きテンプレート, 40.3.4.3

繰返し要素, 40.3.6.3

スキーマの置換, 40.3.17

ルール, 40.1.2

ソース・ノードとターゲット・ノードの検索, 40.3.13

定数値の設定, 40.3.3

最大の深さの設定, 40.4.3

繰返し要素の数の設定, 40.4.3

マップ・ファイルのテスト, 40.4

使用, 40.3

配列の使用, 40.3.6.3

マップされていないターゲット・ノードの表示, 40.3.9

xsl choose条件付き処理, 40.3.6.2

xsl if条件付き処理, 40.3.6.1

Y

year-from-dateTime関数

説明, B.1.2.14

Copyright © 2005, 2013, Oracle and/or its affiliates. All rights reserved.