Ausführung und Entwicklung adaptiver Komponentenbasierter Anwendungen

Bok av Andreas Rasche
Adaptive Anwendungen können sich auf Grund von Änderungen ihrer Umgebung anpassen, u.a. um von den Nutzern vorgegebene Anwendungseigenschaften zu gewährleisten, die durch die variierende Verfügbarkeit von Ressourcen unterliegender Infrastrukturen verletzt werden. Eine Lösungsstrategie für die Anpassung ist die Auswahl entsprechender Softwarekomponenten, die im Rahmen der Komponentenorientierung, einer Methode zur Konstruktion komplexer Software aus Einheiten unabhängiger Herstellung, Beschaffung und Deployment, in alternativen Varianten mit unterschiedlichen Eigenschaften vorliegen. Während die funktionalen Anforderungen einer Anwendung oft von mehreren gültigen Zusammenstellungen erfüllt werden können, variieren die resultierenden Anwendungseigenschaften in unterschiedlichen Umgebungssituationen. Die Ausführung der besten Alternative für eine Menge verfügbarer Ressourcen ist damit die Grundlage für die Gewährleistung gewünschter Anwendungseigenschaften. Bei Änderungen der Umgebung kann die Anpassung durch den Austausch mit einer besseren Alternative realisiert werden. Die Abstraktion der Softwarekomponente ist in der Java- und .NET-Komponentenplattform zunächst für den Zeitraum des Deployment definiert. Um die Austauschbarkeit von Komponenten auch während der Laufzeit zu ermöglichen, führt die vorliegende Arbeit das Konzept der Kapseln ein, die eine Menge von Objekten gleicher Deployment- Einheiten zusammenfassen. Während der Laufzeit wird eine komponentenbasierte Anwendung als gerichteter Graph verbundener Kapseln verstanden, die von vernetzten Rechnern ausgeführt werden. Veränderungen der Konfiguration der Kapseln einer Anwendung werden als dynamische Rekonfiguration bezeichnet, die für die Nutzung der Komponentenorientierung als Basis der Adaption in aktuelle Komponentenplattformen integriert werden muss und bildet den Schwerpunkt dieser Arbeit. Bei der dynamischen Rekonfiguration müssen Änderungsoperationen und Anwendungsaktivitäten synchronisiert werden. Hierfür stellt diese Arbeit einen neuen Algorithmus vor, der mit Hinblick auf die Komplexität der Zusatzkosten existierende Ansätze verbessert und dabei Anwendungen mit multiplen Threads und zyklischen Verbindungsstrukturen unterstützt. Für einen Spezialfall der dynamischen Rekonfiguration, der dynamischen Aktualisierung, die das Einspielen neuer Versionen von Softwarekomponenten während der Laufzeit ermöglicht, beschreibt die vorliegende Arbeit ein neues Verfahren für den notwendigen Zustandstransfer, das durch den Einsatz von identi-fizierten Basistechnologien ohne eine Manipulation der virtuellen Laufzeitumgebung auskommt. Das entwickelte Verfahren kann auch für das Einspielen fehlerbereinigter Softwareversionen ohne Neustart der Anwendung verwendet werden und ist dabei leicht in existierende Anwendungen integrierbar, was diese Arbeit im Rahmen komplexer Fallstudien nachweist. Ein weiterer wichtiger Beitrag der Arbeit ist der Einsatz der aspektorientierten Programmierung für die wiederverwendbare Generierung komplexer (re-)konfigurationsspezifischer Logik, welche die Entwicklung adaptiver komponentenbasierter Anwendungen vereinfacht. Die entwickelten Techniken wurden unter anderem im Distributed Control Lab, einer Infrastruktur zur entfernten Ausführung von Steuerungsexperimenten über das Internet, für den Schutz vor bösartiger Software verwendet. Dabei werden Steuerungen während ihrer Laufzeit überwacht und im Fehlerfall die Steuerungsanwendung dynamisch rekonfiguriert.