Beste Komponenten für 3-Schichten-Architektur gesucht

Status
Nicht offen für weitere Antworten.

Quallo

Mitglied
Hallo Community,

ich habe für ein angedachtes Programm einen Prototypen in .NET entwickelt (normalerweise meine Programiererheimat). Zum Glück konnte ich mich damit durchsetzen, auch Java in Betrachtung zu ziehen und zusätzlich einen Prototypen mit Java zu erstellen.

Es handelt sich um ein Programm zur Datenerfassung und -Anzeige. Bis hierhin ganz einfach, aber jetzt kommen die angedachten Verteilungsszenarien und Programmvarianten:
1. SmartClient: Java Interface beim Anwender, Datenhaltung und -Verarbeitung in unserem Rechenzentrum. Kommunikation Anwender <--> RZ via Webservices (inklusive Authorisierung, SessionHandling, Verschlüsselung und wenn möglich Komprimierung)
2. RichClient: Java Interface, Datenhaltung (lokale DB oder im LAN) und -Verarbeitung beim Anwender
3. WebClient: HTML-Oberfläche für den Anwender, Webserver, Datenhaltung und -Verarbeitung in unserem Rechenzentrum.

SmartClient und RichClient sollen in allen 3 Schichten (Presentation Layer, Business Layer, Data Layer) den gleichen Code haben. Der Zugriff auf den Business Layer (vom Presentation Layer aus) muss also über eine Schnittstelle abstrahiert werden können.
Der WebClient soll den gleichen Business Layer und den gleichen DataLayer wie SmartClient/RichClient haben.

In .NET ist dies möglich und stellt bereits eine performante Lösung dar. Nun stehe ich allerdings vor einem Berg namens JAVA und weiß nicht, wie ich beginnen soll. Ich hätte gerne Erfahrungen von euch, welche Komponenten ihr einsetzt. Konkret bräuchte ich Empfehlungen zu folgenden Bausteinen:

IDE: Netbeans oder Eclipse? Im Endeffekt Geschmackssache (auch wenn jede IDE sicherlich ihre Propheten hat...) oder ist eine der beiden deutlich besser?

Presentation Layer:
Welches GUI-Toolkit mit welchem Designer würdet ihr empfehlen? Gibt es evtl. Frameworks (so etwas wie Eclipse Rich Client Platform) die wunderbar sind und an denen kein Weg vorbei geht? Wie läuft die Installation des SmartClients (übers Internet, mit automatischer Aktualisierung) ab?
Welches Framework für Webanwendungen? JSF, JSP, Servlets...? Evtl. mit Struts kombiniert?

Business Layer:
Business Methoden, WebService Anbindung, Transaktionshandling, Konfiguraton, AOP und Persistenz?
Wenn ich nur SmartClient und WebClient hätte, könnte ich sicherlich EJB 3.0 nehmen. Wie sehen EJBs in der Praxis aus? Und wie machen sich die EJBs, wenn sie plötzlich auf einem Client (RichClient) statt auf einem Applikationsserver laufen sollen? Gibt es überhaupt Container für EJBs, die auch in Client Anwendungen laufen? Was wären die Alternativen zu EJBs?
Wäre Spring eine Alternative bzw. was würde Spring vom geforderten nicht können?
Welche Technik für Webservices mit den oben gestellten Anforderungen?

DataLayer:
JPA, TopLink, Hibernate...? Welches ist die beste Technik (vorhandenes Datenmodell, Oracle (aber potenziell auch andere), GUIDs als Primärschlüssel).

Logging: log4j oder gibt es bessere Alternativen?


So, jetzt seid Ihr gefragt mir mit Eurer Erfahrung zu helfen. Ich gebe meine Erfahrungen, dich ich dann bei der Implementierung mache auch gerne weiter!


Grüße, Christoph
 

sliwalker

Top Contributor
Hallo Christoph,

das sind ja eine ganze Latte an Fragen ;)
...aber nun gut, teilweise kann ich Dir meine Erfahrungen weitergeben. Zuerst die einfachen Fragen:

Logging? log4j ist eine gute Möglichkeit. benutzen wir auch. Du kannst dort eben für die verschiedensten Logvarianten Kategorien erstellen(zb. eine für logging in DB, eine für logging auf Console, eine für Logdateien usw.) Was anderes kann ich nicht empfehlen, weil ich da nichts genauer kenne.

Business Layer:
Die Schlagwörter die Du angeführt hast sind alle mit dem JBoss zu händeln. Wir stellen gerade große Bereiche von EJB nach Spring um, da Spring wesentlich einfacher zu händeln und auch ungemein performanter ist. Andere große Bereiche werden momentan auf POJOs und old-school SQl umgestellt, weil die Performance mittlerweile Probleme macht.
EJBs in RichClients ist mir nicht bekannt. Soweit ich weiß muss das in einem Kontext eines Applikationsservers laufen.

Programmvarianten:
Ich würde grundsätzlich davon absehen, Verarbeirtungen zum Anwender, also in den Client zu legen. Geschäftskritische Prozesse müssen nach DIN sowieso in einer gesichetren Umgebung stattfinden, um Manipulation zu vermeiden. Wirtschaftsprüfer sehen sowas sehr eng. Ein weiteres Argument dagegen ist für mich der Updateaufwand bei neuen Releases. Bei uns gibt es eine Client/Server Architektur in der der Anwender einen Weblink benutzt, um sich den Client ganz aktuell aus dem JBoss zu ziehen(WebStart). Ich finde eine gute Lösung, da man nur an einer Stelle ausliefern muss.

PresentationLayer:
Struts ist meiner Meinung nach ein muss, weil Du Dich sonst totprogrammierst. (genau wie Hibernate und Spring)Diese Frameworks sind nunmal da um einem das Leben leichter zu machen und das Rad nicht ständig neu erfinden zu müssen. Es muss nicht immer das neueste sein, so kann man eine gewisse bugfreiheit vorraussetzen. JSF/JSP ist eine Frage wie modular Du es eben haben willst. Wo Du in JSP noch sehr viel immer wieder tun musst, kannst Du in JSF schon viel generischer programmieren. Ich selbst habe aber mit diesem Thema nicht allzuviel zu tun, deshalb gebe ich nur weiter, was ich so von Kollegen höre.

IDE:
Bei uns werden WebDinge mit Netbeans entwickelt und die Client/Server Geschichte mit Eclipse. Ich selbst arbeite viel in Eclipse und finde das Tool sehr gut. Vergleichbares ist schwer zu finden. Desweiteren gibt es Tonnen an PlugIn wovon man eine Menge sehr gut gebrauchen kann(MyLyn zum beispiel).


Ich hoffe Du kannst ein paar Tipps aus meinem geschriebenen rausziehen. Viel >Erfolg

greetz
SLi
 
M

maki

Gast
Presentation Layer:
Welches GUI-Toolkit mit welchem Designer würdet ihr empfehlen? Gibt es evtl. Frameworks (so etwas wie Eclipse Rich Client Platform) die wunderbar sind und an denen kein Weg vorbei geht? Wie läuft die Installation des SmartClients (übers Internet, mit automatischer Aktualisierung) ab?
Welches Framework für Webanwendungen? JSF, JSP, Servlets...? Evtl. mit Struts kombiniert?
struts ist tot, zumindest solange man auf JSF setzt ;) Ausser natürlich man nimmt das ein oder andere aus struts-shale...

JSF ist im Moment das zukunftssicherste Framework fürs Web in Java, aber nicht so einfach zu erlernen wie zB. struts.
JSF baut auf Serlvets und JSPs auf.

Business Layer:
Business Methoden, WebService Anbindung, Transaktionshandling, Konfiguraton, AOP und Persistenz?
Wenn ich nur SmartClient und WebClient hätte, könnte ich sicherlich EJB 3.0 nehmen. Wie sehen EJBs in der Praxis aus? Und wie machen sich die EJBs, wenn sie plötzlich auf einem Client (RichClient) statt auf einem Applikationsserver laufen sollen? Gibt es überhaupt Container für EJBs, die auch in Client Anwendungen laufen? Was wären die Alternativen zu EJBs?
Wäre Spring eine Alternative bzw. was würde Spring vom geforderten nicht können?
Welche Technik für Webservices mit den oben gestellten Anforderungen?
EJBs können all das, auch für Smart Clients, man greift auf EJBs ausserhalb des EJB Containers immer per remote zu, da ist dann egal ob es sich um eine Webanwednung in Tomcat handelt oder einen Smart Client.

DataLayer:
JPA, TopLink, Hibernate...? Welches ist die beste Technik (vorhandenes Datenmodell, Oracle (aber potenziell auch andere), GUIDs als Primärschlüssel).
JPA/Hibernate (JPA ist der Standard, Hibernate eine IMplementierung) wäre eine Möglichkeit, allerdings bevorzuge ich iBatis wenn das DB Modell schon existiert, da ORM Frameworks wie JPA/Hibernate am besten dazu geeignet sind, neue Projekte zu erstellen und das ER Modell komplett zu ignorieren, schliesslich nimmt man dann ein Domain Modell :)

imho ist log4j das beste logging framework.
 

Quallo

Mitglied
Erstmal vielen Dank für Eure Antworten!

Logging? log4j ist eine gute Möglichkeit. Benutze ich auch für den .NET Prototyp. Ist ne nette Geschichte!

Business Layer: Mit JBoss bin ich dann allerdings wieder an einen Applikationsserver gebunden. An Spring werde ich wohl kaum vorbei kommen. Was ja nicht unbedingt schlecht ist, die dort umgesetzten Pattern sollte man kennen und gegen eine quelloffene Referenzimplementierung ist sicherlich nichts einzuwenden.
Pojos und SQL(mit eigenem schmalen Framework umzu) benutze ich auch in der .NET Version. Gibt es in Java die Möglichkeit datenbankunabhängige SQL-Abfragen zu formulieren und auszuführen und das Ergebnis in Pojos oder generischen Listen (unterstützt Java doch ab 1.5, oder?) von Pojos zu füllen(Ibatis klingt da schon sehr nett, ist es auch DB-Unabhängig oder muss ich Dialekte schreiben?)?
OR-Mapper würde ich schon gerne testen, eben weil ich es im .NET Prototyp nicht habe und denke, dass Java in dem Punkt bereits deutlich weiter als .NET ist.

Programmvarianten: Die Verarbeitungen beim Anwender betreffen dann auch Daten beim Anwender. Die sind für ihre Sicherheit dann selber zuständig. Soetwas wie WebStart habe ich in .NET auch für den SmartClient genommen. Heisst dort Click-Once-Deployment.

PresentationLayer:
JSF gefällt mir, da es ähnlich zu ASP.NET ist. Besonders die SessionBeans gefallen mir (als kleines Detail).

IDE:
Ich werde mir mal beide anschauen. Also Webservices und Client inkl. Spring am Besten mit Eclipse?



Grüße, Christoph
 
M

maki

Gast
Business Layer: Mit JBoss bin ich dann allerdings wieder an einen Applikationsserver gebunden. An Spring werde ich wohl kaum vorbei kommen. Was ja nicht unbedingt schlecht ist, die dort umgesetzten Pattern sollte man kennen und gegen eine quelloffene Referenzimplementierung ist sicherlich nichts einzuwenden.
Pojos und SQL(mit eigenem schmalen Framework umzu) benutze ich auch in der .NET Version. Gibt es in Java die Möglichkeit datenbankunabhängige SQL-Abfragen zu formulieren und auszuführen und das Ergebnis in Pojos oder generischen Listen (unterstützt Java doch ab 1.5, oder?) von Pojos zu füllen(Ibatis klingt da schon sehr nett, ist es auch DB-Unabhängig oder muss ich Dialekte schreiben?)?
OR-Mapper würde ich schon gerne testen, eben weil ich es im .NET Prototyp nicht habe und denke, dass Java in dem Punkt bereits deutlich weiter als .NET ist.
Du wirst immer an einen Applikationserver gebunden sein, sobald du dich für EJBs entscheidest.
In iBatis schreibst du alle SQL Statements selbst, diese liegen allerdings in XML Dateien, nicht im Java Quellcode.
Wie du deine DAOs implementierst bleibt dir überlassen, kannst da natürlich auch Generics einsetzen.

Anders als JPA/Hibernate ist iBatis kein ORM Framework!

In JPA/Hibernate reicht es, in der Konfiguation den sog. SQL Dialekt einzustellen (mysql, etc. pp.), da JPA/Hibernate das SQL vollständig selbst generiert. Wenn du allerdings schon eine DB mit Tabellen hast, ist dieser Ansatz umständlich, da eure Tabellenstruktur erst wieder von JPA/Hibernate "verstanden" werden muss.

PresentationLayer:
JSF gefällt mir, da es ähnlich zu ASP.NET ist. Besonders die SessionBeans gefallen mir (als kleines Detail).
SessionBeans gibt's wirklich in jedem Java Web FrameWork.
Wie gesagt, JSF ist komplex, Servlets und JSPs sollte man unbedingt vertehen, bevor man sich an JSF ranmacht. Ein gutes Buch ist ein Muss, nur mit Tutorials kommt man nicht weit, da die theoretischen Grundlagen sehr wichtig sind.
 

Quallo

Mitglied
Aber mit Spring bin ich ja nicht daran gebunden und der Container von Spring sollte doch auch eigentlich alle meine Anforderungen erfüllen.

Werde dann mal schauen, was mir eher zusagt und wo ich eher gute Performance sehe (wahrscheinlich deutlich in Richtung IBatis). Kann man auch dynamische Querys verwenden (im Code dynamisch erzeugt) oder muss man unbedingt gespeicherte nehmen? Sonst wäre das ja eine super Basis für eine eigene kleine OR-Schicht.

"SessionBeans gibt's wirklich in jedem Java Web FrameWork" --> Aber nicht in ASP.NET. Und ich stehe doch so auf POJOS bzw. POCOS (das .NET äquivalent, C = CLR).


Grüße, Christoph
 
M

maki

Gast
Kann man auch dynamische Querys verwenden (im Code dynamisch erzeugt) oder muss man unbedingt gespeicherte nehmen?
iBatis bietet für die XML Dateien (Mapping Dateien) eine eigene kleine Syntax an, mit der man if-else Abfragen und wenn ich mich nicht irre sogar schleifen schreiben kann, nützlich zB bei Suchen mit variabler Anzahl von Kriterien.
Mit iBatis sollte der gesamte SQL Code in XML Daeien ausgelagert werden, ein bisschen in Java und ein bisschen in XML würde ich nicht machen, glaube auch kaum das es so einfach zu bewerkstelligen sein wird, am besten von dieser Idee trennen ;)

Übrigns, iBatis bits auch für .NET ;)
 

Quallo

Mitglied
Werde mir das bei Gelegenheit mal zu Gemüte führen. Hast vielleicht recht, dass man das Mixen sein lassen sollte. Aber mal sehen, solange man den Mixer auch via xml konfiguriert...

Der .NET Port interessiert mich nicht, ich mache jetzt ja Java ;) Werde mir den wohl bei Gelegenheit mal anschauen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Aktuell beste Methode um zwei Bilder zu vergleichen..? Java Basics - Anfänger-Themen 1
F Beste Datenstruktur zum Speichern? Java Basics - Anfänger-Themen 1
E Methoden Beste Bestellung Java Basics - Anfänger-Themen 13
S mehrfache if-Abfragen - beste Lösung Java Basics - Anfänger-Themen 1
D Datentypen Welcher ist der beste Datentyp? Java Basics - Anfänger-Themen 28
4 Was ist der beste Lehrberuf um Programmieren (vor allem JAVA und APP) zu fernen Java Basics - Anfänger-Themen 5
N Beste Datendarstellung? Java Basics - Anfänger-Themen 3
manunana89 Bilder auf JFrame/beste Möglichkeit??? Java Basics - Anfänger-Themen 5
F Ewiges Leid mit "protected" (oder "wie der beste Freund eine hinrücks betrügt") Java Basics - Anfänger-Themen 26
M Beste Art Bilder zu kopieren? Java Basics - Anfänger-Themen 4
X Beste Entwicklungsumgebung. Java Basics - Anfänger-Themen 10
R beste linux IDE? Java Basics - Anfänger-Themen 4
A Struktur -> Beste Lösung? Java Basics - Anfänger-Themen 3
D Komponenten, Module, Begrifferklärung Java Basics - Anfänger-Themen 4
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
danieldemetry Java - Graph Komponenten - Ausgabe Java Basics - Anfänger-Themen 0
C Einbinden von Komponenten mit Maven Java Basics - Anfänger-Themen 3
V Alle Komponenten eines JPanels Java Basics - Anfänger-Themen 14
T Optionale Komponenten Java Basics - Anfänger-Themen 8
M GUI- mehrere Komponenten auf Container adden Java Basics - Anfänger-Themen 2
P JavaFX - Komponenten skalieren Java Basics - Anfänger-Themen 16
J Klassen Hilfe bei unbekannten Zeilen bzgl. Klassen / Komponenten Java Basics - Anfänger-Themen 12
I komponenten werden in JFrame nicht richtig angezeigt Java Basics - Anfänger-Themen 1
F Swing Applet: mehrere Komponenten hinzufügen Java Basics - Anfänger-Themen 1
F Platzieren von Komponenten in Swing Applet funktioniert nicht Java Basics - Anfänger-Themen 3
D JFrame, Komponenten verschmiert. Java Basics - Anfänger-Themen 15
N JTable - Zellfarben ändern, GUI-Komponenten in Zellen einfügen Java Basics - Anfänger-Themen 5
M Komponenten irgendwo versteckt? Java Basics - Anfänger-Themen 7
O swing komponenten werden nicht angezeigt Java Basics - Anfänger-Themen 6
MU5T4NG Komponenten in Schleife ansprechen Java Basics - Anfänger-Themen 13
B Tabelle, Größe der Komponenten Java Basics - Anfänger-Themen 2
D Wie genau kann ich in Java Komponenten entwickeln? Java Basics - Anfänger-Themen 6
P Scrollpane mit dynamisch erzeugten Komponenten Java Basics - Anfänger-Themen 3
M Fixe Position von GUI Komponenten ? Java Basics - Anfänger-Themen 9
Weiti Anzeige von komponenten erst bei Mouse-Over Java Basics - Anfänger-Themen 3
N Anordnug der Komponenten mit NetBeans Java Basics - Anfänger-Themen 9
M Obsolete Komponenten feststellen? Java Basics - Anfänger-Themen 3
X GridBagLayout Komponenten Anordnungsproblem Java Basics - Anfänger-Themen 4
L Komponenten in Layoutmanagern zentrieren Java Basics - Anfänger-Themen 5
J Probleme mit Visual Editor Komponenten auf Panel legen Java Basics - Anfänger-Themen 4
J Komponenten andordnen Java Basics - Anfänger-Themen 2
K Koordinaten von Swing Komponenten Java Basics - Anfänger-Themen 2
G Komponenten Java Basics - Anfänger-Themen 2
A Komponenten nur sporadisch sichtbar beim starten Java Basics - Anfänger-Themen 2
I Swing-Komponenten-Größe im GridBagLayout beschränken Java Basics - Anfänger-Themen 2
N GridBagLayout: gleichmäßige verteilung von Komponenten Java Basics - Anfänger-Themen 23
S Auf JButtonBar komponenten ausrichten, größe festlegen? Java Basics - Anfänger-Themen 5
S Wie komponenten positionieren? Java Basics - Anfänger-Themen 6
B Komponenten im LayoutManager zentrieren Java Basics - Anfänger-Themen 5
G Seit Java6 wird der Text von komponenten komisch dargestellt Java Basics - Anfänger-Themen 11
T Anderes Fenster öffnen, darin enthaltene Komponenten ändern Java Basics - Anfänger-Themen 2
E Komponenten auf Panel positionieren Java Basics - Anfänger-Themen 3
S Komponenten löschen und ersetzen Java Basics - Anfänger-Themen 2
S Kommunikation zwischen Komponenten in einem JFrame Java Basics - Anfänger-Themen 10
P Abstand vom Rahmen zu Komponenten bestimmen? Java Basics - Anfänger-Themen 3
J Dynamische Größenveränderung der Komponenten verhindern Java Basics - Anfänger-Themen 8
S Alle Komponenten die ich auf die IDE ziehe sind align all Java Basics - Anfänger-Themen 7
B Komponenten einer Zeile, Spalte des GridLayouts hinzufügen Java Basics - Anfänger-Themen 3
M value von Komponenten erhalten Java Basics - Anfänger-Themen 3
G GUI Komponenten Java Basics - Anfänger-Themen 14
M Problem beim ändern von Komponenten während Visible(true) Java Basics - Anfänger-Themen 4
M Bei Swing Komponenten die Farbe ändern? Java Basics - Anfänger-Themen 12
S Benennung von Komponenten bei Swing? Java Basics - Anfänger-Themen 8
J von Methode auf GUI-Komponenten zugreifen? Java Basics - Anfänger-Themen 5
J Problem mit Swing-Komponenten Java Basics - Anfänger-Themen 13
G Visuellen Komponenten Hints zuordnen Java Basics - Anfänger-Themen 5
G Komponenten dynamisch auf contentPane einbinden Java Basics - Anfänger-Themen 5
M wie kombiniere ich grafik und swing-komponenten Java Basics - Anfänger-Themen 16
X Komponenten automatisch erzeugen Java Basics - Anfänger-Themen 8
X Viele Komponenten automatisch erzeugen Java Basics - Anfänger-Themen 2
sambalmueslie Probleme mit Container und Komponenten. Java Basics - Anfänger-Themen 3
A Komponenten im Panel ausrichten Java Basics - Anfänger-Themen 5
M GridBagLayout und enthaltende komponenten Java Basics - Anfänger-Themen 5
G alle Komponenten vom Typ JPanel removen Java Basics - Anfänger-Themen 4
K Sichtbarkeit von Komponenten prüfen Java Basics - Anfänger-Themen 5
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 2
G Icon für App Java Basics - Anfänger-Themen 1
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
V Durchschnittliche Volatility in Prozent für 4 Stunden berechnen Java Basics - Anfänger-Themen 14
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
D Apache HTTPClient für alle Fälle Java Basics - Anfänger-Themen 41
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
J Fehlermeldung unverständlich für Jakarta Java Basics - Anfänger-Themen 17
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
M GUI für Vier-Gewinnt. Java Basics - Anfänger-Themen 4
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
Ostkreuz Counter für Booleanwerte Java Basics - Anfänger-Themen 8
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
Jxhnny.lpz Randomisier für Buttons Java Basics - Anfänger-Themen 13
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben