Kap. 6 Applikationsserver Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 1 Kap. 6 Applikationsserver – Übersicht Applikationsserver: Durchgängige Infrastruktur zur Entwicklung von Anwendungssystemen, die alle Schichten umfasst (Client bis DBS) 6.1 Übersicht über die J2EE-Architektur • • Anforderungen moderner mehrschichtiger Anwendungen J2EE-Architektur – EJB-Container – Web-Container – Application Client Container – Applet Container 6.2 J2EE Web-Tier – Java Servlets – JSP – Java Server Pages 6.3 Workshop: IBM WebSphere Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 2 6.1 Übersicht über die J2EE-Architektur Anforderungen moderner Anwendungen Datenverwaltung • • • Unterstützung relationale Datenbanksysteme Unterstützung host-basierte Datenbanksysteme Geeigente abstrakte Schnittstelle zur Anwendungsseite Anwendungslogik • • • • • • WORA: Write-Once-Run-Anywhere Komponentenorientierung Wiederverwendbarkeit Deployment mit deklarativer Änderung von Eigenschaften Verteilungstransparenz und Ortstransparenz Verteilte Abläufe mit Transaktionseigenschaften Präsentation • • • Plattformunabhängigkeit: Unterstützung von Web-Standards Unterstützung verschiedener Endgeräte Ansprechende Darstellung mit dynamisch generierten Inhalten Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 3 Ebenen moderner Anwendungssysteme Web-Tier Web Server Farm Business Tier Anwendungsserver Datenbanksysteme Hostsysteme Legacy Unterstützung von Web-Anwendungen Skalierbarkeit auf der Middleware-Ebene Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 4 Moderne Anwendungssysteme Quelle: C. Mohan – Application Server Tutorial VLDB 2002 Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 5 Problematik dynamisch generierter Inhalte Dynamisch generierte Inhalte sind bei herkömmlichen Anwendungen kein Problem • • • Web-Anwendungen • • • Eigens erstellte Client-Anwendung Aber: zusätzliche Installation, nicht plattformunabhängig Aber: WORA funktioniert hier offensichtlich auf der Präsentationsebene noch nicht!!! Anforderungen: – Mitführen des Nutzerkontextes (Session) – Interaktion mit dynamisch erstellten Inhalten Problematik: – HTTP: nicht zustandsbehaftet, kein Kontext – statische HTML-Seiten – unterschiedliche Endgeräte Lösungen bislang eher umständlich und aufwändig: Cookies, CGI-Skripte, ... Neue Infrastruktur: Applikationsserver – Ausdehnen der WORAPhilosophie auch auf die (server-seitige) Präsentationsebene (Web-Tier) Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 6 J2EE-Architektur J2EE - Aktuelle Spezifikation Java™ 2 Platform Enterprise Edition Specification, v1.4 (Public Draft 11.4.2003) http://java.sun.com/j2ee/j2ee-1_4-pfd3-spec.pdf Standardisierung durch Sun im Java Community Process (Mitwirkung u.a. BEA, IBM, IONA, Oracle, SAP) Zielsetzung • • • • Standardisierung der Entwurfskomponenten von mehrstufigen Anwendungssystemen Standardisierung der Laufzeitumgebungen von mehrstufigen Anwendungssystemen Durchgängige Unterstützung von Web-Anwendungen Einfache Programmierung (Produktivitätserhöhung in der SoftwreEntwicklung) Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 7 Komponenten der J2EE-Architektur Präsentation (client-seitig) Präsentation (server-seitig) Pure HTML Java Server Page EJB Java Server Page EJB Java Servlet EJB Java Applet Browser Java Application Desktop J2EE Client Beliebiges Endgerät Anwendungslogik (server-seitig) Java Servlet Web Container Unternehmensweite IS EJB EJB Container J2EE Plattform Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 8 Komponenten der J2EE-Architektur EJB-Container: Laufzeitumgebung für EJB-Komponenten (s. Kapitel 5) Web-Container: • • • • Application Client Container • • WORA-Philosophie für die Präsentationsebene Dynamische Erstellung von (HTML-)Dokumente für Präsentationsebene Laufzeitumgebung für – Java Server Pages (JSPs) – Java Servlets Weiter unten in diesem Kapitel ausführlicher besprochen Abgespeckte J2EE-Laufzeitumgebung (Container) für eine Java ClientAnwendung Nur Security und Deployment (JNDI, JDBC, RMI-IIOP, JMS, s.u.) aus der üblichen Container-Funktionalität Applet Container: wie Appl. Client Container, aber Applet Programmiermodell Fokus bei uns im folgenden auf Web-Tier (EJB-Container s. Kapitel 5) Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 9 Verwandte Standards und Protokolle (1) Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 10 Verwandte Standards und Protokolle (2) Servlets, JSP: Java servlets und Java Server Pages sind Komponenten, die in einem Web Server ablaufen, der dynamisches HTML und Session Management für Browser Clients unterstützt. JMS: Java Messaging Service - asynchrone Kommunikation mit transaktionellen Message Queues oder Pub/Sub. JNDI: Java Naming and Directory Interface – Zugriff auf Namensdienste wie DNS, NDS, LDAP, oder CORBA Naming. RMI/IIOP: Remote Method Invocation - erzeugt Remote Interfaces für die Java-to-Java Kommunikation. Dazu wird des CORBA Standard-IIOPKommunikationsprotokoll eingestzt. JDBC: JDBC Database Access API – einheitlicher Zugriff auf relationale Datenbanken Java IDL: Java Interface Definition Language - erzeugt Remote Interfaces für Java-to-CORBA-Kommunication. Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 11 Verwandte Standards und Protokolle (3) JTA: Java Transaction API – API zur Definition von Transactionsgrenzen JTS: Java Transaction Service – Distributed Transaction Management Service auf der Basis des CORBA Object Transaction Service. JavaMail: protokoll-unabhängiges Framework für Mail- und Nachrichten-basierte Anwendungen. (JavaMail setzt das JAF API voaus.) JAF: JavaBeans Activation Framework – Services, um den Typ beliebiger Daten zu ermitttlen und ein geeignetes JavaBean zu erzeugen, um die Daten zu manipulieren. J2SE: Java2 Standard Edition Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 12 Verwendung der verwandten Standards API Applet Application Client Web EJB JDBC 2.0 N Y Y Y JTA 1.0 N N Y Y JNDI 1.2 N Y Y Y Servlet 2.2 N N Y N JSP 1.1 N N Y N EJB 1.1 N Y*) Y*) Y RMI-IIOP 1.0 N Y Y Y JMS 1.0 N Y Y Y JavaMail 1.1 N N Y Y JAF 1.0 N N Y Y *) Beschränkt auf die Enterprise Bean Client APIs) Stand: J2EE V1.4 2003/05/20 Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 13 6.2 J2EE Web-Tier Ebene zwischen Clients und Anwendungslogik Funktionalität • • • • • • Bisherige Lösungen • • • Interaktion zwischen Web-Clients und Anwendungslogik steuern Erzeugen dynamischer Inhalte (HTML, Bilder, Sprache,...) Präsentation von Daten und Abfragen von Benutzereingaben (HTTP PUT, GET, POST,...) Abfolge von Bildschirmmasken steuern Verwaltung von Sessionkontexten Unterstützung verschiedener Endgeräte CGI-Skripte Web-Server Extensions: NSAPI (Netscape), ISAPI (MS IIS) Problematik: aufwändig, skaliert nicht, kompromittiert evtl. Server-Stabilität Web-Tier: neue Lösung mit J2EE • • • Web-Container analog EJB-Container Java Servlets, JSP – Java Server Pages Verwaltung des Sessionkontextes durch den Container Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 14 J2EE Web-Container: Java Servlets Java-Komponente, die auf der Serverseite abläuft. Servlet Container: Laufzeitumgebung (Java VM) für Servlets • • • • Lebenzyklus von Servlets Umsetzen von URLs auf Servlet-Methodenaufrufe Interception von Aufrufen des Servlets für Standardfunktionalität Im Gegensatz zu CGI kein neuer Prozess für einen Servlet-Aufruf Aufgabenstellung von Servlets • • • • • • Entgegennehmen von Methoden-Aufrufen Implementierung von Anwendungslogik in den Methoden Verwendung der Standarddienste des Container für DB-Zugriff, Transaktionen, ... Ausgeben von dynamisch erzeugten Inhalten (HTML, MIME,...) Zugriff und Aufrufe von nachgelagerten EJBs Je nach genauer Aufgabe unterschiedliche Servelt-Typen – Generisches Servlet: service()-Metode für Anwendungsfunktionalität – HTTP-Servlet: Methoden für die HTTP-Operationen GET, POST, Cookies Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 15 Beispiel: Hello-Servlet für HTTP-GET public class HelloServlet extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response) throws ... { response.setContentType(“text/html“); PrintWriter out = response.getWriter(); out.println(“<html>“); out.println(“<body>“); out.println(“<H1> Hello World! </H1>“); out.println(“</body>“); out.println(“</html>“); out.close(); } } Das Servlet nimmt HTTP-GET-Aufrufe entgegen und erzeugt ein HTML-Dokument mit dem Inhalt „Hello World“ Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 16 Problematik von Servlets Synchronisation • • Normalerweise nur eine Servlet-Instanz Parallele Aufrufe erzeugen mehrere Threads, die auf der gleichen Instanz arbeiten Zugriff auf Benutzereingaben erfordert Hilfskonstrukte Transaktionelle Garantien sind bei HTTP-Aufrufen nicht vorgesehen Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 17 J2EE Web-Container: JSP Beobachtung: • • Struktur und Layout der meisten Web-Seiten gleich Aber unterschiedliche Dateninhalte auf den Seiten Idee bei JSP – Java Server Pages • • • Statisches Template (HTML) für Struktur und Layout Spezieller Markup für dynamische Inhalte Dadurch werden Servlets vermieden, die viel statischen Text generieren müssen. Spezieller Markup in JSP • • • • <%@ page %>: Import von Java-Klassen jsp:useBean: Binden von EJBs an JSP-Variablen <% %>: sog. Scriptlets mit dem Java-Code zur Erzeugung der dynamischen Inhalte <%= %>: Zugriff auf Java-Variablen, Ausgabe von deren Inhalten in der erzeugten Seite Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 18 Beispiel für eine JSP <%@ page import="java.util.*, bankPackage.*" %> <HTML> <BODY> Einbinden der <H1>Account Page</H1> Beans Balance for account number 2000: Erzeugen des <% { // new block %> Beans <jsp:useBean id="finance" scope="page" class="bankPackage.FinanceBean"/> <% Integer iBalance = finance.getBalance(new Integer(2000)); out.print(iBalance.toString()); %> <% } // close the block %> Methodenaufruf </BODY> </HTML> Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 19 Problematik von JSP Layout und Code sind physikalisch nicht voneinander getrennt. Java-Code in Scriptlets verführt zu Copy-PasteProgrammierung • • Geringe Wiederverwendung Schlechte Wartbarkeit des Codes Gutes Layout erfordert zusätzliche Produkte (Diese werden jedoch von den Applikationsservern meist unterstützt.) Wiederverwendung durch Tag Libraries Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 20 Zusammenfassung Applikationsserver Heutige Anwendungssysteme erfordern zusätzliche Middleware-Ebene: Web-Tier zur Umsetzung von WebAnwendungsfunktionalität J2EE-Standard für Applikationsserver • • • • Zugriff auf Datenbanken und Host-Systeme Anwendungslogik durch EJBs Web-Tier mit Servlets und JSP J2EE-Laufzeitumgebungen für div. Clients J2EE bindet viele weitere Standards nach dem Baukastenprinzip ein Skalierbarkeit auf allen Ebenen wichtiges Kriterium bei der Entwicklung der verschiedenen Produkte Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 21 Referenzen Sun: J2EE Web-Seite: http://java.sun.com/j2ee/ I. Singh, B. Stearns, M. Johnson: Designing Enterprise Applications with the J2EE Platform, 2nd Edition (http://java.sun.com/blueprints/guidelines/designing_en terprise_applications_2e/index.html) S. Bodoff et al.: J2EE Tutorial: http://java.sun.com/j2ee/tutorial Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kapitel 6: Applikationsserver – 22