Desktop-Applikation schreiben, wie daten persistent?

OnDemand

Top Contributor
Hallo,

muss eine kleine Warenwirtschaft schreiben, welche rein vorsorglich schon mal als Client Server Applikation geschrieben wird .
Angenommen ich habe das Programm fertig mit einer Mysql auf dem lokalen pc (kann ja dann auch später innerhalb des Netzwerkes aufm Server laufen);
1. Frage:
Wie rolle ich das Programm aus? als ausführbare jar? (Find ich immer kritisch, wegen upps Datei gelöscht) Wir macht ihr das? DB muss ja lokal mit-installiert werden

2. Frage:
Wie rollt ihr Updates aus?

Freue mich auf eure praktischen Erfahrungen
 

mrBrown

Super-Moderator
Mitarbeiter
Wie rolle ich das Programm aus? als ausführbare jar? (Find ich immer kritisch, wegen upps Datei gelöscht) Wir macht ihr das?
Java Web Start gäbe es noch, aber was spricht gegen direkt die jar? Wer das Programm löscht, besorgt es sich halt selbst...(Ist PC nutzen nicht schon zu gefährlich, wegen "ups, mit'm Hammer draufgeschlagen"? ;))

DB muss ja lokal mit-installiert werden
Nimm eine Datenbank, die ohne Server auskommt (HSQLDB, H2, ...), dann muss auch nichts installiert werden.

Wie rollt ihr Updates aus?
Gibt entsprechenden Frameworks dazu, einfach mal googlen
 

Thallius

Top Contributor
Also wenn du eine lokale DB benutzen willst, dann solltest du sqlite nehmen. Da muss nichts installiert werden. Da kannst Du auch problemlos die .jar ausrollen. Wenn sie einer löscht dann muss er sie sich halt neu besorgen. Aber es muss nichts installiert werden, was ich persönlich als einen der größten Vorteile von Java sehen.

Mit einer lokalen DB wird aber natürlich eine Warenwirtschaft nicht funktionieren. Du must also so oder so eine DB auf einem Server aufsetzen. Ab da beginnen die ganz großen Problem. Nehmen wir an Client A ruft die Daten des Kunden X ab und zeigt sie in einem Fenster an, Client B ruft die gleiche Daten ab und zeigt sie ebenfalls in einem Fenster an. Nun ändert Client A die Daten und speichert si e ab, dann bekommt Client B das erstmal nicht mit und zeigt weiterhin germütlich die falschen Werte an. Ändert dieser jetzt die Daten auch und speichert sie ab, dann sind die Daten bei Client A hinfällig...
Du erkennst das Problem?

Updates liegen ganz einfach auf dem Server. Der Client frqagt per HTTP an einen Webservice ob es eine neue Version gibt und wenn ja, dann wird diese geladen. Das Ganze muss natürlich komplett abgesichert werden um sicherzustellen, dass das was auf dem Server liegt auch beim Client ankommt. Ich persöhnlich benutze dafür eine asymetrische AES Verschlüsselung. Der Client schickt dem Server einen mit dem public key verschlüsselten Salt. Der Server bildet aus dem Salt und dem Inhalt der Update-Datei einen Hash und schickt diesen zurück. Der Client empfängt die Update Datei zusammen mit diesem Hash und bildet seinerseits seinen eigenen Hash aus seinem Salt und dem Inhalt der Update-Datei. Sind beide Hash gleich, ist die Update-Datei unmanipuliert beim Client angekommen.

Gruß

Claus
 

mrBrown

Super-Moderator
Mitarbeiter
Updates liegen ganz einfach auf dem Server. Der Client frqagt per HTTP an einen Webservice ob es eine neue Version gibt und wenn ja, dann wird diese geladen. Das Ganze muss natürlich komplett abgesichert werden um sicherzustellen, dass das was auf dem Server liegt auch beim Client ankommt. Ich persöhnlich benutze dafür eine asymetrische AES Verschlüsselung. Der Client schickt dem Server einen mit dem public key verschlüsselten Salt. Der Server bildet aus dem Salt und dem Inhalt der Update-Datei einen Hash und schickt diesen zurück. Der Client empfängt die Update Datei zusammen mit diesem Hash und bildet seinerseits seinen eigenen Hash aus seinem Salt und dem Inhalt der Update-Datei. Sind beide Hash gleich, ist die Update-Datei unmanipuliert beim Client angekommen.
Oder einfach: HTTPS nutzen?
 

