|
|
第5回 SCAのプログラミング・モデルとは(後編)
今回は,SCAのプログラミング・モデル解説の後編として,サンプル・プログラム「Abcサービス」を参照しながら,SCAプログラムの作り方を順を追って解説します。 最初に行うことはJavaインタフェース定義です。 Javaインタフェース定義 − ローカルの場合前回の終わりに,Referenceの宛先をWebサービスに変更しました。その結果,現在のAbcサービスは以下のようになっています(図1)。例によってこれは,SCAのXML文書をわかりやすく図にしたものです。
このプログラムの動作は,「値段(price)と割引率(discountRate)を引数として与えると販売価格を戻す」というものです。非常に単純な動きですが,しっかりとSCAしています。 priceは呼び出し時の引数として,discountRateはPropertyのXML定義によって渡されます。販売価格を計算しているのは,Webサービスで呼び出しているPriceServiceになります。 Abcサービス自身のコードから見ていきましょう。まずは,インタフェース「AbcService」です(リスト1)。
普通のJavaのインタフェースですが,これがSCAにおけるインタフェースになります。これを実装した以下のコード(リスト2(1))で,@Serviceの定義がされています。リスト1のインタフェース「AbcService」をローカルで使用可能なことを示しています。SCAを使用してAbcServiceを呼び出すと,getDiscountPriceをコールできることになります。
Javaインタフェース定義 − リモートの場合Abcサービス自身は,ローカルにJavaで呼び出されるものですが,割引率の計算をしているPriceServiceは,Webサービスで呼び出されています。PriceServiceのインタフェースはリスト3になります。
リスト3(1)の@Remotableというアノテーションが,このJavaインタフェースのリモートからの参照を可能にしています。通常は,リモートへの公開は,Webサービスのバインディングを使用して行われます。これに対応したWebサービスの定義であるWSDLは,リスト4のようになります。
リスト4(1)のport定義のあたりを見ていただくと,先の@Remoteとの関係がおわかりいただけると思います。WSDLの形式としては,Document/Literal型(wrapped)で標準的なものです。このWSDLが,リモートからPriceServiceを参照するときのインタフェース定義となります。ちなみに現在のSCA 1.0では,インタフェースの定義にJava Interface(interface.java)とWSDL(interface.wsdl)が使用可能になっています。 リモートに公開されるサービスであっても,PriceService実装のコード(リスト5)は,以下の通りで通常のPOJOです。
>>仕上げはCompositeファイル
連載新着連載目次へ >>
|