Кеширование JSF2 - исключить некоторые лицевые стороны из добавленного в faceletcache

Мы добавляем динамический контент (полученный из БД) на страницу JSF; Каждый раз, когда мы сталкиваемся с тегом, обработчик тегов извлекает контент на основе идентификатора и генерирует уникальный URL-адрес и добавляет контент в FaceletContext, вызывая includeFacelet

В TagHandler

public class CustomTagHandler extends TagHandler {

    @Override
    public void apply(FaceletContext ctx, UIComponent parent) {
       String spec = "include://dynamicUrl/" + getUniqueId() ;
       String contentFromDB = "some content fetched from db based on id";
       URL url = new URL(null, spec, new MyCustomHandler(contentFromDB));
       ctx.includeFacelet(parent, url);
       nextHandler.apply(ctx, parent);
    }

}

MyCustomHandler расширяет URLStreamHandler, как показано на странице Включите динамический контент, содержащий теги / компоненты JSF из потока

Проблема здесь заключается в том, что все уникальные URL-адреса добавляются в кеш-память JSF, и срок их действия не истекает. Размер кучи JVM растет и не хватает памяти. Эти URL никогда не собираются сборщиком мусора, так как на них ссылается кеш JSF.

Кто-нибудь знает, чтобы исключить некоторые фасеты из добавления в кеш JSF или какой-либо способ удалить эти фасеты из кеша JSF?

Я не хочу исключать все лицевые стороны, устанавливая javax.faces.FACELETS_REFRESH_PERIOD в web.xml. Единственный способ, о котором я могу думать, - это получить доступ к кэшу JSF-фейсов, используя отражения, и удалить эти записи из concurrentHashMap ( Not Preferred).

0 ответов

Другие вопросы по тегам