2010-06-11 1 views
3

У меня есть приложение JPA/Spring, которое использует Hibernate в качестве поставщика JPA. В одной части кода мне нужно вручную создать DAO в моем приложении с новым оператором, а не использовать Spring DI. Когда я это делаю, аннотация @PersistenceContext не обрабатывается Spring.Проблема при создании JPA EntityManager в Spring Context

В моем коде, где я создаю DAO у меня есть EntityManagerFactory, который я использовал для установки EntityManager следующим образом:

@PersistenceUnit 
private EntityManagerFactory entityManagerFactory; 

MyDAO dao = new MyDAOImpl(); 
dao.setEntityManager(entityManagerFactory.createEntityManager()); 

Проблема заключается в том, что, когда я делаю это, я получаю ошибку гибернации:

Could not find UserTransaction in JNDI [java:comp/UserTransaction] 

Вот весной объект конфигурации менеджера завода:

<bean id="myAppTestLocalEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="myapp-core" /> 
    <property name="persistenceUnitPostProcessors"> 
     <bean class="com.myapp.core.persist.util.JtaPersistenceUnitPostProcessor"> 
      <property name="jtaDataSource" ref="myappPersistTestJdbcDataSource" /> 
     </bean> 
    </property> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop> 
      <prop key="hibernate.transaction.manager_lookup_class">com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup</prop> 
     </props> 
    </property> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="showSql" value="true" /> 
      <!-- The following use the PropertyPlaceholderConfigurer but it doesn't work in Eclipse --> 
      <property name="database" value="$DS{hibernate.database}" /> 
      <property name="databasePlatform" value="$DS{hibernate.dialect}" /> 

+0

Опять же, +1 для вопросов и ответов. –

ответ

3

Это не имеет никакого отношения к EntityManager. Это проблема конфигурации транзакций. Очевидно, org.hibernate.transaction.JTATransactionFactory заставляет искать JNDI.

Переключено на com.atomikos.icatch.jta.hibernate3.AtomikosJTATransactionFactory и все работает.

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