# Ein Update System programmieren



## Shaguar (29. Nov 2007)

Hallo Leute,
bin gerade dabei für mein Programm ein Update System einzubauen. Das beim Programmstart auf nem Server schaut ob da eventuell ne neue Version vorhanden ist und dann die locale Version ggf updatet.
Habt ihr damit schon Erfahrungen gemacht die ihr vielleicht mit mir teilen würdet?
Also sowohl local als auch auf dem Server ist das Programm jeweil nur als Jar vorhanden oder zumindest gehe ich mal davon aus. Als nächstes muss er dann ja irgendwie in das Jar auf dem Server hineinschauen um dort irgendwo die Versionsnummer auszulesen als nächstes falls die Versionen unterschiedlich sind kommt dann das update. Entweder er ersetzt das komplette Jar mit dem vom Server oder schaut sich die einzelnen Dateien an und überprüft das lastModified Datum und ersetzt nur die Dateien die sich geändert haben (Allerdings werden das bei Jar Archiven vermutlich eh alle sein da das Jar Archiv ja bei jeder neueren Version neu erstellt werden muss und sich nicht nur einzelne Dateien ändern)
und jetzt kommt dann das eigentlich Hauptproblem und zwar wie ersetze ich die neu heruntergeladene Version mit der localen? Das geht ja schlecht wenn die locale Version gerade noch am laufen ist.
Wäre nett wenn mir da jemand helfen könnte, wie man sowas angeht also angefangen mit der Versions-nummer überprüfung bis hin zum ersetzen des komplettes Programms (oder auch nur einzelne Dateien)
Mfg.


----------



## AlArenal (29. Nov 2007)

Gibt es schon, nennt sich Java Webstart


----------



## lhein (29. Nov 2007)

Shaguar hat gesagt.:
			
		

> Hallo Leute,
> ...
> und jetzt kommt dann das eigentlich Hauptproblem und zwar wie ersetze ich die neu heruntergeladene Version mit der localen? Das geht ja schlecht wenn die locale Version gerade noch am laufen ist.
> ...



Da wirst Du Dir in irgendeiner Form ein Batch machen müssen, daß in einem definierten Verzeichnis nach einem Update sucht. Findet er eins, kopiert er es über deine Version rüber (ich denke wir reden hier von einer Jar) und startet danach das Programm. Wie Du sowas letztendlich realisierst bleibt Dir überlassen. Möglichkeiten gibts viele.

lr


----------



## lhein (29. Nov 2007)

AlArenal hat gesagt.:
			
		

> Gibt es schon, nennt sich Java Webstart



Das ist natürlich auch ne schönere Variante


----------



## Wildcard (29. Nov 2007)

LR hat gesagt.:
			
		

> Da wirst Du Dir in irgendeiner Form ein Batch machen müssen, daß in einem definierten Verzeichnis nach einem Update sucht.


Nö. Siehe Al....


----------



## maki (29. Nov 2007)

Was AlArenal gesagt hat!

Ausser du hast vor, ein neues, "runderes" Rad zu erfinden


----------



## Shaguar (29. Nov 2007)

Ok und muss ich um Java Webstart benutzen zu können an meinen Programm (das schon fast fertig ist) noch irgendwelche grösseren Änderungen vornehmen damit Webstart funktioniert oder geht das so quick&dirty mäßig?


----------



## Wildcard (29. Nov 2007)

Gar keine Änderungen, nur eine entsprechende jnlp schreiben.


----------



## Shaguar (29. Nov 2007)

Das wäre ja echt mal ne gediegene Sache wenn das so einfach funktioniert.
Gleich mal testen.


----------



## Shaguar (29. Nov 2007)

Also nach der Testphase habe ich da gleich mal ein Problem :
ich habe die jnlp Datei erstellt und dort den XML Code rein geschrieben.
Wenn ich jetzt die jnlp Datei ausführe dann lädt er erstmal die benötigten Dateien herunter bringt aber dann folgenden Fehler :
Fehlender signierter Eintrag in Ressource http:/............swingx.jar
Hab sie schon zweimal signieren lassen, die anderen Jars nimmt er problemlos an samt Signatur.
Andere Frage noch: Das ist ja ne externe Bib die ich benutze, momentan liegt sie auf dem Server im Unterverzeichnis lib und ich hab alle externen Bib in der XML Datei mit angegeben, kann man diese Bibs auch mit in das Haupt Jar packen damit alles eine Datei wird und ich sie nicht extra eintragen muss?


----------



## happy_robot (29. Nov 2007)

Shaguar hat gesagt.:
			
		

> Also nach der Testphase habe ich da gleich mal ein Problem :
> ich habe die jnlp Datei erstellt und dort den XML Code rein geschrieben.
> Wenn ich jetzt die jnlp Datei ausführe dann lädt er erstmal die benötigten Dateien herunter bringt aber dann folgenden Fehler :
> Fehlender signierter Eintrag in Ressource http:/............swingx.jar
> Hab sie schon zweimal signieren lassen, die anderen Jars nimmt er problemlos an samt Signatur.


Ich kann mich erinnern so einen seltsamen Fehler mal gehabt zu haben. Bin mir nicht ganz sicher, aber ich glaube es hatte damit zu tun daß bereits anderweitig signierte JARs nicht nochmals neu signiert werden dürfen. 
Bei der swingx.jar könnte man davon ausgehen daß die bereits signiert ist. Nimm sie aus dem Signiervorgang heraus. 

Das Signieren kann man übrigens sehr fein mit ANT automatisieren.


----------



## Shaguar (29. Nov 2007)

Ne wenn ich sie nicht selbst signiere kommt :
"NIcht signierte Datei fordert uneingeschränkten ZUgriff aufs System"


----------



## AlArenal (29. Nov 2007)

Schau mal, ob das originale JAR nicht bereits signiert ist und lösche ggf. zuvor die dortigen Einträge/Dateien, ehe du selbst nochmal signierst.


----------



## happy_robot (29. Nov 2007)

Shaguar hat gesagt.:
			
		

> Ne wenn ich sie nicht selbst signiere kommt :
> "NIcht signierte Datei fordert uneingeschränkten ZUgriff aufs System"


das die dateien signiert sind hat nichts damit zu tun daß nachher beim start immer noch ein dialog hochkommt der mitteilt welche rechte die anwendung fordert.

die signierung gibt dir nur die möglichkeit deine applikation gegen einen vertrauenswürdigen unabhängigen dritten zu identifizieren welcher dich legitimiert hat.


----------



## Shaguar (30. Nov 2007)

yo es ist aber kein Dialog, sondern eine Fehlermeldung und er bricht alles ab.


----------



## happy_robot (30. Nov 2007)

Shaguar hat gesagt.:
			
		

> yo es ist aber kein Dialog, sondern eine Fehlermeldung und er bricht alles ab.


schon klar, aber du wirst ,auch wenn alles erfolgreich signiert ist, beim ersten start einen dialog bekommen der erstmal anfragt ob der nutzer der app vertraut. das meinte ich damit.


----------



## AlArenal (30. Nov 2007)

Wenn er diese Abfrage bekäme und es das dann wäre, wäre er wohl schon glücklich


----------



## Shaguar (1. Dez 2007)

mal ne ganz dumme Frage, wie und womit kann ich denn die Signatur einer Datei überprüfen?
und hat von euch noch keiner Erfahrungen in dieser Richtung mit der swingx Bibliothek gemacht?


----------



## Shaguar (2. Dez 2007)

Ja also es scheint auf jeden Fall beides nicht zu funktionieren, signieren klappt nicht und unsigniert lassen auch nicht (also  meinerseits unsigniert lassen). Alle anderen externen Bibliotheken nimmt er problemlos an nur nicht diese.


----------



## Shaguar (3. Dez 2007)

> Schau mal, ob das originale JAR nicht bereits signiert ist und lösche ggf. zuvor die dortigen Einträge/Dateien, ehe du selbst nochmal signierst.


Soll ich jetzt daraus schliessen das mir hier keiner sagen kann oder will wie ich das machen kann?


----------



## Fancy (3. Dez 2007)

Shaguar hat gesagt.:
			
		

> mal ne ganz dumme Frage, wie und womit kann ich denn die Signatur einer Datei überprüfen?




```
jarsigner -verify -verbose -certs test.jar
```

Gruß,
Michael


----------



## Shaguar (3. Dez 2007)

ok danke,
also die swingx Bibliothek ist von Haus aus nicht signiert. 
Wo wir wieder beim ursprünglichen Problem wären, warum kommt der Fehler :
"Fehlender signierter Eintrag in Ressource: http://localhost/omdb/lib/swingx-0.9.1.jar"
Hier mal der Ausnahme Text :


> JNLPException[category: Download-Fehler : Exception: null : LaunchDesc: null ]
> at com.sun.javaws.security.SigningInfo.checkSigning(Unknown Source)
> at com.sun.javaws.cache.DownloadProtocol$RetrieveAction.actionDownload(Unknown Source)
> at com.sun.javaws.cache.DownloadProtocol.doDownload(Unknown Source)
> ...


und hier der Inhalt der JNLP Datei


> <?xml version="1.0" encoding="utf-8"?>
> <jnlp
> spec="1.0+"
> codebase="http://localhost/omdb"
> ...


----------



## Wildcard (4. Dez 2007)

Die musst du auch signieren.


----------



## Shaguar (4. Dez 2007)

watt wie wo wer?
Welche meinst du?


----------



## Wildcard (4. Dez 2007)

swingx-0.9.1.jar


----------



## Shaguar (4. Dez 2007)

erm, du hast dir wohl die vorherigen Posts nicht alle durchgelesen.
Die Datei ist signiert und dann kommt dieser besagte Fehler.


----------



## happy_robot (4. Dez 2007)

Shaguar hat gesagt.:
			
		

> Soll ich jetzt daraus schliessen das mir hier keiner sagen kann oder will wie ich das machen kann?


viele deiner fragen lassen sich durch einfaches googlen lösen!

etwas mehr persönlichen einsatz fänd' ich durchaus gut, statt sich hier die arbeit von anderen erledigen zu lassen!!
sorry, aber das musste jetzt sein.


----------



## Shaguar (5. Dez 2007)

Ok was bleibt mir jetzt noch übrig?
Keine SwingX Lib nehmen?
Oder ist es theoretisch möglich das ich mal ne SwingX lib teste die von jemand anderm signiert wurde?


----------

