Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Teil V Entwurf 201 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.1 Überblick: Entwurf • aus Anforderungen (Pflichtenheft, Produktmodell (OOA)) Software-Architektur und Spezifikation der Systemkomponenten entwerfen • Software-Architektur: • Zerlegung in Systemkomponenten und Beziehungen hierzwischen • Systemkomponente: Klasse, Modul, . . . • bei vielen Komponenten ggfs. Strukturierung in Schichten 202 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Schichtenarchitektur • innerhalb von Schicht: beliebige Zugriffe zwischen Komponenten • zwischen Schichten: • Zugriff nur auf niedrigere Schichten • Ordnung z.B. strikt, linear (Bsp.: OSI) oder baumartig • enge Schnittstellen • Vor- und Nachteile: • übersichtlich • gute Wiederverwendbarkeit, Wartbarkeit und Testbarkeit • geringer Effizienzverlust (z.B. Fehlermeldungen durchreichen) • typisch: ≥ 3 Schichten 203 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Schichtenarchitektur: Typische Beispiele Web−Client Präsentation HTML Browser Server Client Webzugang Präsentation JSP, Servlets, ASP, PHP Swing, VB Geschäftslogik EJB, .NET, PHP Datenhaltung RDBMS 204 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Entwurfsentscheidungen • sequentiell ↔ parallel/verteilt/nebenläufig? Bsp.: verteilt → Client/Server • ein Benutzer ↔ mehrere Benutzer? → Zugriffsrechte, Transaktionen? • Zuordnung der Schichten zu Client bzw. Server z.B. Client: Schichten 1+2, Server: 3, oder Client: 1, Server: 2+3, oder: C: 1+2a, S: 2b+3 • unterschiedliche Plattformen nötig? → z.B. welche Sprache? • Wiederverwendung vorhandener Bausteine? 205 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Entwurfsentscheidungen (Fortsetzung) • ob und welche Hilfesysteme? (Hypertext?) • ob und welches DBMS (relational, OO)? • wie Benutzerschnittstelle? (GUI, . . . ) • Einbinden von sonstigen Dienstleistungen? z.B. Business Rules Engine wie Drools (→ KI) • Ziel: möglichst viele und mächtige Dienstleistungen in Anspruch nehmen → Kostensenkung 206 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2 Einbinden von Dienstleistungen 5.2.1 Realisierung der Benutzeroberfläche 1. nicht graphisch 2. GUI (graphical user interface) z.B. mit Frameworks wie Java AWT, Swing oder SWT 3. HTML mit Formular und ggf. AJAX unter Verwendung von Servlets, JSP, JSF, . . . 4. . . . 207 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Graphische Benutzerschnittstellen (GUIs) • Bibliothek zur Unterstützung von Fenstern, Menüs, Piktogrammen, Schaltflächen, Maus, . . . • GUI bemerkt, interpretiert und leitet Ereignisse weiter an Anwendung • Anwendung reagiert auf Ereignisse • Ereignisreihenfolge unvorhersehbar • → Entwurf: verwendet unabhängige Systemkomponenten • Kommunikation zwischen GUI und Anwendung über Callbacks: • Anwendung registriert Ereignisse, über die sie informiert werden will • Callback aktiviert bei Ereignis zugehörige Anwendungsmethode • Verbindung von Anwendung zu GUI über API 208 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Einsatz eines GUI Programmierer Anwendung 3 Anwendung 3 GUI Anwendung 2 Anwendung 1 Anwendung 1 API 209 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Callback-Mechanismus mit Listen Benutzeraktion callback−Listen Anwendung callback direkte Verarbeitung durch GUI Proc 1 sizing event Fenster FU1 A FU2 menucommand event B button menu Menuevent(FU1) FU1 Proc 1 case A: ... FU2 ... Proc 2 ... button event case B: ... ... Proc 3 button press on Buttonclick: Proc 3 if ... release Proc 4 ... ... Proc 5 InputControl::Keydown key event if (ASCIIChar(e)==X) key Event− und down Proc 5 Translation− up ... Proc 6 ... Manager ... 210 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Benutzerschnittstellen-Frameworks (Bsp. Java AWT) Object ... AWTEventMulticaster ... Component FlowLayout ...... ... ActionListener Button Label TextComponent ... Mai ... Window ... 1 GUI Programmierer erzeugt 4 Abbruch Neu ... TextField Kunde Name ... Container :Frame Objektnetz :Label Text="Name" 3 2 Mai :Button label= "Neu" Anwendung :Button Kunde label= "Abbruch" Name 5 "Mai" :TextField text="Mai" ... Frame 6 Mai Init Kunde Name= "Mai" 211 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Beispiel: Java AWT import java.awt.*; import java.awt.event.*; public class KundenGUI extends Frame implements ActionListener{ protected Kunde kunde = new Kunde(); private Button Neu = new Button("Neu"); private Button Abbruch = new Button("Abbruch"); private Label textlabel = new Label("Name"); private TextField Namensfeld = new TextField(10); public KundenGUI(){...} public void actionPerformed(ActionEvent event){...} static public void main(String[] args){ new KundenGUI();} } 212 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Beispiel: Java AWT (Fortsetzung) public KundenGUI(){ public class Kunde { super("KundenGUI"); protected String Name; setLayout(new FlowLayout()); public Kunde(){;} Neu.addActionListener(this); public void Init(String n){ Abbruch.addActionListener(this); Name = n;} Namensfeld.setEnabled(true); } Namensfeld.setText(""); add(textlabel); add(Abbruch); add(Namensfeld); add(Neu); setBounds(400,400,150,200); setVisible(true);} public void actionPerformed(ActionEvent event){ try{ if (event.getSource().equals(Neu)) kunde.Init(Namensfeld.getText()); else if (event.getSource().equals(Abbruch)) dispose();} catch (Exception e){e.printStackTrace();}} 213 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.2 Realisierung der Datenhaltung • Dateien: nur geeignet bei Daten, die • einfach strukturiert sind • nicht von mehreren Systemen/Benutzern gleichzeitig verwendet • einfache (und unveränderliche) Zugriffsmechanismen haben und • kein (kompliziertes) Recovery nach Systemabsturz erfordern • relationales DBMS: heute üblich, → Datenbank-Vorlesungen • OO-DBMS: bei OO geeignet, aber gescheitert (?!) • objekt-relationales DBMS: Effizienz von RDBMS, Funktionalität vgl. OO-DBMS • deduktives DBMS: geeignet, wenn umfangreiche Datenhaltung und Inferenz benötigt (ggfs. Alternative zu: relationalem DBMS + Expertensystem) 214 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3 Verteilte Anwendungen • → Vorlesungen Verteilte Systeme, EAI • Verbindung der Prozesse z.B. durch • Sockets (TCP/IP, . . . ) • CORBA (bei Client-Server-Architektur) • RMI, EJB (in Java EE) • .NET, DCOM, . . . • Web-Services auf Basis von SOAP, WSDL, UDDI • RESTful Web-Services auf Basis von HTTP (oft mit JSON) • Message Oriented Middleware 215 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Entfernte Methodenaufrufe Anwendung Ergebnis Aufruf s.m(args) Stumpf s Demarshalling Marshalling ... Objekt o o.m(args) Ergebnis Verteiler Demarshalling Marshalling Ergebnis 216 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3.1 Enterprise JavaBeans • Java-basierte Middleware für verteilte OO-Anwendungen • Komponenten (Beans) in EJB-Container (auf Server) bereitgestellt • EJB Container: z.B. IBM WebSphere, BEA WebLogic, JBoss . . . • Dienste des Containers: (u.a.) • Verwaltung und Suche von Beans (basierend auf JNDI) • Transaktionen (basierend auf JTS und JTA) • Persistenz • Zugriff auf entfernte Objekte (basierend auf RMI/IIOP bzw. JMS) • Ressourcenverwaltung (Instance Pooling, Bean-Ein-/Auslagerung) • Autorisierung und Authentifizierung (basierend auf JAAS) • Vorteil: Basisdienste bei Anwendungsentwicklung “geschenkt” • Nachteil: Overhead; keine Threads, keine BS-Aufrufe (wegen Transaktionen) 217 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Wo werden EJBs eingesetzt? • typische 4-Schichten-Architektur: • Client Tier (HTML) • Web Tier (JSP,Servlets) • Business Tier (EJB) • EIS Tier (DB) 218 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Arten von Beans • Entity: kapselt persistente Daten; Zugriff (z.B.) über Session Bean • Session-Bean: realisiert (z.B.) Use-Case nicht persistent; Zugriff basierend auf RMI (z.B. aus Servlet) • zustandslos: effizient, gemeinsam nutzbar durch mehrere Clients • zustandsbehaftet: exklusiv für einen Client; Zustand wird über eine Sitzung hinweg bewahrt; bei Absturz verloren • Message-driven Bean 219 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Aufbau eines Enterprise Java Beans • Remote Interface (bzw. Local Interface bei ausschließlich lokalem Zugriff): “Business”-Methoden (nur bei Session-Beans) • Verwaltungsoperationen (ab EJB 3 transparent) (z.B. Erzeugen, Löschen, Aktivieren, Passivieren) • Bean-Klasse: Implementierung der Business-Methoden (ab EJB 3: “POJO”) • optionaler Deployment Descriptor: • XML-Dokument zur Konfiguration eines Beans u.a. bzgl. Persistenz, Transaktionen und Primärschlüssel • ab EJB 3 i.d.R. durch Annotationen in Bean-Klasse ersetzt • alle zusammengefasst in .jar Archiv-Datei (Packaging) 220 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster EJB 3.0-Programmiermodell EJB−Container JVM Remote Local Client Client Middleware−Dienste: − Lebenszyklus−Management − Persistenz −Zugriffsschutz Business Container−erzeugte Interface Wrapper−Klasse −Transaktionen ... EJB−Klasse 221 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Deployment • Bean wird gemäß Deployment-Angaben konfiguriert und im Container bereitgestellt • hierbei werden Hilfsklassen zur Einbindung der Bean-Klasse in den Container automatisch erstellt und compiliert (u.a. Stubs, Skelette) • wahlweise komfortable Container-verwaltete Persistenz oder flexiblere Bean-verwaltete Persistenz (mit expliziten JDBC-Aufrufen) • wahlweise Container- oder Bean-verwaltete Transaktionen 222 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Beispielanwendung: Bibliothek Ausleihe Exemplar 0..1 datum 1 inventarnr Medium * 1 bezeichnung * 1 Benutzer Buch CD name autor interpret adresse isbn asin 223 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Entity: Klasse Benutzer package bibliothek; import java.util.ArrayList; import java.util.Collection; import javax.persistence.*; @Entity public class Benutzer implements java.io.Serializable { protected int bid; /** Primärschlüssel */ protected String name; protected String adresse; protected Collection<Ausleihe> ausleihen = new ArrayList<Ausleihe>(); @Id @GeneratedValue(strategy=GenerationType.AUTO) public int getBid(){return bid;} public void setBid(int id){bid = id;} public String getName(){return name;} public void setName(String name){this.name = name;} public String getAdresse(){return adresse;} public void setAdresse(String adresse){this.adresse = adresse;} @OneToMany(cascade = CascadeType.ALL, mappedBy="benutzer") public Collection<Ausleihe> getAusleihen(){return ausleihen;} public void setAusleihen(Collection<Ausleihe> coll){ausleihen = coll;} public void addAusleihe(Ausleihe vorgang){ausleihen.add(vorgang);} public void removeAusleihe(Ausleihe vorgang){ausleihen.remove(vorgang);} } 224 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Beispiel: Session-Bean ... @Remote public interface BenutzerFassade { public void benutzerAnlegen(String name, String adresse) throws Exception; } ... @PermitAll @Stateless public class Benutzerverwaltung implements BenutzerFassade{ @PersistenceContext private EntityManager em; @TransactionAttribute(TransactionAttributeType.REQUIRED) public void benutzerAnlegen(String name, String adresse) throws Exception{ Query q = em.createQuery("SELECT COUNT(*) FROM Benutzer b WHERE b.name = :n"); q.setParameter("n",name); if (((Long) q.getSingleResult()).intValue() == 0){ Benutzer benutzer = new Benutzer(); benutzer.setName(name); benutzer.setAdresse(adresse); em.persist(benutzer);} else throw new Exception("Name bereits verwendet"); } } 225 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3.2 Webapplikationen Web−Client Server HTTP mit HTML+Cookies Präsentation HTML + JavaScript? +Java−Applets? Browser HTTP mit Formularinhalt und Cookie Webzugang JSP, Servlets, ASP, PHP Geschäftslogik EJB, PHP, ... ggf. JDBC Datenhaltung Cookies RDBMS 226 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3.2.1 HTML • “Markup”-Sprache zur Beschreibung von Struktur (→ Tags), Inhalt und ggf. Layout einer Webseite • bietet u.a.: Text, Listen, Tabellen, Verweise, Bilder, Frames, Formulare • für jede HTML-Version eigene vordefinierte Dokumenten-Typ-Definition (DTD) <!DOCTYPE HTML PUBLIC //W3C//DTD HTML 4.0 Transitional//EN» • Aufbau eines HTML-Dokuments: ASCII-Datei mit Inhalt, Tags und Meta-Informationen u.a. für Suchmaschinen • Meta-Informationen: Autor, Schlüsselworte, verwendeter Editor, Klassifikation 227 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Die wichtigsten Tags Tag-Name Funktion <HTML> . . . </HTML> deklariert eine HTML-Seite <HEAD> . . . </HEAD> enthält den Kopf der HTML-Seite <TITLE> . . . </TITLE> definiert den Titel der Seite <BODY> . . . </BODY> enthält den Körper der HTML-Seite <Hn> . . . </Hn> definiert eine Überschrift der Ebene n <B> . . . </B> setzt . . . in Fett-Schrift <I> . . . </I> setzt . . . in Kursiv-Schrift <UL> . . . </UL> bzw. beschränkt eine ungeordnete Liste, <OL> . . . </OL> bzw. eine nummerierte Liste <LI> . . . </LI> Listenelement <P> . . . </P> Absatz <HR> fügt eine horizontale Linie ein <PRE> . . . </PRE> vorformatierter Text; wird nicht umformatiert <IMG SRC="Adresse"/ > lädt ein Bild <A HREF="URL"> . . . </A> fügt einen Link mit der Beschreibung . . . ein <!-- . . . --> Kommentar 228 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Neuerungen in HTML5 • neue semantische Markup-Elemente wie <section>, <article>, <header>, <footer> • Schlüssel-Wert-Paare (Microdata) für Suchmachinen • neue validierbare input-Typen wie tel, url, email, number für Formulare • Client-seitiger Speicherplatz (Web Storage, Indexed Database (inkl. Transaktionen), File API, Web SQL) ggf. auch über Dauer einer Sitzung hinaus • Möglichkeit von Offline-Applikationen • Gerätezugriff insbesondere für mobile Endgeräte (u.a. Geolocation API) 229 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Neuerungen in HTML5 (2) • Kommunikation über Websockets und Cross Document Messaging • Multimedia (Videos mit WebM, OGG, H.264; Audio) ohne Plug-ins • 2D- und 3D-Graphiken (u.a. SVG), MathML • Web Workers erlauben JavaScript-Berechnungen im Hintergrund (→ Threading) • XMLHttpRequest Level 2 (→ Ajax) • durch CSS3 verbessertes Geräte-abhängiges Layout 230 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Sitzungen • HTTP ist zustandslos • Rekonstruktion einer Sitzung aus Einzelzugriffen unmöglich • Trick: Sitzungsinformationen in versteckten Formularfeldern (s.u.), verlängerten URLs oder Cookies 231 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3.2.2 Cascading Style Sheets (CSS) • Layout-Eigenschaften werden durch Tags festgelegt, z.B. <H2 ALIGN=center><FONT COLOR=red>Einleitung</FONT></H2> • um diese nicht bei jedem Textelement wiederholen zu müssen, können Style-Sheets festgelegt werden, z.B. H2 text-align: center; color: red • festlegbare Eigenschaften: Farbe, Font-Familie, Font-Stil (z.B. italic), Font-Größe, Zeichenabstand, Wortabstand, Text-Dekoration (z.B. underline, blink), horizontale und vertikale Ausrichtung und Einrückung, Hintergrund-Farbe bzw. -Bild usw. • Einbindung z.B. durch <LINK>-Tag im Head-Teil eines Dokuments 232 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3.2.3 Formulare • erlauben die interaktive Zusammenstellung von Informationen zur Übermittlung an eine Anwendung auf einem Server • Teil einer Web-Seite 233 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Tags in Formularen 1) Beginn und Ende eines Formulars, z.B. <FORM ACTION="/cgi-bin/script1.pl" METHOD="GET" > ... </FORM> • ACTION-Attribut definiert URL des Verarbeitungsprogramms • METHOD-Attribut bestimmt Methode der Übertragung an den Server: GET: Eingaben werden als Teil der URL übertragen Zugriff aus CGI-Skript über Umgebungsvariablen QUERY_STRING und/oder PATH_INFO POST: Eingaben in “Payload” übertragen und über Standardeingabe an CGI-Skript geleitet 234 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Tags in Formularen (2) 2) Text- und Passwort-Eingabe <INPUT TYPE="text" NAME="Kunde"> <INPUT TYPE="password" NAME="passwd"> 3) Knöpfe <INPUT TYPE="submit" VALUE="Abschicken"> <INPUT TYPE="image" SRC="bild.gif"> <INPUT TYPE="reset" VALUE="Formular l&ouml;schen"> 4) Radio-Knöpfe und Ankreuzfelder <INPUT TYPE="radio" NAME="zahlungsmittel" VALUE="bar"> <INPUT TYPE="checkbox" NAME="mit Abendessen"> 235 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Tags in Formularen (3) 5) Menüs und Scroll-Listen <SELECT NAME="wohnort" SIZE=1> <OPTION>Telgte <OPTION>Greven </SELECT> • bei SIZE > 1: Scroll-Liste (ggfs. MULTIPLE) 6) Textfelder <TEXTAREA ROWS=5 COLS=20 NAME="bemerkung"> </TEXTAREA> 7) Datei (mit Browser) auswählen und an Server schicken <INPUT TYPE="file" SIZE=20> Beispiele siehe Webseite 236 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3.2.4 Java-Applets • Applet-Tag wird eingebunden in Web-Seite • das zugehörige Applet (d.h. eingeschränkte Java-Programmstück) wird vom Server geladen und beim Client ausgeführt • ohne Einschränkungen könnten Applets beim Client Schäden anrichten • daher: Java-Byte-Code wird von der abstrakten Maschine JVM interpretiert • unsichere Operationen werden hierbei abgefangen (z.B. keine Festplattenzugriffe, Kommunikation nur mit dem Server) • Applets erweitern Web-Seiten um die Ausdruckskraft einer Programmiersprache (insbesondere auch: Grafik, Audio) 237 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3.2.5 JavaScript • von Netscape entwickelte Skriptsprache • typischer Einsatz in Web-Seiten • Java-ähnliche Syntax • JavaScript-Programmstücke werden vom Browser beim Client ausgeführt • erlaubt Interaktion zwischen Web-Seite und Benutzer ohne Rückgriff auf den Server • Kernelement von AJAX 238 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Was können JavaScripte? • Formulare validieren • html-Seiten generieren • die Browserumgebung ändern (Farbe,. . . ) • html-Dokumente laden • Web-Seiten Benutzer- bzw. Umgebungs-abhängig aufbereiten • Bedienkomfort wie bei einer Desktop-Applikation bieten (z.B. Drag & Drop, Tool-Tips) • Beispiele siehe Web-Seite 239 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Was ist bei JavaScript eingeschränkt? • Zugriff auf lokale Dateien • Netzwerk-Operationen • Multithreading (nur simulierbar) 240 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3.2.6 Cookies • sind kurze Informationen, die der Client einer Seite zuordnet und lokal speichert (mit Verfallsdatum) • verleihen dem Browser ein Gedächtnis • z.B.: beim erneuten Besuch einer Web-Seite brauchen Informationen nicht neu eingegeben zu werden • werden in HTTP-Nachricht an den Server mitübertragen • werden bei der Übertragung i.allg. nicht geschützt 241 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Bestandteile eines Cookies • Domäne: erzeugender Webserver (≤ 20 Cookies pro Client und Domäne) • Pfad im Dateibaum des Servers mit Programmen, die Cookie verwenden dürfen • sicher?: wenn ja: Cookie wird nur an sicheren Server weitergegeben • bei Ablauf der “gültig-bis”-Zeit wird Cookie gelöscht • entsprechendes Überschreiben erzwingt Löschen • Anwendung: z.B. Warenkorb, benutzerbezogene Informationsaufbereitung, CRM (Benutzerprofile), Log-in-Informationen 242 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3.2.7 Java-Servlets • werden von Java-Laufzeitgebung interpretiert, die in den Webserver (z.B. Apache) integriert wird • erlauben die dynamische Generierung von Web-Seiten • zur Bearbeitung einer Anfrage: neuer Thread in JVM (statt neuer Prozess) Webserver HTML Client Internet DB API response request JVM Servlet 243 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Java-Servlets (Fortsetzung) • Servlets werden z.B. in speziellem Verzeichnis gesammelt • Server wird so konfiguriert, dass bei Zugriff hierauf das jeweilige Servlet ausgeführt wird • Anfrage an ein Servlet über HTTP, z.B.: http://servername/servlets/Welcome?name=Ute+Mai • Parameterübergabe und Ergebnis nicht über Umgebungsvariablen bzw. Standardein-/ausgabe sondern komfortabler über vorgegebene Anfrage- und Antwort-Objekte (Argumente von doGet) 244 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Beispiel: Java-Servlet import java.io.*; import javax.servlet.*; out.println("<HTML>\n import javax.servlet.http.*; <HEAD>\n <TITLE>Hallo public class Welcome extends HttpServlet{ </TITLE>\n public void doGet(HttpServletRequest req, HttpServletResponse res) </HEAD>"); out.println("<BODY>\n throws ServletException, IOException{ <H1>Hallo "+name+". String name = req.getParameter("name"); if ((name==null) || (name.length()==0)) </H1>"); out.println("</BODY>\n name = "Unbekannter"; res.setContentType("text/html"); PrintWriter out =res.getWriter(); </HTML>"); out.close();} } 245 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Vorteile von Servlets • Servlets ggf. über mehrere Anfragen hinweg im Hauptspeicher • Code ggf. gemeinsam genutzt • Servlet und Applet können kontinuierlich über beliebiges Protokoll (auch verschlüsselt) kommunizieren • Kommunikation von Servlets untereinander über gemeinsame Variablen/Objekte synchronisiert durch Java-“Monitore” • Servlets bieten komfortable Methoden zur Aufrechterhaltung einer Sitzung (session tracking; intern basierend auf Low-Level-Techniken wie Cookies) • (lange) Datenbanktransaktionen können hiermit leicht realisiert werden • Datenbankverbindungen (ggf. auch Connection-Pools) bleiben geöffnet 246 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3.2.8 JavaServer Pages (JSP) • Nachteil von Servlets: wenn Webseiten aus viel vorgefertigtem Text mit wenig Logik generiert werden, besteht das Servlet fast nur aus Ausgabe-Anweisungen • dann übersichtlicher: Logik (Java) in HTML-Seite integrieren • hierzu: JSP • JSP-Code wird intern in Servlets transformiert • eigene Tag-Libraries erlauben Trennung von Webdesign und Logik 247 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster JSP-Beispiel 1: Hallo <HTML> <HEAD><TITLE>Hallo</TITLE> <BODY> <H2>JSP-Beispiel</H2> <% if (request.getParameter("name") == null) out.println("Hallo!"); else out.println("Hallo "+request.getParameter("name")+"!"); %> <it>Herzlich willkommen!</it> </BODY></HTML> 248 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster JSP-Beispiel 2: Quadrat <HTML> <HEAD><TITLE>Quadrat</TITLE> <BODY> <%@ include file = "/kopf.html" %> <H2>JSP-Beispiel</H2> <%@ page session="false" %> <%@ page errorpage = "/error.jsp" %> <% String vorname = request.getParameter("vorname"); String nachname = request.getParameter("nachname"); int z = Integer.parseInt(request.getParameter("zahl")); if ((vorname == null) || (nachname == null)) throw new Exception("Bitte geben Sie Ihren Namen an!"); else out.println("Hallo "+vorname+" "+nachname+"!"); %> Das Quadrat der von Ihnen eingegebenen Zahl <%= z %> ist <font color=red><%= quadrat(z) %></font>. <%@ include file = "/fuss.html" %> </BODY></HTML> <%! private int quadrat(int x){return x*x;} %> 249 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Vordefinierte Variablen • verwendbar im Java-Code innerhalb einer JSP-Seite • HttpServletRequest request • HttpServletResponse response • javax.servlet.jsp.JspWriter out • HttpSession session • ServletContext application • javax.servlet.jsp.PageContext pageContext 250 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster JSP-Features <% c %> Java-Code c wird ausgeführt <%= e %> Java-Ausdruck e wird ausgewertet <%! d %> Java-Deklaration d wird vor der <%@ d %> Direktive d wird zur Transformationszeit ausgeführt und das Ergebnis als String eingefügt Hauptservlet-Methode (doGet) in das generierte Servlet eingefügt z.B. Cookies abschalten, Fehlerbehandlungsseite festlegen, Datei einfügen <jsp:useBean . . . > JavaBean (6= EJB) einfügen </jsp:useBean> <jsp:include page ="/my.jsp" > Datei zur Zugriffszeit einfügen </jsp:include> <jsp:forward page="login.jsp"> Zugriff umlenken </jsp:foward> 251 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Frameworks für Benutzerschnittstellen von Webapplikationen • Struts 2 basiert auf Entwurfsmuster Model-View-Controller (MVC) • JavaServer Faces ebenfalls basierend auf MVC • (z.B.) EJBs für Model, JSP für View • insbesondere geeignet für komplexe Systeme von dynamischen Webseiten 252 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3.3 Web-Services • Kommunikation zwischen Client und Server über XML-Format SOAP Client SOAP Server • Beschreibung von Webservices in WSDL (Web Services Description Language) • Suche passender Dienste mit UDDI (Universal Description, Discovery, and Integration) • Potential: führende Integrationsinfrastruktur (“kleinster gemeinsamer Nenner”) Web Service Protokollstapel Entdeckung UDDI Beschreibung WSDL Verpackung SOAP Übertragung HTTP, SMTP, FTP • Nachteil: (z.Z.) unzureichende Sicherheit und Transaktionsunterstützung 253 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3.3.1 SOAP • XML-Format zur Kodierung von entfernten Aufrufen (RPC) von Web-Services und deren Antworten • Vorteil(?): über HTTP (Port 80) wird Firewall meist durchdrungen SOAP−Envelope SOAP−Header Header−Block Header−Block SOAP−Body Nachrichten−Body 254 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Beispiel: SOAP-Anfrage <?xml version=’1.0’ encoding=’UTF-8’?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/09/soap-envelope/" xmlns:xsi="http//www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <ns1:getWeather xmlns:ns1="urn:examples:weatherservice" SOAP-ENV:encodingStyle="http://www.w3.org/2001/09/soap-encoding/"> <zipcode xsi:type="xsd:string">48149</zipcode> </ns1:getWeather> </SOAP-ENV:Body> </SOAP-ENV:Envelope> (angelehnt an: E. Cerami: Web Services, O’Reilly, 2002) 255 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Beispiel: SOAP-Antwort <?xml version=’1.0’ encoding=’UTF-8’?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/09/soap-envelope/" xmlns:xsi="http//www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <ns1:getWeatherResponse xmlns:ns1="urn:examples:weatherservice" SOAP-ENV:encodingStyle="http://www.w3.org/2001/09/soap-encoding/"> <return xsi:type="xsd:int">23</return> </ns1:getWeatherResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 256 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster SOAP • Typen: neben üblichen Basistypen (int,float) auch Arrays, Strukturen und XML • bei Fehler: spezielle fault-Antwort (= ˆ Exception) • durch Header: u.a. optionale Zugangskontrolle, Transaktionsverwaltung • unübersichtliche XML-Struktur wird in Client- und Server-Code durch Java-Klassen versteckt • Implementierungen: z.B. Apache SOAP (→ Tomcat), MS SOAP Toolkit 257 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Beispiel: Wetter-Web-Service in Java public class public int WeatherService{ getWeather(String zipcode) { return 23;} } • wird deployed (z.B. in Webcontainer Tomcat) 258 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3.3.2 WSDL • Format zur Beschreibung von Web-Services <definitions> <types> Datentypen <messages> Nachrichten <porttype> Operationen <binding> Übertragungsprotokolle <service> Zugriffsadresse 259 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Beispiel: WSDL-Beschreibung des Wetter-Web-Service <?xml version="1.0" encoding="UTF-8"?> <definitions name="WeatherService" targetNamespace="http://www.ecerami.com/wsdl/WeatherService.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.ecerami.com/wsdl/WeatherService.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <message name="getWeatherRequest"> <part name="zipcode" type="xsd:string"/> </message> <message name="getWeatherResponse"> <part name="temperature" type="xsd:int"/> </message> <portType name="Weather_PortType"> <operation name="getWeather"> <input message="tns:getWeatherRequest"/> <output message="tns:getWeatherResponse"/> </operation> </portType> 260 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster WSDL-Beispiel (Fortsetzung) <binding name="Weather_Binding" type="tns:Weather_PortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="getWeather"> <soap:operation soapAction=""/> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:examples:weatherservice" use="encoded"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:examples:weatherservice" use="encoded"/> </output> </operation> </binding> 261 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster WSDL-Beispiel (Fortsetzung) <service name="Weather_Service"> <documentation>WSDL File for Weather Service</documentation> <port binding="tns:Weather_Binding" name="Weather_Port"> <soap:address location="http://localhost:8080/soap/servlet/rpcrouter"/> </port> </service> </definitions> 262 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.2.3.4 RESTful Webservices • basieren direkt auf HTTP statt auf SOAP • Adressierung von Ressourcen über Uniform Resource Locator (URI) • idempotente HTTP-Methoden POST, GET, PUT und DELETE zur Realisierung von Erzeugen, Lesen, Ändern und Löschen einer Ressource • Repräsentation von Inhalten meist im kompakteren JSON-Format statt mit SOAP • REST = representational state transfer • Trend: gewinnen wegen höherer Effizienz an Beliebtheit gegenüber SOAP-basierten Webservices 263 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.3 Bausteine einer Software-Architektur Modul • kapselt Operationen (Funktionen) und ggfs. Daten • Trennung von Schnittstelle und Rumpf (Implementierung) (getrennt compilierbar, Geheimnisprinzip) • Zugriff auf Datenstruktur ausschließlich über vorgegebene Operationen • dadurch: Änderungen von Datenstrukturen und Operationen lokal begrenzt • Schnittstelle wird in Entwurfsphase spezifiziert: • Aufgabe • Ein-/Ausgabe-Parameter, Vor- und Nachbedingungen der Operationen • ggfs. Leistungsmerkmale (Platzbedarf, . . . ) 264 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Modularten Funktionsmodul • enthält ≥ 1 Funktion, die Eingaben in Ausgaben transformiert (kein Gedächtnis!) • funktionale Abstraktion in Programmiersprache realisiert durch Funktion oder Prozedur Datenobjektmodul • Kapselung von Zugriffsoperationen und Daten (→ Gedächtnis) • realisiert ein abstraktes Datenobjekt • Abhängigkeiten zwischen Zugriffsoperationen durch Algebraische Spezifikation oder Automaten beschreiben 265 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Modularten (2) Datentypmodul • realisiert einen abstrakten Datentyp (ggfs. mit Parametern, ≥ 1 Objekt) • Instanzen sind Datenobjekte Klasse • wie Datentypmodul, jedoch zusätzlich Vererbung • nur bei OO (und dort auschließlich) 266 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Beispiel: Polymorphes Datentypmodul in Ada generic Max: natural := 100, type ElementT is private; package WarteschlangeT is procedure insert(Element: in ElementT; Status: out StatusT); procedure delete(Element: out ElementT; Status: out StatusT); end Warteschlange; package body Warteschlange is ... Deklaration von Variablen und Typen z.B. head, tail Verwendung: package QueueF is new WarteschlangeT(10,float); package QueueI is new WarteschlangeT(5,int); ... QueueF.insert(3.5,Status); QueueI.insert(2,Status); ... Implementierung von insert , delete begin head := 0; tail := 0; end Warteschlange 267 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Eignung der Modultypen • Funktionsmodule: • Steuerung und Koordination • Transformation • komplizierte Auswertung • als Hilfsdienst in Datenstrukturen als funktionale Zwischenschicht zwischen Datenabstraktionen • Datenobjektmodule: • komplexes Einzelobjekt (z.B. Hypertext) • Sammlung von Objekten (z.B. Stack) • Datentypmodule: • bei mehreren gleichartigen komplexen Einzelobjekten oder Kollektionen 268 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Einbindungsalternativen von Modulen a) Import: Entwerfer erlaubt Import eines Moduls explizit b) Schachtelung: (vgl. innere Klassen in Java) • blockstrukturierte Programmiersprachen haben baumstrukturierte Gültigkeitsbereiche module A module B module C module D ... B ... A ... C ... module E ... E ... A ... • Modul hat Zugriff auf Kinder, Geschwister, Vorfahren und deren Geschwister • ein Modul mit darunterhängendem Enthaltenseinsbaum heißt Teilsystem 269 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Vor- und Nachteile der Schachtelung • Vorteil: Hilfsmodule außerhalb des Teilsystems unsichtbar (Geheimnisprinzip) • Nachteil: Blockstruktur erzwingt z.T. schlechte Modulanordnung, Bsp.: • Hilfsmodul H wird von M und M 0 benutzt • H daher unter einem gemeinsamen Vorfahren V von M und M 0 anordnen • H für sein Abstraktionsniveau zu hoch • Verletzung des Geheimnisprinzips V V H M M’ M M’ allgemeine Benutzbarkeit H lokale Benutzbarkeit 270 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Moduleinbindung bei Schichtenarchitektur Schicht 2 Schicht 1 Schicht 0 • innerhalb einer Schicht: Schachtelung, z.T. auch import • zwischen Schichten: import 271 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.4 Entwurfsmethodiken • herkömmliche Methodiken: (Details s. Balzert) • Strukturierter Entwurf (SD): → Hierarchie von Funktionsmodulen • Modularer Entwurf (MD): → Funktions-, Datenobjekt- und Datentyp-Module • Objektorientierter Entwurf (OOD): • → System von Klassen und Paketen • Ausganspunkt: OOA-Modell (ohne Optimierungen, Assoziationen bidirektional, . . . ) • Schritte bei OOD: 1) Architekturentwurf 2) Implementierungsentwurf 272 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Architekturentwurf • Anbindung an Benutzerschnittstelle, Datenhaltung und Systemschnittstellen • Verteilung im Netz • Anpassung, Erweiterung und Verfeinerung des OOA-Modells zu OOD-Modell (auch in UML) • OO unterstützt Wiederverwendung; daher beim Entwurf überprüfen, ob Klassenbibliotheken oder Halbfabrikate wiederverwendbar 273 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Implementierungsentwurf • Anpassung an Zielsprache • dazu u.a. ggfs. Transformation von Mehrfachvererbung in Einfachvererbung bzw. Elimination von Vererbung 274 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Klassenbibliotheken • oft kommerziell angeboten oder in Programmierumgebung • z.B. für GUI, Graphik, grundlegende Datenstrukturen, Datenbankzugriff, IPC • übliche Topologien: • Baum: nutzt Vererbung, aber komplizierte Handhabung, z.B. in GUI • flach: einfache Handhabung, z.B. bei grundlegenden Datenstrukturen • Wald: Kompromiss • Framework: anpassbares System kooperierender Klassen 275 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Halbfabrikate • z.B. für Hilfe, Rechtschreibeprüfung, Silbentrennung, Diagramme • erstrebenswert: unabhängig von Sprache und Plattform, verteilbar • Ansätze für Interoperabilität: • CORBA • .NET (Microsoft; COM, DCOM) • Webservices (→ Service-oriented Architecture (SOA)) 276 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Entwurfsmuster • wiederkehrendes Entwurfsproblem für das bewährte Lösung existiert • siehe: E. Gamma et al.: Entwurfsmuster, Addison Wesley, 2009. 277 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.4.1 Architekturentwurf Erweiterung des OOA-Modells um • weitere Klassen (z.B. “technisch” bedingte) • Richtungsangaben für Assoziation und Aggregationen • Kommentare • um Sichtbarkeitsangaben für Attribute und Operationen (public,protected,private) • Klassenattribute und Klassenoperationen 278 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.4.1.1 Anbindung an eine relationale Datenbank OO-Zwischenschicht transformiert: 1) Klassen in Relationen 2) Beziehungen in Fremdschlüssel (und z.T. Klassen) 3) Vererbung in System von Relationen (Details s. Balzert) 4) komplexe Typen in Basistypen 5) OO-Zugriffsmethoden in SQL • hierfür Middleware, z.B. JDO, EJB (Entity-Beans), Hibernate, JDBC 279 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Transformation von Klassen in Relationen Person Nr. Name OID Nr create table Person ( OID number(8) not null, Nr number(8) not null, Vorname char(20), Person Vorname Nachname • Abb. von Attributtyp auf SQL-Typ • OID-Spalte hinzufügen Nachname char(20) not null, • optionale Attribute festlegen primary key (Nr) ); • ggfs. Index anlegen create secondary index PersonIndex on Person(Nachname); 280 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Beziehungen in Fremdschlüssel umwandeln (vgl. Vorlesung Datenmanagement) • bei 1 : m-Assoziation/Aggregation: K1 A1 A2 K2 1 OID1 K1 A1 K2 A2 OID2 A3 A4 OID1 * A3 A4 • bei n : m-Assoziation/Aggregation (n, m > 1): K1 A1 A2 K2 * OID1 K1 A1 A2 OID2 K2 A3 A4 K1-2 OID1 OID2 * A3 A4 281 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.4.1.2 Verteilung der Anwendung • OOD-Modell aufteilen in Client-OOD-Modell und Server-OOD-Modell • Verknüpfung von Client und Server z.B. über CORBA oder EJB • Behandlung von Klassenattributen, selbstdefinierte Typen, Aufzählungstypen in eigene Klasse “herausziehen” • falls Objektverwaltung erforderlich (von CORBA nicht unterstützt!), wird hierfür Hilfsklasse wie zur Behandlung von Klassenattributen angelegt 282 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster 5.4.2 Implementierungsentwurf • Anpassung an Zielprogrammiersprache • z.B. durch Elimination mehrfacher Vererbung 1. Aggregation von Rollen 2. Abflachen zu einfacher Hierarchie • oder durch vollständige Elimination von Vererbung 283 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Aggregation von Rollen Fahrzeug Ort km/h bewegen Fahrzeug Ort km/h 1 1..2 Rolle Flugzeug max. Flughöhe bewegen Schiff Tiefgang bewegen Wasserflugzeug bewegen bewegen Flugzeug max. Flughöhe bewegen Schiff Tiefgang bewegen 284 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Abflachen zu einfacher Hierarchie Fahrzeug Ort km/h bewegen Flugzeug max. Flughöhe bewegen Wasserflugzeug max. Flughöhe Tiefgang bewegen Schiff Tiefgang bewegen 285 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Vollständige Elimination von Vererbung • bei Sprachen ohne Vererbung (z.B. Ada) • Übernahme aller Attribute und Operationen der Oberklassen in jede (konkrete) Klasse Flugzeug Ort km/h max. Flughöhe bewegen Wasserflugzeug Ort km/h max. Flughöhe Tiefgang bewegen Schiff Ort km/h Tiefgang bewegen 286 Überblick Dienstleistungen Bausteine Methodiken Entwurfsmuster Weitere Anpassung an Zielsprache • Namenskonventionen beachten • alle Basistypen müssen unterstützt werden • Verwaltungsoperationen (Konstruktoren, Destruktoren, Initialisierung, Verwaltung von Assoziationen und Aggregationen, Lesen und Schreiben von Attributen) ggfs. ergänzen • ggfs. Containerklassen für Objektverwaltung hinzufügen • Sichtbarkeit festlegen (+,-,#) • Objekt-Lebenszyklen (z.B. Harel-Automaten) in Algorithmen transformieren 287