2010-11-16 20 views

Odpowiedz

18

zrobiłem moje własne badania (przejście przez specyfikacje i kilku blogach) i poniżej co ja wzorzysty

EAR

Spec nie definiuje ani mandatu, jak ładowarki klasy powinny pracować w ramach EAR. To jednak określa, że ​​

  1. nie powinno być za wątku klasy loader kontekst do załadunku wykonawczego klas
  2. tam może być hierarchiczna mechanizm klasa loading rozwiązywania klas (producenci serwerów aplikacji mogą swobodnie realizować niezależnie od sposobu ich wyboru do)
  3. ładowacz klasy najwyższego poziomu (WAR/EAR) MAY delegować do ładowników klasy niskiego poziomu (takich jak Bootstrap, rozszerzenie itp). Jest to zgodne z modelem ładowarki klasa J2SE delegacji (PARENT_FIRST w WAS)

WAR

specyfikacji Servlet definiuje i nakazuje poparcie PARENT_LAST (tj WAR/WEB-INF/klas i wojny/web-inf/lib ma pierwszeństwo przed bibliotekami dołączonymi do serwera aplikacji) model ładowania klasy. Ale to tylko dla modułów WAR. Specyfikacja Servlet różni się od standardowego modelu delegowania J2SE parametru PARENT_FIRST w tym przypadku.

referencyjny

Spec: Servlet 2.3, sekcja: ClassLoader Zastosowanie 9.7.2 Web

Spec: Java EE 5, sekcja: EE.6.2.4.7 Kontekst Klasa Loader

App Specyfikacja serwera:

Co ciekawe, większość głównych serwerów aplikacji obsługuje mechanizm wyłączania delegacji w celu wyodrębnienia Aplikacja poczty z serwera aplikacji, jeśli jest to konieczne (z powodu konfliktów lub w inny sposób): WebSphere - "rodzic-ostatni", GlassFish - <class-loader delegate="false">, JBoss - java2ParentDelegation=false, Geronimo - <java2-delgation-model>false</java2-delegation-model>

+1

Niezły. W Glassfish to btw 'delegat klasy ' w 'sun-web.xml', aby wyłączyć delegowanie. Zobacz także http://docs.sun.com/app/docs/doc/819-3659/beadf?l=en&a=view (zdjęcie) i http://docs.sun.com/app/docs/doc/821 -1752/beade? L = en & a = view – BalusC

0

Dobre informacje. Badałem to samo pytanie i doszedłem do podobnych wniosków. Pozostaje jedno pytanie: czy warto wybrać opcję Parent Last? Myślę, że tak będzie, ponieważ twoja aplikacja jest bardziej przenośna; nie jesteś zależny od bibliotek aplikacji Appserver. Osiągasz izolację aplikacji. Nie widzę ludzi polecających w ten czy w inny sposób. Czy spotkałeś się z takimi zaleceniami dotyczącymi najlepszych praktyk?

+0

"Sądzę, że tak będzie, ponieważ twoja aplikacja jest bardziej przenośna, nie jesteś zależny od bibliotek Appserver, ale osiągasz izolację aplikacji." ---- To może działać lub nie. ponieważ nie ma standardu określonego przez specyfikację Na przykład http://stackoverflow.com/questions/4097567/jboss-and-different-versionsof-hibernate –

+0

Oto jeszcze jeden scenariusz z próbą użycia JSF 2.0 z WAS 7 i używanie PARENT_LAST dla EAR i WAR. Wciąż próbujący używać myfaces sugeruje, że jest dostarczany z pakietem. Oczywiście udało mu się go rozwiązać, aktualizując aplikację EL do użytku, ale chodzi o to, że nie można zagwarantować, że wszystko będzie działać, nawet jeśli zmienisz politykę delegowania: http://stackoverflow.com/questions/3214373/websphere-7-js- 2-0 i classloaders –