© Excellent backgrounds/Shutterstock.com
Kolumne: EnterpriseTales

Java Persistence API 2.1: Nur ein Minor Release?


Eine neue Version der Java-Persistence-API-(JPA-)Spezifikation steht vor der Tür. Grund genug, den ersten „Early Draft“ innerhalb der EnterpriseTales-Kolumne genauer zu untersuchen. JPA-Experte und Apache OpenWebBeans Committer Arne Limburg stellt die wesentlichen Neuerungen vor. Mehr als zwei Jahre nach dem Release der Version 2.0 des JPA-Standards wurde im Januar der erste Early Draft der nächsten Version dieses Standards veröffentlicht. Dieser trägt die Versionsnummer 2.1, was darauf hindeutet, dass es sich „nur“ um ein Minor Release handelt. Aber ist das tatsächlich so? Was gibt es tatsächlich für neue Features, und für wen lohnt es sich, früh auf diesen „Versionszug“ aufzuspringen?

Was lange währt, wird gut?

Um das gleich vorwegzunehmen: Eine sensationelle Neuerung, wie es zum Beispiel das Criteria API bei JPA 2.0 war, wird es mit JPA 2.1 nicht geben. Dennoch gibt es einige interessante Erweiterungen, auf die sich ein Blick lohnt. Allen voran geht dabei die Integration von Context Dependent Interchangeability (CDI). Wer nun aber hofft, in Zukunft jede CDI Bean in jede Entity Bean injizieren zu können oder ohne Umweg eine Entity Bean im CDI Context zur Verfügung zu haben, der wird enttäuscht. Aufgrund der stark unterschiedlichen Scopes und Lebenszyklen von CDI Beans und JPA Entity Beans entschied sich das Spezifizierungskomitee gegen eine so weitgehende Integration. Stattdessen wird es möglich sein, jede beliebige CDI Bean in einen JPA EntityListener zu injizieren. Aber auch dieses Feature bietet Raum für einige interessante Patterns. Eines davon kommt einem sofort in den Sinn, wenn man an die letzte EnterpriseTales-Kolumne [1] zurückdenkt, in der wir den aktuell angemeldeten Benutzer im CDI Context verfügbar gemacht haben. Da ist es doch naheliegend, diesen zu Auditing-Zwecken in einen EntityListener injizieren zu lassen, um ihn dann beim Anlegen und Ändern einer Entität direkt hinein zu schreiben und so protokollieren zu können, wer sie angelegt oder verändert hat. Die in der Entität benötigten Methoden können über eine Oberklasse zur Verfügung gestellt werden (Listing 1) zeigt.

Listing 1

@EntityListeners(AuditingListener.class) @MappedSuperclass public class AuditableEntity { ... public void setCreatedBy(String user) { createdBy = user; } public void setModifiedBy(String user) { modifiedBy = user; } }

Um einer solchen Entität nun bei Erzeugung und Veränderung den aktuellen Benutzer verpassen zu können, müssen wir den AuditingListener implementiere...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang