DIコンテナ(Spring framework)との連携

Curl ORBでは、DIコンテナ上で管理されているオブジェクトのメソッドをコールすることができます。今回は、各種設定及びCurlからの呼び出し方法を紹介していきます。

 

Spring framework利用準備

まずは、Curl ORBとSpring frameworkを連携するため、ここからZipファイルをダウンロード及び解凍しますと、spring.jarというファイルが含まれますので、これをWEB-INF/lib配下へ保存します。

【前提】
Spring2.5

次にapplicationContext.xmlに以下のような<context:component-scan base-package=”samples”/>を設定し、ファイルを作成します。(この例ではsamplesパッケージの中にサービスクラスが存在する場合です。もしサービスクラスのパッケージ名として別の名前を利用する場合は、ここを変更してください。)このファイルをWEB-INF/applicationContext.xmlに保存します。 


<beans xmlns=”http://www.springframework.org/schema/beans
        xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance
        xmlns:p=”http://www.springframework.org/schema/p
        xmlns:aop=”http://www.springframework.org/schema/aop
        xmlns:context=”http://www.springframework.org/schema/context
        xmlns:jee=”http://www.springframework.org/schema/jee
        xmlns:tx=”http://www.springframework.org/schema/tx
        xsi:schemaLocation=”
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-2.5.xsd
            http://www.springframework.org/schema/jee
            http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-2.5.xsd“>

  <context:component-scan base-package=”samples”/>

</beans>

次にWEB-INF/web.xmlにSpring用のリスナーを追加します。

   <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

また、CurlORB内でSpringを利用するため、同様にWEB-INF/web.xmlに以下のように指定します。 

  <context-param>
    <param-name>com.curlap.orb.applicationContextClass</param-name>
    <param-value>com.curlap.orb.context.Spring2_5ApplicationContext</param-value>
  </context-param>

これで、Curl ORBとspringを連携する事前設定は完了しましたので、実際にSpringで管理されているクラスの利用方法を以下に記載します。

サービスクラスの作成

サーバサイドのサービスクラスとして、HelloインターフェースとHelloImpl実装クラスを作成します。HelloImplクラスを作成する場合、サービスクラスとして定義するため、Serviceアノテーションを指定します。(これによりapplicationContext.xmlにbeanタグを記載する必要がなくなります。) ※RemoteServiceアノテーションについての詳細は、こちらを参照ください。

// インターフェース(Java)
package samples;

public interface Hello {
 // sayHello
  public String sayHello(String name);
}

 

// 実装クラス(Java)
package samples;

import com.curlap.orb.security.RemoteService;
import org.springframework.stereotype.Service;

@RemoteService
@Service(“hello“)
public class HelloImpl implements Hello {
 // sayHello
 public String sayHello(String name) {
  return “Hello ” + name + ” (Spring Framework)”;
 }
}

ここでAPサーバ(Tomcat等)を再起動します。

再起動後、コード生成ツールを利用して、以下のようなCurlのコードを生成します。ServiceClass(DI)を選択し、interface nameとしてHelloを選択して生成します。(コード生成ツールの詳細な利用方法はこちらです。)

{import * from COM.CURLAP.ORB}

{define-class public Hello {inherits ApplicationContextClient}

   {constructor public {default}
    {construct-super.ApplicationContextClient “hello”}
  }

  {method public {say-hello v0:String}:#String
    {return {self.invoke “sayHello”, arguments = {FastArray v0}}}
  }
}

サービスクラスへのアクセス

生成されたコード(Helloサービスクラス)に対して、以下のようにアクセスいたします。(通常のCurlのクラスに対するアクセスと同様です。)

{import * from SAMPLES}

{value
  || new
  def hello = {Hello}
  || invoke method
  {popup-message {hello.say-hello “Hitoshi Okada”}}
}

これにより、Curl側のsay-helloメソッドをコールしますと、サーバサイドのDIコンテナ(spring)で管理されているHelloオブジェクトを呼び出し、sayHelloメソッドを実行し、戻り値をCurlへ返します。(このサンプルでは、”Hello Hitoshi Okada (Spring Framework)”と表示されます。)

このように、簡単にサーバサイドとの連携を行うことができます。

また、下記サイトにSpring Frameworkとの連携を詳細に記述した記事を掲載しております。

第1回 サンプルアプリケーションを動かしてみよう

第2回 デモ・アプリケーション開発

第3回 ユーザ認証とアクセス制御

 

関連ページ

Spring Framework

@IT