какой SessionFactory следует использовать для transactionManager?

 <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. в этом случае мой менеджер транзакций должен использовать какую фабрику сеанса? (hrappsdao или projectdao)?

отредактированный

<bean id="transactionManager" 

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

person cometta    schedule 26.12.2009    source источник


Ответы (1)


На самом деле, вы не показываете конфигурацию своего диспетчера транзакций, поэтому я не совсем уверен, что вы сейчас используете, но, цитируя документацию:

JTA (обычно через JtaTransactionManager < / a>) необходим для доступа к нескольким транзакционным ресурсам в рамках одной транзакции.

В Spring 2.5 рассмотрите возможность использования «new "<tx:jta-transaction-manager/> элемент конфигурации для автоматического определения базовой платформы транзакций на основе JTA (работает с большинством серверов приложений). См. Главу 9.8. Подробнее об интеграции с сервером приложений.

Если вы используете старую версию Spring, вам нужно настроить JtaTransactionManager вручную. Это потребует некоторых знаний о вашем сервере приложений, поскольку расположение JNDI JTA TransactionManager зависит от каждого сервера J2EE.

Пожалуйста, предоставьте более подробную информацию (например, версию Spring и используемый вами сервер приложений, если вам нужны дополнительные указания).


ОБНОВЛЕНИЕ: Как я уже сказал, при использовании нескольких источников данных вам необходимо использовать JtaTransactionManager, а не _ 5_ (см. 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.

person Pascal Thivent    schedule 26.12.2009
comment
выше показано, как мой менеджер транзакций использует sessionFActory. но у меня есть 2 sessionfactory из-за 2 разных источников данных. поэтому мне интересно, как в этом случае использовать транзакционный - person cometta; 26.12.2009
comment
также мой сервер приложений - это просто кот / причал. не использует контейнер j2ee - person cometta; 26.12.2009