Oracle Application Server Web Services開発者ガイド 10g(10.1.3.1.0) B31868-01 |
|
この章では、JMS宛先をWebサービスとして公開する方法について説明します。JMSエンドポイントWebサービスは、JMS宛先(キューまたはトピック)をWSDLのdocument-literalスタイルの操作として公開します。この操作には、送信モードと受信モードがあります。
JMSエンドポイントWebサービスは、JavaエンドポイントのWebサービスの特殊ケースとみなすことができます。JMSエンドポイントWebサービスでは、JMSエンドポイントがJMSメッセージ・オブジェクトの送受信というWebサービス操作を実行します。
注意 データベースのキューまたはOracle Streamsアドバンスト・キューイング(AQ)をベースにしたWebサービスとJMS宛先をベースにしたWebサービスには、いくつかの相違があります。AQのWebサービスは、データベース内のキューの構成をベースにしています。JMS宛先のWebサービスは、中間層にあるJMSプロバイダの構成をベースにします。JMSキューは、バックエンドのデータソース内にあります。このデータソースには、データベース、ファイル・ベースのシステムまたはその他のデータ・リポジトリなどがあります。 データベース内のキューまたはAQからWebサービスを構成する場合は、「Oracle Streams AQからWebサービスをアセンブルする方法」を参照してください。 JMSをトランスポート・メカニズムとして使用してWebサービスと通信する場合は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「Webサービス・トランスポートとしてのJMSの使用方法」を参照してください。 |
OracleAS Web Servicesを使用すると、JMS宛先とメッセージをやりとりするWebサービス・エンドポイントを作成できます。JMS Webサービス・エンドポイントは、特定のJMS宛先または宛先のペアとの間でメッセージを送受信するように構成されています。
JMSエンドポイントWebサービスには、次の操作のいずれかを持たせることができます。
send
: XMLペイロード(SOAPのbody
要素)が、該当するJMS宛先に送信されます。送信操作を構成して、各送信メッセージにJMSメッセージ・プロパティを設定し、JMSの返信先、優先度、有効期限などを指定できます。
receive
: メッセージが、該当するJMS宛先から取得され、JMSメッセージ・ボディを使用してSOAPレスポンス・メッセージ・ボディのペイロードが作成されます。
JMSエンドポイントWebサービスを構成して、メッセージID、相関IDおよび返信先JMSメッセージ・プロパティをSOAPヘッダーとして送信できます。この構成により、生成されたWSDLおよびスキーマでメッセージ・プロパティのヘッダーおよびタイプが明示的に宣言され、Webサービス・クライアントがこれらを使用できるようになります。
send
操作の起動は、エンキューを行うことを意味します。receive
操作の起動は、デキューを行うことを意味します。
send
操作はパブリッシュを行うこと、receive
操作はサブスクライブを行うことを意味します。
個々のJMSエンドポイントWebサービスでは、サービス開発者の決定に従ってsend
操作のみ、receive
操作のみまたは両方の操作をサポートできます。
JMSエンドポイントWebサービスは、JMSメッセージ・タイプとしてjavax.jms.ObjectMessage
を使用します。このメッセージは内容として、XMLフラグメントのString
表現またはjavax.xml.soap.SOAPElement
のインスタンスを保持します。
送信を行うJMSエンドポイントWebサービス用として生成されるWSDLは、Web Service-Interoperability(WS-I)Basic Profile 1.0に準拠しており、相互運用性があります。
たとえば、図9-1に示すMDBベースのJMSエンドポイントWebサービス・アプリケーションは、JMSエンドポイントWebサービスからみると、メッセージのsend
操作とreceive
操作の両方を処理します。また、この図に示すMDBは、JMSの宛先をリスニングするように構成されています。
次の手順は、図9-1に示すMDBベースのJMSエンドポイントWebサービス・アプリケーションの処理内容を示します。
send
操作を起動するためのSOAPリクエストを送信します。
宛先1
にダイレクトします。
宛先1
をリスニングするMDBを起動します。
宛先2
で新しいメッセージを生成します。メッセージの生成および使用には、1つ以上のMDBが関係する場合があります。たとえば、あるMDBがJMS宛先1
をリスニングするのみでなく、JMS宛先2
へのメッセージ送信も行う場合があります。
receive
操作を実行し、メッセージを受信します。JMSエンドポイントWebサービスがJMS宛先からのメッセージを使用し、SOAPレスポンス・メッセージに入れ、送信対象となるそのSOAPレスポンス・メッセージをクライアントに渡します。
次の手順では、WebServicesAssemblerを使用してJMSエンドポイントWebサービスをアセンブルする方法について説明します。
jmsAssemble
コマンドまたはAntタスクを使用してWebServicesAssemblerを実行し、WebサービスのEARファイルを生成します。 jmsAssemble
コマンドの場合は、JMS send
操作に対するコネクションを取得するために使用するJMSコネクション・ファクトリのJNDI名(sendConnectionFactoryLocation
)、またはすべてのsend
操作JMSメッセージのデフォルトの返信先として使用するJMSコネクション・ファクトリのJNDI名(replyToConnectionFactoryLocation
)を指定する必要があります。jmsAssembleコマンドおよびその必須とオプションの引数の詳細は、「jmsAssemble」を参照してください。
次の例では、jms/ws/mdb/theQueueConnectionFactory
は、JMSのsend
操作用にJMSキューへのコネクションを生成するJMSコネクション・ファクトリのJNDI名です。
jms/ws/mdb/theQueue
: send
操作によるSOAPメッセージ・ペイロードの送信先であるJMSキューのJNDI名。
jms/ws/mdb/logQueueConnectionFactory
: 返信先キュー用に使用されるJMSコネクション・ファクトリのJNDI名。
jms/ws/mdb/logQueue
: すべてのsendメッセージにデフォルトの返信先として設定されるJMSキューのJNDI名。この例ではlinkReceiveWithReplyTo
引数が有効であるため、この返信先は、JMSエンドポイントWebサービスのreceive
操作でのメッセージの取得にも使用されます。
このコマンドによって生成されるJ2EEのEARファイルには、WSDLや生成されるファイルweb.xml
ファイルなど、JMSエンドポイントWebサービスの構成情報が含まれます。
コマンドライン:
java -jar wsa.jar -jmsAssemble -sendConnectionFactoryLocation jms/ws/mdb/theQueueConnectionFactory -sendQueueLocation jms/ws/mdb/theQueue -replyToConnectionFactoryLocation jms/ws/mdb/logQueueConnectionFactory -replyToQueueLocation jms/ws/mdb/logQueue -linkReceiveWithReplyTo true -targetNamespace http://oracle.j2ee.ws/jms-doc -typeNamespace http://oracle.j2ee.ws/jms-doc/types -serviceName JmsService -appName jms_service -context jms_service -input ./build/mdb_service.jar -uri JmsService -output ./dist
Antタスク:
<oracle:jmsAssemble linkReceiveWithReplyTo="true" targetNamespace="http://oracle.j2ee.ws/jms-doc" typeNamespace="http://oracle.j2ee.ws/jms-doc/types" serviceName="JmsService" appName="jms_service" context="jms_service" input="./build/mdb_service.jar" uri="JmsService" output="./dist" sendConnectionFactoryLocation="jms/ws/mdb/theQueueConnectionFactory" sendQueueLocation="jms/ws/mdb/theQueue" replyToConnectionFactoryLocation="jms/ws/mdb/logQueueConnectionFactory" replyToQueueLocation="jms/ws/mdb/logQueue"/>
このコマンドおよびAntタスクの説明:
jmsAssemble
: JMS宛先(キューまたはトピック)をWebサービスとして公開します。「jmsAssemble」を参照してください。
sendConnectionFactoryLocation
: JMS send
操作のためのコネクションの取得に使用するJMS ConnectionFactory
のJNDI名を指定します。ConnectionFactory
のタイプは、send
宛先との整合性が必要とされます。「sendConnectionFactoryLocation」を参照してください。
sendQueueLocation
: JMS send
操作に使用するJMSキューのJNDI名を指定します。デフォルト値はありません。「sendQueueLocation」を参照してください。
replyToConnectionFactoryLocation
: すべてのsend
操作JMSメッセージのデフォルトの返信先として使用するJMSコネクション・ファクトリのJNDI名を指定します。ConnectionFactory
のタイプは、返信先との整合性が必要とされます。「replyToConnectionFactoryLocation」を参照してください。
replyToQueueLocation
: すべてのsend
操作JMSメッセージのデフォルトの返信先として使用するJMSキューのJNDI名を指定します。「replyToQueueLocation」を参照してください。
linkReceivedWithReplyTo
: receive
操作を返信先にリンクするかどうかを決定します。「linkReceiveWithReplyTo」を参照してください。
targetNamepace
: 生成されるWSDLで使用するターゲット名前空間を指定します。この値は、仕様に準拠しているHTTP URL、準拠していないHTTP URL、またはURIであってもかまいません。「targetNamespace」を参照してください。
typeNamespace
: 生成されるWSDL内のスキーマ型に使用する型名前空間を指定します。指定した名前は必ず使用され、破棄されません。「typeNamespace」を参照してください。
serviceName
: サービス名を指定します。「serviceName」を参照してください。
appName
: アプリケーションの名前を指定します。この名前は、通常context
やuri
などの他の引数のベース値として使用されます。「appName」を参照してください。
context
: Webアプリケーションのルート・コンテキストを指定します。「context」を参照してください。
input
: WEB-INF/classes
にコピーされるクラスを格納するJARまたはディレクトリを指定します。この引数は、WebServicesAssemblerによって使用されるクラスパスに追加されます。「input」を参照してください。
uri
: Webサービスに使用するURIを指定します。「uri」を参照してください。
output
: 生成されるファイルを格納するディレクトリを指定します。そのディレクトリが存在しない場合は、作成します。「output」を参照してください。
通常の方法でEARファイルをOC4Jの実行中インスタンスにデプロイします。EARファイルのデプロイの詳細は、第19章「Webサービスのパッケージ化およびデプロイ」および『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。次は、デプロイメント・コマンドのサンプルです。
java -jar <OC4J_HOME>/j2ee/home/admin_client.jar deployer:oc4j:localhost:port <user> <password> -deploy -file dist/jms_service.ear -deploymentName jms_service -bindWebApp default-web-site
次のリストは、このコード例のパラメータの説明です。
OracleAS Web Servicesでは、デプロイされたWebサービスごとにWebサービス・テスト・ページが提供されます。Webサービス・テスト・ページへのアクセスおよびその使用方法の詳細は、「Webサービス・テスト・ページの使用方法」を参照してください。
JMSエンドポイントWebサービスのWSDLからクライアント・サイドのプロキシを生成する方法と、その他のWSDLからプロキシを生成する方法は同じです。JMSエンドポイントWebサービスのWSDLは、WS-I Basic Profile 1.0に準拠したWSDLツールで使用できますので、相互運用性があります。たとえば、.NET WSDLツールを使用してC#クライアント・スタブを生成することにより、Oracle JMSエンドポイントWebサービスと通信できます。
genProxy
コマンドを使用してWebServicesAssemblerツールを実行し、J2SE Webサービス・クライアントのスタブ(クライアント・プロキシ)を生成します。J2SE環境向けのクライアント・サイド・コードの生成およびアセンブルの詳細は、第15章「J2SE Webサービス・クライアントのアセンブル」を参照してください。
genInterface
コマンドを使用してWebServicesAssemblerツールを実行し、J2EE Webサービス・クライアント用のマッピング・ファイルおよびサービス・エンドポイント・インタフェースを生成します。クライアント・サイド・コードの生成およびアセンブルの詳細は、第14章「J2EE Webサービス・クライアントのアセンブル」を参照してください。
たとえば、次のコマンドは、J2SEクライアントで使用可能なスタブを生成します。
コマンドライン:
java -jar wsa.jar -genProxy -output build/src/client/ -wsdl http://localhost:8888/hello/JmsService?WSDL -packageName oracle.demo.jms_service
Antタスク:
<oracle:genProxy wsdl="http://localhost:8888/hello/JmsService?WSDL" output="build/src/client" packageName="oracle.demo.jms_service" />
このコマンドラインおよびAntタスクの説明:
genProxy
: J2SE Webサービス・クライアントから使用可能な静的プロキシ・スタブを作成します。「genProxy」を参照してください。
output
: 生成されるファイルを格納するディレクトリを指定します。そのディレクトリが存在しない場合は、作成します。「output」を参照してください。
wsdl
: WSDLドキュメントの絶対ファイル・パス、相対ファイル・パスまたはURLを指定します。「wsdl」を参照してください。
packageName
: JAX-RPCマッピング・ファイルにパッケージ名が宣言されていない場合に、生成されたクラス用に使用されるパッケージ名を指定します。「packageName」を参照してください。
このコマンドは、クライアント・プロキシを生成し、これらをディレクトリbuild/src/client
に格納します。クライアント・アプリケーションはこのスタブを使用して、リモート・サービスでの操作を起動します。genProxy
の必須およびオプションの引数の詳細は、「genProxy」を参照してください。
クライアントをコンパイルする前に、クラスパス上にある適切なJARをリストします。クライアントのクラスパスで使用可能なすべてのJARファイルのリストについては、表A-2「クライアント・サイド・プロキシを使用するクライアントのクラスパス・コンポーネント」を参照してください。個々のJARをリストするかわりに、クライアントのクラスパスにクライアント側のJARとしてwsclient_extended.jar
を含めることができます。このJARファイルには、Webサービス・クライアントをコンパイルおよび実行するために必要なすべてのクラスが含まれます。これらのクラスは、表A-2にリストされている各JARファイルに含まれているものです。wsclient_extended.jar
およびクライアントのクラスパスの詳細は、「Webサービス・プロキシのクラスパスの設定」を参照してください。
JMSエンドポイントWebサービスは、受信したSOAPメッセージを処理し、ペイロード(SOAPメッセージのbody
要素)をJMS宛先に格納します。この項では、JMSエンドポイントWebサービスからのJMSメッセージを使用および処理するために、開発者が知る必要のある詳細を説明します。
JMSエンドポイントWebサービスに関連するJMSメッセージの内容には、javax.xml.soap.SOAPElement
(これはorg.w3c.dom.Element
のサブクラスでもあります)のインスタンスか、またはXMLペイロードの文字列表現であるjava.lang.String
のいずれかがなることができます。JMSエンドポイントWebサービスでは、JMS宛先にメッセージを置く前に、特定のJMSメッセージ・ヘッダー値を設定できます。JMSエンドポイントWebサービスのアセンブル時に指定したオプションの構成引数の値に応じて、JMSエンドポイントWebサービスにより次のJMSメッセージ・ヘッダーが設定されます。
JMSType JMSReplyTo JMSExpiration JMSPriority JMSDeliveryMode
JMSエンドポイントWebサービスは、replyToTopicLocation
引数またはreplyToQueueLocation
引数で指定された値を、JMSReplyTo
ヘッダーに設定します(これらのいずれかが、そのJMSエンドポイントWebサービスに対して構成済になっている必要があります)。replyToConnectionFactoryLocation
引数で指定した値は、メッセージに標準文字列プロパティとして設定されます。プロパティ名はOC4J_REPLY_TO_FACTORY_NAME
です。
例9-1に、onMessage()
メソッドがJMSエンドポイントWebサービスのsend
操作で生成されたメッセージのreply-to
情報を取得することを示すコード部分を示します。
... public void onMessage(Message inMessage) { // Do some processing ObjectMessage msg = null; String factoryName; Destination dest; Element el; try { // Message should be of type objectMessage if (inMessage instanceof ObjectMessage) { // retrieve the object msg = (ObjectMessage) inMessage; el = (Element)msg.getObject(); System.out.println("MessageBean2::onMessage() => Message received: " ); ((XMLElement)el).print(System.out); processElement(el); factoryName = inMessage.getStringProperty("OC4J_REPLY_TO_FACTORY_NAME"); dest = inMessage.getJMSReplyTo(); ...
「JMS宛先を使用したWebサービスのアセンブル」を参照してください。
詳細は、次を参照してください。
|
Copyright © 2006 Oracle Corporation. All Rights Reserved. |
|