У нас довольно большое монолитное c веб-приложение, и мы пытаемся изолировать компоненты для улучшения общей архитектуры системы. Прямо сейчас наше ухо выглядит так:
+-- /lib
| +-- a.jar
| +-- b-1.0.jar
+-- EJBs.jar
+-- app1.war
+-- app2.war
+-- b-2.0.jar
Приложение app2 должно использовать тот же экземпляр a.jar
, что и EJBs.jar, но оно должно иметь возможность использовать версию b.jar
, отличную от Остальная часть приложения.
Насколько я понимаю, в weblogi c соответствующая конфигурация находится в weblogic-application.xml
, и там мои друзья <prefer-web-inf-classes>
и <prefer-application-package>
Что я понимаю, так это то, что я может заставить Weblogi c отдавать предпочтение библиотекам из EAR библиотекам сервера приложений, но мне кажется, что я не могу определить порядок в EAR, а внутри - app2.war. классы b-2.0.jar должны быть предпочтительными.
Я также дошел до того, что понял, что можно переопределить иерархические загрузчики классов, используя <classloader-structure>
. Это, однако, приведет к ситуации, когда a.jar
больше не виден для app2.war
. К сожалению, требуется, чтобы EJBs.jar
и app2.war
использовали один и тот же экземпляр a.jar
.
Для упрощения работы: app2.war
не требует доступа к EJBs.jar
или app1.war
.
В основном, я могу выбрать следующие варианты:
- Полностью изолировать загрузчики классов и предоставить
a.jar
извне - Инвертировать иерархию загрузчика классов, чтобы
app2.war
получал классы b-2.0.jar
с более высоким приоритетом - Явно исключить классы
b-1.0.jar
из app2.war
- Что-то совершенно крутое, о чем я не думал.
Любая идея, что из вышеперечисленного технически осуществимо (и как) или какие варианты я пропустил?