【问题标题】:which SessionFactory should be use for transactionManager?transactionManager 应该使用哪个 SessionFactory?
【发布时间】:2009-12-26 02:56:52
【问题描述】:
 <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>

【问题讨论】:

    标签: java hibernate spring orm transactional


    【解决方案1】:

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

    JTA(通常通过JtaTransactionManager)是访问同一事务中的多个事务资源所必需的。

    在 Spring 2.5 中,考虑使用“new&lt;tx:jta-transaction-manager/&gt; 配置元素来自动检测基于 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。您或许应该考虑迁移到 JBoss 或 Glassfish 等 J2EE 应用服务器。

    【讨论】:

    • 以上是我的事务管理器如何使用 sessionFActory。但由于 2 个不同的数据源,我有 2 个 sessionfactory。所以我想知道在这种情况下,如何使用事务性
    • 我的应用服务器也只是tomcat/jetty。不使用 j2ee 容器
    猜你喜欢
    • 2019-05-06
    • 2021-05-09
    • 2011-11-30
    • 2016-09-28
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多