2017-01-13 5 views
0

У меня есть веб-приложение Java 8/spring 4.3.5.RELEASE, которое запускается на сервере wildfly 10. Я использую файл persistence.xml. Я позволил проследить вход на JBoss JPA и зимуют классы, и я могу видеть этот файл будет подхвачен и решается плавно в инерционности блок:Spring не может внедрить EntityManager с помощью @PersistenceContext

DEBUG [] [org.hibernate.jpa.internal.util.LogHelper] PersistenceUnitInfo [ 
    name: testcontext 
    persistence provider classname: org.hibernate.jpa.HibernatePersistenceProvider 
    classloader: ModuleClassLoader for Module "deployment.BasicWebapp.war:main" from Service Module Loader 
    excludeUnlistedClasses: false 
    JTA datasource: [email protected]fb80232 
    Non JTA datasource: null 
    Transaction type: JTA 
    PU root URL: vfs:/C:/Users/Me/Wildfly 10.0.0/standalone/deployments/BasicWebapp.war/WEB-INF/classes/ 
    Shared Cache Mode: UNSPECIFIED 
    Validation Mode: AUTO 
    Jar files URLs [] 
    Managed classes names [ 
     com.company.project.data.User] 
    Mapping files names [] 
    Properties [ 
     jboss.entity.manager.jndi.name: persistence/testcontext] 

Теперь я хочу класс дао, чтобы иметь менеджер лица, впрыскиваемую весна :

UserDao.class

@Repository 
public class UserDao 
{ 
    @PersistenceContext(unitName = "testcontext") 
    private EntityManager entityManager; 
} 

у меня есть компонент сканирования и аннотации конфигурации, так как @Repository и @PersistenceContext аннотации, обрабатываются при запуске моего приложения:

весна-servlet.xml

<context:component-scan base-package="com.company.project" /> 
<context:annotation-config/> 

<jee:jndi-lookup id="entityManagerFactory" jndi-name="persistence/testcontext"/> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"/> 

<tx:annotation-driven/> 

Инъекция не удается, хотя, двумя возможными способами:

Если я использую @PersistenceContext(unitName = "testcontext"), ошибка: Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'testcontext' available

Если я использую @PersistenceContext, погрешность:

Caused by: java.lang.NullPointerException 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:580) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:546) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:707) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:680) 
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:354) 
    ... 44 more 

Так что мне не хватает чего-то в этой конфигурации, чтобы рассказать о части Spring, которая обрабатывает аннотацию @PersistenceContext, чтобы посмотреть на компонент entityManagerFactory, который я объявила в spring-servlet.xml, или просто использовать блок персистентности контейнера напрямую. Что мне нужно добавить для этого?

Я также немного отрывочен в части транзакции. Предоставляет ли wildfly оператор транзакции или нет? Если это так, мне нужно создать компонент для него весной (возьмет ли он тот, который был создан jboss или создал его собственный?)

+0

jndi-name = "persistence/** testcontext **", но @PersistenceContext (unitName = "** textcontext **"). Могут быть только неправильные имена, используемые там – StanislavL

+0

Извините, просто опечатка в вопросе. Если вы посмотрите на фрагмент класса UserDao, вы увидите, что это был testcontext все время – user1884155

+0

Не могли бы вы включить файл persistence.xml? –

ответ

0

Я думаю, вам стоит дважды проверить конфигурацию конфигурации на официальные документы Spring: https://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#orm-jpa-setup-jndi. Нет, менеджер транзакций предоставлен Spring. Дополнительная информация: https://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#transaction-strategies

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