CORBA trifft Java

Wir haben alle auf Websites zugegriffen, auf denen wir mithilfe von HTML-Formularen und der Common Gateway Interface (CGI) mit einem Serverskript interagieren können. Websites verwenden diese Technik häufig, um eine Person zur Eingabe eines Benutzernamens und eines Kennworts aufzufordern, um sich bei einer Website anzumelden. Die Variablen Benutzername und Kennwort werden an ein Serverskript übergeben, das überprüft, ob ein bestimmter Benutzer tatsächlich auf bestimmte Teile einer Site zugreifen kann. Dieser Vorgang erfolgt über HTTP, das (wie Sie vielleicht wissen oder nicht wissen) zustandslos istProtokoll. Jedes Mal, wenn eine neue Seite geladen wird, werden Sie effektiv vom Server getrennt und es ist nicht bekannt, wer Sie sind und was Sie gerade tun. Daher muss jede Seite, auf die ab diesem Zeitpunkt zugegriffen wird, auch nach dem Anmelden an einer solchen Site den Benutzernamen und das Kennwort an den Server zurückgeben, um das Recht des Benutzers auf Zugriff auf die Seite zu überprüfen. Mit anderen Worten, Ihre Clientanwendung (der Webbrowser) und die Serveranwendung (der Webserver) haben kein Konzept für lokale Variablen, lokale Methodenaufrufe oder Objekte.

Unmittelbar nach dem jahrzehntelangen Kampf der Softwareentwickler, Code zu kapseln, als Objekte endlich erfolgreich zu sein schienen, fielen wir mit der Zeit in einen zustandslosen "Batch" -Modus zurück.

Es ist jedoch nicht alles schlecht. Das Web hat uns die revolutionären Vorteile standardbasierter, offener Protokolle und Plattformunabhängigkeit verschafft. Während Zehntausende von Websites HTTP und CGI verwenden, um Benutzerinformationen abzurufen, ein Skript auf dem Server auszuführen und möglicherweise zusätzliche Informationen an den Benutzer zurückzugeben, können diese Websites im herkömmlichen Sinne nicht als tatsächliche "Anwendungen" betrachtet werden . Darüber hinaus musste der gesamte Code für diese Websites aufgrund der neuen Technologien (HTTP und CGI) von Grund auf neu geschrieben werden. Um vorhandene Softwareanwendungen im Web nachzurüsten oder wirklich leistungsstarke neue Anwendungen mithilfe des Internets / Intranets als Kommunikations-Backbone zu erstellen, muss eine Technologie verwendet werden, die die folgenden "Heiligen Gral" -Attribute besitzt:

  • Unterstützung für Legacy-Code, der derzeit in C, C ++ und COBOL (unter anderem) vorhanden ist
  • Java-Unterstützung, um mobile, plattformunabhängige, objektorientierte Anwendungen zu erstellen
  • Herstellerneutralität, damit Anwendungen beibehalten werden und im Laufe der Zeit florieren können
  • Skalierbarkeit für eine große Anzahl von Benutzern
  • Breite Plattformunterstützung, um ein "Einrasten" der Plattform zu vermeiden
  • Ein objektorientiertes Entwicklungsparadigma (aufgrund der vielen Vorteile von OOP)
  • End-to-End-Sicherheit
  • Breite Unterstützung der Branche

Geben Sie CORBA ein.

Im Verlauf dieses Artikels werden Sie sehen, dass nur eine Technologie, CORBA, unsere Wunschliste (und noch einige mehr) wirklich erfüllt. Da Java und CORBA sehr komplementäre Technologien sind, können Sie außerdem schnell und kostengünstig mit der CORBA-Entwicklung in Java beginnen.

Eine kurze Einführung in CORBA

CORBA ist eine Spezifikation, die definiert, wie verteilte Objekte zusammenarbeiten können. Bis zur Explosion der Popularität des World Wide Web und insbesondere der Java-Programmiersprache war CORBA im Grunde eine High-End-Lösung für verteilte Objekte, die hauptsächlich von C ++ - Entwicklern verwendet wurde.

Die eigentliche CORBA-Spezifikation wird von der Object Management Group (OMG) kontrolliert, einem offenen Konsortium von mehr als 700 Unternehmen (einschließlich meines Arbeitgebers), die zusammenarbeiten, um offene Standards für das Objekt-Computing zu definieren. CORBA-Objekte können in jeder Programmiersprache geschrieben werden, die von einem CORBA-Softwarehersteller wie C, C ++, Java, Ada oder Smalltalk unterstützt wird. Diese Objekte können auch auf jeder Plattform vorhanden sein, die von einem CORBA-Softwarehersteller unterstützt wird, z. B. Solaris, Windows 95 / NT, OpenVMS, Digital Unix, HP-UX und AIX. Dies bedeutet, dass unter Windows 95 eine Java-Anwendung ausgeführt werden kann, die C ++ - Objekte, die im Internet auf einem Unix-Webserver gespeichert sind, dynamisch lädt und verwendet.

Die Sprachunabhängigkeit wird durch den Aufbau von Schnittstellen zu Objekten mithilfe der Interface Description Language (IDL) ermöglicht. Mit IDL können alle CORBA-Objekte auf dieselbe Weise beschrieben werden. Die einzige Voraussetzung ist eine "Brücke" zwischen der Muttersprache (C / C ++, COBOL, Java) und IDL. CORBA-Objekte kommunizieren über einen Object Request Broker (ORB) als Vermittler miteinander und können über viele gängige Netzwerkprotokolle (wie TCP / IP oder IPX / SPX) kommunizieren. ORBs verschiedener Anbieter kommunizieren über TCP / IP mithilfe des Internet Inter-Orb Protocol (IIOP), das Teil des CORBA 2.0-Standards (der neuesten Version) ist.

Derzeit sind ORBs von Drittanbietern für die gängigsten Programmiersprachen (einschließlich C ++, Smalltalk, Java und Ada95) verfügbar. Da andere Sprachen immer beliebter werden, werden CORBA-Anbieter zweifellos auch ORBs für diese Sprachen veröffentlichen.

Die OMG definierte ursprünglich 1990 die Object Management Architecture (OMA), um zu beschreiben, wie Anwendungen zusammenarbeiten können. Als Teilmenge dieses Ziels musste ein Standard festgelegt werden, um zu artikulieren, wie die Teile oder Objekte innerhalb von Anwendungen zusammenarbeiten können - somit die Geburtsstunde von CORBA. Die OMA definiert vier Hauptteile, aus denen eine CORBA-Installation bestehen kann:

  1. Der Object Request Broker fungiert als Software-Bus für die Kommunikation von Objekten.
  2. CORBAServices definieren Dienste auf Systemebene, die dem ORB hinzugefügt werden, z. B. Sicherheit, Benennung und Transaktionen.
  3. CORBAFacilities definiert Dienste auf Anwendungsebene, z. B. zusammengesetzte Dokumente und andere vertikale Einrichtungen.
  4. Geschäftsobjekte beschreiben reale Objekte und Anwendungen, z. B. ein Flugzeug oder ein Bankkonto.

Praktisch: CORBA-Entwicklung in Java

Um ein verteiltes Java-Applet zu erstellen, das mit CORBA auf Serverobjekte zugreift, verwenden wir einen beliebten kommerziellen ORB und definieren mithilfe der IDL Schnittstellen zu unseren Objekten. Das

Ressourcen

Der Abschnitt am Ende dieses Artikels enthält die Kontaktinformationen für mehrere beliebte CORBA-Anbieter. Für das Beispiel-Applet, das wir erstellen werden, habe ich mich für die Verwendung des Visigenic VisiBroker für Java entschieden. Dieser ORB wurde von verschiedenen Unternehmen lizenziert, darunter Oracle, Netscape und Novell, und ist in Netscape Navigator 4.0 enthalten.

Hinweis: Sie können dieses Applet in einem anderen Browser als Netscape Navigator 4.0 ausführen. Das Applet wird etwas langsamer gestartet, da mehrere zusätzliche Java-Klassendateien auf den Client heruntergeladen werden müssen.

