この章では、Oracle User Messaging Service (UMS)ドライバの用途、機能および制限事項について説明します。次のUMSドライバについて説明します。
UMSドライバには、電子メール・サーバーやショート・メッセージ・サービス・センター(SMSC)など、様々なメッセージング・ゲートウェイにUMSを接続するためのプロトコル固有の実装が含まれています。ドライバは、特定のインストールでメッセージング・チャネルの可用性に応じて、個別にデプロイまたはアンデプロイできます。
電子メール・ドライバは、メッセージを送受信します。すべての関連する電子メール・プロトコル(電子メールの送信にはSMTP、電子メールの受信にはIMAPおよびPOP3)がサポートされ、あらゆる標準メール・サーバーと通信できます。セキュリティ・プロトコルのTLSまたはSSLを有効にして電子メールのコンテンツを通信時に保護するためのサポートが実装されています。電子メール・ドライバでは、必要なプロトコルおよびクライアントを実装する標準のJavaコンポーネントであるJavaMail v1.4を使用して、電子メールの作成、アクセス、送受信を実行します。
電子メール・ドライバでは、マルチスレッド設計を使用して複数のメール・ボックスを(IMAPまたはPOP3プロトコルで)ポーリングできます。ポーリングするメール・ボックスが1つしかない場合、この設計のため、そのメール・ボックスで機能するスレッドが1つのみになるという制限事項が1つあります。
電子メール・ドライバは、POP3、IMAP4およびSMTPの各プロトコルと互換性があります。表3-1に、電子メール・ドライバのゲートウェイ・ベンダーとそのバージョンを示します。
電子メール・ドライバでは、ヘッダー、コンテンツ・タイプと文字セット・エンコーディング、MIMEマルチパートと本文パートを含め、UMSメッセージから電子メール・メッセージへ(およびその逆)の変換を処理します。着信メッセージの場合、UMSメッセージの受信者はそのメールを受信した電子メール・ボックスの電子メール・アドレスです。受信者が電子メールの宛先、CCまたはBCCのフィールドに入っていたかどうかは、Addressメタデータを見るとわかります。
アウトバウンド電子メールが配信できない場合、受信者のメール・サーバーで配信状態通知(DSN)を作成し、送信者の電子メール・アドレスに返信することができます。電子メール・ドライバでは、受信したDSNとDSNで参照しているアウトバウンド電子メールと照合し、そのアウトバウンド・メッセージの"配信失敗"ステータスを作成しようとします。このような場合、配信成功ステータスがしばらくすると配信失敗ステータスに変ることがあります。
ショート・メッセージ・ピアツーピア(SMPP)プロトコルは、ショート・メッセージ・サービス・センター(SMS-C)、外部ショート・メッセージング・エンティティ(ESME)などのSMSピア・エンティティ間でSMSメッセージを交換するためのTCP/IPベースの業界プロトコルです。UMS SMPPドライバは、ESMEとして実装されます。SMPPプロトコルv3.4に基づいています。
送信機能が有効な場合、SMPPドライバは送信用の送信側システムとしてSMS-CへのTCP接続を1つ開きます。ドライバの受信機能が有効な場合は、受信用の受信ドライバとしてSMS-Cに別の接続を開きます。ドライバとSMS-C間のすべての通信に必要なのは、2つのTCP接続(両方ともドライバが開始する)のみです。
送信テキスト・メッセージは、UMSメッセージの件名とコンテンツを連結したものです。着信SMSのコンテンツは、UMSメッセージのコンテンツに挿入されます。UMSメッセージの件名は空になります。
UMSメッセージのAPI優先度レベルは、次のようにSMPPの優先度に変換されます。
MessagePriorityType.LOWEST、MessagePriorityType.LOW、MessagePriorityType.NORMAL => SMPPの優先度: 0
MessagePriorityType.HIGH => SMPPの優先度: 1
MessagePriorityType.HIGHEST => SMPPの優先度: 2
ただし、SMPPの優先度は、SMPPドライバの構成パラメータ"PriorityAllowed"によって制限されることがあります。
SMPPドライバは、UMS API MessageInfoの"有効期限"データを受け入れ、メッセージとともにその情報をSMS-Cに渡します。
XMPPドライバは、Extensible Messaging and Presence Protocol (XMPP)を介したリアルタイムIMの場合に、Oracle Fusion Middlewareからエンド・ユーザーへの一方向または双方向のアクセスを提供します。このドライバを使用すると、エンド・ユーザーは、選択したIMクライアントを介して、アラート通知を受信したり、複数のアプリケーションと相互にチャットすることができます。
XMPPは、IM用のオープンXMLベースのプロトコルで、クライアント/サーバー・アーキテクチャで構成されており、ユビキタス電子メール・ネットワークに似ています。受信者は、[username]@domain[/resource]形式のXMPP ID (またはJabber ID (JID))によってアドレス指定されます。UMSでXMPPドライバを使用するには、Jabber/XMPPサーバーへのアクセス権と、ログインに使用するUMS XMPPドライバ・インスタンスのXMPPアカウントが必要です。
XMPPのエンド・ユーザーは、XMPPクライアントを使用してXMPPサーバーに接続して、インスタント・メッセージを他のXMPPユーザーに送信します。ただし、XMPPはIMに利用できる唯一のプロトコル・ネットワークではありません。XMPPには、拡張可能なモジュール型アーキテクチャがあります。これは固有のIMネットワークに統合され、XMPPユーザーは他のネットワーク上のユーザーと通信できるようになります。
XMPPサーバーでは複数のドライバ(つまりクライアント)を使用して同じアカウントにアクセスできないため、XMPPドライバは複数のサーバーにスケール・アウトできません。2つ目のドライバがログインすると、XMPPサーバーでは最初のドライバが切断されます。しばらくして最初のドライバが再接続し、2番目のドライバが切断される、というようになります。この設定では、送信メッセージは、メッセージを処理するドライバがその特定の瞬間に接続している場合のみ機能します。
XMPPサーバーに対する接続問題がある場合、XMPPドライバは、リモート・サーバーに再接続しようとし続けますが、緊密なループを回避するために遅延が大きくなります。
拡張ドライバは、UMSで定義されたNotification WebServicesインタフェースを実装する構成済エンドポイントURLにメッセージを送信します。メッセージング・ゲートウェイ(ゲートウェイに対するアダプタ)ではこのWebサービスを実装できるため、UMSで変更しなくてもUMSが拡張されます。
また、拡張ドライバでは、Oracleのワークフローおよびコラボレーション製品の1つであるATKポップアップ・サービスなどのADFビジネス・コンポーネントのWebアプリケーションへのメッセージ送信がサポートされています。実行時に、拡張ドライバでは、構成済エンドポイントURLがNotification WebServiceであるかATKポップアップ・サービスであるかを検出し、それに応じて動作します。
拡張ドライバは、送信メッセージに対してのみ使用されます。
ドライバは、WebServicesコール経由で外部システムと通信し、エンドポイントURLのホスト部分は仮想IPです。つまり、外部システムはロード・バランサの背後にあります。
UMSメッセージのコンテンツは、バイナリではなく、テキストにする必要があります。拡張ドライバを使用してUMSで新しいプロトコルを有効にするには、次のタスクを実行します。
MessagingNotifyService
WSDL (umsnotify.wsdl
)を基に、Webサービス・リスナー・エンドポイントを実装およびデプロイします。
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://xmlns.oracle.com/ucs/messaging/extension" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="MessagingNotifyService" targetNamespace="http://xmlns.oracle.com/ucs/messaging/extension"> <wsdl:types> <xsd:schema targetNamespace="http://xmlns.oracle.com/ucs/messaging/extension"> <xsd:element name="notification"> <xsd:complexType> <xsd:sequence> <xsd:element name="messageId" type="xsd:string" minOccurs="0" maxOccurs="1"> <xsd:annotation> <xsd:documentation>Unique message identifier from User Messaging Service.</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="sender" type="xsd:string"> <xsd:annotation> <xsd:documentation>The sender address.</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="recipient" type="xsd:string"> <xsd:annotation> <xsd:documentation>The recipient address (typically username).</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="subject" type="xsd:string" minOccurs="0" maxOccurs="1"> <xsd:annotation> <xsd:documentation>The subject of the message, if available.</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="contentType" type="xsd:string" default="text/plain"> <xsd:annotation> <xsd:documentation>The MIME type of the message. e.g. text/plain, text/html, text/xml.</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="content" type="xsd:string"> <xsd:annotation> <xsd:documentation>The main body of the message. Textual content only (no binary content).</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="parameters" type="tns:parameter" minOccurs="0" maxOccurs="unbounded"> <xsd:annotation> <xsd:documentation>Additional key-value pairs. This interface does not define any specific key-value pair meanings. Use of such parameters is defined on a private basis by particular implementations of this interface. </xsd:documentation> </xsd:annotation> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="parameter"> <xsd:sequence> <xsd:element name="name" type="xsd:string"> <xsd:annotation> <xsd:documentation>Parameter name</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="value" type="xsd:string"> <xsd:annotation> <xsd:documentation>Parameter value</xsd:documentation> </xsd:annotation> </xsd:element> </xsd:sequence> </xsd:complexType> <xsd:element name="notificationResponse"> <xsd:complexType> <xsd:sequence> <xsd:element name="messageId" type="xsd:string" minOccurs="0" maxOccurs="1"> <xsd:annotation> <xsd:documentation>A message identifier returned in response to successfully accepting the message. If returned, the identifier should be unique. Note: A fault is raised if the message cannot be accepted.</xsd:documentation> </xsd:annotation></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="notificationFault"> <xsd:complexType> <xsd:sequence> <xsd:element name="code" type="xsd:string"/> <xsd:element name="message" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="notifyRequest"> <wsdl:part element="tns:notification" name="parameters" /> </wsdl:message> <wsdl:message name="notifyResponse"> <wsdl:part element="tns:notificationResponse" name="parameters"/> </wsdl:message> <wsdl:message name="notifyException"> <wsdl:part element="tns:notificationFault" name="parameters"/> </wsdl:message> <wsdl:portType name="Notify"> <wsdl:operation name="invoke"> <wsdl:input message="tns:notifyRequest"/> <wsdl:output message="tns:notifyResponse"/> <wsdl:fault message="tns:notifyException" name="NotifyException"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="NotifySOAPBinding" type="tns:Notify"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="invoke"> <soap:operation soapAction="http://www.oracle.com/ucs/messaging/extension" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> <wsdl:fault name="NotifyException"> <soap:fault name="NotifyException" use="literal"/> </wsdl:fault> </wsdl:operation> </wsdl:binding> <wsdl:service name="NotifyService"> <wsdl:port binding="tns:NotifySOAPBinding" name="Notify"> <soap:address location="http://localhost:8001/NotifyService"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
次のタスクを実行して、拡張ドライバを構成します。
usermessagingdriver-extensionという事前デプロイ済の拡張ドライバ(または新しいデプロイメント)を、UMS (usermessagingserver)が稼働している適切なサーバーにターゲット設定して、ドライバを起動します。
Enterprise Manager Fusion Middleware Controlで、usermessagingserverのホーム・ページに移動します。
「ユーザー・メッセージング・サービス」をクリックし、「ドライバ・プロパティ」に移動します。
ドライバusermessagingdriver-extensionを選択して編集するか、新しいドライバ・デプロイメントと同じ名前で新しいドライバを作成します。
「ドライバ固有の構成」で、新しい拡張エンドポイント構成グループを追加してプロパティを指定します。EndpointURLは、手順1で作成したWebサービス・リスナー・エンドポイントへのURLです。Protocolは、通知サポートを追加する新しいメッセージング・チャネルの値(myProtocolなど)です。
「共通構成」で、Supported Protocolsを、各拡張エンドポイント・グループに定義されているプロトコルのカンマ区切りのリストで更新します。
「OK」をクリックして、構成を保存します。
これで、拡張ドライバを使用したUMSでの新しいメッセージング・チャネル(プロトコル)の構成および統合は完了です。
この新しいチャネル(プロトコル)に通知を送信するには、次のURIアドレッシング形式を使用して、URI配信タイプに受信者を指定する必要があります。
URI:scheme:scheme-specific-address-value
ここで、scheme
はプロトコルです。URI配信タイプはオプションです。たとえば、拡張ドライバがプロトコルmyProtocolをサポートするように構成されている場合、アプリケーションでmyProtocol:john.doe@example.com宛のメッセージを作成できます。
また、エンド・ユーザーは、「ユーザー通信プリファレンス」UIで新しいチャネル・タイプの新しいメッセージング・チャネルを作成することによって、メッセージング・プリファレンスを宣言することもできます。ユーザー・プリファレンスは、アプリケーションがユーザーベースの通知(つまり、USER:usernameの形式の受信者宛)を送信する場合にのみ適用されます。
Twitterドライバは、Twitter APIサーバーと通信するUMSドライバです。Twitterサーバーとの双方向のメッセージング・サービスを提供します。そのため、Twitterドライバを使用すると、アプリケーション・ユーザーはTwitterフィードを公開し、これに対する応答を受信できます。
Twitterドライバの特徴は次のとおりです。
複数の認証モード: Twitter REST APIでは次の2種類の認証を使用できます。
OAuth: これはシングル・サインオン・タイプの認証モードです。この認証モードはFusion Middleware Control (EM)のページから有効にできます。ドライバ固有のEMページで、「認証モード」パラメータをOauthに設定し、2組のキー、つまりカスタマ・キー、カスタマ・シークレット、アクセス・トークンおよびアクセス・トークン・シークレットを構成する必要があります。これらのキーの詳細は、表4-15「Twitterドライバのカスタム・プロパティ」を参照してください。
xAuth: この認証モードはOAuthに基づいています。Twitterドライバは、OAuthの要件を満たしていないアプリケーションにのみxAuthを許可します。この認証モードを有効にするには、ユーザーがリクエストごとにユーザー名とパスワードを入力する必要があります。
複数のメッセージング・オプション: Twitterドライバを使用する場合に、ユーザーが目にするメッセージには次の2つのカテゴリがあります。
アウトバウンド・メッセージ: UMSクライアント・アプリケーションからTwitterサーバーに送信されるメッセージをアウトバウンド・メッセージと呼びます。このメッセージはツイートまたはダイレクト・メッセージとして処理されます。
ツイート: Twitterドライバに構成されているユーザー名に対して送信されるメッセージはツイートとして投稿されます。たとえば、TwitterドライバがユーザーTWという資格証明で構成されている場合、URI:twitter:TW
に送信されるメッセージはすべて、ユーザーTWからのツイートとして投稿されます。
ダイレクト・メッセージ: 構成済ユーザーのユーザー名から別のTwitterユーザーに送信されるメッセージはダイレクト・メッセージとして処理できます。Twitterでは、構成済ユーザーはそのユーザーの直接のフォロワにのみダイレクト・メッセージを送信できます。ダイレクト・メッセージの受信者がTwitterに登録されていないユーザーの場合、または送信者の直接のフォロワではない場合、メッセージの配信は失敗し、エラー・メッセージが表示されます。
インバウンド・メッセージ: TwitterドライバがTwitterサーバーから受信するメッセージをインバウンド・メッセージと呼びます。インバウンド・メッセージには次のタイプがあります。
タイムライン・メッセージ: これは構成済ユーザーまたは構成済ユーザーがフォローしているTwitterユーザーが投稿したツイートのリストです。
ダイレクト・メッセージ: これは構成済ユーザーがフォーローするTwitterユーザーから構成済ユーザーに送信されたプライベート・メッセージです。
ツイート・サイズの制限: Twitterでは各ツイートの長さが140バイトまでに制限されています。この制限を超えるツイートはTwitterサーバーで拒否されます。長いツイートの場合、Twitterサーバーに送信される前にTwitterドライバで切り捨てられます。
ツイート頻度の制限: Twitterではユーザー当たりのツイート使用頻度が制限されています。Twitterの制限の詳細は、「About Twitter Limits」ページを参照してください。ユーザーの使用頻度がそのTwitterユーザーの頻度制限を超えると、アウトバウンド・メッセージの配信に失敗し、インバウンド・メッセージの受信は停止します。
UMSをファイアウォールの後方で使用する場合、WebLogic Serverのプロキシ設定を構成する必要があります。WebLogic Serverのプロキシ設定の構成に関する詳細は、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC Webサービス・スタート・ガイド』のシステム・プロパティを使用したプロキシ・サーバーの指定に関する項を参照してください。
Twitterサーバーに対する接続問題がある場合、Twitterサーバーが正常な状態に戻るまで、Twitterドライバは4分に1回から16分に1回の低頻度でサーバーをポーリングします。正常動作では、ドライバは、1分に1回から4分に1回の頻度でTwitterサーバーをポーリングします。
Twitterでは、そのサービスの使用状況を積極的に監視します。ユーザーのリミットに達すると、理由を示すエラー・メッセージが表示され、そのクライアントがリクエストしたサービスの提供が許可されないことがあります。リミットはすべて現在のリミットのページに示されています。Twitterサーバーによって使用を制限されると、まずドライバは30分待機した後、4分に1回から16分に1回の低頻度でサーバーをポーリングします。
送信メッセージの場合、つまり、ツイートの投稿やダイレクト・メッセージの送信時、ツイート・テキストはUMSメッセージのコンテンツと連結されたUMSメッセージの件名です。着信ツイートおよびダイレクト・メッセージの場合、テキストはUMSメッセージのコンテンツに挿入されます。
表3-4に、アウトバウンド・メッセージに使用されるメタデータを示します。
ネームスペース: "UMS-TWITTER"
表3-4 Twitterドライバでアウトバウンド・メッセージに使用されるメタデータ
名前 | 説明 | 備考 |
---|---|---|
retweet_id |
リツイートされるメッセージのTwitter ID。このIDは、メッセージ/ツイートを受信すると入手できます。 |
このメタデータは、受信者のAddressオブジェクトに対するものです。 |
reply_to_id |
返信するメッセージのTwitter ID。このIDは、メッセージ/ツイートを受信すると入手できます。 |
このメタデータは、受信者のAddressオブジェクトに対するものです。 |
geo_location |
latitude,longitudeとして表される緯度と経度。latitudeとlongitudeはJavaプリミティブ・データ型doubleに変換されます。 |
このメタデータは、Messageオブジェクトに対するものです。 |