В момента се опитвам да накарам CDI (Weld, за да бъдем по-точни) да работи с JSF 2 и дълъг разговор. Започвам разговора в @ConversationScoped моя backing bean. Също така създавам @ConversationScoped мениджър на обекти. За съжаление обектът, който редактирам в моя backing bean, винаги получава LazyInitializationException, когато JSF се опитва да напише картографирано поле @ManyToMany. Изглежда, че обектът се е отделил от мениджъра на обекти. В моя EntityManagerProducer (вижте по-долу) методът createEntityManager() не се извиква, преди да бъде хвърлено LazyInitializationException, така че бих предположил, че entitymanager всъщност е с обхват на сесия. Но от това, което разбирам, моят код не генерира разширен контекст на постоянство (тъй като не можах да разбера как да направя това програмно).
Доколкото знам, DeltaSpike все още не предлага нищо за справяне с продължителни разговори в JSF. Може ли някой да предложи метод за това как да се реализират продължителни разговори с CDI с помощта на Weld + DeltaSpike (за предпочитане на Tomcat с weld-servlet)?
@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();
}
}