1 Einführung in CORBA

Größe: px
Ab Seite anzeigen:

Download "1 Einführung in CORBA"

Transkript

1 1 Einführung in CORBA 1 Einführung in CORBA Grundlagen Die CORBA-ORB-Architektur Die Services von CORBA Die Facilities von CORBA Die Geschäftsobjekte von CORBA IDL zur Beschreibung von CORBA-Objekten Inter-ORB-Kommunikation Dreischichtige Client/Server-Architektur mit CORBA-Objekten Entwicklung einer Client/Server-Anwendung mit CORBA Vorbereitungen Entwicklungszyklus einer CORBA-Anwendung Die Implementierung im Detail Implementierung des Servers Implementierung des Clients Tutorial Die IDL-Datei schreiben Die Server-Objekte implementieren Den Client schreiben Die Anwendung testen 24 Die neue Multi-Tier-Client/Server-Architektur erfordert eine Technologie, die folgende Anforderungen erfüllen muß: Integration von bestehenden Softwaresystemen und Anwendungen Java-Unterstützung, um mobile, plattformunabhängige und objektorientierte Anwendungen realisieren zu können Herstellerunabhängigkeit, um Portabilität gewährleisten zu können Vorteile von OOP (z.b. Vererbung, Polymorphismus, ) ausreichende Sicherheitskonzepte Unterstützung von der Software-Industrie Es gibt eine Anzahl von verschiedenen Technologien, die die Realisierung von verteilten Client/Server-Anwendungen unterstützen. CORBA ist ein von der Software-Industrie entwickeltes Konzept, das alle genannten Anforderungen erfüllt. Insbesondere in Verbindung mit Java können Software-Entwickler leistungsfähige Client/Server-Anwendungen für das Internet entwickeln, die auf standardisierte Technologien basieren. CORBA zeichnet sich vor allem durch folgende Merkmale aus: Grundlage für eine moderne mehrschichtige Client/Server-Architektur Sprach- und Systemunabhängigkeit Interoperabilität zwischen heterogenen Systemen offener Standard stabile Basis für verteilte Objekte Verfügbarkeit von CORBA auf allen bekannten Betriebssystemen CORBA macht Netzwerkkommunikation transparent für Software-Entwickler

2 1.1 Grundlagen CORBA ist in erster Linie nur eine Spezifikation, die die Interoperabilität von verteilten Objekten beschreibt. Bevor das World Wide Web eine große Popularität erlang und insbesondere die Programmiersprache Java, war CORBA hauptsächlich eine High-End- Lösung zur Entwicklung von verteilten Anwendungen, die hauptsächlich von C++- Entwicklern genutzt wurde. Die CORBA-Spezifikation wird derzeit von der Object Management Group (OMG) betreut und gepflegt, ein offenes Konsortium bestehend aus über 700 Firmen, die offene Standards für die Entwicklung von objektorientierten Technologien definiert. CORBA-Objekte können in den Programmiersprachen realisiert werden, die von den CORBA-Anbietern unterstützt werden, sei es in C, C++, Java, Ada, Cobol oder Smalltalk. Weiterhin sind diese Objekte unabhängig von ihren Plattformen, (Windows 95/NT, OpenVMS,, Digital Unix, HP-UX, AIX, etc.) auf denen sie zur Verfügung gestellt bzw. auf sie zugegriffen werden, solange die CORBA-Spezifikation eingehalten wird. Das bedeutet, daß ein vom Internet heruntergeladenes Java-Applet, das unter Windows NT läuft, auf C++-Objekte zugreifen kann, die von einem Unix-Web-Server über das Internet verteilt werden. Sprach- und Systemunabhängigkeit werden durch die Beschreibung von Interfaces der Objekte über die Beschreibungssprache Interface Definition Language (IDL) ermöglicht. IDL erlaubt alle CORBA-Objekte auf die gleiche Art zu beschreiben. Die einzige Anforderung besteht in der Existenz einer Schnittstelle zwischen der IDL und der jeweiligen nativen Programmiersprache (Java, C/C++, Smalltalk, ). CORBA-Objekte kommunizieren über einen sogenannten Object Request Broker (ORB) miteinander, der als Vermittler fungiert, eine Kommunikationsschnittstelle zwischen der Server-Anwendung, der Dienste zur Verfügung stellt, und der diese Dienste nutzende Client-Anwendung. Als Netzwerkprotokoll wird hier das vom CORBA-Standard spezifizierte Internet Inter-ORB Protocol (IIOP) eingesetzt, das auf TCP/IP aufsetzt. Unterschiedliche ORB-Anbieter, die den von OMG verabschiedeten CORBA-Standard folgen, können so miteinander kommunizieren, unabhängig von ihrem jeweiligen darunterliegenden System. Ursprünglich definierte die OMG die Object Management Architecture (OMA), die die Interoperabilität von Software-Anwendungen beschreibt. Eines der Ziele war, ein Standard zu spezifizieren, wie Teile innerhalb einer Anwendung, die Objekte, im Netz verteilt werden. Dies war die Grundlage für die Entstehung von CORBA. Die OMA besteht im wesentlichen aus den vier folgenden Hauptkomponenten: Der Object Request Broker (ORB) ist der Kommunikationsbus zwischen CORBA- Objekten. CORBA-Services definieren Dienste (Services), die auf der Systemebene des ORBs agieren. Beispiele hierfür sind Security, Naming, Transaction oder Persistent Service. CORBA-Facilities definieren Services auf der Anwendungsebene. Geschäftsobjekte (Business Objects) beschreiben Objekte und Anwendungen, die in der realen Welt vorkommen (Flugzeug, Bankkonto oder Auto) Die CORBA-ORB-Architektur Die nachfolgende Abbildung zeigt die wesentlichen Komponenten der CORBA-ORB- Architektur.

3 Abb : CORBA-ORB-Architektur Der Object Request Broker (ORB) ist der Kommunikationsbus zwischen CORBA- Objekten, der einen Mechanismus anbietet, um Anfragen des Clients an die entsprechenden Object Implementations weiterzuleiten, unabhänigig davon, an welchem Ort diese im Netzwerk residieren und unter welchem Betriebssystem sie dort laufen. Hinter einem einfachen Methodenaufruf des Clients verbirgt sich eine komplexe Netzwerkkommunikation, die vom ORB gehandhabt wird. Eine Anfrage des Clients, bestehend aus dem Methodenaufruf und den Parametern, wird in einem binären Strom umgesetzt (marshaling) und über das Netzwerk an den Server geschickt. Die Informationen werden auf der Server- Seite wieder decodiert (unmarshaling) und die gewünschte Operation ausgeführt. Rückgabewerte werden auf die gleiche Weise wieder über den ORB an den Client gesendet. Zusammengefaßt hat der ORB die Aufgabe, die entsprechende Objektimplementierung zu finden, sie zu aktivieren, falls erforderlich, die Anfrage an den Objekt zu leiten und entsprechende Rückgabewerte wieder an den Client zurückzugeben. Das ORB Interface stellt einige nützliche Hilfsfunktionen für lokale Dienste bereit, um eine reibungslose Kommunikation der CORBA-Objekte zu gewährleisten. Hierunter fallen die Konvertierung einer Objektreferenz in eine Zeichenfolge und umgekehrt, und das Erstellen von Argumentlisten, die für dynamische Methodenaufrufe benötigt werden. Die CORBA-ORB-Architektur auf der Client-Seite besteht aus folgenden Komponenten: Client Der Client nutzt die vom Server-Programm bereitgestellten Services durch Aufruf der entsprechenden Operationen der Object Implementations. Dabei läuft der Zugriff auf ein entferntes Objekt für den Client vollkommen transparent ab, der lediglich die Aufgabe hat, einen Methodenaufruf abzusetzen ohne sich mit der Netzwerkkommunikation über den ORB befassen zu müssen. Die in Abb gezeigten Komponenten unterstützen diese Transparenz. CORBA IDL Stubs IDL-Stubs stellen die Schnittstellen zu den Objektdiensten bereit. Aus der Sicht des Clients verhält sich der Stub wie ein Proxy-Objekt für ein entferntes Server-Objekt. Die Dienste werden mit Hilfe von IDL definiert, ihre zugehörigen Client-Stubs vom einem IDL-Compiler generiert. Ein Stub beinhaltet Code für die Umsetzung der Methodenaufrufe mit ihren Parametern in einfache Nachrichtenströme, die an den Server gesendet werden. Die zugrundeliegenden Protokolle oder Dinge wie

4 Datenanordnungen bleiben für den Client vollkommen transparent, der die Dienste als einfache Methodenaufrufe auffaßt. Dynamic Invocation Interface (DII) Das Dynamic Invocation Interface erlaubt die vom Server bereitgestellten Dienste zur Laufzeit zu finden und diese zu nutzen. CORBA definiert hierfür Standard-APIs für die Suche der Metadaten, die die Server-Schnittstellen definieren, für die Generierung der Parameter, für das Absetzen des Remote-Aufrufs und für das Empfangen der Ergebnisse. Dynamische Methodenaufrufe erfordern keine Client-Stubs, da sie erst zur Laufzeit zusammengesetzt werden. Interface Repository Das Interface Repository ist eine verteilte Laufzeit-Datenbank, die maschinenlesbare Versionen der IDL-definierten Schnittstellen, die Metadaten, beinhaltet. Ein API erlaubt, die Metadaten zu lesen, abzuspeichern und zu verändern. Auf der Server-Seite sind folgende Komponenten zu finden: Object Implementation Die Object Implementations implementieren die in den IDL-Interfaces spezifizierten Schnittstellenbeschreibungen. Sie können in den unterschiedlichsten Sprachen realisiert werden, die vom ORB unterstützt werden. Hierunter fallen unter anderem C, C++, Java, Smalltalk und Ada. CORBA IDL Skeletons IDL Skeletons stellen das Gegenstück zu den Client-Stubs dar. Sie stellen die statischen Schnittstellen für jeden vom Server unterstützten Dienst bereit. Sie beinhalten Code, um eingehende Nachrichten in normale Methodenaufrufe umzusetzen und diese auszuführen. Rückgabewerte werden wieder über die Skeletons in einem binärem Strom umgewandelt und an den Client zurückgeschickt. Wie die Stubs werden die Skeletons vom IDL-Compiler aus IDL-Interfaces generiert. Dynamic Skeleton Interface (DSI) Das Dynamic Skeleton Interface ist das Gegenstück zum DII auf der Client-Seite. Es erlaubt eingehende Methodenaufrufe von einem Client, für die keine entsprechenden IDL-kompilierten Skeletons existieren, dynamisch zu bearbeiten. Seine Aufgabe besteht darin, ankommende Anfragen von einem Client zu analysisieren und das dafür vorgesehene Objekt zu finden und den Methodenaufruf abzusetzen. Object Adapter Der Object Adapter nimmt Dienstanfragen der Clients entgegen und aktiviert die entsprechenden Server-Objekte. Er bildet die Laufzeitumgebung der Server-Objekte, übergibt ihnen die Anfragen und weist ihnen Objektreferenzen zu. Der Object Adapter registriert die von ihm unterstützten Klassen und Objekte im Implementation Repository.