Wir werden ein einfaches Java-Applet erstellen, das ein Serverobjekt mithilfe von CORBA instanziiert. Der Einfachheit halber wird dieses Serverobjekt auch in Java geschrieben. Das Serverobjekt speichert eine Reihe von Informationen zu verschiedenen CORBA ORB-Anbietern und deren Produkten. Das Client-Applet instanziiert das Objekt und fragt das Array ab, um den Bildschirm zu aktualisieren. Ein vollständigeres Beispiel (und eines, das Sie in Betracht ziehen sollten) wäre, die ORB-Informationen in einer relationalen Datenbank zu speichern und JDBC (oder ein anderes Mittel für den Datenbankzugriff) auf dem Server zu verwenden, um die angeforderten Informationen abzurufen. Dieser Ansatz würde mit CORBA eine echte dreistufige Anwendung erstellen.

Bevor wir mit der Erstellung der Anwendung beginnen, werden wir den ORB und die IDL, die zum Definieren der Schnittstelle zum Objekt verwendet werden, genauer untersuchen.

Der Object Request Broker im Detail

Das wichtigste Teil der Objektverwaltungsarchitektur ist der ORB. Der ORB ist der einzige Teil von CORBA, der vorhanden sein muss, um eine CORBA-kompatible Anwendung zu erstellen. Viele ORBs werden ohne CORBAServices oder CORBAFacilities ausgeliefert, und Sie müssen die Geschäftsobjekte selbst erstellen (oder kaufen). Ohne den ORB kann eine CORBA-Anwendung jedoch nicht funktionieren.

Die sichtbarste Funktion eines CORBA-ORB besteht darin, auf Anforderungen Ihrer Anwendung oder eines anderen ORB zu antworten. Während des Lebenszyklus Ihrer laufenden CORBA-Anwendung wird Ihr ORB möglicherweise aufgefordert, viele verschiedene Dinge zu tun, darunter:

  • Suchen und instanziieren Sie Objekte auf Remotecomputern
  • Marshal-Parameter von einer Programmiersprache (wie C ++) zu einer anderen Sprache (wie Java)
  • Behandeln Sie die Sicherheit über die lokale Grenze Ihres Computers hinweg
  • Abrufen und Veröffentlichen von Metadaten zu Objekten auf dem lokalen System für einen anderen ORB
  • Rufen Sie Methoden für ein entferntes Objekt mithilfe des statischen Methodenaufrufs auf, der von einem heruntergeladenen Stub beschrieben wird
  • Rufen Sie Methoden für ein entferntes Objekt mithilfe des dynamischen Methodenaufrufs auf
  • Starten Sie automatisch Objekte, die derzeit nicht aktiv sind
  • Leiten Sie Rückrufmethoden an das entsprechende lokale Objekt weiter, das verwaltet wird

Das Tolle am ORB ist, dass fast alle Implementierungsdetails für all diese Aufgaben dem Softwareentwickler verborgen bleiben. Durch einfaches Bereitstellen der entsprechenden "Hooks" in Ihrem Code zum Initialisieren des ORB und Registrieren Ihrer Anwendung beim ORB wird Ihre Anwendung für eine große Galaxie verteilter Objekte geöffnet.

Objekte mit IDL beschreiben

Damit CORBA seine herstellerneutrale und sprachneutrale Position beibehalten kann, muss beispielsweise ein Vermittler zwischen C ++ CORBA-Servercode und einem Java CORBA-Client vorhanden sein. Dieser Vermittler ist, wie Sie wissen, die IDL. Verwandte Methoden und Eigenschaften, die von einem zugrunde liegenden Objekt unterstützt werden, werden mithilfe von IDL zu einer einzigen Schnittstelle zusammengefasst. Sobald die IDL-Schnittstelle vollständig ist, kann sie in Form von Stub- und Skeleton-Code in die Sprache Ihrer Wahl kompiliert werden. IDL-Compiler sind in allen ORBs enthalten. Zum Beispiel ist ein Java / IDL-Compiler im Visigenic VisiBroker für Java ORB enthalten, während ein C ++ / IDL-Compiler im Visigenic VisiBroker für C ++ ORB enthalten ist.

Beachten Sie, dass die Arbeit mit IDL viel einfacher ist als mit einer objektorientierten Standardprogrammiersprache, da IDL nicht zur Angabe der tatsächlichen Implementierung von Klassen oder der darin enthaltenen Methoden verwendet werden kann. Stattdessen wird IDL nur verwendet, um die Schnittstelle zu den zugrunde liegenden Objekten zu beschreiben .

