PDF 332K

Werbung
Komponentenbasierte Softwareentwicklung
Komponentenbasierte Softwareentwicklung
Fachhochschule Osnabrück
University of Applied Sciences
Thema: OR-Mapping
Datum: 13.01.2007
Student: Martin Landwehr (161046)
Seite 1 von 21
Komponentenbasierte Softwareentwicklung
Inhaltsverzeichnis
Einleitung................................................................................................................. 3
Motivation............................................................................................................ 3
Grundlagen .......................................................................................................... 3
Objekt-relationaler Bruch.........................................................................................5
Die semantische Lücke........................................................................................ 5
Lösungsansätze.................................................................................................... 6
ORM mit Java.......................................................................................................... 7
Serialisierung........................................................................................................7
Java Database Connectivity................................................................................. 7
Enterprise Java Beans 2.1.................................................................................... 8
Bean-Managed Persistence.............................................................................. 8
Container-Managed Persistence....................................................................... 8
Persistence-Frameworks...................................................................................... 8
Java Data Objects............................................................................................. 9
Hibernate.......................................................................................................... 9
Enterprise Java Beans 3.0.................................................................................. 10
Beispiel mit Enterprise Java Beans 3.0.................................................................. 11
Beispielanwendung............................................................................................ 11
Einfache Persistenz........................................................................................ 11
Relationen...................................................................................................... 13
Vererbung....................................................................................................... 13
Fassade........................................................................................................... 14
Query API...................................................................................................... 16
Persistence Deskriptor.................................................................................... 17
Testen der Beispielanwendung.......................................................................... 18
B.1 Spezifikationen............................................................................................ 20
B.2 Systeme, Bibliotheken, Anwendungen........................................................20
B.3 Artikel und Tutorials................................................................................... 20
Literaturverzeichnis................................................................................................21
Seite 2 von 21
Komponentenbasierte Softwareentwicklung
Einleitung
Motivation
Versicherungen, Banken, Automobilhersteller, Chemiekonzerne und Softwarehäuser sind
typische Anwender der Informatik. In diesen Unternehmen werden alle Abläufe durch
betriebliche Informationssysteme unterstützt. Die Informationssysteme unterstützen und
steuern Abläufe in allen Bereichen eines Unternehmens: im Marketing und Vertrieb, in
der Produktion, in der Logistik und auch im Rechnungswesen. Ein Merkmal dieser
Systeme ist, dass ihre Anwender auf eine gemeinsame, große und komplexe Datenbank
zugreifen. Heutzutage werden in der Regel objektorientierte Programmiersprachen und
zur Speicherung von Daten hingegen relationale Datenbanksysteme eingesetzt. Diese
beiden Paradigmen unterscheiden sich in ihren Konzepten, was ihre gemeinsame
Verwendung insbesondere in großen und komplexen Projekten erschwert.
Diese Ausarbeitung beschäftigt sich mit objektorientierten Zugriffsschichten auf
relationale Datenbanken und stellt anhand eines praktischen Beispiels die neue Java
Persistence API EJB3.0 vor.
Grundlagen
Die objektorientierte Entwicklung ist eine moderne Methode zur Implementierung
von betrieblichen Informationssystemen. Dabei bieten Objekte durch Abstraktion
eine Möglichkeit die Systeme zu strukturieren und dadurch die immer weiter
steigende Komplexität zu beherrschen.
In Unternehmensanwendungen kann auf eine persistente Datenhaltung nicht
mehr verzichtet werden, da die gesammelten Daten über einen längeren
Zeitraum benötigt werden. Beispiele für diese Applikationen kommen aus dem
Bereich der Verwaltung von Personal und Finanzen, aber auch aus dem Bereich
der Internetapplikationen.
Seite 3 von 21
Komponentenbasierte Softwareentwicklung
Die Informationen, welche in den Objekten gespeichert sind, müssen auf einen
Sekundärspeicher ausgelagert werden, da die Haltung dieser Daten im
Arbeitsspeicher schon aufgrund der dauerhaft steigenden Datenmenge nicht
möglich wäre. Auch muss nach der Beendigung der Anwendung noch ein Zugriff
auf die Daten möglich sein.
Um
diesen
Anforderungen
gerecht
zu
werden
kommen
Datenbankverwaltungssyteme (engl. Database management systems, DBMS)
zum Einsatz. Diese Systeme bieten mehr als nur die reine Datenhaltung,
sondern
unterstützen
Mehrbenutzerbetrieb
durch
Transaktionen,
Hilfe
bei
der
Zugriffskontrolle und bieten Schutz vor Datenverlust. Bei DBMS unterscheidet
man drei verschiedene Arten von Systemen: relationale, objekt-relationale und
objektorientierte Datenbanksysteme. Bei relationalen DBMS werden die Daten in
einer Tabellenstruktur dargestellt. Als Abfragesprache dient SQL. Objektrelationale Datenbanksysteme bauen auf relationalen DBMS auf und erweitern
diese. Die Funktionalität wird im Wesentlichen durch den SQL:1999 Standard
definiert
und
umfasst
beispielsweise
benutzerdefinierte
Datentypen
und
Funktionen, Typ- und Tabellenhierachien. Objektorientierte DBMS bauen
hingegen nicht auf Tabellen auf, sondern nehmen Objekte entgegen, welche
persistiert werden.
Seite 4 von 21
Komponentenbasierte Softwareentwicklung
Objekt-relationaler Bruch
Bei
der
Verwendung
von
objektorientierten
Programmiersprachen
und
relationalen Datenbanken steht man dem Problem des objekt-relationalen Bruchs
gegenüber. Im Folgenden wird der Begriff „semantische Lücke“ und danach
Lösungsmöglichkeiten erläutert.
Die semantische Lücke
Bei
der
Implementierung
einer
Anwendung
in
einer
objektorientierten
Programmiersprache, zum Beispiel Java, und der Verwendung einer relationalen
Datenbank als Persistenzmedium steht man einigen Problemen gegenüber. Dies
liegt an den unterschiedlichen Paradigmen der beiden Konzepte. Der
objektorientierte Ansatz befasst sich mit der Frage, wie Daten und Verhalten von
Objekten der realen Welt in selbstständige, kleine Dateneinheiten gekapselt
werden können. Dem Gegenüber steht der relationale Ansatz, welcher den
Fokus auf die vollständige und redundanzfreie Speicherung von Daten legt.
In der objektorientierten Programmiersprache kann man objektorientierte
Konzepte, wie mehrwertige oder benutzerdefinierte Typen, Vererbung oder auch
Beziehungen zwischen Objekten nutzen.
Abbildung 1: objektorientierte Sicht
In der relationalen Welt gibt es diese Konzepte nicht. Man muss dies mit Hilfe der
dort
zur
Verfügung
stehenden
Mittel
wie
zum
Beispiel
Fremdschlüsselbeziehungen lösen. Im Folgenden werden die verschiedenen
Seite 5 von 21
Komponentenbasierte Softwareentwicklung
bestehenden
Ansätze
zur
Überwindung
des
objekt-relationalen
Bruchs
beschrieben.
Abbildung 2: Datenbanksicht
Lösungsansätze
Als erste Möglichkeit gibt es Sprachen der vierten Generation (z.B. SQL), welche
stark von der Hardware und dem Betriebssystem abstrahieren und für die
Anbindung von Datenbanksystemen entwickelt wurden. Nachteil dieser Sprachen
ist, dass sie sehr unterschiedliche Nutzbarkeiten haben. Viele dieser Sprachen
sind nur für einen kleinen Anwendungsbereich nutzbar. Ein weiterer Nachteil ist,
dass es nur schwer möglich ist eine Schichtenarchitektur einzuhalten.
Ein weiterer Ansatz ist der Einsatz von Objektorientierten Datenbanksystemen.
Diese bieten die Möglichkeit, Objekte direkt an das Datenbanksystem zu
übergeben welches die Daten transparent persistiert. Die Performanz dieser
Systeme ist allerdings bei anfrageintensiven Anwendungen deutlich schlechter
als die Performanz relationaler Datenbanksysteme.
Eine weitere Möglichkeit bietet der Einsatz von objekt-relationalen Mapping oder
unterstützender Frameworks. Hier werden die Objekte entweder manuell oder
mit Hilfe von Tools auf die einzelnen Relationen abgebildet.
Seite 6 von 21
Komponentenbasierte Softwareentwicklung
ORM mit Java
In
der
Programmiersprache
Java
stehen
unterschiedliche,
einfache
Mechanismen wie Serialisierung und JDBC zu Verfügung, mit deren Hilfe sich
Objekte persistieren lassen. Darüber hinaus haben sich in den letzten Jahren
neben einer Vielzahl von Frameworks auch zwei Standards - Enterprise Java
Beans Container-Managed Persistence und Java Data Objects – entwickelt.
Serialisierung
Diese Art der Persistierung ist eine Standardkomponente einer jeden Java Virtual
Machine. Dabei wird ein Objekt in einen ByteStream abgelegt und so in Form
eines Files im Dateisystem gespeichert. Serialisierung kann schnell angewandt
werden, das Objekt muss nur die Schnittstelle Serializable implementieren.
Dadurch kann die Laufzeitumgebung eine Standard Serialisierung vornehmen.
Reicht diese nicht aus, kann die Serialisierung auch händisch bewerkstelligt
werden.
Anforderungen einer robusten Persistenzschicht, wie z.B. die Unterstützung von
Transaktionen, Skalierbarkeit oder Anfragen werden allerdings nicht erfüllt so
dass sich Serialisierung nicht als ein Verfahren für Massendatenhaltung eignet.
Java Database Connectivity
Java Database Connectivity (JDBC) ist eine Standard Schnittstelle in Java, um
mit RDBS zu interagieren. Sie ermöglicht es, SQL konforme Befehle an die
Datenbank weiterzuleiten. Jeder Hersteller von RDBS bietet in der Regel Treiber
an, welche SQL Befehle auf die Implementierung der eigenen Datenbank
bestmöglich umsetzen. Durch Verwendung des SQL-Standards werden Anfragen
und Transaktionen direkt unterstützt. Das Ergebnis einer Anfrage ist immer eine
Menge
von
Attributen,
die
Transformation
vom
relationalen
auf
das
objektorientierte Modell muss also händisch vorgenommen werden. JDBC wird
meist für handgemachte ORM Lösungen verwendet. Auch hier muss auf die
Problematik der Objektidentität Rücksicht genommen werden. Features wie
Caching oder Lazy Loading müssen zusätzlich programmiert werden, da JDBC
sie nicht von Haus aus unterstützt.
Seite 7 von 21
Komponentenbasierte Softwareentwicklung
Enterprise Java Beans 2.1
Die Enterprise Java Beans (EJB2.1) Spezifikation definiert das serverseitige
Komponentenmodell, mit dem es möglich ist, verteilte Anwendungen zu
entwickeln.
Neben vielen unterschiedlichen Diensten werden auch zwei unterschiedliche
Möglichkeiten unterstützt, um die Geschäftsobjekte zu persistieren. Die
Geschäftsobjekte werden in diesem Zusammenhang auch als Entity-Beans
bezeichnet.
Bean-Managed Persistence
Bei
Bean-Managed
Persistence
(BMP)
muss
eigener
Programmcode
geschrieben werden, um den Zustand des Objektes in die Datenbank zu
übertragen. In diesem Szenario kommt meist wieder JDBC zum Einsatz, es kann
aber auch ein Persistence-Framework verwendet werden.
Container-Managed Persistence
Wird Container-Managed Persistence (CMP) verwendet, so muss kein eigener
Datenbankzugriffscode
geschrieben
werden.
Dies
wird
dem
Container
überlassen. Jedoch ist es nötig, Metadaten in Form von Deskriptoren
bereitzustellen, aus welchen der Container die entsprechenden Informationen für
die Persistierung ableiten und somit die SQL-Zugriffe generieren kann.
Obwohl es bei CMP so aussieht, als ob sich die Persistierung äußerst
komfortabel bewerkstelligen ließe, hat die Vergangenheit jedoch gezeigt dass
sich um ein sehr zeit- und fehleranfälliges Verfahren handelt.
Persistence-Frameworks
Im Laufe der Zeit wurden sowohl kommerzielle, als auch Open-Source Lösungen
entwickelt, welche die Persistierung von Objekten automatisieren und dadurch
erleichtern. Hier müssen zusätzliche Metainformationen bereitgestellt werden,
aus welchen zur Laufzeit Code für den Datenzugriff generiert wird. Der Einsatz
eines Persistence-Frameworks erlaubt es zum einen, die Persistierung mit
deutlich weniger anwendungsspezifischem Code vornehmen zu können. Zum
anderen
bieten
die
meisten
Lösungen
eine
umfangreiche
Werkzeugunterstützung an, was die Entwicklung zusätzlich beschleunigt. Im
Folgenden werden zwei bekannte Vertreter dieser Kategorie vorgestellt:
Seite 8 von 21
Komponentenbasierte Softwareentwicklung
Java Data Objects
JDO ermöglicht die Persistierung von Objekten. Sie bietet eine Reihe von
Schnittstellen, welche von unterschiedlichen Anbietern implementiert werden
können. Man ist somit komplett unabhängig von einem speziellen Anbieter, als
auch von der darunter liegenden Datenbank, egal ob RDMS oder ODBS. JDO
lässt sich in unterschiedlichen Szenarien einsetzten und ist damit sowohl für
Einzelanwendungen, als auch für verteilte Systeme verwendbar. Gerade bei
Applikationsservern findet JDO großen Anklang da eine brauchbare Alternative
zu EJB CMP geschaffen wurde.
Hibernate
Neben einer Vielzahl von Open-Source OR-Mappern ist Hibernate wohl eines der
am weitesten entwickelten Persistence-Frameworks. Es zeichnet sich sowohl
durch
die
hohe
Performance,
als
auch
durch
die
umfangreiche
Werkzeugunterstützung bei der Entwicklung aus.
Mit Hibernate können die meisten verfügbaren relationalen Datenbanksysteme
verwendet werden. Der Zugriff ist dabei auf die Datenbank optimiert, da sich
Hibernate mit unterschiedlichen Datenbankdialekten verwenden lässt. Die
benötigten Metainformationen für den Zugriff auf die jeweilige Datenbank werden
in einer Konfigurationsdatei angegeben, welche bei der Instanzierung der
SessionFactory geladen wird. Diese Konfigurationsdatei beinhaltet auch die
Namen der Klassen, für deren Instanzen eine Persistierung möglich sein soll.
Wie auch bei JDO ist es hier nötig, XML-Dateien mit Metainformationen für die
persistenten Klassen bereitzustellen. Hier werden, ähnlich wie bei JDO,
Beziehungen, die Vererbungshierarchie oder die Art der ID-Generierung für die
Objektidentifikation festgelegt.
In Bereichen wie Caching oder Transaktionsmanagement bietet Hibernate
ähnlichen Funktionsumfang wie JDO. Für Anfragen wird ebenfalls eine eigene
Sprache zur Verfügung gestellt, die Hibernate Query Language (HQL). Sie ist
wiederum stark an die JDOQL angelehnt. Hibernate zeichnet sich gegenüber
vergleichbaren
Entwicklungsgrad,
Persistence-Frameworks
als
auch
durch
durch
umfassende
den
fortgeschrittenen
Dokumentation
und
Werkzeugunterstützung aus, wodurch die Implementierung erheblich erleichtert
wird.
Seite 9 von 21
Komponentenbasierte Softwareentwicklung
Enterprise Java Beans 3.0
Bereits kurz nach der Einführung der Enterprise Java Beans 2.1 wurde von
vielen Entwicklern erkannt, dass die Spezifikation viel zu kompliziert ist. So ist
bereits im Jahre 2004 der Java Specification Request 220 entstanden, der zu
einer neuen Version der Enterprise Java Beans führen sollte.
Seit Mitte 2006 liegt diese finale Spezifikation vor und erstaunlicherweise
konnten einige Anwendungsserver kurze Zeit später mit einer vorläufigen Version
von EJB3.0 ausgestattet werden, so dass die Entwickler das bisher Spezifizierte
auch testen konnten. Die erste Implementierung eines EJB3.0-fähigen
Anwendungsservers wurde von der JBoss-Group bereitgestellt, die auch selbst
aktive Mitglieder der JSR220-Expertengruppe war.
Mit EJB3.0 wurden die alten Persiszenztechniken CMP und BMP „abgeschafft“;
anstelle dieser wurde das Beste aus den beiden Welten Hibernate und JDO
übernommen und eine erheblich einfacher und gleichzeitig mächtigere
Persistenz-API zur Verfügung gestellt. Zum jetzigen Zeitpunkt befinden sich die
unterschiedlichen EJB3.0-Implemtierungen noch im Entwicklungszustand. Es ist
aber zu erwarten, dass sich EJB3.0
langfristig als die dominierende
Persistenztechnik in Java-Umfeld durchsetzen wird.
Im folgenden Kapitel wird der Einsatz der neuen Java Persistence API
demonstriert.
Seite 10 von 21
Komponentenbasierte Softwareentwicklung
Beispiel mit Enterprise Java Beans 3.0
Beispielanwendung
Das folgende Beispiel soll der Prototyp einer Adressverwaltung darstellen; es
besteht aus:
•
vier Entity-Beans
OrganizationalUnit
Phone
Kreditor
Debitor
wobei
Kreditor
und
Debitor
Geschäftsobjekte
repräsentieren,
die
Eigenschaften der Klasse OrganizationalUnit erben. Zusätzlich zeigt
das Beispiel eine 1-zu-N-Beziehung zwischen OrganizationalUnit und
Phone.
•
Einen zustandslosen Session Bean EntityUnit mit dem zugehörigen
Interface UnitManager. Dieses Session-Bean ist das einzige Bean, das
dem entfernten Client zugänglich ist. Zu den allgemein anerkannten
Entwurfsmustern gehört, dass Entity-Beans dem entfernten Client nicht
direkt zugänglich gemacht werden, sondern ein Session Bean als Mittler
(facade) dazwischengesetzt wird.
Einfache Persistenz
Das neue Persiszenzframework basiert ausschließlich auf POJOs und sollte
daher den meisten Java-Programmierern natürlich vorkommen. Über die
Annotiation @Entity werden die POJOs als Entity-Beans bezeichnet. Optional
kann die Annotiation @Table angegeben werden, mit der die Datenbanktabelle
bezeichnet wird. Entity-Beans müssen das Interface Serializable implementieren.
Auf die Annotiation @Inheritance wird später eingegangen.
Seite 11 von 21
Komponentenbasierte Softwareentwicklung
Auszug OrganizationalUnit.java:
Jedes EntityBean muss einen eindeutigen Identifikator besitzen der in der
entsprechenden Tabelle als Primärschlüssel dienen kann. Die entsprechende
Variable wird mit der @Id-Annotiation versehen. Normale zu persistierende
Variablen
werden
mit
der
@Basic-Annotiation
gekennzeichnet.
Über
entsprechende Annotiationen ist es auch möglich die zu generierenden
Datenbankfelder feiner zu granulieren (nullable = true/false, Länge von
Zeichenketten in VarChar-Feldern etc.).
Auszug OrganizationalUnit.java:
Seite 12 von 21
Komponentenbasierte Softwareentwicklung
Relationen
Zwischen OrganizationalUnit und Phone besteht eine bidirektionale 1-zu-NBeziehung. Bidirektionale Beziehungen besitzen sowohl ein besitzendes Ende
als auch eine inverses Ende. Das besitzende Ende bestimmt, wann Updates in
der Datenbank vorgenommen werden. Dabei gelten folgende Regeln:
•
das
inverse
Ende
der
Beziehung
muss
das
besitzende
Ende
referenzieren und zwar mittels des mappedBy-Member der @OneToOne-,
der @OneToMany- oder der @ManyToMany-Annotiation.
•
Das N-Ende einer 1-zu-N-Beziehung muss besitzendes Ende sein.
Darum kann das mappedBy-Member nicht in der @ManyToOne-Annotiation
vorkommen.
Auszug OrganizationalUnit.java:
Auszug Phone.java:
Vererbung
Mit der neuen Persistenz-API lassen sicher Vererbungen erstaunlich einfach
abbilden. Wie in der „normalen“ Objektorientierten Programmierung wird sie mit
dem Schlüsselwort „extends“ realisiert.
Über die Annotiation @Inheritance kann zwischen unterschiedlichen Strategien
der Datenbanklayouterzeugung unterschieden werden. So kann beispielweise
gewählt werden ob jede vererbte Klasse in einer separaten Datenbanktabelle
oder alle Klassen in nur einer Datenbanktabelle abgelegt werden. Des Weiteren
ist es auch möglich einzelne vererbte Klassen mit oder ohne den Variablen der
Basisklasse anzulegen.
Seite 13 von 21
Komponentenbasierte Softwareentwicklung
Auszug OrganizationalUnit.java:
Auszug Debitor.java:
Auszug Kreditor.java:
Fassade
Über das Interface UnitManager kann ein entfernter Client auf die Entity-Beans
zugreifen.
Auszug UnitManager.java:
Seite 14 von 21
Komponentenbasierte Softwareentwicklung
Die Beanklasse EntityUnit implementiert das Interface UnitManager. In dieser
Klasse werden über den EntityManager - der in EJB3.0 eine zentrale Rolle
spielt – die eigentlichen Datenbankoperationen durchgeführt.
Auszug EntityUnit.java
Es folgen Beispiele für Datenbankstandartoperationen:
Auszug EntityUnit.java
Seite 15 von 21
Komponentenbasierte Softwareentwicklung
Query API
Das vorherige Beispiel hat sich mit Basisoperationen persistenter Objekte
beschäftigt. Über die leistungsfähige Query API können aber auch komplexe
Anfragen formuliert werden. Die verwendete Query Language orientiert sich
dabei stark an SQL und ist um objektorientierte Eigenschaften wie die Navigation
über JavaBean-Eigenschaften ergänzt worden.
Auszug EntityUnit.java
Seite 16 von 21
Komponentenbasierte Softwareentwicklung
Persistence Deskriptor
Ein großer Teil der Konfiguration des Persistenzkontextes wird vom EJBContainer (dem ApplicationServer) übernommen. Daher reduziert sich der
Persistence Deskriptor unter EJB3.0 auf ein Minimum. Es müssen lediglich
symbolische Namen für die Persistence-Unit und die zu verwendende JTADatenquelle angegeben werden:
Im folgenden Beispiel wird auf eine Postgres-Datenbank zugegriffen, die
innerhalb des JBoss unter dem Namen Address_Simple2 erreichbar ist. Des
Weiteren wird der ApplicationServer angewiesen, die erforderlichen Tabellen
selbst zu erstellen und vor einem ReDeploy der Anwendung diese wieder zu
löschen.
persistence.xml
Seite 17 von 21
Komponentenbasierte Softwareentwicklung
Testen der Beispielanwendung
Für den Test der Beispielanwendung empfiehlt es sich die unter Anhang A
aufgelistete Software zu installieren. Vor dem Start der Anwendung muss ein
JBoss Applicaton-Server so konfiguriert werden, dass er PostgreSQL als
Datenquelle einsetzen kann: Hierzu ist es ausreichend die Datei
JBOSS_HOME/server/default/deploy/postgres-ds.xml
mit der im Quelltext ausgelieferten zu ersetzen. Danach kann der Server mit
$./run.sh –c default –b IP_ADRESSE_DES_SERVERS
gestartet werden. Sollte kein externer ApplicationServer genutzt werden muss für
IP_ADRESSE_DES_SERVERS 127.0.0.1 gewählt werden. Nach erfolgreichem
Start des Servers erscheint die Meldung
…JBoss_4_0_4_GA date=xxx] Started in 1m:00s:00ms
Nun können die Enterprise-Beans ausgeliefert werden. Hierzu wird die dem
Quellcode
hinzugefügte
Komponente
Simple_Address_9b.jar
in
das
Verzeichnis
JBOSS_HOME/server/default/deploy/
kopiert.
Abhängig
vom
Debug-Level
des
JBoss
wirft
dieser
einige
Informationsmeldungen.
Die Client kann am komfortabelsten über das dem Quellcode hinzugefügten
Eclipse-Projekt gestartet werden. Ggf. muss die IP-Adresse des Servers in der
Datei jndi.properties angepasst werden:
java.naming.provider.url=IP_ADRESSE_DES_SERVERS:1099
Seite 18 von 21
Komponentenbasierte Softwareentwicklung
Anhang A
Verwendete Software
A.1 Java EE 5 SDK
Als Basis wird das Enterprise SDK benötigt, welches unter
http://java.sun.com/javaee/downloads/index.jsp
bezogen werden kann. Die Beispielanwendung wurde mit der Version 5_02
entwickelt und getestet.
A.2 JBoss Application Server
Der JBoss Application Server ist die Implementierung eines
Application-Servers nach dem JEE-Standard. JBoss ist neben
BEA Weblogic und IBM Websphere einer der drei verbreitesten
JEE-Applicationserver. Der JBoss AS ist unter
http://labs.jboss.com/portal/jbossas/download verfügbar. Die Beispielanwendung
wurde mit der Version 4.0.4GA-Patch1 entwickelt und getestet.
A.3 JBoss IDE für Eclipse
Die JBoss IDE für Eclipse bietet neben der integrierten
Entwicklungsumgebung eine Vielzahl vonPlug-Ins welche die
Entwicklung im Umfeld der Java Enterprise Edition stark vereinfachen. Sie kann
unter http://labs.jboss.com/portal/jbosside/download/index.html bezogen werden.
Die Beispielanwendung wurde mit der Version 1.6.0.GA entwickelt und getestet.
A.4 HSQLDB
HSQLDB
ist
ein
open-source
Relationales
Datenbank-
Managementsystem. Es ist in Java implementiert und daher
auf allen Java-Plattformen lauffähig. HSQLDB ist relativ weit verbreitet und wird
zusammen mit dem JBoss Application-Server ausgeliefert.
A.5 PostgreSQL
PostgreSQL ist eines der ältesten und am weitesten
fortgeschrittenen objektrelationalen Datenbanksysteme im
Bereich der freien Software. PostgreSQL kann unter
http://www.postgresql.org/ bezogen werden. Die Beispielanwendung wurde mit
der Version 8.0.1 entwickelt und getestet.
Seite 19 von 21
Komponentenbasierte Softwareentwicklung
Anhang B
URL-Verzeichnis
B.1 Spezifikationen
JSR 220: Enterprise JavaBeans 3.0
http://jcp.org/en/jsr/detail?id=220
B.2 Systeme, Bibliotheken, Anwendungen
Hibernate
http://www.hibernate.org
Hibernate-Tools
http://www.hibernate.org/255.html
Java Data Objects (JDO)
http://java.sun.com/products/jdo/
Container Managed Persistence
http://java.sun.com/javaee/
Java Persistence API (EJB3.0)
http://java.sun.com/javaee/
JRelationalFramework
http://jrf.sourceforge.net
Cayenne
http://objectstyle.org/cayenne/
ObJectRelationalBridge
http://db.apache.org/ojb/
Turbine/Torque
http://jakarta.apache.org/turbine/
B.3 Artikel und Tutorials
J2EE Designpattern
http://java.sun.com/blueprints/corej2eepatterns/
Tutorial Hibernate
http://www.laliluna.de/first-hibernate-example-tutorial.html
http://www.laliluna.de/java-database-development.html
http://www.torsten-horn.de/techdocs/java-hibernate.htm
Tutorial EJB3.0
http://docs.jboss.org/ejb3/app-server/tutorial/index.html
Seite 20 von 21
Komponentenbasierte Softwareentwicklung
Anhang C
Literaturverzeichnis
•
Jürgen Zimmermann, Gerd Beneken: „Verteilte Komponenten und
Datenbankanbindung“. Addison-Wesley 2000
•
Thomas Stark: “Java EE 5”. Addison-Wesley 2006
•
Heiko W.Rupp: “JBoss”. Dpunkt.Verlag 2004
Seite 21 von 21
Herunterladen