JAVA EE PLATTFORM CAS Enterprise Application Development Java EE Simon Martinelli, 10.2013 [email protected] | about.me/simas_ch INHALT 1. ÜBERBLICK 2. PRINZIPIEN UND PATTERNS 3. CONTAINER SERVICES 2 1 ÜBERBLICK 3 1 ÜBERBLICK VON DER APPLIKATION ZUR PLATTFORM Applikation Applikation Framework Infrastruktur Code Library Applikation Java EE Plattform Web Container EJB Container Komponenten Komponenten Dienste Quelle: Stephan Fischli 4 1 ÜBERBLICK PLATTFORM Komponente Komponente Komponente Komponente Komponente Container Dienste Anwendungsorientierte Middleware / Java EE Plattform Kommunikationsinfrastruktur Betriebssystem / Verteiltes System Quelle: Pearson 5 1 ÜBERBLICK CONTAINER, DIENSTE UND KOMPONENTEN Java EE Plattform enthält stellt zur Verfügung Container Dienst läuft in verwendet Komponente Quelle: Stephan Fischli 6 1 ÜBERBLICK GESCHICHTE Quelle: Oracle 7 1 ÜBERBLICK JAVA EE 7 Quelle: Oracle 8 1 ÜBERBLICK SPEZIFIKATIONEN Quelle: blog.eisele.net 9 1 ÜBERBLICK SCHICHTEN Quelle: Oracle 10 1 ÜBERBLICK CONTAINER Quelle: Oracle 11 1 ÜBERBLICK APIS Quelle: Oracle 12 2 PRINZIPIEN/PATTERNS METADATEN INJECTION KONTEXT / SCOPES PROXY AOP / INTERCEPTORS 13 2 PRINZIPIEN/PATTERNS METADATEN • Annotationen • Ab Java 5 • Compiler geprüft • Business Code “Verschmutzung” • XML • Kein Recompile bei Änderungen • Fehleranfällig 14 2 PRINZIPIEN/PATTERNS DEPENDENCY INJECTION • Don’t call us - we call you! (Hollywood Prinzip) • Inversion of Control • Beziehungen werden von aussen gesetzt • Constructor • Setter • Annotations • Frameworks • Java EE • Spring • Google Guice 15 2 PRINZIPIEN/PATTERNS KONTEXT Der Lebenszyklus und die Interaktionen von zustandsbehafteten Komponenten werden an wohldefinierte aber erweiterbare Kontexte gebunden Request Conversation Session Application 16 2 PRINZIPIEN/PATTERNS SCOPES • Der Scope gibt einem Objekt ein wohldefinierten Lifecycle Kontext • Ein Objekt wird bei der ersten Verwendung automatisch erzeugt • Das Objekt wird automatisch zerstört, wenn der Kontext endet 17 2 PRINZIPIEN/PATTERNS PROXY 18 Bildquelle: Wikipedia 2 PRINZIPIEN/PATTERNS AOP • Aspektorientierte Programmierung (AOP) erlaubt, generische Funktionalität über mehrere Klassen hinweg zu verwenden • Logische Aspekte eines Anwendungsprogramms werden dabei von der eigentlichen Geschäftslogik getrennt • Typische Anwendungsbeispiele sind Transaktionsverwaltung, Auditfähigkeit und Logging 19 2 PRINZIPIEN/PATTERNS INTERCEPTOR 20 3 CONTAINER SERVICES NAMING TRANSAKTIONEN REMOTING SECURITY CONCURRENCY MESSAGING POOLING ASYNCHRONITÄT PERSISTENZ VALIDIERUNG 21 3 CONTAINER SERVICES NAMING • Das Java Naming and Directory Interface (JNDI) erlaubt es Komponenten, andere Komponenten und Ressourcen zu lokalisieren • Eine Ressource ist ein Objekt, das eine Verbindung zu Systemen wie Datenbanken oder Messaging erlaubt • Jede Komponente und jede Ressource wird durch einen eindeutigen JNDI Namen identifiziert /jndi/name Komponente Ressource 22 3 CONTAINER SERVICES REMOTING • Enterprise Java Beans (EJB) mit Remote Interface können über EJB Remoting aufgerufen werden Context ctx = new InitialContext(); checkoutService = (CheckoutServiceRemote) ctx.lookup("ProShopEar/CheckoutService/remote"); • Web Services • HTTP(S) • Java EE kennt SOAP und REST Web Services 23 3 CONTAINER SERVICES CONCURRENCY • Requests werden parallel verarbeitet, indem der Container wenn nötig mehrere Instanzen der Komponenten und mehrere Verbindungen zu Ressourcen erzeugt • Concurrent Ressourcen sind Objekte, die Parallelität in Java EE-Anwendungen ermöglichen 24 3 CONTAINER SERVICES POOLING 25 3 CONTAINER SERVICES POOLING • Unter Pooling versteht man generell die Wiederverwendung physischer Ressourcen (z.B. Datenbankverbindungen oder Threads) • Da der Aufbau einer Ressource eine relativ rechenintensive Operation darstellt, kann damit die Performanz verbessert werden 26 3 CONTAINER SERVICES PERSISTENZ Applikation JPA Provider (EclipseLink, Hibernate etc.) JDBC API (Datenbank-unabhängig) JDBC Treiber (Datenbank-abhängig) Datenbank 27 3 CONTAINER SERVICES PERSISTENZ • Java Database Connectivity (JDBC) • Einheitliche Datenbankschnittstelle der Java-Plattform zu relationalen Datenbanken verschiedener Hersteller • Für jede spezifische Datenbank sind eigene Treiber erforderlich, die meist vom Hersteller des Datenbank-Systems geliefert werden • Java Persistence API (JPA) • Setzt auf JDBC auf • Ist die Standardisierung von O/R-Mapping für Java • JPA ist eine unabhängige Spezifikation sowohl für Java SE als auch Java EE 28 3 CONTAINER SERVICES TRANSAKTIONEN begin transaction debit checking account credit savings account update history log commit transaction • Aus logischer Sicht ist eine Transaktion ein Arbeitspaket, das einen geschäftlichen Nutzen erzeugt • Sie sollte so klein wie möglich aber so gross wie nötig sein, um alle Integritätsbedingungen einhalten zu können • Aus technischer Sicht ist eine Transaktion eine Folge von Lese- und/oder Änderungsoperationen in der Datenbank oder einem anderen System 29 3 CONTAINER SERVICES SECURITY 1) 2) 4) 5) 3) 30 3 CONTAINER SERVICES SECURITY • Wird durch den Container bereitgestellt • Unterstützt Authentifizierung und Autorisierung • Kann deklarativ @RolesAllowed("BASKET") public EmptyDTO deleteBasket(Basket basket) oder imperativ verwendet werden sessionContext.isCallerInRole("BASKET"); • Hinweis: Keine Autorisierung auf Datenebene 31 3 CONTAINER SERVICES MESSAGING Point to Point Publish / Subscribe Quelle: Java EE 7 Tutorial, Oracle 32 3 CONTAINER SERVICES MESSAGING • Message Passing ist ein Kommunikationsmodell zum asynchronen Transport von Daten zwischen Prozessen • Die Daten werden innerhalb von Nachrichten (Messages) übertragen • Messaging Systeme kennen zwei Modelle • Point to Point • Publish / Subscribe • Java Message Service (JMS) ist die standardisierte Schnittstelle für den Zugriff auf Messaging Systeme 33 3 CONTAINER SERVICES ASYNCHRONITÄT • EJB Methodenaufrufe @Asynchronous public Future<String> processPayment(Order order) { ... } • Timer Service @Schedule(dayOfWeek="Sun", hour="0") public void cleanupWeekData() { ... } 34 3 CONTAINER SERVICES VALIDIERUNG 35 3 CONTAINER SERVICES BEAN-VALIDIERUNG • Einheitliche Form • Eine Sprache für alle (Annotationen) • Basierend auf dem Domain Modell (JavaBeans) • Einheitliche Validierung • Ein Framework • Eine Implementierung • Brücke zu anderen Technologien • API, um auf Bedingungen zuzugreifen 36