JSF与CDI SessionScope对Statelss EJB事务有奇怪的影响.谁能解释一下?

我有一个带有Injected无状态会话Bean(UserInfoService)的SessionScoped托管bean(UserInfoController).

UserInfoController调用UserInfoService来更新UserInfo记录. UserInfoService加载适当的UserInfo记录,修改它并最终调用em.flush();

当托管bean UserInfoController使用CDI批注(javax.enterprise.context.SessionScoped)进行批注时,除非使用PersistenceContextType.EXTENDED注释无状态bean的实体管理器,否则不会更新用户记录.

当使用JSF批注(javax.faces.bean.SessionScoped)对托管bean进行批注时,使用PersistenceContextType.TRANSACTION时记录会成功更新.

谁能解释这种行为?无论调用者是JSF还是CDI SessionScoped托管bean,事务边界都不应限于无状态Bean? (TransactionAttributeType未定义:它应默认为REQUIRED)

任何信息,将不胜感激!
谢谢!

最佳答案
PersistenceContext类型取决于EJB会话bean,而不是像此链接What is the difference between Transaction-scoped Persistence context and Extended Persistence context?中解释的那样支持bean

在我的情况下,我正在使用带有默认PersistenceContext类型(TRANSACTION)的@Named CDI bean,并且当我使用javax.enterprise.context.SessionScoped时,记录更新成功

转载注明原文:JSF与CDI SessionScope对Statelss EJB事务有奇怪的影响.谁能解释一下? - 代码日志