@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>