澤出 達郎(さわいで たつろう)
日本アイ・ビー・エム ソフトウェア事業 ICP コンサルティング I/Tスペシャリスト

 前回までは,SCAプログラミング・モデルを具体例を見ながら解説してきました。今回は,実際にSCAプログラムを動かす方法についてお話します。

 現在,存在しているSCAの実行環境は,OSOAサイトのページ「Implementation Examples and Tools」で確認できます。商用のものからオープンソースまで,思いのほかたくさんあることがわかります。

 今回,使用するのは,オープンソースの「Apache Tuscany」です。Tuscanyがどんなものかに関しては,トップページにていねいに解説されていますので,そちらを参照していただければと思います。いろいろな言語やBindingをサポートしており,充実した機能を持つSCA開発・実行環境になっています。

ついにTuscanyがSCA V1.0に対応

 本連載の開始時点では,Tuscanyは,SCA V1.0に対応していませんでした。そのため,前回までは,SCA 0.95レベルの「Apache Tuscany Milestone 2」という環境を利用していました。SCA 0.95とV1.0は,大枠の考え方は同じなのですが,やはりいくつかの違いがありました。

 その後,待望のSCA V1.0の環境「Apache Tuscany SCA Java 0.90-incubating」(以降,Tuscany 0.90)が6月5日にリリースされました。このリリースは,SCA V1.0対応であることはもちろんですが,使い勝手が大幅に改善されています。今までのTuscanyを知っている人からすると,おそらく拍子抜けしてしまうほど簡単になっています。このTuscany 0.90のリリースによってSCAのハードルがかなり低くなった印象です。

まずはTuscanyをダウンロード

 Apahche Tuscanyのページの左側にある「Downloads」からたどっていくと簡単にSCA Javaの「apache-tuscany-sca-0.90-incubating.zip」のリンクにたどり着きます。筆者は,WindowsのBinaryを選択しました。ダウンロードが終了したら適当なディレクトリに置いて解凍します。

環境のセットアップ

 ダウンロードのページに“Latest guide here”と書かれたリンクがあります。その先のユーザーガイドを参照しながら必要なものをダウンロードし,セットアップします。セットアップといっても簡単な環境変数をセットするだけです。

 ユーザーガイドで述べられている,セットアップに必要なソフトウエアは,以下のものです。

  • Java SE 5
  • Maven 2.0.4+
  • Ant 1.7.0

 筆者の環境(Windows XP SP2)では,バッチファイル(リスト1)を作り,その中で以下のように環境変数をセットしています(これを参考にご自身の環境に合わせて変更してください)。最後の「xxx --version」の部分は,念のためのバージョンの表示をすると同時にインストールの確認もしています。このバッチファイルを,mavenやantを実行する前に必ず実行するようにします。


 set JAVA_HOME=c:\\Java\jdk1.5.0_06
 set MAVEN_HOME=d:\tuscany\maven-2.0.6
 set ANT_HOME=d:\apache-ant-1.7.0
 set PATH=%JAVA_HOME%\bin;%PATH%
 set PATH=%PATH%;%MAVEN_HOME%\bin
 set PATH=%PATH%;%ANT_HOME%\bin
 java -version
 call ant -version
 mvn -version
リスト1●環境変数のセットアップをするバッチファイルの例

サンプルを実行してインストールを確認

 以上の設定が終われば,もう準備OKです。ディレクトリは,図1のようになっているはずです。

図1●Tuscany 0.90のディレクトリ構造
図1●Tuscany 0.90のディレクトリ構造

 図1では表示されていませんが,samplesディレクトリの下には,いくつかのディレクトリがあり,それぞれにサンプル・プログラムが含まれています。例えば,calcuratorディレクトリには,SCA Java版のサンプル「Calculator」があります。これを実行して,インストールと環境設定がうまくできているかどうかを確認してみましょう。

 コマンドプロンプトを起動して,cdコマンド(ディレクトリの移動)で,カレント・ディレクトリをcalcuratorにします。そして以下のコマンドを発行してみます(先の環境変数の設定をお忘れなく!)。

ant run

 これで計算結果が画面にエコーされれば正常です。とても簡単にプログラムを実行できることがおわかりいただけると思います。

 また,Webサービス・バインディングを提供するサンプルも非常に簡単に動かすことができます。以前は,Tomcat上にwarをデプロイして動かしていましたが,本リリースからは,「ant run」だけでサーバー・プロセスが立ち上がり,Webサービスのリクエストを処理してくれるようになっています。例えば,同じくサンプルの「helloworld-ws-service」は,Webサービス・バインディングでサービスを提供しているものですが,ant runと入力するだけでWebサービスを受け付けるサーバーが立ち上がります(図2)。

図2●サンプル・プログラム「helloworld-ws-service」の起動と終了
図2●サンプル・プログラム「helloworld-ws-service」の起動と終了
[画像のクリックで拡大表示]

ビルドも簡単

 ビルドは,従来通りMavenで行います。プロジェクト記述ファイル「pom.xml」が存在する各ディレクトリで「mvn」と入力するだけです。ビルドに成功すると“BUILD SUCCESSFUL”のメッセージが表示されます。図3はサンプルのCalculatorをビルドした例です。もし,ビルドをやり直したければ,「mvn clean」と入力すると,作成したtargetディレクトリもきれいに消して元にもどしてくれます。

図3●サンプル「Calculator」のビルド
図3●サンプル「Calculator」のビルド

 サンプル用に提供されているpom.xmlを参考にすると,自作したプログラム用のpom.xmlも簡単に作成できます。サンプルのディレクトリ構造を守ってファイルを配置すれば,pom.xmlに対する修正は,生成されるjarファイル名を決めるartifactIDの部分を変更するだけです。

 その場合,Antの「build.xml」もあわせて変更しておきます。こちらは,実行するときに利用します。build.xmlの“test.class”と“test.jar”のvalueを,作成する実行可能プログラムの名前に変更すればOKです。このbuild.xmlを作成しておけば,長いclass名をその都度指定しなくてもant runでSCAプログラムを実行できます。

独自SCAアプリケーションを作成

 前回まで使用していたプログラムPriceServiceを,Tuscany 0.90用に変更してみました。リスト2リスト3が変更したファイルです。Javaプログラム自体には変更はありません。Compositeファイルは,できるだけコードが短くなるように,Tuscany 0.90のサンプルを参考に変更(service指定をcomponentの中に入れ,bindingは暗黙値を使用)し,WSDLファイルは,新しいサーバー・プログラムに対応してService公開のURLを変更しました。


<?xml version="1.0" encoding="UTF-8"?>

<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
  targetNamespace="http://priceservice"
  xmlns:ps="http://priceservice"
  name="PriceServiceComposite">
  
  <component name="PriceServiceComponent">
    <service name="PriceService">
      <interface.wsdl interface=
        "http://priceservice#wsdl.interface(PriceService)" />
      <binding.ws />
    </service>
    <implementation.java class="abc.PriceServiceImpl" />
  </component>
</composite>
リスト2●変更したPriceServiceのcompositeファイル


<wsdl:service name="PriceService">
  <wsdl:port binding="tns:PriceServiceSoapBinding"
    name="PriceServiceSoapPort">
    <wsdlsoap:address location=
      "http://localhost:8080/PriceServiceComponent"/>
  </wsdl:port>
</wsdl:service>
リスト3●変更したPriceService用WSDLファイル(抜粋,赤字が変更部分)

 リスト4のサーバー・プログラムPriceServiceServerは,新規に追加するファイルです。ここにSCA V1.0の仕様の中に定義されているDomainという概念が出てきます。SCA V1.0の仕様では“Compositeは,Domainにデプロイされる”と定義されています。Domainは,SCAのRuntime(実行環境)に対応する概念です(このDomainは,実装に依存する部分であり,パッケージが「org.apache.tuscany...」とTuscany独自のものになっています)。赤字部分で「priceservice.composite」をDomainの新しいインスタンスとして生成しています。これにより,PriceServiceをWebサービス・インタフェースを持ったサーバー・プロセスとして起動できます。


package abc;

import java.io.IOException;
import org.apache.tuscany.sca.host.embedded.SCADomain;

public class PriceServiceServer {
  public static void main(String[] args) {
    SCADomain scaDomain = 
      SCADomain.newInstance("priceservice.composite");
    try {
      System.out.println(
        "PriceService server started (press enter to shutdown)");
      System.in.read();
    } catch (IOException e) {
      e.printStackTrace();
    }
    scaDomain.close();
    System.out.println("PriceService server stopped");
  }
}
リスト4●新規に追加するサーバー・プログラムPriceServiceServer。赤字部分でDomainのインスタンスを生成している

 これらのファイルを,図4のように,それぞれのディレクトリに配置します。

図4●ビルドするためのファイルの配置
図4●ビルドするためのファイルの配置

 ファイルを配置後,priceserviceディレクトリで,「mvn」と入力してビルドを行うと,srcと同じレベルにtargetディレクトリが作成され,そこにjarファイルが生成されます。これでプログラムは完成です。例によって「ant run」と入力するだけで簡単に実行できます(図5)。

図5●PriceServiceServerを実行中
図5●PriceServiceServerを実行中
[画像のクリックで拡大表示]

 以上見てきたように,Tuscanyの最新バージョンでは,SCAプログラムを動かすことが非常に簡単になっています。皆さんもオリジナルのSCAアプリケーションを作成してみてはいかがでしょうか? ビジネス・ロジック部分だけを書けば,後は非常に簡単です。

 次回は,本連載のまとめとしてSCAの仕様全体を見通し,「SCAが存在することによってどんな世界が開けるのか」について説明します。お楽しみに。