[Seasar-user:1985] Re: MayaとS2のバインディングについて

Masataka Kurihara kurihara
2005年 5月 19日 (木) 15:29:23 JST


栗原です。

> ・WEBページ表示の単位毎にモデルオブジェクトをおき、ライフサイ
>   クル(およびスコープ)管理を行っていますが、そのモデルオブジェ
>   クトをS2コンテナで管理すること。

HTMLテンプレートのhtmlエレメントもしくは、.maya設定XMLの
mayaノードに{ http://www.seasar.org/maya }class属性を
記述することによって、モデルオブジェクトを生成することができ
ます。このオブジェクトのライフサイクル・スコープは、同様に、
{ http://www.seasar.org/maya }scope属性に指定することで
制御できます。

<html xmlns:m="http://www.seasar.org/maya"
        m:class="org.seasar.maya.sample.HelloModel"
        m:scope="session">

こういうふうなのがあったときに、MayaのエンジンはServiceProvider
のgetModel()メソッドを呼び出します。メソッドのシグネチャは以下。

Object getModel(PageContext context, 
    String modelName, Class modelClass, int modelScope);

modelNameは、システムで付与するユーザーに見せないものです。
modelClassは、先のclass属性で指定されたもの、modelScope
は先のscope属性で指定されたものをそれぞれ解釈して渡します。
現在の実装(ServiceProviderImpl)では、単純にnewInstance()
しているだけです。このメソッドをオーバーライドして、S2コンテナから
コンポーネントを引くようにすることが可能です。
  ServiceProviderは、ServiceProviderFactoryから取得されます。

static {
    ServiceProviderFactory.setDefaultFactory(new S2ServiceProvider());
}

上記のように、S2ServiceProviderとでも作って、ServiceProviderFactory
にsetDefaultFactory()によってセットします。これは、MayaServlet
のstaticイニシャライザの中でやってるのですが、取替えで。これも、
ちょっとMayaデフォルトのやり方をちょいと変えるかも。staticイニシャライザ
でやっちゃうとオーバーライドできないから。

ということで、こういうことを実現できるようにはしてます。以上です。
不明点ありましたら、尋ねてください。

--
株式会社グルージェント
栗原 傑享(くりはら まさたか)
渋谷区渋谷3-7-6 第6矢木ビル4F
TEL:03-5469-8869 FAX:03-5469-8879
URL:http://www.gluegent.com/
--





Seasar-user メーリングリストの案内