5 Implementation Repository Das Implementation Repository bildet eine Laufzeitdatenbank, die Informationen über die von einem Server unterstützten Klassen und Objekte enthält. Weitere Informationen, die mit der Implementierung von ORBs zusammenhängen, z.b. Trace- Informationen, Prüfprotokolle, Sicherheit und andere administrative Daten, sind dort ebenfalls zu finden. Hauptbestandteil von OMA ist der ORB. Die Verfügbarkeit eines ORBs ist die einzige Anforderung von CORBA um verteilte CORBA-Anwendungen realisieren zu können. Manche ORB-Anbieter liefern ihre Produkte ohne vollständige CORBA-Services oder CORBA-Facilities aus, so daß es erforderlich ist, Geschäftsprozesse selbst zu entwickeln. Ohne das Vorhandensein eines ORBs kann jedoch keine CORBA-Anwendung bereit gestellt werden. Der große Vorteil eines ORBs besteht darin, daß beinahe alle Implementierungsdetails zur Kommunikation von Objekten, sei es lokal, im Intra- oder im Internet, weitgehend vom ORB und den zugehörigen Skeleton- und Stub-Klassen den Software-Entwicklern transparent gemacht werden, so daß auf die Realisierung der eigentlichen Aufgaben konzentriert werden kann. Es sind lediglich einmalige Initialisierungen des ORBs im Programm erforderlich, die die Verteilung von CORBA-Objekten im Netz ermöglichen Die Services von CORBA Die CORBA-Services sind Sammlungen von Diensten auf der Systemebene, die selbst in IDL-definierten Schnittstellen zu finden sind. Sie sind als eine Erweiterung und Ergänzung der Funktionalität eines ORBs zu verstehen. Die OMG stellt zur Zeit 15 verschiedene CORBA-Services zur Verfügung. Hier alle Services auf einen Blick: Life Cycle Service Persistence Service Naming Service Event Service Concurrency Control Service Transaction Service Relationship Service Externalization Service Query Service Licensing Service Properties Service Time Service Security Service Trader Service Collection Service Weitere CORBA-Services sind zur Zeit in Arbeit. Der aktuelle Stand der Bemühungen kann jederzeit auf der Homepage von OMG abgefragt werden. Der Einsatz von CORBA-Services erlaubt CORBA-Objekte bestimmte Funktionalitäten zu verleihen, die sich mit der Systemebene befassen. CORBA-Objekte nutzen die CORBA- Services über Inheritance- und Containment-Relationships. So ist es beispielsweise möglich,

6 eine Klasse "Auto" persistent und transaktionell zu machen, indem die entsprechenden CORBA-Services genutzt werden Die Facilities von CORBA CORBA-Facilities sind das Modul für allgemein verwendbare, komplexe Diensteschnittstellen für den Enwickler von Endanwender-Applikationen. Sie definieren Regeln für das Zusammenspiel der Geschäftsobjekte, um effektiv zusammen arbeiten zu können. Zu den in der Entwicklung befindlichen Common Facilities gehören zum Beispiel Drucken, , Datenaustausch, Frameworks für Business-Objekte und Internationalisierung Die Geschäftsobjekte von CORBA Geschäftsobjekte (Business Objects) stellen eine natürliche Art und Weise dar, anwendungsunabhängige Konzepte wie Kunden, Bestellungen, Geld, Zahlungen, Autos oder Patienten zu beschreiben. Mit deren Hilfe werden Systeme entworfen, die die Geschäftsvorfälle aus der realen Welt auf die entsprechenden Objekte abbilden. Diese müssen aber in der Lage sein, miteinander auf der semantischen Ebene zu kommunizieren, um die Gegenstücke aus der realen Welt darstellen zu können. Geschäftsobjekte benötigen sauber definierte Schnittstellen, damit sie unabhängig voneinander entwickelt werden können. Ein Business-Objekt muß in der Lage sein, bestimmte Ereignisse in seiner Umgebung zu erkennen, seine Attribute zu verändern und mit anderen Business-Objekten zu interagieren. Wie jedes CORBA-Objekt exportiert ein Business-Objekt seine Dienste zu den Clients über IDL und kommuniziert mit den anderen Objekten über den ORB. 1.2 IDL zur Beschreibung von CORBA-Objekten CORBA wurde so spezifiziert, daß sie sprach- und betriebssystemunabhängig ist. Dazu ist eine einheitliche Schnittstellenbeschreibung der zu verteilenden CORBA-Objekte erforderlich. Diese Beschreibungssprache ist im CORBA-Standard als IDL (Interface Definition Language) definiert, die an die Syntax von C/C++ angelehnt ist. Operationen und Attribute, die von einem Server der "Außenwelt" zur Verfügung gestellt werden, sind in einem Interface beschrieben, das die Syntax von IDL genügt. Aus einem vollständig beschriebenen IDL-Interface werden mit einem IDL-Compiler Stub-Klassen für die Clients und Skeleton-Klassen für den Server für die jeweilige in der zu realisierenden Programmiersprache erzeugt. Ein IDL-Interface beschreibt lediglich die Schnittstellen der zu veröffentlichenden Dienste und Komponenten des Servers. Es enthält keine Implementierungsdetails. Dadurch wird ermöglicht, beispielsweise in Java erstellten Clients auf die in C++ realisierten Server-Objekte zuzugreifen. IDL-Compiler werden mit den ORB- Produkten mitgeliefert. Einige bieten die Möglichkeit an, direkt aus Sourcecode IDL- Interfaces zu generieren. Die strikte Trennung der Schnittstellen von ihrer Implementierung ermöglicht, bestehende Softwaresysteme in eine CORBA-Umgebung zu binden. Die unten vorliegende IDL-Beschreibung ist ein Überblick über die wesentlichen Merkmale der CORBA-IDL. // definiert einen Namensraum module <identifier> { <type declarations>; <constant declarations>;

7 <exception declarations>; // definiert ein CORBA-Interface interface <identifier> [:<inheritance>] { <type declarations>; <constant declarations>; <attribute declarations>; <exception declarations>; // definiert eine Operation [<op_type>] <identifier>(<parameters>) [raises exception][context]; // definiert eine Operation [<op_type>] <identifier>(<parameters>) [raises exception][context]; ; // definiert ein CORBA-Interface interface <identifier> [:<inheritance>] { ; ; Hier eine kurze Beschreibung der wichtigsten Elemente, die eine IDL-Beschreibung ausmachen: Ein Modul stellt einen Namensraum bereit, um mehrere Schnittstellen zu gruppieren. Es wird durch das Schlüsselwort module eingeleitet, dessen Name sich aus einem oder mehreren Bezeichnern zusammensetzt. Dadurch kann eine zusätzliche Ebene in der Hierarchie im IDL-Namensraum eingeführt werden. Datentypen grenzen die möglichen Werte der Parameter, Attribute, Ausnahmen und Rückgabewerte ein, die sie annehmen können. Diese Datentypen werden als CORBA- Objekte bezeichnet, die Sprach-, Betriebssystem- und ORB-übergreifend verwendet werden. CORBA unterscheidet zwischen einfachen und konstruierten Typen. Zu den einfachen CORBA-Typen zählen short, long, unsigned short, unsigned long, float, double, char, boolean, octet, string, enum und any. Die konstruierten Typen sind struct, array, union und sequence. Der Typ struct, ähnlich einer C- Struktur, erlaubt, mit Hilfe von typedefs jeden komplexen Datentyp zu erstellen. Mit dem Typ sequence wird ein Array von Objekten variabler Länge definiert. Der Typ any kann jeden möglichen IDL-Datentyp repräsentieren - einen einfachen, einen konstruierten oder eine Objektreferenz. Jeder IDL-Datentyp von CORBA wird mit Hilfe von IDL-Compilern auf einen nativen Datentyp abgebildet. Interfaces definieren Operationen und Attribute. Eine Schnittstelle ist eine rein deklarative Beschreibung der Services, die von einem Client genutzt werden können und enthalten keine Details über ihre Implementierung. Schnittstellen können von einer oder mehreren Schnittstellen abgeleitet werden. Operationen kennzeichnen Dienste, die ein Client aufrufen kann. Die IDL definiert die Signatur einer Operation, bestehend aus ihren Parametern und Rückgabewert. Ein

8 Parameter kann vom Client zum Server (in), vom Server zum Client (out) oder in beiden Richtungen (inout) übergeben werden. Ein Parameter besitzt einen Datentyp. Der Typ des Rückgabewertes wird durch op_type festgelegt. Fehlerfälle können durch das Werfen von Exceptions angezeigt werden. Ein optionaler Context-Ausdruck beinhaltet eine Menge von Werten für Attribute, die den Kontext eines Clients beschreiben. Er ermöglicht einem Client, Informationen, die seine lokale Umgebung beschreiben, an den Server weiterzugeben. Attribute beschreiben den Zustand eines Interfaces. Für jedes Attribut wird jeweils eine Getter- (wenn das Attribut nicht als read-only deklariert ist) und eine Setter- Methode vom IDL-Compiler erzeugt. Die genaue Grammatik und der gesamte Sprachumfang der IDL sind in der CORBA- Spezifikation von OMG vollständig beschrieben. 1.3 Inter-ORB-Kommunikation In einer mit CORBA entwickelten Client/Server-Anwendung existieren zwei ORBs, die miteinander über ein Netzwerk in Verbindung stehen. Mit Hilfe der ORBs werden die entsprechenden Anfragen des Clients an den Server weitergeleitet. Dieser führt den gewünschten Service aus und gibt die Rückantwort wieder über die ORBs an den Client zurück. Abb. 2.3 verdeutlicht noch einmal diese Kommunikation. Abb. 2.3: Client/Server-Kommunikation über ORBs Hinter diesem Aufruf steckt eine komplexe Netzwerkkommunikation, die über die von der OMG spezifizierte CORBA-Inter-ORB-Architektur beschrieben ist. Zwei wichtige Teile der Architektur sind das General Inter-ORB Protocol (GIOP) und das Internet Inter-ORB Protocol (IIOP). Das General Inter-ORB Protocol (GIOP) spezifiziert eine Menge von Nachrichtenformaten und Datendarstellungen für die Kommunikation zwischen den ORBs. Die in IDL definierten Datentypen werden als Common Data Representation (CDR) in eine einfache Nachrichtendarstellung für Netzwerke abgebildet. GIOP definiert außerdem ein Format für Interoperable Object References (IORs). Ein ORB muß eine IOR von einer Objektreferenz erzeugen, wann immer eine Objektreferenz über ORBs weitergegeben wird. IORs verbinden eine Sammlung von "tagged profiles" mit Objektreferenzen. Die Profile beschreiben dasselbe Objekt, aber jedes beschreibt, wie mit dem Objekt über einen bestimmten ORB-Mechanismus in Kontakt zu treten

9 ist. Ein Profil stellt selbstbeschreibende Daten zur Verfügung, die die ORB-Domäne identifizieren, der eine Referenz zugeordnet ist, und die Protokolle, die es unterstützt. Das Internet Inter-ORB Protocol (IIOP) legt fest, wie GIOP-Nachrichten über ein TCP/IP-Netzwerk ausgetauscht werden. Das IIOP ermöglicht daher, die Busarchitektur und die Technologien des Internets selbst als Basis für eine Inter-ORB- Kommunikation zu verwenden. Daneben können einzelne ORBs aber noch weitere Environment-Specific-Inter-ORB- Protocols (ESIOPs) unterstützen. Entwickler von verteilten Client/Server-Anwendungen werden sich selten mit der Kommunikation der ORBs auseinandersetzen müssen. Interoperabilität wird zwischen ORB- Anbietern garantiert, und nicht zwischen Anbieter und Entwickler. Das Thema soll nicht näher behandelt werden. 1.4 Dreischichtige Client/Server-Architektur mit CORBA- Objekten Business-Objekte eignen sich für die Entwicklung von dreischichtigen Client/Server- Anwendungen, da sie kein monolithisches Stück Code darstellen. Stattdessen können sie jederzeit in andere Komponenten integriert werden, die wiederum eine neue Client/Server- Anwendung abbilden. Business-Objekte können durch mehrere verschiedene visuelle Objekte repräsentiert werden, die sich in der ersten Schicht auf der Seite des Clients befinden. In der mittleren Schicht befinden sich die Server-Objekte, die die persistenten Daten und die Business-Logik repräsentieren. In der dritten Schicht werden Datenbanken und andere überkommene Server-Anwendungen untergebracht. Die Aufteilung der Anwendung in drei Schichten erlaubt eine erhöhte Flexibiltät gegen Änderungen zu gewinnen. Diese Änderungen können sich beziehen auf die fachliche Verarbeitung, die Präsentation anwendungsbezogener Daten, die Benutzerführung und auch auf die Entwicklungsplattform. Diese Flexibilität wird durch eben die beschriebene Schichtentrennung erreicht. Abb. 2.4 zeigt die Integration von CORBA in eine moderne mehrschichtige Client/Server-Architektur. Abb. 2.4: Dreischichtige Client/Server-Architektur mit CORBA-Objekten

10 Die Server-Objekte der mittleren Schicht implementieren die Logik der Anwendung und stellen den Clients, die View-Objekte, die persistenten Daten zur Verfügung, die sie aus den in der dritten Schicht befindlichen Datenbanken beziehen. Die Clients holen sich alle für die Darstellung erforderlichen Daten von den Business-Objekten und müssen sich nicht mit dem Sammelsurium von SQL-Anweisungen, gespeicherten Prozeduren (stored procedures) und Datenbanken der dritten Schicht befassen. Die zweite Schicht übernimmt in diesem Fall die Verantwortung, wodurch eine erhöhte Flexibilität und Wiederverwendbarkeit erreicht wird. 2 Entwicklung einer Client/Server- Anwendung mit CORBA 2.1 Vorbereitungen Mit der Einführung von JDK 1.2 wird ein 100% pure Java Object Request Broker Java IDL mitgeliefert, der mit jedem CORBA-konformen ORB interoperieren kann. Java IDL ist ein freies Produkt von Sun, das einen light-weight ORB, einen Naming-Service und einen IDL- Compiler für Java beinhaltet. Da Java IDL noch ein relativ neues Produkt ist, sind nicht alle erwähnten Funktionalitäten von CORBA implementiert. Für die Entwicklung einer kleinen verteilten Client/Server-Anwendung soll Java IDL aber schon ausreichen, um die technischen Aspekte von CORBA aufzeigen zu können. Für größere Anwendungen stehen kommerzielle Produkte von verschiedenen Herstellern zur Verfügung, für die ein Lizenz erworben werden muß. Hierzu zählen VisiBroker von Visigenic, Orbix von IONA Technologies und IBM's Component Broker Connector. Für die nachfolgenden Beispiele ist Java IDL schon ausreichend. Daher werden im folgenden nur die Tools beschrieben, die Java IDL betreffen. Java IDL enthält einen transienten Naming Service, der vom Server und vom Client genutzt werden kann. Er ist als separater Prozeß zu starten. Der Naming Service speichert die Objektreferenzen mit ihren Namen in eine Art Baumstruktur ab, vergleichbar mit einem Dateisystem. Eine Objektreferenz wird im Naming Service über den Server registriert (bind), die von einem Client über seinen Namen erhalten kann (resolve). Eine Objektreferenz kann über unbind aus dem Naming Service gelöscht werden. Der Naming Service implementiert zwei CORBA-Objekte: NamingContext, das Analogon zu einem Verzeichnis, und BindingIterator, vergleichbar mit einer Datei. Jeder BindingIterator stellt ein Referenzpaar Name/Objekt dar. Weitere Informationen zum Naming Service ist der Dokumentation von JDK 1.2 zu entnehmen. Es ist zu beachten, daß alle gebundenen Objekte im Naming Service verloren gehen, sobald er gestoppt wird. 2.2 Entwicklungszyklus einer CORBA-Anwendung Abb. 3.2 zeigt einen allgemeinen Entwicklungszyklus einer verteilten Client/Server- Anwendung mit Hilfe von CORBA.

11 Abb. 3.2: Ein typischer Entwicklungszyklus einer CORBA-Implementierung. Hier die Schritte im einzelnen: 1. Die zu veröffentlichenden Dienste vom Server werden in einer IDL-Datei beschrieben. Sie enthält alle Operationen, die ein Client aufrufen kann, die Ausnahmen, die dabei auftreten können, und alle erforderlichen Ein- und Ausgabeparameter. Die Datei trägt die Endung '.idl'. Ein Beispiel für eine IDL-Datei: // Datei: Bank.idl // // Autor: Tin-Ho Chan // // Beschreibung // Diese IDL-Datei ist ein Beispiel fuer den Einsatz von CORBA. // Auf einem Server sollen Dienste angeboten, die ermoeglichen, // Konten in einer Bank anzulegen, diese abzufragen und auch // entsprechende Vorgaenge, die zu einer Kontofuehrung gehoeren // ausfuehren zu koennen. Das Modul 'Bank' enthaelt einen // 'KontoManager', der die Konten 'Konto' verwaltet. // Aus Mangel an Sicherheit sollte dieses Beispiel nicht // zu kommerziellen Zwecken genutzt werden. // // Version Datum Aenderungen // // April 1998 Ersterstellung

12 // Modul 'Bank' module Bank { // definiert eine Stringfolge typedef sequence<string> StringArray; // Personendaten struct Person { string name; string vorname; ; // Ausnahme bei Fehlerfall. exception KontoException { string begruendung; ; // Das individuelle Konto mit entsprechenden // Attributen und Operationen. interface Konto { readonly attribute float kontostand; readonly attribute long geheimzahl; readonly attribute long kontonummer; attribute Person person; void einzahlen(in float betrag); void abheben(in float betrag); ; // gibt Konto beim Abmelden wieder frei void unlock(); ; // Der Kontomanager verwaltet die Konten. interface KontoManager { Konto anmelden(in long kontonr, in long geheimzahl) raises (KontoException); Konto oeffnen(in Person daten); void aufloesen(in Konto konto); // hole Infos zu allen Konten in der Bank StringArray holekonteninfos(); ; 2. Mit dem IDL-Compiler werden für die definierten Schnittstellen Client-Stubs und Server-Skeletons erzeugt. Hierzu ist der Befehl $ idltojava -fserver -fclient <IDL-Datei>.idl aufzurufen. Die zwei Flags kennzeichnen, daß Code sowohl für Stubs als auch für Skeletons generiert werden sollen. Für jedes angegebene Modul wird ein Java- Package mit dem Modulnamen erzeugt, in dem die erzeugten Java-Klassen abgelegt werden. Die automatische Generierung von Stubs und Skeletons befreit Programmierer davon, diese zu schreiben und befreit Anwendungen von ihrer Abhängigkeit von bestimmten ORB-Implementierungen. 3. Nun sind alle Vorbereitungen getroffen, um die Server-Anwendung zu realisieren. Für jedes in der IDL-Datei definierte Interface existiert ein entsprechendes Java-Interface, das zu implementieren ist. Dazu ist die zu implementierende Klasse von der Klasse _<interface>implbase abzuleiten, die vom IDL-Compiler erzeugt wurde, wobei

13 <interface> der Interface-Name in der IDL-Datei ist. Hier eine Beispielimplementierung für das obige Interface KontoManager: // aus IDL generiertes Package import Bank.*; import java.util.*; /** * Diese Klasse implementiert die im Interface 'KontoManager' spezifizierten * Schnittstellen, die vom Server angeboten werden. Tin-Ho Chan Ersterstellung */ public class KontoManagerImpl extends _KontoManagerImplBase { private static Random rnd = new Random(); /** * Konten werden in einem Dictionary verwaltet. Als * Schluessel dient die Kontonummer. */ private Hashtable konten = new Hashtable(); /** * Ein neues Konto anlegen. person Personendaten das neu angelegt Konto */ public synchronized Konto oeffnen(person person) { /** * In der Bank ueber ein bestehendes Konto anmelden. kontonr Kontonummer geheimzahl Geheimzahl Konto mit angegebene Kontonummer und Geheimzahl */ public synchronized Konto anmelden(int kontonr, int geheimzahl) throws KontoException { /** * Ein bestehendes Konto aufloesen. konto das aufzuloesende Konto */ public synchronized void aufloesen(bank.konto konto) { /** * Gibt Infos zu allen Konten in der Bank zurueck. Informationen ueber alle Konten */ public String[] holekonteninfos() {

14 4. Um die definierten Dienste den Clients anbieten zu können, müssen einmalige Initialisierungen des ORBs vorgenommen werden (siehe Kap ). 5. Ist der Initialisierungsvorgang abgeschlossen, können sich die Objekte im Naming Service registrieren lassen, und der Server kann auf eingehende Anfragen eines Clients warten (siehe Kap ). 6. Der Client kann nun implementiert werden. Analog zum Server muß zuerst eine einmalige ORB-Initialisierung vorgenommen werden, bevor der Client die Dienste des Servers nutzen kann (siehe Kap ). 7. Über den Naming Service kann sich der Client die dort registrierten Objekte eine Referenz über ihren Namen holen. Diese wird dann verwendet, um die bereitgestellten Dienste des Server-Objekts aufzurufen (siehe Kap ). 8. Der Client wird gemäß den Anforderungen vervollständigt. Er sollte von jeglicher Geschäftslogik befreit sein und nur über ein ansprechendes GUI-Interface verfügen, das die Ergebnisse aus der Kommunikation zwischen Client und Server darstellt. 9. Mit der Fertigstellung von Client und Server werden die Java-Programme kompiliert: $ javac <Server>.java <Client>.java 10. Client und Server verwenden beide den Naming Service. Dazu muß der in JDK 1.2 mitgelieferte Naming Service als separater Prozeß gestartet werden: $ tnameserv [-ORBInitialPort 6000] Der Naming Service horcht in diesem Falle unter der Portadresse 6000 auf eingehende Anfragen. Die Angabe der Portadresse ist optional. Als Default-Wert wird hier 900 angenommen, sofern der Benutzer über Administratorrechte verfügt. 11. Das Server-Programm wird gestartet, das seine Dienste im Naming Service den Clients zur Verfügung stellt. Der Server ist bereit um eingehende Anfragen zu bearbeiten (siehe Kap ). 12. Die Clients können sich nun über den Naming Service die Objektreferenzen vom Server holen und deren Dienste nutzen (siehe Kap ). Die oben beschriebenen Schritte sind für die meisten CORBA-Implementierungen typisch. CORBA erlaubt natürlich Abweichungen. Das Dynamic Invocation Interface bietet mit dem Dynamic Skeleton Interface eine andere Form von CORBA-Implementierung, die aber das gleiche Ziel verfolgt. Die Dokumentation von JDK 1.2 beschreibt dieses Verfahren ausführlich. 2.3 Die Implementierung im Detail Um eine Client/Server-Anwendung in eine CORBA-Umgebung zu integrieren, bedarf es einige Vorbereitungen in der Implementierung. Hierzu zählen die ORB-Initialisierungen, das Binden der Objekte im Naming Service und das Finden dieser Objekte über ihren Namen. Im folgenden werden die erforderlichen Schritte beschrieben, die sowohl im Server-Code als auch im Client-Code zu machen sind. Als Basis dient wie schon oben erwähnt der in JDK 1.2

15 integrierte ORB Java IDL. Sie können aber auch mit ORBs von anderen Herstellern realisiert werden, sofern diese die Programmiersprache Java und den CORBA Naming Service unterstützen Implementierung des Servers Da der Initialisierungsvorgang des ORBs einmalig stattfindet, wird er innerhalb einer Routine vorgenommen, die der Server am Anfang durchläuft, z. B. in der main()-methode. Um Dienste den Clients anbieten zu können, wird ein Objekt im Naming Service abgelegt. Hier die einzelnen Schritte für die Implementierung des Servers. 1. Alle erforderlichen Packages importieren. Für die Initialisierung des ORBs und für die Verwendung des Naming Service stehen folgende Packages zur Verfügung: // Packages fuer Naming Service import org.omg.cosnaming.*; import org.omg.cosnaming.namingcontextpackage.*; // alle CORBA-Implementierungen benötigen dieses Package import org.omg.corba.*; 2. Die Methode festlegen, in der der Initialisierungsvorgang stattfinden soll. Für die weiteren Schritte, wird die main()-methode angenommen. 3. CORBA-System-Exceptions abfangen. Da alle CORBA-Programme zur Laufzeit CORBA-System-Exceptions werfen können, ist es notwendig, die Implementierung der vorher festgelegten Methode in einem try-catch-block zu setzen. Alle Aufrufe die über den ORB ablaufen, können aufgrund von Verbindungsfehlern System-Exceptions werfen. Innerhalb der Methode ist deshalb folgender Block zu setzen. try { // Code fuer CORBA-Aufrufe catch (Exception e) { System.out.println("Client Exception: " + e); e.printstacktrace(system.out); Alle nachfolgenden Sourcecode sind in dem try-block zu setzen. Natürlich können die Exceptions anders behandelt werden. Der oben vorliegende Code dient nur als Beispiel. 4. Ein CORBA-Server benötigt einen lokalen ORB-Objekt, um die Funktionalitäten von CORBA nutzen zu können. Jedes Programm kann eine Referenz auf ein Objekt org.omg.corba.orb über eine vom ORB zur Verfügung gestellte init()-methode erhalten. Parameter für die Methode dienen diverse Informationen über die Umgebung des Servers. ORB orb = ORB.init(args, null); Der Aufruf von init() erlaubt bestimmte Informationen der Server-Umgebung über die Kommandozeile dem ORB zu übergeben. Nähere Informationen zu den Parametern ist der Dokumentation von JDK 1.2 zu entnehmen.

