Java EE kurz & gut
Von Arun Gupta
Beschreibung
- Verstehen, wie die Java EE 6-Features mit Design Patterns in Web- und Enterprise-Anwendungen zusammenhängen
- Die nötigen Spezifikationen finden, um die eigene Anwendung Java EE-fähig zu machen
- Neuerungen bei Enterprise JavaBeans (EJB), JavaServer Faces (JSF) und anderen Komponenten kennenlernen
- Java EE 6-Web Profile entdecken, die den früheren "One Size Fits All"-Ansatz ersetzen
- Die Contexts and Dependancy Interjection (CDI) und die Java API für RESTful Webservices einsetzen
- Die Java EE-Entwicklung mit Netbeans und GlassFish starten
Über den Autor
Ähnlich wie Java EE kurz & gut
Ähnliche Bücher
Raspberry Pi für Einsteiger von Matt Richardson Bewertung: 0 von 5 Sternen
Verwandte Kategorien
Buchvorschau
Java EE kurz & gut - Arun Gupta
Java EE
kurz & gut
Arun Gupta
Thomas Demmig
Inhalt
Vorwort
In diesem Buch genutzte Konventionen
Danksagungen
1. Java Platform, Enterprise Edition
Einführung
Deliverables
Was ist neu in Java EE 6
2. Managed Beans
Ein Managed Bean definieren und einsetzen
Lifecycle Callback
3. Servlets
Servlets
Servletfilter
Event Listener
Asynchrone Unterstützung
Web Fragments
Security
Resource Packaging
Error Mapping
Umgang mit Multipart Requests
4. Java Persistence API
Entitäten
Persistence Unit, Persistence Context und Entity Manager
Entitäten erstellen, lesen, aktualisieren und löschen
Entitäten validieren
Transaktionen und Locking
Caching
5. Enterprise JavaBeans
Stateful Session Beans
Stateless Session Beans
Singleton Session Beans
Message-driven Beans
Portable Global JNDI Names
Transaktionen
Asynchron
Timer
Embeddable API
EJB.Lite
6. Contexts and Dependency Injection
Injection Points
Qualifier und Alternative
Producer und Disposer
Interceptor und Decorator
Scopes und Kontexte
Stereotype
Events
Portable Erweiterungen
7. JavaServer Faces
Facelets
Ressourcen-Handling
Composite Components
Ajax
HTTP GET
Server und Client Extension Points
Navigationsregeln
8. SOAP-basierte Webservices
Webservice-Endpoints
Provider-basierte Dynamic Endpoints
Endpoint-basierte Endpoints
Webservice-Client
Dispatch-basierter dynamischer Client
Handler
9. RESTful Webservices
Einfache RESTful Webservices
HTTP-Methoden binden
Mehrere Ressourcendarstellungen
Requests an eine Ressource binden
Exception Mapping
10. Java Message Service
Eine Nachricht verschicken
Quality of Service
Eine Nachricht synchron empfangen
Eine Nachricht asynchron empfangen
Temporäre Ziele
11. Bean Validation
Eingebaute Constraints
Einen eigenen Constraint definieren
Validierungsgruppen
Integration mit JPA
Integration mit JSF
A. Entwicklungsumgebung und Deployment für Java EE 6
B. Weitere Literatur
Webtechnologie-Spezifikationen
Enterprise-Technologie-Spezifikationen
Webservice-Technologien
Management- und Sicherheitstechnologien
Kolophon
Stichwortverzeichnis
Für Menka, meine geliebte Frau und beste Freundin. Deine Unterstützung und deine Ermutigung sorgen dafür, dass unser Leben Spaß macht und Sinn hat.
Für Aditya und Mihir, meine zwei fröhlichen Jungs, die mit mir spielen und mich aktiv halten.
Vorwort
Die Java EE 6-Plattform hat die einfache Entwicklung mit Java im Enterprise-Umfeld auf eine neue Ebene gehoben. Dieses Buch richtet sich an Leute, die einen schnellen Überblick über die Plattform erhalten wollen, um danach die Grundlagen zu erlernen.
Das Buch bietet einen Überblick über die Schlüsselspezifikationen der Java EE 6-Plattform (eine Spezifikation pro Kapitel). Die wichtigsten Konzepte der verschiedenen Spezifikationen werden erklärt und Beispiele dazu vorgestellt. Sie müssen nichts über frühere Versionen der Plattform wissen. Allerdings ist ein grundlegendes Verständnis von Java notwendig, um den Code zu verstehen.
In diesem Buch genutzte Konventionen
Die folgenden typographischen Konventionen werden in diesem Buch verwendet:
Kursiv
Steht für neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen.
Nichtproportionalschrift
Wird für Programmcode genutzt – auch innerhalb von Fließtext –, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.
Kursive Nichtproportionalschrift
Zeigt Text an, der durch eigene Werte oder kontextabhängige Werte ersetzt werden sollte.
Danksagungen
Dieses Buch wäre nicht möglich geworden ohne die Unterstützung von sehr vielen Leuten.
Zu allererst bedanke ich mich bei O'Reilly für das Vertrauen in mich und für die Möglichkeit, dieses Buch zu schreiben. Ihr Team hat mich beim Schreiben, Überarbeiten, Korrekturlesen und Veröffentlichen exzellent unterstützt.
Bei O'Reilly hat mir Michael Loukides geholfen, die Grundlagen für das Buch zu legen. Meghan Blanchette war in allen Phasen der Entstehung eine außerordentlich große Hilfe, indem sie den Text schon zwischendurch begutachtete, Feedback zur Darstellung gab, Fachlektoren organisierte und mich bei Bedarf mit den richtigen Ansprechpartnern im Team zusammenbrachte. Jessica Hosman hat mir beim Einstieg in das Autorenleben geholfen und mich weiter begleitet.
Emily Quill und Kristen Borg haben beim Lektorieren geholfen und sichergestellt, dass auch die Kleinigkeiten stimmen. Vielen Dank auch an die anderen Mitglieder des O'Reilly-Teams, mit denen ich nicht direkt zu tun hatte, die aber auch zum Gelingen des Buchs beigetragen haben.
Das Korrekturlesen und das Fachlektorat wurden von Markus Eisele (@myfear, http://blog.eisele.net), John Yeary (@jyeary, http://javaevangelist.blogspot.com) und Bert Ertman (@BertErtman, http://bertertman.wordpress.com) vorgenommen, so dass sichergestellt ist, dass die entscheidenden Dinge auch richtig dargestellt sind. Ihre umfangreiche Erfahrung und ihr Wissen haben sich an der Tiefe ihrer Kommentare gezeigt.
Ich bin Entwicklern auf der ganzen Welt für die zahlreichen Diskussionen dankbar, die mein Verständnis der Technologie verbessert haben. Vielen Dank meinen Kollegen bei Oracle und den JSR Specification Leads, die mir die Anwendungsfälle der verschiedenen Technologien erklärt haben. Und vielen Dank an jeden anderen in meinem Leben, der mir die nötigen Pausen von Schreiben verschafft hat.
Kapitel 1. Java Platform, Enterprise Edition
Einführung
Die Java Platform, Enterprise Edition (Java EE) bietet eine auf Standards aufbauende Plattform für das Entwickeln von Web- und Enterprise-Anwendungen. Diese Applikationen sind im Allgemeinen als Multitier-Anwendungen entworfen – mit einer Frontend-Schicht bestehend aus Web-Frameworks, einer Middleware-Schicht, die sich um die Sicherheit und Transaktionen kümmert, und einer Backend-Schicht, die die Verbindung zu einer Datenbank oder einem Legacy-System umsetzt. Die Java EE Platform definiert APIs für die verschiedenen Komponenten in jeder Schicht und bietet dazu weitere Dienste an, zum Beispiel Namensräume, Einbinden und Ressourcenverwaltung, die für die gesamte Plattform genutzt werden können. Jede Komponente ist in einer eigenen Spezifikation definiert, die auch die API, Javadocs und das erwartete Verhalten beschreibt.
Die Java Platform, Enterprise Edition 6 (Java EE 6) wurde im Dezember 2009 veröffentlicht. Sie bietet einen einfachen, leicht zu verwendenden Stack für das Bauen solcher Anwendungen. In der älteren Version der Plattform (Java EE 5) gab es die ersten Schritte für eine vereinfachte Entwicklung. Die Java EE 6 Platform sorgt für eine noch bessere Produktivität und bietet viel mehr Funktionalität.
Die drei wichtigsten Ziele der Plattform sind folgende:
Einfache Anwendung
Die Java EE 6 Platform vereinfacht die Entwicklung erneut drastisch, indem sie sehr oft Konvention statt Konfiguration einsetzt und auf Annotationen für ein Plain Old Java Object (POJO) zurückgreift. Indem Sie ein POJO um @Stateless, @Stateful oder @Singleton ergänzen, machen Sie es zu einem Enterprise JavaBean. Zudem lässt sich dies einfach in einer WAR-Datei verpacken, statt eine Spezialvariante von JAR oder EAR zu verwenden. Servlets sind ebenfalls POJOs, versehen mit der Annotation @WebServlet. Deployment Descriptors wie web.xml und faces-config.xml sind in den meisten Fällen optional – die Informationen, die im Allgemeinen in ihnen abgelegt sind, finden sich nun in Annotationen. Es gibt Standardregeln, wie man von einer JSF-Seite zu einer anderen navigiert. Um ein POJO als REST-Webservice zu veröffentlichen, muss man nur die Annotation @Path ergänzen.
Indem die Deployment Descriptors optional wurden, Konvention der Konfiguration vorgezogen und stark auf Annontationen aufgebaut wurde, lässt sich die Java EE 6 Platform einfacher verwenden und es muss insgesamt auch weniger geschrieben werden.
Leichtgewichtigkeit
Es gibt für die Java EE 6 Platform 31 Komponentenspezifikationen, die Sie im Anhang EE.6 der Plattformspezifikation finden. Zu diesen Komponenten gehören Enterprise JavaBeans (EJB), Servlets, JavaServer Faces (JSF), Java API for RESTful Web Services (JAX-RS) und viele weitere. Für den Bau einer typischen Enterprise-Anwendung werden Sie nicht unbedingt alle benötigen. Zudem waren manche der Technologien wie Java API for XML Registries (JAXR) oder Java API for XML-based RPC (JAX-RPC) zwar wichtig, als sie in die Plattform eingebracht wurden. Aber nun wurden sie durch bessere Komponenten ersetzt, zum Beispiel Java API for XML Web Services (JAX-WS), oder sind nicht mehr im Einsatz.
Die Java SE Expert Group hat einen zweistufigen Prozess definiert, mit dem Features von der Plattform genommen wurden. In diesem Prozess – als Pruning bezeichnet – wird ein Feature in einem Release als optional gekennzeichnet (proposed optional). In einem folgenden Release wird dann entschieden, das Feature tatsächlich zu entfernen, es als erforderliche Komponente beizubehalten oder es im Status proposed removal zu belassen. Die Java EE Expert Group hat einige Features mit diesem Prozess behandelt. Das ist wie das Beschneiden eines Rosenstrauchs im Frühjahr, damit neue Blüten wachsen können: Durch das Pruning von ungenutzten Features wird sichergestellt, dass trotz Hinzufügen neuer Features die Plattform einfach und leichtgewichtig bleibt.
Die Java EE Platform führt auch den Begriff des Profils ein. Ein Profil ist eine Konfiguration auf der Plattform, die an eine bestimmte Klasse von Anwendungen angepasst ist. Dabei kann es sich um eine Unter- oder Obermenge der Technologien auf der Plattform handeln. Das Java EE 6 Web Profile ist als eigenständige Spezifikation für die Plattform definiert, wobei es sich um eine Untermenge der Technologien der Plattform handelt. Es ist für die Entwicklung moderner Webanwendungen angepasst. Damit fällt der »One Size Fits All«-Ansatz früherer Releases weg. Und auch wenn es sich »nur« um eine Untermenge handelt, ist diese doch so umfassend, dass ein Großteil der Standard-APIs enthalten ist und ohne Anpassungen viele unterschiedliche Web-Anwendungen damit geschrieben werden können. Das Webprofil ermöglicht es dem Entwickler, Web-Anwendungen schnell bauen zu können. Zudem wird verhindert, dass immer mehr eigene Web-Stacks entstehen, welche in Bezug auf Wartungsfragen nur von Nachteil sein können. Weitere Profile können definiert werden, indem man dem Java Community Process (JCP) folgt.
Durch Pruning und Web-Profile bleibt die Java EE 6 Platform also leichtgewichtig und gut wartbar.
Erweiterbarkeit
Die Plattform bietet eine umfangreiche Sammlung an Funktionen an, um Enterprise-Anwendungen zu erstellen. Trotzdem wird häufig auf Third-Party-Frameworks zurückgegriffen, um Funktionalität zu ersetzen oder zu ergänzen. Diese Frameworks müssen über einen ServletListener, einen ServletFilter oder eine ähnliche Komponente registriert werden, damit die Laufzeitumgebung sie erkennen kann. Die Servlet-Spezifikation definiert einen Web Fragment-Mechanismus, über den diese Einstiegspunkte in das Framework in der Framework-Bibliothek definiert werden. Die Servlet-Container registrieren dann das Framework, so dass sich der Entwickler nicht darum kümmern muss. So können die Frameworks wie ein integraler Bestandteil der Plattform behandelt werden.
Zusätzlich definiert die Contexts and Dependency Injection (CDI) Specification einen portablen Erweiterungsmechanismus, mit dem Sie die Plattform in unterschiedlicher Art und Weise ausbauen können – zum Beispiel durch das Bereitstellen bestimmter, vordefinierter Scopes. Ein neuer Scope kann dadurch mit einem beliebigen Java EE 6-kompatiblen Anwendungsserver einfach definiert und eingebunden werden.
Spezifikationen wie CDI, JavaServer Faces 2, Java API for RESTful Services, Java Persistence API 2 und Servlets 3 sorgen dafür, dass die Java EE 6 Platform noch leistungsfähiger ist. Dieses Buch bietet einen Überblick über die wichtigsten Technologien, die auf der Plattform eingesetzt werden, sowie leicht verständliche Codebeispiele, mit denen die Verbesserungen von Java EE 6 erläutert werden.
Deliverables
Die Java EE 6 Platform wurde als Java Specification Request 316 bzw. JSR 316 entwickelt (http://jcp.org/en/jsr/detail?id=316), wobei dem Java Community Process (JCP) 2.7 gefolgt wurde. Der JCP definiert drei wichtige Deliverables für jeden JSR:
Spezifikation
Ein formales Dokument, das die vorgeschlagene Komponente und ihre Features beschreibt.
Reference Implementation (RI)
Die binäre Implementierung der vorgeschlagenen Spezifikation. Die RI hilft dabei, sicherzustellen, dass die vorgeschlagenen Spezifikationen in Binärform implementiert werden können. Zudem erhält der Spezifikationsprozess so konstant Rückmeldung.
Technology Compliance Kit (TCK)
Eine Sammlung von Tests, die sicherstellen, dass die RI zur Spezifikation passt. So können mehrere Hersteller konforme Implementierungen liefern.
Java EE 6 besteht aus der Plattform-Spezifikation, die die Anforderungen definiert. Zudem enthält sie folgende Komponenten-Spezifikationen:
Web-Technologien
JSR 45: Debugging Support for Other Languages
JSR 52: Standard Tag Library for JavaServer Pages (JSTL)1.2
JSR 245: JavaServer Pages (JSP) 2.2 and Expression Language (EL) 1.2
JSR 314: JavaServer Faces (JSF) 2.0
JSR 315: Servlet 3.0
Enterprise-Technologien
JSR 250: Common Annotations for the Java Platform 1.1
JSR 299: Contexts and Dependency Injection (CDI) for the Java EE Platform 1.0
JSR 303: Bean Validation 1.0
JSR 316: Managed Beans 1.0
JSR 317: Java Persistence API (JPA) 2.0
JSR 318: Enterprise JavaBeans (EJB) 3.1
JSR 318: Interceptors 1.1
JSR 322: Java EE Connector Architecture 1.6
JSR 330: Dependency Injection for Java 1.0
JSR 907: Java Transaction API ( JTA) 1.1
JSR 914: Java Message Server (JMS) 1.1
JSR 919: JavaMail 1.4
Webservice-Technologien
JSR 67: Java APIs for XML Messaging (JAXM) 1.3
JSR 93: Java API for XML Registries (JAXR) 1.0
JSR 101: Java API for XML-based RPC (JAX- RPC) 1.1
JSR 109: Implementing Enterprise Web Services 1.3
JSR 173: Streaming API for XML (StAX) 1.0
JSR 181: Web Services Metadata for the Java Platform 2.0
JSR 222: Java Architecture for XML Binding (JAXB) 2.2
JSR 224: Java API for XML Web Services (JAX- WS) 2.2
JSR 311: Java API for RESTful Web Services (JAX-RS) 1.1
Verwaltungs- und Sicherheitstechnologien
JSR 77: J2EE Management API 1.1
JSR 88: Java Platform EE Application Deployment API 1.2
JSR 115: Java Authorization Contract and Containers (JACC) 1.3
JSR 196: Java Authentication Service Provider Interface for Containers (JASPIC) 1.0
Die einzelnen Komponeten arbeiten zusammen, um einen kombinierten Stack bereitzustellen (siehe Abbildung 1.1).
Abbildung 1.1 Java EE 6-Architektur
Was ist in Abbildung 1.1 zu sehen?
JPA, JTA und JMS stellen die