В настоящее время я пытаюсь заставить CDI (точнее, Weld) работать с JSF 2 и вести долгий разговор. Я начинаю разговор в @ConversationScoped моего поддерживающего компонента. Я также создаю менеджер сущностей @ConversationScoped. К сожалению, объект, который я редактирую в своем вспомогательном компоненте, всегда получает LazyInitializationException, когда JSF пытается записать сопоставленное поле @ManyToMany. Кажется, что сущность отсоединяется от менеджера сущностей. В моем EntityManagerProducer (см. ниже) метод createEntityManager() не вызывается до того, как будет выброшено исключение LazyInitializationException, поэтому я предполагаю, что entitymanager на самом деле находится в области действия сеанса. Но, насколько я понимаю, мой код не генерирует расширенный контекст сохранения (поскольку я не мог понять, как это сделать программно).
Насколько я знаю, DeltaSpike еще не предлагает ничего для работы с длительными диалогами в JSF. Может ли кто-нибудь предложить метод реализации длительных разговоров с CDI с использованием Weld + DeltaSpike (желательно на Tomcat с сервлетом для сварки)?
@ApplicationScoped
public class EntityManagerProducer {
@Inject
@PersistenceUnitName("myUnit")
private EntityManagerFactory emf;
@Produces
@ConversationScoped
public EntityManager createEntityManager() {
return emf.createEntityManager();
}
public void closeEm(@Disposes EntityManager em) {
em.close();
}
}