[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 メーリングリストの案内