Integration Engineering - Verteilte Anwendungen auf der Basis von J2EE Stefan Malich Wintersemester 2006/2007 Version 1.6 Lehrstuhl für Wirtschaftsinformatik und Softwaretechnik Prof. Dr. Stefan Eicker 1 Agenda Einführung und Motivation Verteilte Objekte und Komponenten Verteilte Softwarearchitekturen J2EE-Plattform J2EE-basierte Softwarearchitektur Aspekte der Verteilung von J2EE-Anwendungen 2 Agenda Einführung und Motivation Verteilte Objekte und Komponenten Verteilte Softwarearchitekturen J2EE-Plattform J2EE-basierte Softwarearchitektur Aspekte der Verteilung von J2EE-Anwendungen 3 Einführung und Motivation Literaturempfehlungen (1/2) • Armstrong, Eric et al. - The J2EE Tutorial v1.4 - Sehr gute und umfassende Anleitung zur Entwicklung von Anwendungen auf der Basis von J2EE - http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html • Sun Microsystems - Java 2 Platform, Enterprise Edition (J2EE) Specification, Version 1.4 - Die führende Spezifikation zur J2EE-Plattform - http://java.sun.com/j2ee/j2ee-1_4-fr-spec.pdf • Sun Microsystems; Enterprise JavaBeans Specification, Version 2.1 - http://java.sun.com/products/ejb/docs.html • Sun Microsystems; Java Servlet Specification, Version 2.4 - http://java.sun.com/products/servlet/download.html 4 Einführung und Motivation Literaturempfehlungen (2/2) • Sun Microsystems; JavaServer Pages Specification, Version 2.0 - http://java.sun.com/products/jsp/reference/api/index.html • Singh, I.; Stearns, B.; Johnson, M. et al.; Designing Enterprise Applications with the J2EE Platform, Second Edition; Addison Wesley; Boston, San Francisco, New York; 2002 - http://java.sun.com/blueprints/guidelines/designing_enterprise_a pplications_2e/index.html • Aufgrund des Umfangs wird ein gezieltes Studium einzelner Kapitel empfohlen! 5 Einführung und Motivation Begriffsdefinitionen • Plattform (engl. platform) - "6. Computer Science The basic technology of a computer system's hardware and software that defines how a computer is operated and determines what other kinds of software can be used.“ [American Heritage Dictionary of the English Language; http://www.bartleby.com/61/] - Entwicklung und Ausführung von Software • Entwicklungsplattform - Engerer Fokus auf die Entwicklung von Software - Beispiele: J2EE, .NET, COBOL, usw. 6 Einführung und Motivation Relevanz der Vorlesungsinhalte Die Plattformen J2EE und .NET gehören zu den Grundkenntnissen eines (Wirtschafts-)Informatikers, da diese Plattformen bei einem Großteil der Entwicklungen von transaktionsbasierten Anwendungen eingesetzt werden. 7 Einführung und Motivation Anteile bei Neuentwicklungen 15% Relative Anteile der Entwicklungsplattformen bei transaktionsbasierten Neuentwicklungen J2EE und .NET sonstige 85% Quelle:Gartner/namics ag 8 Einführung und Motivation Anteile bei existierenden transaktionsbasierten Anwendungen 25% Relative Anteile der Entwicklungsplattformen existierenden transaktionsbasierten Anwendungen COBOL/CICS sonstige 75% Quelle:Ovum 9 Einführung und Motivation Beispiel: SAP SAP NetWeaver™ People Integration Portal Collaboration 25% Information Integration Business Intelligence Knowledge Management Master Data Management Process Integration Integration Broker Business Process Management Life Cycle Management Composite Application Framework Multi-Channel Access • NetWeaver-Plattform und interne Entwicklungen basieren auf J2EE und ABAP • J2EE ist die Plattform für Neuentwicklungen • .NET wird „unterstützt“ Application Platform J2EE ABAP andOS OS Abstraction Abstraction DBDBand … .NET WebSphere Quelle: SAP 10 Einführung und Motivation Beispiel: Siebel • Aktuelle Versionen unterstützen J2EE und .NET • Ältere Versionen basierten nur auf .NET • Web Services ermöglichen Interoperabilität zwischen den beiden Plattformen Quelle: Siebel 11 Einführung und Motivation Rollen in einer Projektorganisation Projektmanagement Projektmanager Anforderungsmanagement Technische Architektur Anwendungsentwicklung Anwendungstest Analyst Softwarearchitekt Designer Tester Entwickler 12 Verteilte Softwarearchitekturen Verantwortlichkeiten und beispielhafte Aufgaben (1/3) • Analyst - Analyse und Definition der fachlichen Anforderungen - Erstellung des Fachkonzepts • Softwarearchitekt - Entwurf der Softwarearchitektur - Definition der grundlegenden technischen Entscheidungen - Definition des projektweiten Rahmens für die einzelnen Entwurfsentscheidungen • Analyst - Erstellung eines HTMLbasierten Prototypen • Softwarearchitekt - Identifikation der Komponenten der Softwarearchitektur - In welcher Schicht der Softwarearchitektur wird die Validierung der Benutzereingaben ausgeführt? 13 Verteilte Softwarearchitekturen Verantwortlichkeiten und beispielhafte Aufgaben (2/3) • Designer - Entwurf eines Teils der Anwendung bzw. des Systems unter Berücksichtigung der Anforderungen, der Softwarearchitektur und den projektweiten Entwurfsrichtlinien • Entwickler - Implementierung und Test der einzelnen Systemkomponenten • Designer - Entwurf einer Komponente mit ihren Schnittstellen im Kontext der Softwarearchitektur • Entwickler - Test im Kontext der Softwarearchitektur - Test in den verschiedenen Umgebungen 14 Verteilte Softwarearchitekturen Verantwortlichkeiten und beispielhafte Aufgaben (3/3) • Tester - Planung, Koordination und Durchführung des Anwendungstests • Projektmanager - Planung und Steuerung des Projektes - Koordination der Projektressourcen - Abstimmung der fachlichen Anforderungen und Projektprioritäten unter Berücksichtigung der technischen Rahmenbedingungen • Tester - Definition und Koordination der Testumgebungen • Projektmanager - Erstellung des Arbeitsplans - Erstellung der Projektorganisation - Anforderungsmanagement 15 Agenda Einführung und Motivation Verteilte Objekte und Komponenten Verteilte Softwarearchitekturen J2EE-Plattform J2EE-basierte Softwarearchitektur Aspekte der Verteilung von J2EE-Anwendungen 16 Verteilte Objekte und Komponenten Motivation • Verbindung des objekt-orientierten Paradigmas mit den Konzepten verteilter Systeme • Rechner- und betriebssystemübergreifender Zugriff eines Objekts auf die Methoden eines anderen Objekts Rechner 1 Rechner 1 Rechner 2 Objekt A Objekt B Objekt A Objekt B 17 Verteilte Objekte und Komponenten Object Broker Pattern Rechner 1 (Client) Rechner 2 (Server) Objekt A Objekt B Methoden- Methoden- Methoden- Methoden- aufruf ergebnis ergebnis aufruf ServerProxy Request ClientProxy Reply Reply Object Request Broker Request Object Request Broker RPC 18 Verteilte Objekte und Komponenten Implikationen der Verteilung • Performance Rechner 1 (Client) Rechner 2 (Server) Objekt A Objekt B Methoden- Methoden- Methoden- Methoden- aufruf ergebnis ergebnis aufruf ServerProxy Request ClientProxy Reply Reply Object Request Broker Request Object Request Broker RPC - bei einem verteilten Methodenaufruf erfolgt eine RPC-Kommunikation über das Netzwerk - Granularität der Objekte: Objekt vs. Komponente • Zuverlässigkeit - das Netzwerk ist eine zusätzliche Fehlerquelle • Sicherheit - die RPC-Kommunikation muss gesichert werden • Komplexität - höher: RPC-Kommunikation und Ortstransparenz 19 Agenda Einführung und Motivation Verteilte Objekte und Komponenten Verteilte Softwarearchitekturen J2EE-Plattform J2EE-basierte Softwarearchitektur Aspekte der Verteilung von J2EE-Anwendungen 20 Verteilte Softwarearchitekturen Ziele der Vorlesungseinheit • Verständnis der Ziele und Eigenschaften einer Softwarearchitektur • Verständnis und Anwendung des Sichten- und Schichtenkonzepts • Verständnis und Bewertung der Einflussfaktoren von Softwarearchitekturen • Kenntnis und Identifikation der wesentlichen Architekturstile • Verständnis der Relevanz der Softwarearchitektur innerhalb des Projektmanagements 21 Verteilte Softwarearchitekturen Begriffsdefinition: Softwarearchitektur • Keine einheitliche, allgemein anerkannte Definition • Website des Software Engineering Institutes (SEI) der Carnegie Mellon Universität - Siehe http://www.sei.cmu.edu/ - Veröffentlichte Begriffsdefinitionen > 30 • http://www.sei.cmu.edu/architecture/published_definitions.html - Definition der Besucher der Website > 150 • http://www.sei.cmu.edu/architecture/community_definitions.html 22 Verteilte Softwarearchitekturen Begriffsdefinition: Softwarearchitektur - Beispiele • Balzert, Helmut: „Eine Software-Architektur ist eine strukturierte oder hierarchische Anordnung der Systemkomponenten sowie Beschreibung ihrer Komponenten.“ ([Balz96], Seite 639) • Bass, Len; Clements, Paul; Kazman, Rick: „The software architecture of a program or computing system is the structure or structures of the system, which comprise software elements, the externally visible properties of those elements, and the relationships among them.“ ([BaCK03], Seite 21) 23 Verteilte Softwarearchitekturen Eigenschaften einer Softwarearchitektur (1/2) • Systeme können durch mehrere Strukturen bzw. Anordnungen beschrieben werden - jede Struktur bzw. Anordnung definiert eine Sicht auf das identische System • Kontext der Vorlesung: - Softwarearchitektur = Anwendungsarchitektur - Softwarearchitektur ≠ Systemarchitektur (auch: Hardwarearchitektur) - Vergleiche: Anwendungsarchitektur vs. Datenarchitektur Quelle: in Anlehnung an [BaCK03] 24 Verteilte Softwarearchitekturen Eigenschaften einer Softwarearchitektur (2/2) • Definition von Softwareelementen und deren Beziehungen - interne Informationen über die Softwareelemente sind nicht relevant, sofern sie die Beziehung zwischen zwei Elementen nicht beeinflussen (Prinzip der Abstraktion) - Softwareelemente interagieren über Schnittstellen - Schnittstellen trennen öffentliche Informationen über Softwareelemente von privaten (internen) Informationen (Prinzip des Information Hiding) - siehe [Parn1972] Quelle: in Anlehnung an [BaCK03] 25 Verteilte Softwarearchitekturen Ziele einer Softwarearchitektur (1/2) • Entwurf einer Anwendung bzw. eines Softwaresystems auf einem hohen Abstraktionsniveau - Instrument zur Kommunikation - Grundlage und Rahmen für die detaillierten Entwürfe der einzelnen Softwareelemente • Identifikation der grundsätzlichen Typen von Softwareelementen - Beispiele: Masken/Webseiten, Module, Datenbanken • Strukturierung und Gruppierung der Softwareelemente - Orientierungshilfe in der Menge der konkreten Softwareelemente - Grundlage für die Planung innerhalb des Projektmanagements Quelle: in Anlehnung an [BaCK03] und [Balz96] 26 Verteilte Softwarearchitekturen Ziele einer Softwarearchitektur (2/2) • Identifikation von Schnittstellen - innerhalb der Anwendung bzw. des Softwaresystems - zu anderen Anwendungen bzw. Softwaresystemen • Definition von grundsätzlichen Entwurfsrichtlinien und -entscheidungen - Frühzeitige Entscheidungen, welche nur schwierig und/oder mit großem Aufwand zu ändern sind - Beispiel: Technologie der Benutzeroberfläche: Windows-Client, Java-Client, Web-basierter Client Quelle: in Anlehnung an [BaCK03] und [Balz96] 27 Verteilte Softwarearchitekturen Sichten auf Softwarearchitekturen (1/2) • Zahlreiche Sichten auf die identische Softwarearchitektur möglich - Beispiel: Rational Unified Process (RUP) empfiehlt 5 Sichten (sog. 4+1 Model) (vgl. [Kruc95]) • Jede Sicht beschreibt bestimmte Aspekte der Softwarearchitektur - unterschiedliche Zielgruppen: Projektmanager, Designer, Entwickler, Tester 28 Verteilte Softwarearchitekturen Sichten auf Softwarearchitekturen (2/2) • Notation der Beschreibung - Unterschiede: objektorientierter vs. strukturierter Entwurf - Beispiel: Verwendung der Unified Modelling Language (UML) im Rational Unified Process (RUP) - Beispiel: Verwendung von Datenflussdiagrammen und Funktionsbäumen innerhalb der Strukturierte Analyse (nach DeMarco) 29 Verteilte Softwarearchitekturen Beispiel: Sichten des RUP (1/2) • Logical View - die wichtigsten Klassen/Komponenten auf Entwurfsebene und ihre Organisation in Packages und Subsystems - Beziehungen zwischen den Klassen/Komponenten (Nutzung, Vererbung, usw.) - Organisation der Packages und Subsystems in Schichten • Implementation View - Verfeinerung und Detaillierung der logischen Sicht - Klassen/Komponenten auf Implementierungsebene und ihre Organisation in Packages und Subsystems - Beziehungen zwischen den Klassen/Komponenten - Organisation der Packages und Subsystems in Schichten Quelle: in Anlehnung an [Rati03] 30 Verteilte Softwarearchitekturen Beispiel: Sichten des RUP (2/2) • Process View - Beschreibung der Tasks (Prozesse, Threads), deren Interaktionen und Konfigurationen - Allokation der Objekte und Komponenten zu Tasks • Deployment View - Beschreibung der physischen Rechnerknoten (Nodes) und ihre Konfiguration - Allokation der Tasks zu Rechnerknoten • Use Case View - Use Cases und Scenarios, welche das wesentliche Verhalten der Softwarearchitektur beschreiben - Beispiel: Was passiert innerhalb der Softwarearchitektur, wenn der Benutzer den Button X auswählt? Quelle: in Anlehnung an [Rati03] 31 Verteilte Softwarearchitekturen Softwarearchitektur: logische Sicht Komponente 10 Komponente 9 Komponente 8 Komponente 6 Komponente 7 Komponente 5 Komponente 2 Komponente 3 Komponente 1 Komponente 4 Quelle: in Anlehnung an [Balz96] Komponente X nutzt Komponente Y 32 Verteilte Softwarearchitekturen Softwarearchitektur: logische Sicht mit Schichten Schicht 2 Komponente 2.1 Komponente 2.2 Komponente 2.3 Schicht 1 Komponente 1.1 Komponente 1.2 Komponente 1.3 Schicht 0 Komponente 0.1 Komponente 0.2 Komponente 0.3 Komponente 0.4 Quelle: in Anlehnung an [Balz96] Komponente X nutzt Komponente Y 33 Verteilte Softwarearchitekturen Schichtenarchitekturen • Gruppierung der Softwareelemente in Schichten - Softwareelemente können innerhalb einer Schicht beliebig aufeinander zugreifen (vgl. [Dijk1967]) - Zwischen den Schichten gelten strengere Zugriffsregeln (vgl. [Dijk1967]) • Schichtenarchitektur mit linearer Ordnung: - Anordnung der Schichten nach ihrem Abstraktionsniveau - Jede Schicht kann nur auf die nächst niedrigere Schicht zugreifen • Schichtenarchitektur mit strikter Ordnung: - Von Schichten mit höherem Abstraktionsniveau kann auf alle Schichten mit niedrigerem Abstraktionsniveau zugegriffen werden – allerdings nicht umgekehrt Quelle: in Anlehnung an [Balz96] 34 Verteilte Softwarearchitekturen Definition der Softwarearchitektur in der Entwurfsphase Planungsphase Analysephase Entwurfsphase Softwarearchitektur Implementierungsphase Testphase Einführungsphase Entwürfe der Softwareelemente 35 Verteilte Softwarearchitekturen Beispiel: Vorgehensweise in der Entwurfsphase Abbildung ist bewusst nicht in den Folien enthalten! 36 Verteilte Softwarearchitekturen Beispiel: Entwurf einer Softwarearchitektur Service View MQ Controller Transfer Object Form Bean Action Bean Model Softwareelement X nutzt Softwareelement Y Session Facade HTTPS HTML Backend Dispatcher GUI Kontrollmodul Rechenmodul Datenlesemodul Entity Bean Benutzer/ Rechte Datenzugriffsmodul Stamm-/ Bewegungsdaten 37 Verteilte Softwarearchitekturen Einflussfaktoren auf eine Softwarearchitektur nach Bass et al. (1/2) Stakeholders • Kunden, Benutzer, Entwickler, Projektmanager, Wartungspersonal Unternehmen • Kenntnisse und Fähigkeiten der Entwickler Softwarearchitektur • Strategische Ziele (Program Management) Kenntisse und Erfahrungen des Architekten • Projekterfahrungen, Schulungen technische Umgebung • Gegebene Entwicklungsplattform (z.B. Mainframe) Quelle: in Anlehnung an [BaCK03] 38 Verteilte Softwarearchitekturen Einflussfaktoren auf eine Softwarearchitektur nach Balzert (2/2) Einsatzbedingungen • sequenziell • nicht sequenziell (nebenläufig, verteilt, Echtzeit, parallel) Nicht funktionale Produktanforderungen • Änderbarkeit, Effizienz, Zuverlässigkeit Nicht funktionale Qualitätsanforderungen Softwarearchitektur • Skalierbarkeit, Wiederverwendbarkeit, Reaktionszeit Umgebungs- und Randbedingungen • Gegebene PlattformArchitektur (z.B. Mainframe) Quelle: in Anlehnung an [Balz96] 39 Verteilte Softwarearchitekturen Bewertung von Softwarearchitekturen - Problematik Service View MQ Controller Transfer Object Form Bean Action Bean Model Session Facade HTTPS HTML Backend Dispatcher GUI Kontrollmodul Rechenmodul Datenlesemodul Entity Bean Benutzer/ Rechte Datenzugriffsmodul gut? gut?schlecht? schlecht? 2,2 2,2?? 77von von10 10?? Stamm-/ Bewegungsdaten 40 Verteilte Softwarearchitekturen Bewertung von Softwarearchitekturen - Annahmen • Keine Bewertung auf Basis einer Skala möglich - es gibt keine „gute“ oder „schlechte“ Softwarearchitektur • Bewertung kann nur im Kontext von spezifischen Anforderungen erfolgen - Bewertung = Aussage über den Grad der Erfüllung der spezifizierten Anforderungen • Beachte die Relevanz der Softwarearchitektur - Entwurfsentscheidungen, welche innerhalb der Softwarearchitektur getroffen werden, unterstützen oder behindern die Erreichung nahezu aller Qualitätsmerkmale einer nicht-trivialen Anwendung 41 Verteilte Softwarearchitekturen Funktionsorientierte Strukturierung in drei Schichten • Präsentation - Menüstrukturen, Bearbeitungsmasken, Berichte - Beispiel: Web-Client, Windows-Client • Geschäftslogik - Geschäftprozesse, -objekte und -funktionen - Beispiel: Verbuchung einer Wareneingangsrechnung, Kalkulation eines Verkaufspreises • Datenhaltung - Verwaltung und Organisation der Daten - Beispiel: relationales Datenbankmanagementsystem, Dateien Verteilung der Schichten auf unterschiedliche Rechnerknoten? 42 Verteilte Softwarearchitekturen Verteilung der Schichten: Architekturstile und Muster • Definition der Verteilung von Präsentation, Geschäftslogik und Datenhaltung - Abhängig von der Entwicklungsplattform, welche bestimmte Parameter der Verteilung definiert • Grundlegende Architekturstile - Host/Mainframe-Softwarearchitektur - Client/Server-Softwarearchitektur - Mehrschichtige Softwarearchitektur 43 Verteilte Softwarearchitekturen Host/Mainframe-Softwarearchitektur Mainframe/Host Präsentation Geschäftslogik • Präsentations-, Geschäftslogik- und Datenhaltungsschicht liegen auf einem Rechnerknoten • Beachte: Strukturierung in Schichten ist insbesondere bei Altsystemen nicht immer erfolgt Datenhaltung 44 Verteilte Softwarearchitekturen Client/Server-Softwarearchitektur Client Präsentation Geschäftslogik • Präsentations- und Datenhaltungsschicht auf unterschiedlichen Rechnerknoten • Verteilung der Geschäftslogik kann variieren • „Fat Client“ Datenhaltung Server 45 Verteilte Softwarearchitekturen Variationen der Client/Server-Softwarearchitektur Client Client Präsentation Präsentation Geschäftslogik 1 Geschäftslogik Geschäftslogik 2 Datenhaltung Datenhaltung Server Server 46 Verteilte Softwarearchitekturen Mehrschichtige Softwarearchitektur Client Applikationsserver Datenserver Präsentation Geschäftslogik Datenhaltung • Verteilung der Schichten auf mehreren Rechnerknoten • „Thin Client“ 47 Verteilte Softwarearchitekturen Variation der mehrschichtigen Softwarearchitektur Applikationsserver Geschäftslogik Client Datenserver Präsentation Datenhaltung Applikationsserver Geschäftslogik 48 Verteilte Softwarearchitekturen Softwarearchitekturen in der Praxis Client Applikationsserver Datenserver Präsentation Geschäftslogik Datenhaltung • Heterogenität durch Variation der „grundlegenden“ Softwarearchitekturen Geschäftslogik Datenhaltung Mainframe/Host 49 Verteilte Softwarearchitekturen Best Practices und Patterns • J2EE - Mehrschichtige Softwarearchitektur - „Core J2EE Patterns: Best Practices and Design Strategies“ - http://www.corej2eepatterns.com/index.htm • .NET - Mehrschichtige Softwarearchitektur - „Patterns & Practices“ - http://www.microsoft.com/resources/practices/default.mspx 50 Verteilte Softwarearchitekturen Anforderungen und Probleme • Reduzierung der Entwicklungs- und Betriebskosten • Schnelle Reaktionsgeschwindigkeit • Öffnung der Unternehmen nach außen - Kunden, Lieferanten, Partner • Ganzheitliche Geschäftsprozesse • Kurze Lebenszyklen der Produkte- bzw. Dienstleistungen • Günstige und schnelle Entwicklung von Anwendungen • Vollständige Integration der unternehmensinternen Anwendungen • Skalierbarkeit der Anwendungen • Differenzierte Definition von Sicherheitseigenschaften • Hohe Komplexität 51 Verteilte Softwarearchitekturen Literaturangaben (1/2) • [BaCK03] Bass, Len; Clements, Paul; Kazman, Rick; Software Architecture in Practice; 2. Auflage; AddisionWesley; Boston; 2003 - Chapter 1 - The Architecture Business Cycle - Chapter 2 - What is Software Architecture • [Balz96] Balzert, Helmut; Lehrbuch der Software-Technik: Software-Entwicklung; Spektrum Akademischer Verlag; Heidelberg, Berlin, Oxford; 1996 - Kapitel 3.1 Einführung und Überblick (aus Kapitel 3 - Die Entwurfsphase) • [Dijk1967] Dijkstra, Edsger W.: The structure of the "the"multiprogramming system. In: Proceedings of the first ACM symposium on Operating System Principles. ACM Press, New York 1967. S. 10.1-10.6. 52 Verteilte Softwarearchitekturen Literaturangaben (2/2) • [Kruc95] Kruchten, Philippe; Architectural Blueprints—The "4+1" View Model of Software Architecture; In, IEEE Software; Vol. 12 No. 6; November 1995; pp. 42-50. • [Parn1972] Parnas, D. L.: On the Criteria to be used in Decomposing Systems into Modules. In: Communications of the ACM 15 (1972) 12, S. 1053 - 1058. 53 Agenda Einführung und Motivation Verteilte Objekte und Komponenten Verteilte Softwarearchitekturen J2EE-Plattform J2EE-basierte Softwarearchitektur Aspekte der Verteilung von J2EE-Anwendungen 54 J2EE-Plattform Ziele der Vorlesungseinheit • Verständnis der Elemente und Positionierung der J2EEPlattform • Verständnis der Beziehung zwischen der J2EE-Spezifikation und der Umsetzung in Produkten 55 J2EE-Plattform Java-Plattform Java Anwendung Laufzeitumgebung / Java APIs Java Virtual Machine Betriebssystem • software-basierte Plattform, welche auf verschiedenen Betriebssystemen implementiert ist • Java Virtual Machine - Windows, Unix, Mainframe • Laufzeitumgebung / Java APIs - grundlegende Klassen und Schnittstellen - Abstraktion vom Betriebssystem (z.B. Dateien, Threads) Quelle: in Anlehnung an http://java.sun.com/ 56 J2EE-Plattform Begriffsdefinition: J2EE • Definition einer Plattform, welche Kosten und Komplexität von verteilten, mehrschichtigen Anwendungen reduziert • Definition einer standardisierten Softwarearchitektur, welche aus vier Elementen besteht Java 2 Platform, Enterprise Edition Specification Reference Implementation Compatibility Test Suite Blue Prints Quelle: in Anlehnung an [Sun04a] 57 J2EE-Plattform Positionierung von J2EE • Java 2 Platform, Standard Edition (J2SE) - APIs, Compiler, Tools, Runtimes zur Entwicklung und Ausführung von Applets und PC-Anwendungen • Java 2 Platform, Enterprise Edition (J2EE) - basiert auf J2SE - weitere APIs, Tools und Services - Entwicklung und Ausführung von komponenten-basierten, mehrschichtigen Anwendungen • Java 2 Platform, Micro Edition (J2ME) - Technologien und Spezifikationen im Umfeld von eingebetteten Systemen und Multimedia-Geräten - PDAs, Mobiltelefone, TV Set-top boxes usw. Quelle: siehe http://java.sun.com/ 58 J2EE-Plattform Java 2 Platform, Enterprise Edition Specification • Kein Produkt, sondern eine Spezifikation - Spezifikation vs. Standard • Veröffentlichung und Weiterentwicklung innerhalb des Java Community Process - Konsortium von IT-Herstellern - Industrie-Standard bzw. De-facto-Standard - aktuelle Version im „Final Release“ ist v1.4 • http://jcp.org/en/jsr/detail?id=151 - nächste Version im „Public Review“: Java Platform, Enterprise Edition 5 (Java EE 5) • http://jcp.org/en/jsr/detail?id=244 • Definition einer standardisierten Softwarearchitektur • Umsetzung in einer Referenzimplementierung und konkreten Produkten 59 J2EE-Plattform Referenzimplementation • Sun Java System Application Server Platform Edition - frei verfügbarer, J2EE-kompatibler Applikationsserver - ab Version 8 wird die Version 1.4 der Spezifikation unterstützt - http://java.sun.com/j2ee/1.4/ download.html - Java Platform, Enterprise Edition 5 (Java EE 5) wird in Open Source umgesetzt - https://glassfish.dev.java.net/ GlassFish Open Source Java EE 5 Application Server 60 J2EE-Plattform J2EE-kompatible Produkte (Beispiele) • WebSphere Application Server - kommerzieller Applikationsserver - http://www.ibm.com/software/ webservers/appserv/was/ - ab Version 6.0 wird die Version 1.4 der Spezifikation unterstützt • BEA WebLogic Server - kommerzieller Applikationsserver - http://www.bea.com/ - Version 8.1 unterstützt die Version 1.3 der Spezifikation 61 J2EE-Plattform J2EE-kompatible Produkte (Beispiele) • Oracle Application Server - kommerzieller Applikationsserver - Version 10g wird die Version 1.4 der Spezifikation unterstützen - http://www.oracle.com/ • SAP Netweaver / SAP Web Application Server - kommerzieller Applikationsserver - Version 6.30 unterstützt die Version 1.3 der Spezifikation - http://www.sap.com/ 62 J2EE-Plattform J2EE-kompatible Produkte (Beispiele) • JBoss - Open-Source Applikationsserver - Version 4.0 unterstützt die Version 1.4 der Spezifikation - http://www.jboss.org/ 63 J2EE-Plattform Compatibility Test Suite • Überprüfung einer Anwendung - Java Application Verification Kit (AVK) for the Enterprise - Werkzeug zur Überprüfung der Kompatibilität von Anwendungen - Kompatibilität = Anwendung läuft in allen Applikationsservern • Lizenzierung eines Applikationsservers - Attribut "J2EE-kompatibel" muss lizenziert und die Compatibility Test Suite muss durchlaufen werden - http://java.sun.com/j2ee/verified/ 64 J2EE-Plattform BluePrints • auch: Java BluePrints Program • Richtlinien - u.a. Konventionen für Dateinamen und Verzeichnisstrukturen • Patterns - auf der Ebene der Softwarearchitektur - J2EE-Pattern-Katalog - Alur, D.; Crupi, J.; Malks, D.; Core J2EE Patterns - Best Practices and Design Strategies, Second Edition; Prentice Hall; New York; 2003 - Singh, I.; Stearns, B.; Johnson, M. et al. - Designing Enterprise Applications with the J2EE Platform, Second Edition • Beispielanwendungen - Java Pet Store Sample Application - Java Adventure Builder Reference Application 65 J2EE-Plattform J2EE-Pattern-Katalog Quelle: http://www.corej2eepatterns.com/ 66 J2EE-Plattform Literaturangaben • [Sun04a] Sun Microsystems; Java 2 Platform, Enterprise Edition (J2EE) Specification, v1.4; http://java.sun.com/j2ee/j2ee-1_4-fr-spec.pdf - Chapter J2EE.1 - Introduction • [AlCM03] Alur, D.; Crupi, J.; Malks, D.; Core J2EE Patterns Best Practices and Design Strategies, Second Edition; Prentice Hall; New York; 2003 - siehe auch: http://www.corej2eepatterns.com/ 67 Agenda Einführung und Motivation Verteilte Objekte und Komponenten Verteilte Softwarearchitekturen J2EE-Plattform J2EE-basierte Softwarearchitektur Aspekte der Verteilung von J2EE-Anwendungen 68 J2EE-basierte Softwarearchitektur Inhalte des Kapitels "J2EE-basierte Softwarearchitektur" • • • • Grundlagen der J2EE-basierten Softwarearchitektur Servlets JavaServer Pages Enterprise JavaBeans 69 J2EE-basierte Softwarearchitektur Ziele der Vorlesungseinheit • Verständnis der Komponenten einer J2EE-basierten Anwendung • Verständnis und Bewertung der standardisierten Softwarearchitektur • Verständnis und Analyse der J2EE-Anwendungskomponenten und des Container-Konzepts • Verständnis und Bewertung der Container-Dienste • Verständnis der Paketierung und Installation von J2EEAnwendungen • Verständnis der Modulstruktur einer J2EE-Anwendung 70 J2EE-basierte Softwarearchitektur Begriffsdefinition: Komponente • Komponente = Komponente bzw. Softwareelement einer Softwarearchitektur • Beispiele (siehe Kapitel ‚verteilte Softwarearchitekturen‘): - Balzert, Helmut: „Eine Software-Architektur ist eine strukturierte oder hierarchische Anordnung der Systemkomponenten sowie Beschreibung ihrer Komponenten.“ ([Balz96], Seite 639) - Bass, Len; Clements, Paul; Kazman, Rick: „The software architecture of a program or computing system is the structure or structures of the system, which comprise software elements, the externally visible properties of those elements, and the relationships among them.“ ([BaCK03], Seite 21) 71 J2EE-basierte Softwarearchitektur Komponenten einer J2EE-basierten Anwendung • Anwendungskomponenten - Komponenten, welche anwendungsspezifische Funktionen implementieren • Container - Laufzeitumgebung für Anwendungskomponenten einer J2EEArchitektur • Dienste - Komponenten, welche allgemeine Funktionen implementieren und von einem Container bereitgestellt werden - Zugriff über ein Application Programming Interface (API) • Server - Kann ein oder mehrere Container verwalten 72 J2EE-basierte Softwarearchitektur Standardisierte Softwarearchitektur Applet Container Applet Web Container JSP Servlet Enterprise JavaBean Container EJB Datenbank APIs APIs APIs Application Client Container Application Client APIs Quelle: in Anlehnung an [Sun04a] Komponente X nutzt Komponente Y 73 J2EE-basierte Softwarearchitektur Anwendungskomponenten • Applets - werden in einem Web Browser ausgeführt - besitzen eine grafische Oberfläche • Application Clients - Java-Anwendungen, welche auf einem PC ausgeführt werden - besitzen i.d.R. eine fenster-basierte, grafische Oberfläche • Web-Komponenten - Servlets und JavaServer-Pages - können HTTP-basierte Requests bearbeiten • Enterprise JavaBeans - server-seitige Komponenten, welche i.d.R. die Geschäftslogik implementieren und im Kontext von Transaktionen aufgerufen werden Quelle: in Anlehnung an [Sun04a] 74 J2EE-basierte Softwarearchitektur Container-Konzept • Laufzeitumgebung für Anwendungskomponenten einer J2EEArchitektur • Bereitstellung von APIs, welche von den Anwendungskomponenten genutzt können • Container nutzen Protokolle, um miteinander zu kommunizieren • Bereitstellung von Diensten - Verzeichnis- und Namensdienste, Datenbankverbindungen, Transaktionen, Nachrichtendienste usw. • Trennung der Geschäftslogik von den Diensten der J2EEPlattform Quelle: in Anlehnung an [Sun04a] 75 J2EE-basierte Softwarearchitektur Eigenschaften eines Containers EJB 4 EJB 3 EJB 2 EJB Container EJB 1 APIs Beispiel: EJB Container • J2EE-Spezifikation definiert, welche APIs von den Containern angeboten werden müssen • Container-Werkzeuge zur Verwaltung des Containers und der Anwendungskomponenten • Interpretation eines standardisierten Dateiformats, um die Anwendungskomponenten im Container installieren zu können 76 J2EE-basierte Softwarearchitektur Vorteile des Container-Konzepts • Implementation von grundlegenden Klassen und Funktionen - APIs der J2SE und J2EE • Implementation und Kapselung von Kommunikationsprotokollen • Bereitstellung und Wiederverwendung von Diensten - Management von Verbindungen (Connection Pooling) Unterstützung von Transaktionen Sicherheitsfunktionen Lebenszyklusmanagement Verzeichnisdienste • Plattform-Unabhängigkeit • Skalierbarkeit - Kapselung der benötigten Funktionen durch die Container 77 J2EE-basierte Softwarearchitektur Nachteile des Container-Konzepts • Abhängigkeit der Anwendung vom Container - Container implementiert die Laufzeitumgebung und Dienste - Absturz des Containers führt zum Absturz der Anwendung • Abhängigkeit der Anwendung von anderen Anwendungen - Anwendung A kann die Stabilität von Anwendung B gefährden, wenn beide Anwendungen im identischen Container ausgeführt werden • Implementation der vom Container geforderten Schnittstellen notwendig - Flexibilität vs. Wiederverwendung 78 J2EE-basierte Softwarearchitektur Klassifikation der Dienste • Protokolle und Datenformate - Ziel ist die Interoperabilität zwischen verschiedenen Anwendungskomponenten und Containern - Gruppen von unterstützten Protokollen und Datenformaten: • • • • Internet und WWW-Protokolle Protokolle der Object Management Group (OMG) Protokolle der Java Technology Diverse Datenformate • Application Programming Interfaces (APIs) - auch: Programmierschnittstelle - analog zum Konzept der Protokolle und der ausgetauschten Nachrichten - Fokus auf Java-basierte APIs Quelle: in Anlehnung an [Sun04a] 79 J2EE-basierte Softwarearchitektur Dienste der Container - Überblick JRMP IIOP IIOP HTTP(S) HTTP(S) Applet Container Applet JRMP SOAP/HTTP Web Container JSP IIOP HTTP(S) JRMP SOAP/HTTP Enterprise JavaBean Container Servlet EJB Database J2SE J2EE J2EE J2SE J2SE Application Client Container Application Client J2EE J2SE JRMP Quelle: in Anlehnung an [Sun04a] und [Sun04b] SOAP/HTTP IIOP HTTP(S) Client Server 80 J2EE-basierte Softwarearchitektur Internet und WWW-Protokolle (1/2) • TCP/IP-Protokollfamilie - TCP und UDP über IP - Unterstützung durch die J2SE, welche die jeweilige Betriebssystemfunktionalität kapselt - siehe http://www.ietf.org und http://www.rfc-editor.org • HTTP 1.1 - Unterstützung durch die J2SE, welche die jeweilige Betriebssystemfunktionalität kapselt - Client-seitiges API: java.net Package; Server-seitig: Servlet und JSP-Interfaces - Web Container muss HTTP-basierte Dienste auf dem Port 80 bereitstellen können - siehe http://www.ietf.org und http://www.rfc-editor.org 81 J2EE-basierte Softwarearchitektur Internet und WWW-Protokolle (2/2) • SSL 3.0, TLS 1.0 - Web Container muss HTTPS-basierte Dienste auf dem Port 443 bereitstellen können - SSL 3.0: siehe http://wp.netscape.com/eng/ssl3/ - TLS 1.0: siehe http://www.ietf.org und http://www.rfc-editor.org • SOAP 1.1 - Unterstützung der SOAP-Spezifikation auf der Basis eines HTTP-basierten Transportprotokolls - siehe http://www.w3.org/2000/xp/Group/ • WS-I Basic Profile 1.0 - Detaillierte Parametrisierung des „Web Service-Protokollstack“ (SOAP, WSDL, UDDI) zur Sicherstellung der Interoperabilität zwischen verschiedenen Web Service-Implementationen - siehe http://www.ws-i.org 82 J2EE-basierte Softwarearchitektur Protokolle der Object Management Group (OMG) (1/2) • Internet Inter-ORB Protocol (IIOP) 1.2 - Teil der CORBA-Spezifikation der OMG: Kommunikationsprotokoll zwischen Object Request Brokern - Verwendung des IIOP als Protokoll für Java Remote Method Invocation (Java RMI) - siehe http://www.omg.org/cgi-bin/doc?formal/99-10-07 • EJB Interoperability Protocol - Detaillierte Parametrisierung des IIOP zur Nutzung als Kommunikationsprotokoll zwischen Enterprise JavaBeans (EJB) - siehe Sun Microsystems - Enterprise JavaBeans Specification, Version 2.1 ([Sun04b]) 83 J2EE-basierte Softwarearchitektur Protokolle der Object Management Group (OMG) (2/2) • CORBA Interoperable Naming Service Protocol - IIOP-basiertes Protokoll zur Implementation eines verteilten Namens- und Verzeichnisdienstes - siehe http://www.omg.org/cgi-bin/doc?formal/00-06-19 84 J2EE-basierte Softwarearchitektur Protokolle der Java Technology • Java Remote Method Protocol (JRMP) - Protokoll der ersten Versionen der Java Remote Method Invocation (Java RMI) APIs - siehe http://java.sun.com/j2se/1.4.2/docs/guide/rmi/ 85 J2EE-basierte Softwarearchitektur Datenformate (1/2) • XML 1.0 - Basis für XML-basierte Dokumente und Nachrichten - siehe http://www.w3.org/XML/Core/ • HTML 3.2 - Keine direkte Unterstützung durch APIs, aber Web Clients müssen HTML darstellen können - siehe http://www.w3.org/MarkUp/ • Bildformate - Unterstützung der Formate GIF und JPEG entsprechend der APIs im Package java.awt.image - http://java.sun.com/j2se/1.4.2/docs/api/java/awt/packagesummary.html 86 J2EE-basierte Softwarearchitektur Datenformate (2/2) • Java Archives (JAR) - Standardformat zur Paketierung und Installation von Javabasierten Anwendungskomponenten - Installation von Applets vs. Installation im Container - siehe http://java.sun.com/j2se/1.4.2/docs/guide/jar/ • Java Class File Format - Datenformat zur Ausführung von Klassen in der Java Virtual Machine - siehe http://java.sun.com/docs/books/vmspec/ 87 J2EE-basierte Softwarearchitektur Dienste der Container - Überblick JRMP IIOP IIOP HTTP(S) IIOP HTTP(S) HTTP(S) JRMP Applet Container Applet SOAP/HTTP Web Container JSP JRMP Enterprise JavaBean Container Servlet EJB J2EE API J2SE Database API API API SOAP/HTTP J2EE API J2SE J2SE Application Client Container Application Client API J2EE API J2SE JRMP SOAP/HTTP IIOP HTTP(S) Quelle: in Anlehnung an [Sun04a] und [Sun04b] 88 J2EE-basierte Softwarearchitektur APIs der J2SE • Erforderliche Unterstützung der APIs der Java 2 Standard Edition, Version 1.4 durch alle Containertypen - siehe http://java.sun.com/j2se/1.4.2/docs/ • Folgende APIs sind in Bezug auf die J2SE optional, für die J2EE allerdings verbindlich - Java RMI over IIOP (RMI-IIOP) Java IDL Java Database Connectivity (JDBC) API Java Naming and Directory Interface (JNDI) Java API For XML Processing (JAXP) Java Authentication and Authorization Service (JAAS) 89 J2EE-basierte Softwarearchitektur APIs der J2EE (1/5) API Beschreibung der Dienste/Schnittstellen Servlet 2.4 Erweiterung der Funktionalität eines Web Servers, um dynamische Webseiten auf der Basis der Java-Plattform zu erstellen; Gegenstück zu Technologien wie CGI und ASP JavaServer Pages (JSP) Specification 2.0 Einbettung von Java-Code und vordefinierten Befehlen in statische HTML-Seiten; JSPs werden mit einem JSP-Compiler in Servlets übersetzt Enterprise JavaBeans (EJB) Specification 2.1 Server-seitige, verteilte Komponentenarchitektur Java Messaging Service (JMS) Specification 1.1 Programmierschnittstelle zwischen einem Container und einer Nachrichten-basierten Middleware 90 J2EE-basierte Softwarearchitektur APIs der J2EE (2/5) API Beschreibung der Dienste/Schnittstellen Java Transaction API (JTA) 1.0 Programmierschnittstelle zwischen den beteiligten Parteien einer verteilten Transaktion (Anwendungen, Ressourcen Manager und Application Server) JavaMail 1.3 Ermöglicht E-Mail-Nachrichten zu erstellen, zu versenden und zu empfangen (MIME, E-Mail Message Stores) JavaBeans Activation Framework (JAF) 1.0 Unterstützung der Konvertierung von MIMEDatentypen in Java-Objekte 91 J2EE-basierte Softwarearchitektur APIs der J2EE (3/5) API Beschreibung der Dienste/Schnittstellen Java API for XML Processing (JAXP) 1.2 Erstellung und Bearbeitung von XMLDokumenten auf der Basis der Programmiermodelle SAX und DOM; Schnittstellen zu einer XSLT-Transformationsengine J2EE Connector Architecture 1.5 Programmierschnittstelle zu Resource Adaptern, welche die Ausführung von Transaktionen unterstützen Web Services for J2EE 1.1 Beschreibung der Implementierung und Veröffentlichung eines Web Service Endpoints Java API for XMLbased RPC (JAXRPC) 1.1 RPC auf der Basis von SOAP 92 J2EE-basierte Softwarearchitektur APIs der J2EE (4/5) API Beschreibung der Dienste/Schnittstellen SOAP with Erstellung und Bearbeitung von SOAP-basierten Attachments API for Nachrichten Java (SAAJ) 1.2 Java API for XML Registries (JAXR) 1.0 Programmierstelle für den Zugriff auf einen Verzeichnisdienst für Web Services entsprechend der Spezifikationen ebXML Registry und/oder UDDI J2EE Management 1.0 Steuerung und Überwachung von Komponenten der J2EE-Plattform (J2EE Management Model) Java Management Extensions (JMX) 1.2 Einbindung von Komponenten der J2EEArchitektur in das J2EE Management Model 93 J2EE-basierte Softwarearchitektur APIs der J2EE (5/5) API Beschreibung der Dienste/Schnittstellen J2EE Deployment 1.1 Schnittstelle zwischen einem Deployment Tool und einem J2EE-Server Java Authorisation Service Provider Contract for Containers (JACC) 1.0 Definition von neuen java.security.Permission Klassen zur Implementation des Autorisierungsmodells der J2EE-Plattform 94 J2EE-basierte Softwarearchitektur API-Anforderungen an die Container (1/4) API Application Client Applet Web EJB Container Container EJB 2.1 Ja Nein Ja Ja Servlet 2.4 Nein Nein Ja Nein JSP 2.0 Nein Nein Ja Nein JMS 1.1 Ja Nein Ja Ja JTA 1.0 Nein Nein Ja Ja Quelle: in Anlehnung an [Sun04a] 95 J2EE-basierte Softwarearchitektur API-Anforderungen an die Container (2/4) API Application Client Applet Web EJB Container Container JavaMail 1.3 Ja Nein Ja Ja JAF 1.0 Ja Nein Ja Ja JAXP 1.2 Ja Nein Ja Ja Connector Architecture 1.5 Nein Nein Ja Ja Web Services for J2EE 1.1 Ja Nein Ja Ja Quelle: in Anlehnung an [Sun04a] 96 J2EE-basierte Softwarearchitektur API-Anforderungen an die Container (3/4) API Application Client Applet Web EJB Container Container JAX-RPC 1.1 Ja Nein Ja Ja SAAJ 1.2 Ja Nein Ja Ja JAXR 1.0 Ja Nein Ja Ja Management 1.0 Ja Nein Ja Ja JMX 1.2 Ja Nein Ja Ja Quelle: in Anlehnung an [Sun04a] 97 J2EE-basierte Softwarearchitektur API-Anforderungen an die Container (4/4) API Application Client Applet Web EJB Container Container Deployment 1.1 Nein Nein Nein Nein JACC 1.0 Nein Nein Ja Ja Quelle: in Anlehnung an [Sun04a] 98 J2EE-basierte Softwarearchitektur Rollen in der Anwendungsentwicklung • Große Anzahl und großer Umfang der APIs • Hohe Anforderungen an Anwendungsentwickler • Dedizierte Rollen in der Anwendungsentwicklung, z.B. - Web Designer Web Entwickler EJB Entwickler Datenbank Entwickler • Querschnittsrollen, z.B. - Technischer Architekt - Anwendungsarchitekt 99 J2EE-basierte Softwarearchitektur Web-Komponenten einer Anwendung • Servlets • JavaServer Pages (JSP) • Client-seitige Applets, Klassen und Beans - vor der Ausführung: Übertragung vom Web-Server auf den Client (Web Browser) - Beans (auch: JavaBeans): Client-seitige Komponentenarchitektur • Hilfsklassen - für Server-seitige Ausführung (Servlets) • Statische Dokumente (HTML, Bilder, Videos, usw.) • Metainformationen - Deployment Descriptor: Konfiguration und Verbindung der einzelnen Web-Komponenten Quelle: in Anlehnung an [Sun04c] 100 J2EE-basierte Softwarearchitektur Paketierung und Installation Servlets JSPs Statische Dokumente Applets, Klassen, Beans Hilfsklassen Deployment Descriptor Web Archive (WAR) Web Container WAR-Datei J2EE J2SE • Paketierung der einzelnen Web-Komponenten zur Installation in einem WebContainer • Datenformat: Web ARchive Format (WAR) • Vorteile: - Installation eines WAR vs. Installation einzelner WebKomponenten - Konsistenz und Integrität - Paketierung und Versionierung 101 J2EE-basierte Softwarearchitektur Module einer J2EE-Anwendung J2EE Anwendung .EAR Datei 1 N 1 1 Web DD N Servlet 1 N EJB Modul .JAR Datei 1 1 1 Application DD 1 N Web Modul .WAR Datei 1 1 1 N Client Modul .JAR Datei 1 1 1 Resource Adapter Modul .JAR Datei 1 1 1 N JSP N HTML, GIF, usw. 1 EJB DD N EJB 1 Client DD N Client Class 1 Resouce DD N Resource Class 102 J2EE-basierte Softwarearchitektur Literaturangaben • [Sun04a] Sun Microsystems; Java 2 Platform, Enterprise Edition (J2EE) Specification, v1.4; http://java.sun.com/j2ee/j2ee-1_4-fr-spec.pdf - Chapter J2EE.2 - Plattform Overview Chapter J2EE.6 - Application Programming Interface Chapter J2EE.7 - Interoperability Chapter J2EE.8 - Application Assembly and Deployment 103 Servlets Ziele der Vorlesungseinheit • Verständnis des Lebenszyklus, der Steuerung und der Verwaltung von Servlets • Verständnis der Verteilungsaspekte von HTTP Server und Web Container • Verständnis der Dienste des Web Containers in Bezug auf Servlets • Verständnis des Filtering- und Session-Konzepts 104 Servlets Positionierung in der Softwarearchitektur Applet Container Applet Web Container JSP Servlet Enterprise JavaBean Container EJB Datenbank APIs APIs APIs Application Client Container Application Client APIs Quelle: in Anlehnung an [Sun04a] Komponente X nutzt Komponente Y 105 Servlets Begriffsdefinition: Servlet Server Client Web Browser Request Response Servlet HTTP Web Container Request Response Servlet • Java-basierte Klasse, welche die Funktionalität eines Web Servers erweitert • Erweiterung: Bereitstellung von dynamischen Inhalten auf der Basis eines Request-and-ResponseProgrammiermodells • Unabhängig vom Kommunikationsprotokoll • Abgeleitete Klassen zur Unterstützung des HTTP 106 Servlets Begriffsdefinition: Servlet Engine / Servlet Container HTTP Web Browser Web Container Request Servlet Response J2EE J2SE • Laufzeitumgebung für Servlets • Steuerung und Verwaltung der Servlets - dynamisches Laden und Instanziieren von Servlets - Management des Lebenszyklus von Servlets • Implementation und Kapselung des HTTP - Bereitstellung von HTTPNachrichten durch JavaObjekte für Servlets 107 Servlets HTTP Web Browser Request Response HTTP Server Verteilungsaspekte von Web Servern • Der HTTP-Server kann im Prozess des Web Containers laufen oder als eigenständiger Prozess ausgeführt werden Web Container Servlet J2EE J2SE Web Container Web Browser Request Response HTTP Server HTTP API Servlet J2EE - Prozess vs. Thread - Bereitstellung von statischen vs. dynamischen Inhalten • Eigenständiger HTTPServer wird über ein API integriert J2SE 108 Servlets Interface Servlet • Schnittstelle, die von allen Servlets implementiert wird - javax.servlet.Servlet • Methoden zum Management des Lebenszyklus - void init(ServletConfig config) - void destroy() • Methode zur Verarbeitung von Requests - void service(ServletRequest req, ServletResponse res) • Methoden zur Ermittlung von Informationen über das Servlet - ServletConfig getServletConfig() - String getServletInfo() 109 Servlets Steuerung und Verwaltung der Servlets Web Browser HTTP Web Container Request Servlet Response javax.servlet.Servlet J2EE J2SE • Aufruf der Methoden der Schnittstelle Servlet durch den Servlet Container • Schnittstelle Servlet ist ein Vertrag zwischen dem Servlet Container und dem Servlet - dynamisches Laden und Instanziieren von Servlets - Management des Lebenszyklus von Servlets 110 Servlets Klasse HTTPServlet (1/2) • Abstrakte Klasse zur Verarbeitung von Requests auf der Basis des HTTP • Abgeleitet von der abstrakten Klasse GenericServlet - GenericServlet wiederum implementiert die Schnittstelle Servlet • Service-Methode wird überschrieben (Overriding) - void service(HttpServletRequest req, HttpServletResponse resp) 111 Servlets Klasse HTTPServlet (2/2) • Aufruf einer speziellen Methode entsprechend des Typs des HTTP-Requests durch die Service-Methode - doGet für HTTP GET Requests doPost für HTTP POST Requests doPut für HTTP PUT Requests doDelete für HTTP DELETE Requests doHead für HTTP HEAD Requests doOptions für HTTP OPTIONS Requests doTrace für HTTP TRACE Requests • doGet- und doPost-Methode werden typischerweise von einem Anwendungsentwickler überschrieben 112 Servlets Lebenszyklus eines Servlets • Management des Lebenszyklus erfolgt durch den Servlet Container • Wenn noch keine Instanz des Servlets existiert - Laden der Servlet-Klasse - Erstellung einer Instanz der Servlet-Klasse - Aufruf der init-Methode des Servlets • Wenn ein HTTP-Request eintrifft - Aufruf der service-Methode mit den entsprechenden Requestund Response-Objekten 113 Servlets Mapping von Requests zu Servlets • Konfiguration von Web-Komponenten durch Deployment Descriptors • Mappings von Requests zu Servlets erfolgen auf der Basis von URL-Pfaden und Patterns • Beispiel: - Mappings im Deployment Descriptor • • • /foo/bar/* entspricht servlet1 /baz/* entspricht servlet2 /catalog entspricht servlet3 - Servlet-Aufrufe • • • • Pfad: /foo/bar/index.html - Aufruf: servlet1 Pfad: /baz - Aufruf: servlet2 Pfad: /baz/index.html - Aufruf: servlet2 Pfad: /catalog - Aufruf: servlet3 114 Servlets HTTP-Request • Kapselung des HTTP-basierten Client-Requests in einem Java-Objekt - javax.servlet.http.HttpServletRequest - Instanziierung des Objekts durch den Servlet Container • Zugriff auf die Parameter - HTTP GET Request: Parameter werden an URL gehängt (Query-String) - HTTP POST Request: Parameter werden im Body transportiert • Zugriff auf die Header - Bsp. User-Agent, Server, Last-Modified • Zugriff auf Cookies - Typischerweise nur Namen und Wert des Cookies 115 Servlets HTTP-Response • Kapselung der HTTP-basierten Server-Response in einem Java-Objekt - javax.servlet.http.HttpServletResponse • Instanziierung des Objekts durch den Servlet Container • Zugriff auf den Response-Buffer des Servlet Containers - Bsp. getBufferSize, setBufferSize, resetBuffer • Zugriff auf die Header - Bsp. Server, Last-Modified, Content-Type • Zugriff auf den Body - Bsp. HTML, XML, MIME - Content-Type Header muss entsprechend gefüllt sein! 116 Servlets Beispiel: Überschreiben der doGet-Methode public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(“IE - Methode doGet() wird aufgerufen ..."); // Setzen des HTTP-Headers 'Content Type' resp.setContentType("text/html"); // Hole eine Referenz zum Character Stream PrintWriter out = resp.getWriter(); // Schreibe die HTML-Tags in den Character Stream out.println("<HEAD><TITLE>Integration Engineering</TITLE></HEAD>"); out.println("<BODY>"); out.println("<H1>Teil 1: Verteilte Anwendungen auf der Basis von J2EE</H1>"); out.println("<H2>Kapitel Servlets</H2>"); // Ausgabe zur Indentifikation der Seite out.println("<P>Das ist die Ausgabe eines Servlets!</P>"); out.println("<BODY>"); // Schließe den Character Streams out.close(); } 117 Servlets Sequenz eines Servlet-Aufrufs 1 Web 2 Browser Web Container Request Response 7 Request 3 4 5 Response 6 9 Servlet 8 J2EE J2SE 1 Benutzer: Eingabe der URL 2 Web Browser: HTTP Request wird an Web Server/Web Container gesendet 3 Web Container: Überprüfung der URL und Mapping auf das Servlet 4 Web Container: Kapselung des Requests und Responses in jeweils einem Objekt 5 Web Container: Wenn noch keine Instanz des Servlets existiert, Laden und Erstellung einer Instanz der Servlet-Klasse, Aufruf der init-Methode des Servlets 6 Web Container: Aufruf der service-Methode des Servlets 7 Servlet: Aufruf entsprechenden do-Methode 8 Servlet: Schreiben der HTML-Tags in ein Buffer des Reponse-Objekts 9 Web Container: HTTP Response wird auf der Basis des Response-Objektes erstellt und versendet 118 Servlets Dispatching Requests (1/2) • Dispatching - Weiterleitung von Requests an ein anderes Servlet - Einbindung der Ausgaben eines anderen Servlets • RequestDispatcher-Objekt kapselt das entsprechende Servlet - RequestDispatcher rd = getRequestDispatcher(String path); - RequestDispatcher rd = getNamedDispatcher(String name); • Weiterleitung - rd.forward(request, response); • Einbindung - rd.include(request, response); 119 Servlets Dispatching Requests (2/2) 1 Request Web 2 Browser Response Web Container Request 3 Response 4 Servlet B 7 5 6 9 Servlet A ? 8 Servlet C J2EE J2SE 120 Servlets Filtering (1/2) • Transformation eines HTTP-Requests und/oder -Responses • Manipulation und Anpassung eines Requests und/oder Responses bevor oder nachdem ein Servlet aufgerufen wird • Einsatzszenarios - Logging und Auditing Kompression Verschlüsselung Trigger • Filter implementieren die Schnittstelle javax.servlet.Filter - doFilter(ServletRequest request, ServletResponse response, FilterChain chain) • Verkettung von mehreren Filtern - chain.doFilter() 121 Servlets Filtering (2/2) Web Container Request 1 Response Request 3 Response 4 Filter Web Browser Filter 2 7 5 6 9 Servlet 8 J2EE J2SE Filter Chain Filter A Filter B Filter C 122 Servlets Sessions HTTP Request A Web Browser Response A Web Container Servlet Request B Response B J2EE J2SE • HTTP ist ein zustandloses Protokoll • Anforderung: mehrere Requests müssen einem Client zugeordnet und in einer Session gruppiert werden • Mehrere Mechanismen zum Aufbau und der Verfolgung von Session verfügbar - Session Tracking Mechanisms 123 Servlets Session Tracking Mechanismen • Cookies - Servlet Container sendet einen Cookie an den Client und der Client sendet bei jedem nachfolgenden Request den Cookie mit • URL Rewriting - Erweiterung des URL-Pfads um eine Session-ID, welche vom Servlet Container initial erstellt und bei nachfolgenden Requests ausgewertet wird - Bsp. http://www.shop.com/index.html;jsessionid=1234 • Secure Sockets Layer (SSL) Sessions - Aufbau und Verfolgung einer Session innerhalb der SSL - Servlet Container nutzt diese Session zur Verfolgung der HTTPRequests 124 Servlets Eigenschaften von Sessions • Attribute - Zugriff von Servlets auf Attribute im Session-Kontext - Lesen und Schreiben von Attributen • Timeouts - HTTP unterstützt keine Nachricht zum Beenden einer Session - Verwendung eines Timeouts zur Identifikation einer beendeten Session - Timeout Period: Konfigurationsparameter des Servlet Containers 125 Servlets Beispiel: Zugriff auf eine Session in der doGet-Methode public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter out = resp.getWriter(); // Hole eine Referenz auf die aktuelle Session. Wenn die Session noch // nicht existiert, wird sie erstellt! HttpSession session = req.getSession(true); if ( session.isNew() ) { out.println("<H1>Es wurde eine neue Session erstellt. Session ID: " + session.getId() + "</H1>"); session.setAttribute("MySessionAttribute", "4711"); } else { out.println("<H1>Es existiert bereits eine Session. Session ID: " + session.getId() + "</H1>"); } } 126 Servlets Beispiel: Zugriff auf Attribute in einer Session public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter out = resp.getWriter(); // Hole eine Referenz auf die aktuelle Session. Wenn die Session noch // nicht existiert, liegt ein Fehler vor, da die Startseite noch nicht // besucht wurde! HttpSession session = req.getSession(true); if ( session.isNew() ) { out.println("<H1>Sie müssen zunächst die <a href=" + resp.encodeURL("/vtbdv1/startsession") + ">Startseite</a> aufrufen!</H1>"); // Lösche die zuvor erstellte Session wieder session.invalidate(); } else { out.println("<H1>Sie befinden sich in der Session mit ID: " + session.getId() + "</H1><BR>"); out.println("<H1>Der Wert des Sessionattributs 'MySessionAttribute' : " + session.getAttribute("MySessionAttribute") + "</H1><BR>"); } 127 } Servlets Literaturangaben • [Sun04c] Sun Microsystems; Java Servlet Specification, Version 2.4, http://java.sun.com/products/servlet/download.html - Chapter SRV.1 Overview Chapter SRV.2 The Servlet Interface Chapter SRV.4 The Request Chapter SRV.5 The Response Chapter SRV.6 Filtering Chapter SRV.7 Sessions Chapter SRV.8 Dispatching Requests Chapter SRV.11 Mapping Requests to Servlets 128 JavaServer Pages Ziele der Vorlesungseinheit • Verständnis des JavaServer Page-Konzepts • Verständnis der Elemente einer JavaServer Page 129 JavaServer Pages Positionierung in der Softwarearchitektur Applet Container Applet Web Container JSP Servlet Enterprise JavaBean Container EJB Datenbank APIs APIs APIs Application Client Container Application Client APIs Quelle: in Anlehnung an [Sun04a] Komponente X nutzt Komponente Y 130 JavaServer Pages Begriffsdefinition: JavaServer Page (JSP) HTTP Web Browser Request Web Container JSP Response J2EE J2SE • Text-basiertes Dokument, welches beschreibt wie dynamische Inhalte für einen Client bereitgestellt werden • Enthält zwei Arten von Inhalten - statische Inhalte wie z.B. HTML und XML - dynamische Inhalte, welche mit sog. JSP Elementen erstellt werden • Empfohlene Dateiendung - *.jsp 131 JavaServer Pages JavaServer Pages vs. Servlets HTTP Web Browser Web Container JSP Request Response Servlet J2EE J2SE • JavaServer Pages werden (spätestens) beim ersten Aufruf in Servlets übersetzt • Alle folgende Requests führen lediglich zu einem Aufruf des Servlets • JavaServer Pages Spezifikation basiert auf der Servlet Spezifikation - Steuerung und Verwaltung der Servlets - HTTP-Request- und -Response-Objekte - usw. 132 JavaServer Pages Beispiel: JavaServer Page <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <TITLE>Integration Engineering</TITLE> </HEAD> <BODY> <H1>Teil 1: Verteilte Anwendungen auf der Basis von J2EE</H1> <H2>Kapitel JavaServer Pages</H2> <H3>Dynamische HTML-Seite auf der Basis einer JSP</H3> <P>Das ist eine dynamische Seite!</P> <% for (int i=0; i < 20; i++ ) { out.println("<P>Das ist die " + i + ". Ausgabe einer JavaServer Page!</P>"); } %> </BODY> </HTML> 133 JavaServer Pages Begriffsdefinition: JSP Element • • • • Steuerung der Übersetzung in ein Servlet Erstellung und Zugriff auf Objekte Definition von Methoden und des Kontrollflusses Zwei Syntaxen möglich - Standard • Syntax an XML angelehnt, aber nicht „well-formed“ - XML • Zugriff und Validierung mit XML-Parser möglich 134 JavaServer Pages JSP Elementtypen • Directives - Anweisungen, welche bei der Übersetzung in ein Servlet durch die JSP Engine verarbeitet werden • Scripting Elements - Declarations • Deklaration von Variablen und Methoden innerhalb einer JSP-Seite - Scriplets • Code-Fragmente, welche während der Verarbeitung des Requests ausgeführt werden - Expressions • Ausdrücke, welche in eine Zeichenkette konvertiert und (über den sog. JSP Writer) ausgegeben werden • Actions - Erstellen, benutzen und/oder verändern Objekte 135 JavaServer Pages Directives • Erzeugen keine Ausgaben • Standard Syntax - <%@ page page_directive_attr_list %> • XML-basierte Syntax - <jsp:directive.page page_directive_attr_list /> • Bsp. Standard Syntax - <%@ page contentType=”text/html” %> - Konfiguration des MIME-Types in einer Response-Nachricht 136 JavaServer Pages Scripting Elements - Declarations • Deklaration von Variablen und Methoden, welche innerhalb der JSP-Seite verwendet werden • Erzeugen keine Ausgaben • Standard Syntax - <%! declaration(s) %> • XML-basierte Syntax - <jsp:declaration> declaration </jsp:declaration> • Bsp. Standard Syntax - <%! int i = 0; %> - Deklaration und Initialisierung der Variablen i 137 JavaServer Pages Scripting Elements - Scriplets • Code-Fragmente, welche während der Verarbeitung des Requests ausgeführt werden • Scriplets können zuvor deklarierte Variablen modifizieren • Scriplets können Ausgaben generieren • Standard Syntax - <% scriptlet %> • XML-basierte Syntax - <jsp:scriptlet> code fragment </jsp:scriptlet> • Bsp. Standard Syntax - <% i++; %> - Inkrement der Variablen i 138 JavaServer Pages Scripting Elements - Expressions • Ausdrücke, welche in eine Zeichenkette konvertiert und (über den sog. JSP Writer) ausgegeben werden • Standard Syntax - <%= expression %> • XML-basierte Syntax - <jsp:expression> expression </jsp:expression> • Bsp. Standard Syntax - <%= (new java.util.Date()).toString() %> - Ausgabe des Datums als Zeichenkette 139 JavaServer Pages Actions • Erstellen, benutzen und verändern Objekte • Standard Actions - in der Spezifikation vordefiniert • Custom Actions - benutzerdefinierte Actions, welche über einen Erweiterungsmechanismus (sog. Tag Libraries) integriert werden • Nur eine XML-basierte Syntax - <tag attr1=”attribute value”... >body</tag> 140 JavaServer Pages Beispiel: Action <jsp:useBean> • Zuweisung eines Objekts mit einer entsprechenden ID und innerhalb eines definierten Scopes • Klasse des Objekts muss der JavaBean-Spezifikation entsprechen, d.h. eine JavaBean sein • Flexible Semantik - Wenn das Objekt noch nicht unter der ID und im definierten Scope existiert, wird es vor der Zuweisung erstellt • Syntax - <jsp:useBean id="name" scope="page|request|session|application" typeSpec /> • Beispiel - <jsp:useBean id=”customer” class=”com.myco.Customer” /> 141 JavaServer Pages Beispiel: JavaServer Page mit JSP Elementen (1/2) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <jsp:useBean id="cust" class="com.softec.vtbdv1.beans.Customer" scope="session"> <jsp:setProperty name="cust" property="surname" value="Müller"/> <jsp:setProperty name="cust" property="firstname" value="Karl-Heinz"/> </jsp:useBean> <HTML> <HEAD> <%-- Directives --%> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" session="true"%> <TITLE>Integration Engineering</TITLE> </HEAD> 142 JavaServer Pages Beispiel: JavaServer Page mit JSP Elementen (2/2) <BODY> <H1>Teil 1: Verteilte Anwendungen auf der Basis von J2EE</H1> <H2>Kapitel JavaServer Pages</H2> <H3>JSP Elementtypen - Beispiele</H3> <%-- Declarations --%> <%! int i = 1; String str = new String("Zeichenkette"); %> <%-- Scriplets --%> <% for (; i < 5; i++) { out.println("Zeile Nummer: " + i + "<BR><BR>"); } %> <% out.println("Der Wert der Variablen 'str' ist: " + str + "<BR><BR>"); %> <%-- Expressions --%> <%= (new java.util.Date()).toString() %> <BR><BR> <%= cust.getSurname() + ", " + cust.getFirstname() %> </BODY> </HTML> 143 JavaServer Pages Literaturangaben • [Sun04c] Sun Microsystems; Java Servlet Specification, Version 2.4, http://java.sun.com/products/servlet/download.html - Chapter JSP.1 Core Syntax and Semantics 144 Enterprise JavaBeans Ziele der Vorlesungseinheit • Verständnis der Eigenschaften, Lebenszyklen und Nutzung der unterschiedlichen EJB-Typen • Verständnis der Dienste des EJB-Containers • Verständnis der Verteilungsaspekte und Schnittstellentypen der unterschiedlichen EJB-Typen • Verständnis und Bewertung der verschiedenen Entwurfsaspekte • Verständnis und Bewertung der Schnittstellen- und EJBTypen 145 Enterprise JavaBeans Positionierung in der Softwarearchitektur Applet Container Applet Web Container JSP Servlet Enterprise JavaBean Container EJB Datenbank APIs APIs APIs Application Client Container Application Client APIs Quelle: in Anlehnung an [Sun04a] Komponente X nutzt Komponente Y 146 Enterprise JavaBeans Begriffsdefinition: Enterprise JavaBean Enterprise JavaBean Container Client Methodenaufruf EJB Methodenergebnis J2EE J2SE • Server-seitige Architektur zur Entwicklung von komponenten-basierten und verteilten Anwendungen • Ausführung innerhalb eines Enterprise JavaBean (EJB) Containers • Aufruf durch verschiedene potenzielle Clients wie z.B. - Applet Container Application Client Container Web Container EJB Container 147 Enterprise JavaBeans Begriffsdefinition: Enterprise JavaBean Container • Laufzeitumgebung für EJBs • Steuerung und Verwaltung der EJBs Enterprise JavaBean Container Client Methodenaufruf Methodenergebnis EJB J2EE J2SE - dynamisches Laden und Instanziieren von EJBs - Management des Lebenszyklus von EJBs • Bereitstellung von Diensten wie z.B. - Kapselung der Kommunikation mit Clients - Transaktionen - Persistenz 148 Enterprise JavaBeans Eigenschaften der Enterprise JavaBeans Client Client View Enterprise JavaBean Container EJB Component Contract J2EE J2SE • EJBs enthalten i.d.R. die Geschäftslogik einer Anwendung • Konfiguration zum Zeitpunkt der Installation im Container • Zugriff der Clients wird durch den Container vermittelt • Zwei wesentliche Schnittstellen - zwischen Client und Container - zwischen EJB und Container 149 Enterprise JavaBeans Clients der EJBs JRMP IIOP IIOP HTTP(S) HTTP(S) Applet Container Applet JRMP SOAP/HTTP Web Container JSP IIOP HTTP(S) JRMP SOAP/HTTP Enterprise JavaBean Container Servlet EJB EJB Database J2SE J2EE J2EE J2SE J2SE Application Client Container Application Client J2EE J2SE JRMP Quelle: in Anlehnung an [Sun04a] und [Sun04b] SOAP/HTTP IIOP HTTP(S) Client Server 150 Enterprise JavaBeans Verteilung der Clients Applet Container Applet Web Container JSP Enterprise JavaBean Container Servlet EJB EJB J2EE J2EE J2SE J2SE J2SE JVM JVM JVM Database Application Client Container Application Client J2EE J2SE JVM Quelle: in Anlehnung an [Sun04a] und [Sun04b] Client Server 151 Enterprise JavaBeans J2EE Server mit Web und EJB Container Applet Container Applet Web Container JSP Enterprise JavaBean Container Servlet EJB EJB Database J2SE J2EE Server JVM J2EE J2SE Application Client Container JVM Application Client J2EE J2SE JVM Client Server 152 Enterprise JavaBeans Local vs. Remote Clients Kriterium Local Client Remote Client Ortstransparenz Nein ja Ort der EJB in der identischen JVM in einer anderen JVM (auf dem identischen oder einem anderen Rechner) Typ der Schnittstelle Java Interface Java Remote Interface Methodenparameter Pass by Reference und -ergebnis Pass by Value 153 Enterprise JavaBeans Aspekte des Entwurfs • Flexibilität der Verteilung - Entfernte Schnittstellen ermöglichen Ortstransparenz und unterstützen somit auch Local Clients • Effizienz der Methodenaufrufe - Entfernte Methodenaufrufe sind „teuer“ (Marshalling, Latenzzeit, Kopieren von Methodenparametern und Ergebnissen, usw.) • Isolation der Objekte - Keine Seiteneffekte durch Manipulation von gemeinsam genutzten Objekten (Entkopplung von Client und EJB) • Umfang der Fehlerbehandlung - Netzwerkkommunikation als zusätzliche Fehlerquelle Quelle: in Anlehnung an [Sun04b] 154 Enterprise JavaBeans Granularität der EJBs Enterprise JavaBean Container Client 3 Methodenaufruf 2 EJB 2 EJB 3 1 EJB 1 Methodenergebnis 4 EJB 4 Database J2EE J2SE 1 Remote Interface 2 3 4 Local Interface Session Facade Pattern vgl. [AlCM03] 155 Enterprise JavaBeans Schnittstellen zwischen Client und Container • Local und Remote Client View umfassen Client Cient View Enterprise JavaBean Container EJB - Home Interface - Component Interface • Remote Client View enthält zusätzlich - Metadata Interface Component Contract J2EE J2SE 156 Enterprise JavaBeans Home Interface • Definition von Methoden zum Erstellen, Löschen und Auffinden von EJBs eines Typs • Definition von Methoden, welche nicht an eine spezielle EJBInstanz gebunden sind • Spezifikation der Schnittstelle durch den EJB-Entwickler - Container generiert eine Klasse / Klassen, welche die Schnittstelle implementiert / implementieren • Typ des Client Views bestimmt von welcher Schnittstelle das Home Interface abgeleitet werden muss - Remote Client View: javax.ejb.EJBHome - Local Client View: javax.ejb.EJBLocalHome 157 Enterprise JavaBeans Component Interface • Definition von Methoden, welche die Geschäftslogik implementieren und vom Client aufgerufen werden können • Spezifikation der Schnittstelle durch den EJB-Entwickler - Container generiert eine Klasse / Klassen, welche die Schnittstelle implementiert / implementieren • Typ des Client Views bestimmt von welcher Schnittstelle das Component Interface abgeleitet werden muss - Remote Client View: javax.ejb.EJBObject - Local Client View: javax.ejb.EJBLocalObject 158 Enterprise JavaBeans Metadata Interface • Definition von Methoden zur Abfrage von Metadaten einer EJB - Metadaten bezüglich des Home und Component Interface • Nutzung der Metadaten durch - Werkzeuge, die bereits im Container installierte EJBs analysieren und nutzen - Clients, die eine Scripting Language verwenden („dynamischer“ Aufruf von EJBs) - Interface: javax.ejb.EJBMetaData 159 Enterprise JavaBeans Object Broker Pattern (Wiederholung) Rechner 1 (Client) Rechner 2 (Server) Objekt A Objekt B Methoden- Methoden- Methoden- Methoden- aufruf ergebnis ergebnis aufruf ServerProxy Request ClientProxy Reply Reply Object Request Broker Request Object Request Broker RPC 160 Enterprise JavaBeans Nutzung einer entfernten EJB (1/2) Enterprise JavaBean Container JNDI 1 lookup( <JNDI-Name> ) Client 2 Client Object 3 EJBHome create() Object Proxy 4 businessMethod() RMI EJBHome Object implements Home Interface implements Home Interface EJBObject Proxy EJBObject implements Component Interface RMI implements Component Interface create() Bean Object implements javax.ejb. <Typ der Bean> 5 businessMethod() J2EE J2EE J2SE J2SE JVM JVM 161 Enterprise JavaBeans Nutzung einer entfernten EJB (2/2) // Initialisierung des Kontextes für die // folgende JNDI-Operation Context initialContext = new InitialContext(); // Ermittlung des Objektes Object object = initialContext.lookup( "ejb/com/softec/vtbdv1/CustomerFacadeHome"); // Type Cast des Objektes auf Remote Home // Interface CustomerFacadeHome facadeHome = (CustomerFacadeHome)javax.rmi.PortableRemoteO bject.narrow( object, CustomerFacadeHome.class ); // Erstellung der EJB-Instanz CustomerFacade facade = facadeHome.create(); • Ermittlung des Objektes, welches das Remote Home Interface implementiert - JNDI wird als Objektspeicher verwendet - Type Cast erfolgt über statische Methode narrow(), um CORBAKompatibilität zu erhalten • Erstellung und Nutzung der EJB-Instanz // Aufruf der Methode (Geschäftslogik) int i = facade.getNumOfOpenOrders( customerID ); 162 Enterprise JavaBeans Nutzung einer lokalen EJB (1/2) Enterprise JavaBean Container JDNI 1 lookup( <JNDI-Name> ) 2 Client Object create() 3 EJBLocal Home Object implements Home Interface EJBLocal Object 4 businessMethod() create() implements Component Interface Bean Object implements javax.ejb. <Typ der Bean> 5 businessMethod() J2EE J2SE JVM 163 Enterprise JavaBeans Nutzung einer lokalen EJB (2/2) // Initialisierung des Kontextes für die // folgende JNDI-Operation Context initialContext = new InitialContext(); • Ermittlung des Objektes, welches das Local Home Interface des Objektes Cast implementiert // Ermittlung des Objektes und Java Type OrderListLocalHome orderListLocalHome = (OrderListLocalHome)initialContext.lookup( "local:ejb/com/softec/vtbdv1/ OrderListLocalHome"); // Erstellung der EJB-Instanz OrderListLocal orderList = orderListLocalHome.create(); // Aufruf der Methode (Geschäftslogik) int i = orderList.getNumOfOrders( customerID , OPEN_ORDERS ); - JNDI wird als Objektspeicher verwendet - Type Cast auf der Basis des standard JavaMechanismus • Erstellung und Nutzung der EJB-Instanz 164 Enterprise JavaBeans Erstellung vs. Generierung von Klassen und Interfaces Client Home Interface Enterprise JavaBean Container extents javax.ejb. EJBHome implements Client Class implements EJBHome Proxy Class EJBHome Class javax.ejb. <Typ der Bean> implements Component Interface Bean Class extents javax.ejb. EJBObject implements EJBObject Proxy Class implements EJBObject Class Erstellung durch Entwickler Generierung durch Werkzeug Teil des J2EE APIs 165 Enterprise JavaBeans Schnittstellen zwischen EJB und Container Client Cient View Enterprise JavaBean Container EJB Component Contract J2EE J2SE • Vertrag zwischen einer EJB und dem Container, welcher aus zwei Schnittstellen besteht - Methoden, welche die Geschäftslogik implementieren (vgl. Component Interface) - Callback-Methoden, welche vom Typ der EJB abhängig sind • Implementation der Schnittstellen erfolgt durch die sog. Bean Class 166 Enterprise JavaBeans Typen von Enterprise JavaBeans - Überblick • Session Beans - implementieren Funktionen, welche i.d.R. von einem Client innerhalb eines Geschäftsprozesses aufgerufen werden - kurzlebig • Entity Beans - objekt-orientierte Sicht auf Daten in einer Datenbank - langlebig • Message-driven Beans - implementieren Funktionen, welche asynchron beim Eintreffen einer Client Message ausgeführt werden - kurzlebig 167 Enterprise JavaBeans Eigenschaften von Session Beans Client Cient View Enterprise JavaBean Container EJB javax.ejb.SessionBean J2EE J2SE • Implementation von Funktionen, die von einem Client aufgerufen werden • Funktionen können im Kontext einer Transaktion ausgeführt werden - EJB Container verwaltet und steuert die Transaktionen (Dienst) • Zwei Subtypen von Session Beans - stateless - stateful 168 Enterprise JavaBeans Lebenszyklus von Stateless Session Beans • Verwaltung des Lebenszyklus erfolgt durch den Container 1. Class.newInstance() 2. setSessionContext() 3. ejbCreate() does not exist method ready ejbRemove() - Container ruft die CallbackMethoden der Schnittstelle javax.ejb.SessionBean auf • Keine Zuweisung zu einem bestimmten Client - Wiederverwendung von Instanzen ist möglich • Keine Speicherung von Zustandsinformationen Quelle: in Anlehnung an [Sun04b] - Effizienter Speicherverbrauch 169 Enterprise JavaBeans Lebenszyklus von Stateful Session Beans • Verwaltung des Lebenszyklus erfolgt durch Client und Container 1. Class.newInstance() 2. setSessionContext() 3. ejbCreate<Method>() method ready ejbActivate() ejbRemove() ejbPassivate() does not exist passive - Container ruft die CallbackMethoden der Schnittstelle javax.ejb.SessionBean auf • Stateful Session Beans können in den Zustand „passive“ übergehen - Serialisierung des Zustands der Bean auf einen Sekundärspeicher - Freigabe des Speicherbereichs der Bean Quelle: in Anlehnung an [Sun04b] 170 Enterprise JavaBeans Eigenschaften von Entity Beans • Objekt-orientierte Sicht auf Datenstrukturen in einer Datenbank Enterprise JavaBean Container Database Management System (DBMS) EJB javax.ejb.EntityBean J2EE J2SE Database - Primär: relationale Datenbanken • Sicht des Clients: für jede Entität in der Datenbank existiert ein Entity Objekt • Mehrere Clients können gleichzeitig auf ein Entity Objekt zugreifen - Container synchronisiert den Zugriff mit Hilfe von Transaktionen 171 Enterprise JavaBeans Lebenszyklus von Entity Beans • Verwaltung des Lebenszyklus erfolgt durch Container does not exist 1. Class.newInstance() 2. setSessionContext() Object.finalize() ejbActivate() ejbPassivate() • Zustand „pooled“ pooled ejbCreate <Method>() ejbRemove() ready ejbLoad() Quelle: in Anlehnung an [Sun04b] - Container ruft die CallbackMethoden der Schnittstelle javax.ejb.EntityBean auf - keine aktuelle Assoziation mit einem Datensatz in der Datenbank - es wurden keine Daten geladen („leere Instanz“) ejbStore() 172 Enterprise JavaBeans Finder Methods (1/2) Enterprise JavaBean Container JNDI 1 lookup( <JNDI-Name> ) Client findByPrimary(<Primary Key Class>) findByPrimary(<Primary Key Class>) 2 Client Object 3 EJBHome create() Object Proxy 4 businessMethod() RMI EJBHome Object implements Home Interface implements Home Interface EJBObject Proxy EJBObject implements Component Interface RMI implements Component Interface create() Bean Object implements javax.ejb. <Typ der Bean> 5 businessMethod() J2EE J2EE J2SE J2SE JVM JVM 173 Enterprise JavaBeans Finder Methods (2/2) • Bestandteil des Home Interfaces einer Entity Bean - jede Methode definiert einen Weg um ein Entity Objekt oder eine Menge von Entity-Objekten zu finden • Methodennamen beginnen mit dem Prefix „find“ • Verwendung der Methodenargumente bei der Suche - Abfragen werden deklarativ auf Basis der sog. EJB Query Language im Deployment Descriptor definiert • Ergebnis ist das EJBObject oder eine Menge der EJBObjects in einer Collection - Collection findByName( String name ) - EJB QL: SELECT object(o) FROM CustomerCMP o WHERE o.name = ?1 • Verbindlich ist die Finder Method findByPrimaryKey() - <Component Interface> findByPrimary( <Primary Key Class> ) 174 Enterprise JavaBeans Container-Managed Persistence (CMP) Entity Bean • Entwickler beschreibt persistente Attribute der Bean • Werkzeuge generieren zum Installationszeitpunkt den Code - Lese-, Speicher- und Löschoperationen auf den Daten in der Datenbank • Unterschiedliche relationale DBMS können bei Generierung berücksichtigt werden - Beachte: unterschiedliche Dialekte und Erweiterungen des SQL Standards 175 Enterprise JavaBeans Bean-Managed Persistence (BMP) Entity Bean • Entwickler ist für die Definition der persistenten Attribute und des Codes verantwortlich - Implementierung von Code zum Lesen, Speichern und Löschen von Daten in der Datenbank - Schnittstelle zwischen Container und DBMS basiert i.d.R. auf SQL • Unterschiedliche DBMS müssen vom Entwickler berücksichtigt werden - auch nicht-relationale DBMS können verwendet werden (hierarchisch, XML-basiert) 176 Enterprise JavaBeans Eigenschaften von Message-Driven Beans Enterprise JavaBean Container Client Messaging Provider EJB javax.ejb. MessageDrivenBean J2EE J2SE • Konsument einer asynchronen Nachricht, welche zum Aufruf der Message-Driven Bean führt • Nutzung durch den Client erfolgt durch das Versenden einer Nachricht an einen sog. Messaging Destination - Keine Implementation des Home, Component oder Metadata Interfaces 177 Enterprise JavaBeans Transaktionen Enterprise JavaBean Container Client Methodenaufruf 4 1 EJB 2 3 EJB 3 2 EJB 1 7 5 Methodenergebnis EJB 4 EJB 5 6 Database J2EE J2SE Zeit 1 Container: beginTransaction() 2 EJB 1: executeOrder() 3 EJB 2: calculateInvoice() 4 EJB 3: createInvoice() 5 EJB 4: calculateActualStock() 6 EJB 5: updateStock() 7 EJB Container: EndTransaction() 178 Enterprise JavaBeans Literaturangaben • [Sun04b] Sun Microsystems; Enterprise JavaBeans Specification, Version 2.1 - Chapter 4 Overview Chapter 5 Local, Remote, and Web Service Client Views Chapter 6 Client View of a Session Bean Chapter 7 Session Bean Component Contract Chapter 9 Client View of an Entity Chapter 10 Entity Bean Component Contract for ContainerManaged Persistence Chapter 12 Entity Bean Component Contract for Bean-Managed Persistence Chapter 14 Message-Driven Bean Component Contract Chapter 17 Support for Transactions Chapter 19 Support for Distribution and Interoperability 179 Agenda Einführung und Motivation Verteilte Objekte und Komponenten Verteilte Softwarearchitekturen J2EE-Plattform J2EE-basierte Softwarearchitektur Aspekte der Verteilung von J2EE-Anwendungen 180 Aspekte der Verteilung von J2EE-Anwendungen Ziele der Vorlesungseinheit • Verständnis der Konfigurationskriterien einer mehrschichtigen, verteilten Anwendung • Verständnis der grundlegenden Elemente und Konzepte von Konfigurationstopologien • Verständnis und Bewertung der vorgestellen Konfigurationen 181 Aspekte der Verteilung von J2EE-Anwendungen Einflussfaktoren auf eine Softwarearchitektur nach Balzert Einsatzbedingungen • sequenziell • nicht sequenziell (nebenläufig, verteilt, Echtzeit, parallel) Nicht funktionale Produktanforderungen • Änderbarkeit, Effizienz, Zuverlässigkeit Nicht funktionale Qualitätsanforderungen Softwarearchitektur • Skalierbarkeit, Wiederverwendbarkeit, Reaktionszeit Umgebungs- und Randbedingungen • Gegebene PlattformArchitektur (z.B. Mainframe) Quelle: in Anlehnung an [Balz96] 182 Aspekte der Verteilung von J2EE-Anwendungen Verteilung des Web und EJB Containers Applet Container Applet Web Container JSP Servlet Enterprise JavaBean Container EJB Datenbank APIs APIs APIs Application Client Container Application Client APIs Quelle: in Anlehnung an [Sun04a] 183 Aspekte der Verteilung von J2EE-Anwendungen Konfiguration der J2EE Server und Container Applet Container Applet Web Container JSP Enterprise JavaBean Container Servlet EJB Database J2SE JVM Application Client Container J2EE Server J2EE J2SE JVM Application Client J2EE J2SE JVM 184 Aspekte der Verteilung von J2EE-Anwendungen Kriterien der Konfiguration (1/3) • Sicherheit - Trennung des Web Servers vom Applikationsserver durch eine oder mehrere Firewalls • • Screening Router (Protocol Firewall) Application Gateway (Domain Firewall) • Geschwindigkeit - Antwortzeit für eine Transaktion unter Berücksichtigung einer bestimmten Last • Durchsatz - Anzahl der ausgeführten Transaktionen pro Zeiteinheit innerhalb eines bestimmten Zeitraums Quelle: vgl. [ABBC04] und [SCHI04] 185 Aspekte der Verteilung von J2EE-Anwendungen Kriterien der Konfiguration (2/3) • Skalierbarkeit - Erweiterung einer Konfiguration durch Hinzufügen von Rechnerkapazität • Hard- und Softwareelemente - Vertikale Skalierung • • zusätzliche Prozesse, identischer Rechnerknoten ermöglicht Ausfallsicherheit bezüglich der relevanten Softwareelemente (z.B. Betriebssystem) und des/der Serverprozesses/Serverprozesse - Horizontale Skalierung • • zusätzliche Prozesse auf unterschiedlichen Rechnerknoten ermöglicht zusätzlich Ausfallsicherheit bezüglich der relevanten Hardwareelemente Quelle: vgl. [ABBC04] und [SCHI04] 186 Aspekte der Verteilung von J2EE-Anwendungen Kriterien der Konfiguration (3/3) • Verfügbarkeit - Wahrscheinlichkeit, dass die Funktionen einer Anwendung nutzbar sind, wenn sie benötigt werden • • Betriebszeit (Operating Time) vs. Stillstandzeit (Downtime) Failure vs. Fault - Maßnahme: durch Redundanz kann sog. Single Point of Failure vermieden werden • Wartbarkeit - Aktualisierung von Hard- und Softwareelementen • Ist abhängig von der Verfügbarkeit Quelle: vgl. [ABBC04] und [SCHI04] 187 Aspekte der Verteilung von J2EE-Anwendungen Konfiguration am Beispiel des WebSphere Application Server J2EE Java 2 Platform, Enterprise Edition Specification Reference Implementation Compatibility Test Suite Blue Prints • Anbieter eines J2EEkompatiblen Produkts implementieren entsprechende Werkzeuge und auch weiterführende Funktionen • Anlehnung der Begriffe und Konfigurationsbeispiele an das ausgewählte Produkt - aber: die Begriffe und Konzepte sind i.d.R. auf andere Produkte übertragbar! 188 Aspekte der Verteilung von J2EE-Anwendungen Begriffsdefinitionen: Server und Node • Server - J2EE-kompatibler Server • Node Web Container Enterprise JavaBean Container J2EE Server JVM Konfigurationsdaten auch: J2EE Server genannt - Laufzeitumgebung mit Web und/oder EJB Container - Ausführung in eigener JVM • Node - eine Installation eines Servers einschließlich der relevanten Konfigurationsdaten Quelle: in Anlehnung an [SCHI04] 189 Aspekte der Verteilung von J2EE-Anwendungen Begriffsdefinitionen: Cell und Cluster Cluster • Cluster Cell - logische Gruppierung von Cells zur Lastverteilung - kann eine oder mehrere Cells umfassen Node Web Container Enterprise JavaBean Container • Cell J2EE Server JVM Konfigurationsdaten Node Web Container Enterprise JavaBean Container J2EE Server JVM - logische Gruppierung von mehreren Nodes zu einer administrativen Einheit - unterschiedliche Cells können unterschiedliche Versionen des J2EE Servers und der Anwendung enthalten Quelle: in Anlehnung an [SCHI04] 190 Aspekte der Verteilung von J2EE-Anwendungen Verteilung der Last Web Container HTTP(S) J2EE J2SE Plug-In HTTP Server HTTP(S) Web Browser Servlet ? Cluster Web Container Servlet J2EE J2SE • Auch: Load Balancing oder Workload Management • Basiert auf Konfiguration eines Clusters • Beispiel: Routing des HTTPRequests - Anzahl der Cluster Member - Gewichtung des Member - % routed to Server_1 = weight_1 / (weight_1 + weight_2 + ... + weight_n) - Verfügbarkeit eines Cluster Members wird berücksichtigt Quelle: in Anlehnung an [SCHI04] 191 Aspekte der Verteilung von J2EE-Anwendungen Beispiel: Vertikale Skalierung mit Cluster (1/2) Application Server Node Web und EJB Container Web Server Redirector Node HTTP Server Plug-in Domain Firewall Protocol Firewall Internet (J2EE Server) Web und EJB Container (J2EE Server) Database Server Cluster Database Web und EJB Container (J2EE Server) Web und EJB Container (J2EE Server) Quelle: in Anlehnung an [SCHI04] 192 Aspekte der Verteilung von J2EE-Anwendungen Beispiel: Vertikale Skalierung mit Cluster (2/2) • Mehrere Nodes werden auf einem Rechnerknoten zu einem Cluster zusammengefasst • Jeder Node enthält die gleiche(n) Anwendung(en) • Vorteile - Effiziente Nutzung der Rechnerkapazität - Lastverteilung innerhalb des Clusters - Ausfallsicherheit bezüglich der JVM-Prozesse • Nachteile - Application Server Node ist Single Point of Failure - Web Server Redirector Node ist Single Point of Failure 193 Aspekte der Verteilung von J2EE-Anwendungen Beispiel: Horizontale Skalierung mit Cluster (1/2) Application Server Node Web und EJB Container Web Server Redirector Node HTTP Server Plug-in Domain Firewall Protocol Firewall Internet (J2EE Server) Web und EJB Container (J2EE Server) Database Server Cluster Application Server Node Database Web und EJB Container (J2EE Server) Web und EJB Container (J2EE Server) Quelle: in Anlehnung an [SCHI04] 194 Aspekte der Verteilung von J2EE-Anwendungen Beispiel: Horizontale Skalierung mit Cluster (2/2) • Cluster Member sind auf mehrere Rechnerknoten verteilt • Vorteile - Ausfallsicherheit bezüglich der JVM-Prozesse und der Hardware - Lastverteilung innerhalb des Clusters (über mehrere Rechnerknoten) • Nachteile - Zusätzliche Hardware - Erhöhter Administrationsaufwand durch zusätzliche Rechnerknoten - Web Server Redirector Node ist Single Point of Failure 195 Aspekte der Verteilung von J2EE-Anwendungen Beispiel: Horizontale Skalierung mit IP Sprayer (1/2) Presentation Server Node HTTP Server Plug-in Web Container (J2EE Server) Load Balancer Node IP Sprayer Load Balancer Backup IP Sprayer Domain Firewall Protocol Firewall Internet Presentation Server Node HTTP Server Plug-in Application Server Node EJB Container (J2EE Server) Web Container Database Server (J2EE Server) Cluster Database Presentation Server Node HTTP Server Plug-in Web Container (J2EE Server) Presentation Server Node HTTP Server Plug-in Web Container (J2EE Server) Application Server Node EJB Container (J2EE Server) Quelle: in Anlehnung an [SCHI04] 196 Aspekte der Verteilung von J2EE-Anwendungen Beispiel: Horizontale Skalierung mit IP Sprayer (2/2) • IP Sprayer auf dem Load Balancer Node verteilt die HTTP(S)Requests auf verschiedene Presentation Server Nodes - Load Balancer Backup Node eleminiert den IP Sprayer als Single Point of Failure • Presentation Server Nodes bilden keinen Cluster - Web Container erhält einen Request immer vom Web Server Plug-in des identischen Nodes - aber: Zusammenfassung in Cluster ist auch möglich • Application Server Nodes bilden einen Cluster - Cluster erscheint als ein logischer J2EE-Server mit EJB Container, welche u.a. die Datenbankzugriffe kapselt 197 Aspekte der Verteilung von J2EE-Anwendungen Beispiel: Horizontale Skalierung mit IP Sprayer (2/2) • Vorteile - Erhöhte Web Server Geschwindigkeit durch die Lastverteilung auf mehrere Web Server - Erhöhter Durchsatz: mehrere Rechnerknoten verarbeiten die Client Requests - Kein Single Point of Failure • • Beachte: Datenbank Server wird nicht betrachtet Presentation Server Nodes sollten auf mehrere Rechnerknoten verteilt werden • Nachteile - Zusätzliche Hardware (insbesondere Load Balance Nodes) - Erhöhter Administrationsaufwand durch zusätzliche Rechnerknoten 198 Aspekte der Verteilung von J2EE-Anwendungen Beispiel: Mehrfache Zellen (1/2) Cluster Cell 1 Load Balancer Node IP Sprayer Load Balancer Backup IP Sprayer Domain Firewall Protocol Firewall Internet Web Application Server Node HTTP Server Plug-in Web Container EJB Container Database Server Database Cell 2 Web Application Server Node HTTP Server Plug-in Web Container EJB Container Quelle: in Anlehnung an [SCHI04] 199 Aspekte der Verteilung von J2EE-Anwendungen Beispiel: Mehrfache Zellen (2/2) • Jede Zelle ist eine administrative Einheit und enthält genau eine Version der Anwendung und des J2EE Servers • IP Sprayer arbeitet auf der Ebene der Zellen • Vorteile - Isolation von Softwarefehlern insbesondere bei der Installation von • • • neuen Versionen der Anwendung neuen Versionen des J2EE Servers Fixes und Patches - Erhöhte Geschwindigkeit, da keine Kommunikation zwischen den Prozessen von unterschiedlichen Zellen • Nachteile - Erhöhter Administrationsaufwand, da jede Zelle eine eigene administrative Einheit ist 200 Aspekte der Verteilung von J2EE-Anwendungen Literaturangaben • [SCHI04] Sadler, Carla; Clifford, Lee; Heyward, Jeff; Iwamoto, Arihiro; Jakusz, Noelle; Laursen, Lars Bek; Lee, WonYoung; Mauny, Isabell; Rabbi, Shafkat; Sanchez, Ascension; IBM WebSphere Application Server V5.1 System Management and Configuration; WebSphere Handbook Series; 2004; http://www.redbooks.ibm.com/abstracts/sg246195.html?Open - Chapter 2. IBM WebSphere Application Server architecture - Chapter 3. Topology selection 201 Zusammenfassung und Ausblick Agenda Einführung und Motivation Verteilte Objekte und Komponenten Verteilte Softwarearchitekturen J2EE-Plattform J2EE-basierte Softwarearchitektur Aspekte der Verteilung von J2EE-Anwendungen 202 Zusammenfassung und Ausblick Rollen in einer Projektorganisation Projektmanagement Projektmanager Anforderungsmanagement Technische Architektur Anwendungsentwicklung Anwendungstest Analyst Softwarearchitekt Designer Tester Entwickler 203 Literaturverzeichnis Verwendete Literatur und Quellen (1/4) • [AlCM03] Alur, D.; Crupi, J.; Malks, D.; Core J2EE Patterns - Best Practices and Design Strategies, Second Edition; Prentice Hall; New York; 2003 • [ABBC04] Armstrong, Eric; Ball, Jennifer; Bodoff, Stephanie; Carson, Debbie Bode; Evans, Ian; Green, Dale; Haase, Kim; Jendrock, Eric Carson, Debbie Bode; Evans, Ian; Green, Dale; Haase, Kim; Jendrock, Eric; The J2EE Tutorial v1.4; Sun Microsystems; 2004; http://java.sun.com/j2ee/1.4/docs/tutorial/ doc/index.html • [Balz96] Balzert, Helmut; Lehrbuch der Software-Technik: Software-Entwicklung; Spektrum Akademischer Verlag; Heidelberg, Berlin, Oxford; 1996 204 Literaturverzeichnis Verwendete Literatur und Quellen (2/4) • [BaCK03] Bass, Len; Clements, Paul; Kazman, Rick; Software Architecture in Practice; 2. Auflage; Addision-Wesley; Boston; 2003 • [Kruc95] Kruchten, Philippe; Architectural Blueprints—The "4+1" View Model of Software Architecture; In, IEEE Software; Vol. 12 No. 6; November 1995; pp. 42-50 • [Rati03] Rational; The Rational Unified Process; Version 2003.06.13; http://www.ibm.com/developerworks/rational/ products/rup/ 205 Literaturverzeichnis Verwendete Literatur und Quellen (3/4) • [SCHI04] • [Sun04a] • [Sun04b] Sadler, Carla; Clifford, Lee; Heyward, Jeff; Iwamoto, Arihiro; Jakusz, Noelle; Laursen, Lars Bek; Lee, WonYoung; Mauny, Isabell; Rabbi, Shafkat; Sanchez, Ascension; IBM WebSphere Application Server V5.1 System Management and Configuration; WebSphere Handbook Series; 2004; http://www.redbooks.ibm.com/abstracts/ sg246195.html?Open Sun Microsystems; Java 2 Platform, Enterprise Edition (J2EE) Specification, v1.4; http://java.sun.com/j2ee/j2ee-1_4-fr-spec.pdf Sun Microsystems; Enterprise JavaBeans Specification, Version 2.1; http://java.sun.com/products/ejb/docs.html 206 Literaturverzeichnis Verwendete Literatur und Quellen (4/4) • [Sun04c] • [Sun04d] Sun Microsystems; Java Servlet Specification, Version 2.4; http://java.sun.com/products/servlet/ download.html Sun Microsystems; JavaServer Pages Specification, Version 2.0; http://java.sun.com/products/jsp/reference/api/ index.html 207