ヘッダーをスキップ
Oracle® Fusion Middleware Oracle SOA Suite開発者ガイド
11g リリース1 (11.1.1.7)
B56238-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

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

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

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

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

この章には次の項が含まれます:


注意:

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

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


64.1 UMS Java APIの概要

UMS Java APIは、POJO/POJI APIとして公開されています。このAPIのコンシューマは、ファクトリ・メソッドを使用してMessagingClientオブジェクトのインスタンスを取得できます。コンシューマは、EJBや他のJava EEモジュールをそれぞれのアプリケーションにデプロイする必要はありませんが、アプリケーションのランタイム・クラスパスでUMSライブラリが使用可能であることを確認する必要があります。デプロイメントは、共有ライブラリ「oracle.sdp.client」としてです。

UMS Java APIは、次のようにグループ化されたパッケージで構成されています。

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

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

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

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

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

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

パラメータ ノート

APPLICATION_NAME

オプション。デフォルトでは、クライアントはそのデプロイメント名で識別されます。この識別子は、ApplicationInfo.APPLICATION_NAMEキーに値を指定することで上書きできます。

APPLICATION_INSTANCE_NAME

オプション。指定が必要なのは、クラスタ化された特定のユースケースの場合か、セッションベースのルーティングを利用する場合のみです。

SDPM_SECURITY_PRINCIPAL

オプション。デフォルトでは、クライアントのリソースは、同じアプリケーション名のすべてのアプリケーションおよびすべてのセキュリティ・プリンシパルで使用できます。この動作は、ApplicationInfo.SDPM_SECURITY_PRINCIPALキーに値を指定することで上書きできます。セキュリティ・プリンシパルが指定されている場合、アプリケーションのリソース(メッセージ、アクセス・ポイントなど)に関連する後続のすべてのリクエストは、同じセキュリティ・プリンシパルを使用して実行する必要があります。

MESSAGE_LISTENER_THREADS
STATUS_LISTENER_THREADS

オプション。メッセージまたはステータスの非同期受信にリスナーを使用する場合、リスナー・ワーカー・スレッドの数は、MessagingConstants.MESSAGE_LISTENER_THREADSおよびMessagingConstants.STATUS_LISTENER_THREADSの各キーに値を指定することで制御できます。

RECEIVE_ACKNOWLEDGEMENT_MODE
LISTENER_ACKNOWLEDGEMENT_MODE

オプション。メッセージの受信時には、MessagingConstants.RECEIVE_ACKNOWLEDGEMENT_MODE(同期受信)およびMessagingConstants.
LISTENER_ACKNOWLEDGEMENT_MODE(非同期受信)の各キーに値を指定して、信頼性モードを制御できます。


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

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

例64-1 プログラミングによるMessagingClientインスタンスの作成

Map<String, Object> params = new HashMap<String, Object>();
// params.put(key, value);  // if optional parameters need to be specified.
MessagingClient messagingClient = MessagingClientFactory.createMessagingClient(params); 

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

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

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

64.3 メッセージの送信

クライアント・アプリケーションでは、oracle.sdp.messagingMessagingFactoryクラスを使用して、メッセージ・オブジェクトを作成できます。MessagingFactory。このクラスの他のメソッドを使用して、AddressesAccessPointsMessageFiltersおよびMessageQueriesを作成できます。これらのメソッドの詳細は、Javadocを参照してください。

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

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

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

64.3.1 メッセージの作成

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

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

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

例64-2 UMS Java APIを使用したプレーン・テキスト・メッセージの作成

Message message = MessagingFactory.createTextMessage("This is a Plain Text message.");

または、

Message message = MessagingFactory.createMessage();
message.setContent("This is a Plain Text message.", "text/plain");

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

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

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

Message message = MessagingFactory.createMessage();
MimeMultipart mp = new MimeMultipart("alternative");
MimeBodyPart mp_partPlain = new MimeBodyPart();
mp_partPlain.setContent("This is a Plain Text part.", "text/plain");
mp.addBodyPart(mp_partPlain);
MimeBodyPart mp_partRich = new MimeBodyPart();
mp_partRich
        .setContent(
                "<html><head></head><body><b><i>This is an HTML part.</i></b></body></html>",
                "text/html");
mp.addBodyPart(mp_partRich);
message.setContent(mp, "multipart/alternative");

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

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

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

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

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

Message message = MessagingFactory.createMessage();
 
// create a top-level multipart/alternative MimeMultipart object.
MimeMultipart mp = new MimeMultipart("alternative");
 
// create first part for SMS payload content.
MimeBodyPart part1 = new MimeBodyPart();
part1.setContent("Text content for SMS.", "text/plain");
 
part1.setHeader(Message.HEADER_NS_PAYLOAD_PART_DELIVERY_TYPE, "SMS");
 
// add first part
mp.addBodyPart(part1);
 
// create second part for EMAIL and IM payload content.
MimeBodyPart part2 = new MimeBodyPart();
MimeMultipart part2_mp = new MimeMultipart("alternative");
MimeBodyPart part2_mp_partPlain = new MimeBodyPart();
part2_mp_partPlain.setContent("Text content for EMAIL/IM.", "text/plain");
part2_mp.addBodyPart(part2_mp_partPlain);
MimeBodyPart part2_mp_partRich = new MimeBodyPart();
part2_mp_partRich.setContent("<html><head></head><body><b><i>" + "HTML content for EMAIL/IM." +
"</i></b></body></html>", "text/html");
part2_mp.addBodyPart(part2_mp_partRich);
part2.setContent(part2_mp, "multipart/alternative");
 
part2.addHeader(Message.HEADER_NS_PAYLOAD_PART_DELIVERY_TYPE, "EMAIL");
part2.addHeader(Message.HEADER_NS_PAYLOAD_PART_DELIVERY_TYPE, "IM");
 
// add second part
mp.addBodyPart(part2);
 
// set the content of the message
message.setContent(mp, "multipart/alternative");
 
// set the MultiplePayload flag to true
message.setMultiplePayload(true);

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

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

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

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

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

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

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

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

64.3.5.1 アドレスのタイプ

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

64.3.5.2 Addressオブジェクトの作成

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

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

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

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

Address recipient = MessagingFactory.createAddress("Email:john@example.com");
64.3.5.2.2 1つのバッチ内での複数のAddressオブジェクトの作成

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

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

String[] recipientsStr = {"Email:john@example.com", "SMS:123456"};
Address[] recipients = MessagingFactory.createAddress(recipientsStr);
64.3.5.2.3 メッセージへの送信者または受信者のアドレスの追加

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

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

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

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

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

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

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

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

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

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

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

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

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


注意:

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


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

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

Message message = MessagingFactory.createMessage();
// create and add a user recipient
Address userRecipient1 = MessagingFactory.createAddress("USER:sampleuser1");
message.addRecipient(userRecipient1);
// specify business term facts
message.setMetaData(Message.NAMESPACE_NOTIFICATION_PREFERENCES, "Customer
Name", "ACME");
//  where "Customer Name" is the Business Term name, and "ACME" is the
Business Term value (i.e, fact).

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

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

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

現行ステータスの同期取得を実行するには、MessagingClient APIから次のフローを使用します。

String messageId = messagingClient.send(message);
Status[] statuses = messagingClient.getStatus(messageId);

または、

Status[] statuses = messagingClient.getStatus(messageId, address[]) --- where
 address[] is an array of one or more of the recipients set in the message.

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

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

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

リスナーは純粋なプログラムです。リスナーは、oracle.sdp.messaging.Listenerインタフェースを実装して作成します。このインタフェースは、具体クラス(既存クラスの1つ、新規クラス、あるいは無名クラスか内部クラス)として実装できます。

次のコード例は、ステータス・リスナーの実装方法を示しています。

import oracle.sdp.messaging.Listener;
 
    public class StatusListener implements Listener {

      @Override
      public void onMessage(Message message, Serializable correlator) {
      }  
      @Override
      public void onStatus(Status status, Serializable correlator) {
          System.out.println("Received Status: " + status + " with optional correlator: " +
 
correlator);
      }
    }

Listenerオブジェクトへの参照は、「デフォルトのステータス・リスナー」および「メッセージごとのステータス・リスナー」の説明に従って、setStatusListenerまたはsendメソッドに渡します。メッセージのステータスが着信すると、UMSインフラストラクチャでは、リスナーのonStatusメソッドが必要に応じて起動されます。

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

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

例64-10 デフォルトのステータス・リスナー

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

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

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

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

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

64.5 メッセージの受信

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

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

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

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

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

番号9000のSMSアクセス・ポイントを登録するには、次のように指定します。

AccessPoint accessPointSingleAddress =
 MessagingFactory.createAccessPoint(AccessPoint.AccessPointType.SINGLE_ADDRESS,
 DeliveryType.SMS, "9000");
messagingClient.registerAccessPoint(accessPointSingleAddress);

番号が9000から9999の範囲内のSMSアクセス・ポイントを登録するには、次のように指定します。

AccessPoint accessPointRangeAddress =
 MessagingFactory.createAccessPoint(AccessPoint.AccessPointType.NUMBER_RANGE,
 DeliveryType.SMS,"9000,9999");
messagingClient.registerAccessPoint(accessPointRangeAddress);

64.5.2 同期受信

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

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

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


注意:

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


64.5.3 非同期受信

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

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

リスナーは純粋なプログラムです。リスナーは、oracle.sdp.messaging.Listenerインタフェースを実装して作成します。このインタフェースは、具体クラス(既存クラスの1つ、新規クラス、あるいは無名クラスか内部クラス)として実装できます。

次のコード例は、メッセージ・リスナーの実装方法を示しています。

import oracle.sdp.messaging.Listener;
 
    public class MyListener implements Listener {
 
      @Override
      public void onMessage(Message message, Serializable correlator) {
          System.out.println("Received Message: " + message + " with optional correlator: " +
correlator);
      }  
      @Override
      public void onStatus(Status status, Serializable correlator) {
          System.out.println("Received Status: " + status + " with optional correlator: " +
correlator);
      }
     
    }

リスナー・オブジェクトへの参照は、「デフォルトのメッセージ・リスナー」および「アクセス・ポイントごとのメッセージ・リスナー」の説明に従って、setMessageListenerまたはregisterAccessPointメソッドに渡します。アプリケーションのメッセージが着信すると、UMSインフラストラクチャでは、リスナーのonMessageメソッドが起動されます。

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

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

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

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

messagingClient.setMessageListener(new MyListener());

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

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

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

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

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

64.5.4 メッセージ・フィルタ

アプリケーションでMessageFilterを使用すると、配信されるメッセージをより強力に制御できます。MessageFilterには、一致基準とアクションが含まれています。アプリケーションでは、一連のメッセージ・フィルタを登録できます。登録されたメッセージ・フィルタは、着信(受信)メッセージに順に適用され、メッセージが基準と一致するとアクションが実行されます。たとえば、アプリケーションでMessageFiltersを使用して必要なブラックリストを実装すると、指定した送信者アドレスからのすべてのメッセージを拒否できます。

MessagingFactory.createMessageFilterを使用してメッセージ・フィルタを作成し、そのメッセージ・フィルタをMessagingClient.registerMessageFilterを使用して登録できます。フィルタは、アプリケーションの現行フィルタ・チェーンの最後に追加されます。受信したメッセージは、フィルタ・チェーンを順に通過します。メッセージがフィルタの基準に一致すると、そのフィルタのアクションが即時に実行されます。メッセージがフィルタに一致しない場合のデフォルト・アクションでは、そのメッセージが受信されてアプリケーションに配信されます。たとえば、件名が"spam"のメッセージを拒否するには、次のように指定します。

MessageFilter subjectFilter = MessagingFactory.createMessageFilter("spam",
 MessageFilter.FieldType.SUBJECT, null, MessageFilter.Action.REJECT);
messagingClient.registerMessageFilter(subjectFilter);

電子メール・アドレスspammer@foo.comからのメッセージを拒否するには、次のように指定します。

MessageFilter senderFilter =
 MessagingFactory.createBlacklistFilter("spammer@foo.com");
messagingClient.registerMessageFilter(senderFilter);

64.6 クラスタ環境の構成

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

64.7 セキュリティの構成

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

64.8 スレッド・モデル

通常、UMS Java APIを使用するクライアント・アプリケーションはマルチスレッド化されています。通常のシナリオにはEJBインスタンスのプールが含まれ、各シナリオではMessagingClientインスタンスと、Webコンテナの複数のスレッドによって提供されるサーブレット・インスタンスが使用されます。UMS Java APIは、次のスレッド・モデルをサポートしています。

次に、典型的なユースケースを示します。

64.8.1 リスナー・スレッド

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

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

この項では、usermessagingsampleというアプリケーションの作成方法について説明します。このアプリケーションは、アウトバウンド・メッセージングおよびメッセージ・ステータスの同期取得の両方に対してUMSクライアントAPIを使用するWebクライアント・アプリケーションです。usermessagingsampleはインバウンド・メッセージングもサポートしています。デプロイして構成したusermessagingsampleを使用すると、電子メール・クライアントにメッセージを送信できます。


注意:

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

このページにナビゲートした後は、検索条件の「UMS」を入力して「検索」をクリックすることで、Oracle User Messaging Serviceのコード・サンプルを検出できます。


このサンプルはWebアプリケーション・モジュール(WAR)に重点を置き、いくつかのHTMLフォームとサーブレットを定義します。Webアプリケーション・モジュールのコードと対応するXMLファイルは、提供されているusermessagingsample-src.zipソースから使用できます。サーブレットでは、UMSクライアントAPIを使用して、UMSクライアント・インスタンスを作成し(次に、アプリケーションの情報を登録します)、メッセージを送信します。

このアプリケーションはusermessagingsample.earというEnterprise Archive(EAR)ファイルとしてパッケージ化されており、その構造は次のとおりです。

ビルトインのサンプル・アプリケーションおよびソース・コード(usermessagingsample-src.zip)は、OTNで入手できます。

64.9.1 開発の概要

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

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

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

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

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

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

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

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


注意:

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


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

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

64.9.3.1 プロジェクトを開く

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

    図64-1 Oracle JDeveloperの「アプリケーションを開く」ウィンドウ

    図64-1の説明が続きます
    「図64-1 Oracle JDeveloperの「アプリケーションを開く」ウィンドウ」の説明

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

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

    図64-2の説明が続きます
    「図64-2 Oracle JDeveloperのメイン・ウィンドウ」の説明

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

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

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

      図64-3 ライブラリの確認

      図64-3の説明が続きます
      「図64-3 ライブラリの確認」の説明

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

  3. usermessagingsample-webプロジェクトの下にあるJavaファイルを検索し、メッセージング・クライアントAPIを使用してメッセージの送信、ステータスの取得およびメッセージの同期受信を実行する方法を確認します。MessagingClientインスタンスは、プロジェクトのSampleUtils.javaに作成されます。

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

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

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

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

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

    図64-4の説明が続きます
    「図64-4 プロジェクトのデプロイ」の説明

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

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

    アプリケーションが正常にデプロイされました。

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


    注意:

    詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。


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

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

  1. Webブラウザを起動し、サンプル・アプリケーションのアドレスをhttp://host:http-port/usermessagingsample/と入力します。たとえば、ブラウザのナビゲーション・バーにhttp://localhost:7001/usermessagingsample/と入力します。

    プロンプトが表示された場合は、ログイン資格証明を入力します。たとえば、ユーザー名はweblogicと入力します。メッセージ・サンプルをテストするためのブラウザ・ページが表示されます(図64-5)。

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

    図64-5の説明が続きます
    「図64-5 サンプル・アプリケーションのテスト」の説明

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

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

    図64-6の説明が続きます
    「図64-6 テスト・メッセージのアドレス指定」の説明

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

    Email:sender_address

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

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

    Email:recipient_address1, Email:recipient_address2

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

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

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

    図64-7 メッセージ・ステータス

    図64-7の説明が続きます
    「図64-7 メッセージ・ステータス」の説明

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

    図64-8 メッセージ・ステータスの確認

    図64-8の説明が続きます
    「図64-8 メッセージ・ステータスの確認」の説明

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

この項では、usermessagingsample-echoというアプリケーションの作成方法について説明します。このアプリケーションは、UMSクライアントAPIを使用して、電子メール・アドレスからメッセージを非同期で受信し、リプライを送信者にエコーして戻すデモ・クライアント・アプリケーションです。


注意:

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

このページにナビゲートした後は、検索条件の「UMS」を入力して「検索」をクリックすることで、Oracle User Messaging Serviceのコード・サンプルを検出できます。


このアプリケーションはusermessagingsample-echo.earというEnterprise Archive(EAR)ファイルとしてパッケージ化されており、その構造は次のとおりです。

ビルトインのサンプル・アプリケーションおよびソース・コード(usermessagingsample-echo-src.zip)は、OTNで入手できます。

64.10.1 開発の概要

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

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

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

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

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

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

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

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

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


注意:

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


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

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

64.10.3.1 プロジェクトを開く

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


    注意:

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


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

    図64-9 プロジェクトを開く

    図64-9の説明が続きます
    「図64-9 プロジェクトを開く」の説明

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

    図64-10 Oracle JDeveloperのメイン・ウィンドウ

    図64-10の説明が続きます
    「図64-10 Oracle JDeveloperのメイン・ウィンドウ」の説明

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

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

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

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

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

      図64-11 ライブラリの確認

      図64-11の説明が続きます
      「図64-11 ライブラリの確認」の説明

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

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

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

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

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

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

    図64-12 プロジェクトのデプロイ

    図64-12の説明が続きます
    「図64-12 プロジェクトのデプロイ」の説明

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

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

    アプリケーションが正常にデプロイされました。

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


    注意:

    詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。


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

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

  1. Webブラウザを起動し、サンプル・アプリケーションのアドレスをhttp://host:http-port/usermessagingsample-echo/と入力します。たとえば、ブラウザのナビゲーション・バーにhttp://localhost:7001/usermessagingsample-echo/と入力します。

    プロンプトが表示された場合は、ログイン資格証明を入力します。たとえば、ユーザー名はweblogicと入力します。メッセージ・サンプルをテストするためのブラウザ・ページが表示されます(図64-13)。

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

    図64-13の説明が続きます
    「図64-13 サンプル・アプリケーションのテスト」の説明

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

    図64-14 アクセス・ポイントの登録

    図64-14の説明が続きます
    「図64-14 アクセス・ポイントの登録」の説明

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

    EMAIL:server_address

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

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

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

    図64-15の説明が続きます
    「図64-15 アクセス・ポイントの登録ステータス」の説明

  5. メッセージ・クライアント(電子メールの場合は電子メール・クライアント)から、前の手順でアクセス・ポイントとして登録したアドレスに、メッセージを送信します。

    該当するチャネル用のUMSメッセージング・ドライバが正しく構成されている場合は、usermessagingsample-echoアプリケーションから戻されるエコー・メッセージを受信できるはずです。

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

次の手順を実行し、アプリケーション・サーバー接続を作成します。

  1. プロジェクトを右クリックし、「新規」「接続」「アプリケーション・サーバー接続」の順に選択して、新規アプリケーション・サーバー接続を作成します(図64-16)。

    図64-16 新規アプリケーション・サーバー接続

    図64-16の説明が続きます
    「図64-16 新規アプリケーション・サーバー接続」の説明

  2. 接続にSOA_serverという名前を付けて、「次へ」をクリックします(図64-17)。

  3. 「接続タイプ」「WebLogic 10.3」を選択します。

    図64-17 新規アプリケーション・サーバー接続

    図64-17の説明が続きます
    「図64-17 新規アプリケーション・サーバー接続」の説明

  4. 認証情報を入力します。ユーザー名の一般的な値はweblogicです。

  5. 「接続」ダイアログで、SOA管理サーバーのホスト名、ポートおよびSSLポートを入力し、WLSドメインのドメイン名を入力します。

  6. 「次へ」をクリックします。

  7. 「テスト」ダイアログで、「接続のテスト」をクリックします。

  8. メッセージSuccess!が表示されていることを確認します。

    アプリケーション・サーバー接続が作成されました。