Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenSessionInviewWinterCeptor/Filter处理多个SessionFactory_Java_Hibernate_Spring - Fatal编程技术网

Java OpenSessionInviewWinterCeptor/Filter处理多个SessionFactory

Java OpenSessionInviewWinterCeptor/Filter处理多个SessionFactory,java,hibernate,spring,Java,Hibernate,Spring,我们正在开发一个多租户应用程序,每个租户有单独的模式 我们正在为每个模式使用一个SessionFactory,该模式在不使用OpenSessionInViewFilter的情况下运行良好 我们希望使用SpringTransactionManager以及OpenSessionInViewFilter 我们可以找到一些引用来定制OpenSessionInViewFilter,以处理多个会话工厂(通过重写lookupSessionFactory方法),但它对我们不起作用,因为我们需要从DAO引用此过滤

我们正在开发一个多租户应用程序,每个租户有单独的模式

我们正在为每个模式使用一个
SessionFactory
,该模式在不使用
OpenSessionInViewFilter
的情况下运行良好

我们希望使用Spring
TransactionManager
以及
OpenSessionInViewFilter

我们可以找到一些引用来定制OpenSessionInViewFilter,以处理多个
会话工厂
(通过重写
lookupSessionFactory
方法),但它对我们不起作用,因为我们需要从DAO引用此过滤器

因此,我们计划使用
OpenSessionInViewInterceptor
,它可以从其他SpringBean(DAO)访问,但没有找到一种方法来定制它,以便基于TenantId查找
SessionFactory


我们使用Hibernate 3.2.5和Spring-2.5.6来访问DAO中的过滤器。您可以将过滤器定义为bean,并使用DelegatingFilterProxy将此bean注册为过滤器:

bean定义:

<bean id="openEntityManagerInViewFilter" class="org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter">
  <property name="entityManagerFactoryBeanName" value="entityManagerFactory"/>
</bean>
<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>

web.xml部分:

<bean id="openEntityManagerInViewFilter" class="org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter">
  <property name="entityManagerFactoryBeanName" value="entityManagerFactory"/>
</bean>
<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>

OpenEntityManager视图过滤器
org.springframework.web.filter.DelegatingFilterProxy
OpenEntityManager视图过滤器
/

为什么需要引用以在DAO中进行筛选?请您稍微解释一下,我们按照这个链接[[link]](link)实现了OpenSessionInViewFilter,并通过重写其lookUpSessionFactory()方法返回基于tenantId的SessionFactory,将其扩展到MultiTenanotsIVF。正如您在HibernateUserDao类中所看到的,我们需要调用SessionFactoryUtils.getSession(sessionFactory,Boolean.FALSE),我们试图通过调用MultiTenantEnsessionInviewFilter的lookUpSessionFactory()方法来获取sessionFactory,为此,我们需要在DAO中具有筛选器访问权限。在为每个租户尝试单独的sessionFactory之前,我们已经尝试了SingleSessionFactory和基于租户id切换数据源。这里我们面临的问题是,与SessionFactory相同的OpenSessionInViewFilter没有SessionFactory.getCurrentSession(),它将连接对象作为请求参数,如SessionFactory.openSession(连接)。这两种方法都可以很好地工作,但当与OpenSessionInViewFiler结合使用时,它们并不能……任何帮助都将非常感激。因此,当您进行SessionFactoryUtils.getSession(sessionFactory,Boolean.FALSE)调用时,您是否遇到错误?如果您收到任何错误日志,是否可以发布错误日志。我会设法为你的问题找到解决办法problem@uma你把房客放在哪里?它在DAO类中可用吗?