Tobse

Top Contributor
Ich stimme @Thallius bezgl. der funktionalität zu: Das wird nicht einfach; die Updates per Versionsvergleich vom Server zu ziehen ist auch IMO der beste Weg.

Wenn du es richtig sauber angehen willst, setzt du einen Server auf und definierst Schnittstellen dafür. Das kann HTTP+REST (mit Json oder XML, etc) sein, oder SOAP, oder, oder, such dir was aus. Ich persönlich bin ein Fan von HTTP+REST mit JSON; damit erreicht man eine sehr hohe Kompatibilität; wenn später andere Anwendungen an das System angebunden werden sollen, ist das dann einfach.

Wenn deine Schnittstellen stehen, kannst du den Server programmieren, der die Schnittstellen bereitstellt. Und danach (oder parallel, je nachdem wieviel Manpower du abstellen kannst) den Client, der Sie nutzt, um mit dem Server zu kommunizieren. Auf dem Client speicherst du dann nurnoch solche Sachen wie lokale Einstellungen und ggf. ein Eingeloggt-Bleiben-Token.

Siehe dazu:
REST: https://de.wikipedia.org/wiki/Representational_State_Transfer
Design und Dokumentation der Schnittstellen: http://raml.org (benutze ich häufiger)
Und hier nochmal REST mit HTTP: http://www.restapitutorial.com

---

Offtopic:

Das setzte ich sowieso vorraus. Aber auch da bist du nicht vor einem MITM Angriff sicher.
Das bist du mit einem Custom Scheme erst recht nicht. AES ist symmetrisch. Keine Ahnung, was du da dazugebastelt hast, dass es jetzt asymmetrisch ist; aber die Wahrscheinlichkeit, dass ein einzelner da einen besseren Job als die TLS Autoren und die Crypto-Community machen kann, halte ich für verschwindend gering ;)
Wenn du auf Nummer 100%-Sicher gehen willst, pinne dein Server-Zertifikat an den Client. Dann muss ein Angreifer deinen Private-Key bekommen, um ein MITM machen zu können. Stichwort "certificate pinning"
 

Thallius

Top Contributor
Offtopic:


Das bist du mit einem Custom Scheme erst recht nicht. AES ist symmetrisch. Keine Ahnung, was du da dazugebastelt hast, dass es jetzt asymmetrisch ist; aber die Wahrscheinlichkeit, dass ein einzelner da einen besseren Job als die TLS Autoren und die Crypto-Community machen kann, halte ich für verschwindend gering ;)

Ups sorry, war wohl noch bischen früh am Morgen. Meinte natürlich RSA und ich habe mir das Ganze gerade noch einmal angesehen (Ist schon länger her das ich das geschrieben habe) Es funktioniert noch wesentlich komplexer da ich damals für den Auftraggeber zu 100% sicherstellen musste, dass die Datei vom Entwickelungrecher auf dem sie erstellt wurde, bis hin zum Anwender-Rechner unter keinen Umständen manipuiert werden kann. Das musste auch einschliessen, dass der Upload zum Server und natürlich ein Hack desServers selber auch abgesichert sein mussten. Aber das würde zu weit führen das hier jetzt alles aufzubröseln.

Gruß

Claus
 

OnDemand

Top Contributor
Moin, danke für eure Infos, ist aber etwas wie mit Kanonen auf Spatzen schießen :) Werd es mit einem Webservice machen, der Client prüft per Webservice ob die Lizenz noch aktuell ist und im gleichen Moment ob die Version noch neu ist.

