Oracle® Fusion Middleware

Oracle User Messaging Serviceによるアプリケーションの開発

リリース12c (12.1.2)

E47999-02(原本部品番号:E27789-02)

2013年8月

Oracle Fusion Middleware Oracle User Messaging Serviceによるアプリケーションの開発 リリース12c (12.1.2)

E47999-02

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

原本著者:  Savija Vijayaraghavan

原本協力著者:  Swati Thacker

原本協力者:

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT RIGHTS Programs, 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の登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

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

はじめに

- 対象読者

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

- 関連ドキュメント

- 表記規則

1 概要

- 1.1 ユーザー・メッセージング・サービスの概要

- 1.2 ユーザー・メッセージング・サービス・サンプル・アプリケーション

2 ユーザー・メッセージング・サービスEJB APIを使用したメッセージの送受信

- 2.1 UMS Java APIの概要

- 2.1.1 Java EEアプリケーション・モジュールの作成

- 2.2 UMSクライアント・インスタンスの作成

- 2.2.1 プログラミングまたは宣言的な方法によるMessagingEJBClientインスタンスの作成

- 2.2.2 MessagingClientFactoryクラスのAPIリファレンス

- 2.3 メッセージの送信

- 2.3.1 メッセージの作成

- 2.3.1.1 プレーン・テキスト・メッセージの作成

- 2.3.1.2 Text/PlainパートとText/HTMLパートを持つマルチパート/代替メッセージの作成

- 2.3.1.3 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

- 2.3.2 MessageFactoryクラスのAPIリファレンス

- 2.3.3 MessageインタフェースのAPIリファレンス

- 2.3.4 列挙DeliveryTypeのAPIリファレンス

- 2.3.5 メッセージのアドレス指定

- 2.3.5.1 アドレスのタイプ

- 2.3.5.2 Addressオブジェクトの作成

- 2.3.5.3 フェイルオーバー・アドレスを使用した受信者の作成

- 2.3.5.4 AddressFactoryクラスのAPIリファレンス

- 2.3.5.5 AddressインタフェースのAPIリファレンス

- 2.3.6 メッセージ・ステータスの取得

- 2.3.6.1 メッセージ・ステータスの同期取得

- 2.3.6.2 メッセージ・ステータスの非同期通知

- 2.4 メッセージの受信

- 2.4.1 アクセス・ポイントの登録

- 2.4.2 同期受信

- 2.4.3 非同期受信

- 2.4.4 メッセージ・フィルタ

- 2.5 UMS Enterprise JavaBeansクライアントAPIを使用したクライアント・アプリケーションの作成

- 2.5.1 開発の概要

- 2.5.2 電子メール・ドライバの構成

- 2.5.3 JDeveloper 11gを使用したアプリケーションの作成

- 2.5.3.1 プロジェクトを開く

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

- 2.5.5 アプリケーションのテスト

- 2.6 UMS Enterprise JavaBeansクライアントAPIを使用したクライアント・エコー・アプリケーションの作成

- 2.6.1 開発の概要

- 2.6.2 電子メール・ドライバの構成

- 2.6.3 JDeveloper 11gを使用したアプリケーションの作成

- 2.6.3.1 プロジェクトを開く

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

- 2.6.5 アプリケーションのテスト

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

3 ユーザー・メッセージング・サービスJava APIを使用したメッセージの送受信

- 3.1 UMS Java APIの概要

- 3.2 UMSクライアント・インスタンスの作成とランタイム・パラメータの指定

- 3.3 メッセージの送信

- 3.3.1 メッセージの作成

- 3.3.1.1 プレーン・テキスト・メッセージの作成

- 3.3.1.2 Text/PlainパートとText/HTMLパートを持つマルチパート/代替メッセージの作成

- 3.3.1.3 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

- 3.3.2 メッセージのアドレス指定

- 3.3.2.1 アドレスのタイプ

- 3.3.2.2 Addressオブジェクトの作成

- 3.3.2.3 フェイルオーバー・アドレスを使用した受信者の作成

- 3.3.2.4 MessagingFactoryクラスのAPIリファレンス

- 3.3.2.5 AddressインタフェースのAPIリファレンス

- 3.3.3 グループ・メッセージの送信

- 3.3.3.1 グループへのメッセージ送信

- 3.3.3.2 特定チャネル経由でのメッセージのグループへの送信

- 3.3.3.3 メッセージのアプリケーション・ロールへの送信

- 3.3.3.4 特定チャネル経由でのメッセージのアプリケーション・ロールへの送信

- 3.3.4 ユーザー・プリファレンス・ベースのメッセージング

- 3.4 メッセージ・ステータスの取得

- 3.4.1 メッセージ・ステータスの同期取得

- 3.4.2 メッセージ・ステータスの非同期取得

- 3.4.2.1 プログラムによるリスナーの作成

- 3.4.2.2 デフォルトのステータス・リスナー

- 3.4.2.3 メッセージごとのステータス・リスナー

- 3.5 メッセージの受信

- 3.5.1 アクセス・ポイントの登録

- 3.5.2 同期受信

- 3.5.3 非同期受信

- 3.5.3.1 プログラムによるリスナーの作成

- 3.5.3.2 デフォルトのメッセージ・リスナー

- 3.5.3.3 アクセス・ポイントごとのメッセージ・リスナー

- 3.5.4 メッセージ・フィルタ

- 3.6 クラスタ環境の構成

- 3.7 XAトランザクションに対するUMSクライアントAPIの使用

- 3.7.1 XAトランザクションについて

- 3.7.2 XA対応メッセージの送受信

- 3.8 UMS Java APIを使用したメッセージ再送信の指定

- 3.9 セキュリティの構成

- 3.10 スレッド・モデル

- 3.10.1 リスナー・スレッド

4 ユーザー・メッセージング・サービスWebサービスAPIを使用したメッセージの送受信

- 4.1 UMS WebサービスAPIの概要

- 4.2 UMSクライアント・インスタンスの作成とランタイム・パラメータの指定

- 4.3 メッセージの送信

- 4.3.1 メッセージの作成

- 4.3.1.1 プレーン・テキスト・メッセージの作成

- 4.3.1.2 テキスト・パートとバイナリ・パートを持つマルチパート/混合メッセージの作成

- 4.3.1.3 Text/PlainパートとText/HTMLパートを持つマルチパート/代替メッセージの作成

- 4.3.1.4 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

- 4.3.2 MessageインタフェースのAPIリファレンス

- 4.3.3 列挙DeliveryTypeのAPIリファレンス

- 4.3.4 メッセージのアドレス指定

- 4.3.4.1 アドレスのタイプ

- 4.3.4.2 Addressオブジェクトの作成

- 4.3.4.3 フェイルオーバー・アドレスを使用した受信者の作成

- 4.3.4.4 受信者のタイプ

- 4.3.4.5 MessagingFactoryクラスのAPIリファレンス

- 4.3.4.6 AddressインタフェースのAPIリファレンス

- 4.3.5 ユーザー・プリファレンス・ベースのメッセージング

- 4.4 メッセージ・ステータスの取得

- 4.4.1 メッセージ・ステータスの同期取得

- 4.4.2 メッセージ・ステータスの非同期取得

- 4.4.2.1 プログラムによるリスナーの作成

- 4.4.2.2 コールバック・サービスのパブリッシュ

- 4.4.2.3 動的にパブリッシュされたエンドポイントの停止

- 4.4.2.4 登録

- 4.5 メッセージの受信

- 4.5.1 アクセス・ポイントの登録

- 4.5.2 同期受信

- 4.5.3 非同期受信

- 4.5.3.1 プログラムによるリスナーの作成

- 4.5.3.2 デフォルトのメッセージ・リスナー

- 4.5.3.3 アクセス・ポイントごとのメッセージ・リスナー

- 4.5.4 メッセージ・フィルタ

- 4.6 クラスタ環境の構成

- 4.7 UMS WebサービスAPIを使用したメッセージ再送信の指定

- 4.8 セキュリティの構成

- 4.8.1 クライアントおよびサーバーのセキュリティ

- 4.8.2 リスナーまたはコールバックのセキュリティ

- 4.9 スレッド・モデル

- 4.10 WebサービスAPIを使用したサンプル・チャット・アプリケーション

- 4.10.1 概要

- 4.10.1.1 提供されるファイル

- 4.10.2 事前作成されたサンプルの実行

- 4.10.3 サンプルのテスト

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

5 Parlay X Webサービス・マルチメディア・メッセージングAPI

- 5.1 Parlay X Messaging操作の概要

- 5.2 SendMessageインタフェース

- 5.2.1 sendMessage操作

- 5.2.2 getMessageDeliveryStatus操作

- 5.3 ReceiveMessageインタフェース

- 5.3.1 getReceivedMessages操作

- 5.3.2 getMessage操作

- 5.3.3 getMessageURIs操作

- 5.4 Parlay X Messagingに対するOracleの拡張機能

- 5.4.1 ReceiveMessageManagerインタフェース

- 5.4.1.1 startReceiveMessage操作

- 5.4.1.2 stopReceiveMessage操作

- 5.5 Parlay X Messaging Client APIおよびClient Proxy Package

- 5.6 Parlay X APIを使用したサンプル・チャット・アプリケーション

- 5.6.1 概要

- 5.6.1.1 提供されるファイル

- 5.6.2 事前作成されたサンプルの実行

- 5.6.3 サンプルのテスト

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

6 ユーザー通信プリファレンス

- 6.1 ユーザー通信プリファレンスの概要

- 6.1.1 用語

- 6.2 ユーザー・プリファレンスの管理

- 6.2.1 通信チャネルの管理

- 6.2.1.1 チャネルの作成

- 6.2.1.2 チャネルの変更

- 6.2.1.3 チャネルの削除

- 6.2.1.4 デフォルト・チャネルの設定

- 6.2.2 フィルタの管理

- 6.2.2.1 フィルタの作成

- 6.2.2.2 フィルタの変更

- 6.2.2.3 フィルタの削除

- 6.2.2.4 フィルタの無効化

- 6.2.2.5 フィルタの編成

- 6.2.3 プリファレンス設定の構成

- 6.3 ユーザー通信プリファレンスの管理

- 6.3.1 ビジネス条件について

- 6.3.2 Oracle Enterprise Managerを使用したプロファイルの構成

- 6.3.3 WLSTコマンドを使用したユーザー・データの管理

- 6.4 UCP Webユーザー・インタフェースの統合

- 6.4.1 ADF WebアプリケーションとUCPの統合

- 6.4.1.1 新しいADFアプリケーションの作成

- 6.4.1.2 ADF Webページの作成

- 6.4.1.3 UCPタスク・フロー・ライブラリの接続

- 6.4.1.4 新しいページへのリージョンの追加

- 6.4.1.5 UCPライブラリの参照

- 6.4.1.6 プロジェクト・デプロイメント・プロファイルの管理

- 6.4.1.7 アプリケーション・デプロイメント・プロファイルの作成

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

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

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

- 6.4.3 アプリケーションの検証

- 6.5 Javaアプリケーション・インタフェース

- 6.5.1 配信プリファレンスの取得

- 6.5.2 チャネルの管理

- 6.5.3 フィルタの管理

A ユーザー・メッセージング・サービス・サンプル・アプリケーションの使用

- A.1 UMSクライアントAPIを使用したクライアント・アプリケーションの作成

- A.1.1 開発の概要

- A.1.2 電子メール・ドライバの構成

- A.1.3 JDeveloper 12cを使用したアプリケーションの作成

- A.1.3.1 プロジェクトを開く

- A.1.4 アプリケーションのデプロイ

- A.1.5 アプリケーションのテスト

- A.2 UMSクライアントAPIを使用したクライアント・エコー・アプリケーションの作成

- A.2.1 開発の概要

- A.2.2 電子メール・ドライバの構成

- A.2.3 Oracle JDeveloper 12cを使用したアプリケーションの作成

- A.2.3.1 プロジェクトを開く

- A.2.4 アプリケーションのデプロイ

- A.2.5 アプリケーションのテスト

- A.3 新規アプリケーション・サーバー接続の作成

はじめに

このドキュメントでは、Oracle User Messaging Serviceの使用方法について説明します。

対象読者

このガイドは、Oracle User Messaging Serviceを使用して、アプリケーションとの間でメッセージを送受信するプロセス開発者を対象としています。

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

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

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 User Messaging Serviceの管理』

- 『Oracle SOA Suiteを使用したSOAアプリケーションの開発』

- 『インフラストラクチャ・コンポーネントのためのWLSTコマンド・リファレンス』

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 概要

この章では、Oracle User Messaging Service (UMS)の概要について説明します。この章の内容は次のとおりです。

- 第1.1項「ユーザー・メッセージング・サービスの概要」

- 第1.2項「ユーザー・メッセージング・サービス・サンプル・アプリケーション」

1.1 ユーザー・メッセージング・サービスの概要

Oracle User Messaging Serviceは、アプリケーションからデバイスにメッセージを送信する共通サービスを提供します。また、着信メッセージをデバイスからアプリケーションにルーティングします。

Oracle User Messaging Serviceの機能の詳細は、『Oracle User Messaging Serviceの管理』のOracle User Messaging Serviceの概要に関する項を参照してください。

1.2 ユーザー・メッセージング・サービス・サンプル・アプリケーション

Oracle User Messaging Serviceのサンプル・コードは、次のOracle Technology Networkにあります。

http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.html

注意:

明示的に示されていないかぎり、サンプル・コードはOracleにより保証またはサポートされていません。トレーニングまたはテストのみを目的としたものです。

このドキュメントでは、ユーザー・メッセージング・サービスJava APIを使用してアプリケーションを開発する方法(第3章「ユーザー・メッセージング・サービスJava APIを使用したメッセージの送受信」参照)と、ユーザー・メッセージング・サービスWebサービスAPIを使用してアプリケーションを開発する方法(第4章「ユーザー・メッセージング・サービスWebサービスAPIを使用したメッセージの送受信」参照)について説明します。Oracle JDeveloper 12cを使用してこれらのサンプル・アプリケーションを構築およびデプロイでき、Webインタフェースを介して通信プリファレンスを管理することもできます(第6章「ユーザー通信プリファレンス」を参照)。

2 ユーザー・メッセージング・サービスEJB APIを使用したメッセージの送受信

この章では、ユーザー・メッセージング・サービス(UMS) EJB APIを使用したアプリケーションの開発方法、およびusermessagingsample-ejb.earとusermessagingsample-echo-ejb.earの2つのサンプル・アプリケーションの作成方法について説明します。この章の内容は次のとおりです。

注意:

この章で説明するユーザー・メッセージング・サービスEJB APIは非推奨です。かわりに、第3章「ユーザー・メッセージング・サービスJava APIを使用したメッセージの送受信」で説明するユーザー・メッセージング・サービスJava APIを使用してください。

- 第2.1項「UMS Java APIの概要」

- 第2.2項「UMSクライアント・インスタンスの作成」

- 第2.3項「メッセージの送信」

- 第2.4項「メッセージの受信」

- 第2.5項「UMS Enterprise JavaBeansクライアントAPIを使用したクライアント・アプリケーションの作成」

- 第2.6項「UMS Enterprise JavaBeansクライアントAPIを使用したクライアント・エコー・アプリケーションの作成」

- 第2.7項「新規アプリケーション・サーバー接続の作成」

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、次の場所にあるサンプルを参照してください。

http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.html

2.1 UMS Java APIの概要

UMS Java APIは、Enterprise JavaBeansクライアント用アプリケーションの開発をサポートします。これは、次のようにグループ化されたパッケージで構成されています。

- 共通およびクライアントのパッケージ

- oracle.sdp.client

- oracle.sdp.client.filter: アプリケーションでMessageFilterを使用すると、配信されるメッセージをより強力に制御できます。

- ユーザー・プリファレンス・パッケージ

- oracle.sdp.client.userprefs

- oracle.sdp.client.userprefs.tools

2.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)から入手できます。

2.2 UMSクライアント・インスタンスの作成

この項では、UMS Enterprise JavaBeansクライアントを作成するための要件を説明します。MessagingEJBClientインスタンスは、MessagingClientFactoryクラスのコードを使用して作成できます。

UMS Enterprise JavaBeansクライアントを使用して作成したアプリケーションは、EARファイルとしてパッケージ化され、usermessagingclient-ejb.jarモジュールがEnterprise JavaBeansモジュールとしてバンドルされている必要があります。

2.2.1 プログラミングまたは宣言的な方法によるMessagingEJBClientインスタンスの作成

例2-1に、プログラミングによってMessagingEJBClientインスタンスを作成する場合のコードを示します。

例2-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)には、必要なすべてのアプリケーション情報プロパティを環境エントリとして指定する必要があります。

例2-2に、宣言的な方法でMessagingEJBClientインスタンスを作成する場合のコードを示します。

例2-2 宣言的な方法によるMessagingEJBClientインスタンスの作成

MessagingClient mClient = MessagingClientFactory.createMessagingEJBClient();

2.2.2 MessagingClientFactoryクラスのAPIリファレンス

MessagingClientFactoryクラスのAPIリファレンスには、Javadocからアクセスできます。

2.3 メッセージの送信

メッセージは、MessageFactoryクラスのコードおよびoracle.sdp.clientのMessageインタフェースを使用して作成できます。

作成できるメッセージのタイプには、プレーン・テキスト・メッセージ、text/plainパートとtext/htmlパートで構成できるマルチパート・メッセージ、および異なる配信タイプを使用して、複数受信者用の単一メッセージに配信チャネル(DeliveryType)固有のペイロードを作成するメッセージがあります。

2.3.1 メッセージの作成

この項では、作成できる様々なタイプのメッセージについて説明します。

2.3.1.1 プレーン・テキスト・メッセージの作成

例2-3に、UMS Java APIを使用してプレーン・テキスト・メッセージを作成する方法を示します。

例2-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");

2.3.1.2 Text/PlainパートとText/HTMLパートを持つマルチパート/代替メッセージの作成

例2-4に、UMS Java APIを使用してマルチパート・メッセージまたは代替メッセージを作成する方法を示します。

例2-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");

2.3.1.3 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

メッセージを宛先アドレスに送信する際は、複数のチャネルが関連する場合があります。Oracle UMSアプリケーション開発者は、各チャネルに対して正しいマルチパート書式を指定する必要があります。

例2-5に、異なる配信タイプを使用して、複数受信者用の単一メッセージに、配信チャネル(DeliveryType)固有のペイロードを作成する方法を示します。

複数ペイロードのマルチパート/代替メッセージの各最上位パートには、このヘッダーの値が1つ以上含まれている必要があります。このヘッダーの値は、有効な配信タイプの名前である必要があります。DeliveryTypeの使用可能な値は、列挙DeliveryTypeを参照してください。

例2-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);

2.3.2 MessageFactoryクラスのAPIリファレンス

MessageFactoryクラスのAPIリファレンスには、Javadocからアクセスできます。

2.3.3 MessageインタフェースのAPIリファレンス

MessageインタフェースのAPIリファレンスには、Javadocからアクセスできます。

2.3.4 列挙DeliveryTypeのAPIリファレンス

列挙DeliveryTypeのAPIリファレンスには、Javadocからアクセスできます。

2.3.5 メッセージのアドレス指定

この項では、アドレスのタイプおよびAddressオブジェクトの作成方法について説明します。

2.3.5.1 アドレスのタイプ

アドレスには、デバイス・アドレスとユーザー・アドレスの2種類があります。デバイス・アドレスには、電子メール・アドレス、インスタント・メッセージ・アドレス、電話番号など、様々なタイプがあります。ユーザー・アドレスは、ユーザー・リポジトリにあるユーザーIDです。

2.3.5.2 Addressオブジェクトの作成

Addressインタフェースで定義するAddressオブジェクトは、AddressFactoryクラスを使用してメッセージの送信者と受信者のアドレスを指定することで作成できます。

2.3.5.2.1 単一のAddressオブジェクトの作成

例2-6に、単一のAddressオブジェクトを作成するコードを示します。

例2-6 単一のAddressオブジェクトの作成

Address recipient = AddressFactory.getInstance().createAddress("Email:john@example.com");

2.3.5.2.2 1つのバッチ内での複数のAddressオブジェクトの作成

例2-7に、1つのバッチ内に複数のAddressオブジェクトを作成するコードを示します。

例2-7 1つのバッチ内での複数のAddressオブジェクトの作成

String[] recipientsStr = {"Email:john@example.com", "IM:jabber|john@example.com"};
Address[] recipients = AddressFactory.getInstance().createAddress(recipientsStr);

2.3.5.2.3 メッセージへの送信者または受信者のアドレスの追加

例2-8に、送信者または受信者のアドレスをメッセージに追加するコードを示します。

例2-8 メッセージへの送信者または受信者のアドレスの追加

Address sender = AddressFactory.getInstance().createAddress("Email:john@example.com");
Address recipient = AddressFactory.getInstance().createAddress("Email:jane@example.com");
message.addSender(sender);
message.addRecipient(recipient);

2.3.5.3 フェイルオーバー・アドレスを使用した受信者の作成

例2-9に、フェイルオーバー・アドレスを使用して受信者を作成するコードを示します。

例2-9 フェイルオーバーを使用した単一のAddressオブジェクトの作成

String recipientWithFailoverStr = "Email:john@example.com, IM:jabber|john@example.com";
Address recipient = AddressFactory.getInstance().createAddress(recipientWithFailoverStr);

2.3.5.4 AddressFactoryクラスのAPIリファレンス

AddressFactoryクラスのAPIリファレンスには、Javadocからアクセスできます。

2.3.5.5 AddressインタフェースのAPIリファレンス

AddressインタフェースのAPIリファレンスには、Javadocからアクセスできます。

2.3.6 メッセージ・ステータスの取得

Oracle UMSを使用すると、メッセージ・ステータスを同期または非同期で取得できます。

2.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.

2.3.6.2 メッセージ・ステータスの非同期通知

メッセージ・ステータスの非同期通知を取得する手順は、次のとおりです。

1. ステータス・リスナーを実装します。

2. ステータス・リスナーを宣言的な方法で登録します。

3. メッセージ(messagingClient.send(message);)を送信します。

4. アプリケーションでは、ステータス・リスナーのonStatus(status)コールバックを介してステータスを自動的に取得します。

2.4 メッセージの受信

この項では、アプリケーションでメッセージを受信する方法について説明します。メッセージを受信するには、最初にアクセス・ポイントを登録する必要があります。アプリケーション側から見ると、メッセージを受信するモードには同期と非同期があります。

2.4.1 アクセス・ポイントの登録

AccessPointは、着信メッセージを受信するための1つ以上のデバイス・アドレスを表します。着信メッセージを受信するアプリケーションでは、メッセージの受信者アドレスを表すアクセス・ポイントを1つ以上登録する必要があります。サーバーでは、着信メッセージの受信者アドレスと一連の登録済アクセス・ポイントを照合し、一致したアクセス・ポイントを登録したアプリケーションに、その着信メッセージをルーティングします。

AccessPointFactory.createAccessPointを使用してアクセス・ポイントを作成し、MessagingClient.registerAccessPointを使用してそのアクセス・ポイントをメッセージの受信用に登録します。

電子メールのアクセス・ポイントを登録するには、次のように指定します。

Address apAddress = MessagingFactory.createAddress("EMAIL:user1@example.com");
AccessPoint ap = MessagingFactory.createAccessPoint(apAddress);
MessagingClient.registerAccessPoint(ap);

番号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);

2.4.2 同期受信

メッセージの同期受信には、メソッドMessagingClient.receiveを使用できます。このメソッドは、メッセージの非同期受信による構成オーバーヘッドを望まない軽量なクライアント向けの便利なポーリング・メソッドです。このメソッドは、アプリケーションのインバウンド・キューですぐに使用できるメッセージのリストを戻します。このメソッドは非ブロック・コールを実行するため、現在使用できるメッセージがない場合はNULLを戻します。

注意:

1回の起動で、使用可能なメッセージがすべて取得される保証はありません。ポーリングして、使用可能なすべてのメッセージを受信したことを確認する必要があります。

2.4.3 非同期受信

非同期受信には、MDBの構成、ステートレス・セッションBeanメッセージ・リスナーの記述など、多数のタスクが関連しています。詳細な手順については、サンプル・アプリケーションusermessagingsample-echoを参照してください。

2.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);

2.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のコード・サンプルを検出できます。

第2.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.client共有ライブラリの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で入手できます。

2.5.1 開発の概要

次の各項では、usermessagingsample-ejb.earを例にして、アウトバウンド・メッセージング機能を持つアプリケーションの作成プロセスを説明します。

1. 第2.5.2項「電子メール・ドライバの構成」

2. 第2.5.3項「JDeveloper 11gを使用したアプリケーションの作成」

3. 第2.5.4項「アプリケーションのデプロイ」

4. 第2.5.5項「アプリケーションのテスト」

2.5.2 電子メール・ドライバの構成

Oracle User Messaging Serviceの電子メール・ドライバを有効にしてアウトバウンド・メッセージングおよびステータスの取得を実行するには、電子メール・ドライバを次のように構成します。

- OutgoingMailServerプロパティの値として、SMTPメール・サーバーの名前を入力します。

注意:

このサンプル・アプリケーションは汎用的であるため、適切なメッセージング・ドライバがデプロイされて構成されている場合は、他のチャネル経由のアウトバウンド・メッセージングもサポートできます。

2.5.3 JDeveloper 11gを使用したアプリケーションの作成

この項では、Windowsベース・ビルドのJDeveloperを使用して、usermessagingsampleを作成、コンパイルおよびデプロイする手順を説明します。

2.5.3.1 プロジェクトを開く

1. Oracle JDeveloperで、usermessagingsample.jws(.zipファイルに含まれています)を開きます。

図2-1 Oracle JDeveloperのメイン・ウィンドウ

Oracle JDeveloperのメイン・ウィンドウにプロジェクトが表示されます。

2. Webモジュールで「Oracle UMS Client」ライブラリが使用されていることを確認して、サンプル・アプリケーションのビルド依存性を満たします。

1. 「アプリケーション・ナビゲータ」で、Webモジュール「usermessagingsample-web」を右クリックし、「プロジェクト・プロパティ」を選択します。

2. 左側のペインで、「ライブラリとクラスパス」を選択します。

図2-2 ライブラリの確認

3. 「OK」をクリックします。

3. usermessagingclient-ejbプロジェクトがアプリケーションに存在していることを確認します。これは、UMSアプリケーションで使用するメッセージング・クライアントBeanをパッケージ化したEnterprise JavaBeansモジュールです。このモジュールによって、アプリケーションはUMSサーバーに接続できます。

4. usermessagingsample-webプロジェクトの下にあるJavaファイルを検索し、メッセージング・クライアントAPIを使用してメッセージの送信、ステータスの取得およびメッセージの同期受信を実行する方法を確認します。UMSサーバーに登録されるアプリケーション情報は、プロジェクトのSampleUtils.javaにプログラムによって指定されます(例2-10)。

例2-10 アプリケーション情報

ApplicationInfo appInfo = new ApplicationInfo();
appInfo.setApplicationName(SampleConstants.APP_NAME);
appInfo.setApplicationInstanceName(SampleConstants.APP_INSTANCE_NAME);
appInfo.setSecurityPrincipal(request.getUserPrincipal().getName());

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

アプリケーションをデプロイする手順は、次のとおりです。

1. ナビゲーション・ペインでアプリケーションを右クリックし、「新規」を選択して、アプリケーション・サーバー接続を作成します。第2.7項「新規アプリケーション・サーバー接続の作成」の説明に従います。

2. アプリケーションをデプロイするには、「usermessagingsample application」→「デプロイ」→「usermessagingsample」→「デプロイ先」→「SOA_server」の順に選択します(図2-3)。

図2-3 プロジェクトのデプロイ

3. メッセージBuild Successfulがログに表示されていることを確認します。

4. メッセージDeployment Finishedがデプロイメント・ログに表示されていることを確認します。
アプリケーションが正常にデプロイされました。

サンプルを実行するには、その前に、Oracle User Messaging Serviceの追加ドライバを構成し、必要に応じて、ユーザー通信プリファレンスでメッセージを受信するユーザー用のデフォルト・デバイスを構成する必要があります。

注意:

詳細は、『Oracle User Messaging Serviceの管理』を参照してください。

2.5.5 アプリケーションのテスト

Oracle WebLogic Serverの実行中のインスタンスにusermessagingsampleをデプロイした後は、次の手順を実行します。

1. Webブラウザを起動し、サンプル・アプリケーションのアドレスをhttp://host:http-port/usermessagingsample/と入力します。たとえば、ブラウザのナビゲーション・バーにhttp://localhost:7001/usermessagingsample/と入力します。
プロンプトが表示された場合は、ログイン資格証明を入力します。たとえば、ユーザー名はweblogicと入力します。メッセージ・サンプルをテストするためのブラウザ・ページが表示されます(図2-4)。

図2-4 サンプル・アプリケーションのテスト

2. サンプル・メッセージの送信をクリックします。「メッセージの送信」ページが表示されます(図2-5)。

図2-5 テスト・メッセージのアドレス指定

3. (オプション)送信者アドレスを次の書式で入力します。
Email:sender_address

たとえば、Email:sender@example.comと入力します。

4. 受信者アドレスを1つ以上入力します。たとえば、Email:recipient@example.comと入力します。複数のアドレスを入力する場合は、次のようにカンマ区切りリストで入力します。
Email:recipient_address1, Email:recipient_address2

ユーザー通信プリファレンスを構成している場合、メッセージのアドレスは単にUser:usernameと指定できます。たとえば、User:testuser1と入力します。

5. (オプション)件名、つまり電子メールの内容を入力します。

6. 「送信」をクリックします。メッセージ・ステータス・ページが表示され、トランザクションの進捗が表示されます(図2-6には、メッセージング・エンジンが受信して処理するメッセージが表示されています)。

図2-6 メッセージ・ステータス

7. リフレッシュをクリックしてステータスを更新します。電子メール・メッセージが電子メール・サーバーに配信されると、「ステータスの内容」フィールドに「リモート・ゲートウェイへのアウトバウンド・メッセージの配信に成功しました。」と表示されます。

2.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.client共有ライブラリの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で入手できます。

2.6.1 開発の概要

次の各項では、usermessagingsample-echo-ejb.earを例にして、非同期のインバウンドおよびアウトバウンド・メッセージング機能を持つアプリケーションの作成プロセスを説明します。

1. 第2.6.2項「電子メール・ドライバの構成」

2. 第2.6.3項「JDeveloper 11gを使用したアプリケーションの作成」

3. 第2.6.4項「アプリケーションのデプロイ」

4. 第2.6.5項「アプリケーションのテスト」

2.6.2 電子メール・ドライバの構成

Oracle User Messaging Serviceの電子メール・ドライバを有効にしてインバウンドやアウトバウンド・メッセージングおよびステータスの取得を実行するには、電子メール・ドライバを次のように構成します。

- OutgoingMailServerプロパティの値として、SMTPメール・サーバーの名前を入力します。

- IncomingMailServerプロパティの値として、IMAP4/POP3メール・サーバーの名前を入力します。受信ユーザー名とパスワードも構成します。

注意:

このサンプル・アプリケーションは汎用的であるため、適切なメッセージング・ドライバがデプロイされて構成されている場合は、他のチャネル経由のインバウンドおよびアウトバウンド・メッセージングもサポートできます。

2.6.3 JDeveloper 11gを使用したアプリケーションの作成

この項では、Windowsベース・ビルドのJDeveloperを使用して、usermessagingsample-echoを作成、コンパイルおよびデプロイする手順を説明します。

2.6.3.1 プロジェクトを開く

1. usermessagingsample.echo-src.zipをJDEV_HOME/communications/samples/ディレクトリに解凍します。共有ライブラリ参照をプロジェクトで有効にするには、このディレクトリを使用する必要があります。

注意:

別のディレクトリを使用する場合は、oracle.sdp.clientライブラリ・ソース・パスをJDEV_HOME/
communications/modules/oracle.sdp.client_12.1.2/
sdpclient.jarに更新する必要があります。

2. Oracle JDeveloperで、usermessagingsample-echo.jws(.zipファイルに含まれています)を開きます。
Oracle JDeveloperのメイン・ウィンドウにプロジェクトが表示されます(図2-7)。

図2-7 Oracle JDeveloperのメイン・ウィンドウ

3. 次のライブラリがusermessagingsample-echo-webおよびusermessagingsample-echo-ejbモジュールに追加されていることを確認して、サンプル・アプリケーションのビルド依存性が満たされていることを確認します。

- ライブラリ: oracle.sdp.client、クラスパス: JDEV_HOME/
communications/modules/oracle.sdp.client_12.1.2/
sdpclient.jar。これはJavaライブラリで、UMS、およびUMSを使用してメッセージを送受信するアプリケーションで使用されます。

各モジュールに対して次の手順を実行します。

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

2. 左側のペインで、「ライブラリとクラスパス」を選択します(図2-8)。

図2-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ファイルに宣言的に指定されることに注意してください(例2-11)。

例2-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.client.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.client.sample.ejbApp.ClientReceiverHomeLocal</env-e
ntry-value>
</env-entry>

8. アプリケーション名(UMSEchoApp)とアプリケーション・インスタンス名(UMSEchoAppInstance)は、MessageDispatcherBean MDBのメッセージ・セレクタでも使用されることに注意してください。このメッセージ・セレクタは、アプリケーション受信キューに配置されたメッセージとステータスの非同期受信で使用されます(例2-12)。

例2-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>

注意:

自身のアプリケーションに対して別のアプリケーション名とアプリケーション・インスタンス名を選択した場合は、このメッセージ・セレクタを更新する必要があります。そうしないと、非同期受信が機能しません。

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

アプリケーションをデプロイする手順は、次のとおりです。

1. ナビゲーション・ペインでアプリケーションを右クリックし、「新規」を選択して、アプリケーション・サーバー接続を作成します。第2.7項「新規アプリケーション・サーバー接続の作成」の説明に従います。

2. アプリケーションをデプロイするには、「usermessagingsample-echo application」→「デプロイ」→「usermessagingsample-echo」→「デプロイ先」→「SOA_server」の順に選択します(図2-9)。

図2-9 プロジェクトのデプロイ

3. メッセージBuild Successfulがログに表示されていることを確認します。

4. メッセージDeployment Finishedがデプロイメント・ログに表示されていることを確認します。
アプリケーションが正常にデプロイされました。

サンプルを実行するには、その前に、Oracle User Messaging Serviceの追加ドライバを構成し、必要に応じて、ユーザー通信プリファレンスでメッセージを受信するユーザー用のデフォルト・デバイスを構成する必要があります。

注意:

詳細は、『Oracle User Messaging Serviceの管理』を参照してください。

2.6.5 アプリケーションのテスト

Oracle WebLogic Serverの実行中のインスタンスにusermessagingsample-echoをデプロイした後は、次の手順を実行します。

1. Webブラウザを起動し、サンプル・アプリケーションのアドレスをhttp://host:http-port/usermessagingsample-echo/と入力します。たとえば、ブラウザのナビゲーション・バーにhttp://localhost:7001/usermessagingsample-echo/と入力します。
プロンプトが表示された場合は、ログイン資格証明を入力します。たとえば、ユーザー名はweblogicと入力します。メッセージ・サンプルをテストするためのブラウザ・ページが表示されます(図2-10)。

図2-10 サンプル・アプリケーションのテスト

2. アクセス・ポイントの登録/登録解除をクリックします。「アクセス・ポイントの登録」ページが表示されます(図2-11)。

図2-11 アクセス・ポイントの登録

3. アクセス・ポイントのアドレスを次の書式で入力します。
EMAIL:server_address

たとえば、EMAIL:myserver@example.comと入力します。

4. アクションとして登録を選択し、送信をクリックします。登録ステータス・ページが表示され、図2-12に示すように登録済と表示されます。

図2-12 アクセス・ポイントの登録ステータス

5. メッセージ・クライアント(電子メールの場合は電子メール・クライアント)から、前の手順でアクセス・ポイントとして登録したアドレスに、メッセージを送信します。
該当するチャネル用のUMSメッセージング・ドライバが正しく構成されている場合は、usermessagingsample-echoアプリケーションから戻されるエコー・メッセージを受信できるはずです。

2.7 新規アプリケーション・サーバー接続の作成

第A.3項「新規アプリケーション・サーバー接続の作成」の手順を実行し、アプリケーション・サーバー接続を作成します。

3 ユーザー・メッセージング・サービスJava APIを使用したメッセージの送受信

この章では、ユーザー・メッセージング・サービス(UMS)クライアントAPIを使用してアプリケーションを開発する方法について説明します。このAPIは、Fusion Middlewareアプリケーション開発者がメッセージ機能をエンタープライズ・アプリケーション内に組み込む際のプログラム上のエントリ・ポイントとして機能します。

クラスとインタフェースの詳細は、ユーザー・メッセージング・サービスJava APIリファレンスを参照してください。

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

- 第3.1項「UMS Java APIの概要」

- 第3.2項「UMSクライアント・インスタンスの作成とランタイム・パラメータの指定」

- 第3.3項「メッセージの送信」

- 第3.4項「メッセージ・ステータスの取得」

- 第3.5項「メッセージの受信」

- 第3.6項「クラスタ環境の構成」

- 第3.7項「XAトランザクションに対するUMSクライアントAPIの使用」

- 第3.8項「UMS Java APIを使用したメッセージ再送信の指定」

- 第3.9項「セキュリティの構成」

- 第3.10項「スレッド・モデル」

このAPIには、Plain Old Java (POJO/POJI)プログラミング・モデルが用意されており、アプリケーション開発者は、UMS機能にアクセスするためにアプリケーションで様々なJava EEモジュール(EJBモジュールなど)をパッケージ化して実装する必要がありません。開発者はモジュールの追加パッケージ化を実行したり、パッケージ・タスクを実行するための特別なツールを取得せずに、Java EEコンテナで実行するアプリケーションを作成できるため、開発時間が削減されます。

UMS Java APIのコンシューマは、環境エントリや他のJava EEデプロイメント・ディスクリプタ・アーティファクトなどのJava EEメカニズムを使用する必要がありません。Java EEディスクリプタの管理に関するオーバーヘッドの他に、多くのクライアント・アプリケーションには、Java EEディスクリプタに依存しない構成フレームワークがあります。

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、次の場所にあるサンプルを参照してください。

http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.html

3.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: アプリケーションでMessagingFilterを使用すると、配信されるメッセージをより強力に制御できます。

ソース・コードを含むサンプルは、Oracle Technology Network (OTN)から入手できます。

3.2 UMSクライアント・インスタンスの作成とランタイム・パラメータの指定

この項では、UMSクライアントを作成するための要件を説明します。MessagingClientインスタンスは、MessagingClientFactoryクラスのコードを使用して作成できます。具体的には、このインスタンスの作成にはMessagingClientFactory.createMessagingClient()メソッドを使用します。

クライアント・アプリケーションでは、クライアント・オブジェクトのインスタンス化の実行時に一連のパラメータを指定できます。たとえば、MessagingClientインスタンスを構成するには、複数のパラメータをキーと値のペアのマップとしてjava.util.Map<String, Object>に指定します。特に、これらの構成パラメータは、クライアント・アプリケーションの識別、UMSサーバーの指定およびセキュリティ資格証明の確立に役立ちます。クライアント・アプリケーションでは、使用可能なメカニズムを使用して構成パラメータを保存およびロードする必要があります。

表3-1に、Java APIに設定可能な構成パラメータの一部を示します。通常のユースケースでは、ほとんどのパラメータは指定する必要がなく、APIの実装では適切なデフォルト値が使用されます。

表3-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リスナーなど一部のリソースがアクティブのまま残る場合があります。

例3-1に、プログラミングによってMessagingClientインスタンスを作成する場合のコードを示します。

例3-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クラスの新しいインスタンスを作成する必要があります。

MessagingClientFactoryクラスのAPIリファレンスには、Javadocからアクセスできます。

3.3 メッセージの送信

クライアント・アプリケーションでは、次に示すもののMessagingFactoryクラスを使用してメッセージ・オブジェクトを作成できます: oracle.sdp.messaging.MessagingFactory。このクラスの他のメソッドを使用して、Addresses、AccessPoints、MessageFiltersおよびMessageQueriesを作成できます。これらのメソッドの詳細は、ユーザー・メッセージング・サービスJava APIリファレンスを参照してください。

これで、クライアント・アプリケーションではメッセージを送信できます。APIは、メッセージの配信ステータスを取得するために後でクライアント・アプリケーションで使用できる文字列識別子を戻します。戻されたステータスは、UMSの内部処理と外部ゲートウェイから受信した配信通知に基づいた最新のステータスです。

作成できるメッセージのタイプには、プレーン・テキスト・メッセージ、text/plainパートとtext/htmlパートで構成できるマルチパート・メッセージ、および異なる配信タイプを使用して、複数受信者用の単一メッセージに配信チャネル(DeliveryType)固有のペイロードを作成するメッセージがあります。

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

- メッセージの作成

- メッセージのアドレス指定

- グループ・メッセージの送信

- ユーザー・プリファレンス・ベースのメッセージング

3.3.1 メッセージの作成

この項では、作成できる様々なタイプのメッセージについて説明します。

3.3.1.1 プレーン・テキスト・メッセージの作成

例3-2に、UMS Java APIを使用してプレーン・テキスト・メッセージを作成する方法を示します。

例3-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");

3.3.1.2 Text/PlainパートとText/HTMLパートを持つマルチパート/代替メッセージの作成

例3-3に、UMS Java APIを使用してマルチパート・メッセージまたは代替メッセージを作成する方法を示します。

例3-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");

3.3.1.3 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

メッセージを宛先アドレスに送信する際は、複数のチャネルが関連する場合があります。Oracle UMSアプリケーション開発者は、各チャネルに対して正しいマルチパート書式を指定する必要があります。

