我们正在开发一个多租户应用程序,每个租户都有单独的架构。
我们每个架构使用一个SessionFactory
,但在不使用OpenSessionInViewFilter
的情况下工作正常。
我们希望将Spring TransactionManager
与OpenSessionInViewFilter
一起使用。
我们可以找到一些自定义OpenSessionInViewFilter的引用来处理多个SessionFactories
(通过覆盖lookupSessionFactory
方法),但它不适用于我们,因为我们需要从DAO引用此Filter。
所以我们计划去OpenSessionInViewInterceptor
可以从其他spring bean(DAO)访问,但没有找到一种方法来自定义它以基于TenantId查找SessionFactory
。
我们正在使用Hibernate 3.2.5和Spring-2.5.6
答案 0 :(得分:0)
要访问DAO中的过滤器,您可以将过滤器定义为bean,并使用DelegatingFilterProxy
将此bean注册为过滤器:
bean定义:
<bean id="openEntityManagerInViewFilter" class="org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter">
<property name="entityManagerFactoryBeanName" value="entityManagerFactory"/>
</bean>
web.xml部分:
<filter>
<filter-name>openEntityManagerInViewFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>openEntityManagerInViewFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>