Eigenes Produkt Upgrade / Update-fähig halten?

  • Themenstarter Themenstarter Johannes S.
  • Beginndatum Beginndatum
J

Johannes S.

Gast
Guten Tag!

Ich bereite mich auf ein vermutlich größeres Projekt von meiner Uni vor und möchte mir nach hinten so viele Möglichkeiten wie möglich offen halten, um das Produkt immer wieder zu aktualisieren / zu verändern.
Entsprechend lautet die Frage: Wonach muss ich suchen/ was muss ich verwenden/ überlegen / einbinden, damit ich später ein Upgrade/Update vom (bekanntlich nicht sehr technikversierten) Nutzer einfach durchführen lassen kann? Gibt es spezielle Techniken dafür oder sogar vorgefertigte Klassen/Templates oder einfach Tutorials?

Wie ihr schon mitbekommen habt, fehlt mir in dem Bereich leider komplett das Wissen, deshalb finde ich bei Google wohl nur mieserable Treffer. Ich bin dankbar für jeden Hinweis.

Vielen Dank im Voraus und
mit freundlichen Grüßen
Johannes S.
 
Updates haben keine Vorraussetzungen an den Code, bei einer Clientanwendung, bei Server kommt es nur darauf an, ob man den bzw. die App dafür runterfahren muss.
Java WebStart wäre eine Möglichkeit.
 
Danke, aber wie genau soll das gehen? Lade ich dann den ganzen Clienten über die Verbindung zum Server neu herunter und ersetze die Dateien einfach im Ordner?
Oder anders: ich beschränke mich nur auf Java-Applikationen. Also auf ein Produkt, dass beim normalen Arbeitsgang keine Verbindung zu einem Server braucht. (Bitte keine Diskussionen über - "Warum dann Java")
Brauche ich einen speziellen Ordner, in den ich alle Neuerungen einlade, die dann beim nächsten Start gelesen werden?
 
Ja, man lädt den kompletten Client neu runter (jar), das übernimmt Java WebStart.

Wenn du nur einzelne Dateien austauschen/herunterladen willst wird das ganze sehr kompliziert, dazu braucht man mehr als ein paar Templates/APIs, dazu braucht man Configuration Management und Change Management, es handelt sich um Verwaltungsaufgaben.
 
Und genau soetwas suche ich!
Also: Habt Ihr einen Tipp, wie man am besten damit anfängt?
 
Verzeihung!
Wenn du nur einzelne Dateien austauschen/herunterladen willst wird das ganze sehr kompliziert, dazu braucht man mehr als ein paar Templates/APIs, dazu braucht man Configuration Management und Change Management...
Das meinte ich - Wie fange ich damit am besten an?
Wenn es allzu komplex ist: Wie gesagt - ich bin auch mit Verweisen auf Tutorials/Berichte etc. sehr zufrieden...
 
Das meinte ich - Wie fange ich damit am besten an?
Was hast du denn genau vor?

"Updatefähig" ist alles, man kann jede Software durch eine neuere ersetzen, das ist kein echtes Kriterium bzw. keine richtige Anforderung.

Wenn es sich um Desktop Apps handelt, wieso nicht gleich das ganze Ding austauschen?
Das würde Java WebStart übernehmen, dazu muss der User nur ein Icon Doppelklicken.

Geht es um eine Datenbank die bei einem Update abgeändert werden muss?
Dann muss kann sich zB. die neue Version der App darum kümmern.

Am besten wäre klarzumachen was genau du erreichen möchtest.
 
Er möchte es vermutlich ähnlich wie in Eclipse, wo im laufenden Betrieb einzelne Plugins geupdated werden können.
Das ganze ist aber äußerst kompliziert und da sollte man gründlich drüber nachdenken ob man sich den Aufwand wirklich machen will oder ob es sich überhaupt lohnt.
Zumal der TO scheinbar nicht mal die Zeit oder Muße besitzt Google zu verwenden. (Nicht böse gemeint ! )
 
Was man natürlich immer machen kann ist eine explizit eingebaute Funktion, die den Nutzer über die Verfügbarkeit einer neuen Version informiert, ganz egal, wie diese dann konkret eingespielt wird.
 
Er möchte es vermutlich ähnlich wie in Eclipse, wo im laufenden Betrieb einzelne Plugins geupdated werden können.
Das ganze ist aber äußerst kompliziert und da sollte man gründlich drüber nachdenken ob man sich den Aufwand wirklich machen will oder ob es sich überhaupt lohnt.
Zumal der TO scheinbar nicht mal die Zeit oder Muße besitzt Google zu verwenden. (Nicht böse gemeint ! )
Die Updates können zwar im laufenden Betrieb stattfinden, aber nutzen kann man die Updates erst nach einem Restart (wenn es sich um echte Updates handelt, nicht nur um Zusatzfeatures).