例3-4に、異なる配信タイプを使用して、複数受信者用の単一メッセージに、配信チャネル(DeliveryType)固有のペイロードを作成する方法を示します。

複数ペイロードのマルチパート/代替メッセージの各最上位パートには、このヘッダーの値が1つ以上含まれている必要があります。このヘッダーの値は、有効な配信タイプの名前である必要があります。DeliveryTypeの使用可能な値は、列挙DeliveryTypeを参照してください。

例3-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);

クラスMessagingFactory、インタフェースMessageおよび列挙DeliveryTypeのAPIリファレンスには、ユーザー・メッセージング・サービスJava APIリファレンスからアクセスできます。

3.3.2 メッセージのアドレス指定

この項では、アドレスのタイプおよびAddressオブジェクトの作成方法について説明します。

3.3.2.1 アドレスのタイプ

アドレスには、デバイス・アドレスとユーザー・アドレスの2種類があります。デバイス・アドレスには、電子メール・アドレス、インスタント・メッセージ・アドレス、電話番号など、様々なタイプがあります。ユーザー・アドレスは、ユーザー・リポジトリにあるユーザーIDです。

3.3.2.2 Addressオブジェクトの作成

Addressインタフェースで定義するAddressオブジェクトは、MessagingFactoryクラスを使用してメッセージの送信者と受信者のアドレスを指定することで作成できます。

3.3.2.2.1 単一のAddressオブジェクトの作成

例3-5に、単一のAddressオブジェクトを作成するコードを示します。

例3-5 単一のAddressオブジェクトの作成

Address recipient = MessagingFactory.createAddress("Email:john@example.com");

3.3.2.2.2 1つのバッチ内での複数のAddressオブジェクトの作成

例3-6に、1つのバッチ内に複数のAddressオブジェクトを作成するコードを示します。

例3-6 1つのバッチ内での複数のAddressオブジェクトの作成

String[] recipientsStr = {"Email:john@example.com", "SMS:123456"};
Address[] recipients = MessagingFactory.createAddress(recipientsStr);

3.3.2.2.3 メッセージへの送信者または受信者のアドレスの追加

例3-7に、送信者または受信者のアドレスをメッセージに追加するコードを示します。

例3-7 メッセージへの送信者または受信者のアドレスの追加

Address sender = MessagingFactory.createAddress("Email:john@example.com");
Address recipient = MessagingFactory.createAddress("Email:jane@example.com");
message.addSender(sender);
message.addRecipient(recipient);

3.3.2.3 フェイルオーバー・アドレスを使用した受信者の作成

例3-8に、フェイルオーバー・アドレスを使用して受信者を作成するコードを示します。

例3-8 フェイルオーバーを使用した単一のAddressオブジェクトの作成

String recipientWithFailoverStr = "Email:john@example.com, SMS:123456";
Address recipient = MessagingFactory.createAddress(recipientWithFailoverStr);

3.3.2.4 MessagingFactoryクラスのAPIリファレンス

クラスMessagingFactoryのAPIリファレンスには、ユーザー・メッセージング・サービスJava APIリファレンスからアクセスできます。

3.3.2.5 AddressインタフェースのAPIリファレンス

インタフェースAddressのAPIリファレンスには、ユーザー・メッセージング・サービスJava APIリファレンスからアクセスできます。

3.3.3 グループ・メッセージの送信

メッセージをユーザー・グループに送信するには、グループURIに送信するか、LDAPグループ(またはエンタープライズ・ロール)およびアプリケーション・ロールに送信します。

3.3.3.1 グループへのメッセージ送信

メッセージをLDAPグループまたはエンタープライズ・ロールに送信できます。メッセージは、各ユーザーの電子メール・アドレスをフェッチすることにより、ユーザーに解決されます。グループ内で指定されている特定ユーザーの電子メール・アドレスが存在しない場合、そのユーザーはスキップされます。

メッセージをグループに送信するには、例3-9で示されているように、MessagingFactoryプロパティを使用して、GROUPタイプの受信者アドレスを作成し、メッセージを送信します。

例3-9 メッセージの作成とグループへのアドレス指定

Address groupAddr = MessagingFactory.createAddress("GROUP:MyGroup");
Message message = MessagingFactory.createTextMessage("Sending message to a group");
message.addRecipient(groupAddr);
message.setSubject("Testing groups");
String id = messagingClient.send(message);

グループ・アドレスgroupAddrは、最終的にはユーザー・アドレスで置換され、例3-10で示されているような結果になります。

例3-10 ユーザー・アドレスで置換されたグループ・アドレス

Address groupMember1 = MessagingFactory.createAddress("USER:MyGroupMember1");
Address groupMember2 = MessagingFactory.createAddress("USER:MyGroupMember2");
Address groupMember3 = MessagingFactory.createAddress("USER:MyGroupMember3");
Message message = MessagingFactory.createTextMessage("Sending message to a group");
message.addRecipient(groupMember1);
message.addRecipient(groupMember2);
message.addRecipient(groupMember3);
message.setSubject("Testing groups");
String id = messagingClient.send(message);

3.3.3.2 特定チャネル経由でのメッセージのグループへの送信

グループ・メッセージの送信前に送信チャネルを指定できます。グループ・メッセージの送信チャネルを指定するには、例3-11で示されているように、グループ・アドレス(groupAddr)のDeliveryTypeプロパティを設定する必要があります。

例3-11 メッセージの作成とチャネル経由でのグループへのアドレス指定

Address groupAddr = MessagingFactory.createAddress("GROUP:MyGroup");
groupAddr.setDeliveryType(DeliveryType.EMAIL);
Message message = MessagingFactory.createTextMessage("Sending message to a group");
message.addRecipient(groupAddr);
message.setSubject("Testing groups through email");
String id = messagingClient.send(message);

3.3.3.3 メッセージのアプリケーション・ロールへの送信

アプリケーション・ロールは、ユーザー、グループおよびその他のアプリケーション・ロールの集まりであり、階層構造にできます。アプリケーション・ロールはアプリケーション・ポリシーによって定義されます。JavaEEコンテナに認識されるとは限りません。アプリケーション・ロールの詳細は、『Oracle Fusion Middlewareアプリケーション・セキュリティ・ガイド』を参照してください。

注意:

アプリケーション・ロールは、次のロールなど、他のアプリケーション・ロールにマップできます。

- 認証ロール: 認証に成功したユーザー。受信者が多くなる場合があります。

- 匿名ロール: このロールの受信者はいません。

メッセージをアプリケーション・ロールに送信するには、MessagingFactoryプロパティを使用することにより、APPROLEタイプの受信者アドレスを作成する必要があります。その後、メッセージを送信する必要があります。アプリケーション・ロールはアプリケーションID (アプリケーション名またはアプリケーション・ストライプとも呼ばれます)に属します。したがって、例3-12で示されているように、これら両方のパラメータが受信者アドレス内に指定されている必要があります。

例3-12 メッセージの作成とアプリケーション・ロールへのアドレス指定

Address appRoleAddr =
MessagingFactory.createAppRoleAddress("myAppRole", "theAppId");
Message message = MessagingFactory.createTextMessage("Message to an application role");
message.addRecipient(appRoleAddr);
message.setSubject("Testing application roles");
String id = messagingClient.send(message);

アプリケーション・ロールAPPROLEは、最終的にユーザー・アドレスで置換されます。ただし、アプリケーションIDがコール元アプリケーションのIDである場合は、受信者アドレスの作成時に、アプリケーションIDを指定する必要はありません。UMSは、JpsFilter(web.xml)またはJpsInterceptor(ejb-jar.xml)のapplication.nameパラメータで指定されているアプリケーションIDを自動的にフェッチします。詳細は、『Oracle Fusion Middlewareアプリケーション・セキュリティ・ガイド』を参照してください。

3.3.3.4 特定チャネル経由でのメッセージのアプリケーション・ロールへの送信

ユーザーは、グループにメッセージを送信する場合のチャネル指定と同じようにして、送信メッセージ用チャネルを指定できます。アプリケーション・ロール・アドレスで配信タイプを設定する必要があります。

電子メールを配信チャネルとして指定するアプリケーション・ロールにメッセージを送信する例を次に示します。

例3-13 メッセージの作成とチャネル経由でのアプリケーションへのアドレス指定

Address appRoleAddr =
MessagingFactory.createAppRoleAddress("myAppRole", "theAppId");
appRoleAddr.setDeliveryType(DeliveryType.EMAIL);
Message message = MessagingFactory.createTextMessage("Message to an application role");
message.addRecipient(appRoleAddr);
message.setSubject("Testing application roles");
String id = messagingClient.send(message);

3.3.4 ユーザー・プリファレンス・ベースのメッセージング

ユーザー受信者にメッセージを送信(してユーザーのメッセージング・プリファレンスを活用)する際、メッセージで様々なビジネス条件の現在の値をメタデータとして渡すことができます。UMSサーバーでは、メッセージで指定されたファクトを、ユーザーのメッセージング・フィルタで指定されているビジネス条件の条件と照合します。

注意:

すべてのファクトはメタデータとしてMessage.NAMESPACE_NOTIFICATION_PREFERENCES名前空間に追加する必要があります。他の名前空間のメタデータは(ユーザー通信プリファレンスの解決においては)無視されます。

図3-14は、ユーザー受信者を指定し、メッセージのユーザー・プリファレンスでビジネス条件のファクトを指定する方法を示します。サポートされているビジネス条件の完全なリストは、第6章「ユーザー通信プリファレンス」を参照してください。

例3-14 ユーザー・プリファレンス・ベースのメッセージング

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).

3.4 メッセージ・ステータスの取得

メッセージを送信した後は、Oracle UMSを使用して、メッセージ・ステータスを同期または非同期で取得できます。

3.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.

3.4.2 メッセージ・ステータスの非同期取得

ステータスを非同期で受信する場合は、クライアント・アプリケーションによってListenerオブジェクトとオプションの相関機能オブジェクトが指定されます。受信ステータスが着信すると、リスナーのonStatusコールバックが起動されます。当初指定の相関機能オブジェクトもコールバック・メソッドに渡されます。

3.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メソッドが必要に応じて起動されます。

3.4.2.2 デフォルトのステータス・リスナー

クライアント・アプリケーションでは通常、デフォルトのステータス・リスナー(例3-15)が設定されます。クライアント・アプリケーションでメッセージが送信されると、そのメッセージの配信ステータス・コールバックによって、デフォルト・リスナーのonStatusメソッドが起動されます。

例3-15 デフォルトのステータス・リスナー

messagingClient.setStatusListener(new MyStatusListener());
messagingClient.send(message);

3.4.2.3 メッセージごとのステータス・リスナー

この方法では、クライアント・アプリケーションによってメッセージが送信され、リスナー・オブジェクトとオプションの相関機能オブジェクトが指定されます(例3-16)。該当するメッセージに対して配信ステータス・コールバックが使用できる場合は、指定したリスナーのonStatusメソッドが起動されます。当初指定の相関機能オブジェクトもコールバック・メソッドに渡されます。

例3-16 メッセージごとのステータス・リスナー

messagingClient.send(message, new MyStatusListener(), null);

3.5 メッセージの受信

この項では、アプリケーションでメッセージを受信する方法について説明します。メッセージを受信するには、最初にアクセス・ポイントを登録する必要があります。

着信メッセージを受信するアプリケーションでは、メッセージの受信者アドレスを表すアクセス・ポイントを1つ以上登録する必要があります。サーバーでは、着信メッセージの受信者アドレスと一連の登録済アクセス・ポイントを照合し、一致したアクセス・ポイントを登録したアプリケーションに、その着信メッセージをルーティングします。アプリケーション側から見ると、メッセージを受信するモードには同期と非同期があります。

3.5.1 アクセス・ポイントの登録

クライアント・アプリケーションではアクセス・ポイントを作成して登録し、特定のアドレスに送信された着信メッセージを受信するように指定できます。クライアント・アプリケーションにはメッセージ・リスナーが指定されていないため、受信したすべてのメッセージはUMSに保持されます。この場合、クライアント・アプリケーションでは、受信メソッドを起動して保留中のメッセージをフェッチできます。アクセス・ポイントの指定なしでメッセージを受信した場合、アプリケーションでは、登録したすべてのアクセス・ポイントのメッセージを受信します。そうでない場合、アプリケーションでは、そのアクセス・ポイントに送信されたメッセージを受信します。

AccessPointは、着信メッセージを受信するための1つ以上のデバイス・アドレスを表します。

MessagingFactory.createAccessPointを使用してアクセス・ポイントを作成し、そのアクセス・ポイントをMessagingClient.registerAccessPointを使用してメッセージ受信用に登録できます。

電子メールのアクセス・ポイントを登録するには、次のように指定します。

Address apAddress = MessagingFactory.createAddress("EMAIL:user1@example.com");
AccessPoint ap = MessagingFactory.createAccessPoint(apAddress);
MessagingClient.registerAccessPoint(ap);

番号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);

3.5.2 同期受信

受信は非ブロック操作です。アプリケーションやアクセス・ポイントに関して保留中のメッセージがない場合、該当するコールでは、NULLが即時に戻されます。受信によって、すべての使用可能なメッセージが戻される保証はありませんが、効率上の理由から使用可能なメッセージのサブセットのみを戻すことはできます。

メソッドMessagingClient.receiveを使用して、UMSがアプリケーションで使用可能にしたメッセージを同期受信できます。このメソッドは、メッセージの非同期受信による構成オーバーヘッドを望まない軽量なクライアント向けの便利なポーリング・メソッドです。このメソッドは、アプリケーションのインバウンド・キューですぐに使用できるメッセージの配列を戻します。

注意:

1回の起動で、使用可能なメッセージがすべて取得される保証はありません。ポーリングして、使用可能なすべてのメッセージを受信したことを確認する必要があります。

3.5.3 非同期受信

メッセージを非同期で受信する場合は、クライアント・アプリケーションによってアクセス・ポイントが登録され、Listenerオブジェクトとオプションの相関機能オブジェクトが指定されます。受信メッセージが指定のアクセス・ポイント・アドレスに着信すると、リスナーのonMessageコールバックが起動されます。当初指定の相関機能オブジェクトもコールバック・メソッドに渡されます。

3.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メソッドが起動されます。

3.5.3.2 デフォルトのメッセージ・リスナー

クライアント・アプリケーションでは通常、デフォルトのメッセージ・リスナー(例3-17)が設定されます。このリスナーは、このクライアント・アプリケーションによって送信されたメッセージの中で、関連するリスナーがないメッセージの配信ステータスに対して起動されます。Oracle UMSでは、このクライアント・アプリケーションによって登録されたアクセス・ポイント宛てのメッセージを受信すると、そのクライアント・アプリケーションのデフォルトのリスナーに対してonMessageコールバックが起動されます。

デフォルトのリスナーを削除するには、nullの引数を指定してこのメソッドをコールします。

例3-17 デフォルトのメッセージ・リスナー

messagingClient.setMessageListener(new MyListener());

非同期受信の詳細な手順については、サンプル・アプリケーションusermessagingsample-echoを参照してください。

3.5.3.3 アクセス・ポイントごとのメッセージ・リスナー

クライアント・アプリケーションでは、アクセス・ポイントを登録し、Listenerオブジェクトとオプションの相関機能オブジェクトを指定できます(例3-18)。受信メッセージが指定のアクセス・ポイント・アドレスに着信すると、指定したリスナーのonMessageメソッドが起動されます。当初指定の相関機能オブジェクトもコールバック・メソッドに渡されます。

例3-18 アクセス・ポイントごとのメッセージ・リスナー

messagingClient.registerAccessPoint(accessPoint, new MyListener(), null);

3.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);

3.6 クラスタ環境の構成

APIでは、クラスタ環境にクライアント・アプリケーションとUMSサーバーがデプロイされている環境をサポートしています。クラスタ化されたデプロイメントが期待どおりに機能するためには、クライアント・アプリケーションを正しく構成する必要があります。次のルールが適用されます。

- 2つのクライアント・アプリケーションで同じApplicationName構成パラメータが使用されている場合、それらは同じアプリケーションのインスタンスであるとみなされます。通常、このパラメータはAPI実装によって統合されているため、アプリケーション開発者による移入は不要です。

- 同じアプリケーションのインスタンスでは、それらの構成のほとんどが共有され、1つのインスタンスによって登録されたAccessポイントやメッセージ・フィルタなどのアーティファクトは、すべてのインスタンスによって共有されます。

- ApplicationInstanceName構成パラメータを使用すると、各インスタンスを区別できます。通常、このパラメータはAPI実装によって統合されているため、アプリケーション開発者による移入は不要です。この値を移入する必要がある場合については、Javadocを参照してください。

- アプリケーション・セッションは、インスタンス固有です。メッセージにセッション・フラグを設定すると、メッセージを送信したインスタンスが受信した返信を確認できます。

- リスナー相関機能は、インスタンス固有です。1つのアプリケーションの2つの異なるインスタンスで複数のリスナーが登録され、異なる相関機能が提供されている場合は、インスタンスAのリスナーが起動されると相関機能Aが提供され、インスタンスBのリスナーが起動されると相関機能Bが提供されます。

3.7 XAトランザクションに対するUMSクライアントAPIの使用

UMSは、アウトバウンド・メッセージとインバウンド・メッセージのXA対応トランザクションに対するサポートを提供します。業界標準であるX/Open XAプロトコルは、Business Process Management (BPM)など、他のOracle製品でも幅広くサポートされています。

注意:

XAサポート機能は、UMSサーバーおよびUMSクライアントに含まれているので、インストールする必要はありません。また、XAサポートは、WebサービスAPIではなく、POJO APIでのみ可能です。

3.7.1 XAトランザクションについて

Java Messaging Service (JMS)は、エンタープライズ・メッセージングの概念と機能の共通セットを定義します。これは、User Messaging Service (UMS)でのメッセージング、キューイング、ソートおよびルーティング用に使用されます。Java Transaction API (JTA)は、トランザクション・マネージャと分散トランザクション・システム(アプリケーション、リソース・マネージャおよびアプリケーション・サーバー)に関わるパーティ間のローカルJavaインタフェースを指定します。JTAパッケージは、次の3つのコンポーネントで構成されます。

- トランザクション・アプリケーションがトランザクションの境界を設定できるようにする上位アプリケーション・インタフェース。

- トランザクション・リソース・マネージャが、外部トランザクション・マネージャによって制御されるグローバル・トランザクションに参加できるようにする業界標準X/Open XAプロトコルのJavaマッピング。

- アプリケーション・サーバーが、アプリケーション・サーバーによって管理されるアプリケーションのトランザクション境界設定を制御できるようにする上位トランザクション・マネージャ・インタフェース。

JTAは、XAトランザクション(分散トランザクションとも呼ばれます)をサポートするためJava Messaging Service (JMS)プロバイダによって使用されます。XAリソース・インタフェースをサポートするJMSプロバイダは、2フェーズ・コミット・トランザクション・プロトコルを使用する分散トランザクション処理システムに、リソース・マネージャとして参加できます。

3.7.2 XA対応メッセージの送受信

XAサポートにより、UMSは、トランザクションがコミットされるときにのみトランザクション境界内からメッセージを送信できます。トランザクションがロールバックされると、メッセージの送信は失敗します。コミットはトランザクションの成功につながりますが、ロールバックではメッセージは変更されないままになります。UMSは、アウトバウンド・メッセージとインバウンド・メッセージ両方に対するXAトランザクション・サポートを提供します。

XAを使用したアウトバウンド・メッセージング

UMSクライアント・アプリケーションからUMSサーバー経由で受信者に送信されるメッセージは、アウトバウンド・メッセージと呼ばれます。XAトランザクションがUMSクライアント上で有効な場合、アウトバウンド・メッセージは、トランザクションがコミットされた場合のみ、UMSサーバーに送信されます。トランザクションが成功すると、メッセージは安全に格納され、受信者への配信準備が整った状態になります。クライアント・トランザクションがコミットに失敗し、ロールバックが発生すると、メッセージは配信に向けてUMSサーバーに送信されません。

次のコードの抜粋では、XAを使用したアウトバウンド・メッセージの送信方法を示しています。

transaction.begin();
String messageID = mClient.send(message);
transaction.commit();

XAを使用したインバウンド・メッセージング

次のコードの抜粋では、XAを使用したインバウンド・メッセージの受信方法を示しています。

UMSサーバーからUMSドライバにより受信され、その後UMSクライアントにルーティングされるメッセージは、インバウンド・メッセージと呼ばれます。XAトランザクションがUMSクライアント上で有効な場合、インバウンド・メッセージは、トランザクションがコミットされた場合のみ、UMSサーバーから取得され、UMSサーバー・ストアから削除されます。トランザクション・ロールバックが発生した場合、メッセージは後で再配信できるようにUMSサーバー上で変更されないまま維持されます。

transaction.begin();
messages = mClient.receive();

for (Message receivedMessage : messages) {
// process individual messages here.
}
transaction.commit();

