# JNLP nach Änderung automatisch aktualisieren



## Iron Monkey (7. Jan 2011)

Hi!

Meine Beispiel-Dateien: test.jar und test.jnlp

Diese Beispiel-Dateien liegen im Webserver und jeder Anwender ( im Unternehmen ca. 1000 Mitarbeiter ) kann wunderbar per Verknüpfung die Anwendung starten. Wenn ich in der Anwendung weiter programmiere und uploade die JAR-Datei wie immer in den Webserver, dann erkennt Java Webstart nach dem Verknüpfungsklick auch sofort, dass die Anwendung geändert wurde und das automatische Update wird durchgeführt.

Jetzt kommt zu meinem Problem, was wirklich der größte Nachteil ist. Folgendes:

Zu der o.g. test.jnlp - Datei blieb ja immer alles gleich und unverändert.

*AUFGEPASST:* Ich habe in der Datei "test.jnlp" zwei neue Bibliotheken unter <ressource> erweitert, abspeichern und uploade diese dann in den Webserver. Es gibt KEIN automatisches Update für die JNLP-Datei, d.h. ich muss an jedem Rechner der 1000 Mitarbeitern die Anwendung neu installieren! Das ist das größte Problem, was ich sehr gerne vermeiden möchte!

Die JNLP-Datei ist doch nur dafür da, um die Anwendung einmalig zu installieren und danach nur noch mit der Verknüpfungsdatei starten, oder habe ich da falsch verstanden?

*Wie kann ich die JNLP-Datei auch ein autom. Update durchführen lassen?*

Das Einzige, was ich mir nur eingefallen ist: Das Datum der JNLP-Datei vergleichen und
dann bei Datum-Unterschied diese Zeile *Process p = Runtime.getRuntime().exec("javaws -wait -shortcut \"test.jnlp\"");* ausführen!

Ich hoffe, ihr wisst, was ich meine und wäre um jede Hilfe dankbar!

Gruß
Iron Monkey


----------



## hansmueller (7. Jan 2011)

Hallo,

das gleiche Problem habe ich auch. Habe dafür aber keine Lösung gefunden. 

Ich habe gerade diesen Link gefunden: java - How to get updated jnlp file when using shortcuts? - Stack Overflow

Da wird behauptet, wenn man den Offline-Modus verbietet, daß dann die jnlp immer neu vom Server geholt wird. 
Daß ist für mich zwar leider keine befriedigende Lösung, da ich für meine Projekte auch den Offline-Modus zwingend brauche (Außendienst mit Laptops), aber vielleicht hilft es dir.
Und ob das auch klappt, wenn man nicht vom Anfang an den Offline-Modus verboten hat, muß auch erst noch getestet werden. (Habe dafür zur Zeit keine Zeit.)
Würde mich interessieren, ob daß funktioniert.

MfG
hansmueller


----------



## hansmueller (7. Jan 2011)

Habe noch folgende Bug-Infos gefunden:
Bug ID: 6189106 Java Web Start jnlp file caching problem.
Bug ID: 6838214 launch from desktop shortcuts of java web start application will not pick up JNLP update from server

Beim ersteren sind auch ein paar Lösungsideen vorhanden.

MfG
hansmueller


----------



## tagedieb (7. Jan 2011)

Hast du das Attribut 'href' im jnlp element definiert?




			
				JWS Documentation hat gesagt.:
			
		

> 6.6 Downloading and Caching of Application Descriptors
> Application descriptors, i.e., JNLP files, are handled specially, since they are not necessarily downloaded by the JNLP Client itself. Often, they will be downloaded by a Web browser or by other means.
> 
> The href attribute in jnlp element is used to specify the location of the JNLP file itself. For example:
> ...


----------



## Iron Monkey (7. Jan 2011)

Hi tagedieb!

Ja, habe ich!

So steht bei mir: <jnlp spec="1.0+" codebase="http://www.blabla.de/aps/" href="test.jnlp">

Darf ich fragen warum?

Gruß
Iron Monkey


----------



## Iron Monkey (7. Jan 2011)

tagedieb hat gesagt.:


> Hast du das Attribut 'href' im jnlp element definiert?



Sorry, ich habe nochmal genauer überlegt, warum du mich dies gefragt hast! 

Jetzt weiss ich, was du meinst und ich habe das auch ausprobiert! Das hat auch geklappt zu meinem Problem, aber der Nachteil ist ja, dass man in dem Fall vor dem Start der JNLP-Datei alle Ressourcen wie joda-time-1.4.jar, usw. in den Ordner zur Verfügung stellen muss, wo die JNLP-Datei sich befindet, sonst meckert er sofort. Das würde bedeuten, dass ich alle Ressourcen aus dem WebServer holen bzw. kopieren muss oder eine Zip-Datei, wo alle Ressourcen drin sind, aus dem WebServer holen!

So habe ich das ganze wie beschrieben verstanden.

Gruß
Iron Monkey


----------



## tagedieb (7. Jan 2011)

Ich bin mir nicht ganz sicher wob ich dein Problem verstanden habe.

Fuer einen Update brauchst du alle neuen und modifizierten Resourcen und das test.jnlp file auf den Webserver hochladen.

Wenn ein Benutzer auf den test.jnlp link klickt sollte folgendes passieren:

1. Web Start prueft ob einen neue Version von test.jnlp vorhanden ist und laedt sie runter
2. Falls neue Resources deklariert wurden oder neue Versionen gefunden wurden werden diese runtergeladen
3. Programstart gemaess neuem test.jnlp file

Du brauchst die neuen Files nur auf den Server zu laden und WebStart sollte sich dann automatisch updaten (inklusive test.jnlp).

Ansonsten musst du dein Problem nochmals detailiert erlaeutern.


----------



## Iron Monkey (10. Jan 2011)

tagedieb hat gesagt.:


> Ich bin mir nicht ganz sicher wob ich dein Problem verstanden habe.
> 
> Fuer einen Update brauchst du alle neuen und modifizierten Resourcen und das test.jnlp file auf den Webserver hochladen.
> 
> ...



Hi tagedieb!

Ich erläutere das Problem nochmal detailliert.

Also, jeder Anwender klickt auf den test.jnlp Link und die neue Anwendung wird installiert. Nach der Installation wird an jedem Anwender auf seinem Desktop automatisch eine Verknüpfung für die Anwendung erstellt. Jetzt benutzt der Anwender nur noch mit der Verknüpfung, um die Anwendung zu starten.

Ich bin der Einzige, der die Anwendung programmiert und kopiere auch immer die JAR-Datei in den WebServer rein, dann dem Kollege Bescheid geben, dass sie die Anwendung neustarten müssen. Alle Anwender schliessen immer die Anwendung und dann wie immer auf die Verknüpfung doppelklicken, um die Anwendung wieder zu starten! Das Update wird natürlich automatisch erkannt und durchgeführt. Und so läuft es immer wieder im Kreis und es klappt auch alles wunderbar.

ABER, der größte Nachteil ist, dass das automatische Update für die neue JNLP-Datei NIE geprüft wird, wenn der Anwender nochmal auf die Verknüpfung klickt. Genau dieses Problem möchte ich ganz gerne vermeiden.

Ich hoffe, ich habe dir jetzt so detailliert erklärt, damit du dir vorstellen kannst, dass ich normalerweise an jedem Rechner des Anwenders immer wieder die Anwendung aus dem Cache löschen muss und sie danach neu installieren muss, damit ich die aktuelle JNLP-Datei aus dem WebServer bekomme.


Gruß
Iron Monkey


----------



## tagedieb (10. Jan 2011)

Was fuer eine Verknuepfung erstellst du denn genau?

Die Anwendung sollte immer via test.jnlp gestartet werden. Entweder als URL oder gespeichert auf dem Desktop. Dann muesste eigentlich immer auf Updates geprueft werden.


----------



## hansmueller (10. Jan 2011)

@tagedieb: Man kann WebStart dazu veranlassen automatisch eine Verknüpfung auf den Desktop zu erstellen. Diese Desktop-Verknüpfung verlinkt auf ein File im (Java-)Catch. Ich nehme mal stark an, daß Iron Monkey es so gemacht hat, ist nämlich die einfachste Lösung. Man kann so der Desktop-Verknüpfung auch noch ein eigenes Icon mitgeben - das sieht dann gleich um Klassen besser aus.

MfG
hansmueller


----------



## tagedieb (11. Jan 2011)

Danke, das mit dem Link wusst ich gar nicht.

Ich wundere mich aber trotzdem, dass das test.jnlp file nicht upgedated wird.

Mal 'ne andere Frage. Wird das file ueberhaupt NIE upgedated oder dauert es bloss 'ne gewisse Zeit (ca. 1 Stunde oder 1 Tag) bis er das neue File findet? Wie sieht es mit Caching Mechanismen auf dem Server aus? Koennte es sein, dass vom Server eine gecachte Version von test.jnlp geladen wird?

Ich werd das bei Gelegenheit mal selber ausprobieren.


----------



## hansmueller (11. Jan 2011)

@tagedieb: Mit dem Server, auf dem die JNLP-Datei liegt, hat das leider nichts zu tun. Sobald man die WebStart-Anwendung einmal installiert hat, wird nur noch die JNLP-Datei verwendet, die man zum Zeitpunkt der Installation ausgeführt hat. Die Update-Funktion für das Programm funktioniert einwandfrei, nur die JNLP-Datei wird nicht geupdated. (komisches Wort) 
Das ist sehr ärgerlich, wenn man z. B. irgendwelche Pfade geändert hat oder neue libs oder Sonstiges einbinden will.

Nach meiner Erfahrung muß man, wenn man die aktuellste JNLP-Datei verwenden möchte, immer die WebStart-Anwendung deinstallieren und wieder über die neue JNLP-Datei installieren. Das ist mehr als nur umständlich.

Und hierfür eine Lösung zu finden wäre richtig super.

Nur so eine Idee: Ich habe mal irgendwo gelesen, daß man über eine JNLP-Datei weitere JNLP-Dateien aufrufen kann und die erste JNLP-Datei somit erweitern kann. Ich glaube diese werden dann so ähnlich wie Resourcen behandelt. Es könnte doch sein, daß zwar die erste JNLP-Datei nicht aktualisiert wird, aber dafür die JNLP-Dateien, auf die die erste verweist. Man könnte sich somit eine Start-JNLP-Datei machen, von der man weiß, das diese nicht aktuallisiert wird, und dann eine Anwendung-JNLP-Datei welche in den Resourcen-Tag der Start-JNLP-Datei steht. Diese Anwendungs-JNLP-Datei sollte somit vom Updatemechanismus von Webstart (je nach Einstellung) immer auf den laufenden Stand gehalten werden. Ist zwar sehr umständlich - wäre aber mal einen Versuch wert. Ich weiß nur nicht mehr genau, ob die zusätzlichen JNLP-Dateien wirklich in den Resourcen-Abschnitt kommen und ob es dafür noch ein paar Besonderheiten gibt.

MfG
hansmueller


----------



## tagedieb (11. Jan 2011)

Danke, sehr aufschlussreich! Ich finde es sehr sonderbar, wenn beim starten ueber den Link nur noch die Resourcen aber nicht die .jnlp Datei aktualisiert wird. Ist das beabsichtigt oder vieleicht ein Bug in Web Start.

Was spricht dagegen nicht einen Link sondern die .jnlp Datei selber auf dem Desktop zu speichern? Damit laesst sich die Applikation auch starten und die Datei wird aktualisiert. Zwar aendert sich die Datei auf dem Desktop nicht, aber das spielt keine Rolle.


----------



## hansmueller (11. Jan 2011)

Was dagegen spricht: Es sieht häßlich aus.

Wenn es nur intern für die eigene Firma ist, dann wäre sowas evtl. noch akzeptabel, aber (in meinem Fall) wird das Programm auch von diversen Kunden benutzt. Da muß das ganze auch graphisch etwas hermachen. D. h. ein hübsches Desktop-Icon zum Starten des Programmes und die Speicherdateien brauchen auch ein eigenes Icon, damit man gleich erkennt, um was es sich handelt.

