次に、サービス「CalculatorService」を使用して数値の合計を求めて標準出力に出力している、クライアントのコードの一部を見ていただこう。クラス名はcalculator.CalculatorClientであり、重要な部分以外は省略する。ただし、残念ながら現在のTuscanyにおけるJava APIは、SCAバージョン1.0に全く追随できていない。とはいえ、コードの雰囲気はほとんど変わらないのが以下を参照してもらえばわかるだろう。

public class CalculatorClient {
    public static void main(String[] args) throws Exception {

        // SCAバージョン1.0仕様では以下のようなコードになる
        /*
        ComponentContext context = // 実行環境依存のコード
        CalculatorService calculatorService =
            context.getService(CalculatorService.class, "CalculatorServiceComponent");
        */

        CompositeContext context = CurrentCompositeContext.getContext(); ・・・(1)
        CalculatorService calculatorService =
            context.locateService(CalculatorService.class, "CalculatorServiceComponent"); ・・・(2)
        // Calculate
        System.out.println("3 + 2=" + calculatorService.add(3, 2));
        ・・・略・・・
    }
}

括弧書きの数字を付けた部分は、以下のようになっている。

(1) コンテキスト(現在のサンプルではCompositeContext、将来はComponentContext)を取得する

(2) サービスのインスタンスを動的に取得する。サービスインタフェースとなるJavaインタフェースのクラスインスタンスと、それを実装したコンポーネントの名称を指定する

最後に、パッケージングしたサンプルがどのようなディレクトリ構成になるのかを知っておきたい。ビルドが成功しているならば、target/sample-calculator.jarファイルを展開していただければ、図7のようなディレクトリ構成になっていることが確認できると思う。

図7: サンプルのディレクトリ構成

残念ながら、このディレクトリ構成も正式リリース版では変わる可能性がある。ここで重要なのは、単一のJARファイルがコンポジットの単位と一致している(つまりコンポジットがデプロイの単位になっている)こと、META-INFディレクトリ以下にSCDLファイルが置かれること(現在のTuscanyではdefault.scdlというファイル名)である。この事実は恐らく正式リリース版でも変わることがない。

今回の解説はここまでとしたい。Apache Tuscanyもまだ正式リリースに至っておらず、仕様との齟齬が多く残っている中での解説はやや時期尚早だったかもしれないが、SCAという注目に値する技術を一刻も早く紹介するため敢えて詳しく取り上げさせていただいた。

Tuscanyが正式リリースに至った暁には、今回の解説との差異を中心にまたご紹介したいと思う。