G s e a s m a t m ar a ch c i h tek e tur u I und IoC



Ähnliche Dokumente
Contexts and Dependency Injection. W3L AG

Java: Vererbung. Teil 3: super()

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Application Frameworks

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Das Model View Controller (MVC) Konzept

Adressen und Kontaktinformationen

Nathan Burgener. Design by Contract. Modul SWE

Programmieren in Java

Factory Method (Virtual Constructor)

Vorkurs C++ Programmierung

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

OWASP Stammtisch München Sep 2014 XSS und andere Sicherheitslücken aus der Perspektive des Programmcodes

5.2 Neue Projekte erstellen

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla

Grundlagen von Python

2 Die Terminaldienste Prüfungsanforderungen von Microsoft: Lernziele:

Programmieren 2 07 JavaFX-Properties und Data-Binding

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

WhiteStarUML Tutorial

Es wird das Struts <html:option> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht.

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

SE2-10-Entwurfsmuster-2 15

BusinessMail X.400 Webinterface Gruppenadministrator V2.6

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden.

Programmierkurs Java

Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool

Konfiguration des ewon GSM Modems Kurzbeschreibung zum Aufbau einer GSM Verbindung

Vodafone Conferencing Meeting erstellen

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Professionelle Seminare im Bereich MS-Office

Fassade. Objektbasiertes Strukturmuster. C. Restorff & M. Rohlfing

Kurzanleitung OOVS. Reseller Interface. Allgemein

Design Patterns 2. Model-View-Controller in der Praxis

1 Belastung. 1.1 Standortbestimmung 1.2 Belastungsvorhersage 1.3 Favoriten

estos UCServer Multiline TAPI Driver

Themen. Web Service - Clients. Kommunikation zw. Web Services

OERA OpenEdge Reference Architecture. Mike Fechner PUG Infotag 19. Mai 05 Frankfurt

Praktikum Software Engineering

Anleitung OpenCms 8 Inhaltstyp Kommentare

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

INDEX. Öffentliche Ordner erstellen Seite 2. Offline verfügbar einrichten Seite 3. Berechtigungen setzen Seite 7. Öffentliche Ordner Offline

Prinzipien Objektorientierter Programmierung

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Innere Klassen in Java

Software Engineering Klassendiagramme Assoziationen

MCRServlet Table of contents

Einführung in die Java- Programmierung

Der lokale und verteilte Fall

PowerPoint 2010 Mit Folienmastern arbeiten

Schedulingund Thread-Ausführer

Online Banking System

Große Übung Praktische Informatik 1

1. IPSec Verbindung zwischen 2 Gateways mit dynamischen IP Adressen

Einführung in die Informatik Tools

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Kurzanweisung für Google Analytics

Softwaretechnische Anforderungen zu Opale bluepearl Version 1.0 vom

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Multimedia Engineering II - Übung 2

Probeklausur Softwareengineering SS 15

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2

BitDefender Client Security Kurzanleitung

Objektorientierte Programmierung. Kapitel 12: Interfaces

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Assoziation und Aggregation

Adami CRM - Outlook Replikation User Dokumentation

Gründe für fehlende Vorsorgemaßnahmen gegen Krankheit

Archiv - Berechtigungen

Step by Step Softwareverteilung unter Novell. von Christian Bartl

Eine Anwendung mit InstantRails 1.7

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Softwaretechnik (WS 11/12)

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Windows Presentation Foundation (WPF) -Grundlagen -Steuerelemente. Dr. Beatrice Amrhein

Installation des edu- sharing Plug- Ins für Moodle

FAQ The FAQ/knowledge base. Version 2.1.1

Übungsaufgabe Transaktion als Middleware

Was ist Sozial-Raum-Orientierung?

Windows Server 2008 (R2): Anwendungsplattform

Arbeiten mit UMLed und Delphi

Thomas Wagner 2009 (im Rahmen der TA) Installation von MySQL 5.0 und Tomcat 5.5

MailUtilities: Remote Deployment - Einführung

U08 Entwurfsmuster (II)

