OpensessionInViewInterceptor / Filter来处理多个SessionFactories

时间:2011-12-13 08:04:07

标签: java hibernate spring

我们正在开发一个多租户应用程序,每个租户都有单独的架构。

我们每个架构使用一个SessionFactory,但在不使用OpenSessionInViewFilter的情况下工作正常。

我们希望将Spring TransactionManagerOpenSessionInViewFilter一起使用。

我们可以找到一些自定义OpenSessionInViewFilter的引用来处理多个SessionFactories(通过覆盖lookupSessionFactory方法),但它不适用于我们,因为我们需要从DAO引用此Filter。

所以我们计划去OpenSessionInViewInterceptor可以从其他spring bean(DAO)访问,但没有找到一种方法来自定义它以基于TenantId查找SessionFactory

我们正在使用Hibernate 3.2.5和Spring-2.5.6

1 个答案:

答案 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>