我目前正在远离 Seam 的@Factory
注释。结合@Observer
,我可以这样做:
@Factory(value = "optionsList", scope = ScopeType.APPLICATION)
@Observer("entity.modified")
public List<MyBean> produceEntityOptions() {
List l = getEm().createQuery('select e from entity e').getResultList();
Contexts.getApplicationContext().set("optionsList", l);
return l;
}
这将缓存一个可能的选项列表以用于例如<f:selectItems>
(实际计算可能更复杂)。
我已将其翻译为与 CDI 一起使用
@Produces @Named("optionsList") @ApplicationScoped
public List<MyBean> produceEntityOptions() {
return getEm().createQuery('select e from entity e').getResultList();
}
但这会失去重新创建缓存的能力(仅)当外部事件发出缓存已过时的信号时。我怎样才能把它拿回来?