Nachdem Sie diesen Abschnitt gelesen haben, sind Sie mit der Sprache vertraut genug, um die später in diesem Artikel vorgestellten Beispiele zu verstehen. Eine ausführlichere Darstellung von IDL finden Sie auf der OMG-Website. (Siehe den Abschnitt Ressourcen unten.)

So wie Eigenschaften und Methoden in Java in verwandten Klassen zusammengefasst sind, sind diese Elemente in Modulen in IDL enthalten. Innerhalb jedes IDL-Moduls können eine oder mehrere Schnittstellen definiert sein. Listing 1 zeigt ein einfaches IDL-Modul namens TheModule, das eine grundlegende Schnittstelle namens TheInterface enthält. Diese Schnittstelle enthält eine einzelne Variable (natürlich TheVariable), die als ganzzahliger Wert definiert ist.

Listing 1: Das einfachste mögliche IDL-Modul

Modul TheModule {Schnittstelle TheInterface {long TheVariable; }; };

Wenn Sie dieses IDL-Modul mit einem IDL-zu-Java-Compiler (wie z. B. idl2java von Visigenic) kompilieren, erhalten Sie die in Listing 2 gezeigte Java-Schnittstelle.

Listing 2: Das Java-Äquivalent von TheModule

Paket TheModule; öffentliche Schnittstelle TheInterface {public int TheVariable; }}

Das ORBQuery-Applet

Nachdem Sie ein grundlegendes Verständnis für einen ORB und eine IDL haben, können wir unser ORBQuery-Applet erstellen. Das Client-Applet besteht aus einer Standard-Java-GUI und instanziiert ein entferntes CORBA-Objekt. Sobald dieses Objekt instanziiert wurde, können seine Methoden aufgerufen werden, um Informationen zu einem bestimmten CORBA-ORB zu ermitteln. Auf der Serverseite müssen fünf Methoden definiert werden, um die folgenden Informationen zu einem bestimmten ORB abzurufen: Name, Anbieter, Betriebssystem, Sprachen und URL. Daher müssen wir eine IDL-Schnittstelle erstellen, die fünf Methoden zum Abrufen dieser Informationen definiert. Diese Schnittstelle,

ORBInfo

ist in Listing 3 definiert.

Listing 3: Die ORBInfo IDL-Schnittstelle

module ORBQuery { interface ORBInfo { string GetName(in long index); string GetVendor(in long index); string GetOS(in long index); string GetLanguages(in long index); string GetURL(in long index); }; }; 

The VisiBroker installation includes an IDL compiler, idl2java, that you can use to generate the necessary Java code required to implement this interface. Once you've installed the package, simply execute the following command to generate the code:

idl2java ORBInfo.idl

This operation will create a subdirectory named ORBQuery (corresponding to the ORBQuery Java package). Within this directory, there are eight files: ORBInfo.java, ORBInfoHolder.java, ORBInfoHelper.java, _st_ORBInfo.java, _sk_ORBInfo.java, ORBInfoOperations.java, _tie_ORBInfo.java, and _example_ORBInfo.java. As you might have guessed, the ORBInfo.java file contains the Java version of the ORBInfo interface declaration, but what do the other Java classes do?

The ORBInfoHolder.java file contains a holder class used when passing parameters, while the ORBInfoHelper class defines various utility functions. The _st_ORBInfo class defines the client stub, while the _sk_ORBInfo class defines the server skeleton class. The ORBInfoOperations and _tie_ORBInfo classes are used to implement a tie mechanism, a VisiBroker feature designed to allow the implementation class to inherit from a class other than the skeleton class. We will not use these classes directly within this example. Finally, _example_ORBInfo contains a sample server object that can be extended to build the server application.

Wenn Sie es noch nicht zusammengestellt haben, haben uns die acht vom IDL-Compiler erstellten Java-Klassen ein Framework (in Form von Hilfsklassen, einem Stub, einem Skelett und einer Schnittstelle) zum Erstellen unseres eigenen Client / Server-CORBA gegeben Anwendung in Java.

Erstellen der Serveranwendung