@Thallius deine Anmerkungen mit der gleichzeitigen Datenmanipulation werde ich mit synchronized entgegenwirken und "Datensatz ist von UserXX in Bearbeitung, bitte später versuchen", das sollte reichen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Integration pay Pale in eine JavaFx Desktop Application Allgemeine Java-Themen 1
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
L Nach dem Login // Java Desktop Software Allgemeine Java-Themen 7
Neumi5694 Desktop.getDesktop().open(...); Allgemeine Java-Themen 0
R Java-Forum als Desktop-Background Allgemeine Java-Themen 4
M Desktop jar File icon Ändern? Allgemeine Java-Themen 14
D Ordner auf Desktop erstellen(Pc unabhängig) Allgemeine Java-Themen 5
M Desktop Symbole ein / ausblenden Allgemeine Java-Themen 1
G Desktop open() - Problem mit Media Player Allgemeine Java-Themen 4
I Desktop browse(URI uri) Allgemeine Java-Themen 8
N Robotklasse nur auf Desktop Allgemeine Java-Themen 2
Z Desktop anzeigen + Screenshot klappt nicht Allgemeine Java-Themen 3
R Base::Config-Fehler bei Desktop-Klasse Allgemeine Java-Themen 8
G Desktop.getDesktop() und Standardprogramme Allgemeine Java-Themen 4
KrokoDiehl Desktop.open() und warten? Allgemeine Java-Themen 3
hdi Listener für Desktop-Veränderungen Allgemeine Java-Themen 7
S (Doppel)Klick-Verhalten vom Desktop unter Java imitieren. Allgemeine Java-Themen 5
C Desktop.mail Problem. IO Exception: Failed to open. Allgemeine Java-Themen 3
T linux problem mit Desktop.getDesktop().open(..) Allgemeine Java-Themen 5
M bug? datei oeffnen nicht Desktop.open Allgemeine Java-Themen 3
M java.awt. Desktop browse lokale datei aus jar Allgemeine Java-Themen 4
V Probleme mit Desktop.open() ? Allgemeine Java-Themen 7
Daniel_L Fehler in Desktop.getDesktop().open()? Allgemeine Java-Themen 3
M Desktop mail attachments Allgemeine Java-Themen 3
D Anwendung startet im Remote Desktop nicht Allgemeine Java-Themen 14
M SMS aus Desktop-Anwendung verschicken Allgemeine Java-Themen 8
Daniel_L Desktop-Api: Problem mit open() und Umlauten Allgemeine Java-Themen 5
V Probleme mit Desktop.open() ? Allgemeine Java-Themen 4
W Anteil Desktop-PCs mit Java Allgemeine Java-Themen 12
R Jar-File vom Linux Desktop durch ancklicken starten? Allgemeine Java-Themen 5
M Klasse Desktop geht nicht mehr (EXCEPTION_ACCESS_VIOLATION) Allgemeine Java-Themen 9
H Mit Java Desktop abmessungen height/width abfragen Allgemeine Java-Themen 20
M eigenen Desktop erzeugen Allgemeine Java-Themen 3
ARadauer Java Desktop Framework Allgemeine Java-Themen 3
A State-of-the-Art Techniken für Desktop Programme ? Allgemeine Java-Themen 3
F Desktop Shortcut (*.lnk) erstellen? Allgemeine Java-Themen 11
M Desktop-Informationen Allgemeine Java-Themen 2
G Desktop-Icon erstellen? Allgemeine Java-Themen 5
G Programmpfad auslesen und Desktop-Icon erstellen? Allgemeine Java-Themen 3
G Java Fenster öffnen nach Iconklick(desktop) (helppls) Allgemeine Java-Themen 3
S Film vom Desktop erstellen Allgemeine Java-Themen 6
K Unterschied Core Java / Desktop Allgemeine Java-Themen 12
F Mehrere Versionen von Java auf einem W2K Desktop Allgemeine Java-Themen 3
B desktop auf monitor erweitern Allgemeine Java-Themen 22
D desktop nach ändern des hintergrunds aktualisieren Allgemeine Java-Themen 3
O Maven ein externes jar laden ohne die Applikation neu zu kompilieren Allgemeine Java-Themen 4
OnDemand Anzeigen was eine Applikation macht Allgemeine Java-Themen 1
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
O Java-Applikation tut in Netbeans, als JAR nicht, wegen Pfadangaben einer benötigten Datei Allgemeine Java-Themen 8
L Java Applikation Web Anbindung Allgemeine Java-Themen 2
H OOP Setting(config) für Applikation sicheren? Allgemeine Java-Themen 9
L Übergabe an eine eher einfache Java- Applikation wegen Kündigung Allgemeine Java-Themen 1
B Applikation ohne (direkt)Java installiert zu haben auszuführen Allgemeine Java-Themen 8
T Datei öffnen mit eigener Applikation.exe Allgemeine Java-Themen 4
D Methoden Java Applikation Die System Auslastung optimieren ? Allgemeine Java-Themen 7
P Java Applikation mit Webinterface Allgemeine Java-Themen 1
N Objekte an eine andere Applikation übergeben Allgemeine Java-Themen 3
B Best Practice Start-Applikation mit Logger? Allgemeine Java-Themen 3
J java-applikation-1.jar soll java-applikation-2 aufrufen.jar Allgemeine Java-Themen 5
O Interpreter-Fehler WebStart-Applikation startet nicht Allgemeine Java-Themen 5
S Java Applikation zu autostart hinzufügen Allgemeine Java-Themen 7
B JUnit und mehrere Instanzen der selben Applikation Allgemeine Java-Themen 4
S Perfomance Problem mit Java Applikation Allgemeine Java-Themen 4
MrGe Java-Applikation und OpenOffice/UNO Allgemeine Java-Themen 2
F Parameter für Java Applikation per xml ins Meta-inf speichern? Allgemeine Java-Themen 3
C Java Applikation Benutzerkontrolle Allgemeine Java-Themen 3
S Profiler-Funktionen in eigener Applikation nutzen..? Allgemeine Java-Themen 5
J Aus Applikation ein Applet machen Allgemeine Java-Themen 5
S Java Webstart Applikation in den Autostart? Allgemeine Java-Themen 3
T Gewährleisten das Applikation läuft!? Allgemeine Java-Themen 2
X Aus Java Applikation externes Programm starten Allgemeine Java-Themen 3
R JAR-Update in laufender Applikation Allgemeine Java-Themen 9
ChackZz Applikation zu Applet umbauen Allgemeine Java-Themen 13
$ Applikation(Left for Dead) mit Parametern Starten Allgemeine Java-Themen 5
D Jython in Applikation einbinden Allgemeine Java-Themen 3
O Applikation über java steuern Allgemeine Java-Themen 11
T Applikation für RGB LED Matrix Allgemeine Java-Themen 7
PAX Applikation sich selbst neu starten lassen Allgemeine Java-Themen 27
Q daten propertie datei aus anderer applikation Allgemeine Java-Themen 6
M Beenden einer externen Java-Applikation Allgemeine Java-Themen 11
H Php Script aus Java Applikation starten Allgemeine Java-Themen 2
B Browser link aus Java-Applikation öffnen Allgemeine Java-Themen 2
A Setup von einer Java-Applikation starten Allgemeine Java-Themen 4
B Java Applikation incl. dll unter Linux ausführen? Allgemeine Java-Themen 11
M Nur eine laufende Applikation erlauben? Allgemeine Java-Themen 12
M Textfenster von fremder Applikation lesen Allgemeine Java-Themen 5
M wav in Applikation abspielen Allgemeine Java-Themen 2
mabu MediaCenter Applikation in Java realistisch oder nicht? Allgemeine Java-Themen 11
J Merkwürdiger Fehler: Applikation hängt einfach, Quartz-bug? Allgemeine Java-Themen 6
E NT-Anmeldung in Java Client-Applikation nutzen. JAAS ? Allgemeine Java-Themen 5
P DB-Applikation mit GWT-Frontend Allgemeine Java-Themen 3
D Startverhalten Java-Applikation Allgemeine Java-Themen 7
A Java-Applikation auf einem anderen Rechner starten Allgemeine Java-Themen 17
D Plattformunabhängiges ausführbare Java-Applikation ohne jar Allgemeine Java-Themen 5
G überpüfen ob bereits instanz von java applikation läuft Allgemeine Java-Themen 4
L Ressourcen Java Applikation Allgemeine Java-Themen 4
D Name der Java-Applikation Allgemeine Java-Themen 2
G Java Applikation stürzt ab :!: Allgemeine Java-Themen 5
I JAR aus Applikation in neuer VM ausführen Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben