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

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

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

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

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

не могли бы вы подробнее рассказать о том, чего вы пытаетесь достичь с помощью общего кеша?

lucas 18.12.2008 22:10

Я хочу использовать его как распределенную блокировку. Я мог бы использовать базу данных, чтобы указать, что транзакция выполняется (но я считаю, что это антипаттерн). Вариант использования: War1 запускает tx, сохраняет его в кеше. Это предотвращает запуск того же tx. War2 аннулирует tx на основе внешнего события.

ashitaka 19.12.2008 04:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
2
5 137
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Ответ принят как подходящий

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

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

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


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

Я использую Tomcat, поэтому библиотеки, общие для всех веб-приложений, попадают в CATALINA_HOME / common / lib. Есть более сложная проблема, поскольку я хочу реплицировать кеш на несколько серверов Tomcat в кластере.

ashitaka 19.12.2008 05:04

Мне нравится ваше утверждение «Кэш - это оптимизация». Возможно, мне придется вернуться к использованию базы данных для хранения общего состояния, потому что я могу использовать уровень изоляции SERIALIZABLE для обеспечения согласованного чтения / записи.

ashitaka 19.12.2008 05:06

Другие вопросы по теме