Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 6. Design – Wiederverwendung durch Komponentenmodelle – und Middleware 14. Mai 2002 Agenda • Komponentenmodelle & Middleware – – – – – – Begrifflichkeiten J2EE Services Middleware Messaging / JMS Tuple Space • Für Interessierte ein kurzer Exkurs Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -2- 1 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Ziel • • • • Verständnis für Komponenten und deren Einsatz Unterstützung von Komponenten durch Services Beispiel J2EE als eine mögliche Technologie Zusammenhang mit Middlewaretechnologien Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -3- Wiederverwendung mithilfe von Komponentenmodellen • Für komplexe Systeme reicht eine einfache Aufteilung in mehrere Schichten nicht aus! – Präsentation – Differenzierung Layouting, Zugriff, Kontrolle • MVC hatten wir schon – Geschäftslogik: ? • Wie umgehen mit vielen Klassen? • Haben diese ggf. verschiedene Aufgaben/Rollen? • Hier sind „Komponenten-Modelle“ sehr hilfreich – Wiederverwendung von • Wissen (im Sinne des SW-Engineering) • Design Konzepten • Programmcode – Zerlegung • Überschaubare, verteilbare Blöcke Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -4- 2 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Komponenten – Begriffsdefinition • „A component is a nontrivial, nearly independent, and replaceable part of a system that fulfills a clear function in the context of a well-defined architecture. A component conforms to and provides the physical realization of a set of interfaces“. Philipp Kruchten, Rational. • „A software component is a unit of composition with contextually specified interfaces and explicit context dependencies only. A software component can be deployed independently and is subject to third-party software.“ Clemens Szyperski, ComponentSoftware. • Eine in sich vollständige, wieder benutzbare Software-Einheit mit wohldefiniertem Interface, integrierbar über eine geeignete (Netzwerk-) Plattform (mit loser Kopplung). Eine Komponente beinhaltet auch Tests, Manuals, etc. Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -5- Komponenten – Nutzen • Qualitätssteigerung & Produktivitätssteigerung durch getestete, anpassbare Komponenten • Defekt-Elimination • Klare Grenzen zu sich ändernden Teilen (Austausch) • Reduzierte Entwicklungs- und Wartungskosten durch – Gekaufte Teile (COTS) bei geeigneter Integrationstechnologie – Standards – Robuste Architekturen, die Komponentenintegration unterstützen • Time-To-Market & bessere Planbarkeit durch Verringerung der Komplexität der Software • Bestehende SW wird wieder verwendbar durch Middleware • Zerschlagen grosser, monolithischer Entwicklungen in kleinere Einheiten (selbstständig testbar, austauschbar) Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -6- 3 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Komponenten – Beispiele • Technische Komponenten, z.B. Zahlengeneratoren, Session Management,.. • Geschäftliche Einheiten, z.B. Einkaufswagen, Verzeichnis, Katalog, ERP Integration,.. • Domain/Prozess-bezogene Einheiten, z.B. Auftragssystem, Online-Broker,.. • Beachte: Komponenten können unterschiedlicher Granularität sein Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -7- Komponenten – Charakteristika • • • • • • • • Schnittstelle Komponenten-Infrastruktur System zusammensetzen (Assembly) statt „nur“ bauen Anpassung zur Compile-Time versus Run-Time – „Komponenten werden zur Bauzeit erzeugt, Objekte zur Laufzeit“ „Buy before Make“ Lebenszyklus wird unterstützt (Design, ..., Tests) Wiederverwendbarkeit – Design der Komponente Granularität – Distributed C. / Business C. / Business Component System Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -8- 4 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Vorgehensweise – Randbedingungen • „Komponenten sollen das Leben erleichtern“, d.h.: – Bei Auswahl oder Entwicklung einer Komponente ist eine leichte Integrierbarkeit & Anpassbarkeit notwendig – Daher Wahl einer Infrastruktur / Middleware recht zentral • Services, die von Komponenten genutzt werden könnten – – – – – – – Transparente Transportmechanismen, Datenkonversionen Life-Cycle Support Transaktionsunterstützung Event-Management Security Verzeichnisse ... Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -9- Vorgehensweise – Verwendung von Komponenten • Komponenten Selektion/Qualifikation – Marktstudie, Analyse – Evaluation und Auswahl • Anpassung der Komponente – White/grey/black box – Parametrieren, Ableiten, Integrieren, Wrapper, Bridge, • Zusammenbau der Komponenten zu Systemen (Assembly) – Integration durch • • • • Message orientierte Middleware Objekt Request Broker Architektur Datenbank zentrischer Ansatz Webservices – Für „proprietäre“ Software gelten normale Entwurfs-Prozesse • Pflege und Weiterentwicklung des Systems Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -10- 5 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Vorgehensweisen – Bau von Komponenten – best practices • Fokus auf Autonomie, Flexibilität & Wiederverwendbarkeit – – – – – Hat die Komponenten einen Nutzen? Kann sie „generisch“ gebaut werden? Was alles kann/muss parametrisierbar sein? Ist sie in sich abgeschlossen? Welche Architektur soll zugrunde liegen? • Iterative Entwicklung unterstützt Identifikation von Komponenten • Entwurf eines Komponenten-Systems: geeignete Fassaden nutzen (Interface und Implementierung trennen) • Skalierbarkeit & verteilte Bearbeitung ins Kalkül nehmen • Reduktion von Netzwerkzugriffen • Transaktionen? Mehrere kurze ACID Transaktionen statt einer grossen → Skalierbarkeit Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -11- Komponenten – Präsentationsschicht – Technologie • Client-Komponenten (Hier nicht vertieft) – HTML, XML, Javascript – Java Applet – Plug In • Server-seitige Präsentation – Script-Sprachen, – MVC mit JSP & Servlets, Portlets (!) • Beispiele für Komponenten – Formulare, Navigation, Anzeige (Tree,..), Portal Elemente Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -12- 6 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Präsentationsschicht – Model-View-Controller serverseitig, kurze Wiederholung HTML Seite mit Formular neue Seite: HTTP Response submit: HTTP Request View (Servlet/JSP) View (Servlet/JSP) Controller-Servlet Model (Bean) Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -13- Präsentationsschicht – Portlets • spezialisierte JSP (Tags): unterstützen Kapselung und Wiederverwendung spezifischer Teile eines Portals • Integration auf Präsentationslayer & auch Geschäftslogik! • Können verschachtelt sein – Einfache Portlets z.B. Öffnen/ Schliessen von Seiten (ViewSpezifische Komponenten) – Komplexe Portlets nutzen, gekapselt, spezifische Dienste • Noch jung, Standards auf dem Wege. Vgl. BEA, IBM, Epicentric Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -14- 7 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Beispiel (Yahoo) Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -15- Komponenten – Geschäftslogik –Basistechnologien • • • Fokus auf Schnittstelle (Design by Contract) + Technologie Middleware nutzen: Komponenten bauen und isolieren! TP Monitore (hier nicht weiter betrachtet) • Interface-basierend – CICS, TUXEDO – Objekt Request Broker: CORBA CCM, DCOM – RMI • Application-Server (hier Fokus Java – Interface + Dienste + ..) – JSP, Portlet, MVC – Generierung von Präsentations-Komponenten – J2EE – Nutzung von Java-Komponenten • Message-basierend – Topics – Queues – Tupelspace / Blackboard • Webservices :Im Kommen. – WSDL, UDDI, .. – .NET Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -16- 8 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Interface-basierte Schnittstellen- & Komponentenmodelle • Reichhaltigkeit („entfernter“) Methoden (Gegensatz zur Nachrichten-basierte Middleware: Reichhalt an Nachrichten) • Vertreter: CORBA, DCOM, DCE, RMI, J2EE-EJB, Java-Connector Architektur, .NET • Aufruf einer Komponente über eine Menge von Funktionen, die spezifisch für die Komponente sind • „Container“ wird genutzt – um systemspezifische Details einerseits anzubieten – und andererseits deren Implementierung zu abstrahieren und zu verstecken Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -17- Aufbau einer „Distributed Component“ • Funktionalität / Implementierung und Konfiguration • Logische Schnittstelle (Abstraktion) • Schnittstellen Implementation (Stub, Skeleton) - Adapter • Komponenten Infrastruktur (Transport,..) / Container Client Adapter Komponente Adapter Komponente Adapter Komponenten Infrastruktur Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -18- 9 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Distributed Components public public interface interface Account Account {{ public double getBalance() public double getBalance() throws throws Throwable; Throwable; }} Schnittstelle Für Client AdapterInfrastruktur public public class class AccountServer AccountServer implements implements Account Account {{ double bal; double bal; public public PersonServer(double PersonServer(double balance){ balance){ Serverseitige this.bal this.bal == balance; balance; Implementierung, }} Läuft im public public int int getBalance(){ getBalance(){ Container return return bal; bal; }} }} Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -19- Agenda • Komponentenmodelle & Middleware – – – – – – Begrifflichkeiten J2EE Services Middleware Messaging / JMS Tuple Space • Für Interessierte ein kurzer Exkurs Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -20- 10 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 J2EE (1) • Java Plattform für E-Business Applikationen • Enterprise Edition: Robuste Plattform für unternehmensweite, geschäftskritische Anwendungen – Einbindung in Unternehmensinfrastruktur – Transaktions-Unterstützung – Datenbank Zugriff (nächste Vorlesung - Wir betrachten heute keine Entitity Beans!) • N-tier Architekturen mit 2 primären Ausprägunen – Web basiert – Traditionelle Client/Server Architektur Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -21- J2EE (2) • J2EE Komponentenmodelle basieren und nutzen – EJB – JMS • Ziele – Einfachheit von Entwicklung, Wartung, Administration von grossen, Plattform unabhängigen, Server-basierten Anwendungen – Rollenbasierte Entwicklung – „write once run everywhere“: Abstraktion der SystemInfrastruktur wie Nachrichtenaustausch, Transaktionsunterstützung, Verzeichnisdienste, Datenbankzugriff • Technisch realisiert durch sog. Application Server Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -22- 11 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 J2EE – Grundstruktur – Aussensicht Fat-Client Fat-Client Backendsysteme J2EE Applikation Server Servlet Engine Fat-Client EJB Container Ledger Enterprise Applikation Callcenter Fat-Client Web-Client Web-Client Web-Client Web-Client Enterprise Applikation Mainframe Enterprise Applikation ... Enterprise Applikation DB Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -23- J2EE – Architektur – Service Architektur Systemverhaltens- und Domain-Grenze Domain Model JSP/Servlet Client Account Services ApplikationsObjekte Order Services Java Client Billing Services Domain Objekte Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -24- 12 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 J2EE – Komponentenmodell – Innensicht Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -25- J2EE & Web-Aufrufe Browser Browser sendet request Web-Server Server empfängt request Servlet Engine Benutzer-Aktion (Click) Server sendet HTML zum Browser Servlet Engine sucht Controller / erzeugt Thread EJB Container Browser zeigt HTML Ergebnis View bildet Ergebnis in HTML ab Controller nutzt Model (proxy) Model (proxy) nutzt EJB home & remote Methoden Session EJB nutzt Businessmethoden Session EJB gibt Ergebnis an Model Entity EJB ≡ BO‘s Database / Legacy RDBMS und/oder Persistence Layer liefern BO Daten Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -26- 13 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 EJB Server und EJB Container mit Diensten • In einem EJB-Server können mehrere EJB Container laufen • System-Dienste des Containers – – – – – – – Transaktionsverarbeitung Sicherheit Middleware: verteilte Komponenten und Kommunikation Nebenläufigkeit Management des Lebenszyklus von Komponenten Datenbank-Zugriffsmanagement … • Kombiniert Interface-Ansatz mit Aspekten der TPMonitore (ako „Component Transaction Processing“) Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -27- J2EE Dokumentation • J2EE Platform Specification – API´s – Release Level (Kompatibilität, Portabilität) • J2EE Compatibility Test Suite – Konformität von Application Servern mit der Spezifikation • J2EE Reference Implementation – Operationelle Definition der J2EE Plattform • J2EE Application Model – Guide – Beispiele und Design Patterns Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -28- 14 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 J2EE API´s • Enterprise JavaBeans 2.0 (EJB) – 3 Arten von Beans und deren Nutzung • Java Server Pages 1.2 (JSP) • Java Servlet API • Java Naming and Directory Interface API (JNDI) • JDBC API 2.0 – Zugriff auf relationale Datenbanken • Java Transaction API 1.0 (JTA): Klammerung von Datenbankoperationen zu einer Einheit • J2EE Connector Architecture 1.0 (JCA) – EAI • Java Message Services 1.0 (JMS) • JavaMail Technology (1.2) • Java API for XML Processing 1.1 (JAXP) • Java Authentication and Authorization Services 1.0 (JAAS) Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -29- J2EE - EJB Home Interface 1: Create/find/ remove Home Implementation Home Stub 2: remote stub Client extends javax.ejb.EJBHome life cycle methods: creating, removing and finding Remote Interface create/find/remove extends javax.ejb.EJBObject Businessmethoden einer Bean EJB Container business methods, remove 3. business methods, Remove Remote Object Stub Remote Bean Object ImplemenImplementation tation extends javax.ejb.EntityBean / javax.ejb.SessionBean implements business methods Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -30- 15 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 EJB • Serverseitige Komponente für Business-Logik und Business-Daten • EJBs ≠ Java Beans (Client-Seite) • Komponentenmodell für die Entwicklung & Verteilung von Java Komponenten in einer verteilten Multi-Tier-Umgebung • Portabel und protokollneutral => nicht an bestimmten Webserver gebunden Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -31- EJB – Session Beans • Bilden Geschäftsprozess ab (→ vgl. Use Cases), keine Geschäfts-Entitäten / -Dinge • Koordiniert und kontrolliert den Informationsfluss und die Geschäftslogik zwischen verschiedenen Entitäten • Sind nicht persistent, können aber „stateless“ oder „stateful“ sein – Stateless: keiner Session zugeordnet. Innerhalb der Session Bean dürfen keine Informationen gespeichert werden – Stateful: einer Session zugeordnet, speichern Informationen zwischen Aufrufen. (conversational state) • Einem Client für den gesamten Life Cycle zugewiesen. • Nicht in einem Pool von freien Instanzen genutzt • Repräsentieren keine Entititäten! Sondern den Zustand eines Ablaufes. Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -32- 16 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 EJB – Entity Beans (Vorgriff auf nächste Woche) • Repräsentieren persistente Daten und Domain Objects • Bieten create, find & delete Methoden zum Zugriff auf Datenbank • 2 Varianten – Entity Bean mit Bean managed Persistance – Entity Bean mit Container managed Persistance Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -33- EJB – Message Beans • • • • • • Neu in JB 2.0 Beim Eintreffen einer Nachricht aktiviert Asynchron und stateless onMessage() enthält die Business Logic Hat kein Home oder Remote interface Ist einer JMS Queue oder einem Topic zugeordnet Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -34- 17 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 J2EE: EJB API Client-Seite • Initialisierung Prop.put(Context.INITIAL_CONTEXT_FACTORY, “com.ejbhome.naming.spi.rmi.RMIInitCtxFactor“); Context = new InitialContext(prop); • Home interface aufrufen (loopkup) WarenkorbHome wk_home = (Warenkorb_Home) context.lookup(„Warenkorb“); • Business-Objekt erzeugen wk_personwk = wk_home.create(„Meier“); • Suchen (schon eine Entity vorhanden?) wk_nutzerwk = wk_home.findByPrimaryKey(…); • Business Objekt aufrufen wk_Personwk.add(myProdukt); Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -35- J2EE: EJB API Server-Seite • • • Home Interface public interface WarenkorbHome extends javax.ejb.EJBHome { Warenkorb create() throws java.rmi.RemoteException, javax.ejb.CreateException; } Remote Interface public interface Warenkorb extends javax.ejb.EJBObject { Void add(Object o) throws java.rmi.RemoteException; } EJB Implementation public class WarenkorbEJB implements javax.ejb.SessionBean { // folgend die Implementierung.. } Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -36- 18 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Agenda • Komponentenmodelle & Middleware – – – – – – Begrifflichkeiten J2EE Services : ein paar kurze Beispiele Middleware Messaging / JMS Tuple Space • Für Interessierte ein kurzer Exkurs Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -37- Java Naming & Directory Interface (JNDI) • standardisierter Zugriff auf verschiedenste Verzeichnis- und Namensdienste (LDAP, DNS, NIS, RMI, CORBA,…) – Anforderung von Objekten, Ressourcen, EJB-Schnittstellen – Speicherung und Lesen von beliebigen Java Objekten – Allgemeine Directory Operationen (wie Assoziieren von Attributen mit Objekten, Suchen nach Objekten über Attribute) • EJB Container Hersteller muss einen JNDI Dienst anbieten LDAP Directory Role EJB Store src EJB Home A User a.java User b.java EJB Home B JNDI Java Application / EJB / Servlet Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -38- 19 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Nutzung von JNDI im Servlet – init public void init() throws ServletException { try { Properties p = new Properties(); // ... JNDI properties - Herstellerspezifisch p.put(Context.INITIAL_CONTEXT_FACTORY, “weblogic.jndi.TengabInitialContextFactory“); p.put(Context.PROVIDER_URL, “t3://localhost.7001“); Context jndiContext = new InitialContext(p); WarenkorbHome home =(WarenkorbHome) jndiContext.lookup(„WarenkorbHome"); } catch (Exception e) { e.printStackTrace(); } } Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -39- Nutzung von JNDI im Servlet – Verwendung je Thread public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { Warenkorb wk = home.create(nextID); home String wk_user = req.getParameter(“inputName“); wk.setName(wk_user); PrintWriter out = res.getWriter(); // .. Seitenerzeugung folgt … } Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -40- 20 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Java Transaction API und Service • JTA (Java Transaction API) – Programmier-Schnittstelle für Ressourcen-Manager & Transaktions-Systeme. • Java Transaction Service (JTS) – Standard Transaction Management API für Java – Vom Herstellern vom Transaktions-Manager implementiert • Zugang zu transaktionsorientierten Umgebungen (Prozeßmonitore, Transaktionsmanager,..) • Integration klassischer TP-Monitore, wie CICS ohne weiteres möglich • Was nutzen uns Transaktionen? → Beispiel „Kontenbewegung“ – Atomicity, Consistency, Isolation, Durability Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -41- Transaktionen – einige Aspekte • Container Managed – Container definiert, wann eine Transaktion anfängt und endet – Einfache Programmierung, da Delegation an Container – Typisch: Transaktion startet direkt vor dem Aufruf einer Session-EJB-Methode und endet direkt nach der Methode – Keine verschachtelten Transaktionen – Transaktion (welche Methode soll transaktionell sein) wird beim Deployment definiert • Program Managed – „Do it yourself“ – Stateful Session Beans erlauben Transaktionen über mehrere Aufrufe hinweg (lange Transatkionen können problematisch sein) Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -42- 21 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Container Managed - Transaktionskontrolle • Was soll beim Aufruf von einer EJB zur anderen in einer Transaktion passieren? Welche „Kontext“ ist gültig? Caller Callee TX1 m1() m1() { ... b2.m2(); ... } m2() m2() { ... } TX? Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -43- Container Managed – Transaktionskontrolle (2) Attribute Required Required RequiresNew RequiresNew Caller‘s Transaction Callee‘s Transaction none T1 T2 none T2 T1 T2 T1 none error Mandatory Mandatory T1 T1 none none NotSupported NotSupported T1 none none none T1 T1 none none T1 error Supports Supports Never Never Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -44- 22 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Program Managed Transaction - Beispiel Public void doStuff() { UserTransaction ut = context.getUserTransaction(); try { ut.begin(); // tu irgendwas wichtiges .. // das könnte auch auf mehrere Methoden in einem // stateful session Bean verteilt sein! ut.commit(); } catch (Exception ex) { // die Transaktion nicht durchgeführen ut.rollback(); } } Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -45- Agenda • Komponentenmodelle & Middleware – – – – – – Begrifflichkeiten J2EE Services Middleware Messaging / JMS Tuple Space • Für Interessierte ein kurzer Exkurs Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -46- 23 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Middleware • Komponente, die zwischen 2 oder mehr Programmen vermittelnd arbeitet. • Eigenschaften (gewünscht): – Verstecken von Verteilung und Heterogenität (location transparency, access transparency) – Formatkonvertierung – Effizienter Transport, preiswerte Verpackung (Marshalling) – Unterstützung des Auffindens der Kommunikationspartner (Directory-Services) • Bemerkung: Middleware ist meist aber nicht immer Software Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -47- Konzepte • Koppelung – Enge/Starke Kopplung – synchrone Kooperation – Lose/Schwache Kopplung • Synchrone Kooperation • Asynchrone Kooperation • Arten – Nachrichten – Interfaces • Zeit- und Transaktionsverhalten • Dienstqualität (garantierte Auslieferung, weniger als 100%,..) • Kommunikationspartner – 1:1, 1:n, n:m • Compile-Time versus Run-Time Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -48- 24 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Varianten • Basis: RPC • Nachrichten-Orientiert – Topics basierte Nachrichten (publish/subscribe) – Message Queues (werden wir nicht vertiefen) – Tupel-Space • Schnittstellen-Orientiert – Object Request Broker – Connector-API – RMI • Datenorientiert • Beispiele in Java, vorgestellte Konzepte sprachunabhängig Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -49- Remote Procedure Call (RPC) RPC = Basis vieler Inter-Prozeß-Kommunikations-Mechanismen (wie z.B. DCOM, JavaBeans, CORBA), nicht transparent Client Server Anwendung Anwendung Client Stub Server Stub Client Run-Time Library Server Run-Time Library Transport Transport Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -50- 25 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Agenda • Komponentenmodelle & Middleware – – – – – – Begrifflichkeiten J2EE Services Middleware Messaging / JMS Tuple Space • Für Interessierte ein kurzer Exkurs Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -51- Message Oriented Middleware (MOM) • Messaging: lose Kopplung von Anwendungen; (selbstbeschreibende) Nachrichten werden übertragen • Komponenten werden somit die eine wohldefinierte Menge an Nachrichten ausgezeichnet. • Message Oriented Middleware (MOM) nutzt – – – – publish/subscribe (Topic basierend) message queuing (Kanal basierend) Tupel-Spaces (Topic-basierend) Ein Request/Reply ist ebenfalls möglich. • Asynchronität (Message kann „durable“ sein) • Einfache, standardisierte Interfaces, vielfältige Nachrichten (zu interpretieren, XML, name-value) Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -52- 26 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Java Message Service (JMS) – Beispiel einer MOM • API für die Nutzung von (unternehmensweiten) Messaging Systemen • Einfache Programmierung von asnychronen, lose gekoppelten Systemen • EJBs können auf einfache Weise Nachrichten verschicken und empfangen – Nachrichtenankunft löst Event aus -> Methodenaufruf • Zwei Arten – Point to Point/Queues – 1 Nachricht hat genau 1 Empfänger – Publish Subscribe – jeder Subscriber erhält eine Nachrichten Kopie Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -53- MOM: Topic basierte Schnittstellen Producer1 Producer2 Message Broker Consumer X Consumer Y subscribe (a,b) publish(a) publish(a) subscribe(a,b) publish(b) publish(b) publish(b ) Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -54- 27 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 MOM: Topic Basierte Schnittstellen: Request Publisher • Initialisierung session = connection.createTopicSession( transacted, ackMode); topic = session.createTopic(”warenkorb"); publisher = session.createPublisher(topic); • Nachricht erzeugen message = session.createMapMessage(); message.setString(„Funktion“,“add“); message.setString(„produktID“,12345); //... • Nachricht versenden publisher.publish(message); Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -55- MOM: Topic Basierte Schnittstellen: Request Subscriber • Initialisierung session = connection.createTopicSession(..); topic = session.createTopic(”warenkorb"); subscriber= session.createSubscriber(topic); • Listener aufsetzen consumer = new TopicListener(); subscriber.setMessageListener(consumer); • Listener wird aufgerufen bei Nachrichtenerhalt void onMessage(Message message); • message.getMapNames() & weitere getFunktionen: jeder Wert der Nachricht aufrufbar Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -56- 28 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 MOM: Topic Basierte Schnittstellen: JMS Reply • Nun ist die Nachricht in der Komponente angekommen. • Weiterverarbeitung als Black-Box (Auswertung von „Funktion“, „ProduktID“,...) • Die interne Repräsentation interessiert gar nicht! D.h. die Komponente praktiziert – Trennung von Interface und Implementation – Wahlfreiheit, die Komponente auszutauschen! • Antwort an Client – – – – Client ist ebenfalls geeignet registriert (Subscriber mit onMessage(..)) Server schickt seinerseits einen Request (benötigt aber keinen Reply) Client empfängt damit die Antwort Hilfsmittel: Message von Client an Server beinhaltet setJMSReplyTo(Destinitation to) bzw. ein get dazu Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -57- Topic Basierte Middleware: JMS - sonstiges • Nachrichten Formate – TextMessage, BytesMessage, MapMessage (Hashtable), StreamMessage, ObjectMessage • Quality of Service – Persistent/non-persistent delivery – Prioritäten, „time to live“, Transaktionen • „Threaded“ Programmier-Modell • Outside the JMS spec: – Security services – Management services Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -58- 29 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Message Queue Producer1 Producer2 1: a 3: c 2: b 4: d | | | | | |c|a| 5: a 7: | | | | | |d|b| Consumer1 d 6: b Consumer2 Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -59- Message Queue API – JMS – Writer • Initialisierung factory = context.lookup(..); conn = factory.createQueueCommunication(..); Session = conn.createQueueSession(..); queue = session.createQueue(„aQueue“); sender = session.createSender(queue); • Nachricht erzeugen message = session.createObjectMessage(…); • Nachricht versenden sender.send(message); Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -60- 30 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Message Queue API – JMS – Consumer • Initialisierung Session queue receiver = conn.createQueueSession(..); = session.createQueue(„aQueue“); = session.createReceiver(queue); • Listener aufsetzen consumer = new MyConsumer(); receiver.setMessageListener(consumer); • Listener wird aufgerufen bei Nachrichtenerhalt void onMessage(Message message); Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -61- Agenda • Komponentenmodelle & Middleware – – – – – – Begrifflichkeiten J2EE Services Middleware Messaging / JMS Tuple Space • Für Interessierte ein kurzer Exkurs Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -62- 31 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Tupelspace API für JMS • Wichtigste Primitive: – – – – write read, readIfExists take, takeIfExists notify • Nachrichten „Anpinnen“ Message msg = new Message("Hello World",0); JavaSpace space = SpaceAccessor.getSpace(); space.write(msg, null, Lease.FOREVER); • Nachricht „lesen, aber nicht anhängen“ Message template = new Message(); //... Message result = (Message) space.read( template, null, Long.MAX_VALUE); Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -63- Tupel-Space Participant2 write Message2 Message1 write Participant1 e tak rea Participant3 Participant4 write Message3 d read Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn Participant5 -64- 32 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Agenda • Komponentenmodelle & Middleware – – – – – – Begrifflichkeiten J2EE Services Middleware Messaging / JMS Tuple Space • Für Interessierte ein kurzer Exkurs: „RMI, CORBA und dahinter…“ – Wie funktioniert Kommunikation allgemein in Java? – Wo kommt der Mechanismus her, wie geht es weiter? Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -65- Java Remote Method Invocation RMI • Kommunikation für verteilte Java-Anwendungen – Aufruf von Methoden in einer anderen JVM, auf einem anderen Host – Referenz auf das „entfernte“ Objekt durch • Bootstrap Naming Service von RMI oder • über (Aufruf-) Argument bzw. Rückgabewert – Ein „Server“ kann gleichzeitig wiederum „Client“ sein • Java Objekt Serialization – Speichern und Zurückholen von Java Objekten – somit Zustand serialisiert über einen Stream kommuniziert (read/write wie bei einer Datei) • Basis-Kommunikationsmechanismen: Sockets Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -66- 33 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 RMI Ablauf JNDI 1: lookup Stub 2: get Java JavaVM VM Java Applikation 3: call 8: result Java JavaVM VM 5: call OBJ 4: call Skeleton Stub Netz Skeleton 7: result to Stub Java Object 6: return result Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -67- Java RMI over IIOP • RMI-IIOP (Remote Method Invocation - Internet InterORB Protocol) – RMI nutzt das Corba-Protokoll IIOP – Brückenfunktion: Mixed Language Programming • IIOP (Internet Inter-ORB Protocol) – Kommunikationsprotokoll von CORBA – Standard-Protokoll: von jedem ORB unterstützt – Besteht aus GIOP und TCP/IP. Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -68- 34 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Common Object Request Broker (ORB) Arch. Object Implementation Client Interface Repository Dynamic Invocation Client IDL Stubs ORB Interface Dynamic Static Skeletons Skeleton Interface Basic Object Adapter Implementation Repository Object Request Broker Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -69- Bsp: CORBA IDL / API • Definition eines Kontraktes (Schnittstellendefinition) module service { interface ServerManager { Server newServer(in string name); }; interface Server { void alive(in string name); void query(in string request, out string reply); }}; • Umsetzung erfolgt sprachenabhängig. • CORBA sorgt dafür, diesen Dienst verteilt nutzen zu können. • Nach dem Binden an Naming/Directory Service transparent. Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -70- 35 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 CORBA • Ortstransparenz • bedingt Zugriffstransparenz (naming service) NamingServer 2 lo up ok 1r eg ist er( ) () 3 execute() Client Server Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -71- Webservices • • Weiterentwicklung von CORBA, RMI, DCE, … Funktionsaufruf via standardisiertem Mechanismus übers Internet Backend Components Naming Service UDDI Component J2EE-component register WSDL lookup Web Service Access SOAP/HTTP Client CORBA-CCM Legacy JMS-Component DB Component Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -72- 36 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Java und dahinter… „Java und .NET - JUMP Ca. 20 Sprachen Java C# … VB.Net Compiler Compiler Compiler Compiler Compiler Compiler Compiler Compiler Java ByteCode MSIL JUMP Converter Class Loader Laden • via Filesystem • via Netz Visual Studio .NET Common Common Language Language Runtime Runtime CLR CLR .NET Framework • MSIL: Microsoft Intermediate Language • JUMP: Java User Migration Path (to Microsoft .NET) Nur pure Java – Keine Unterstützung für API´s wie RMI Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -73- Fragen beim Einsatz eines Komponentenmodells (hier J2EE) • Architektur – – – – – • System in die Schichten zerlegen Entscheiden wo welches Objekt ‚lebt‘ Benötigte Services & deren ‚Service Manager‘ identifizieren Eigene Service-Architektur entwickeln (was bietet man selbst als Service) Definieren des Services API (XML ?) Transaktionsmodel – Art benötigter Transaktionen festlegen – Entscheiden ob und wie write-write Konflikte erkannt werden • Objekt Zustand und Verteilung – So wenig Objekte verteilen wie nötig – Zahl der remote Referenzen gering halten – Kommunikationsvolumen gering halten • Serialisierte Objektgeflecht nur wenn unbedingt notwendig → besser kleine Teile, Leichtgewichtige Objekte schicken, State Objekte, Application Objekte (als „Sammler“) • Nur vom Client benötigte Daten senden Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -74- 37 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Fragen beim Einsatz eines Komponentenmodells (hier J2EE) • Skalierung des Systems – Anforderungen? • Zahl konkurrierende Benutzer • Antwortzeiten? – Stateful versus Stateless Session Beans • • • • Stateless Beans können von vielen Sessions benutzt werden aber Session Status Informationen müssen geeignet abgelegt werden HTTPSession? Beans? Datenbank?... Zahl stateful Beans die zu verkraften sind – EJB versus Java Classes • EJB sind „Schwergewichte“ → Systemlast im EJB Container. • Mischung aus Entity Objekten und abhängigen, normalen Java-Objekten – Einsatz von Pooling-Strategien – Behandlung grosser Ergebnismengen • O/R mapping • Komponenten mit dem Ziel der Autonomie entwickeln • Definiere / Nutze Standards für „schlanke“, einfache und kohärente Schnittstellen Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware -75- Literatur • Bücher – – – – – – Professional EJB, Wrox Business Component Factory, Herzum, Wiley Software Reuse, Jacobson et al, Addison Wesley Client Server Survival Guide, Robert Orfali et al., Wiley Java Enterprise in a Nutshell, Flanagan et al, O‘Reilly Objekt-Spektrum, Java Magazin,.. • WWW – Cetus-Links (www.cetus-links.org) – Natürlich: www.java.sun.com • Empfehlung: Java (J2EE) erlaubt auf einfache Weise, mit Web und Komponenten Implementierungen durchzuführen → Spielen Sie damit! Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -76- 38 Einführung in das Software-Engineering - Design: Komponenten & Middleware Sommersemester 2002 Übung • Nun nach dem GUI unserer Bank die entsprechende Business Logik realisieren – Wahlweise einfache Java Klassen (empfohlen) – Oder für Mutige EJBs (Sven fragen – JBoss) • Hinweis: alle persistenten Zugriffe (- das was wir gerne in einer DB hätten -) simulieren (Konstante Objekte o.ä.) Web-Server Web-Client Servlets JSP Java Bean Oder EJB Const. JDBC DB Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware Dr. Walter Kuhn -77- 39