Я новичок в JTA, и я хотел сделать двухфазную фиксацию в моем приложении, которая бы подключалась к двум различным схемам базы данных.Я использую Spring, Hibernate и JPA в своем приложении, и я хочу добавить менеджер транзакций JTA для начала, но я не смог пройти через это.
Может кто-нибудь, пожалуйста, помогите мне решить проблему, которую ясталкиваюсь или указываю на то, что неправильно в моей конфигурации или понимании.
Вот мои настройки в файле конфигурации
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="LineManagement" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="false" />
<property name="showSql" value="false" />
<property name="databasePlatform" value="${hibernate.dialect}" />
</bean>
</property>
<property name="beanName" value="entityManager"></property>
</bean>
<bean id="userTransactionService" class="com.atomikos.icatch.config.UserTransactionServiceImp"
init-method="init" depends-on="setAtomikosSystemProps">
<constructor-arg>
<props>
<prop key="com.atomikos.icatch.service">com.atomikos.icatch.standalone.UserTransactionServiceFactory</prop>
</props>
</constructor-arg>
</bean>
<bean id="setAtomikosSystemProps" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject">
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="java.lang.System" />
<property name="targetMethod" value="getProperties" />
</bean>
</property>
<property name="targetMethod" value="putAll" />
<property name="arguments">
<util:properties>
<prop key="com.atomikos.icatch.file">/jta.properties</prop>
<prop key="com.atomikos.icatch.hide_init_file_path">true</prop>
<prop key="com.atomikos.icatch.console_log_level">DEBUG</prop>
</util:properties>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" >
<property name="userTransaction" ref="AtomikosUserTransaction" />
<property name="transactionManager" ref="AtomikosTransactionManager" />
</bean>
<bean id="AtomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" depends-on="userTransactionService" >
<property name="transactionTimeout" value="300"/>
</bean>
<bean id="AtomikosTransactionManager" class = "com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
<property name="forceShutdown" value="false" />
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
Файл persistence.xml имеет следующую конфигурацию
<persistence-unit name="LineManagement" transaction-type="JTA">
<properties>
<property name="hibernate.id.new_generator_mappings" value="true" />
<property name="hibernate.current_session_context_class" value="thread" />
<property name="hibernate.default_batch_fetch_size" value="200" />
<property name="hibernate.transaction.manager_lookup_class" value="com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup"/>
<property key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
<!-- General Debugging -->
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.generate_statistics" value="true" />
</properties>
</persistence-unit>
Когда я запускаю приложение, оно дает мнеисключение org.springframework.dao.InvalidDataAccessApiUsageException: транзакция не выполняется;Вложенное исключение - javax.persistence.TransactionRequiredException: транзакция не выполняется
Я попытался обойти флаг распространения в аннотации @Transactional, так как я считаю, что это исключение указывает на отсутствие транзакции, ноошибка не исчезла ...