クラス OpenSessionInViewFilter
- 実装されたすべてのインターフェース:
FilterEE
、Aware
、BeanNameAware
、DisposableBean
、InitializingBean
、EnvironmentAware
、EnvironmentCapable
、ServletContextAware
このフィルターは、トランザクションマネージャーによって自動検出される現在のスレッドを介して Hibernate セッションを利用できるようにします。これは、HibernateTransactionManager
を介したサービスレイヤートランザクション、および非トランザクション実行(適切に構成されている場合)に適しています。
注 : このフィルターは、デフォルトでは、Hibernate セッションをフラッシュせず、フラッシュモードを FlushMode.MANUAL
に設定します。これは、フラッシュを処理するサービスレイヤートランザクションと組み合わせて使用することを前提としています。アクティブなトランザクションマネージャーは、読み取り / 書き込みトランザクション中にフラッシュモードを一時的に FlushMode.AUTO
に変更し、各トランザクションの最後にフラッシュモードを FlushMode.MANUAL
にリセットします。
警告 : このフィルターを既存のロジックに適用すると、リクエスト全体の処理に単一の Hibernate セッションを使用することにより、これまでにない問題が発生する可能性があります。特に、永続オブジェクトと Hibernate セッションの再関連付けは、同じオブジェクトのすでにロードされているインスタンスとの衝突を避けるために、リクエスト処理の最初に行う必要があります。
Spring のルート Web アプリケーションコンテキストで SessionFactory を検索します。web.xml
で "sessionFactoryBeanName" フィルター init-param をサポートします。デフォルトの Bean 名は "sessionFactory" です。
フィールドサマリー
クラス org.springframework.web.filter.OncePerRequestFilter から継承されたフィールド
ALREADY_FILTERED_SUFFIX
クラス org.springframework.web.filter.GenericFilterBean から継承されたフィールド
logger
コンストラクターのサマリー
メソッドのサマリー
修飾子と型メソッド説明protected void
doFilterInternal
(HttpServletRequestEE request, HttpServletResponseEE response, FilterChainEE filterChain) doFilter
と同じ契約ですが、単一のリクエストスレッド内のリクエストごとに 1 回だけ呼び出されることが保証されています。protected StringSE
Spring のルートアプリケーションコンテキストから取得する SessionFactory の Bean 名を返します。protected SessionFactory
このフィルターが使用する SessionFactory を調べます。protected SessionFactory
lookupSessionFactory
(HttpServletRequestEE request) 現在の HTTP リクエストを引数として、このフィルターが使用する SessionFactory を検索します。protected Session
openSession
(SessionFactory sessionFactory) このフィルターが使用する SessionFactory のセッションを開きます。void
setSessionFactoryBeanName
(StringSE sessionFactoryBeanName) SessionFactory の Bean 名を設定して、Spring のルートアプリケーションコンテキストから取得します。protected boolean
フィルターが開いた HibernateSession
を非同期でディスパッチされた各スレッドに再バインドし、最後の非同期ディスパッチまで閉じるのを延期するように、"false" を返します。protected boolean
フィルターが各エラーディスパッチに HibernateSession
を提供できるように、"false" を返します。クラス org.springframework.web.filter.OncePerRequestFilter から継承されたメソッド
doFilter, doFilterNestedErrorDispatch, getAlreadyFilteredAttributeName, isAsyncDispatch, isAsyncStarted, shouldNotFilter
クラス org.springframework.web.filter.GenericFilterBean から継承されたメソッド
addRequiredProperty, afterPropertiesSet, createEnvironment, destroy, getEnvironment, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, initFilterBean, setBeanName, setEnvironment, setServletContext
フィールドの詳細
DEFAULT_SESSION_FACTORY_BEAN_NAME
セッションファクトリに使用されるデフォルトの Bean 名。- 関連事項:
コンストラクターの詳細
OpenSessionInViewFilter
public OpenSessionInViewFilter()
メソッドの詳細
setSessionFactoryBeanName
Spring のルートアプリケーションコンテキストから取得する SessionFactory の Bean 名を設定します。デフォルトは "sessionFactory" です。getSessionFactoryBeanName
Spring のルートアプリケーションコンテキストから取得する SessionFactory の Bean 名を返します。shouldNotFilterAsyncDispatch
protected boolean shouldNotFilterAsyncDispatch()フィルターが開いた HibernateSession
を非同期でディスパッチされた各スレッドに再バインドし、最後の非同期ディスパッチまで閉じるのを延期するように、"false" を返します。- オーバーライド:
- クラス
OncePerRequestFilter
のshouldNotFilterAsyncDispatch
shouldNotFilterErrorDispatch
protected boolean shouldNotFilterErrorDispatch()フィルターが各エラーディスパッチに HibernateSession
を提供できるように、"false" を返します。- オーバーライド:
- クラス
OncePerRequestFilter
のshouldNotFilterErrorDispatch
doFilterInternal
protected void doFilterInternal(HttpServletRequestEE request, HttpServletResponseEE response, FilterChainEE filterChain) throws ServletExceptionEE, IOExceptionSE クラスからコピーされた説明:OncePerRequestFilter
doFilter
と同じ契約ですが、単一のリクエストスレッド内のリクエストごとに 1 回だけ呼び出されることが保証されています。詳細については、OncePerRequestFilter.shouldNotFilterAsyncDispatch()
を参照してください。デフォルトの ServletRequest および ServletResponse の代わりに、HttpServletRequest および HttpServletResponse 引数を提供します。
- 次で指定:
- クラス
OncePerRequestFilter
のdoFilterInternal
- 例外:
ServletExceptionEE
IOExceptionSE
lookupSessionFactory
現在の HTTP リクエストを引数として、このフィルターが使用する SessionFactory を検索します。デフォルトの実装は、引数なしの
lookupSessionFactory()
バリアントに委譲します。- パラメーター:
request
- 現在のリクエスト- 戻り値:
- 使用する SessionFactory
lookupSessionFactory
このフィルターが使用する SessionFactory を調べます。デフォルトの実装では、Spring のルートアプリケーションコンテキストで指定された名前の Bean を探します。
- 戻り値:
- 使用する SessionFactory
- 関連事項:
openSession
protected Session openSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException このフィルターが使用する SessionFactory のセッションを開きます。デフォルトの実装は
SessionFactory.openSession()
メソッドに委譲し、Session
のフラッシュモードを "MANUAL" に設定します。- パラメーター:
sessionFactory
- このフィルターが使用する SessionFactory- 戻り値:
- 使用するセッション
- 例外:
DataAccessResourceFailureException
- セッションを作成できなかった場合- 関連事項: