Oracle® Fusion Middleware

Oracle WebLogic Serverプロキシ・プラグインを使用したOracle User Messaging Serviceによるアプリケーションの開発

12c (12.2.1.2.0)

E82668-01(原本部品番号:E79193-01)

2016年10月

このドキュメントでは、アプリケーションとメッセージの送受信を行うユーザー・メッセージング・サービスAPIの使用方法について説明します。

Oracle Fusion Middleware Oracle WebLogic Serverプロキシ・プラグインを使用したOracle User Messaging Serviceによるアプリケーションの開発12c (12.2.1.2.0)

E82668-01

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

原本著者:  Megha Sharma

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

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

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

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)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

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

このドキュメントの情報は、情報共有の目的のみに使用され、顧客諮問委員会の会員の立場で考慮されるか、ベータ・トライアル版契約のみに準じる必要があります。資料、規約または機能性を配信する義務はなく、購買決定に依存すべきではないものとします。このドキュメントに記載されている開発、リリース、およびすべての機能または機能性の時期は、オラクル社の独自の判断に従うものとします。

このドキュメントは、ソフトウェアまたは印刷物などの形式にかかわらず、オラクル社の独占的な財産である機密情報を含みます。この機密資料へのアクセスと使用は、オラクル社との間で締結され遵守に同意したOracle Master Agreement、Oracle License and Services Agreement、Oracle PartnerNetwork Agreement、オラクル販売契約、あるいはその他のライセンス契約の条件にしたがうものとします。オラクル社の文書による事前承諾なしに、このドキュメントおよびここに含まれる情報を開示、コピー、再生、またはオラクル社外部の他者に配布することはできません。このドキュメントは使用許諾契約の一部ではなく、オラクル社の子会社またはアフィリエイトとの契約上の合意に組み込まれません。

目次

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

はじめに

- 対象読者

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

- 関連ドキュメント

- 表記規則

1 概要

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

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

- 1.3 非推奨のAPI

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

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

- 2.1 UMS Java APIの概要

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

- 2.3 メッセージの送信

- 2.3.1 メッセージの作成

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

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

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

- 2.3.1.4 EmojisなどのUnicode文字を使用したメッセージの作成

- 2.3.1.5 添付を含むメッセージの作成(電子メールでのみ機能)

- 2.3.2 アドレスの作成

- 2.3.2.1 アドレスのタイプ

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

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

- 2.3.2.4 受信者のタイプ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- 2.5 メッセージの受信

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

- 2.5.2 同期受信

- 2.5.3 非同期受信

- 2.5.3.1 リスナーの作成

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

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

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

- 2.6 クラスタ環境の構成

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

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

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

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

- 2.9 プログラムによるドライバの選択

- 2.10 メッセージの優先度および有効期間の設定

- 2.11 ユーザー・プリファレンスのアプリケーション・パーティショニング・プロファイルIDの指定

- 2.12 セキュリティの構成

- 2.13 スレッド・モデル

- 2.13.1 リスナー・スレッド

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

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

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

- 3.3 メッセージの送信

- 3.3.1 メッセージの作成

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

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

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

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

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

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

- 3.3.4 アドレスの作成

- 3.3.4.1 受信者のタイプ

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

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

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

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

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

- 3.4.2.1 リスナーの作成

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

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

- 3.4.2.4 登録

- 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 UMS WebサービスAPIを使用したメッセージ再送信の指定

- 3.8 セキュリティの構成

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

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

- 3.9 スレッド・モデル

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 新規アプリケーション・サーバー接続の作成

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

- A.4.1 概要

- A.4.1.1 提供されるファイル

- A.4.2 事前作成されたサンプルの実行

- A.4.3 サンプルのテスト

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

はじめに

このドキュメントでは、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) APIの概要および次の項について説明します。

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

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

- 非推奨のAPI

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

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

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

Oracle User Messaging Serviceのアーキテクチャおよび機能の詳細は、『Oracle User Messaging Serviceの管理』のOracle User Messaging Serviceの概要に関する項を参照してください。

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

Oracle Fusion Middlewareアプリケーションの開発者は、UMS Java APIまたはUMS WebサービスAPIのいずれかを使用して、アプリケーションにメッセージング・サービスを実装できます。アプリケーションがUSMメッセージング・エンジンと同じJEEサーバーから実行されている場合、UMS Java APIを使用します。そうでない場合、UMS WebサービスAPIを使用します。WebサービスAPIの場合、提供されているUMSクライアント・コードは、実際のWebサービス・コールをラップし、UMS Java APIと非常に類似したUMS WebサービスAPIを利用します。

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

UMS Java APIの動作

UMSクライアント・ライブラリは、MessagingClientとListenerManagerの2つのメイン・コンポーネントで構成されます。MessagingClientは、MessagingClientFactoryを使用して作成され、メッセージの送受信、AccessPoints(アプリケーションがメッセージの受信に使用するアドレス)の登録およびリスナーの設定にクライアントが使用する手段です。AddressesおよびAccessPointsは、MessagingFactoryを使用して作成されます。ListenerManagerは、アプリケーションがリスナーを使用してメッセージまたはステータスを非同期で受信する場合にコールバックを処理します。

MessagingClientの作成時、ユーザー・メッセージング・エンジンにアプリケーションが登録され、メッセージまたはステータスが着信すると、ListenerManagerがリスナーのonMessageまたはonStatusメソッドをコールします。

次のコードの抜粋では、メッセージング・クライアントの作成方法、アクセス・ポイントの登録方法およびメッセージの送信方法を示しています。

//Create MessagingClient
HashMap<String, Object> clientParameters = new HashMap<String, Object>();
clientParameters.put(ApplicationInfo.APPLICATION_NAME, appName);
MessagingClient messagingClient = MessagingClientFactory.createMessagingClient(clientParameters);

//Create sender and recipient addresses
Address sender = MessagingFactory.createAddress("EMAIL:alice@example.com");
Address recipient = MessagingFactory.createAddress("EMAIL:bob@example.com");

//Create and register an accessPoint for the Address(es) you want to be able to receive messages for.
AccessPoint accessPoint = MessagingFactory.createAccessPoint(sender);
messagingClient.registerAccessPoint(accessPoint);

//Create and send a message
Message message = MessagingFactory.createTextMessage("Hello World");
message.setSubject("Test Subject");
message.addRecipient(recipient);
message.addSender(sender);
String mid = messagingClient.send(message);

1.3 非推奨のAPI

Parlay X Multimedia Messaging APIおよびユーザー・メッセージング・サービスEJB APIは、このリリースでは非推奨です。非推奨のEJB APIはUMS Java APIに置き換えられ、非推奨のParlay X Multimedia Messaging APIはUMS WebサービスAPIに置き換えられています。第2章「ユーザー・メッセージング・サービスJava APIを使用したメッセージの送受信」および第3章「ユーザー・メッセージング・サービスWebサービスAPIを使用したメッセージの送受信」を参照してください。

非推奨のAPIの詳細は、次の場所にある開発者ガイドを参照してください。

http://docs.oracle.com/middleware/1212/ums/UMSDG/index.html

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

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

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

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

Oracle JDeveloper 12cを使用してこれらのサンプル・アプリケーションを構築およびデプロイでき、Webインタフェースを介して通信プリファレンスを管理することもできます(ユーザー通信プリファレンスの管理を参照)。

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

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

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

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

- UMS Java APIの概要

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

- メッセージの送信

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

- メッセージの受信

- クラスタ環境の構成

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

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

- プログラムによるドライバの選択

- メッセージの優先度および有効期間の設定

- ユーザー・プリファレンスのアプリケーション・パーティショニング・プロファイルIDの指定

- セキュリティの構成

- スレッド・モデル

注意:
Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、次の場所にあるサンプルを参照してください。
http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.html

2.1 UMS Java APIの概要

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

コンシューマは、EJBや他のJava EEモジュールをそれぞれのアプリケーションにデプロイする必要はありませんが、アプリケーションのランタイム・クラスパスでUMSライブラリが使用可能であることを確認する必要があります。デプロイメントは、共有ライブラリoracle.sdp.clientとしてです。

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

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

MessagingClientオブジェクトは、UMS Java APIユーザーに対して必須です。このオブジェクトは、たとえば、メッセージの送信、送信されたメッセージのステータス情報の取得およびメッセージの同期的な受信に使用されます。MessagingClientオブジェクトは、MessagingClientFactory.createMessagingClient()メソッドを使用して作成されます。

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

アプリケーションを停止またはアンデプロイする場合、またはクライアントを使用するEJB Beanを破棄する場合は、MessagingClientを解放する必要があります。

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

表2-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の各キーに値を指定することで制御できます。

LISTENER_TRANSACTION_MODE

オプション。メッセージの受信時、トランザクションでのリスナーの使用を、このパラメータの値を指定することで制御できます。

MessagingClientインスタンスで使用するリソースが不要となったときに解放するには、MessagingClientFactory.remove(client)をコールします。このメソッドをコールしない場合は、ワーカー・スレッドやJMSリスナーなど一部のリソースがアクティブのまま残る場合があります。

例2-1に、MessagingClientインスタンスを作成するサンプル・コードを示します。

例2-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からアクセスできます。

2.3 メッセージの送信

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

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

作成可能なメッセージのタイプには、プレーン・テキスト・メッセージ、テキスト/プレーンおよびテキスト/htmlパートで構成可能なマルチパート・メッセージ、および添付が含まれます。ただし、ドライバによって実装されているプロトコルにより、ドライバを使用して送信できるメッセージの種類が制限される場合があります。この問題に対処するために、単一メッセージでドライバ・チャネル(配信タイプ)に固有のペイロードを作成することができます(第2.3.1.3項「異なる配信タイプを使用した、複数受信者用の単一メッセージへの配信チャネル固有のペイロード作成」を参照)。

次の表に、各種のドライバに使用されるデバイス・アドレス・タイプを示します。

表2-2 ドライバのデバイス・アドレス・タイプ

ドライバ

アドレス・タイプ

SMPP

デバイス・アドレス・タイプ - SMS

例 - SMS:1234

XMPP

デバイス・アドレス・タイプ - IM

例 - IM:n.n@example.com

拡張

デバイス・アドレス・タイプ - URI:<protocol>

例 - 任意に指定できます(例: URI:myExt:n_n)

電子メール

デバイス・アドレス・タイプ - EMAIL

例 - EMAIL:n.n@example.com

GCM

デバイス・アドレス・タイプ - URI:gcm

例 - URI:gcm:sdks98sdfj098dsslkjasqijer93

ツイッター

デバイス・アドレス・タイプ - URI:twitter

例 -URI:twitter:n_n

APNS

デバイス・アドレス・タイプ - URI:apns

例 -URI:apns:sdks98sdfj098dsslkjasqijer93

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

- メッセージの作成

- アドレスの作成

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

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

2.3.1 メッセージの作成

この項では、作成できる様々なタイプのメッセージについて説明します。メッセージ・プロパティは表2-3に示されています。

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

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

例2-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;charset=utf-8");

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

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

例2-3 UMS Java APIを使用したマルチパート・メッセージまたは代替メッセージの作成

Message message = MessagingFactory.createMessage();
message.setSubject("Testing attachments");
MimeMultipart mp = new MimeMultipart("related");
MimeBodyPart part1 = new MimeBodyPart();
part1.setText("A sample pdf.");
MimeBodyPart pdfPart = new MimeBodyPart();
pdfPart.attachFile("/tmp/sample-content.pdf");
pdfPart.setDisposition(Part.ATTACHMENT);
mp.addBodyPart(part1);
mp.addBodyPart(pdfPart);
message.setContent(mp, "related");

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

メッセージを複数の受信者、または実行時にユーザー・プリファレンスによって解決されるUSERアドレスに送信する場合、複数のチャネルが関わることがあります。Oracle UMSアプリケーション開発者は、各チャネルに対して正しいマルチパート書式を指定する必要があります。

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

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

例2-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リファレンスからアクセスできます。

2.3.1.4 EmojisなどのUnicode文字を使用したメッセージの作成

ASCII以外の文字を使用する場合は、UMSメッセージの文字セットをそれに応じて設定する必要があります(UTF-8など)。例2-5は、文字「ä」およびエモーティコンを使用したメッセージの作成を示すサンプル・コードです。

例2-5 EmojisなどのUnicode文字を使用したメッセージの作成

// message with 'ä'
Message message1 = MessagingFactory.createTextMessage("\u00e4", "UTF-8");
// message with SMILING FACE WITH SUNGLASSES (U+1F60E)
Message message2 = MessagingFactory.createTextMessage("\ud83d\ude0e", "UTF-8");

2.3.1.5 添付を含むメッセージの作成(電子メールでのみ機能)

例2-6に、添付を含むメッセージを作成する方法を示します。

例2-6 メッセージの添付の作成

Message message = MessagingFactory.createMessage();
message.setSubject("Testing attachments");

MimeMultipart mp = new MimeMultipart("mixed");

MimeBodyPart part1 = new MimeBodyPart();
part1.setText("A sample pdf.");

MimeBodyPart part2 = new MimeBodyPart();
part2.attachFile("/tmp/sample-content.pdf");

mp.addBodyPart(part1);
mp.addBodyPart(part2);
message.setContent(mp, MimeType.MULTIPART_MIXED.toString());

2.3.2 アドレスの作成

この項では、使用可能な様々なタイプのUMSアドレスおよびアドレス・オブジェクトの作成方法を説明します。

2.3.2.1 アドレスのタイプ

この項では、UMSで使用可能な様々なタイプのアドレスについて説明します。

- デバイス・アドレス: デバイス・アドレスには、電子メール・アドレス、インスタント・メッセージ・アドレス、uri:twitter、uri:apns、uri:gcm、uri:popup、電話番号など、様々なタイプがあります。「アドレス・オブジェクトの作成」を参照してください。

- フェイルオーバー・アドレス: メッセージが当初のアドレスに送信できなかった場合に使用されるバックアップまたはフェイルオーバー・アドレス。「フェイルオーバー・アドレスを使用した受信者の作成」を参照してください。

- ユーザー・アドレス: ユーザー・アドレスは、メッセージの送信中にデバイス・アドレスに解決されるユーザー・リポジトリ内のユーザーIDです。「ユーザー・プリファレンス・ベースのメッセージング」を参照してください。

- グループ・アドレス: グループ・アドレスは、メッセージの送信中にユーザーまたはデバイス(あるいはその両方)のアドレスに解決されるLDAPグループ(またはエンタープライズ・ロール)です。「グループ・メッセージの送信」を参照してください。

- アプリケーション・ロール・アドレス: アプリケーション・ロール・アドレスは、メッセージの送信中に、グループ、ユーザーまたはデバイス(あるいはそのすべて)のアドレスに解決されます。「アプリケーション・ロールへのメッセージの送信」を参照してください。

2.3.2.2 Addressオブジェクトの作成

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

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

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

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

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

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

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

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

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

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

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

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

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

2.3.2.2.4 電子メール配信タイプを使用する場合に、送信者アドレスに表示名を追加する

例2-10は、電子メール配信タイプを使用する場合に、送信者に表示名を追加するコードを示しています。

例2-10 電子メール配信タイプを使用する場合に、送信者アドレスに表示名を追加する

Address sender = MessagingFactory.createAddress("EMAIL:\"Mr Bob\" <bob@example.com>");
message.addSender(sender);

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

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

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

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

または、

Address recipient = MessagingFactory.createAddress("EMAIL:john@example.com");
Address failoverAddr = MessagingFactory.createAddress("SMS:123456");
recipient.setFailoverAddress(failoverAddr);

2.3.2.4 受信者のタイプ

UMS Java APIでは、電子メール・ドライバで使用されるTo/Cc/Bcc受信者を使用したメッセージの送受信をサポートしています。

- メッセージの送信でCc/Bcc受信者を指定するには、oracle.sdp.messaging.MessagingFactory.buildAddressメソッドを使用してoracle.sdp.messaging.Addressオブジェクトを作成します。引数はアドレス値(たとえばuser@domain.com)、配信タイプ(たとえばDeliveryType.EMAIL)および電子メール・モード(たとえば「Cc」や「Bcc」)です。

- (たとえば受信したメッセージ内にある)既存のアドレス・オブジェクトの受信者タイプを特定するには、oracle.sdp.messaging.MessagingFactory.getRecipientTypeメソッドを使用してAddressオブジェクトを渡します。それに対して受信者タイプを示す文字列が戻されます。

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

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

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

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

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

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

ユーザー・プリファレンスの詳細は、ユーザー通信プリファレンスの管理を参照してください。

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

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

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

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

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

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

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

メッセージをLDAPグループまたはエンタープライズ・ロールに送信できます。

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

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

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は、最終的にはユーザー・アドレスで置換され、例2-14で示されているような結果になります。

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

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

各ユーザーのユーザー・プリファレンスによって、メッセージが最終的に到達する場所が決定されます。詳細は、ユーザー通信プリファレンスの管理を参照します。

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

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

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

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

グループはユーザーに解決され、次に各ユーザーの電子メール・アドレスがフェッチされます。この場合のユーザーの電子メール・アドレスは、ユーザー・プリファレンスに使用されるものと同じです。電子メール・アドレスがユーザーに存在しない場合、そのユーザーはスキップされます。

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

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

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

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

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

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

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

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

アプリケーション・ロールmyAppRoleは、最終的にユーザー・アドレスで置換されます。

アプリケーションIDがコール元アプリケーションのIDである場合は、受信者アドレスの作成時に、アプリケーションIDを指定する必要はありません。UMSは、JpsFilter(web.xml)またはJpsInterceptor(ejb-jar.xml)のapplication.nameパラメータで指定されているアプリケーションIDを自動的にフェッチします。フィルタおよびインターセプタ・パラメータの詳細は、『Oracle Platform Security Servicesによるアプリケーションの保護』を参照してください。

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

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

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

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

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

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

メッセージを送信した後は、Oracle UMSを使用して、メッセージ・ステータスを同期または非同期で取得します。1人の受信者ごとに、ステータス情報を含むステータス・オブジェクトが1つあり、これにより、メッセージが保留中か、メッセージの送信が成功したか、メッセージの送信が失敗したか、フェイルオーバー・アドレスの有無、およびメッセージが自動的に再送信されるかを把握できます。

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

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

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

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

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

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

例2-18 デフォルトのステータス・リスナー

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

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

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

注意:
Oracle UMSでは、Listenerオブジェクトの保存時、弱い参照が使用されます。つまり、クライアント・アプリケーションでは、Listenerオブジェクトへの参照を続け、ガベージ・コレクションが行われないようにする必要があります。

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

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

2.5 メッセージの受信

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

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

2.5.2 同期受信

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

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

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

2.5.3 非同期受信

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

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

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

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

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

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

messagingClient.setMessageListener(new MyListener());

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

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

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

注意:
Oracle UMSでは、Listenerオブジェクトの保存時、弱い参照が使用されます。つまり、クライアント・アプリケーションでは、Listenerオブジェクトへの参照を続け、ガベージ・コレクションが行われないようにする必要があります。

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

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

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

2.6 クラスタ環境の構成

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

- UMSメッセージング・クライアントの作成時に2つのクライアント・アプリケーションで同じApplicationName構成パラメータが使用されている場合、それらは同じアプリケーションのインスタンスであるとみなされます。明示的に設定されていない場合、UMSでは、クライアント・アプリケーションのデプロイメント名がApplicationNameとして使用されます。

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

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

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

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

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

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

2.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フェーズ・コミット・トランザクション・プロトコルを使用する分散トランザクション処理システムに、リソース・マネージャとして参加できます。

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

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

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

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

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

transaction.begin();
// Some business logic
// ...
String messageID = mClient.send(message);
// Some business logic
// ...
transaction.commit();

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

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

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

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

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

サーバー・クラッシュによりコミットに失敗したメッセージを受信するには、サーバーとクライアントを再起動するか、特定のサーバー移行手順を実行する必要があります。詳細は、『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リファレンスを参照してください。

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

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

mListener = new MyListener();
mClient.registerAccessPoint(MessagingFactory.createAccessPoint(receiverAddr), mListener, 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

例2-23 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()

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

メッセージの送信が完全に失敗であると分類された場合、つまり、フェイルオーバー・チェーンがすべて使用済である場合、そのメッセージのUMSサーバーによる再送信が自動的にスケジュールされます。これは、そのメッセージの送信が成功するまで、または構成した再送信回数に達するまで繰り返されます。ただし、UMS Java APIを使用すると、次の例に示すようにsetMaxResendメソッドをコールして1メッセージ当たりの再送信の回数をオーバーライドできます。

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

第2.4項「メッセージ・ステータスの取得」で説明したように、送信されたメッセージのステータスを調査する際、StatusオブジェクトでgetTotalFailovers()/getFailoverOrder()およびgetMaxResend()/getCurrentResend()をコールして、フェイルオーバー・チェーンおよび再送信の両方に関する情報を取得します。フェイルオーバーの順序がフェイルオーバー総数と同じになると、APIユーザーには、フェイルオーバー・チェーンがすべて使用済であることがわかります。ただし、再送信機能は、フェイルオーバー・チェーンのループとして動作します。maxResendがcurrentResendと同じになり、フェイルオーバーの順序がフェイルオーバー総数と同じになると、再送信およびフェイルオーバー・チェーンがすべて使用済となります。

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

2.9 プログラムによるドライバの選択

同じタイプの複数のドライバが使用されていない限り、UMSサーバー・エンジンでは、クライアント・アプリケーションによって送信されるUMSメッセージで定義される配信タイプに基づいてドライバが選択されます。たとえば、メッセージの受信者アドレスがEMAIL:john@example.comの場合は電子メール・ドライバが選択され、受信者アドレスがSMS:1234の場合はSMSドライバが選択され、受信者アドレスがuri:twitterの場合はTwitterドライバが選択されます。

DeliveryType列挙では、メッセージの配信チャネルが定義されます。詳細は、ユーザー・メッセージング・サービスJava APIリファレンスを参照してください。

ただし、システム・トポロジで、複数のドライバ・インスタンスが必要な場合(たとえば、異なる電子メール・サーバーで構成されている2つの電子メール・ドライバなど)、特定のドライバがUMSサーバー・エンジンで選択されて送信UMSメッセージを作成できます。このためには、クライアント・アプリケーション内のメッセージの次のプロパティがUMSドライバ構成設定にマップされていることを確認する必要があります。

UMSメッセージ・プロパティ

UMSドライバ構成パラメータ

DeliveryType

SupportedDeliveryTypes
受信者アドレスの配信タイプはSupportedDeliveryTypesと一致する必要があります。そうでない場合、ドライバは選択されません。

ContentType

SupportedContentTypes
UMSメッセージ内のContentTypeオブジェクトは、ドライバ構成内のSupportedContentTypesパラメータと一致する必要があります。そうでない場合、ドライバは選択されません。

送信者アドレス

SenderAddresses
ドライバ構成内のSenderAddressesパラメータに値が定義されている場合、UMSメッセージ送信者アドレスはその値と一致する必要があります。そうでない場合、ドライバは選択されません。

MessageInfo - プロトコル

SupportedProtocols
UMSメッセージ内のMessageInfoオブジェクトに、protocolに設定されている値がある場合、そのプロトコルは、ドライバ構成内のSupportedProtocolsパラメータに定義されているプロトコルと同じである必要があります。そうでない場合、ドライバは選択されません。

MessageInfo - キャリア

SupportedCarriers
UMSメッセージ内のMessageInfoオブジェクトに、carrierに設定されている値がある場合、そのキャリアは、ドライバ構成内のSupportedCarriersパラメータに定義されているプロトコルと同じである必要があります。そうでない場合、ドライバは選択されません。

MessageInfo - アプリケーション名

SupportedApplicationName
UMSメッセージ内のMessageInfoオブジェクトでApplication Nameに値が設定されている場合、そのアプリケーション名はドライバの構成のSupportedApplicationNameパラメータに定義されている名前と同じである必要があります。そうでない場合、ドライバは選択されません。

注意:
ドライバによって前述の条件が渡されない場合、失敗ステータスがアプリケーションに戻され、警告ログも生成されます。
複数のドライバによって前述の条件が渡された場合、そのいずれかがUMSエンジンによって選択されます。

1つのドライバによってのみ前述の条件が渡された場合、そのドライバが選択されます。

ドライバ構成パラメータの詳細は、『Oracle User Messaging Serviceの管理』のユーザー・メッセージング・サービス・ドライバの構成に関する項を参照してください。

2.10 メッセージの優先度および有効期間の設定

高負荷など特定の状況では、メッセージの送信時にUMSメッセージ優先度を指定することが有効です。メッセージの優先度は、内部JMSキューで使用されます。また、ドライバによって実装されているプロトコルが優先度をサポートしている場合、UMSメッセージ優先度は対応するプロトコルの優先度に変換されます。次の例に示すように、優先度を指定します。

例2-24 メッセージの高優先度の設定

MessageInfo msgInfo = message.getMessageInfo();
msgInfo.setPriority(MessagePriorityType.HIGH);
String mid = messagingClient.send(message);

すべての使用可能な優先度タイプの詳細は、ユーザー・メッセージング・サービスJava APIリファレンスのMessagePriorityType定義を参照してください。

メッセージが制限された期間のみ有効である場合は、メッセージに有効期間を設定できます。有効期間の設定が有効になるかどうかは、基礎となるメッセージング・プロトコルによって異なります(表2-3を参照)

例2-25 メッセージの有効期間の設定

MessageInfo msgInfo = message.getMessageInfo();
msgInfo.setExpiration(3600);
String mid = messagingClient.send(message);

表2-3は、メッセージの優先度およびメッセージの有効期間をサポートするドライバ(つまり、基礎となるメッセージング・プロトコル)を示しています。

表2-3 メッセージ・プロパティ

ドライバ

有効期間(○/×)

優先度(○/×)

SMPP

○

○

XMPP

×

×

電子メール

×

○

拡張

×

×

ツイッター

×

×

GCM

○

×

APNS

○

×

2.11 ユーザー・プリファレンスのアプリケーション・パーティショニング・プロファイルIDの指定

ユーザー通信プリファレンスは、USER接頭辞(例: USER:john.doe)を含む受信者アドレスに対して起動されます。プリファレンスは、2つのプロファイルにパーティション化できます。メッセージの送信時のプロファイルの指定方法の例を次に示します。

例2-26 アプリケーション・パーティショニング・プロファイルIDの指定

Address recipient = MessagingFactory.createAddress("USER:john.doe");
message.addRecipient(recipient);
MessageInfo msgInfo = message.getMessageInfo();
msgInfo.setProfileId(”myProfileId”);
String mid = messagingClient.send(message);

ユーザー通信プリファレンスおよびプロファイルの詳細は、ユーザー通信プリファレンスの管理を参照してください。

2.12 セキュリティの構成

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

2.13 スレッド・モデル

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

2.13.1 リスナー・スレッド

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

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

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

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

- UMS WebサービスAPIの概要

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

- メッセージの送信

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

- メッセージの受信

- クラスタ環境の構成

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

- セキュリティの構成

- スレッド・モデル

注意:
Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、次の場所にあるサンプルを参照してください。
http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.html

3.1 UMS WebサービスAPIの概要

UMS WebサービスAPIは、機能的にはJava APIと同じです。Webサービス・タイプおよびインタフェースのJAX-WSおよびJAXBバインディングは、対応するJava APIクラスと類似した名前を持ちます。つまり、UMS Java APIとUMS WebサービスAPIの両方のクライアント・コードは同じように見えます。ただし、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)から入手できます。

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

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

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

表3-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資格証明ストア・マップからのリモート・ユーザー名/パスワード情報の参照に使用する資格証明ストア・キーを指定します。

OWSMポリシー・パラメータの詳細は、Oracle Web Services Manager Java APIリファレンスを参照してください。

インスタンス化された後のMessagingClientは、再構成できません。かわりに、新しい構成を使用してMessagingClientクラスの新しいインスタンスを作成する必要があります。

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

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

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

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

3.3 メッセージの送信

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

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

3.3.1 メッセージの作成

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3.3.4 アドレスの作成

アドレスのタイプ、Addressオブジェクトの作成方法およびフェイルオーバー・アドレスの定義方法の詳細は、第2.3.2項「アドレスの作成」を参照してください。

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

3.3.4.1 受信者のタイプ

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

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

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

3.3.5 メッセージ内のユーザー・プリファレンス

WS APIを使用してメッセージを作成する際、そのメッセージのユーザー・プリファレンスでビジネス条件のファクトを指定することもできます。詳細は、第2.3.3項「ユーザー・プリファレンス・ベースのメッセージング」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

3.4.2.4 登録

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

- setStatusListener(ListenerReference listener)

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

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

3.5 メッセージの受信

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

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

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

AccessPointは、着信メッセージを受信するための1つ以上のデバイス・アドレスを表します。アクセス・ポイントの詳細は、第2.5.1項「アクセス・ポイントの登録」を参照してください。

3.5.2 同期受信

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

注意:
複数のUMSサーバーのデプロイメントでは、WS APIユーザーはすべてのUMSサーバーでreceiveが呼び出されることを確認する必要があります。これを行うには、たとえば、ロード・バランサでラウンドロビン・アルゴリズムが使用されるようにします。または、かわりに「非同期受信」で説明されているように、このユースケースでreceiveを使用せず、リスナーを使用して非同期受信を使用します。

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

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

3.5.3 非同期受信

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

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

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

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

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

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

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

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

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

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

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

3.5.4 メッセージ・フィルタ

アプリケーションでMessageFilterを使用すると、配信されるメッセージをより強力に制御できます。メッセージ・フィルタの作成の詳細は、第2.5.4項「メッセージのフィルタリング」を参照してください。

