gpt4 book ai didi

java - transactionManager 应该使用哪个 SessionFactory?

转载 作者:行者123 更新时间:2023-11-29 06:23:34 30 4
gpt4 key购买 nike

 <bean id="projectService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
<property name="target">
<bean class="com.company.project.company.services.ServiceImpl" init-method="init">

<property name="HRappsdao" ref="HRappsdao"/>
<property name="projectdao" ref="projectdao"/>

</bean>
</property>
<property name="transactionAttributes">
<props>
<prop key="store*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="bulkUpdate*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_SUPPORTS,readOnly</prop>
</props>
</property>
</bean>

我有 2 个数据源 HRappsdao 和 projectdao,它们都使用不同的 sessionFactory。在这种情况下,我的 transactionmanager 应该使用哪个 sessionfactory?(hrappsdao 或 projectdao)?

已编辑

<bean id="transactionManager" 

class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" > //my HRappsdao using same
<ref local="sessionFactory"/>
</property>
</bean>

最佳答案

实际上,您没有显示事务管理器的配置,所以我不太确定您当前使用的是什么,但引用文档:

JTA (usually through JtaTransactionManager) is necessary for accessing multiple transactional resources within the same transaction.

对于 Spring 2.5,考虑使用“new<tx:jta-transaction-manager/>用于自动检测基于 JTA 的底层事务平台的配置元素(适用于大多数应用程序服务器)。见章节9.8. Application server-specific integration有关这方面的更多详细信息。

如果您使用的是旧版本的 Spring,则需要配置您的 JtaTransactionManager手动。这将需要您的应用程序服务器的一些知识,因为 JTA TransactionManager 的 JNDI 位置是特定于每个 J2EE 服务器的。

请提供更多详细信息(如 Spring 的版本和您正在使用的应用程序服务器,如果您需要更多指导)。


更新:正如我所说,当使用多个数据源时,您需要使用 JtaTransactionManager而不是 HibernateTransactionManager (请参阅 javadoc)。如果您使用的是 Spring 2.5,请按如下方式更新您的 Spring 配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

<tx:jta-transaction-manager />

<!--
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
//my HRappsdao using same
<ref local="sessionFactory" />
</property>
</bean>
-->

...

</beans>

请注意,您需要像 JOTM 这样的东西使用 Tomcat 或 Jetty。您或许应该考虑迁移到 J2EE 应用服务器,例如 JBoss 或 Glassfish。

关于java - transactionManager 应该使用哪个 SessionFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1962509/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com