У меня есть приложение myapp.war , которое получает JMS-соединение в соответствии с JNDI-ресурсом от tomcat.Jms-реализация - activemq-клиент .Но activemq-client требует slf4j .Я помещаю activemq-client, slf4j и другие библиотеки зависимостей в ${TOMCAT_HOME}/lib/ext
.
Но myapp.war несовместимо с этой версией slf4j.А activemq-клиент - это несовместимость с версией slf4j внутри myapp.war .
Я думаю:
- put basic jms-intrefaces jars в
${TOMCAT_HOME}/lib/ext
- положить activeqm-client и его зависимости в
another/directiory
- сделать собственную JNDI-фабрику для создания экземпляра jms-реализации
- изолировать создание экземпляра jms-реализации внутри new Classloader с classpath
another/directiory
в этой JNDI-фабрике - вернуть результат в myapp.war
Т.е. эта иерархия загрузчика классов выглядит следующим образом:
Bootstrap
|
System
|
---------------------
| Common |
| | pass connection parameters --------------------------------------
| my-jndi-factory <--|--------------------------------->| Isolated class loader with classpath |
--------------------- return ConnectionFactory | `another/directiory` |
/ \ --------------------------------------
/ \
myapp.war otherApp.war
Мои вопросы:
- Есть ли библиотеки с такой функциональностью?
- какие недостатки и подводные камни имеют этот подход?