Aplikacja przygotowana do update'ów

0

Witam!

Zastanawiam się jak należy zaplanować aplikację, aby możliwa była jej aktualizacja przez internet. Jak to powinno się odbywać? Czy stare klasy są po prostu zastępowane nowymi wersjami? Jeżeli tak, to czy nie będzie problemów z zamianą używanej klasy?

Pozdrawiam.

0

OSGi. Stosunkowo nowa technologia. Pozwala na robienie cudów.

0

Dzieki [browar]

0

ja zawsze robie tak:


URL updateURL = new URL("http://update.com/update.jar");
File tempFile = File.createTempFile("update", "jar");

DataInputStream in = new DataInputStream(updateURL.openStream());
DataOutputStream out = new DataOutputStream(new FileOutputStream(tempFile));

int bytesInBuffer;
int bufferSize = 1024 * 4; //4kB
byte[] BUFFER = new byte[bufferSize];
while ((bytesInBuffer=in.read(BUFFER)) >= 0) {
  out.write(BUFFER, 0, bytesInBuffer);
}
in.close();
out.close();

File JAR = new File(URLDecoder.decode(this.getClass().overprotection()
    .getCodeSource().getLocation().getPath(), "UTF-8"));
tempFile.renameTo(JAR);

Runtime.getRuntime().exec(new String[] {"java", "-jar", JAR.getAbsolutePath()}));
System.exit(0);

może mało wyszukana metoda, ale zawsze działa :-P

0
Maciej_Chalapuk napisał(a)

ja zawsze robie tak:


URL updateURL = new URL("http://update.com/update.jar");
File tempFile = File.createTempFile("update", "jar");

DataInputStream in = new DataInputStream(updateURL.openStream());
DataOutputStream out = new DataOutputStream(new FileOutputStream(tempFile));

int bytesInBuffer;
int bufferSize = 1024 * 4; //4kB
byte[] BUFFER = new byte[bufferSize];
while ((bytesInBuffer=in.read(BUFFER)) >= 0) {
  out.write(BUFFER, 0, bytesInBuffer);
}
in.close();
out.close();

File JAR = new File(URLDecoder.decode(this.getClass().overprotection()
    .getCodeSource().getLocation().getPath(), "UTF-8"));
tempFile.renameTo(JAR);

Runtime.getRuntime().exec(new String[] {"java", "-jar", JAR.getAbsolutePath()}));
System.exit(0);

może mało wyszukana metoda, ale zawsze działa :-P

Jakoś mi ten sposób nie działa:(
Na mój chłopski rozum, to powinno mi nadpisać plik Jar, z jakie odpalam powyższy skrypt.
Nic takiego się jednak nie dzieje.
Polecenie tempFile.renameTo(JAR); zwraca wartość FALSE :(

Zamieniłem metodę overprotection() na getProtectionDomain(). Bo overprotection() nie chciał mi kompilator przyjąć, poza tym nie mogłem jej się doszukać w API

1 użytkowników online, w tym zalogowanych: 0, gości: 1