Modul Software Komponenten 10 Komponentenarchitektur Teil 3 Peter Sollberger
Eine erste CORBA Anwendung
Inhalt Dienstag, 4. November Object Request Broker CORBA Architektur und Komponenten (Teil 1) Übung: CORBA Anwendung mit JacORB (Teil 1) Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 3
Unterlagen Folien Komponentenarchitektur (Teil 1 4) Skript "Komponentenarchitektur" von Christina Class Teil 1: Seiten 1 9 Teil 2: Seiten 10 23 Teil 3 und 4: Seiten 24 41 JacORB inkl. Installationsanleitung Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 4
Object Request Broker
Object Request Broker Ein Object Request Broker (ORB) ist die Middleware Technologie, welche die Kommunikation und den Datenaustausch zwischen Objekten ermöglicht. Objekte und deren Funktionalität sind von der Kommunikation der Objekte völlig getrennt. Funktionalität eines ORBs: Definition von Schnittstellen Lokalisierung und Aktivierung von entfernten Objekten Kommunikation von Clients und Objekten Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 6
Idee eines ORB ORB locate Service establish connection activate service Client Application communicate Remote Service ( object) Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 7
Transparenz ORB vermittelt die Illusion, als wären alle Objekte am selben Ort wie der Client verschiedene Arten von Transparenz: Programmiersprache Betriebssystem Host Hardware Lokalität Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 8
Realisierung des ORB Konzeptes Einbindung von ORB Funktionalität in Clients Implementation in separaten Prozessen Implementation als Teil des Betriebssystemkernels Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 9
CORBA Common Object Request Broker Architecture
CORBA Common Object Request Broker Architecture OMG (Object Management Group: www.omg.org): über 700 Vertreter aus Industrie und Forschung offener Bus Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 11
CORBA Facilites Anwendungsobjekte Vertical common facilities Horizontal common facilities Object Request Broker (ORB) Naming Persistence Life Cycle Properties Concurrency Collections Security Trader Externalization Events Transactions Query Relationships Time Licensing CORBA Services Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 12
Interface Repository Client Dynamic Invocation Client Client IDL IDL Stubs Stubs ORB Interface Static Static Skeletons Skeletons Dynamic Skeleton Invocation Object Request Broker Core (IIOP) Object Implementation Object Adapter Implementation Repository Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 13
Eigenschaften eines CORBA ORBs statische und dynamische Methodenaufrufe (strenge Typüberprüfung maximale Flexibilität) Verknüpfungen auf Hochsprachenebene (auch über Sprachgrenzen hinweg) selbstbeschreibendes System Ortstransparenz eingebaute Sicherheit und Transaktionen polymorphe Nachrichten (derselbe Funktionsaufruf kann je nach Objekt verschiedene Effekte haben) Koexistenz mit existierenden Systemen Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 14
Ablauf eines CORBA Methodenaufrufs
Was muss in der verteilten Anwendung geschehen? Der Client muss wissen, wie das Objekt aussieht und welche Methoden es hat. Interface Repository Der Client muss das Objekt mit Hilfe des ORB finden können. Namensdienst Der Client muss einen Methodenaufruf generieren. Der Methodenaufruf muss vom Client zum CORBA Objekt weitergeleitet werden. CORBA ORB Core Der Server muss dafür sorgen, dass das CORBA Objekt aktiv ist und Anfragen entgegen nehmen kann. Object Adapter Das CORBA Objekt muss die Methode ausführen und allfällige Werte zurückgeben. Der Client muss davon in Kenntnis gesetzt werden, dass die Methode beendet wird, er erhält aufgetretene Ausnahmen, Rückgabeparameterwerte und Rückgabewerte. Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 16
Der eigentliche ORB Interface Repository Client Dynamic Invocation Client Client IDL IDL Stubs Stubs ORB Interface Static Static Skeletons Skeletons Dynamic Skeleton Invocation Object Request Broker Core (IIOP) Object Implementation Object Adapter Implementation Repository Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 17
Der Client erhält eine Objektreferenz Mit Hilfe verschiedener Dienste (insbesondere Namensdienst) und des ORB erhält der Client eine Referenz auf das CORBA Objekt. Mit Hilfe dieser Referenz ruft der Client eine Methode im CORBA Objekt auf. Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 18
Interface Repository Client Dynamic Invocation Client Client IDL IDL Stubs Stubs ORB Interface Static Static Skeletons Skeletons Dynamic Skeleton Invocation Object Request Broker Core (IIOP) Object Implementation Object Adapter Implementation Repository Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 19
Der Client Stub verpackt den Methodenaufruf in eine Nachricht Marshalling Methodenname Parameterinformationen (Typ, Wert, Richtung) Kontextinformation Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 20
Interface Repository Client Dynamic Invocation Client Client IDL IDL Stubs Stubs ORB Interface Static Static Skeletons Skeletons Dynamic Skeleton Invocation Object Request Broker Core (IIOP) Object Implementation Object Adapter Implementation Repository Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 21
Interface Repository Client Dynamic Invocation Client Client IDL IDL Stubs Stubs ORB Interface Static Static Skeletons Skeletons Dynamic Skeleton Invocation Object Request Broker Core (IIOP) Object Implementation Object Adapter Implementation Repository Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 22
Der Object Adapter aktiviert und deaktiviert die Objektimplementation Server ist der Ausführungsort des Objektes die Implementation wird gegebenenfalls auf dem Implementation Repository geholt Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 23
Interface Repository Client Dynamic Invocation Client Client IDL IDL Stubs Stubs ORB Interface Static Static Skeletons Skeletons Dynamic Skeleton Invocation Object Request Broker Core (IIOP) Object Implementation Object Adapter Implementation Repository Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 24
Interface Repository Client Dynamic Invocation Client Client IDL IDL Stubs Stubs ORB Interface Static Static Skeletons Skeletons Dynamic Skeleton Invocation Object Request Broker Core (IIOP) Object Implementation Object Adapter Implementation Repository Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 25
Der Server Skeleton der Skeleton entpackt die Nachricht vom Client und ruft die Methode auf nach Methodenaufruf generiert der Skeleton eine Nachricht mit Rückgabewerten und Ausnahmen an den Client Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 26
Interface Repository Client Dynamic Invocation Client Client IDL IDL Stubs Stubs ORB Interface Static Static Skeletons Skeletons Dynamic Skeleton Invocation Object Request Broker Core (IIOP) Object Implementation Object Adapter Implementation Repository Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 27
Interface Repository Client Dynamic Invocation Client Client IDL IDL Stubs Stubs ORB Interface Static Static Skeletons Skeletons Dynamic Skeleton Invocation Object Request Broker Core (IIOP) Object Implementation Object Adapter Implementation Repository Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 28
Interface Repository Client Dynamic Invocation Client Client IDL IDL Stubs Stubs ORB Interface Static Static Skeletons Skeletons Dynamic Skeleton Invocation Object Request Broker Core (IIOP) Object Implementation Object Adapter Implementation Repository Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 29
Interface Repository Client Dynamic Invocation Client Client IDL IDL Stubs Stubs ORB Interface Static Static Skeletons Skeletons Dynamic Skeleton Invocation Object Request Broker Core (IIOP) Object Implementation Object Adapter Implementation Repository Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 30
Interface Repository Client Dynamic Invocation Client Client IDL IDL Stubs Stubs ORB Interface Static Static Skeletons Skeletons Dynamic Skeleton Invocation Object Request Broker Core (IIOP) Object Implementation Object Adapter Implementation Repository Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 31
Erstellung einer CORBA Anwendung
Erstellung einer CORBA C/S Anwendung erzeuge das Objekt Interface mit IDL übersetze die IDL Datei implementiere das Objekt implementiere den Server trage Objekt in Implementation Repository ein implementiere den Client Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 33
Object Adapter, Servants und CORBA Objekte
Einleitung es gibt möglicherweise 1000-de von CORBA Objekten zu einem bestimmten Zeitpunkt wird nur ein Bruchteil der CORBA Objekte benötigt es wäre Ressourcenverschwendung, alle Objekte die ganze Zeit am Laufen zu haben andererseits soll es auch nach einem längeren Zeitraum möglich sein, wieder auf das gleiche Objekt zuzugreifen Lösung: Trennung zwischen Objekt und laufendem Code Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 35
Servants Ein Servant enthält den Code, der ein CORBA Interface implementiert. Er ist in einer bestimmten Programmiersprache geschrieben. Er ist Teil eines CORBA Objektes. Er kommuniziert nach aussen. Seine Methoden können in unterschiedlicher Weise aufgerufen werden, häufig durch Skeletons. Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 36
Objektreferenz Objektidentität wird vom Client verwendet eine Objektreferenz verweist immer auf dasselbe Objekt mehrere Objektreferenzen können auf dasselbe Objekt verweisen Objektreferenzen: Weitergabe als Parameter, Rückgabewert oder String Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 37
Aufgabe des Portable Object Adapters (POA) verbindet den Servant mit dem ORB verwaltet die Laufzeitumgebung für Objekte leitet Methodenaufrufe an den richtigen Servant weiter Abbildung einer Objektreferenz auf den zuständigen Servant transparente Aktivierung von Objekten Verbindung von Policy-Informationen mit Objekten Ermöglichung von persistenten Objekten (über mehrere Serverprozesslebenszeiten hinweg) Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 38
Lebenszyklen eines CORBA-Objekts Ein CORBA-Objekt wird erzeugt. Es kann aktiviert (mit einem Servant assoziiert) werden, z.b. sobald ein Request vorliegt. Ein Objekt kann während seiner Lebenszeit Requests durch mehrehe Sertvants bearbeiten lassen, die nacheinander das CORBA-Objekt verköpern (incarnate) und es wieder verlassen (etherealize). CORBA-Objekte können innerhalb ihrer Lebenszeit aktiv sein, bis sie schliesslich zerstört werden. Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 39
POA instanzieren und Objekt kreieren ORB orb; POA poa; org.omg.corba.object poaobject, mybasicoperationsimpl; orb = ORB.init(args, props); // Get POA poaobject = orb.resolve_initial_references("rootpoa"); POA poa = org.omg.portableserver.poahelper.narrow(poaobject); // Aktivieren des POA poa.the_poamanager().activate(); // Kreiere neues Servant der entsprechenden Klassen mybasicoperationsimpl = poa.servant_to_reference(new BasicOperationsImpl()); // starte den ORB orb.run(); Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 40
Lokale Transparenz: Der CORBA Namensdienst
CORBA Namensdienst wichtigster CORBA Dienst wird von jeder CORBA Implementation angeboten Namensdienst bildet einen für Menschen verständlichen Namen auf eine Objektreferenz ab vgl. Directory Dienst Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 42
Servant beim Namensdienst registrieren org.omg.corba.object nso, mybasicoperationsimpl; NamingContextExt nameservice; // Kreiere neues Servant der entsprechenden Klassen mybasicoperationsimpl = poa.servant_to_reference(new BasicOperationsImpl()); // Naming service referenz auflösen nso = orb.resolve_initial_references("nameservice"); nameservice = NamingContextExtHelper.narrow(nso); // Objektreferenz beim Naming service anmelden nameservice.bind(nameservice.to_name("basicoperationssrv"), mybasicoperationsimpl); Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 43
Client Objekt via Namensdienst erzeugen ORB orb; org.omg.corba.object nso, clientobj; NamingContextExt nameservice; orb = ORB.init(args, props); // Naming service referenz auflösen nso = orb.resolve_initial_references("nameservice"); nameservice = NamingContextExtHelper.narrow(nso); clientobj = namenservice.resolve( namenservice.to_name("basicoperationssrv")); mbasiccalculator = _BasicOperationsHelper.narrow(clientObj); Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 44
Aufgabe Rechner
Demo Rechner als verteilte Anwendung: 1 Server mit 2 Interfaces 2 Clients Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 46
Aufgabe: Rechner (I) Implementieren Sie einen Rechner als verteilte Anwendung: 1. Ein Server implementiert ein Basic-Operations Interface (add, diff, multiply, divide (inkl. Exception)). 2. Ein zweiter Server implementiert ein Advanced-Operations Interface (square, factorial, squareroot, mit INOUT Attributen). 3. Eine einfache GUI Applikation benutzt diese zwei Interfaces. Verteilen Sie Ihre Anwendung auf verschiedene Rechner! Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 47
Aufgabe: Rechner (II) Verwenden Sie für die Aufgabe den vorgegebenen Rahmen. Damit können Sie die drei Applikationen in NetBeans entwickeln und laufen lassen. Vergessen Sie aber nicht, zuerst den Name Service zu starten (ausführen von start_ns.cmd). Hochschule Luzern, V2.0 Modul SWK - Komponentenarchitektur 3 - P. Sollberger 48