Technische Universität Darmstadt - Fachbereich Informatik - Fachgebiet Softwaretechnik Komponententechnologie für verteilte Anwendungen 24.07.2008 Bearbeitungszeit ...... 90 Minuten Hilfsmittel ................... Keine (verwenden Sie nur dokumentenechte Stifte) Prüfer ......................... Dr.-Ing. Michael Eichberg Hinweise: • Die Heftung ist nicht zu lösen. Ggf. zusätzlich angeforderte Blätter müssen Ihren Namen enthalten. • Schreiben Sie auf jedes Blatt Ihren Namen in Druckbuchstaben. • Schreiben Sie leserlich. • • Füllen Sie das Deckblatt vollständig aus und unterschreiben Sie die Klausur. You can answer the questions in English. Nachname, Vorname (in Druckbuchstaben) Matrikelnummer Studiengang / Prüfungsordnung Fachbereich Unterschrift Aufgabe 1 2 3 4 5 6 7 8 Summe Punkte 13 5 10 14 14 14 8 12 90 erreicht Note 1 Name und Matrikelnummer: (CTfDS SS08) Aufgabe 1 - Komponenten (∑13 Punkte) Nennen und erklären Sie die zentralen Bestandteile einer Komponente? Benennen und erläutern Sie diese kurz. (6 Punkte) Beschreiben Sie kurz den Zweck von Softwarekomponentenumgebungen (Software Component Infrastructures). (1 Punkt) Zählen Sie die Aspekte auf, die beim Entwurf einer Komponenteninfrastruktur zu beachten sind. (3 Punkte) (Eine Benennung der Aspekte ist ausreichend - eine Begründung ist nicht erforderlich) Erläutern Sie kurz den Begriff des „Containers“ im Zusammenhang mit Komponenteninfrastrukturen. (3 Punkte) Seite 2 Name und Matrikelnummer: (CTfDS SS08) Aufgabe 2 - Dependency Injection (∑5 Punkte) Dependency Injection findet zunehmend Verbreitung - insbesondere im Rahmen der Entwicklung von Frameworks für Unternehmensanwendungen. Welches sind die Gründe für die zunehmende Verbreitung? (2 Punkte) (Begründen Sie kurz.) Welche Typen von Dependency Injection kennen Sie und welche Probleme können bei welchem Typ auftreten? (3 Punkte) Seite 3 Name und Matrikelnummer: (CTfDS SS08) Aufgabe 3 - OSGi (∑10 Punkte) Stellen Sie sich vor, dass Sie eine Unternehmensanwendung entwickeln und als zu Grunde liegendes Framework OSGi einsetzen. Welches Kriterium ziehen Sie heran, um zu entscheiden wie Sie die verschiedenen Funktionen Ihrer Anwendung auf verschiedene OSGi Bundles aufteilen? (2 Punkt) Einige der zu entwickelnden Bundles benötigen Dienste, die von anderen Bundles zur Verfügung gestellt werden. Beschreiben Sie kurz welche Schritte notwendig sind damit Bundle A einen von Bundle B zur Verfügung gestellten Dienst zur Laufzeit nutzen kann. (2 Punkte) OSGi ermöglicht es während der Laufzeit der OSGi Umgebung Bundles zu laden, zu starten, zu stoppen, zu entladen und zu aktualisieren. Beschreiben Sie den Java Mechanismus der dies ermöglicht. (2 Punkte) Jedes Bundle, dass einen Dienst eines anderen Bundles benötigt, muss mit der OSGi Runtime interagieren. Dadurch entsteht eine direkte Abhängigkeit zum OSGi Framework - welche häufig nicht wünschenswert ist. Beschreiben Sie einen alternative Ansatz bei dem es zu keiner Abhängigkeit zum OSGi Framework kommt und bewerten Sie diesen Ansatz in Hinblick auf die Ziele und den gedachten Einsatzzweck von OSGi. (4 Punkte) Seite 4 Name und Matrikelnummer: (CTfDS SS08) Aufgabe 4 - Nebenläufigkeit (∑14 Punkte) Gegeben sei folgende Klasse: public class Counter { private AtomicInteger value = new AtomicIngeter(0); public int getValue() { return value.get(); } public int increment() { int v; do { v = value.get(); } while ( !value.compareAndSet(v, v + 1) ); return v + 1; } } Und die entsprechende JavaDoc Dokumentation: AtomicInteger An int value that may be updated atomically. [...] An AtomicInteger is used in applications such as atomically incremented counters, and cannot be used as a replacement for an Integer. compareAndSet public final boolean compareAndSet(int expect, int update) Atomically sets the value to the given updated value if the current value == the expected value. Parameters: expect - the expected value, update - the new value Returns: true if successful. False return indicates that the actual value was not equal to the expected value. get public final int get() Gets the current value. Returns: the current value Bestimmen Sie den Thread-Safety Level (nach J. Bloch) der Klasse Counter. Begründen Sie kurz Ihre Antwort. (2 Punkte) Geben Sie eine äquivalente Implementierung der Klasse Counter an, die auf die Verwendung von AtomicIntegers verzichtet und stattdessen - falls notwendig synchronized Anweisungen verwendet. (3 Punkte) Seite 5 Name und Matrikelnummer: (CTfDS SS08) Beschreiben Sie den Unterschied zwischen beiden Implementierungen in Hinblick auf das zu erwartende Laufzeitverhalten. (2 Punkte) Unter welchen Bedingungen würden Sie welche Implementierung vorziehen? (2 Punkte) Beschreiben Sie kurz (ggf. unter Verwendung von Java (Pseudo-)Code) das Double-Checked Locking Idiom. (2 Punkte) Warum kann das Double-Checked Locking Idiom in Java nicht verwendet werden. (3 Punkte) Seite 6 Name und Matrikelnummer: (CTfDS SS08) Aufgabe 5 - Persistenz (∑ 14 Punkte) Es soll ein „Object-relational (OR) Mapping“ für folgendes Klassendiagramm durchgeführt werden. Node name : String target Link File data: byte[] Directory children Beschreiben Sie kurz alle Ihnen bekannten Möglichkeiten, die für das Abbilden von Vererbungsbeziehungen und Assoziationen auf (DB) Relationen zur Verfügung stehen. Falls möglich, nennen Sie jeweils mind. ein Vorteil und ein Nachteil der entsprechenden Abbildungsstrategie. (6 Punkte) Geben Sie die Tabellen für ein konkretes OR-Mapping an. Machen Sie ggf. die Primary Key / Foreign Key Beziehungen deutlich. Beschreiben und Begründen Sie Ihre Entscheidung warum Sie die verwendete Strategie gewählt haben und nicht eine Alternative. (7 Punkte) Für die Angabe der Tabellen halten Sie sich bitte an folgendes Muster: Name der Relation / Tabelle Attribut 1 Attribut 2 Attribut 3 Attribut 4 Attribut 5 Attribut 6 Attribut 7 Erklären Sie kurz was unter „Object-relational Impedance Mismatch“ verstanden wird. (1 Punkt) Seite 7 Name und Matrikelnummer: (CTfDS SS08) Aufgabe 6 - Service Oriented Architectures SOAs (∑ 14 Punkte) Ein Unternehmen mit einer Vielzahl an verschiedenen Softwarelösungen möchte zukünftig in der Lage sein seine Geschäftsprozesse schneller anzupassen. Daher wird beschlossen eine SOA einzuführen. Skizzieren Sie ein mögliches Vorgehen zur Einführung einer SOA. Welche Stufen können unterschieden werden und welche Arten von Services sind den Stufen zugeordnet? (7 Punkte) Nennen Sie die zentralen Elemente einer jeden Service Orientierten Architektur; wie sind die Abhängigkeiten zwischen den Elementen? (3 Punkte) Erklären Sie kurz was unter Prozessintegrität (im Kontext von SOA) zu verstehen ist und welche Ansätze und Probleme es gibt wenn die Prozessintegrität gewährleistet werden muss. (4 Punkte) Seite 8 Name und Matrikelnummer: (CTfDS SS08) Aufgabe 7 - Verteilte Anwendungen (∑ 8 Punkte) Erklären Sie kurz wofür REST (im Zusammenhang mit RESTful WebServices) steht und welches die wesentlichen Prinzipien sind. (3 Punkte) Um verteilte Anwendungen zu entwickeln, haben wir WebService basierend auf SOAP & WSDL und RESTful WebService als Technologien bzw. Techniken kennengelernt. Vergleichen Sie beide Ansätze; nennen Sie jeweils mind. einen Vor- und einen Nachteil. Welchen der beiden Ansätze (und warum) würden Sie einsetzen für die Entwicklung eines Business-to-Business Webservices eines Automobilzulieferers, der es dem Automobilhersteller ermöglicht einen vollständigen Überblick über die bisherigen und aktuellen Geschäftsbeziehungen zu bekommen (abgeschlossen Bestellungen, aktuelle Bestellungen, Vorbestellungen, etc.). Weiterhin soll der Service das Abschließen neuer Geschäfte ermöglichen. (5 Punkte) Seite 9 Name und Matrikelnummer: (CTfDS SS08) Aufgabe 8 - Software Product Line Engineering (∑ 12 Punkte) Beschreiben Sie kurz - in wenigen Sätzen - was man unter Software Product Line Engineering versteht und welche Vorteile man sich durch die Einführung einer Produktlinie verspricht. (3 Punkte) Entwickeln Sie ein Feature Diagramm (verwenden Sie nur die FODA Notation), um die Gemeinsamkeiten und Unterschiede verschiedener Varianten einer integrierte Entwicklungsumgebungen (IDE) darstellen zu können. (6 Punkte) Beachten Sie folgende Features: Die IDE hat immer einen einfachen Texteditor und Unterstützung für ANT. Der Texteditor bietet optional Unterstützung für konfigurierbare Syntaxhervorhebungen. Sollten konfigurierbare Syntaxhervorhebungen unterstützt werden, dann gibt es optionale Vordefinitionen für Java, C/C++, XML - diese Definitionen sind unabhängig voneinander. Weiterhin bietet die IDE optional Unterstützung für UML Diagramme und optional Unterstützung für das Debugging von Java Anwendungen. Der Java Debugger verlangt, dass Syntaxhervorhebungen für Java vorhanden sind. Die IDE unterstützt immer die Versionierung von Artefakten; als Versionskontrollsystem wird entweder CVS oder SVN (exklusives-oder) unterstützt. Im Laufe der Entwicklung der Produktlinie wird festgestellt, dass es Kunden gibt, die die Unterstützung beider Versionskontrollsysteme verlangen. Da aber weiterhin ein Großteil der Verwender zufrieden ist mit „nur CVS“ oder „nur SVN“ wird beschlossen, dass alle Varianten (d.h. „nur CVS“, „nur SVN“, „CVS und SVN“) möglich sein sollen. Wie sieht - falls möglich - eine entsprechende Modellierung mit FODA aus? Falls eine Modellierung mit FODA nicht möglich ist, welche ergänzende / alternative Notation würden Sie verwenden, um die neuen Abhängigkeiten zu modellieren und wie sieht dort (Diagramm) die Modellierung aus? (3 Punkte) Seite 10