Я работаю над мультимодульным приложением maven, и weblogic уже в prod. Стек:
Tomcat 8,5
PostGre 9,6
Hibernate 4.3.8
Пружина 4.1.5
Spring Security 3.2.6
пружинные стойки 3.2.13
Простые Лица 5.1
Я начинаю миграцию с создания JNDI DataSource в server.xml и ссылки на ресурс в META-INF / context.xml (мы перемещаем БД из DB2 в PostGre), но я получил исключение:
Вызвано: java.lang.IllegalStateException: Нет доступной пользовательской транзакции JTA - укажите либо 'userTransaction', либо 'userTransactionName', либо'actionManager ', либо'actionManagerName'
Мое приложение работает в конфигурации xml, и я думаю, что ошибка возникает из-за того, что в старой версии JTA implantation был делегирован weblogic:
DataSourceContext.xml
<?xml version="1.0" encoding="UTF-8"?>
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/mydatasourcename" />
</bean>
<bean id="hibernateProperties"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.query.substitutions">true=1 false=0</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.max_fetch_depth">1</prop>
<prop key="hibernate.default_schema">defaultschemaname</prop>
<!-- How to find the Transaction -->
<prop key="hibernate.transaction.factory_class">org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory
</prop>
<!-- How to produce transaction -->
**<prop key="hibernate.transaction.jta.platform">org.hibernate.engine.transaction.jta.platform.internal.WeblogicJtaPlatform
</prop>**
<!-- Session context with JTA -->
<prop key="current_session_context_class">jta</prop>
</props>
</property>
</bean>
Мой источник данных Tomcat:
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" readonly="true" type="org.apache.catalina.UserDatabase"/>
<Resource auth="Container" driverClassName="org.postgresql.Driver"
maxIdle="10"
maxTotal="20"
maxWaitMillis="10000"
name="jdbc/*****"
password="*****"
type="javax.sql.DataSource"
url="jdbc:postgresql://********:5432/****"
username="****"/>
</GlobalNamingResources>
Приложение Hibernate ConfigContextDAO.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="packagesToScan">
<list>
<value>package.name</value>
</list>
</property>
<property name="annotatedPackages">
<list>
<value>package.name</value>
</list>
</property>
<property name="hibernateProperties" ref="hibernateProperties" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="saveHibernateListener" class="package.name.hibernateListener.SaveHibernateListener"/>
<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="propertyEditorRegistrars">
<list>
<bean class="package.name.CustomDateEditorRegistrar"/>
</list>
</property>
</bean>
<!-- Template hibernate injecté dans chaque persisteur -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
<property name="sessionFactory" ref="mySessionFactory" />
</bean>
</beans>
Фасадный модуль applicationContext -action.xml
<?xml version="1.0" encoding="UTF-8"?>
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="get*" propagation="REQUIRED" read-only="true"
rollback-for="ExceptionWork" />
<tx:method name="*" propagation="REQUIRED" rollback-for="MessageException" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="ivaFacadePointcut"
expression="execution(* package.name..*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="FacadePointcut" />
</aop:config>
<aop:aspectj-autoproxy proxy-target-class="true"/>
<tx:jta-transaction-manager />
<tx:annotation-driven/>
Я думаю, что должен заменить эту опору в DataSourceContext.xml:
org.hibernate.engine.transaction.jta.platform.internal.WeblogicJtaPlatform?
Существующее чистое решение для реализации диспетчера транзакций в tomcat 8.5? Или автономный диспетчер транзакций?
Я запутался во всех решениях, которые я уже нашел (старая версия hibernate или устаревшая реализация JTA) ... если кто-то сможет осветить меня, я буду признателен:)