【问题标题】:Problem managing session with multiple data sources管理具有多个数据源的会话的问题
【发布时间】:2009-10-05 05:46:35
【问题描述】:

我正在开展一个项目,我们每个服务都引用四个单独的数据源。到目前为止,我们一直在使用 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" 到目前为止一切正常。

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

我们已经尝试了一些方法,但由于我们通过每个服务连接到 4 个单独的数据源而被卡住了,现在我们可以将四个单独的事务管理器连接到“TransactionProxyFactoryBean”。因此,我们无法在处理程序/服务层中找到管理来自不同数据源的事务的方法。

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

【问题讨论】:

    标签: java hibernate spring jakarta-ee


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多