Eigenes Produkt Upgrade / Update-fähig halten?

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.
 
M

maki

Gast
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.
 
J

Johannes S.

Gast
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?
 
M

maki

Gast
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.
 
J

Johannes S.

Gast
Und genau soetwas suche ich!
Also: Habt Ihr einen Tipp, wie man am besten damit anfängt?
 
J

Johannes S.

Gast
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...
 
M

maki

Gast
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.
 

Sonecc

Gesperrter Benutzer
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 ! )
 

Guybrush Threepwood

Top Contributor
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.
 
M

maki

Gast
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.
 

Sonecc

Gesperrter Benutzer
@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.
 
J

Johannes S.

Gast
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.
 

Sonecc

Gesperrter Benutzer
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
 
D

despikyxd

Gast
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 ...
 

Empire Phoenix

Top Contributor
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?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
S Eclipse Github Projekt in eigenes Projekt einbinden und nutzen Allgemeine Java-Themen 13
B eigenes Consumer Interface Allgemeine Java-Themen 0
Thallius Eigenes Message Center erstellen Allgemeine Java-Themen 3
M eigenes Seekarten-Tool (oder PlugIn?) Allgemeine Java-Themen 2
Z LanguageTool in eigenes GUI einbetten Allgemeine Java-Themen 0
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
O log4j - eigenes Log für einzelne Klasse Allgemeine Java-Themen 5
M Eigenes Eventsystem Allgemeine Java-Themen 2
T Code durch eigenes Frame pausieren (ähnlich JDialog) Allgemeine Java-Themen 4
J Swing Eigenes Button-design Allgemeine Java-Themen 2
S import meine.eigenes.import Allgemeine Java-Themen 6
I Eigenes Mail-Programm schreiben Allgemeine Java-Themen 21
N eigenes Bildformat Allgemeine Java-Themen 2
M Erstes eigenes Projekt Allgemeine Java-Themen 5
D Simples eigenes Logfile Allgemeine Java-Themen 18
J Eigenes Objekt sichern Allgemeine Java-Themen 9
R Eigenes Objekt - clone() Allgemeine Java-Themen 2
G eigenes ChangeEvent Allgemeine Java-Themen 4
P Installationsroutine für eigenes Java-Programm Allgemeine Java-Themen 3
G eigenes Actionevent Allgemeine Java-Themen 8
M Eigenes Java-Server-Programm unter Linux steuern? Allgemeine Java-Themen 13
G eigenes dateiformat als zip Allgemeine Java-Themen 2
M Eigenes Synchronisationstool? Allgemeine Java-Themen 2
E Wie: Eigener Listener, eigenes Event (möglichst einfach) Allgemeine Java-Themen 29
ToNyXXL Als Mauszeiger eigenes Bild verwenden! Allgemeine Java-Themen 3
S eigenes Zahlensystem? Allgemeine Java-Themen 5
K Eigenes Protokoll (abc:[url]http://abc.de[/url]) Allgemeine Java-Themen 2
A Eigenes jar file in projekt einbinden Allgemeine Java-Themen 4
B eigenes look and feel Allgemeine Java-Themen 11
K eigenes Tool jar - maskieren der Methoden Allgemeine Java-Themen 3
T eigenes Browser Plugin Allgemeine Java-Themen 6
T Eigenes Installationsprogramm Allgemeine Java-Themen 17
A Summe und Produkt von zwei Feldern ( arrays) Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben