summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100288.html
blob: 07daaa4955752a4fa24de88b1911edfb0328e2ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
<html>
<head>
<title>
Handbuch der Java-Programmierung, 5. Auflage
</title>
</head>
<body>
<a name="startofbody"></a>
<script language="JavaScript" src="hjp4lib.js">
</script>
<script language="JavaScript">
installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100287.html;106,k100287.html;107,k100289.html;108,k100292.html");
</script>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100287.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100287.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100289.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100292.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">Kapitel 45 - Objektorientierte Persistenz
</table>
<hr>


<!-- Section -->
<a name="sectlevel2id045001"></a>
<h2>45.1 Einleitung </h2>
<hr>
<ul>
<li><a href="k100288.html#sectlevel2id045001">45.1 Einleitung</a>
<ul>
<li><a href="k100288.html#sectlevel3id045001001">45.1.1 Bezug und Installation</a>
</ul>
</ul>
<hr>

<p>
In <a href="k100265.html#kapiteljdbc">Kapitel 42</a> haben wir gesehen,
wie wir mit Hilfe von Datenbank-Treibern und der Abfragesprache SQL
Relationale Datenbanken mit Javaprogrammen verkn&uuml;pfen und Daten
Ein- bzw. Auslesen k&ouml;nnen. Vielleicht ist Ihnen dabei aufgefallen,
dass die serielle Art und Weise des Zugriffs auf Relationale Datenbanken
nicht so recht mit der objektorientierten Programmierung harmonisiert.
Man spricht in diesem Fall auch von einem <a name="ixa103331"><i>Impedance Mismatch</i></a>.

<p>
&Uuml;ber die Jahre hinweg entwickelte sich deshalb eine weitere Technik,
die eine objektorientierte Verkn&uuml;pfung von Datenbanken und Programmiersprachen
gestattet und unter dem Namen <a name="ixa103332"><i>Object Relational Mapping</i></a>
(<a name="ixa103333"><i>ORM</i></a>) bekannt wurde. Zwar basiert der
Zugriff auf die im Hintergrund arbeitende Datenbank dabei weiterhin
auf JDBC und SQL. Nun kommt jedoch eine objektorientierte Zugriffsschicht
dazu, mit der die Datenbank-Informationen in Javaobjekte &uuml;berf&uuml;hrt
und dem Entwickler zur Verf&uuml;gung gestellt werden. 
<p>
<a name="persistenceimg"></a>
<img src="images/Persistence.gif">
<p>

<p><i>
Abbildung 45.1: Datenbankzugriff mit JDBC und ORM</i></p>

<p>
Statt langwieriger SQL-Zugriffe und Transformation eines <font color="#000077"><tt>ResultSet</tt></font>
in Java-Objekte, kann der Entwickler diese nun einfach direkt Laden
oder Erzeugen und die Flie&szlig;bandarbeit dem Persistenz API &uuml;berlassen.
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=1></td>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Das in diesem Kapitel vorgestellte Java Persistenz API (JPA) ist seit
dem JDK 5 Bestandteil von Java und vereinigt die Frameworks der <a name="ixa103334"><i>Java
Data Objects</i></a> (JDO) und der <a name="ixa103335"><i>Entity Bean</i></a>s
(EJB). W&auml;hrend erstere f&uuml;r die Java Standard Edition zugeschnitten
waren, konnten die leistungsf&auml;higeren EJBs nur in einem J2EE
Application Server zur Ausf&uuml;hrung gebracht werden. Die neue Technologie
vereint nun die Vorteile beider Welten und l&auml;sst sich sowohl
mit der Standard Edition als auch mit der Enterprise Edition verwenden.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#FF9900">
<tr>
<td><font color="#FFFFFF">&nbsp;JDK1.1-6.0&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
</tr>
</table>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Da das Java Persistenz API gleich zwei weit entwickelte Technologien
vereint, deren Anwendungsgebiet vor allem in gro&szlig;en und komplexen
J2EE-Applikationen liegt, gehen die M&ouml;glichkeiten dieses Frameworks
weit &uuml;ber die Java Standard Edition hinaus. Insofern soll dieses
Kapitel vor allem eine neue Technologie vorstellen und den Leser anregen,
sich m&ouml;glicherweise tiefer mit dieser zu besch&auml;ftigen. Eine
vollst&auml;ndige Einf&uuml;hrung w&uuml;rde den Rahmen dieses Buches
bei weitem sprengen. 

