DE69615978T2 - Verfahren und Vorrichtung zum Verpackung und Entpackung von Daten in objectreferenzspezifischen Datenformaten anhand generischen Stubs - Google Patents
Verfahren und Vorrichtung zum Verpackung und Entpackung von Daten in objectreferenzspezifischen Datenformaten anhand generischen StubsInfo
- Publication number
- DE69615978T2 DE69615978T2 DE69615978T DE69615978T DE69615978T2 DE 69615978 T2 DE69615978 T2 DE 69615978T2 DE 69615978 T DE69615978 T DE 69615978T DE 69615978 T DE69615978 T DE 69615978T DE 69615978 T2 DE69615978 T2 DE 69615978T2
- Authority
- DE
- Germany
- Prior art keywords
- orb
- code
- program
- code mechanism
- call
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
- G06F9/548—Object oriented; Remote method invocation [RMI]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
- Multi Processors (AREA)
Description
- Die vorliegende Erfindung betrifft die Bereiche verteilte Rechnersysteme, Client-Server-Rechner und objektorientierte Programmierung.
- Die vorliegende Erfindung betrifft insbesondere ein Verfahren und eine Vorrichtung zum Bereitstellen von Programmmechanismen, mit denen generische Stubs Daten in Objektreferenz-spezifischen Datenformaten marshalieren und zurückmarshalieren.
- Ein Hauptproblem in modernen objektorientierten verteilten Verarbeitungssystemen besteht darin, es Objektanwendungen zu erlauben, mit einem neuen Object Request Broker ("ORB") zu kommunizieren, der sein eigenes individuelles Datenformat hat, mit nur geringfügigen Modifikationen an den unterstützenden Codemechanismen. Ebenso sollten Client-Anwendungen und -Stubs in der Lage sein, nahtlos mit verschiedenen ORBs in einem System zu kommunizieren, das mit einer Vielzahl von ORBs kommunizieren kann, wobei jeder der ORBs sein eigenes individuelles Datenformat hat.
- So ist beispielsweise die Object Management Group (OMG) eine Industriestandard-Organisation, die Multivendor-Normen für verteilte objektorientierte Programmierung schafft. Einer der Ecksteine der OMG-Arbeit war die Definition einer gemeinsamen Interface Definition Language, IDL genannt, die heute weitverbreitet standardmäßig für die Definition von Schnittstellen zu Netzwerkobjektene unabhängig von den jeweiligen verwendeten Netzwerkprotokollen oder der jeweiligen; von den Clients und Servers verwendeten Programmiersprache eingesetzt wird.
- Die IDL-Sprache ist objektorientiert und unterstützt mehrfache Vererbung. Sie weist einen reichhaltigen Satz an eingebauten primitiven Typen (wie z. B. Task- Intervalle, boolesche Verknüpfungen usw.) auf und definiert auch einen Satz strukturierter Typen wie z. B. Structs, Vereinigungen und Sequenzen.
- Die Object Management Group standardisierte die IDL- Schnittstellendefinitionssprache als einheitliche Art und Weise der Definition von Schnittstellen zu Netzwerkobjekten. Die OMG ließ jedoch zunächst das On-the-Wire- Protokoll und die Datenformate undefiniert. In Folge dessen implementierten unterschiedliche Vendoren ORBs mit verschiedenen Protokollen und Datenformaten.
- Die OMG hat sich kürzlich auf ein gemeinsames ORB- Interoperabilitätsprotokoll geeinigt, das Universal Networked Objects (UNO) Protokoll. Dies wird jedoch vornehmlich als Gateway-Protokoll für die Verbindung von Objektsystemen von verschiedenen Vendoren angesehen. Es scheint, dass verschiedene Vendoren wenigstens kurzfristig ihre existierenden Protokolle zur Erhöhung der Leistungen innerhalb ihrer eigenen Objektsysteme wahrscheinlich weiter verwenden und UNO-Gateways niedrigerer Leistung zu anderen ORBs unterstützen. Somit besteht derzeit der Bedarf, es Objektanwendungen zu erlauben, auf transparente Weise mit diesen ORBs mit verschiedenen Protokollen und Datenformaten zu kommunizieren.
- Eine weitergehende Beschreibung der objektorientierten Design- und Programmierungstechniken befindet sich in "Object-oriented Software Construction" von Bertrand Meyer, Prentice-Hall 1988. Weitere Informationen über OMG, CORBA, ORBs und IDL siehe "Common Object Request Broker: Architecture and Specification", Revision 2.0, Juli 1955.
- Momentan sind Internet-Browser im Hinblick auf ihre Fähigkeit, mit Netzwerk-Servern zu interagieren, sehr begrenzt. Ein Browser wie beispielsweise Mosaic lädt gewöhnlich ein HTML-Dokument herunter und wartet dann passiv, bis ein menschlicher Benutzer entweder ein anderes Dokument wählt oder Informationen im HTML-Format eingibt, die dann zurück zum Server geleitet werden.
- Zwei neue Entwicklungen sehen vielversprechend aus, um das Internet zu einer dynamischeren Umgebung zu machen. Die erste ist die Unterstützung für Skriptsprachen in Internet-Browsern (wie z. B. die nachfolgend beschriebene JAVA- Sprache von Sun Microsystems, Inc. (SUN), so dass ein Browser interaktive Skripte herunterladen und ausführen kann. Damit sind dann Browser nicht mehr nur passive Betrachter, sondern sie werden zu dynamischen Agenten, die mit dem Internet für einen Benutzer interagieren und sich rasch ändernde Informationen anzeigen können. Die zweite Entwicklung ist die weit verbreitete Übernahme der verteilten Objektschnittstellen auf der Basis der IDL-Schnittstellendefinitionssprache der Object Management Group. Dies ergibt eine Standardmöglichkeit für Netzwerk-Server, um Dienste wie "Netzwerkobjekte" in einer sprach- und vendorunabhängigen Weise zu exportieren. So wird es weitaus leichter, Netzwerkdienste zu erstellen, auf die transparent von verschiedenen Client-Umgebungen aus zugegriffen werden kann.
- Die EP-0604010 offenbart eine Vorrichtung und ein Verfahren, umfassend ein Logikmodul mit der Bezeichnung Subcontract, das die Aufgabe hat, die Basismechanismen von Objektaufruf und Argumentweiterleitung zu steuern, die in verteilten Systemen am Wichtigsten sind, und zwar auf eine Weise, die es Objektimplementoren erleichtert, einen existierenden Subcontract auszuwählen und zu verwenden, und die es den Anwendungsprogrammierern erlaubt, keine Kenntnis über die spezifischen Subcontracts zu haben, die für bestimmte Objekte verwendet werden.
- Dazu gehört ein neuer Objekttyp, als "Spring-Objekt" bezeichnet, der eine Methodentabelle, einen Subcontract-Mechanismus und eine Datenstruktur beinhaltet, die den lokalen Privatzustand des Subcontracts repräsentiert.
- Jeder Subcontract enthält einen clientseitigen Teil und einen zugehörigen serverseitigen Teil. Jeder Objekttyp hat einen assoziierten Subcontract. Der clientseitige Teil eines Subcontracts hat die Fähigkeit, ein neues Spring-Objekt zu erzeugen, ein Spring-Objekt zu löschen, Informationen über sein assoziiertes Objekt in einen Kommunikationspuffer zu marshalieren, Daten in einem Kommunikationspuffer, der ein assoziiertes Objekt repräsentiert, zurückzumarshalieren, einen Kommunikationspuffer zu seinem assoziierten serverseitigen Subcontract zu senden, was entweder das Senden eines Objekts von einem Ort zum anderen oder das Senden einer Kopie eines Objekts von einem Ort zum anderen beinhaltet. Der serverseitige Teil des Subcontract-Mechanismus beinhaltet die Fähigkeit, ein Spring-Objekt zu schaffen, Unterstützung für die Verarbeitung eingehender Rufe und zugehöriger Kommunikationspuffer sowie Unterstützung für die Revokation eines Objekts bereitzustellen.
- Hierzu gehören auch Methoden für die Verwendung von Subcontracts zum Verarbeiten von Objektaufrufen, einschließlich des Weiterleitens von Argumenten, wobei diese Argumente an sich Objekte sein können, in einem verteilten Computersystem, wobei sich die Client-Anwendungen auf anderen Computern als die Objektimplementationen befinden können.
- Die EP-0643349 offenbart eine Vorrichtung und ein Verfahren, umfassend Logikmodule, die als clientseitige Stubgeneratoren bezeichnet werden, eine Datenbank für komprimierten clientseitigen Stub-Ausführungscode und einen clientseitigen Stub-Interpreter, die die Aufgabe haben, den von clientseitigen Stubs benötigten Speicherraum zu minimieren und gleichzeitig das Design von Stubs zu behalten, um die Steuerung der Basismechanismen von Objektaufruf und Argumentweiterleitung bereitzustellen, die in verteilten Systemen am Wichtigsten sind, so dass Anwendungsprogrammierer die spezifischen Stubs nicht zu kennen brauchen, die für bestimmte Objekte verwendet werden.
- Der zum Reduzieren dieses Speicherraums verwendete Mechanismus umfasst einen Stub-Generator ("CONTOCC" genannt) zum Erzeugen einer Datenbank aus komprimierten clientseitigen Stub-Beschreibungsdateien, die im Computerspeicher gespeichert sind, und einen Stub-Interpreter, der weiß, wie diese clientseitigen Stub- Beschreibungsdateien zu lesen sind. CONTOCC liest Dateien in der Schnittstellendefinitionssprache ("IDL") und erzeugt entsprechende C++ Dateien. CONTOCC hat die Fähigkeit, die IDL-Daten zu lesen und entweder unkomprimierte C++ Stub-Dateien oder die speziellen komprimierten clientseitigen Stub-Interpreter- Dateien zu erzeugen, die nur diejenigen Daten enthalten, die für das in der Bytekodierten Form beteiligte jeweilige Stub-Verfahren individuell sind.
- Das Stub-Interpreter-Logikmodul empfängt ein Zielobjekt, Argumente in Bezug auf das jeweilige aufgerufene Stub-Verfahren sowie einen Zeiger auf die komprimierten Byte-Code-Repräsentationen des Stub-Codes in der Datenbank von komprimierten clientseitigen Stub-Beschreibungsdateien, die im Computerspeicher gespeichert sind, und fährt mit der Ausführung von Objektaufruf, Marshalieren oder Zurückmarshalieren von Rückgabemeldungen nach Bedarf fort.
- Java ist eine stark typisierte objektorientierte Sprache mit einer C-ähnlichen Syntax. Der Java-Compiler und die Laufzeit-Code-Mechanismen gewährleisten Typensicherheit, so dass es keine Wild-Pointers oder anderen Referenzen gibt, die das Typensystem der Sprache verletzen. So gibt es beispielsweise kein "Void*" (Leerstellen), und alle Casts werden in Laufzeit validiert.
- Die Java-Sprache wird typischerweise in maschinenunabhängige Byte-Codes kompiliert, danach interpretiert eine virtuelle Java-Maschine diese Byte-Codes, um das Java-Programm auszuführen. Java kann in Netzwerk-HTML-Browser integriert werden, so dass im Rahmen des Betrachtens eines Dokumentes ein Satz von Java- Byte-Codes heruntergeladen und dann auf der Client-Maschine ausgeführt werden kann. Da Java vollständig typensicher ist, kann der Client-Browser sicher sein, dass das Java-Programm sicher ausgeführt werden kann, ohne dass Sicherheit oder Integrität des Clients gefährdet werden. Java ist ausführlicher in "The Java Language Specification", Release 1.0 Alpha3, von Sun Microsystems, Inc. vom 11. Mai 1995 beschrieben.
- Skriptsprachensysteme wie Java erzeugen Java-Programme, die portabel entwickelt sind und in einer Reihe verschiedener Umgebungen eingesetzt werden können. Es ist daher wünschenswert, dass Java-Programme verschiedene ORBs verwenden können, ohne dass das Java-Programm auf irgendeine Weise geändert werden müßte. Da die erzeugten Stubs Teil des Java-Programms sind, ist es notwendig, dass die Stubs ORB-unabhängig sind, so dass das Java-Programm und seine assoziierten Stubs in beliebigen aus einer Vielzahl von ORBs verwendet werden können.
- Die vorliegende Offenbarung beschreibt eine Lösung für das Grundproblem durch Erzeugen einer generischen Schnittstelle zwischen den Stubs und ORB- spezifischen Datenmechanismen. Diese ORB-spezifischen Datenmechanismen beinhalten ein oder mehrere MarshalBuffer-Objekte, die Methoden zum Marshalieren und Zurückmarshalieren von einem oder mehreren bestimmten ORB-bezogenen On- the-Wire-Datenformaten haben, sowie ein Verfahren und eine Vorrichtung zum Verwenden einer Objektreferenz (Objref), um das jeweilige MarshalBuffer-Objekt für die Verwendung für diesen bestimmten Objektaufruf anzuzeigen.
- Die vorliegende Erfindung stellt eine elegante und einfache Möglichkeit bereit, um Mechanismen für den Aufruf von Objekten durch Client-Anwendungen sowie für Argumentweiterleitungen zwischen Client-Anwendungen und Objektimplementationen bereitzustellen, ohne dass die Client-Anwendung oder das Betriebssystem die Einzelheiten der Arbeitsweise dieser Mechanismen kennt. Darüber hinaus arbeiten diese Mechanismen in einer verteilten Computer-Umgebung mit ähnlicher Leichtigkeit und Effizienz, wobei Client-Anwendungen ein Computer- Knoten und Objektimplementationen aufeinander sein können.
- In einem Aspekt der Erfindung wird ein Computersystem mit einem Prozessor, einem Speicher, einem Anzeigegerät, einem Ein-Ausgabegerät und einem Betriebssystem (OS) zum Verarbeiten von Aufrufen von Programmcodemechanismen bereitgestellt, die an einen aus einer Vielzahl von ortsfernen Objekt Request Brokern (ORBs) gerichtet sind, dadurch gekennzeichnet, dass das Computersystem ferner folgendes umfasst:
- eine ORB-unabhängige Schicht von Codemechanismen einschließlich Programmanwendungen und zugehörigen Stubs; und
- eine ORB-abhängige Schicht von Codemechanismen, die mit der ORB- unabhängigen Schicht gekoppelt ist, wobei die ORB-abhängige Schicht folgendes umfasst:
- Programmcodemechanismen, die ORB-spezifisch und so konfiguriert sind, dass sie einen Marshal-Codemechanismus zum Marshalieren (Einsortieren) von Daten in einem von dem ORB benötigten Format zu erzeugen, und
- Programmcodemechanismen, die so konfiguriert sind, dass sie einen spezifischen Netzwerkprotokollcode verwenden, so dass ein Programmanwendungscode-Mechanismus von der ORB-unabhängigen Schicht einen Aufruf an einen ortsfernen Implementationsprogrammcode-Mechanismus einleiten kann, und die ORB-spezifischen Programmcodemechanismen in der ORB-abhängigen Schicht einen geeigneten Marshal-Codemechanismus ermitteln, um Daten in einem vom ORB benötigten Format zu marschalieren;
- so dass ein Computersystem entsteht, das mit einer Vielzahl von ORBs kommunizieren kann, wobei jeder ORB ein spezielles Datenformat verlangt. In einem weiteren Aspekt der Erfindung wird ein Verfahren zum Betreiben eines Computersystems mit einem Prozessor, einem Speicher, einem Display, einem Ein-Ausgabemechanismus, einem Betriebssystem und wenigstens einem Client- Anwenderprogramm, einem oder mehreren Stub-Programmen in Bezug auf die Client-Anwendung bereitgestellt, wobei das mit dem Computer durchgeführte Verfahren durch die folgenden Schritte gekennzeichnet ist:
- Einleiten eines Aufrufs an einen Programmimplementationscode- Mechanismus, wobei der Aufruf durch eine Client-Anwendung erfolgt, wobei der Aufruf eine Referenz auf den Programmimplementationscode-Mechanismus beinhaltet;
- Verwenden eines Stubprogrammcode-Mechanismus, der sich auf die Client- Anwendung zum Empfangen des Aufrufs bezieht, wobei der Stubprogrammcode- Mechanismus das Format nicht kennt, das zum Marshalieren von Daten benötigt wird, die von der Client-Anwendung in Verbindung mit der Aufrufeinleitung bereitgestellt werden;
- Aufrufen eines ersten spezifischen Programmcodemechanismus durch den Stubprogrammcode-Mechanismus, Anfordern des ersten spezifischen Programmcodemechanismus zur Bereitstellung eines MarshalBuffer- Codemechanismus, der weiß, wie von der Client-Anwendung bereitgestellte Daten in Verbindung mit dem Aufruf formatiert werden;
- Marshalieren der von der Client-Anwendung bereitgestellten Daten in Verbindung mit dem Aufruf, wobei die Marshalierung vom Stubprogrammcode- Mechanismus mit Hilfe des MarshalBuffer-Codemechanismus erfolgt; und Senden des Aufrufs zu einem Server, der den Programmimplementationscode- Mechanismus enthält, der das Ziel des Rufs ist.
- In einem weiteren Aspekt der Erfindung wird ein Computerprogrammprodukt bereitgestellt, umfassend: ein in einem Computersystem benutzbares Speichermedium, in dem rechnerlesbarer Code eingebettet ist, mit dem veranlasst werden kann, dass ein Computersystem Programmcodemechanismus-Aufrufe verarbeitet, die an einen aus einer Vielzahl von ortsfernen Object Request Brokern (ORBs) gerichtet sind, wobei das Computerprogrammprodukt gekennzeichnet ist durch:
- einen ersten rechnerlesbaren Programmcodemechanismus, der so konfiguriert ist, dass er eine ORB-unabhängige Schicht von Codemechanismen umfasst, einschließlich Client-Anwendungen und zugehörigen Stubprogrammcode- Mechanismen; und
- einen zweiten rechnerlesbaren Programmcodemechanismus, der so konfiguriert ist, dass er eine ORB-abhängige Schicht von Codemechanismen umfasst, die mit der ORB-unabhängigen Schicht gekoppelt sind, wobei die ORB-abhängige Schicht Programmcodemechanismen umfasst, die ORB-spezifisch und so konfiguriert sind, dass sie einen Marshal-Codemechanismus zum Marshalieren von Daten in einem vom ORB benötigten Format erzeugt, und Programmcodemechanismen, die so konfiguriert sind, dass sie einen spezifischen Netzwerkprotokollcode benutzen, so dass ein Programmanwendungscode-Mechanismus von der ORB-unabhängigen Schicht einen Ruf auf einem ortsfernen Implementationsprogrammcodemechanismus einleiten kann, und die ORB-spezifischen Programmcodemechanismen in der ORB- abhängigen Schicht einen geeigneten Marshal-Codemechanismus zum Marshalieren von Daten in einem vom ORB benötigten Format bestimmen, so dass ein Computersystem bereitgestellt wird, das in der Lage ist, mit einer Vielzahl von ORBs zu kommunizieren, wobei jeder ORB Daten in einem bestimmten Format verlangt.
- Die vorliegende Erfindung wird nachfolgend beispielhaft unter Bezugnahme auf die Begleitzeichnungen näher beschrieben. Dabei zeigt:
- Fig. 1 die Konfiguration eines typischen Computerhardwaresystems, das mit und im Rahmen der vorliegenden Erfindung eingesetzt wird;
- Fig. 2 die Beziehung von Client- und Server-Anwendungen des Standes der Technik zu Stubs und Netzsoftware;
- Fig. 3 ein System, das Java ORB-Klassen illustriert;
- Fig. 4 die Beziehung zwischen Stub-Objekten, ORB-spezifischen Code/Subcontract-Mechanismen sowie Server-Anwendungsobjekten in einem einzelnen ORB-System;
- Fig. 5 Fern-Objektaufruf mit ORB-spezifischen Code/Subcontracts, ORB- spezifischen MarshallBuffer-Mechanismen in einem Multi-ORB-System;
- Fig. 6 einen beispielhaften MarshallBuffer-Codemechanismus;
- Fig. 7 einen spezifischeren Fernobjektaufruf mit ORB-spezifischen Code/Subcontracts, ORB-spezifischen MarshallBuffer-Mechanismen in einem Multi- ORB-System.
- Die nachfolgenden ausführlichen Beschreibungen können im Sinne von Programmprozeduren dargestellt werden, die auf einem Computer oder einem Netzwerk von Computern ausgeführt werden. Diese Prozedurbeschreibungen und - darstellungen sind das Mittel, mit dem die Fachperson die Substanz ihrer Arbeit anderen Fachpersonen auf effektivste Weise übermittelt.
- Eine Prozedur wird hier und allgemein als eine in sich einheitliche Sequenz von Schritten angesehen, die zu einem gewünschten Ergebnis führen. Diese Schritte sind diejenigen, die physikalische Manipulationen physikalischer Quantitäten erfordern. Diese Quantitäten haben gewöhnlich, aber nicht unbedingt, die Form von elektrischen oder magnetischen Signalen, die gespeichert, übertragen, kombiniert, verglichen und auf andere Weise manipuliert werden können. Es ist zuweilen praktisch, hauptsächlich aus Gründen des allgemeinen Gebrauchs, diese Signale als Bits, Werte, Elemente, Symbole, Zeichen, Terme, Zahlen oder dergleichen zu bezeichnen. Es ist jedoch zu bemerken, dass alle diese und ähnliche Terme mit den entsprechenden physikalischen Quantitäten assoziiert werden müssen und lediglich praktische Bezeichnungen für diese Quantitäten sind.
- Ferner werden die durchgeführten Manipulationen häufig mit Begriffen bezeichnet, wie z. B. Addieren oder Vergleichen, die allgemein mit mentalen Vorgängen assoziiert werden, die von einem menschlichen Operator ausgeführt werden. Es ist keine solche Fähigkeit eines menschlichen Operators in den hier beschriebenen Vorgängen, die Teil der vorliegenden Erfindung darstellen, notwendig oder in den meisten Fällen auch nur wünschenswert; die Vorgänge sind Maschinenvorgänge. Nützliche Maschinen für die Durchführung der Vorgänge der vorliegenden Erfindung beinhalten universelle digitale Computer oder ähnliche Geräte.
- Die vorliegende Erfindung bezieht sich auch auf eine Vorrichtung zum Ausführen dieser Vorgänge. Diese Vorrichtung kann speziell für die gewünschten Zwecke konstruiert werden oder sie kann einen Universalcomputer umfassen, der selektiv von einem im Computer gespeicherten Computerprogramm aktiviert oder umkonfiguriert wird. Die hierin dargestellten Prozeduren beziehen sich nicht automatisch auf einen bestimmten Computer oder eine andere bestimmte Vorrichtung. Verschiedene Universalmaschinen können mit Programmen verwendet werden, die gemäß den hierin gegebenen Lehren geschrieben wurden, oder es kann sich als praktischer erweisen, spezialisiertere Vorrichtungen zu konstruieren, die die gewünschten Verfahrensschritte ausführen. Die benötigte Struktur für eine Auswahl dieser Maschinen geht aus der nachfolgenden Beschreibung hervor.
- Die nachfolgende Offenbarung beschreibt Lösungen für die Probleme, denen Designer von objektorientierten Systemen bei dem Versuch begegnen, Schemata für Objektaufrufe und Argumentweiterleitungen in verteilten Systemen zu implementieren, wobei die Argumente Objekte sein können, auf Arten und Weisen, die das objektorientierte Basissystem nicht an Methoden binden, die sich später schwer ändern lassen. Darüber hinaus beschreibt die offenbarte Erfindung einen "MarshalBuffer-Mechanismus", der Vorgänge (im objektorientierten Programmierjargon als "Methoden" bezeichnet) zum Marshalieren von Daten für einen spezifischen ORB enthält; ein "Multi-ORB-Marshalierungssystem", das es einer Client-Anwendung und dem zugehörigen Stub erlaubt, einen Vorgang an einem Zielobjekt aufzurufen, ohne zu wissen oder berücksichtigen zu müssen, welchen ORB dieses Zielobjekt benutzt oder welches Datenformat der ORB für die Argumente des aufgerufenen Vorgangs erfordert; und ein "Computersystem für Multi-ORB- Kommunikationen", umfassend eine ORB-unabhängige Schicht, die Client- Anwendungen und Stubs enthält; eine ORB-abhängige, OS-unabhängige Schicht, die ORB-abhängige Code/Subcontract-Codemechanismen sowie ORB-spezifische MarshalBuffers für eine Vielzahl von ORBs enthält; und eine Betriebssystem-(OS) Schicht. Der in der vorliegenden Erfindung zur Anwendung kommende "ORB- abhängige Codemechanismus" ist analog zu dem "Subcontract Mechanismus", der mit jedem Objekt assoziiert und in der EP-A-0604010 beschrieben ist.
- In der nachfolgenden Beschreibung werden zu Erläuterungszwecken spezifische Daten und Konfigurationen dargelegt, um ein tiefgreifendes Verständnis der vorliegenden Erfindung zu vermitteln. Die hierin beschriebene bevorzugte Ausgestaltung wird im Rahmen des objektorientierten Betriebssystems SPRING- DISTRIBUTION implementiert, das von Sun Microsystems®, Inc. entwickelt wurde (Sun Microsystems ist ein eingetragenes Markenzeichen der Sun Microsystems, Inc.). Für die Fachperson ist es jedoch offensichtlich, dass die vorliegende Erfindung auch ohne die spezifischen Einzelheiten ausgeführt und in verschiedenen Computersystemen und verschiedenen Konfigurationen sowie in Marken und Modellen von eng gekoppelten Prozessoren oder in verschiedenen Konfigurationen von lose gekoppelten Multi-Prozessor-Systemen implementiert werden kann. Das objektorientierte Betriebssystem Spring-Distribution ist in "A Spring Collection" beschrieben, einer Sammlung von Artikeln über das verteilte objektorientierte Betriebssystem von Spring, veröffentlicht im September 1994 von Sun Microsystems, Inc.
- Die Umgebung, in der die vorliegende Erfindung zur Anwendung kommt, umfasst das allgemeine verteilte Computersystem, bei dem universelle Computer, Workstations oder Personal Computer über Kommunikationsverbindungen verschiedener Typen in einer Client-Server-Anordnung verbunden sind, in der Programme und Daten, viele in der Form von Objekten, von verschiedenen Teilen des Systems für die Ausführung und den Zugriff durch andere Elemente des Systems verfügbar gemacht werden. Einige der Elemente eines universellen Workstation- Computers sind in Fig. 1 dargestellt, in der ein Prozessor 1 mit einem Ein-Ausgabeteil ("E/A") 2, einer Zentraleinheit ("CPU") 3 und einem Speicherteil 4 gezeigt ist. Der E/A-Teil 2 ist mit einer Tastatur S. einem Display 6, einer Plattenspeichereinheit 9 und einem CD-ROM Laufwerk 7 verbunden. Das CD-ROM Gerät 7 kann ein CD- ROM Medium 8 lesen, das typischerweise Programmcode-Mechanismen 10 und Daten enthält.
- Techniken zum Bereitstellen eines Furniers auf Sprachebene für Fernbetrieb (z. B. "Fernprozeduraufrufe") werden seit vielen Jahren verwendet. Sie haben gewöhnlich die Form, dass eine Fernschnittstelle in einer Sprache definiert ist. Dann wird ein Paar Stubs von dieser Schnittstelle erzeugt. Der Client-Stub läuft auf einer Maschine und stellt eine Schnittstelle auf Sprachebene dar, die von der Fernschnittstelle abgeleitet wird. Der Server-Stub läuft auf einer anderen Maschine und ruft eine Schnittstelle auf Sprachebene auf, die von der Fernschnittstelle abgeleitet ist. Gemäß Fig. 2 ruft zur Ausführung eines Fernbetriebs eine Client- Anwendung 12 auf einer Maschine 11 den Client-Stub 14 auf, der die Argumente in Bezug auf den Aufruf in (einen) Netzwerkpuffer marshaliert und sie zum Server-Stub 22 auf der Fernmaschine 18 sendet, die die Argumente von dem/den Netzwerkpuffer(n) zurückmarshaliert und die Server-Anwendung 24 aufruft. Ebenso werden, wenn die Server-Anwendung 24 eine Antwort zurücksendet, die Ergebnisse vom Server-Stub 22 hinaufmarshaliert und zum Client-Stub 14 zurückgegeben, der die Ergebnisse zurückmarshaliert und sie zur Client-Anwendung 12 zurückgibt. Die gesamte Mechanik von Argument- und Ergebnisübertragung sowie von Fernobjektaufruf wird in den Stubs ausgeführt. Sowohl Client-Anwendung als auch Server-Anwendung arbeiten nur im Sinne von konventionellen Schnittstellen auf Sprachebene.
- Wenn die Argumente oder Ergebnisse einfach Werte wie z. B. ganze Zahlen oder Strings sind, dann sind die Vorgänge von Marshalieren und Zurückmarshalieren recht einfach. Die Stubs setzen normalerweise einfach den buchstäblichen Wert des Arguments in den Netzwerkpuffer. In Sprachen, die abstrakte Datentypen oder Objekte unterstützen, wird das Marshalieren jedoch weitaus komplexer. Eine Lösung besteht darin, dass Stubs die internen Datenstrukturen des Objekts marshalieren und diese Daten dann in ein neues Objekt zurückmarshalieren. Dies hat mehrere ernsthafte Mängel. Zunächst stellt dies eine Verletzung des "Abstraktions"-Prinzips der objektorientierten Programmierung dar, da Stubs das Innenleben von Objekten nicht zu kennen brauchen. Zweitens ist es notwendig, dass Server- und Client- Implementationen des Objektes dasselbe interne Layout für ihre Datenstrukturen verwenden. Drittens kann dies das Marshalieren von großen Mengen unnötiger Daten beinhalten, weil nicht unbedingt der gesamte interne Zustand des Objekts zu der anderen Maschine übertragen zu werden braucht. Eine alternative Lösung ist die, dass beim Marshalieren eines Objektes nichts von seinem internen Zustand übertragen wird. Stattdessen wird eine Identifikationsmarke für das Objekt erzeugt, und diese Marke wird übertragen. So werden beispielsweise im Eden-System Objekten Namen zugeordnet, und wenn ein Objekt marshaliert wird, dann wird nur dieser Name anstatt der eigentlichen Darstellung marshaliert. Demzufolge müssen Fernmaschinen, wenn sie an diesem Objekt arbeiten wollen, den Namen benutzen, um den ursprünglichen Ort des Objekts zu ermitteln, und ihre Aufrufe zu diesem Ort senden. Dieser Mechanismus ist für schwerwiegende Objekte wie z. B. Dateien oder Datenbanken geeignet, ist aber häufig für leichte Abstraktionen wie z. B. ein Objekt ungeeignet, das ein kartesisches Koordinatenpaar repräsentiert, wo es weitaus besser gewesen wäre, den echten Zustand des Objektes zu marshalieren. Schließlich bieten einige objektorientierte Programmiersysteme das Mittel für eine Objektimplementation, um zu steuern, wie seine Argumente marshaliert und zurückmarshaliert werden. So können beispielsweise im Argus-System Objektimplementoren Funktionen bereitstellen, um zwischen ihrer internen Darstellung und einer spezifischen, konkreten externen Darstellung abzubilden. Die Argus-Stubs rufen die entsprechenden Abbildungsfunktionen beim Marshalieren und Zurückmarshalieren von Objekten auf, so dass die externe Darstellung anstatt einer bestimmten internen Darstellung gesendet wird. Diese verschiedenen Lösungen legen entweder eine einzelne standardmäßige Marshalierungsstrategie für alle Objekte auf oder sie erfordern es, dass individuelle Objektimplementoren die Verantwortung für die Einzelheiten der Marshalierung übernehmen. Ein weiterentwickelter Objektmarshalierungsprozess wird in der oben erwähnten EP-A-0604010 beschrieben, die "Subcontracts" beschreibt.
- Das spezifische Problem besteht hier darin, dass verschiedene ORBs unterschiedliche On-the-Wire-Datenformate haben. So könnte beispielsweise ein ORB Bytes in Little-Endian-Reihenfolge, ein anderer in Big-Endian-Reihenfolge usw. marshalieren. Verschiedene ORBs haben unterschiedliche On-the-Wire-Formate für Arrays, Strings, Vereinigungen usw.
- Es ist somit wünschenswert, ORB-unabhängige Stubs zu haben, die ihre Daten auf verschiedene Weise marshalieren können, wenn sie mit verschiedenen Objekten kommunizieren. So könnte man beispielsweise ein DEC-Datenformat beim Kommunizieren mit einem DEC-Objekt und ein Sun-Datenformat bei der Kommunikation mit einem Sun-Objekt verwenden. Und es wäre wünschenswert, dass ein einzelner Stub-Satz gleichzeitig mit verschiedenen ORBs verwendet werden kann.
- Die Lösung lautet:
- (1) Definieren einer generischen Schnittstelle für die Marshalierung. Diese generische Schnittstelle ergibt Verfahren zum Marshalieren und Zurückmarshalieren von ganzen Zahlen (Ints), Kurzzeichen (Shorts), Bytes, Zeichen und Strings. Es gibt jedoch keinen Hinweis darauf, wie diese Verfahren implementiert werden.
- (2) Verschiedene ORBs implementieren ihre generische MarshalBuffer- Schnittstelle selbst. Diese ORB-spezifischen Marshalklassen unterstützen nicht nur die generischen Marshalierungs- und Zurückmarshalierungsmethoden, sondern sie stellen auch zusätzliche Methoden zum Marshalieren von ORB-spezifischen Daten bereit. So stellt beispielsweise die MarshalBuffer-ORB-Implementation von Spring Methoden zum Marshalieren und Zurückmarshalieren von Spring-Türen bereit.
- (3) Jede Objektreferenz (Objref) enthält einen Zeiger auf einen Satz von ORB- Laufzeitmaschinen, der zu dem ORB gehört, der das Objekt implementiert. In der bevorzugten Implementation ist dies ein Zeiger auf den clientseitigen ORB- abhängigen Code-Mechanismus/Subcontract für das Objekt.
- (4) Die in (3) beschriebenen ORB-Laufzeitmaschinen unterstützen ein Verfahren für den Erhalt eines MarshalBuffer-Objekts. Die Laufzeitmaschinen geben ein MarshalBuffer-Objekt zurück, das die korrekte Marshalierung und Zurückmarshalierung für diesen ORB implementiert.
- (5) Die generischen Stubs arbeiten vollkommen im Sinne der generischen MarshalBuffer-Schnittstelle.
- (6) Zu Beginn jedes Rufs rufen die generischen Stubs die ORB-spezifischen Laufzeit-Codemechanismen in Verbindung mit der Objektreferenz, um ein geeignetes MarshalBuffer-Objekt zu erhalten. Die Stubs verwenden dann die generischen Marshalierungs- und Zurückmarshalierungsschnittstellen, um Daten zu und von diesem MarshalBuffer-Objekt zu marshalieren und zurückzumarshalieren. Da die Implementationen dieser Marshalierungs- und Zurückmarshalierungsmethoden ORB- spezifisch sind, bedeutet dies, dass die Daten auf eine ORB-spezifische Weise marshaliert und zurückmarshaliert werden.
- In der derzeit bevorzugten Ausgestaltung beinhaltet der generische MarshalBuffer zusätzliche Fähigkeiten für die Handhabung von Unterschieden in mehreren bekannten ORBs. Z. B.:
- (a) über die Methoden zum Marshalieren und Zurückmarshalieren von einfachen Datentypen hinaus, stellt der generische MarshalBuffer eine Möglichkeit zum Marshalieren von Array-Deskriptoren bereit. Dieses Verfahren nimmt die Grenzen der Array und marshaliert einen Array-Deskriptor auf eine ORB-spezifische Weise. So marshaliert beispielsweise der DOE ORB Code die Länge der Array. Aber der ORB-Code von Spring marshaliert die Untergrenze und die Obergrenze; und (b) stellt auf ähnliche Weise Mechanismen zum Zurückmarshalieren eines Array- Deskriptors bereit.
- Eines der Ziele der bevorzugten Ausgestaltung der vorliegenden Erfindung ist es, dass die Java ORB Implementation direkt mit einer Vielzahl verschiedener On-the- Wire-Protokollen und Datenformaten arbeiten kann. Insbesondere muss ein einzelnes Java-Programm in der Lage sein, gleichzeitig Objektreferenzen zu verwenden, die sich auf Objekte in verschiedenen ORBs beziehen. Das Internet ist eine äußerst heterogene Umgebung, und es ist wünschenswert, dass sie Java IDL Clients nicht auf die Arbeit mit nur jeweils einem einzigen Server beschränkt.
- Insbesondere muss die Java-ORB-Implementation der bevorzugten Ausgestaltung in der Lage sein, direkt mit der Distributed Objekt Environment (DOE) von Sun und dem verteilten Betriebssystem von Spring zu kommunizieren. Es ist auch wünschenswert, den Java-ORB-Kern so auszulegen, dass er mit UNO-Gateways oder mit Objektsystemen auf DCE-Basis kommunizieren könnte.
- Portabilität ist ein Faktor auf mehreren verschiedenen Ebenen.
- Auf der untersten Ebene wird die Socket-Klasse von Java verwendet, um Maschinen- und OS-unabhängigen Zugang zur IP-Protokollfamilie zu erhalten.
- In der nächsthöheren Ebene verwenden verschiedene ORBs unterschiedliche Low-Level-Netztransportprotokolle. So arbeiten beispielsweise die DOE-Systeme von Sun mit ONC RPC, das Spring-System verwendet ein optimiertes sequenziertes Paketprotokoll, UNO arbeitet mit TCP/IP, einige andere Vendoren mit DCE RPC usw. Dies mag vielleicht wie ein recht bedeutender Unterschied auszusehen, es ist aber tatsächlich vergleichsweise leicht, verschiedene Low-Level-Transportprotokolle einzustecken.
- Leider haben auch die verschiedenen Transportprotokolle unterschiedliche Datenformate für einfache Datentypen. So müssen beispielsweise ganzzahlige Werte in einer Big-Endian Byte-Reihenfolge für einen ONC ORB und in einer Little-Endian Byte-Reihenfolge für einen DCE ORB übertragen werden. Dies beeinflusst die Art und Weise, in der Argumente von den Marshal-Puffern marshaliert und zurückmarshaliert werden können.
- In der nächsthöheren Ebene können zwei ORBs selbst dann, wenn sie sich auf ein Standardformat für einfache Datentypen einigen, möglicherweise uneinig darüber sein, wie die IDL-strukturierten Datentypen gehandhabt werden. So benutzen beispielsweise sowohl der Spring ORB als auch der DOE ORB das ONC XDR Format für einfache Datentypen; wenn sie aber einen Array-Deskriptor senden, dann sendet der DOE ORB einfach eine ganze Zahl, die die Länge vorgibt, während der Spring-ORB zwei ganze Zahlen sendet, von denen die eine die Untergrenze und die andere die Obergrenze der Array vorgibt. Dies bedeutet, dass, wenn Stubs gewünscht werden, die zwischen verschiedenen ORBs verwendet werden können, die Stubs nicht direkt Gegenstände wie Array-Deskriptoren marshalieren können, sondern stattdessen einen ORB-spezifischen Code rufen müssen.
- Schließlich wird es wahrscheinlich verschiedene Formate für die verschiedenen Arten von IDL-bezogenen Meta-Daten wie z. B. Objektreferenzen, Methodenkennungen, Ausnahmenkennungen und Typenkennungen geben. So verwendet beispielsweise Spring ganze Zahlen als Methodenkennungen. Andere ORBs senden entweder einen einfachen Methodennamen eines vollqualifizierten Schnittstellennamens plus einer Methodennamenkombination.
- In der bevorzugten Ausgestaltung bestand die allgemeine Strategie darin, Stabs zu erzeugen, die ORB-unabhängig sind, und die ORB-Abhängigkeiten innerhalb der individuellen Objektreferenzen zu verbergen. Dies hat den großen Vorteil, dass ein einziger Java-Stubs-Compiler verwendet werden kann, der Stubs erzeugen kann, die mit jedem beliebigen ORB verwendet werden können. Dies bedeutet jedoch, dass Schnittstellen zwischen den Stubs und der Objektreferenz benötigt werden, die es den Stubs erlauben, Argumente zu marshalieren und Fernvorgänge auf eine ORB-unabhängige Weise aufzurufen.
- Erfahrungen mit der Verwendung des Subcontract-Mechanismus im Spring- System wurden bei der Entwicklung der Trennung zwischen den Stubs und der ORB- spezifischen Schicht genutzt. Spring lässt es zu, dass verschiedene Objektreferenzen verschiedene Formate und verschiedene Aufrufmechanismen haben, damit Dinge wie Replikation und Daten-Caching unterstützt werden können. Dies erfolgt durch Assoziieren eines Software-Moduls mit der Bezeichnung Subcontract mit jeder Objektreferenz. Wenn die Spring-Stubs eine Objektreferenz marshalieren oder aufrufen wollen, dann rufen sie den Subcontract in Verbindung mit der Objektreferenz auf, so dass die Marshalierung oder der Objektaufruf auf eine Weise erfolgt, die für diesen Subcontract geeignet ist.
- In der JAVA ORB Implementation der bevorzugten Ausgestaltung wurde eine zusätzliche abstrakte Schnittstelle hinzugefügt, so dass ein einzelner Stub-Satz mit mehreren ORBs kommunizieren könnte. Eine abstrakte MarshalBuffer-Schnittstelle kam hinzu, und die Erzeugung von MarshalBuffers wurde von den Stubs zu den Subcontracts verlegt, so dass verschiedene ORBs unterschiedliche MarshalBuffer- Subklassen bereitstellen könnten, die Daten im richtigen Format für diesen ORB marshalieren und zurückmarshalieren. Fig. 3 zeigt eine Darstellung der Java-ORB- Klassen. In Fig. 3 verwendet eine Java-Anwendung 70 einen Satz von Stubs 68, um mit einem Satz von Fernobjekten (nicht dargestellt) zu kommunizieren. Diese Stubs und Anwendungen umfassen eine "ORB-unabhängige" Schicht 69, die allgemein mit der "OS-unabhängigen/ORB-abhängigen" Schicht 61 Verbindung hat. Eine beispielhafte "OS-unabhängige/ORB-abhängige" Schicht 61 umfasst beispielsweise zwei verschiedene Spring-Subcontract-Mechanismen 66, 64, die denselben MarshalBuffer 60 und denselben Spring-Netzprotokoll-Codemechanismus 56 verwenden, um mit dem Fernobjekt (nicht dargestellt) zu kommunizieren. Es wird ein ORB-abhängiger Codemechanismus 62 für die Verwendung durch den DOE ORB von Sun dargestellt, der einen DOE MarshalBuffer 58 benutzt, der wiederum den DOE-Netzprotokoll-Codemechanismus 54 verwendet. In diesem Beispiel verwenden sowohl der Spring-Netzprotokoll-Codemechanismus 56 als auch der DOE- Netzprotokoll-Codemechanismus 54 den Java-Netz-"Socket"-Codemechanismus 52. (Die Java-"Socket"-Klasse bietet Zugang zu TCP/IP und UDP Funktionalität auf eine Weise, die etwa den Socket-Schnittstellen ähnlich ist, die in den Berkeley UNIX Distributionen bereitgestellt wird.) Dieser Java-Netz- "Socket"-Codemechanismus 52 verwendet Betriebssystem-(OS) Dienste 51 von dem jeweiligen OS, auf dem er läuft.
- In der bevorzugten Ausgestaltung wurde die Schnittstelle zwischen den Stubs und der MarshalBuffer-Schnittstelle so definiert, dass die Stubs nicht nur einfache primitive Typen wie Zeichen und Länge marshalieren, sondern auch die Kontrolle darüber erhalten, wie strukturierte IDL-Datentypen marshaliert werden. Dies bedeutet die Bereitstellung generischer MarshalBuffer-Methoden zum Marshalieren und Zurückmarshalieren von Array-Headern und Vereinigungsdiskriminatoren.
- Im Kontext der vorliegenden Erfindung können verschiedene Anwendungen Objekte aufrufen oder Daten zu Objekten senden, die Implementationen haben, die mit verschiedenen ORBs assoziiert sind, aber in diesem Fall mit ORB-unabhängigen Code/ Subcontract-Mechanismen, um den Ziel-ORB zu bestimmen, um einen MarshalBuffer zu finden, der weiß, wie die Daten für die Zielimplementation zu marshalieren sind, und um mit der Maschine zu kommunizieren, die die Zielimplementation enthält. Gemäß Fig. 5 gibt die Client-Anwendung 112 wieder den Aufruf an Stub 112 aus. In diesem Fall sendet jedoch der Stub 112 den Aufruf an einen ORB-spezifischen Code/Subcontract-Mechanismus 212, der in der bevorzugten Ausgestaltung von einer Anzeige in objref bestimmt wird. (Eine alternative Ausgestaltung würde einen ORB-ID-Mechanismus zum Identifizieren des ORB- spezifischen Codemechanismus beinhalten, der von einem spezifischen Objektaufruf benötigt wird, wobei dieser ORB-ID-Mechanismus vorgegeben werden könnte, wenn die Objektimplementation erzeugt wird, und bei jedem nachfolgenden Aufruf dieses Objektes verwendet werden könnte. Die Fachperson wird erkennen, dass es viele verschiedenen Möglichkeiten gibt, den von einer Objektreferenz benötigten ORB- spezifischen Code zu identifizieren.) Dieser ORB-spezifische Code/Subcontract- Mechanismus 212 bestimmt, welches Format vom Ziel-ORB benötigt wird, und stellt ein MarshalBuffer-Objekt 210 bereit, das in der Lage ist, die richtige Marshalierung durchzuführen und den Client-Stub 114 darüber zu informieren, welches MarshalBuffer-Objekt 210 verwendet werden soll. Der Client-Stub 114 marshaliert mit diesem MarshalBuffer-Objekt 210 die Daten und sendet sie wie zuvor zum Netzsoftware-Codemechanismus/Gerät 116. Auf der Serverseite 118 weiß der ORB- spezifische Codemechanismus 214 des Ziels, wie er die Daten zurückmarshalieren muss, und leitet sie zum Zurückmarshalierungspuffer 216 weiter, der bei einer Java- Übertragung eine virtuelle Maschine sein kann, um die Byte-Code-Daten für die Ausführung durch die Server-Maschine zu interpretieren.
- In der bevorzugten Ausgestaltung stellen wir für jede IDL-Objektreferenz des Typs FOO eine Java-Stub-Klasse FOO bereit, die aus einem Satz von Stub-Methoden und einem Zeiger auf ein Subcontract-Objekt besteht, das Informationen enthält, die das Serverobjekt identifizieren. Jedes Objekt der Stub-Klasse zeigt auf ein anderes Subcontract-Objekt, und diese Subcontract-Objekte können verschiedene Implementationen haben, so dass sie mit verschiedenen ORBs kommunizieren können. Wenn die Stub-Methoden einen Objektaufruf vornehmen möchten, dann fordern sie den Subcontract auf, ihnen ein geeignetes MarshalBuffer-Objekt zu geben, und benutzen dann diesen MarshalBuffer, um die Objekte zu marshalieren und die Ergebnisse zurückzumarshalieren. Ein beispielhafter MarshalBuffer ist in Fig. 6 dargestellt. Die in Fig. 6 gezeigte MarshalBuffer-Schnittstelle repräsentiert eine klare Trennung zwischen der Funktionalität des ORB-abhängigen Codes beim Marshalieren und Zurückmarshalieren von Daten. Die Stubs verstehen den jeweiligen Satz von Argumenten oder Ergebnissen, die für einen bestimmten IDL-Ruf benötigt werden. Die Stubs rufen dann den ORB-abhängigen Codemechanismus, der die MarshalBuffer-Schnittstelle implementiert, um jedes Datenelement, das in den Argumenten oder Ergebnissen enthalten ist, zu marshalieren (oder zurückzumarshalieren). Der ORB-abhängige Codemechanismus weiß nichts über die IDL-Schnittstelle, sondern marshaliert einfach die einzelnen Datenelemente im richtigen Format für diesen Ziel-ORB. Die wichtigsten Konzepte in der bevorzugten Ausgestaltung sind: (1) die MarshalBuffer-Schnittstelle wie die in Fig. 6 gezeigt ist eine Schnittstelle, für die verschiedene ORBs ihre eigene Implementation bereitstellen können, und (2) der ORB-abhängige Code stellt das MarshalBuffer-Objekt zu den Stubs bereit.
- So könnte beispielsweise, bezugnehmend auf Fig. 7, eine Objektreferenz vom IDL-Typ FOO 404, die auf einen Spring-Server (nicht illustriert) zeigt, einen Singleton-Subcontract 408 von Spring benutzen. Wenn die Stubs für FOO 406 einen Aufruf an eine der FOO-Methoden vornehmen, dann fordern sie zunächst den Subcontract 408 auf, ihnen einen MarshalBuffer zu geben. Der Singleton-Subcontract 408 gibt einen Spring MarshalBuffer 410 zurück, der den On-the-Wire-Datenformaten von Spring entspricht. Die Stubs 406 marshalieren dann die Methodenargumente zum MarshalBuffer 410. Wenn die Stubs 406 alle Argumente marshaliert haben, dann rufen sie den Subcontract 408 und fordern ihn auf, tatsächlich den Methodenaufruf zum Server zu senden. Der Singleton-Subcontract 408 verwendet die Spring- Netzprotokoll-Handler 412, um die Anforderung an den Spring-Server zu senden und die Ergebnisse zu holen. Die Stubs 406 können dann die Ergebnisse vom MarshalBuffer 410 zurückmarshalieren und sie zur Client-Anwendung 402 zurückgeben.
- In der bevorzugten Ausgestaltung wird ein Stub-Compiler contojava verwendet, der komplette Java-Client-Stubs für IDL-Schnittstellen erzeugt.
- Darüber hinaus wird eine funktionsfähige Java ORB Implementation verwendet, die mit DOE- und Spring-Servern kommunizieren kann. Der Code für die Kommunikation mit Spring beinhaltet zwei Subcontracts (Caching und Singleton) sowie eine Java-Implementation des Proxy-Proxy-Protokolls von Spring. Der Code für die Kommunikation mit DOE beinhaltet einen einzelnen Subcontract (für den Basic Object Adapter (BOA)) und Code zum Suchen und Aktivieren von DOE BOA Objekten. Der gesamte ORB-Code ist in Java geschrieben und ist zwischen verschiedenen Java-Umgebungen portabel. Man ist der Ansicht, dass dieser ORB- Kern leicht mit Subcontracts erweitert werden kann, die mit UNO oder ORBs kommunizieren könnten, die von anderen Vendoren implementiert werden.
Claims (16)
1. Computersystem mit einem Prozessor (3), einem Speicher (4), einem
Anzeigegerät (6), einem Ein-Ausgabegerät (2) und einem Betriebssystem (OS) zum
Verarbeiten von Aufrufen von Programmcodemechanismen (10), die an einen aus
einer Vielzahl von ortsfernen Object Request Brokern (ORBs) gerichtet sind, dadurch
gekennzeichnet, dass das Computersystem ferner folgendes umfasst:
eine ORB-unabhängige Schicht von Codemechanismen (69) einschließlich
Programmanwendungen und zugehörigen Stubs; und
eine ORB-abhängige Schicht von Codemechanismen (61), die mit der ORB-
unabhängigen Schicht gekoppelt ist, wobei die ORB-abhängige Schicht folgendes
umfasst:
Programmcodemechanismen, die ORB-spezifisch (212) und so
konfiguriert sind, dass sie einen Marshal-Codemechanismus (210) zum Marshalieren
(Einsortieren) von Daten in einem von dem ORB benötigten Format zu erzeugen, und
Programmcodemechanismen, die so konfiguriert sind, dass sie einen
spezifischen Netzwerkprotokollcode (116) verwenden, so dass ein
Programmanwendungscode-Mechanismus von der ORB-unabhängigen Schicht einen
Aufruf an einen ortsfernen Implementationsprogrammcode-Mechanismus einleiten
kann, und die ORB-spezifischen Programmcodemechanismen in der ORB-abhängigen
Schicht (61) einen geeigneten Marshal-Codemechanismus ermitteln, um Daten in
einem vom ORB benötigten Format zu marschalieren;
so dass ein Computersystem entsteht, das mit einer Vielzahl von ORBs
kommunizieren kann, wobei jeder ORB ein spezielles Datenformat verlangt.
2. Computersystem nach Anspruch 1, bei dem die ORB-unabhängige Schicht von
Codemechanismen (69) mit Programmanwendungen und zugehörigen Stubs
Objektanwendungen und zugehörige Stubs umfassen.
3. Computersystem nach Anspruch 1 oder 2, bei dem der Marshal-
Codemechanismus (210) zum Marshalieren von Daten in einem vom ORB benötigten
Format, der sich in der ORB-abhängigen Schicht (61) befindet, ein MarshalBuffer-
Objekt ist, das so konfiguriert ist, dass es Vorgänge zum Marshalieren von Daten in
einem ORB-spezifischen Format ausführt.
4. Computersystem nach Anspruch 1, 2 oder 3, bei dem der Programmcode-
Mechanismus, der so konfiguriert ist, dass er einen spezifischen
Netzwerkprotokollcode (116) verwendet, mit einem Servercomputer (118)
kommuniziert, der folgendes umfasst:
einen Empfangsprogrammcode-Mechanismus (120), der ORB-abhängigen
Code umfasst, der so konfiguriert ist, dass er einen Objektaufruf von einem ortsfernen
Computersystem (110) empfängt; und
eine ORB-unabhängige Serveranwendung, so dass der
Empfangsprogrammcode-Mechanismus in die ORB-unabhängige Serveranwendung
(214) hineinruft und einen MarshalBuffer einbringt, so dass die Serveranwendung
Argumente zurückmarshalieren (aussortieren) und Ergebnisse marshalieren kann,
ohne wissen zu müssen, von welchem ORB ein Anruf stammte.
5. Computersystem nach Anspruch 1, 2, 3 oder 4, bei dem die ORB-abhängige
Schicht (61) auch von der Betriebssystem-Schicht (OS) unabhängig ist.
6. Verfahren zum Betreiben eines Computersystems mit einem Prozessor (3),
einem Speicher (4), einem Display (6), einem Ein-Ausgabemechanismus (2), einem
Betriebssystem und wenigstens einem Client-Anwenderprogramm (112), einem oder
mehreren Stub-Programmen (114) in Bezug auf die Client-Anwendung, wobei das mit
dem Computer durchgeführte Verfahren durch die folgenden Schritte gekennzeichnet
ist:
Einleiten eines Aufrufs an einen Programmimplementationscode-
Mechanismus, wobei der Aufruf durch eine Client-Anwendung erfolgt, wobei der
Aufruf eine Referenz auf den Programmimplementationscode-Mechanismus
beinhaltet;
Verwenden eines Stubprogrammcode-Mechanismus, der sich auf die Client-
Anwendung zum Empfangen des Aufrufs bezieht, wobei der Stubprogrammcode-
Mechanismus das Format nicht kennt, das zum Marshalieren von Daten benötigt wird,
die von der Client-Anwendung in Verbindung mit der Aufrufeinleitung bereitgestellt
werden;
Aufrufen eines ersten spezifischen Programmcodemechanismus (212) durch
den Stubprogrammcode-Mechanismus, Anfordern des ersten spezifischen
Programmcodemechanismus (212) zur Bereitstellung eines MarshalBuffer-
Codemechanismus (210), der weiß, wie von der Client-Anwendung bereitgestellte
Daten in Verbindung mit dem Aufruf formatiert werden;
Marshalieren der von der Client-Anwendung bereitgestellten Daten in
Verbindung mit dem Aufruf, wobei die Marshalierung vom Stubprogrammcode-
Mechanismus mit Hilfe des MarshalBuffer-Codemechanismus erfolgt; und
Senden des Aufrufs zu einem Server (118), der den
Programmimplementationscode-Mechanismus enthält, der das Ziel des Rufs ist.
7. Verfahren nach Anspruch 6, umfassend den zusätzlichen Schritt des
Zurückmarshalierens (216) von Ergebnissen vom MarshalBuffer, wobei die
Ergebnisse vom Programmimplementationscode-Mechanismus geliefert werden, der
mit dem Aufruf gerufen wurde.
8. Verfahren nach Anspruch 6 oder 7, bei dem der erste spezifische
Programmcode-Mechanismus (212), der vom Stubprogrammcode-Mechanismus
gerufen wurde, ein für einen Object Request Broker (ORB) spezifischer
Codemechanismus ist.
9. Verfahren nach Anspruch 6, 7 oder 8, bei dem der Stubprogrammcode-
Mechanismus, der den ORB-spezifischen Codemechanismus (212) ruft, den ORB
nicht kennt, der den Ruf verarbeitet.
10. Verfahren nach Anspruch 6, 7, 8 oder 9, bei dem der Objekt Request Broker
(ORB) ein ORB ist, der mit einem Common Object Request Broker (CORBA) gemäß
der Object Management Group (OMG) kompatibel ist.
11. Verfahren nach Anspruch 6, 7, 8, 9 oder 10, umfassend die folgenden
zusätzlichen Schritte:
Empfangen eines Objektaufrufs von einem ortsfernen Computersystem (110)
auf einem serverseitigen ORB-abhängigen Codemechanismus (120); und
Ausgeben eines Rufs in eine ORB-unabhängige Serveranwendung (214),
wobei der Ruf durch den serverseitigen ORB-abhängigen Codemechanismus erfolgt,
der einen MarshalBuffer einbringt, der es zulässt, dass die Serveranwendung
Argumente zurückmarshaliert und Ergebnisse marshaliert, ohne wissen zu müssen,
von welchem ORB ein Ruf stammt.
12. Computerprogrammprodukt, umfassend ein in einem Computersystem
benutzbares Speichermedium (9), in dem rechnerlesbarer Code eingebettet ist, mit
dem veranlasst werden kann, dass ein Computersystem Programmcodemechanismus-
Aufrufe verarbeitet, die an einen aus einer Vielzahl von ortsfernen Object Request
Brokern (ORBs) gerichtet sind, wobei das Computerprogrammprodukt
gekennzeichnet ist durch:
einen ersten rechnerlesbaren Programmcodemechanismus, der so konfiguriert
ist, dass er eine ORB-unabhängige Schicht (69) von Codemechanismen umfasst,
einschließlich Client-Anwendungen (112) und zugehörigen Stubprogrammcode-
Mechanismen (114); und
einen zweiten rechnerlesbaren Programmcodemechanismus, der so
konfiguriert ist, dass er eine ORB-abhängige Schicht (61) von Codemechanismen
umfasst, die mit der ORB-unabhängigen Schicht (69) gekoppelt sind, wobei die ORB-
abhängige Schicht Programmcodemechanismen umfasst, die ORB-spezifisch und so
konfiguriert sind, dass sie einen Marshal-Codemechanismus (210) zum Marshalieren
von Daten in einem vom ORB benötigten Format erzeugt, und
Programmcodemechanismen (116), die so konfiguriert sind, dass sie einen
spezifischen Netzwerkprotokollcode benutzen, so dass ein
Programmanwendungscode-Mechanismus von der ORB-unabhängigen Schicht einen
Ruf auf einem ortsfernen Implementationsprogrammcodemechanismus (120) einleiten
kann, und die ORB-spezifischen Programmcodemechanismen in der ORB-abhängigen
Schicht einen geeigneten Marshal-Codemechanismus zum Marshalieren von Daten in
einem vom ORB benötigten Format bestimmen, so dass ein Computersystem
bereitgestellt wird, das in der Lage ist, mit einer Vielzahl von ORBs zu
kommunizieren, wobei jeder ORB Daten in einem bestimmten Format verlangt.
13. Computerprodukt nach Anspruch 12, bei dem die ORB-unabhängige Schicht
(69) von Codemechanismen mit Programmanwendungen (112) und zugehörigen
Stubs (114) Objektanwendungen und zugehörige Stubs umfassen.
14. Computerprogrammprodukt nach Anspruch 12 oder 13, bei dem der Marshal-
Codemechanismus zum Marshalieren von Daten in einem vom ORB benötigten
Format, der sich in der ORB-abhängigen Schicht (61) befindet, ein MarshalBuffer
Object (210) ist, das so konfiguriert ist, dass es Vorgänge zum Marshalieren von
Daten in einem ORB-spezifischen Format ausführt.
15. Computerprogrammprodukt nach Anspruch 12, 13 oder 14, bei dem der
Programmcodemechanismus, der so konfiguriert ist, dass er einen spezifischen
Netzwerkprotokollcode (116) benutzt, der sich in der ORB-abhängigen Schicht (61)
befindet, so konfiguriert ist, dass er einen Netzwerkprotokollcode-Mechanismus
benutzt, der ausgewählt ist aus einer Gruppe bestehend aus Spring-
Netzwerkprotokollcode und DOE-Netzwerkprotokollcode.
16. Computerprogrammprodukt nach Anspruch 12, 13, 14 oder 15, bei dem der
Marshal-Codemechanismus zum Marshalieren von Daten in einem vom ORB
benötigten Format, die sich in der ORB-abhängigen Schicht (61) befinden, ebenfalls
konfiguriert ist, um an ihn zurückgegebene Ergebnisse zurückzumarshalieren.
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US08/534,966 US5737607A (en) | 1995-09-28 | 1995-09-28 | Method and apparatus for allowing generic stubs to marshal and unmarshal data in object reference specific data formats |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| DE69615978D1 DE69615978D1 (de) | 2001-11-22 |
| DE69615978T2 true DE69615978T2 (de) | 2002-04-11 |
Family
ID=24132257
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| DE69615978T Expired - Fee Related DE69615978T2 (de) | 1995-09-28 | 1996-07-25 | Verfahren und Vorrichtung zum Verpackung und Entpackung von Daten in objectreferenzspezifischen Datenformaten anhand generischen Stubs |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US5737607A (de) |
| EP (1) | EP0766172B1 (de) |
| JP (1) | JPH09231076A (de) |
| DE (1) | DE69615978T2 (de) |
Families Citing this family (174)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6038395A (en) * | 1994-12-16 | 2000-03-14 | International Business Machines Corporation | System and method for implementing proxy objects in a visual application builder framework |
| US6009464A (en) * | 1995-09-20 | 1999-12-28 | Sun Microsystems, Inc. | Method and apparatus for enabling application programs to communicate with network clients and servers |
| US6078308A (en) | 1995-12-13 | 2000-06-20 | Immersion Corporation | Graphical click surfaces for force feedback applications to provide user selection using cursor interaction with a trigger position within a boundary of a graphical object |
| US5887172A (en) * | 1996-01-10 | 1999-03-23 | Sun Microsystems, Inc. | Remote procedure call system and method for RPC mechanism independent client and server interfaces interoperable with any of a plurality of remote procedure call backends |
| US6173332B1 (en) | 1996-03-06 | 2001-01-09 | Paul L. Hickman | Method and apparatus for computing over a wide area network |
| US7100069B1 (en) * | 1996-02-16 | 2006-08-29 | G&H Nevada-Tek | Method and apparatus for controlling a computer over a wide area network |
| US9094384B2 (en) * | 1996-02-16 | 2015-07-28 | Reference Ltd., Limited Liability Company | TCP/IP protocol network with satellite nodes |
| US6075863A (en) * | 1996-02-28 | 2000-06-13 | Encanto Networks | Intelligent communication device |
| US7080127B1 (en) * | 1996-03-06 | 2006-07-18 | Hickman Paul L | Method and apparatus for computing within a wide area network |
| US6938263B2 (en) | 1996-04-23 | 2005-08-30 | Sun Microsystems, Inc. | System and method for facilitating dynamic loading of “stub” information to enable a program operating in one address space to invoke processing of a remote method or procedure in another address space |
| US6832223B1 (en) | 1996-04-23 | 2004-12-14 | Sun Microsystems, Inc. | Method and system for facilitating access to a lookup service |
| US6578044B1 (en) | 1997-11-17 | 2003-06-10 | Sun Microsystems, Inc. | Method and system for typesafe attribute matching |
| US6438614B2 (en) | 1998-02-26 | 2002-08-20 | Sun Microsystems, Inc. | Polymorphic token based control |
| US6598094B1 (en) | 1998-03-20 | 2003-07-22 | Sun Microsystems, Inc. | Method and apparatus for determining status of remote objects in a distributed system |
| US6182083B1 (en) | 1997-11-17 | 2001-01-30 | Sun Microsystems, Inc. | Method and system for multi-entry and multi-template matching in a database |
| US6446070B1 (en) * | 1998-02-26 | 2002-09-03 | Sun Microsystems, Inc. | Method and apparatus for dynamic distributed computing over a network |
| US6560656B1 (en) | 1998-02-26 | 2003-05-06 | Sun Microsystems, Inc. | Apparatus and method for providing downloadable code for use in communicating with a device in a distributed system |
| US6487607B1 (en) | 1998-02-26 | 2002-11-26 | Sun Microsystems, Inc. | Methods and apparatus for remote method invocation |
| US6247026B1 (en) | 1996-10-11 | 2001-06-12 | Sun Microsystems, Inc. | Method, apparatus, and product for leasing of delegation certificates in a distributed system |
| US6708171B1 (en) | 1996-04-23 | 2004-03-16 | Sun Microsystems, Inc. | Network proxy |
| US6237024B1 (en) | 1998-03-20 | 2001-05-22 | Sun Microsystem, Inc. | Method and apparatus for the suspension and continuation of remote processes |
| US6466947B2 (en) | 1998-03-20 | 2002-10-15 | Sun Microsystems, Inc. | Apparatus and method for dynamically verifying information in a distributed system |
| US6421704B1 (en) | 1998-03-20 | 2002-07-16 | Sun Microsystems, Inc. | Method, apparatus, and product for leasing of group membership in a distributed system |
| US6138238A (en) | 1997-12-11 | 2000-10-24 | Sun Microsystems, Inc. | Stack-based access control using code and executor identifiers |
| US6226746B1 (en) | 1998-03-20 | 2001-05-01 | Sun Microsystems, Inc. | Stack-based system and method to combine security requirements of methods |
| US6272559B1 (en) * | 1997-10-15 | 2001-08-07 | Sun Microsystems, Inc. | Deferred reconstruction of objects and remote loading for event notification in a distributed system |
| US6463446B1 (en) | 1998-02-26 | 2002-10-08 | Sun Microsystems, Inc. | Method and apparatus for transporting behavior in an event-based distributed system |
| US6185611B1 (en) * | 1998-03-20 | 2001-02-06 | Sun Microsystem, Inc. | Dynamic lookup service in a distributed system |
| US6393497B1 (en) | 1998-03-20 | 2002-05-21 | Sun Microsystems, Inc. | Downloadable smart proxies for performing processing associated with a remote procedure call in a distributed system |
| US5991823A (en) * | 1996-06-26 | 1999-11-23 | Sun Microsystems, Inc. | Low overhead object adaptor |
| US6032199A (en) * | 1996-06-26 | 2000-02-29 | Sun Microsystems, Inc. | Transport independent invocation and servant interfaces that permit both typecode interpreted and compiled marshaling |
| US6189048B1 (en) * | 1996-06-26 | 2001-02-13 | Sun Microsystems, Inc. | Mechanism for dispatching requests in a distributed object system |
| US6044409A (en) * | 1996-06-26 | 2000-03-28 | Sun Microsystems, Inc. | Framework for marshaling and unmarshaling argument object references |
| US6260078B1 (en) * | 1996-07-03 | 2001-07-10 | Sun Microsystems, Inc. | Using a distributed object system to find and download java-based applications |
| US20020032803A1 (en) * | 1996-07-15 | 2002-03-14 | Paul Marcos | Method and apparatus for dynamically brokering object messages among object models |
| US6102965A (en) * | 1996-09-23 | 2000-08-15 | National Instruments Corporation | System and method for providing client/server access to graphical programs |
| US5832529A (en) | 1996-10-11 | 1998-11-03 | Sun Microsystems, Inc. | Methods, apparatus, and product for distributed garbage collection |
| US6728737B2 (en) | 1996-10-11 | 2004-04-27 | Sun Microsystems, Inc. | Method and system for leasing storage |
| US6237009B1 (en) | 1996-10-11 | 2001-05-22 | Sun Microsystems, Inc. | Lease renewal service |
| US6553428B1 (en) * | 1996-11-18 | 2003-04-22 | International Business Machines Corporation | Distributed object instantiation of native objects in java |
| US6401109B1 (en) * | 1996-11-18 | 2002-06-04 | International Business Machines Corp. | Virtual socket for JAVA interprocess communication |
| US6710786B1 (en) | 1997-02-03 | 2004-03-23 | Oracle International Corporation | Method and apparatus for incorporating state information into a URL |
| US6247056B1 (en) | 1997-02-03 | 2001-06-12 | Oracle Corporation | Method and apparatus for handling client request with a distributed web application server |
| US6845505B1 (en) | 1997-02-03 | 2005-01-18 | Oracle International Corporation | Web request broker controlling multiple processes |
| US6225995B1 (en) | 1997-10-31 | 2001-05-01 | Oracle Corporaton | Method and apparatus for incorporating state information into a URL |
| US6026404A (en) * | 1997-02-03 | 2000-02-15 | Oracle Corporation | Method and system for executing and operation in a distributed environment |
| US6112183A (en) * | 1997-02-11 | 2000-08-29 | United Healthcare Corporation | Method and apparatus for processing health care transactions through a common interface in a distributed computing environment |
| US7203769B2 (en) * | 1997-03-14 | 2007-04-10 | International Business Machines Corporation | Bootstrapping technique for distributed object client systems |
| US6189046B1 (en) * | 1997-03-27 | 2001-02-13 | Hewlett-Packard Company | Mechanism and method for merging cached location information in a distributed object environment |
| US6282581B1 (en) * | 1997-03-27 | 2001-08-28 | Hewlett-Packard Company | Mechanism for resource allocation and for dispatching incoming calls in a distributed object environment |
| US5999988A (en) * | 1997-03-31 | 1999-12-07 | Sun Microsystems, Inc. | Method and apparatus for generating and employing a run-time generated stub to reference an object in object oriented systems |
| JP3490256B2 (ja) | 1997-06-12 | 2004-01-26 | 三菱電機株式会社 | エージェント方式 |
| US6374305B1 (en) * | 1997-07-21 | 2002-04-16 | Oracle Corporation | Web applications interface system in a mobile-based client-server system |
| EP0915419A3 (de) | 1997-10-06 | 2003-11-12 | Sun Microsystems, Inc. | Zugriff auf Fernobjekte |
| US6253256B1 (en) * | 1997-10-15 | 2001-06-26 | Sun Microsystems, Inc. | Deferred reconstruction of objects and remote loading in a distributed system |
| US6957427B1 (en) * | 1997-10-15 | 2005-10-18 | Sun Microsystems, Inc. | Remote object activation in a distributed system |
| US6334114B1 (en) | 1997-10-31 | 2001-12-25 | Oracle Corporation | Method and apparatus for performing transactions in a stateless web environment which supports a declarative paradigm |
| US6516354B2 (en) | 1997-12-18 | 2003-02-04 | Sun Microsystems, Inc. | Method and apparatus for efficient representation of variable length identifiers in a distributed object system |
| US6510460B1 (en) * | 1997-12-18 | 2003-01-21 | Sun Microsystems, Inc. | Method and apparatus for enforcing locking invariants in multi-threaded systems |
| US6249803B1 (en) | 1997-12-18 | 2001-06-19 | Sun Microsystems, Inc. | Method and apparatus for executing code during method invocation |
| US6405264B1 (en) | 1997-12-18 | 2002-06-11 | Sun Microsystems, Inc. | Marshaling and unmarshaling framework for supporting filters in a distributed object system |
| US6167565A (en) * | 1998-01-08 | 2000-12-26 | Microsoft Corporation | Method and system of custom marshaling of inter-language parameters |
| EP1058883A2 (de) | 1998-02-26 | 2000-12-13 | Sun Microsystems, Inc. | Verfahren und vorrichtung für spezifisches hashen zum identifizieren von entfernten verfahren |
| US6604127B2 (en) | 1998-03-20 | 2003-08-05 | Brian T. Murphy | Dynamic lookup service in distributed system |
| US6298391B1 (en) * | 1998-03-13 | 2001-10-02 | Microsoft Corporation | Remote procedure calling with marshaling and unmarshaling of arbitrary non-conformant pointer sizes |
| US7028312B1 (en) * | 1998-03-23 | 2006-04-11 | Webmethods | XML remote procedure call (XML-RPC) |
| US6195685B1 (en) * | 1998-05-22 | 2001-02-27 | International Business Machines Corporation | Flexible event sharing, batching, and state consistency mechanisms for interactive applications |
| US6490623B1 (en) * | 1998-08-24 | 2002-12-03 | International Business Machines Corporation | System, method and computer readable code for encapsulating system, language and device independent communications socket functionality in a lightweight uniform communications object model |
| US6631515B1 (en) | 1998-09-24 | 2003-10-07 | International Business Machines Corporation | Method and apparatus to reduce code size and runtime in a Java environment |
| US6847987B2 (en) | 1998-09-30 | 2005-01-25 | International Business Machines Corporation | System and method for extending client-server software to additional client platforms for servicing thin clients requests |
| US6385661B1 (en) * | 1998-10-19 | 2002-05-07 | Recursion Software, Inc. | System and method for dynamic generation of remote proxies |
| SE521114C2 (sv) * | 1998-10-20 | 2003-09-30 | Corus Technologies Ab | Anordning och förfarande för integrering av ett antal datoriserade väsentligen godtyckliga klientsystem |
| US6421739B1 (en) * | 1999-01-30 | 2002-07-16 | Nortel Networks Limited | Fault-tolerant java virtual machine |
| JP2000242587A (ja) * | 1999-02-24 | 2000-09-08 | Pfu Ltd | オブジェクト処理装置及びそのプログラム記憶媒体 |
| US6901518B1 (en) | 1999-04-08 | 2005-05-31 | Sun Microsystems, Inc. | Method and system for establishing trust in downloaded proxy code |
| US20060034275A1 (en) | 2000-05-03 | 2006-02-16 | At&T Laboratories-Cambridge Ltd. | Data transfer, synchronising applications, and low latency networks |
| US6877163B1 (en) | 1999-06-14 | 2005-04-05 | Sun Microsystems, Inc. | Method and system for dynamic proxy classes |
| US6845393B1 (en) | 1999-06-14 | 2005-01-18 | Sun Microsystems, Inc. | Lookup discovery service in a distributed system having a plurality of lookup services each with associated characteristics and services |
| US6611817B1 (en) | 1999-06-17 | 2003-08-26 | International Business Machines Corporation | Automated technique for code generation of datastream mappings |
| US6412010B1 (en) * | 1999-06-18 | 2002-06-25 | Hewlett-Packard Company | Apparatus and method for implementing a network protocol that supports the transmission of a variable number of application-usable object over a network as a single network transmittable container object and the re-creation of those application-usable object therefrom |
| US6742015B1 (en) | 1999-08-31 | 2004-05-25 | Accenture Llp | Base services patterns in a netcentric environment |
| US6640244B1 (en) | 1999-08-31 | 2003-10-28 | Accenture Llp | Request batcher in a transaction services patterns environment |
| US6606660B1 (en) * | 1999-08-31 | 2003-08-12 | Accenture Llp | Stream-based communication in a communication services patterns environment |
| US6640249B1 (en) | 1999-08-31 | 2003-10-28 | Accenture Llp | Presentation services patterns in a netcentric environment |
| US6477580B1 (en) * | 1999-08-31 | 2002-11-05 | Accenture Llp | Self-described stream in a communication services patterns environment |
| US7289964B1 (en) | 1999-08-31 | 2007-10-30 | Accenture Llp | System and method for transaction services patterns in a netcentric environment |
| US6601234B1 (en) | 1999-08-31 | 2003-07-29 | Accenture Llp | Attribute dictionary in a business logic services environment |
| US6571282B1 (en) | 1999-08-31 | 2003-05-27 | Accenture Llp | Block-based communication in a communication services patterns environment |
| US6615253B1 (en) | 1999-08-31 | 2003-09-02 | Accenture Llp | Efficient server side data retrieval for execution of client side applications |
| US6715145B1 (en) | 1999-08-31 | 2004-03-30 | Accenture Llp | Processing pipeline in a base services pattern environment |
| US6549949B1 (en) | 1999-08-31 | 2003-04-15 | Accenture Llp | Fixed format stream in a communication services patterns environment |
| US6954220B1 (en) | 1999-08-31 | 2005-10-11 | Accenture Llp | User context component in environment services patterns |
| US6842906B1 (en) | 1999-08-31 | 2005-01-11 | Accenture Llp | System and method for a refreshable proxy pool in a communication services patterns environment |
| US6578068B1 (en) | 1999-08-31 | 2003-06-10 | Accenture Llp | Load balancer in environment services patterns |
| US6640238B1 (en) | 1999-08-31 | 2003-10-28 | Accenture Llp | Activity component in a presentation services patterns environment |
| US6636242B2 (en) | 1999-08-31 | 2003-10-21 | Accenture Llp | View configurer in a presentation services patterns environment |
| US6601192B1 (en) | 1999-08-31 | 2003-07-29 | Accenture Llp | Assertion component in environment services patterns |
| US6947965B2 (en) * | 1999-11-30 | 2005-09-20 | Recursion Software, Inc. | System and method for communications in a distributed computing environment |
| US6678743B1 (en) | 1999-11-30 | 2004-01-13 | Recursion Software, Inc. | Method for moving objects in a distributed computing environment |
| US6629128B1 (en) * | 1999-11-30 | 2003-09-30 | Recursion Software, Inc. | System and method for distributed processing in a computer network |
| EP1122644A1 (de) * | 2000-01-14 | 2001-08-08 | Sun Microsystems, Inc. | Verfahren und Vorrichtung zur dynamischen Versendung von Funktionsanrufen von einer ersten zu einer zweiten Ausführungsumgebung |
| EP1117033A1 (de) * | 2000-01-14 | 2001-07-18 | Sun Microsystems, Inc. | Dynamische Sendefunktion |
| EP1117220A1 (de) | 2000-01-14 | 2001-07-18 | Sun Microsystems, Inc. | Verfahren und Vorrichtung zur Protokollübersetzung |
| US6678700B1 (en) * | 2000-04-27 | 2004-01-13 | General Atomics | System of and method for transparent management of data objects in containers across distributed heterogenous resources |
| US6970869B1 (en) | 2000-05-09 | 2005-11-29 | Sun Microsystems, Inc. | Method and apparatus to discover services and negotiate capabilities |
| US6918084B1 (en) | 2000-05-09 | 2005-07-12 | Sun Microsystems, Inc. | Spawning new repository spaces using information provided in advertisement schema messages |
| US7016966B1 (en) * | 2000-05-09 | 2006-03-21 | Sun Microsystems, Inc. | Generating results gates in a distributed computing environment |
| US7188251B1 (en) | 2000-05-09 | 2007-03-06 | Sun Microsystems, Inc. | System and method for secure message-based leasing of resources in a distributed computing environment |
| US7080078B1 (en) | 2000-05-09 | 2006-07-18 | Sun Microsystems, Inc. | Mechanism and apparatus for URI-addressable repositories of service advertisements and other content in a distributed computing environment |
| US7370091B1 (en) | 2000-05-09 | 2008-05-06 | Sun Microsystems, Inc. | Method and apparatus for obtaining space advertisements |
| US7395333B1 (en) | 2000-05-09 | 2008-07-01 | Sun Microsystems, Inc. | Method and apparatus to obtain negotiated service advertisement |
| US6973493B1 (en) | 2000-05-09 | 2005-12-06 | Sun Microsystems, Inc. | Mechanism and apparatus for security of newly spawned repository spaces in a distributed computing environment |
| US6862594B1 (en) | 2000-05-09 | 2005-03-01 | Sun Microsystems, Inc. | Method and apparatus to discover services using flexible search criteria |
| US6643650B1 (en) | 2000-05-09 | 2003-11-04 | Sun Microsystems, Inc. | Mechanism and apparatus for using messages to look up documents stored in spaces in a distributed computing environment |
| US6868447B1 (en) | 2000-05-09 | 2005-03-15 | Sun Microsystems, Inc. | Mechanism and apparatus for returning results of services in a distributed computing environment |
| US7577834B1 (en) | 2000-05-09 | 2009-08-18 | Sun Microsystems, Inc. | Message authentication using message gates in a distributed computing environment |
| US8001232B1 (en) | 2000-05-09 | 2011-08-16 | Oracle America, Inc. | Event message endpoints in a distributed computing environment |
| US6792466B1 (en) | 2000-05-09 | 2004-09-14 | Sun Microsystems, Inc. | Trusted construction of message endpoints in a distributed computing environment |
| US6850979B1 (en) | 2000-05-09 | 2005-02-01 | Sun Microsystems, Inc. | Message gates in a distributed computing environment |
| US6950875B1 (en) | 2000-05-09 | 2005-09-27 | Sun Microsystems, Inc. | Message conductors in a distributed computing environment |
| US7065574B1 (en) | 2000-05-09 | 2006-06-20 | Sun Microsystems, Inc. | Messaging system using pairs of message gates in a distributed computing environment |
| US6917976B1 (en) | 2000-05-09 | 2005-07-12 | Sun Microsystems, Inc. | Message-based leasing of resources in a distributed computing environment |
| US6789077B1 (en) | 2000-05-09 | 2004-09-07 | Sun Microsystems, Inc. | Mechanism and apparatus for web-based searching of URI-addressable repositories in a distributed computing environment |
| US6898618B1 (en) | 2000-05-09 | 2005-05-24 | Sun Microsystems, Inc. | Client-specified display services in a distributed computing environment |
| US6789126B1 (en) | 2000-05-09 | 2004-09-07 | Sun Microsystems, Inc. | Addressing message gates in a distributed computing environment |
| US7243356B1 (en) | 2000-05-09 | 2007-07-10 | Sun Microsystems, Inc. | Remote method invocation with secure messaging in a distributed computing environment |
| US7072967B1 (en) | 2000-05-09 | 2006-07-04 | Sun Microsystems, Inc. | Efficient construction of message endpoints |
| US7716492B1 (en) | 2000-05-09 | 2010-05-11 | Oracle America, Inc. | Method and apparatus to obtain service capability credentials |
| US7200848B1 (en) | 2000-05-09 | 2007-04-03 | Sun Microsystems, Inc. | Migrating processes using data representation language representations of the processes in a distributed computing environment |
| US7260543B1 (en) | 2000-05-09 | 2007-08-21 | Sun Microsystems, Inc. | Automatic lease renewal with message gates in a distributed computing environment |
| US7010573B1 (en) * | 2000-05-09 | 2006-03-07 | Sun Microsystems, Inc. | Message gates using a shared transport in a distributed computing environment |
| US8082491B1 (en) | 2000-05-09 | 2011-12-20 | Oracle America, Inc. | Dynamic displays in a distributed computing environment |
| US8135796B1 (en) | 2000-05-09 | 2012-03-13 | Oracle America, Inc. | Mechanism and apparatus for accessing and addressing services in a distributed computing environment |
| US6854115B1 (en) | 2000-06-02 | 2005-02-08 | Sun Microsystems, Inc. | Process persistence in a virtual machine |
| US6941410B1 (en) | 2000-06-02 | 2005-09-06 | Sun Microsystems, Inc. | Virtual heap for a virtual machine |
| US6760815B1 (en) | 2000-06-02 | 2004-07-06 | Sun Microsystems, Inc. | Caching mechanism for a virtual heap |
| US6957237B1 (en) | 2000-06-02 | 2005-10-18 | Sun Microsystems, Inc. | Database store for a virtual heap |
| US6865657B1 (en) | 2000-06-02 | 2005-03-08 | Sun Microsystems, Inc. | Garbage collector for a virtual heap |
| US6763440B1 (en) | 2000-06-02 | 2004-07-13 | Sun Microsystems, Inc. | Garbage collection using nursery regions for new objects in a virtual heap |
| US20030005407A1 (en) * | 2000-06-23 | 2003-01-02 | Hines Kenneth J. | System and method for coordination-centric design of software systems |
| FR2810755B1 (fr) * | 2000-06-27 | 2003-01-17 | Cit Alcatel | Procede de gestion d'informations en java |
| US6769123B1 (en) * | 2000-09-07 | 2004-07-27 | Cisco Technology, Inc. | Method and apparatus of using a single computer program source code base to provide a program that is operable in either a client-server mode or a standalone mode |
| US7543304B2 (en) * | 2000-12-14 | 2009-06-02 | Borland Software Corporation | Method for efficient location of corba objects based on an unmarshaled object key in a request |
| US7082116B2 (en) * | 2000-12-28 | 2006-07-25 | Nortel Networks Limited | Methods and systems implementing mobility support in a packet-based wireless access network |
| US7296275B2 (en) | 2001-01-04 | 2007-11-13 | Sun Microsystems, Inc. | Method and system for passing objects in a distributed system using serialization contexts |
| US20020178141A1 (en) * | 2001-05-25 | 2002-11-28 | Kushnirskiy Igor Davidovich | Method and apparatus for remote inter-language method calling |
| US7660887B2 (en) * | 2001-09-07 | 2010-02-09 | Sun Microsystems, Inc. | Systems and methods for providing dynamic quality of service for a distributed system |
| US20030051029A1 (en) * | 2001-09-07 | 2003-03-13 | Reedy Dennis G. | Dynamic provisioning of sevice components in a distributed system |
| US7756969B1 (en) | 2001-09-07 | 2010-07-13 | Oracle America, Inc. | Dynamic provisioning of identification services in a distributed system |
| US20030144970A1 (en) * | 2001-12-10 | 2003-07-31 | Coyne Patrick J. | Project management database and method of managing project related information |
| US8935297B2 (en) * | 2001-12-10 | 2015-01-13 | Patrick J. Coyne | Method and system for the management of professional services project information |
| US7464384B2 (en) * | 2002-03-14 | 2008-12-09 | International Business Machines Corporation | Method for inter-object communication |
| US20040006653A1 (en) * | 2002-06-27 | 2004-01-08 | Yury Kamen | Method and system for wrapping existing web-based applications producing web services |
| US7151830B2 (en) * | 2002-12-24 | 2006-12-19 | International Business Machines Corporation | Method, system, program product and state machine representation for encrypting and decrypting a message |
| US7523169B1 (en) | 2003-02-28 | 2009-04-21 | Verizon Data Services Llc | Method and system for mapping network data for network database access |
| US7331049B1 (en) | 2003-04-21 | 2008-02-12 | Borland Software Corporation | System and methodology providing typed event and notification services |
| JP2005038076A (ja) * | 2003-07-17 | 2005-02-10 | Fujitsu Ltd | プログラムテスト用会話型スタブ装置およびスタブプログラム記憶媒体 |
| US7260216B2 (en) * | 2003-08-20 | 2007-08-21 | International Business Machines Corporation | State machine representation for encrypting and decrypting a set of data values and method for protecting the same |
| WO2005038650A1 (en) * | 2003-10-14 | 2005-04-28 | Live Media Pty Ltd | A computep, system and methods therefor |
| US7792874B1 (en) | 2004-01-30 | 2010-09-07 | Oracle America, Inc. | Dynamic provisioning for filtering and consolidating events |
| US7810077B2 (en) * | 2005-04-18 | 2010-10-05 | Oracle America Inc. | Reifying generic types while maintaining migration compatibility |
| US7533388B1 (en) * | 2005-04-28 | 2009-05-12 | Sun Microsystems, Inc. | Method and apparatus for dynamic Stubs and Ties in RMI-IIOP |
| US7735070B2 (en) * | 2005-06-30 | 2010-06-08 | Oracle America, Inc. | Allowing non-generified methods to override generified methods |
| US20070299863A1 (en) * | 2006-04-27 | 2007-12-27 | Qualcomm Incorporated | Portable object serialization |
| US20080201481A1 (en) * | 2007-02-20 | 2008-08-21 | Microsoft Corporation | Remote interface marshalling |
| US8239877B2 (en) * | 2007-08-28 | 2012-08-07 | International Business Machines Corporation | Pre-population of meta data cache for resolution of data marshaling issues |
| US20090100439A1 (en) * | 2007-10-12 | 2009-04-16 | Mcneil Donald H | Information engine |
| US20100269104A1 (en) * | 2009-04-16 | 2010-10-21 | International Business Machines Corporation | System and Methods for Generic Data Marshalling without Object Modification |
| US8589867B2 (en) | 2010-06-18 | 2013-11-19 | Microsoft Corporation | Compiler-generated invocation stubs for data parallel programming model |
| US20110314256A1 (en) * | 2010-06-18 | 2011-12-22 | Microsoft Corporation | Data Parallel Programming Model |
| US9069804B2 (en) * | 2010-07-07 | 2015-06-30 | Fujitsu Limited | System and a method for generating database model for analysis of applications |
| US8584105B1 (en) * | 2011-12-12 | 2013-11-12 | Google Inc. | Javascript application programming interfaces for independently compiled javascript binaries |
| US9176712B2 (en) * | 2013-03-14 | 2015-11-03 | Oracle International Corporation | Node Grouped Data Marshalling |
| US9830135B2 (en) * | 2014-01-29 | 2017-11-28 | Dell Products L.P. | Declarative and pluggable business logic for systems management |
Family Cites Families (12)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5280610A (en) * | 1990-08-14 | 1994-01-18 | Digital Equipment Corporation | Methods and apparatus for implementing data bases to provide object-oriented invocation of applications |
| US5327529A (en) * | 1990-09-24 | 1994-07-05 | Geoworks | Process of designing user's interfaces for application programs |
| DE69126857T2 (de) * | 1991-01-18 | 1998-01-08 | Ibm | Objektorientierte Programmierungsplattform |
| DE69228621T2 (de) * | 1991-02-25 | 1999-07-22 | Hewlett-Packard Co., Palo Alto, Calif. | Objektorientiertes verteiltes Rechnersystem |
| JP3489123B2 (ja) * | 1992-04-15 | 2004-01-19 | 株式会社日立製作所 | アプリケーション結合方法 |
| US5526491A (en) * | 1992-09-22 | 1996-06-11 | International Business Machines Corporation | System and method for calling selected service procedure remotely by utilizing conditional construct switch statement to determine the selected service procedure in common stub procedure |
| JPH09502547A (ja) * | 1992-11-13 | 1997-03-11 | マイクロソフト コーポレイション | 遠隔手続き呼び出しのためのインターフェイスポインタをマーシャリングする方法及びシステム |
| DE69327448T2 (de) * | 1992-12-21 | 2004-03-04 | Sun Microsystems, Inc., Mountain View | Verfahren und Vorrichtung für Teilaufgaben in verteiltem Verarbeitungssystem |
| US5377350A (en) * | 1993-04-30 | 1994-12-27 | International Business Machines Corporation | System for cooperative communication between local object managers to provide verification for the performance of remote calls by object messages |
| EP0643349B1 (de) * | 1993-09-10 | 2000-10-18 | Sun Microsystems, Inc. | Kundenseitiger Stubinterpretor |
| US5404523A (en) * | 1993-11-10 | 1995-04-04 | Digital Equipment Corporation | Method of managing requests in a transaction processing system |
| US5548723A (en) * | 1993-12-17 | 1996-08-20 | Taligent, Inc. | Object-oriented network protocol configuration system utilizing a dynamically configurable protocol stack |
-
1995
- 1995-09-28 US US08/534,966 patent/US5737607A/en not_active Expired - Lifetime
-
1996
- 1996-07-25 EP EP96305456A patent/EP0766172B1/de not_active Expired - Lifetime
- 1996-07-25 DE DE69615978T patent/DE69615978T2/de not_active Expired - Fee Related
- 1996-09-30 JP JP8276814A patent/JPH09231076A/ja not_active Withdrawn
Also Published As
| Publication number | Publication date |
|---|---|
| US5737607A (en) | 1998-04-07 |
| JPH09231076A (ja) | 1997-09-05 |
| DE69615978D1 (de) | 2001-11-22 |
| EP0766172A1 (de) | 1997-04-02 |
| EP0766172B1 (de) | 2001-10-17 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| DE69615978T2 (de) | Verfahren und Vorrichtung zum Verpackung und Entpackung von Daten in objectreferenzspezifischen Datenformaten anhand generischen Stubs | |
| DE69331440T2 (de) | Verfahren und system zur durchführung von fernprozeduranrufen in einem verteilten rechnersystem. | |
| DE69622144T2 (de) | Allgemeines Fernprozeduraufrufsystem und allgemeines Fernprozeduraufrufverfahren | |
| DE69719620T2 (de) | Vorrichtung und Verfahren zur Bestimmung von Server-Cluster-Topologien | |
| DE69309485T2 (de) | Verfahren zur verteilung von schnittstellenzeigern fur fernprozeduranrufe | |
| DE69617509T2 (de) | Vorrichtung und Verfahren zur Feststellung von Objekttypen in einem verteilten Objektsystem | |
| DE69329577T2 (de) | Verfahren und system für implementierung-unabhängige schnittstellenspezifikation | |
| DE60126016T2 (de) | Serverseitige Kontrollobjekte zur Verarbeitung von kundenseitigen Benutzerschnittstellenelementen | |
| DE69429686T2 (de) | Transaktionsverwaltung in objektorientiertem System | |
| DE69327448T2 (de) | Verfahren und Vorrichtung für Teilaufgaben in verteiltem Verarbeitungssystem | |
| DE69425318T2 (de) | Verfahren und System für Fernausführung von Codes | |
| DE69832354T2 (de) | Netzwerkverwaltungsrahmenwerk | |
| DE69129479T2 (de) | Verteiltes Rechnersystem | |
| DE69820566T2 (de) | Verfahren, Vorrichtung, und Programmprodukt zum Zugriff auf einen Server-basierten Verwaltungsinformationsdienst | |
| DE69630480T2 (de) | Verfahren, Vorrichtung und Datenstrukturen zur Objektverwaltung | |
| DE60115240T2 (de) | Automatisierte werkzeugverwaltung in einer umgebung mit mehreren protokollen | |
| DE69727933T2 (de) | Verfahren und gerät zum beschreiben einer definierten schnittstelle, einer operation und eines datentyps in einer schnittstellendefinitionssprache | |
| DE69730690T2 (de) | Verfahren und apparat zum dynamischen austausch von objekt-nachrichten zwischen objekt-modellen | |
| DE69032191T2 (de) | Anordnung und Verfahren zur Realisierung von Hochleistungskommunikation zwischen Softwareprozessen | |
| DE69801816T2 (de) | Vorrichtung und verfahren zur aktualisierung und zur synchronisierung von informationen zwischen einem klient und einem server | |
| DE69921474T2 (de) | Methode-referenzierung in objektbasierter programmierung | |
| DE69734175T2 (de) | Transportunabhängige Anruf- und Dienstschnittstellen, die die Marshalling von integrierten Type-Codes sowie kompilierten Code erlauben | |
| DE60031370T2 (de) | Tokenbasierte verknüpfung | |
| DE69406013T2 (de) | Objektorientiertes netz-protokoll-konfigurationssystem | |
| DE69628965T2 (de) | Verfahren und Gerät zum Verwalten von Beziehungen zwischen Objekten in einer verteilten Objektumgebung |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| 8364 | No opposition during term of opposition | ||
| 8339 | Ceased/non-payment of the annual fee |