java - @PersistenceContext 始终为 null

标签 java cdi deltaspike openwebbeans

我正在尝试使用 Delta Spike (@RunWith(CdiTestRunner.class)) 在单元测试中让 CDI(使用 Open Web Beans)工作。依赖注入(inject)工作正常,但我的 EntityManagerFactory 始终为空:

public class EntityManagerProducer {

    @PersistenceContext(unitName = "sbPersistenceUnit")
    private EntityManagerFactory emf;  //Always null

    @Produces
    public EntityManager create() {            
        return emf.createEntityManager();
    }

    public void close(@Disposes EntityManager em) {
        if (em.isOpen()) {
            em.close();
        }
    }
}

我知道我的 persistence.xml 没问题,因为我可以手动创建 session 工厂:

EntityManagerFactory test = Persistence.createEntityManagerFactory("sbPersistenceUnit");

所有其他注入(inject)都工作正常。有人知道可能缺少什么吗?

最佳答案

在单元测试中,您并不处于托管环境中。 OpenWebBeans 将通过 openwebbeans-resource 模块 + @PersistenceUnit 支持它,但这不可移植。 所以你需要使用例如:

@Specializes
public class TestEntityManagerProducer extends EntityManagerProducer {
    private EntityManagerFactory emf = Persistence.createEntityManagerFactory("...");

    @Produces
    //...
    @Override
    protected EntityManager create() {
        return emf.createEntityManager();
    }

    @Override
    protected void close(@Disposes EntityManager em) {
        if (em.isOpen()) {
            em.close();
        }
    }
}

在测试类路径中

如果您在他们的邮件列表上提出此类问题,您很快就会得到答案。

关于java - @PersistenceContext 始终为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29702808/

相关文章:

java - Java EE 中的上下文依赖影响

java - 消息驱动的 bean 和事务

java - 使用 DeltaSpike Security 时出现 ClassCastException?

java - 来自自定义属性文件的 Deltaspike + Quartz + CronExpressions

tomcat - Tomcat 7 上的 CDI - 它有意义吗?

java - 由 : java. lang.IndexOutOfBoundsException : Invalid index 8, 大小为 8 引起

java - 半透明JButton : Objects appear in Background

java - 每个 CollectionGroup 中的最新文档

java - Ant 独立包或其他安装程序(适用于 java web-app、windows)

jsf-2 - 将 JSF 托管 Bean 迁移到 CDI 托管 Bean