2010-11-16 6 views

ответ

18

я сделал свое собственное исследование (проходя через спецификации и несколько блогов) и ниже, что я понял

EAR

Спецификация не определяет или санкционировать как загрузчики классов должны работать в пределах EAR. Вместе с тем она определяет, что

  1. должен быть в контексте загрузчика классов потоков для выполнения загрузки классов
  2. Могло быть иерархическим класс механизмом загрузки для решения классов (поставщики серверов приложений могут свободно осуществлять в зависимости от того, как они выбирают)
  3. загрузчик класса верхнего уровня (WAR/EAR) МОЖЕТ делегировать загрузчикам класса низкого уровня (например, Bootstrap, расширение и т. Д.). Это в соответствии с моделью делегирования класса J2SE погрузчик (PARENT_FIRST в WAS)

WAR

спецификации Servlet определяет и предписывает поддержку в PARENT_LAST (т.е. WAR/WEB-INF/классы и WAR/web-inf/lib имеют приоритет над библиотеками, которые поставляются с сервером приложений). Но это только для модулей WAR. В этом случае спецификация Servlet расходится со стандартной моделью делегирования J2SE PARENT_FIRST.

Справочник

Spec: сервлетов 2.3, Раздел: 9.7.2 Web-приложений Загрузчик классов

Spec: Java EE 5, Раздел: EE.6.2.4.7 Контекст загрузчик классов

приложение Специфические сервера

Интересно, однако, что большинство основных серверов приложений поддерживают некоторый механизм отключения делегирования для изоляции е приложение от сервера приложений, если это необходимо (из-за конфликтов или иным образом): WebSphere - "родитель-последний", GlassFish - <class-loader delegate="false">, JBoss - java2ParentDelegation=false Джеронимо - <java2-delgation-model>false</java2-delegation-model>

+1

Ницца. В Glassfish это btw '' в 'sun-web.xml', чтобы отключить делегирование. См. Также http://docs.sun.com/app/docs/doc/819-3659/beadf?l=ru&a=view (фотография) и http://docs.sun.com/app/docs/doc/821 -1752/beade? L = en & a = view – BalusC

0

Хорошая информация. Я изучал тот же вопрос и пришел к аналогичным выводам. Остается еще один вопрос: рекомендуется ли использовать параметр «Родительский последний»? Я думаю, это будет так, потому что ваше приложение более портативно; вы не зависите от libs Appserver. Вы достигаете изоляции приложения. Я не вижу людей, рекомендующих так или иначе. Вы столкнулись с такими рекомендациями по лучшей практике?

+0

«Я бы подумал, что это будет так, потому что ваше приложение более портативно, вы не зависите от библиотек Appserver. Вы достигаете изолированности приложений». ---- Он может или не может работать так как нет стандарта, предусмотренного спецификацией. Например, http://stackoverflow.com/questions/4097567/jboss-and-different-versions-of-hibernate –

+0

Вот еще один сценарий с попыткой использования JSF 2.0 с WAS 7 и используя PARENT_LAST для EAR и WAR. Все еще пытаюсь использовать myface impl, с которым он поставляется в комплекте. Конечно, он смог решить эту проблему, обновив EL impl для использования, но дело в том, что вы не можете гарантировать, что все будет работать, даже если вы измените политику делегирования: http://stackoverflow.com/questions/3214373/websphere-7-jsf- 2-0-и-загрузчиков классов –

Смежные вопросы