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 で置き換える事にする。(サービスインターフェースとクライアントはそのまま)
手順は以下の通り。
- サービスの実装を JavaScript で作成
- アセンブリモデルの構成ファイルとコンポーネントタイプファイル作成
- 実行
サービスの実装を 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>
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