Konfigurationsanleitung Fax over IP (T.38) und CAPI Fax Server (T.30) Graphical User Interface (GUI) Seite - 1 -

Mobiles SAP für Entscheider. Permanente Verfügbarkeit der aktuellen Unternehmenskennzahlen durch den mobilen Zugriff auf SAP ERP.

IAWWeb PDFManager. - Kurzanleitung -

JSP Grundlagen. JEE Vorlesung Teil 5. Ralf Gitzel

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java

WordPress. Dokumentation

GI-Technologien zur Umsetzung der EU-Wasserrahmenrichtlinie (WRRL): Wissensbasen. Teil 1: Einführung: Wissensbasis und Ontologie.

Java Enterprise Architekturen Willkommen in der Realität

Zeichen bei Zahlen entschlüsseln

1. Bearbeite Host Netzgruppen

5. Abstrakte Klassen

Konfiguration der Yeastar MyPBX IP-Telefonanlagen mit iway Business SIP Trunk

Softwaretechnologie Wintersemester 2009/2010 Dr. Günter Kniesel, Pascal Bihler

Transkript:

Gesamtarchitektur I und IoC

Schichten einer Web-Anwendung Initiiert durch J2EE und Spring: Strukturierte Sicht auf UI und Fachlogik (Domäne) Ergibt 5 Schichten: Man unterscheidet Präsentations- und Domänenmodell! UI Geschäftsmodell Presentation V UI Application (MC) Services C Domain M Sichtbare Komponenten UI-Zusammenhang: Navigation, Workflow, Anwendungsobjekte, Use Cases, Session, Verbindung zu Services Geschäftslogik und Transaktionen: Use-Cases, Objektübergreifende Operationen, Objektverwaltung (Suchen, Auflisten...) Fachlogik Domänenmodell, persistente Einheiten Persistenz Persistence Persistenzoperationen, Persistenzverwaltung. (c) schmiedecke 07 SE2-11-Anforderungsmanagement 2

Mail-Service Analysemodell User +loggedin Mail +timestamp +text Contact Header appendix login.jsp MailList.jsp MailViewer.jsp NotSent.jsp MailEditor MailSent.jsp (c) schmiedecke 07 SE2-11-Anforderungsmanagement 3

Mail-Service CRUD-Prototyp Zu jeder Model-Klasse wird eine Controller-Klasse und eine JpaController-Klasse generiert. Die Controller-Klasse enthält alle Attribute und Methoden, die die JSPs benötigen. Backing Bean Die JpaController-Klasse stellt den Zugang zu den Persistenten Objekten her. Service (c) schmiedecke 07 SE2-11-Anforderungsmanagement 4

CRUD-Architektur class MailCRUD FacesServ let mail.list.j sp mail.details.j sp mail.edit.j sp user.list.j sp user.details.j sp user.edit.j sp MailController UserControlle r MailJpacontroller UserJpaControlle r (c) schmiedecke 07 SE2-11-Anforderungsmanagement 5 Mail Us er

CRUD-Architektur Anwendungsarchitektur Echte GUIs sind an Use Cases ausgerichtet Services sind am Domain Model ausgerichtet Assoziationsgebüsch FacesServlet Login.jsp MailList.jsp MailViewer.jsp MailEditor.jsp SendingStatus.jsp <<ManagedBean>> UserServiceBean <<ManagedBean>> MailServiceBean <<ManagedBean>> ContactServiceBean EntityManager EntityManagerFactory <<ManagedBean>> PersistenceManager (c) schmiedecke 07 SE2-11-Anforderungsmanagement 6

Aufräumen mit einer Session Facade FacesServlet Login.jsp MailList.jsp MailViewer.jsp MailEditor.jsp SendingStatus.jsp <<ManagedBean>> MailSessionFacade <<ManagedBean>> UserServiceBean <<ManagedBean>> MailServiceBean <<ManagedBean>> ContactServiceBean Hier wird das Domain Model angefügt - später (c) schmiedecke 07 SE2-11-Anforderungsmanagement 7

Abhängigkeiten zwischen Schichten FacesServlet Login.jsp MailList.jsp MailViewer.jsp MailEditor.jsp SendingStatus.jsp <<ManagedBean>> MailSessionFacade <<ManagedBean>> UserServiceBean <<ManagedBean>> MailServiceBean <<ManagedBean>> ContactServiceBean Rote Assoziationen können nicht naiv gesetzt werden. Alternative? Klebstoff benötigt (c) schmiedecke 07 SE2-11-Anforderungsmanagement 8

IoC Inversion of Control Objektmanagement durch die Umgebung IoC-Framework Oder als IoC-Pattern implementiert Service-Konzept: Anwendung "bestellt" Objekt: "brauche ContactServiceBean" Framework liefert, gemäß Spezifikation, neues Objekt aktuell verfügbares Objekt allgemein veröffentlichtes Objekt kümmert sich um Instanziierung, Verwaltung, Thread-Safety,... Beliefern Dependency Injection (c) schmiedecke 07 SE2-6-IoC-Frameworks 9

IoC - Klebstoff oder Trennmittel? Eine Frage der Sichtweise Wenn man Klebstoff hat, muss man die Schichten nicht hart verdrahten: IoC gilt als Technik der Schichtentrennung (c) schmiedecke 07 SE2-6-IoC-Frameworks 10

Direkte Instanziierung direkte Kontrolle A B A B public class A { private B b; 1 : new() public A() { b = new B(); } } Entwurfsentscheidungen: 1. A benötigt Referenz auf B. 2. B ist eine konkrete Klasse mit Standard-Konstruktor. 3. A besitzt die Referenz auf B exklusiv. (c) schmiedecke 07 SE2-6-IoC-Frameworks 11

Veränderungen an B wirken sich aus: A C B 1 : new C() 2 : new B() public class A { private B b; public A() { C c = new C(); b = new B(c); } } Geänderte Entwurfsentscheidung, z.b.: kein Standardkonstruktor für B B ist abstrakte Klasse. (c) schmiedecke 07 SE2-6-IoC-Frameworks 12

Umkehrung der Kontrolle: IoC-Framework erzeugt B-Instanz A B IoCFramework 2 : setb() 1 : create() public class A { private B b; public A() {} public void setb(b b) { this.b = b; } } Dependency Injection Änderungen an B wirken sich nicht aus. B muss keine konkrete Klasse sein. A-Instanzen müssen vor Benutzung mit B-Referenz "versorgt" sein. (c) schmiedecke 07 SE2-6-IoC-Frameworks 13

Dependency Injection Typ 1 Interface Injection PersistenceManager DataSource import org.apache.avalon.framework.*; public class PersistenceManager implements Serviceable { DataSource datasource; public void service (ServiceManager sm) throws ServiceException { datasource = (DataSource)sm.lookup("dataSource"); } public void getdata() { // use datasource PersistenceManager IoCFramework Service // to do some work 1 : create() } } 2 : service() 3 : lookup() (c) schmiedecke 07 SE2-6-IoC-Frameworks 14

Diskussion Interface Injection + keine Konfiguration erforderlich. - Java-Code ist framework-spezifisch. (c) schmiedecke 07 SE2-6-IoC-Frameworks 15

Dependency Injection Typ 2 Setter Injection PersistenceManager DataSource // Spring Framework: PersistenceManager ist normales Bean public class PersistenceManager { DataSource datasource; public void setdatasource(datasource datasource) { this.datasource = datasource; } public void getdata() { // use datasource to do some work } <bean } id="datasourcebean" class="..."> <property name="driverclassname"> <value>com.mydb.jdbc.driver</value> </property> <property name="url"> <value>jdbc:mydb://server:port/mydb</value> </property> <property name="username"> <value>root</value> </property> </bean> <bean id="persistencemanagerbean" class="example.persistencemanager"> <property name="datasource"> <ref bean="datasourcebean"/> </property> </bean> (c) schmiedecke 07 SE2-6-IoC-Frameworks 16

Diskussion Setter Injection + Java-Code ist Framework-unabhängig + Testumgebung einfach in XML konfigurierbar (Dummy- Objekte) - Die Abhängigkeit ist im Code nicht erkennbar. - Abhängigkeiten können nicht zur Compilezeit validiert werden. - DataSource muss public sein würde man eigentlich gern verbergen. (c) schmiedecke 07 SE2-6-IoC-Frameworks 17

Dependency Injection Typ 3 Constructor Injection PersistenceManager DataSource // PicoContainer Framework: keine Konfiguration public class PersistenceManager { DataSource datasource; public PersistenceManager(DataSource datasource) { this.datasource = datasource; } public void getdata() { // use datasource to do some work } } // die Klasse wird nicht direkt instanziiert, // sondern vom PicoContainer "besorgt". // Vorher muss sie unter "key" registriert sein, s.u. pico.getcomponentinstance(key); (c) schmiedecke 07 SE2-6-IoC-Frameworks 18

Dependency Injection Typ 3 Constructor Injection // PicoContainer Framework: programmierte Abhängigkeit // Datasourcebean erzeugen: JDBCDataSource datasource = new JDBCDataSource(); datasource.setdriverclassname("com.mydb.jdbc.driver"); datasource.seturl("jdbc:mysql://localhost:3306/mydb"); datasource.setusername("jacob"); //IoC-Container erzeugen MutablePicoContainer pico = new DefaultPicoContainer(); // Komponenten registrieren ConstantParameter datasourceparam = new ConstantParameter(dataSource); String key = "JDBCPersistenceManager"; Parameter[] params = {datasourceparam}; pico.registercomponentimplementation (key, PersistenceManager.class, params); (c) schmiedecke 07 SE2-6-IoC-Frameworks 19

Diskussion Constructor Injection + Java-Bean-Code ist Framework-unabhängig + Good-Citizen-Pattern: Instanziierte Objekte sind "komplett" + Die Abhängigkeit ist im Code erkennbar. - Vererbung bringt Komplikationen (Constructor chaining). - Manche APIs erfordern Standard-Konstruktor. (c) schmiedecke 07 SE2-6-IoC-Frameworks 20

Wichtige IoC-Frameworks Spring Setter Injection (auch Constructor Injection möglich) reichhaltige Bibliothek Standard-Hibernate-Anschluss Ausbaustufen für MVC, AOP PicoContainer minimal, reiner IoC-Container Constructor Injection Avalon frühes Projekt, wird nicht mehr fortgesetzt Interface Injection HiveMind (c) schmiedecke 07 SE2-6-IoC-Frameworks 21

Welches IoC-Framework für JSF- Anwendungen? Mit allen kombinierbar. IoC-Pattern kann auch selbst implementiert werden. Managed Beans sind bereits ein IoC-Framework! (c) schmiedecke 07 SE2-6-IoC-Frameworks 22

Managed Beans als IoC-Framework: Instanziierung: Managed Beans werden vom Container instanziiert. Initialisierung: Initialisierungen von Properties können in der faces-config.xml angegeben werden. Auch als Assoziationen zu anderen Managed Beans <value>#{otherbean}</value Gültigkeit und Lebensdauer: Scope-Typen none, request, session, application Lebensdauer wird in faces-config.xml spezifiziert. (c) schmiedecke 07 SE2-6-IoC-Frameworks 23

Bean-Konfiguration: IoC <managed-bean> <managed-bean-name>sessionfacade</managed-bean-name> <managed-bean-class>mail.ui.mailsessionfacade</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>readingservice</property-name> <value>#{readingservice}</value> </managed-property> <managed-property> <property-name>writingservice</property-name> <value>#{writingservice}</value> </managed-property> <managed-property> <property-name>addressbookservice</property-name> <value>#{addressbookservice}</value> </managed-property> </managed-bean> (c) schmiedecke 07 SE2-11-Anforderungsmanagement 24

genug für heute Nächste Woche stellen wir die Architektur fertig und fügen Authentifizierung hinzu. (c) schmiedecke 07 SE2-11-Anforderungsmanagement 25