クラス OpenSessionInViewFilter

実装されたすべてのインターフェース:
FilterEEAwareBeanNameAwareDisposableBeanInitializingBeanEnvironmentAwareEnvironmentCapableServletContextAware

public class OpenSessionInViewFilter extends OncePerRequestFilter
リクエストの処理全体のために Hibernate セッションをスレッドにバインドするサーブレットフィルター。"Open Session in View" パターン、つまり、元のトランザクションがすでに完了しているにもかかわらず Web ビューで遅延読み込みを可能にすることを目的としています。

このフィルターは、トランザクションマネージャーによって自動検出される現在のスレッドを介して Hibernate セッションを利用できるようにします。これは、HibernateTransactionManager を介したサービスレイヤートランザクション、および非トランザクション実行(適切に構成されている場合)に適しています。

: このフィルターは、デフォルトで、Hibernate セッションをフラッシュせ、フラッシュモードを FlushMode.MANUAL に設定します。これは、フラッシュを処理するサービスレイヤートランザクションと組み合わせて使用することを前提としています。アクティブなトランザクションマネージャーは、読み取り / 書き込みトランザクション中にフラッシュモードを一時的に FlushMode.AUTO に変更し、各トランザクションの最後にフラッシュモードを FlushMode.MANUAL にリセットします。

警告 : このフィルターを既存のロジックに適用すると、リクエスト全体の処理に単一の Hibernate セッションを使用することにより、これまでにない問題が発生する可能性があります。特に、永続オブジェクトと Hibernate セッションの再関連付けは、同じオブジェクトのすでにロードされているインスタンスとの衝突を避けるために、リクエスト処理の最初に行う必要があります。

Spring のルート Web アプリケーションコンテキストで SessionFactory を検索します。web.xml で "sessionFactoryBeanName" フィルターの init-param をサポートします。デフォルトの Bean 名は "sessionFactory" です。

導入:
4.2
作成者:
Juergen Hoeller
関連事項:
  • フィールドの詳細

    • DEFAULT_SESSION_FACTORY_BEAN_NAME

      public static final StringSE DEFAULT_SESSION_FACTORY_BEAN_NAME
      セッションファクトリに使用されるデフォルトの Bean 名。
      関連事項:
  • コンストラクターの詳細

    • OpenSessionInViewFilter

      public OpenSessionInViewFilter()
  • メソッドの詳細

    • setSessionFactoryBeanName

      public void setSessionFactoryBeanName(StringSE sessionFactoryBeanName)
      Spring のルートアプリケーションコンテキストからフェッチする SessionFactory の Bean 名を設定します。デフォルトは "sessionFactory" です。
      関連事項:
    • getSessionFactoryBeanName

      protected StringSE getSessionFactoryBeanName()
      Spring のルートアプリケーションコンテキストから取得する SessionFactory の Bean 名を返します。
    • shouldNotFilterAsyncDispatch

      protected boolean shouldNotFilterAsyncDispatch()
      フィルターが開いた Hibernate Session を非同期でディスパッチされた各スレッドに再バインドし、最後の非同期ディスパッチまで閉じるのを延期するように、"false" を返します。
      オーバーライド:
      クラス OncePerRequestFiltershouldNotFilterAsyncDispatch 
    • shouldNotFilterErrorDispatch

      protected boolean shouldNotFilterErrorDispatch()
      フィルターが各エラーディスパッチに Hibernate Session を提供できるように、"false" を返します。
      オーバーライド:
      クラス OncePerRequestFiltershouldNotFilterErrorDispatch 
    • doFilterInternal

      protected void doFilterInternal(HttpServletRequestEE request, HttpServletResponseEE response, FilterChainEE filterChain) throws ServletExceptionEE, IOExceptionSE
      クラスからコピーされた説明: OncePerRequestFilter
      doFilter と同じ契約ですが、単一のリクエストスレッド内のリクエストごとに 1 回だけ呼び出されることが保証されています。詳細については、OncePerRequestFilter.shouldNotFilterAsyncDispatch() を参照してください。

      デフォルトの ServletRequest および ServletResponse の代わりに、HttpServletRequest および HttpServletResponse 引数を提供します。

      次で指定:
      クラス OncePerRequestFilterdoFilterInternal 
      例外:
      ServletExceptionEE
      IOExceptionSE
    • lookupSessionFactory

      protected SessionFactory lookupSessionFactory(HttpServletRequestEE request)
      現在の HTTP リクエストを引数として、このフィルターが使用する SessionFactory を検索します。

      デフォルトの実装は、引数なしの lookupSessionFactory() バリアントに委譲します。

      パラメーター:
      request - 現在のリクエスト
      戻り値:
      使用する SessionFactory
    • lookupSessionFactory

      protected SessionFactory lookupSessionFactory()
      このフィルターが使用する SessionFactory を調べます。

      デフォルトの実装では、Spring のルートアプリケーションコンテキストで指定された名前の Bean を探します。

      戻り値:
      使用する SessionFactory
      関連事項:
    • openSession

      protected Session openSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException
      このフィルターが使用する SessionFactory のセッションを開きます。

      デフォルトの実装は SessionFactory.openSession() メソッドに委譲し、Session のフラッシュモードを "MANUAL" に設定します。

      パラメーター:
      sessionFactory - このフィルターが使用する SessionFactory
      戻り値:
      使用するセッション
      例外:
      DataAccessResourceFailureException - セッションを作成できなかった場合
      関連事項: