Technologiewahl: Swing/RMI/Sockets

fapsons

Mitglied
Hallo zusammen,

ich bin dabei eine kleinere Lager-/Logistikanwendung zu entwickeln, da für die jeweilige Branche keine Standardlösung existiert.

Die Client-Anwendung würde dabei etwa auf 5 Arbeitsplatzrechnern laufen. Die Serveranwendung auf einem Server mit MS Server 2008.

Momentan kommt es mir so vor, dass die meisten Lösungen in diesem Bereich meist nur noch mit Servlets/JSP gelöst werden. Ich möchte allerdings unbedingt clientseitig mit einer Swing-Anwendung arbeiten. Auf dem Server würde ich dann gerne eine Konsolenanwendung entwickeln, die mit den Clients entweder über RMI oder Sockets kommuniziert. Diese Anwendung hätte dann Zugriff zur MySQL-Datenbank, die auf derselben Maschine laufen würde.

Klingt diese Idee für euch völlig unvernünftig? Der Auftraggeber möchte ungern eine Webanwendung nutzen. Ich selber fühle mich in Swing auch wohler und habe das Gefühl hier deutlich schneller voran zu kommen.

Habt ihr Erfahrungen gemacht mit der obigen Konfiguration? Wie stabil laufen Serveranwendungen in JAva?

Vielen Dank für eure Hilfe!!
 
T

tuxedo

Gast
Man muss ja nicht alles ins Web verlagern, und man muss ja eine Anwendung nicht auf ein einziges Userinterface festzurren. Bin auch kein Freund von "Webanwendung als Ersatz für _jede Art von_ Desktopanwendung")

Je nach Aufwand und Größe des Projekts lohnt es sich vielleicht für die Serverseite OSGI (Apache Felix?) und auf Clientseite eine RCP Anwendung (Netbeans RCP ist Swing...) zu verwenden. Dann hat man immerhin ein leicht zu erweiterndes bzw. zu wartendes Framework.

Gruß
Alex
 

fapsons

Mitglied
Danke für den Tipp. Apache Felix klingt auf jeden Fall schon mal interessant!

Mit welcher Technologie würdest du dann die Kommunikation zwischen Server und Client gestalten? RMI, Sockets, oder noch etwas anderes?
 
T

tuxedo

Gast
Für's lokale LAN ist RMI schonmal nicht verkehrt. Allerdings gibt's hierfür eine Alternative (*aufMeineSignaturSchiel*).

Von Hand (sprich: Sockets) würde ich das nicht basteln. Wenn du nicht zwingend ein eigenes Protokoll brauchst, nimm was schon da ist (RPC als RMI). Ansonsten evtl. mal Apache MINA oder JBoss Netty anschauen.

Letzten endes hängt die Wahl vom Einsatzgebiet ab. Aber dazu hast du dich ja noch nicht sehr geäußert.

- Alex
 

Kr0e

Gesperrter Benutzer
Um vlt. noch die bisher sehr vollständige Aufzählung noch um eins zu erweitern: Mit Java7 kam AIO. Asynchronous I/O. Damit ist NIO quasi abgelöst und endlich kommt ein Threading-Modell direkt mit. Damit könnte man es wagen, sich nochmal mit der low-level Ebene zu beschäftigen. Ich persönlich benutze seit dem Release keine Netzwerkframeworks mehr, sofern ich Java7 benutzen kann. Die ganze unnötige Komplexität von NIO ist damit endlich unnötig geworden und Performancemäßig gewinnst du auch noch ein paar Prozenz, da nun beim Lesen/Schreiben kein Thread-Kontextwechsel mehr stattfindet. Aber klar, wenns schnell gehen soll ist das ein blöder Rat :p

Gruß,
Chris
 

homer65

Top Contributor
Man kann auch Sockets nutzen.
Dazu braucht man kein eigenes Protokol zu implementieren,
da man per Socket auch Objekte übertragen kann.
Habe das schon öfter programmiert.
Wir haben hier sogar eine derartige Anwendung, die seit Jahren stabil in Produktion läuft.
 

Kr0e

