[Seasar-user:3888] Re: 独自作成Interceptorの使用方法

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2006年 6月 16日 (金) 19:56:32 JST


関です。

>小林さん
> 対策としては,独自実装 Interceptor のインスタンスモードを
> prototype にして,InterceptorLifecycleAdapter を適用することで
> session や request のコンポーネントがインジェクションされるように
> なります.

アドバイスありがとうございます。
こちらの方法をまず試した見たのですがどうも、うまくいきませんでした。
独自実装Interceptorの大根を以下の用に設定したのですが、

■1.diconの設定を以下に変更
<component name="myInterceptor"
 class="[独自実装InterceptorImplクラス]"
 instance="prototype"
 >
 <aspect>new org.seasar.framework.aop.interceptors.InterceptorLifecycleAdapter()</aspect>
</component>

■2.独自実装Interceptorに自動インジェクション用セッターを追加
public void setUser(User user) {
	this.user = user;
}

Tomcatの起動時にUserの大根がinstance="session"のため(?)
「org.seasar.framework.exception.EmptyRuntimeException: [ESSR0007]sessionはnullあるいは空であってはいけません」
とのエラーが表示されます
実際にページを閲覧すると対象のaction付近のDtoがnullになっているようで動作しませんでした。


>藤本さん、竹内さん
> 私も同様の問題(Interceptorでセッション属性のオブジェクトが自動バインディ
> ングされない)で悩み、下記のように直接S2Containerからインスタンスを取得す
> ることで解決しました。
> S2Container con = SingletonS2ContainerFactory.getContainer();
> User user = (User) con.getComponent(User.class);

こちらもアドバイスありがとうございます。
上記で教えて頂きました方法ではdiconなどに特に変更を加えずにそのままのコードで
無事にsessionスコープのUserオブジェクトを取得することが出来ました。

注意点として竹内さんがご指摘のスレッド間の同期についての問題ですが
私の方がもっと弱者故にどこが心配な点かさえも分かりません。

しかしながら、一応目的の動作を達成致しました。
今後の勉強のモチベーションが下がらないで済みそうです(^^;
皆さんありがとうございました。





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