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)”と表示されます。)
このように、簡単にサーバサイドとの連携を行うことができます。