Architektur des CORBA-Komponentenmodells (2003)
Aufbauend auf einer Einführung der Common Object Request Broker Architecture (CORBA) und des C++-Mappings für IDL wird das CORBA-Komponenten-Modell (CCM) vorgestellt. Dazu werden die relevantent technischen Standards studiert und mit den tatsächlich verfügbaren Implementierungen verglichen.
Als aktuelle Entwicklung auf dem Gebiet von Softwarekomponenten wird ebenfalls Microsofts Shared Source Common Language Infrastructure (SSCLI) und die Integration der Programmiersprache C# in diese Plattform untersucht. Auch hier werden die relevanten ECMA-Standards mit den Implementierungen verglichen.
Schwerpunkte der Vorlesung sind:- die Architektur des CORBA-Komponentenmodells
- die Architektur von .NET SSCLI
- das C++-Mapping für CCM
- Implementierungsstrategien für CCM-Container und -Komponenten
Prüfungstermin
Mündliche Prüfungen finden am 28.7., 29.7. und 30.9.2003 statt. Voraussetzung zur Prüfungszulassung ist die erfolgreiche Absolvierung des Praktikums (Lösung der Übungsaufgaben). Prüfungstermine werden von Frau Wagner vergeben.Literatur
- M. Henning and S. Vinoski. Advanced CORBA Programming with C++. Addison-Wesley, 1999.
- G. Brose, A. Vogel, K. Duddy. Java Programming with CORBA. Advanced Techniques for Building Distributed Applications. OMG Press, 2001
- OMG. CORBA 3.0.2.
- OMG. CORBA Component Model, v.3.0
- OMG. C++ Language Mapping.
- ECMA. Standard ECMA-335. Common Language Infrastructure.
- Security Service
- Microsft Developer Network Library
CORBA-Implementierungen für C++
Vorlesungen
- Course Overview
- CORBA 3.0
- OMG IDL
- C++ Mapping: Data Types
- C++ Mapping: Client Side
- Object Services: Name Service
- C++ Mapping: Server Side
- Object Services: Event Service
- POA Interfaces
- Tutorial CCM
- CORBA Security
- Overview of .NET
- GIOP
- .NET Packagin and Deployment (Beispiele)
Übungsaufgaben
Aufgabe 1: Java-Sprach-Abbildung
Abgabetermin: 21. AprilHöchstpunktzahl: 10P
Gegeben sei die IDL-Datei time.idl. Vergleichen Sie die Ausgabe des IDL-zu-Java-Compilers mit der Mapping-Spezifikation ( formal/02-08-05)
- Geben Sie für jede Ausgabe-Datei an, ob sie für die Klienten-Seite oder die Server-Seite benötigt wird.
- Geben Sie für jede Ausgabe-Datei an, ob die darin definierten Klassen und Schnittstellen durch die Java-Sprachabbildung vorgegeben sind oder zur Implementierungsstrategie des CORBA-Laufzeitsystems gehören.
- Geben Sie für die aus der Schnittstelle CosTime::TimeService generierten Klassen und Schnittstellen an, welche Definitionen sich aus dem Sprachabbildung ergeben, welche zur Implementierungsstrategie gehören, und welche der von der Sprachabbildung vorgegebenen Konstrukte vom IDL-Compiler nicht oder falsch generiert werden. (Hinweis: Sie können diese Klassifizierung beispielsweie durch farbliche Markierung der Quellen in HTML-Form vornehmen).
Aufgabe 2: Klientenimplementierung in C++
Abgabetermin: 12. MaiHöchstpunktzahl: 10P
Gegeben sei die IDL-Datei aufgabe2.idl sowie die Objektreferenz, die durch den IOR
IOR:000000000000001849444C3A41756667616265322F5365727665723A312E3000000000010000000000000028000100000000000F3134312E38392E3232342E3133310000162E0000000000086175666761626532definiert wird (corbaloc::141.89.224.131:5678/aufgabe2).
Aufgabe 3: Serverimplementierung in C++
Abgabetermin: 21. MaiHöchstpunktzahl: 10P
Implementieren Sie einen Server für die Schnittstelle aus Augabe 2. Beim Start des Servers soll sich dieser in den Namensdienst unter /<id> eintragen, wobei <id> Ihre Unix-Account-Kennung ist. Passen Sie Ihren Klienten derart an, den Server an dieser Stelle zu finden.
Implementieren Sie einen Klienten in C++, der die Operation reverse am gegebenen Objekt durchführt.
Aufgabe 4: Komponentenimplementierung in C++
Abgabetermin: 4. JuniHöchstpunktzahl: 10P
Implementieren Sie eine Komponente eines Auktionshauses, wie sie in auktion.idl definiert ist. Wählen Sie dabei eine der folgenden Teilaufgaben:
- Auktionshaus: Erzeugt auf Verkäufer-Anfrage neue Auktionen, leitet Gebote (einschließlich Initialgebot) an alle Bieter weiter, erteilt nach einer Weile Zuschlag.
- Verkäufer: Bietet in unregelmäßigen Abständen neue Gegenstände zum Verkauf.
- Bieter: Empfängt Gebote, entscheidet sich gelegentlich, aktuelles Gebot zu überbieten.
- Filter: Meldet sich anstelle der Bieter beim Auktionshaus, und filtert Gebote. Falls mehrere Bieter den gleichen Filter benötigen, sollte sich der nur einmal beim Autionshaus anmelden.
Bitte geben Sie die gewählte Teilaufgabe bis zum 26.5. per Email bekannt.
Alle Komponenten sollten mit Mico im CCM-Pool abgearbeitet werden können. Zur Ablaufverfolgung reicht es, wenn die Komponenten-Homes als separate Serverprozesse laufen und den Ablauf auf der Standardausgabe protokollieren.
Folgende Test-Dienste stehen im CCM-Pool zur Verfügung:
- Der Namensdienst, unter corbaloc::ccm1/NameService
- Ein Welt-Objekt, unter corbaname::ccm1/loewis/Welt
- Ein VerkaeuferHome, unter corbaname::ccm1/loewis/Verkaeufer
- Ein BieterHome, unter corbaname::ccm1/loewis/Bieter
Aufgabe 5: Komponententest
Abgabetermin: 11. JuniHöchstpunktzahl: 5P
Testen Sie Ihre Komponente, und liefern Sie eine eventuell überarbeitete Komponente ab.
Aufgabe 6: Mico-Konformität
Abgabetermin: 25. JuniHöchstpunktzahl: 10P
Lösen Sie eine der folgenden Teilaufgaben:
- Finden Sie 10 Inkompatibilitäten in MICOs Implementierung des CORBA-Komponentenmodells. Führen Sie dabei unter Angabe der Kapitel/Abschnittsnummer des CORBA3/CCM-Standards an, ob es sich um ein nicht realisiertes oder ein falsch realisiertes Feature handelt; in letzterem Fall auch, worin der Fehler besteht.
- Implementieren Sie einen HomeFinder für MICO. Bieten Sie dazu Schreibzugriff über die erweiterte Schnittstelle HPI::ComponentHome an.
- Implementieren Sie die Registrierung von Komponenten im HomeFinder, sowohl für den Fall des Standalone-Servers als auch für den Fall des dynamischen Nachladens von Komponenten. Liefern Sie Ihre Lösung in Form eines Patches für eine aktuelle MICO-Version.
Aufgabe 7: Remoting in .NET
Abgabetermin: 9. JuliHöchstpunktzahl: 10P
Implementieren Sie mittels .NET oder Rotor Klienten und Server für folgende Schnittstelle:
namespace ReverseAPI { public interface Reverser { string reverse(string arg); } }
Verwenden Sie dabei einen TCP-Kanal, und richten Sie den Dienst auf Port 8421 ein.