WebStart bietet ja diese Möglichkeiten. Da gibt es halt nur diesen Fehler mit den JNLP-Dateien.

MfG
hansmueller


----------



## Iron Monkey (11. Jan 2011)

tagedieb hat gesagt.:


> Danke, sehr aufschlussreich! Ich finde es sehr sonderbar, wenn beim starten ueber den Link nur noch die Resourcen aber nicht die .jnlp Datei aktualisiert wird. Ist das beabsichtigt oder vieleicht ein Bug in Web Start.
> 
> Was spricht dagegen nicht einen Link sondern die .jnlp Datei selber auf dem Desktop zu speichern? Damit laesst sich die Applikation auch starten und die Datei wird aktualisiert. Zwar aendert sich die Datei auf dem Desktop nicht, aber das spielt keine Rolle.



*Ist das beabsichtigt oder vieleicht ein Bug in Web Start?*
Das ist eindeutig ein Bug in Web Start! Siehe oben die Links von Hansmueller.

*Was spricht dagegen nicht einen Link sondern die .jnlp Datei selber auf dem Desktop zu speichern?*
Wir im Unternehmen sind ca. 1000 Mitarbeiter! Soll jeder Mitarbeiter die .jnlp Datei selber auf dem Desktop speichern? Nee, das geht nicht, denn kein Mitarbeiter hat doch Ahnung von dieser JNLP-Datei! 

So wie Hansmueller seine Idee vorgeschlagen hat, wäre eine gute Lösung und das habe ich auch ausprobiert, aber es klappt noch nicht ganz richtig!

Gruß
Iron Monkey


----------



## tagedieb (11. Jan 2011)

hansmueller hat gesagt.:
			
		

> Was dagegen spricht: Es sieht häßlich aus.



Find ich nicht so schlimm. Auf dem Desktop kann man ja einen Shortcut erstellen, der auf die .jnlp Datei zeigt, da kann man auch Icons referenzieren.



			
				Iron Monkey hat gesagt.:
			
		

> Wir im Unternehmen sind ca. 1000 Mitarbeiter! Soll jeder Mitarbeiter die .jnlp Datei selber auf dem Desktop speichern? Nee, das geht nicht, denn kein Mitarbeiter hat doch Ahnung von dieser JNLP-Datei!



Der Link sollte schon automatisch angelegt werden. Man koennte es in die Software einbauen, das der Shortcut auf dem Desktop angelegt wird.

Der Vorschlag mit dem 2ten .jnlp File ist auch sehr interesant.

Lass uns wissen wenn es funktioniert. Wuerd mich sehr interessieren.


----------



## hansmueller (11. Jan 2011)

Ich habe hier den Link wo man die JNLP-Spezifikation herunterladen kann:
JSR-000056 Java Network Launching Protocol and API - Maintenance Release 3

Das gibt etwas mehr her als die normalen Tutorials.

In diesen Dokumenten sind die Punkte "4.7 Extension Resources", "6.4 Extension Download Protocol" und "6.5 Cache Management" doch recht interessant. (Habe es nur mal schnell überflogen).

Wenn ich es richtig verstehe, sollte man damit eigendlich eine JNLP-Datei-in-einer-JNLP-Datei realisieren können.

MfG
hansmueller


----------



## Iron Monkey (11. Jan 2011)

hansmueller hat gesagt.:


> Ich habe hier den Link wo man die JNLP-Spezifikation herunterladen kann:
> JSR-000056 Java Network Launching Protocol and API - Maintenance Release 3
> 
> Das gibt etwas mehr her als die normalen Tutorials.
> ...



Genauso habe ich endlich das Problem gelöst! Es funzt einwandfrei! 

Gruß
Iron Monkey


----------



## MichaelBremer (25. Feb 2011)

Hallo Iron Monkey,
was genau hast Du denn gemacht? Nur der href-Eintrag weggelassen?
Dies führt bie mir zu keiner Änderung. Nach wie vor bekomme ich keine Aktualisierung.
Oder hast Du am ein Einstellung am  Webserver geändert?

Mfg
Michael Breemr


----------

