2009年10月19日月曜日

観察:Getting Started with FUSE 4 (1)

この間の続き。[前回]

payment-service-se、payment-service-bc、payment-service-batch と、webinarで作成する三つのプロジェクトのうち、まず最初の payment-service-se を少し詳しく見てみる。流れは README.txtに書いてある手順に従う。

プロジェクトを生成した直後の状態
M2 のアーキタイプ servicemix-osgi-cxf-wsdl-first-archetype が、Maven 2 の規約に従ったディレクトリ構成で、以下のようなファイルを自動生成している。
  • src/main/resources/META-INF/spring/beans.xml
    後で内容をリプレスする
  • src/main/resources/wsdl/person.wsdl
    別のwsdlを使うので削除する
  • pom.xml
    maven の設定ファイル。後で編集する。


paymentService.wsdl のインポート
WSDL定義の内容は、以下のようなもの
  • サービス PaymentServiceはポートsoap を持つ
  • ポート soap のポートタイプ は Paymentである。
  • ポートタイプ Payment は、操作 transferFundsを持つ。
  • 操作 transferFunds の入力はメッセージ TransferRequest であり、出力はメッセージTransferResponseである。
  • メッセージTransferRequest は XSD型 transferに、メッセージTransferResponseは、XSD型 responseに関連付けられている。


■pom.xmlの編集
  • プロジェクト名は OSGIバンドルの名前としても用いられ、ServiceMix 上でもこの名前で表示される

  • Dependencies で設定するモジュールは、Payment サービスの実装クラス PaymentImpl で使うもの
  • cxf-codegen-plugin は wsdl からコードを生成するために用いる。wsdlファイル名とソース生成先を変更。
  • maven-bundle-plugin は OSGI バンドルを作るmaven プラグイン。詳細はここ


■maven install
maven install を実行してソースを自動生成する。webinar では「install」だが「cxf-codegen:wsdl2java」ゴールでも可。以下のように pom.xml で指定したフォルダtarget/generated/main/java下に、ソースファイルが生成される。
  • com.example.fuse.payment_service
    Payment…paymentService.wsdl に書かれた wsdl:portType 定義に対応するインターフェイス
    PaymentService…クライアントスタブ
  • com.example.fuse.payment_service.types
    Transfer…paymentService.wsdl 中のtransfer型 に対応するJavaクラス
    Response…paymentService.wsdl 中のresponse型 に対応するJavaクラス
    ObjectFactory・・・Transfer とResponseのファクトリクラス
    package-info・・・パッケージとXML名前空間を対応付ける


■Paymentインターフェイスの実装
PaymentImplクラス で Payment インターフェイスと InitializingBean を実装する。
  • transferFunds()メソッドで、入力メッセージをログ出力し「OK」を出力メッセージに設定する
  • SpringのInitializingBeanでもあるので、afterPropertiesSet()に確認のためのログ出力コードを書いておく
  • setContext()メソッドは Spring からインジェクタメソッドとして呼ばれる


■spring のbean.xml の編集
  1. エンドポイントでの実際の処理を行うクラスとして PaymentImpl クラスを指定する。
  2. EndpointExporter に PaymentImpl を登録させる
  3. 他の編集箇所は、上記1,2のためのリソースや名前空間の準備。


プロジェクトpayment-service-seは、以上のような感じ。

0 件のコメント:

コメントを投稿