2014-11-19 3 views
2

Я ранее имел этот конфиг для Hibernate с использованием РЕСУРС-LOCAL Тип сделки:Настройка Spring + Hibernate JPA Менеджер транзакций через JTA

persistence.xml:

<persistence-unit name="myPU" transaction-type="JTA"> 
     <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 

</persistence-unit> 

ApplicationContext (DATAACCESS бит):

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" p:entityManagerFactory-ref="entityManagerFactory"></bean> 

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="jpaVendorAdapter" ref="jpaAdapter" /> 
    <property name="persistenceUnitName" value="myPU"/> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="javax.persistence.validation.mode">none</prop> 
     </props> 
    </property> 
</bean> 

<bean id="entityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.jpa.vendor.HibernateJpaSessionFactoryBean"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    <!-- Are there any other properties required? --> 
</bean> 

<bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 

    <property name="showSql" value="true" /> 
    <property name="generateDdl" value="false" /> 
</bean> 

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:comp/env/jdbc/CNTXESDB" /> 
    <property name="lookupOnStartup" value="true" /> 
    <property name="cache" value="true" /> 
    <property name="proxyInterface" value="javax.sql.DataSource" /> 
</bean> 

Но этот вид сделки кажется чтобы не работать с Glassfish, поэтому мне пришлось переключиться на транзакции JTA.

Проблема заключается в том - чтобы получить Spring для управления созданием транзакций (через @Transactional) Мне нужно, чтобы определить TransactionManager боб, но JtaTransactionManager включены в весенне-ОМ не принимает EntityManagerFactory боба, поэтому он не знает, где EntityManager для того, чтобы открыть/закрыть/снять сеанс Hibernate.

Как настроить Spring с Hibernate для использования транзакций JTA?

EDIT: получается, вам может использование RESOURCE_LOCAL сделок с Glassfish, но почему-то вы не можете иметь файл persistence.xml. Я переименовал этот файл my_persistence.xml и настроен LocalContainerEntityManagerFactoryBean так:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="jpaVendorAdapter" ref="jpaAdapter" /> 
     <property name="persistenceUnitName" value="myPU"/> 
     <property name="persistenceXmlLocation" value="classpath:META-INF/my_persistence.xml" /> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="javax.persistence.validation.mode">none</prop> 
      </props> 
     </property> 
    </bean> 
+0

Я предлагаю переименовать компонент '<боб ID = "EntityManager"' может быть проблема .. В любом случае [следовать этот учебник] (http://softwarecave.org/2014/03/15/using-jpa-and-jta-with-spring /) – Xstian

+0

Очевидно, что это не сработает. Вы указали, что хотите использовать JTA, но при настройке yuour используйте локальные транзакции. Либо измените свой 'persistence.xml', либо правильно настройте транзакции JTA. –

+0

@ M.Deinum, что я прошу, заключается в следующем: как правильно его настроить –

ответ

1

у меня была аналогичная проблема, и в конце концов я решил, как вы можете видеть в этом маленьком демо: https://github.com/miguelangelprogramacion/spring4_jpa_hibernate

С [1] в качестве эталона , Я предпочитаю использовать поддержку транзакций Spring перед JTA.

Кроме того, я использовал подход, основанный на аннотации.

[1] http://spring.io/blog/2011/08/15/configuring-spring-and-jta-without-full-java-ee/

Смежные вопросы