Home
Diplomarbeit Timo Koster
Contents
1. Es muss eine ffentliche Klasse sein die die Schnittstelle java io Serializable implementiert Die Klasse muss einen argumentlosen Konstruktor und einen Konstruktor mit einem String Argument zur Verf gung stellen Die toString Methode muss berschrieben werden Diese muss einen String als R ckgabewert liefern so dass dadurch als bergabe an den String Konstruktor ein quivalentes Objekt der Primary Key Klasse erstellt werden kann alle nicht statischen Attributwerte m ssen einen primitiven Datentyp besitzen oder zu einer anderen ffentlichen Klasse die die Schnittstelle java io Serializable implementiert referenzieren f r jeden Attributwert der durch den Persistenz Deskriptor als Bestandteil des Prim rschl ssel definiert wurde muss ein namentlich gleicher Attributwert in der Primary Key Klasse vorliegen der durch die Methoden equals und hashcode f r die quivalenz verwendet wird kurzlebige Identit t Dieser Modus wird verwendet wenn es bedeutungslos ist ein Objekt von einem anderen zu unterscheiden meist bei kurzlebiger Persistenz von neuen Instanzen z Bsp Alarm Meldungen vom System Im Persistenz Deskriptor wird dieser Modus im Tag lt package gt unter identity nondurable aktiviert Da dies eine optionale 1 Die gleichen Eigenschaften wie bei einem Remote Objekt von RMI Dadurch wird erreicht dass diese Primary Key Klasse in einer verwalteten Umgebung auch als EJB Primary
2. 1 Im folgenden ist mit JDO Instanz ein Objekt gemeint dass die Schnittstelle PersistenceCapable und deren Methoden implementiert hat Prim rschl sselklasse In dieser Klasse werden die Attribute spezifiziert die die Spalte n in der Tabelle deklarieren um eine Zeile aus dieser eindeutig identifizieren zu k nnen d h der Wert muss eindeutig und von Null verschieden sein 3 Die JDO Spezifikation bietet dazu mehrere Methoden an die im Abschnitt 2 2 2 kurz vorgestellt werden Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 24 139 lt jdo gt Applikation Identit t Bei diesem Modus ist der Anwender verantwortlich f r die Objekt Identit t d h er schreibt eine Primary Key Klasse Durch den Persistenz Deskriptor werden bestimmte Attributwerte als Prim rschl ssel bezeichnet des weiteren wird die Primary Key Klasse namentlich bekannt gegeben Diese Art der Identit t muss von jedem JDO Anbieter implementiert werden lt xml version 1 0 encoding UTF 8 gt lt IDOCTYPE jdo SYSTEM file Verweis auf den Pfad gt lt jdo gt lt package name Verweis auf Modul gt lt class name Klassenname identity type applikation objectid class Primary key Klasse gt lt field name Attribute werden angegeben primary key true gt lt package gt lt jdo gt Folgende Eigenschaften muss die Primary Key Klasse erf llen
3. tsecondary_arraylists PK lidofk_intValueBS lidovalue_intValueAC lidopos tsecondary_hashmaps PK lidofk_intValueBS PK lidokey lidovalue_intValueAC Abbildung 12 Entity Relationship Modell der Datenbank lidodiplom Im obigen Modell sind die Primarschlussel fett unterstrichen und die Fremdschlussel fett dargestellt Der Datentyp Properties wird in der Tabelle tprimary properties abgebildet Der Schl ssel der Properties wird in der Spalte lidokey und der zugeh rige Wert in der Spalte 1idoValue verwaltet Uber Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 72 139 den Fremdschl ssel lidofk intValueBP wird die Beziehung zu der Tabelle tprimary hergestellt Bei Lido werden alle an der Vererbung beteiligten Klassen in einer Tabelle abgebildet d h in der Tabelle der am weitesten abgeleiteten Klasse werden alle Attributwerte mitabgespeichert Bei Verwendung der Datentypen List und Map wird jeweils eine eigene Tabelle benotigt In der Tabelle die die List reprasentiert werden die beiden Fremdschlussel und die Position 1idopos des Elementes in der List gespeichert Die Tabelle die die Map darstellt wird der Schlussel der Map und die beiden Fremdschlussel abgelegt Die Fremdschl ssel f r die ArrayList und HashMap werden jeweils in einer eigenen Spalte abgebildet 3 2 5 2Persiste
4. 4 2 4 3Query Operation Es werden die Zeiten bei Verwedung der lazy Initialisierung und ohne aufgelistet n Primary Objekte werden aus der Datenbank gelesen und in einer Arraylist_ zwischengespeichert lazy false 1600 0 Anzahl ms soan 1200 0 1000 0 E10 Primary Objekte 800 0 E20Primary Objekte 600 0 1150 Primary Objekte 01100 Primary Objekte 400 0 200 0 0 0 lazy false ms lazy true ms Rollback A Zeit in ms in der eine Abfrage an die Datenbank erfolgte und alle Hauptobjekte in einer ArrayList gespeichert wurden B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 89 139 Fazit Anhand der Objekt Id der gespeicherten Objekte werden diese durch Aufruf der Methode load Class name Serializable id aus der Datenbank innerhalb einer Transaktion ausgelesen Die ausgelesenen Objekte besitzen den Zustand persistent 4 2 4 4Update Operation Allen Objekten der Klasse SecondaryFirst wurde ein neuer Bezeichner zugewiesen d h die sich im Speicher befindlichen Objekte wurden ver ndert und somit mit der Datenbank synchronisiert Es wurden keine Unterschiede zwischen Verwendung mit und ohne der lazy Initialisierung festgestellt Die Anzahl bezieht sich auf die Primary Objekte Die daraus resultierende Anzahl von Seco
5. Die Tests wurden auf dem im Abschnitt 3 1 genannten Rechner ausgef hrt 3 2 5Implementierung Libelis Lido V1 4 Fur die Evaluierung von Lido wurde der erstellte Prototyp von Kodo verwendet da auch Lido das Konzept der bidirektionalen Beziehungen zwischen den Objekten verwendet siehe Abschnitt 3 2 4 Lediglich implementieren die Klassen AnotherClass Primary PrimarySecond und Secondary die Schnittstelle InstanceCallbacks da Lido nicht automatisch das kaskadierende Loschen unterstutzt Da das eigene Identitatenkonzept verwendet wurde wurden auch die zuvor erstellten Primary Key Klassen bernommen Die erstellte Hilfsklasse ConfJDO stellt statische Methoden zur Verf gung Diese lesen die Konfigurationsdatei lido properties aus und initialisieren somit die 1 Uber diese Konfigurationsdatei wird die automatische Ausgabe der erstellten SQL Statemens unterbunden Es wird nur zugelassen dass bei Auftreten eines Error eine Ausgabe am Bildschirm erfolgt Das Abschalten ist notwendig da sonst die Ausgabe am Bildschirm die Performance Tests beinflusst Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 70 139 Schnittstelle PersistenceManagerFactory und stellen der Anwendung einen PersistenceManager zur Verf gung Die Testklasse LidoTest bezieht von der Hilfsklasse ConfJDO einen PersistenceManager und stellt Methoden f r die insert delete que
6. lt delete 0 6 0 8 1 7 5 3 28 1 77 7 Diplomarbeit Anzah PrimazyrObjekte Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 98 139 Abbildung 16 Performance Ergebnisse unter Verwendung der Datenbank HSQL im eingebetteten Modus 4 3 3 7Vererbung Wie auch bei Hibernate gibt es die M glichkeit dass die an der Vererbung beteiligten Klassen mit in der Tabelle der Oberklasse oder aber dass die Unterklassen jeweils in einer eigenen Tabelle abgebildet werden Die Unterklassen erben die ObjektID der Oberklassen und die Beziehung zwischen den Tabellen wird ber Fremdschl ssel hergestellt Die an der Vererbung beteiligten Klassen werden jeweils in eine eigene Tabelle abgebildet 4 3 3 8Assoziationen Durch Castor JDO werden alle g ngigen Assoziationen unterst tzt Die verwendeten Assoziationen wurden schon im Abschnitt 3 2 3 3 vorgestellt so dass hier nur die Probleme die w hrend der Verwendung auftraten erl utert werden Werden in einem Objekt in mehreren Datentypen jeweils die gleichen Objekte verwendet so besteht bei Castor JDO die M glichkeit die beiden Fremdschl ssel auf nur eine Spalte abzubilden Da Castor keine Abbildungsregel zur Handhabung der java util Properties zur Verf gung stellt wurde eine Hilfsklasse Property erstellt die die Schl ssel und zugeh rigen Werte verwaltet Eine weitere Hilfsklasse PropertyHelper die statische Methoden zur Verf gung stellt ber
7. lt extension key jdbc vendor name ssibo gt lt extension key mapping value direct vendor name ssibo gt lt extension gt lt field gt lt field name hashMapP gt lt map key type java lang Integer value type prototype model Secondary gt lt extension key jdbc vendor name ssibo gt lt extension key mapping value one to many vendor name ssibo gt lt extension key result type value java util HashMap vendor name ssibo gt lt extension key element type value prototype model Secondary vendor name ssibo gt lt extension key cascade delete value true vendor name ssibo gt lt extension gt lt extension gt lt field gt lt field name arrayListP gt lt collection element type prototype model Secondary gt lt extension key jdbc vendor name ssibo gt lt extension key mapping value one to many vendor name ssibo gt lt extension key result type value java util ArrayList vendor name ssibo gt lt extension key element type value prototype model Secondary vendor name ssibo gt lt extension key cascade delete value true vendor name ssibo gt lt extension key reference vendor name ssibo gt lt extension key src table value TPRIMARY vendor name ssibo gt lt extension key src field value FINTVALUEBP vendor name ssibo gt lt extension key dst table value TSECONDARY vendor name ssibo gt lt extension key dst field value FTPRIMAR
8. pManager getExtent Book class true String filter name Java ist auch eine Insel Query query pManager newQuery bookExt filter query setOrdering name ascending bookId descending Collection coll Collection query execute trans commit Weitere M glichkeiten von JDOQL sind unter Russ02 S 129ff und Roos02 S 100ff zu finden 2 2 7Ausnahmebehandlung unter JDO JDO definiert neun Laufzeit Exceptions Diese werden in folgende Kategorien unterteilt fatale Exceptions d h die Operation kann nicht komplett ausgef hrt werden implizit erfolgt ein rollback der aktuellen Transaktion retried Exceptions d h der Fehler kann durch die Anwendung korrigiert werden und die Operation wird erneut ausgef hrt Die Exception Hierarchie 1 Im folgenden wird der Begriff Exception verwendet Damit ist ein z B Programm spezifischer oder Datenbank spezifischer aufgetretener Fehler gemeint Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 371 139 java lang RuntimeException JDOException A A JDOCanRetryException JDOFatalException i i A A A JDOUserException JDOFatalUserException JDODataStoreException JDOFatallnternalException JDOUnsupportedOptionException JDOFatalDataStoreException Abbildung 5 Die Exception Hierarchie Roos02 Der Ausgangspunkt der jeweiligen Exc
9. Diese kann durch die Methode next schrittweise vorw rts durchlaufen werden und liefert das n chste Ergebnisobjekt welches durch entsprechendes Casting erstellt wird In Abschnitt 4 3 3 10 folgt hierzu ein Beispiel Persistent Durch Implementierung der Schnittstelle Persistent wird ein Callback Mechanismus f r die L sch Eintrage Speicher und Update Operationen bereitgestellt 1 Eine Erkl rung dieser XML Datei folgt im Abschnitt 5 10 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 58 139 TimeStampable Objekten die die Schnittstelle TimeStampable implementieren wird ein Zeitstempel zugewiesen Dies ist f r das optimistische Transaktionskonzept notwendig Datenbank Konfiguration Es folgt die verwendete XML Datei database xml die die Konfigurationsdaten f r die Datenbank MySQL beinhaltet lt DOCTYPE databases PUBLIC EXOLAB Castor JDO Configuration DTD Version 1 0 EN http castor exolab org jdo conf dtd gt lt database name castordiplom engine mysql gt lt driver url jdbe mysaql llocalhost castordiplom class name com mysql jdbc Driver gt lt param name user value diplom gt lt param name password value diplom gt lt driver gt lt mapping href mapping xml gt lt database gt Dem Wurzelement database werden die beiden Elemente name und engine bergeben name f hrt die verwendete Datenb
10. die der rollback Vorgang in Anspruch genommen hat 3 In Abschnitt 2 2 1 4 wurden die Regeln f r die Erstellung der PrimaryKey Klassen eingef hrt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 101 139 2063 2214 2333 Fazit Durch Aufruf der Methode makePersistentAll list wechseln alle sich in der List befindlichen Objekte vom Zustand transient in den Zustand persistent new Durch Aufruf der Methode commit wird der komplette Objektgraph durchlaufen und alle von diesen Objekten aus referenzierten Objekte Eigenschaft Persistenz durch Erreichbarkeit als persistent deklariert und in der zugrunde liegenden Datenbank gespeichert Nun wechseln die abgespeicherten Objekte in den Zustand hollow Wird die aktuelle Transaktion durch Aufruf der Methode rollback abgebrochen so wechselt dass sich im Zustand persistent new befindliche Objekt wieder in den Zustand transient In Relation zu der Anzahl der zu speichernden Objekte ist eine gute Laufzeit zu erkennen 4 4 5 2Delete Operation Die n sich im Speicher befindlichen Primary Objekte wurden innerhalb einer Transaktion gel scht n Primary Objekte werden in der Datenbank gel scht Connector J V3 0 Anzahl ms 7822 10917 17246 33550 200 69764 99459 E10 Primary Objekte E20 Primary Objekte E 30 Primary Objekte 0150 Prim ary Objekte 01100 Prim ary Objekte H 200 Prim ary
11. falls die Applikation in mehreren unabh ngigen Transaktionen mit den gleichen Objekten arbeitet Des weiteren kann der Transaktion Vorgang mit einem callback Modus versehen werden so dass die Applikation benachrichtigt wird falls ein commit Vorgang eingeleitet wird bzw abgeschlossen ist Die Schnittstelle Synchronization definiert zwei Methoden beforeCompletion und afterCompletion int int Parameter javax transaction Status STATUS COMMITED und STATUS _ROLLEDBACR die durch die Methode setSynchronization Synchronization sync an die Transaktion gebunden werden k nnen 2 2 6Abfragen mittels JDOQL Die JDO Spezifikation definiert eine eigene Abfragesprache namens JDOQL Java Data Objects Query Language Anhand von Beispielen gibt dieser Abschnitt dem Leser einen Einblick in JDOQL Durch die Query Schnittstelle wird eine objektorientierte und datenbankneutrale Abfrage zur Verf gung gestellt D h die JDO Implementierung passt die durch die JDOQL Definition erstellten Abfragen an das entsprechende Speichermedium an z B generiert SQL Statements ber JDBC unter Verwendung von relationalen Datenbanken Soll die Speicherung in Dateien bzw XML Dateien erfolgen die keine eigene Abfragesprache definieren so liegt es im Ermessen des JDO Anbieters ob er diese Speichermedien unterst tzt bzw wie er die Abbildung von JDOQL auf diese Speichermedien vornimmt Durch Filter die an die Query bergeben werden l sst sich die Abfrage ei
12. nkler f r die Betreuung und Unterst tzung dieser Diplomarbeit Allen Mitarbeitern des Leittechnik Projektes der Siemens AG Erlangen besonders Gerhard Arzberger und Rainer Stumpf die stets ein offenes Ohr f r Fragen hatten Ein besonderer Dank gilt meinen Eltern die mir finanziell und die ganzen Jahre mit Rat und Tat zur Seite standen Chefarzt Dr Joachim Vogt f r die Vermittlung der T tigkeit als studentische Aushilfe im Schlaflabor des Br derkrankenhauses Trier Die dadurch entstandenen n chtlichen Lernattacken erm glichten mir ein z giges Beenden des Studiums Solveig Schmid f r das Korrekturlesen der englischen Kurzfassung und Julia Bunke f r das Korrekturlesen der gesamten Diplomarbeit Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 5 139 Inhalt 1 Ein i ah he ie a it tl 14 BU a Reh ha a enn eis ape aha lu ea 15 PA E E ah a eS a ce ee 15 ZOD E e ae een inne eee area ees 15 2 2 4 5 Instanzen CallbD ckS cccccccecceeceeeceeeeeceeeueceeueceeuecestesessesessesees 34 2 2 5 Transaktionen unter JDO areara aa daadaa 35 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 2 4 JDO Implementierungen Frameworks 00222222220020200000 002222 anna 41 EAT SIDE meliBO N N ne eines 41 SAT TEEN EI innere
13. nnen Query und Transaction Instanzen bezogen werden e Query Uber eine Query k nnen Abfragen durch JDOQL an die verwendete Datenbank geschickt werden e Transaction Diese Schnittstelle definiert Methoden f r das Transaktionskonzept e InstanceCallbacks Dort wird der Callback Mechnismus definiert dieser wird in Abschnitt 2 2 4 5 n her erl utert e Extent Ein Extent reprasentiert eine Sammlung aller Instanzen einer bestimmten Klasse aus der Datenbank e JDOHelper Statische Methoden werden in dieser Klasse zur Verfugung gestellt uber die die Zust nde der JDO Instanzen abgefragt werden k nnen In Abschnitt 2 2 7 wird die Ausnahmebehandlung von JDO erl utert Die JDO Spezifikation definiert eine eigenen Abfragesprache names JDOQL Diese wird in Abschnitt 2 2 6 erl utert 3 In Abschnitt 2 2 4 4 werden die m glichen Zust nde der JDO Instanzen anhand eines Zustandsdiagramm vorgestellt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 26 139 2 2 3Persistenz Deskriptor Der Persistenz Deskriptor wird w hrend des Enhancement Vorgangs ausgewertet um zu erfahren welche Klassen bzw Attribute persistent in der Datenbank abgelegt werden sollen bzw w hrend der Applikation bei nderungen an diesen mit der Datenbank synchronisiert werden Des weiteren wird er von manchen JDO Anbieter Implementierungen w hrend der Laufzeit der Applikatio
14. required true gt lt sql name intValueBP type integer gt lt field gt lt field name stringValueP type string gt lt sql name stringValueP type varchar gt lt field gt lt field name boolValueP type boolean gt lt sql name boolValueP type bit gt lt field gt lt field name arrayListP type castor Secondary collection arraylist gt lt sql many key primary_ID_list gt lt field gt lt field name hashMapP type castor Secondary collection map gt lt sql many key primary_ID_list gt lt field gt lt field name propertiesP type castor Property collection collection gt lt sql many key primary_ID_prop gt lt field gt lt class gt lt class name castor Secondary extends castor BaseSecondary identity intValueBS depends Primary gt lt map to table tsecondary gt lt cache type type unlimited gt lt field name intValueBS type integer required true gt lt sql name intValueBS type integer gt lt field gt lt field name boolValueS type boolean gt lt sql name boolValueS type bit gt lt field gt lt field name stringValueS type string gt lt sql name stringValueS type varchar gt lt field gt lt field name arrayListS type castor AnotherClass collection arraylist gt lt sql many key secondary_ID_list gt lt field gt lt field name hashMapS type castor AnotherClass collection map g
15. sentiert eine 1 1 Beziehung zu der Klasse SecondarySecond Diese 1 1 Beziehung wird im Persistenz Deskriptor durch Angabe des Schl ssels dependent auf true ausgedr ckt Weiterhin wird durch diese Angabe das kaskadierende L schen aktiviert d h wenn das AnotherClass Objekt gel scht wird wird auch automatisch das von diesem aus referenzierte SecondarySecond Objekt mitgel scht Durch Setzen von primary key auf true wird ausgedr ckt dass das Attribut intValueAc als PrimaryKey der Klasse fungiert lt class identity type application name Primary persistence capable superclass BasePrimary requires extent true gt lt field name hashMapP gt lt map key type java lang Integer value type kododiplom Secondary gt lt extension vendor name kodo key value dependent value true gt lt extension vendor name kodo key key dependent value true gt lt extension vendor name kodo key inverse value primMap gt lt field gt lt class gt Durch Angabe des Parameter persistence capable superclass wird die Oberklasse dieser Klasse bekannt gegeben Unter Verwendung des eigenen Identit tenkonzeptes erben somit auch die Unterklassen die PrimaryKey Klasse der Oberklasse Das Attribut hashMapP der Klasse Primary ist vom Datentyp HashMap Dieser implementiert die Schnittstelle Map und wird durch das Element lt map gt beschrieben Innerhalb dieses Elementes werden durch die Parameter key type und value type die
16. ssen dem impliziten Update von dirty die verschiedenen JDO Zust nde werden weiter unten erkl rt persistenten Instanzen mit der Datenbank durch ein commit das automatische Mapping von Java Datentypen auf die Datentypen der zugrunde liegenden Datenbank 2 2 4 2Unterst tzte Datentypen und Modifikatoren von JDO Eine JDO Instanz kann persistente und nicht persistente werden nicht durch die JDO Infrastruktur verwaltet Attributwerte beinhalten Persistente Attributwerte unterst tzen alle g ltigen Kombinationen von Java Modifikatoren private public protected static transient abstract final synchronized und volatile Aber nicht alle Java Datentypen werden von der JDO Spezifikation als ben tigt vorausgesetzt sondern k nnen von den JDO Anbieter als optionale Eigenschaft implementiert werden Die Wahl der zu untersuchenden JDO Implementierungen f r diese Diplomarbeit ist davon und von den unterst tzenden Datenbanken abh ngig siehe Abschnitt 2 3 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 28 139 Objekte von System Klassen die laufzeitabh ngig sind z B System Thread Runtime des Packages java lang Klassen des Packages java io und java net k nnen nicht persistent abgelegt werden Der Grund ist dass Objekte dieser Klassen aktuelle laufzeitspezifische bzw intern plattformspezifische Informationen beinhalten und diese nicht wieder re
17. tprimaryfirst gt lt id name intValuePF type int column intValuePF gt lt generator class assigned gt lt id gt lt property name boolValuePF column boolValuePF type boolean gt lt property name stringValuePF column stringValuePF type string gt lt class gt lt class name hibernate PrimarySecond table tprimarysecond gt lt id name intValuePS type int column intValuePS gt lt generator class assigned gt lt id gt lt many to one name primaryFirst column primaryFirst_ID class hibernate PrimaryFirst cascade delete gt lt property name stringValuePS column stringValuePS type string gt lt class gt lt class name hibernate BaseSecondary table tbasesecondary gt lt id name intValueBS type int column intValueBS gt lt generator class assigned gt lt id gt lt property name doubleValueBS column doubleValueBS type double gt lt property name stringValueBS column stringValueBS type string gt lt many to one name secondaryFirst column secondaryFirst_ID class hibernate SecondaryFirst cascade all gt lt list role arrayListBS table tsecondarysecond lazy false cascade delete gt lt key column baseSecondary_ID gt lt index column posn type int gt lt one to many class hibernate SecondarySecond gt lt list gt lt joined subclass name hibernate Secondary table tsecondary gt lt key column intValueBS gt lt
18. wechselt nicht dieses sondern das es besitzende first class Objekt in den Zustand dirty Will man auf ein second class Objekt aus der Datenbank zugreifen kann dies nicht direkt durch die Objekt ID geschehen da keine JDO Identit t vorliegt 1 Wird nicht durch die Version 1 0 unterst tzt Steht aber als Spezifikationserweiterung JDO Version 1 0 1 als umzusetzende Eigenschaft an 2 Die verschiedenen Zust nde bzw die Zustands berg nge die eine JDO Instanz w hrend ihrer Lebensdauer einnehmen kann werden auf der n chsten Seite anhand eines Zustandsdiagramm erl utert 3 Komposition Zwischen den Objekten liegt eine Beziehung vor die sich als ist Teil von oder besteht aus beschreiben l sst Beim L schen des Ganzen first class Objekt m ssen auch alle Teile second class Objekt gel scht werden Balz99 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 30 139 sondern man greift auf das es besitzende first class Objekt zu und navigiert durch dessen persistenten Attribute und erreicht somit das second class Objekt Im folgenden werden die Zust nde der JDO Instanzen w hrend ihrer Lebensdauer d h bis sie von der automatischen Speicherverwaltung gel scht werden erl utert 2 2 4 AZust nde der JDO Instanzen Transient Der Zustand transient wurde schon in Abschnitt 2 2 1 3 eingef hrt Persistent New Ein Objekt wechselt vom transiente
19. www orientechnologies com JDO Genie http www hemtech co za jdo index html JORM http Awww objectweb org jorm index html QBeans JDO http www qtech ca gbeansJDO html RexIP JDO http www rexip com products jdo index jsp FrontierSuite JDO http www objectfrontier com jdo EnJin bzw Judo http www versant com Castor JDO http castor exolab org jdo html TJDO http tj do sourceforge net XORM http xorm sourceforge net Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen fur Java Objekte 121 139 6 3 Ergebnisse der Internetrecherche Es folgt eine Tabelle in der die einzelnen JDO Implementierungs Features aufgelistet sind FastObjects e7 Jrelay V2 0 KODO JDO IntelliBO Poet object V2 4 3 V3 1 industries Solarmetric Signsoft Lizenzart Kommerziell Kommerziell Kommerziell Kommerziell Auf Anfrage Professional Standard Professional 999 600 2450Euro Enterprise Enterprise 1999 3000 API explizit erw hnt GUI Entwicklungsumgebung Plug Ins jaa Plug ins va Enhancement Werkzeug ja fa a Ta Tabellenskript Generator ja_ faa an EJB Unterst tzung Nein die Version Nur Nur Enterprise Ja t7 schon Enterprise Ja Unterst tzung JDOQL Ja Identit tskonzept u ee Libelis Technologies Hemisphere Technologies Standard Just Edition Professional 600Euro 199Euro 500 Professional Enterprise 2000Euro 0
20. 2Delete Operation Die n sich im Speicher befindlichen Primary Objekte wurden innerhalb einer Transaktion gel scht n Primary Objekten werden in der Datenbank gel scht Connector J V3 0 Anzahl ms 6250 28944 80420 244940 998741 E10 Primary Objekte E20 Primary Objekte E 30 Primary Objekte 1150 Primary Objekte 01100 Prim ary Objekte Connector J V3 0 Sek Rollback A Zeit in ms in der die sich im Speicher befindlichen Primary Objekte der Methode remove obj bergeben wurden B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Anzahl A B 5088 25593 2211 70213 8635 Fazit Da die sich im Speicher befindlichen Objekte den Zustand transient besitzen muss erst durch Aufruf der Methode update obj der Schnittstelle Database diesen Objekten der Zustand persistent zugeteilt werden so dass diese durch die Methode Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 95 139 remove obj in der Datenbank gel scht werden k nnen Es ist eine exponentielle Laufzeit zu erkennen 4 3 3 3Query Operation n Primary Objekte werden aus der Datenbank gelesen und in einer ArrayList zwischengespeichert Connector J V3 0 Anzahl ms 1890 11810 32750 107441 464145 10 Primary Objekte E20Primary Objekte E30 Prim ary Objekte O 50 Prim ary Objekte 01100 Prim ary Objekte Connec
21. 400000 Zeit ms 200000 zen BEER BE BE BE DE Anzahl Primary Objekte 0 Die Grundeinstellung von intelliBO ist dass jede an der Vererbung beteiligte Klasse in einer eigenen Tabelle abgebildet wird Diese Vorgehensweise wurde bernommen Erbt eine Klasse z B nur ein Attribut ist es ratsam beide Klassen in einer Tabelle manuell abzubilden Die erbende Klasse erbt auch die Objekt ID der Oberklasse d h f r diese Klasse ist bei Verwendung des eigenen Identit tenkonzept keine PrimaryKey Klasse zu erstellen Lediglich bei den CREATE TABLE Statements ist darauf zu achten dass die an der Vererbung beteiligten Klassen bzw die zugeh rigen Tabellen jeweils den gleichen PrimaryKey besitzen Bsp CREATE TABLE Statements von BasePrimary und Primary CREATE TABLE TBASEPRIMARY FINTVALUEBP INT 10 not null FCLASSTYPE VARCHAR 50 FSTRINGVALUEBP VARCHAR 50 FBOOLVALUEBP TINYINT 3 PRIMARY KEY FINTVALUEBP type innoDB 1 War zwar nicht Bestandteil der Diplomarbeit wurde aber interessehalber ausprobiert Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 82 139 CREATE TABLE TPRIMARY FINTVALUEBP INT 10 not null FBOOLVALUEP TINYINT 3 FSTRINGVALUEP VARCHAR 50 FPROPERTIESP BLOB PRIMARY KEY FINTVALUEBP type innoDB In der Spalte FCLASSTYPE der Tabelle TBASEPRIMARY wird der Klassenname der von dieser erbenden Klasse
22. ATTLIST field name CDATA REQUIRED gt lt ATTLIST field persistence modifier persistent transactional none IMPLIED gt lt ATTLIST field primary key truelfalse false gt lt ATTLIST field null value exception default none none gt lt ATTLIST field default fetch group true false IMPLIED gt lt ATTLIST field embedded true false IMPLIED gt lt ELEMENT collection extension gt lt ATTLIST collection element type CDATA IMPLIED gt lt ATTLIST collection embedded element true false IMPLIED gt lt ELEMENT map extension gt lt ATTLIST map key type CDATA IMPLIED gt lt ATTLIST map embedded key truelfalse IMPLIED gt lt ATTLIST map value type CDATA IMPLIED gt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 138 139 lt ATTLIST map embedded value true false IMPLIED gt lt ELEMENT array extension gt lt ATTLIST array embedded element true false IMPLIED gt lt ELEMENT extension extension gt lt ATTLIST extension vendor name CDATA REQUIRED gt lt ATTLIST extension key CDATA IMPLIED gt lt IATTLIST extension value CDATA IMPLIED gt Abbildung 29 DTD File jdo dtd von der JDO Spezifikation 6 15Quellenverzeichnis Baum94 Baumeister M Ein Transaktionskonzept f r die deduktive Objektbank ConceptBase Diplomarbeit Fachbereich Informatik RWTH Aachen 1994 http www iS infor
23. Abfrage an die Datenbank erfolgte und alle Hauptobjekte in einer ArrayList gespeichert wurden B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Anzahl _ A TB 1251 1162 5328 2454 Fazit Die Query Operation wurde innerhalb einer aktiven Transaktion ausgef hrt Bei intelliBO ist es auch m glich dass Query Operationen ohne Transaktionen ausgef hrt werden k nnen Dies muss in der Klasse ConfJDO explizit durch Setzen des Flag nonTransactionalRead auf true bei der Konfiguration der Persistence ManagerFactory erfolgen Zwischen den beiden verwendeten JDBC Treibern ist ein vernachl ssigbarer Unterschied hinsichtlich der Performance der Query Operation zu erkennen Nach Ausf hrung der Query Operation wechseln die ausgelesenen Objekte von dem Zustand hollow in den Zustand persistent clean Findet nun keine nderung an den ausgelesenen Objekten statt so wechselt der Zustand nach Aufruf der Methode commit oder rollback erneutin den Zustand hollow 4 1 3 4Update Operation Allen Objekten der Klasse SecondaryFirst wurde ein neuer Bezeichner zugewiesen d h die sich im Speicher befindlichen Objekte wurden verandert und somit mit der Datenbank synchonisiert Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 80 139 Die Anzahl bezieht sich auf die in der Datenbank gespeicherten Primary Objekten Die daraus resultierende Anzahl
24. Cache von Instanzen der durch JDO gef llt wird sobald eine Instanz durch die Applikation referenziert wird 1 Document Type Definition Dort wird die Struktur eines XML Elementes definiert Die DTD beschreibt die unterst tzten Elemente deren Attribute sowie die Elemente welche innerhalb des Dokumentes in anderen Elementen auftreten d rfen Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 27 139 Java Virtual Machine C Mapping function Instantiated persistent objects Persistent w an L AF y O Transient objects Abbildung 3 JDO Transparenz Roos02 Die Applikation teilt der JDO Implementierung mit welche Objekte aus der Datenbank gelesen oder in die Datenbank abgespeichert werden sollen Transparent f r den Anwender liest dann die JDO Implementierung diese Objete aus der Datenbank aus oder speichert sie in der Datenbank ab Da persistente Objekte in einer Datenbank gespeichert oder aus dieser geladen werden existiert eine Mapping Funktion zwischen dem eigentlichen Objekt und der Abbildung in der Datenbank Diese Mapping Funktion wird nicht durch den JDO Standard spezifiziert sondern unterliegt dem Entwickler Transparente Persistenz wird nach Roos02 wie folgt beschrieben die Illusion dass alle persistenten Objekte im Speicher sofort verf gbar sind und nicht erst aus der Datenbank gelesen werden m
25. Ganzes gespeichert wird Objektorientierte Paradigmen werden von OODBMS unterst tzt Transaktionskonzept wird unterst tzt Nachteile Erlernen einer speziellen Anfragesprache OQL Zugriff auf persistente Objekte bzw deren Attribute kann ausschlie lich innerhalb von Transaktionen geschehen Wechsel des OODBMS kann zu Problemen f hren da ODMG kein Standard f r das Transaktionskonzept definiert so dass jeder Hersteller seine eigene API zur Verf gung stellt Da mehr Informationen in der Datenbank hinterlegt werden m ssen haben OODBMS einen h heren Speicherverbrauch als RDBMS 2 2 Java Data Objects Die in Abschnitt 2 1 erw hnten Nachteile der Persistenzm glichkeiten von Java Objekten gaben Ansto zur Entwicklung eines neuen Standards f r transparente Persistenz in Java Es soll eine Java API zur plattform und datenspeicherunabh ngigen Persistenz von Objekten entstehen 1999 schlossen sich f hrende Java Experten und Datenbank Hersteller darunter SUN IBM und Oracle unter F hrung von Craig Russell der Firma SUN zusammen um diesen neuen Standard zu spezifizieren Im Juli 1999 entstand der Java Specification Request for JDO JSR12 Im Mai 2000 wurde ein Vorabentwurf und ein Jahr sp ter die Version 1 0 von JDO ver ffentlicht Im M rz 2002 wurde diese Version als offizieller Standard 1 Object Query Language erm glicht Zugriff auf objektorientierte Datenbanken Sie kann als eigenst ndige interaktive Datenb
26. Kapitel werden g ngige Persistenzl sungen f r Java Objekte vorgestellt und Gr nde genannt wieso ein neuer Standard names JDO gefordert wurde Des weiteren wird ein kurzer berblick ber die JDO Spezifikation gegeben die Selektions bzw Evaluierungskriterien sowie die zu untersuchenden JDO Implementierungen bzw Objekt Relationale Abbildungswerkzeuge n her erl utert 2 1 berblick Dieser Abschnitt beschreibt die zur Verf gung stehenden M glichkeiten zur Speicherung von Objekten in Java Es wird kurz die jeweilige Technik erl utert sowie deren spezifischen Vor und Nachteile aufgelistet Generell versteht man unter Persistenz dass Objekte nicht nur zur Laufzeit sondern auch nach dem Beenden der Java Virtual Machine JVM zur Verf gung stehen 2 1 1Dateisystem und Serialisierung Eine sehr einfache M glichkeit zur Speicherung von Objekten unter Java besteht darin dass man die Attribute der Objekte direkt in Dateien speichert z B in Properties Dies ist aber nur zur Speicherung einfacher Informationen geeignet wie z B URL einer Datenbank Username Passwort usw Unter Serialisierung versteht man dass das zu speichernde Objekt und alle referenzierten Objekte in einen Bytestrom geschrieben werden Dieses kann dann lokal auf der Platte in einer Datei abgelegt oder z B mittels RMI bertragen werden und bei Bedarf wird aus dieser Datei die Objektstruktur wiederhergestellt Ein Objekt kann serialisiert werden wenn die Klasse
27. Key Klasse verwendet werden kann Damit sind folgende Datentypen gemeint boolean byte short int long char float und double Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 25 139 Eigenschaft von JDO ist wird der interessierte Leser auf die Spezifikation Russ02 verwiesen 2 2 2Klassen Interfaces und Packages Die JDO Spezifikation besteht aus 2 Packages jdox jdo spi und jdox jdo Das Paket jdox jdo spi beinhaltet alle Klassen und Schnittstellen die intern von der JDO Implementierung verwendet werden Da der Anwender darauf keinen Zugriff hat wird der interessierte Leser auf Russ02 verwiesen Im Paket jdox jdo befinden sich Klassen Schnittstellen und Exceptions mit denen der Anwender konfrontiert wird d h die dort definierten Schnittstellen werden von dem jeweiligen JDO Anbieter implementiert und stehen durch die der JDO Implementierung mitgelieferten API dem Anwender zur Verf gung Dieser Abschnitt gibt einen berblick auf die wichtigsten Schnittstellen und Klassen des Paketes jdox 7jdo e PersistenceManagerFactory ber Parameter Datenbankkonfigurationen Transaktionskonzept usw siehe Russ02 S 75ff wird diese Schnittstelle konfiguriert Sie dient als Quelle f r 1 n PersistenceManager e PersistenceManager Instanzen dieser Schnittstelle kapseln die JDBC Verbindung zu der verwendeten Datenbank ber einen PersistenceManager k
28. MySQL Tabellentyp Fremdschlussel hat seinen eigenen Buffer Pool um Daten und Indexe im Speicher zu cachen gt bessere Performance InnoDB erkennt automatisch Deadlocks w hrend einer Transaktion und f hrt automatisch ein rollback aus ist gegen ber MyISAM sicherer d h wenn MySQL zusammenbricht oder es zu Hardware Problemen kommt erh lt man die Daten durch automatisches Recovery oder von einem Backup zugeh rige Transaktionslog Dateien zur ck 3 1 2Die Datenbank Hypersonic SQL HSQL In die Evaluierung wurde noch eine weitere Datenbank names HSQL eingezogen Hypersonic SQL ist eine in Java geschriebene relationale Open Source Datenbank und kann unter http hsqldb sourceforge net bezogen werden Unterst tzt werden in memory und plattenbasierte Tabellen Die Datenbank kann als Server oder aber 1 Die F higkeit dass die Datenbank nach einem Systemabsturz die Arbeit ohne Datenverlust wiederaufnimmt 2 Dt Verklemmung wenn z B eine Sperre auf zwei Objekten vorliegt und gegenseitig versucht wird auf das dann gesperrte Objekt zu zugreifen Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 44 139 eingebettet in der gleichen Java Virtual Machine wie die sie verwendende Java Applikation ausgef hrt werden Fremdschl ssel und Transaktionen werden unterst tzt Eine detaillierte Installations bzw Konfigurationsanleitung ist in Abschnitt
29. Obje kte E 300 Prim ary Objekte Connector J V3 0 Sek Rollback A Zeit in ms in der die sich im Speicher befindlichen Primary Objekte der Methode deletePersistentAll List bergeben wurden 1 Der Begriff Persistenz durch Erreichbarkeit wurde in Abschnitt 2 2 1 3 eingef hrt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 102 139 B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Anzahl A 20 30 50 100 200 Fazit Durch Aufruf der Methode deletePersistentAll List wird den Objekten der Zustand persistent clean entzogen und sie wechseln in den Zustand persistent deleted Wird nun die aktuelle Transaktion erfolgreich durch Aufruf der Methode commit beendet so wechseln die sich in der List befindlichen Objekte in den Zustand transient Wird hingegen die aktuelle Transaktion durch Aufruf der Methode rollback abgebrochen so wechseln die Objekte von dem Zustand persistent deleted erneut in den Zustand hollow Auch hier ist in Relation zu der Anzahl der zu speichernden Objekte eine gute Laufzeit zu erkennen 4 4 5 3Query Operation n Primary Objekte werden aus der Datenbank gelesen und in einer ArrayList zwischengespeichert Connector J V3 0 E10 Primary Objekte E 20Primary Objekte E 30 Primary Objekte O 50 Prim ary Obje kte 01100 Prim ary Objekte E 200 Primary Objekte E 300 Primary Objekt
30. Spezifikation von JDO Russ02 zu finden 1 Der Begriff second class Objekt wird im Abschnitt 2 2 4 3 eingef hrt Ist die automatische Speicherverwaltung von Java 3 Durch Aufruf der Methode commit der Schnittstelle Transaction wird eine Transaktion beendet und die nderungen an diesem Objekt mit der Datenbank synchronisiert Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 237 139 2 2 1 4Das JDO Identit tenkonzept Objekt Identit t ist notwendig um bestimmte Instanzen aus der Datenbank zu suchen laden bzw die Eindeutigkeit der Objekte in der JVM zu garantieren Java unterst tzt zwei Arten von Identit t equality und equivalence Equality wird durch den Operator eingeleitet und liefert true wenn zwei Referenzen auf das gleiche Objekt im Speicher verweisen Equivalence vergleicht anhand der Attributwerte zwei Objekte und wird durch die equals Methode eingeleitet Um die Transparenz von JDO auf existierende Objekt Modelle aufrecht zu erhalten d h unter Verwendung von JDO die existierenden Objekt Modelle nicht ver ndern zu m ssen definiert die Spezifikation ein eigenes Identit tenkonzept Es werden drei Arten von Identit t 1 die Datenbank verwaltet die Identit t der Objekte automatisch Datenbank Identit t 2 ein durch den Entwickler explizit programmiertes Identit tskonzept Applikation Identit t und 3 ein kurzlebiges I
31. Tool k nnen direkt SQL Statements auf der Datenbank ausgef hrt werden 4 Des weiteren unter http Awww mysql com downloads api jdbc html den MM JDBC Treiber oder den offiziellen JDBC Treiber Connector J http www mysql com downloads api jdbc stable html f r MySQL herunterladen und entpacken 5 Im Standardinstallationsverzeichnis c mysql befindet sich im Directory bin der MySQL Serverd mon mysqld max nt exe und der MySQL AdminManager winmysqladmin exe 6 Mit Hilfe eines Editors muss man jetzt noch die Datei ny ini im Windows Verzeichnis anpassen Wenn man den Tabellentyp innoDB verwendet muss man von Hand zwei neue Verzeichnisse anlegen c ibdata und c iblogs die die innoDB Daten und die dazugeh rigen Logfiles beinhalten Auszug my ini mysald basedir C mysal datadir C mysal data Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 123 139 innoDB Konfigurationen Verzeichnisse m ssen vorher von Hand angelegt werden innodb_data_home_dir c ibdata innodb_log_group_home_dir c iblogs innodb_log_arch_dir c iblogs zu Beginn wird ein einzelnes File mit einer Gr sse von 50MB angelegt und durch autoextend automatisch bei vollem Speicher in 8MB Schritten vergr ert wird innodb_data_file_path ipdata1 50M set variable innodb_buffer_pool_size 100M set variable innodb_additional_ mem_pool_si
32. XXXX vendor name ssibo gt Die jeweils verwendete Abbildungsregel wird durch Ersetzen der XXXX durch entweder direct oder one to one oder one to many oder serial oder code oder many to many eingeleitet Verwendet wurden die ersten vier Eine Erklarung anhand eines Beispiels uber direct one to many und serial erfolgte schon in Abschnitt 3 2 1 2 daher wird an dieser Stelle kurz die 1 1 Assoziation erlautert One to one lt field name primaryFirst gt lt extension key jdbc vendor name ssibo gt lt extension key mapping value one to one vendor name ssibo gt lt extension key element type value prototype model PrimaryFirst vendor name ssibo gt lt extension gt lt extension gt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 83 139 lt field gt One to one bedeutet dass ein Objekt eine Referenz auf ein anderes Objekt h lt Oben ist ein Auszug aus dem Persistenz Deskriptor der Klasse PrimarySecond aufgelistet Ein Objekt dieser Klasse h lt eine Referenz auf ein Objekt der Klasse PrimaryFirst Probleme beim Java Datentyp Properties Wird der Java Datentyp Properties verwendet so wird dieser unter Zuhilfenahme des Java Serialisierungsmechanismus in der Datenbank als SQL Datentyp BLOB gespeichert Das daraus resultierende Problem ist dass nicht gezielt nach einem Wert anhand eines Schl ssels des Prop
33. den Schl ssel mapping werden die Abbildungsregeln der einzelnen Attribute auf Spalten in den Tabellen definiert Der Wert direct sagt aus dass das Attribut stringValueP der Klasse primary direkt auf eine Spalte in der Tabelle abgebildet wird lt field name hashMapP gt lt map key type java lang Integer value type prototype model Secondary gt lt extension key jdbc vendor name ssibo gt lt extension key mapping value one to many vendor name ssibo gt lt extension key result type value java util HashMap vendor name ssibo gt 1 Bei gr eren Projekten werden die Klassen der Ubersichtlichkeit in Pakete aufgeteilt Die Klasse Extent wurde im Abschnitt 2 2 2 eingef hrt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 50 139 lt extension key element type value prototype model Secondary vendor name ssibo gt lt extension key cascade delete value true vendor name ssibo gt lt extension gt lt extension gt lt field gt Das Attribut hashMapP der Klasse Primary ist vom Datentyp HashMap Dieser implementiert die Schnittstelle Map und wird durch das Element lt map gt beschrieben Eine Map beschreibt eine Wert Schl ssel Beziehung und stellt eine 1 N Beziehung one to many dar Durch das Attribut key type des Elementes lt map gt wird der Datentyp der Schl ssel der Map angegeben und durch value type der Datenty
34. der Datenbank synchronisiert Die Anzahl bezieht sich auf SecondaryFirst Objekte Connector J V3 0 Anzahl ms 10 200 1252 20 400 2264 E10 Primary Objekte E20 Primary Objekte E 30 Primary Objekte O50 Prim ary Obje kte 11100 Prim ary Objekte 30 600 3295 50 1000 5358 Diplomarbeit Connector J V3 0 Sek Selektion und Evaluierung datenbankbasierter Persistenzl sungen fur Java Objekte 112 139 100 2000 Rollback A Zeit in ms in der die nderung durchgef hrt wurde B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Durch Aufruf der Methode setString stringValue wird allen SecondaryFirst Objekten ein neuer Bezeichner zugewiesen Dadurch wechseln die Objekte in den Zustand persistent dirty Nun liegt ein inkonsistenter Zustand zwischen den Werten in den Objekten und der Datenbank vor Wird nun die aktuelle Transaktion durch Aufruf der Methode commit erfolgreich beendet so wechselt der Zustand der Objekte von persistent dirty in den Zustand hollow und die nderungen werden in der Datenbank abgespeichert Wird die aktuelle Transaktion durch Aufruf von rollback abgebrochen so findet der gleiche Zustandswechsel statt aber die nderungen werden verworfen d h sie werden nicht in der Datenbank abgespeichert Hier ist in Relation zu der Anzahl der zu speichernden Objekten eine lineare Laufzeit zu erkennen 4 5 3 5Speicherverbrauch Es folgt eine Auflistung des Spe
35. die leere Schnittstelle java io Serializable implementiert Vorteile sehr einfache Handhabung der Anwender braucht sich um die Codierung bzw Decodierung des Java Objektmodells keine Gedanken zu machen Diese Technik verl uft vollkommen transparent im Hintergrund fester Bestandteil ab der Java 1 1 Version 1 Remote Method Invocation ist ein rechner bergreifendes Objekt zu Objekt Kommunikationskonzept in Java Es erlaubt auf einem anderen Rechner bzw in einer anderen JVM Methoden von Objekten aufzurufen als w ren diese auf dem eigenen Rechner Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 14 139 Nachteile es steht kein Transaktionskonzept zur Verf gung Mehrbenutzerzugriff wird nicht unterst tzt Anfragen zum Finden einzelner Objekte werden nicht unterst tzt es muss immer die komplette Objektstruktur aus der Datei eingelesen werden da keine normierte Abfragesprache wie z B SQL bei relationalen Datenbanksystemen existiert ndert sich ein einzelnes Attribut eines Objektes so muss immer das ganze Objekt serialisiert bzw deserialisiert werden 2 1 2Relationale Datenbank Management Systeme RDBMS 1970 wurde das relationale Modell basierend auf den mathematischen Konzepten der Relationen Algebra von Edgar F Codd definiert Es ist das weit verbreiteste Datenbankmodell Der Grund liegt in seiner Einfachheit d h es gibt
36. element type lidodiplom AnotherClass gt lt extension vendor name libelis key collection type value java util ArrayList gt lt extension vendor name libelis key sql reverse value javaField secList gt lt field gt lt class gt lt class identity type application name SecondaryFirst objectid class lidodiplom SecondaryFirstKey requires extent true gt lt extension vendor name libelis key sql name value tsecondaryfirst gt lt field name intValueSF primary key true gt lt class gt lt class identity type application name SecondarySecond objectid class lidodiplom SecondarySecondKey requires extent true gt lt extension vendor name libelis key sql name value tsecondarysecond gt lt field name intValueSS primary key true gt lt class gt lt package gt lt jdo gt Abbildung 27 Persistenz Deskriptor f r das Objektmodell unter Verwendung von Lido Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 136 139 6 13SQL Skript f r die Datenbank lidodiplom create table tsecondarysecond intValueSS int 10 not null stringValueSS varchar 50 bs_intValueBS int primary key intValueSS type innodb alter table add index tsecondarysecond bs_intValueBS create table tsecondaryfirst intValueSF int not null boolValueSF char 1 stringValueSF varchar 50 primary key i
37. intValueAC type innodb alter table tanotherclass add index secmap_intvaluebs alter table tanotherclass add index seclist_intvaluebs alter table tanotherclass add secondarysecond_intValueSS index create table tsecondary_arraylistbs lidofk_intValueBS int not null lidovalue_intValueSS int lidopos double primary key lidofk_intValueBS type innodb alter table tsecondary_arraylistbs add index lidofk_intValueBS alter table tsecondary_arraylistbs add index lidopos create table tprimary_propertiesp lidofk_intValueBP int not null lidokey varchar 50 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 137 139 stringValueBP varchar 50 boolValueP char 1 stringValueP varchar 50 primary key intValueBP lidovalue varchar 50 primary key lidofk_intValueBP lidokey type innodb type innodb alter table tprimary_propertiesp add index lidofk_intvaluebp alter table tprimary_propertiesp add index lidokey create table tprimary_arraylistp create table tprimary_arraylistbp lidofk_intValueBP int not null lidovalue_intValuePS int lidopos double primary key lidofk_intValueBP lidofk_intValueBP int not null lidovalue_intValueBS int lidopos double primary key lidofk_intValueBP type innodb type innodb alter table tprimary_arraylistbp add index lidofk_intvaluebp alter table tprim
38. lt field gt Das Attribut arrayListP der Klasse Primary ist vom Datentyp ArrayList und implementiert die Schnittstelle Collection Durch Angabe des Elementes lt collection gt wird der Datentyp der in dieser ArrayList verwalteten Elemente angegeben Die ArrayList stellt eine 1 N Beziehung dar In diesem Fall wird das Mapping explizit durch das Element lt reference gt angegeben d h es wird ein Fremdschl ssel FTPRIMARY ARRAY in der Tabelle TSECONDARY definiert der in Relation mit dem Schl ssel FINTVALUEBP der Tabelle TPRIMARY steht Hierbei trat ein Problem auf welches im Abschnitt 4 1 5 erl utert wird lt field name propertiesP persistence modifier persistent gt lt extension key jdbc vendor name ssibo gt lt extension key mapping value serial vendor name ssibo gt lt extension key table name value TPRIMARY vendor name ssibo gt lt extension key field name value FPROPERTIESP vendor name ssibo gt lt extension key sql type value BLOB vendor name ssibo gt lt extension gt lt extension gt lt field gt Das Attribut propertiesP der Klasse Primary ist vom Datentyp Properties Es wird mit Hilfe des Java Serialisierungsmechanismus in der Datenbank in der Tabelle Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 51 139 TPRIMARY in der Spalte FPROPERTIESP vom SQL Datentyp BLOB abgespeichert Der Nachteil dieser V
39. many to one gt lt one to one gt und lt many to many gt durch das Attribut cascade delete aktiviert 4 2 8Graphische Entwicklungsumgebung Hibernate liegt keine graphische Entwicklungsumgebung bei sondern Kommandozeilen basierte Hilfswerkzeuge auf die in den vorherigen Abschnitten schon eingegangen wurde 4 2 9Abfragesprache n Hibernate definiert eine eigene Abfragesprache um auf Objekte in der Datenbank zuzugreifen Sie stellt eine Mischung zwischen SQL und einer objektorientierten Syntax dar 4 2 10Unterst tzte Systemumgebung Hibernate ist in der eigenst ndigen und in der eingebetteten Umgebung lauff hig siehe Abschnitt 2 2 1 1 4 3 Castor JDO 4 3 1Integrationsaufwand f r bereits existierende Klassen Wie schon in Abschnitt 3 2 3 Implementierung Castor JDO erw hnt mussten einige nderungen an den vorhandenen Klassen vorgenommen werden Daher wird der interessierte Leser auf diesen Abschnitt mit Unterabschnitt Durchgef hrte nderungen am Prototyp verwiesen Zur dynamischen SQL Code Erzeugung nutzt Castor JDO w hrend der Laufzeit die Java Reflection API um Informationen ber die Daten der Objekte zu erhalten Bei der Erstellung der zu speichernden Klassen ist daruaf zu achten dass diese einen Default Konstruktor und get set Methoden nach der JavaBeans Stilform besitzen 4 3 2Hilfswerkzeuge Castor JDO liegen keine graphische Entwicklungsumgebung sowie keine Kommandozeilen basierten Hilf
40. name kododiplom gt lt class identity type application name AnotherClass objectid class AnotherClassKey requires extent true gt lt extension vendor name kodo key table value tanotherclass gt lt extension vendor name kodo key lock column value none gt lt extension vendor name kodo key class column value none gt lt field name secondarySecond gt lt extension vendor name kodo key dependent value true gt lt field gt lt field name intValueAC primary key true gt lt class gt Durch das Attribut name des Elementes lt package gt wird der Name des Package in welchem sich die Klasse befindet eingef hrt Die Parameter identity type name und objectid class des Elementes lt class gt sagen aus dass die Klasse AnotherClass durch das eigene Identitatenkonzept identity type application verwaltet wird Die Primary Key Klasse AnotherClassKey Ubernimmt dies Durch den Bytecode Enhancement Vorgang wird dieser Klasse automatisch die Schnittstelle PersistenceCapable hinzugef gt Durch setzen von requires extent true ist es m glich Uber einen Extent auf diese Klasse zuzugreifen Durch das Attribut vendor name kodo des Elementes lt extension gt werden KODO spezifische Konfigurationen vorgenommen Dies geschieht als Schl ssel key Wert value Paar Der Schl ssel table sagt aus dass die Klasse AnotherClass auf die Tabelle tanotherclass abgebildet wird 1 D
41. so werden f r jede zu speichernde Klasse ein CREATE TABLE Statement erzeugt welches f r MySQL jedoch ein paar Fehler aufwies Bsp erzeugtes SQL Skript zum Anlegen der Tabelle TPRIMARY CREATE TABLE TPRIMARY FINTVALUEBP INT 10 FBOOLVALUEP TINYINT 3 FSTRINGVALUEP VARCHAR 255 FDOUBLEVALUEP DOUBLE 17 FPROPERTIESP VARCHAR 255 PRIMARY KEY FINTVALUEBP Wird bei MySQL ein PrimaryKey angegeben so muss das zugeh rige Attribut in diesem Fall FINTVALUEBP explizit auf not null gesetzt werden Ein weiteres Problem bestand darin dass durch die Standard Einstellung von intelliBO der Java Datentyp double nicht korrekt auf den SQL Datentyp double abgebildet wird Entweder wird als SQL Datentyp nur double angegeben oder die Angabe des Formates muss in der Form n m erfolgen n bedeutigt die Gesamtstellenanzahl und m die von n beanspruchte Anzahl von Nachkommestellen Dieses Problem kann behoben werden wenn in der Datei dbsupport mysql xml zu finden in dem Verzeichnis C Signsoft intelliBO3 lib 1 Sagt aus dass diese Spalte auf jeden Fall einen Wert ungleich NULL beinhalten muss und durch die Angabe PrimaryKey dass dieser Wert von allen anderen Werten in dieser Spalte verschieden sein muss Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 75 139 der intelliBO Installation von Hand Korrekturen an den Abbildungsregeln von den Java Datentypen a
42. type string gt lt property name boolValueBP column boolValueBP type boolean gt lt list role arrayListBP table tprimarysecond lazy false cascade delete gt lt key column basePrimary_ID gt lt index column posn type int gt lt one to many class hibernate PrimarySecond gt lt list gt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 125 139 lt joined subclass name hibernate Primary table tprimary gt lt key column intValueBP gt lt property name stringValueP column stringValueP type string gt lt property name boolValueP column boolValueP type boolean gt lt list role arrayListP table tsecondary lazy false cascade delete gt lt key column primary_ID_list gt lt index column posn type int gt lt one to many class hibernate Secondary gt lt list gt lt map role propertiesP table tpropertiesp lazy false cascade delete gt lt key column primary_ID_prop gt lt index column keyp type string gt lt element column valuep type string gt lt map gt lt map role hashMapP table tsecondary lazy false cascade delete gt lt key column primary_ID gt lt index column hashMapPKey type int gt lt one to many class hibernate Secondary gt lt map gt lt joined subclass gt lt class gt lt class name hibernate PrimaryFirst table
43. verwendeten Datentypen der Schl ssel bzw zugeh rigen Werte der HashMap bekannt gegeben ber die Schl ssel Wert Paare value dependent und key 1 In der Datenbank wird das kaskadierende L schen ber die Fremdschl sselbeziehungen zwischen den beteiligten Tabellen erreicht Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 68 139 dependent jeweils true des Elementes lt extension gt wird das kaskadierende L schen f r die Schl ssel und Werte der HashMap aktiviert Durch den Schl ssel inverse wird die bidirektionale Beziehung zwischen den Klassen Primary und Secondary eingef hrt Im obigen Beispiel bedeutet dies dass die Klasse Secondary ein Attribut primMap des Datentyp Primary besitzt welches initialisiert wird wenn die HashMap durch die Methode addHashMapP Object obj mit den entsprechenden Secondary Objekten gef llt wird public void addHashMapP Object obj hashMapP put new Integer Secondary obj getIntValueBS obj Secondary obj setPrimMap this Im folgenden wird das Mapping einer ArrayList erl utert lt field name arrayListP gt lt collection element type kododiplom Secondary gt lt extension vendor name kodo key inverse value primList gt lt extension vendor name kodo key element dependent value true gt lt field gt Durch das Attribut element type des Elementes lt collection gt ArrayList
44. vieler Softwareprojekte Speziell f r Java Objekte existieren verschiedene Ans tze mit spezifischen Vor und Nachteilen Ziel dieser Diplomarbeit ist es anhand geeigneter Prototypen standardisierte Persistenzl sungen f r Java Objekte in Datenbanken zu untersuchen Die Anforderungen f r die zu erstellenden Prototypen resultieren aus einem laufenden Projekt im Leittechnikumfeld des Gesch ftsbereich Power Generation der Siemens AG Erlangen Hierbei sollen insbesondere JDO basierte Java Data Objects und objekt relationale Abbildungs Technologien evaluiert und Vor bzw Nachteile aufgezeigt werden Die JDO Spezifikation stellt eine einheitliche API Application Programming Interface f r persistentes Speichern von Java Objekten zur Verf gung Persistenzframeworks stellen eine transparente Persistenz f r den Anwendungsentwickler dar d h sie k mmern sich automatisch um die Transformation der Java Objekte auf relationale Datenbanken Hinsichtlich Integrationsaufwand f r bereits existierende Klassen Performance Ressourcen Verbrauch Laufzeitschwankungen Integration objekt orientierter Paradigmen usw wurden folgende Frameworks n her untersucht JDO Implementierung intelliBO Fa Signsoft Sign02 JDO Implementierung Kodo Fa Solarmetric Kodo03 JDO Implementierung Lido Fa Libelis Lido03 Objekt Relational Mapper Castor JDO open source Cast03 Objekt Relational Mapper Hibernate open source Hibe03 In Kapi
45. von SecondaryFirst Objekten steht jeweils in Klammern MM SQL Treiber V2 0 4 Anzahl 10 200 ao LP E Ze i Connector J V3 0 10 Primary Objekte E20Primary Objekte 1150 Primary Objekte 01100 Primary Objekte Anzahl ms 10 200 560 20 400 1160 50 1000 1582 100 2000 2794 Rollback MM JDBC Treiber Sek Connector J V3 0 Sek A Zeit in ms die die nderung an den SecondaryFirst Objekten ben tigte B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Anzahl A BJ 10 300 50 20 460 71 50 761 110 100 3876 220 Fazit Auch bei der Update Operation ist zwischen den beiden verwendeten JDBC Treibern ein vernachl ssigbarer Unterschied zu erkennen Die Objekte wechseln vom Zustand hollow in den Zustand persistent clean und verbleiben in diesem solange keine nderungen an den ausgelesenen Objekten durchgef hrt werden Durch Aufruf der Methode setString stringValue wird allen ausgelesenen SecondaryFirst Objekten ein neuer Bezeichner zugewiesen Dadurch wechseln die Objekte in den Zustand persistent dirty Nun liegt ein inkonsistenter Zustand zwischen den Werten in den Objekten und der Datenbank vor Wird nun die aktuelle Transaktion durch Aufruf der Methode commit erfolgreich beendet so wechselt der Zustand der Objekte von persistent dirty in den Zustand hollow und die nderungen werden in der Datenbank abgespeichert Wird die ak
46. wurden Tests mit dem JDBC Treiber von Mark Matthews in der Version 2 0 4 MaMa02 und Tests mit dem offiziellen JDBC Treiber von MySQL Connector J V3 0 Conn03 durchgef hrt 2 IntelliBO unterst tzt eine Vielzahl von Datenbanken mit speziellen Treibern die zus tzliche Funktionen zur Verf gung stellen und bekannte Probleme mit den Originaltreibern umgehen Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 471139 3 2 1 1Entity Relationship Modell Es folgt ein Entity Relationship Modell der Tabellenbeziehungen der Datenbank diplom auf denen die Evaluierung basierte Die Prim rschl ssel sind fett unterstrichen und die Fremdschl ssel fett dargestellt tprimarysecond PK intValuePS arrayListBP basePrimary_ID stringValuePS primaryFirst_ID tbaseprimary PK intValueBP tsecondaryfirst stringValueBP booValueBP PK intValueSF 1 stringValueSF boolValueSF tprimary intValueBP boolValueP stringValueP propetiesP hashMapP tsecondary 1 intValueBS stringValueS boolValueS 1 primary_ID 0 N 0 1 PK tprimaryfirst intValuePE boolValuePF stringValuePF tbasesecondary intValueBS stringValueBS boolValueBS secondaryFirst_ID arrayListBS tsecondaryse
47. 0 0 4 5 3 3Query Operatio yee n Primary Objekte werde zwischengespeichert Connector J V3 0 800 0 1000 0 10 Primary Objekte E20Primary Objekte E 30 Primary Objekte 0150 Primary Objekte 01100 Primary Objekte 600 0 400 0 200 0 Diplomarbeit 0 0 Connector J V3 0 Sek Selektion und Evaluierung datenbankbasierter Persistenzl sungen fur Java Objekte 111 139 50 811 100 1202 Rollback A Zeit in ms in der eine Abfrage an die Datenbank erfolgte und alle Hauptobjekte in einer ArrayList gespeichert wurden B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Anzahl A 10 461 20 475 100 30 505 151 50 651 271 100 886 530 Fazit Auch Lido unterst tzt das Konzept der tr gen Initialisierung D h nur das Hauptobjekt liegt initialisiert im Speicher vor Wird auf die von diesem aus referenzierten Objekte zugegriffen so werden diese Werte erst dann aus der Datenbank gelesen Nach Ausf hrung der Query Operation wechseln die ausgelesenen Objekte von dem Zustand hollow in den Zustand persistent clean Findet nun keine nderung an den ausgelesenen Objekten statt so wechselt der Zustand nach Aufruf der Methode commit oder rollback erneut in den Zustand hollow 4 5 3 4Update Operation Allen Objekten der Klasse SecondaryFirst wurde ein neuer Bezeichner zugewiesen d h die sich im Speicher befindlichen Objekte wurden ver ndert und somit mit
48. 6 4012 29460 Fazit Durch Aufruf der Methode update obj der Schnittstelle Database wechseln die sich im Speicher befindlichen Objekte vom Zustand transient in den Zustand persistent Durch Aufruf der Methode setString stringValue wurde allen im Speicher befindlichen SecondaryFirst Objekten ein neuer Bezeichner zugewiesen Dadurch liegt ein inkonsistenter Zustand zwischen den Werten in den Objekten und der Datenbank vor Wird nun die Transaktion durch Aufruf der Methode commit Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 97 139 beendet so werden die ge nderten Werte der Objekte im Speicher mit der Datenbank synchronisiert Es ist eine exponentielle Laufzeit zu erkennen 4 3 3 5Speicherverbrauch Es folgt eine Auflistung des Speicherverbrauchs den der Testfall obige Operationen bei Verwendung der Datenbank MySQL ben tigt Die Angaben wurden im Taskmanager abgelesen Anzahl MB E10 Primary E 20 Primary E 30 Primary 0150 Primary 01100 Primary Speicherverbrauch MB 4 3 3 6Performance unter Verwendung der Datenbank HSQL Es folgt eine bersicht der durchgef hrten Datenbank Operationen unter Verwendung der Datenbank HSQL im eingebetteten Modus 140 120 100 a insert 80 query 60 update x delete Zeit Sekunden 40 20 LT EEE SEE
49. 6 5 zu finden 3 2Klassendiagramm und Implementierung Primary First B intValuePr int BboolValuePF boolean BBstringValuePF String nzahl int D Secondary First BPrimaryFirst BSintValueSF int Base Primary B3boolValueSF boolean 0 1 A SE ntValueBP Integer primary First ElistringValuesF String oolValueBP boolean anzahl int 0 B8stringValueBP String Banzai int 0 BsecondaryFirst 1 0 1 BBasePrimary array ListBP 1 secondary First Gr e 10 PrimarySecond int ValuePs int 0 double ValuePS double BstriingVauePS String Manzah int 0 BPrimarySecond 1 BaseSecondary intValueBS Integer loubleValueBS double stringValueBS String anzahl int 0 N tamaylistP WBaseSecondar N Gr e 10 y0 Primary Se 1 BhoolvalueP boolean 6 AN an BoubleValueP double 1 s Sue Sst ring ValueP String Bo uble ValueS double opertiesP Properties BBboolValueS boolean array ListBS zahl int 0 S3st ring ValueS String ns 4 Gp opertiesP Properties i BPrimary hashMapp M enzahl int 0 Gr e 10 0 0 B amp seconday 0 Secondary Second 1 1 BintvalueSs int BdoubleValueSS double BBstringValueSS String anzahl int 0 Secondary Second hashMapS u an 0 array ListS 2 1 Gr e 3 Gr e 3 secondary Second 0
50. API ODBMS Optionale Datentypen Transaktionskonzept Ja i Ja a Ja a GUI Entwicklungsumgebung Nur Professional Enhancement Werkzeug Ja i Ja Nein a Nen Tabellenskript Generator AD a _ EJB Unterst tzung Unterst tzung JDOQL ya a a a Identit tskonzept Nein Nein 200 Ja Ja Ja Ja Ja Ja Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen fur Java Objekte 122 139 Qbeans JDO RexIP JDO Castor JDO TJDO TradeCity exolab C berSoft Kosten Auf Anfrage Auf Anfrage Frei API MySQL Unterst tzung Optionale Datentypen Ja ta Mes Nein _ FGUrEntwieklungsumgebung non ags Nein ne Ident 6 4 Installation und Konfiguration von MySQL MySQL benutzt das Netzwerkprotokoll TCP IP um die Verbindung von einem Client zu einem Server herzustellen Bevor MySQL installiert bzw gestartet wird muss TCP IP installiert sein 1 Unter http Awww mysql com downloads index html die aktuellste MySQL Version herunterladen in unserem Falle mysql 3 23 54 win zip 2 Unzip mysql 3 23 54 win zip und die extrahierte Setup exe ausf hren MySQL wird installiert und es wird automatisch eine Test Datenbank test angelegt 3 Unter http www mysql com downloads gui mysalqui htmi das zugeh rige GUI Tool herunterladen entpacken und installieren Dies erm glicht eine einfache Verwaltung von MySQL Datenbanken Mit Hilfe dieses
51. Applikationen zur Verf gung 3 Befindet sich innerhalb eines Applikationservers Der Container ist f r die Verwaltung der Entity Beans zust ndig und bietet zuvor genannte Funktionalit t an Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 16 139 Komponenten sind wieder verwendbar Nachteile Das Erlernen eines sehr komplexen Komponentenmodells ist n tig Nicht transparent Persistenzlogik teilweise in den Komponenten enthalten 2 1 4Objektrelationale Datenbank Management Systeme ORDBMS Durch Unterst tzung von objektorientierten Konzepten sind sie eine Weiterentwicklung von relationalen Datenbanksystemen Die Idee ist komplexe Objekte in Relationen zu speichern und Anfragen direkt auf Objekte zu erm glichen so dass nicht erst das komplette Objekt ausgelesen werden muss Durch den SQL99 Standard werden objekt relationale Erweiterungen eingef hrt ohne bew hrte SQL Konzepte aufzugeben Vorteile Die Abbildung Objekt lt gt Datenbank entf llt Erweiterung der Basistypen gt M glichkeit zur Definition eigener Datentypen Transaktionskonzept wird unterst tzt Nachteile geringe Transparenz da die Persistenzlogik fest im Programmcode verankert ist Kenntnisse von SQL werden ben tigt 2 1 5Objekt relationale Abbildungen bzw Mapping Tools Tools bernehmen die Abbildung von der Objektstruktur auf die Tabellen und speichern
52. ArrayList gt lt extension vendor name libelis key sql reverse value javaField bp gt lt field gt lt class gt lt class identity type application name BaseSecondary objectid class lidodiplom BaseSecondaryKey requires extent true gt lt field name intValueBS primary key true gt lt field name arrayListBS gt lt collection element type lidodiplom SecondarySecond gt lt extension vendor name libelis key collection type value java util ArrayList gt lt extension vendor name libelis key sql reverse value javaField bs gt lt field gt lt field name secondaryFirst gt lt field gt lt class gt lt class identity type application name Primary requires extent true gt lt extension vendor name libelis key sql name value tprimary gt lt field name hashMapP gt lt map key type java lang Integer value type lidodiplom Secondary gt lt extension vendor name libelis key map type value java util HashMap gt persistence capable superclass lidodiplom BasePrimary Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 135 139 lt extension vendor name libelis key sql reverse value javaField primMap gt lt field gt lt field name arrayListP gt lt collection element type lidodiplom Secondary gt lt extension vendor name libelis key collection ty
53. DIPLOMARBEIT Thema Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte basierend auf JDO Java Data Objects nformati Bearbeiter Timo Koster Al Betreuung Prof Dr Andreas K nkler FH Trier Dipl Inform Andreas Drebinger Siemens AG Erlangen Fachhochschule Trier Fachbereich Design und Informatik Studiengang Angewandte Informatik sihniswspn Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 2 139 Kurzfassung JDO Java Data Objects wurde im M rz 2002 von SUN verabschiedet und stellt eine Spezifikation f r transparente Persistenz von Objekten unter Java dar Unabh ngig vom verwendeten Speichermedium z B relationale oder objektorientierte Datenbank oder die Speicherung in Dateien stellt sie dem Anwender eine genormte API Application Programming Interface zur Verf gung In dieser Diplomarbeit werden verschiedene JDO Implementierungen und objektrelationale Abbildungswerkzeuge anhand eines konkreten Anwendungsfall untersucht und gegen bergestellt Die Diplomarbeit ist im wesentlichen in drei Teile gegliedert Der erste Teil ist eine Untersuchung und Beschreibung der JDO Spezifikation Im zweiten Teil werden der Anwendungsfall und die Implementierung der erstellten Prototypen erl utert Der dritte Teil stellt die Ergebnisse der Evaluierung dar Abstract JDO launched by SUN in March 2002 represents a specification of transparen
54. Datenbank Es ist eine lineare Laufzeit zu erkennen 4 2 4 2Delete Operation Die n sich im Speicher befindlichen Primary Objekte wurden innerhalb einer Transaktion gel scht Es werden die Zeiten mit und ohne Verwendung der lazy Initialisierung aufgelistet n Primary Objekten werden in der Datenbank gel scht lazy false 600 0 500 0 400 0 E10 Primary Objekte 300 0 E 20Primary Objekte 1150 Primary Objekte 200 0 01100 Prim ary Objekte 100 0 0 0 lazy false Sek lazy true Sek Rollback A Zeit in ms in der die sich im Speicher befindlichen Primary Objekte der Methode delete obj bergeben wurden B Zeit in ms die der rollback Vorgang in Anspruch genommen hat 6931 1892 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 88 139 Fazit Den sich im Speicher befindlichen Objekten welche den Zustand persistent besitzen wird durch Aufruf der Methode delete der Schnittstelle Session der Zustand persistent entzogen Sie wechseln in den Zustand transient ber Es ist eine exponentielle Laufzeit zu erkennen Nach R chsprache mit dem Entwickler von Hibernate wurde best tigt dass wenn sehr viele Objekte innerhalb einer Transaktion gel scht werden dies eine hohe Laufzeit beansprucht Falls die Performance im Vordergrund steht sollen f r diesen Fall direkte SQL Statements ausgef hrt werden
55. FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 69 139 kodoHOME c kodo jdo 2 4 3 lib Erkl rung der JAR Files in der Kodo Dokumentation kodoHOME jakarta commons logging 1 0 2 jar Bibliothek f r Logging kodoHOME jca1 0 jar Java Connector Architecture kodoHOME jdbc2_0 stdext jar JDBC 2 0 Erweiterungen kodoHOME jdo1_O jar JDO Spezifikation kodoHOME indi jar JNDI Bibliothek kodoHOME ita spec1_0_1 jar Transaktionssteuerung kodoHOME kodo jdo jar Kodo JDO Kern kodoHOME kodo jdo runtime jar Kodo JDO Laufzeit Kern kodoHOME kodo reverse schema jar Bibliothek f r das Schema Tool kodoHOME log4j 1 2 6 jar Bibliothek f r Logging kodoHOME serp jar interne Hilfsklasse f r Kodo kodoHOME xml apis jar APIs f r XML Parsing c kododiplom JDBC mysql connector java 3 0 jar Connector J V3 0 bzw c kododiplom hsqldb lib hsqldb jar Treiber fur HSQL Datenbank 3 Auch die Konfigurationsdateien kododiplom jdo kodo properties und Log4j properties m ssen in den CLASSPATH aufgenommen werden Die Konfigurationsdatei log4j properties ist notwendig da bei Kodo alle automatisch erzeugten SQL Statements durch die log4j API am Bildschirm ausgegeben werden Es gibt keine Einstellm glichkeit in der Konfigurationsdatei kodo properties mit der dieses Logging ausgeschaltet werden kann 3 2 4 3 2 Systemvoraussetzungen Hardware
56. Klasse gespeichert 4 5 5Assoziationen Lido unterst tzt alle g ngigen Assoziationen In Abschnitt 3 2 5 2 wurden schon die verwendeten Assoziationen vorgestellt 4 5 6Komposition Das kaskadierende L schen wird in der aktuellen Version nicht automatisch unterst tzt In der n chsten Version soll dieser Mechanismus aufgenommen werden Durch Implementierung der Schnittstelle InstanceCallbacks siehe Abschnitt 2 2 4 5 muss dies manuell implementiert werden 5 Zusammenfassung In diesem Abschnitt werden die untersuchten JDO Implementierungen und die objektrelationalen Abbildungswerkzeuge anhand der Datenbank Operationen insert delete query und update gegen bergestellt Es werden jeweils die gleiche Anzahl an Primary Objekten unter Verwendung der Datenbank MySQL dargestellt Die insert Operation Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 115 139 1600 1400 1200 T 1000 fa 800 N 600 400 200 20 100 intelliBO 16 1 123 7 o ms Lido 61 9 196 6 SE 28 9 63 4 castor soo 107 BETEN SPEER Die delete Operation 2000 1500 x a 1000 N 500 0 inteliBO 33 65 143 2931 Hibernate 15 464 2574 1454 gt Castor JDO 63 289 804 2449 Anzahl Primary Objekte Die update Operation Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung daten
57. Mirco Edition unterstitzt wird Diese Entwicklungsumgebung unterst tzt aber nicht die Schnittstellenhierarchie Collection Auch hiervon ist die Wahl der zu evaluierenden JDO Implementierung abhangig siehe Abschnitt 2 3 Unterst tzung von Array Objekten sowie die Benachrichtigung von deren nderungen an die besitzenden first class Objekte 1 Java Micro Edition Entwicklungsumgebung mit der mobile Applikationen entwickelt werden k nnnen Der Begriff first class Objekt wird auf der n chsten Seite eingef hrt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 29 139 2 2 4 3Vererbung unter JDO Die Vererbung wird von JDO unterst tzt Eine Klasse kann persistence capable sein aber deren Superklasse muss es nicht sein d h es existiert eine Unabh ngigkeit zwischen persistence capable und nicht persistence capable Klassen Wird eine Klasse in einer Vererbungshierarchie als persistence capable definiert so werden die Attribute die durch die Persistenz Modifizierer persistent transactional oder none beschrieben werden an die Unterklasse vererbt und liegen dort als solche vor Wenn eine persistence capable Klasse eine nicht persistence capable Oberklasse hat so werden die Attribute der Oberklasse nicht durch JDO mit der Datenbank synchronisiert Falls dies doch gew nscht wird muss versucht werden die Oberklasse als persistence capable zu definier
58. O Enterprise Edition 3000 diese Version wird ben tigt falls die Applikation durch einen Applikation Server verwaltet werden soll und die Kodo JDO Standard Edition 600 ohne Unterst tzung f r einen Applikation Server F r diese Version werden zus tzliche optionale Pakete u a ein Performance Add On dieses verspricht eine 20 40fache Performanceverbesserung Kodo03 ein Query Add On Erweiterungen f r die Abfragesprache angeboten Diese optionalen Pakete sind in der Enterprise Edition bereits integriert Die Datenbanken MySQL und HSQL werden durch Kodo unterst tzt Der JDO Implementierung liegt keine eigene graphische Entwicklungsumgebung bei sondern Plugins f r Entwicklungsumgebungen u a Borland JBuilder und SUN One Studio NetBeans Die Implementierung wird aber mit Kommandozeilen basierten Hilfswerkzeugen z B automatische Generierung der unter Verwendung des eigenen Identit tenkonzept ben tigten Primary Key Klassen einen Bytecode Enhancer und ein Schemamanipulationstool ausgeliefert Eine Installationsanleitung ist in Abschnitt 3 2 4 3 zu finden 2 4 5Libelis Lido V1 4 Lido stellt eine in Java geschriebene 100 ige Implementierung der JDO Spezifikation 1 0 dar Die Firma Libelis bietet zwei kommerzielle Standard und Professional und eine zu Evaluierungszwecken Community Edition an Die Standard Edition 600Euro unterst tzt nur Open Source relationale Datenbanken und die Speicherung in Dateien Zugang zu kommerziellen
59. O durchgef hrt Die Tests wurden jeweils mit der Verwendung der tr gen Initialisierung und ohne tr ge Initialisierung ausgef hrt Es folgt eine Auflistung der Ergebnisse der einzelnen Operationen 4 2 4 1Insert Operation Es wurden keine Abweichungen bei Verwendung mit und ohne der lazy Initialisierung festgestellt n Primary Objekte werden aus einer ArrayList in die Datenbank eintragen Connector J V3 0 Anzahl ms 6000 11200 28900 63400 E10 Primary Objekte E20Prim ary Objekte 1150 Primary Objekte 01100 Prim ary Objekte Connector J V3 0 Sek Rollback A Zeit in ms in denen die Hauptobjekte instanziiert die referenzierten Objekte der Methode save obj bergeben und in einer ArrayList zwischengespeichert wurden B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Anzahl AJ BJ 1 z B bei dem Attribut intValueBP getintValueBP und setintValueBP int intValueBP ansonsten kommt es zu einer NullPointerException Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 87 139 1021 0 1422 0 3115 10 5368 20 Fazit Durch Aufruf der Methode save obj der Schnittstelle Session wechseln die sich im Speicher befindlichen Objekte vom Zustand transient in den Zustand persistent Die Methode commit der Schnittstelle Transaction veranlasst eine Speicherung in der
60. Objekte repr sentiert Anhand dessen wurden drei JDO Implementierungen intelliBO Kodo und Lido und zwei Objekt Relational Abbildungswerkzeuge Hibernate und Castor JDO in Bezug auf die in Abschnitt 2 5 genannten Kriterien evaluiert Anhand der oben aufgef hrten Diagrammen welche die Ergebnisse der Datenbank Operationen insert delete update und query darstellen ist zu erkennen dass sich keine untersuchte Technik bezogen auf den in Abschnitt 3 genannten Anwendungsfall heraus kristallisiert Weist eine Technik bei ein oder mehreren Datenbank Operationen eine akzeptable Laufzeit auf so steht dem bei einer anderen Datenbank Operation eine exponentielle Laufzeit entgegen Interessant ist die Feststellung dass die beiden objektrelationalen Abbildungswerkzeuge die Ausnutzung des Speichers besser im Griff haben als die drei JDO Implementierungen So ben tigen bei gleicher Anzahl der zu speichernden Objekte die JDO Implementierungen meistens doppelt so viel Arbeitsspeicher als die objektrelationalen Abbildungswerkzeuge Im Verlauf der Diplomarbeit kamen neuere Versionen der untersuchten Produkte heraus in denen Fehler behoben und in die Erweiterungen einbezogen worden sind Auf Grund dessen ist zu erkennen dass die JDO Implementierungen noch nicht ausgereift sind Als positive Anmerkung ist zu sagen dass sich nach einer angemessenen Einarbeitungszeit die jeweilige Technik schnell einsetzen l sst Sehr gut erfolgte auch die Umsetzung
61. Persistenzl sungen f r Java Objekte 771139 Im folgenden werden nun die gemessenen Zeiten der jeweiligen erfolgreichen commit Vorgang und abgebrochenen rollback Vorgang Datenbank Operationen und der dadurch verbrauchte Arbeitsspeicher der intelliBO V3 2 mit dem JDBC Treiber MM SQL Treiber V2 0 4 und dem offiziellen MySQL JDBC Treiber Connector J V3 0 aufgelistet 4 1 3 1Insert Operation n Anzahl von Primary Objekten aus einer ArrayList in die Datenbank eintragen MM SQL Treiber V2 0 4 Anzahl ms 11495 20951 59636 149530 Connector J V3 0 E10 Primary Objekte E20Primary Objekte 1150 Primary Objekte 01100 Primary Objekte 124570 Rollback MM JDBC Treiber Sek Connector J V3 0 Sek A Zeit in ms in denen die Hauptobjekte instanziiert in einer ArrayList zwischen gespeichert und der Methode makePersistentAll List bergeben wurden B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Anzahl _ A BJ 2405 3465 990 6405 10310 4354 Fazit Es ist zu erkennen dass der offizielle MySQL JDBC Treiber Connector J V3 0 ca 20 25 schneller als der MM JDBC Treiber ist Durch Aufruf der Methode makePersistent obj bzw makePersistentAll list wechseln das Objekt bzw alle sich in der List befindlichen Objekte vom Zustand transient in den Zustand persistent new Durch Aufruf der Methode commit wird der komplette Objektgraph durchlaufen und alle von diesen Obje
62. Size 10 default false erlaubt die Verwendung von extensions bei Query Abfragen com solarmetric kodo EnableQueryExtensions false EvaluierungsLizenzSchl ssel Schl ssel ist nur 30 Tage bis zum 15 Mai g ltig com solarmetric kodo LicenseKey 0333 A135 A308 0919 0900 spezifiziert die Implementierung des PersistenceManagers com solarmetric kodo PersistenceManagerClass com solarmetric kodo runtime PersistenceMana gerlmpl default false Ob Soft Referenzen verwendet werden sollen true bringt bei vielen Objekte Performance Vorteile com solarmetric kodo UseSoftTransactionCache true Datei die bestimme Mapping Informationen der Datentypen f r die verwendete Datenbank besitzt Mapping f r MySQL Datenbank com solarmetric kodo impl jdbc DictionaryClass com solarmetric kodo impl jdbc schema dict My SQLDictionary Mapping fur HSQL Datenbank com solarmetric kodo impl jdbc DictionaryClass com solarmetric kodo impl jdbc schema dict H SQLDictionary spezielle Eigenschaften der verwendeten Datenbank z B Tabellentyp innoDB bei MySQL com solarmetric kodo impl jdbc DictionaryProperties TableType innoDB SupportsSelectForUpda te true default true false sagt aus dass alle an einer Vererbung beteilligten Klassen in einer eigenen Tabelle abgebildet werden com solarmetric kodo impl jdbc FlatInheritanceMapping false 1 Ein durch lazy loading aufgetretenes Problem wird in Abschnitt 4 4 5 3 erl utert Diplomarb
63. Y_ARRAY vendor name ssibo gt lt extension gt lt extension gt lt extension gt lt field gt lt field name propertiesP persistence modifier persistent gt lt extension key jdbc vendor name ssibo gt lt extension key mapping value serial vendor name ssibo gt lt extension key table name value TPRIMARY vendor name ssibo gt lt extension key field name value FPROPERTIESP vendor name ssibo gt lt extension key sql type value BLOB vendor name ssibo gt lt extension gt lt extension gt lt field gt lt extension key jdbc vendor name ssibo gt lt class gt lt package gt lt jdo gt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 49 139 Abbildung 8 Persistenz Deskriptor der Klasse Primary Es folgt eine Erl uterung der einzelnen Tags lt package name prototype model gt Durch das Attribut name des Elementes lt package gt wird der Name des Package in welchem sich die Klasse befindet eingef hrt lt class identity type application name Primary persistence capable superclass BasePrimary requires extent true gt Das Element lt class gt wird verwendet um eine persistente Klasse zu beschreiben d h diese Klasse implementiert die Schnittstelle PersistenceCapable Das Attribut identity type legt den Typ der Objektidentit t fest In diesem Fall das eigene Identit t
64. ahl der f r diese Diplomarbeit zu evaluierenden JDO Implementierungen geh ren Dort werden auch die Selektionskriterien erl utert Im folgenden werden die Ziele der Spezifikation bzw die Vorteile von JDO_ aufgelistet Definition von Schnittstellen zur persistenten Speicherung von Java Objekten bzw den transparenten Zugriff auf alle Arten von Datenspeichern so dass der Anwender keine Kenntnisse ber Interna der verwendeten Speichermechanismen haben muss Es wird Entwicklungszeit gespart Roos02 S 8 so dass man sich ganz auf die Anwendungslogik konzentrieren kann Es besteht die M glichkeit JDO in Applikationsserver zu integrieren siehe Punkt eingebettete Umgebung im Abschnitt 2 2 1 1 Der Anwender braucht keine SQL Kenntnisse zu haben da der Datenbankzugriff transparent f r ihn geschieht Ohne den Programmcode zu ver ndern kann jederzeit das von der Applikation verwendete Speichermedium zur Datenhaltung gewechselt werden da sich kein datenbankspezifischer Code im Quellcode befindet JDO bernimmt automatisch die Abbildung des Objektmodells auf das verwendete Speichermedium so dass der Entwickler alle Vorteile der objektorientierten Programmierung Vererbung Komposition usw nutzen kann und sich nicht wie bei den relationalen Datenbanken eigene Gedanken ber diese Abbildung machen muss siehe Nachteile RDBMS Abschnitt 2 1 2 1 Die Basiseigenschaften und optionalen Eigenschaften von JDO werden im Abschni
65. ahmen der Evaluierung wurden alle an der Vererbung beteiligeten Klassen in einer eigenen Tabelle abgebildet Dazu muss in der zur Oberklasse geh renden Tabelle eine zus tzliche Spalte aufgenommen werden in der der vollst ndige Name der jeweiligen Unterklassen verwaltet wird Die daraus resultierenden Tabellen m ssen den gleichen Spaltennamen fur die ObjektID besitzen wie die Oberklasse Die Unterklassen erben die ObjektID der Oberklasse und die Beziehung zwischen den Tabellen wird ber Fremdschl ssel hergestellt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 107 139 4 4 7Assoziationen Kodo unterst tzt alle g ngigen Assoziationen In Abschnitt 3 2 4 2 wurden schon die verwendeten Assoziationen vorgestellt so dass hier nur die Probleme die w hrend der Verwendung auftraten erl utert werden Werden in einem Objekt mehrere Datentypen z B List und Map verwendet die die gleichen Elementtypen verwalten so muss jeweils eine eigene Spalte f r den Fremdschl ssel definiert werden Werden die Fremdschl ssel jeweils auf nur eine Spalte abgebildet so funktioniert eine Query auf die Map korrekt aber nicht auf die List Das Problem bei lazy loading wurde schon in Abschnitt 4 4 5 3 erl utert 4 4 8Komposition Kodo unterst tzt das kaskadierende L schen bei den 1 1 1 N und N M Beziehungen Dieses kann im Persistenz Deskriptor aktiviert we
66. alueS primary_ID Abbildung 10 Entity Relationship Modell der Datenbank castordiplom Im obigen Modell sind die Prim rschl ssel fett unterstrichen und die Fremdschl ssel fett dargestellt Bei Castor JDO wurde nicht der Serialisierungsmechanismus f r die java util Properties verwendet sondern diese wurden in einer eigenen Tabelle abgebildet so dass gezielt nach einem Schl ssel gesucht werden kann Der Fremdschl ssel f r die ArrayList und HashMap der Klassen Primary und Secondary wird jeweils auf eine Tabellenspalte abgebildet primary ID und secondary TD Die Schl ssel der verwendeten HashMaps werden nicht auf eine eigene Tabellenspalte abgebildet da unter Verwendung von Castor JDO kein eigener Schl ssel f r die HashMap vergeben werden kann Es wird automatisch die ObjektID des sich in der HashMap befindlichen Objektes als Schl ssel der HashMap verwendet Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 61 139 3 2 3 3Persistenz Deskriptor Im Anhang 6 7 ist der erstellte Persistenz Deskriptor napping xm1 zu finden Es folgt eine Erl uterung ausgew hlter Elemente lt class name castor PrimarySecond identity intValuePS depends BasePrimary gt lt map to table tprimarysecond gt lt cache type type unlimited gt lt field name intValuePS type integer required true gt lt sql name intValuePS type integer
67. angegeben Dies bringt den Vorteil dass bei Abfragen der Typ des Objektes erhalten bleibt Auszug aus dem Persistenz Deskriptor der Oberklasse BasePrimary lt extension key inheritance vendor name ssibo gt lt extension key provider value classname vendor name ssibo gt lt extension key field name value FCLASSTYPE vendor name ssibo gt lt extension key subclass value prototype model Primary vendor name ssibo gt lt extension gt Durch den Schl sselwert inheritance wird die Vererbung eingeleitet Die von der Oberklasse erbenden Unterklassen m ssen nicht extra angegeben werden Falls dies doch geschieht kann intelliBO optimaler arbeiten Auszug aus dem Persistenz Deskriptor der von der Klasse BasePrimary erbenden Klasse Primary lt class identity type application name Primary persistence capable superclass BasePrimary gt Durch Angabe des Schl ssels lt persistence capable superclass gt des Elementes lt class gt wird dieser Klasse die zugeh rige Oberklasse bekannt gemacht 4 1 5Assoziationen Bei der Implementierung wurden 1 1 und 1 N Assoziationen verwendet auf die dadurch aufgetretenen Probleme wird in diesem Abschnitt eingegangen F r die Abbildung der 1 N Assoziationen wurden die Datentypen ArrayList und HashMap verwendet Die jeweiligen Assoziationen werden im Persistenz Deskriptor bei Verwendung von intelliBO wie folgt beschrieben lt extension key mapping value
68. ank die unter MySQL zuvor angelegt wurde ein Durch das Element engine wird der Typ der Datenbank festgelegt Castor unterst tzt eine Vielzahl von Datenbanken eine Auflistung ist unter Casto03 zu finden Innerhalb des Elementes driver wird der verwendete Datenbanktreiber durch class name und die URL der Datenbank angegeben Schlie lich werden noch der Benutzername und das zugeh rige Passwort bekanntgegeben Durch den Parameter href des Elementes mapping wird noch der Verweis auf den Persistenz Deskriptor eingef hrt Die Evaluierung wurde nicht nur mit der Datenbank MySQL sondern auch mit der Datenbank Hypersonic SQL Hype03 durchgef hrt Die zugeh rige Konfigurationsdatei ist auf der beiliegenden Projekt CD zu finden Durchgef hrte nderungen am Prototyp Castor unterst tzt keine unidirektionalen sondern nur bidirektionale Beziehungen Bei den entsprechenden Assoziationen musste wie z B zwischen Primary und Secondary repr sentiert durch die ArrayList arrayListP in der Klasse Secondary noch ein Attribut vom Typ Primary aufgenommen werden Dieses wird initialisiert wenn die ArrayList durch die Methode addArrayListP Object obj mit den entsprechenden Secondary Objekten gef llt wird public void addArrayListP Object obj arrayListP add obj Secondary obj setPrimList this Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 59 139 Die
69. ank abgespeichert Auch hier ist in Relation zu der Anzahl der zu speichernden Objekte eine lineare Laufzeit zu erkennen 4 4 5 5Speicherverbrauch Es folgt eine Auflistung des Speicherverbrauchs den der Testfall obige Operationen bei Verwendung der Datenbank MySQL ben tigt Die Angaben wurden im Taskmanager abgelesen Anzahl MB E10 Primary 1120 Primary 150 Primary A 1300 Primary 140000 120000 100000 80000 60000 40000 20000 Zeit ms Ve 1 6 or 10 348 BEE BETTER 37 48 e o 20 oe Anzahl Primary Objekte ter Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 106 139 Abbildung 17 Performance Ergebnisse unter Verwendung der Datenbank HSQL im Server Modus 100000 80000 60000 40000 Zeit Sekunden 20000 0 mt afafa o ak ey an o nm so mo I me 0 Po Wer 30 m fer ms an Tom em 24 7z s eo mo 20 s Anzahl Primary Objekte tt Abbildung 18 Performance Ergebnisse unter Verwendung der Datenbank HSQL im embedded Modus 4 4 6Vererbung Die Grundeinstellung von KODO ist dass alle an einer Vererbung beteiligten Klassen in einer Tabelle abgebildet werden Dies kann durch Setzen ber die Option com solarmetric kodo impl jdbc FlatInheritanceMapping in der Konfigurationsdatei kodo properties auf false unterbunden werden Im R
70. anksprache oder aber eingebettet in verschiedenen Programmiersprachen benutzt werden Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 18 139 deklariert Zur Zeit wird an der Version 1 0 1 von JDO gearbeitet um bekannt gewordene Fehler zu beseitigen und Verbesserungen hinzuzufugen Das JDO Package javax jdo ist frei von SUN Microsystems Inc unter http access1 sun com jdo zu erhalten Es beinhaltet gr tenteils Schnittstellen Definitionen sowie einige wenige Implementierungen konkreter Klassen JDOHelper JDO Exceptions usw Durch die Definition der Schnittstellen wird ein standard konformer Weg zur transparenten Persistenzl sung unter Java geschaffen Das JDO Package ist allein nicht lauff hig Die jeweiligen JDO Anbieter m ssen mindestens die durch die Spezifikation beschriebenen Basiseigenschaften bzw Schnittstellen von JDO implementieren und bieten dadurch eine sogenannte standard konforme JDO Implementierung Persistenz Framework als open source oder als kommerzielle Variante an Des weiteren definiert die Spezifikation noch optionale Eigenschaften von JDO welche im Ermessen des jeweiligen JDO Anbieters liegen ob er diese implementiert In Anhang 6 2 ist eine Auflistung verschiedener open source bzw kommerzieller JDO Implementierungen zu finden Diese wurden w hrend der Analyse anhand einer Internet Recherche n her untersucht ob sie zur Ausw
71. aonouunnnnnnunnunnnnnnnannnnnann 94 do Bes 11 aig See ne Pe Pe a Ter ene ee mere eT PP Te Tee Tener ee See 94 4 4 4 Integrationsaufwand f r bereits existierende Klassen 102 4 4 5 Performance und Ressourcenverbrauch uuunnnzausunannnaaanaanann 102 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 10 139 4 4 9 Graphische Entwicklungsumgebung zzuunnnnnaanunnnannaannnnnnnnunenn 108 4 4 10 Abfragesprachefn 0uucannaanaanananannnnnannnannnannnannnannnnannnannnn 108 4 4 11 Unterst tzte Systemumgebung onnnnnonouunnannnnnnunnannannnnnann 108 BEITRETEN al sa see 109 4 5 2 Integrationsaufwand f r bereits existierende Klassen 109 4 5 3 Performance und Ressourcenverbrauch ccccccsssssssseeeeeeesseseees 109 dad VI ia hc hina ie hk pc ha cia 115 4 5 5 ASSOZIATIONCNIL cece cccccecccecccecccuccsueceueceuecesesesusesueesueesuesssesesuussunessues 115 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 11 139 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 12 139 1 Einleitung Die dauerhafte Speicherung von Daten ist ein wichtiger Bestandteil
72. ary_arraylistbp add index lidopos alter table tprimary_arraylistp add index lidofk_intvaluebp alter table tprimary_arraylistp add index lidopos alter table tbasesecondary add index intValueSF_secondaryfirstx create table tprimary_hashmapp create table tsecondary_arraylistbs lidofk_intValueBP int not null lidofk_intValueBS int not null lidokey int lidovalue_intValueSS int lidovalue_intValueBS int lidopos double primary key lidofk_intValueBP lidokey primary key lidofk_intValueBS type innodb type innodb alter table tprimary_hashmapp add index lidofk_intvaluebp alter table tprimary_hashmapp add index lidokey alter table tsecondary_arraylistbs add index lidofk_intValueBS alter table tsecondary_arraylistbs add index lidopos Abbildung 28 SQL Skript f r die Datenbank lidodiplom 6 14DTD File lt xml version 1 0 encoding UTF 8 gt lt ELEMENT jdo package gt lt ELEMENT package class extension gt lt ATTLIST package name CDATA REQUIRED gt lt ELEMENT class field extension gt lt ATTLIST class name CDATA REQUIRED gt lt ATTLIST class identity type application datastore nondurable datastore gt lt ATTLIST class objectid class CDATA IMPLIED gt lt ATTLIST class requires extent true false true gt lt ATTLIST class persistence capable superclass CDATA IMPLIED gt lt ELEMENT field collection map array extension gt lt
73. bankbasierter Persistenzl sungen f r Java Objekte 116 139 600 500 400 300 200 100 Zeit Sek inteiBo 11 21 5 Kodo 13 23 5 Hibernate Anzahl Primary Objekte Die query Operation Da Kodo Lido und Hibernate das Konzept des lazy loading verfolgen erfolgt eine getrennte Gegen berstellung der query Operation ohne lazy loading 600 500 400 300 Zeit Sek 200 100 intelliBO Castor JDO j 16 7 137 4 561 9 Anzahl Primary Objekte mit lazy loading Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 117 139 1400 1200 1000 800 600 Zeit ms Anzahl Primary Objekte Speicherverbrauch MB 140 120 100 80 60 40 20 BE OCastor JDO DK 2 mid 2 Anzahl Primary Objekte Ziel dieser Diplomarbeit war es verschiedene JDO Implementierungen und objektrelationale Abbildungswerkzeuge anhand von Selektions und Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 118 139 Evaluierungskriterien in Bezug auf ein Projekt im Leittechnikumfeld der Abteilung Power Generation der Siemens AG Erlangen zu untersuchen Zu Beginn wurde ein Prototyp erstellt der die Komplexit t der zu speichernden
74. bereit erzeugt eine neue nicht initialisierte 1 Die Bestandteile der Datei hibernate properties werden weiter unten erl utert 2 Wird sicher gestellt dass wenn ein Thread auf die Daten des Objektes zugreift diese nicht durch einen anderen Thread der auch auf diese Daten zugreift ge ndert werden k nnen Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 53 139 Datastore Instanz und bietet die M glichkeit w hrend der Laufzeit der Applikation ein lazy initialisiertes Objekt vollst ndig zu initialisieren Lifecycle Um ein Callback Mechanismus f r die L sch Eintrage Speicher und Update Operationen bereitzustellen muss die Schnittstelle Lifecycle implementiert werden Gegen ber der Implementierung von intelliBO wurden f r die ObjektIDs aller Klassen der primitive Datentyp int verwendet Die Klasse HibernateTest beinhaltet alle wichtigen Methoden f r die Evaluierung die in der beiliegenden Java Doc erl utert werden Vor Ausf hrung der Tests muss noch eine Datenbank hibernate in MySQL bzw HSQL erstellt und die entsprechenden Tabellen in dieser angelegt werden siehe Abschnitt 6 4 bzw 6 5 Im n chsten Abschnitt werden die Beziehungen der angelegten Tabellen anhand eines Entity Relationship Modells erl utert Die Datei hibernate properties die die Datenbankkonfiguration beinhaltet Ersetzungsregeln wie bestimmte Werte
75. bschnitt 3 2 2 4 zu finden 1 Mit diesem Werkzeug k nnen die erstellten Persistenz Deskriptoren auf Syntax Korrektheit gepr ft werden Eine Erkl rung dieses Vorganges erfolgte in Abschnitt 2 2 1 2 3 Lesser General Public License http www gnu org copyleft lesser html Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 40 139 2 4 3CASTOR JDO Castor ist ein in Java geschriebenes Open Source Data Binding Framework Neben dem XML Data Binding bietet es noch die M glichkeit der objekt relationalen Abbildung von Java Objekten auf relationale Datenbanksysteme Verwendet wurde die Version 0 9 4 3 Diese ist online unter http castor exolab org verf gbar Castor JDO wurde unabh ngig von der von SUN verabschiedeten JDO Spezifikation entwickelt weist aber einige Parallelen zu dieser auf Der Implementierung liegen keine graphische Entwicklungsumgebung und auch keine Kommandozeilen basierten Hilfswerkzeuge bei Wie auch Hibernate nutzt Castor JDO intern die Java Reflection API und erzeugt somit dynamisch SQL Statements um mit den Objekten zu arbeiten Die Installation wird in Abschnitt 3 2 3 4 erkl rt 2 4 4Solarmetric Kodo JDO V2 4 3 Als weitere JDO Implementierung wurde Kodo der Firma Solarmetric ausgew hlt Es ist eine in Java geschriebene 100 ige Implementierung der JDO Spezifikation 1 0 Solarmetric bietet zwei kommerzielle JDO Produkte an Kodo JD
76. castor Property collection collection gt lt sql many key primary_ID_prop gt lt field gt lt class gt Innerhalb des Elementes lt class gt wird durch den Parameter extends die Vererbung definiert In obigem Beispiel bedeutet dies dass Primary die Oberklasse BasePrimary erweitert Die Abbildung der Datentypen Properties und Map erfolgt nach den zuvor f r die ArrayList erl uterten Regeln 3 2 3 4Installation Benutzeranleitung 3 2 3 4 1 Systemvoraussetzungen Software 1 MySQL bzw HSQL muss installiert jeweils eine Datenbank castordiplom und die zugehorigen Tabellen angelegt worden sein Anleitung siehe Abschnitte 6 4 bzw 6 5 2 Castor JDO liegt als eine Sammlung von JAR Files vor die alle in den CLASSPATH aufgenommen werden mussen Der CLASSPATH muss folgende JAR Files beinhalten castorHOME c castor 0 9 4 3 lib castorHOME castor 0 9 4 3 jar castorHOME adaptx_0 9 4 6 jar castorHOME ant_1 5 jar castorHOME jakarta oro 2 0 5 jar castorHOME jakarta regexp 1 1 jar castorHOME jdbc se2 0 jar castorHOME jndi_1 2 1 jar castorHOME jta1 0 1 jar castorHOME jtf 0 1 jar castorHOME junit_3 5 jar castorHOME ldapjdk_4 1 jar castorHOME postgresal jar castorHOME servlet jar castorHOME xerces J_1 4 0 jar c castor JDBC mysql connector java 3 0 jar Connector J V3 0 bzw c castor hsqldb lib hsqldb jar Treiber fur HSQL Datenbank 3 Auch die Konfigurationsdateien database x
77. chaft Optimistisch meint dass ein persistentes Objekt w hrend der aktuellen Transaktion inkonsistente Werte gegen ber der Datenbank haben darf Nach Beendigung der Transaktion nach commit Vorgang werden diese Werte noch einmal mit denen in der Datenbank verglichen Meist wird dieses Konzept bei langlebigen Transaktionen verwendet z B Dauer bis der Benutzer w hrend eines Transaktionsvorgangs Daten 1 Cascade bedeutet dass alle Objekte die von einem Hauptobjekt aus referenziert werden mit gel scht werden sobald das Hauptobjekt gel scht wird Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 34 139 eingetippt hat Wenn Instanzen aus der Datenbank abgefragt bzw geladen werden werden diese erst gesperrt sobald der Versuch gestartet wird diese zu ndern bzw zu l schen Dazu stehen z B das Zeitstempel oder Versionsverfahren zur Verf gung Durch die Methode setOptimistic true wird dieses Konzept aktiviert Erst beim Abschluss einer Transaktion wird gepr ft ob sie sich serialisieren l sst Ist dies unm glich wird sie abgebrochen und muss von vorne beginnen Deshalb durchlaufen optimistische Transaktionen normalerweise drei Phasen Eine Lesephase in der Daten gelesen und Berechnungen durchgef hrt werden eine Validierungsphase in der die Einhaltung der Konsistenzkriterien gepr ft wird und eine Schreibphase in der die in der Lesephase b
78. char 50 boolValueP bit primary key intValueBP type innoDB alter table tprimary add index intValueBP add constraint fk_P_BP foreign key intValueBP references tbaseprimary intValueBP create table tsecondary intValueBS int 10 not null boolValueS bit stringValueS varchar 50 primary_ID_list int 10 posn int 10 primary_ID int 10 hashMapPKey int 10 primary key intValueBS type innoDB alter table tsecondary add index primary_ID_list add constraint fk_S_P foreign key primary_ID_list references tprimary intValueBP alter table tsecondary add index intValueBS add constraint fk_S_BS foreign key intValueBS references tbasesecondary intValueBS alter table tsecondary add index primary_ID add constraint fk_S_P foreign key primary_ID references tprimary intValueBP Abbildung 22 SQL Skript f r die Datenbank hibernate 6 8 Persistenz Deskriptor Castor JDO Es folgt der f r das Objektmodell erstellte Persistenz Deskriptor mapping xm1 lt DOCTYPE databases PUBLIC EXOLAB Castor Mapping DTD Version 1 0 EN http castor exolab org mapping dtd gt lt mapping gt lt class name castor PrimarySecond identity intValuePS depends BasePrimary gt lt map to table tprimarysecond gt lt cache type type unlimited gt lt field name intValuePS type integer required true gt lt sql name intValuePS type integer gt lt field gt lt field name stri
79. chen Schleife durchlaufen werden kann 4 3 3 11Unterst tzte Systemumgebung Castor ist in der eigenst ndigen und eingebetteten Umgebung lauff hig siehe Abschnitt 2 2 1 1 4 4 Solarmetric Kodo JDO V2 3 4 Dieser Abschnitt beschreibt die Ergebnisse und die aufgetretenen Probleme wahrend der Evaluierung der JDO Implementierung Kodo JDO V2 3 4 4 4 1Automatisches Erstellen der zugeh rigen Tabellen Getestet wurde das Hilfswerkzeug SchemaTool Gestartet wird es wie folgt java com solarmetric kodo impl jdbc schema SchemaTool properties kododiplom kodo properties outfile kodoDiplom sql action refresh kododiplom kododiplom jdo Durch Angabe des Parameters properties wird die zuvor erstelle Konfigurationsdatei kodo properties ausgelesen Aus dieser werden alle datenbankspezifischen Informationen ausgelesen u a die Angabe des verwendeten Tabellentyp innoDB bei MySQL Der Parameter outfile gibt die Datei an in die das SQL Skript geschrieben werden soll Wird der Parameter action auf refresh gesetzt so werden alle nderungen die im bergebenen Persistenz Deskriptor durchgef hrt wurden erkannt und neue Tabellen bzw Spalten erstellt bzw entfernt Werden wie im erstellten Persistenz Deskriptor kododiplom jdo bestimmte Abbildungen weggelassen so verwendet Kodo bei der Erstellung der Spaltennamen eigene Bezeichner Wird dies nicht gew nscht so muss ein explizites Mapping dieser Datentypen im Persistenz Deskriptor vorge
80. cond intValueSS stringValueSS baseSecondary_ID tanotherclass intValueAC stringValueAC secondary_ID secondarySecond_ID Abbildung 7 Entity Relationship Modell der Datenbank diplom Der Grund dass eine Doppelrelation zwischen den Tabellen tprimary und tsecondary und zwischen tsecondary und tanotherclass erstellt wurde wird in Abschnitt 4 1 5 erl utert Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 48 139 3 2 1 2Persistenz Deskriptor am Beispiel Primary jdo Zu jeder Klasse unseres Objektmodells wurde ein Persistenz Deskriptor erstellt der der JDO Implementierung mitteilt wo und wie die Objekte in der Datenbank abgelegt werden sollen In diesem Abschnitt wird der zur Klasse Primary geh rende Persistenz Deskriptor f r intelliBO V3 2 erl utert Alle erstellten Persistenz Deskriptoren sind auf der Projekt CD zu finden lt xml version 1 0 encoding UTF 8 gt lt DOCTYPE jdo SYSTEM jdo dtd gt lt jdo gt lt package name prototype model gt lt class identity type application name Primary persistence capable superclass BasePrimary requires extent true gt lt field name stringValueP gt lt extension key jdbc vendor name ssibo gt lt extension key mapping value direct vendor name ssibo gt lt extension gt lt field gt lt field name boolValueP gt
81. condary doubleValueBSx decimal 5 5 intValueBSx int 10 not null intValueSF_secondaryfirstx int 10 stringValueBSx varchar 50 jdoclassx varchar 50 primary key intValueBSx type innodb alter table tbasesecondary add intValueSF_secondaryfirstx create table tsecondary boolValueSx smallint intValueBP_primlistx int 10 intValueBP_primmapx int 10 intValueBSx int 10 not null stringValueSx varchar 50 primary key intValueBSx type innodb alter table tsecondary add index intValueBP_primlistx Abbildung 26 SQL Skript f r die Datenbank kododiplom 6 12Persistenz Deskriptor Lido lt xml version 1 0 encoding UTF 8 gt lt DOCTYPE jdo SYSTEM jdo dtd gt lt jdo gt lt package name lidodiplom gt lt class identity type application name AnotherClass objectid class lidodiplom AnotherClassKey requires extent true gt lt extension vendor name libelis key sql name value tanotherclass gt lt field name intValueAC primary key true gt lt field name secondarySecond gt lt field gt lt class gt lt class identity type application name BasePrimary objectid class lidodiplom BasePrimaryKey requires extent true gt lt field name intValueBP primary key true gt lt field name arrayListBP gt lt collection element type lidodiplom PrimarySecond gt lt extension vendor name libelis key collection type value java util
82. d hollow sobald die aktuelle Transaktion abgebrochen oder erfolgreich beendet wurde Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 32 139 7 Befindet sich das Objekt in dem Zustand hollow so wechselt sein Zustand von hollow in den Zustand persistent dirty sobald die zurvor eingelesenen Attributwerte ver ndert wurden 8 Ein zuvor persistentes Objekt wechselt wieder von dem Zustand persistent new in den Zustand transient sobald die aktuelle Transaktion abgebrochen wurde 9 Als Argument der Methode deletePersistence wird dem persistentem Objekt der Zustand persistent wieder entzogen und wechselt somit in den Zustand persistent new deleted 10 Wird die aktuelle Transaktion abgebrochen oder erfolgreich beendet so wechselt das Objekt vom Zustand persistence new deleted in den Zustand transient 11 Als Argument der Methode deletePersistence wechselt das Objekt von den Zust nden hollow persistent clean und persistent dirty in den Zustand persistent deleted 12 Wenn die aktuelle Transaktion indem dem Objekt der Zustand persistent entzogen wurde erfolgreich beendet so wechselt sein Zustand von persistent deleted in den Zustand transient 13 Wenn die aktuelle Transaktion indem dem Objekt der Zustand persistent entzogen wurde abgebrochen wird so wechselt sein Zustand von persistent deleted in den Zustand hollow Manche Zust nde
83. den Namen der Objektreferenz auf die die Assoziation gerichtet ist Durch Angabe von column wird die Spalte die den Fremdschl ssel beinhaltet beschrieben class definiert den Typ der Objektreferenz Durch Angabe von cascade delete wird erreicht dass wenn das Hauptobjekt gel scht wird auch die von diesem aus referenzierten Objekte mit gel scht werden lt list role arrayListBP table tprimarysecond lazy false cascade delete gt lt key column basePrimary_ID gt lt index column posn type int gt lt one to many class hibernate PrimarySecond gt lt list gt Durch das Element lt list gt wird festgelegt wie Datentypen die die Schnittstelle List implementieren abgebildet werden Dabei definiert das Attribut role den Variablennamen table den Tabellenname der Tabelle die den Fremdschl ssel eingef hrt durch das Attribut key und die Elementposition eingef hrt durch das Attribut index beinhaltet Durch Angabe des Attributes one to many wird die Klasse der Elemente der List bekannt gemacht Durch Angabe von lazy true oder false wird angegeben ob Lazy Initialization verwendet werden soll True bedeutet dass die referenzierten Objekte erst bei Bedarf aus der Datenbank geladen werden wo hingegen durch Angabe von false der komplette Objektgraph initialisiert wird lt class name hibernate BasePrimary table tbaseprimary gt lt joined subclass name hibernate Primary table tprimary gt lt key col
84. dentit tskonzept definiert Im Persistenz Deskriptor wird angegeben welches Konzept f r die jeweilige Klasse bzw deren Objekte verwendet wird Die JDO Implementierung ist verantwortlich daf r dass immer nur eine JDO Instanz mit einem Datenbank Objekt pro PersistenceManager assoziiert ist Das Objekt dass die Instanzen Identit t einkapselt wird Objekt ID und die zugeh rige Klassendefinition Primary Key Klasse genannt Im folgenden werden die drei Identit tskonzepte vorgestellt Eine detailliertere Beschreibung ist in der Spezifikation Russ02 zu finden Datenbank Identit t Dies ist der voreingestellte JDO Identit ts Mechanismus und muss von jedem JDO Anbieter implementiert werden Die Identit t wird einem Objekt in diesem Modus automatisch von der Datenbank zugewiesen wenn das Objekt den Zustand persistent erlangt Die Art wie dies geschieht ist von der JDO Implementierung und der zugrunde liegenden Datenbank abh ngig und geschieht transparent f r den Anwender Ist die Identit t einmal festgelegt kann dadurch das Objekt in der Datenbank gefunden und ausgelesen werden Datenbank Identit t wird im Persistenz Deskriptor f r eine bestimmte Java Klasse wie folgt eingeleitet lt xml version 1 0 encoding UTF 8 gt lt IDOCTYPE jdo SYSTEM file Verweis auf den Pfad gt lt jdo gt lt package name Verweis auf Modul gt lt class name Klassenname identity type datastore gt lt package gt
85. der transparenten Persistenz der Anwender ben tigt keine SQL oder JDBC Kenntnisse Werden nicht viele komplexe Objekte innerhalb einer Transaktion gespeichert so treten keine Speicherprobleme auf Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 119 139 6 Anhang 6 1 Abbildungsverzeichnis 2 2 1 1 JDO in einer eigenst ndigen Umgebung Roos02 19 2 2 1 2 Enhancement Vorgang 21 2 2 4 1 JDO Transparenz Roos02 27 2 2 4 4 Zustandsdiagramm der nach JDO Spezifikation geforderten sieben Zust nde 31 2 2 7 Die Exception Hierarchie Roos02 37 3 2 Klassendiagramm des Prototyp 44 3 2 1 1 Entity Relationship Modell der Datenbank diplom 47 3 2 1 2 Persistenz Deskriptor der Klasse Primary 49 3 2 2 2 Entity Relationship Modell der Datenbank hibernate 54 3 2 3 2 Entity Relationship Modell der Datenbank castordiplom 60 3 2 4 1 Entity Relationship Modell der Datenbank kodoDiplom 65 3 2 5 1 Entity Relationship Modell der Datenbank lidodiplom 71 4 1 3 Diagramm Serialisierung Deserialisierung und Speicherverbrauch 76 4 2 4 6 Performance der DB Operationen unter HSQL im Server Modus 91 4 2 4 6 Performance der DB Operationen unter HSQL im embedded Modus 91 4 3 3 6 Performance Ergebnisse unter Verwendung der Datenbank HSQL im eingebetteten Modus 98 4 4 5 6 Perfor
86. der JDO Instanzen sind f r die Applikation verdeckt aber intern kennt der PersistenceManager diese Zust nde die durch Methoden der JDOHelper Klasse auch vom Anwender abgefragt werden k nnen e public static boolean isDeleted Object pc liefert true wenn das Object in der aktuellen Transaktion gel scht wurde e public static boolean isDirty Object pc liefert true wenn ein persistenter Attributwert in der aktuellen Transaktion ge ndert wurde e public static boolean isNew Object pc liefert true wenn das Objekt in der aktuellen Transaktion persistent wird e public static boolean isPersistent Object pc liefert true wenn das Objekt persistent ist e public static boolean isTransactional Object pc liefert true wenn das Objekt transaktional ist 2 2 4 5Instanzen Callbacks Mit Instanzen Callbacks sind Aktionen gemeint die bei einem Zugangsubergang ausgefuhrt werden Dadurch kann sich der Programmierer durch die JDO Implementierung benachrichtigen lassen sobald eine Instanz einen gewissen Zustand erreicht hat oder wenn eine Instanz vor einem Zustandsubergang steht Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 33 139 Daf r stellt die JDO Spezifikation die InstanceCallback Schnittstelle mit vier Methoden zur Verf gung die bei Bedarf implementiert werden k nnen Diese werden im folgenden kurz erl utert e void jd
87. diese Objekte in relationalen Datenbanken Dazu k nnen sie automatisch ein passendes SQL Schema generieren oder aus einem benutzerdefinierten Mapping ein SQL Schema erzeugen Vorteile Entwickler braucht sich nur um das Mapping zu k mmern Nachteile 1 SQL Schema legt die Struktur der zu speichernden Datenobjekte die Namen der Tabellen und Attribute mit zugeh renden Datentypen fest Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 17 139 keine gemeinsame API zwischen Herstellern d h die Programme bleiben streng an einen Hersteller gebunden was bei einem Herstellerwechsel automatisch zu hohen Entwicklungs bzw Wartungskosten fuhrt 2 1 6Objektorientierte Datenbank Management Systeme OODBMS 1991 wurde die Object Database Management Group ODMG gegr ndet Es ist eine Gruppierung verschiedener Hersteller von objektorientierten Datenbanken die sich zum Ziel gesetzt haben einen Standard f r die objektorientierte Datenhaltung zu definieren Der aktuelle ODMG Standard Version 3 0 Jahr 2000 beschreibt ein sprachneutrales Objektmodell eine Objektanfragesprache OQL und unabhangige Sprachanbindungen fur C Java und Smalltalk Ziel ist es die Objekte mit ihren Beziehungen untereinander und ihren Methoden 1 1 in der Datenbank zu speichern Vorteile Objekte m ssen nicht wie bei RDBMS in ihre Attribute zerlegt werden da das Objekt als
88. e Connector J V3 0 Sek Rollback A Zeit in ms in der eine Abfrage an die Datenbank erfolgte und alle Hauptobjekte in einer ArrayList gespeichert wurden B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 103 139 A B Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 104 139 Wird ein JDBC Treiber verwendet der die JDBC Spezifikation V2 0 oder h her implementiert so ist es nicht m glich in der Konfigurationsdatei durch setzen des Wertes com solarmetric kodo DefaultFetchThreshold auf 1 das lazy loading auszuschalten siehe Kodo03 S 83 D h das Hauptobjekt liegt initialisiert im Speicher vor Wird auf die von diesem aus referenzierten Objekte zugegriffen so werden diese Werte bei Bedarf aus der Datenbank gelesen Nach Ausf hrung der Query Operation wechseln die ausgelesenen Objekte von dem Zustand hollow in den Zustand persistent clean Findet nun keine nderung an den ausgelesenen Objekten statt so wechselt der Zustand nach Aufruf der Methode commit oder rollback erneut in den Zustand hollow 4 4 5 4Update Operation Allen Objekten der Klasse SecondaryFirst wurde ein neuer Bezeichner zugewiesen d h die sich im Speicher befindlichen Objekte wurden ver ndert und so
89. e none gt lt field name intValueSS primary key true gt lt class gt lt package gt lt jdo gt Abbildung 25 Persistenz Deskriptor f r das Objektmodell unter Verwendung von Kodo JDO 6 11SQL Skript f r die Datenbank kodoDiplom create table tanotherclass intValueACx int 10 not null intValueBS_seclistx int 10 intValueBS_secmapx int 10 intValueSS_secondarysecondx int 10 stringValueACx varchar 50 primary key intValueACx type innodb alter table tanotherclass add index intValueBS_seclistx alter table tanotherclass add index intValueSS_secondarysecondx alter table tanotherclass add index intValueBS_secmapx create table primary_hashmappx intValueBP_jdoidx int 10 not null intValueBS_hashmappx int 10 jdokeyx int 10 not null primary key intValueBP_jdoidx jdokeyx type innodb alter table primary_hashmappx add index intValueBP_jdoidx alter table primary_hashmappx add index intValueBS_hashmappx create table tbaseprimary boolValueBPx smallint intValueBPx int 10 not null stringValueBPx varchar 50 jdoclassx varchar 50 primary key intvalueBPx type innodb create table tprimaryfirst boolValuePFx smallint intValuePFx int 10 not null stringValuePFx varchar 50 primary key intValuePFx type innodb create table tsecondaryfirst boolValueSFx smallint create table tprimarysecond intValueBP_bpx int 10 intValuePF_pri
90. eicher 512MB SD RAM 1 Plug In sind Hilfsprogramme die die Funktionalit t von anderen Programmen erweitern Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 43 139 10GB 5400 U min Windows 2000 Datenbank Version MySQL 3 23 54 max nt JDK Version SDK 1 4 1_01 3 1 1Die Datenbank MySQL 3 1 1 1Warum MySQL MySQL ist ein relationales Datenbankmanagementsystem Der gro e Vorteil ist dass es frei und kostenlos unter www mysql com erh ltlich ist MySQL ist die verbreitetste Open Source Datenbank lizenziert mit GNU GENERAL PUBLIC LICENSE http www gnu org Es ist eine echte Multi User Multi Threaded SQL Datenbank und wird von mehreren gro en Providern oder auch Suchmaschinenbetreibern eingesetzt MySQL ist eine Client Server Implementierung die aus einem Server D mon mysald max nt es existieren noch andere und vielen Client Programmen sowie Bibliotheken f r unterschiedliche Programmiersprachen besteht Die wichtigsten Eigenschaften von MySQL sind Geschwindigkeit Stabilit t und einfache Bedienbarkeit MySQ03 3 1 1 2Der Tabellentyp innoDB Gew hlt wurde der Tabellentyp innoDB da der Standard Tabellentyp von MySQL MyISAM keine Transaktionen unterst zt Es folgt eine Auflistung der Vorteile des Tabellentyp innoDB es wird ein Transaktionskonzept mit commit rollback und crash recovery Fahigkeiten unterstutzt unterst tzt als erster
91. eit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 65 139 Obige Einstellungen der Konfigurationsparameter ergaben die besten Performance Ergebnisse 3 2 4 1Entity Relationship Modell primary_hashmappx tprimarysecond tprimaryfirst PK intValueBP_jdoidx arrayListBP intValuePSx 1 intValuePFx PK jdokeyx intValueBP_bpx boolValuePFx intValueBS_hashmappx intValuePF _primaryfirstx stringValuePFx stringValuePSx 1 tbaseprimary PK intValueBPx tbasesecondary boolValueBPx tsecondaryfirst stringValueBPx PK intValueBSx hashMapP jdoclassx PK intValueSFx a doubleValueBSx 1 boolValueSFx intValueSF_secondaryfirstx stringValueSFx stringValueBSx jdoclassx L 1 tprimary 1 PK intValueBPx arrayListBS 1 boolValuePx stringValueBPx 1 tsecondarysecond PK intValueSSx intValueBS_bsx stringValueSSx 1 ON 1 tanotherclass tsecondary intValueACx PK intValueBSx intValueBS_seclistx intValueBS_secmapx sao st T primlistx intValueSS_secondarysecondx intValueBP_primmapx stringValueACx stringValueSx 1 primary_propertiesx secondary_hashmapsx PK intValueBP_jdoidx PK jdokeyx jdokeyx propertiespx intValueAC_hashmapsx PK intValueBS_jdoidx FK1 intValueBPx Abbildung 11 Entity Relationsh
92. en 2 5 4 2Assoziationen Es soll untersucht werden wie die g ngigen Abbildungen 1 1 1 N und N M durch die JDO Implementierung gehandhabt werden wie die Abbildung von Java Datentypen 1 Darunter fallen insert delete query und update Operationen jeweils erfolgreich commit Vorgang und nicht erfolgreich rollback Vorgang 2 Mit dem Begriff Automatismus ist gemeint die automatische Abbildung der zu speichernden Daten der Objekte auf Tabellen der zugrundeliegenden Datenbank Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 42 139 auf Datentypen der zugrundeliegenden Datenbank erfolgt d h ob ein automatisches Mapping erfolgt oder ob eine explizite Typkonvertierung vorgenommen werden muss des weiteren ob die Nutzung von Fremdschl sseln unterst tzt wird und speziell wie die Handhabung f r Implementierungen der Schnittstellen List und Map erfolgt 2 5 4 3Komposition Komposition sagt aus dass zwischen Objekten eine Beziehung vorliegt die sich als ist Teil von oder besteht aus beschreiben l sst Diese Teile sind existenzabh ngig vom Ganzen so dass beim L schen des Ganzen auch alle seine Bestandteile mit gel scht werden m ssen In unserem Fall soll untersucht werden ob und in wie weit dies automatisch durch die JDO Implementierung geschieht oder ob der Anwender das kaskadierende L schen selbst implementieren muss 2 5 5Graph
93. en oder aber diese Werte welche persistent abgelegt werden sollen in der Unterklasse zu berschreiben F r deren Ver nderungen bzw die Weitergabe der Ver nderungen an die Oberklasse ist der Benutzer selbst verantwortlich Wird in einer Vererbungshierarchie eine Klasse als abstrakt definiert so wird auch falls Applikation Identifikation verwendet wurde die zugeh rige Primary Key Klasse abstrakt d h alle von dieser Klasse erbenden persistence capable Unterklassen m ssen eigene Implementierungen f r die Applikation Identifikation bereit stellen welche von der abstrakten Ober Primary Key Klasse erben Im folgenden werden die Begriffe first class und second class Objekte _ eingef hrt First class Objekte Dies sind Instanzen von PersistenceCapable Klassen welche eine JDO Identit t siehe Abschnitt 2 2 1 4 haben Dadurch liegen sie als eindeutige Objekte im Cache des PersistenceManager vor Wird ein Attributwert eines first class Objektes ver ndert so wechselt sein Zustand in den Zustand dirty Second class Objekte Diese Objekte implementieren nicht die Schnittstellte PersistenceCapable und besitzen keine JDO Identit t d h sie liegen nicht eindeutig im Cache des PersistenceManager vor Trotzdem wird eine gewisse Persistenz Unterst tzung durch die JDO Implementierung zur Verf gung gestellt weil sie als Bestandteil eines first class Objektes abgespeichert werden Komposition Wird ein second class Objekt ver ndert
94. en Objekte der Methode deletePersistentAll List bergeben wurden B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Anzahl AJ B Fazit Bei der delete Operation ist der JDBC Treiber Connector J V3 0 ca 45 50 schneller als der MM JDBC Treiber Die aus der Datenbank gelesenen Objekte wechseln durch die Abfrage vom Zustand hollow in den Zustand persistent clean Durch Aufruf der Methode deletePersistentAll wird den Objekten der Zustand persistent clean entzogen und sie wechseln in den Zustand persistent deleted Wird nun die aktuelle Transaktion erfolgreich durch Aufruf der Methode commit beendet so wechseln die sich in der List befindlichen Objekte in den Zustand transient Wird hingegen die aktuelle Transaktion durch Aufruf der Methode rollback abgebrochen so wechseln die Objekte von dem Zustand persistent deleted erneut in den Zustand hollow Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 79 139 4 1 3 3Query Operation n Anzahl von Primary Objekten werden aus der Datenbank gelesen und in einer ArrayList zwischengespeichert MM SQL Treiber V2 0 4 Anzahl Imsj Connector J V3 0 8 0 10 10 1773 2492 z 6050 20 14052 Rollback MM JDBC Treiber Sek Connector J V3 0 Sek E10 Prim ary Objekte E20Primary Objekte 1150 Prim ary Objekte 0100 Primary Objekte A Zeit in ms in der eine
95. en oder bestimmte Schnittstellen zu implementieren ist nicht n tig Dies geschieht vollkommen transparent f r den Anwender w hrend dem Enhancement Vorgang Dieser Vorgang ben tigt lediglich die zuvor erstellten Persistenz Deskriptoren wertet diese aus und erweitert den Bytecode mit Datenbank bzw jdo spezifischen get und set Methoden Diese Vorgehensweise ist eher nachteilig da man keine Kontrolle ber die erweiterten Klassen hat Letztendlich ist es Sache des Hersteller der JDO Implementierung wie er den Enhancement Vorgang implementiert Die Spezifikation schreibt hier keine allgemeine Vorgehensweise voraus Weitere M glichkeiten den Enhancement Vorgang umzusetzen w ren die Nutzung der Java Reflection AP oder den Source Code direkt zu erweitern Des weiteren werden keine SQL Kenntnisse ben tigt und auch keine JDBC Anweisungen m ssen im Programmcode verankert werden 4 1 3Performance und Ressourcenverbrauch Zu Beginn wurden n verschiedene Primary Objekte des Objektmodells in n Dateien serialisiert diese wieder deserialisiert und in einer ArrayList zwischengespeichert Die Zeiten wurden durch Aufruf des Befehls System currentTimeMillis gemessen Der Speicherverbrauch wurde im Ressourcenfenster des Taskmanagers abgelesen Dies diente dazu einen Vergleich f r die insert und query Anweisungen durch JDO zu erhalten Es wurden jeweils 5 Tests mit 100 500 und 1000 1 Wenn die Tabellen nicht explizit von Hand angelegt werde
96. ences tbaseprimary intValueBP key basePrimary_ID alter table tprimarysecond add index primaryFirst_ID add constraint fk_PS_PF foreign key primaryFirst_ID references tprimaryfirst intValuePF create table tprimaryfirst intValuePF int 10 not null boolValuePF bit stringValuePF varchar 50 primary key intValuePF type innoDB create table tbaseprimary intValueBP int 10 not null stringValueBP varchar 50 boolValueBP bit primary key intValueBP type innoDB create table tanotherclass intValueAC int 10 not null secondarySecond_ID int 10 stringValueAC varchar 50 secondary_ID int 10 hashMapSKey int 10 secondary_ID_list int 10 posn int 10 primary key intValueAC type innoDB alter table tanotherclass add index secondarySecond_ID add constraint fk_AC_SS foreign key secondarySecond_ID references tsecondarysecond intValueSS alter table tanotherclass add index secondary_ID add constraint fk_AC_S_map foreign key secondary_ID references tsecondary intValueBS alter table tanotherclass add index secondary_ID_list add constraint fk_AC_S_list foreign key secondary_ID_list references tsecondary intValueBS references tbasesecondary intValueBS create table tsecondaryfirst intValueSF int 10 not null stringValueSF varchar 50 boolValueSF bit primary key intValueSF type innoDB create table tprimary intValueBP int 10 not null stringValueP var
97. enkonzept Durch das Attribut persistence capable superclass wird angegeben dass diese Klasse von der Klasse BasePrimary erbt D h es muss nicht explizit eine PrimaryKey Klasse f r diese Klasse erstellt werden da diese von der Oberklasse geerbt wird Die Klasse Primary erbt den PrimaryKey intValueBP der Oberklasse Durch setzen von requires extent auf true ist es m glich ber einen Extent auf diese Klasse zuzugreifen lt field name stringValueP gt lt extension key jdbc vendor name ssibo gt lt extension key mapping value direct vendor name ssibo gt lt extension gt lt field gt Durch das Element lt field gt werden die persistenten Attribute einer Klasse beschrieben Die JDO Spezifikation definiert Regeln um persistene Felder einer Klasse automatisch zu erkennen und Standardwerte f r deren Attribute zu setzen falls diese nicht explizit im Persistenz Deskriptor erw hnt werden Russ02 S 125 Wie bereits im Abschnitt 2 2 3 erw hnt werden durch das Element lt extension gt herstellerspezifische Informationen f r den Enhancement Vorgang eingef hrt Diese werden durch das Attribut vendor name eindeutig einem JDO Anbieter zugeordnet so dass der erstellte Persistenz Deskriptor auch von anderen JDO Implementierungen genutzt werden kann Im obigen Beispiel bedeutet ssibo die JDO Implementierung der Firma Signsoft names intelliBO Signsoft definiert das Element lt extension gt als Schl ssel Wert Paar Durch
98. ent Es ist eine exponentielle Laufzeit zu erkennen 4 5 3 2Delete Operation Die n sich im Speicher befindlichen Primary Objekte wurden innerhalb einer Transaktion gel scht n Primary Objekte werden in der Datenbank gel scht Connector J V3 0 1 Der Begriff Persistenz durch Erreichbarkeit wurde in Abschnitt 2 2 1 3 eingef hrt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 110 139 Anzahl ms E10 Primary Objekte E20 Primary Objekte E 30 Primary Objekte O 50 Primary Objekte 01100 Primary Objekte Connector J V3 0 Sek Rollback A Zeit in ms in der die sich im Speicher befindlichen Primary Objekte der Methode deletePersistentAll obj bergeben wurden B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Anzahl _ A B 4416 11027 18528 35032 Fazit Durch Aufruf der Methode deletePersistentAll List wird den Objekten der Zustand persistent clean entzogen und sie wechseln in den Zustand persistent deleted Wird nun die aktuelle Transaktion erfolgreich durch Aufruf der Methode commit beendet so wechseln die sich in der List befindlichen Objekte in den Zustand transient Wird hingegen die aktuelle Transaktion durch Aufruf der Methode rollback abgebrochen so wechseln die Objekte von dem Zustand persistent deleted erneut in den Zustand hollow Auch Objekte eine exponentielle 40
99. eption erkennt man an folgender Terminologie User ausgel st durch die Applikation welche den JDO Service nutzt DataStore ausgel st durch die benutzte Datenbank Internal ausgel st durch die JDO Implementierung des jeweiligen JDO Anbieter Die JDO Anbieter k nnen eigene Exceptions definieren die von diesen Standard Exceptions abgeleitet sind Die Basisklasse aller Exceptions Tritt w hrend der Laufzeit ein Fehler auf so wird automatisch ein Konstruktor aufgerufen der diesen Fehler auff ngt Die Argumente k nnen dann ausgelesen werden so dass man n here Informationen ber den aufgetretenen Fehler erh lt z Bsp e JDOException String msg Throwable nested Object failed msg eine kurze Fehlerbeschreibung nested eingebettete Exceptions failed eine Referenz auf das fehlgeschlagene Objekt Es folgt eine kurze Beschreibung der einzelnen Exceptions e JDOCanRetryException Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 38 139 Basisklasse f r alle Exceptions die durch die Anwendung wieder r ckg ngig gemacht werden k nnen e JDOUserException Basisklasse f r alle Exceptions die durch den User verursacht werden e JDOUnsupportedOptionException Wird ausgel st wenn die Anwendung auf ein durch den JDO Anbieter nicht implementierte optionale Eigenschaften des JDO Standard zugreifen m chte e JDODataStoreExce
100. erechneten nderungen in die Datenbasis eingetragen werden Bau94 Die Schnittstelle Transaction stellt einige Methoden zur Verwaltung von Transaktionen zur Verf gung Auf die wichtigsten wird hier kurz eingegangen Es k nnen in einer Anwendung mehrere PersistenceManager existieren Zwischen PersistenceManager und Transaktion existiert eine 1 1 Bezieung d h dass ein PersistenceManager immer nur eine aktive Transaktion verwalten kann Durch die Methode currentTransaction wird dem Anwender eine Instanz der Transaction Schnittstelle vom JDO Persistenz Manager geliefert Dieses Transaction Objekt lebt solange bis der Persistenz Manager geschlossen wird d h alle JDO Transaktionen sind an diesem Objekt gebunden und werden der Reihe nach ausgef hrt JDO unterst tzt nicht das Konzept der verschachtelten Transaktionen 2 2 5 3Wichtige Methoden der Schnittstelle Transaction e boolean isActive Diese Methode liefert true wenn eine aktive Transaktion vorliegt d h die begin Methode wurde schon ausgef hrt jedoch noch kein commit oder rollback e void begin Eine Transaktion wird gestartet e void commit Benachrichtigung an die unterliegende Datenbank ihre Transaktion abzuschliesen e void rollback Vorheriger Ist Zustand der Daten in der unterliegenden Datenbank wird wiederhergestellt JDO definiert zwei weitere Transaktions Verfahren um die Effizienz zu verbessern dies sind die Flags RestoreValues und R
101. erties gesucht werden kann Es muss zuerst der gesamte BLOB aus der Datenbank gelesen werden dann kann dieser nach dem Schl ssel durchforstet werden Dies geht auf Kosten der Performance da erst der gesamte BLOB deserialisiert werden muss Es besteht nicht die M glichkeit dass der Java Datentyp Properties auf eine eigene Tabelle abgebildet werden kann Probleme bei den Java Datentypen Map und List Werden in einem Objekt Attribute vom Java Datentyp Map und List verwendet die beide als Sammlung von Objekten desselben Datentyp dienen trat ein Problem bei der Verwendung der Standardeinstellung von intelliBO auf Dies wird an nachfolgendem Beispiel erl utert Objekte der Klasse Primary besitzen eine List und eine Map in denen jeweils Secondary Objekte verwaltet werden Wird die Standardeinstellung von intelliBO verwendet so wird in der zur Klasse Secondary geh renden Tabelle TSECONDARY eine Spalte namens FTPRIMARY FINTVALUEBP definiert Diese Spalte stellt den Fremdschlussel auf die Tabelle TPRIMARY dar Werden nun durch intelliBO die instanziierten Hauptobjekte der Klasse Primary in die Tabellen der Datenbank eingetragen so treten keine Probleme auf d h es wird alles ordnungsgem abgespeichert Probleme treten auf wenn auf die in der Datenbank gespeicherten Primary Objekte zugegriffen wird d h durch eine Abfrage werden alle Primary Objekte aus der Datenbank geladen und in einer List zwischengespeichert Wird nun auf die jeweilige Li
102. erung dieser Methoden ist in der beiliegenden Java Doc zu finden In der beiliegenden Java Doc wird die Klasse CastorTest die die verschiedenen Tests durchf hrt erl utert Vor Ausf hrung der Tests muss noch eine Datenbank names castordiplom in MySQL bzw HSQL erstellt und die entsprechenden Tabellen in dieser angelegt werden siehe Abschnitte 6 4 bzw 6 5 Im n chsten Abschnitt werden die Beziehungen der angelegten Tabellen anhand eines Entity Relationship Modells erl utert Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 60 139 3 2 3 2Entity Relationship Modell tprimarysecond tprimaryfirst PK intValuePS g ae IntValuePs 1 0 1 PK intValuePF basePrimary_ID stringValuePF stringValuePS boolValuePF primaryFirst_ID 1 tbaseprimary intValueBP stringValueBP booValueBP 1 tsecondaryfirst tbasesecondary PK intValueSF 9 4 PK intValueBS stringValueSF stringValueBS boolValueSF doubleValueBS secondaryFirst_ID 1 me PK intValueBP j arrayListBS primary_ID_prop boolValueP stringValueP 1 1 keyp valuep 0 N tsecondarysecond PK intValueSS stringValueSS baseSecondary_ID 0 1 1 A e O N tanotherclass tsecondary PK intValueAC PK intValueBS stringValueAC O N secondarySecond_ID stringValueS secondary_ID boolV
103. es ist wichtig damit die der Projekt CD beiliegende Batch Datei den Java Compiler und Interpreter und den Enhancer von intelliBO ausf hren kann siehe Anhang Abschnit xcx 3 2 1 3 2 Systemvoraussetzungen Hardware Die Tests wurden auf den im Abschnitt 3 1 genannten Rechner ausgef hrt Da die JDO Implementierung den Arbeitsspeicher stark belastet soll mindestens 512MB Arbeitsspeicher zur Verf gung stehen 3 2 2Implementierung Hibernate Im folgendem werden die wichtigsten Klassen und Schnittstellen der Hibernate API kurz vorgestellt 1 Auf dieses Problem wird im Abschnitt 4 2 eingegangen Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 52 139 3 2 2 1Wichtige Klassen und Schnittstellen der Hibernate API Datastore Durch eine Instanz der Schnittstelle Datastore wird der erstellte Persistenz Deskriptor d h die Abbildungsregeln der Java Klassen auf die zugrundeliegende relationale Datenbank der Applikation zug nglich gemacht Durch die Methode storeFile String xmlFile wird der bergebene XML Dateiname im Classpath gesucht und die entsprechende XML Datei eingelesen und ausgewertet SessionFactory Eine Instanz der Schnittstellte SessionFactory enthalt alle Konfigurationen der verwendeten Datenbank die Uber die Methode buildSessionFactory der Schnittstelle Datastore aus der sich im Classpath befindlichen Datei hibernate properties aus
104. etainValues Das Setzen dieser Flags wirkt sich nur auf Instanzen im Speicher aus und nimmt keinen Einfluss auf den Ablauf der commit bzw rollback Prozesse der zugrunde liegenden Datenbank RestoreValues 1 Auf die m glichen Verfahren wird nicht n her eingegangen Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 35 139 Ist dieses Flag auf true gesetzt bedeutet dies dass nach einem Rollback Vorgang der alte Zustand wiederhergestellt wird Diese Informationen werden aus einem Cache gelesen der bei Beginn der Transaktion mit den alten Werten beschrieben wird False bedeutet dass der Zustand des Objektes nach hollow Erkl rung der einzelnen Zust nde siehe Abschnitt 2 2 4 4 wechselt d h der alte Zustand muss nicht wiederherstellt werden es sei denn die Applikation greift auf diese Daten zu dann werden die einzelnen Werte aus der Datenbank gelesen und gesetzt Der Zustand false bringt erhebliche Performance Verbesserungen falls nach einem Rollback nicht wieder auf die Instanzen zugegriffen wird RetainValues Der Default Wert ist false d h nach einem erfolgreichem commit wechselt das Objekt in den Zustand hollow Dies reduziert den Instanzen Cache und verbessert die Performance Der Zustand true berl sst dem Entwickler explizit oder dem Persistence Manager implizit die L schung des Instanzen Caches Dies bringt Performance Verbesserungen
105. ey Klassen automatisch erstellt werden Dies wurde nicht durchgef hrt da die PrimaryKey Klassen des intelliBO Prototypes bernommen wurden 4 4 4Integrationsaufwand f r bereits existierende Klassen Kodo nutzt einen Bytecode Enhancer Dieser wird durch Aufruf von java com solarmetric kodo enhance JDOEnhancer properties kododiplom kodo properties kododiplom class gestartet In Abschnitt 4 1 2 erfolgte eine Erl uterung dieses Vorganges 4 4 5Performance und Ressourcenverbrauch Unter Verwendung der Datenbank MySQL wurden die Tests mit den beiden JDBC Treibern MaMa02 und Conn03 durchgef hrt Da bei Benutzung des MM JDBC Treibers ein fehlerhaftes Mapping des primitiven Datentyps boolean festgestellt wurde d h false und true wurden jeweils auf O in der Datenbank abgebildet wurde letztendlich nur der JDBC Treiber Connector J V3 0 verwendet 4 4 5 1Insert Operation n Primary Objekte werden aus einer ArrayList in die Datenbank MySQL eintragen Connector J V3 0 Anzahl ms 13209 E10 Primary Objekte E20 Primary Objekte E 30 Primary Objekte 1150 Primary Objekte 01100 Prim ary Objekte E1200 Prim ary Objekte E 300 Prim ary Objekte 37787 66990 95733 13209 19850 37787 66990 Connector J V3 0 Sek Rollback A Zeit in ms in denen die Hauptobjekte instanziiert in einer ArrayList zwischengespeichert und der Methode makePersistentAll List bergeben wurden B Zeit in ms
106. gef hrt Es folgt eine Auflistung der Ergebnisse der einzelnen Operationen 4 5 3 1Insert Operat n Primary Objekte werde 10 Primary Objekte E20 Primary Objekte E 30 Primary Objekte 050 Primary Objekte 0100 Primary Objekte Connector J V3 0 1 Siehe Russ02 S 125 dort werd die JDO Implementierung durchgef ch Diplomarbeit er Connector J V3 0 Sek Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 109 139 Anzahl ms 18047 18047 Rollback A Zeit in ms in denen die Hauptobjekte instanziiert in einer ArrayList zwischengespeichert und der Methode makePersistentAll List bergeben wurden B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Anzahl A BJ 7712 Fazit Durch den Aufruf der Methode makePersistentAll list wechseln alle sich in der List befindlichen Primary Objekte vom Zustand transient in den Zustand persistent new Durch Aufruf der Methode commit wird der komplette Objektgraph durchlaufen und alle von diesen Objekten aus referenzierten Objekte Eigenschaft Persistenz durch Erreichbarkeit als persistent deklariert und in der zugrunde liegenden Datenbank gespeichert Nun wechseln die abgespeicherten Objekte in den Zustand hollow Wird die aktuelle Transaktion durch Aufruf der Methode rollback abgebrochen so wechselt dass sich im Zustand persistent new befindliche Objekt wieder in den Zustand transi
107. gelesen werden Uber die Methode openSession der Schnittstelle SessionFactory wird eine Session erzeugt Falls mehrere Datenbanken verwendet werden wird pro Datenbank eine SessionFactory instanziiert Instanzen der Schnittstelle SessionFactory sind threadsafe und die an diese gebundenen Datenbankkonfigurationen k nnen nicht mehr ge ndert werden Session Die Schnittstelle Session kapselt die JDBC Verbindung zu der zugrundeliegenden Datenbank und dient als Quelle f r Transaktionen Die Lebensdauer einer Session Instanz ist an den Beginn und das Ende einer lokalen Transaktion gebunden Es werden Methoden zum Suchen L schen Eintragen und Finden bereitgestellt Transaction Die Schnittstelle Transaction dient dazu atomare Einheiten von Operationen zu bilden Eine Transaktion trans wird durch Aufruf der Methode beginTransaction der Schnittstelle Session eingeleitet Durch trans commit wird die Session abgeschlossen und die Transaktion beendet Ein rollback bricht die aktuelle Transaktion ab und verwirft die in der aktuellen Transaktion durchgef hrten nderungen uery Eine Instanz der Schnittstelle Query stellt eine objekt orientierte Abfragesprache dar Diese wird zur Laufzeit in SQL Code umgewandelt Durch Aufruf der Methode createQuery String queryString wird eine Query Instanz erzeugt Hibernate Die Klasse Hibernate stellt statische Methoden zum Zugriff auf die Hibernate Datentypen f r die Query Abfragen
108. gt lt field gt lt field name stringValuePS type string gt lt sql name stringValuePS type varchar gt lt field gt lt field name primaryFirst type castor PrimaryFirst gt lt sql name primaryFirst_ID gt lt field gt lt field name bp type castor BasePrimary gt lt sql name basePrimary_ID gt lt field gt lt class gt Durch den Parameter name des Elementes lt class gt wird die zu speichernde Klasse bekanntgegeben und durch Angabe des Parameters identity wird der PrimaryKey definiert Der Parameter depends sagt aus dass BasePrimary als Master fur die abhangige Klasse PrimarySecond dient Das Element lt map to table gt bezeichnet die Tabelle auf die die Klasse abgebildet wird Die Grundeinstellung des Caches ist count limit mit einer Kapazitat von 100 d h es werden 100 Objekte dieser Klasse im Cache zwischengespeichert Dies ist fur den untersuchten Anwendungsfall zu wenig daher wurde ein unbegrenzter Cache unlimited verwendet Innerhalb des Elementes lt field gt wird beschrieben wie die einzelnen Attribute der Klasse angegeben durch den Parameter name auf die entsprechende Spalte durch Element lt sql gt mit Parameter name in der Tabelle abgebildet werden Das Attribut bp vom Typ castor BasePrimary wird auf die gleiche Spalte wie auch der Fremdschl ssel der arrayListBP der Klasse BasePrimary abgebildet Dies wird im n chsten Teilausschnitt des Persistenz Deskriptor erl utert
109. hnitt 2 2 5 nach dem ACID Prinzip zur Verf gung und bietet die M glichkeit zur Definition von Anfragen an die Datenbank Die durch den PersistenceManager verwalteten Objekte m ssen die Schnittstelle PersistenceCapable implementieren Dies kann explizit durch den Programmierer oder implizit durch den Erweiterungsvorgang Enhancement erfolgen Die Schnittstelle 1 Java Data Objects Query Language diese wird im Abschnitt 2 2 6 ACID Eine Transaktion kann durch die Eigenschaften Atomarit t Ausf hrung als Ganzes Konsistenz in sich konsistent Isolation isoliert von anderen Transaktionen und Dauerhaftigkeit nach erfolgreicher Durchf hrung dauerhaft gespeichert beschrieben werden 3 Es existiert eine spezielle Anfragesprache in JDO names JDOQL die im Abschnitt 2 2 6 n her erl utert wird persistence capable sagt nur aus dass die Option da ist um dieses Objekt persistent zu speichern Ob dies geschieht oder nich obliegt immer noch dem Programmierer bzw der Applikation durch expliziten Aufruf der Methode makePersistent Object obj Erkl rung der Methode Abschnitt 2 2 2 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 20 139 PersistenceCapable deklariert ein Objekt als JDO Exemplar und stellt Funktionalit t zur Erzeugung von persistenten Objekten zur Verf gung Die JDO Implementierung kommuniziert dann transparent f r den Anwender mit de
110. i mit der Reihenfolge der UPDATE INSERT DELETE Befehle erstellt Diese kann von intelliBO genutzt werden um die Statement Reihenfolge zu ordnen 2 Eine ResultSet Abfrage kann verwendet werden wenn die Ergebnismenge einer SQL Anfrage nicht durch eine Sammlung von Objekten repr sentiert werden kann Als Ergebnis wird eine Menge von Maps zur ckgegeben welche als Schl ssel den Namen der Tabellenspalte und als Wert den aktuellen Wert des Feldes enthalten Sign02 S 118 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 85 139 4 2 1Automatische Generierung des Persistenz Deskriptors Es wurde das bei Hibernate mitgelieferte Kommandozeilen orientierte Werkzeug MapGenerator zur automatischen Generierung der Persistenz Deskriptoren getestet Der Aufruf geschieht pro Klasse d h es k nnen nicht alle Persistenz Deskriptoren auf einmal erstellt werden Der Aufruf geschieht wie folgt java cirrus hibernate tools MapGenerator setUID Prim rschl ssel output XML Datei Name Klassenname Die Ergebnisse der automatischen Generierung werden vorgestellt und dienen lediglich als ein Grundger st an welchem noch manuelle Korrekturen durchgef hrt werden m ssen Der Verweis zur DTD im Persistenz Deskriptor wurde wie folgt http hibernate sourceforge net hibernate mapping dtd erstellt und muss auf http hibernate sourceforge net hibernate mapping 1 1 dtd korrig
111. icherverbrauchs den der Testfall obige Operationen bei Verwendung der Datenbank MySQL ben tigt Die Angaben wurden im Taskmanager abgelesen E10 Primary E 20 Primary E 30 Primary 0150 Primary 11100 Primary Speicherverbrauch MB Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 113 139 4 5 3 6Performance unter Verwendung der Datenbank HSQL 250000 200000 150000 100000 Zeit ms 50000 0 re any ao Tan at te Anzahl Primary Objekte Abbildung 19 Performance Ergebnisse unter Verwendung der Datenbank HSQL im Server Modus 200000 150000 100000 N 50000 0 5789 13009 21152 46990 162824 1192 1723 2685 4767 4016 8963 17716 40641 138888 m 5 7 as 5 m Anzahl Primary Objekte i Abbildung 20 Performance Ergebnisse unter Verwendung der Datenbank HSQL im embedded Modus Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 114 139 4 5 4Vererbung Auch Lido unterst tzt das Konzept der Vererbung Im Gegensatz zu den anderen untersuchten JDO Implementierungen wird nicht jede an der Verebung beteiligte Klasse in einer eigenen Tabelle abgebildet Sondern alle an der Vererbung beteiligten Klassen bzw deren Attributwerte werden in der Tabelle der am weitesten abgeleiteten
112. ie Klasse Extent wurde im Abschnitt 2 2 2 eingef hrt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 67 139 Durch den Schl ssel lock column wird die Spalte angegeben in der eine Versionsnummer der geanderten Objekte verwaltet wird Dies ist bei Verwendung von optimistischen Transaktionen notwendig um konkurrierende Ver nderungen an Objekten zu erkennen Da bei der Evaluierung das pessimistische Transaktionskonzept verwendet wurde wurde die Versionsverwaltung durch none explizit ausgeschaltet Geschieht dies nicht versucht Kodo die Versionsnummer in der Spalte jdolockx ZU speichern Dies f hrt zu einer Fehlermeldung falls sich diese Spalte nicht in der zugeh rigen Tabelle befindet Der Schl ssel class column spezifiziert die Spalte in der Tabelle in der der vollst ndige Klassenname des Objektes gespeichert wird Da die Klasse AnotherClass keine Oberklasse darstellt wird diese Option nicht ben tigt und somit durch none deaktiviert Durch das Element lt field gt werden die persistenten Attribute einer Klasse beschrieben Die JDO Spezifikation definiert Regeln die die persistenten Felder bestimmter Datentypen einer Klasse automatisch erkennen Daher muss im zugeh rigenen Persistenz Deskriptor kein explizites Mapping dieser Datentypen erfolgen Diese Regeln sind in Russ02 S 125 zu finden Das Attribut secondarysecond der Klasse AnotherClass repr
113. iert werden Die an der Vererbung beteiligten Unterklassen wurden nicht auf eine eigene Tabelle abgebildet sondern deren Attribute in die Tabelle der zugeh renden Oberklasse aufgenommen Fur die Abbildung der Datentypen List und Map wird immer eine eigene Tabelle erstellt Z B werden in der zur Map zugeh rigen Tabelle die Fremdschl ssel und der Schl ssel der Map gehalten Bei einer 1 1 Assoziation wird das referenzierte Objekt immer als ein eingebettetes Objekt betrachtet d h die Attribute dieses Objektes werden in die Tabelle des es besitzenden Objektes aufgenommen 4 2 2Automatisches Erstellen der zugeh rigen Tabellen Zur automatischen Erstellung der Tabellen wurde das mitgelieferte Kommandozeilen basierte Werkzeug SchemaExport getestet Dieses Werkzeug erzeugt auf Basis des zuvor erstellen Persistenz Deskriptors ein SQL Skript passend zur verwendeten Datenbank Das Werkzeug liest die Konfigurationsdatei hibernate properties aus und erh lt somit Informationen ber die verwendete Datenbank Der Aufruf geschieht wie folgt java cirrus hibernate tools SchemaExport output Skript Dateiname Persistenz Deskriptor Durch Angabe von zus tzlichen Parametern ist es m glich dass dieses Skript auch direkt auf der Datenbank ausgef hrt wird siehe Dokumentation Hibe03 Es werden f r alle Tabellen drop und create Anweisungen des weiteren alle Fremdschl ssel erzeugt In dem erstellten Skript wurden keine gra
114. immt die automatische Abbildung des Java Objektes auf die Felder der zugrundeliegenden Datenbank Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 21 139 Java Compiler Persistenz Deskriptor Y L Enhancement Tool des JDO Anbieters erweitertes class File Ausf hrung in Standard JVM Abbildung 2 Enhancement Vorgang Die XML Beschreibungsdatei muss zur Laufzeit im CLASSPATH angegeben werden damit bestimmte Abbildungseigenschaften zur Laufzeit ber cksichtigt werden k nnen Die Verwendung dieses Werkzeuges bietet dem Anwender 100 ige Transparenz und sch tzt ihn vor manuell erzeugten Fehlern 2 2 1 3Grundlegende Begriffe Im folgenden werden grundlegende Begriffe von JDO erl utert transiente Objekte Ein Objekt ist transient wenn es erstmals durch den new Operator erzeugt wurde Diese Instanzen ben tigen keine Persistenz Infrastruktur da sie keine persistenten Daten aus der Datenbank repr sentieren d h ein PersistenceManager ist nicht n tig lediglich der Verweis auf die JDO Schnittstellen muss im CLASSPATH gesetzt sein nderungen an transienten Objekten wirken sich nicht an den Werten in der Datenbank aus es sei denn der Zustand dieses Objektes wird durch Aufruf der Methode makePersistent persistent An dieser Stelle wird der Begriff Persistenz durch Erreichbarkeit eingef hrt ein weiterer V
115. implementiert die Schnittstelle Collection wird der Datentyp der in der ArrayList gespeicherten Objekte gesetzt Auch hier wird durch das Attribut inverse die bidirektionale Beziehung zwischen den Klassen Primary und Secondary bekannt gegeben Durch Setzen des Attributes element dependent auf true wird das kaskadierende L schen aktiviert lt field name propertiesP persistence modifier persistent gt lt map key type java lang String value type java lang String gt lt extension vendor name kodo key value dependent value true gt lt extension vendor name kodo key key dependent value true gt lt field gt lt class gt Da das Attribut propertiesP vom Datentyp Properties ist und dieses die Schnittstelle Map implementiert werden auch hier die Datentypen der Schl ssel und Werte der Properties bekannt gegeben Obwohl die Datentypen der Schl ssel und zugeh rigen Werte des Datentyp Properties immer vom Datentyp String sind muss dies explizit im Persistenz Deskriptor angegeben werden 3 2 4 3Installation Benutzeranleitung 3 2 4 3 1 Systemvoraussetzungen Software 1 MySQL bzw HSQL m ssen installiert jeweils eine Datenbank kododiplom und die zugeh rigen Tabellen angelegt worden sein Anleitung siehe Abschnitt 6 4 bzw 6 5 2 Kodo JDO liegt als eine Sammlung von JAR Files vor die alle in den CLASSPATH aufgenommen werden m ssen Der CLASSPATH muss folgende JAR Files beinhalten Diplomarbeit Al
116. in Persistenz Deskriptor erstellt werden Des weiteren wird ein Quelltext Editor f r diese bereitgestellt so dass der Entwickler auch von Hand nderungen vornehmen kann Aus der Entwicklungsumgebung heraus k nnen Werkzeuge zur Tabellenskript Generation Syntax berpr fung der erstellten Persistenz Deskriptoren Referentielle Integrit t berpr fung und der Enhancement Vorgang gestartet werden F r die Bedienung der graphischen Entwicklungsumgebung wird auf das Handbuch von intelliBO verwiesen Sign02 4 1 8Abfragesprache n Bei Verwendung von intelliBO kann auch eine andere Abfragesprache als JDOQL gew hlt werden Dies wird am PersistenceManager im Parameter language der Methode newouery String language Object obj angegeben Folgende Angaben werden unterst tzt JDOQL Abfragesprache der JDO Spezifikation RESULT_SET SQL SQL als Abfragesprache Des weiteren wird die gleichzeitige Verwendung von JDOQL und SQL unterst tzt 4 1 9 Unterst tzte Systemumgebung IntelliBO ist in der eigenst ndigen und eingebetteten Umgebung lauff hig siehe Abschnitt 2 2 1 1 4 2 Hibernate In diesem Abschnitt werden die Ergebnisse der Evaluierung von Hibernate vorgestellt und auf Probleme die w hrend der Implementierung auftraten eingegangen Verwendet wurde die zu Beginn der Evaluierung zur Verf gung stehende Version 1 2 3 1 Anhand dieser berpr fung werden Abh ngigkeiten zwischen den Tabellen erkannt und eine XML Date
117. in der Datenbank abgebildet werden hibernate query substitutions true 1 false 0 yes Y no N Import Anweisung f r Package s d h innerhalb einer Query muss nicht mehr der komplette Package Name angegeben werden hibernate query imports hibernate Hibernate wird die verwendete Datenbank bekannt gegeben hibernate dialect cirrus hibernate sql MySQLDialect der verwendete JDBC Treiber wird eingef hrt hibernate connection driver_class com mysql jdbc Driver URL der Datenbank hibernate connection url jdbc mysal localhost hibernate Benutzername f r die Datenbank hibernate connection username timo Password der Datenbank hibernate connection password timo Aktiviert die Anzeige der dynamisch erzeugten SQL Statements hibernate show_sql true gibt die Transaktionsart an hibernate transaction factory_class cirrus hibernate transaction JDBCTransactionFactory 1 Der Begriff Lazy Initialization sagt aus dass die von diesem Objekt aus referenzierten Objekte noch nicht initialisiert sind Der Begriff Callback Mechanismus wurde in Abschnitt 2 2 4 5 eingef hrt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 54 139 3 2 2 2Entity Relationship Modell tprimarysec
118. ionsdaten die durch die Methode setConfiguration String url aus der durch url verweisenden XML Datei gelesen werden Die Methode getDatabase liefert eine Instanz der Schnittstelle Database Uber die die Datenbankverbindungen abgewickelt werden Database Die Schnittstelle Database kapselt die JDBC Verbindung zu der zugrundeliegenden Datenbank und dient als Quelle f r Transaktionen Des weiteren werden Methoden zum Suchen L schen Eintragen und Finden bereitgestellt Diese Datenbank Operationen k nnen nur innerhalb von Transaktionen die durch begin und commit eingeleitet werden stattfinden Alle Objekte die w hrend einer Transaktion in die Datenbank eingetragen bzw aus dieser geladen werden gehen in den Zustand persistent nderungen an persistenten Objekten werden mit der Datenbank synchronisiert sobald die Transaktion durch commit beendet wird Wird eine Transaktion erfolgreich oder durch rollback beendet so gehen diese sich im Speicher befindlichen Objekte in den Zustand transient uery Eine Instanz der Schnittstelle Query stellt eine Abfrage an die Datenbank dar die zur Laufzeit in SQL Code umgewandelt wird Durch Aufruf der Methode execute wird die Abfrage an die Datenbank gestartet Als Ergebnis wird eine Instanz der Schnittstelle QueryResults geliefert QueryResults Eine Instanz dieser Schnittstelle stellt eine Iteration der Ergebnismenge die durch die zuvor gestartete Query geliefert wurde dar
119. ip Modell der Datenbank kodoDiplom Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 66 139 Im obigen Modell sind die Prim rschl ssel fett unterstrichen und die Fremdschl ssel fett dargestellt Der Datentyp Properties wird in der Tabelle primary propertiesx abgebildet Der Schlussel der Properties wird in der Spalte jdokeyx und der zugeh rige Wert in der Spalte propertiespx verwaltet ber den Fremdschl ssel intValueBP jdoidx wird die Beziehung zu der Tabelle tprimary hergestellt Weitherhin ist zu erkennen dass Kodo f r die Verwendung des Datentyp HashMap Bestandteil der Klassen Primary und Secondary jeweils eine eigene Tabelle erzeugt In der Tabelle primary hashmappx wird der Schl ssel der HashMap in der Spalte jdokeyx und der zugeh rige Wert ber den Fremdschl ssel intValueBS hashmappx verwaltet Uber den Fremdschl ssel intValueBP_jdoidx wird die Beziehung zu der Tabelle tprimary hergestellt Die Tabellen tbaseprimary und tbasesecondary verwalten jeweils noch eine Spalte jdoclassx in der der vollst ndige Klassenname der Unterklassen verwaltet wird Die Fremdschl ssel f r die ArrayList und HashMap werden jeweils in einer eigenen Spalte abgebildet 3 2 4 2Persistenz Deskriptor Im Anhang 6 10 ist der erstellte Persistenz Deskriptor kododiplom jdo zu finden Es folgt eine Erl uterung ausgew hlter Elemente lt package
120. ische Entwicklungsumgebung Den meisten JDO Implementierungen liegt eine graphische Entwicklungsumgebung oder Kommandozeilenwerkzeuge bei Es soll deren Handhabbarkeit untersucht werden und welche zus tzlichen Funktionalit ten dem Anwender noch geboten werden ob und wie z B das Mapping von existierenden Klassen auf schon existierende Tabellen unterst tzt wird ob der Implementierung ein Tabellenskript Generator beiliegt ob Plug In f r andere hilfreiche Entwicklungstools zur Verf gung gestellt werden wie der Enhancement Vorgang erfolgt und ob und wie die zugrundeliegende Datenbank konfiguriert werden kann 2 5 6Abfragesprache n Es soll untersucht werden ob ber die jdo spezifische Abfragesprache JDOQL siehe Abschnitt 2 2 6 noch weitere wie SQL oder vom Hersteller eigene Abfragesprachen unterst tzt werden 2 5 7Unterst tzte Systemumgebungen Ob die JDO Implementierung in einen Applikationsserver integriert werden kann oder nur in einer Client Server Umgebung lauff hig ist 3 Prototyp In diesem Abschnitt wird die jeweilige Implementierung des erstellten Prototyps anhand des Klassendiagramms und des Entity Relationship Modells erl utert Des weiteren die verwendeten Datenbanken MySQL und HSQL vorgestellt und auf Besonderheiten der erstellten Persistenz Deskriptoren eingegangen 3 1 Systemumgebung Die Untersuchungen wurden auf folgender Hard und Software Konfiguration durchgef hrt Intel Pentium IIl 800Mhz Arbeitssp
121. konstruiert werden k nnen Die JDO Spezifikation schreibt eine Reihe von zu unterst tzenden Java Datentypen voraus die von jedem JDO Anbieter JDO spezifisch implementiert werden m ssen so dass diese Implementierung standard konform ist Es folgt eine Auflistung dieser Datentypen Persistente Werte Es folgt eine Datentypauflistung die von jeder JDO Implementierung unterst tzt werden m ssen alle primitiven Java Datentypen boolean char byte short int long float und double Wrapper Klassen Boolean Character Byte Short Integer Long Float Double String Locale BigDecimal und BigInteger Die beiden Schnittstellen Collection und Set Konkret muss aber nur die Klasse HashSet und Date von dem JDO Anbieter implementiert werden eigene Datentypen die die Schnittstelle PersistenceCapable implementieren Der Datentyp Object Wird w hrend der Implementierung dieser Datentyp verwendet so muss der Entwickler eine explizite Typanpassung vornehmen da in diesem Datentyp alle Arten von Objekten gespeichert werden k nnen eigene Interface Definitionen Weiterhin definiert die JDO Spezifikation optionale Datentypen Schnittstellen Map und List mit folgenden konkreten Implementierungen ArrayList HashMap Hashtable LinkedList TreeMap TreeSet und Vector Der Grund dass diese konkreten Klassenimplementierungen als optionale Datentypen spezifiziert wurden liegt daran dass JDO auch durch die Java
122. kt aus dass in der Klasse PrimarySecond ein Attribut vom Datentyp BasePrimary in der Klasse PrimarySecond vorhanden ist lt field name hashMapP gt lt map key type java lang Integer value type lidodiplom Secondary gt lt extension vendor name libelis key map type value java util HashMap gt lt extension vendor name libelis key sql reverse value javaField primMap gt lt field gt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 73 139 Durch das Element lt map gt wird Lido eine Map bekannt gemacht Die Parameter key type und value type deklarieren den Datentyp der Schl ssel und der zugeh rigen Werte Durch den Schl ssel map type des Elementes lt extension gt wird die Klasse die die Schnittstelle Map implementiert eingef hrt Durch sql reverse wird die bidirektionale Beziehung zwischen den Klassen Primary und Secondary eingeleitet In obigem Fall bedeutet dies dass die Klasse Secondary ein Attribut primMap vom Datentyp Primary besitzt 3 2 5 3Installation Benutzeranleitung 3 2 5 3 1 Systemvoraussetzungen Software 1 MySQL bzw HSQL m ssen installiert jeweils eine Datenbank 1idodiplom und die zugeh rigen Tabellen angelegt worden sein Anleitung siehe Abschnitt 6 4 bzw 6 5 2 Lido JDO liegt als eine Sammlung von JAR Files vor die alle in den CLASSPATH aufgenommen werden m ssen Der CLASSPATH muss folgende JAR File
123. kten aus referenzierten Objekte Eigenschaft Persistenz durch Erreichbarkeit als persistent deklariert und in der zugrunde liegenden 1 Es wurde bei den Tests mit rollback jeweils berpr ft dass keine nderung persistent wurde Hier werden beabsichtigt nur Ergebnisse der Version 3 2 aufgelistet da diese Version ca 30 40 performanter als die Version 3 1 ist 3 Der Begriff Persistenz durch Erreichbarkeit wurde in Abschnitt 2 2 1 3 eingef hrt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 78 139 Datenbank gespeichert Nun wechseln die abgespeicherten Objekte in den Zustand hollow Der commit Vorgang geht sehr auf Kosten der Performance und des Speicherverbrauchs was mit dem Profiler Optimizelt nachgewiesen wurde Wird die aktuelle Transaktion durch Aufruf der Methode rollback abgebrochen so wechselt dass sich im Zustand persistent new befindliche Objekt wieder in den Zustand transient 4 1 3 2Delete Operation n Primary Objekte die sich im Speicher befinden werden innerhalb einer Transaktion in der Datenbank gel scht MM SQL Treiber V2 0 4 Anzahl ms Connector J V3 0 Anzahl ms 3415 6710 18330 29874 E10 Primary Objekte E 20Prim ary Objekte 0150 Primary Objekte 0100 Primary Objekte MM JDBC Treiber Connector J V3 0 Rollback sides ee A Zeit in ms in der die sich im Speicher befindlich
124. ld name arrayListBP type castor PrimarySecond collection arraylist gt lt sql many key basePrimary_ID gt lt field gt lt class gt lt class name castor BaseSecondary identity intValueBS gt lt map to table tbasesecondary gt lt cache type type unlimited gt lt field name intValueBS type integer required true gt lt sql name intValueBS type integer gt lt field gt lt field name doubleValueBS type double gt lt sql name doubleValueBS type double gt lt field gt lt field name stringValueBS type string gt lt sql name stringValueBS type varchar gt lt field gt lt field name secondaryFirst type castor SecondaryFirst gt lt sql name secondaryFirst_ID gt lt field gt lt field name arrayListBS type castor SecondarySecond collection arraylist gt lt sql many key baseSecondary_ID gt lt field gt lt class gt lt class name castor AnotherClass identity intValueAC depends Secondary gt lt map to table tanotherclass gt lt cache type type unlimited gt lt field name intValueAC type integer required true gt lt sql name intValueAC type integer gt lt field gt lt field name stringValueAC type string gt lt sql name stringValueAC type varchar gt lt field gt lt field name secondarySecond type castor SecondarySecond gt lt sql name secondarySecond_ID gt lt field gt lt field name secList type cast
125. lt class name castor BasePrimary identity intValueBP gt lt map to table tbaseprimary gt lt field name arrayListBP type castor PrimarySecond collection arraylist gt lt sql many key basePrimary_ID gt lt field gt lt class gt Die Klasse BasePrimary besitzt eine ArrayList arrayListBP in der Objekte vom Typ castor PrimarySecond verwaltet werden Die Abbildung der Datentypen ArrayList HashMap Vector Set usw erfolgt durch Angabe des Parameters collection Unter Cast03 ist eine Auflistung der Typangaben zu finden Da Castor bidirektionale Beziehungen zwischen den Klassen erwartet muss durch Angabe des Parameters many key des Elementes lt sql gt die gleiche Tabellenspalte wie auch bei der zugeh rigen Objektreferenz angegeben werden D h da die Klasse PrimarySecond eine Objektreferenz bp auf die Klasse BasePrimary besitzt und die in der ArrayList arrayListBP gespeicherten Elemente vom Datentyp Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 62 139 PrimarySecond sind wird der Fremdschl ssel auf die gleiche Tabellenspalte basePrimary_Id abgebildet lt class name castor Primary extends castor BasePrimary identity intValueBP gt lt map to table tprimary gt lt field name hashMapP type castor Secondary collection map gt lt sql many key primary_ID_list gt lt field gt lt field name propertiesP type
126. m intelliBO Prototyp bernommen Die erstellte Hilfsklasse ConfJDO stellt statische Methoden zur Verf gung Diese lesen die Konfigurationsdatei kodo properties aus und initialisieren somit die Schnittstelle PersistenceManagerFactory und stellen der Anwendung einen PersistenceManager zur Verf gung Die Testklasse KodoTest bezieht von der Hilfsklasse Con JDO einen PersistenceManager und stellt Methoden f r die insert delete query und update Operationen zur Verf gung In der beiliegenden Java Doc werden die erstellten Klassen und deren Methoden erl utert Weiterhin werden im Abschnitt 2 2 2 alle verwendeten Klassen bzw Schnittstellen der JDO Spezifikation erkl rt Vor Ausf hrung der Tests muss noch eine Datenbank names kodoDiplom in MySQL bzw HSQL erstellt und die entsprechenden Tabellen in dieser angelegt werden Das SQL Skript zum Anlegen der Tabellen ist im Anhang 6 11 zu finden Im n chsten Abschnitt werden die Beziehungen der angelegten Tabellen anhand eines Entity Relationship Modells dargestellt Die durch die Hilfsklasse ConfJDO ausgelesene Konfigurationsdatei kodo properties wird im folgenden beschrieben Implementierung der PersistenceManagerFactory der Kodo API javax jdo PersistenceManagerFactoryClass com solarmetric kodo impl jdbc JDBCPersistenceMa nagerFactory durch false wird das pessimistische Transaktionskonzept eingeschaltet javax jdo option Optimistic false false nach commit werden gelesene
127. m verwendeten Speichermedium Die Evaluierung wird in dieser Umgebung durchgef hrt eingebettete Umgebung In dieser Umgebung ist JDO in einen J2EE Applikationsserver integriert Dies ist eine robuste komponenten basierte Umgebung die immer wieder ben tigte Funktionalit ten bereitstellt bzw bei Installation der eigenen Anwendung den entsprechenden Programmcode f r Transaktions Management Sicherheit Nebenlaufigkeit und Persistenz bereitstellt Oech01 Da diese Umgebung f r die Diplomarbeit nicht in Frage kommt wird f r den interessierten Leser auf die Spezifikation Russ02 verwiesen um ausf hrlichere Informationen zu erhalten 2 2 1 2 Erweiterungsvorgang Enhancement Die meisten JDO Implementierungen werden mit einem Enhancement Tool ausgeliefert Nach dem die erstellten Klassen mit einem Standard Java Compiler bersetzt worden sind kann das Tool angewendet werden In einer zuvor erstellen XML Beschreibungsdatei dem sogenannten Persistenz Deskriptor siehe Abschnitt 2 2 3 werden die zu speichernden Klassen bzw deren Attribute definiert W hrend dem Emnhancement Vorgang siehe 2 2 1 2 wird dieser Persistenz Deskriptor ausgewertet und die geschriebenen Klassen werden mit JDO spezifischen Methoden am Bytecode erweitert so dass jede nderung der Daten eines persistenten Objektes zur Laufzeit erkannt und gegebenenfalls mit der zugrunde liegenden Datenbank synchronisiert werden kann 5 Enhancement dieser Vorgang bern
128. mance Ergebnisse unter Verwendung der Datenbank HSQL im Server Modus 106 4 4 5 6 Performance Ergebnisse unter Verwendung der Datenbank HSQL im embedded Modus 106 4 5 3 6 Performance Ergebnisse unter Verwendung der Datenbank HSQL im Server Modus 113 4 5 3 6 Performance Ergebnisse unter Verwendung der Datenbank HSQL im embedded Modus 113 6 6 Persistenz Deskriptor f r das Objektmodell unter Verwendung von Hibernate 126 6 7 SQL Skript f r die Datenbank hibernate 127 6 8 Persistenz Deskriptor f r das Objektmodell unter Verwendung von Castor JDO 130 6 9 SQL Skript f r die Datenbank castordiplom 131 6 10 Persistenz Deskriptor f r das Objektmodell unter Verwendung von Kodo JDO 133 6 11 SQL Skript f r die Datenbank kododiplom 134 6 12 Persistenz Deskriptor f r das Objektmodell unter Verwendung von Lido 135 6 13 SQL Skript f r die Datenbank lidodiplom 137 6 14 DTD File jdo dtd von der JDO Spezifikation 138 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 120 139 6 2 JDO Implementierungen Quellen FastObjects http www fastobjects com JRELAY V2 0 http www objectindustries com KODO JDO http www solarmetric com Software Kodo_JDO IntelliBO V3 1 http www signsoft de LIDO http Awww libelis com OpenFusion http www prismtechnologies com Orient http
129. maryfirstx int 10 intValuePSx int 10 not null stringValuePSx varchar 50 primary key intValuePSx type innodb alter table tprimarysecond add index intValueBP_bpx alter table tprimarysecond add index intValuePF_primaryfirstx create table primary_propertiespx intValueBP_jdoidx int 10 not null jdokeyx varchar 50 not null propertiesPx varchar 50 primary key intValueBP_jdoidx jdokeyx type innodb alter table primary_propertiespx add index intValueBP_jdoidx create table tprimary boolValuePx smallint intVluebPx int 10 not null stringVlueP varchar 50 primary key intValueBPx type innodb create table tsecondarysecond intValueBS_bsx int 10 intValueSSx int 10 not null stringValueSSx varchar 50 primary key intValueSSx type innodb alter table tsecondarysecond add index intValueBS_bsx create table secondary_hashmapsx intValueAC_hashmapsx int 10 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 134 139 intValueSFx int 10 not null intValueBS_jdoidx int 10 not null stringValueSFx varchar 50 jdokeyx int 10 not null primary key intValueSFx primary key intValueBS_jdoidx jdokeyx type innodb type innodb alter table secondary_hashmapsx add index intValueAC_hashmapsx alter table secondary_hashmapsx add index intValueBS_jdoidx create table tbasese
130. matik rwth aachen de mbp dipl dipl html Balz99 Balzert H Lehrbuch der Objektmodellierung Spektrum Akademischer Verlag Heidelberg 1999 Russ02 Russel C Java Data Objects JSR12 Version 1 0 JDO Spezifikation Sun Microsystems Inc M rz 2002 http jcp org en jsr detail id 012 Roos02 Roos R M Java Data Objects Addison Wesley London Oktober 2002 http www ogilviepartners com Comm02 Online Community ber JDO http www JDOcentral com Petk01 Petkovic D und Br derl M Java in Datenbanksystemen Addison Wesley M nchen November 2001 Saak00 Sattler K U und Saake G Datenbanken und Java Dpunkt Verlag Heidelberg 2000 Oech01 Oechsle R Verteilte Systeme Vorlesungsskript Fachbereich Angewandte Informatik FH Trier 2001 MySQ03 MySQL MySQL Datenbank http www mysal de downloads mysql 3 23 html Conn03 JDBC Treiber Connector J V3 0 http www mysql de downloads api jdbc stable html MaMa02 JDBC Treiber Mark Matthews JDBC Treiber http www mysal de downloads api jdbc html Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 139 139 Sign02 Borl03 Hibe03 Cast03 Hype03 Kodo03 Lido03 Signsoft Benutzerhandbuch intelliBO 3 1 Signsoft GmbH Dresden 2002 http www signsoft com downloads intellibo 3 1 documents userguide de pdf Borland Profiler Optimizelt Borland Soft
131. mit mit der Datenbank synchronisiert Die Anzahl bezieht sich auf die Primary Objekte Die daraus resultierende Anzahl von SecondaryFirst Objekten steht jeweils in Klammern Connector J V3 0 Anzahl ms 1292 2274 E10 Primary Objekte E20 Primary Objekte E30 Primary Objekte 1150 Primary Objekte 01100 Primary Objekte E 200 Primary Objekte 300 Primary Objekte 5087 11417 22364 41342 Connector J V3 0 Sek Rollback A Zeit in ms in der die nderung durchgef hrt wurde B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Anzahl A BJ 1292 1843 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 105 139 20380 Fazit Durch Aufruf der Methode setString stringValue wird allen SecondaryFirst Objekten ein neuer Bezeichner zugewiesen Dadurch wechseln die Objekte in den Zustand persistent dirty Nun liegt ein inkonsistenter Zustand zwischen den Werten in den Objekten und der Datenbank vor Wird nun die aktuelle Transaktion durch Aufruf der Methode commit erfolgreich beendet so wechselt der Zustand der Objekte von persistent dirty in den Zustand hollow und die nderungen werden in der Datenbank abgespeichert Wird die aktuelle Transaktion durch Aufruf von rollback abgebrochen so findet der gleiche Zustandswechsel statt aber die nderungen werden verworfen d h sie werden nicht in der Datenb
132. ml und mapping xml m ssen in den CLASSPATH aufgenommen werden 3 2 3 4 2 Systemvoraussetzungen Hardware Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 63 139 Die Tests wurden auf dem im Abschnitt 3 1 genannten Rechner ausgef hrt 3 2 4Implementierung Solarmetric Kodo JDO V2 3 4 Fur die Evaluierung von Kodo wurde der erstellte Prototyp von Castor JDO verwendet da auch Kodo das Konzept der bidirektionalen Beziehungen zwischen den Objekten verwendet siehe Abschnitt 3 2 3 Die von dem Castor Prototyp implementierten Schnittstellen TimeStampable und Persistent siehe Abschnitt 3 2 3 1 stehen bei der Kodo API nicht zur Verf gung Da Kodo das kaskadierende L schen unterst tzt m ssen keine weiteren Schnittstellen implementiert werden Die Klassen BasePrimary und BaseSecondary verwenden nun den primitiven Datentyp int als Datentyp f r die ObjektID intValueXx da bei Kodo ein eigener Schl ssel bei Verwendung des Datentyp HashMap angegeben werden kann Somit entf llt dass der Schl ssel der HashMap den gleichen Datentyp wie auch die ObjektID der Klasse verwenden muss Der Datentyp Properties wird direkt durch die JDO Implementierung unterst tzt daher werden die Hilfsklassen Property und PropertyHelper des Castor Prototyp nicht ben tigt Da das eigene Identit tenkonzept verwendet wurde wurden die zugeh rigen Primary Key Klassen vo
133. n JAR Files vor die alle in den CLASSPATH aufgenommen werden m ssen Der CLASSPATH muss folgende JAR Files beinhalten hibernate HOME c hibernate 1 2 lib hibernate HOME c3p0 jar hibernateHOME cglib jar hibernateHOME commons collections jar hibernateHOME commons dbcp jar hibernateHOME commons lang jar hibernateHOME commons logging jar hibernateHOME commons pool jar hibernateHOME j2ee jar hibernate HOME jdom jar hibernateHOME junit jar hibernate HOME odmg jar hibernateHOME xalan jar hibernateHOME xerces jar hibernate HOME xml apis jar hibernateHOME hibernate jar c hibernate JDBC mysal connector java 3 0 jar Connector J V3 0 3 Auch die Konfigurationsdateien nibernate properties und prototype hbm xml m ssen in den CLASSPATH aufgenommen werden 3 2 2 4 2 Systemvoraussetzungen Hardware Die Tests wurden auf dem im Abschnitt 3 1 genannten Rechner ausgef hrt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 577 139 3 2 3lmplementierung Castor Im folgendem werden die wichtigsten Klassen und Schnittstellen der Castor API kurz vorgestellt 3 2 3 1Wichtige Klassen und Schnittstellen der Castor API JDO Durch die Methode setDatabaseName String name wird der Applikation die verwendete relationale Datenbank bekanntgegeben sowie die entsprechenden Datenbankkonfigurat
134. n Werte aus dem Speicher entfernt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 64 139 javax jdo option RetainValues false true nach rollback werden die Werte wieder auf den urspr nglichen Wert gesetzt javax jdo option RestoreValues true true Daten k nnen ausserhalb einer Transaktion gelesen werden javax jdo option NontransactionalRead false true Daten k nnen ausserhalb einer Transaktion geschrieben werden javax jdo option NontransactionalWrite false Datenbank URL unter Verwendung von MySQL javax jdo option ConnectionURL jdbc mysal llocalhost kodoDiplom Datenbank URL unter Verwendung von HSQL im Server Modus javax jdo option ConnectionURL jdbc hsqldb hsqI localhost Datenbank URL unter Verwendung von HSQL im embedded Modus javax jdo option ConnectionURL jdbc hsqlidb hsqlkodo Benutzername f r die Datenbank javax jdo option ConnectionUserName diplom Password der Datenbank javax jdo option ConnectionPassword diplom JDBC Datenbanktreiber Connector J f r MySQL javax jdo option ConnectionDriverName com mysaql jdbc Driver JDBC Datenbanktreiber f r HSQL javax jdo option ConnectionDriverName org hsqldb jdbcDriver default 30 1 schaltet lazy loading aus com solarmetric kodo DefaultFetchThreshold 1 default 10 wieviele Zeilen vorgefetcht werden com solarmetric kodo DefaultFetchBatch
135. n ausgewertet um bestimmte Mapping Informationen zu erhalten z B wird festgelegt welches Attribut einer Klasse welchem Feld einer Tabelle entspricht und welche Beziehungen zwischen den Klassen und Tabellen besteht Dazu steht das Tag lt extension gt f r anbieterspezifische Angaben zur Verf gung Die Beschreibung des Persistenz Deskriptors erfolgt in Form eines XML Dokumentes welches mit einer Grammatik DTD File bereinstimmen muss siehe Abschnitt 6 14 Der erstellte Persistenz Deskriptor muss auf dieses DTD File jdo dtd verweisen lt xml version 1 0 encoding UTF 8 gt lt IDOCTYPE jdo SYSTEM file entsprechende Pfad Angabe gt lt jdo gt lt jdo gt Nach Spezifikation muss der Persistenz Deskriptor folgende Namenskonvention erfullen Klassen oder Package Name jdo Eine detaillierte Erl uterung der einzelnen Tags ist in Russ02 zu finden 2 2 4Objekt Modell Dieser Abschnitt beschreibt die unterst tzen Typen und die Konfiguration der Objekte von JDO des weiteren wie diese durch den PersistenceManager verwaltet werden untereinander interagieren und die Zust nde der JDO Instanzen 2 2 4 1Transparente Persistenz W hrend des Ablaufes einer Applikation beinhaltet die Java Virtual Machine transiente Objekte Manche von diesen sind normale nicht peristence capable Objekte andere sind Instanzen von oder referenzieren auf persistence capable Klassen Jeder PersistenceManager verwaltet einen
136. n in den Zustand new sobald dieses w hrend der aktuellen und noch nicht abgeschlossenen Transaktion durch Aufruf der Methode makePersistent gespeichert wird Der PersistenceManager weist dieser Instanz dann automatisch eine JDO Identit t zu Persistent New Deleted Der Zustand new deleted wird erreicht wenn ein ein transientes Objekt w hrend einer Transaktion zum Zustand persistent new wechselt und anschlie end diesem Objekt in der aktuellen und noch nicht beendeten Transaktion durch Aufruf der Methode deletePersistence der Zustand persistent new entzogen wird Hollow Der Zustand hollow sagt aus dass ein Objekt mit der Datenbank in Beziehung steht referenziert ist Dies ist eine Art Zwischenzustand der erreicht wird wenn u a eine Instanz ihre JDO Identit t geladen hat d h die als Primary Key definierten Attributwerte aber noch nicht die restlichen persistenten Werte Dieser Zustand garantiert die Einzigartigkeit von Instanzen zwischen Transaktionen Persistent Clean Eine Instanz befindet sich in diesem Zustand wenn in der aktuellen Transaktion die Werte aus der Datenbank geladen aber nicht ge ndert wurden Dieser Zustand definiert einen konsistenten Zustand da die Daten im repr sentierenden Objekt identisch mit denen in der Datenbank sind Persistent Dirty Dieser Zustand wird erreicht wenn sich die Attributwerte des Objektes in der aktuellen Transaktion ge ndert haben d h es liegt ein inkonsistender Zus
137. n lit teri a 41 ade CA TOR JOC see ee 42 2 4 4 Solarmetric Kodo JDO VAN ee ee 42 24 5 Upele Udo nee 42 2 5 Kriterien f r die Evaluierung ucccccanaananananannannunnnnnnnnnunnnnnnunnnnnnannnn 2 5 1 Integrationsaufwand f r bereits existierende Klassen 43 2 5 2 Performance und Ressourcenverbrauch eseseesseeeneennsennennnneene 43 TDAI VE Ne eaaa 43 2 54 2 AssSoziaone siaina lees edana eae ee a aa ai 43 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 71139 TS NIE ee een 5 4 1 1 Automatisches Erstellen der zugeh rigen Tabellen 76 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 8 139 4 1 3 6 Performance und Ressourcenverbrauch intelliBO V3 2 82 AAE 15 14 1 a Rm AENEA S TO penn ROR HSU SEPT 83 4 15 PO Res nee nennen ensure 84 4 2 8 Graphische Entwicklungsumgebung usunnaonaaannnnnonnnnnnnannannennn 93 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 9 139 4 2 9 Abfragesprachefn u aunaannanunannnannnannnnannmannnannnannnnnnnmannnnnnann 94 4 2 10 Unterst tzte Systemumgebung znzuuuuunn
138. n sollen kann dies auch durch JDBC Anweisungen im Programmcode erfolgen Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 76 139 verschiedenen Primary Objekten durchgef hrt Der Mittelwert dieser Ergebnisse ist in folgenden Tabellen zu finden Serialisierungsdauer in jeweils n Dateien Anzahl Primary Objekte und Dateien ae 0 y RR Dauer ms 100 2660 15200 1000 34060 Deserialisierungsdauer aus den n Dateien in eine ArrayList Anzahl Dateien 100 100 Prim ary Objekte in aus 100 Dateien 500 Prim ary Objekte in aus 500 Dateien 011000 Primary Objekte in aus 1000 Dateien Serialisisierung Deserialisierung Speicherverbrauch MB Sek MB Abbildung 13 Diagramm Serialisierung Deserialisierung und Speicherverbrauch Die verschiedenen Tests wurden zu Beginn mit der intelliBO Version 3 1 und dem MM SQL Datenbanktreiber 2 0 4 durchgef hrt Dieser Datenbanktreiber wurde von intelliBO als offiziell zu verwendender Datenbanktreiber fur MySQL deklariert Die Vorabversion 3 2 wurde auch mit diesem und interessehalber noch mit dem offiziellen JDBC Treiber von MySQL Connector J V3 0 durchgef hrt Durch Nutzung dieses Treibers konnten keine Unterschiede in den Datenbankeintr gen bezogen auf die verwendeten Datentypen des Prototyps festgestellt werden Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter
139. name hashMapS gt lt map key type java lang Integer value type kododiplom AnotherClass gt lt extension vendor name kodo key value dependent value true gt lt extension vendor name kodo key key dependent value true gt lt extension vendor name kodo key inverse value secMap gt lt field gt lt field name arrayListS gt lt collection element type kododiplom AnotherClass gt lt extension vendor name kodo key inverse value secList gt lt extension vendor name kodo key element dependent value true gt lt field gt lt class gt lt class identity type application name SecondaryFirst objectid class SecondaryFirstKey requires extent true gt lt extension vendor name kodo key table value tsecondaryfirst gt lt extension vendor name kodo key lock column value none gt lt extension vendor name kodo key class column value none gt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 133 139 lt field name intValueSF primary key true gt lt class gt lt class identity type application name SecondarySecond objectid class SecondarySecondKey requires extent true gt lt extension vendor name kodo key table value tsecondarysecond gt lt extension vendor name kodo key lock column value none gt lt extension vendor name kodo key class column valu
140. ndaryFirst Objekten steht jeweils in Klammern 4 5 Connector J V3 0 40 25 E10 Primary Objekte E20Primary Objekte 050 Primary Objekte 01100 Prim ary Objekte Connector J V3 0 Sek Rollback A Zeit in ms in der die nderung durchgef hrt wurde B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Fazit Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 90 139 Durch Aufruf der Methode setString stringValue wurde allen im Speicher befindlichen SecondaryFirst Objekten ein neuer Bezeichner zugewiesen Dadurch liegt ein inkonsistenter Zustand zwischen den Werten in den Objekten und der Datenbank vor Wird nun die Transaktion durch Aufruf der Methode commit der Schnittstelle Transaction beendet so werden die ge nderten Werte der Objekte im Speicher mit der Datenbank synchronisiert Es ist eine lineare Laufzeit zu erkennen 4 2 4 5Speicherverbrauch Es folgt eine Auflistung des Speicherverbrauchs den der Testfall obige Operationen ben tigt Die Angaben wurden im Taskmanager abgelesen E10 Primary E 20 Primary 050 Primary 01100 Primary Speicherv erbrauch MB 4 2 4 6Performance unter Verwendung der Datenbank HSQL Obige Datenbank Operationen wurden auch mit der Datenbank HSQL jeweils im embedded und Server Modus durchgef hrt 1200 1000 800 600 400 200 Zeit Sek
141. ndarySecond gt lt extension vendor name kodo key element dependent value true gt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 132 139 lt extension vendor name kodo key inverse value bs gt lt field gt lt field name secondaryFirst gt lt extension key dependent value true vendor name kodo gt lt field gt lt class gt lt class identity type application name Primary persistence capable superclass BasePrimary requires extent true gt lt extension vendor name kodo key table value tprimary gt lt extension vendor name kodo key lock column value none gt lt extension vendor name kodo key class column value none gt lt field name hashMapP gt lt map key type java lang Integer value type kododiplom Secondary gt lt extension vendor name kodo key value dependent value true gt lt extension vendor name kodo key key dependent value true gt lt extension vendor name kodo key inverse value primMap gt lt field gt lt field name arrayListP gt lt collection element type kododiplom Secondary gt lt extension vendor name kodo key inverse value primList gt lt extension vendor name kodo key element dependent value true gt lt field gt lt field name propertiesP persistence modifier persistent gt lt map key type java lang String value ty
142. ngValuePS type string gt lt sql name stringValuePS type varchar gt lt field gt lt field name primaryFirst type castor PrimaryFirst gt lt sql name primaryFirst_ID gt lt field gt lt field name bp type castor BasePrimary gt lt sql name basePrimary_ID gt lt field gt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 128 139 lt class gt lt class name castor PrimaryFirst identity intValuePF gt lt map to table tprimaryfirst gt lt cache type type unlimited gt lt field name intValuePF type integer required true gt lt sql name intValuePF type integer gt lt field gt lt field name boolValuePF type boolean gt lt sql name boolValuePF type bit gt lt field gt lt field name stringValuePF type string gt lt sql name stringValuePF type varchar gt lt field gt lt class gt lt class name castor BasePrimary identity intValueBP gt lt map to table tbaseprimary gt lt cache type type unlimited gt lt field name intValueBP type integer required true gt lt sql name intValueBP type integer gt lt field gt lt field name stringValueBP type string gt lt sql name stringValueBP type varchar gt lt field gt lt field name boolValueBP type boolean gt lt sql name boolValueBP type bit gt lt field gt lt fie
143. nimmt das Mapping zwischen den in der Klasse Primary befindlichen java util Properties und der Hilfsklasse Property Die Funktionsweise der beiden Hilfsklassen wird in der beiliegenden Java Doc erl utert 4 3 3 9Komposition Durch Implementierung der Schnittstelle Persistent wird ein Callback Mechanismus zur Verf gung gestellt durch den das kaskadierende L schen manuell implementiert werden kann Diese Vorgehensweise wird im Abschnitt 3 2 3 1 erlautert 4 3 3 10Abfragesprache Castor definiert eine eigene Abfragesprache OQL um auf Objekte in der Datenbank zu zugreifen Es ist eine Mischung zwischen SQL und einer objektorientierten Syntax Es folgt ein Beispiel bei dem alle Primary Objekte aus der Datenbank gelesen werden deren Attributwert boolValueP true ist Query query Query db getoOQLQuery SELECT p FROM castor Primary p WHERE p boolValueP true QueryResult result query execute while result hasMore Primary prim Primary result next Der Methode getOQLQuery wird einen String bergeben der die Anfrage an die Datenbank darstellt Es wird direkt mit den Objekten gearbeitet und durch die Punktnotation auf die zugeh rigen Attribute der Objekte zugegriffen Als Ergebnis wird Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 99 139 eine Enumeration zur ckgeliefert die mit einer einfa
144. nommen werden so dass eigene Spaltenbezeichner definiert werden k nnen Bei Verwendung von Datentypen die die Schnittstelle Map implementieren werden jeweils eigene Tabellen erstellt die die Schl ssel zugeh rigen Werte und den Fremdschl ssel besitzen erstellt Das automatisch erstellte SQL Skript wies keine Fehler auf und wurde verwendet 4 4 2Automatische Generierung des Persistenz Deskriptors Durch das Hilfswerkzeug JDOMetaDataTool werden durch die Reflection API die zu den Java Klassen geh renden Persistenz Deskriptoren erstellt Dies geschieht beispielsweise f r die Klasse AnotherClass wie folgt java com solarmetric rd kodo meta JDOMetaDataTool properties kododiplom kodo properties file anotherClass jdo kododiplom AnotherClass java Dadurch wird das Grundger st des Persistenz Deskriptors automatisch erzeugt Dies wurde nicht weiter untersucht da der Persistenz Deskriptor manuell erstellt wurde 1 Siehe Abschnitt 3 2 4 2 Siehe Russ02 S 125 dort werden die Regeln die ein automatisches Mapping bestimmter Datentypen die automatisch durch die JDO Implementierung durchgef hrt werden definiert Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 100 139 4 4 3Weitere Hilfsprogramme Wird das eigene Identit tenkonzept verwendet so k nnen durch das Hilfsprogramm ApplicationIdTool die zu den speichernden Klassen geh renden PrimaryK
145. nsaktionskonzepte von JDO werden in Abschnitt 2 2 5 n her erl utert Die JDO Implementierung bietet hierzu ein Cache Mechanismus an Wird ein Objekt erstmalig in eine Transaktion einbezogen so werden dessen persistenten Attributwerte durch die JDO Implementierung zwischengespeichert so das der Ausgangszustand des Objektes gesichert ist Nun kann mit diesem Objekt gearbeitet bzw Ver nderungen an diesem durchgef hrt werden Nach einem erfolgreichem commit Vorgang werden diese gecachten Werte verworfen Treten w hrend der Transaktion Fehler auf so wird eine Ausnahme Exception geworfen und durch einen Rollback Vorgang wird der alte Zustand des Objektes durch Auslesen der zwischengespeicherten Werte wiederhergestellt nicht transaktional Eine nicht transaktionale Verwaltung sagt aus das die Zust nde der Objekte nicht in dem Cache der JDO Implementierung zwischengespeichert werden und somit nach nderungen nicht wiederhergestellt werden k nnen Typischerweise werden transiente Objekte nicht transaktional und persistente Objekte transaktional durch JDO verwaltet Diese beiden Arten der Verwaltung muss von jedem JDO Anbieter implementiert werden so dass eine standard konforme Implementierung vorliegt Zwei weitere Arten der Verwaltung schreibt die Spezifikation als optionale Eigenschaft von JDO aus transient transaktional und persistent nicht transaktional Detailiertere Informationen ber diese beiden Verwaltungsarten sind in der
146. nschr nken Filter stellen einen Java basierten boolschen Ausdruck dar Dies wird weiter unten anhand eines Beispieles erl utert Als Ergebnis liefert die Query eine Collection von Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 36 139 Instanzen zur ck f r die der Filter zu true ausgewertet wurde Weiterhin besteht die M glichkeit Variablen an die Query zu bergeben welche erst zur Laufzeit ausgewertet werden Folgendes Beispiel l dt alle B cher inklusive Unterklassen aus der Datenbank und stellt sie an der Standardausgabe dar Die Abfrage ist sehr einfach da sie keine Filter Variablen oder Ordnungsreihenfolgen beinhaltet trans begin Extent bookExt pManager getExtent Book class true Query query pManager newQuery bookExt Collection coll Collection query execute Iterator iter coll iterator System out println Alle B cher aus der DB while iter hasNext Object book iter next System out println book query close coll trans commit Es folgt ein Beispiel unter Verwendung eines Filters und Ausnutzung der Ordnungsreihenfolge Es werden alle B cher mit dem Titel Java ist auch eine Insel aus der Datenbank gelesen Die Ausgabe erfolgt in aufsteigender Sortierung nach dem Namen und absteigender Sortierung nach der Buchld trans begin Extent bookExt
147. ntValueSF type innodb create table tsecondary intValueBS int not null doubleValueBS double stringValueBS varchar 50 secondaryfirst_intValueSF int boolValueS char 1 stringValueS varchar 50 primlist_intValueBP int primmap_intValueBP int primary key intValueBS type innodb alter table tsecondary add index secondaryfirst_intValueSF alter table tsecondary add index primmap_intValueBP alter table tsecondary add index primlist_intValuebP create table tsecondary_hashmaps lidofk_intValueBS int not null lidokey int lidovalue_intValueAC int primary key lidofk_intValueBS lidokey type innodb alter table tsecondary_hashmaps add index lidofk_intValueBS alter table tsecondary_hashmaps add index lidokey create table tprimary intValueBP int not null boolValueBP char 1 create table tprimaryfirst intValuePF int not null boolValuePF char 1 stringValuePF varchar 50 primary key intValuePF type innodb create table tprimarysecond intValuePS int not null stringValuePS varchar 50 primaryfirst_intValuePF int bp_intValueBP int primary key intValuePS type innodb alter table tprimarysecond add index primaryfirst_intValuePF alter table tprimarysecond add index bp_intValueBP create table tanotherclass intValueAC int not null stringValueAC varchar 50 secondarysecond_intValueSS int seclist_intValueBS int secmap_intValueBS int primary key
148. nur eine Datenstruktur Diese besteht aus einer Tabelle mit Zeilen und Spalten die Daten bestimmter Typen enthalten Die zu speichernden Objekte werden in ihre Attribute zerlegt und durch SQL Anweisungen in einer relationalen Datenbank abgespeichert Die urspr nglichen Objekte erh lt man indem man ein neues Objekt erzeugt und diesem die aus der Datenbank ausgelesenen Attributwerte zuweist Vorteile Transaktionskonzept wird von den meisten relationalen Datenbanksystemen unterst tzt Bei normalisierten Modellen ist Datenkonsistenz garantiert da nderungen nur an einer Stelle vorgenommen werden effiziente Verwaltung gro en Mengen einfach strukturierter Daten es existieren APIs wie z B JDBC und SQLJ die einen standardisierten Zugriff auf relationale Datenbanksysteme von unterschiedlichen Herstellern erlauben Nachteile Die Persistenzlogik JDBC ist fest im Programmcode verankert keine Transparenz Der Anwender muss die Abfragesprache SQL erlernen 1 Structured Query Language ist eine nicht prozedurale mengenorientierte und plattformunabh ngige Sprache durch die beschrieben wird wie Daten abzurufen zu l schen oder einzuf gen sind Normalisierung basierend auf Normalformen dient der Vorgang der Normalisierung zur Verfeinerung eines relationalen Schemas um Mehrdeutigkeiten und Redundanzen zu entfernen 2 Java Database Connectivity eine herstellerneutrale Datenbankschnittstelle ber die eine Verbindung
149. nz Deskriptor In Abschnitt 6 12 ist der erstellte Persistenz Deskriptor 1idodiplom jdo zu finden Es folgt eine Erlauterung von Lido spezifischen Elementen lt extension vendor name libelis key sql name value tanotherclass gt lt field name intValueAC primary key true gt lt field name secondarySecond gt lt field gt Eine 1 1 Beziehung wird automatisch durch Lido erkannt Es muss lediglich der Attributbezeichner durch den Paramter name des Elementes lt field gt eingef hrt werden lt field name arrayListBP gt lt collection element type lidodiplom PrimarySecond gt lt extension vendor name libelis key collection type value java util ArrayList gt lt extension vendor name libelis key sql reverse value javaField bp gt lt field gt Eine ArrayList diese implementiert die Schnittstelle Collection wird Lido durch das Element lt collection gt bekannt gemacht Durch den Parameter element type wird der Datentyp der Elemente der Liste festgelegt Der Parameter vendor name libelis des Elementes lt extension gt leitet die Lido spezifischen Abbildungsregeln durch Schl ssel key Wert value Paare ein Der Schl ssel collection type spezifiziert die Klasse die die Schnittstelle Collection implementiert Lido unterst tzt bidirektionale Beziehungen Erkl rung siehe Abschnitt 3 2 4 2 zwischen Klassen Dies wird durch den Schl ssel sql reverse eingef hrt Der zugeh rige Wert dr c
150. o AnotherClass BintvalueAc int BBstringValueAC String Banzahl int 0 BAnotherClass Abbildung 6 Klassendiagramm des Prototyp Obiges Klassendiagramm stellt die Grundlage f r die Evaluierung von JDO dar Es wird untersucht ob und wie die verschiedenen Datentypen Vererbung und Assoziationen von den jeweiligen JDO Implementierungen unterst tzt bzw abgebildet werden Die Klasse Primary stellt das Hauptobjekt dar welches persistent abgelegt werden soll Es wurden absichtlich einfache Namen f r die Klassen und die jeweiligen Attribute gew hlt Zu jeder Klasse des Modells wurde noch eine zugeh rige PrimaryKey Klasse Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 45 139 siehe Abschnitt 2 2 1 4 erstellt weil die Identit t der Objekte von der Applikation verwaltet werden soll Dazu wurde in jeder Klasse ein Klassenattribut anzahl definiert was bei jeder Objekterzeugung im Konstruktoraufruf inkrementiert wird und dem jeweiligen int Attribut intValueXx zugewiesen wird In den Klassen wurden primitive Attribute Strings Properties ArrayListen und HashMaps verwendet Die Datentypen ArrayList und HashMap stellen 1 N Assoziationen dar d h ein Objekt einer Klasse verwaltet bis zu n Objekte einer anderen Klasse Diese Beziehung besteht als ArrayList der Dimension 10 zwischen Objekten der Klassen BasePrimary und PrimarySecond
151. o Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 71 139 3 2 5 1Entity Relationship Modell tprimary_propertiesp tprimarysecond tprimaryfirst PK FK1 lidofk_intValueBP 0 N PK intValuePS i Bie rare intValueFrs 1 0 1 PK intValuePF stringValuePS boolValuePF lidovalue primaryfirst_intValuePF stringValuePF ON bp_intValueBP tprimary_arraylistBP PK lidofk_intValueBP lidovalue_intValuePS er lidopos PK intValueSF boolValueSF stringValueSF IE 0 1 Be en tprimary tsecondary_arraylistbs 1 PK intValueBP PK lidofk_intValueBS boolValueBP lidovalue_intValueSS 1 stringValueBP lidopos boolValueP stringValueP 1 0 N tsecondarysecond tprimary_hashmapp tprimary_arraylistp PK intValueSS PK lidofk_intValueBP PE iden int alueBe i PK lidoke stringValueSS Hdokey lidovalue_intValueBS bs_intValueBS lidovalue_intValueBS lidopos 0 1 0 N 1 tsecondary tanotherclass PK intValueBS 1 PK intValueAC o N doubleValueBS 1 stringValueAC stringValueBS secondarysecond_intValueSS secondaryfirst_intValueSF seclist_intValueBS boolValueS secmap_intValueBS stringValueS 1 primlist_intValueBP 0 N 0 N primmap_intValueBP 1
152. oPostLoad wird aufgerufen sobald die persistenten Attributwerte einer Instanz aus der Datenbank geladen wurden Dies wird meist verwendet um die nicht persistenten Werte der Instanz zu initialisieren e void jdoPreStore wird aufgerufen sobald die persistenten Werte einer persistenten Instanz mit der Datenbank synchronisiert werden e void jdoPreClear wird aufgerufen sobald eine Instanz in den Zustand hollow wechselt e void jdoPreDelete wird aufgerufen sobald eine Instanz in den Zustand persistent deleted oder persistent new deleted wechselt Dies wird verwendet um bestimmte L sch bzw Cascade Regeln zu beachten 2 2 5Transaktionen unter JDO JDO unterst tzt folgende Transaktion Strategien 2 2 5 1pessimistische Transaktionen JDO Standard Meist verwendet bei kurzlebigen Transaktionen Vom Beginn des ersten Datenzugriffs bis zum endg ltigen commit liegt eine aktive Datenbank Transaktion vor Wird versucht auf die Daten einer Transaktion lesend oder schreibend zuzugreifen werden diese solange blockiert bis die diese Daten benutzende Transaktion diese wieder freigibt M gliche Verst e werden erkannt bevor sie auftreten und die ausl senden Datenzugriffe werden verz gert bis sie ohne Verletzung der Serialisierbarkeit durchgef hrt werden k nnen Baum94 Durch die Methode setOptimistic false wird das pessimistische Transaktionskonzept aktiviert 2 2 5 2optimistische Transaktionen optionale Eigens
153. ond tprimaryfirst PK intValuePS B arrayListBP 1 0 1 PK intValuePF basePrimary_ID E Tl stringValuePS stringValuePF primaryFirst_ID boolValuePF osn 1 p tbaseprimary PK intValueBP tsecondaryfirst tbasesecondary stringValueBP z pK intValueBs booValueBP PK intValueSF 0 1 1 INVaurBS 1 stringValueSF stringValueBS boolValueSF doubleValueBS secondaryFirst_ID 1 1 1 tpropertiesP tprimary PK intValueBP 1 1 arrayListBS primary_ID_prop boolValueP keyp stringValueP valuep Eh tsecondarysecond PK intValueSS stringValueSS baseSecondary_ID posn 0 1 1 tanotherclass Bonsai 0 N PK intValueAc arrayListS Z re PK intValueBS stringValueAC stringValueS secondarySecond_ID secondary_ID a 0 N secondary_ID_list pee posn hashMapSKey primary_ID_list hashMapPKey Abbildung 9 Entity Relationship Modell der Datenbank hibernate Im obigen Modell sind die Prim rschl ssel fett unterstrichen und die Fremdschl ssel fett dargestellt Es ist zu erkennen dass die Properties der Klasse Primary in einer eigenen Tabelle abgelegt werden Dies hat gegen ber der Verwendung eines BLOBs den Vorteil dass nun gezielt nach einem Schl ssel gesucht werden kann Des weiteren wird der zur HashMap geh rende Schl ssel auch in den Tabellen der entsprechenden Klassen aufgelistet Die Abbildungsregeln von Hibernate erzwingen dass die Tabelle der Klasse die eine List als Attribut beinhaltet eine
154. onentenorientierung wird ein hoher Grad an Widerverwendbarkeit erreicht und der Einsatz von Applikationsservern bietet dem Entwickler transparente Mechanismen f r z B Datenbankzugriff Transaktionskonzept usw Dieser Abschnitt beschreibt nicht die EJB Spezifikation sondern richtet sein Augenmerk darauf wie der Einsatz von Komponenten f r die Persistenz in Java in Frage kommt Ein Mechanismus daf r nennt sich container managed persistence CMP Durch Implementierung von Schnittstellen wird aus einer Klasse eine Komponente Entity Bean und eine XML Beschreibungsdatei Deskriptor definiert die Attributwerte der Klasse die persistent abgespeichert werden sollen Dadurch erh lt man eine Komponente die in einen Applikationsserver eingef gt werden kann wodurch dann automatisch unter anderem die Funktionalit t f r die Persistenz bereitgestellt wird Vorteile J2EE ist ein Standard d h die Interoperabilit t zwischen verschiedenen Herstellern der Applikationsserver ist garantiert Entwickler muss sich nicht um Datenbankzugriffe und Transaktionen k mmern dieser werden automatisch vom Container zur Verf gung gestellt 1 Java 2 Enterprise Edition ist eine Erweiterung der Java 2 Standard Edition zur Entwicklung und zum Betrieb unternehmensspezifischer Applikationen Applikationsserver dient zur Verwaltung und Betrieb von Applikationen bzw Teilapplikationen und stellt anderen Teilnehmern im Netzwerk die auf ihm gespeicherten
155. or Secondary gt lt sql name secondary_ID_list gt lt field gt lt class gt lt class name castor SecondarySecond identity intValueSS depends BaseSecondary gt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 129 139 lt map to table tsecondarysecond gt lt cache type type unlimited gt lt field name intValueSS type integer required true gt lt sql name intValueSS type integer gt lt field gt lt field name stringValueSS type string gt lt sql name stringValueSS type varchar gt lt field gt lt field name bs type castor BaseSecondary gt lt sql name baseSecondary_ID gt lt field gt lt class gt lt class name castor SecondaryFirst identity intValueSF gt lt map to table tsecondaryfirst gt lt cache type type unlimited gt lt field name intValueSF type integer required true gt lt sql name intValueSF type integer gt lt field gt lt field name stringValueSF type string gt lt sql name stringValueSF type varchar gt lt field gt lt field name boolValueSF type boolean gt lt sql name boolValueSF type bit gt lt field gt lt class gt lt class name castor Primary extends castor BasePrimary identity intValueBP gt lt map to table tprimary gt lt cache type type unlimited gt lt field name intValueBP type integer
156. orgehensweise wird im Abschnitt 4 1 5 erl utert 3 2 1 3Installation Benutzeranleitung 3 2 1 3 1 Systemvoraussetzungen Software 1 MySQL muss installiert eine Datenbank diplom die zugeh rigen Tabellen angelegt worden sein Anleitung siehe Abschnitt 6 4 und der verwendete JDBC Treiber in den CLASSPATH aufgenommen werden 2 Signsoft intelliBO muss installiert eine g ltige Lizenz f r die Verwendung von intelliBO vorliegen und die zugeh rigen JAR Files in den CLASSPATH aufgenommen werden Der CLASSPATH muss folgende JAR Files beinhalten intellilHOME c signsoft intelliBO3 redist intelllHOME dbsupport_mysal jar angepasster Datenbanktreiber intelllHOME ibocore jar Signsoft intelliBO Kern intellilHOME ibometa jar Metadata Bibliothek intelllHOME ssjava jar Signsoft Java Grundbibliothek intellilHOME connector jar Connector Architektur intelllHOME ssjaxb jar JAXB Runtime XML Data Binding intelllHOME jdbc2_Ostext jar JDBC 2 0 Erweiterungen intellilHOME jdo jar JDO Spezifikation intellilHOME jta jar Transaktionssteuerung c prototype model Lizenz intelliBO Lizenzdatei je nachdem welchen JDBC Treiber man verwenden m chte c prototype JDBC mm mysaql 2 0 4 bin jar MM SQL Treiber V2 0 4 c prototype JDBC mysal connector java 3 0 jar Connector J V3 0 3 Die Systemvariable PATH muss jeweils das bin Verzeichnis des installierten JDK und von Signsoft intelliBO beinhalten Di
157. orteil von JDO Damit ist gemeint dass wenn ein persistentes Objekt ein oder mehrere transiente Objekte referenziert diese transienten Objekte automatisch d h ohne expliziten Aufruf der Methode makePersistence den Zustand persistent erhalten und somit als 1 Dies ist wichtig da durch expliziten Aufruf der Methode makePersistence der Zustand dieses Objektes von transient nach persistent wechseln kann Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 22 139 second class Objekte mit abgespeichert werden Ein transientes Objekt wird durch den Garbage Collector gel scht sobald die JVM beendet wird persistente Objekte Die Erzeugung von persistenten Objekten geschieht auch durch Aufruf des new Operators Da diese Objekte die Schnittstelle PersistenceCapable implementieren wei man dass sie persistente Daten aus der Datenbank repr sentieren Diese Objekte sind an einen PersistenceManager gebunden daher werden nderungen an diesen automatisch innerhalb von einer Transaktion mit der Datenbank synchronisiert Nach Beendigung der JVM bleibt der Zustand dieser Objekte erhalten da sie in der Datenbank abgespeichert sind und somit jederzeit wiederhergestellt werden k nnen transaktional Der Begriff transaktional sagt aus dass Objekte innerhalb einer Transaktion verwaltet werden Jede JDO Implementierung unterst tzt Transaktionen Die Tra
158. p der zugeh rigen Werte Zur Zeit kann bei intelliBO als Datentyp f r den Schl ssel der Map nur der gleiche Datentyp wie auch der f r die ObjektID angegeben werden Dieses Problem wird im Abschnitt 4 1 5 n her erl utert Der Wert des Schl ssels result type definiert die verwendete Implementierung der Schnittstelle Map und der Wert des Schl ssel element type definiert den Datentyp der in dieser Map abgelegten Objekte Durch Setzen des Schl ssels cascade delete auf true wird erreicht dass wenn das Primary Objekt gel scht wird auch die Elemente in der HashMap mitgel scht werden lt field name arrayListP gt lt collection element type prototype model Secondary gt lt extension key jdbc vendor name ssibo gt lt extension key mapping value one to many vendor name ssibo gt lt extension key result type value java util ArrayList vendor name ssibo gt lt extension key element type value prototype model Secondary vendor name ssibo gt lt extension key cascade delete value true vendor name ssibo gt lt extension key reference vendor name ssibo gt lt extension key src table value TPRIMARY vendor name ssibo gt lt extension key src field value FINTVALUEBP vendor name ssibo gt lt extension key dst table value TSECONDARY vendor name ssibo gt lt extension key dst field value FTPRIMARY_ARRAY vendor name ssibo gt lt extension gt lt extension gt lt extension gt
159. pe java lang String gt lt extension vendor name kodo key value dependent value true gt lt extension vendor name kodo key key dependent value true gt lt field gt lt class gt lt class identity type application name PrimarySecond objectid class PrimarySecondKey requires extent true gt lt extension vendor name kodo key table value tprimarysecond gt lt extension vendor name kodo key lock column value none gt lt extension vendor name kodo key class column value none gt lt field name intValuePS primary key true gt lt field name primaryFirst gt lt extension vendor name kodo key dependent value true gt lt field gt lt class gt lt class identity type application name PrimaryFirst objectid class PrimaryFirstKey requires extent true gt lt extension vendor name kodo key table value tprimaryfirst gt lt extension vendor name kodo key lock column value none gt lt extension vendor name kodo key class column value none gt lt field name intValuePF primary key true gt lt class gt lt class identity type application name Secondary persistence capable superclass BaseSecondary requires extent true gt lt extension vendor name kodo key table value tsecondary gt lt extension vendor name kodo key lock column value none gt lt extension vendor name kodo key class column value none gt lt field
160. pe value java util ArrayList gt lt extension vendor name libelis key sql reverse value javaField primList gt lt field gt lt field name propertiesP persistence modifier persistent gt lt map key type java lang String value type java lang String gt lt field gt lt class gt lt class identity type application name PrimarySecond objectid class lidodiplom PrimarySecondKey requires extent true gt lt extension vendor name libelis key sql name value tprimarysecond gt lt field name intValuePS primary key true gt lt field name primaryFirst gt lt field gt lt class gt lt class identity type application name PrimaryFirst objectid class lidodiplom PrimaryFirstKey requires extent true gt lt extension vendor name libelis key sql name value tprimaryfirst gt lt field name intValuePF primary key true gt lt class gt lt class identity type application name Secondary persistence capable superclass lidodiplom BaseSecondary requires extent true gt lt extension vendor name libelis key sql name value tsecondary gt lt field name hashMapS gt lt map key type java lang Integer value type lidodiplom AnotherClass gt lt extension vendor name libelis key map type value java util HashMap gt lt extension vendor name libelis key sql reverse value javaField secMap gt lt field gt lt field name arrayListS gt lt collection
161. property name boolValueS column boolValueS type boolean gt lt property name stringValueS column stringValueS type string gt lt list role arrayListS table tanotherclass lazy false cascade delete gt lt key column secondary_ID_list gt lt index column posn type int gt lt one to many class hibernate AnotherClass gt lt list gt lt map role hashMapS table tanotherclass lazy false cascade delete gt lt key column secondary_ID gt lt index column hashMapSKey type int gt lt one to many class hibernate AnotherClass gt lt map gt lt joined subclass gt lt class gt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 126 139 lt class name hibernate SecondaryFirst table tsecondaryfirst gt lt id name intValueSF type int column intValueSF gt lt generator class assigned gt lt id gt lt property name stringValueSF column stringValueSF type string gt lt property name boolValueSF column boolValueSF type boolean gt lt class gt lt class name hibernate SecondarySecond table tsecondarysecond gt lt id name intValueSS type int column intValueSS gt lt generator class assigned gt lt id gt lt property name stringValueSS column stringValueSS type string gt lt class gt lt hibernate mapping gt Abbildung 21 Persistenz Deskriptor f r da
162. ption Basisklasse fur alle Datenbank spezifischen Exceptions e JDOFatalException Basisklasse f r alle fatalen Exceptions l st implizit ein Rollback der aktuellen Transaktion aus e JDOFatalUserException Basisklasse fur alle fatalen Exceptions ausgelost durch die Anwendung e JDOFatallInternalException Wird ausgel st durch interne Fehler der jeweiligen JDO Implementierung e JDOFatalDataStoreException Basisklasse fur alle fatalen Exceptions die durch die unterliegende Datenbank ausgel st werden 2 3 Selektionskriterien der JDO Implementierungen In Abschnitt 6 2 folgt eine Auflistung von kommerziellen und open source JDO Implementierungen die zu Beginn der Diplomarbeit durch eine Internetrecherche hinsichtlich diverser Kriterien naher untersucht wurden Entscheidend fur die Selektion waren Antworten auf folgende Fragen Welche Datenbanken werden von der JDO Implementierung unterst tzt Werden weitere ber die von der JDO Spezifikation als ben tigt vorgeschriebenen Datentypen unterst tzt Welche weiteren optionalen Eigenschaften von JDO wurden implementiert Liegt der untersuchten JDO Implementierung eine graphische Entwicklungsumgebung bei Liegt der JDO Implementierung ein Enhancement Werkzeug und oder ein Tabellenskript Generator bei Ist es eine kommerzielle oder open source JDO Implementierung Kann die JDO Implementierung in der eingebetteten Umgebung ausgef hrt werden d h
163. r W hrend dem Entwurf und Implementierung der Klassen braucht sich der Entwickler keine Gedanken um die Speicherung der Objekte zu machen sondern ffnet sein Projekt in der graphischen Entwicklungsumgebung und erstellt die zu den speichernden Klassen zugeh rigen Persistenz Deskriptoren In diesen werden die zu speichernden Daten anhand Abbildungsbeschreibungen d h wie welches Attribut des Objektes in den Tabellen der Datenbank abgelegt werden soll beschrieben Die Installation und Verwendung von intelliBO wird in Abschnitt 3 2 1 3 erl utert 2 4 2Hibernate V1 2 3 Hibernate ist ein in Java geschriebenes Objekt Relational Abbildungswerkzeug Es werden alle g ngigen Datenbanken darunter MySQL und HSQL unterst tzt Es stellt keine JDO Implementierung dar weist aber Parallelen zur JDO Spezifikation auf Es ist eine Open Source Implementierung und unterliegt der LGPL Lizenzform d h es darf in Open Source und kommerziellen Projekten frei verwendet werden Die aktuelle Version ist unter http hibernate bluemars net zu finden Der Implementierung liegt keine graphische Entwicklungsumgebung bei sondern Kommandozeilen orientierte Hilfswerkzeuge wie z B Persistenz Deskriptor und Tabellenskript Generatoren Gegen ber intelliBO wird nicht der Bytecode Enhancement Vorgang verwendet sondern intern nutzt Hibernate die Java Reflection API und erzeugt dynamisch SQL Statements um mit den Objekten zu arbeiten Eine Installationsanleitung ist in A
164. rden siehe Abschnitt 3 2 4 2 4 4 9Graphische Entwicklungsumgebung Kodo liegt keine eigene graphische Entwicklungsumgebung bei sondern nur Kommandozeilen basierte Hilfswerkzeuge auf die in den vorherigen Abschnitten schon eingegangen wurde Es besteht aber die M glichkeit ber Plug Ins Kodo in Produkte anderer Hersteller zu integrieren Apache Ant Sourceforge XDoclet Borland JBuilder V7 oder h her SUN ONE Studio NetBeans DIE Eclipse WebSphere Studio Integration 4 4 10Abfragesprache n Kodo nutzt als Abfragesprache JDOQL die schon im Abschnitt 2 2 6 eingef hrt wurde 4 4 11Unterst tzte Systemumgebung Kodo wird in zwei Versionen angeboten Die Standard Edition ist in der eigenstandigen Umgebung und die Enterprise Edition in der eingebetteten Umgebung lauffahig siehe Abschnitt 2 2 1 1 Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 108 139 4 5Libelis Lido V1 4 4 5 1Automatisches Erstellen der zugeh rigen Tabellen Lido liegt ein Kommandozeilen basiertes Hilfswerkzeug zur automatischen Erstellung der ben tigten Tabellen bei Gestartet wird es wie folgt java com libelis lido DefineSchema properties c lidodiplom lido metadata c lidodiplom lidodiplom jdo sql c lidodiplom lidoSQL sql Die zuvor erstellte Konfigurationsdatei Lido properties wird durch Angabe des Parameters properties ausgelesen Aus dieser we
165. rden alle datenbankspezifischen Informationen ausgelesen Duch den Parameter metadata wird der Persistenz Deskriptor und durch sql die Datei in die das SQL Skript gespeichert werden soll angegeben Werden wie im erstellten Persistenz Deskriptor lidodiplom jdo bestimmte Abbildungen weggelassen so verwendet Lido bei der Erstellung der Spaltennamen eigene Bezeichner Wird dies nicht gew nscht so muss ein explizites Mapping dieser Datentypen im Persistenz Deskriptor vorgenommen werden so dass eigene Spaltenbezeichner definiert werden k nnen Werden Datentypen verwendet die die Schnittstellen Map oder List implementieren so werden jeweils eigene Tabellen erstellt Die Tabelle die die List repr sentiert besitzt Spalten die die Fremdschl ssel und die Position der Elemente in der List speichern In der zur Map geh renden Tabelle werden die Fremdschl ssel und der Schl ssel der Map verwaltet Lediglich bei Verwendung des Tabellentyps innoDB bei MySQL muss dies manuell in das erstellte SQL Skript lidoSQL sql eingef gt werden 4 5 2Integrationsaufwand f r bereits existierende Klassen Lido nutzt einen Bytecode Enhancer Dieser wird durch Aufruf von java com libelis lido Enhance metadata c lidodiplom lidodiplom jdo gestartet In Abschnitt 4 1 2 erfolgte eine Erl uterung dieses Vorganges 4 5 3Performance und Ressourcenverbrauch Unter Verwendung der Datenbank MySQL wurden die Tests mit dem JDBC Treiber Conn03 durch
166. relationalen Datenbanken und die Einbettung in einen Application Server werden nur von der Professional Edidion 2000Euro unterst tzt Diese stellt dem Anwender auch eine graphische Entwicklungsumgebung zur Verf gung Evaluiert wurde die Community Edition die die Datenbanken MySQL und HSQL unterst tzt Der Implementierung liegen Kommandozeilen basierte Hilfswerkzeuge einen Bytecode Enhancer und ein Schemagenerierungstool bei Die Installation und Verwendung von Lido wird in Abschnitt 3 2 5 3 erl utert Mechanismus um Daten aus einer XML Datei in einer Java Applikation zu verwenden Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 41 139 2 5Kriterien f r die Evaluierung Im folgenden werden die zu Beginn festgelegten Evaluierungskriterien erl utert 2 5 1Integrationsaufwand f r bereits existierende Klassen Es soll untersucht werden ob nderungen an einem vorhandenen Objektmodell vorgenommen werden m ssen um die zu speichernden Daten der Applikation durch die ausgew hlte JDO Implementierung verwalten zu lassen D h ob vorhandene Klassen von JDO spezifischen Klassen erben oder ob bestimmte Schnittstellen implementiert werden m ssen Des weiteren soll untersucht werden ob SQL Code oder JDBC Anweisungen in den Programmcode aufgenommen werden m ssen oder ob der Datenbankzugriff durch die JDO Implementierung transparent f r den Entwickler geschieh
167. ry und update Operationen zur Verf gung In der beiliegenden Java Doc werden die erstellten Klassen und deren Methoden erl utert Weitherhin werden im Abschnitt 2 2 2 alle verwendeten Klassen und Schnittstellen der JDO Spezifikation erkl rt Vor Ausf hrung der Tests muss noch eine Datenbank names 1idoDiplom in MySQL bzw HSQL erstellt und die entsprechenden Tabellen angelegt werden Das SQL Skript zum Anlegen der Tabellen ist in Abschnitt 6 13 zu finden Im n chsten Abschnitt werden die Beziehungen der angelegten Tabellen anhand eines Entity Relationship Modells dargestellt Es folgt eine Er uterung der durch die Hilfsklasse ConfJDO ausgelesenen Konfigurationsdatei lido properties Es werden nur die Lido spezifischen Konfigurationen dargestellt tracing Fehlerprotokollierung ist per default ausgeschaltet lido trace PM CACHE DUMP QUERY SQL SQLMAPPING POOLING SQLQUERY trace ein oder ausschalten lido trace enabled false sagt aus wieviele Connections schon zu Programmstart ge ffnet sind lido minPool 0 0 kein Limit von Connections lido maxPool 0 ob soft oder weak Referenzen von Objekten im Cache gehalten werden lido cache entry type soft Cache Strategie lido cache mode local Obige Einstellungen der Konfigurationsparameter ergaben die besten Performance Ergebnisse 1 Die durch die JDO Spezifikation definierten Konfigurationen werden in Abschnitt 3 2 4 vorgestellt Diplomarbeit Al FH Trier Tim
168. s Objektmodell unter Verwendung von Hibernate 6 7 SQL Skript f r die Datenbank hibernate create table tpropertiesp create table tbasesecondary primary_ID_prop int 10 not null intValueBS int 10 not null valuep varchar 50 doubleValueBS double keyp varchar 50 not null stringValueBS varchar 50 primary key primary_ID_prop keyp secondaryFirst_ID int 10 type innoDB primary key intValueBS type innoDB alter table tpropertiesp add index primary_ID_prop add constraint fk_prop_P foreign key primary_ID_prop alter table tbasesecondary add index secondaryFirst_ID references tprimary intValueBP add constraint fk_BS_SF foreign key secondaryFirst_ID references tsecondaryfirst intValueSF create table tsecondarysecond create table tprimarysecond intValuePS int 10 not null primaryFirst_ID int 10 stringValuePS varchar 50 basePrimary_ID int 10 posn int 10 primary key intValuePS type innoDB intValueSS int 10 not null stringValueSS varchar 50 baseSecondary_ID int 10 posn int 10 primary key intValueSS type innoDB alter table tsecondarysecond add index baseSecondary_ID add constraint fk_SS_ BS foreign key baseSecondary_ID alter table tprimarysecond add index basePrimary_ID Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 127 139 add constraint fk_PS_BP foreign refer
169. s beinhalten lidoHOME c dev Lido lib lidoHOME jaas_1_0_0 jar Java Authentication API lidoHOME jdbc_2_0 stdext jar JDBC 2 0 Erweiterungen lidoHOME jdo_1_0_0 jar JDO Spezifikation lidoHOME jta_1_0_1 jar Transaktionssteuerung lidoHOME lido api jar Lido API lidoHOME lido dev jar Entwicklungstools lidoHOME lido rdb jar Unterst tzung f r RDBMS lidoHOME lido rt jar Lido Kern lidoHOME servlet jar Servlet_unterst tzung lidoHOME skinlf jar Oberfl chen Skins c dev Lido bin Lizenz Datei c lidodiplom JDBC mysql connector java 3 0 jar Connector J V3 0 bzw c lidodiplom hsqldb lib hsqldb jar Treiber fur HSQL Datenbank 3 Auch die Konfigurationsdateien Lidodiplom jdo und lido properties mussen in den CLASSPATH aufgenommen werden 3 2 5 3 2 Systemvoraussetzungen Hardware Die Tests wurden auf dem im Abschnitt 3 1 genannten Rechner ausgefuhrt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 74 139 4 Ergebnisse und Fazit 4 1 Signsoft intelliBO In diesem Abschnitt werden die Ergebnisse der Evaluierung von Signsoft intelliBO vorgestellt und auf Probleme die w hrend der Implementierung auftraten bzw Probleme von intelliBO aufgelistet Zu Beginn der Diplomarbeit stand die Version 3 1 von intelliBO als offizielle Version zur Verf gung Aufgetretene Probleme wurden mit Signsoft besprochen und wurden
170. se Vorgehensweise ist f r Castor notwendig da sonst nicht die Fremdschl ssel in der Datenbank initialisiert werden k nnen Da die untersuchten Datenbank Operationen nicht alle innerhalb einer Transaktion sondern jede Operation innerhalb einer eigenen Transaktion durchgef hrt wurde muss jede Klasse des Prototyps die Schnittstelle TimeStampable implementieren Dies ist notwendig da die sich im Speicher befindlichen Objekte nach einer zuvor erfolgreich durchgef hrten Transaktion den Zustand transient besitzen und erst durch Aufruf der Methode update der Schnittstelle Database den Zustand persistent erhalten und somit innerhalb einer weiteren Transaktion zur Verf gung stehen Die Klassen AnotherClass Primary PrimarySecond und Secondary implementieren noch die Schnittstelle Persistent da Castor nicht automatisch das kaskadierende L schen unterst tzt d h durch automatischen Aufruf der Methode jdoAfterRemove werden die von diesen Klassen aus referenzierten Objekte manuell gel scht Da die in der Klasse Primary befindlichen java util Properties nicht direkt durch Castor unterst tzt werden wurde eine Hilfsklasse Property erstellt Objekte dieser Klasse besitzen als Attribute den Schl ssel und den zugeh rigen Wert Eine weitere Hilfsklasse PropertyHelper bernimmt durch statische Methoden das entsprechende Mapping zwischen den in der Klasse Primary befindlichen java util Properties und der Klasse Property Eine detailliertere Erl ut
171. ss immer automatisch die ObjektID des in dieser Map abgelegten Objektes als Schl ssel genommen wird Dieses Problem soll in den n chsten Versionen von intelliBO behoben worden sein Des weiteren wurde eine Hilfsklasse ConfJDO erstellt die statische Methoden beinhaltet Durch diese wird die Schnittstelle PersistenzManagerFactory konfiguriert und der Anwendung ein PersistenzManager zur Verf gung gestellt Die Konfiguration bindet somit alle erzeugten PersistenzManager an die zugrunde liegende Datenbank d h es wird der Standard JDBC und der erweiterte JDBC Datenbanktreiber von Signsoft eingebunden die URL Benutzername und Password der Datenbank gesetzt und festgelegt welches Transaktionskonzept pessimistisch oder optimistisch verwendet werden soll Diese Angaben sind als Konstanten in der Klasse ConfJDO definiert Die Testklasse Test bezieht von der Hilfsklasse ConfJDo einen PersistenceManager und f hrt die untersuchten Tests durch Es wurden Methoden f r die Serialisierung Deserialisierung insert delete query und update Operationen implementiert eine Erkl rung dieser Methoden ist in der beiliegenden JavaDoc zu finden Vor Ausf hrung der Tests muss noch eine Datenbank diplom in MySQL bzw HSQL erstellt und die entsprechenden Tabellen in dieser angelegt werden siehe Abschnitte 6 4 und 6 5 Die Beziehungen der angelegten Tabellen werden im n chsten Abschnitt anhand eines Entity Relationship Modells dargestellt 1 Es
172. st oder Map der Primary Objekte zugegriffen und diese ausgegeben so beinhalten diese nicht die ordnungsgem jeweils zugeh renden Secondary Objekte Dieses Problem wird gel st indem eine zus tzliche Spalte FTPRIMARY ARRAY in der Tabelle TSECONDARY aufgenommen wird und im Persistenz Deskriptor primary jdo durch das Element lt reference gt eine zus tzliche Fremdschl ssel Beziehung definiert wird siehe Abschnitt 3 2 1 2 4 1 6Komposition Bei den Abbildungsregeln one to one one to many und many to many kann jeweils das kaskadierende L schen aktiviert werden D h wenn das Objekt dass Referenzen auf andere Objekte h lt gel scht wird so werden auch alle von diesem Objekt aus referenzierten Objekte gel scht Dies wird im jeweiligen Persistenz Deskriptor durch das Element lt cascade delete gt bei der Beschreibung des Attributes aktiviert lt extension key cascade delete value true vendor name ssibo gt 1 Als Spalten bes e diese Tabelle dann einen Fremdschl ssel auf die diesen Datentyp besitzende Klasse jeweils eine Spalte f r den Schl ssel und Wert Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 84 139 4 1 7Graphische Entwicklungsumgebung Die graphische Entwicklungsumgebung von intelliBO ist bersichtlich aufgebaut selbsterkl rend und leicht zu nutzen Die zu speichernden Klassen werden eingelesen und es kann automatisch e
173. swerkzeuge bei Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 937 139 4 3 3Performance und Ressourcenverbrauch 4 3 3 1Insert Operation n Primary Objekte werden aus einer ArrayList in die Datenbank MySQL eintragen 600 0 Connector J V3 0 Anzahl ms 14730 96265 E10 Primary Objekte E20 Primary Objekte E30 Primary Objekte 1150 Primary Objekte 01100 Primary Objekte 132950 373900 1469371 Connector J V3 0 Sek Rollback A Zeit in ms in denen die Hauptobjekte instanziiert die referenzierten Objekte der Methode create obj der Schnittstelle Database bergeben und in einer ArrayList zwischengespeichert wurden B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Anzahl _ A BJ 10336 35153 4462 80951 Fazit Die erzeugten Objekte wechseln durch Aufruf der Methode create obj der Schnittstelle Database innerhalb einer Transaktion vom Zustand transient in den Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 94 139 Zustand persistent Wird die aktuelle Transaktion durch die Methode commit beendet so wechseln die dadurch in die Datenbank eingetragenen Objekte erneut in den Zustand transient Wird die Anzahl der zu speichernden Objekte verdoppelt so ist eine Verdreifachung der Laufzeit festzustellen 4 3 3
174. t 2 5 2Performance und Ressourcenverbrauch Es werden Zeiten und Speicherverbrauch von typischen Datenbank Operationen die durch die JDO Implementierung durchgef hrt werden gemessen Die Hard und Softwarekonfiguration des verwendeten Rechners f r die Messungen wird in Abschnitt 3 1 aufgelistet Eine wichtige Erkenntnis ist hierbei eine Relation aufstellen zu k nnen wie lange der Anwender durch den Automatismus von JDO warten muss bis die Datenbank Operationen durchgef hrt wurden und ob und wie weit dadurch der Arbeitsspeicher belastet wird Als Gegen berstellung der insert und query Operationen werden die Zeiten und der Speicherverbrauch f r die gleiche Anzahl n von Objekten durch den Vorgang der Serialisierung bzw Deserialisierung in bzw aus n Dateien durchgef hrt d h ein komplett instanziiertes Primary Objekt wird jeweils in einer Datei abgespeichert 2 5 3Laufzeitschwankungen Es soll untersucht werden ob bei mehrmaligen Ausf hren des Programms unter gleichgebliebenen Eingabeparameter die gleichen Messergebnisse hinsichtlich Zeit und Speicherverbrauch auftreten 2 5 4Integration objektorientierter Paradigmen 2 5 4 1Vererbung Es soll untersucht werden ob und wie das Konzept der Vererbung durch die jeweilige JDO Implementierung unterst tzt wird d h ob die Attribute der Klassen jeweils einer eigenen Tabelle zugeordnet werden oder ob alle beteiligten Attribute der Klassen in einer einzigen Tabelle abgespeichert werd
175. t lt sql many key secondary_ID_list lt field gt lt field name primList type castor Primary gt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 130 139 lt sql name primary_ID_list gt lt field gt lt class gt lt class name castor Property identity key depends Primary gt lt map to table tpropertiesp gt lt cache type type unlimited gt lt field name key type string required true gt lt sql name keyp type varchar gt lt field gt lt field name value type string required true gt lt sql name valuep type varchar gt lt field gt lt class gt lt mapping gt Abbildung 23 Persistenz Deskriptor f r das Objektmodell unter Verwendung von Castor JDO 6 9SQL Skript f r die Datenbank castordiplom create table tprimarysecond intValuePS int 10 not null basePrimary_ID int 10 stringValuePS varchar 50 primaryFirst_ID int 10 primary key intValuePS type innoDB create table tbaseprimary intValueBP int 10 not null stringValueBP varchar 50 boolValueBP bit primary key intValueBP type innoDB create table tanotherclass intValueAC int 10 not null stringValueAC varchar 50 secondarySecond_ID int 10 secondary_ID_list int 10 primary key intValueAC type innoDB create table tbasesecondary intValueBS int 10 not null stringVal
176. t persistence of objects in Java JDO provides a standardized API for making objects persistent independent of the underlying storage system like relational or object oriented databases In this paper different JDO implementations and object relational mapping tools will be discussed and compared The performance of different operations will be evaluated based on a prototype application This paper consists of three parts the first one forms a theoretic survey and a description of the JDO specification In the second part the application and the implementation of the prototype will be discussed Finally the third part of this paper describes the results of the evaluation Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 3 139 Hiermit versichere ich dass ich die vorliegende Arbeit selbstst ndig und nur unter Verwendung der angegebenen Quellen und Hilfsmittel angefertigt habe Erlangen Juni 2003 Timo Koster Danksagung Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 4 139 An dieser Stelle m chte ich mich bei allen bedanken die zum Gelingen dieser Diplomarbeit beigetragen haben Ich danke Herrn Dipl Inform Andreas Drebinger fur die Vermittlung der interessanten Themenstellung sowie seiner Betreuung w hrend dem gesamten Projektverlauf Herrn Prof Dr Andreas K
177. tand zwischen den Werten im Objekt und der Datenbank vor Persistent Deleted Wenn ein schon persistentes Objekt in der aktuellen Transaktion gel scht wird Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 31 139 Um das Erreichen der jeweiligen Zust nde n her zu erl utern folgt ein Zustandsdiagramm persistent new A V persistent new deleted clean persistent persistent deleted dirty Abbildung 4 Zustandsdiagramm der nach JDO Spezifikation geforderten sieben Zustande 1 Ein transientes Objekt wechselt in den Zustand persistent new wenn dieses als Argument an die Methode makePersistence Ubergeben wurde 2 Das zuvor persistente Objekt wechselt in den Zustand hollow wenn die aktuelle Transaktion erfolgreich beendet wurde nach dem Commit Vorgang 3 Ein Zustandsubergang von hollow nach persistent clean findet statt wenn Daten aus der Datenbank eingelesen werden 4 Der Zustand dirty wird erreicht sobald Attributwerte des Objektes geandert werden 5 Nach Anderungen der Attributwerte des Objektes wechselt dieses vom Zustand dirty in den Zustand hollow wenn die aktuelle Transaktion abgebrochen Rollback Vorgang oder erfolgreich beendet wurde Commit Vorgang 6 Wurden die Attributwerte des Objektes nach dem Einlesevorgang noch nicht ge ndert wechselt der Zustand es Objektes von persistent clean in den Zustan
178. teilweise in der momentan noch in der Entwicklung befindlichen Version 3 2 behoben Eine Beta Version der neuen Version wurde von Signsoft w hrend der Evaluierung zur Verf gung gestellt Gegen ber der Version 3 1 sind bekannt gewordene Bugs behoben worden und insgesamt soll diese Version performanter als die Version 3 1 sein da Fremdimplementierungen f r die Klassen der Schnittstelle Collection verwendet wurden Nachdem der Prototyp erstellt worden ist wurden die zugeh rigen Persistenz Deskriptoren mit Hilfe der graphischen Entwicklungsumgebung von intelliBO erstellt Diese sind auf der Projekt CD zu finden F r eine detaillierte Erkl rung zur Erstellung der Persistenz Deskriptoren wird auf SignO2 verwiesen Als n chstes wurde der Tabellenskript Generator von intelliBO getestet Dieser erzeugt anhand der zuvor erstellten Persistenz Deskriptoren die entsprechenden SQL Skripte zur Erzeugung der Tabellen f r die zugrunde liegende Datenbank 4 1 1Automatisches Erstellen der zugeh rigen Tabellen In der graphischen Entwicklungsumgebung besteht nur die M glichkeit die zugrunde liegende Datenbank anzugeben sprich den verwendeten JDBC Datenbanktreiber die URL Benutzername und Password der Datenbank und einen Verbindungstest durchzuf hren Leider besteht nicht die M glichkeit bestimmte Konfigurationsangaben die f r MySQL n tig sind z B den verwendeten Tabellentyp anzugeben Wird der Tabellenskript Generator von intelliBO ausgef hrt
179. tel 2 werden M glichkeiten zur Persistenz in Java vorgestellt sowie eine Einfuhrung in Java Data Objects JDO gegeben Die Abschnitte 2 3 und 2 5 beschreiben die Selektions und Evaluierungskriterien Der Abschnitt 2 4 stellt die untersuchten JDO Implementierungen bzw Objekt Relationale Abbildungswerkzeuge dar Das Kapitel 3 beschreibt den zu untersuchenden Anwendungsfall und den erstellten Prototyp anhand eines Klassendiagramms Das Kapitel ist so aufgebaut dass dort die nderungen des zu Beginn erstellten Prototyps f r den jeweiligen Framework dass zugeh rendene Entity Relationship Modell und spezifische Eigenschaften der Persistenz Deskriptoren erl utert werden Kapitel 4 beschreibt unabh ngig von den anderen Produkten die erzielten Ergebnisse so dass der Leser die M glichkeit hat nur Ergebnisse ber die ihn interessierende JDO Implementierung oder des Objekt Relationalen Abbildungswerkzeuges zu lesen In Kapitel 5 werden oben genannte Frameworks gegen bergestellt und ein Fazit getroffen Im Anhang sind die erstellten Persistenz Deskriptoren die erstellten Datenbank Schemata und Installationsanleitungen zu finden Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 13 139 1 1 Konventionen Folgende Konventionen werden in dieser Diplomarbeit verwendet Schreibmaschinentext f r Programmcode Klassen und Schnittstellennamen 2 Analyse In diesem
180. teren wird noch eine Datei namens castorHSQLdiplom properties erzeugt in der z B Cache Einstellungen vorgenommen werden k nnen Es wurden die Default Einstellungen bernommen Per Default Einstellung befindet sich HSQL im AutoCommit Modus Dieser muss ber den Menupunkt Options AutoCommit Off ausgeschaltet werden Soll die Verwaltung ber den DatabaseManager f r den Server Modus erfolgen so muss der HSQL Server zuvor durch Aufruf von java org hsqldb Server gestartet worden sein 6 6 Persistenz Deskriptor Hibernate Es folgt der f r das Objektmodell erstellte Persistenz Deskriptor prototype hbm xmI lt xml version 1 0 gt lt DOCTYPE hibernate mapping PUBLIC Hibernate Hibernate Mapping DTD EN http hibernate sourceforge net hibernate mapping 1 1 dtd gt lt hibernate mapping gt lt class name hibernate AnotherClass table tanotherclass gt lt id name intValueAC type int column intValueAC gt lt generator class assigned gt lt id gt lt many to one name secondarySecond column secondarySecond_ID class hibernate SecondarySecond cascade delete gt lt property name stringValueAC column stringValueAC type string gt lt class gt lt class name hibernate BasePrimary table tbaseprimary gt lt id name intValueBP type int column intValueBP gt lt generator class assigned gt lt id gt lt property name stringValueBP column stringValueBP
181. tion und Konfiguration von Hypersonic 1 2 SQL HSQL Unter http hsqldb sourceforge net die aktuellste HSQL Version herunterladen hier hsql_1_7_1 zip Unzip hsql_1_7_1 zip Es wird unter anderem ein Verzeichnis hsqldb lib angelegt indem sich das JAR File hsqldb jar befindet Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 124 139 3 Dieses JAR File muss in den CLASSPATH aufgenommen werden Innerhalb des JAR File befindet sich auch der JDBC Treiber org hsqldb jdbcDriver Durch Aufruf von java org hsqldb util DatabaseManager wird der mitgelieferte graphische Datenbank Manager gestartet Zu Beginn muss entschieden werden ob die Verwaltung Erzeugung der Datenbank hsqldiplom und die zugeh rigen Tabellen f r die eingebette HSQL Database Engine Standalone oder f r den Server Modus HSQL Database Engine Server erfolgen soll Als JDBC Treiber wird org hsqldb jdbcDriver angegeben F r den eingebetteten Modus muss die URL noch mit dem Datenbanknamen versehen werden jdbc hsqidb database gt jdbc hsqldb castorHSQLdiplom F r den Server Modus lautet die URL jdbc hsqidb hsql localhost ber den Menupunkt File OpenSkript muss das sich im Verzeichnis c castorHSQL Schemasikcreate HSQL sql befindliche SQL Skript ausgef hrt werden Es wird eine Datei namens castorHSQLdiplom script erzeugt die die Daten der Tabellen verwaltet Des wei
182. tity type application name AnotherClass objectid class AnotherClassKey requires extent true gt lt extension vendor name kodo key table value tanotherclass gt lt extension vendor name kodo key lock column value none gt lt extension vendor name kodo key class column value none gt lt field name secondarySecond gt lt extension vendor name kodo key dependent value true gt lt field gt lt field name intValueAC primary key true gt lt class gt lt class identity type application name BasePrimary objectid class BasePrimaryKey requires extent true gt lt extension vendor name kodo key table value tbaseprimary gt lt extension vendor name kodo key lock column value none gt lt field name intValueBP primary key true gt lt field name arrayListBP gt lt collection element type kododiplom PrimarySecond gt lt extension vendor name kodo key element dependent value true gt lt extension vendor name kodo key inverse value bp gt lt field gt lt class gt lt class identity type application name BaseSecondary objectid class BaseSecondaryKey requires extent true gt lt extension vendor name kodo key table value tbasesecondary gt lt extension vendor name kodo key lock column value none gt lt field name intValueBS primary key true gt lt field name arrayListBS gt lt collection element type kododiplom Seco
183. tor J V3 0 Sek Rollback A Zeit in ms in der eine Abfrage an die Datenbank erfolgte und alle Hauptobjekte in einer ArrayList gespeichert wurden B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Anzahl _ A BJ 1563 1082 21540 3363 Fazit Obige Zeiten beziehen sich darauf dass alle aus der Datenbank ausgelesenen Primary Objekte vollst ndig initialisiert im Speicher vorliegen Die ausgelesenen Objekte haben den Zustand persistent Es ist eine exponentielle Laufzeit zu erkennen Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 96 139 4 3 3 4Update Operation Allen Objekten der Klasse SecondaryFirst wurde ein neuer Bezeichner zugewiesen d h die sich im Speicher befindlichen Objekte wurden ver ndert und somit mit der Datenbank synchronisiert Die Anzahl bezieht sich auf die Primary Objekte Die daraus resultierende Anzahl von SecondaryFirst Objekten steht jeweils in Klammern Connector J V3 0 Anzahl ms 10 200 2875 20 400 16685 10 Primary Objekte E20 Primary Objekte 30 Primary Objekte 1150 Primary Objekte 01100 Prim ary Objekte 42535 50 1000 137436 100 2000 561990 Connector J V3 0 Sek Rollback A Zeit in ms in der die nderung durchgef hrt wurde B Zeit in ms die der rollback Vorgang in Anspruch genommen hat Anzahl _ A _ B 2043 2156 1055
184. tt 2 2 4 2 erl utert 2 Die Evaluierungskriterien sind in Abschnitt 2 5 zu finden 3 Der Begriff Transparenz bzw transparente Persistenz wird im Abschnitt 2 2 4 1 n her erl utert Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 19 139 Java basierte Abfragesprache JDOQL 2 2 1JDO Architektur In diesem Abschnitt wird die JDO Architektur naher erlautert bzw auf die Umgebungen in denen JDO lauff hig ist sowie auf grundlegende Begriffe eingegangen Eine JDO Implementierung ist in einer eingebetteten managed und einer eigenstandigen non managed Umgebung lauffahig Im folgenden werden beide Umgebungen vorgestellt 2 2 1 1Umgebungen von JDO eigenstandige Umgebung In einer eigenstandigen Umgebung laufen Applikationen die als alleinstehende oder als Client Server Architektur implementiert wurden Application JDO API JDO implementation Data store specific API Data store Abbildung 1 JDO in einer eigenst ndigen Umgebung Roos02 Hierzu nutzt der Anwender zwei wichtige Schnittstellen der JDO API um mit der JDO Implementierung zu kommunizieren Die wichtigste Schnittstelle ist der PersistenceManager Diese muss von jedem JDO Anbieter implementiert werden Der PersistenceManager dient als Schnittstelle zur persistenten Speicherung von Objekten aus der Applikation Des weiteren stellt er ein Transaktionskonzept siehe Absc
185. tuelle Transaktion durch Aufruf von rollback abgebrochen so findet der gleiche Zustandswechsel statt aber die nderungen werden verworfen d h sie werden nicht in der Datenbank abgespeichert 4 1 3 5Speicherverbrauch Die Datenhaltung von 100 Primary Objekten innerhalb einer ArrayList umfasst ca 6MB im Arbeitsspeicher Werden diese 100 Primary Objekte innerhalb einer Transaktion mit Hilfe der JDO Implementierung intelliBO in die Datenbank MySQL Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 81 139 eingetragen so steigt der Arbeitsspeicher auf ca 124MB an Mit Hilfe des Profiler Borland Optimizelt Borl03 wurde der Arbeitsspeicher und alle erzeugten Objekte betrachtet Es war zu erkennen dass sehr viele generischen bzw Wrapper Objekte durch intelliBO erzeugt werden Durch einige Cache Optimierungen konnte dieses Speicherproblem nicht behoben werden Aussage von Signsoft war dass wenn sehr viele komplexe Objekte innerhalb einer Transaktion in die Datenbank eingetragen werden es zu Speicherproblemen kommen kann da intelliBO nicht Speicher optimiert sondern Performance optimiert erstellt wurde 4 1 3 6Performance und Ressourcenverbrauch intelliBO V3 2 Obige Datenbank Operationen wurden auch mit der aktuell verabschiedeten intelliBO V3 2 durchgef hrt Es folgt eine bersicht der erzielten Ergebnisse 1000000 800000 600000
186. ueBS varchar 50 doubleValueBS double secondaryFirst_ID int 10 create table tprimaryfirst intValuePF int 10 not null stringValuePF varchar 50 boolValuePF bit primary key intValuePF type innoDB create table tprimary intValueBP int 10 not null boolValueP bit stringValueP varchar 50 primary key intValueBP type innoDB create table tsecondaryfirst intValueSF int 10 not null stringValueSF varchar 50 boolValueSF bit primary key intValueSF type innoDB create table tsecondarysecond intValueSS int 10 not null stringValueSS varchar 50 baseSecondary_ID int 10 primary key intValueSS Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 131 139 primary key intValueBS type innoDB e innoDB create table tsecondary create table tpropertiesp intValueBS int 10 not null stringValueS varchar 50 boolValueS bit primary_ID_list int 10 primary key intValueBS primary_ID_prop integer 10 not null keyp varchar 50 not null valuep varchar 50 not null primary key primary_ID_prop type innoDB type innoDB Abbildung 24 SQL Skript f r die Datenbank castordiplom 6 10Persistenz Deskriptor Kodo JDO lt xml version 1 0 encoding UTF 8 gt lt DOCTYPE jdo SYSTEM jdo dtd gt lt jdo gt lt package name kododiplom gt lt class iden
187. uf die SQL Datentypen vorgenommen werden Da nicht explizit der verwendete Tabellentyp von MySQL in unserem Fall innoDB angegeben werden kann muss auch dies manuell in das CREATE TABLE Statement aufgenommen werden type innoDB Weiterhin ist zu erkennen dass der Java Datentyp Properties auf ein SQL Datentyp VARCHAR 255 abgebildet wird Dies muss manuell auf den SQL Datentyp BLOB ge ndert werden In Abschnitt 4 1 5 wird das dadurch resultierende Problem erl utert Das dann von Hand korrigierte CREATE TABLE Statement CREATE TABLE TPRIMARY FINTVALUEBP INT 10 not null FROOLVALUEP TINYINT 3 FSTRINGVALUEP VARCHAR 255 FDOUBLEVALUEP DOUBLE 17 5 FRROPERTIESP blob PRIMARY KEY FINTVALUEBP type innoDB Fremdschlussel Beziehungen zwischen den einzelnen Tabellen werden in dem jeweiligen Persistence Deskriptor durch Hilfe des Elementes lt reference gt angegeben Eine Erklarung hierzu ist im Abschnitt 4 1 5 zu finden Bei unseren neun erzeugten Tabellen sind diese Probleme noch akzeptabel von Hand zu beseitigen aber bei gr eren Projekten bei denen weit ber 100 Tabellen zu verwalten sind kann dies schnell un bersichtlich werden 4 1 2Integrationsaufwand f r bereits existierende Klassen IntelliBO nutzt einen Bytecode Enhancer um den Klassen der Applikation die jdo spezifischen Methoden zu zuf hren d h eine Erweiterung des Objektmodell sprich die Klassen von jdo spezifischen Oberklassen erben lass
188. umn intValueBP gt lt map role hashMapS table tanotherclass lazy false cascade delete gt lt key column secondary_ID gt lt index column hashMapSKey type int gt lt one to many class hibernate AnotherClass gt lt map gt lt joined subclass gt 1 Ausgehend vom Hauptobjekt werden alle von diesem aus referenzierten Objekte initialisiert Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 56 139 lt class gt Durch Angabe des Elementes lt joined subclass gt innerhalb des Elementes lt class gt wird die Unterklasse der zugeh rigen Oberklasse beschrieben durch das u ere lt class gt bekannt gegeben lt joined subclass gt sagt aus dass die Unterklasse in einer eigenen Tabelle table abgebildet wird und key gibt den Fremdschl ssel auf den Prim rschl ssel der Oberklasse an Das Element lt map gt beschreibt wie Datentypen die die Schnittstelle Map implementieren abgebildet werden Hierbei werden in der Spalte eingef hrt durch das Attribut index die Schl ssel der Map gespeichert 3 2 2 Alnstallation Benutzeranleitung 3 2 2 4 1 Systemvoraussetzungen Software 1 MySQL bzw HSQL muss installiert eine Datenbank hibernate die zugeh rigen Tabellen angelegt worden sein Anleitung siehe Abschnitt 6 4 bzw 6 5 und der verwendete JDBC Treiber in den CLASSPATH aufgenommen werden 2 Hibernate liegt als eine Sammlung vo
189. und zwischen Objekten der Klassen Primary und Secondary Des weiteren besitzt die Klasse Primary noch eine HashMap in der 10 Secondary Objekte verwaltet werden Zu Beginn der Performance bzw Speichertests wurde als Dimension f r alle ArrayListen und HashMaps 10 gew hlt und die Klassen Secondary und SecondarySecond besa en noch Properties der Gr e 10 1000 Primary Objekte lie en den Speicher auf ber 300MB ansteigen und es kam zu einem java lang OutOfMemoryError was auf die hohe Anzahl von String Objekten zur ck zuf hren ist Aus diesem Grunde wurde die Dimension der hashMapS arrayListS und arrayListBS auf 3 reduziert und nur noch Properties der Gr e 10 in der Klasse Primary verwendet 1 Primary Objekt besteht nun aus folgenden Objekten 1 BasePrimary 10 PrimarySecond 10 PrimaryFirst 20 Secondary 20 BaseSecondary 20 SecondaryFirst 120 AnotherClass 180 SecondarySecond Werden jetzt 1000 Primary Objekte erzeugt und in einer ArrayList zwischengespeichert beansprucht diese Datenhaltung ca 60MB im Speicher Der Grund wieso diese n Primary Objekte zu Beginn in einer ArrayList gespeichert werden ist dass zu Programmstart alle Objekte instanziiert sind und dann innerhalb einer Transaktion durch die JDO Implementierung oder dem Objekt Relationalen Abbildungswerkzeug persistent abgelegt werden sollen Es wurde ein Testfall erstellt der zu Beginn n Primary Objekte initialisiert in einer ArrayList
190. unden 37 Anzahl Primary Objekte Diplomarb 10 Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 91 139 Abbildung 14 Performance der DB Operationen unter HSQL im Server Modus Zeit Sekunden auey o3 os 16 36 Anzahl Primary Objekte Abbildung 15 Performance der DB Operationen unter HSQL im embedded Modus 4 2 5Vererbung Bei Hibernate gibt es die M glichkeit dass die an der Vererbung beteiligten Klassen mit in der Tabelle der Oberklasse oder aber dass die Unterklassen jeweils in einer eigenen Tabelle abgebildet werden Die Unterklassen erben die ObjektID der Oberklassen und die Beziehung zwischen den Tabellen wird ber Fremdschl ssel hergestellt 4 2 6Assoziationen Hibernate unterst tzt alle g ngigen Assoziationen Die verwendeten Assoziationen wurden schon im Abschnitt 3 2 2 3 vorgestellt so dass hier nur die Probleme die w hrend der Verwendung auftraten erl utert werden Werden in einem Objekt mehrere Datentypen z B List und Map verwendet die die gleichen Elementtypen verwalten so muss jeweils eine eigene Spalte f r den Fremdschl ssel definiert werden Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 92 139 4 2 7Komposition Auch Hibernate unterst tzt das kaskadierende L schen und es wird im Persistenz Deskriptor bei den Elementen lt
191. verwaltet und innerhalb einer Transaktion in die verwendetete Datenbank MySQL bzw HSQL abspeichert An diesen sich im Speicher befindlichen Primary Objekte wurden Ver nderungen innerhalb einer Transaktion durchgef hrt alle Primary Objekte in der Datenbank gel scht und Query Abfragen an die Datenbank abgesetzt Alle Tests wurden 5 10 mal mit den gleichen Eingabeparametern ausgef hrt XX steht als Abk rzung f r die zugeh rige Klasse z B PS f r PrimarySecond 2 Um einem java lang OutOfMemory Error vorzubeugen startet man den Java Interpreter java exe mit der Xmx Option um den der Java Virtual Machine zur Verf gung stehenden Heap Speicher zu erh hen 3 Der Datentyp String wird unter Java im Speicher als ein Objekt bestehend aus Header Offset usw abgelegt und ben tigt somit viel Arbeitsplatz Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 46 139 Es wurden keine drastischen Schwankungen festgestellt In Abschnitt 4 ist der jeweils resultierende Mittelwert der durchgef hrten Operationen zu finden 3 2 1Implementierung intelliBO Fur die Evaluierung von intelliBO wurde obiges Objektmodell angepasst Die Oberklassen BasePrimary und BaseSecondary verwenden nun Integer als Datentyp f r die ObjektID intValuexx Der Grund daf r ist dass unter intelliBO bei Verwendung des Datentyp HashMap kein eigener Schl ssel angegeben werden kann sondern da
192. vierenden Fehler festgestellt Lediglich das ein Statement abschliessende Semikolon muss manuell eingef gt werden sowie die Nutzung des Tabellentyps innoDB type innoDB in die Create Anweisungen aufgenommen werden Dieses erzeugte Skript wurde bis auf obige nderungen sowie Einschr nkungen der Wertebereiche der verwendeten SQL Datentypen bernommen und ist im Anhang 6 7 zu finden Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 86 139 4 2 3Integrationsaufwand f r bereits existierende Klassen Gegen ber intelliBO ver ndert Hibernate nicht den Bytecode der kompilierten Klassen sondern nutzt die Java Reflection API um zur Laufzeit Informationen Uber die Daten der Objekte zu erhalten um somit dynamisch SQL Code erzeugen zu k nnen Jede Java Klasse kann durch Hibernate in die verwendete Datenbank abgespeichert werden Lediglich muss sie einen Default Konstruktor und get set Methoden JavaBeans konform besitzen Bei Datentypen muss die implementierte Schnittstelle und nicht die konkrete Klasse angegeben werden d h bei Verwendung einer ArrayList als Datentyp wird nicht diese sondern bei der Deklaration List angegeben Dies ist notwendig da Hibernate Instanzen von Map List und Set durch eigene Implementierungen dieser Schnittstellen ersetzt 4 2 4Performance und Ressourcenverbrauch Es wurden unter anderem die gleichen Tests wie auch bei intelliB
193. ware Corporation Kalifornien http www borland com optimizeit Sourgeforge Open Source Objekt Relational Mapper Hibernate Open Source Development Network http hibernate bluemars net Castor Open Source Databinding Framework Castor Exolab Group http castor exolab org Hypersonic SQL Open Source Datenbank Hypersonic SQL Hypersonic SQL Group http hsqldb sourceforge net SolarMetric Benutzerhandbuch Kodo JDO SolarMetric Washington D C 2003 http www solarmetric com Libelis Benutzerhandbuch Lido Libelis Paris 2003 http www libelis com Diplomarbeit Al FH Trier Timo Koster
194. wird der Einsatz in einem Applikationsserver unterst tzt 1 Damit ist ein Werkzeug gemeint das automatisch aus den zu speichernden Objekten bzw Klassen die zugeh rigen Skripte zum Anlegen der Tabellen erzeugt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 39 139 Die Ergebnisse der Internetrecherche sind in Abschnitt 6 3 zu finden 2 4 JDO Implementierungen Frameworks In diesem Abschnitt werden kurz die untersuchten JDO Implementierungen vorgestellt die im Rahmen dieser Diplomarbeit anhand eines Prototypes Erkl rung siehe Abschnitt 3 evaluiert worden sind 2 4 1Signsoft intelliBO V3 1 Nach der zu Beginn durchgef hrten Internetrecherche anhand der in Abschnitt 2 3 genannten Selektionskriterien wurde als erste zu untersuchende JDO Implementierung intelliBO V3 1 www signsoft de der Firma Signsoft aus Dresden gew hlt IntelliBO ist in Java geschrieben und stellt eine 100 ige Implementierung der JDO Spezifikation 1 0 dar bietet sogar ber den Standard hinaus noch weitere Funktionalit t an Es ist eine kommerzielle JDO Implementierung und unterst tzt die Datenbank MySQL Der Implementierung liegt eine graphische Entwicklungsumgebung bei durch deren Hilfe aus vorhandenen Klassen die zugeh rigen Persistenz Deskriptoren erstellt werden k nnen sowie einen Tabellenskript Generator einen Persistenz Deskriptor Verifizierer und einen Bytecode Enhance
195. ze 20M set variable innodb_log_file_size 10M set variable innodb_log_buffer_size 5M kann auf 0 gesetzt werden wenn man sich leisten kann einige der zuletzt abgeschickten Transaktionen commit zu verlieren innodb_flush_log_at_trx_commit 1 set variable innodb_file_io_threads 4 set variable innodb_lock_wait_timeout 50 T Durch Aufruf von mysqld max nt install installiert man den MySQL Server als Dienst Service unter NT Windows2000 d h der MySQL Server l uft permanent im Hintergrund der Datenbankanfragen entgegen nehmen kann Als Service bedeutet dass das Betriebssystem den Server automatisch stoppt wenn der Rechner herunter gefahren wird Es werden folgende Tabellentypen unterst tzt MyISAM Standard MySQL Tabellentyp HEAP ISAM deprecated und MERGE jeweils ohne Transaktionsunterst tzung InnoDB und BDB beide Tabellentypen unterst tzen Transaktionen Durch Aufruf von mysql startet man den MySQL Monitor Nun muss durch den Befehl create database diplom die Datenbank diplom angelegt durch use diplom diese als aktive Datenbank festgelegt werden und anschlie end durch den Befehl C prototype model Schemas create sql die Tabellen angelegt werden Durch Aufruf von mysqladmin shutdown stoppt man schlie lich den MySQL Server 10 Errormeldungen werden in der Datei mysql err im Installationsverzeichnis unter e mysql data mysql err protokolliert 6 5Installa
196. zur Datenbank bzw Abfragen mittels SQL an die Datenbank m glich sind ohne sich um die spezifischen Eigenschaften des verwendeten Datenbanksystem k mmern zu m ssen 3 Structured Query Language for Java dies ist eine erweiterte SQL Abfragesprache speziell f r JAVA Dabei werden durch einen SQL Precompiler die SQL Anweisungen direkt im Programmcode durch Java Code ersetzt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 15 139 Objektorientierte Paradigmen werden nicht unterst tzt so dass der Programmierer eine Transformation vom objektorientiertem Modell in das relationale Modell von Hand durchf hren muss Hierbei entstehen h ufig Fehler und ein h herer Implementierungsaufwand geringe Anzahl von Basisdatentypen da durch den Normalisierungsprozess das Objekt aufgesplittet wird und somit durch Verlinkung ber Fremdschl ssel auf mehrere Tabellen verteilt wird m ssen bei Zugriff auf das gesamte Objekt aufwendige Verbundoperationen Joins durchgef hrt werden was die Performanz der Datenbank negativ beeinflusst der Wechsel zu einem anderen relationalen Datenbanksystem kann zu Problemen f hren da die Hersteller teilweise unterschiedliche Datentypen verwenden 2 1 3Enterprise JavaBeans EJB In der Enterprise JavaBeans Spezifikation die Bestandteil der J2EE Gesamtspezifikation ist sind weitere Persistenzl sungen eingebettet Durch Komp
197. zus tzliche Spalte zur Positionsbestimmung des Elementes der Liste f hrt Diplomarbeit Al FH Trier Timo Koster Selektion und Evaluierung datenbankbasierter Persistenzl sungen f r Java Objekte 55 139 3 2 2 3Persistenz Deskriptor Im Anhang 6 6 ist der erstellte Persistenz Deskriptor prototype hbm xml zu finden Es folgt eine Erl uterung ausgew hlter Elemente lt class name hibernate AnotherClass table tanotherclass gt lt id name intValueAC type int column intValueAC gt lt generator class assigned gt lt id gt lt many to one name secondarySecond column secondarySecond_ID class hibernate SecondarySecond cascade delete gt lt property name stringValueAC column stringValueAC type string gt lt class gt Das Element lt class gt beschreibt die zu speichernde Klasse und weist dieser durch das Attribut table die zugeh rige Tabelle zu Durch das Element lt id gt wird die ObjektID der Objekte der entsprechenden Tabelle festgelegt Es besteht die M glichkeit durch Angabe des Attributes generator class anzugeben wie die Identit t Verwaltung der zugeh rigen Objekte erfolgt assigned sagt aus dass die Applikation f r die Vergabe der ObjektIDs verantwortlich ist Das Element lt property gt definiert die Attribute die direkt auf Spalten der Tabelle abgebildet werden Durch Angabe des Elementes lt many to one gt wird eine 1 1 Assoziation eingeleitet Das Attribut name deklariert
Download Pdf Manuals
Related Search
Related Contents
Bedienungsanleitung - IP Videoüberwachung von VTIS Electrolux FAVORIT 65050 U User's Manual VAIO 個人向け標準仕様モデル 総合カタログダウンロード 高精度温度計 | 株式会社チノー ニリドラDRA-014のチラシを公開しました。 télécharger le guide d`utilisation User Manual - ACESEE Security Limited Local PDF 112realizzazione_aula_didattica_all Copyright © All rights reserved.
Failed to retrieve file