管理多个数据源的会话时出现问题

时间:2009-10-05 05:46:35

标签: java hibernate spring java-ee

我正在开发一个项目,我们每个服务都引用四个独立的数据源。到目前为止,我们一直在使用ProxyFactoryBean来引用Dao目标和Transaction Intereceptor - 就像这样..

<bean id="readOnlyUserProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
   <property name="target" ref="readOnlyDao"/>
   <property name="interceptorNames">
      <list>
         <value>readOnlyTransactionInterceptor</value>
      </list>
   </property>
</bean>

不同的DAO还有其他3个类似的代理。所有这些都涉及不同的事务拦截器,而这些拦截器又连接到不同的事务管理器。简而言之,每个服务连接到4个dao代理,每个代理引用一个单独的事务拦截器,每个代理依次引用连接到4个不同数据源的单独事务管理器。到目前为止所有工作都很好,lazy =“false”。

现在,为了优化性能,我们希望启用“延迟加载”并将hibernate会话带到处理程序层。我们认为最好的方法是通过'TransactionProxyFactoryBean',因为我们不想使用OpenSessionInView方法。

我们尝试了一些方法,但因为我们通过每个服务连接到4个独立的数据源而陷入困境,现在我们可以将四个独立的事务管理器连接到'TransactionProxyFactoryBean'。因此,我们无法找到管理处理程序/服务层中不同数据源的事务的方法。

我刚刚开始这项工作,并且在Spring事务管理方面没有太多经验。请指导我采取任何可行的方法。

1 个答案:

答案 0 :(得分:0)

跨多个数据源管理事务是应用程序服务器的工作。 appserver将通过JTA API公开这些事务,Spring可以使用JtaTransactionManager从JPA API桥接到Spring API。

至于如何配置应用服务器本身,这取决于它是什么应用服务器,你应该对该文档进行一些研究。这可能是一个非常复杂的操作,特别是如果数据源分布在不同的数据库服务器上(在这种情况下,您需要使用XA事务监视器,而且这一切都变得非常复杂)。