Фоновое обновление кэша JPA

У нас есть высокопроизводительное промежуточное программное обеспечение Java (J2SE), в котором задержка имеет первостепенное значение. Он использует некоторые постоянные данные, хранящиеся в устаревшей базе данных, где устаревшее приложение может время от времени изменять данные. Из-за требований к задержке мы планируем кэшировать постоянные данные, используя JPA с Hibernate и, возможно, поставщика кеша, например Ehcache.

Однако, когда постоянные данные обновляются (устаревшим приложением), мы должны быть уведомлены об этом как можно скорее. Я думал установить истечение срока действия кеша, но тогда кеш не будет обновляться до тех пор, пока приложение не сделает следующий запрос данных - в этот момент задержка будет вызвана повторным чтением базы данных.

В идеале нам нужно, чтобы кеш возвращал устаревшее значение, и в фоновом режиме кеш обновляется / обновляется с использованием последнего значения из базы данных через регулярные промежутки времени.

Возможно ли это с Ehcache? Я видел SelfPopulatingCache и CacheLoader, но похоже, что я делаю много работы (мне пришлось бы вручную писать код для каждого объекта). Кроме того, есть ли у кого-нибудь пример реализации CacheLoader? Я надеялся на возможность асинхронного обновления в Query Cache.

Существуют ли какие-либо другие технологии, которые могли бы предоставить решение? Мы не связаны провайдером JPA или провайдером кеша.

Может ли Spring @Cacheable предоставить решение? Я видел spring ehcache cachable упоминает самозаполняющийся-cache-scope, но мне не ясно, что это означает.

Заранее спасибо.

8
задан martin 15 April 2011 в 08:30
поделиться