【发布时间】:2018-08-08 22:58:28
【问题描述】:
我们有一个使用 Spring Data JPA 存储库注入 EJB 的应用程序。 Spring 的org.springframework.data.jpa.repository.cdi.JpaRepositoryExtension 具有魔力。
它在 CDI 中查找 EntityManager,将其保存以供以后使用,使用 @Repository 注释查找 Spring Data JPA 存储库,并保存它们的类型以供以后使用。当 CDI 初始化时,JpaRepositoryExtension::afterBeanDiscovery 运行并执行正确的 bean 创建和插入 CDI。这在 JBoss EAP 6.2/6.3/6.4 下完美运行。
JBoss EAP 7.1 基于 WildFly 11,Hibernate 版本现在是 5.1。 JPA 引导代码已在 JBoss 和 Hibernate JPA 提供程序中进行了重组。由于这种重组,EntityManager 在运行时 不在 CDI 中:
org.springframework.data.jpa.repository.cdi.JpaRepositoryExtension.processBean(ProcessBean<X>)
这最终会导致...
org.springframework.data.jpa.repository.cdi.JpaRepositoryExtension.createRepositoryBean(Class<?>, Set<Annotation>, BeanManager)
...投掷:
javax.enterprise.inject.UnsatisfiedResolutionException: 无法 使用限定符解析 'javax.persistence.EntityManager' 的 bean [@javax.enterprise.inject.Default(),@javax.enterprise.inject.Any()]。 在 org.springframework.data.jpa.repository.cdi.JpaRepositoryExtension.createRepositoryBean(JpaRepositoryExtension.java:120) 在 org.springframework.data.jpa.repository.cdi.JpaRepositoryExtension.afterBeanDiscovery(JpaRepositoryExtension.java:96)
有没有人成功地将 Spring Data JPA 部署到 JBoss EAP 7.1 或 WildFly 11+ 并获得在 CDI 中创建的 JPA 存储库?
编辑: 我有一个在 EAP 6.2/3/4 中运行良好的 CDI Producer:
@Produces
@Dependent
@PersistenceUnit( unitName="** Our PU Name **" )
private EntityManagerFactory entityManagerFactory;
.
.
.
@Produces
@RequestScoped
@PersistenceContext( type = PersistenceContextType.EXTENDED )
public EntityManager createEntityManager( EntityManagerFactory emf )
{
EntityManager em = emf.createEntityManager();
return em ;
}
【问题讨论】:
标签: spring hibernate jpa spring-data-jpa jboss-eap-7