14 Punkte

Werbung
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
Herunterladen