Errata
Seite 27
Das hier abgebildete Klassendiagramm zeigt eine bidirektionale Assoziation zwischen Ticketbestellung und Konzert auf. Im Beispielcode besitzt die Klasse Konzert jedoch keine Referenz zu Ticketbestellung. Im Klassendiagramm sollte daher besser eine unidirektionale Beziehung zwischen den beiden Klassen dargestellt werden.
Vielen Dank an Thomas Geber!
Seite 140
Im Listing 5–16 hat die Methode sucheKonzerteWebOneWay() den Rückgabewert String, obwohl sie als @Oneway annotiert wurde. Das darf natürlich nicht sein. Aufgepasst hat hier Géraud Lenz. Danke!
Seite 205
Hier wird beschrieben, dass getReference() eine EntityNotFoundException wirft, wenn keine passende Persistent-Entity-Instanz gefunden wurde. Tatsächlich wird die Exception in der Regel erst beim ersten Zugriff auf die von getReference() gelieferte Referenz geworfen. Laut Spezifikation darf der Persistence Provider die Exception allerdings auch schon beim erfolglosen Aufruf von getReference() werfen.
Unser Respekt vor dem unbestechlichen Blick für’s Detail gebührt Oliver Zeigermann.
Seite 234
In Listing 8–47 ist für die Methode getRechnungsanschrift() der falsche Rückgabewert angegeben. Die Methode liefert ein Objekt vom Typ Rechnungsanschrift anstelle eines String:
@OneToOne
@JoinColumn(name="RECHNUNGSANSCHRIFT_ID")
public Rechnungsanschrift getRechnungsanschrift() {
return rechnungsanschrift;
}
Dieser Hinweis stammt von Hans Krüger, dem wir auch den Wunsch nach Sortierung der Errata nach Seitennummern verdanken.
Seite 248/249 *
Im Listing 8–65 hat sich ein Fehlerchen eingeschlichen: die Methoden getGenres() und setGenres() nutzen fälschlicherweise das interne Feld genre und nicht genres. Unser Dank geht nach Österreich an den aufmerksamen Leser Mario Kofler.
Seite 251
Entgegen der Modellierung auf der vorherigen Seite ist die Klasse Musiker nicht wie die Klasse Band auf der gleichen Seite von Interpret abgeleitet, was natürlich falsch ist. Vielen Dank dafür an Gerald Stich.
Seite 260–262 *
In Listing 8–80 und im dritten Absatz auf Seite 262 müssen die Elemente der Annotation @Column nicht secondaryTable, sondern table heissen. Ihre Bedeutung ändert sich dadurch aber nicht, sie verweisen auf die Sekundärtabelle.
Seite 275
In der “Joined Subclass”-Vererbungsstrategie sind die Einträge in den Tabellen der verschiedenen Vererbungshierarchieebenen über eine 1:1-Beziehung verbunden. Abbildung 8–31 zeigt aber fälschlicherweise eine 1:n-Beziehung.
Die korrigierte Abbildung 8–31:
Seite 301 *
Im Abschnitt “DISTINCT” hat sich der JPQL-Fehlerteufel eingeschlichen. Die Liste aller Veranstaltungsorte lässt sich mit der Abfrage
SELECT DISTINCT k.ort from Konzert k
ermitteln. Unser Dank gilt an dieser Stelle Michael Kaaden.
Seite 328 *
In der Beschreibung für beanName muss es heißen “…wird der Name der referenzierten…”. Unser Dank gebührt auch hier Mario Kofler.
Seite 336 *
Das Element <res-auth> ist nicht wie beschrieben verpflichtend, sondern stattdessen optional mit dem Default-Wert Container. Danke an Michael Glockenstein.
Seite 339/340 *
In Listing 10–23 muss es statt resource-env-ref-name und resource-env-ref-type jeweils resource-env-entry-name bzw. resource-env-entry-type heißen. Ein weiteres Dankeschön an Michael Glockenstein.
Seite 340 *
Im 2. Absatz von 10.7.4 sollte und wird es zukünftig heißen: “Der Name der zu injizierenden Umgebungsvariablen wird über…”. Dank dem ästhetischen Sprachempfinden von Michael Glockenstein.
Seite 345 *
Der PersistenceContextType des zweiten PersistentContexts in Listing 10–29 muss ebenfalls TRANSACTION sein, da EXTENDED nur für Stateful Session Beans erlaubt ist. Ein weiterer Fund von Michael Glockenstein.
Seite 351/352 *
Im Listing 10–37 fehlt die Angabe des Elements <persistence-unit-name>.
Vollständig lautet das Element
<persistence-unit-name> ticket2rock </persistence-unit-name>
und sollte innerhalb von <persistence-unit-ref> direkt auf <persistence-unit-ref-name> folgen.
Des Weiteren fehlt ein “/” beim Abschluss des Elements enterprise-beans.
Ein weiteres “Dankeschön” geht nach Österreich an Mario Kofler!
Seite 358
Ein Interface kann natürlich ein anderes Interface nicht implementieren, sondern nur erweitern. Deshalb muss es natürlich im Listing 11–1 heißen:public interface SessionBean
extends javax.ejb.EnterpriseBean { ... }
Aufgepasst hat hier Georg Bogner. Danke!
Seite 367 *
In Listing 11–3 muss die Annotation @Stateless lauten und nicht @Stateful. Unser Dank geht an Michael Glockenstein!
Seite 383 *
In Tabelle 12–1 muss der Rückgabewert in der Signatur Object statt void lauten. Vielen Dank an Michael Glockenstein.
Seite 384 *
In Tabelle 12–3 muss der Rückgabewert in der Signatur für Default-Interzeptoren für Geschäftsmethoden Object statt void lauten. Vielen Dank an Michael Glockenstein.
Seite 386 *
Die Methodensignatur lautet korrekt:Object <METHOD>(InvocationContext) throws Exception
Vielen Dank an Michael Glockenstein.
Seite 391 *
In Abbildung 12–2 wurde für die Methoden 1 bis 7 fälschlicherweise der Rückgabewert void verwendet. Richtig ist Object. Herzlichen Dank an Michael Glockenstein.
Seite 391, 395 und 401 *
In den Abbildungen 12–2, 12–3 und 12–4 wurden aus Platzgründen die Parameterlisten in Methodensignaturen weggelassen. In den folgenden Methoden muss der InvocationContext als Parameter übergeben werden: Abb. 12–2, Methode 1 bis 7; Abb. 12–3, Methode 1 bis 6. In Abb. 12–4, Methoden 1 bis 4 muss der Parameter vom Typ der Entity sein. Vielen Dank an Michael Glockenstein.
Die korrigierte Abbildung 12–2:
Die korrigierte Abbildung 12–3:
Die korrigierte Abbildung 12–4:
Seite 421 *
Abgesehen davon, dass die schließende spitze Klammer in der @DenyAll-Zeile fehlt, in der @PermitAll-Zeile sollte noch <unchecked> und in der @DenyAll-Zeile noch <exclude-list> als DD-Element erwähnt werden. Auch hier hat wieder Michael Glockstein aufgepasst!
Seite 425
Im Listing 14–7 muss die Annotation natürlich @RolesAllowed heißen. Unseren kreativen aber leider falschen Versuch mit @AllowRoles hat Daniel Christophis sofort durchschaut. Vielen Dank dafür!
Seite 426/427 *
Im Kapitel 14.7 schreiben wir bei “Verwendung von @RunAs unterbinden” fälschlicherweise von “<user-caller-identity>”, dies muss richtig heißen “<use-caller-identity>”. Vielen Dank an Torsten Sina für diesen Hinweis.
Seite 431
Es heißt natürlich nicht “Besonders an Herz legen möchten wir Ihnen…”, sondern “Besonders ans Herz legen möchten wir Ihnen…” Danke an Gerald Stich!
Seite 444*
In Listing 15–6 in der Methode testDeleteVeranstaltungsort() in der vorletzten Zeile ist das Objekt nicht null. Die Assertion würde fehlschlagen. Stattdesen sollte hier mit assertFalse(em.contains(ort)) überprüft werden, ob der Entity Manager das Objekt wirklich nicht mehr kennt. Dank an Michael Glockenstein!
Seite 444*
In Listing 15–6 in der Methode testUpdateVeranstatungsort() fehlt zum Abschluss das Rollback mittels em.getTransaction().rollback(). Auch hier vielen Dank an Michael Glockenstein!
Seite 459*
In Listing 16–1 haben wir beseelt von EJB3 die javax.ejb.CreateException unterschlagen, die in der create()-Methode des Home Interface der referenzierten Session Bean deklariert ist. Hier müsste also ein try/catch um den Aufruf gelegt werden, da die mit @PostConstruct annotierte Methode einer EJB3-Session-Bean keine deklarierte Exception werfen darf. Vielen Dank an Carl Anders Düvel!
Seite 476*
In Listing 16–14 müssen die Getter- und Setter-Methoden natürlich implementiert werden. Getter mit return *; und Setter mit this.* = *;. Vielen Dank an Michael Glockenstein!
Literaturverzeichnis *
Eines weiterer Hinweis aus der Leserschaft (Merci, Nelli!): Leider ist das Literaturverzeichnis unvollständig abgedruckt. Es fehlen die folgenden Einträge:
[Oestereich06] Bernd Oestereich: Objektorientierte Softwareentwicklung – Analyse und Design mit der Unified Modeling Language. 8. überarbeitete Auflage. München Wien: Oldenbourg 2006
[OracleForms] http://www.oracle.com/technology/products/forms/
[PicoContainer] http://www.picocontainer.org
[Pitchfork] http://www.interface21.com/pitchfork
[Rainsberger04] J. B. Rainsberger: JUnit Recipes. New York: Manning (2004)
[Ruby] http://www.ruby-lang.org/
[SOAP] http://www.w3.org/TR/soa
[Spring] http://www.springframework.org
[TestNG] http://testng.org/
[TopLink] http://www.oracle.com/technology/products/ias/toplink/
[UML] http://www.uml.org/
[Vasseur] A. Vasseur: EJB 3 and AOP: the EJB interceptor dilemma
[WSDL] http://www.w3.org/TR/wsdl
[XDoclet] http://xdoclet.sourceforge.net/xdoclet/
[XMLUnit] http://xmlunit.sourceforge.net/
Die mit einem * markierten Fehler sind im ersten korrigierten Nachdruck von 2009 nicht mehr enthalten.