Как изменить стратегию удаления кэша в hdiv - PullRequest
1 голос
/ 24 февраля 2012

Я использую HDIV Web Application Security Framework для веб-приложения 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" ... />

определение параметров бина

<property name="maxSize">
    <value>20</value>
</property>

не влиял на размер кэша в моей системе.

1 Ответ

1 голос
/ 25 февраля 2012

Вы можете создать пользовательскую реализацию интерфейса IStateCache .

Используя явную конфигурацию HDIV (не используя новую пользовательскую схему HDIV), это конфигурация по умолчанию для компонента "cache":

<bean id="cache" class="org.hdiv.session.StateCache" singleton="false" 
  init-method="init">
    <property name="maxSize">
        <value>200</value>
    </property>
</bean>

Вы можете создать собственную реализацию и реализовать стратегию, соответствующую вашим требованиям.

С уважением,

Роберто

...