Im Projekt COMQUAD werden komponentenbasierte Systeme mit Quality of Service (QoS) -Anforderungen betrachtet. Wie alle komponentenbasierten Systeme laufen solche Anwendungen in einem Container ab, der den Komponenten gewisse Basisdienste zur Verfügung stellt. Neben den üblichen Diensten (Persistenz, Namensdienst, Transaktionalität etc.) stehen vor allem Dienste zur Aushandlung und Durchsetzung von QoS-Kontrakten im Vordergrund.
Abbildung: Grobkonzept
Für einen solchen Container entsteht im Moment in einer Diplomarbeit ein Konzept basierend auf dem Komponentenmodell von Enterprise Java Beans (EJB). Dieses Konzept soll im Rahmen des Komplexpraktikums prototypisch in einem Container umgesetzt werden. Im Rahmen des Komplexpraktikums bietet sich den Studenten die Möglichkeit, einen Blick hinter die Kulissen von EJB zu werfen und sich genauer mit der Funktionsweise von Komponentencontainern auseinanderzusetzen.
Zunächst ist eine Verfeinerung des Konzepts bis auf die Ebene eines implementierungstauglichen
Feinentwurfs nötig. Für die Implementierung lassen sich anhand des
Grobkonzepts (s. Abbildung) die folgenden möglichen Teilaufgaben ableiten:
Als Umsetzungsmöglichkeiten bieten sich Erweiterung von jBoss oder vollständige
Neuimplementierung mit AspectJ an, jedoch können auch andere Wege gewählt
werden. Eine aktuell sehr interessante Frage im Projekt COMQUAD ist die nach
der besten Umsetzungsmöglichkeit. Bei ausreichender Zahl von Anmeldungen
(ab ca. 10 Studenten) kann die Gruppe daher auch in zwei Untergruppen geteilt
werden, die verschiedene Implementierungsvarianten umsetzen, so dass die Vor-
und Nachteile am Ende verglichen werden können.
Da das Praktikum Teil der Forschungsarbeit im Projekt COMQUAD ist, ist ein wichtiges Ergebnis auch eine systematische und vollständige Dokumentation, Begründung und Bewertung aller getroffenen Entwurfsentscheidungen.
Der Fokus dieser Teilaufgabe liegt auf der Sicherstellung der Integration der anderen Teilbereiche. Zusätzlich sind die für die Anbindung von Client-Anwendungen an den entwickelten Container notwendigen Funktionen zu implementieren.
In den Bereich dieser Teilaufgabe gehört auch der Entwurf und die Implementation einer Beispielanwendung, die zum Testen des Containers und der Client-Anbindung genutzt werden kann.
Die Implementierungsverwaltung stellt ein Repository aller im Container installierten Komponenten dar. Sie ermöglicht es, alle Implementierungen einer funktionalen Spezifikation (vereinfacht: Schnittstelle) aufzufinden und gezielt zu instantiieren. Außerdem verwaltet sie in Zusammenarbeit mit dem Vertragsmanager die bereits instantiierten Komponenten und die Netze, in die diese eingebunden sind.
Beim Deployment werden den Komponenten Deployment-Deskriptoren im XML-Format mitgegeben. Zusätzlich zu den üblichen Informationen über die Komponenten enthalten diese:
Hier werden die QoS-Anforderungen und -Angebote der einzelnen Komponenten verwaltet. Das QoS-Repository erlaubt es, für eine gegebene Komponentenimplementierung die QoS-Information auszulesen. Diese Information wird in einem Objektmodell gespeichert, das gezielt auf die Verwendung bei der Vertragsaushandlung zugeschnitten ist.
Der Vertragsmanager ist für die Aushandlung von Verträgen zwischen den Komponenten sowie für die Reservierung der Ressourcen über die Schnittstelle der Ressourcenverwaltung zuständig. Dabei geht es darum, ein Netz kooperierender Komponenteninstanzen zu erzeugen, wobei als Randbedingungen die gegebene funktionale Spezifikation der Zusammenarbeit und die nichtfunktionalen Spezifikationen der einzelnen Komponenten zu beachten sind.
Ausgehandelte Verträge werden durch Proxies fixiert. Diese dienen als Kommunikationsproxy der Durchsetzung der ausgehandelten Kooperationsbeziehungen, d.h. sie sorgen dafür, dass die richtigen Komponenteninstanzen miteinander kommunizieren, und als Ressourcenproxy der Annotation aller Ressourcennutzungen mit den von der Ressourcenverwaltung zugeteilten Handles, die eindeutig die reservierten Ressourcen kennzeichnen.
Zur Steuerung und Überwachung des Containers sowie zum Deployment von Komponenten ist eine Container-Management-Anwendung zu entwickeln. Diese stellt eine separate, Java-basierte Client-Anwendung dar, die verschiedene Steuerungsmöglichkeiten für den Container bietet. Besonders wichtig sind dabei die folgenden Funktionen:
Da die direkte Anbindung an die Ressourcenverwaltung des Betriebssystems zunächst
von Java aus nicht möglich sein wird, gehört es zu dieser Teilaufgabe,
eine Simulation der Ressourcenverwaltung zu implementieren. Diese soll im Wesentlichen
dem Benutzer die Möglichkeit geben, Ressourcenreservierungen manuell zu
akzeptieren oder abzulehnen.