Я сейчас ухожу от анкеты @Factory
от Seam. В сочетании с @Observer
, я мог бы сделать это:Как обновить коллекцию @Produces @ApplicationScoped?
@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>
(фактическое вычисление может быть более сложным).
Я перевел для использования с КДИ в
@Produces @Named("optionsList") @ApplicationScoped
public List<MyBean> produceEntityOptions() {
return getEm().createQuery('select e from entity e').getResultList();
}
но теряет способность воссоздавать кэш (только), когда внешнее событие сигнализирует кэш пошел несвежий. Как я могу получить это обратно?
Вот чего я боялся. Я позабочусь о том, чтобы масштабировать это до десятков списков и принять после этого. – mabi
Также +1 для подсказки синхронизации. Это область, о которой я не думал в этом контексте. – mabi
@mabi Удостоверьтесь, что количество списков в худшем случае будет количеством раз, когда вы запускали 'MyCustomListIsStaleEvent' + 1. Тем не менее, если вы введете списки в запрос и бонусы с сессией, то действительно не будет будь то много. – rdcrng