3.6 クラスタ環境の構成

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

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

メッセージの送信が完全に失敗であると分類された場合、つまり、フェイルオーバー・チェーンがすべて使用済である場合、そのメッセージのUMSサーバーによる再送信が自動的にスケジュールされます。これは、そのメッセージの送信が成功するまで、または構成した再送信回数に達するまで繰り返されます。ただし、UMS WebサービスAPIを使用すると、次の例に示すようにsetMaxResendメソッドをコールして1メッセージ当たりの再送信の回数をオーバーライドできます。

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リファレンスを参照してください。

3.8 セキュリティの構成

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

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

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

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

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

Oracle Web Services Managerを使用したWebサービスの保護の詳細は、Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理を参照してください。

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

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

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

例3-11 ユーザー名トークンによるセキュリティの使用によるセキュアなコールバック・エンドポイントの確立

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

3.9 スレッド・モデル

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

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

この付録では、Oracle User Messaging Service (UMS) Java APIを使用するクライアント・アプリケーションを作成する方法について説明します。

この付録の構成は、次のとおりです。

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

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

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

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

注意:
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クライアント・ライブラリを含める必要があります。

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」→「デプロイ先」→「ums_server」の順に選択します。

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-3)。

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

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

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

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

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

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

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

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

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

図A-5 メッセージ・ステータス

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

図A-6 メッセージ・ステータスの確認

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.3/
sdpmessaging.jarに更新する必要があります。

2. Oracle JDeveloperで、usermessagingsample-echo.jws (.zipファイルに含まれています)を開きます(図A-7)。

図A-7 プロジェクトを開く

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

図A-8 Oracle JDeveloperのメイン・ウィンドウ

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

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

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

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

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

図A-9 ライブラリの確認

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

4. usermessagingsample-echo-webプロジェクトの下にあるJavaファイルを検索し、メッセージング・クライアントAPIを使用してアクセスを登録および登録解除する方法、およびEchoListenerを使用してメッセージを非同期で受信する方法を確認します。

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

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

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

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

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-10)。

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

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

図A-11 アクセスの登録

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

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

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

図A-12 アクセスの登録ステータス

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

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

Oracle JDeveloperでアプリケーション・サーバー接続を定義し、アプリケーションをデプロイおよび実行します。次の手順を実行し、アプリケーション・サーバー接続を作成します。

1. プロジェクトを右クリックし、「新規」を選択します。コンテキスト・メニューから「ギャラリから」を選択します。「新規ギャラリ」ウィンドウの左側のペインで「接続」に移動し、項目リストから「アプリケーション・サーバー接続」を選択します。
「OK」をクリックします。

2. 「接続名」フィールドで、サーバー接続名(SOA_serverなど)を入力し、「次へ」をクリックします。

3. 「接続タイプ」ドロップダウン・リストから「WebLogic 12.x」を選択します。

4. 「認証」画面で、アプリケーション・サーバーの管理者のユーザー名とパスワードを入力します。「次へ」をクリックします。

5. 「構成」画面で、WebLogic Serverのホスト名、ポート、SSLポートおよびドメイン名を入力します。「次へ」をクリックします。

6. 「テスト」画面で、「接続のテスト」をクリックし、接続を検証します。テストが成功すると、確認メッセージが表示されます。「終了」をクリックします。
アプリケーション・サーバー接続が作成されました。

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

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

注意:
Oracle User Messaging Serviceのコード・サンプルに関する詳細を参照したり、サンプルを自分で実行するには、次の場所にあるサンプルを参照してください。
http://www.oracle.com/technetwork/indexes/samplecode/sample-ums-1454424.html

この節では、以下のトピックについて説明します。

- 第A.4.1項「概要」

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

- 第A.4.3項「サンプルのテスト」

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

A.4.1 概要

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

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

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

A.4.1.1 提供されるファイル

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

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

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

A.4.2 事前作成されたサンプルの実行

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

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

図A-13 Oracle JDeveloperでプロジェクトを開く

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

図A-14 Oracle JDeveloperのメイン・ウィンドウ

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

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

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

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

図A-15 ライブラリの追加

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

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

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

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

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

A.4.3 サンプルのテスト

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

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

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

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

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

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

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

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

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

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

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

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

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

図A-18 アクセス・ポイントの登録

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

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

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

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

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

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

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

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