@PersistenceContext всегда нулевой

Я пытаюсь заставить CDI (с Open Web Beans) работать из модульного теста с использованием Delta Spike (@RunWith(CdiTestRunner.class)). Внедрение зависимостей работает нормально, но мой 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 Factory вручную:

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

и все другие инъекции работают нормально. Кто-нибудь знает, что может отсутствовать?

3 ответа

Решение

В модульном тесте вы не находитесь в управляемой среде. OpenWebBeans будет поддерживать его через модуль ресурсов openwebbeans + @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();
        }
    }
}

в тест-классе

Если вы задаете такие вопросы в своем списке рассылки, вы быстро получаете ответы.

Вам нужно будет использовать @PersistenceUnit внедрить EntityManagerFactory. @PersistentContext используется для внедрения EntityManager.

Вы определяете свой entitymanagerFactory как бин?

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
Другие вопросы по тегам