EJB 3.x und JPA Tutorials
Die Seite fasst die Neuerungen der Spezifikation zu EJB3 (JSR 220) zusammen und verweist auf Seiten, die sich mit Entity-Beans, Session Beans und Message Driven Beans auseinandersetzen.
Änderungen von EJB 3.0 und JPA 1.0
- Metadaten werden durch Annotationen beschrieben.
- Deployment-Deskriptoren sind nicht nötig, können aber ebenfalls Metadaten beschreiben, wenn Annotationen nicht gewünscht sind. Das ist insbesondere praktisch bei den Mapping-Informationen der Entity-Beans, die somit nicht zwingend im Quellcode stehen müssen.
- Viele vordefinierte Einstellungen und nur die Ausnahmen von den Regeln werden spezifiziert.
- Home-Interfaces sind nicht mehr nötig, eine Session-Bean hat nur ein Business-Interface. Entity-Beans sind remote nicht zugänglich, daher ist kein Component- und Home-Interface nötig.
- Keine Bean muss eine
javax.ejb
-Schnittstelle wieEntityBean
,SessionBean
,MessageDrivenBean
implementieren und Callback-Methoden anbieten, die vielleicht sowieso nicht aufgerufen werden. (Etwa bei Stateless-SessionBeans die Methoden für Passivierung/Aktivierung.) - Falls es zum Beispiel eine remove-Methode geben muss, wird diese annotiert. Für eine Methode wie
setSessionContext(...)
wird Setter-Injection genutzt. Somit funktionieren die Aufrufe auch ohne Callback-Methoden über ein Interface. - Keine Klasse implementiert (und Schnittstelle erweitert) die Markierungsschnitstelle Remote.
- Exceptions müssen nicht mehr deklariert werden. (Ein Ärgernis mit dem Business-Interfaces für den lokalen und remote Fall).
- EJB 3 Entity-Beans sind ›Plain Old Java Objects‹ (POJOs) und nicht mehr abstrakt. Die Objekte sind viel leichter zu testen und ein First-Test-Ansatz ist damit viel leichter.
- Es lassen sich Entity-Beans objektorientiert modellieren, denn Vererbung ist möglich.
- EJB-QL wird mit Projektion, Inner und Outer Join, Bulk-Updates, Bulk-Deletes, Sub-Queries und GROUP BY vervollständigt.
Änderungen von EJB 3.1 und JPA 2
- Die lokale Schnittstelle (local view) einer lokalen Session Bean kann nun entfallen, da direkt die öffentlichen Methoden als Schnittstelle verwendet werden können. Eine lokale Session Bean muss daher keine Schnittstelle mehr implementieren, um injiziert zu werden und Methoden anzubieten.
- EJBs müssen nicht mehr in einem EAR-Archiv verpackt sein, sondern können einfach in einem WAR deployed werden. Im Fall von WAR-Archiven liegen dann die Klassen unter WEB-INF/classes.
- Mit der Annotation
@Singleon
lässt ein Singleton markieren, sodass sich eine Session Bean (die auch Business Schnittstellen implementieren kann) von unterschieden Stellen nutzen lässt, aber eben nur einmal in der JVM vorhanden ist. - Die Annotation
@Startup
ist ein Zusatz für@Singleton
, um über das Hoch-/Runterfahren des Applikationsservers informiert zu werden. Die Callbackmethoden nutzen das bekannte@PostConstruct
und@PreDestroy
. - Der EntityManager erlaubt ein
detach(...)
. - Embeddable's können in JPA 2.0 geschachtelt sein und Relationen eingehen.
- Weitere Mappings bei JPA-Tabellen. Map-Keys können nun einfache Objekte, Entities und embedded Entities sein.
- Bisher konnten etwa 1:n-Assoziationen immer nur Verweise auf Entity-Beans realisieren, aber keine Sammlungen etwa von Strings oder Datums-Objekten. Das ändert sich mit JPA 2.0, das Collections von Elementen erlaubt. Hier zieht JPA eine Collection-Table heran.
- Die Entities im Persistence Context eines Entity-Managers sind in einem Cache, dem Level 1 Cache. Bei zwei Entity-Managern ist es implementierungsabhängig, wie zum Beispiel zwei gleiche Entity-Beans in den beiden EM gehalten werden. Das bestimmt ein Level 2 Cache. Dieser Level 2 Cache lässt sich über die Shared Cache API von JPA 2.0 rudimentär kontrollieren.
- Mit einer @Version-Spalte erlaubt JPA 1.0 schon immer optimistisches Locking, allerdings nur optimistische Lese- oder Schreib-Sperren. Mit JPA 2.0 wird über die Enum LockMode nun Optimistisches und auch Pessimistisches Locking unterstützt.
- Eine neue Criteria-API kommt in JPA 2.0 und damit neue Typen wie QueryBuilder, CriteriaQuery. Die API folgt dem Fluent-Interface Prinzip, etwa wie bei criteriaQuery.select(entity.get("id")).where(queryBuilder.cojunction(queryBuilder.equals(...), ...)).
- JPA-QL kennt für Datumswerte nun auch Literale.
- JPA-QL unterstützt polymorphe Anfragen der Art WHERE CLASS(e) = Klassenname.
- JPA-QL ermöglicht CASE-Anfragen wie eine Fallunterscheidung.
- JPA-QL erlaubt in der WHERE-Klausel Zugriff auf den Index einer Liste.
Spezifikation (Final seit Mai 2006)
- EJB 3.0 Final Release
- Eava EE 7 Annotations PDF Cheat Sheet (Philipp Meier)
EJB allgemein
- EJB 3 Development for Glassfish using Eclipse 3.2 Tutorial
- Glassfish EJB 3 FAQ
- Java EE 5 Blueprints (Sun)
- Don't Overload EJB 3 Lifecycle and Interceptor Methods (Mai 2006)
- Enterprise JavaBeans 3.0 Public Review Version Introduction and Overview
- Programming WebLogic Enterprise JavaBeans, Version 3.0
- Standardizing Java Persistence with the EJB3 Java Persistence API (Debu Panda, Mai 2006)
- Using Dependency Injection in Java EE 5.0 (Debu Panda, Mai 2006)
- Java EE 5 Tutorial, Kapitel 4, Persistence (Sun)
- Do's and Don'ts for JavaEE Resource Injection (März 2006)
- A Test-Driven Exploration of the Advanced Features of EJB 3.0 (Rod Coffin, Februar 2006)
- Getting Started with EJB 3.0 Persistence out-of-container using the Reference Implementation (GlassFish) (Lucas Jellema, Dezember 2005)
- Java EE 5 Persistence Demo (November 2005, Pavel Buzek). NetBeans und GlassFish
- Simplifying EJB Development with EJB 3.0 (TheServerSide.COM, Debu Panda von Oracle, Oktober 2004)
- EJB 3.0 Tutorial (JBoss)
- EJB 3.0 in a nutshell (JavaWorld, Anil Sharma, August 2004)
- EJB 3.0 Migration (Oracle White Paper, Oktober 2005)
- EJB 3 Glossary
- The New EJB 3.0 Persistence API (Vortrag mit Sprache von JavaPolis 2004, TheServerSide.com, BeJUG)
- Preparing for EJB 3.0 (Mike Keith, Oracle)
JPA im Speziellen, JPA-Tutorials
- GlassFish Project - Java Persistence API - Frequently Asked Questions
- OpenJPA Documentation. OpenJPA geht auf Kodo (von Bean, früher SolarMetric) zurück
- JPA Annotation Reference. Beschreibung von Oracle
- Introduction to the EJB 3 Java Persistence API (Patrick Linskey)
- The Java Persistence API - A Simpler Programming Model for Entity Persistence (Rahul Biswas und Ed Ort, Mai 2006)
- EJB Persistence with Java Standard Edition (DJ Walker-Morgan, März 2006)
- EJB 3.0 Persistence - Workshop Materiaal (Februar 2006, AMIS Technology)
- EJB3.0 many-to-many relation in action (IT-Eye, Februar 2006)
- Banish Your Resistance to Persistence with the EJB 3.0 Persistence API (Rod Coffin, Dezember 2005)
Diskussionen
- Whats Wrong With Ejb? (Kritik auf der bekannten http://c2.com/cgi/wiki/-Seite)
- EJB 3.0 Announcement at TheServerSide Symposium
- Does EJB 3.0 really make application development easy?
- EJB 3.0 Early Draft 2 und JSR 220, EJB 3.0, posts public review (Ankündigung vom Standard auf TheServerSide)
- JBoss EJB 3.0 Preview Release (Ankündigung von Bill auf TheServerSide)
- POJO Application Frameworks: Spring Vs. EJB 3.0 (Michael Juntao Yuan, OnJava, Juni 2005)
- State of the Art" for Java, EE (Mats Henricson, Juli 2005)
- EJB 3 Callbacks (Cedric, August 2004)
Neues zu EJB 3.1 und JPA 2.0
Implementierungen
- GlassFish (Referenzimplementierung der Java EE 5)
- JBoss AS (seit 4.0.2)
- Apache Genronimo 2, Java EE 5.0 Container mit TCK
- Oracle (seit 10g)
- Bea Systems. Wählt eine interessante Implementierung über Spring (Pitchfork)
- OpenJPA. JPA-Implementierung auf der Basis von Kodo
- Resin 3.0.x von Caucho
Einige Server (wenn ich IBM sage, weiß jeder Bescheid), brauchen bei der Umsetzung etwas länger. Hier die Zahlen aus einem Beitrag "App Server Powers Race To Embed Java EE 5 Support. Sun and BEA get in early, JBoss not far behind, IBM lags" (Dr. Dobbs, Oktober 2006).
EJB 3 Schulung
Das dreitägige EJB 3-Seminar vermittelt ebenso alle Neuerungen im Bereich Session-Beans (mit Web-Services), Entity-Beans und Message Driven-Beans.