Architektur-Frage

timekeeper

Grünschnabel
Hallo zusammen,
ich möchte eine Client-Server-Applikation erstellen mit folgenden Architektur-Randbedingungen

- Entwicklungsumgebung Netbeans (6.9.1)
- Server: Apache + Tomcat + Spring + Hibernate
- Client: Java Fat Client

Nun meine Fragen:
- Wie sinnvoll ist diese Architektur ?
- Hat jemand Erfahrungen damit ?
- Gibt es irgendwelche Tutorials oder Dokumentationen hierfür ?
- Wie kommuniziert der Client mit der Server-Applikation, wie erfolgt der connect?

Danke für Eure Mühe
 
Hallo,

Eine Architektur muss ihren Anforderungen entsprechen... du hast nur gesagt was du verwenden willst aber nicht wozu, ohne etwas mehr Background zum Wesen deiner Anwendung wird man dir da schlecht Empfehlungen geben können.
Nun meine Fragen:
- Wie sinnvoll ist diese Architektur ?
Serverseitig ist das ziemlich Mainstream... damit kann man erstmal nicht viel falsch machen.
Java Fat Client kann viel heißen... was soll der Client denn so tolles können? Hast du bewusst den Begriff Fat Client gewählt oder machst du vielleicht doch eher etwas in Richtung Rich / Smart Client?
http://de.wikipedia.org/wiki/Fat_Client

- Hat jemand Erfahrungen damit ?
Ja -> Mainstream

- Gibt es irgendwelche Tutorials oder Dokumentationen hierfür ?
Die Spring Beispiele https://src.springframework.org/svn/spring-samples/ sind ein guter Anfang.

- Wie kommuniziert der Client mit der Server-Applikation, wie erfolgt der connect?
Das kommt ganz darauf an, was du asl Kommunikationstechnologie wählst...
HTTP (JSON/XML), RESTFul JAX-RS, XMLRPC, RMI (JRMP, IIOP), JAX-WS, Hessian, Burlap, SOAP Webservices, JMS. Was sind denn hier deine Anforderungen? Intranet Anwendung? Internet Anwendung?

Gruß Tom
 
Hallo Tom,
natürlich habe ich bewusst den Terminus "Fat Client" gewählt. Ich möchte eine bestehende Swing-Applikation (siehe http://www.hermannmatthes.de) auf Client/Server-Betrieb umstellen (=neu schreiben), da der derzeitige Ansatz (Netbeans Rich Client mit lokaler MySQL-DB, Synchronisation der verschiedenen Benutzer über Projektdatenbanken) an seine Grenzen stösst. So ist z.B. ein vernünftiges Workflow-Management ohne zentralen Server praktisch nicht machbar.
Der Client enthält heute Funktionen wie z.B. Generierung von Abrechnungen auf PDF-Basis, Einlesen von MS-Project-Dateien und Generierung der entsprechenden DB-Strukturen, Starten von Excel mit generierten Auswertungen usw. Der Fat Client hat also durchaus seinen Sinn.

In den spring-samples habe ich kein wirklich ernsthaftes Beispiel für einen Fat Client gefunden. Die Architektur ist eben doch anders. Wie setze ich meine Netbeans-Projekte auf? Meines Erachtens brauche ich mindestens 3 Projekte: Eines für den Server, eines für den Client und eines für ein gemeinsam genutzes JAR zumindest für die Definition der zu übertragenden Klassen. So ein Beispiel habe ich aber nirgendwo gefunden.

Zur Kommunikation: Ich fürchte, dass ich sehr viele Requests zwischen Client und Server haben werde und auch die übertragene Datenmengen sehr gross sein werden. Eine Notification des Clients (z.B. über Message Queues, geht das?) über Ereignisse auf dem Server wäre toll. Ob die Überwindbarkeit von Firewalls ein wichtiges Argument sein wird, kann ich noch nicht sagen. Derzeit wohl eher nicht.

Ich bin für jede weitere Info dankbar
Hermann
 
Hallo Hermann,

natürlich habe ich bewusst den Terminus "Fat Client" gewählt. Ich möchte eine bestehende Swing-Applikation (siehe http://www.hermannmatthes.de) auf Client/Server-Betrieb umstellen (=neu schreiben), da der derzeitige Ansatz (Netbeans Rich Client mit lokaler MySQL-DB, Synchronisation der verschiedenen Benutzer über Projektdatenbanken) an seine Grenzen stösst. So ist z.B. ein vernünftiges Workflow-Management ohne zentralen Server praktisch nicht machbar.
Der Client enthält heute Funktionen wie z.B. Generierung von Abrechnungen auf PDF-Basis, Einlesen von MS-Project-Dateien und Generierung der entsprechenden DB-Strukturen, Starten von Excel mit generierten Auswertungen usw. Der Fat Client hat also durchaus seinen Sinn.
Für mich ist der Begriff Fat Client architekturell damit assoziert, dass der Client direkt über eine eigene Datenbank-Verbindung
in die Datenbank einträgt bzw. dass überhaupt Datenbanklogik direkt im Client liegt und da ncihts dazwischen liegt... deshalb die Frage.
Bei Rich / Smart Clients liegt für mich noch ein Server dazwischen, welcher mit der Datenbank interagiert. Das war meine Unterscheidung.


In den spring-samples habe ich kein wirklich ernsthaftes Beispiel für einen Fat Client gefunden. Die Architektur ist eben doch anders. Wie setze ich meine Netbeans-Projekte auf? Meines Erachtens brauche ich mindestens 3 Projekte: Eines für den Server, eines für den Client und eines für ein gemeinsam genutzes JAR zumindest für die Definition der zu übertragenden Klassen. So ein Beispiel habe ich aber nirgendwo gefunden.
Deine Aufsplittung ist schon okay. Du hast in deiner Anwendung 2 Hauptprojekte (Client , Server) und ein gemeinsam verwendetes Model-Projekt mit deinen Domänenklassen, Datenstrukturen, Validatoren, Request,Responses etc.

Siehe auch hier:
http://wiki.netbeans.org/NBDTRCPAndJEEBestPractices

Ansonsten könntest du dir mal bei den Projekten hinter diesen Stories den Code anschauen:
http://platform.netbeans.org/screenshots.html

Zur Kommunikation: Ich fürchte, dass ich sehr viele Requests zwischen Client und Server haben werde und auch die übertragene Datenmengen sehr gross sein werden.
Welche Daten müssen denn übertragen werden? Wie oft? Welche Größenbereiche sind denn für Anfrage / Antwort zu erwarten?
Kleinere Nachrichten oder nur die Änderungen übertragen helfen hier oft schon.

Eine Notification des Clients (z.B. über Message Queues, geht das?) über Ereignisse auf dem Server wäre toll.
Mit JMX / JMS kann man sowas ziemlich leicht realiseren. Oder selbst gebaut mit RMI oder beispielsweise REST HTTP/JSON/XML

Ob die Überwindbarkeit von Firewalls ein wichtiges Argument sein wird, kann ich noch nicht sagen. Derzeit wohl eher nicht.

Gruß Tom
 
Zurück