Jak zrobić automatyczną aktualizację aplikacji Java?

Problem: Mam autonomiczną aplikację Java (zwaną odtąd „agentem”), która działa jako usługa na wewnętrznych serwerach firmy. Działa jako agent zdalny dla niektórych serwerów centralnych. Gdy agent zostanie wdrożony w większej liczbie miejsc, zarządzanie nimi staje się coraz bardziej skomplikowane. W szczególności: pchanie aktualizacji jest bolesne, ponieważ jest to dość ręczny proces, a uzyskanie dostępu do dzienników i innych informacji o środowiskach, w których działają agenty, jest problematyczne, utrudniając debugowanie. Omawiane serwery są bezobsługowe i nienadzorowane, co oznacza, że ​​musi to być w pełni zautomatyzowany proces bez ręcznej interwencji, stądJava Web Start nie jest realnym rozwiązaniem.

Proponowane rozwiązanie: Okresowo wysyłaj agenta do domu (do serwerów centralnych), aby zapewnić status agenta i sprawdzić dostępność aktualizacji.

Jestem otwarty na inne sugerowane rozwiązania tego problemu, ale mam już działający prototyp dla idei „statusu i samorealizacji”, na czym koncentruje się to pytanie.

To, co wymyśliłem, jest w rzeczywistości oddzielnym projektem, który działa jako opakowanie dla agenta. Opakowanie okresowo wywołuje serwer centralny za pośrednictwem protokołu HTTP, aby sprawdzić zaktualizowaną wersję agenta. Po znalezieniu aktualizacji pobiera nową wersję, zamyka działającego agenta i uruchamia nowego. Jeśli wydaje się to dziwne lub rondo, oto kilka innych rozważań / ograniczeń wartych odnotowania:

Gdy opakowanie otrzymuje nową wersję agenta, mogą istnieć nowe zależności JAR, co oznacza zmiany w ścieżce klasy, co oznacza, że ​​prawdopodobnie chcę wywołać oddzielny proces Java zamiast bawić się w ClassLoaders i ryzykować wyciek pamięci o stałej generacji, który wymagałoby ręcznej interwencji - dokładnie tego, co próbuję uciec. Dlatego skończyło się na osobnym, „opakowującym” procesie zarządzania aktualizacjami agenta w moim prototypie.Niektóre serwery, na których wdrażane są agenty, są ograniczone pod względem zasobów, więc każde rozwiązanie wymaga niskiego użycia procesora i pamięci. To sprawia, że ​​chcę rozwiązania, które nie wiąże się z uruchomieniem nowej maszyny JVM i jest udaremnieniem posiadania oddzielnego procesu pakowania.Agent jest już wdrożony zarówno na serwerach Windows, jak i RHEL, więc rozwiązanie musi być wieloplatformowe, choć nie miałbym problemu z powieleniem rozsądnej ilości procesu w skryptach wsadowych i bashowych, aby wszystko się zmieniło.

Pytanie: Jak już wspomniałem, chcę wiedzieć, jak stworzyć samozaktualającą się aplikację Java. Dokładniej, czy są jakieś ramy / biblioteki, które mogłyby mi w tym pomóc? Czy ktoś z doświadczeniem w tej dziedzinie może dać mi jakieś wskazówki?

questionAnswers(5)

yourAnswerToTheQuestion