Selbst OSGi kann keine Instanzen/Objekte zur Laufzeit updaten, sondern nur die zugehörigen Klassen, deswegen ist der Neustart erforderlich.

Alles in allem zu viel spekulation imho, würde vorschlagen dass der TS erstmal genau sagt was er meint/will.
 
@Maki: Ging davon aus, dass man dieses Wissen besitzt, wenn man so etwas umsetzen will. Mir ist jedenfalls kein Programm bekannt, dass das ohne Neustart hinbekäme. Was ich damit sagen wollte war, dass die Updates runtergeladen werden können und der Nutzer währenddessen weiter arbeiten kann.
 
Hallo! (und Verzeihung für die Verzögerung)

Zuerst: Das Programm darf ruhig neu gestartet werden müssen, aber wenn es möglich ist, dann soll nicht das komplette Installationsverzeichnis ausgetauscht/ heruntergeladen werden.

Ich hatte mir das eher anders vorgestellt: Wenn ein Nutzer über ein Update informiert wird, hat er im Programm die Möglichkeit, ein Update über dieses Programm selbst durchführen zu können.
Das Programm sollte dann sich alles bereit legen (wie?), damit es nach dem Neustart alle Komponenten verwenden oder vielleicht da auch erst in sich integriert und dann verwendet.
Es soll sich aber nicht nur auf Plugins beziehen, sondern auch "wirkliche Updates" verwenden können - also dass man Klassen für Berechnungen und Datenhaltung (nur wenn es sein muss) komplett austauschen / erweitern kann.

Doch, ich suche schon seit längerem danach, aber ich glaube, mir fehlen einfach die richtigen Schlagworte.
@Sonecc: Wenn du also gute Links oder Schlagworte hast, dann bin ich (wie bereits gesagt) auch darüber froh!
bzw.: Nein, leider besitze ich aus genau diesen Gründen das nötige Wissen nicht - aber etwas derartig komplexes wollte ich auch nicht.

Generell interessiert mich ja am meisten, wie ich das Programm schreiben / strukturieren soll - worauf ich achten muss, wenn ich es schreibe, damit eben jenes gemacht werden kann!
Mit freundlichem Gruß
Johannes S.
 
Ist halt ne konzeptionelle Sache.
Ganz naiv könnte man hingehen und jeden Teilbereich deiner Software in einer eigenen Jar definieren. Bei einem Update wird dann einfach die neue Jar runtergeladenen (Stichwort Temp-Ordner) und beim Neustart der Software die alte Jar überschrieben.
Dafür wäre dann eben notwendig, dass du einen Temp-Ordner erstellst und eventuell eine Konfigurationsdatei, die dem Update System beschreibt, was es womit ersetzen soll. Dein Programm wird nun immer vom Updater gestartet, der erstmal prüft ob ein Update runtergeladen wurde/verfügbar ist. Wenn ja, dann wird der Update Vorgang durchgeführt, ansonsten wird das eigentliche Programm gestartet.

Wie gesagt ist das ein einfaches Konzept und wirkliche Literatur zu diesem Thema habe ich auf die Schnelle nicht. Eventuell hilft dir der Gedankengang aber schonmal etwas
 
wenn das ganze mit nem launcher gemacht wird der zu beginn schon checkt ob updates vorhanden sind und dann die nötigen files zieht könnte man anstatt einen neuen process auf das main-jar zu legen auch einen URLClassLoader verwenden ... mit Java7 stellt URLClassLoader nämlich close() zur verfügung so das auch zur laufzeit gecheckt werden kann ob updates verfügbar sind ... wenn ja werden alle klassen finalsiert und dann über URLClassLoader.close() die geladenen JAR's geschlossen ... dann kann man sie auch löschen und durch neue ersetzen ...
mit Java6 geht das auch .. aber man braucht einen CustomClassLoader und ne menge reflections um das close des Java7 URLClassLoader nachzubauen ...
das einzigeste jar was du dann nicht zum bootstrap oder zur runtime updaten kannst ist der launcher ... daher sollte man ihn so schreiben das er möglichst nie ein update braucht ...
 
Den launcher per webstart machen, der launcher leist dann aus zb nem webserver die dateiliste mit checksummen, prüft ob lokal alles stimmt, wenn cniht läde er dateien die andere checksumme haben neu runter. Am ende startet er über den Processbuilder dann das tatsächlcihe Programm.

Dazu noch einbauen, dass wenn es kein internet gibt das Programm direkt gestartt wird. Ungefähr so gedacht?
 

Neue Themen


Zurück
Oben