外部XAトランザクションがクライアントによってコミットされると、UMSドライバによって受信されたメッセージは、UMSサーバーから完全に削除されます。トランザクションがコミットに失敗し、ロールバックが発生すると、メッセージは、トランザクションのタイムアウト後に受信されます。このメッセージは、trueを返すgetJMSRedeliveredメソッドにより再配信されます。このメソッドの詳細は、ユーザー・メッセージング・サービスJava APIリファレンスを参照してください。

トランザクションのタイムアウトは、setTransactionTimeoutのコールにより変更できます。サーバー・クラッシュによりコミットに失敗したメッセージを受信するには、サーバーとクライアントを再起動するか、特定のサーバー移行手順を実行する必要があります。詳細は、『Oracle Fusion Middleware Oracle WebLogic Server JMSの構成と管理』の「拡張JMSシステム・リソースの構成」を参照してください。

XAトランザクション用リスナーの使用

メッセージの受信中にトランザクション内でリスナーを使用することもできます。これは、定数MessagingConstants.LISTENER_TRANSACTED_MODEを指定することによって行います。MessagingClientインスタンスの作成時に、この定数の値をTRUEまたはFALSEに設定します。次の例を参照してください。

注意:

リスナーを使用する場合、メッセージング定数LISTENER_TRANSACTED_MODEがTRUEに設定されていると、例外が発生しないときに、トランザクションがコミットされます。LISTENER_TRANSACTED_MODEがFALSEに設定されている場合、トランザクションは例外とは関係なくコミットされます。

トランザクションのロールバックを行う場合、例外を適切に設定してください。ListenerExceptionの詳細は、ユーザー・メッセージング・サービスJava APIリファレンスを参照してください。

例3-19 リスナーを使用したXA対応メッセージの受信

Map<String, Object> params = new HashMap<String, Object>();
params.put(MessagingConstants.LISTENER_TRANSACTED_MODE, Boolean.TRUE);
MessagingClient mClient = MessagingClientFactory.createMessagingClient(params);

mClient.registerAccessPoint(MessagingFactory.createAccessPoint(receiverAddr),
new MyListener(), null);

private class MyListener implements Listener {

@Override
public void onMessage(Message message,
Serializable correlator) throws ListenerException {

}}

メッセージ定数の詳細は、ユーザー・メッセージング・サービスJava APIリファレンスを参照してください。

XAトランザクション用EJBコールの使用

EJBコールを使用してXA対応メッセージを送信できます。トランザクションをロールバックするには、setRollbackOnly()メソッドを指定します。このメソッドの詳細は、http://docs.oracle.com/javaee/7/api/javax/ejb/EJBContext.html#setRollbackOnly()を参照してください。

また、トランザクション属性(NotSupported、RequiresNew、Neverなど)を指定して、トランザクション範囲を制御することもできます。次の場所にあるJava EEチュートリアルを参照してください。

http://docs.oracle.com/javaee/6/tutorial/doc/bncij.html

例3-20 EJBコールを使用したXA対応メッセージングの送信

Map<String, Object> params = new HashMap<String, Object>();
MessagingClient mClient =
MessagingClientFactory.createMessagingClient(params);
MimeMultipart mp = new MimeMultipart("alternative");
MimeBodyPart part1 = new MimeBodyPart();
Message message = MessagingFactory.createMessage();
...
...

mClient.sendMessage();

if(failure)
setRollbackOnly()

3.8 UMS Java APIを使用したメッセージ再送信の指定

UMSでは、メッセージ送信が失敗した場合のメッセージ再送信をスケジュールできます。次の例に示されているように、setMaxResendメソッドをコールすることにより、メッセージ再送信の最大回数を指定できます。

MessageInfo msgInfo = message.getMessageInfo();
msgInfo.setMaxResend(1);
String mid = messagingClient.send(message);

フェイルオーバー・アドレスのステータスは、getTotalFailovers()およびgetFailoverOrder()のコールにより受信できます。フェイルオーバーの順序がフェイルオーバー総数と同じになると、APIユーザーには、フェイルオーバー・チェーンがすべて使用済であることがわかります。ただし、再送信機能は、フェイルオーバー・チェーンのループとして動作します。getMaxResend()とgetCurrentResend()をコールして、再送信とフェイルオーバー・チェーンがすべて使用済となるタイミングを知ることができます。

setMaxResend、getTotalFailovers、getFailoverOrderなどのメソッドの詳細は、ユーザー・メッセージング・サービスJava APIリファレンスを参照してください。

3.9 セキュリティの構成

クライアント・アプリケーションには、セキュアなリスナーを確立するために、1つ以上の追加構成パラメータの指定が必要な場合があります(表3-1を参照)。

3.10 スレッド・モデル

通常、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セッションに同時にアクセスする可能性があります。この場合は、同期がさらに必要になります。

3.10.1 リスナー・スレッド

第3.4.2項「メッセージ・ステータスの非同期取得」と第3.5.3項「非同期受信」で説明されている非同期受信については、UMSはデフォルトで、受信メッセージ用に1つのスレッド、受信ステータス通知用に1つのスレッドを使用します(それぞれ、少なくとも1つのメッセージ・リスナーまたはステータス・リスナーが登録されているものとします)。クライアント・アプリケーションでは、追加のワーカー・スレッドを構成して非同期処理の同時性を向上させることができます。これを実行するには、MessagingConstants.MESSAGE_LISTENER_THREADSキーとMessagingConstants.STATUS_LISTENER_THREADSキーに整数値を指定し、これらの値をMessagingClientインスタンスの作成時に使用した構成パラメータで、必要なワーカー・スレッドの数に設定します。

4 ユーザー・メッセージング・サービスWebサービスAPIを使用したメッセージの送受信

この章では、ユーザー・メッセージング・サービス(UMS) WebサービスAPIを使用してアプリケーションを開発する方法について説明します。このAPIは、Fusion Middlewareアプリケーション開発者が、UMSサーバーに関連するリモート・コンテナで実行されるUMSメッセージング・アプリケーションを実装する際の、プログラム上のエントリ・ポイントとして機能します。

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

- 第4.1項「UMS WebサービスAPIの概要」

- 第4.2項「UMSクライアント・インスタンスの作成とランタイム・パラメータの指定」

- 第4.3項「メッセージの送信」

- 第4.4項「メッセージ・ステータスの取得」

- 第4.5項「メッセージの受信」

- 第4.6項「クラスタ環境の構成」

- 第4.7項「UMS WebサービスAPIを使用したメッセージ再送信の指定」

- 第4.8項「セキュリティの構成」

- 第4.9項「スレッド・モデル」

- 第4.10項「WebサービスAPIを使用したサンプル・チャット・アプリケーション」

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、次の場所にあるサンプルを参照してください。

http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.html

4.1 UMS WebサービスAPIの概要

UMS WebサービスAPIは、機能的にはJava APIと同じです。Webサービス・タイプおよびインタフェースのJAX-WSおよびJAXBバインディングは、対応するJava APIクラスと同じように命名されているものの、別個のパッケージ空間にあります。この2つのAPIのクラスには相互運用性はありません。

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)から入手できます。

4.2 UMSクライアント・インスタンスの作成とランタイム・パラメータの指定

この項では、UMSクライアントを作成するための要件を説明します。oracle.ucs.messaging.ws.MessagingClientのインスタンスはパブリック・コンストラクタを使用して作成できます。クライアント・アプリケーションでは、クライアント・オブジェクトのインスタンス化の実行時に一連のパラメータを指定できます。たとえば、MessagingClientインスタンスを構成するには、複数のパラメータをキーと値のペアのマップとしてjava.util.Map<String, Object>に指定します。特に、これらの構成パラメータは、通信先のUMSサーバーを識別することによるWebサービスのエンドポイントURLの識別、およびセキュリティ・ポリシーなどの他のWebサービス関連情報の識別に役立ちます。クライアント・アプリケーションでは、使用可能なメカニズムを使用して構成パラメータを保存およびロードする必要があります。

デプロイメントに適した構成ストレージ・メカニズムがどのようなものであっても、それへのパラメータのマッピングまたはそこからのパラメータのマッピングは、ユーザーの責任です。MessagingClientクラスでは指定されたキーと値のペアが構成のために使用され、ベースとなるJAX-WSサービスにすべてのパラメータが渡されます。JAX-WSで認識されるパラメータはいずれも有効です。表4-1に、最も一般的な構成パラメータを示します。

表4-1 実行時に指定する構成パラメータ

キー

データ型

用途

javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY

文字列

リモートUMS WSのエンドポイントURL。これは通常「http://<host>:<port>/ucs/messaging/webservice」です。

javax.xml.ws.BindingProvider.USERNAME_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クラスの新しいインスタンスを作成する必要があります。

例4-1に、ユーザー名/トークンによるセキュリティを使用して、プログラミングによってMessagingClientインスタンスを作成する場合のコードを示します。

例4-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);

例4-2に、SAMLトークンによるセキュリティを使用して、プログラミングによってMessagingClientインスタンスを作成する場合のコードを示します。

例4-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」に用意されています。

4.3 メッセージの送信

sendメソッドを起動すると、メッセージがUMSに配信されて適切に処理されます。sendメソッドは、メッセージの配信ステータスを取得したり、リスナーに配信される非同期ステータス通知と関連付けたりするために後でクライアント・アプリケーションで使用できる、String message識別子を戻します。戻されたステータスは、UMSの内部処理と外部ゲートウェイから受信した配信通知に基づいた最新のステータスです。

作成できるメッセージのタイプには、プレーン・テキスト・メッセージ、text/plainパートとtext/htmlパートで構成できるマルチパート・メッセージ、および異なる配信タイプを使用して、複数受信者用の単一メッセージに配信チャネル(DeliveryType)固有のペイロードを作成するメッセージがあります。

4.3.1 メッセージの作成

この項では、作成できる様々なタイプのメッセージについて説明します。

4.3.1.1 プレーン・テキスト・メッセージの作成

例4-3に、UMS WebサービスAPIを使用してプレーン・テキスト・メッセージを作成する2つの方法を示します。

例4-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")));

4.3.1.2 テキスト・パートとバイナリ・パートを持つマルチパート/混合メッセージの作成

例4-4に、UMS WebサービスAPIを使用してマルチパート/混合メッセージを作成する方法を示します。

例4-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()));

4.3.1.3 Text/PlainパートとText/HTMLパートを持つマルチパート/代替メッセージの作成

例4-5に、UMS WebサービスAPIを使用してマルチパート/代替メッセージを作成する方法を示します。

例4-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()));

4.3.1.4 異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成

メッセージを宛先アドレスに送信する際は、複数のチャネルが関連する場合があります。Oracle UMSアプリケーション開発者は、各チャネルに対して正しいマルチパート書式を指定する必要があります。

例4-6に、異なる配信タイプを使用して、複数受信者用の単一メッセージに、配信チャネル(DeliveryType)固有のペイロードを作成する方法を示します。

複数ペイロードのマルチパート/代替メッセージの各最上位パートには、このヘッダーの値が1つ以上含まれている必要があります。このヘッダーの値は、有効な配信タイプの名前である必要があります。DeliveryTypeの使用可能な値は、列挙DeliveryTypeを参照してください。

例4-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.client.Message.HEADER_SDPM_MULTIPLE_PAYLOAD);
multiHeader.setValue(Boolean.TRUE.toString());
message.getHeaders().add(multiHeader);

4.3.2 MessageインタフェースのAPIリファレンス

MessageインタフェースのAPIリファレンスには、Javadocからアクセスできます。

4.3.3 列挙DeliveryTypeのAPIリファレンス

列挙DeliveryTypeのAPIリファレンスには、Javadocからアクセスできます。

4.3.4 メッセージのアドレス指定

この項では、アドレスのタイプおよびAddressオブジェクトの作成方法について説明します。

4.3.4.1 アドレスのタイプ

アドレスには、デバイス・アドレスとユーザー・アドレスの2種類があります。デバイス・アドレスには、電子メール・アドレス、インスタント・メッセージ・アドレス、電話番号など、様々なタイプがあります。ユーザー・アドレスは、ユーザー・リポジトリにあるユーザーIDです。

4.3.4.2 Addressオブジェクトの作成

Addressインタフェースで定義するAddressオブジェクトは、MessagingFactoryクラスを使用してメッセージの送信者と受信者のアドレスを指定することで作成できます。

4.3.4.2.1 単一のAddressオブジェクトの作成

例4-7に、単一のAddressオブジェクトを作成するコードを示します。

例4-7 単一のAddressオブジェクトの作成

Address recipient = MessagingFactory.createAddress("Email:john@example.com");

4.3.4.2.2 1つのバッチ内での複数のAddressオブジェクトの作成

例4-8に、1つのバッチ内に複数のAddressオブジェクトを作成するコードを示します。

例4-8 1つのバッチ内での複数のAddressオブジェクトの作成

String[] recipientsStr = {"Email:john@example.com", "IM:john@example.com"};
Address[] recipients = MessagingFactory.createAddress(recipientsStr);

4.3.4.2.3 メッセージへの送信者または受信者のアドレスの追加

例4-9に、送信者または受信者のアドレスをメッセージに追加するコードを示します。

例4-9 メッセージへの送信者または受信者のアドレスの追加

Address sender = MessagingFactory.createAddress("Email:john@example.com");
Address recipient = MessagingFactory.createAddress("Email:jane@example.com");
message.addSender(sender);
message.addRecipient(recipient);

4.3.4.3 フェイルオーバー・アドレスを使用した受信者の作成

例4-10に、フェイルオーバー・アドレスを使用して受信者を作成するコードを示します。

例4-10 フェイルオーバーを使用した単一のAddressオブジェクトの作成

String recipientWithFailoverStr = "Email:john@example.com, IM:john@example.com";
Address recipient = MessagingFactory.createAddress(recipientWithFailoverStr);

4.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オブジェクトを渡します。それに対して受信者タイプを示す文字列が戻されます。

4.3.4.5 MessagingFactoryクラスのAPIリファレンス

MessagingFactoryクラスのAPIリファレンスには、Javadocからアクセスできます。

4.3.4.6 AddressインタフェースのAPIリファレンス

AddressインタフェースのAPIリファレンスには、Javadocからアクセスできます。

4.3.5 ユーザー・プリファレンス・ベースのメッセージング

ユーザー受信者にメッセージを送信(してユーザーのメッセージング・プリファレンスを活用)する際、メッセージで様々なビジネス条件のファクト(現在の値)をメタデータとして渡すことができます。UMSサーバーでは、メッセージで指定されたファクトを、ユーザーのメッセージング・フィルタで指定されているビジネス条件の条件と照合します。

注意:

すべてのファクトはメタデータとしてoracle.sdp.client.Message.NAMESPACE_NOTIFICATION_PREFERENCES名前空間に追加する必要があります。他の名前空間のメタデータは(ユーザー通信プリファレンスの解決においては)無視されます。

図4-11は、ユーザー受信者を指定し、メッセージのユーザー・プリファレンスでビジネス条件のファクトを指定する方法を示します。サポートされているビジネス条件の完全なリストは、第6章「ユーザー通信プリファレンス」を参照してください。

例4-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.client.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).

4.4 メッセージ・ステータスの取得

メッセージを送信した後は、Oracle UMSを使用して、メッセージ・ステータスを同期または非同期で取得できます。

4.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.

4.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メソッドを呼び出してクライアント・アプリケーションに通知します。

4.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!");
}
}

4.4.2.2 コールバック・サービスのパブリッシュ

コールバック・サービスをパブリッシュするには、アプリケーション内のWebモジュールのweb.xmlでサーブレットを宣言するか、またはJAX-WSのjavax.xml.ws.Endpointクラスのパブリッシュ・メソッドを使用してプログラムによりWSエンドポイントをパブリッシュします(例4-12)。

例4-12 コールバック・サービスのパブリッシュ

Listener myListener = new MyListener();
String callbackURL = "http://host:port/umswscallback";
Endpoint myEndpoint = javax.xml.ws.Endpoint.publish(callbackURL, myListener);

4.4.2.3 動的にパブリッシュされたエンドポイントの停止

動的にパブリッシュされたエンドポイントを停止するには、Endpoint.publish()から戻されたEndpointオブジェクトでstop()メソッドを呼び出します(例4-13)。

例4-13 動的にパブリッシュされたエンドポイントの停止

// When done, stop the endpoint, ideally in a finally block or other reliable cleanup mechanism
myEndpoint.stop();

4.4.2.4 登録

リスナーWebサービスがパブリッシュされると、そのようなエンドポイントがクライアントにあることを登録する必要があります。MessagingClient APIには次の関連メソッドがあります。

- setStatusListener(ListenerReference listener)

- send(Message message, ListenerReference listener, byte[] correlator)

setStatusListener()ではデフォルトのステータス・リスナーを登録し、着信ステータス・メッセージに対してはそのリスナーのコールバックが呼び出されます。send()に渡されたリスナーは、対応するメッセージに関連するステータス更新に対してのみ呼び出されます。

4.5 メッセージの受信

この項では、アプリケーションでメッセージを受信する方法について説明します。

着信メッセージを受信するアプリケーションでは、メッセージの受信者アドレスを表すアクセス・ポイントを1つ以上登録する必要があります。サーバーでは、着信メッセージの受信者アドレスと一連の登録済アクセス・ポイントを照合し、一致したアクセス・ポイントを登録したアプリケーションに、その着信メッセージをルーティングします。アプリケーション側から見ると、メッセージを受信するモードには同期と非同期があります。

4.5.1 アクセス・ポイントの登録

クライアント・アプリケーションではアクセス・ポイントを作成して登録し、特定のアドレスに送信された着信メッセージを受信するように指定できます。

この場合、クライアント・アプリケーションでは、受信メソッドを起動して保留中のメッセージをフェッチできます。アクセス・ポイントの指定なしでメッセージを受信した場合、アプリケーションでは、登録したすべてのアクセス・ポイントのメッセージを受信します。そうでない場合、アプリケーションでは、そのアクセス・ポイントに送信されたメッセージを受信します。

AccessPointは、着信メッセージを受信するための1つ以上のデバイス・アドレスを表します。

MessagingFactory.createAccessPointを使用してアクセス・ポイントを作成し、そのアクセス・ポイントをMessagingClient.registerAccessPointを使用してメッセージ受信用に登録できます。

電子メールのアクセス・ポイントを登録するには、次のように指定します。

Address apAddress = MessagingFactory.createAddress("EMAIL:user1@example.com");
AccessPoint ap = MessagingFactory.createAccessPoint(apAddress);
MessagingClient.registerAccessPoint(ap);

番号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);

4.5.2 同期受信

メソッドMessagingClient.receiveを使用して、UMSがアプリケーションで使用可能にしたメッセージを同期受信します。このメソッドは、メッセージの非同期受信による構成オーバーヘッドを望まない軽量なクライアント向けの便利なポーリング・メソッドです。

受信は非ブロック操作です。アプリケーションやアクセス・ポイントに関して保留中のメッセージがない場合、該当するコールでは、空のリストが即時に戻されます。受信によって、すべての使用可能なメッセージが戻される保証はありませんが、効率上の理由から使用可能なメッセージのサブセットのみを戻すことはできます。

このメソッドは非ブロック・コールを実行するため、現在使用できるメッセージがない場合はNULLを戻します。

注意:

1回の起動で、使用可能なメッセージがすべて取得される保証はありません。ポーリングして、使用可能なすべてのメッセージを受信したことを確認する必要があります。

4.5.3 非同期受信

メッセージを非同期で受信するには、listener.wsdlに記載されているListener Webサービスがクライアント・アプリケーションで実装されている必要があります。リスナー・エンドポイントの実装方法に制約はありません。たとえば1つのメカニズムは、javax.xml.ws.Endpoint JAX-WS Service APIを使用してWebサービス・エンドポイントをパブリッシュすることです。このメカニズムはJava SE 6で利用でき、コンシューマはJava EEサーブレット・モジュールを明示的に定義する必要はありません。ただし、サーブレット・ベースのリスナー実装も可能です。

4.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メソッドが起動されます。

4.5.3.2 デフォルトのメッセージ・リスナー

クライアント・アプリケーションでは通常、デフォルトのメッセージ・リスナー(例4-14)が設定されます。このリスナーは、このクライアント・アプリケーションによって送信されたメッセージの中で、関連するリスナーがないメッセージの配信ステータスに対して起動されます。Oracle UMSでは、このクライアント・アプリケーションによって登録されたアクセス・ポイント宛てのメッセージを受信すると、そのクライアント・アプリケーションのデフォルトのリスナーに対してonMessageコールバックが起動されます。

デフォルトのリスナーを削除するには、nullの引数を指定してこのメソッドをコールします。

例4-14 デフォルトのメッセージ・リスナー

ListenerReference listenerRef = new ListenerReference();
listenerRef.setEndpoint("url_to_your_webservice_message_listener");
messagingClient.setMessageListener(listenerRef);

4.5.3.3 アクセス・ポイントごとのメッセージ・リスナー