Gesperrter Benutzer
NIO , AIO arbeiten beide prinzipiell mit Sockets, nur sie werden dort anders intern verwendet. Mit java.net.Socket würde ich hingegen nur noch arbeiten, wenn es nicht auf Performance/Skalierbarkein ankommt, wegen der Ein-Thread-Client Geschichte... Der Vorteil von NIO/AIO ist, dass dort stets die beste Methode des jeweligen OS gewählt wird.

Beispiel (in C):

Unter Linux ist poll() epoll() unschlagbar... Unter Windows ist die select() Methode aber totaler Murks. Unter Windows sollte man immer WSA benutzen... Das sind alles Techniken, um den Zustand von Sockets zu überwachen. Ein Socket allein ist erstmal gar nichts besonderes. Aber das handeln von sehr vielen Sockets ist das, wo es haarig werden kann... Und AIO geht jetzt sogar den besten Weg: Es lässt das Betriebssystem das komplett selbst regeln. Genannt Asynchronous IO. Man sagt quasi dem OS "Hier, bitte lies mal was von dem Socket und ruf ein Callback mit den Daten auf, wenn du soweit bist". Da hier OS-intern endlos viel optimiert werden kann, vorallem was Threading angeht, ist AIO klar zu bevorzugen. Und genau diese Lücke wurde imt JDK7 endlich geschlossen.
 
Zuletzt bearbeitet:
T

tuxedo

Gast
Da du ja immer wieder AIO "promotest": hast du auch nen Link zu einer brauchbaren Anleitung wie man AIO (ohne Netty...plains java 7 sdk ...) benutzt?
 

Kr0e

Gesperrter Benutzer
Hallo,

es gab ne lange Zeit immer einen 1-stündigen Screencast dazu. Unter den Suchbegriffen "parleys grizzly aio" spuckt google bei mir als erstes ergebnis diesen link aus:

Parleys.com - Introduction to Asynchronous I/O (NIO.2) using the Grizzly Framework Presentation

Dummerweise gibt es das Video leider nicht mehr =(.

Ein anderer guter Link ist der hier:

An NIO.2 primer, Part 1: The asynchronous channel APIs

Ist zwar nicht so umfangreich wie der Screencast, aber damit kann man alles machen, was mit NIO 1.4 (auf die Sockets bezogen) möglich ist. An und für sich ist der ganze Netzwerkkram mit AIO sehr einfach geworden, verlgeichbar mit einem simplen NIO Framework. Unterschied ist natürlich dass so Sachen wie Handler-Chains oder so selbst erstellt werden müssen.

Und wie schon erwähnt: Die Performance ist etwas höher, einfach weil die CPU nicht zwischen den Aktionen "Lesbar - Gelesen" wechseln muss. Sprich wenn ein Channel lesbar ist, dann wird im selben Thread direkt gelesen und das sogar unter Umständen häufiger, wodurch unter Hochlast ein effizienteres Threadingmodel zur Verfügung steht. Sowas mit NIO1.4 zu machen geht halt nicht, weil dort nicht derart Hardware das Lesen geschieht sondern selbst ausgeführt werden muss...

Solche und noch andere Informationen wurden halt durch den SCreencast klar. Dort wurde viel zu der Technik erklärt und warum es NIO überlegen ist...

PS:

Das größte Problem ist natürlich fehlende Tuts. Das ist aber mit jeder neuen Technik so, überhaupt ist ja JDK7 noch nicht wirklich akzeptiert worden. Aber ist ja klar, dass Betreiber von NIO Frameworks die Entwicklung erstmal hinaus zögern und einen Umstieg wegen ein paar Prozent lohnt auch nicht wirlich... Wenn man halt von vorne anfängt, würde ich nicht mehr auf NIO setzen...
 
Zuletzt bearbeitet:
T

tuxedo

Gast
Der erste Link geht bei mir. Video kommt auch.

Mit der ganzen Versionierungssache: Worin liegt jetzt der Unterschied zwischen NIO 1.4 und AIO?
 

Kr0e

Gesperrter Benutzer
Oh man, eben hats echt nicht geklappt :D Vermutlcih genau den Moment abgepasst wo es nicht geht =(.

Was meinst du mit Versionisierungssache ?
 
T

tuxedo

Gast
IO
NIO
NIO.2
AIO
NIO 1.4
...

Merkst du was? Ich kann nur IO und NIO Unterscheiden, und weiß, dass NIO.2 (so wird's auch im Screencast genannt) das neue NIO ist, das mit Java7 kommt/gekommen ist und AIO beherrscht.

Mit NIO 1.4 kann ich gar nix anfangen.

[EDIT]Hier mal ein Bich zum Thema: Pro Java 7 NIO.2 - Anghel Leonard - Google Bücher

Für alle anderen die auf der Suche nach Infos sind:

Mit "AsynchronousServerSocketChannel" liefert google recht viel brauchbares was in die richtige Richtung zu gehen scheint.
[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:

Kr0e

Gesperrter Benutzer
Achso, das meinst du.

Nun gut NIO ist der Überbegriff für alles was nicht mit java.io.* zu tun hat. Also grundsätzlich Channels, Buffers, Charsets.

NIO1.4 ist der Stand von Java 1.4, also "das NIO" was dir bekannt ist. Mit JDK7 kam nun NIO 2.0. Was eine Art Ergänzung ist für NIO allgemein. Die Packages heißen nämlich auch weiterhin einfach nur java.nio.* und nicht java.nio2.* oder so. Unter den Neuerungen befinden sich viele weitere außer bloß
AIO:

AIO ist der Überbegriff für Asynchronous I/O und beschreibt die grundlegende Zugriffstechnik auf Daten. Unter Windows heißt das glaub ich Completion-Ports und unter Linux Overlapping IO. Damit ist gemeint, dass man proaktiv an die Sache ran geht und quasi "anfängt" zu Lesen, obwohl noch gar nichts da ist evt. und ein Callback bereitstellt, welches dann auf die Fertigstellung des asynchronen Vorgangs reagiert.
NIO1.4, also die "klassische" NIO Variante geht reaktiv an die Sache ran mit Selektoren und reagiert, nachdem ein Ereignis ausgelöst wurde.

NIO 2.0 bringt also Support für AIO und erweitert die Channels nun um die asynchrone Vorgehensweise. (unter anderem)


EDIT:

Ja sorry, AsynchronousChannel etc sind wirklcih bessere Suchbegriffe bei Google als Java AIO. Hier in der UNI sagt jeder immer AIO und redet eigentlcih von den Asynchronous Channels...
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
MaxG. Website in Swing öffnen Netzwerkprogrammierung 4
I Swing hängt sich auf bei Verbindung zum Server Netzwerkprogrammierung 3
R Client (Swing) Server(Tomcat?) Application Netzwerkprogrammierung 5
E Java Server via Swing offline setzen Netzwerkprogrammierung 4
S RMI/Swing Problem Netzwerkprogrammierung 3
Jannn Socket Sockets an ein anderes Gerät weiterreichen? Netzwerkprogrammierung 8
JaXnPriVate Java HTTPS Server (Secure Sockets) Netzwerkprogrammierung 15
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
E Socket Parameter über Sockets übergeben und auslesen ! Netzwerkprogrammierung 5
D Socket Verwirrung bei Sockets Netzwerkprogrammierung 1
E Mehrere Sockets Netzwerkprogrammierung 2
N Fragen zu Sockets Client Netzwerkprogrammierung 3
A Sockets Serialisierung Netzwerkprogrammierung 1
K Threads closen und Sockets schliessen Netzwerkprogrammierung 5
H Sockets oder HTTP- Methoden? Netzwerkprogrammierung 3
T Socket Bidirektionale Verbindung mit Sockets Netzwerkprogrammierung 8
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
C Socket Datagram-Sockets mit integrierter Message Queue? Netzwerkprogrammierung 2
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
B Sockets, Threads & Plugins Netzwerkprogrammierung 7
T Verbindungsversuche über TCP Sockets von mehreren Threads führt zu Serverabsturz Netzwerkprogrammierung 2
D Mehrere Clients über Java-Sockets Netzwerkprogrammierung 13
F FTP Client mit Sockets - wann sagt der Server nichts mehr? Netzwerkprogrammierung 7
U Socket Abhören eines Sockets/Ports in extra Thread Netzwerkprogrammierung 8
M Socket Sockets Grundlage Netzwerkprogrammierung 25
I Socket HTTP Nachrichten über Sockets verschicken Netzwerkprogrammierung 2
D Socket Raw Sockets mit java.net.*? Bsp ICMP Netzwerkprogrammierung 7
H Komprimierte Sockets Netzwerkprogrammierung 4
V Verbindung zweier Rechner über das Internet mit Sockets Netzwerkprogrammierung 8
L Sockets übergeben Netzwerkprogrammierung 4
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
B Socket Was muss man bei Sockets beachten? Netzwerkprogrammierung 10
N Socket Sockets und Events Netzwerkprogrammierung 11
A Programm umschreiben von Pipes auf Sockets Netzwerkprogrammierung 12
B Paralleler Dateitransfer: Ein Client - Mehrere Sockets? Wie connecten? Netzwerkprogrammierung 16
D RMI oder Sockets Netzwerkprogrammierung 4
P Sockets +Port Forwarding = Chaos Netzwerkprogrammierung 4
clupus Exception beim Schließen eines Sockets Netzwerkprogrammierung 6
Q Thread und Sockets... Netzwerkprogrammierung 2
G Sockets und HTTP: Ende des Datenempfangs erkennen Netzwerkprogrammierung 3
J Array oder Object über Sockets Netzwerkprogrammierung 8
O Sockets -- Einsieg Netzwerkprogrammierung 3
S Sockets und gzip Netzwerkprogrammierung 8
B Nachricht über Sockets kommt nicht an Netzwerkprogrammierung 8
data89 Sockets: ein alter Hut - für Euch - für mich nicht! Netzwerkprogrammierung 10
S Wiedereinmal Sockets ;-) Netzwerkprogrammierung 15
J Ascii / Unicode bei Sockets? Netzwerkprogrammierung 2
G Datagram-Sockets für UDP-Kommunikation Netzwerkprogrammierung 2
K "Ende eines Sockets" Netzwerkprogrammierung 9
A Sockets Netzwerkprogrammierung 10
feuervogel Sockets - Lokalen Port aber nicht IP bestimmen Netzwerkprogrammierung 3
C Einfacher Filedownload mit Sockets geht nicht für pdffiles Netzwerkprogrammierung 16
E Sockets, readLine() Netzwerkprogrammierung 7
M Sockets und InputStream Netzwerkprogrammierung 8
G Verbindung über Sockets Netzwerkprogrammierung 2
S zip-files über sockets übertragen Netzwerkprogrammierung 11
G immer wieder gleiche Sockets Netzwerkprogrammierung 2
V Suche Alternative zu Sockets Netzwerkprogrammierung 3
E Problem bei Sockets/InputStream über externe Klasse Netzwerkprogrammierung 5
A Datenverlust (zuviele Daten!) über Sockets Netzwerkprogrammierung 4
AlClemento Sockets -> BufferedReader Problem Netzwerkprogrammierung 2
F Problem mit Threads und Sockets Netzwerkprogrammierung 3
B Übertragung via Sockets Netzwerkprogrammierung 12
C Dateien über Sockets versenden? Netzwerkprogrammierung 10
T Sockets Verständnisfrage: abwechelnd lesen-schreiben Netzwerkprogrammierung 4
S Habe ein Problem mit Sockets -> Client Server Netzwerkprogrammierung 2
G Strings über Sockets senden Netzwerkprogrammierung 5
P Probleme mit einem Array aus Sockets Netzwerkprogrammierung 2
Y buch: Netwerprogrammierung und Sockets Netzwerkprogrammierung 2
B Eigenes Protokoll über Sockets verschicken Netzwerkprogrammierung 4
P Welche Art von Sockets für ein Spiel? Netzwerkprogrammierung 3
C Sockets über Internet Netzwerkprogrammierung 10
K Applet - Servlet Kommunikation ohne Sockets Netzwerkprogrammierung 5
S Objekte zwischen Client und Server über Sockets senden Netzwerkprogrammierung 2
Z chat: wann http und wann sockets verwenden? Netzwerkprogrammierung 11
D Java Sockets Probs Netzwerkprogrammierung 4
N Verarbeitung nach Weiterleitung in Sockets Netzwerkprogrammierung 2
A Serialisierung über Sockets möglich? Netzwerkprogrammierung 3
M sockets (security) Netzwerkprogrammierung 2
C IRC CHAT auslesen -> Sockets/input und output Streams Netzwerkprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben