首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JBoss EAP 7.1 Spring-Data-JPA扩展

JBoss EAP 7.1 Spring-Data-JPA扩展
EN

Stack Overflow用户
提问于 2018-08-08 22:58:28
回答 2查看 1.3K关注 0票数 5

我们有一个应用程序,它使用Spring存储库注入到EJB中。Spring的org.springframework.data.jpa.repository.cdi.JpaRepositoryExtension发挥了神奇的作用。

它在CDI中查找EntityManager,保存它供以后使用,使用@Repository注释查找Spring存储库,并保存它们的类型供以后使用。初始化CDI时,JpaRepositoryExtension::afterBeanDiscovery将运行并执行正确的bean创建和插入到CDI中。这在JBoss EAP6.2/6.3/6.4下非常有效。

JBoss EAP7.1构建在WildFly 11上,Hibernate版本现在是5.1。JPA引导代码已经在JBoss和Hibernate JPA提供程序中进行了重组。由于这种重组,在运行时,EntityManager是而不是CDI中的

代码语言:javascript
复制
org.springframework.data.jpa.repository.cdi.JpaRepositoryExtension.processBean(ProcessBean<X>)

这最终导致..。

代码语言:javascript
复制
org.springframework.data.jpa.repository.cdi.JpaRepositoryExtension.createRepositoryBean(Class<?>, Set<Annotation>, BeanManager)

...to掷:

javax.enterprise.inject.UnsatisfiedResolutionException:无法使用限定符@javax.enterprise.inject.Default()、@javax.enterprise.inject.Any()解析“javax.persistence.EntityManager”的bean。在org.springframework.data.jpa.repository.cdi.JpaRepositoryExtension.createRepositoryBean(JpaRepositoryExtension.java:120) at org.springframework.data.jpa.repository.cdi.JpaRepositoryExtension.afterBeanDiscovery(JpaRepositoryExtension.java:96)

是否有人成功地将Spring部署到JBoss EAP7.1或WildFly 11+上,并获得了在CDI中创建的JPA存储库?

编辑:我有一个CDI生产者,在EAP 6.2/3/4中运行良好:

代码语言:javascript
复制
    @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 ;
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-23 17:14:05

解决我的问题的办法是两个小的改变:

  • 将@ApplicationScoped添加到producer类。显然,WELD不再看到@Producer注释,而是在没有这种情况下处理producer类(我认为),因为默认作用域是@依赖的。
  • 从createEntityManager(.)中删除@PersistenceContext和参数方法,在其中引用entityManagerFactory。奇怪的是,这甚至适用于早期版本,因为@PersistenceContext“表示对容器管理的EntityManager的依赖.”因为这个参数是EntityManagerFactory的,所以新的焊缝发出了刺耳的声音。

我的制片班:

代码语言:javascript
复制
import javax.enterprise.context.ApplicationScoped ;
import javax.enterprise.context.Dependent ;
import javax.enterprise.context.RequestScoped ;
import javax.enterprise.inject.Disposes ;
import javax.enterprise.inject.Produces ;
import javax.persistence.EntityManager ;
import javax.persistence.EntityManagerFactory ;
import javax.persistence.PersistenceUnit ;


@ApplicationScoped
public class CdiConfig
{
    /*
     * Entity Manager Factory
     */
    @Produces
    @Dependent
    @PersistenceUnit(unitName = "stafftrack_data_access")
    private EntityManagerFactory entityManagerFactory ;


    /*
     * Entity Manager
     */
    @Produces
    @RequestScoped
    public EntityManager createEntityManager( )
    {
        EntityManager em = entityManagerFactory.createEntityManager() ;
        return em ;
    }


    public void close( @Disposes EntityManager entityManager )
    {
        entityManager.close() ;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-08-14 05:03:33

您可以尝试在您的实体管理器中使用/添加少量注释来解决您尝试过的issue.Have:

@Produces

代码语言:javascript
复制
 `@Dependent`
代码语言:javascript
复制
 `@PersistenceContext`
代码语言:javascript
复制
 `private EntityManager entityManager;`  This may work with eap 7.1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51756761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档