WebSphere jest dostarczane z rodzicem jako ostatnim i rodzicem jako pierwszym. Czy ta Java EE jest zgodna? Czy jest to obsługiwane przez wszystkie serwery aplikacji zgodne z Java EE 5?Standard ładowania Java EE
Odpowiedz
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
- nie powinno być za wątku klasy loader kontekst do załadunku wykonawczego klas
- 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)
- ł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>
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?
"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 –
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 –
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