Której wersji klasy użyje aplet

0

Mam na dysku trzy wersje klasy o takiej samej (pełnej) nazwie w trzech różnych plikach jar:
a) jar umieszczony obok apletu, wymieniony w parametrze archive,
b) jar w katalogu jre/lib/ext,
c) jar w katalogu jdk/jre/lib/ext.
Nie mogę znaleźć informacji, która wersja klasy zostanie użyta. Z obserwacji wnioskuję, że przy uruchamianiu apletu w przeglądarce wersja b), a przy uruchamianiu za pomocą appletviewera wersja c). Czy mógłby to ktoś potwierdzić?

0

Nie moge potwierdzic bo nie sprawdzalem, ale moge powiedziec ze Twoje obserwacje maja calkiem logiczne wytlumaczenia. A wiec - klasy z jarow w exts sa ladowane systemowym classloaderem, twoja aplikacja app classloaderem, ktorego ojcem jest systemowy. Jako ze wszystkie CL pakowane w javie se uzywaja delegacji do rodzica zanim same zaczna ladowac klase, wynika z tego ze klasa w ext maja pierwszenstwo i beda zawsze uzywane. Ma to rowniez sens jesli chodzi o bezpieczenstwo - instalujesz dany jar w systemie, ufasz mu, jest podpisany itp itd, i nagle uruchamiasz aplikacje ktora zamienia ta klase na jakies cos bardzo zlego - nie powinno sie to zdarzyc. To troche taka sama zasada jak np. fakt ze w koneterach servletow nie mozna z aplikacja pakowac np servlets-api.jar i podmieniac tam klas, bo to moze sprawic ze caly serwer jest zagrozony.

Dalej, w przegladarce masz zainstalownay plugin ktory uzywa JRE, nie JDK. Appletviewer to jednak aplikacja wchodzaca w sklad JDK, ktore ma swoje prywatne JRE, dlatego te katalogi sa inne.

0

Ja też sądzę, że to jest logiczne zachowanie, tym niemniej straciłem wczoraj parę godzin. Rozbudowałem pewna klasę narzędziową używana w aplecie, aplet testowałem w appletviewerze, a zupełnie nie pamiętałem, że w jdk/jre/lib/ext jest jar ze starą wersją tej klasy. Rozbudowa klasy polegała na nadpisaniu pewnej metody. Użycie starej wersji klasy nie generowało zatem błędu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1