Spring не может ввести EntityManager с помощью @PersistenceContext

У меня есть Java 8 / spring 4.3.5.Выпуск веб-приложения tha работает на сервере wildfly 10. Я использую настойчивость.XML-файл. Я включил ведение журнала трассировки в классах jboss jpa и hibernate, и я вижу, что этот файл забирается и плавно разрешается в блок сохраняемости:

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: org.jboss.as.connector.subsystems.datasources.WildFlyDataSource@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]

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

UserDao.класс

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

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

пружина-сервлет.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/>

Впрыска терпит неудачу однако, в 2 возможных путях:

Если я использую @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 bean, который я объявил в Spring-сервлете.xml или просто использовать модуль сохраняемости контейнера напрямую. Что мне нужно добавить для этого?

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

1 ответ

  1. Я думаю, что вы должны дважды проверить вас настройка конфигурации против официальных документов 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