2010-09-01 14 views
5

Buduję system aktualizacji, w którym muszę mieć możliwość zastąpienia słoika przywoływanego działającego słoika aplikacji w czasie wykonywania. Jednak próbuję uruchomić funkcje plików na słoiku, takie jak "setLastModified".Zamiana uruchomionego słoika w czasie wykonywania

Po pewnym googling znalazłem ten fragment ...

Co znalazłem w moich badań jest to, że średnia ClassLoader realizacji nigdy zamyka słoiku pliku po jego otwarciu. Również ładuje zasoby tylko z pliku JAR w razie potrzeby. Tak więc w danym czasie mogą być Klasy w pliku JAR , które nie zostały załadowane do pamięci. Oczywiście, jeśli usuniesz plik JAR z klasy ClassLoader, a ono spróbuje znaleźć zasób w brakującym pliku , otrzymasz co najmniej jeden wyjątek IOException.

Czy ktoś ma jakieś odniesienia do informacji na ten temat lub dookoła tego problemu?

Dzięki.

+0

Czy chcesz ponownie wynaleźć koło? OSGi ma już dobre wdrożenie. Zobacz, czy możesz zamiast tego użyć tego. – SteveD

+0

OSGi brzmi jak przytłaczająca dla większości wymagań, spójrz na tę odpowiedź http://stackoverflow.com/a/2463978/320594 –

+0

Po ponownym przeczytaniu wydaje się, że chcesz zachować swoją aplikację uruchomiony, ale z nowymi słoikami ... więc OSGi naprawdę wygląda na dobre rozwiązanie :), na przykład Eclipse pozwala na to (przeładowanie wtyczek podczas działania) i używa OSGi do tego (o ile wiem). –

Odpowiedz

5

Istnieje wiele rozwiązań dla klas/lib hot-swapping:

To zależy od tego, co chcesz zrobić.

+2

OSGi jest ogromny, a JRebel jest tylko na etapie rozwoju, ponieważ wymaga drogiej licencji (darmowej dla projektów OSS). Nie jestem pewien co do Hotswap for ant – TheLQ

2

Najbliższy rzeczą jest OSGi

Proszę spojrzeć na „Zobacz także:” części wspomnianego artice dla konkretnych produktów.

0

Nie znam żadnego dobrego sposobu, aby sobie z tym poradzić. Tworzenie niestandardowego programu ładującego klasy może być opcją, ale nie podoba mi się ten pomysł.

Pracowaliśmy nad tym, uruchamiając aktualizator z oddzielnego słoika przed uruchomieniem głównej aplikacji. Działa to dobrze, ale oczywiście można zaktualizować tylko słoik po uruchomieniu aplikacji.

Powiązane problemy