Versionskontrolle und Programmupdates

Moin,
ich möchte gern ein paar Ideen hören, wie Ihr das so handhabt bzw.
Vorschläge, wie man sowas regeln kann.

Folgendes:
Es handelt sich um eine Anwendung, die zentral auf einem Server liegt
(eigentlich sind es mehrere). Der Zugriff der Anwender (Clients) erfolgt über
eine Verknüpfung zu der jar-Datei auf diesem Netzlaufwerk. Diese jar-Datei
benötigt noch weitere jar-Dateien, z.B. als Library.
Die bisherige Versionsprüfung ist so umgesetzt, dass im Programm selbst
hardcodiert eine Versionsnummer eingetragen ist und in einer properties-Datei
(Server) die gleiche Nummer steht. Das hat den Grund, dass manche
Anwender ihre Anwendungen tagelang laufen lassen und ein Programmupdate
nicht mitbekommen. Zu diesem Zweck erfolgt programmtechnisch eine
Überprüfung, ob die Programmversion mit der properties-Versionsnummer
übereinstimmt. Wenn nicht, erfolgt eine Mitteilung an den Benutzer.

  1. Gibt es eine bessere Umsetzung, wie man das lösen kann, wenn ja, wie und
    warum?

  2. In diesem Szenario - es ist leicht vereinfacht beschrieben - kommt es vor,
    dass die Versionsprüfung beim ersten Mal fehlschlägt, aber bei der gleichen
    Ausführung direkt danach erfolgreich ist. Dieses Verhalten ist auf meinem
    Rechner nicht reproduzierbar, auch beim Arbeitskollegen nicht. Woran kann
    sowas liegen?

  3. Da die Benutzer die Programme offen lassen, können vorhandene jar-
    Dateien auf dem Server nicht umbenannt oder verschoben werden, weil sie
    noch in Verwendung sind. Wie kann man sich hierbei behelfen? Ein
    Umbenennen der neuen jar-Datei ist auch nicht immer erfolgreich, weil die
    benötigten Libraries u.a. in den manifest-Dateien im class-path eingetragen
    sind. Ideen?

Ich hab das bisher immer so gelöst, das mein Programm seine Versionsnummer kennt und bei einem Server anfragt ob es eine neuere Version gibt.
Bei meinem neusten Programm (dem DB Designer) bin ich da jedoch auf ein Problem gestoßen, wenn das Programm Libs hat die ich auch darüber updaten will gibt das einen Haufen Arbeit.

Alternativ kannst du dir mal Java Web Start ansehen, das soll einen automatischen Updatemechanismus drin haben (beim Programmstart)

Genau. Ich benutze für solche Sachen auch Java WebStart.
Ist eine Netzverbindung vorhanden, wird bei jedem Start auf eine aktuellere Version geprüft. Gibts eine neuere Version wird diese heruntergeladen und ausgeführt. Gibts keine neue Version oder ist keine Netzverbindung vorhanden, wird die Anwendung aus dem Cache ausgeführt.

[QUOTE=L-ectron-X]Genau. Ich benutze für solche Sachen auch Java WebStart.
Ist eine Netzverbindung vorhanden, wird bei jedem Start auf eine aktuellere Version geprüft. Gibts eine neuere Version wird diese heruntergeladen und ausgeführt. Gibts keine neue Version oder ist keine Netzverbindung vorhanden, wird die Anwendung aus dem Cache ausgeführt.[/QUOTE]
Moin,
gut, das garantiert nur, dass beim Programmstart die aktuellste Version gezogen wird. Aber was ist mit denen, die tagelang die Anwendung laufen lassen?

Folgender Fall:
Benutzer XYZ startet am Montag sein Programm und lässt es bis Freitag laufen ohne zu beenden. Am Mittwoch soll jedoch eine neue Programmversion eingespielt werden.

A) Wie bekommt er das mit?

B) Wie kann man das Programm austauschen?

–> Programm = MeinProgramm.jar, benötigt MeineLibrary.jar, lassen sich derzeit nicht überschreiben.

BTW gibt es irgendwo ein einfache HowTo oder Tutorial zu Java Webstart?

ich lehn mich mal hier weit aus dem Fenster… schau dir mal Raven an… ich habe bisher nur ein bisschen davon gehoert… vielleicht hilfts.

wobei wenn ich das richtig verstanden habe, das auch nicht das problem beim laufenden betrieb loest.

ich persoenlich sehe kein problem in der automatischen selbsueberpruefung. Die Frage ist, eher push oder pull mechanismus. Also soll der Client immer abfragen, obs etwas neues gibt, oder soll der Server Nachricht schicken, dass es was neues gibt. Auch wenn die zweite Moeglichkeit logischer klingt, wuerde ich die pull Methode vorziehen.
Der Client soll in regelmaessigen Abstaenden nach neuem schauen, schlaegt etwas fehl, holt er es sich beim naechsten pull…
oder wenn er weiss dass es soweit ist restartet er und holt sich (z.b. durch webstart / raven) dann die neuen daten

Moin,
ich verstehe noch nicht den Sinn von Raven, sieht mir etwas ähnlich aus wie
ANT.
Mechanismus derzeit ist pull, d.h. bei bestimmten Aktionen des Clients
(Anwenders) wird geprüft, ob die Vesion noch aktuell ist. Wenn nicht, gibt es
einen entsprechenden Hinweis mit der Bitte auf Programmneustart, wobei
automatisch die neueste Version benutzt wird.
Für den Austausch ist mir noch eine Idee eingefallen, die allerdings etwas
rigoros ist:
Nachts um 3 Uhr wird die Versionsprüfung durchgeführt. Gibt es keine neue
Version, läuft das Programm weiter wie gehabt. Wenn doch, beendet sich das
Programm automatisch. :slight_smile:
Ich habe nur keine Idee, wie teuer (resourcen) diese Lösung ist.

Im “Fundbüro” des Forums findest du einen Link zum Java Web Start Tutorial von Sun.

Thx. Ist vllt für ein anderes Projekt hilfreich. Ich habe gerade gesehen, dass
man dafür einen Webserver braucht. Den gibt es bei uns nicht.

Von irgendeinem Rechner in eurem Netzwerk hätte es doch auch so heruntergeladen werden müssen. Da ist es doch kein Problem noch einen Apache zu installieren, der die Web Start Anfragen behandelt.