# eigene Update Funktion



## StifMB (28. Jun 2010)

Hallo alle zusammen!

Ich habe ein modulates Softwaresystem entwickelt, das aus einem kleinen Kern und vielen beliebigen Modulen besteht. Die Module können auch über das Internet aktualisiert werden, allerdings nur beim Start.

Ich würde jetzt gerne noch eine Funktion hinzufügen, das es dem Kern ermöglicht sich selbst zu update. Ich weiß, es gibt Webstart, aber das kommt hier nicht in Frage (Sandbox, Dateizugriff etc). Zudem würde ich es gerne selbst enwickeln. Mir fehlt jetzt allerdings die effiziente Idee. Am liebsten wäre es mir ja, wenn es zur Laufzeit funktionieren würde, ich also einen Thread starte, der alles in der JVM aufräumt und neulädt. Das wird so wahrscheinlich nicht klappen. Daher vlt ein externes Programm, dass den Kern dann neu startet.

Ich habe dazu allerdings nichts beim Orakel gefunden. Hat jmd vlt Hinweise, Links oder Tipps zu dem Thema? Danke.

Stif

PS: Wie gesagt, ich möchte die Funktion gerne selbst schreiben, auch um zu lernen.  Drittprogramme möchte ich nicht einsetzen.


----------



## Michael... (28. Jun 2010)

Wenn Du es selbst machen willst, kannst ein vom eigentlichen Programm unabhängiges Tool ausführen, welches nach verfügbaren Updates schaut und diese bei Bedarf herunterlädt und danach das eigentliche Programm startet. Zur Laufzeit kann man das sicher auch machen, aber ist das denn überhaupt notwendig?


----------



## StifMB (28. Jun 2010)

Notwendig sicher nicht. Aber es ist wie ich finde, die interessanteste Möglichkeit. Allerdings habe ich dafür nicht die genaue Vorstelleung einer Realisierung. Zum Beispiel weiß ich nicht, ob es reicht alle gecacheten Class Objekte im ClassLoader zu löschen um sie auch entdgültigt aus der JVM zu entfernen. Ich habe mal was gelesen, das man eine einmal geladene Klasse nicht mehr wegbekommt. Eigentlich denke ich, das bezog sich nur auf vorhandene Implementierungen von ClassLoadern, aber ich finde dazu nichts genaueres. 

Ein kleines exterenes Programm sollte dann so aussehen, dass es nur den neustart anschuppst. Das lässt sich alles in einer einzelnen Klasse realisieren. Funktionen zum laden und temporären Speichern bringt der kleine Kern schon mit. Am Ende wird es sicher daraus hinauslaufen, wenn nicht noch jemand eine Idee zu der Laufzeitsache hat oder einen Link. Wie machen das denn andere Programme, wie Netbeans usw.? Ich finde es extrem schwer über genau das Thema etwas zu finden. Wenn man nach java und update (sowie weiteren Wörtern sucht) bekommt man meist nur Informationen über Java Updates. ^.^


----------



## Michael... (28. Jun 2010)

Muss das denn alles innerhalb der selben JVM laufen? Kann man nicht das Programm und die JVM beenden - updaten - Programm in einer neuen JVM starten?


----------



## StifMB (28. Jun 2010)

Stimmt. Wieder mal zu kompliziert gedacht. Ich denke, es dürfte auch funktionieren, wenn ich einfach das Update herunterlade, die neue Version starte und Alte beende und die alte Datei dann ersetzte. ^.^ Ich danke dir Michael für die Anregung.  Manchmal sieht man den Wald vor lauter Bäumen nicht.


----------



## Gastredner (28. Jun 2010)

Ich würde Michaels Vorschlag vielleicht dahingehend abändern, dass du als Programmstarter ein eigenes kleines Programm schreibst, welches erst nach Updates sucht und diese bei Bedarf herunterlädt und direkt anwendet. Erst danach wird dann vom Starter das eigentliche Programm als neuer Prozess gestartet. Das dürfte aus meiner Sicht die einfachste Lösung sein.


----------

