Mit Java EE 7 ist es recht einfach möglich, mehrschichtige Enterprise-Anwendungen zu programmieren. In der vierundfünfzigsten Episode des Anwendungsentwickler-Podcasts gibt es eine Lernzielkontrolle zur Enterprise Edition von Java.
TL;DR
Mit meiner Lernzielkontrolle zu Java EE 7 kannst du prüfen, wie gut du die Plattform und ihre Webtechnologien kennst. Java EE bündelt aufeinander abgestimmte Spezifikationen, deren APIs langlebige Anwendungen ermöglichen; ein Application-Server stellt die benötigte Infrastruktur bereit. Für die Praxis stehen JPA für den Datenbankzugriff sowie JSF für Weboberflächen im Mittelpunkt, ergänzt durch CDI und REST-Services mit JAX-RS. Wenn du Java EE in deinem Abschlussprojekt einsetzt, erwarte ich im Fachgespräch, dass du die verwendeten Technologien und ihre Zusammenhänge erklären kannst.
Kapitelmarken
[00:00:01] Einstieg in die Lernzielkontrolle zu Java EE 7
[00:01:20] Die Java-Editionen ME, SE und EE
[00:02:37] Java EE als Sammlung von Spezifikationen
[00:03:30] Versionsnummern von Java und Java EE
[00:04:15] WebSockets und langlebige standardisierte APIs
[00:06:00] Zusammenspiel der Spezifikationen
[00:07:37] Java Community Process und Specification Requests
[00:09:35] Container und Application-Server
[00:12:30] Server einrichten und verwalten
[00:12:55] Web Profile und Full Profile
[00:15:32] Beispiele für Application-Server
[00:16:54] Java-EE-Spezifikationen im Überblick
[00:18:07] APIs und Referenzimplementierungen
[00:19:17] Wichtige Referenzimplementierungen und ihre Aufgaben
[00:20:50] JPA: Objekte in Datenbanken speichern
[00:21:22] Entitäten mit @Entity und @Id kennzeichnen
[00:24:41] Beziehungen und Kardinalitäten mit JPA abbilden
[00:28:14] Daten mit JPQL und Criteria-API abfragen
[00:30:20] NoSQL mit Hibernate OGM anbinden
[00:31:33] Weboberflächen mit JSF und Backing Beans
[00:33:02] Expression Language und getrennte Seitenlogik
[00:34:19] HTTP-Requests mit Servlets verarbeiten
[00:34:45] Dependency Injection mit CDI
[00:36:41] Eindeutige und mehrdeutige Abhängigkeiten
[00:37:23] REST-Services mit JAX-RS und JSON
[00:38:57] AngularJS an Java EE anbinden
[00:39:51] Java EE im Abschlussprojekt und Fachgespräch
[00:41:04] Dokumentation und weiterführende Links
[00:41:39] CeBIT-Vortrag und Artikel zu relationalen Datenbanken
[00:42:45] Feedback und Newsletter
[00:43:27] Ausblick: Einstieg ins Abschlussprojekt
Inhalt
Welche Versionen von Java gibt es?
ME, SE, EE
Was ist Java EE?
Die Enterprise Edition. Eine Sammelspezifikation für mehrere Teilspezifikationen. Ermöglicht die Entwicklung von mehrschichtigen Enterprise-Anwendungen.
Wer definiert die Standards in Java EE?
Der Java Community Process bearbeitet Java Specification Requests.
Wie werden Java EE-Anwendungen ausgeführt?
In einem Container, dem Application Server.
Welche Profile gibt es in Java EE?
Web und Full
Welche Application Server gibt es?
WebSphere, Weblogic, JBoss, Wildfly, Glassfish, TomEE, Jetty, Tomcat
Wie heißen die Referenzimplementierungen für die zentralen Komponenten von Java EE?
JSF: Mojarra, JPA: EclipseLink, CDI: Weld, JAX-RS: Jersey, Bean Validation: Hibernate Validator, JAX-WS: Metro
Was ist JPA?
Java Persistence API
Wie persistiere ich meine Daten mit JPA?
Konfiguration in persistence.xml, Annotation @Entity, weitere Annotationen wie @Id oder @ManyToMany
Wie werden Daten abgefragt?
Mittels JPQL oder der Criteria API.
Kann man auch NoSQL-Datenbanken anbinden?
Ja, z.B. mit Hibernate OGM.
Was ist JSF?
Java Server Faces
Was ist ein Servlet?
Eine Java-Klasse, die Requests verarbeitet.
Was ist CDI?
Contexts and Dependency Injection
Was ist JAX-RS?
Java API for RESTful Web Services
Wie veröffentliche ich eine REST-Ressource?
Mittels Annotationen wie @Path, @GET und @Produces
Literaturempfehlungen
Die "offizielle" Dokumentation von Oracle ist definitiv einen Blick wert: Java Platform, Enterprise Edition: The Java EE Tutorial Release 7 - Contents.
Als deutschsprachiges Buch kann ich Professionell entwickeln mit Java EE 7* empfehlen:
*
Sehr geholfen haben mir auch die Pluralsight-Kurse von Antonio Goncalves.
Links
Permalink zu dieser Podcast-Episode
RSS-Feed des Podcasts
Java Platform, Enterprise Edition – Wikipedia
Difference between Java SE/EE/ME? - Stack Overflow
Java EE - Technologies | Oracle Technology Network | Oracle
Java Community Process – Wikipedia
Java Specification Request – Wikipedia
O Java EE 7 Application Servers, Where Art Thou? – Antonio's Blog
Introducing the Java EE Web Profile - JAXenter
Java EE Compatibility
Java Persistence API – Wikipedia
Java Persistence Query Language - Wikipedia, the free encyclopedia
JavaServer Faces – Wikipedia
Servlet – Wikipedia
Contexts and Dependency Injection – Wikipedia
Java API for RESTful Web Services – Wikipedia
Zusammenfassung
Java-Editionen und zeitlicher Kontext
Meine Lernzielkontrolle richtet sich an dich als IT-Azubi und behandelt Java EE 7 auf dem Stand der Aufnahme im März 2016. Die Beispiele entstehen mit Java 8, während Java EE 8 zu diesem Zeitpunkt noch vorbereitet wird. Die Versionsnummern der Sprache und der Enterprise-Plattform entwickeln sich eigenständig.
Zu den Java-Editionen gehören:
Java ME, Micro Edition: Eine reduzierte Variante für mobile Geräte und beispielsweise Set-Top-Boxen.
Java SE, Standard Edition: Sie umfasst die grundlegenden Java-Funktionen, mit denen du etwa Dateien verarbeitest oder Datenbankverbindungen aufbaust.
Java EE, Enterprise Edition: Sie enthält Java SE und ergänzt die Plattform um weitere APIs und Spezifikationen.
Was Java EE festlegt
Unter Java EE 7 sind 38 Spezifikationen zusammengefasst. Sie beschreiben Schnittstellen und legen fest, wie bestimmte Aufgaben gelöst werden, beispielsweise das Speichern von Objekten in einer relationalen Datenbank. Für die ausführbare Funktion sorgt jeweils eine Implementierung.
Wenn ich gegen diese standardisierten APIs programmiere, kann ich meine Anwendung auf einem anderen Server betreiben, der dieselben Spezifikationen erfüllt. Beim Weiterentwickeln der Plattform soll die Kompatibilität erhalten bleiben, damit Anwendungen über Jahre einsetzbar bleiben.
Als sogenannte Umbrella-Spezifikation stimmt Java EE die enthaltenen Standards aufeinander ab. Dadurch lässt sich etwa Dependency Injection innerhalb anderer Java-EE-Technologien einsetzen, wodurch weniger Code nötig wird, um die Komponenten miteinander zu verbinden. Mit Java EE 7 kommt unter anderem eine standardisierte WebSocket-API hinzu.
Wie neue Standards entstehen
Über den Java Community Process, JCP, durchläuft ein Java Specification Request, JSR, einen festgelegten Prozess vom Vorschlag bis zur fertigen Spezifikation. Die beteiligten Mitglieder prüfen unter anderem, welche Standards bereits existieren und wie sich ein Vorschlag umsetzen lässt. Dieser Prozess kann mehrere Jahre dauern.
JSRs betreffen auch Funktionen der Java-Sprache. Für eine neue Java-EE-Version werden passende Spezifikationen ausgewählt und so zusammengeführt, dass sie zusammenarbeiten.
Anwendungen im Container betreiben
Meine Java-EE-Anwendung deploye ich in einen Application-Server, der sie startet und als Container die Infrastruktur bereitstellt. Dazu gehören beispielsweise Datenbankverbindungen und benannte Dienste. Auch Queues für Messaging können dort bereitstehen.
Die Anwendung fordert die benötigten Ressourcen beim Server an. Damit das funktioniert, müssen die Ressourcen eingerichtet sein und ihre Namen zur Anwendung passen. Der Container übernimmt außerdem Aufgaben wie das Verwalten von Abhängigkeiten, wodurch weniger Setup-Code in der Anwendung erforderlich ist.
Ein:e Administrator:in verwaltet den Server und richtet dort beispielsweise Datenbankverbindungen ein. Häufig übernimmt ein:e Entwickler:in diese Aufgaben selbst, etwa über die Weboberfläche des Servers.
Profile passend zur Anwendung wählen
Full Profile: Der Server stellt sämtliche Funktionen bereit, die Java EE spezifiziert. Dazu gehören auch Technologien für umfangreichere Enterprise-Anwendungen, etwa JMS und die vollständigen EJB-Funktionen.
Web Profile: Es umfasst eine kleinere Auswahl für klassische Webanwendungen, beispielsweise JSF und CDI. JAX-RS gehört standardmäßig nicht dazu.
Für eine Anwendung mit CRUD-Operationen auf Datenbanktabellen reicht die kleinere Auswahl häufig aus. Wenn der Server nur die benötigten Komponenten lädt, sinkt der Aufwand beim Starten und Deployen sowie der Bedarf an Ressourcen.
Beispiele für Server
Als bekannte Produkte gehören IBM WebSphere und Oracle WebLogic zum Java-Umfeld. Hinzu kommen JBoss und die Open-Source-Variante WildFly.
GlassFish ist die Open-Source-Referenzimplementierung der Java-EE-Plattform. TomEE gibt es in verschiedenen Varianten, etwa mit Web Profile oder zusätzlichen REST-Funktionen. Tomcat bietet einen reduzierten Funktionsumfang.
Jetty lässt sich direkt aus einem Java-Prozess starten, was beispielsweise automatisierte Tests einer Webanwendung erleichtert.
Wichtige Spezifikationen und ihre Referenzimplementierungen
Eine Referenzimplementierung setzt die Funktionen um, die eine Spezifikation vorgibt. Für die folgenden Technologien gehören diese Namen zum Grundlagenwissen:
| Spezifikation | Aufgabe | Referenzimplementierung |
| --- | --- | --- |
| JSF, JavaServer Faces | Weboberflächen erstellen | Mojarra |
| JPA, Java Persistence API | Objekte in Datenbanken speichern | EclipseLink |
| CDI, Contexts and Dependency Injection | Abhängigkeiten bereitstellen | Weld |
| JAX-RS | REST-Webservices anbieten | Jersey |
| Bean Validation | Daten anhand von Regeln prüfen | Hibernate Validator |
| JAX-WS | SOAP-Webservices anbieten | Metro |
Für JPA gibt es beispielsweise auch Hibernate als alternative Implementierung. Weitere Java-EE-Spezifikationen betreffen unter anderem Servlets und JavaServer Pages. JNDI ermöglicht Lookups anhand von Namen, während JMS Nachrichten überträgt. APIs für Transaktionen und Autorisierung gehören ebenfalls zur Pl