Wie mache ich meine Java Swing-Anwendung zu einer Client-Server-Anwendung?

8

Ich habe eine Java Swing Anwendung gemacht. Jetzt möchte ich es zu einer Client-Server-Anwendung machen. Alle Clients sollten benachrichtigt werden, wenn sich die Daten auf dem Server ändern. Daher suche ich nicht nach einem Webdienst. Die Client-Server-Anwendung wird in einem einzigen LAN ausgeführt, es ist eine Geschäftsanwendung. Der Server enthält eine Datenbank, JavaDB.

Mit welcher Technologie und Bibliothek ist am einfachsten anzufangen? Sollte ich es von Grund auf mit Sockets implementieren, oder sollte ich Java RMI oder vielleicht JMS verwenden? Oder gibt es andere Alternativen, mit denen man leichter beginnen kann?

Und gibt es irgendeine Serverbibliothek, die ich benutzen sollte? Ist Jetty eine Alternative?

    
Jonas 06.05.2010, 19:19
quelle

5 Antworten

2

Mina ist eine gute Wahl als Netzwerkanwendungs-Framework zum Erstellen eines einfachen Servers für diesen Zweck - es ist eine viel bessere Option als rohe Sockets zu verwenden.

Ссылка

Wenn Sie wirklich einen Anwendungsserver benötigen, können Sie sich JBoss ansehen. Es bietet auch eine Remoting-Komponente (als Alternative zu etwas wie Mina):

Ссылка

Sie werden wahrscheinlich nicht viel Enterprise Java Beans brauchen. In den meisten Fällen ist ein einfaches POJO -basiertes Framework mehr als ausreichend - Sie können das Ganze mit einem Framework für die Abhängigkeitsinjektion verknüpfen, beispielsweise Guice :

Ссылка

oder Frühling . Halten Sie es einfach, verwenden Sie keinen J2EE-Server, es sei denn, Sie müssen es wirklich tun. Hoffe das hilft.

    
Jon 06.05.2010, 19:38
quelle
3

Da Sie die Anwendung bereits haben, ist es vielleicht am einfachsten, die Schnittstelle zu identifizieren, die Sie zwischen dem Client und dem Server benötigen, und vor allem Ihre Anwendung zu refaktorisieren, um diese Schnittstelle für die Kommunikation zwischen dem Back-End zu verwenden / Front-End innerhalb desselben Prozesses .

Dann können Sie beginnen, das auseinander zu teilen. Eine einfache Lösung wäre, diese mit RMI zu trennen (da Sie Java-Objekte sprechen und Java-Methodenaufrufe haben). Spring enthält nützliche Tools zur Vereinfachung / Automatisierung der RMI-Belichtung von Schnittstellen.

Für die Benachrichtigungsanforderung würde ein einfaches UDP Multicast (oder Broadcast) ausreichen.

Beachten Sie, dass Sie, sobald Sie Ihre Anwendung aufteilen, Probleme haben. Aufrechterhaltung konsistenter Ansichten von Daten, Verwaltung rechtzeitiger Aktualisierungen, Behandlung von Fällen, wenn der Server ausgefallen ist, mögliche Ladeprobleme bei vielen Clients usw. In gewisser Weise ist die Aufteilung der Anwendung in einen Client und Server nur der Beginn einer neuen Architektur Prozess.

    
Brian Agnew 06.05.2010 19:41
quelle
2

Dies ist viel von dem, was J2EE tut, aber es ist eine ganz neue Lernkurve, weil sie viele der Probleme, mit denen Sie konfrontiert werden, bereits gelöst haben und viele andere vielleicht nicht und daher viele neue Technologien hinzufügen.

>

Aber im Grunde genommen beantwortet J2EE genau diese Frage.

    
Bill K 06.05.2010 19:25
quelle
1

Ich habe in einem Projekt wie diesem gearbeitet. Wir haben Client Side Swing und Server Seite mit J2EE implementiert. Wir verwendeten EJB, Stateless Bohnen und Message Driven Beans. Auch ich war in einem Gerät Tracking-Management-Projekt. Unsere Kunden waren Trucks + Swing Benutzer und Wir haben Servets + TCP / UDP, Apache Mina Framework verwendet, um Verbindungen zu verwalten und aufrechtzuerhalten.

    
mcaaltuntas 06.05.2010 19:35
quelle
0

Ich arbeite seit fast 3 Jahren in Java Swing Client / Server Anwendungen. Ich würde vorschlagen, dass Sie sich für RMI / EJBs entscheiden. Die erste von uns entwickelte Anwendung bestand darin, RMI / EJB für die Client-Server-Kommunikation zu verwenden, wobei WebLogic der Server ist.

Aber wir fanden später heraus, dass es viele "browserähnliche" Features gibt, die in die Anwendung aufgenommen werden können, wie zB Session-Timeout usw. Also haben wir das BrightSide Framework, das die RMI-Aufrufe über HTTP umschließt. Eine weitere Verbesserung ist, dass wir Weblogic durch den Open Source JBoss Server ersetzt haben.

Das Wrapping von Anrufen mit HTTP wird sehr praktisch und Sie können Ihre Swing-Anwendungen wirklich reichhaltig machen. Später, wenn die Situation es erfordert, dass Sie eine Website strikt verwenden, können Sie Ihren Swing mithilfe von jnlp bereitstellen.

Ich hoffe, das hat geholfen.

    
bragboy 06.05.2010 21:00
quelle