G
Gast2
Gast
Hallo Zusammen!
Ich habe mittlerweile viel über Peristenz im J2EE-Bereich gelesen, bin aber letztenendes nur noch verwirrt. Deshalb wende ich mich an Euch in der Hoffnung, dass Ihr mir sagen könnt, welches Verfahren gar nicht oder besonders gut geeignet ist für meine Anforderungen.
Meine Anwendung (eine Kunden- und Auftragsverwaltung) soll folgende Anforderungen erfüllen:
1. Der Client ist eine Java-Applikation, der Server ist ein JBOSS 4.0.1
2. Die Datenbank steht und darf ich nicht verändern. Einige Daten, die für den Client logisch zusammen gehören und ihm als Ganzes präsentiert werden, sind dabei auf 2 Tabellen verteilt.
3. Der Nutzer kann Daten für die DB nicht nur erzeugen und ansehen, sondern ändert diese auch häufig.
4. Zu einem Auftrag gehören bestimmte Produkte, die zu verwalten sind. Nicht selten sind das 1000 und mehr, die dem Nutzer in einer Tabelle angezeigt werden. Innerhalb dieser 1000Zeilen-Tabelle kann er jede einzelne Zelle bearbeiten. Der geänderte Wert in der Zelle muss natürlich in der DB entsprechend geupdated werden.
5. Zu einem Auftrag werden den beteiligten Kunden bestimmte Rollen zugeordnet. Eine Kunde wiederum kann mehrere Aufträge geben. Es exisitert hier also eine n:m-Relation (In der DB: Auftrag, Kunde, AuftragKunde)
6. Es soll eine komplexe Such-Funktionalität realisiert werden, bei der die DB-Abfrage dynamisch zur Laufzeit zusammen gebaut wird.
7. Es ist eine MultiUser-Anwendung (etwa 10 User). Es dürfte zwar äußerst selten vorkommen, dass mehrere Nutzer an demselben Datensatz arbeiten, aber auszuschließen ist es auch nicht.
8. Der Datenbank-Typ (SAP DB) wird wohl in nächster Zukunft nicht gewechselt.
Mit diesen 8 Anforderungen im Hinterkopf habe ich mich die letzten 2 Wochen mit EntityBeans, Hibernate und JDBC mit SessionBeans befasst und bin bisher zu folgendem Schluß gekommen.
Hibernate ist zu langsam, vor allem in Hinblick darauf, dass ich oft Daten ändern möchte (vgl. Anforderung 3), evtl. einen Eintrag in einer 1000zeiligen Tabelle (vgl. 4). Außerdem wird der größte Vorteil von Hibernate - die DB-Typ-Unabhängigkeit - wohl gar nicht ausgeschöpft (vgl. 8.).
JDBC mit SessioBeans: Sehr schnell (bei einer recht simplen Abfrage war's etwa um den Faktor 10 schneller als Hibernate).
Dafür muss ich mich um Transaktionen, konkurrierenden Zugriff etc. selber kümmern (vgl. 7). Wollte das evtl. so umsetzen, dass eine SessionFacade auf ein DAO-Objekt zugreift, welches dann die DB-Abfrage durchführt und das Ergebnis an die SessionFacade zurückliefert, die wiederum dann den Client mit dem Ergebnis bedient.
Entity Beans: Da bin ich völlig verwirrt.
Hab über das CompositeEntity-Pattern für BMP gelesen. Das gilt wohl aber nur für EJB 1.1, weil Lazy loading und Store Optimazation wohl ab Version 2.0 anders bzw. vom Container gehandelt werden soll. Ab EJB 2.0 solle man also CMP-Beans mit Container Managed Relationships (CMR) verwenden, aber da sollen angeblich die abhängigen Objekte nicht vom Client veränderbar sein können.
Ein einfaches DB/Entity-mapping wird nicht gehen, da ich wie gesagt evtl. mehrere tausend Produkt-Einträge aus der DB zu verwalten habe (vgl. 4). Da würde sich ja evtl. so ein CompositeEntity-Pattern mit Lazyloading anbieten. Außerdem hab ich eine n:m-Relation in meinem DB-Schema (vgl. 5), die wohl auch nich so leicht auf EntityBeans gemappt werden kann.
Und dann sind auch noch zusammengehörige Daten teilweise auch noch über 2 Tabellen verstreut (vgl. 2).
Wäre schön, wenn jemand in Hinblick auf die oben genannten Anforderungen Licht in den Persistenz-Jungle für mich bringen könnte. Insbesondere ein wenig Aufklärung über den Gebrauch von EntityBeans, wenn man n:mRelationen sowie viele DB-Einträge gleichzeitig verwalten muss und zusammengehörige Daten über 2 Tabellen verstreut sind.
Sind meine bisherigen Schlüsse bezüglich Hibernate und JDBC korrekt?
Welches ist Eurer Meinung nach eine geeignete oder besonders ungeeignete Lösung? Evtl. eine Misch-Lösung?
Bin für jeden Tipp dankbar.
Gruß,
egon
Ich habe mittlerweile viel über Peristenz im J2EE-Bereich gelesen, bin aber letztenendes nur noch verwirrt. Deshalb wende ich mich an Euch in der Hoffnung, dass Ihr mir sagen könnt, welches Verfahren gar nicht oder besonders gut geeignet ist für meine Anforderungen.
Meine Anwendung (eine Kunden- und Auftragsverwaltung) soll folgende Anforderungen erfüllen:
1. Der Client ist eine Java-Applikation, der Server ist ein JBOSS 4.0.1
2. Die Datenbank steht und darf ich nicht verändern. Einige Daten, die für den Client logisch zusammen gehören und ihm als Ganzes präsentiert werden, sind dabei auf 2 Tabellen verteilt.
3. Der Nutzer kann Daten für die DB nicht nur erzeugen und ansehen, sondern ändert diese auch häufig.
4. Zu einem Auftrag gehören bestimmte Produkte, die zu verwalten sind. Nicht selten sind das 1000 und mehr, die dem Nutzer in einer Tabelle angezeigt werden. Innerhalb dieser 1000Zeilen-Tabelle kann er jede einzelne Zelle bearbeiten. Der geänderte Wert in der Zelle muss natürlich in der DB entsprechend geupdated werden.
5. Zu einem Auftrag werden den beteiligten Kunden bestimmte Rollen zugeordnet. Eine Kunde wiederum kann mehrere Aufträge geben. Es exisitert hier also eine n:m-Relation (In der DB: Auftrag, Kunde, AuftragKunde)
6. Es soll eine komplexe Such-Funktionalität realisiert werden, bei der die DB-Abfrage dynamisch zur Laufzeit zusammen gebaut wird.
7. Es ist eine MultiUser-Anwendung (etwa 10 User). Es dürfte zwar äußerst selten vorkommen, dass mehrere Nutzer an demselben Datensatz arbeiten, aber auszuschließen ist es auch nicht.
8. Der Datenbank-Typ (SAP DB) wird wohl in nächster Zukunft nicht gewechselt.
Mit diesen 8 Anforderungen im Hinterkopf habe ich mich die letzten 2 Wochen mit EntityBeans, Hibernate und JDBC mit SessionBeans befasst und bin bisher zu folgendem Schluß gekommen.
Hibernate ist zu langsam, vor allem in Hinblick darauf, dass ich oft Daten ändern möchte (vgl. Anforderung 3), evtl. einen Eintrag in einer 1000zeiligen Tabelle (vgl. 4). Außerdem wird der größte Vorteil von Hibernate - die DB-Typ-Unabhängigkeit - wohl gar nicht ausgeschöpft (vgl. 8.).
JDBC mit SessioBeans: Sehr schnell (bei einer recht simplen Abfrage war's etwa um den Faktor 10 schneller als Hibernate).
Dafür muss ich mich um Transaktionen, konkurrierenden Zugriff etc. selber kümmern (vgl. 7). Wollte das evtl. so umsetzen, dass eine SessionFacade auf ein DAO-Objekt zugreift, welches dann die DB-Abfrage durchführt und das Ergebnis an die SessionFacade zurückliefert, die wiederum dann den Client mit dem Ergebnis bedient.
Entity Beans: Da bin ich völlig verwirrt.
Hab über das CompositeEntity-Pattern für BMP gelesen. Das gilt wohl aber nur für EJB 1.1, weil Lazy loading und Store Optimazation wohl ab Version 2.0 anders bzw. vom Container gehandelt werden soll. Ab EJB 2.0 solle man also CMP-Beans mit Container Managed Relationships (CMR) verwenden, aber da sollen angeblich die abhängigen Objekte nicht vom Client veränderbar sein können.
Ein einfaches DB/Entity-mapping wird nicht gehen, da ich wie gesagt evtl. mehrere tausend Produkt-Einträge aus der DB zu verwalten habe (vgl. 4). Da würde sich ja evtl. so ein CompositeEntity-Pattern mit Lazyloading anbieten. Außerdem hab ich eine n:m-Relation in meinem DB-Schema (vgl. 5), die wohl auch nich so leicht auf EntityBeans gemappt werden kann.
Und dann sind auch noch zusammengehörige Daten teilweise auch noch über 2 Tabellen verstreut (vgl. 2).
Wäre schön, wenn jemand in Hinblick auf die oben genannten Anforderungen Licht in den Persistenz-Jungle für mich bringen könnte. Insbesondere ein wenig Aufklärung über den Gebrauch von EntityBeans, wenn man n:mRelationen sowie viele DB-Einträge gleichzeitig verwalten muss und zusammengehörige Daten über 2 Tabellen verstreut sind.
Sind meine bisherigen Schlüsse bezüglich Hibernate und JDBC korrekt?
Welches ist Eurer Meinung nach eine geeignete oder besonders ungeeignete Lösung? Evtl. eine Misch-Lösung?
Bin für jeden Tipp dankbar.
Gruß,
egon