Übungen zu Softwaretechnik



Ähnliche Dokumente
Themen. Web Service - Clients. Kommunikation zw. Web Services

WebService in Java SE und EE

VS Praktikum 03 Konzept

Java: Vererbung. Teil 3: super()

Einführung in die Programmierung

Objektorientierte Programmierung

ObjectBridge Java Edition

Wirtschaftsinformatik 2

Version smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1):

Java RMI Remote Method Invocation

Mobile und Verteilte Datenbanken

Tagesprogramm

Der lokale und verteilte Fall

U08 Entwurfsmuster (II)

Objektorientierte Programmierung

Programmierkurs Java

MCRServlet Table of contents

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Typumwandlungen bei Referenztypen

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

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

Print2CAD 2017, 8th Generation. Netzwerkversionen

Autorisierung. Sicherheit und Zugriffskontrolle & Erstellen einer Berechtigungskomponente

Zählen von Objekten einer bestimmten Klasse

Netzwerkversion PVG.view

Java Kurs für Anfänger Einheit 5 Methoden

SEP 114. Design by Contract

Programmieren in Java

Client-Server-Beziehungen

Remote Method Invocation

Web Services Security

Factory Method (Virtual Constructor)

Informationsblatt Induktionsbeweis

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

Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen

Übungsklausur vom 7. Dez. 2007

Applet Firewall und Freigabe der Objekte

How-to: Webserver NAT. Securepoint Security System Version 2007nx

ISA Server 2004 Erstellen einer Webverkettung (Proxy-Chain) - Von Marc Grote

STRATO Mail Einrichtung Mozilla Thunderbird

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

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

Java-Programmierung. Remote Method Invocation - RMI

Prozentrechnung. Wir können nun eine Formel für die Berechnung des Prozentwertes aufstellen:

Einführung in die Java- Programmierung

Algorithmen und Datenstrukturen

Anleitung für die Version von online 1. Schritt: Rufen Sie die Website auf...

Workflow, Business Process Management, 4.Teil

Unsere Webapplikation erweitern

Erweiterung der Autokonfigurationsmethode für Rich Communications Suite enhanced (RCS-e) durch die COCUS AG

Primzahlen und RSA-Verschlüsselung

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

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

Um DynDNS zu konfigurieren, muss ausschließlich folgendes Menü konfiguriert werden:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

ZID Hotline

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

Anleitung zur Webservice Entwicklung unter Eclipse

Delegatesund Ereignisse

Melde- und Veröffentlichungsplattform Portal (MVP Portal) Hochladen einer XML-Datei

Repetitionsaufgaben Wurzelgleichungen

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

GEONET Anleitung für Web-Autoren

1 Vom Problem zum Programm

Live Update (Auto Update)

Anleitung zur Installation von PGP auf MacOSx

Auszug aus JAX-WS Folien

Proxy. Krishna Tateneni Übersetzer: Stefan Winter

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging

public class SternchenRechteckGefuellt {

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Mail-Account Unimail mit der Einstellungen für Outlook Express 5.0

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

teamsync Kurzanleitung

Nutzung von GiS BasePac 8 im Netzwerk

Scala kann auch faul sein

Kurzeinführung zum Plotten in Maple

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Guide DynDNS und Portforwarding

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Digitale Zertifikate

Folge 18 - Vererbung

Praktische Übung 'JUnit-Test'

Benutzerhandbuch - Elterliche Kontrolle

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

1. Bearbeite Host Netzgruppen

Windows Vista Security

Ein Vorwort, das Sie lesen müssen!

Was meinen die Leute eigentlich mit: Grexit?

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

Kurzanleitung WebSphere MQ Funktionen

Transkript:

Prof. Dr. Dr. h.c. M. Broy Lösungsblatt 11 Dr. H. Ehler, S. Wagner 23. Januar 2004 Übungen zu Softwaretechnik Aufgabe 16 Qualitätseigenschaften Broker-Pattern Beurteilen Sie das in Aufgabe 15 benutzte Broker-Pattern hinsichtlich seiner Qualitätseigenschaften. Funktionalität: Erlaubt sehr flexible Systemarchitektur Zuverlässigkeit: Problematisch ist, das der Broker selbst einen Single-Point-of- Failure darstellt, d.h. wenn der Broker ausfällt, fällt das ganze System aus. Benutzbarkeit: einfach und übersichtlich Effizienz: leichte Laufzeitverschlechterung, da zusätzliche Verarbeitung durch Broker Änderbarkeit und Übertragbarkeit: einfach möglich, da gute Kapselung Aufgabe 17 Implementierung / Middleware Das in Aufgabe 15 entworfene City Information System soll in implementiert werden. a) Entwickeln Sie eine Implementierung in Java (oder C++,...) unter der stark vereinfachenden Annahme, dass sich alle Objekte auf einem Rechner befinden werden und die Server alle gleichartig sind. Details wie Threads usw. müssen nicht ausprogrammiert werden. Stützen Sie sich dabei vor allem auf die Abläufe, die in den MSCs spezifiziert wurden. Eine sehr einfache Möglichkeit dies zu realisieren wäre eine Abbildung auf das WWW, da das zu entwickelnde System webbasiert ist. Man könnte die WWW- Infrastruktur selbst bereits als Broker-Pattern auffassen. Der WWW-Browser übernimmt die Rolle des Client und Client-Side Proxy. Der Broker ist dabei der Internet-Gateway und Namensservice und schliesslich die Server und Server-Side Proxies entsprechen HTTP-Servern. Um die Realisierung interessanter zu gestalten (und um zu vermeiden, dass die Benutzer sich URLs merken müssen), werden wir das Broker-Pattern aber anders anwenden. Die Rolle des Brokers wird der HTTP-Server, mit dem die Browser kommunizieren spielen, der wiederum andere Server benutzt, um Anfragen zu beantworten. Zuerst wollen wir eine einfache Implementierung der Nachrichten, spezialisiert in Anfragen (Request) und Antworten (Response) angeben. Ausserdem wird noch eine Klasse für die Addresse des Clients benötigt. public class Message { private String data; 1

public ClientAddress client; public Message(String data) { this.data = data; public String getdata() { return data; public boolean isrequest() { return (false); /* Message */ public class Request extends Message { private String data; public String service; public Request(String data) { super(data); public boolean isrequest { return (true); /* Request */ public class Response extends Message { private String data; public Response(String data) { super(data); public boolean isrequest() { return (false); /* Response */ public class ClientAddress { public String ipaddress; public String port; 2

Der Broker nimmt also HTTP-Anfragen entgegen, leitet die Anfrage weiter und reicht die Antwort zurück. Dazu sind natürlich mehrere Threads notwendig, um dies nebenläufig zu machen. Details dazu wurden aber weggelassen. public class Broker { private static Vector serverproxies; private static Bridge bridge; // private static Vector servers; public Broker() { bridge = new Bridge(this); serverproxies = new Vector(); clients = new Vector(); private void maineventloop() { // Kuemmert sich um Thread-Verwaltung private void updaterepository(serverproxy proxy) { // evtl. Test, ob schon vorhanden serverproxies.add(proxy); public String registerservice(serverproxy proxy, String service) { // evtl. Sicherheitsmechanismus updaterepository(proxy); return ("acknowledgment"); private ServerProxy findserver(request request) { // Server entsprechenden dem Request aus Vektor suchen return (proxy); private ClientAddress findclient(response response) { return (response.client); public void forwardrequest(request request) { ServerProxy server = findserver(request); server.callservice(request); // asynchron public void forwardresponse(response response) { Client client = findclient(response); // Response per HTTP an Client schicken 3

public static void main(string[] argv) { maineventloop(); /* Broker */ Der Broker benutzt eine Bridge, um mit möglichen anderen Brokern zu kommunizieren. Die Verwaltung der Referenzen zu anderen Bridges wurde weggelassen. public class Bridge { private Broker broker; private Vector bridges; public Bridge(Broker broker, Vector bridges) { this.broker = broker; this.bridges = bridges; private Message packdata(message message) { // Daten packen return (message); private Message unpackdata(message message) { // Daten entpacken return (message); private bridge findbridge(message message) { // Bridge entsprechend Client oder Dienst suchen return (bridge); public void forwardmessage(message message) { message = packdata(message); Bridge bridge = findbridge(message); bridge.transmitmessage(message); // asynchron public void transmitmessage(message message) { message = unpackdata(message); if (message.isrequest()) { broker.forwardrequest((request) message); // asynchron else { broker.forwardresponse((response) message); // asynchron /* Bridge */ 4

Die Server sind derzeit alle gleich strukturiert. In einer realen Implementierung müssten natürlich verschiedene Server abgeleitet werden, die verschiedene Dienste erbringen. public class Server { private static Broker broker; private static Vector serverproxies; public Server(Broker broker) { ServerSideProxy proxy = new ServerSideProxy(this, broker); Vector serverproxies = new Vector(); serverproxies.add(proxy); initialize(broker, serverproxies); private void initialize(broker broker, Vector serverproxies) { this.broker = broker; this.serverproxies = serverproxies; // Weitere Initialisierungen private void entermainloop() { // Thread-Verwaltung public Response runservice(request request) { // Request verarbeiten return (response); public static void main(string argv[]) { entermainloop(); /* Server */ Der Server benutzt einen Server-Proxy zur Kommunikation mit dem Broker. public class ServerSideProxy { private Broker broker; private Server server; public ServerSideProxy(Server server, Broker broker) { this.broker = broker; this.server = server; private Request unpackdata(request request) { 5

// Daten entpacken return (request); private Response packdata(response response) { // Daten packen return (response); public void callservice(request request) { request = unpackdata(request); Response response = server.runservice(request); response = packdata(response); broker.forwardresponse(response); // asynchron /* ServerSideProxy b) Skizzieren Sie, wie Sie die Implementierung aus a) in eine verteilte Umgebung mit einer Middelware wie CORBA (oder JavaRMI,...) übertragen würden. Zur Übertragung in ein verteiltes System müssen verschiedene Überlegungen angestellt werden: Identifizierung der aktiven Objekte, also Objekte mit eigenem Kontrollfluss. Dies wurde in a) bereits teilweise gemacht. Beispiele: Broker, Server Verteilung der Objekte auf die Netzwerkknoten. Beispiele: Broker auf Host fred.in.tum.de, Server auf barnie.in.tum.de Anbindung an Middleware, also bei CORBA müssen die Schnittstellen mittels der Interface Description Language (IDL) beschrieben werden. Daraus können Stubs und Skeletons generiert werden, die benutzt werden, um die entfernte Kommunikation zu ermöglichen. Festlegung weiterer Dienste, z.b. Namensdienst von CORBA vs. feste Namensgebung 6