throws ServletException, IOException { EntityManagerFactory emf = lookupEntityManagerFactory(request); boolean participate = false; String key = getAlreadyFilteredAttributeName(); boolean isFirstRequest = !isAsyncDispatch(request); if (isFirstRequest || !applyEntityManagerBindingInterceptor(asyncManager, key)) { logger.debug("Opening JPA EntityManager in OpenEntityManagerInViewFilter"); try { EntityManager em = createEntityManager(emf); EntityManagerHolder emHolder = new EntityManagerHolder(em); TransactionSynchronizationManager.bindResource(emf, emHolder); EntityManagerHolder emHolder = (EntityManagerHolder) TransactionSynchronizationManager.unbindResource(emf); if (!isAsyncStarted(request)) { logger.debug("Closing JPA EntityManager in OpenEntityManagerInViewFilter"); EntityManagerFactoryUtils.closeEntityManager(emHolder.getEntityManager());
/** * Look up the EntityManagerFactory that this filter should use. * <p>The default implementation looks for a bean with the specified name * in Spring's root application context. * @return the EntityManagerFactory to use * @see #getEntityManagerFactoryBeanName */ protected EntityManagerFactory lookupEntityManagerFactory() { WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); String emfBeanName = getEntityManagerFactoryBeanName(); String puName = getPersistenceUnitName(); if (StringUtils.hasLength(emfBeanName)) { return wac.getBean(emfBeanName, EntityManagerFactory.class); } else if (!StringUtils.hasLength(puName) && wac.containsBean(DEFAULT_ENTITY_MANAGER_FACTORY_BEAN_NAME)) { return wac.getBean(DEFAULT_ENTITY_MANAGER_FACTORY_BEAN_NAME, EntityManagerFactory.class); } else { // Includes fallback search for single EntityManagerFactory bean by type. return EntityManagerFactoryUtils.findEntityManagerFactory(wac, puName); } }
filterConfig2.addInitParameter("entityManagerFactoryBeanName", "myEntityManagerFactory"); final OpenEntityManagerInViewFilter filter = new OpenEntityManagerInViewFilter(); filter.init(filterConfig); final OpenEntityManagerInViewFilter filter2 = new OpenEntityManagerInViewFilter(); filter2.init(filterConfig2); filter2.doFilter(request, response, filterChain3); assertFalse(TransactionSynchronizationManager.hasResource(factory)); assertFalse(TransactionSynchronizationManager.hasResource(factory2));
/** * Keeps the session open until the end of a request. Allows us to use lazy-loading with Hibernate. */ @Bean public OpenEntityManagerInViewFilter openEntityManagerInViewFilter() { return new OpenEntityManagerInViewFilter(); }
/** * Look up the EntityManagerFactory that this filter should use, * taking the current HTTP request as argument. * <p>The default implementation delegates to the {@code lookupEntityManagerFactory} * without arguments, caching the EntityManagerFactory reference once obtained. * @return the EntityManagerFactory to use * @see #lookupEntityManagerFactory() */ protected EntityManagerFactory lookupEntityManagerFactory(HttpServletRequest request) { EntityManagerFactory emf = this.entityManagerFactory; if (emf == null) { emf = lookupEntityManagerFactory(); this.entityManagerFactory = emf; } return emf; }
filterConfig2.addInitParameter("entityManagerFactoryBeanName", "myEntityManagerFactory"); final OpenEntityManagerInViewFilter filter = new OpenEntityManagerInViewFilter(); filter.init(filterConfig); final OpenEntityManagerInViewFilter filter2 = new OpenEntityManagerInViewFilter(); filter2.init(filterConfig2); filter2.doFilter(this.request, this.response, filterChain3); assertFalse(TransactionSynchronizationManager.hasResource(factory)); assertFalse(TransactionSynchronizationManager.hasResource(factory2)); filter.doFilter(this.request, this.response, filterChain3); assertFalse(TransactionSynchronizationManager.hasResource(factory)); assertFalse(TransactionSynchronizationManager.hasResource(factory2));
@Bean @ConditionalOnMissingBean public OpenEntityManagerInViewFilter openEntityManagerInViewFilter() { return new OpenEntityManagerInViewFilter(); } }
/** * Look up the EntityManagerFactory that this filter should use, * taking the current HTTP request as argument. * <p>The default implementation delegates to the {@code lookupEntityManagerFactory} * without arguments, caching the EntityManagerFactory reference once obtained. * @return the EntityManagerFactory to use * @see #lookupEntityManagerFactory() */ protected EntityManagerFactory lookupEntityManagerFactory(HttpServletRequest request) { EntityManagerFactory emf = this.entityManagerFactory; if (emf == null) { emf = lookupEntityManagerFactory(); this.entityManagerFactory = emf; } return emf; }
throws ServletException, IOException { EntityManagerFactory emf = lookupEntityManagerFactory(request); boolean participate = false; String key = getAlreadyFilteredAttributeName(); boolean isFirstRequest = !isAsyncDispatch(request); if (isFirstRequest || !applyEntityManagerBindingInterceptor(asyncManager, key)) { logger.debug("Opening JPA EntityManager in OpenEntityManagerInViewFilter"); try { EntityManager em = createEntityManager(emf); EntityManagerHolder emHolder = new EntityManagerHolder(em); TransactionSynchronizationManager.bindResource(emf, emHolder); EntityManagerHolder emHolder = (EntityManagerHolder) TransactionSynchronizationManager.unbindResource(emf); if (!isAsyncStarted(request)) { logger.debug("Closing JPA EntityManager in OpenEntityManagerInViewFilter"); EntityManagerFactoryUtils.closeEntityManager(emHolder.getEntityManager());
/** * Look up the EntityManagerFactory that this filter should use. * <p>The default implementation looks for a bean with the specified name * in Spring's root application context. * @return the EntityManagerFactory to use * @see #getEntityManagerFactoryBeanName */ protected EntityManagerFactory lookupEntityManagerFactory() { WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); String emfBeanName = getEntityManagerFactoryBeanName(); String puName = getPersistenceUnitName(); if (StringUtils.hasLength(emfBeanName)) { return wac.getBean(emfBeanName, EntityManagerFactory.class); } else if (!StringUtils.hasLength(puName) && wac.containsBean(DEFAULT_ENTITY_MANAGER_FACTORY_BEAN_NAME)) { return wac.getBean(DEFAULT_ENTITY_MANAGER_FACTORY_BEAN_NAME, EntityManagerFactory.class); } else { // Includes fallback search for single EntityManagerFactory bean by type. return EntityManagerFactoryUtils.findEntityManagerFactory(wac, puName); } }
@Bean @ConditionalOnMissingBean public OpenEntityManagerInViewFilter openEntityManagerInViewFilter() { return new OpenEntityManagerInViewFilter(); } }
/** * Look up the EntityManagerFactory that this filter should use, * taking the current HTTP request as argument. * <p>The default implementation delegates to the {@code lookupEntityManagerFactory} * without arguments, caching the EntityManagerFactory reference once obtained. * @return the EntityManagerFactory to use * @see #lookupEntityManagerFactory() */ protected EntityManagerFactory lookupEntityManagerFactory(HttpServletRequest request) { EntityManagerFactory emf = this.entityManagerFactory; if (emf == null) { emf = lookupEntityManagerFactory(); this.entityManagerFactory = emf; } return emf; }
throws ServletException, IOException { EntityManagerFactory emf = lookupEntityManagerFactory(request); boolean participate = false; String key = getAlreadyFilteredAttributeName(); boolean isFirstRequest = !isAsyncDispatch(request); if (isFirstRequest || !applyEntityManagerBindingInterceptor(asyncManager, key)) { logger.debug("Opening JPA EntityManager in OpenEntityManagerInViewFilter"); try { EntityManager em = createEntityManager(emf); EntityManagerHolder emHolder = new EntityManagerHolder(em); TransactionSynchronizationManager.bindResource(emf, emHolder); EntityManagerHolder emHolder = (EntityManagerHolder) TransactionSynchronizationManager.unbindResource(emf); if (!isAsyncStarted(request)) { logger.debug("Closing JPA EntityManager in OpenEntityManagerInViewFilter"); EntityManagerFactoryUtils.closeEntityManager(emHolder.getEntityManager());
/** * Look up the EntityManagerFactory that this filter should use. * <p>The default implementation looks for a bean with the specified name * in Spring's root application context. * @return the EntityManagerFactory to use * @see #getEntityManagerFactoryBeanName */ protected EntityManagerFactory lookupEntityManagerFactory() { WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); String emfBeanName = getEntityManagerFactoryBeanName(); String puName = getPersistenceUnitName(); if (StringUtils.hasLength(emfBeanName)) { return wac.getBean(emfBeanName, EntityManagerFactory.class); } else if (!StringUtils.hasLength(puName) && wac.containsBean(DEFAULT_ENTITY_MANAGER_FACTORY_BEAN_NAME)) { return wac.getBean(DEFAULT_ENTITY_MANAGER_FACTORY_BEAN_NAME, EntityManagerFactory.class); } else { // Includes fallback search for single EntityManagerFactory bean by type. return EntityManagerFactoryUtils.findEntityManagerFactory(wac, puName); } }
@Bean public FilterRegistrationBean<?> openEntityManagerInViewFilter() { FilterRegistrationBean<?> filterBean = new FilterRegistrationBean<>(new OpenEntityManagerInViewFilter()); filterBean.addUrlPatterns(PATH_DAV); return filterBean; }
@Bean public FilterRegistrationBean<?> openEntityManagerInViewFilter() { FilterRegistrationBean<?> filterBean = new FilterRegistrationBean<>(new OpenEntityManagerInViewFilter()); filterBean.addUrlPatterns(PATH_DAV); return filterBean; }