クライアント・アプリケーションでは、アクセス・ポイントを登録し、Listenerオブジェクトとオプションの相関機能オブジェクトを指定できます(例4-15)。受信メッセージが指定のアクセス・ポイント・アドレスに着信すると、指定したリスナーのonMessageメソッドが起動されます。当初指定の相関機能オブジェクトもコールバック・メソッドに渡されます。

例4-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);

4.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);

4.6 クラスタ環境の構成

APIでは、クラスタ環境にクライアント・アプリケーションとUMSサーバーがデプロイされている環境をサポートしています。クラスタ化されたデプロイメントが期待どおりに機能するためには、クライアント・アプリケーションを正しく構成する必要があります。次のルールが適用されます。

- 2つのクライアント・アプリケーションで同じApplicationName構成パラメータが使用されている場合、それらは同じアプリケーションのインスタンスであるとみなされます。

- ApplicationInstanceName構成パラメータを使用すると、各インスタンスを区別できます。

- アプリケーション・セッションは、インスタンス固有です。メッセージにセッション・フラグを設定すると、メッセージを送信したインスタンスが受信した返信を確認できます。

- リスナー相関機能は、インスタンス固有です。1つのアプリケーションの2つの異なるインスタンスで複数のリスナーが登録され、異なる相関機能が提供されている場合は、インスタンスAのリスナーが起動されると相関機能Aが提供され、インスタンスBのリスナーが起動されると相関機能Bが提供されます。

4.7 UMS WebサービスAPIを使用したメッセージ再送信の指定

UMSでは、メッセージ送信が失敗した場合のメッセージ再送信をスケジュールできます。次の例に示されているように、setMaxResendメソッドをコールすることにより、メッセージ再送信の最大回数を指定できます。

MessageInfo msgInfo = new oracle.ucs.messages.ws.types.MessageInfo();
msgInfo.setMaxResend(new Integer(1));
// When MessageInfo is created we must also set priority
msgInfo.setPriority(PriorityType.NORMAL);
message.setMessageInfo(msgInfo);
String mid = client.send(message, null, null);

フェイルオーバー・アドレスのステータスは、getTotalFailovers()およびgetFailoverOrder()のコールにより受信できます。フェイルオーバーの順序がフェイルオーバー総数と同じになると、APIユーザーには、フェイルオーバー・チェーンがすべて使用済であることがわかります。ただし、再送信機能は、フェイルオーバー・チェーンのループとして動作します。getMaxResend()とgetCurrentResend()をコールして、再送信とフェイルオーバー・チェーンがすべて使用済となるタイミングを知ることができます。

setMaxResendメソッド、getTotalFailoversメソッドおよびgetFailoverOrderメソッドの詳細は、ユーザー・メッセージング・サービスJava APIリファレンスを参照してください。

4.8 セキュリティの構成

次の項ではセキュリティに関する考慮事項が説明されています。

- 第4.8.1項「クライアントおよびサーバーのセキュリティ」

- 第4.8.2項「リスナーまたはコールバックのセキュリティ」

4.8.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セキュリティの構成の詳細は、例4-2を参照してください。

サポートされているユーザー名トークン・ポリシーは"oracle/wss11_username_token_with_message_protection_client_policy"です。このポリシーがWS-Securityヘッダーで暗号化されたユーザー名/パスワードのトークンを渡し、指定された資格証明をサーバーが認証します。ユーザー名とパスワードは資格証明ストアに格納することをお薦めします。こうすると、MessagingClientコンストラクタには資格証明ストア・キーのみを渡せばよいため、安全性の低い形で資格証明をハードコードしたり格納したりする必要がなくなります。UMS Webサービス・クライアントでのSAMLセキュリティの構成の詳細は、例4-1を参照してください。

4.8.2 リスナーまたはコールバックのセキュリティ

ユーザー名トークンおよびSAMLトークンによるセキュリティは、リスナー・コールバックWebサービスでもサポートされています。リスナーの登録時に、クライアント・アプリケーションでは、セキュリティ・ポリシーおよびセキュアな接続を確立するのにサーバーで必要となるキーや資格証明の参照情報を指定する、追加のパラメータを指定する必要があります。

例4-16は、ユーザー名トークンによるセキュリティを使用してセキュアなコールバック・エンドポイントを確立する方法を示しています。

例4-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);

4.9 スレッド・モデル

JAX-WSスタックによって提供される基礎となるサービスにより、WS MessagingClientクラスのインスタンスはスレッドセーフではありません。そのため、各インスタンスが一度に1つのスレッドでのみ使用されていることを確認する必要があります。

4.10 WebサービスAPIを使用したサンプル・チャット・アプリケーション

この項では、OTNでOracle User Messaging Serviceが提供するWebサービスAPIを使用して、サンプル・チャット・アプリケーションを作成、デプロイおよび実行する方法を説明します。

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、次の場所にあるサンプルを参照してください。

http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.html

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

- 第4.10.1項「概要」

- 第4.10.2項「事前作成されたサンプルの実行」

- 第4.10.3項「サンプルのテスト」

- 第4.10.4項「新規アプリケーション・サーバー接続の作成」

4.10.1 概要

このサンプルは、電子メール、SMSまたはIMを通じてメッセージを送受信するWebベースのチャット・アプリケーションの作成方法を示します。このサンプルでは、サービスWebサービスAPIを使用してユーザー・メッセージング・サーバーと相互作用します。Oracle JDeveloperでアプリケーション・サーバー接続を定義し、アプリケーションをデプロイおよび実行します。

このアプリケーションは、単純なWebチャット・インタフェースが含まれる、事前作成されたOracle JDeveloperプロジェクトとして提供されます。

注意:

このサンプルが動作するには、UMSサーバーが使用でき、必要なドライバにより適切に構成されている必要があります。

4.10.1.1 提供されるファイル

サンプル・アプリケーションには、次のファイルが含まれています。

- usermessagingsample-ws-src.zip - ソース・コードおよびOracle JDeveloperプロジェクト・ファイルが格納されたアーカイブです。

- usermessagingsample-ws.ear - コンテナにデプロイ可能な、事前作成されたサンプル・アプリケーションです。

4.10.2 事前作成されたサンプルの実行

次の手順を実行して、事前作成されたサンプル・アプリケーションを実行し、デプロイします。

1. 「usermessagingsample-ws-src.zip」を抽出し、usermessagingsample-ws.jwsをOracle JDeveloperで開きます。

図4-1 Oracle JDeveloperでプロジェクトを開く

Oracle JDeveloperのメイン・ウィンドウにプロジェクトが表示されます。

図4-2 Oracle JDeveloperのメイン・ウィンドウ

このアプリケーションには、1つのWebモジュールが含まれています。アプリケーションのソース・コードはすべて設定済です。

2. Webモジュールで「Oracle UMS Client」ライブラリが使用されていることを確認して、サンプル・アプリケーションのビルド依存性を満たします。

1. 「アプリケーション・ナビゲータ」で、Webモジュール「usermessagingsample-ws-war」を右クリックし、「プロジェクト・プロパティ」を選択します。

2. 左側のペインで、「ライブラリとクラスパス」を選択します。

図4-3 ライブラリの追加

3. 「OK」をクリックします。

3. ナビゲーション・ペインでプロジェクトを右クリックし、「新規」を選択して、アプリケーション・サーバー接続を作成します。第4.10.4項「新規アプリケーション・サーバー接続の作成」の説明に従います。

4. プロジェクトをデプロイするには、「usermessasgingsample-ws project」→「デプロイ」→「usermessasgingsample-ws」→「デプロイ先」→「SOA_server」の順に選択します(図4-4)。

図4-4 プロジェクトのデプロイ

5. メッセージBuild Successfulがログに表示されていることを確認します。

6. メッセージDeployment Finishedがデプロイメント・ログに表示されていることを確認します。
アプリケーションが正常にデプロイされました。

4.10.3 サンプルのテスト

次の手順を実行し、サンプルを実行およびテストします。

1. Webブラウザを開きます。

2. 次のようにアプリケーションのURLに移動し、ログインします。
http://host:port/usermessagingsample-ws/

メッセージングWebサービス・サンプルWebページが表示されます(図4-5)。このページには、ナビゲーション・タブ、およびアプリケーションの手順が表示されます。

図4-5 メッセージングWebサービス・サンプルWebページ

3. 「構成」をクリックして、次の値を入力します(図4-6)。

- Webサービスのエンドポイントを指定します。例: http://example.com:8001/ucs/messaging/webservice

- ユーザー名とパスワードを指定します。

- ポリシーを指定します(ユーザー・メッセージング・サービスのインスタンスでWS-Securityが有効になっている場合に必要)。

- 図4-6 Webサービスのエンドポイントおよび資格証明の構成

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

5. 「管理」をクリックします。

6. メッセージを受信するアドレスおよびオプションのキーワードを入力します(図4-7)。

図4-7 アクセス・ポイントの登録

7. 「開始」をクリックします。
メッセージRegistration operation succeededが表示されていることを確認します。

8. 「チャット」をクリックします。

9. 「至」フィールドに受信者を入力します。

10. メッセージを入力します。

11. 「送信」をクリックします。

12. メッセージが受信されていることを確認します。

4.10.4 新規アプリケーション・サーバー接続の作成

Oracle JDeveloperでアプリケーション・サーバー接続を定義し、アプリケーションをデプロイおよび実行します。第A.3項「新規アプリケーション・サーバー接続の作成」の手順を実行し、アプリケーション・サーバー接続を作成します。

5 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を介してメッセージを送受信する方法について説明します。

注意:

この章で説明するParlay X Multimedia Messaging APIは非推奨です。かわりに、第3章「ユーザー・メッセージング・サービスJava APIを使用したメッセージの送受信」で説明するユーザー・メッセージング・サービスJava APIを使用してください。

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

- 第5.1項「Parlay X Messaging操作の概要」

- 第5.2項「SendMessageインタフェース」

- 第5.3項「ReceiveMessageインタフェース」

- 第5.4項「Parlay X Messagingに対するOracleの拡張機能」

- 第5.5項「Parlay X Messaging Client APIおよびClient Proxy Package」

- 第5.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クライアント・ライブラリも含まれています。

5.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インタフェースはサポートされていません。

5.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パラメータは無視されます。

5.2.1 sendMessage操作

表5-1に、sendMessage操作のsendMessageRequest入力メッセージの説明を示します。

表5-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

はい

アプリケーション・エンドポイント、インタフェース名および相関機能を定義します。これらの定義内容は、アプリケーションに、メッセージが端末に配信されたときや配信が不可能な場合を通知するために使用されます。

表5-2に、sendMessage操作のsendMessageResponse出力メッセージの説明を示します。

表5-2 sendMessageResponse出力メッセージの説明

パート名

パート・タイプ

オプション

説明

result

xsd:string

いいえ

この相関識別子は、すべての送信済メッセージの配信ステータスをポーリングするために、getMessageDeliveryStatus操作の起動で使用されます。

5.2.2 getMessageDeliveryStatus操作

getMessageDeliveryStatus操作では、以前送信したメッセージの配信ステータスを取得します。入力requestIdentifierは、sendMessage操作によるresult値です。これは、他のMessagingドキュメントでメッセージIDと呼ばれている識別子と同じ識別子です。

表5-3に、getMessageDeliveryStatus操作のgetMessageDeliveryStatusRequest入力メッセージの説明を示します。

表5-3 getMessageDeliveryStatusRequest入力メッセージの説明

パート名

パート・タイプ

オプション

説明

registrationIdentifier

xsd:string

いいえ

配信ステータス・リクエストに関連する識別子。

表5-4に、getMessageDeliveryStatus操作のgetMessageDeliveryStatusResponse出力メッセージの説明を示します。

表5-4 getMessageDeliveryStatusResponse出力メッセージの説明

パート名

パート・タイプ

オプション

説明

result

DeliveryInformation
[0..unbounded]

はい

以前送信したメッセージのステータスの配列。各配列の要素は、送信したメッセージ、宛先アドレスおよび配信ステータスを表しています。

5.3 ReceiveMessageインタフェース

ReceiveMessageインタフェースには3つの操作があります。getReceivedMessages操作では、最後にgetReceivedMessagesを起動した以降に受信したメッセージについてサーバーをポーリングします。このgetReceivedMessagesでは、必ずしもすべてのメッセージ・コンテンツを戻すわけではないことに注意してください。通常は、メッセージ・メタデータのみを戻します。

他の2つの操作(getMessageおよびgetMessageURIs)は、メッセージ・コンテンツの取得に使用されます。

5.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とみなされます。

- 優先度パラメータは現在無視されています。

表5-5に、getReceivedMessages操作のgetReceivedMessagesRequest入力メッセージの説明を示します。

表5-5 getReceivedMessagesRequest入力メッセージの説明

パート名

パート・タイプ

オプション

説明

registrationIdentifier

xsd:string

いいえ

オフライン・プロビジョニングの手順を識別します。この手順によって、アプリケーションではメッセージの受信通知を指定の基準に従って受信できます。

priority

MessagePriority

はい

Parlay Xゲートウェイからポーリングするメッセージの優先度。指定した優先度以上のすべてのメッセージを取得します。指定しない場合は、すべてのメッセージが戻されます。つまり、優先度をLowに指定した場合と同じです。

表5-6に、getReceivedMessages操作のgetReceivedMessagesResponse出力メッセージの説明を示します。

表5-6 getReceivedMessagesResponse出力メッセージの説明

パート名

パート・タイプ

オプション

説明

registrationIdentifier

xsd:string

いいえ

オフライン・プロビジョニングの手順を識別します。この手順によって、アプリケーションではメッセージの受信通知を指定の基準に従って受信できます。

priority

MessagePriority

はい

Parlay Xゲートウェイからポーリングするメッセージの優先度。指定した優先度以上のすべてのメッセージを取得します。指定しない場合は、すべてのメッセージが戻されます。優先度をLowに指定した場合と同じです。

5.3.2 getMessage操作

getMessage操作では、以前のgetReceivedMessagesの起動時のメッセージIDを使用してメッセージ・コンテンツを取得します。レスポンス・メッセージにはSOAP本体がありません。コンテンツは単一のSOAP添付ファイルとして戻されます。

表5-7に、getMessage操作のgetMessageRequest入力メッセージの説明を示します。

表5-7 getMessageRequest入力メッセージの説明

パート名

パート・タイプ

オプション

説明

messageRefIdentifier

xsd:string

いいえ

メッセージのアイデンティティ。

getMessage操作に対するgetMessageResponse出力メッセージはありません。

5.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とみなされます。

表5-8に、getMessageURIs操作のgetMessageURIsRequest入力メッセージの説明を示します。

表5-8 getMessageURIsRequest入力メッセージの説明

パート名

パート・タイプ

オプション

説明

messageRefIdentifier

xsd:string

いいえ

取得するメッセージのID。

表5-9に、getMessageURIs操作のgetMessageURIsResponse出力メッセージの説明を示します。

表5-9 getMessageURIsResponse出力メッセージの説明

パート名

パート・タイプ

オプション

説明

result

MessageURI

いいえ

メッセージのテキストのパートで構成された完了メッセージ(存在する場合)、およびメッセージの添付ファイルに関するファイル・リファレンスのリスト(ある場合)が含まれます。

5.4 Parlay X Messagingに対するOracleの拡張機能

Parlay X Messagingの仕様では、メッセージ・フローの特定部分が未定義のままです。未定義状態の主要な領域は、クライアントを、(ReceiveMessageインタフェースを介して)同期受信するアドレスにバインディングするためのプロセス部分です。

Oracle User Messaging Serviceには、このプロセスをサポートするために、Parlay Xへの拡張インタフェースが含まれています。この拡張インタフェースは、Oracle XMLネームスペース内の個別のWSDLとして実装されていますが、Parlay X公認ではありません。クライアントはこの追加インタフェースを使用しないか、モジュール型の方法で使用するかを選択できます。後者の場合は、このインタフェースの中核となるメッセージング・ロジックはParlay X仕様に完全に準拠することになります。

5.4.1 ReceiveMessageManagerインタフェース

ReceiveMessageManagerは、メッセージを受信するクライアントの登録を管理するためのOracle固有のインタフェースです。クライアントはこのインタフェースを使用して、特定のアドレスでのメッセージの受信を開始、および停止します(これは、Messaging APIでのアクセス・ポイントの登録/登録解除の概念に類似しています)。

5.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操作には次の入出力があります。

表5-10に、startReceiveMessage操作のstartReceiveMessageRequest入力メッセージの説明を示します。

表5-10 startReceiveMessageRequest入力メッセージの説明

パート名

パート・タイプ

オプション

説明

registrationIdentifier

xsd:string

いいえ

登録識別子。

messageService
ActivationNumber

xsd:anyURI

いいえ

メッセージ・サービスのアクティブ化番号。

criteria

xsd:string

はい

説明文字列。

startReceiveMessage操作に対するstartReceiveMessageResponse出力メッセージはありません。

5.4.1.2 stopReceiveMessage操作

この操作を起動すると、クライアントと受信エンドポイント間ですでに確立されているバインディングが削除されます。クライアントは、破損しているエンドポイントのバインディングを識別するために、startReceiveMessageのコール時に指定した登録IDと同じ登録IDを指定します。このアプリケーションのサーバーに認識されている、対応する登録IDのバインディングがない場合は、ポリシー・エラーが発生します。

表5-11に、stopReceiveMessage操作のstopReceiveMessageRequest入力メッセージの説明を示します。

表5-11 stopReceiveMessageRequest入力メッセージの説明

パート名

パート・タイプ

オプション

説明

registrationIdentifier

xsd:string

いいえ

登録識別子。

stopReceiveMessage操作に対するstopReceiveMessageResponse出力メッセージはありません。

5.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を参照してください。

5.6 Parlay X APIを使用したサンプル・チャット・アプリケーション

この項では、OTNでOracle User Messaging Serviceが提供するParlay X APIを使用して、サンプル・チャット・アプリケーションを作成、デプロイおよび実行する方法を説明します。

この章には次の項が含まれます:

- 第5.6.1項「概要」

- 第5.6.2項「事前作成されたサンプルの実行」

- 第5.6.3項「サンプルのテスト」

- 第5.6.4項「新規アプリケーション・サーバー接続の作成」

5.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チャット・インタフェースが含まれています。

5.6.1.1 提供されるファイル

サンプル・アプリケーションには、次のファイルが含まれています。

- Project – アーカイブされたOracle JDeveloperプロジェクト・ファイルを含むディレクトリ

- Readme.txt

- リリース・ノート

5.6.2 事前作成されたサンプルの実行

次の手順を実行して、事前作成されたサンプル・アプリケーションを実行し、デプロイします。

1. Oracle JDeveloperで、usermessagingsample-parlayx.jws(.zipファイルに含まれています)を開きます。
Oracle JDeveloperのメイン・ウィンドウにプロジェクトが表示されます。

図5-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. 左側のペインで、「ライブラリとクラスパス」を選択します。

図5-2 ライブラリの追加

3. 「OK」をクリックします。

4. ナビゲーション・ペインでプロジェクトを右クリックし、「新規」を選択して、アプリケーション・サーバー接続を作成します。第5.6.4項「新規アプリケーション・サーバー接続の作成」の説明に従います。

5. プロジェクトをデプロイするには、「usermessasgingsample-parlayx project」→「デプロイ」→「usermessasgingsample-parlayx」→「デプロイ先」→「SOA_server」の順に選択します(図5-3)。

図5-3 プロジェクトのデプロイ

6. メッセージBuild Successfulがログに表示されていることを確認します。

7. デフォルトのリビジョンを入力し、「OK」をクリックします。

8. メッセージDeployment Finishedがデプロイメント・ログに表示されていることを確認します。
アプリケーションが正常にデプロイされました。

サンプルを実行するには、その前に、次の項の説明に従って、Oracle User Messaging Serviceの追加ドライバを構成し、ユーザー通信プリファレンスでメッセージを受信するユーザー用のデフォルト・デバイスを構成する必要があります。

注意:

詳細は、Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理を参照してください。

5.6.3 サンプルのテスト

次の手順を実行し、サンプルを実行およびテストします。

1. Webブラウザを開きます。

2. 次のようにアプリケーションのURLに移動し、ログインします。
http://host:port/usermessagingsample-parlayx/

「メッセージングParlay Xサンプル」Webページが表示されます(図5-4)。このページには、ナビゲーション・タブ、およびアプリケーションの手順が表示されます。

図5-4 「メッセージングParlay Xサンプル」Webページ

3. 「構成」をクリックして、次の値を入力します(図5-5)。

- 送信エンドポイントを指定します。例: http://localhost:port/sdpmessaging/parlayx/SendMessageService

- 受信エンドポイントを指定します。例: http://localhost:port/sdpmessaging/parlayx/ReceiveMessageService

- 受信マネージャ・エンドポイントを指定します。例: http://localhost:port/sdpmessaging/parlayx/ReceiveMessageMessageService

- ユーザー名とパスワードを指定します。

- ポリシーを指定します(ユーザー・メッセージング・サービスのインスタンスでWS-Securityが有効になっている場合に必要)。

- 図5-5 Webサービスのエンドポイントおよび資格証明の構成

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

5. 「管理」をクリックします。

6. 登録IDを入力して、登録およびメッセージを受信するアドレスを指定します(図5-6)。このページを使用すると、アドレスでのメッセージの受信を停止することもできます。

図5-6 登録IDの指定

7. 「開始」をクリックします。
メッセージRegistration operation succeededが表示されていることを確認します。

8. 「チャット」をクリックします(図5-7)。

9. 図5-7に示す書式で受信者をTo:フィールドに入力します。

10. メッセージを入力します。

11. 「送信」をクリックします。

12. メッセージが受信されていることを確認します。

13. 図5-7 サンプルの実行

5.6.4 新規アプリケーション・サーバー接続の作成
第A.3項「新規アプリケーション・サーバー接続の作成」の手順を実行し、アプリケーション・サーバー接続を作成します。

6 ユーザー通信プリファレンス

この章では、ユーザー通信プリファレンス(UCP)について説明します。ここでは、通信チャネルの使用方法、およびメッセージング・フィルタを使用した連絡ルールの作成方法について説明します。この章では、Webインタフェースからチャネルとフィルタを管理することにより、通信プリファレンスを管理する方法についても説明します。また、ユーザー通信プリファレンスの構成に関するシステム管理者向けの情報と、アプリケーションとユーザー通信プリファレンスの統合に関するの開発者向けの情報も提供します。

注意:

Oracle User Messaging Serviceのアーキテクチャとコンポーネントの詳細は、『Oracle User Messaging Serviceの管理』を参照してください。

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

- 第6.1項「ユーザー通信プリファレンスの概要」

- 第6.2項「ユーザー・プリファレンスの管理」

- 第6.3項「ユーザー通信プリファレンスの管理」

- 第6.4項「UCP Webユーザー・インタフェースの統合」

- 第6.5項「Javaアプリケーション・インタフェース」

6.1 ユーザー通信プリファレンスの概要

ユーザー通信プリファレンスを使用すると、複数のチャネルにアクセスするユーザーは、メッセージを受信する方法、タイミングおよび場所を制御できます。ユーザーは、フィルタ(配信プリファレンス)を定義して、メッセージの配信先チャネルとその環境を指定します。ユーザーのチャネルおよびフィルタに関する情報は、Oracle Fusion Middlewareでの使用がサポートされているデータベースに格納されます。プリファレンスはデータベースに格納されるため、プリファレンスの情報は、ドメイン内のユーザー通信プリファレンスの全インスタンス間で共有されます。

UCPは、メッセージ配信サービスを提供するのではなく、ユーザーのチャネルと配信プリファレンスに対するアクセスと管理を行うためのユーザー・インタフェースおよびAPIを提供します。メッセージがユーザーにアドレス指定されると、UMSは、UCPサービスからそのユーザーの配信プリファレンスを取得し、ユーザーのプリファレンスに応じてメッセージを送信します。アプリケーション開発者にとっては、ユーザー通信プリファレンスを使用すると柔軟性が増します。UMSを介してメッセージを送信することにより、アプリケーションは間接的にUCPサービスを使用します。アプリケーションは、UCP APIをコールしてユーザーのプリファレンスにアクセスし、これを管理したり、タスク・フロー・ライブラリを使用してUCPと統合することによりWebユーザー・インタフェースを提供することで、UCPサービスに直接アクセスすることもできます。

6.1.1 用語

ユーザー通信プリファレンスでは、次のように用語を定義しています。

- チャネル: 配信タイプと配信アドレスの組合せです。たとえば、携帯電話番号6503334444は、2つのチャネルSMS:650333444とVOICE:650333444で使用できます。SMSとVOICEは配信タイプで、6503334444は配信アドレスです。

- チャネル・アドレス: チャネルが通信できるアドレスの1つ。

- フィルタ: ユーザーがメッセージを受信する方法、タイミングおよび場所を制御するメッセージ配信プリファレンス・ルール。

- システム条件: 事前定義済ビジネス条件。条件のファクトは自動的にUCPサービスにより提供されます。

- ビジネス条件: 件名などメッセージの名前つき属性。ビジネス条件のファクトは、メッセージから抽出するか、アプリケーションで提供でき、フィルタ条件内の指定値と比較してフィルタを選択するために使用できます。

- ファクト: メッセージから抽出されるか、アプリケーションにより提供されるビジネス条件の実際値。

- 条件: ビジネス条件、演算子および指定値の組合せ。メッセージについてのファクトは、条件の真偽を評価する値との比較に使用されます。

- アクション: メッセージを送信しない、使用可能な最初のチャネルに送信する、選択された全チャネルに送信するなど、フィルタ内の指定条件が真の場合に実行されるアクション。

6.2 ユーザー・プリファレンスの管理

ここでは、Webユーザー・インタフェースを使用したユーザー・プリファレンスの管理について説明します。この項は、次の項目で構成されています。

- 通信チャネルの管理

- フィルタの管理

- プリファレンス設定の構成

6.2.1 通信チャネルの管理

通信チャネルは、メッセージ配信用のアドレス(電話番号など)とタイプ(ショート・メッセージ・サービス(SMS)など)を定義します。

ユーザー通信プリファレンスで(UCP)は、アイデンティティ・ストアのユーザー・プロファイル設定に基づいて、いくつかのチャネルが自動的に作成されます。これらのチャネルは、IDMチャネルと呼ばれ、メッセージ配信用に使用できます。対応するドライバをデプロイすると、POPUPチャネルまたはWORKLISTチャネルが自動的に作成されます。作成されたチャネルは、ドライバのアンデプロイ時に削除されます。このチャネルのアドレス値は、ユーザーのログインIDです。ユーザーがUCP UIでこれらのチャネルを変更することはできません。

注意:

メッセージング・ドライバでは、空白を含むチャネル・アドレスを指定できません。チャネル・アドレスの値はログインIDであるため、ユーザーのログインIDを作成する際は、空白を使用しないでください。

かわりにユーザーは、ユーザー定義チャネルを作成、変更および削除できます。これらはUSERチャネルと呼ばれます。ユーザーが作成したすべてのチャネルは、そのユーザーのシステムIDに関連付けられます。Oracle User Communication Preferencesにおけるチャネルは、携帯電話などの物理的なチャネルおよびデスクトップで実行している電子メール・クライアント・アプリケーションの両方を表し、UCP UIで構成できます。

6.2.1.1 チャネルの作成

USERチャネルを作成するには、次のタスクを実行します。

1. 「使用可能なチャネル」の下のツールバーにある「作成」アイコン(図6-1)をクリックします。

図6-1 「作成」アイコン

「チャネルの作成」ダイアログ・ボックス(図6-2)が表示されます。

図6-2 チャネルの作成

2. 「名前」フィールドにチャネルの名前を入力します。

3. 「タイプ」ドロップダウン・リストから配信タイプを選択します。

4. 選択した配信タイプに適したアドレスを入力します。

5. このチャネルをデフォルト・チャネルとして設定するには、「デフォルト」チェック・ボックスを選択します。デフォルト・チャネルは複数指定できます。

6. 「OK」をクリックしてチャネルを作成します。「使用可能なチャネル」セクションに新しいチャネルが表示されます。「使用可能なチャネル」ページでは、チャネルを変更または削除できます。

6.2.1.2 チャネルの変更

USERチャネルを変更するには、「使用可能なチャネル」セクションのチャネル・リストからこのチャネルを選択し、「変更」アイコン(図6-3)をクリックします。

図6-3 「変更」アイコン

「チャネルの変更」ダイアログ・ボックス(図6-4)が表示されます。このページでは、第6.2.1.1項「チャネルの作成」で説明したチャネル・プロパティを変更できます。

図6-4 チャネルの変更

6.2.1.3 チャネルの削除

USERチャネルを削除するには、「使用可能なチャネル」セクションのチャネル・リストからこのチャネルを選択し、「削除」アイコン(図6-5)をクリックします。

図6-5 「削除」アイコン

特定のチャネルは、アイデンティティ・ストアのユーザー・プロファイルから取得される情報に基づきます。これらはIDMチャネルと呼ばれます。ユーザーは、このチャネルをこのインタフェース経由で変更したり削除したりできません。このようなチャネルに対して実行できるのは、これをデフォルト・チャネルに設定する操作のみです。IDMチャネル・アドレスは、アイデンティティ管理システムを介して管理されます。

6.2.1.4 デフォルト・チャネルの設定

1つ以上のチャネルをデフォルト・チャネルとして構成できます。チャネル・リストから直接チャネルを作成している途中、またはチャネルを作成した後に、チャネルをデフォルトのメッセージング・チャネルとして設定できます。

チャネルをデフォルト・チャネルとして設定するには、チャネル・リストからそのチャネルを選択し、「デフォルト」アイコン(図6-6)をクリックします。選択したチャネルの横にチェックマークが表示され、デフォルトのメッセージ受信方法として指定されます。必要な場合は、この手順を繰り返してさらにデフォルト・チャネルを追加します。

図6-6 「デフォルト」アイコン

すでにデフォルトとして設定されているチャネルのデフォルト設定を削除するには、チャネル・リストからそのチャネルを選択し、図6-7に示されているアイコンをクリックします。

図6-7 デフォルト削除アイコン

注意:

アイデンティティ・ストア属性から自動的に作成される「勤務先電子メール」チャネルは、デフォルト・チャネルとして設定されます。「勤務先電子メール」チャネルのデフォルト設定は、他のデフォルト・チャネルを設定するまで削除できません。

LDAP設定の構成の詳細は、『Oracle User Messaging Serviceの管理』のユーザー・メッセージング・サービスのLDAPユーザー・プロファイルへのアクセスの構成に関する項を参照してください。

6.2.2 フィルタの管理

メッセージング・フィルタは、ユーザーにアドレス指定される着信メッセージの処理方法に関するルールを定義します。ユーザー通信プリファレンスページの「メッセージング・フィルタ」セクション(図6-8)では、受信するメッセージのタイプのみでなく、メッセージを受信するチャネルも指定するフィルタを作成できます。

フィルタは、条件(「条件」セクション)とアクション(「次を実行」セクション)の2つの主要なセクションで構成されます。各着信メッセージに対してフィルタが評価され、メッセージ処理用に選択する必要のある適切なフィルタが決定されます。条件セクションは、フィルタが選択される状況を決定します。アクション・セクションは、フィルタが選択された場合にメッセージをどのように処理するかを指定します。

図6-8 メッセージング・フィルタ

6.2.2.1 フィルタの作成

フィルタを作成するには、次のタスクを実行します。

1. 「メッセージング・フィルタ」の下のツールバーの「作成」アイコン(図6-1)をクリックします。「フィルタの作成」ページ(図6-9)が表示されます。

図6-9 フィルタの作成

2. 「名前」フィールドにフィルタの名前を入力します。

3. 必要に応じて、「説明」フィールドにフィルタの説明を入力します。
チェック・ボックスでフィルタを一時的に有効または無効にできます。

4. 「次のすべての条件に一致」オプションまたは「次の条件のいずれかと一致」オプションを選択して、メッセージがすべての条件を満たす必要があるのか、それともいずれかの条件なのかを選択します。

5. 次のように、「条件」セクションでフィルタ条件を作成します。

1. ツールバーの「作成」アイコンをクリックします。「条件の作成」ダイアログ・ボックスが表示されます。

2. 使用可能なビジネス条件のリストが表示される「属性」ドロップダウン・リストからメッセージの属性を選択します。これらの属性のリストは、表6-1を参照してください。

3. 選択した属性を、「演算子」ドロップダウン・リストのいずれかの比較演算子と組み合せます。

4. 「オペランド」フィールドに適切な値を入力します。これは、選択されている属性のファクトが選択した演算子を使用して比較される値です。
たとえば、「日付」属性を選択する場合は、比較演算子を1つ選択し、次に日付チューザから適切な日付を選択します。「次の間」などの範囲演算を選択した場合、下限値と上限値を入力するための2つのオペランド・フィールドが表示されます。

5. 「OK」をクリックして、表に条件を追加します。

6. この手順を繰り返してフィルタ条件をさらに追加します。フィルタ条件を削除するには、表内の条件リストから条件を選択し、「削除」アイコン(図6-5)をクリックします。

7. メッセージがユーザーにアドレス指定されると、そのユーザーのフィルタの「条件」セクションが、メッセージ内のファクトに対して評価されます。「条件」セクションでフィルタが選択されると、「次を実行」セクションにより、メッセージの処理方法が決定されます。「次を実行」セクションは、アクション・タイプとチャネル・リストで構成されます。次のアクションの1つを選択します。

- メッセージを送信しない -- フィルタ条件に一致するメッセージの受信をブロックするには、このオプションを選択します。

- 最初の使用可能なチャネルに送信(順にフェイルオーバー) -- フィルタ基準に一致するメッセージを優先チャネル(上矢印や下矢印を使用して設定)または次の使用可能なチャネルに送信するには、このオプションを選択します。

- 選択したすべてのチャネルに送信 -- リストしたすべてのチャネルにメッセージを送信するには、このオプションを選択します。

8. メッセージを送信するアクション・タイプを選択したら、ツールバーのドロップダウン・リストからチャネルを選択して、このフィルタのアクション・チャネル・リストに追加する必要があります。チャネルを選択したら、「追加」(図6-10)をクリックします。チャネルを削除するには、「削除」(図6-5)をクリックします。

図6-10 「追加」アイコン

9. 必要に応じて、上矢印や下矢印を使用してチャネルに優先順位を付けます。「最初の使用可能なチャネルに送信」を選択すると、最上位のチャネル(使用可能な場合)がフィルタ基準に一致したメッセージを受信します。

10. 「OK」をクリックしてフィルタを作成するか、「取消」をクリックしてフィルタを破棄します。

6.2.2.2 フィルタの変更

フィルタを変更するには、メッセージング・フィルタのリストからフィルタを選択し、「変更」(図6-3)をクリックします。「フィルタの変更」ページが表示されます。このページでは、フィルタ名以外のフィルタ・プロパティを追加または変更できます。第6.2.2.1項「フィルタの作成」を参照してください。

6.2.2.3 フィルタの削除

フィルタを削除するには、メッセージング・フィルタのリストからフィルタを選択し、「削除」(図6-5)をクリックします。

6.2.2.4 フィルタの無効化

フィルタを一時的に有効または無効にできます。無効になったフィルタは、メッセージ処理の際にスキップされます。次のいずれかの方法で、フィルタを無効または有効にできます。

- メッセージング・フィルタのリストからファイルを選択します。選択したフィルタが有効な場合は、ツールバーにフィルタを無効にするアイコン(図6-11)が表示されます。このアイコンをクリックして、フィルタを無効にします。

図6-11 フィルタの無効化アイコン

選択したフィルタが無効である場合は、ツールバーにフィルタを有効にするアイコン(図6-12)が表示されます。このアイコンをクリックして、フィルタを有効にします。

図6-12 「フィルタの有効化」アイコン

- フィルタの作成または変更を行うダイアログ・ボックスからでもフィルタを有効または無効にできます。

6.2.2.5 フィルタの編成

フィルタを選択したり、ツールバーの上向き矢印または下向き矢印を使用してリスト内のフィルタを上下移動することにより、リスト内におけるフィルタの優先順位を設定できます。メッセージ処理中、フィルタは、条件に一致するフィルタが見つかるまで、リストの上から下へ順番に評価されます。一致するフィルタが見つからなかった場合、「選択したすべてのチャネルに送信」アクション・タイプのメッセージ配信に対してはデフォルト・チャネルが使用されます。

6.2.3 プリファレンス設定の構成

UCP UIの右上にある「設定」タブにアクセスして、プリファレンス設定を構成できます。次のパラメータを設定できます。

- ロケール・ソース: 「アイデンティティ・ストアから」または「ブラウザから」を選択します。

- アクセシビリティ・モード: 「標準」または「スクリーン・リーダー」を選択します。

- テキストを高コントラストで表示する場合、「テキストの強調表示」チェック・ボックスを選択します。

- テキストを大きなフォントで表示する場合、「さらに大きいテキスト」チェック・ボックスを選択します。

- 変更内容を保存する場合は「変更の保存」をクリックし、デフォルト設定に戻す場合は「デフォルトにリセット」をクリックします。

図6-13 設定の構成

6.3 ユーザー通信プリファレンスの管理

ここでは、WebLogic Scripting Tool (WLST)を使用したプロファイルの構成とユーザー・データの管理について説明します。また、プロファイル構成中に使用するビジネス条件についても説明します。

6.3.1 ビジネス条件について

前述したように、各フィルタ条件はビジネス条件に対して定義されます。UCPは、次の表のビジネス条件をサポートします。ビジネス条件は、名前、データ型およびオプションの説明で構成されます。

表6-1に、ユーザー通信プリファレンスによってサポートされる事前定義済のビジネス条件を示します。

表6-1 ユーザー通信プリファレンス用の事前定義済ビジネス条件

ビジネス条件

データ型

組織

文字列

優先度

文字列

アプリケーション

文字列

アプリケーション・タイプ

文字列

有効期限

日付

送信元

文字列

宛先

文字列

顧客名

文字列

顧客タイプ

文字列

ステータス

文字列

金額

数値(小数)

期日

日付

プロセス・タイプ

文字列

支出タイプ

文字列

コスト合計

数値(小数)

処理時間

数値(小数)

順序タイプ

文字列

サービス・リクエスト・タイプ

文字列

グループ名

文字列

ソース

文字列

分類

文字列

期間

数値(小数)

ユーザー

文字列

ロール

文字列

件名

文字列

サービス名

文字列

プロセス名

文字列

システム・コード

文字列

エラー・コード

文字列

発生数

数値(小数)

UCPは、表6-2の2つのシステム条件をサポートします。システム条件は、事前定義済のビジネス条件です。管理者はシステム条件を拡張できません。システム条件は、条件の定義用に使用できますが、ここでは管理されていません。システム条件のファクトは、現在の時刻とユーザーのタイム・ゾーンに基づいて自動的に取得されます。したがって、ビジネス条件とは異なり、メッセージ処理中に、アプリケーションはシステム条件のファクトを提供する必要がありません。

表6-2 ユーザー通信プリファレンスでサポートされるシステム条件

システム条件

データ型

サポートされる値

日付

日付

日付は、java.util.Dateオブジェクトまたはミリ秒数を表す文字列として受け入れられます。

時間

時間

時刻を表す4桁のHHMM形式の整数。最初の2桁は24時間形式の時間です。後半の2桁は分です。

注意:

Oracle Enterprise Managerの「サーバー・プロパティ」ページから、ビジネス条件を管理できます(ビジネス条件の追加または削除)。ただし、この機能はまもなく非推奨になる予定なので、ビジネス条件の追加または削除にこのページを使用しないでください。第6.3.2項「Oracle Enterprise Managerを使用したプロファイルの構成」で説明されているように、ビジネス条件のサブセットをプロファイル構成時に使用できます。

6.3.2 Oracle Enterprise Managerを使用したプロファイルの構成

複数のアプリケーションが1つのUCPサービス・インスタンスを消費する場合があります。ただし、すべてのアプリケーションが同じUCP機能セットを消費するとはかぎりません。異なるアプリケーションの様々な要件を満たすために、UCP機能はプロファイルで仮想化されます。これにより、各アプリケーションはターゲットをUCP機能のサブセットをカプセル化する特定のプロファイルに指定することが可能になります。

各プロファイルはプロファイルIDで識別されます。Oracle UCPサービスでは、プロファイルIDを指定することにより、クライアント・アプリケーションがプロファイルにターゲット設定できるようにAPIを提供します。アップグレード後、プロファイルIDなしで古いUCP APIを使用するレガシー・アプリケーションは、デフォルト・プロファイルにターゲット設定して、デフォルト・プロファイルにターゲット設定する他のアプリケーションと共有します。各アプリケーションが、他のアプリケーションと共有しないで特定のプロファイルにターゲット設定できるように、レガシー・アプリケーションを移行して最新のAPIを使用することをお薦めします。UCP APIの詳細は、ユーザー・メッセージング・サービスJava APIリファレンスを参照してください。

メッセージング・プリファレンス・プロファイルはOracle Enterprise Manager Fusion Middleware Controlを使用して管理できます。このインタフェースは、既存の構成済プロファイルをリストし、これによってユーザーはプロファイルを追加、変更または削除できます。プリファレンス・プロファイルを構成するには、次のタスクを実行します。

1. Oracle Enterprise Managerでユーザー・メッセージング・サーバーのホーム・ページを開き、次の図に示されているようにドロップダウン・リストから「サーバー・プロパティ」を選択します。

次の図のような「サーバー・プロパティ」ページが表示されます。既存プロファイルはすべて「メッセージング・プリファレンス・プロファイル」セクションに表示されます。

2. 新しいプロファイルを追加するには、「メッセージング・プリファレンス・プロファイル」セクションの「追加」アイコンをクリックします。次の図のようなダイアログ・ボックスが表示されます。新しいプロファイルを追加するには構成の詳細を指定する必要があります。
「OK」をクリックして、新しいプロファイルを保存します。

