*Curl ORB for Java version 0.6 がリリースされました。リリースノートはこちら。
Curl ORBでは、DIコンテナ上で管理されているオブジェクトのメソッドをコールすることができます。今回は、各種設定及びCurlからの呼び出し方法を紹介していきます。
Seasar2 framework利用準備
まずは、Curl ORBとSeasar frameworkを連携するため、ここから S2Container 2.4.xの Zipファイルをダウンロード及び解凍しますと、解凍先のディレクトリ、seasar2/lib直下の4つのファイル
aopalliance-1.0.jar
javassist-3.4.ga.jar
ognl-2.6.9-patch-20070908.jar
s2-framework-2.4.29.jar
をWEB-INF/lib配下へ保存します。
次にWEB-INF直下に、classesフォルダを作成し、その直下にapp.diconに以下のような設定を行い、ファイルを作成します。
<!DOCTYPE components PUBLIC “-//SEASAR//DTD S2Container 2.4//EN”
“http://www.seasar.org/dtd/components24.dtd”>
<components>
<component name=”hello” class=”com.test.HelloImpl” />
</components>
を設定し、ファイルを作成します。(この例ではcom.testパッケージの中にサービスクラスが存在する場合です。もしサービスクラスのパッケージ名として別の名前を利用する場合は、ここを変更してください。)
Seasar2では通信のスコープが選択できます。
instance=”request”
instance=”session”
instance=”application”
スコープを変更したい場合はapp.diconの中の<component>タグの中に、上記のいずれかを記述してください。
(例: <component name=”hello” class=”com.test.HelloImpl” instance=”application” />)
次に、web.xmlにSeasar2用のフィルタを設定します。
<filter>
<display-name>s2filter</display-name>
<filter-name>s2filter</filter-name>
<filter-class>org.seasar.framework.container.filter.S2ContainerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>s2filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
また、app.diconの名前、場所を任意に記述、配置した場合は、web.xmlにその情報を記述します。
例:
<context-param>
<param-name>configPath</param-name>
<param-value>../2app.dicon</param-value> *classesから見た相対パスで表現します。
</context-param>
次に、curl-config.xmlにSeasar2を利用するための記述を下記のように行います。
<application-context
name=”seasar2″
class=”com.curlap.orb.context.Seasar2ApplicationContext”
/>
サービスクラスの作成
サーバサイドのサービスクラスとして、Hello実装クラスを作成します。
// インターフェースクラス
package com.test;
public interface Hello {
// sayHello
public String sayHello(String name);
}
// 実装クラス
package com.test;
public class HelloImpl implements Hello {
// sayHello
public String sayHello(String name) {
return “Hello ” + name + ” (Seasar2 Framework)”;
}
}
ここでAPサーバ(Tomcat等)を再起動します。
再起動後、コード生成ツールを利用して、以下のようなCurlのコードを生成します。ServiceClass(DI)を選択し、interface nameとしてhelloを選択して生成します。(コード生成ツールの詳細な利用方法はこちらです。)
|||
||| NOTE: *** This code was generated by the Curl code generator automatically ***
|||
|| PACKAGE COM.TEST
{import * from COM.CURLAP.ORB.SERVLET}
{define-class public Hello {inherits ORBClientForContext}
{constructor public {default}
{construct-super.ORBClientForContext “hello”}
}
{method public {say-hello v0:String}:#String
{return {self.invoke “sayHello”, arguments = {FastArray v0}}}
}
}
サービスクラスへのアクセス
生成されたコード(Helloサービスクラス)に対して、以下のようにアクセスいたします。(通常のCurlのクラスに対するアクセスと同様です。)
|| manifest.mcurlファイル
{curl 6.0 manifest}
{manifest PROJECT}
|| ORB packages
{delegate-to COM.CURLAP.ORB,
location = “COM/CURLAP/ORB/manifest.mcurl”
}
|| Curl code generator
{component file code-generator.dcurl,
location = “code-generator.dcurl”
}
|| add for seasar2 test
{component package COM.TEST,
location = “load.scurl”
}
|| テストstart.curl
{curl 6.0 applet}
{applet manifest = “manifest.mcurl”}
{import * from COM.TEST}
{do
def hello = {Hello}
{popup-message {hello.say-hello “akira”}}
}
これにより、Curl側のsay-helloメソッドをコールしますと、サーバサイドのDIコンテナ(Seasar2)で管理されているHelloオブジェクトを呼び出し、say-helloメソッドを実行し、戻り値をCurlへ返します。(このサンプルでは、”Hello akira (Seasar2 Framework)”と表示されます。)
このように、簡単にサーバサイドとの連携を行うことができます。