У меня есть веб-приложение 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 или создал его собственный?)
jndi-name = "persistence/** testcontext **", но @PersistenceContext (unitName = "** textcontext **"). Могут быть только неправильные имена, используемые там – StanislavL
Извините, просто опечатка в вопросе. Если вы посмотрите на фрагмент класса UserDao, вы увидите, что это был testcontext все время – user1884155
Не могли бы вы включить файл persistence.xml? –