Enterprise Computing Prof. Dr.-Ing. Wilhelm G. Spruth WS 2011/12 Teil 11 Web Application Server Maschinensprache der Java Virtual Machine (JVM) Parallele Ausführung von Java Klassen in der Form von Java Threads Java Virtual Machine Betriebssystem JVM ist ein Emulator für die Java Hardware Architektur. Der Maschinencode des Java Prozessors wird als Byte Code bezeichnet. Emulator Auf einem Rechner mit der Hardware-Architektur x (Host) kann ein Rechner mit der Hardware-Architektur y (Gast) emuliert werden. Beispiele sind: Hercules und pDT emulieren einen zSeries Rechner mit dem z/OS Betriebssystem auf einem Intel/AMD Windows oder Linux Rechner. Microsoft VirtualPC emuliert einen Intel/AMD Windows Rechner auf einem (älterem) Apple MAC PowerPC Rechner.(Vorsicht, unter dem gleichen Namen gibt es ein weiteres aber unabhängiges Microsoft Produkt, welches ähnlich wie VMWare arbeitet. Bochs ist ein in C++ geschriebener Open Source Emulator, der die Intel/AMD Architektur auf vielen anderen Plattformen emuliert. Eine Java Virtual Machine wird heute fast immer durch eine Emulation auf einer Pentium, PowerPC oder System z Plattform usw. implementiert. Im Gegensatz zu anderen Emulatoren ist der Leistungsverlust bei der Emulation der JVM Architektur relativ klein, z.B. Faktor 3 im Vergleich zu einem Faktor 15 bei der Emulation der System z Architektur auf einem Intel Processor. Java Source Code System z Object Code System z Hardware Byte Code JVM Unter z/OS ist die Ausführung sowohl als System zObject Code als auch als Byte Code möglich. In der großen Mehrzahl der Fälle wird die Ausführung als Byte Code gewählt. Browser http Server z.B. Apache statische HTML Pages Statische HTML Pages Dynamische HTML Seite Anderes Beispiel: www.google.de <HTML> <HEAD><TITLE> Login </TITLE> </HEAD> <BODY> <H2>Login to Secure Site</H2> < FORM METHOD=POST ACTION="http://abc.de/servlet/xyz.servlet" > Username: <INPUT TYPE="TEXT" NAME="username" SIZE="25"><BR> Password: <INPUT TYPE="PASSWORD" NAME="password" SIZE="25"><P> <INPUT TYPE="SUBMIT" VALUE="Submit"> <INPUT TYPE="RESET" VALUE="Clear"> </FORM> </BODY> </HTML> HTML Forms Der FORM Tag spezifiziert: • Die zu benutzende HTTPMethode. Hier ist dies POST; die Daten werden innerhalb des Bodys der Nachricht übertragen. • Die Action. Dies ist meistens die URL, es kann aber auch die Action mit ihrem Namen angegeben werden. • Der Typ der MIMEEnkodierung der Daten in der FORM. Der Default ist "application/x-www-formencoded". HTTP HTML Web Server CGI oder Servlet (WEB) Application Server SQL Datenbank Browser Dynamischer WEB Seiten Inhalt (1) Alternativen: • CGI • Java Servlet. HTML WEB Browser WEB Browser JDBC WEB Server Java Servlet SQL WEB Browser (WEB) Application Server Datenbank Server der HTML Code <FORM METHOD=POST ACTION="/servlet/HelloWorld"> ruft ein Java Servlet mit dem Namen HelloWorld auf. Dies setzt voraus: (1) Der angesprochene Web Server unterstützt Servlets (2) ein "Hello World" Servlet existiert in dem Directory, in dem der angesprochene Webserver seine Servlets speichert. Servlet Container Servlets laufen in einer Servlet-spezifischen Laufzeitumgebung, die als Container oder Servlet Engine bezeichnet wird. Diese verbessert u.a. die Servlet-Ausführungszeit und stellen dem Programmierer vorgefertigte Strukturen zur Verfügung. Servlet Container haben keine Transactions-, Persistence- und Sicherheitseigenschaften. Ein Servlet Container ist eine Gruppe von Java Klassen, die Requests für Servlets und Java Server Pages (JSP) behandelt. Der Servlet Container enthält Java Klassen mit Funktionen für: • • • • Erstellung von Servlet-Instanzen, Initialisierung von Servlets, Dispatching von Requests, Verwaltung des Servlet-Kontextes für die Nutzung durch die Web-Anwendungen. Eine Java Klasse erbt mit Hilfe von „extends HttpServlet“ die Servlet Eigenschaften. public class HalloWeltServlet extends HttpServlet { public final static String message = "<html>\n" + "<head><title>Hallo Welt</title></head>\n" + "<body>\n" + "<h1>Hallo Welt</h1>\n" + "</body></html>\n"; public void init() { System.out.println("In HalloWeltServlet init"); } public void destroy() { System.out.println("In HalloWeltServlet destroy"); } Beispiel: HalloWeltServlet.java Die Methode service ist für die Bearbeitung des Servlet Aufrufs zuständig. public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { PrintWriter out = res.getWriter(); out.println(message); } } Java Server Pages (JSP) Java Server Pages sind in der Java Programmiersprache geschrieben. Eine JSP ist in Wirklichkeit eine andere Darstellungsform eines Servlets. JSPs benutzen XML-artige Tags und Scriplets um die Logik zu kapseln, die den Inhalt der Seite generiert. Alternativ kann die Anwendungslogik woanders liegen, und die Java Server Page greift hierauf mit den Tags und Scriplets zu. Dies ermöglicht eine Trennung der Seiten-Logik vom Seitenentwurf und der Seitenwiedergabe. Einfache Java Server Page (1) Java Server Pages sind im Aufbau vergleichbar mit HTML-Dokumenten. Sie bestehen jedoch aus zwei Teilen, einem HTML – Text sowie beliebig vielen, darin eingebetteten Anweisungen an den JSP – Server . Den folgenden Text in einer Datei mit der .jsp extension im JSP directory speichern und mit einem Browser ansehen: <html> <head> <title>JSP Example </title> </head> <body> Hello! The time is now <%= new java.util.Date() %> </body> </html> Die Zeichenfolgen <%= und %> schließen Java Epressions ein. Diese werden zur Run Time ausgewertet. Bei jedem Reload der HTML Seite in den Browser wird die gültige Zeit wiedergegeben. Normalerweise enthält ein JSP Programm eine komplexere Präsentationslogik, z.B. in der Form eines Scriplets. http://www.jsptut.com/ Web Server Servlet Container Interaktion Servlet JSP Browser Request Servlet Call Page Response Java Server Page Web Application Server In der Praxis ist es eher selten, dass eine JSP direkt aufgerufen wird. In der Regel wird ein Servlet aufgerufen, welches wiederum eine JSP aufruft. Web Application Server Plattform für die Ausführung von Java Servlets, Java Server Pages und EJBs BEA Web Logic IBM WebSphere verfügbar auf allen Plattformen Windows, Unix, Linux, z/OS Deutlich mehr als die Hälfte aller in der Wirtschaft eingesetzten Web Application Server verwenden die Firmen-eigenen Transaktionsmonitore: Tuxedo, CICS, SAP. Der SAP Netweaver Web Application Server wird in der Regel in Verbindung mit SAP Software Komponenten eingesetzt. Die Microsoft DotNet Alternative ( .Net ) unterstützt kein Java. Während Web Application Server ursprünglich nur Java Code verarbeiten konnten, werden heute alle gängigen Programmiersprachen unterstützt, spezifisch also auch Cobol, PL/1 und C++ . Web Application Server Open Source Web Application Server sind: • Tomcat (nur Servlets) • Geronimo der Apache Foundation • GlassFish (Sun) Pseudo-Open Source : • JBOSS (Red Hat) JBOSS, Geronimo und GlassFish liegen bezüglich ihrer Funktionalität weit hinter WebLogic, WebSphere oder Netweaver zurück. Kompatibilität Java Beans Kleine Java-Programme (Klassen) mit festgelegten Konventionen für die Schnittstellen, die eine Wiederverwendung in mehreren Anwendungen (Applikationen, Servlets und Applets) ermöglichen. Dafür gibt es ein eigenes Beans Development Kit BDK, das man zusätzlich zum JDK installieren kann, und ein Package java.beans, das ab Version 1.1 im JDK enthalten ist, JavaBeans sind ein Objektorientiertes Java Komponenten Modell - JavaBeans sind Java binary parts. Sie werden häufig für visuelle Komponenten eingesetzt (etwa Buttons und Scrollbalken) Hauptmerkmale der Java Beans sind: • Methoden • Properties (Eigenschaften, z.B. Methoden wie get und set) • Events (Ereignisse) • Namens Konventionen • Introspection (BeanInfo Klasse) CICS oder Java Java Presen- Business tation Logik DatenbankProzeß z.B. Oracle, DB2 AnwendungsProzeß PC Registrierkasse Geldausgabeautomat Business- und Präsentationslogik Browser HTML Page (Form ) Web Application Server Servlet prepare Bean call HTML Page (Ergebnis) JSP Bean SQL access Bean Nutzung von Java Beans Ein Servlet ist ein Java Programm, das Bildschirm Output in der Form einer HTML Datei produziert. Eine JAVA ServerPage ist eine HTML Seite mit zusätzlichen JSP Tags. Wird eine JSP Seite aufgerufen, so kompiliert sie ein JSP Übersetzer in ein Servlet. Servlet Architektur einer JSP Web Anwendung Model - View - Controller Ansatz 1. HTML page: static or dynamic HTML page, created from a previous step, contains one or multiple forms that invoke a servlet for processing of the next interaction. 2. Servlet gets control from the Application Server to perform validation and control of flow; sets up and calls command beans that perform the business logic. 3. Command beans control the processing of the business logic; logic may be imbedded in the command bean, or it can be delegated to back-end or enterprise systems, such as relational databases, transactions systems (CICS, MQSeries, IMS, and so forth); command bean may perform one specific function or it may contain many methods, each for a specific task (task wrappers). Command beans invoke database and transaction systems using „connectors“. 4. Results of command beans (or back-end systems) processing are stored in data beans. Data beans could contain an SQL result or a CICS communication area. 5. View beans provide the contract between the output producing JSPs and the data beans that contain the dynamic data to be displayed in the output; servlet initializes the view beans and registers them with the request block so that the JSPs can find them. 6. Servlet calls a JSP for output processing and formatting depending on the results of the command beans; JSPs generate the output for the browser. 7. JSP use tags to declare the view beans and get access to all the dynamic data that must be displayed in the output. 8. View beans contain one or multiple data beans and provides tailored methods so that the JSP has access to the data stored in the data beans; data beans may not provide the necessary methods for a JSP to access the data. 9. JSP assembles the output and sends it back to the browser as an HTML page with dynamic data; in many cases, that output again contains form(s) to enable the user to continue the dialog with the application. Servlet is the controller Command beans provide the model JSP is the view Web Browser HTML Enterprise Java Bean(s) SQL JDBC (oder andere) WEB Server Servlet JSP WEB Application Server Datenbank Server Dynamischer WEB Seiten Inhalt (3) Im einfachsten Fall enthält das Java Servlet die Anwendungslogik. In komplexeren Fällen lohnt es sich, die Anwendung in Komponentenform zu implementieren. Java Beans implementieren das Java Komponentenmodell. Enterprise Java Beans (EJB) sind Java Beans mit zusätzlicher Funktionalität, besonders Transaktionseigenschaften (ACID), Persistenz und Sicherheit. Mainframe PC, Workstation Java 2 Editionen Embedded Devices, Klein- und Kleinstgeräte JEE Die Java Platform, Enterprise Edition, abgekürzt Java EE oder früher J2EE, ist die Spezifikation einer Softwarearchitektur für die transaktionsbasierte Ausführung von in Java programmierten verteilten Geschäftsanwendungen und insbesondere Web-Anwendungen. Darin ist spezifiert: • Enterprise JavaBeans (EJB), die Komponenten der Geschäftsanwendungen, • Infrastruktur zur Ausführung von EJBs. Die Infrastruktur beinhaltet Web-Applikationsserver mit sogenannten Containern, in denen die EJBs ausgeführt werden. Der Server beziehungsweise der Container • • • • interagiert mit den Unternehmenssystem-Ressourcen (z.B. Datenbank) übernimmt die Interaktion mit verteilten Beans in anderen Servern und Maschinen. kontrolliert die Ausführung von selbst definierten Transaktionen handhabt Sicherheitseinstellungen. JEE Entwicklung Version Datum JEE Version 1.0 JEE Version 1.2 JEE Version 1.3 JEE Version 1.4 JEE Version 5 JEE Version 6 1998 1999 2001 2003 2006 2009 Zum Teil sehr wesentliche Änderungen !!! Java EE umfasst mehrere API Specifikations, z.B. JDBC, RMI, JMS, Web Services und XML, sowie Spezifikationen für eigene Komponenten wie Servlets und JavaServer Pages, Enterprise Java Beans, Connectors, ...... z.B. Servlet Client Klassen rufen EJB Methoden direct auf, wenn in der gleichen JVM. Wenn nicht, Remote Method Invocation (RMI). HTML Web Server Servlets JSPs EJBs SQL HTTP Server Servlet Container EJB Container Backend Java Application Server Browser Web Application Server Bevorzugte Struktur eines Web Application Servers Datenbank Server In dieser Konfguration ist der HTTP Server (Web Server) lediglich ein Zusatz und gehört nicht unbedingt zum Lieferumfang eines Web Application Servers. Servlet Container und EJB Container laufen in einer gemeinsamen Java virtuellen Maschine (JVM). Dies reduziert den Kommunikationsaufwand. Servlet Klassen können EJB Klassen direkt aufrufen. Bei getrennten JVMs erfolgt die entsprechende Kommunikation mit Hilfe des RMI Protokolls (JRMP oder RMI/IIOP). Der Web Application Server enthält weitere Elemente für Administration und Datenbankzugriff. EJB EJB EJB EJB EJB EJB EJB EJB Container (andere Bezeichnungen:Laufzeitumgebung, Framework, Object Transaction Monitor - OTM) EJB Dienste JTS JIDL JNDI JMS JMAPI JDBC • JTS • JNDI Java Transaction Service Java Naming and Directory Interface • JMS Java Messaging Servics • JDBC Java Data Base Connectivity • JMAPI Java Management API • JIDL Java Interface Definition Language Enterprise Java Beans (EJB) Enterprise Java Beans sind Java Beans mit erweiterter Funktionalität. Dies sind unter anderem: • JTS, Transaction Service, an API for invoking transaction services. • JNDI, Java Naming and Directory Interface, an API for accessing naming and directory services. • JMS, Java Message Service, an API for invoking asynchronous message delivery services. • JDBC, Java Database Connectivity API, accesses data in existing databases through a common interface. • JMAPI, Java Management API, which defines access to a set of services for managing Java resources. • JIDL, Java interface definition language, an interface to the CORBA set of services for distributed computing. E M S M E E S Drei verschiedene Arten von EJBs S Container (andere Bezeichnungen:Laufzeitumgebung, Framework, Object Transaction Monitor - OTM) JIDL JNDI JMS • Session Beans • Message Beans EJB Dienste JTS • Entity Beans JMAPI JDBC Persistenz Die permanente Speicherung eines Objektes auf einem Plattenspeicher wird als Persistenz bezeichnet. Moderne RAID Technologien und Backup Strategien stellen sicher, dass Daten auch Fehlerfälle intakt überstehen. Konzeptuell können Objekte in einer Objektdatenbank (z.B. POET oder Jasmine) gespeichert werden.In der Praxis werden SQL (oder IMS, ADABAS oder VSAM) Daten als Objekte gekapselt; der Zugriff erfolgt z.B. über eine JDBC (Java Data Base Connectivity), SQLJ oder DB2Connect Schnittstelle. Persistente Objekte existieren permanent außerhalb des Gültigkeitsbereichs des Programms, das sie erzeugt hat. Persistenz wird implementiert, indem der Status (die Attribute) eines Objekts zwischen den einzelnen Programmausführungen gespeichert wird. Wenn das Objekt erneut benötigt wird, wird es aus seiner gespeicherten Form wieder hergestellt. Der Herstellungsprozeß erzeugt ein neues Objekt, das mit dem ursprünglichen identisch ist. Session Bean Man unterscheidet zustandslose (stateless) und zustandsbehaftete (stateful) Session Beans. Eine zustandsbehaftete Session Bean hat ein eigenes Gedächtnis. Sie kann Informationen aus einem Methodenaufruf speichern, damit sie bei einem späteren Aufruf einer anderen (oder der gleichen) Methode wieder zur Verfügung stehen. Die Zustandsbehaftung wird durch die Vergabe einer eindeutigen ID umgesetzt, über diese ID können die zustandsbehafteten (stateful) Session Beans unterschieden werden. Im Gegensatz dazu müssen einer zustandslosen Session Bean bei jedem Aufruf alle Informationen als Parameter übergeben werden, die für die Abarbeitung dieses Aufrufs benötigt werden. Da eine zustandslose Session Bean keine Informationen speichern kann, ist sie nicht von anderen Session Beans der gleichen Klasse unterscheidbar, sie hat also keine eigene Identität. Entity Beans Entity Beans repräsentieren für den Client eine objektorientierte Sicht auf einen Datensatz, z.B. eine Zeile in einer Datenbank. Sie erlauben im Gegensatz zu Session Beans auch Mehrbenutzerbetrieb: Auf eine Instanz eines Entity Beans können gleichzeitig mehrere Benutzer zugreifen. Der Container, in den Entity Beans während der gesamten Lebensdauer eingebettet sind, stellt dazu entsprechende Mechanismen bereit, um z.B. Sicherheit, Transaktionskonsistenz und Parallelität sicherzustellen. Da Entity Beans nicht an einen einzelnen Client gebunden sind, endet ihre Lebensdauer nicht nach dem Beenden einer Client - Verbindung. Im Gegensatz zu Session Beans können bzw. müssen sie sogar nach einem Systemausfall automatisch wiederhergestellt werden, da in der Regel ihre Existenz an das Vorhandensein der mit ihnen verbundenen Daten gebunden ist. Das heißt, die Erstellung einer Instanz eines Entity Beans erzeugt z.B. automatisch eine neue Zeile in einer Datenbank und fügt die bei der Erstellung mit übergebenen Daten des erstellten Datensatzes der Datenbank hinzu. Wird die Instanz entfernt, wird automatisch der mit dieser Instanz verbundene Datensatz aus der Datenbank gelöscht. EJB Client (z,B. Servlet) ruft Methoden der Session Bean auf Entity Bean Session Fassade EJB Architektur Aufgabenteilung: EJB Client Session Bean Entity Bean Entity Bean • Session Beans enthalten die Business Logik • Entity Beans speichern Daten Für Entity Beans war die persistente Speicherung in Objekt Datenbanken (z. B. Poet, Jasmin) vorgesehen, an Stelle von relationalen Datenbanken. Dies hat sich jedoch nicht durchgesetzt. Emterprise Java Bean Deployment Descriptor Beispiele für Parameter des Deployment Descriptors: EJB *.jar File EJB Container • Datenbank Name • Verbindung zu Legacy Anwendungen • JNDI Namensraum des Containers • Transaktions-Semantik • Umgebungseigenschaften Deployment Descriptor Der Deployment Descriptor legt die Parameter einer EJB fest. Parameter können statisch zur Assembly Zeit oder dynamisch zur Laufzeit festgelegt werden Der Deployment Descriptor wird typischerweise durch den EJB Entwickler angelegt, kann aber durch einen Administrator mit Hilfe eines Tools abgeändert werden Deployment Descriptor Der Deployment Deskriptor ist eine Datei im XML – Format, die • eine oder mehrere EJBs, • deren Zusammenwirken und • die Art, wie der EJB – Container sie zur Laufzeit behandeln soll, beschreibt. Er enthält hauptsächlich deklarative Informationen, welche nicht im EJB – Code zu finden sind. Dies sind vor allem Informationen über die Struktur der EJB und ihrer Abhängigkeiten zu anderen EJBs oder Ressourcen wie z. B. einer Datenbankverbindung. Außerdem können im Deployment Deskriptor Umgebungsvariablen gesetzt werden, die von der EJB ausgelesen werden können und somit ihr Verhalten beeinflussen. Dies führt zu einer höheren Flexibilität, da dieselbe EJB in verschiedenen Umgebungen eingesetzt werden kann und nur der Deployment Deskriptor angepasst werden muss. Vergleich CICS – Enterprise Java Beans CICS EJB Definition Define Command Deployment Descriptor Installation Install Command Deploy Command Package Group Anwendungsprogramm Mapset TRID xxxx yyyy zzzz CICS Group JAR, WAR, EAR Enterprise Application Ressource EAR Web Application Ressource WAR HTML Servlet JSP Deployment Descriptor EJB – Java Archiv JAR ..EJB Deployment Descriptor EJB Deployment Descriptor ..EJB Enterprise Archive (EAR) Eine J2EE Anwendung besteht aus Web – und EJB – Komponenten. Beide Arten von Komponenten sind in Archiven verpackt, Verhalten und Eigenschaften sind in Deployment Deskriptoren (DD) definiert. Alle Komponenten einer Anwendung sind in einem EAR (Enterprise Application Ressource) zusammengestellt. Eine vollständige Anwendung kann durch Installation eines EAR – Files auf einen anderen Application Server verteilt werden und sollte sich dort wie erforderlich konfigurieren lassen.