2011-08-17 12 views
10

Chciałbym utworzyć ramkę "launcher" dla mojego kodu, która przy danym adresie URL i predefiniowanym schemacie wersji: 1) sprawdź, czy istnieje aktualizacja: 2) pobierz aktualizacje 3) "zainstaluj" aktualizację 4) "ponownie uruchom" aplikacjęUżywanie OSGi do zaimplementowania automatycznej aktualizacji

Chcę a) zrobić to wszystko wewnątrz istniejącej maszyny JVM i b) być niezależną od platformy. Wysokie zamówienie prawda? Bazując na mojej (ograniczonej) wiedzy na temat OSGi i Apache Felix jestem prawie pewna, że ​​to możliwe, ale naprawdę gubię się w szczegółach.

Sprawdzanie aktualizacji i pobieranie jest banalne. Spowodowanie "starego" pakietu do zwolnienia i "nowego" pakietu do załadowania jest tym, co utknęło mi w pamięci. Robiłem już prace OSGi w przeszłości, ale było to dużo mniej dynamiczne niż to. Najlepiej byłoby docenić dobre miejsce początkowe lub ciężki ruch we właściwym kierunku.

Jeśli poważnie przepalę coś, co zostało już rozwiązane za pomocą bezpłatnej biblioteki, to powiedz mi to również, ale nie znalazłem nic do tej pory. :-)

Odpowiedz

6

Nie trzeba go nawet pobierać, wystarczy sprawdzić, czy dostępna jest aktualizacja, a następnie wywołać plik Bundle.update (InputStream) w pakiecie, który należy zaktualizować, z reguły po wywołaniu pakietu PackageAdmin. refreshPackages() później.

+0

będzie to spowodować, że poprzedni pakiet do usunięcia powiązania jest poprawny? Co stanie się z istniejącym pakietem po aktualizacji (tj. Na dysku twardym)? – user453385

+0

Odpowiedź Richarda jest zwięzła i poprawna, patrz http://www.osgi.org/javadoc/r4v43/org/osgi/framework/Bundle.html#update%28java.io.InputStream%29 - stan (starego) pakietu będzie zmienić na ODINSTALOWANE, w takim przypadku nie jest już dostępne. Nie jestem pewien, co robią poszczególne frameworki - na pewno zatrzymają pakiety pomiędzy ponownymi uruchomieniami, wyobrażam sobie, że usunięty pakiet został całkowicie usunięty (zarówno z JVM, o ile nie jest utrudnione zbieranie śmieci, jak i pamięć podręczna dysku). OSGi jest idealnie dopasowany do twoich potrzeb, a jeśli jest to elastyczne, można to zrobić za pomocą maven repo i programu obsługi URL-a pax mvn. – earcam

+0

Odświeżenie powoduje, że stary pakiet "unbind" i staje się dostępny do zbierania śmieci. Bezpośrednio po aktualizacji znajdują się dwie wersje pakietu na dysku twardym i w pamięci, zakładając, że inne pakiety miały zależności od zaktualizowanego pakietu. Dlatego konieczne jest odświeżenie, ponieważ chcesz, aby jakiekolwiek pakiety zależne przełączyły się na nową wersję. Po odświeżeniu istnieje tylko jedna wersja zaktualizowanego pakietu w pamięci lub na dysku. –

Powiązane problemy