Общие библиотеки между веб-сервисами на Glassfish - PullRequest
0 голосов
/ 12 июня 2011

Мне нужно развернуть несколько веб-служб на сервере приложений jax-ws, glassfish 3. Эти веб-службы должны иметь общие библиотеки, то есть общие экземпляры одного и того же класса.

Я знаю, что могу это сделатьопустив jar в каталог "~ / glassfish3 / glassfish / domains / domain1 / lib".Но мне интересно, возможно ли это более изящным способом: я хочу поместить банку совместно используемой библиотеки в войну веб-службы, которую я развертываю, и затем получить доступ к этой библиотеке из другой войны, которую я развернул на том же сервере приложений.

Как я могу это сделать?

1 Ответ

0 голосов
/ 28 июня 2011

Я сам нашел решение для Glassfish: по сути, я просто развернул класс (SharedClassLoader), который наследуется от URLClassLoader в качестве jar общей библиотеки в вышеупомянутом каталоге. Затем я использую этот загрузчик классов в качестве загрузчика: при вызове веб-службы иерархия загрузчиков классов расширяется следующим образом: создается экземпляр SharedClassLoader для URL-адреса, если он еще не существует, и добавляется в качестве делегата к DelegatingClassLoader в дереве загрузчика классов. Делая это для каждого веб-сервиса с тем же экземпляром SharedClassLoader, он действует как начальная загрузка для увеличения загрузки классов. Банку, на которую ссылается SharedClassLoader, можно также развернуть с помощью одного из веб-сервисов, поскольку Glassfish распаковывает контейнеры в $AS_HOME/domains/domain1/applications/APPLICATION_NAME/LIBRARY_NAME.jar.

Надеюсь, это поможет всем, у кого возникла такая же проблема. Я решил эту проблему для моей дипломной работы. Если кому-то нужна дополнительная информация, просто спросите, я могу отправить вам свою диссертацию.

...