Wie aktualisiere ich eine Java-App selbst?

Problem: Ich habe eine eigenständige Java-App (im Folgenden als "Agent" bezeichnet), die als Dienst auf internen Unternehmensservern ausgeführt wird. Es fungiert als Remote-Agent für einige zentrale Server. Da der Agent an mehreren Stellen eingesetzt wird, wird die Verwaltung immer komplizierter. Insbesondere: Das Verschieben von Updates ist schmerzhaft, da es ein ziemlich manueller Vorgang ist und der Zugriff auf die Protokolle und andere Informationen zu den Umgebungen, in denen die Agenten ausgeführt werden, problematisch ist, was das Debuggen schwierig macht. Die zur Diskussion stehenden Server sind kopflos und unbeaufsichtigt, was bedeutet, dass dies ein vollautomatischer Prozess ohne manuelle Eingriffe sein mussJava Web Start ist keine praktikable Lösung.

Vorgeschlagene Lösung: Lassen Sie den Agenten regelmäßig nach Hause telefonieren (zu den zentralen Servern), um den Agentenstatus anzuzeigen und nach Updates zu suchen.

Ich bin offen für andere Lösungsvorschläge für das Problem, aber ich habe bereits einen funktionierenden Prototyp für die Idee "Status und Selbstaktualisierungen", worauf sich diese Frage konzentriert.

Was ich mir ausgedacht habe, ist ein separates Projekt, das als Wrapper für den Agenten fungiert. Der Wrapper ruft den zentralen Server regelmäßig über HTTP auf, um nach einer aktualisierten Version des Agenten zu suchen. Bei der Suche nach einem Update wird die neue Version heruntergeladen, der ausgeführte Agent heruntergefahren und der neue Agent gestartet. Wenn das wie eine seltsame oder komplizierte Lösung erscheint, sind hier ein paar andere Überlegungen / Einschränkungen zu beachten:

Wenn der Wrapper eine neue Version des Agenten erhält, kann es zu neuen JAR-Abhängigkeiten kommen, was bedeutet, dass sich der Klassenpfad ändert. Daher möchte ich wahrscheinlich einen separaten Java-Prozess erzeugen, anstatt mit ClassLoadern zu fummeln und das Risiko eines permanenten Speicherverlusts zu laufen würde manuelle Eingriffe erfordern - genau das, wovon ich versuche wegzukommen. Aus diesem Grund habe ich einen separaten "Wrapper" -Prozess zum Verwalten der Agentenaktualisierungen in meinem Prototyp durchgeführt.Einige Server, auf denen die Agenten bereitgestellt werden, sind ressourcenbeschränkt, sodass für jede Lösung nur wenig CPU und Arbeitsspeicher erforderlich sind. Ich möchte daher eine Lösung, bei der keine neue JVM hochgefahren wird und die es nicht zulässt, einen separaten Wrapper-Prozess zu verwenden.Der Agent ist bereits sowohl auf Windows- als auch auf RHEL-Servern implementiert, daher muss die Lösung plattformübergreifend sein, obwohl ich kein Problem damit hätte, einen angemessenen Teil des Prozesses in Batch- und Bash-Skripts zu duplizieren, um die Dinge zum Laufen zu bringen.

Frage: Wie gesagt, ich möchte wissen, wie man eine sich selbst aktualisierende Java-App erstellt. Gibt es irgendwelche Frameworks / Bibliotheken, die mir dabei helfen könnten? Kann mir jemand mit Erfahrung auf diesem Gebiet einige Hinweise geben?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage