2011-02-04 4 views
1

私は@SessionScopedを持っていますか? (後続の呼び出しで)インターセプタから見つかったようだが、同じリクエスト(およびセッション)でサービスに注入されていないStripesフレームワークのインターセプタコンストラクタに注入されているDAO。インターセプタで初期化された同じインスタンスが同じプロジェクト内の別のパッケージにあるサービスで再利用されないのはなぜですか?guiceが以前にインスタンス化された@SessionScopedオブジェクトを注入しないのはなぜですか?

DAOを@Singletonにするのは難しいことですが、DAOは同じDAOインスタンスを共有する複数のユーザーを持つアプリケーションでユーザーのセッション全体で一貫性を保つ必要がある情報を格納するため、受け入れられません。

+0

あなたはストライプ-のGuiceを使用しています(http://?bgoodin .github.com/stripes-guice /) – Kdeveloper

+0

はい、guice 2.0とstripes-guice 1.5.2 – mut1na

答えて

0

私はそれを理解しました。私は@SessionScopedを注射が動作するbind(DAO.class).in(ServletScopes.SESSION)のステートメントに変更しました。私が理解する限り、これらは同等でなければならないが、私の場合、彼らは異なる結果を生み出している。

ストライプスは、起動時にDAOを注入したインターセプタを構築して、セッションの範囲外でこのエラーが発生するようにしました(DAOは@SessionScopedです)。ActionBeanContextコンテキスト情報は初期化する必要があります私はアクションBeanの構築中に呼び出されAbstractActionBean setContextメソッドに設定されたDAOのセッションコンテキストご関心と助けを

おかげ

0

Interceptorがセッションスコープのオブジェクトではない場合は、をInterceptorに挿入する必要があります。これは、寿命の長いオブジェクトが寿命の短い別のオブジェクトに依存する場合に使用する一般的なパターンです。

+0

ありがとうございました。 (シングルトン)インターセプタは(sessionscoped)DAOよりも長い寿命を持っていますが、guiceは元のDAOインスタンスを1回のリクエストで注入していません。 – mut1na

+0

デバッグはguiceが(セッションに接続された?)インスタンスを使用する代わりにDAOのコンストラクタを呼び出していることを示します。 – mut1na

+0

DAOとインターセプタのコードをバインドするために使用しているコードを含めることができますか? – NamshubWriter

関連する問題