У меня есть 2 разных веб-приложения (пакет в разные военные файлы), которым необходимо поделиться некоторыми данными через кеш (ehcache). Я хочу протестировать эту идею с вами, чтобы увидеть, работает ли она.
Моя идея состоит в том, чтобы создать службу, которая загружает / получает доступ к ehcache и упаковывает его внутри jar. Затем упакуйте эту банку в две войны:
Будет ли работать ehcache в такой конфигурации?
Я хочу использовать его как распределенную блокировку. Я мог бы использовать базу данных, чтобы указать, что транзакция выполняется (но я считаю, что это антипаттерн). Вариант использования: War1 запускает tx, сохраняет его в кеше. Это предотвращает запуск того же tx. War2 аннулирует tx на основе внешнего события.




Проблема вашей конфигурации заключается в том, что каждая война будет загружаться отдельным ClassLoader, и будет два экземпляра вашей службы ehcache - каждое веб-приложение имеет свою собственную копию службы. Вы можете реализовать свою службу кеширования как веб-службу (например) и использовать ее из war1 и war2.
Вам необходимо создать отдельную банку (-ы) со всеми классами (и всеми их зависимостями), экземпляры которых вы планируете кэшировать, а затем развернуть эту банку, а также ehcache.jar в качестве библиотеки (в зависимости от того, какой сервер приложений вы используете, процедура может быть другим), в случае Tomcat 6 это означает просто скопировать jar-файлы в папку lib.
Тогда произойдет то, что ehcache и классы вашего домена будут загружены загрузчиком классов, общим для всех веб-приложений, поэтому экземпляры будут кэшироваться и доступны в памяти.
Зависимости ваших доменных классов важны, поэтому вы должны увидеть, возможен ли этот подход в вашем проекте. Это также может повлиять на способ перезапуска веб-приложений.
Кроме того, вы должны знать, что кеширование и совместное использование - это не одно и то же. Кеш - это оптимизация. Если вы поместите экземпляр объекта в кеш, он может быть немедленно удален, если, например, в кеше недостаточно места для хранения или конфигурации политики выселения. Так что, возможно, вам придется пересмотреть то, как вы планируете использовать ecache в целом.
Я использую Tomcat, поэтому библиотеки, общие для всех веб-приложений, попадают в CATALINA_HOME / common / lib. Есть более сложная проблема, поскольку я хочу реплицировать кеш на несколько серверов Tomcat в кластере.
Мне нравится ваше утверждение «Кэш - это оптимизация». Возможно, мне придется вернуться к использованию базы данных для хранения общего состояния, потому что я могу использовать уровень изоляции SERIALIZABLE для обеспечения согласованного чтения / записи.
не могли бы вы подробнее рассказать о том, чего вы пытаетесь достичь с помощью общего кеша?