<p>
Sollten Sie kein Interesse an einer weiteren Zugriffsschicht f&uuml;r
Datenbanken haben, k&ouml;nnen Sie dieses Kapitel auch &uuml;berspringen
und direkt zu <a href="k100292.html#kapitelnetzwerkprogrammierung">Kapitel 46</a>
&uuml;bergehen. </td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF">&nbsp;Hinweis&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>


<!-- Section -->
<a name="sectlevel3id045001001"></a>
<h3>45.1.1 Bezug und Installation </h3>

<p>
Das Persistenz API ist noch kein fester Bestandteil der Java Standard
Edition, sondern kann von der Homepage <a href="http://java.sun.com/javaee/technologies/persistence.jsp">http://java.sun.com/javaee/technologies/persistence.jsp</a>
heruntergeladen werden. &Auml;hnlich wie mit JDBC liefert Sun mit
dem Java Persistenz API dabei zun&auml;chst nur einen Satz standardisierter
Schnittstellen, die anschlie&szlig;end von einer Implementierung ausgef&uuml;llt
werden m&uuml;ssen. 

<p>
Zum Gl&uuml;ck gibt es eine Reihe freier OpenSource-Implementierungen.
So etwa das in diesem Buch verwendete Hibernate-Framework, das sich
auch auf der beiliegenden DVD findet oder von der Homepage <a href="http://www.hibernate.org">http://www.hibernate.org</a>
heruntergeladen werden kann. &Auml;hnlich wie beim Datenbank-Treiber
ist es hierbei wichtig, dass die Klassen der Implementierung (JAR-Dateien)
im Classpath des Programms enthalten und damit dem Java-Programm bekannt
sind. 

<p>
Um die in diesem Kapitel vorgestellten Beispiele auszuf&uuml;hren,
k&ouml;nnen wir einfach die auf der DVD im Ordner <font color="#660099">install/persistenz</font>
hinterlegten JAR-Archive in den Classpath integriert werden. Sollten
Sie das Framework stattdessen von der Homepage herunterladen, so ben&ouml;tigen
Sie die Pakete <i>Core</i> und <i>Annotations</i> des Hibernate-Projektes.
Die Verwendung des Classpath wird unter anderem in <a href="k100087.html#sectionclasspath">Abschnitt 13.4.1</a>
vorgestellt. 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Genaugenommen stand das Hibernate-Framework bei der Entwicklung des
Persistenz API sogar Pate. Viele Aspekte wurden zun&auml;chst in diesem
Framework verwirklicht und erst im Nachhinein von Sun adaptiert. So
k&ouml;nnte man das Hibernate-Framework sogar ohne den &#187;Aufsatz&#171;
der Persistenz API verwenden. Oder die &#187;unter der Haube&#171;
des JPA verwendete Implementierung einfach gegen eine andere austauschen.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF">&nbsp;Hinweis&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>

<p>
Als Datenbank soll auch in diesem Kapitel die bereits bekannte HSQLDB
mit den Tabellen der <i>DirDB</i> dienen, die in <a href="k100268.html#dirdb">Abschnitt 42.3</a>
beschrieben wurde. Doch anstatt die Eintr&auml;ge &uuml;ber Verzeichnisse
und Dateien mit SQL auszulesen, werden wir uns in diesem Kapitel entsprechender
Javaobjekte bedienen. 
<hr>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
Wesley, Version 5.0.1
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100287.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100287.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100289.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100292.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>