2010年4月5日月曜日

OSS 11g/JMS Adapter

Oracle SOA Suite 11g で JMS Adapter を使ってみる。

非同期で受け取った SOAP メッセージを、メディエータ経由でJMSにキューイングするルーティングを、コンポジットで実装してみたい。

最初は、BPEL から JMS にキューイングするプロセスを考えたけど、要はコンポジットでのJMS アダプタの設定が肝であって、BPELからのJMS 呼び出しは他の <invoke>と変わらず、Getting Started 目的としては BPEL は蛇足だと気づいて割愛。コンポジットだけで構成した。

■■ JMS キュー作成
以下の3つを Weblogic コンソールで設定する
  • キュー作成
  • コネクションファクトリ作成
  • コネクションプール作成

■ JMS キュー作成
  • Domain Structureで base_domain/Services/Messaging/JMS Modules を選択
  • JMS Modulesで SOAJMSModuleを選択
  • [New] 押下→"Queue"を選択 → [Next]
    • Name: greetingQueue
    • JNDI Name: jms/greetingQueue
  • [Next]
    • Subdeployments:SOASubDeployment
    • Targets/JMS Servers:SOAJMSServer
  • [Finish]


■ JMS Connection Factory 作成
  • Domain Structureで base_domain/Services/Messaging/JMS Modules を選択
  • JMS Modulesで SOAJMSModuleを選択
  • [New] 押下→"Connection Factory"選択 → [Next]
    • Name: greetingCF
    • JNDI Name: jms/greetingCF

  • [Next]→ [Finish]


■ Connection Pool 作成
  • Domain Structureで base_domain/Deployments を選択
  • Deployments テーブルでJmsAdapterを選択
  • Settings for JmsAdapter/Configurationタブ/Outbound Connection Poolsタブ
  • [New]
  • oracle.tip.adapter.jms.IJmsConnectionFactoryを選択して[Next]
    • JNDI Name: eis/Queue/greeting
  • [Finish]※deployment plan location とか言うのを聞かれたら適当にディレクトリを掘って、パスを指定する
  • Configurationタブ/Outbound Connection Poolsタブに戻る
  • oracle.tip.adapter.jms.IJmsConnectionFactory を展開して、eis/Queue/greetingを選択
  • ConnectionFactoryLocation の Property Value に jms/greetingCF を指定
  • [Save]
  • Deployments テーブルに戻って JmsAdapter を再デプロイ(チェックして[Update])


■■ コンポジット・アプリ作成
■プロジェクト作成
  • 名前:ここでは SimpleJmsQueueing とした
  • プロジェクトテクノロジ:SOA
  • コンポジットテンプレート:空のテンプレート

このコンポジットで使う XML スキーマを、以下のように作成。
  • SOAコンテンツ/xsd フォルダのコンテキストメニューから[新規]
  • ファイルを選択し、message.xsdを作成。内容は以下。
    <schema xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://studies.oss11g/simple.jms.queueing"
    xmlns:tns="http://studies.oss11g/simple.jms.queueing"
    attributeFormDefault="qualified" elementFormDefault="qualified">
    <element name="greeting" type="tns:GreetingType"/>
    <complexType name="GreetingType">
    <sequence>
    <element name="message" type="string" />
    </sequence>
    </complexType>
    </schema>


■ Webサービス
  • Webサービスを[公開されたサービス]のレーンにドロップ
  • 歯車ボタンでスキーマから WSDL を生成
  • リクエストタブでURLに message.xsd の greeting 要素を選択
    レスポンス以下のタブは放置
  • 他はめんどくさいので全部デフォルト


■ JMS アダプタ
  • [外部参照]のレーンにJMS アダプタをドロップ
  • 名前はここではJMS_Queueとした。
  • JMSプロバイダに Oracle Weblogic JMS を指定
  • AppServer 接続:デプロイとかで使ってるいつものやつ
  • アダプタ・インタフェイス:操作およびスキーマから定義
  • 操作:メッセージ発行、操作名はデフォルトまま
  • 発行操作のパラメータ:
    • 接続先名:参照ボタンで greetingQueue を指定
    • JNDI名:eis/Queue/greeting
  • メッセージ
    • URL:message.xsd の greeting を指定
  • 終了


■ メディエータ
  • [コンポーネント]レーンにメディエータをドロップ
  • 名前:デフォルト/テンプレート:デフォルトのまま
  • Mediator1 から Service1 と JMS_Queue にワイアリング
  • Mediator1 の編集開始
    • 「次を利用して変換」の×ボタンを押下
    • 「新規マッパーファイルの作成」を選択して[OK]
  • 開いた XSLT エディタで左の message と右の message をつなげる

■■ テスト
SoapUI か EMコンソールから、いつもどおりにリクエスト送信。キューに入ったメッセージは WebLogic コンソールから確認できる。

0 件のコメント:

コメントを投稿