JavaScript や Groovy を使った SCA のサンプルを作成

Tuscany SCA 0.9.9 の場合

Tuscany SCA 0.9.9 では、後述の 0.9.1 のような .componentType ファイルが不要になり、.composite ファイルを記述するだけでよくなった。

また、.composite ファイルでは tuscany ネームスペースの implementation.script を使うように変更された模様。

なお、実行手順等は 0.9.1 と同様。

Simple.composite ファイル
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" 
           xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0" name="Simple">

    <component name="SimpleServiceComponent">
        <tuscany:implementation.script script="simple/SimpleService.groovy"/>
    </component>

</composite>
SimpleService.groovy
def String getMessage(msg) {
    return "Hello ${msg}"
}
SimpleClient.java
package simple;

import org.apache.tuscany.sca.host.embedded.SCADomain;

public class SimpleClient {
    public static void main(String[] args) {

        SCADomain scad = SCADomain.newInstance("simple.composite");

        SimpleService service = scad.getService(SimpleService.class, "SimpleServiceComponent");

        System.out.println("result: " + service.getMessage("test"));

        scad.close();
    }
}

Tuscany SCA 0.9.1 の場合

JavaScript で実装を記述した Tuscany 0.9 用のスタンドアロン実行可能なサンプルを作成する。

d:id:fits:20070722 で作成したサンプルを使用し、サービスインターフェースの実装部分のみ JavaScript で置き換える事にする。(サービスインターフェースとクライアントはそのまま)

手順は以下の通り。

  1. サービスの実装を JavaScript で作成
  2. アセンブリモデルの構成ファイルとコンポーネントタイプファイル作成
  3. 実行
サービスの実装を JavaScript で作成

JavaScript でサービスインターフェースのメソッドを実装する。

SimpleService.js ファイル
function getMessage(msg) {
    return "Hello " + msg;
}
アセンブリモデルの構成ファイルとコンポーネントタイプファイル作成

アセンブリモデルの構成を記述するためのコンポジット定義ファイルでは、implementation.java の代わりに implemantation.script 要素を使って script 属性に JavaScript のファイルへのパスを記述。

Simple.composite ファイル
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="Simple">

    <component name="SimpleServiceComponent">
        <implementation.script script="simple/SimpleService.js"/>
    </component>

</composite>

JavaScript でどのサービスインターフェースを実装したかを明示するためにコンポーネントタイプファイルを作成する。

SimpleService.componentType ファイル
<componentType xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <service name="SimpleService">
        <interface.java interface="simple.SimpleService"/>
    </service>

</componentType>
実行

ビルドと実行は d:id:fits:20070722build.xml ファイルをそのまま使用。

ビルドで生成した simple.jar ファイルの構成は以下の通り。

simple.jar ファイル
  • simple ディレクトリ
    • SimpleClient.class
    • SimpleService.class
    • SimpleService.componentType
    • SimpleService.js
  • Simple.composite
実行結果
>ant run
Buildfile: build.xml

compile:

package:

run:
     [java] Hello a1
     [java] Hello a2

BUILD SUCCESSFUL