Mittwoch, 17. November 2010

Tag 3: 12:00 - 13:00: Java Persistence 2.0

Die Java Persistence API in der Version 2.0 ist Teil von JEE 6, aber auch Standalone einsetzbar. Sie ist Bestandteil von GlassFish v3. Als Referenzimplementierung dient EclipseLink.

Der Vortrag beschreibt die wesentlichen Neuerungen von JPA 2.0. Hier einige Ausszüge.

In Collections der Art Collection<AClass> kann AClass eine Klasse, aber auch ein Elementartyp sein. Durch die Verwendung von @ElementCollection plus @Embeddable wird in der Datenbank zusätzlich eine Mappingtabelle angelegt, welche neben der Id entweder eine Spalte für den Elemntartyp oder Spalten für sämtliche Attribute von AClass enthält. Das genaue Verhalten ist durch weitere Annotations konfigurierbar.

Die Annotation @OrderColumn erzeugt extra Spalte, über die sich eine Sortierung abbilden lässt. Eine Laufzeitsortierung erlaubt @OrderBy.

Die Java Persistence Query Language (JPQL) wird sprachlich erweitert um

  • KEY, VALUE
  • CASE
  • "Restricted polimorphism"
  • "Collection valued input parameter"
Der Vortrag hat auch bekannte und neue Interfaces der Criteria API vorgestellt, als da wären:
  • CriteriaQuery
  • CriteriaBuilder
  • Root
  • Join, ListJoin, MapJoin
  • Path
  • Subquery
  • Parameter
  • TypedQuery
  • Tuple
  • TupleElement
Neu ist die Metamodel API, welche eine abstrakte "schema-level" Sicht auf die Managed Classes der Persistence Unit ermöglicht. Diese View wird im Hintergrund automatisch generiert (Zugriff via EntityManagerFactory.getMetamodel()), ist aber im Wesentlichen nur für Frameworks sinnvoll.

Zum Locking lässt sich folgendes zusammenfassen.

Parametrierung:
  • Optimistic locking erfolgt auf Basis von @Version
  •  Insgesamt wurde die Parametrierung des Lockings von der Namensgebung her vereinheitlicht: OPTIMISTIC(READ), OPTIMISTIC_FORCE_INCREMENT(WRITE), PESSIMISTIC_READ, PESSIMISTIC_WRITE, PESSIMISTIC_FORCE_INCREMENT
API:
  • EntityManager: lock, find, refresh
  • Query methods: setLockMode, setHint
  • NamedQuery Annotation: lockMode element
  • PessimisticLockException
  • LockTimeoutException
Die Validierung basiert auf JSR303 und kennt als Lifecycle-Methoden PrePersist, PreUpdate, PreRemove.

Und last but not least wurde auch der 2nd Level Cache modernisiert:

  • APIs und Kontroll-Optionen wurden hinzugefügt/erweitert (aus Portabilitätsgründen)
  • In der API tauchen nun Methoden auf wie evict, evictAll, contains
  • Annotation @Cacheable (ALL, NONE, ENABLE_SELECTIVE, DISABLE_SELECTIVE)
Früher oder später werden sämtliche Container-Hersteller JPAS 2.0 vollständig unterstützen, spätestens, wenn sie sich JEE 6-konform nennen wollen. Das Persistenzmodell wird auf mächtige Weise vereinheitlicht und relativ leicht bedienbar. Wenn möglich, dann in bestehenden aber auf jeden Fall in neunen Anwendungen einsetzen.

Keine Kommentare:

Kommentar veröffentlichen