我们正在使用 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,注入就不起作用。(ContextNotActiveException)
除了调用一些 JSF 之外,是否有可能“创建”对话?或者是创建自定义范围的唯一可能性,如如何在没有 http-session 的情况下使用 CDI-@SessionScoped?