Begriffsdefinitionen Java EE A Java EE component is a self-contained functional software unit that is assembled into a Java EE application with its related classes and files and that communicates with other components. 3 Typen von Komponenten in der Java EE Spezfikation: Java EE Clients: Web Clients, Applets, Application Clients Java EE Web Components: Java Servlets, JavaServer Faces, and JavaServer Pages (laufen auf dem Server) Business Components: Enterprise JavaBeans (laufen auf dem Server)
Begriffsdefinitionen Java EE Web Clients (Thin clients) bestehen aus zwei Teilen: Dynamische Webseiten: Enthalten Markup Sprachen (HTML, XML, ) Werden erzeugt von Web Components Web Browser (z.b. Internet Explorer, Firefox, Opera ) Web Clients fragen keine Datenbanken ab, führen keine komplexen Business-Transaktionen durch oder sprechen e auch keine e Legacy Applikationen direkt an -> Diese Funktionalitäten werden ausgelagert g an Enterprise Beans.
Begriffsdefinitionen Java EE Applets: Webseiten, die von den Webkomponenten erzeugt werden, können kleine client-seitige iti Applikationen (=Applets) enthalten. Ausführung: Auf dem Client in einer Java-VM (Virtual machine) Voraussetzungen: Installierters Java-Plugin für den jeweiligen Browser uu Security Policies für Ausführung Werden nur Webkomponenten mit dynamischen Webseiten verwendet, sind keine Plugins oder Security Policies erforderlich.
Begriffsdefinitionen Java EE Application Clients: Werden clientseitig ausgeführt Können komplexe grafische User-Interfaces bereitstellen Können direkt auf Enterprise Beans zugreifen oder über die Web Tier Schnittstelle (Webkomponenten) Können auch in anderen Programmiersprachen als Java geschrieben sein und trotzdem auf Java EE Server zugreifen
Begriffsdefinitionen Java EE Java Beans: Sind keine Komponenten im Sinne der Java EE Spezifikation Sind definiert durch die Java Beans Component Architecture Besitzen properties Besitzen get () und set() Methoden um auf diese properties entsprechend den Java Beans Namenskonventionen zugreifen zu können Entsprechen weiteren, spezifischen Design Patterns für JavaBeans String getname() Die Methode besitzt keine Parameterliste, und der Rückgabetyp ist String. void setname(string name) Die Methode hat keine Rückgabe, aber genau einen Parameter.
Begriffsdefinitionen Java EE Webkomponenten: Servlets: Sind Java-Klassen, die dynamisch Anfragen verarbeiten und Antworten liefern JSP (Java Server Pages): Text-basierte t Dokumente, die als Servlets ausgeführt werden; besser geeignet für statische Inhalte JSF (Java Server Faces): Stellen ein Komponenten-Framework für User Interfaces bereit, das auf Servlets und JSP aufbaut Statische HTML Seiten und Applets sowie Utility-Klassen werden mit Webkomponenten gebündelt, zählen aber nicht selbst zu den Webkomponenten.
import java.io.*; Beispiel Servlet import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse p response) throws IOException, ServletException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<html>"); out.println("<head>"); out.println("<title>hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>hello World!</h1>"); out.println("</body>"); out.println("</html>"); } }
Beispiel JSP <%@ page language="java"%> <jsp:usebean id="simplebean" scope="request" class="com.devsphere.examples.mapping.simple.simplebean"/> <HTML> <HEAD><TITLE>Simple bean</title></head> <BODY> <H3>Simple Example</H3> <P><B> SimpleBean properties: </B> <P> string = <jsp:getproperty name="simplebean" property="string"/> <P> number = <jsp:getproperty name="simplebean" property="number"/> <P> integer = <jsp:getproperty name="simplebean" property="integer"/> <P> flag = <jsp:getproperty name="simplebean" property="flag"/> <P> colors = <%= tostring(simplebean.getcolors()) %> <P> list = <%= tostring(simplebean.getlist()) getlist()) %> <P> optional = <jsp:getproperty name="simplebean" property="optional"/> <P> subbean.string = <%= simplebean.getsubbean().getstring() %> <P> subbean.number number = <%= simplebean.getsubbean().getnumber() getnumber() %> </BODY></HTML>
Vergleich Servlets und JSP Java Server Pages Servlets Konfiguration Keine Konfiguration notwendig Konfiguration zur Ausführung notwendig Bindung an URL Unter tatsächlichem t h Pfad Über Web Deployment Descriptor an erreichbar symbolische URL gebunden Übersetzungs- Zur Laufzeit von JSP Engine Werden vor Einsatz manuell übersetzt zeitpunkt erzeugt Initialisierungsparameter Nur allgemeine Kontextparameter Individuelle Initialisierungsparameter über Servlet-Konfiguration möglich Vordefinierte Variablen Stehen zu Beginn zur Verfügung Müssen aus Request/Response Objekten geholt werden HTML Code Kann direkt zwischen Muss über print oder write erzeugt werden Anweisungen eingefügt werden Dokumenttypen Auf text-basierte Dokumente beschränkt Unterstützt Text als auch Binärformate Services Nur eine einzige Service-Methode Eigene Service-Methoden für jeden Request- Typ möglich Umwandlung Können durch Servlets ersetzt werden Können nur bedingt durch JSP ersetzte werden Vgl. (Stark, 2007)
Konzept der Servlet-Filter Client Server ohne Filter Client mit Filter Server Request und Response können manipuliert werden ohne dass Client und Server etwas darüber wissen müssen
Anwendungen von Filtern Komprimierte Übertragung von Daten Protokollierung von Requests und Responses, Debugging Validierung von Benutzereingaben in Formularen, Abfangen von Fehlern Authentifizierung von Benutzern Verteilung von Requests (Request Dispatching) XSLT Verarbeitung Verwendung mit Session-Listeners
Umsetzung der Servlet-Filter in Java implementiert Filter Interface Filter Implemen- tierung greift zu auf Filter Konfiguration Definiert Anwendungsbereich des Filters: Bindung an symbolischen Namen Bindung des Namens an URL- Pattern
Beispiel zu Filtern package de.akdabas.javaee.filters; import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; import javax.servlet.filterconfig; import javax.servlet.servletrequest; import javax.servlet.servletresponse; import javax.servlet.servletexception; public class BaseFilter implements Filter { protected FilterConfig filterconfig; public void init(filterconfig it(filt aconfig) { filterconfig = aconfig; } public void dofilter(servletrequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException ti { chain.dofilter(request, response); } public void destroy() { filterconfig = null; } }
Beispiel zu Filterkonfiguration <filter> <filter-name>basefilter</filter-name> <filter-class> de.akdabas.javaee.filters.basefilter </filter-class> </filter> <filter-mapping> <filter-name>basefilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Filterketten Client Server
Enterprise Java Beans Eigenschaften: Kapselung der Geschäftslogik in einem zentralen Dienst und Bereitstellung t des Dienstes für alle Frontend-Applikationen Transaktionsmanagement: Mechanismen zur parallelen Verarbeitung von Anfragen, die voneinander abhängig g sind Loadbalancing: Verteilung von Aufgaben auf verschiedene Server, die nach außen hin nur als ein Rechner erscheinen
EJB Kapselung Client Application Server Application- Server EJB EJB Container EJB EJB Web- Server EJB EJB EJB
Transaktionsmanagement Unterstützung der parallelen Verarbeitung von Aufgaben, die entweder alle gemeinsam oder keine von ihnen ausgeführt werden sollen Beispiel Reisebuchung: Kunde bucht Reise auf Website. Es müssen gleichzeitig Kontodaten und Verfügbarkeit von Flug, Hotel, Schiff, geprüft werden. Nur wenn alle positiv evaluiert werden, soll die Buchung durchgeführt werden.
Beispiel Transaktionsmanagement
Loadbalancing Verteilung einer großen Menge an Aufgaben auf mehrere Server Vermeidung der Überlastung eines einzelnen Servers Nach außen verhält sich der Rechnerverbund wie ein einzelner Rechner Clientsysteme wissen nicht, mit welchem (physischen) Rechner sie gerade verbunden sind
Webserver Application Server Application Server Servlet Container Darstellung (Servlets/JSP) EJB Container Anwendung Session Beans Datenhaltung Entity-Beans oder Persistenz- API
Aufgaben EJB Container Überwachung des Lebenszyklus von EJBs Instanzen-Pooling Es können mehrere Instanzen von EJBs erzeugt werden und in dem Pool verwaltet werden. Namens- und Verzeichnisdienst Transaktionsdienst Zusammenfassen von Aufgaben zu Transaktionen (commit/rollback Funktionalitäten) Nachrichtendienst Asychrone Kommunikation und Objektaustausch zwischen EJBs Persistenz Speicherung von Zuständen der EJBs
Typen von EJBs Entity Beans Schnittstelle zur Datenbank, repräsentiert Datensätze einer Tabelle als Java-Objekte; Von Session-Beans verwendet um Datensätze zu lesen oder zu manipulieren; neue Version: Persistenz-API Session Beans Kapseln Geschäftslogik und stellen sie in Form von Services bereit; greifen für Datenbankzugriff auf Entitiy Beans oder Persistenz-API zu Message Driven Beans Ermöglichen asynchrone Kommunikation zwischen EJB- Komponenten über Java Message Service (JMS)
Session Beans Stateless Session Beans Besitzen keinen Zustand vergessen vergessen nach einer Transaktion den Client Können daher über gemeinsamen Pool verwaltet werden Stateful Session Beans Speichern Zustand in Instanz-Variablen ( Konversationsgedächtnis ) Merkt sich die Interaktionen mit dem Client
Beispiel Warenkorb Virtueller Warenkorb = Stateful Session Bean Merkt sich Interaktion mit Client Stellt für jeden Client immer genau diese Instanz zur Verfügung Ist genau einem Benutzer zugeordnet Einzelne Produkte in Warenkorb = Stateless Session Beans Sind für alle Clients gleich Brauchen sich daher nicht zu merken, von welchem Client sie gerade angefordert werden