Каков наилучший способ кэширования данных в EJB? - PullRequest
1 голос
/ 19 октября 2011

У меня есть некоторые общие данные, которые понадобятся всем моим EJB, поэтому я решил написать 1 EJB, чтобы получить и получить данные, в то время как другие EJB вызовут первый EJB для получения данных. Теперь я хочу кэшировать данные в EJB, чтобы он не возвращался в базу данных каждый раз, когда запрашиваются данные.

Итак, как мне кэшировать данные в EJB и, возможно, получать свежую копию каждые 1 час или около того. Могу ли я сделать это с Ehcache? Или я думаю об этом все неправильно, и есть лучший способ сделать это.

Спасибо

Ответы [ 2 ]

2 голосов
/ 19 октября 2011

Я думаю, вы должны использовать фреймворки, которые уже выполняют эту работу.Например:

  1. Если вы используете JPA для доступа к базе данных, вы можете настроить кэш в файле persistence.xml, и он будет зависеть от вашего поставщика постоянства (Hibernate, Toplink и т. Д.).
  2. Если вы используете Hibernate, он поддерживает сторонние Cache Frameworks, такие как EHCache.
  3. В любом случае вы можете настроить EHCache (или другой подобный) для выполнения этой работы.
1 голос
/ 19 октября 2011

Да, вы можете использовать ehcache для этой цели, но тогда он все еще не «кэшируется» внутри EJB и остается в памяти узла, на котором работает сервер.

В EJB без состояния у вас есть только эта опция, тогда как в EJB с состоянием вы можете хранить данные в EJB (но иметь EJB с состоянием в течение такого длительного времени просто глупо), так что это не совсем альтернатива. 1003 *

Еще один подход заключается в статическом использовании некоторого держателя данных внутри EJB. Например. создать статическую карту, в которой хранятся данные или статический список. Конечно, это только для загрузчика классов, но пока класс не удален из загрузчика классов, статические данные остаются там. Это тогда действительно в памяти. Для обновления вы можете создать кварцевое задание, которое периодически обновляет данные внутри статического элемента.

...