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配下へ保存します。
を設定し、ファイルを作成します。(この例ではcom.testパッケージの中にサービスクラスが存在する場合です。もしサービスクラスのパッケージ名として別の名前を利用する場合は、ここを変更してください。)
Seasar2では通信のスコープが選択できます。
instance=”request”
instance=”session”
instance=”application”
スコープを変更したい場合はapp.diconの中の<component>タグの中に、上記のいずれかを記述してください。
(例: <component name=”hi” class=”com.test.HiImpl” 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> |
また、CurlORB内でSeasar2を利用するため、同様にWEB-INF/web.xmlに以下のように指定します。
<context-param> <param-name>com.curlap.orb.applicationContextClass</param-name> <param-value>com.curlap.orb.context.Seasar2ApplicationContext</param-value> </context-param> |
web.xml
<web-app xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://java.sun.com/xml/ns/javaee” xmlns:web=”http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd” xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd” id=”WebApp_ID” version=”2.5″>
<!– InvokeApplicationContextServlet –> <servlet> <servlet-name>InvokeApplicationContextServlet</servlet-name> <servlet-class>com.curlap.orb.servlet.InvokeApplicationContextServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>InvokeApplicationContextServlet</servlet-name> <url-pattern>/invoke-application-context</url-pattern> </servlet-mapping>
<!– NewInstanceServlet –> <servlet> <servlet-name>NewInstanceServlet</servlet-name> <servlet-class>com.curlap.orb.servlet.NewInstanceServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>NewInstanceServlet</servlet-name> <url-pattern>/new-instance</url-pattern> </servlet-mapping> <!– InvokeHttpSessionServlet –> <servlet> <servlet-name>InvokeHttpSessionServlet</servlet-name> <servlet-class>com.curlap.orb.servlet.InvokeHttpSessionServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>InvokeHttpSessionServlet</servlet-name> <url-pattern>/invoke-http-session</url-pattern> </servlet-mapping>
<!– DestroyInstanceServlet –> <servlet> <servlet-name>DestroyInstanceServlet</servlet-name> <servlet-class>com.curlap.orb.servlet.DestroyInstanceServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DestroyInstanceServlet</servlet-name> <url-pattern>/destroy-instance</url-pattern> </servlet-mapping> <!– DefaultFilter –> <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> <filter> <filter-name>DefaultFilter</filter-name> <filter-class>com.curlap.orb.servlet.DefaultInstanceManagementFilter</filter-class> </filter> <filter-mapping> <filter-name>DefaultFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!– Curl ORB – Environment – (since 0.6) default: none – none (none security) – development – test – production –> <context-param> <param-name>com.curlap.orb.environment</param-name> <param-value>development</param-value> </context-param>
<!– Curl ORB – DI container integration – (since 0.6) default: com.curlap.orb.context.ServletApplicationContext – spring : com.curlap.orb.context.Spring2_5ApplicationContext – seasar2: com.curlap.orb.context.Seasar2ApplicationContext –> <context-param> <param-name>com.curlap.orb.applicationContextClass</param-name> <param-value>com.curlap.orb.context.Seasar2ApplicationContext</param-value> </context-param> <session-config> <session-timeout>60</session-timeout> </session-config>
</web-app>
|
サービスクラスの作成
サーバサイドのサービスクラスとして、Hi実装クラスを作成します。
// インターフェースクラス package com.test;
public interface Hi{ // sayHi public String sayHi(String name); }
|
// 実装クラス package com.test; import com.curlap.orb.security.RemoteService;
@RemoteService public class HiImpl implements Hi { // sayHi public String sayHi(String name) { return “Hi ” + name + ” (Seasar2 Framework)”; } }
|
次にWEB-INF直下に、classesフォルダを作成し、その直下にapp.diconを作成し、以下のような設定を行います。
<!DOCTYPE components PUBLIC “-//SEASAR//DTD S2Container 2.4//EN” “http://www.seasar.org/dtd/components24.dtd”> <components> <component name=”hi” class=”com.test.HiImpl” /> </components> |
ここでAPサーバ(Tomcat等)を再起動します。
再起動後、コード生成ツールを利用して、以下のようなCurlのコードを生成します。ServiceClass(DI)を選択し、interface nameとしてhiを選択して生成します。(コード生成ツールの詳細な利用方法はこちらです。)
||| ||| Curl ORB for java (version 0.6) ||| This code was generated by the Curl code generator automatically.
||| package name : COM.TEST ||| generated date : 2008-12-18 15:01:52.174000 |||
{import * from COM.CURLAP.ORB}
{define-class public Hi {inherits ApplicationContextClient}
{constructor public {default server-url:#Url = null} {construct-super.ApplicationContextClient “hi”, server-url = server-url} }
{method public {say-hi v0:String}:#String {return {self.invoke “sayHi”, arguments = {FastArray v0}}} } }
|
サービスクラスへのアクセス
生成されたコード(Hiサービスクラス)に対して、以下のようにアクセスいたします。(通常のCurlのクラスに対するアクセスと同様です。)
{curl 6.0 applet} || or 7.0 {curl-file-attributes character-encoding = “shift-jis”} {applet manifest = “manifest.mcurl”, {compiler-directives careful? = true} }
{import * from COM.TEST} {value def h = {Hi} {popup-message {h.say-hi “akira”}} }
|
これにより、Curl側のsay-hiメソッドをコールしますと、サーバサイドのDIコンテナ(Seasar2)で管理されているHiImplオブジェクトを呼び出し、say-hiメソッドを実行し、戻り値をCurlへ返します。(このサンプルでは、”Hello akira (Seasar2 Framework)”と表示されます。)
このように、簡単にサーバサイドとの連携を行うことができます。