ロケール・ソース、IDMとユーザー・チャネルの可用性およびビジネス条件のサブセットを選択することにより、プロファイル機能を定義できます。UCPは、3つの異なるロケール・ソース(クライアント・ブラウザ、アイデンティティ・ストアおよびシステム・デフォルト)のロケールに基づいてWebユーザー・インタフェースをレンダリングします。「ロケール・ソース」フィールドでは、「クライアント・ブラウザのロケール」と「アイデンティティ・ストアのロケール」という2つのソースから選択できます。これにより、UIレンダリングのためのロケール参照順序が決まります。「クライアント・ブラウザのロケール」を選択すると、参照順序は(1)「クライアント・ブラウザのロケール」、(2)「アイデンティティ・ストアのロケール」、(3)システム・デフォルト・ロケールになります。そうでない場合は、参照順序は(1)「アイデンティティ・ストアのロケール」、(2)「クライアント・ブラウザのロケール」、(3)システム・デフォルト・ロケールになります。各順序において、UCPは、サポートされている最初のロケールを使用してUIをレンダリングします。

前述の図に示されているユーザー・チャネルのチェック・ボックスは、そのプロファイル用のユーザー定義チャネルの可用性を定義します。このチェック・ボックスを選択すると、ユーザーは、UCP Webユーザー・インタフェースからユーザー・チャネルを作成できるようになります。IDMチャネルのチェック・ボックスは、アイデンティティ・ストアの自動同期化チャネルの可用性を決定します。チャネルは、ユーザーのプロパティです。これらのチェック・ボックスは、各プロファイルに対するチャネルの可視性を決定します。

各プロファイルは、前述の図の「選択したビジネス条件」の下に表示されているビジネス条件のサブセットをカプセル化します。この例では、「送信元」、「宛先」および「件名」の3つの条件のみが選択されています。さらに条件を追加するには、左側の「使用可能なビジネス条件」リストから条件を選択し、右向き矢印(>)をクリックして、「選択したビジネス条件」リストにこれを移動します。ユーザーは、特定プロファイル内でのフィルタ条件の定義に、選択したビジネス条件のみを使用できます。つまり、フィルタ条件を定義する際、選択されたビジネス条件のみが、UCP Webユーザー・インタフェースの「属性」ドロップダウン・リストに表示されます。

3. 既存のプロファイルを変更するには、「メッセージング・プリファレンス・プロファイル」セクションの「編集」アイコンをクリックします。次の図のようなダイアログ・ボックスが表示されます。プロファイルを編集するには構成の詳細を指定する必要があります。
「OK」をクリックして、プロファイルを保存します。

4. メッセージング・プリファレンス・プロファイルを削除するには、プロファイル・リストからプロファイルを選択し、「削除」をクリックします。

5. 「適用」をクリックし、ユーザー・メッセージング・サーバー・インスタンス内の変更を適用します。変更内容が反映されるようにサーバーを再起動します。

6.3.3 WLSTコマンドを使用したユーザー・データの管理

UCPが提供するコマンドライン・スクリプティング・ツールであるOracle Weblogic Scripting Tool (WLST)を使用して、ユーザー・プリファレンス・データをUCPリポジトリから指定のXMLファイルにダウンロードしたり、XMLファイルからUCPリポジトリにアップロードできます。

WLSTを使用してユーザー・プリファレンス・データをアップロードまたはダウンロードする方法については、Oracle Fusion Middlewareコア・コンポーネントWLSTコマンド・リファレンスのmanageUserCommunicationPrefsに関する項を参照してください。WLSTの開始方法については、『Oracle Fusion Middleware Oracle Fusion Middlewareの管理』のOracle Weblogic Scripting Tool (WLST)の使用のスタート・ガイドを参照してください。

あるユーザーをアイデンティティ・ストアから削除するとします。引き続き、削除された古いユーザーと同じ名前の新しいユーザーを作成すると、その新しいユーザーは、同じ名前の古いユーザーのユーザー通信プリファレンス(UCP)データにアクセスできます。このようなデータには、古いユーザーによって構成されていた通信チャネル、メッセージ配信プリファレンスおよびメッセージング・フィルタが含まれます。削除された古いユーザーと同じ名前の新しいユーザーによるこのようなアクセスを回避するには、アイデンティティ・ストアからユーザーを削除した後、次の手順に従います。

1. 次のWLSTコマンドを使用して、すべてのユーザーのUCPデータをXMLファイル(たとえばuserdata.xml)にダウンロードします。

wls:/offline> manageUserCommunicationPrefs(operation='download', filename='userdata.xml', url='t3://<hostname>:<portnumber>', username='<adminusername>', password='<adminpassword>')

2. XMLファイルのバックアップ・コピーを作成します。userdata.xmlファイルを編集して、削除した古いユーザーの全データを削除します。各ユーザー・データ・セクションは、XMLファイル内の<user guid=username>要素で編成されています。古いユーザーのguidでユーザー要素を見つけ、ユーザー要素からそのユーザーの全データを削除します。次の例は、たとえばdavidというユーザーの全データを削除した後のユーザー要素を示しています。

<user guid="david">
<devices>
</devices>
</user>

3. userdata.xmlファイルを保存した後、次のWLSTコマンドを使用して、変更したファイルをアップロードします。

wls:/offline> manageUserCommunicationPrefs(operation='upload', filename='userdata.xml', merge='overwrite', url='t3://<hostname>:<portnumber>', username='<adminusername>', password='<adminpassword>')

6.4 UCP Webユーザー・インタフェースの統合

UCPサービスでは、エンド・ユーザーは、Webインタフェースから自分のチャネルとフィルタを管理することにより、通信プリファレンスを管理できます。エンド・ユーザーが自分の通信プリファレンスを制御できるようにするには、アプリケーション開発者は、アプリケーションにUCP Webユーザー・インタフェースを統合させる必要があります。UCPが提供するADFタスク・フロー・ライブラリにより、エンド・ユーザーがWebアプリケーションから自分のプリファレンスに直接アクセスできるリージョンをWebアプリケーションに簡単に追加できます。

ここでは、ADFタスク・フロー・ライブラリを使用し、特定のプロファイルをターゲット指定して、Webユーザー・インタフェースを実装する方法について説明します。ADFタスク・フロー・ライブラリにより、新規または既存のアプリケーションとWebインタフェースを簡単に統合させることができます。ADFタスク・フローの詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFタスク・フローの作成に関する項を参照してください。UCPインスタンスとWebユーザー・インタフェースを統合するには、この項のタスクを実行します。

6.4.1 ADF WebアプリケーションとUCPの統合

ここでは、ADF Webアプリケーションを作成する方法、およびOracle JDeveloperのADFタスク・フロー・ライブラリを使用して既存のWebアプリケーションにページまたはリージョンを追加する方法について説明します。

6.4.1.1 新しいADFアプリケーションの作成

UCPを新しいアプリケーションまたは既存アプリケーションと統合させることができます。Oracle Jdeveloperで新しいADF Webアプリケーションを作成するには、次のタスクを実行します。

1. Oracle JDeveloper 12cウィザードを開きます。左側の「アプリケーション・ナビゲータ」から「新規アプリケーション」を選択します。「新規ギャラリ」ウィンドウが表示されます。

2. 「新規ギャラリ」ウィンドウで、項目リストから「ADF Fusion Webアプリケーション」を選択し、「OK」をクリックします。次の図のように、ADF Fusion Webアプリケーションの作成ウィンドウが表示されます。

3. このウィンドウで、アプリケーション名(たとえばMyApp)を入力します。また、アプリケーション・パッケージ接頭辞(たとえばoracle.ucp)を入力します。「終了」をクリックすると、新しいADFアプリケーションが作成されます。

6.4.1.2 ADF Webページの作成

UCPライブラリのバインド・タスク・フローを任意のリージョンに追加することにより、アプリケーションにシームレスな統合を提供できます。この項では、UCPタスク・フロー用のリージョンをホストするデモADF Webページを作成します。新しいADF Webページを作成するには、次のタスクを実行します。

1. 左側のウィンドウ・ペインで、「ViewController」を右クリックしし、コンテキスト・メニューを表示します。

2. ViewControllerのコンテキスト・メニューで「新規」メニューから「ページ」を選択します。次の図のような「JSFページの作成」ウィンドウが表示されます。

3. このウィザードで、ファイル名(たとえばMyPage.jspx)を入力します。「ドキュメント・タイプ」メニューから「JSP XML」を選択します。

4. 「ページ・レイアウト」メニューから「空白ページの作成」を選択します。「OK」をクリックします。新しいMyPage.jspxが作成されます。

5. ナビゲーション・ペインの「ViewController」ノードの下の「MyPage.jspx」をダブルクリックして、新しく作成したページを開きます。「MyPage.jspx」ウィンドウで、下のツールバーから「ソース」を選択し、次の図のように、ページのソース・コードを表示します。

6.4.1.3 UCPタスク・フロー・ライブラリの接続

UMSをWeblogic Serverにデプロイしている場合、UCPタスク・フロー・ライブラリもサーバーにデプロイされています。ただし、JDeveloperインスタンスからUCPタスク・フロー・ライブラリにアクセスできない場合があります。したがって、タスク・フロー・ライブラリをアプリケーションに接続することが重要です。まず、JDeveloperインスタンスからライブラリへのファイルシステム接続を作成する必要があります。これを実行する手順を次に示します。

1. 上のペインにあるツールバーの「ウィンドウ」タブをクリックし、ドロップダウン・リストを表示します。リストから「リソース」を選択し、Jdeveloperウィンドウの右側のペインに「リソース」タブを追加します。

2. 「リソース」タブで、フォルダ・アイコンをクリックし、ドロップダウン・リストを表示します。リストで「IDE接続」に移動し、「ファイルシステム」を選択します。次の図のように、「ファイルシステム接続の作成」ウィザードが表示されます。

3. 接続名(たとえばUCP Task Flow)を入力します。

4. 「参照」をクリックし、UCPタスク・フロー・ライブラリが含まれるフォルダを選択します。このフォルダは、oracle_commonディレクトリ内にあり、次のようなパスになります。

oracle_common/communications/modules/oracle.ucs.userprefs.webapp_xx.x.x

xx.x.xはバージョン番号です(12.1.2など)。

このフォルダに移動し、「選択」をクリックします。

5. 「OK」をクリックします。ファイルシステム接続が作成されます。確認するには、右側のペインの「ファイルシステム」ナビゲーション・ツリーを開きます。「ADF Task Flows」フォルダを開くと、次の図のように、UserCommunicationPreferencesが表示されます。

6.4.1.4 新しいページへのリージョンの追加

ADFタスク・フロー・ライブラリのサポートにより、エンド・ユーザーがWebアプリケーションから直接自分のプリファレンスにアクセスできるリージョンをWebアプリケーションに追加できます。これを実現するには、次の手順を実行します。

1. 新しく作成したページMyPage.jspxの「ソース」タブをクリックします。

2. 右側のペインの「ファイルシステム」ナビゲーション・ツリーからUserCommunicationPreferencesタスク・フローをドラッグして、ページ・ソースの<af:form> </af:form>タグ内にドロップし、このタグ内にリージョンを作成します。
次の図のようなコンテキスト・メニューが表示されます。

3. コンテキスト・メニューから、「リージョン」を選択します。確認ウィンドウが表示されます。

4. 「ライブラリの追加」をクリックします。「タスク・フロー・バインディングの編集」ウィザードが表示されます。

5. 「入力パラメータ」の表に、profieldの値を入力します(たとえばsoa)。プロファイルID値を指定すると、作成したユーザー・インタフェースが、このプロファイル内のユーザー・フィルタとチャネルにしかアクセスできないようになります。これは、アプリケーションで指定するプロファイルと同じプロファイルにする必要があります。「OK」をクリックします。これで、リージョンがページに追加されました。
ユーザー・プリファレンス・ページを追加して既存のADF WebアプリケーションとUCPを統合する場合、この項で説明した同じ方法で、既存または新規のADFページにリージョンを追加できます。

6.4.1.5 UCPライブラリの参照

UMSおよびUCPタスク・フロー・ライブラリがWebLogic Serverにデプロイされている場合、アプリケーションにこれらのライブラリを組み込む必要はありません。weblogic.xmlファイルからこれらのライブラリを参照する必要があります。これを実現するには、次の手順を実行します。

1. ナビゲーション・ペインで「ViewController」ノードを右クリックします。コンテキスト・メニューが表示されます。

2. コンテキスト・メニューから「新規」を選択し、「ギャラリから」をクリックします。「新規ギャラリ」ウィザードが表示されます。

3. ナビゲーション・ペインで「一般」を開き、「デプロイメント・ディスクリプタ」を選択します。右側のペインの項目リストから「WebLogicデプロイメント・ディスクリプタ」を選択します。「OK」をクリックします。次の図を参照してください。

「WebLogicデプロイメント・ディスクリプタの作成」ウィザードが表示されます。

4. デプロイメント・ディスクリプタのリストから「weblogic.xml」を選択し、「次へ」をクリックします。次の画面で、デプロイメント・ディスクリプタのバージョンとして12.1.1以降を選択し、「次へ」をクリックします。「サマリー」ページで「終了」をクリックします。

5. ナビゲーション・ペインの「ViewController」ノードの下の「weblogic.xml」をダブルクリックして、新しく作成したページを開きます。「weblogic.xml」ウィンドウで、下のツールバーから「ソース」を選択し、ページのソース・コードを表示します。

6. weblogic.xmlファイルで、UMSライブラリ(oracle.sdp.client)とUCPライブラリ(oracle.ucs.userprefs.webapp)の2つのライブラリを参照します。次の図に示されているように、次のライブラリ参照を追加します。

<library-ref><library-name>oracle.sdp.client</library-name></library-ref>
<library-ref><library-name>oracle.ucs.userprefs.webapp</library-name></library-ref>

6.4.1.6 プロジェクト・デプロイメント・プロファイルの管理

weblogic.xmlファイルで2つのライブラリを参照しているので、アプリケーションでこれらのライブラリをパッケージ化する必要はありません。これはプロジェクト・デプロイメント・プロファイル経由で管理できます。これを実現するには、次の手順を実行します。

1. まずプロジェクト・デプロイメント・プロファイルを作成する必要があります。ナビゲーション・ペインで「ViewController」ノードを右クリックします。コンテキスト・メニューが表示されます。

2. コンテキスト・メニューで「デプロイ」をクリックし、「新規デプロイメント・プロファイル」を選択します。「デプロイメント・プロファイルの作成」ウィザードが表示されます。

3. 「プロファイル・タイプ」ドロップダウン・リストから「WARファイル」を選択し、「OK」をクリックします。
プロジェクト・デプロイメント・プロファイルが作成されます。次に、ライブラリがアプリケーション内で確実にパッケージ化されないようにする必要があります。

4. 「一般」タブで「Java EE Webコンテキスト・ルートを指定」オプションを選択し、次の図に示されているように、アプリケーション・コンテキスト・ルート(たとえばmyapp)を入力します。

5. ナビゲーション・ツリーから「WEB-INF/lib」の下の「フィルタ」を選択します。次の図に示されているように、右側のペインに表示されているすべての.jarファイルの選択を解除します。「OK」をクリックして、変更内容をデプロイメント・プロファイルに保存します。
これで、ライブラリは確実にアプリケーション内でパッケージ化されないようになりました。前述したように、重要なライブラリはweblogic.xmlファイル内で参照されています。

6.4.1.7 アプリケーション・デプロイメント・プロファイルの作成

新しいアプリケーション・デプロイメント・プロファイルを作成するには、次のタスクを実行します。

1. 左側のペインの「アプリケーション」ドロップダウン・リストから「デプロイ」を選択し、コンテキスト・メニューの「新規デプロイメント・プロファイル」をクリックします。
「デプロイメント・プロファイルの作成」ウィザードが表示されます。

2. 「プロファイル・タイプ」ドロップダウン・リストから「EARファイル」を選択し、アプリケーション・デプロイメント・プロファイルの名前(たとえばMyApp)を入力します。
「OK」をクリックすると、アプリーション・デプロイメント・プロファイルが作成されます。「EARデプロイメント・プロファイルのプロパティの編集」ウィザードが表示されます。

3. ナビゲーション・ツリーから「アプリケーション・アセンブリ」を選択します。

4. 右側のペインで、「ViewController.jpr」ノードを開いて、次の図に示されているように、「webapp1」を選択してアプリケーションに組み込みます。

5. ツールバーで「すべて保存」をクリックし、アプリケーションを保存します。

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

次に、アプリケーションをWebLogicアプリケーション・サーバーにデプロイする必要があります。アプリケーション・サーバーをまだ構成していない場合、まず、アプリケーション・サーバー接続を構成する必要があります。

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

アプリケーションをデプロイするには、次のタスクを実行します。

1. 「アプリケーション」ドロップダウン・リストから「デプロイ」を選択し、コンテキスト・メニューの「MyApp」をクリックします。「MyAppのデプロイ」ウィザードが表示されます。

2. 「デプロイメント・アクション」画面で、「アプリケーション・サーバーへのデプロイ」を選択し、「次へ」をクリックします。

3. 「サーバーの選択」画面で、アプリケーション・サーバーのリストからサーバーを選択し、「終了」をクリックして、アプリケーションをデプロイします。
目的のサーバーがアプリケーション・サーバーのリストに含まれていない場合は、第6.4.2.2項「アプリケーション・サーバー接続の構成」の手順に従って、サーバー接続を構成してください。

6.4.2.2 アプリケーション・サーバー接続の構成

アプリケーション・サーバー接続が構成されていない場合、まず、次のタスクを実行してこれを構成する必要があります。

1. 「アプリケーション」ドロップダウン・リストから「デプロイ」を選択し、コンテキスト・メニューの「MyApp」をクリックします。「MyAppのデプロイ」ウィザードが表示されます。

2. 「デプロイメント・アクション」画面で、「アプリケーション・サーバーへのデプロイ」を選択し、「次へ」をクリックします。

3. 「サーバーの選択」画面で、右上隅のプラス・アイコンをクリックします。
「アプリケーション・サーバー接続の作成」ウィザードが表示されます。

4. 「接続名」フィールドに、サーバー接続名(MyServerなど)を入力します。「次へ」をクリックします。

5. 「認証」画面で、アプリケーション・サーバーの管理者のユーザー名とパスワードを入力します。「次へ」をクリックします。

6. 「構成」画面で、次の図に示されているように、ホスト名、ポート番号およびドメイン名を指定します。
「次へ」をクリックします。

7. 「テスト」画面で、「接続のテスト」をクリックし、接続を検証します。テストが成功した場合は、「終了」をクリックします。これで、次の図に示されているように、アプリケーション・サーバー・リストに目的のアプリケーション・サーバーが表示されます。

8. 新しく構成したアプリケーション・サーバーにアプリケーションをデプロイするには、リストからそのサーバーを選択し、「終了」を選択します。アプリケーションのデプロイメント成功の確認メッセージが表示されます。

6.4.3 アプリケーションの検証

アプリケーションにアクセスして、ユーザー・プリファレンスを管理できます。アプリケーションを検証するには、ブラウザを開いて、新しく作成したページのURL (たとえばhttp://localhost:7001/myapp/faces/MyPage.jspx)を指定します。次の図に示されているように、通信プリファレンスWebインタフェースが表示されます。

注意:

ブラウザでアプリケーションに初めてアクセスする場合、空白ページが表示される場合があります。これは、アプリケーションに認証が含まれていない場合の予想される動作です。このデモでは、簡素化のため、認証は含まれていません。実際には、Webアプリケーションは適切な認証により保護することをお薦めします。

デモ・アプリケーションを認証なしでテストする場合、次の回避策を試すことができます。Oracle SSO保護Webアプリケーションが別にある場合は、このアプリケーションにまずログインして、同じブラウザから目的のアプリケーションにアクセスできます。このようにすると、空白ページではなく、認証ユーザーのチャネルとフィルタが表示されます。

6.5 Javaアプリケーション・インタフェース

UCPサービスは、アプリーションから直接または間接的に消費できます。UCPサービスを間接的に消費するには、UMS APIをコールする必要があります。すると、メッセージがユーザーに送信されます。UMSは、ユーザーのプリファレンスに基づいて、最適なチャネルにメッセージを配信します。UCPサービスを直接消費する場合、UCP Java APIをコールする必要があります。たとえば、ユーザーが好むチャネルの配信タイプに応じてメッセージ形式を制御する場合、UCPサービスを直接消費することが必要になります。また、たとえば、特定のイベントでアプリケーションのユーザーにメッセージを送信する新しいアプリケーションを構築する場合、まずアプリケーションのデプロイメント時に各ユーザーがメッセージを受信できるように、UCP APIを使用してプログラムにより各ユーザーのデフォルト電子メール・チャネルを作成できます。ユーザーがデフォルト・チャネルとして電子メールを希望しない場合、後で自分でプリファレンスを変更できます。

UCP Java APIは、アプリーションを実装してUCPサービスを消費するためのプログラム・インタフェースを提供します。また、UCPは、チャネルとフィルタを管理するためのJava APIも提供します。Javaインタフェースoracle.ucs.userprefs.UserCommunicationPreferenceは、クライアントがUCPサービスにアクセスするためのプライマリ・インタフェースです。oracle.ucs.userprefsパッケージには、ユーザー通信プリファレンスのAPIクラスが含まれています。詳細は、ユーザー・メッセージング・サービスJava APIリファレンスを参照してください。これは、アドレス、フィルタセットなどのユーザーのプリファレンス・オブジェクトを管理するためのルート・インタフェースです。UCPサービスのAPIとインタフェースの詳細は、ユーザー・メッセージング・サービスJava APIリファレンスを参照してください。

6.5.1 配信プリファレンスの取得

ユーザーの配信プリファレンスは、JavaメソッドgetDeliveryPreference(String guid, String profileID, MapString,Object facts)を呼び出すことにより取得できます。guidは大文字と小文字が区別されます。12cで導入されたprofileIDパラメータは、特定プロファイルのユーザー・プリファレンスをターゲット設定するのに使用されます。各アプリケーションが特定のプロファイルをターゲットとすることをお薦めします。getDefaultProfileIdメソッドをコールしてアプリケーションにより取得できるデフォルトのプロファイルIDがあります。11g APIを呼び出す(プロファイルIDを使用しない)アプリケーションでは、デフォルト・プロファイルが自動的に使用されます。最終的に、このAPIをコールするアプリケーションは、ターゲット・プロファイルで一致するフィルタをUCPが選択できるように必要なファクトをすべて提供する必要があります。ファクトは、名前/値ペアのMap<String,Objectとします。ここで名前はビジネス条件とマップ内のキーです。このAPIの使用の詳細は、ユーザー・メッセージング・サービスJava APIリファレンスを参照してください。

次のコードの抜粋は、testUser1の配信プリファレンスを取得する方法を示しています。

// Obtain a UserCommunicationPreference object
UserCommunicationPreference ucp = UserPrefsServicesFactory.createUserCommunicationPreference();

// Set target user ID
String userId = “testUser1”;

// Specify the Profile ID, or default id from ucp.getDefaultProfileId()
String profileId = “soa”;

// Add all facts into Hashtable facts. Facts for Date and Time are not needed.
Map <String, String> facts = new HashMap<String, Object>();
facts.put(“Application”, “BPEL”);                   // Add application name
facts.put(“Due Date”, new Date());                        // Use current date
facts.put(“Amount”, new Double(“678.00”));          // Set number for 678

// Invoke getDeliveryPreference() function with userId, profileId and and facts.
DeliveryPreference dp = ucp.getDeliveryPreference(userId, profileId, facts);

// Retrieve Action Type and delivery Channels from the returned DeliveryPreference object.
ActionType at = dp.getActionType();              //Get Action Type
Vector <DeviceAddress>  channels = dp.getDevices();   //Get delivery Channels

6.5.2 チャネルの管理

UCPには、UCPリポジトリをアイデンティティ・ストア(通常はLDAP)と同期する自動チャネル管理機能があります。電子メール・アドレスがアイデンティティ・ストアに追加されると、UCPリポジトリに、その電子メール・アドレスに対応するEMAILチャネルが自動的に作成されます。このチャネルは、対応する電子メール・アドレスがアイデンティティ・ストアから削除されると、リポジトリから削除されます。UCPは、電子メール、IM、勤務先電話、自宅電話および携帯電話のチャネルを自動的に作成します。これらのチャネルはIDMチャネルと呼ばれます。

これらのチャネルは自動的にUCPにより管理されるので、アプリケーション側でチャネルの作成または削除は行わないでください。アプリケーション側では、これらのチャネルをデフォルト・チャネルとして設定または設定解除することのみ可能です。ただし、アプリケーションは、createDeviceAddress、getDeviceAddressesなどのAPIを使用してUSERチャネルを作成、変更または削除できます。1つのチャネルを、setDefaultChannel APIを使用してデフォルト・チャネルとして設定できます。

次のコードの抜粋は、特定の電子メール・アドレスを持つユーザーtestUser1の通信チャネルを作成する方法を示しています。

// Create an email channel for testUser1
DeviceAddress channel = ucp.createDeviceAddress(“testUser1”,               // User ID
“myEmail”,                        // Channel name
DeliveryType.EMAIL,             // Delivery Type for email
“myemail@somecompany.com”);        // Email address
ucp.save(channel);      // without this line, the Channel will not be persisted in UCP repository

チャネル名は各ユーザーで一意である必要があります。配信タイプと配信アドレスの組合せも、各ユーザーで一意である必要があります。次に、チャネルを管理する方法を示すサンプル・コードの抜粋をいくつか示します。

// Set the Channel as a default Channel
ucp.setDefaultAddress(“testUser1”,                // User ID
“soa”,                  // Profile ID
channel);                     // Channel to be flagged

// Unset a default Channel
ucp.removeDefaultAddress(“testUser1”,             // User ID
“soa”,                   // Profile ID
channel);              // Channel to be unset

// Modify the Channel's address
channel.setAddress(newemail@somecompany.com);
ucp.save(channel);      // without this line, the change will not be persisted in UCP repository

// Remove the Channel
ucp.delete(channel);

6.5.3 フィルタの管理

フィルタは、プロファイルごとのセットで管理されます。次のコードの抜粋は、ユーザーtestUser1のsoaプロファイルに対してメッセージング・フィルタを作成する方法を示しています。

// Get, or create if not exist, user's Filter Set for Profile “soa”
FilterSet  filterSet = ucp.getFilterSet(“testUser1”        // User ID
“soa”);               // Profile ID

// Create a new Filter
Filter  filter = filterSet.createFilter(“Test Email Filter”);      // Create a new Filter named “Test Email Filter”
filter.setConditionType(ConditionType.MATCH_ANY).        // Set the Condition Type to logical OR

// Create a new Condition
Condition  condition = filter.createCondition();         // Create a new Condition first
Map<String, BusinessRuleTerm> terms = ucp.getBusinessTerms();
BusinessRuleTerm term = terms.get(“Subject”);      // Business Term for “Subject”
condition.setFilterTerm(term);
condition.setTermOperation(TermOperationType.Contains);
condition.setOperandOne(“approved”);              // Set value “approved”
ArrayList<Condition> conditions = new ArrayList<Condition>();
conditions.add(condition);
fitler.setConditions(conditions);                       // Add the Condition list to the Filter

// Set Action Type
Filter.setActionType(ActionType.SERIAL);                // Set Action Type for SERIAL

// Get all the Channels for “soa” Profile
Set<DeviceAddress> allAddresses = ucp.getDeviceAddress(“testUser1”,     // User ID
“soa”);             // Profile ID
ArrayList<DeviceAddress> channels = new ArrayList(allAddresses);      // Convert to a List
filter.setDeviceAddressList(channels);                  // Add to the Filter as target Channels

// Add the Filter to the Filter Set
filterSet.addFilter(filter);

// Finally persist the FilterSet object
ucp.save(filterSet);                            // Required to persist the Filter

アプリケーションをデプロイするには、アプリケーションの開発ディスクリプタから共有ライブラリoracle.sdp.clientを参照する必要があります。アプリケーションは、UCPサービスと同じドメインにデプロイする必要があります。

UCPにはアプリケーションがチャネルとフィルタを管理するためのJava APIが用意されていますが、ユーザーが、UCPタスク・フロー・ライブラリを使用してWebアプリケーションに統合されたUCP Webインタフェースから、自分のプリファレンスを管理することをお薦めします。

A ユーザー・メッセージング・サービス・サンプル・アプリケーションの使用

この付録では、Oracle User Messaging Service (UMS) Java APIを使用するクライアント・アプリケーションを作成する方法について説明します。

この付録の構成は、次のとおりです。

- 第A.1項「UMSクライアントAPIを使用したクライアント・アプリケーションの作成」

- 第A.2項「UMSクライアントAPIを使用したクライアント・エコー・アプリケーションの作成」

- 第A.3項「新規アプリケーション・サーバー接続の作成」

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、次の場所にあるサンプルを参照してください。

http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.html

A.1 UMSクライアントAPIを使用したクライアント・アプリケーションの作成

この項では、usermessagingsampleというアプリケーションの作成方法について説明します。このアプリケーションは、アウトバウンド・メッセージングおよびメッセージ・ステータスの同期取得の両方に対してUMSクライアントAPIを使用するWebクライアント・アプリケーションです。usermessagingsampleはインバウンド・メッセージングもサポートしています。デプロイして構成したusermessagingsampleを使用すると、電子メール・クライアントにメッセージを送信できます。

このサンプルは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で入手できます。

A.1.1 開発の概要

次の各項では、usermessagingsample.earを例にして、アウトバウンド・メッセージング機能を持つアプリケーションの作成プロセスを説明します。

1. 第A.1.2項「電子メール・ドライバの構成」

2. 第A.1.3項「JDeveloper 12cを使用したアプリケーションの作成」

3. 第A.1.4項「アプリケーションのデプロイ」

4. 第A.1.5項「アプリケーションのテスト」

A.1.2 電子メール・ドライバの構成

Oracle User Messaging Serviceの電子メール・ドライバを有効にしてアウトバウンド・メッセージングおよびステータスの取得を実行するには、電子メール・ドライバを構成する際、SMTPメール・サーバーの名前をOutgoingMailServerプロパティ値として入力します。

電子メール・ドライバの構成の詳細は、『Oracle User Messaging Serviceの管理』を参照してください。

注意:

このサンプル・アプリケーションは汎用的であるため、適切なメッセージング・ドライバがデプロイされて構成されている場合は、他のチャネル経由のアウトバウンド・メッセージングもサポートできます。

A.1.3 JDeveloper 12cを使用したアプリケーションの作成

この項では、Windowsベース・ビルドのJDeveloperを使用して、usermessagingsampleを作成、コンパイルおよびデプロイする手順を説明します。

A.1.3.1 プロジェクトを開く

1. Oracle JDeveloperで、usermessagingsample.jws (usermessagingsample-src.zipファイルに含まれています)を開きます。

図A-1 Oracle JDeveloperの「アプリケーションを開く」ウィンドウ

Oracle JDeveloperのメイン・ウィンドウにプロジェクトが表示されます。

2. Webモジュールで「Oracle UMS Client」ライブラリが使用されていることを確認して、サンプル・アプリケーションのビルド依存性を満たします。

1. 「アプリケーション・ナビゲータ」で、Webモジュール「usermessagingsample-web」を右クリックし、「プロジェクト・プロパティ」を選択します。

2. 左側のペインで、「ライブラリとクラスパス」を選択します。

図A-2 ライブラリの確認

3. 「OK」をクリックします。

3. usermessagingsample-webプロジェクトの下にあるJavaファイルを検索し、メッセージング・クライアントAPIを使用してメッセージの送信、ステータスの取得およびメッセージの同期受信を実行する方法を確認します。MessagingClientインスタンスは、プロジェクトのSampleUtils.javaに作成されます。

A.1.4 アプリケーションのデプロイ

アプリケーションをデプロイする手順は、次のとおりです。

1. ナビゲーション・ペインでアプリケーションを右クリックし、「新規」を選択して、アプリケーション・サーバー接続を作成します。第A.3項「新規アプリケーション・サーバー接続の作成」の説明に従います。

2. アプリケーションをデプロイするには、「usermessagingsample application」→「デプロイ」→「usermessagingsample」→「デプロイ先」→「SOA_server」の順に選択します(図A-3)。

図A-3 プロジェクトのデプロイ

3. メッセージBuild Successfulがログに表示されていることを確認します。

4. メッセージDeployment Finishedがデプロイメント・ログに表示されていることを確認します。
アプリケーションが正常にデプロイされました。

サンプルを実行するには、その前に、Oracle User Messaging Serviceの追加ドライバを構成し、必要に応じて、ユーザー通信プリファレンスでメッセージを受信するユーザー用のデフォルト・デバイスを構成する必要があります。

注意:

詳細は、『Oracle User Messaging Serviceの管理』を参照してください。

A.1.5 アプリケーションのテスト

Oracle WebLogic Serverの実行中のインスタンスにusermessagingsampleをデプロイした後は、次の手順を実行します。

1. Webブラウザを起動し、サンプル・アプリケーションのアドレスをhttp://host:http-port/usermessagingsample/と入力します。たとえば、ブラウザのナビゲーション・バーにhttp://localhost:7001/usermessagingsample/と入力します。
プロンプトが表示された場合は、ログイン資格証明を入力します。たとえば、ユーザー名はweblogicと入力します。メッセージ・サンプルをテストするためのブラウザ・ページが表示されます(図A-4)。

図A-4 サンプル・アプリケーションのテスト

2. サンプル・メッセージの送信をクリックします。「メッセージの送信」ページが表示されます(図A-5)。

図A-5 テスト・メッセージのアドレス指定

3. (オプション)送信者アドレスを次の書式で入力します。
Email:sender_address

たとえば、Email:sender@oracle.comと入力します。

4. 受信者アドレスを1つ以上入力します。たとえば、Email:recipient@oracle.comと入力します。複数のアドレスを入力する場合は、次のようにカンマ区切りリストで入力します。
Email:recipient_address1, Email:recipient_address2

ユーザー通信プリファレンスを構成している場合、メッセージのアドレスは単にUser:usernameと指定できます。たとえば、User:weblogicと入力します。

5. (オプション)件名、つまり電子メールの内容を入力します。

6. 「送信」をクリックします。「メッセージ・ステータス」ページが表示され、トランザクションの進捗が表示されます(図A-6には、メッセージング・エンジンが受信して処理するメッセージが表示されています)。

図A-6 メッセージ・ステータス

7. リフレッシュをクリックしてステータスを更新します。電子メール・メッセージが電子メール・サーバーに配信されると、図A-7に示すように、ステータスの内容フィールドに「リモート・ゲートウェイへのアウトバウンド・メッセージの配信に成功しました。」と表示されます。

図A-7 メッセージ・ステータスの確認

A.2 UMSクライアントAPIを使用したクライアント・エコー・アプリケーションの作成

この項では、usermessagingsample-echoというアプリケーションの作成方法について説明します。このアプリケーションは、UMSクライアントAPIを使用して、電子メール・アドレスからメッセージを非同期で受信し、リプライを送信者にエコーして戻すデモ・クライアント・アプリケーションです。

注意:

Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.htmlの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で入手できます。

A.2.1 開発の概要

次の各項では、usermessagingsample-echo.earを例にして、非同期のインバウンドおよびアウトバウンド・メッセージング機能を持つアプリケーションの作成プロセスを説明します。

1. 第A.2.2項「電子メール・ドライバの構成」

2. 第A.2.3項「Oracle JDeveloper 12cを使用したアプリケーションの作成」

3. 第A.2.4項「アプリケーションのデプロイ」

4. 第A.2.5項「アプリケーションのテスト」

A.2.2 電子メール・ドライバの構成

Oracle User Messaging Serviceの電子メール・ドライバを有効にしてインバウンドやアウトバウンド・メッセージングおよびステータスの取得を実行するには、電子メール・ドライバを次のように構成します。

- OutgoingMailServerプロパティの値として、SMTPメール・サーバーの名前を入力します。

- IncomingMailServerプロパティの値として、IMAP4/POP3メール・サーバーの名前を入力します。受信ユーザー名とパスワードも構成します。

電子メール・ドライバの構成の詳細は、『Oracle Fusion Middleware Oracle User Messaging Serviceの管理』の電子メール・ドライバの構成に関する項を参照してください。

注意:

このサンプル・アプリケーションは汎用的であるため、適切なメッセージング・ドライバがデプロイされて構成されている場合は、他のチャネル経由のインバウンドおよびアウトバウンド・メッセージングもサポートできます。

A.2.3 Oracle JDeveloper 12cを使用したアプリケーションの作成

この項では、Windowsベース・ビルドのJDeveloperを使用して、usermessagingsample-echoを作成、コンパイルおよびデプロイする手順を説明します。

A.2.3.1 プロジェクトを開く

1. usermessagingsample-echo-src.zipをJDEV_HOME/communications/
samples/ディレクトリに解凍します。共有ライブラリ参照をプロジェクトで有効にするには、このディレクトリを使用する必要があります。

注意:

別のディレクトリを使用する場合は、oracle.sdp.messagingライブラリ・ソース・パスをJDEV_HOME/
communications/modules/oracle.sdp.messaging_12.1.2/
sdpmessaging.jarに更新する必要があります。

2. Oracle JDeveloperで、usermessagingsample-echo.jws (.zipファイルに含まれています)を開きます(図A-8)。

図A-8 プロジェクトを開く

Oracle JDeveloperのメイン・ウィンドウにプロジェクトが表示されます(図A-9)。

図A-9 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. 左側のペインで、「ライブラリとクラスパス」を選択します(図A-10)。

図A-10 ライブラリの確認

3. 「OK」をクリックします。

4. usermessagingsample-echo-webプロジェクトの下にあるJavaファイルを検索し、メッセージング・クライアントAPIを使用してアクセス・ポイントを登録および登録解除する方法、およびEchoListenerを使用してメッセージを非同期で受信する方法を確認します。

A.2.4 アプリケーションのデプロイ

アプリケーションをデプロイする手順は、次のとおりです。

1. ナビゲーション・ペインでアプリケーションを右クリックし、「新規」を選択して、アプリケーション・サーバー接続を作成します。第A.3項「新規アプリケーション・サーバー接続の作成」の説明に従います。

2. アプリケーションをデプロイするには、「usermessagingsample-echo application」→「デプロイ」→「usermessagingsample-echo」→「デプロイ先」→「SOA_server」の順に選択します(図A-11)。

図A-11 プロジェクトのデプロイ

3. メッセージBuild Successfulがログに表示されていることを確認します。

4. メッセージDeployment Finishedがデプロイメント・ログに表示されていることを確認します。
アプリケーションが正常にデプロイされました。

サンプルを実行するには、その前に、Oracle User Messaging Serviceの追加ドライバを構成し、必要に応じて、ユーザー通信プリファレンスでメッセージを受信するユーザー用のデフォルト・デバイスを構成する必要があります。

注意:

詳細は、『Oracle User Messaging Serviceによるアプリケーションの開発』を参照してください。

A.2.5 アプリケーションのテスト

Oracle WebLogic Serverの実行中のインスタンスにusermessagingsample-echoをデプロイした後は、次の手順を実行します。

1. Webブラウザを起動し、サンプル・アプリケーションのアドレスをhttp://host:http-port/usermessagingsample-echo/と入力します。たとえば、ブラウザのナビゲーション・バーにhttp://localhost:7001/usermessagingsample-echo/と入力します。
プロンプトが表示された場合は、ログイン資格証明を入力します。たとえば、ユーザー名はweblogicと入力します。メッセージ・サンプルをテストするためのブラウザ・ページが表示されます(図A-12)。

図A-12 サンプル・アプリケーションのテスト

2. アクセス・ポイントの登録/登録解除をクリックします。アクセス・ポイントの登録ページが表示されます(図A-13)。

図A-13 アクセス・ポイントの登録

3. アクセス・ポイントのアドレスを次の書式で入力します。
EMAIL:server_address

たとえば、EMAIL:myserver@example.comと入力します。

4. アクションとして登録を選択し、送信をクリックします。登録ステータス・ページが表示され、図A-14に示すように「登録済」と表示されます。

図A-14 アクセス・ポイントの登録ステータス

5. メッセージ・クライアント(電子メールの場合は電子メール・クライアント)から、前の手順でアクセス・ポイントとして登録したアドレスに、メッセージを送信します。
該当するチャネル用のUMSメッセージング・ドライバが正しく構成されている場合は、usermessagingsample-echoアプリケーションから戻されるエコー・メッセージを受信できるはずです。

A.3 新規アプリケーション・サーバー接続の作成

Oracle JDeveloperでアプリケーション・サーバー接続を定義し、アプリケーションをデプロイおよび実行します。次の手順を実行し、アプリケーション・サーバー接続を作成します。

1. プロジェクトを右クリックし、「新規」を選択します。コンテキスト・メニューから「ギャラリから」を選択します。「新規ギャラリ」ウィンドウの左側のペインで「接続」に移動し、項目リストから「アプリケーション・サーバー接続」を選択します。
「OK」をクリックします。

2. 図A-15に示されているように、「接続名」フィールドに、サーバー接続名(SOA_serverなど)を入力し、「次へ」をクリックします。

3. 「接続タイプ」ドロップダウン・リストから「WebLogic 12.x」を選択します。

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

4. 「認証」画面で、アプリケーション・サーバーの管理者のユーザー名とパスワードを入力します。「次へ」をクリックします。

5. 「構成」画面で、ホスト名、ポート、SSLポートおよびドメイン名を入力します。「次へ」をクリックします。

6. 「テスト」画面で、「接続のテスト」をクリックし、接続を検証します。テストが成功すると、確認メッセージが表示されます。「終了」をクリックします。
アプリケーション・サーバー接続が作成されました。

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2014, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

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の登録商標です。

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

制限付権利

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション（人的傷害を発生させる可能性があるアプリケーションを含む）への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性（redundancy）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。