Tengo un solo dataSource, uso Spring 3.0.3, Hibernate 3.5.1 como proveedor JPA y uso MyBatis 3.0. 2 para algunas consultas y mi aplicación se ejecuta en Tomcat 6. Tengo un HibernateDAO y un MyBatisDAO, cuando llamo a ambos desde el mismo método que está anotado con @Transactional parece que no comparten la misma transacción, obtienen diferentes conexiones .
¿Cómo puedo hacer que lo hagan?Cómo configurar Spring para hacer que JPA (Hibernate) y JDBC (JdbcTemplate o MyBatis) compartan la misma transacción
He intentado obtener una conexión de DataSourceUtils.getConnection (dataSource) y obtengo la que es utilizada por MyBatis, lo cual es extraño. Pensé que el problema estaba en la configuración de MyBatis y no puede usar JpaTransactionManager. Incluso llamando varias veces a DataSoruceUtils.getConnection siempre da la misma conexión, lo cual está bien.
Después de algunas google He intentado cargador de clases de primavera-instrumento-Tomcat (aunque no sé si realmente lo usa Tomcat :))
applicationContext parcial
<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
<property name="driverClassName" value="${database.driverClassName}"/>
<property name="url" value="${database.url}"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
</bean>
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/>
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:META-INF/mybatis/mybatis-config.xml" />
</bean>
config mybatis parcial
<settings>
<setting name="cacheEnabled" value="false" />
<setting name="useGeneratedKeys" value="false" />
<setting name="defaultExecutorType" value="REUSE" />
<setting name="lazyLoadingEnabled" value="false"/>
</settings>
persistence.xml parcial
<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
sí, simplemente estableciendo el dialecto jpa funciona 'emf.setJpaDialect (new HibernateJpaDialect());' –