CDI (Weld) + DeltaSpike + Conversation

В момента се опитвам да накарам 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();
    }
}

person egore911    schedule 04.12.2013    source източник


Отговори (2)


Изключението за мързелива инициализация всъщност не идва от разширени контексти на постоянство или CDI или DeltaSpike. Това е просто същото поведение, както е описано тук: selectManyCheckbox LazyInitializationException при валидиране на процес

JSF 2 клонира PersistentBag на моя обект, което го кара да се отдели. Аз също работих наоколо, като поръсих много

<f:attribute name="collectionType" value="java.util.ArrayList" />

в моя JSF код.

person egore911    schedule 04.12.2013

Наличието на EntityManager в обхват на разговор е само едната страна на уравнението, в какъв обхват са вашите обекти?

За да се избегне отделянето на обектите, те също трябва да имат обхват на разговор.

Като странична бележка: открих, че вместо да се занимавам с обекти в дълготраен обхват, е много по-лесно да ги прикача отново във всеки обхват на заявка.

person ShayM    schedule 31.03.2014