gpt4 book ai didi

通过调用 Timer 的 Java CDI ConversationScope?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:28:51 24 4
gpt4 key购买 nike

我们正在使用 EclipseLink 和 JBoss Weld 运行 JavaEE 6 环境。对于 EntityManager,我们目前正在使用 @ConversationScoped 范围,它非常适合 JSF 交互。

我们现在想要包含一个@Schedule 方法来自动检查数据(检查截止日期等)。但是,我不知道这是否可行,因为自动调用似乎无法创建对话。这是目前我们的方法:

@Stateless
public class Scheduler

@Inject
private CampaignService campaignService;
// CampaignService is @ApplicationScoped and uses an EntityManager

@Schedule(second="*/3", ...)
public void checkDeadlines(){
campaignService.getAll() // fetches all campaigns from EntityManager
...
}

}

但是,只要 EntityManager 是@ConversationScoped,注入(inject)就不起作用。 (ContextNotActiveException)

除了调用一些 JSF 之外,是否有可能“创建”对话?或者是创建自定义范围的唯一可能性,如 How to use CDI-@SessionScoped without a http-session

最佳答案

如果您要使用调度程序,您最好的解决方案是使用 @PersistenceContext 来获取 EntityManager。另一种选择是不使用对话范围的实体管理器(无论如何都应将其视为不良做法),并使用默认范围或请求范围的实体管理器。

我说对话范围的实体管理器是不好的做法,因为它很容易导致延迟初始化问题、分离的实体和内存泄漏。

关于通过调用 Timer 的 Java CDI ConversationScope?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17420182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com