Доступ к одному и тому же ehcache из двух разных файлов войны

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

Моя идея состоит в том, чтобы создать службу, которая загружает/получает доступ к ehcache и упаковывает его в банку. Затем упакуйте эту банку в две войны:

  • WAR1: ehcache-service.jar
  • WAR2: ehcache-service.jar

Будет ли работать ehcache в такой конфигурации?


person ashitaka    schedule 18.12.2008    source источник
comment
Не могли бы вы подробнее рассказать о том, чего вы пытаетесь достичь с помощью общего кеша?   -  person lucas    schedule 18.12.2008
comment
Я хочу использовать его как распределенную блокировку. Я мог бы использовать базу данных, чтобы указать, что транзакция выполняется (но я считаю, что это анти-шаблон). Вариант использования: War1 запускает tx, сохраняет его в кеше. Это предотвращает запуск одного и того же tx. War2 аннулирует транзакцию на основе внешнего события.   -  person ashitaka    schedule 19.12.2008


Ответы (2)


Вам необходимо создать отдельный jar-файл со всеми классами (и всеми их зависимостями), экземпляры которых вы планируете кэшировать, а затем развернуть этот jar-файл, а также ehcache.jar в качестве библиотеки (в зависимости от того, какой сервер приложений вы используете, процедура может быть другим), в случае Tomcat 6 это означает просто скопировать jar в папку lib.

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

Зависимости ваших доменных классов важны, поэтому вы должны посмотреть, возможен ли этот подход в вашем проекте. Это также может повлиять на способ перезапуска веб-приложений.


Кроме того, вы должны знать, что кеширование и совместное использование — это не одно и то же. Кэш - это оптимизация. Если вы поместите экземпляр объекта в кеш, он может быть немедленно вытеснен, если, например, в кеше недостаточно места для хранения или конфигурации политики вытеснения. Поэтому, возможно, вам придется пересмотреть то, как вы планируете использовать ecache в целом.

person Gennady Shumakher    schedule 18.12.2008
comment
Я использую Tomcat, поэтому библиотеки, используемые всеми веб-приложениями, помещаются в CATALINA_HOME/common/lib. Существует более сложная проблема, поскольку я хочу реплицировать кеш на несколько серверов tomcat в кластере. - person ashitaka; 19.12.2008
comment
Мне нравится ваше утверждение Кэш - это оптимизация. Возможно, мне придется вернуться к использованию базы данных для хранения общего состояния, потому что я могу использовать уровень изоляции SERIALIZABLE для обеспечения согласованности операций чтения/записи. - person ashitaka; 19.12.2008

Проблема вашей конфигурации в том, что каждая война будет загружаться с отдельным ClassLoader и будет два экземпляра вашего ehcache-сервиса - каждое веб-приложение имеет свою собственную копию сервиса. Вы можете реализовать свою службу кэширования как веб-службу (например) и использовать ее из war1 и war2.

person gedevan    schedule 18.12.2008