как изменить стратегию удаления кеша в hdiv
Вопрос
я использую HDIV Платформа безопасности веб-приложений для веб-приложения Java.Каждый новый запрос веб-страницы генерирует внутреннюю информацию безопасности hdiv, которая кэшируется и используется для проверок безопасности.
У меня есть следующий сценарий:
У меня есть одна страница заказа, на которой на 2 секунды появляется страница подтверждения, когда что-то было добавлено в корзину или удалено из нее.
после 50 всплывающих окон базовая страница заказа удаляется из кеша, в результате чего в приложении возникает ошибка.
кто-нибудь знает, как повлиять на стратегию удаления кэша hdiv, чтобы сохранить базовую страницу живой?
Один из способов решения проблемы — увеличить org.hdiv.session.StateCache.maxSize с 50 до 500.
но это излечит только симптомы, а не основную причину.
Обновлять:
Используя решение @rbelasko, я преуспел, чтобы использовать оригинал org.hdiv.session.StateCache
изменить maxSize на 20 и проверить в журнале отладки, что кэши закрываются после 20 записей.
Когда я изменил его, чтобы использовать свою собственную реализацию, это не сработало.
Определение компонента
<bean id="cache" class="com.mycompany.session.StateCacheTest" singleton="false"
init-method="init">
<property name="maxSize">
<value>20</value>
</property>
</bean>
Мой собственный класс
public class StateCacheTest extends StateCache
{
private static final Log log = LogFactory.getLog(StateCacheTest.class);
public StateCacheTest()
{
log.debug("StateCache()");
}
@Override
public void setMaxSize(final int maxSize)
{
super.setMaxSize(maxSize);
if (log.isDebugEnabled())
{
log.debug("setMaxSize to " + maxSize);
}
}
}
В отладочном журнале не было записей из StateCacheTest.
Есть идеи?
Обновление 2:
Хотя мне не удалось загрузить другую реализацию IStateCache через Spring, я смог сделать эту ошибку менее вероятной, используя
<hdiv:config ... maxPagesPerSession="200" ... />
определение настроек bean-компонента
<property name="maxSize">
<value>20</value>
</property>
не повлияло на размер кеша в моей системе.
Решение
Вы можете создать собственный IStateCache реализация интерфейса.
При использовании явной конфигурации HDIV (без использования новой пользовательской схемы HDIV) это конфигурация по умолчанию для компонента «кэш»:
<bean id="cache" class="org.hdiv.session.StateCache" singleton="false"
init-method="init">
<property name="maxSize">
<value>200</value>
</property>
</bean>
Вы можете создать свою собственную реализацию и реализовать стратегию, соответствующую вашим требованиям.
С уважением,
Роберто