16 5. Der Server ist ein Prozeß, der ein oder meherere Dienste über die Server-Objekte den Clients zur Verfügung stellt. Diese Objekte implementieren die vom IDL-Compiler generierten Interfaces. Es wird daher ein sogenanntes Servant-Objekt instanziiert und dieses dem ORB bekannt gemacht, der die Anfragen eines Clients an das richtige Objekt weiterleiten kann. Servant servantref = new ServantImpl(); orb.connect(servantref); 6. Um die bereitgestellten Objekte den Clients bekannt zu machen, müssen diese über einen Namen im Naming Service gebunden werden. Es wird eine Referenz auf den Naming Service benötigt: org.omg.corba.object objref = orb.resolve_initial_references("nameservice"); Der String "NameService" ist für alle CORBA-ORBs definiert. Der Rückgabewert ist der Namensraum zum Naming Service. 7. Um das Objekt objref als NamingContext verwenden zu können, ist eine Umwandlung des Objekts erforderlich. Dies geschieht mit dem Aufruf: NamingContext ncref = NamingContextHelper.narrow(objRef); Das Objekt ncref hat den Typ org.omg.cosnaming.namingcontext und kann verwendet werden, um auf den Naming Service zuzugreifen und dort Objekte abzulegen. 8. Der nächste Schritt ist das Bereitstellen des Objekts im Naming Service. Hier die erforderlichen Befehle: NameComponent nc = new NameComponent("ServantName", ""); NameComponent path[] = {nc; ncref.rebind(path, servantref); Der Umweg über NameComponent ist erforderlich, da der Naming Service wie eine Art Baumstruktur aufgebaut ist. Der letzte Befehl rebind() bindet das Servant-Objekt im Naming Service mit dem Namen "ServantName". Clients können über resolve("servantname") eine Referenz auf das bereitgestellte Objekt erhalten. 9. Die Initialisierungsvorgänge sind abgeschlossen. Der Server kann auf eingehende Anfragen eines Clients warten. java.lang.object sync = new java.lang.object(); synchronized(sync) { sync.wait(); Der Server wartet auf Aufrufe eines Clients, sofern dieser nicht durch das System gestoppt wird. Ein Beispiel für einen vollständig implementierten Server in Zusammenhang mit der im Kap. 3.2 angegebenen IDL-Datei:

17 // aus IDL generiertes Package import Bank.*; // BankServer verwendet den Naming-Service. import org.omg.cosnaming.*; import org.omg.cosnaming.namingcontextpackage.*; // CORBA-Anwendungen benoetigen diese Klassen. import org.omg.corba.*; /** * Das Programm BankServer stellt eine Server-Anwendung bereit, * Bankkonten zu verwalten. Hierbei handelt es sich nur um ein * Beispiel, die vor allem die technischen Aspekte von CORBA * aufzeigen soll. Es koennen nur Konten angelegt und geloescht * werden. Das Einzahlen und Abheben von virtuellen $$$ ist natuerlich * auch moeglich. Tin-Ho Chan Ersterstellung */ public class BankServer { public static void main(string[] args) { try { // Create and initialize the ORB ORB orb = ORB.init(args, null); // Create the servant and register it with the ORB KontoManager kontomanager = new KontoManagerImpl(); orb.connect(kontomanager); // Get the root naming context org.omg.corba.object objref = orb.resolve_initial_references("nameservice"); NamingContext ncref = NamingContextHelper.narrow(objRef); // Bind the object reference in naming NameComponent nc = new NameComponent("KontoManager", ""); NameComponent path[] = {nc; ncref.rebind(path, kontomanager); // Wait for invocations from clients java.lang.object sync = new java.lang.object(); synchronized(sync) { sync.wait(); catch(exception e) { System.err.println("BankServer exception: " + e); e.printstacktrace(system.out); Implementierung des Clients Da der Initialisierungsvorgang des ORBs einmalig stattfindet, wird er innerhalb einer Routine vorgenommen, die der Client am Anfang durchläuft. Für eine Java-Applikation könnte der Vorgang in der main()-methode stattfinden, für ein Applet hingegen in der init()-methode des Applets. Hier die einzelnen Schritte für die Implementierung des Clients.

18 1. Alle erforderlichen Packages importieren. Für die Initialisierung des ORBs und für die Verwendung des Naming Service stehen folgende Packages zur Verfügung: // Packages fuer Naming Service import org.omg.cosnaming.*; import org.omg.cosnaming.namingcontextpackage.*; // alle CORBA-Implementierungen benötigen dieses Package import org.omg.corba.*; 2. Die Methode festlegen, in der die ORB-Initialisierung stattfinden soll. 3. Da alle CORBA-Programme zur Laufzeit CORBA-System-Exceptions werfen können, ist es notwendig, die Funktionalitäten der vorher festgelegten Methode in einem try-catch-block zu implementieren. Alle Aufrufe die über den ORB ablaufen, können aufgrund von Verbindungsfehlern System-Exceptions werfen. Innerhalb der Methode ist deshalb folgender Block zu setzen: try { // Code fuer CORBA-Aufrufe catch (Exception e) { System.out.println("Client Exception: " + e); e.printstacktrace(system.out); Alle nachfolgenden Sourcecode sind in dem try-block zu setzen. Natürlich können die Exceptions anders behandelt werden. Der oben vorliegende Code dient nur als Beispiel. 4. Ein CORBA-Client benötigt einen lokalen ORB-Objekt, um die Funktionalitäten von CORBA nutzen zu können. Jedes Programm kann eine Referenz auf ein Objekt org.omg.corba.orb über eine vom ORB bereitgestellte init()-methode erhalten. Als Parameter für die Methode dienen diverse Informationen über die Umgebung des Clients. Innerhalb des try-catch-blocks ist folgende Methode aufzurufen: Java-Applet: ORB orb = ORB.init(this, null); Es ist möglich, bestimmte Parameter in der HTML-Seite festzulegen, die die ORB- Kommunikation beeinflußen. Beispielsweise können die Netzwerkadresse des Servers und seine Portadresse mit angegeben werden. Hier ein Beispiel: <applet code=bankclient width=370 height=400> <param name="org.omg.corba.orbinitialhost" value="localhost"> <param name="org.omg.corba.orbinitialport" value="6000"> </applet> Java-Applikation:

19 ORB orb = ORB.init(args, null); Analog zu einem Applet können hier diverse Informationen der Client-Umgebung über die Kommandozeile mitgegeben werden. Die Beschreibungen zu den Parametern ist der Dokumentation von JDK 1.2 zu entnehmen. 5. Um die bereitgestellten Dienste des Servers nutzen zu können, bedarf es eine Referenz auf das entsprechende CORBA-Objekt, die vom Server im Naming Service bereitgestellt hat. Daher wird hier eine Referenz auf den Naming Service benötigt: org.omg.corba.object objref = orb.resolve_initial_references("nameservice"); Der String "NameService" ist für alle CORBA-ORBs definiert. Der Rückgabewert ist der Namensraum zum Naming Service. 6. Um das Objekt objref als NamingContext verwenden zu können, ist eine Umwandlung des Objekts erforderlich. Dies geschieht mit dem Aufruf: NamingContext ncref = NamingContextHelper.narrow(objRef); Das Objekt ncref hat den Typ org.omg.cosnaming.namingcontext und kann verwendet werden, um auf den Naming Service zuzugreifen und die dort abgelegten Objekte zu finden. 7. Der nächste Schritt ist das Finden der vom Server bereitgestellten Objekte. Hier die notwendigen Befehle, um ein Objekt des Servers zu finden: // Resolve the object reference in naming NameComponent nc = new NameComponent("ServantName", ""); NameComponent path[] = {nc; Servant serverref = ServantHelper.narrow(ncRef.resolve(path)); Servant ist dabei eine Referenz auf das vom Server bereitgestellte Objekt. Der Umweg über NameComponent ist erforderlich, da der Naming Service wie eine Art Baumstruktur aufgebaut ist. Wie beim NamingContext wird hier die Methode narrow() angewandt, um eine Referenz Servant zu erhalten. Nun können die spezifizierten Dienste von Servant genutzt werden. Es ist zu beachten, daß alle Methodenaufrufe des Server-Objekts Exceptions werfen können, die aufgrund von Verbindungsfehlern auftreten. Es sind daher entsprechende Vorkehrungen vom Programmierer zu treffen. Hier ein Beispiel der oben beschriebenen Schritte zur Implementierung des Clients. Es wurde als Applet realisiert, das sich kaum von einer Java-Applikation unterscheidet. Der Aufruf der Methode ORB.init() ist nur unterschiedlich. Die Dienste des KontoManagers aus Kap. 3.2 werden hier in Anspruch genommen. // aus IDL generiertes Package import Bank.*; // BankClient verwendet den Naming-Service. import org.omg.cosnaming.*; import org.omg.cosnaming.namingcontextpackage.*;

20 // CORBA-Anwendungen benoetigen diese Klassen. import org.omg.corba.*; /** * Die Klasse stellt einen Client zur Verfuegung, der mit der * Server-Anwendung BankServer kommuniziert. Es koennen die Dienste, * die vom Server angeboten hier genutzt. In diesem Fall die Dienste * fuer die Verwaltung eines 'light' Kontos. Tin-Ho Chan Ersterstellung */ public class BankClient extends Applet implements ActionListener { /** Kontomanager fuer die Verwaltung von Konten */ private KontoManager kontomanager; /** * Initialisiert das GUI-Interface und stellt die Verbindung zum * Server der Bank her. */ public void init() { super.init(); initbankconnection(); /** * Die Verbindung zum Server wird aufgebaut. */ private void initbankconnection() { try { // Create and initialize the ORB ORB orb = ORB.init(this, null); // Get the root naming context org.omg.corba.object objref = orb.resolve_initial_references("nameservice"); NamingContext ncref = NamingContextHelper.narrow(objRef); // Resolve the object reference in naming NameComponent nc = new NameComponent("KontoManager", ""); NameComponent path[] = {nc; kontomanager = KontoManagerHelper.narrow(ncRef.resolve(path)); if (kontomanager==null) connectionerror(new Exception()); catch(exception e) { connectionerror(e);

21 3 Tutorial In diesem Tutorial lernen Sie, wie man mit JDK 1.2 und den dort integrierten Java-ORB Java IDL in Netzen verteilte Anwendungen unter CORBA entwickelt. Unser Ziel ist eine einfache Bank-Anwendung, mit der Sie Konten verwalten sowie Einzahlungen und Abhebungen verarbeiten können. Der Gegenstand des Tutorials ist ein Client-Programm, das auf CORBA- Serverobjekte zugreift und neben der Abfrage des Kontostands Aktionen durchführt, die dynamisch in den Serverobjekten berechnet werden. Mit den Erkenntnissen aus diesem einfachen Beispiel sollten Sie dann in der Lage sein, komplexere Anwendungen auf Basis von Java und CORBA zu entwerfen. Für die nachfolgenden Aufgaben legen Sie ein neues Verzeichnis an und speichern alle unten angegebenen Sourcen dort ab. 3.1 Die IDL-Datei schreiben Da CORBA-Objekte sprachneutral sind, werden die Methodenaufrufe der verschiedenen Programmiersprachen in Schnittstellen gekapselt. Damit wird nicht direkt auf die Implementierung eines Objekts zugegriffen. In CORBA werden diese Schnittstellen für alle Objekte mit der Beschreibungssprache IDL geschrieben. Das Modul Bank in der IDL-Datei Bank.idl kennt zwei Schnittstellen namens Konto und KontoManager, jede mit zweckgebundenen Methoden und Attributen. Der Entwicklungszyklus eines typischen CORBA-Projekts geht davon aus, daß zuerst die Schnittstellendefinition geschrieben wird. Der IDL-Compiler erzeugt anhand dieser Informationen die notwendigen Client-Stubs und Server-Skeletons: $ idltojava -fserver -fclient Bank.idl Der Client spricht mit dem Stub, hält ihn aber für den Server. Sendet der Server Daten an den Client, so kommuniziert der Server mit dem Skeleton, meint aber, daß er mit dem Client spricht. Das Ergebnis des IDL-Compilers ist ein Verzeichnis Bank mit unterschiedlichen Java- Sourcetexten, um die Sie sich momentan aber nicht kümmern müssen. Es handelt sich hierbei im wesentlichen um notwendige Anpassungen für den Einsatz in einer Java-CORBA- Umgebung. (Anmerkung: Aus unerklärlichen Gründen läuft der IDL-Compiler unter Windows 95 nicht. Laden Sie stattdessen diese Zip-Datei herunter, und entpacken Sie sie in Ihr neu angelegtes Verzeichnis. Ihr Verzeichnis sollte nun ein Unterverzeichnis Bank haben, das die vom IDL- Compiler generierten Java-Quelltexte enthält.) 3.2 Die Server-Objekte implementieren Die Aufgabe des Programmierers ist es nun, die Server-Objekte zu implementieren, die ihrerseits die Schnittstellen implementieren. Üblicherweise wird dabei zum Namen der Schnittstelle das Wort Impl hinzugefügt, das die Implementierung kennzeichnet. Also müssen Sie die beiden Klassen KontoImpl und KontoManagerImpl erstellen. Als Hilfe dienen die Kommentare der beiden Klassen.

22 KontoImpl und KontoManagerImpl müssen von einer bestimmten abstrakten Klasse abgeleitet werden, die die Interfaces Konto bzw. KontoManager einbindet. Sie sind im Package Bank zu finden. Machen Sie die erforderlichen Einträge in den Klassen. Hilfe finden Sie im Kap. 3.2, Schritt 3. In einem verteilten System können mehrere Clients auf den Server zugreifen. Daher müssen Vorkehrungen getroffen werden, daß keine Synchronisationsprobleme auftreten. Die Klasse KontoManagerImpl kann von mehreren Clients bedient werden. Erweitern Sie an den betroffenen Stellen der Implementierung um ein bestimmtes Schlüsselwort. KontoImpl kann nur von einem Client bedient werden. Warum? Schauen Sie sich dazu die Methoden oeffnen() und anmelden() von KontoManagerImpl an. Die Antwort finden Sie hier. KontoImpl muß daher nicht synchronisiert werden. Aus der IDL-Datei ist es ersichtlich, daß eine Operation von KontoManager ein Exception werfen kann. Welche Operation und welche Ausnahnme? Hier die Antwort. Suchen Sie die zugehörige Stelle in der Implementierung und ergänzen Sie sie um diesen möglichen Fehlerfall. Die zugehörige Exception-Klasse ist auch aus der Implementierung der Methode ersichtlich. Die Klasse KontoImpl enthält Implementierungen für die in der IDL-Datei spezifizierten Operationen. Versuchen Sie mit Hilfe des vom IDL-Compiler generierten Interfaces Bank.Konto die Klasse KontoImpl um die fehlenden Methodensignaturen zu vervollständigen. Achten Sie sorgfältig auf die Implementierungen. Als Hilfe stehen weiterhin die Kommentare der Klasse zur Verfügung. Bevor CORBA diese Server-Objekte als Services zur Verfügung stellen kann, muß ein CORBA-konformer Server geschrieben werden. Das besorgt das Programm BankServer. Versuchen Sie anhand des Kap den Server zu implementieren. Als Servant soll hier eine Instanz KontoManagerImpl erzeugt und unter dem Namen "KontoManager" im Naming Service gebunden werden. Zu beachten ist, daß die Referenz auf KontoManagerImpl vom Typ KontoManager sein muß, die Schnittstelle für den Client. Damit wäre die Implementierung auf der Server-Seite abgeschlossen. Das Bankmodul ist folgendermaßen verwendbar: Der Kunde geht an ein Terminal und kann entweder ein neues Konto anlegen oder ein bestehendes öffnen. Daraufhin wird sein Konto angezeigt. Der Kunde zahlt einen Betrag ein, wonach der Kontostand aktualisiert und erneut angezeigt wird. Der Kunde hebt einen Betrag vom Konto ab, wobei auch hier der Kontostand aktualisiert und angezeigt wird. Der Kunde kann sein Konto auflösen. Der Kunde kann sich einen Überblick über alle verfügbaren Konten der Bank verschaffen (kommt hoffentlich in der Realität nicht vor). Diese Aktionen gelingen bereits mit diesen einfachen Server-Objekten. Nur der Client für das imaginäre Terminal fehlt noch.

23 3.3 Den Client schreiben Für den Client steht die Klasse BankClient zur Verfügung. Sie ist um den Zugriff auf die Server-Objekte zu erweitern. Der Client wird als Applet realisiert. Mit wenigen Ergänzungen ist er auch als Java-Applikation ablauffähig. Weitere Einzelheiten sind in der Methode main() zu finden. Die Initialisierung des ORBs wird in der Methode initconnection() vorgenommen. Analog zum Server sollen Sie hier die ORB-Initialisierung vollständig implementieren. Alle Einzelheiten sind im Kap zu finden. Achten Sie darauf, daß der Client sowohl als Applet als auch als Applikation verwendet werden kann. Das im Naming Service hinterlegte Objekt mit dem Namen "KontoManager" wird im Attribut kontomanager gespeichert, über das die Dienste von KontoManagerImpl genutzt werden kann. Das indivuelle Konto des Clients wird im Attribut konto geführt. Wie bekommt der Client eine Referenz auf dieses Konto? Schauen Sie sich die Methoden neueskontooeffnen() und kontoanmelden() an und vervollständigen Sie die Implementierung. Hier finden Sie die Lösung. Als GUI-Interface für den Client stehen die Klassen KontoNeuPanel, LoginPanel, MenuPanel, EinzahlenPanel, AbhebenPanel, KontenPanel und BankDialog zur Verfügung. Sie brauchen nicht weiter angepaßt werden. Als kleine Übung können Sie sich die Stellen heraussuchen, wo die Dienste des Servers genutzt werden. Die Namen der Panel- Klassen sagen schon relativ viel über ihre Funktionalitäten aus. Für das Java-Applet benötigen wir noch eine entsprechende HTML-Seite: <html> <body bgcolor=#aaaaaa> <center> <h1>corba-bank</h1> <hr> <applet code=bankclient width=370 height=400> <param name="org.omg.corba.orbinitialhost" value="localhost"> <param name="org.omg.corba.orbinitialport" value="6000"> </applet> </center> </body> </html> Zu beachten sind die Parameter ORBInitialHost und ORBInitialPort, über den der Client kommunizieren soll. Kopieren Sie sich den HTML-Code und speichern Sie ihn in die Datei BankClient.html ab. Damit wäre unser Client vollständig.

CORBA. Systemprogrammierung WS 2006-2007

CORBA. Systemprogrammierung WS 2006-2007 CORBA Systemprogrammierung WS 2006-2007 Teilnehmer: Bahareh Akherattalab Babak Akherattalab Inhaltsverzeichnis: Verteilte Systeme Vergleich zwischen lokale und verteilte Systeme Verteilte Anwendungen CORBA

Mehr

CORBA-Konzept. Ziele. Common Object Request Broker Architecture CORBA. Plattformunabhängige Kommunikation Transparente Verteilung von Objekten

CORBA-Konzept. Ziele. Common Object Request Broker Architecture CORBA. Plattformunabhängige Kommunikation Transparente Verteilung von Objekten CORBA-Konzept Ziele Common Object Request Broker Architecture CORBA Plattformunabhängige Kommunikation Transparente Verteilung von Objekten CORBA-Konzept Object Management Group Spezifiziert den CORBA-Standard

Mehr

CORBA. Beispiel einer Middleware-Plattform. Christian Fass WS 2013/14 Software Engineering: Basistechnologien

CORBA. Beispiel einer Middleware-Plattform. Christian Fass WS 2013/14 Software Engineering: Basistechnologien CORBA Beispiel einer Middleware-Plattform Christian Fass WS 2013/14 Software Engineering: Basistechnologien Allgemeines Common Object Request Broker Architecture Middleware: Vermittelt zwischen Obekten/Prozessen

Mehr

Parallele und Verteilte Systeme

Parallele und Verteilte Systeme Parallele und Verteilte Systeme Einführung in die Netzwerk Programmierung mit Java : JavaIDL Hello World (C) J.M.Joller 1 Zeitlicher Ablauf Hello World Übersicht IDL Interface Beschreibung Der Client (Der

Mehr

ObjectBridge Java Edition

ObjectBridge Java Edition ObjectBridge Java Edition Als Bestandteil von SCORE Integration Suite stellt ObjectBridge Java Edition eine Verbindung von einem objektorientierten Java-Client zu einer fast beliebigen Server-Komponente

Mehr

CORBA. Eine kurze Einführung. Common Object Request Broker Architecture. Ying Lu

CORBA. Eine kurze Einführung. Common Object Request Broker Architecture. Ying Lu CORBA Common Object Request Broker Architecture Eine kurze Einführung Ying Lu Verlauf der Präsentation Was ist CORBA CORBA-Architektur Ein Beispiel CORBA im Einsatz CORBA im Vergleich Was ist CORBA Begriffe

Mehr

Hello World from CORBA

Hello World from CORBA Hello World from CORBA ein erster Überblick Aufruf einer Objekt-Methode Client gettemperature() Thermometer Objekt- Implementation Thermometer th = new Thermometer(); double t = th.gettemperature(); th

Mehr

COMMON OBJECT REQUEST BROKER ARCHITECTURE. Dmytro Pyvovar Otto-von-Guericke Universität Magdeburg

COMMON OBJECT REQUEST BROKER ARCHITECTURE. Dmytro Pyvovar Otto-von-Guericke Universität Magdeburg COMMON OBJECT REQUEST BROKER ARCHITECTURE Dmytro Pyvovar Otto-von-Guericke Universität Magdeburg Gliederung Motivation Was ist CORBA? Object Management Architecture (OMA ) Interface Definition Language

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen

Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen 9 3 Web Services 3.1 Überblick Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen mit Hilfe von XML über das Internet ermöglicht (siehe Abb.

Mehr

Projektgruppe 453: Entwurf eines Managementwerkzeugs zur Verwaltung von Sicherheitsdiensten für komplexe eingebettete Dienstesysteme

Projektgruppe 453: Entwurf eines Managementwerkzeugs zur Verwaltung von Sicherheitsdiensten für komplexe eingebettete Dienstesysteme Titel CORBA Eine Middleware-Plattform für objektorientierte Technologien von Martin Villis 6. Mai 2004 Projektgruppe 453: Entwurf eines Managementwerkzeugs zur Verwaltung von Sicherheitsdiensten für komplexe

Mehr

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter Die Programmiersprache Java Dr. Wolfgang Süß Thorsten Schlachter Eigenschaften von Java Java ist eine von der Firma Sun Microsystems entwickelte objektorientierte Programmiersprache. Java ist......a simple,

Mehr

3.2 Der CORBA-Standard Common Object Request Broker Architecture

3.2 Der CORBA-Standard Common Object Request Broker Architecture 3.2 Der CORBA-Standard Common Object Request Broker Architecture (Bildquelle: OMG) Kapitel 3.2: Vorlesung CORBA 1 CORBA Middleware im Ueberblick G CORBA = Common Object Request Broker Architecture. Standard

Mehr

Modul Software Komponenten 10 Komponentenarchitektur

Modul Software Komponenten 10 Komponentenarchitektur 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:

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Einführung in Eclipse und Java

Einführung in Eclipse und Java Universität Bayreuth Lehrstuhl für Angewandte Informatik IV Datenbanken und Informationssysteme Prof. Dr.-Ing. Jablonski Einführung in Eclipse und Java Dipl.Inf. Manuel Götz Lehrstuhl für Angewandte Informatik

Mehr

Themen. Web Service - Clients. Kommunikation zw. Web Services

Themen. Web Service - Clients. Kommunikation zw. Web Services Themen Web Service - Clients Kommunikation zw. Web Services Bisher: Implementierung einer Java Anwendung und Bereitstellung durch Apache Axis unter Apache Tomcat Java2WSDL Erzeugen einer WSDL-Datei zur

Mehr

Übung: Verwendung von Java-Threads

Übung: Verwendung von Java-Threads Übung: Verwendung von Java-Threads Ziel der Übung: Diese Übung dient dazu, den Umgang mit Threads in der Programmiersprache Java kennenzulernen. Ein einfaches Java-Programm, das Threads nutzt, soll zum

Mehr

TeamSpeak3 Einrichten

TeamSpeak3 Einrichten TeamSpeak3 Einrichten Version 1.0.3 24. April 2012 StreamPlus UG Es ist untersagt dieses Dokument ohne eine schriftliche Genehmigung der StreamPlus UG vollständig oder auszugsweise zu reproduzieren, vervielfältigen

Mehr

Inhaltsverzeichnis. Zusammenfassung CORBA

Inhaltsverzeichnis. Zusammenfassung CORBA Inhaltsverzeichnis 1 Was und wofür ist CORBA?... 2 1.1 Problematik in Verteilten Systemen... 2 1.2 Entwurfszeile... 2 2 Zweck und Ziele von OMG?... 2 3 Was ist eine Schnittstellenarchitektur?... 2 3.1

Mehr

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering Zur Architektur der Applikation Data Repository Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering: Mit acht bewährten Praktiken zu gutem Code 2 Schichtarchitektur

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER Abamsoft Finos in Verbindung mit der Webshopanbindung wurde speziell auf die Shop-Software shop to date von DATA BECKER abgestimmt. Mit

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008 Konzeption und Implementierung einer automatisierten Testumgebung, 10. Dezember 2008 1 Gliederung Einleitung Softwaretests Beispiel Konzeption Zusammenfassung 2 Einleitung Komplexität von Softwaresystemen

Mehr

Übungen zu Softwaretechnik

Übungen zu Softwaretechnik Prof. Dr. Dr. h.c. M. Broy Lösungsblatt 11 Dr. H. Ehler, S. Wagner 23. Januar 2004 Übungen zu Softwaretechnik Aufgabe 16 Qualitätseigenschaften Broker-Pattern Beurteilen Sie das in Aufgabe 15 benutzte

Mehr

Kommunikations-Management

Kommunikations-Management Tutorial: Wie importiere und exportiere ich Daten zwischen myfactory und Outlook? Im vorliegenden Tutorial lernen Sie, wie Sie in myfactory Daten aus Outlook importieren Daten aus myfactory nach Outlook

Mehr

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge Ab der Version forma 5.5 handelt es sich bei den Orientierungshilfen der Architekten-/Objektplanerverträge nicht

Mehr

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle

Mehr

Objektbasierte Entwicklung

Objektbasierte Entwicklung Embedded Software Objektbasierte Entwicklung Objektorientierung in C? Prof. Dr. Nikolaus Wulff Objektbasiert entwickeln Ohne C++ wird meist C im alten Stil programmiert. => Ein endlose while-schleife mit

Mehr

Benutzeranleitung Superadmin Tool

Benutzeranleitung Superadmin Tool Benutzeranleitung Inhalt 1 Einleitung & Voraussetzungen... 2 2 Aufruf des... 3 3 Konto für neuen Benutzer erstellen... 3 4 Services einem Konto hinzufügen... 5 5 Benutzer über neues Konto informieren...

Mehr

TechNote. Produkt: TWINFAX 7.0 (ab CD_24), TWINFAX 6.0 Modul: SMTP, T611, R3 Kurzbeschreibung: Briefpapier- und Mailbodyunterstützung

TechNote. Produkt: TWINFAX 7.0 (ab CD_24), TWINFAX 6.0 Modul: SMTP, T611, R3 Kurzbeschreibung: Briefpapier- und Mailbodyunterstützung Produkt: TWINFAX 7.0 (ab CD_24), TWINFAX 6.0 Modul: SMTP, T611, R3 Kurzbeschreibung: Briefpapier- und Mailbodyunterstützung Diese Anleitung hilft Ihnen, das nachfolgend geschilderte Problem zu beheben.

Mehr

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt Inhaltsverzeichnis Aufgabe... 1 Allgemein... 1 Active Directory... 1 Konfiguration... 2 Benutzer erstellen... 3 Eigenes Verzeichnis erstellen... 3 Benutzerkonto erstellen... 3 Profil einrichten... 5 Berechtigungen

Mehr

Lizenzen auschecken. Was ist zu tun?

Lizenzen auschecken. Was ist zu tun? Use case Lizenzen auschecken Ihr Unternehmen hat eine Netzwerk-Commuterlizenz mit beispielsweise 4 Lizenzen. Am Freitag wollen Sie Ihren Laptop mit nach Hause nehmen, um dort am Wochenende weiter zu arbeiten.

Mehr

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

Mehr

Client/Server-Programmierung. CORBA: Schritt-für-Schritt Anleitung (Mini HOWTO)

Client/Server-Programmierung. CORBA: Schritt-für-Schritt Anleitung (Mini HOWTO) Client/Server-Programmierung WS 2007/08 CORBA: Schritt-für-Schritt Anleitung (Mini HOWTO) Version 1.2, 28.11.07 Schritt 1: Erstellung der IDL Zuerst muß eine IDL (Interface Definition Language)-Datei erstellt

Mehr

Aufruf der Weboberflache des HPM- Warmepumpenmanagers aus dem Internet TIPPS

Aufruf der Weboberflache des HPM- Warmepumpenmanagers aus dem Internet TIPPS Aufruf der Weboberflache des HPM- Warmepumpenmanagers aus dem Internet TIPPS Oktober 2015 Tipp der Woche vom 28. Oktober 2015 Aufruf der Weboberfläche des HPM-Wärmepumpenmanagers aus dem Internet Der Panasonic

Mehr

Guide DynDNS und Portforwarding

Guide DynDNS und Portforwarding Guide DynDNS und Portforwarding Allgemein Um Geräte im lokalen Netzwerk von überall aus über das Internet erreichen zu können, kommt man um die Themen Dynamik DNS (kurz DynDNS) und Portweiterleitung(auch

Mehr

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java Objektorientierte Programmierung mit Java Eine praxisnahe Einführung mit BlueJ Klassenentwurf Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? 1.0 Zentrale Konzepte

Mehr

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage .htaccess HOWTO zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage Stand: 21.06.2015 Inhaltsverzeichnis 1. Vorwort...3 2. Verwendung...4 2.1 Allgemeines...4 2.1 Das Aussehen der.htaccess

Mehr

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY Vorteile der Verwendung eines ACTIVE-DIRECTORY Automatische GEORG Anmeldung über bereits erfolgte Anmeldung am Betriebssystem o Sie können sich jederzeit als

Mehr

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Klausur zur Einführung in die objektorientierte Programmierung mit Java Klausur zur Einführung in die objektorientierte Programmierung mit Java im Studiengang Informationswissenschaft Prof. Dr. Christian Wolff Professur für Medieninformatik Institut für Medien-, Informations-

Mehr

Client/Server-Programmierung

Client/Server-Programmierung Client/Server-Programmierung WS 2014/2015 Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 15. Oktober 2015 Betriebssysteme / verteilte

Mehr

Client/Server-Programmierung

Client/Server-Programmierung Client/Server-Programmierung WS 2014/2015 Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 15. Oktober 2015 Betriebssysteme / verteilte

Mehr

Whitepaper. Produkt: combit Relationship Manager / address manager. Dateiabgleich im Netzwerk über Offlinedateien

Whitepaper. Produkt: combit Relationship Manager / address manager. Dateiabgleich im Netzwerk über Offlinedateien combit GmbH Untere Laube 30 78462 Konstanz Whitepaper Produkt: combit Relationship Manager / address manager Dateiabgleich im Netzwerk über Offlinedateien Dateiabgleich im Netzwerk über Offlinedateien

Mehr

4D Server v12 64-bit Version BETA VERSION

4D Server v12 64-bit Version BETA VERSION 4D Server v12 64-bit Version BETA VERSION 4D Server v12 unterstützt jetzt das Windows 64-bit Betriebssystem. Hauptvorteil der 64-bit Technologie ist die rundum verbesserte Performance der Anwendungen und

Mehr

Synchronisations- Assistent

Synchronisations- Assistent TimePunch Synchronisations- Assistent Benutzerhandbuch Gerhard Stephan Softwareentwicklung -und Vertrieb 25.08.2011 Dokumenten Information: Dokumenten-Name Benutzerhandbuch, Synchronisations-Assistent

Mehr

Task: Nmap Skripte ausführen

Task: Nmap Skripte ausführen Task: Nmap Skripte ausführen Inhalt Einfache Netzwerkscans mit NSE Ausführen des Scans Anpassung der Parameter Einleitung Copyright 2009-2015 Greenbone Networks GmbH Herkunft und aktuellste Version dieses

Mehr

Ein Tool zum Konvertieren von Pegasus Mail Adressbüchern und Verteilerlisten in Novell Groupwise Adressbücher.

Ein Tool zum Konvertieren von Pegasus Mail Adressbüchern und Verteilerlisten in Novell Groupwise Adressbücher. Ein Tool zum Konvertieren von Pegasus Mail Adressbüchern und Verteilerlisten in Novell Groupwise Adressbücher. Inhalt 1. Konvertieren von Adressbüchern und Verteilerlisten 1.1 Grundlagen 1.2 Adressbücher

Mehr

Clientkonfiguration für Hosted Exchange 2010

Clientkonfiguration für Hosted Exchange 2010 Clientkonfiguration für Hosted Exchange 2010 Vertraulichkeitsklausel Das vorliegende Dokument beinhaltet vertrauliche Informationen und darf nicht an Dritte weitergegeben werden. Kontakt: EveryWare AG

Mehr

EasyWk DAS Schwimmwettkampfprogramm

EasyWk DAS Schwimmwettkampfprogramm EasyWk DAS Schwimmwettkampfprogramm Arbeiten mit OMEGA ARES 21 EasyWk - DAS Schwimmwettkampfprogramm 1 Einleitung Diese Präsentation dient zur Darstellung der Zusammenarbeit zwischen EasyWk und der Zeitmessanlage

Mehr

Arbeiten mit UMLed und Delphi

Arbeiten mit UMLed und Delphi Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

TeamViewer App für Outlook Dokumentation

TeamViewer App für Outlook Dokumentation TeamViewer App für Outlook Dokumentation Version 1.0.0 TeamViewer GmbH Jahnstr. 30 D-73037 Göppingen www.teamviewer.com Inhaltsverzeichnis 1 Installation... 3 1.1 Option 1 Ein Benutzer installiert die

Mehr

COSIDNS 2 ISPconfig3. Version 0.1 (17.01.2013)

COSIDNS 2 ISPconfig3. Version 0.1 (17.01.2013) COSIDNS 2 ISPconfig3 Version 0.1 (17.01.2013) Das Modul verbindet das Hosting Panel ISPconfig3 mit der Domainverwaltung edns. Dies ermöglicht Ihnen Domains direkt aus ISPconfig3 heraus zu verwalten und

Mehr

Einführung in Javadoc

Einführung in Javadoc Einführung in Javadoc Johannes Rinn http://java.sun.com/j2se/javadoc Was ist Javadoc? Javadoc ist ein Werkzeug, dass eine standardisierte Dokumentation für die Programmiersprache Java unterstützt. Vorteil:

Mehr

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Suche schlecht beschriftete Bilder mit Eigenen Abfragen Suche schlecht beschriftete Bilder mit Eigenen Abfragen Ist die Bilderdatenbank über einen längeren Zeitraum in Benutzung, so steigt die Wahrscheinlichkeit für schlecht beschriftete Bilder 1. Insbesondere

Mehr

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2 EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0 EDV Kurs 13/2 Inhaltsverzeichnis 1 Objekte... 1 2 Klassen... 3 2.1 Beziehungen zwischen Klassen... 4 2.1.1 Vererbung... 4 2.1.2

Mehr

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Sichtbarkeit & statische Methoden Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Nicht sichtbare Methoden Wollen Eltern bestimmte Methoden vor den

Mehr

Um zu prüfen welche Version auf dem betroffenen Client enthalten ist, gehen Sie bitte wie folgt vor:

Um zu prüfen welche Version auf dem betroffenen Client enthalten ist, gehen Sie bitte wie folgt vor: Client-Installation ec@ros2 ASP-Server 1. Allgemeine Informationen Für den Einsatz von ec@ros2 ist auf den Clients die Software Java Webstart (enthalten im Java Runtime Environment (JRE)) notwendig. Wir

Mehr

VENTA KVM mit Office Schnittstelle

VENTA KVM mit Office Schnittstelle VENTA KVM mit Office Schnittstelle Stand: 24.05.2013 Version: VENTA 1.7.5 Verfasser: Jan Koska 1. Funktionsumfang der Office Schnittstelle Die in VENTA KVM integrierte Office Schnittstelle bietet zahlreiche

Mehr

Java Enterprise Architekturen Willkommen in der Realität

Java Enterprise Architekturen Willkommen in der Realität Java Enterprise Architekturen Willkommen in der Realität Ralf Degner (Ralf.Degner@tk-online.de), Dr. Frank Griffel (Dr.Frank.Griffel@tk-online.de) Techniker Krankenkasse Häufig werden Mehrschichtarchitekturen

Mehr

Softwaretechnologie -Wintersemester 2013/2014 - Dr. Günter Kniesel

Softwaretechnologie -Wintersemester 2013/2014 - Dr. Günter Kniesel Übungen zur Vorlesung Softwaretechnologie -Wintersemester 2013/2014 - Dr. Günter Kniesel Übungsblatt 3 - Lösungshilfe Aufgabe 1. Klassendiagramme (9 Punkte) Sie haben den Auftrag, eine Online-Videothek

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Über die Internetseite www.cadwork.de Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

Über die Internetseite www.cadwork.de Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt. Internet, Codes und Update ab Version 13 Um Ihnen einen möglichst schnellen Zugang zu den aktuellsten Programmversionen zu ermöglichen liegen Update-Dateien für Sie im Internet bereit. Es gibt drei Möglichkeiten

Mehr

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014) Anleitung Ein einfaches RMI-Beispiel (ab Java.0) c Y. Pfeifer (Juni 014) 1 Ein einfaches RMI-Beispiel Vorgehensweise: 1. Java Projekt anlegen. Zwei Packages server & client erstellen Auf der Server-Seite

Mehr

SANDBOXIE konfigurieren

SANDBOXIE konfigurieren SANDBOXIE konfigurieren für Webbrowser und E-Mail-Programme Dies ist eine kurze Anleitung für die grundlegenden folgender Programme: Webbrowser: Internet Explorer, Mozilla Firefox und Opera E-Mail-Programme:

Mehr

Artikel Schnittstelle über CSV

Artikel Schnittstelle über CSV Artikel Schnittstelle über CSV Sie können Artikeldaten aus Ihrem EDV System in das NCFOX importieren, dies geschieht durch eine CSV Schnittstelle. Dies hat mehrere Vorteile: Zeitersparnis, die Karteikarte

Mehr

Grundlagen von Python

Grundlagen von Python Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren

Mehr

Diese Anleitung beschreibt das Vorgehen mit dem Browser Internet Explorer. Das Herunterladen des Programms funktioniert in anderen Browsern ähnlich.

Diese Anleitung beschreibt das Vorgehen mit dem Browser Internet Explorer. Das Herunterladen des Programms funktioniert in anderen Browsern ähnlich. Die Lernsoftware Revoca Das Sekundarschulzentrum Weitsicht verfügt über eine Lizenz bei der Lernsoftware «Revoca». Damit können die Schülerinnen und Schüler auch zu Hause mit den Inhalten von Revoca arbeiten.

Mehr

Autoresponder Unlimited 2.0

Autoresponder Unlimited 2.0 Anleitung zur Installation und Anwendung Autoresponder Unlimited 2.0 Anleitung zur Installation und Anwendung Wie Ihr Autoresponder Unlimited 2.0 funktioniert Den Autoresponder Unlimited 2.0 installieren

Mehr

3. Stored Procedures und PL/SQL

3. Stored Procedures und PL/SQL 3. Stored Procedures und PL/SQL Wenn eine Anwendung auf einer Client-Maschine läuft, wird normalerweise jede SQL-Anweisung einzeln vom Client an den Server gesandt, und jedes Ergebnistupel wird einzeln

Mehr

Powermanager Server- Client- Installation

Powermanager Server- Client- Installation Client A Server Client B Die Server- Client- Funktion ermöglicht es ein zentrales Powermanager Projekt von verschiedenen Client Rechnern aus zu bedienen. 1.0 Benötigte Voraussetzungen 1.1 Sowohl am Server

Mehr

5 Projekt Bankverwaltung

5 Projekt Bankverwaltung Kapitel 5 Bankverwaltung (Lösung) Seite 1/7 5 Projekt Bankverwaltung 5.1 Festlegen der Schnittstelle Bevor du mit der Programmierung beginnst, musst du dir einige Gedanken über die Schnittstelle zwischen

Mehr

OP-LOG www.op-log.de

OP-LOG www.op-log.de Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server

Mehr

NetStream Helpdesk-Online. Verwalten und erstellen Sie Ihre eigenen Tickets

NetStream Helpdesk-Online. Verwalten und erstellen Sie Ihre eigenen Tickets Verwalten und erstellen Sie Ihre eigenen Tickets NetStream GmbH 2014 Was ist NetStream Helpdesk-Online? NetStream Helpdesk-Online ist ein professionelles Support-Tool, mit dem Sie alle Ihre Support-Anfragen

Mehr

CRM Client. Installation / Anmeldung. .BOSYS SOFTWARE GmbH

CRM Client. Installation / Anmeldung. .BOSYS SOFTWARE GmbH .BOSYS SOFTWARE GmbH CRM Client Installation / Anmeldung 2011.BOSYS SOFTWARE GMBH Normannenweg 28! DE 20537 Hamburg! Fon +49 (040) 25 33 22 0! Fax +49 (040) 25 33 22 499! www.bosys.info Kreissparkasse

Mehr

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 von Markus Mack Stand: Samstag, 17. April 2004 Inhaltsverzeichnis 1. Systemvorraussetzungen...3 2. Installation und Start...3 3. Anpassen der Tabelle...3

Mehr

Mobile und Verteilte Datenbanken

Mobile und Verteilte Datenbanken Mobile und Verteilte Datenbanken Java RMI Vorlesung Wintersemester 2013/2014 groppe@ifis.uni-luebeck.de Institut für Informationssysteme Universität zu Lübeck Kommunikations-Middleware Bietet höhere Kommunikations-Dienste

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22 Kapitel 19 Vererbung, UML Seite 1 von 22 Vererbung - Neben der Datenabstraktion und der Datenkapselung ist die Vererbung ein weiteres Merkmal der OOP. - Durch Vererbung werden die Methoden und die Eigenschaften

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

FastBill Automatic. Dokumentation Versand. FastBill GmbH. Holteyer Straße 30 45289 Essen Telefon 0201 47091505 Telefax 0201 54502360

FastBill Automatic. Dokumentation Versand. FastBill GmbH. Holteyer Straße 30 45289 Essen Telefon 0201 47091505 Telefax 0201 54502360 FastBill GmbH Holteyer Straße 30 45289 Essen Telefon 0201 47091505 Telefax 0201 54502360 FastBill Automatic Dokumentation Versand 1 Inhaltsverzeichnis: 1. Grundlegendes 2. Produkteinstellungen 2.1. Grundeinstellungen

Mehr

Client-Server-Beziehungen

Client-Server-Beziehungen Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server

Mehr

Workflow, Business Process Management, 4.Teil

Workflow, Business Process Management, 4.Teil Workflow, Business Process Management, 4.Teil 24. Januar 2004 Der vorliegende Text darf für Zwecke der Vorlesung Workflow, Business Process Management des Autors vervielfältigt werden. Eine weitere Nutzung

Mehr

Fassade. Objektbasiertes Strukturmuster. C. Restorff & M. Rohlfing

Fassade. Objektbasiertes Strukturmuster. C. Restorff & M. Rohlfing Fassade Objektbasiertes Strukturmuster C. Restorff & M. Rohlfing Übersicht Motivation Anwendbarkeit Struktur Teilnehmer Interaktion Konsequenz Implementierung Beispiel Bekannte Verwendung Verwandte Muster

Mehr

transfer.net Erste Schritte mit transfer.net

transfer.net Erste Schritte mit transfer.net Erste Schritte mit transfer.net Der transfer.net Speed Guide zeigt Ihnen in 12 kurzen Schritten anschaulich alles Wichtige vom Erwerb und Registrierung bis zur allgemeinen Nutzung von transfer.net. Es

Mehr

1. Sie können die zentrale Idee und Bedeutung einer Schnittstelle, wie sie schon im RPC verwendet wird, erklären.

1. Sie können die zentrale Idee und Bedeutung einer Schnittstelle, wie sie schon im RPC verwendet wird, erklären. CORBA Lernziele 1. Sie können die zentrale Idee und Bedeutung einer Schnittstelle, wie sie schon im RPC verwendet wird, erklären. Zentrale Idee: Schnittstelle: - mit einer Schnittstelle beschreibt man

Mehr

CodeSaver. Vorwort. Seite 1 von 6

CodeSaver. Vorwort. Seite 1 von 6 CodeSaver Vorwort Die Flut der Passwörter nimmt immer mehr zu. Kontopasswörter, Passwörter für Homepages, Shellzugriffe, Registrierungscodes für Programme und und und. Da ich aber nicht sonderlich viel

Mehr

Leitfaden zur Installation von Bitbyters.WinShutdown

Leitfaden zur Installation von Bitbyters.WinShutdown Leitfaden zur Installation von Bitbyters.WinShutdown für Windows 32 Bit 98/NT/2000/XP/2003/2008 Der BitByters.WinShutDown ist ein Tool mit dem Sie Programme beim Herunterfahren Ihres Systems ausführen

Mehr

Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer

Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Klassendiagramme Ein Klassendiagramm dient in der objektorientierten Softwareentwicklung zur Darstellung von Klassen und den Beziehungen,

Mehr

Corba. Common Object Request Broker Architecture. Von: Oliver Spiegel SoSem 2004. Seminar: Komponentenorientierte Softwareentwicklung

Corba. Common Object Request Broker Architecture. Von: Oliver Spiegel SoSem 2004. Seminar: Komponentenorientierte Softwareentwicklung Corba Common Object Request Broker Architecture Von: Oliver Spiegel SoSem 2004 Überblick Client/Server Technik Integration von bestehenden Softwaresystemen und Anwendungen Java-Unterstützung, um mobile,

Mehr

Anleitung Captain Logfex 2013

Anleitung Captain Logfex 2013 Anleitung Captain Logfex 2013 Inhalt: 1. Installationshinweise 2. Erste Schritte 3. Client-Installation 4. Arbeiten mit Logfex 5. Gruppenrichtlinien-Einstellungen für die Windows-Firewall 1. Installationshinweis:

Mehr

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen. Übersicht Struts Forms Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen. Allgemeines Autor: Sascha Wolski http://www.laliluna.de/tutorials.html

Mehr

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel ralf_gitzel@hotmail.de

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel ralf_gitzel@hotmail.de EJB Beispiel JEE Vorlesung 10 Ralf Gitzel ralf_gitzel@hotmail.de 1 Stundenkonzept Gemeinsame Übung Stoff der letzten Stunde wird gemeinsam in einem Beispiel umgesetzt Details werden nochmals erklärt bzw.

Mehr

MCRServlet Table of contents

MCRServlet Table of contents Table of contents 1 Das Zusammenspiel der Servlets mit dem MCRServlet... 2 1 Das Zusammenspiel der Servlets mit dem MCRServlet Als übergeordnetes Servlet mit einigen grundlegenden Funktionalitäten dient

Mehr