Der JacORB Namensdienst

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
der Universität Oldenburg
A CORBA Domain Management Service
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Einführung in die Programmierung Ausführbare Klassen
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
DI Christian Donner cd (at) donners.com
der Universität Oldenburg
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik F Verteilte Software - Java.
Verteilte Software - Java - Prozedurale Programmierung 1
Internetzugriff mit Strings und Streams
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
Ausnahmen HS Merseburg (FH) WS 06/07.
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
MD 5/02 CORBA Lebensdauer von Objekten, Transaktionen.
MD 4/02 Hello World from CORBA ein erster Überblick.
IF-ELSE-IF-Ketten Weiter mit PP..
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
M a r c – o l i v e r p a h l Die ObjektOrientierte Mühle Das Beispiel soll noch einmal das Konzept der Objektorientiertheit erläutern. Dabei werden außerdem.
Philipp Ciechanowicz 5. Übung zu Software Engineering WS 2007/2008.
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG Ausnahmen. DVG Was sind Programmfehler? 4 Programm erzielt gar kein Ergebnis. 4 Berechnetes Ergebnis stimmt nicht mit dem erwarteten.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Vererbung Einfache Vererbung – Erben von abstrakten Klassen – Implementieren eines Interfaces.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Einfach verkettete Listen
Rekursive Funktionen (Fakultät)
Was umfaßt die CORBA Core Spezifikation? Welche zusätzlichen Komponenten muß ein ORB Produkt beinhalten? Core: CORBA Objekt Modell CORBA Architektur OMG.
Learning By Doing TCP/IP Netzwerke mit TCP/IP Das Internet verwendet weitgehend das rund 30-jährige TCP/IP-Protokoll (TCP: Transmission Control Protocol,
Mahmoud Zoabi Khaled Isa
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Kap 4-1OHO Kap. 4.2 Das Orbix CORBA-System Kurzer überblick zu der CORBA-Implementierung Orbix •Unser Fahrplan: •IDL Verwendungsbeispiel •Zoom-In: CORBA.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
CuP - Java Eingabe über Tastatur, AudioClips, überschreiben, Quiz Montag, 18. November 2002.
7.1.5 Java RMI – Remote Method Invocation
Reinhard Stumptner Seminar Softwareentwicklung Dynamisches Laden und Binden in Java.
Optimale Ursprungsgerade
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Testtechniken-Praktikum WS 2005/06 1 Arbeiten mit JUnit Andreas Höfer Dr. Matthias Müller Mit Beiträgen von Johannes Link.
Javelin Internet-based parallel computing using Java.
Programmiervorkurs WS 2014/15 Methoden
Voyager Eigenschaften/Vorzüge Universalität: –ROI-Modelle: CORBA, RMI, DCOM –verschiedene Namens-, Verzeichnisdienste Nachrichtentypen: synchron, oneway,
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
MD 4/02 CORBA Static/Dynamic Invocation Interface (SII/DII), Interface Repository.
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
Realisierung verteilter Anwendungen: Teil 3 zBeim vorigen Mal: Sockets, RMI zInhalt heute yCommon Object Request Broker Architecture (CORBA) zLernziele:
OOP mit Java Oder: Java in 5 Tagen. 1. Tag Klassen und Methoden Hello World in Variationen Von Menschen und Geschlechtern Horden (Schlange stehen)
Java I/O Input / Output stream Library
Java I/O Input / Output stream Library
= Common Object Request Broker Architecture
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Dynamisches Laden von Klassen
Grundkurs Informatik mit Java
 Präsentation transkript:

Der JacORB Namensdienst

Überblick  Beteiligte Klassen/Interfaces  Realisierung der Namensdienst- Funktionalität  Beispiel für POA-Einsatz  mögliche Erweiterungen

Beteiligte Interfaces/Klassen  IDL:  idl/omg/CosNaming.idl  Source code:  src/org/jacorb/naming JacORB-Implementierung  src/generated/org/omg/CosNaming vom IDL-Compiler aus OMG-Spezifikation generiert (Schnittstellen, Stubs, Helper/Holder)

UML > org.jacorb.naming. NamingContextExtImpl > org.omg.CosNaming. NamingContextExtPOA > java.io.Serializable > org.omg.CosNaming. NamingContextExtOperations org.jacorb.naming. Name > NamingContextExt

What‘s in a name? // CosNaming.idl typedef string Istring; struct NameComponent { Istring id; Istring kind; }; typedef sequence Name; interface NamingContext { Object resolve (in Name n) raises(...); }; interface NamingContextExt: NamingContext { typedef string StringName; StringName to_string(in Name n) raises(...);... }; // Name.java, JacORB utility class class Name { // c‘tors Name(); Name(NameComponent[]); Name(String); Name(NameComponent); NameComponent baseNameComponent(); String kind(); NameComponent components()[]; Name ctxName(); Name fullName(); String toString(); static NameComponent toName(String); static String toString(NameComponent[]); }

CosNaming.idl module CosNaming { interface NamingContext { //... void bind( in Name n, in Object obj) raises( NotFound, CannotProceed, InvalidName, AlreadyBound ); Object resolve (in Name n) raises( NotFound, CannotProceed, InvalidName ); }; //... };

NamingContextImpl.bind() void bind( NameComponent[] nc, org.omg.CORBA.Object obj ) throws NotFound, CannotProceed, InvalidName, AlreadyBound { Name n = new Name( nc ); Name ctx = n.ctxName(); NameComponent nb = n.baseNameComponent(); if( ctx == null ) { // bind here... } else { // bind in a nested context NameComponent[] ncx = new NameComponent[1]; ncx[0] = nb; NamingContextExtHelper.narrow( resolve(ctx.components())). bind(ncx,obj); } if( names.containsKey( n )) { throw new AlreadyBound(); } else if( contexts.containsKey( n )) { throw new AlreadyBound(); } names.put( n, obj ); }

resolve() public org.omg.CORBA.Object resolve( NameComponent[] nc ) throws NotFound, CannotProceed, InvalidName { Name n = new Name( nc[0] ); if( nc.length > 1 ) { // resolve in nested context } else { org.omg.CORBA.Object result = null; result = (org.omg.CORBA.Object)contexts.get(n); if( result == null ) result = (org.omg.CORBA.Object)names.get(n); if( result == null || result._non_existent()) throw new NotFound( NotFoundReason.missing_node, n.components()); return result; } NamingContextExt next_context = NamingContextExtHelper.narrow( (org.omg.CORBA.Object)contexts.get(n)); if ((next_context == null)||(next_context._non_existent())) { throw new NotFound( NotFoundReason.missing_node, nc ); } NameComponent[] nc_prime = new NameComponent[nc.length-1]; for( int i = 1; i < nc.length; i++) nc_prime[i-1] = nc[i]; return next_context.resolve(nc_prime); }....

POA Policies im Namensdienst  Namensdienst soll runterfahren können, ohne daß es jemand merkt (Implementation Rep.)  Context-Objekte müssen persistente Lebenszeit haben  LifespanPolicyValue.PERSISTENT  Beim Hochfahren sollen Objekte automatisch aktiviert werden  RequestProcessingPolicyValue.USE_SERVANT_MANAGER  Zustand aller Context-Objekte im Graph muß persistent in Dateien gehalten werden  IdAssignmentPolicyValue.USER_ID  NamingContextImpl ist Serializable

NameServer.main() public static void main( String args[] ) { // ORB and POA initialization orb = org.omg.CORBA.ORB.init( args, props ); POA rootPOA = POAHelper.narrow( orb.resolve_initial_references("RootPOA")); org.omg.CORBA.Policy [] policies = new org.omg.CORBA.Policy[3]; policies[0] = rootPOA.create_id_assignment_policy( IdAssignmentPolicyValue.USER_ID); policies[1] = rootPOA.create_lifespan_policy( LifespanPolicyValue.PERSISTENT); policies[2] = rootPOA.create_request_processing_policy( RequestProcessingPolicyValue.USE_SERVANT_MANAGER); POA nsPOA = rootPOA.create_POA("NameServer-POA", rootPOA.the_POAManager(), policies);...

main() continued NameServantActivatorImpl servantActivator = new NameServantActivatorImpl( orb ); nsPOA.set_servant_manager( servantActivator._this(orb) ); nsPOA.the_POAManager().activate(); /* export the root context's reference to a file */ byte[] oid = ( new String("_root").getBytes() ); try { org.omg.CORBA.Object obj = nsPOA.create_reference_with_id( oid, "IDL:omg.org/CosNaming/NamingContextExt:1.0"); PrintWriter out = new PrintWriter( new FileOutputStream( args[0] ), true); out.println( orb.object_to_string( obj ) ); out.close(); } catch ( Exception e ) {...} Thread.sleep(time_out); orb.shutdown(true);

Servant Activator class NameServantActivatorImpl extends ServantActivatorPOA { private org.omg.CORBA.ORB orb = null; public NameServantActivatorImpl(org.omg.CORBA.ORB orb) { this.orb = orb; } public Servant incarnate(byte[] oid, POA adapter) throws ForwardRequest {} public void etherealize(byte[] oid, POA adapter, Servant servant, boolean cleanup_in_progress, boolean remaining_activations ) {} }

incarnate() public Servant incarnate(byte[] oid, POA adapter) throws ForwardRequest { String oidStr = new String( oid ); NamingContextImpl n = null; try { File f = new File( „_nsdb“ + oidStr ); if( f.exists() ) { FileInputStream f_in = new FileInputStream(f); if( f_in.available() > 0 ) { ObjectInputStream in = new ObjectInputStream(f_in); n = (NamingContextImpl)in.readObject(); in.close(); } f_in.close(); } catch( IOException io ){} catch( java.lang.ClassNotFoundException c ) { } if( n == null ) n = new NamingContextImpl(); n.init( orb, adapter); return n; }

etherealize() public void etherealize( byte[] object_id, POA adapter, Servant servant, // NamingContextImpl boolean cleanup_in_progress, boolean remaining_activations) { String oidStr = new String( object_id ); try { File file = new File("_nsdb" + oidStr); FileOutputStream fout = new FileOutputStream( file ); ObjectOutputStream out = new ObjectOutputStream( fout ); out.writeObject( (NamingContextImpl)servant ); } catch( IOException io ) { } }

Erweiterungsmöglichkeiten  Load Balancing (nicht Standard)  mehrere Objekte unter einem Namen anmelden, bei resolve() jedesmal eine andere Referenz herausgeben  Skalierbarkeit  bei wieviel Bindings/Clients/Anfragen liegt die Grenze, wie kann man sie verschieben?  Performance  keine systematischen Untersuchungen

Aufruf zur Mitarbeit an JacORB  „Ruhm und Ehre“  Präsenz auf Mailinglisten, Newsgroups, etc.  Forschen und Lernen  Studien- und Diplomarbeiten  Echte Software im industriellen Einsatz  Evtl. Praktikum bei PrismTech in Newcastle, UK  Open Source und Werkverträge  Ideell: LGPL  Kommerziell: Werkverträge möglich  Relevanz für Arbeitsmarkt!  JacORB an der FU halten!

Was tun?  Kernentwicklung, Wartung  CORBA-Kern, IDL/Java Language Mapping  Asynchronous Message Invocation (AMI)  Extensible Transport Framework (ETF)  Fault Tolerance  Security  DFG-Projekt Raccoon  Common Secure Interoperability (CSIv2)  Services  Notification, Persistence, etc.  Support, Testen, Bug Fixes, Dokumentation  Mailinglisten, Bugzilla, Testsuite (COST)

Wo anfangen?  Website  Buch: „Java Programming with CORBA“  Mailingliste: jacorb-developer  AG SS  DFG-Projekt Raccoon  Studien- und Diplomarbeitsthemen  Code und OMG-Spezifikationen lesen  Nachfragen  Werkverträge, Industriepraktika  JacORB-Tutorial