Class OpenPersistenceManagerInViewFilter

  • All Implemented Interfaces:
    javax.servlet.Filter, org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanNameAware, org.springframework.beans.factory.DisposableBean, org.springframework.beans.factory.InitializingBean, org.springframework.context.EnvironmentAware, org.springframework.core.env.EnvironmentCapable, org.springframework.web.context.ServletContextAware

    public class OpenPersistenceManagerInViewFilter
    extends org.springframework.web.filter.OncePerRequestFilter
    Servlet Filter that binds a JDO PersistenceManager to the thread for the entire processing of the request. Intended for the "Open PersistenceManager in View" pattern, i.e. to allow for lazy loading in web views despite the original transactions already being completed.

    This filter makes JDO PersistenceManagers available via the current thread, which will be autodetected by transaction managers. It is suitable for service layer transactions via JdoTransactionManager or JtaTransactionManager as well as for non-transactional read-only execution.

    Looks up the PersistenceManagerFactory in Spring's root web application context. Supports a "persistenceManagerFactoryBeanName" filter init-param in web.xml; the default bean name is "persistenceManagerFactory".

    See Also:
    OpenPersistenceManagerInViewInterceptor, JdoTransactionManager, PersistenceManagerFactoryUtils.getPersistenceManager(javax.jdo.PersistenceManagerFactory, boolean), TransactionSynchronizationManager
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static String DEFAULT_PERSISTENCE_MANAGER_FACTORY_BEAN_NAME  
      • Fields inherited from class org.springframework.web.filter.OncePerRequestFilter

        ALREADY_FILTERED_SUFFIX
      • Fields inherited from class org.springframework.web.filter.GenericFilterBean

        logger
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void doFilterInternal​(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.FilterChain filterChain)  
      protected String getPersistenceManagerFactoryBeanName()
      Return the bean name of the PersistenceManagerFactory to fetch from Spring's root application context.
      protected javax.jdo.PersistenceManagerFactory lookupPersistenceManagerFactory()
      Look up the PersistenceManagerFactory that this filter should use.
      protected javax.jdo.PersistenceManagerFactory lookupPersistenceManagerFactory​(javax.servlet.http.HttpServletRequest request)
      Look up the PersistenceManagerFactory that this filter should use, taking the current HTTP request as argument.
      void setPersistenceManagerFactoryBeanName​(String persistenceManagerFactoryBeanName)
      Set the bean name of the PersistenceManagerFactory to fetch from Spring's root application context.
      protected boolean shouldNotFilterAsyncDispatch()
      Returns "false" so that the filter may re-bind the opened PersistenceManager to each asynchronously dispatched thread and postpone closing it until the very last asynchronous dispatch.
      protected boolean shouldNotFilterErrorDispatch()
      Returns "false" so that the filter may provide an PersistenceManager to each error dispatches.
      • Methods inherited from class org.springframework.web.filter.OncePerRequestFilter

        doFilter, doFilterNestedErrorDispatch, getAlreadyFilteredAttributeName, isAsyncDispatch, isAsyncStarted, shouldNotFilter
      • Methods inherited from class org.springframework.web.filter.GenericFilterBean

        addRequiredProperty, afterPropertiesSet, createEnvironment, destroy, getEnvironment, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, initFilterBean, setBeanName, setEnvironment, setServletContext
    • Method Detail

      • shouldNotFilterAsyncDispatch

        protected boolean shouldNotFilterAsyncDispatch()
        Returns "false" so that the filter may re-bind the opened PersistenceManager to each asynchronously dispatched thread and postpone closing it until the very last asynchronous dispatch.
        Overrides:
        shouldNotFilterAsyncDispatch in class org.springframework.web.filter.OncePerRequestFilter
      • shouldNotFilterErrorDispatch

        protected boolean shouldNotFilterErrorDispatch()
        Returns "false" so that the filter may provide an PersistenceManager to each error dispatches.
        Overrides:
        shouldNotFilterErrorDispatch in class org.springframework.web.filter.OncePerRequestFilter
      • doFilterInternal

        protected void doFilterInternal​(javax.servlet.http.HttpServletRequest request,
                                        javax.servlet.http.HttpServletResponse response,
                                        javax.servlet.FilterChain filterChain)
                                 throws javax.servlet.ServletException,
                                        IOException
        Specified by:
        doFilterInternal in class org.springframework.web.filter.OncePerRequestFilter
        Throws:
        javax.servlet.ServletException
        IOException
      • lookupPersistenceManagerFactory

        protected javax.jdo.PersistenceManagerFactory lookupPersistenceManagerFactory​(javax.servlet.http.HttpServletRequest request)
        Look up the PersistenceManagerFactory that this filter should use, taking the current HTTP request as argument.

        Default implementation delegates to the lookupPersistenceManagerFactory without arguments.

        Returns:
        the PersistenceManagerFactory to use
        See Also:
        lookupPersistenceManagerFactory()
      • lookupPersistenceManagerFactory

        protected javax.jdo.PersistenceManagerFactory lookupPersistenceManagerFactory()
        Look up the PersistenceManagerFactory that this filter should use. The default implementation looks for a bean with the specified name in Spring's root application context.
        Returns:
        the PersistenceManagerFactory to use
        See Also:
        getPersistenceManagerFactoryBeanName()