Seasar

Seasarを探検中。SingletonS2ContainerFactoryは名前の通りVMで1個のS2Containerを作るのね(マルチスレッドのときは大丈夫かな)。そんでもって、S2ContainerにServletContextもinitで渡しているのか。そう考えると、Portletの場合は、PortletContextを渡せた方がよいのだろうか。そこで、S2ContainerImplを見てみると、その中では、ServletContextを利用していることはないみたい。でも、他からは呼ぶようなコンポーネントがあるのかもしれないけど。S2ContainerImplでは、RequestとResponseもThreadLocalに入れることができるみたいだな。これまた、PortletRequestとPortletResponseも渡せた方が良いのかもしれないが、ServletContext同様に、誰が利用しているのかがよくわからんな。次に、S2Container#getComponent(Object)で何が起きるのかを理解するために、S2ContainerImpl#getComponent(Object)をみてみる。assertParameterIsNotNullをした後にS2ContainerBehavior.acquireFromGetComponentを呼んでComponentDefを取得しているな。そんで、ComponentDef#getComponent()をするのか。っで、S2ContainerBehaviorってなんだろう。見ると、S2ContainerImpl#internalGetComponentDef(Object)を呼ぶみたいだな。自分が持たなければ、子のS2Containerに行くのか。基本的には、コンポーネントはComponentDefにラップされるのね。登録については、registerMapでcomponentDefMapにいれているっぽいな。つまり、S2Containerで一度、インスタンス化して、そこに入れておいて引っ張ってくるのね。request, response, session, servletContext またはクラスをgetComponentすれば、setしておけば、S2Containerからとれるのね。それを考えると、portletRequest, portletRender, portletSession, portletContext(or portletConfig)とかも、S2Container が持った方が良い気がするな。ざっと、コンポーネント周りを見て、何となく、わかったような気になった(?)ので、どう使えばいいのか、考えてみよう。そういえば、ソースコードをみていて思ったのだが、JavaDocなどのコメントがほとんどないように見える。ApacheのJava系のコードをよく読むが、ちょっとしたコメントに助けられることもよくあると思う。でも、Seasarのコードでは、コメントが見あたらないので、私みたいなこの分野の新参者にはノーヒントで理解するのはちょっと辛いな・・・。じっくり読まんと理解できんし。みんなはどうしてるんだろ・・・。

コメントを残す

メールアドレスが公開されることはありません。