Ich will eine J2EE-Anwendung schreiben und wollte Entity Beans einsetzen, die meine DB-Tabelleneinträge repräsentieren sollen, also eine Entity Bean-Klasse für Tabelle Firma, eine für Tabelle Ansprechpartner usw. Das Problem ist, dass die Datenbank schon steht und weil auch andere Apps davon abhängen, auch nicht verändert werden darf. Die Sache ist aber, dass z.B. in Tabelle Firma Daten stehen, die eigentlich zu Ansprechpartner gehören, nämlich Telefon, Email und Fax. Das würde ja bedeuten, dass wenn ich mir ALLE Daten des Ansprechpartners ansehen wollte, ich ein EntityBean-Objekt Ansprechpartner und ein EntityBean-Objekt Firma bräuchte, um alle Ansprechpartner-Daten samt Telefon, Email, Fax zu erhalten.
Meine Fragen hierzu: Können die Attribute einer EntityBean auch gewissermassen über mehrere Tabellen verteilt sein, so dass ich nur eine Bean für alle Ansprechpartner-Daten hab (also eine Bean, die auf mehrere Tabellen zugreift)? Wenn nicht, gibt es evtl. eine saubere Lösung ohne EntityBeans? JDO, Hibernate? Was kann mir da helfen?
Dieselbe Anwendung soll in der SWT-GUI (also beim Client) Daten aus einer MaxDB-Datenbank in einer Tabelle anzeigen. Es soll dann möglich sein, direkt eine Tabellen-Zelle anzuklicken, um ihren Inhalt zu bearbeiten. Dieser neue Inhalt muss dann an den JBOSS-Server übertragen werden und der muss den neuen Inhalt in die Datenbank schreiben. Zwischendruch muss der neue Inhalt ggfs. noch auf Korrektheit überprüft werden (z.B. bei Datumseingaben).Die Tabelle kann dabei mehrere Tausend Zeilen beinhalten.
Meine Fragen hierzu: Nach jeder Änderung einer einzelnen Tabellenzelle diesen neuen Inhalt an den Server zu senden dürfte nicht sehr effizient sein. Gibt es eine Methode, das irgendwie zu umgehen? Wie gesagt, es sind einzelne Werte, d.h. mit DTO komm ich da wohl nich weit.
Wo soll ich die Prüfung der Eingabe (z.b. bei einem Datum) durchführen? Client oder Server?
Bei einer Tabelle von mehreren tausend Zeilen wäre es doch sicher auch inneffizient, aus einem ResultSet erst tausende Objekte zu erzeugen, welche dann jeweils eine Zeile darstellen. Es gibt bei SWT ja auch VirtualTables, denen ich einfach ein ResultSet übergebe und der dann die Tabelle automatisch daraus generiert. Aber kann ich da die einzelnen Tabellenzellen auch editieren? Wie kommen die Daten dann in die DB?
Ich bin für jede Hinweis zu dem einen wie dem anderen Problem dankbar?
Ich auch: wird das ‚SAP Developer Studio‘ verwendet ?
So klingt es nämlich gerade
Ich will eine J2EE-Anwendung schreiben und wollte Entity
Beans einsetzen, die meine DB-Tabelleneinträge repräsentieren
sollen, also eine Entity Bean-Klasse für Tabelle Firma, eine
für Tabelle Ansprechpartner usw. Das Problem ist, dass die
Datenbank schon steht und weil auch andere Apps davon
abhängen, auch nicht verändert werden darf. Die Sache ist
aber, dass z.B. in Tabelle Firma Daten stehen, die eigentlich
zu Ansprechpartner gehören, nämlich Telefon, Email und Fax.
Das würde ja bedeuten, dass wenn ich mir ALLE Daten des
Ansprechpartners ansehen wollte, ich ein EntityBean-Objekt
Ansprechpartner und ein EntityBean-Objekt Firma bräuchte, um
alle Ansprechpartner-Daten samt Telefon, Email, Fax zu
erhalten.
Meine Fragen hierzu: Können die Attribute einer EntityBean
auch gewissermassen über mehrere Tabellen verteilt sein, so
dass ich nur eine Bean für alle Ansprechpartner-Daten hab
(also eine Bean, die auf mehrere Tabellen zugreift)? Wenn
nicht, gibt es evtl. eine saubere Lösung ohne EntityBeans?
JDO, Hibernate? Was kann mir da helfen?
Dieselbe Anwendung soll in der SWT-GUI (also beim Client)
Daten aus einer MaxDB-Datenbank in einer Tabelle anzeigen. Es
soll dann möglich sein, direkt eine Tabellen-Zelle
anzuklicken, um ihren Inhalt zu bearbeiten. Dieser neue Inhalt
muss dann an den JBOSS-Server übertragen werden und der muss
…ach Du Schreck
den neuen Inhalt in die Datenbank schreiben. Zwischendruch
muss der neue Inhalt ggfs. noch auf Korrektheit überprüft
werden (z.B. bei Datumseingaben).Die Tabelle kann dabei
mehrere Tausend Zeilen beinhalten.
Meine Fragen hierzu: Nach jeder Änderung einer einzelnen
Tabellenzelle diesen neuen Inhalt an den Server zu senden
dürfte nicht sehr effizient sein. Gibt es eine Methode, das
irgendwie zu umgehen? Wie gesagt, es sind einzelne Werte, d.h.
mit DTO komm ich da wohl nich weit.
Wo soll ich die Prüfung der Eingabe (z.b. bei einem Datum)
durchführen? Client oder Server?
…eher Server.
Bei einer Tabelle von mehreren tausend Zeilen wäre es doch
sicher auch inneffizient, aus einem ResultSet erst tausende
Objekte zu erzeugen, welche dann jeweils eine Zeile
darstellen. Es gibt bei SWT ja auch VirtualTables, denen ich
einfach ein ResultSet übergebe und der dann die Tabelle
automatisch daraus generiert. Aber kann ich da die einzelnen
Tabellenzellen auch editieren? Wie kommen die Daten dann in
die DB?
EntityBeans repräsentieren normalerweise einzelne Tabellenzeilen, nicht ganze Tabellen. Natürlich könntest Du ein EntityBean mit dem Inhalt mehrerer Tabellenzeilen füllen. Andererseits kannst Du Dir auch auf Clientseite ein Datenmodell aufbauen, dass sich aus EntityBeans füllt (also wieder pro Tabellenzeile ein EntityBean, und Dein ClientDataModel bezieht seine Daten aus mehreren EntityBeans).
Um mehrere Serverroundtrips zu vermeiden würde ich die Datenprüfung Clientseitig abwickeln. Das spart Server- und Netzwerkresourcen. Schau mal nach dem MVC Pattern (Model View Controller Pattern, Google spuckt dazu eine Menge aus).
Was die mehreren tausend Tabellenzeilen angeht: Warum besorgst Du Dir nicht erstmal nur zum Beispiel die ersten 100 Zeilen, viel mehr wird auf dem Client eh nicht auf einmal angezeigt. Wenn der User dann weiter scrollt und mehr sehen will, dann holst Du Dir die benötigten Daten.
Wenn Daten editiert wurden, dann setzt Du Dir ein Dirty-Flag und forderst den Anwender (beim Beenden der Anwendung oder sonstwann) auf, ob die Änderungen gesichert oder die Änderungen verworfen werden sollen.
Geschrieben werden die Daten dann von Deiner Controllerklasse, die auch den Rest der Anwendung kontrolliert (wieder siehe MVC Pattern).
Ich will eine J2EE-Anwendung schreiben und wollte Entity
Beans einsetzen, die meine DB-Tabelleneinträge repräsentieren
sollen, also eine Entity Bean-Klasse für Tabelle Firma, eine
für Tabelle Ansprechpartner usw. Das Problem ist, dass die
Datenbank schon steht und weil auch andere Apps davon
abhängen, auch nicht verändert werden darf. Die Sache ist
aber, dass z.B. in Tabelle Firma Daten stehen, die eigentlich
zu Ansprechpartner gehören, nämlich Telefon, Email und Fax.
Das würde ja bedeuten, dass wenn ich mir ALLE Daten des
Ansprechpartners ansehen wollte, ich ein EntityBean-Objekt
Ansprechpartner und ein EntityBean-Objekt Firma bräuchte, um
alle Ansprechpartner-Daten samt Telefon, Email, Fax zu
erhalten.
Also, ich glaube ich hab mein Problem 1 nicht konkret genug beschrieben.
Mir ist schon klar, dass ein konkretes EntityBean-Objekt eine Tabellenzeile darstellt. Meine Frage ist, ob ein EntityBean-Objekt Daten aus einer Zeile einer Tabelle und Daten aus einer Zeile einer andern Tabelle enthalten kann.
D.h.: Tabelle Firma und Tabelle Ansprechpartner sind in der Datenbank über einen Fremdschlüssel verknüpft, also eine Firma hat einen Schlüssel zu einem Ansprechpartner. Wenn ich ALLE Ansprechtpartner-Daten haben wollte, müsste es eine EntityBean geben, die alle Attribute dieses Ansprechpartners beinhaltet UND Telefon, Email, Fax vom entsprechenden Firma-Eintrag beinhaltet.
Meine Frage dazu: Ist dies überhaupt möglich mit Entity Beans oder gibt es eine elegante Alternative?
wird das ‚SAP Developer Studio‘ verwendet ?
So klingt es nämlich gerade
SAP Developer Studio wird nicht verwendet. Ich nutze Eclipse als Entwicklungsumgebung, einen JBOSS als J2EE-Container, MaxDB als Datenbank. Das ist alles.