DE69331440T2 - Verfahren und system zur durchführung von fernprozeduranrufen in einem verteilten rechnersystem. - Google Patents
Verfahren und system zur durchführung von fernprozeduranrufen in einem verteilten rechnersystem.Info
- Publication number
- DE69331440T2 DE69331440T2 DE69331440T DE69331440T DE69331440T2 DE 69331440 T2 DE69331440 T2 DE 69331440T2 DE 69331440 T DE69331440 T DE 69331440T DE 69331440 T DE69331440 T DE 69331440T DE 69331440 T2 DE69331440 T2 DE 69331440T2
- Authority
- DE
- Germany
- Prior art keywords
- client
- server
- class
- computers
- shared
- 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
- 238000000034 method Methods 0.000 title claims description 173
- 230000008569 process Effects 0.000 title claims description 51
- 230000007246 mechanism Effects 0.000 claims description 40
- 238000004891 communication Methods 0.000 claims description 17
- 230000004044 response Effects 0.000 claims description 3
- 230000008878 coupling Effects 0.000 claims 2
- 238000010168 coupling process Methods 0.000 claims 2
- 238000005859 coupling reaction Methods 0.000 claims 2
- 230000006870 function Effects 0.000 description 37
- 238000013515 script Methods 0.000 description 23
- 238000010586 diagram Methods 0.000 description 15
- 238000012545 processing Methods 0.000 description 7
- 230000001419 dependent effect Effects 0.000 description 6
- 238000009795 derivation Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- NOTIQUSPUUHHEH-UXOVVSIBSA-N dromostanolone propionate Chemical compound C([C@@H]1CC2)C(=O)[C@H](C)C[C@]1(C)[C@@H]1[C@@H]2[C@@H]2CC[C@H](OC(=O)CC)[C@@]2(C)CC1 NOTIQUSPUUHHEH-UXOVVSIBSA-N 0.000 description 3
- 239000000284 extract Substances 0.000 description 3
- 230000007935 neutral effect Effects 0.000 description 3
- 238000003619 Marshal aromatic alkylation reaction Methods 0.000 description 2
- 230000006378 damage Effects 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000001010 compromised effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/133—Protocols for remote procedure calls [RPC]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/40—Network security protocols
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
- Multi Processors (AREA)
- Stored Programmes (AREA)
Description
- Die vorliegende Erfindung bezieht sich auf verteilte Computersysteme und bezieht sich insbesondere auf die Verwendung von Fernprozeduraufrufmechanismen in verteilten Computersystemen.
- In einem verteilten Computersystem kann der Wirkungsgrad durch Aufteilen von Resourcen (z. B. eines Dateisystems) unter zahlreichen Rechnern in dem System verbessert werden. Außerdem können in solch einem System mehrere Rechner zusammenwirkend verwendet werden, um eine gemeinsame Aufgabe durchzuführen. Eine Anzahl von Kommunikationsparadigmen sind entwickelt worden, um ein Netzwerk von Rechnern zu strukturieren, um diesen Rechnern zu erlauben, zusammenwirkend zu arbeiten oder Resourcen zu teilen bzw. gemeinsam zu benutzen. Unter diesen Paradigmen befindet sich das "Client-Server"-Modell. Bei dem Client-Server-Modell sind ein oder mehrere Rechner (die "Server") damit betraut, Dienste bereitzustellen, welche andere Rechner (die "Clients") in dem verteilten Rechnersystem anfordern können, entweder durch Weiterreichen von Nachrichten an die Server oder durch Anstoßen von Fernprozeduraufrufen. In dem Client-Server-Paradigma leitet der Client eine Dienstanforderung ein, und der Server reagiert auf eine solche Dienstanforderung.
- Ein Fernprozeduraufruf ist ein Mechanismus, durch welchen ein Programm, welches in einem Prozeßraum eines Computers bzw. Rechners abläuft, bewirkt, daß eine Prozedur in einem Prozeßraum eines anderen Rechners ("entfernter Rechner") ausgeführt wird. Bei einer Implementierung des Client-Server-Paradigmas bewirkt ein Client-Prozeß einen Fernprozeduraufruf, um den angeforderten Dienst in einem Server-Prozeß zu aktivieren. Eine günstige Implementierung des Server-Prozesses ist ein Daemon-Prozeß. Ein Daemon-Prozeß ist ein Rechnerprozeß, welcher Nachrichten von anderen Prozessen empfängt und welcher, einmal begonnen, in dem Rechner resident ist, bis eine "kill"-Nachricht von einem anderen Prozeß empfangen wird, ein Zeitgeber ausläuft, oder wenn alle erwarteten Nachrichten empfangen sind. Solch ein Daemon- Prozeß wird oft verwendet, um eine gemeinsam benutzte Ressource zu verwalten. Zum Beispiel empfängt ein Daemon- Prozeß für eine Druckerwarteschlange Nachrichten von Prozessen, welche die Verwendung von einem oder mehreren mit der Druckerwarteschlange in Verbindung stehenden Druckern erfordern. Um eine Druckoperation herbeizuführen, sendet ein Anforderungsprozeß eine Druckanforderung an den Daemon-Prozeß, welcher, sofern geeignet, die erforderlichen Druckprozesse vorbereiten und planen würde, um die Druckanforderungen zu erfüllen. Der Daemon-Prozeß sorgt für Effizienz, nachdem Aufgaben, welche druckerspezifische Informationen erfordern, dem Daemon-Prozeß zugewiesen und den anfordernden Prozessen abgenommen werden. Man sagt, daß der Daemon-Prozeß "schlafend" ist, während er auf eine Nachricht von einem anfordernden Prozeß wartet, und "wach" ist, wenn er seine zugewiesene Aufgabe ausführt.
- Moderne Computerprogramme sind so konzipiert, daß sie die Vorteile von Modularisierung und Datenabstraktion ausnutzen. Modularisierung gestattet, daß ein komplexes System bei definierten funktionalen Schnittstellen in untereinander zusammenhängende Subsysteme unterteilt ist. Die Implementierungskomplexitäten aller Subsysteme sind daher von anderen Subsystemen abgeschirmt ("bezüglich dieser transparent") und können daher in hohem Maße unabhängig von anderen Subsystemen entwickelt und modifiziert werden.
- Datenabstraktion vereinfacht die Aufgabe der Programmierung durch die Verwendung von Datenstrukturen hohen Niveaus, welche eine logische oder konzeptionelle Darstellung der Objekte sind, welche die Daten darstellen. Somit erlaubt Datenabstraktion dem Programmierer, Daten eher auf einem konzeptionellen bzw. begrifflichen Niveau zu verwalten, als Daten als eine Sammlung primitiver Datentypen zu verwalten.
- Idealerweise sollte eine geeignete Modularisierung einem Anwendungsprogrammierer erlauben, Dienste des Betriebssystems anzustoßen, z. B. den Status eines Druckauftrags ohne Kenntnis der Feinheiten in Bezug darauf, wie der Dienst beschafft wird oder wo der Dienstanbieter lokalisiert ist, anzufordern. Außerdem sollte eine Unterstützung von Datenstrukturen hohen Niveaus bereitgestellt sein, um einem Anwendungsprogramm zu erlauben, eine Schnittstelle zu einem anderen Programm zu bilden, ohne die Datenstrukturen hohen Niveaus des Anwendungsprogramms in Primitive niedrigeren Niveaus zu zerlegen.
- Im Gegensatz zu den Zielen von Datenabstraktion und Modularisierung sind, auch wenn verteilte Rechnersysteme in großem Umfang verwendet worden sind, Fernprozeduraufrufe in sprachunabhängigen Rahmenwerken implementiert. Infolgedessen können nur Datenstrukturen vergleichsweise niedrigen Niveaus zwischen den in dem Fernprozeduraufruf involvierten Computerprozessen weitergereicht werden, was vom Anwendungsprogrammmierer verlangt, ein verteiltes Objekt speziell zu behandeln. Solche Erfordernisse bringen eine Modularisierung zu Fall.
- Ferner ist, da ein geeigneter Mechanismus zum Kommunizieren von Datenstrukturen hohen Niveaus nicht verfügbar ist, die Datenstruktur eines Anwendungsprogramms oft in dem Anwendungsprogrammcode explizit zerlegt, um die zum Kommunizieren von Daten über Maschinengrenzen hinweg notwendigen Datenstrukturen niedrigen Niveaus zu erzeugen. Die Übertragbarkeit und Zuverlässigkeit solcher Anwendungsprogramme werden beeinträchtigt.
- Daher ist ein Mechanismus eines hohen Abstraktionsgrad erwünscht, um Anwendungsprogramme davor zu bewahren, daß sie sich für Fernprozeduraufrufe vorbereiten müssen. Zum Beispiel sollten Fernprozeduraufrufe für den Anwendungsprogrammierer transparent gemacht werden. Das heißt, der Mechanismus sollte gestatten, daß ein Anwendungsprogramm ohne Kenntnis oder Erfordernis, daß bestimmte Datenstrukturen des Anwendungsprogramms auf durch eine entfernte Maschine gesteuerte Ressourcen implementiert werden oder von ihnen abhängig sein müssen, geschrieben wird.
- Weitere Informationen bezüglich des Stands der Technik können in EP-A-474339 gefunden werden, welche sich auf Verfahren und Vorrichtung zum Bereitstellen einer Client-Schnittstelle für einen objektorientierten Aufruf einer Anwendung bezieht. In Übereinstimmung mit der Lehre dieser EP-Veröffentlichung umfaßt in einem Datenverarbeitungsnetzwerk, welches:
- - eine Mehrzahl von Datenverarbeitungsplattformen zum Ausführen von Anwendungen, und
- - eine Klassendatenbank mit Abschnitten, welche für alle der Datenverarbeitungsplattformen zugreifbar ist, aufweist, wobei die Klassendatenbank:
- 1) eine Mehrzahl von Methodeneinträgen, von denen jeder eine Referenz auf einen Mechanismus zum Aufrufen einer Entsprechenden der auf einer Server-Datenverarbeitungsplattform auszuführenden Anwendung enthält, und
- 2) eine Mehrzahl von Klasseneinträgen, von denen jeder Informationen enthält, welche eine entsprechende Gruppe der Methodeneinträge identifizieren und eine unterschiedliche, eindeutig identifizierbare Klasse identifizieren, wobei jede der Klassen durch einen unterschiedlichen Satz von Instanzen referenziert wird, wobei Instanzen Datenfelder sind, welche durch die Anwendungen manipuliert werden können oder auf welche von diesen zugegriffen werden kann, und alle die Instanzen in jedem Satz gemeinsam benutzte Eigenschaften aufweisen,
- enthält, ein Prozeß eines Aufrufens einer Anwendung, welche auf der Server-Datenverarbeitungsplattform auszuführen ist, von einer Client-Anwendung, welche auf einer Client-Datenverarbeitungsplattform abläuft, die durch die Client-Datenverarbeitungsplattform ausgeführten Schritte:
- 1) Empfangen einer Nachricht von der Client-Anwendung für die Durchführung einer eine erste Instanz involvierenden Datenverarbeitungsoperation;
- 2) Zugreifen auf die Klassendatenbank unter Verwendung der durch die erste Instanz referenzierten Klasse und der empfangenen Nachricht, um einen ersten Methodeneintrag und einen entsprechenden Mechanismus zum Aufrufen einer Server-Anwendung auszuwählen; und 3) Auswählen der Server-Datenverarbeitungsplattform, um die Server-Anwendung auszuführen, aus den Datenverarbeitungsplattformen.
- In Übereinstimmung mit der Erfindung werden die zuvor erwähnten Aufgaben durch die Struktur des unabhängigen Anspruchs 1 wie auch das entsprechende Verfahren des unabhängigen Anspruchs 2 erreicht. Bevorzugte Ausführungsformen der Erfindung sind in den abhängigen Ansprüchen definiert.
- In Übereinstimmung mit der vorliegenden Erfindung wird eine Fernprozeduraufrufstruktur und ein -verfahren, welche Datenstrukturen hohen Niveaus unterstützen, durch die Verwendung einer gemeinsamen Datenstruktur oder Klasse ("Basis"-Klasse) bereitgestellt. Durch Verwenden der gemeinsamen Datenstruktur, um ein verteiltes oder gemeinsam benutztes Objekt abzuleiten, kann ein Vorprozessor aufgebaut sein, um automatisch sowohl Client- als auch Server-Stub-Routinen für einen Fernprozeduraufruf zu erzeugen. Ein Anwendungsprogramm, welches die Server-Routinen aufruft, kann an die Server-Routine Daten hohen Niveaus in der gleichen Weise übergeben, wie sie die gleichen Datenstrukturen an eine lokale Routine übergibt.
- In einer Ausführungsform der vorliegenden Erfindung wird der Server als ein Daemon-Prozeß zur Systeminitialisierungszeit erzeugt. Der Server erzeugt ein Fernprozeduraufruf-Serverobjekt ("RpcServer"), welches ein oder mehrere Fernprozeduraufruf-Clientobjekte ("RpcClients") unterbringt. Ein in dem Client erzeugter RpcClient schafft einen Kommunikationskanal zwischen dem RpcServer auf dem Server und dem Client. Außerdem wird ein RpcClient auch auf dem Server erzeugt, um eine asynchrone Kommunikation zwischen dem Server und dem Client bereitzustellen.
- Wenn ein RpcClient in dem Client erzeugt wird, wird ein "Manifest" an den RpcServer gesendet, welcher durch Senden seines eigenen Manifests an den RpcClient antwortet. Ein Manifest enthält Klassen-Metainformationen jeder Klasse in dem entsprechenden Server oder Client. Solche Klassen-Metainformationen enthalten für jede Klasse: (i) einen "Typencode", welcher die Klasse identifiziert, (ii) den Klassennamen, (iii) die Anzahl von Basisklassen, (iv) die Namen aller Basisklassen, sofern vorhanden, von welchen die Klasse abgeleitet ist. Außerdem sieht das Manifest für jedes geteilte Objekt auch vor: (i) den Typencode des gemeinsam benutzten Objekts, und (ii) einen Index in eine Liste gemeinsam benutzter Objekte in der Umgebung des Manifestsenders, wobei eine solche Liste für jedes gemeinsam benutzte Objekt einen Zeiger zu dem gemeinsam benutzten Objekt enthält.
- Ein verteiltes oder gemeinam benutztes Objekt ist durch die Kombination eines in dem Server implementierten Stammobjekts ("Master") und eines oder mehrerer in dem Client implementierten abhängigen Objekts ("Slave") implementiert. Sowohl der Master als auch der Slave sind von der gleichen gemeinsamen Basisklasse abgeleitet. Um eine Übereinstimmung zwischen dem Master und jedem seiner Slaves aufrechtzuerhalten, wird, nachdem sich der Master und seine Slaves in unterschiedlichen Speicherräumen befinden, der Master mit einem Schlüssel, um einen Fernprozeduraufruf zu gestatten, ausgestattet, um einen Zeiger zu dem Slave in dem Speicherraum des Slaves zu erhalten, und jeder Slave ist mit einem Schlüssel zu dem Master in dem Speicherraum des Masters ausgestattet. Somit kann ein Fernprozeduraufruf daraufhin, daß das entfernte Objekt nur einen Schlüssel zu dem entfernten Objekt weiterreicht, arbeiten.
- Die vorliegende Erfindung bewahrt die Semantik lokaler Prozeduraufrufe durch das Erfordernis, daß der Slave auf den Rücksprung des Fernprozeduraufrufs wartet. Die Semantik lokaler Prozeduraufrufe wird auch durch einen Fehlerbehandlungsmechanismus bewahrt, welcher (i) Ausnahmen in dem Speicherraum des Servers fängt, (ii) die Ausnahme an den Client zurückreicht, wobei (iii) der Client wiederum die Ausnahme zur Behandlung an das geeignete Programmniveau zurückreicht. In dem Anwendungsprogramm erscheint die entfernte Ausnahme nicht anders als eine Ausnahme, welche durch eine lokal ausgeführte Prozedur erzeugt wird.
- In einer Ausführungsform werden RpcClients auch in dem Server erzeugt, um dem Server zu gestatten, mit Slaves eines Masterobjekts zu kommunizieren. In dieser Ausführungsform werden Nachrichtendaemonen zum Aussenden von Nachrichten an die Slaves durch den Server erzeugt. Jeder Slave liefert dem Master einen Schlüssel, welcher zur Übersetzung in einen Zeiger zu dem Slave durch den RpcClient des Servers dem Client präsentiert werden kann. Dieser Zeiger zu dem Slave kann verwendet werden, um eine Methode für den Slave aufzurufen, um die Nachricht von dem Nachrichtendaemon zu empfangen.
- Ferner erzeugt in Übereinstimmung mit der vorliegenden Erfindung ein automatisches Programm sowohl Client- als auch Server-Stub-Routinen zum Aufrufen einer Methode in einem verteilten Objekt.
- Weil die vorliegende Erfindung eine Unterstützung für verteilte Objekte in dem Kontext einer Datenstruktur vergleichsweise hohen Niveaus wie etwa einer C++-Klasse vorsieht und die Semantik lokaler Aufrufe bewahrt, können verteilte Objekt in einer für den Anwendungsprogrammierer transparenten Weise implementiert werden, wodurch Robustheit und Wartbarkeit der verteilten Objekte verbessert werden. Die vorliegende Anwendung vereinfacht Anwendungsprogramme, welche verwendet werden, um ein verteiltes Computersystem zu steuern.
- Die vorliegende Erfindung wird unter Berücksichtigung der nachstehenden genauen Beschreibung und der begleitenden Zeichnungen besser verstanden werden.
- Fig. 1 zeigt die Deklarationen der Klassen SharedThang, SharedThangId und RemoteId in einer Ausführungsform der vorliegenden Erfindung.
- Fig. 2 ist ein Blockdiagramm, welches die Prozeßräume eines Server-Prozesses und eines Client-Prozesses in einer Ausführungsform der vorliegenden Erfindung zeigt.
- Fig. 3a ist ein Blockdiagramm, welches die beim Erzeugen eines Vererbungsbaums involvierten Schritte unter Verwendung eines Makros GIFTS_DECLARE und eines Programms GenType zeigt.
- Fig. 3b ist ein Protokoll einer Skriptdatei chomp.cpp, welches die _magic_ -Symbole, welche ein Programm GenType verwendet, um einen Vererbungsbaum bereitzustellen, extrahiert, in Übereinstimmung mit der vorliegenden Erfindung.
- Fig. 4a ist ein Blockdiagramm, welches ein Programm, welches einen Daemon-Prozeß Sectd implementiert, veranschaulicht.
- Fig. 4b ist ein Protokoll eines Programmsegments Sectd.C, welches in einem Server-Prozeß Sectd der vorliegenden Ausführungsform ausgeführt wird.
- Fig. 4c ist ein Protokoll einer Routine SectdProg_1, welche durch einen RPC-Mechanismus 204 aufgerufen wird, um eine Prozedur in Sectd aufzurufen.
- Fig. 5 ist ein Blockdiagramm, welches die Erzeugung eines Objekts der Klasse RpcServer veranschaulicht, welches verwendet wird, um eine Kommunikation zwischen dem Prozeß Sectd der vorliegenden Ausführungsform und seinen Clients bereitzustellen.
- Fig. 6a und Fig. 6b sind jeweils ein Blockdiagramm des Programmcodes, welcher ein Objekt der Klasse SectClientController implementiert, und ein Protokoll des Programmcodes.
- Fig. 7a und 7b sind jeweils die Blockdiagramme der Stub-Routinen SectController::startTester und rStartTester, welche durch das Skript oz für die Master- und Slave-Objekte erzeugt werden, welches die verteilte Klasse SectController in SectClientController und Sectd implementiert.
- Fig. 8 ist der Quellcode in der Datei SectController.C für die tatsächliche Implementierung der Klasse SectController in Sectd.
- Fig. 9a und 9b sind jeweils die Stub-Routinen-Programmsegmente SectController::startTester und rstartTester, welche durch das Script oz über die Klasse StartTester erzeugt werden, wie in den Blockdiagrammen von Fig. 7a und 7b veranschaulicht.
- Fig. 10 ist ein Blockdiagramm, welches eine Skript- Datei oz zum Erzeugen von Stub-Routinen für Client- und Server-Prozesse in Übereinstimmung mit der vorliegenden Erfindung veranschaulicht.
- Fig. 11 ist ein Beispiel einer Spezifierungsdatei zur Eingabe in das Skript oz von Fig. 10.
- In dieser detaillierten Beschreibung wird, obwohl die vorliegende Erfindung in beliebigen verteilten Computersystemen unter Verwendung einer beliebigen Programmiersprache implementiert werden kann, eine Ausführungsform der vorliegenden Erfindung unter Verwendung der Programmiersprache "C++" beschrieben. Der Leser sei auf An Annotated C++ Reference Manual von Ellis und Stroustrup, erschienen bei Addison and Wesley, (1990), bezüglich einer Erläuterung der Programmiersprache C++ verwiesen. In dieser Ausführungsform wird auch ein wohlbekanntes Textverarbeitungsprogramm "awk", welches in dem Betriebssystem UNIX läuft, verwendet, um Programmsegmente zu erzeugen. Die Verwendung von awk und anderer ähnlicher Textverarbeitungsprogramme ist für den Fachmann wohlbekannt. Eine Beschreibung von awk kann in Sektion 1 von SunOS Reference Manual, Ausgabe 4.1, (1990), erhältlich bei Sun Microsystems, Mountain View, CA, gefunden werden.
- In der nachfolgenden Beschreibung und den begleitenden Zeichnungen sind Namen unter der Programmiersprache C++, welche in den Namen überladener Funktionen und Operatoren beteiligt sind, austauschbar mit ihren äquivalenten signaturkodierten Namen der Programmiersprache C ("verstümmelte Namen") in Übereinstimmung mit den sogenannten "Namensverstümmelungsregeln" verwendet. Der Fachmann wird die Übereinstimmung zwischen verstümmelten und unverstümmelten Namen verstehen, so daß eine detaillierte Beschreibung einer Namensverstümmelung weggelassen wird. Eine Erläuterung der Namensverstümmelungsregeln kann auch in An Annotated C++ Reference Manual gefunden werden.
- Die vorliegende Erfindung ist auf alle verteilte Rechnersysteme, welche Fernprozeduraufrufe unterstützen, anwendbar. Ein Beispiel eines solchen Systems ist ein Rechnernetzwerk unter NFS (Network File System), welches von Sun Microsystems, Mountain View, CA, erhältlich ist. Eine Anwendung der vorliegenden Erfindung kann in dem Produkt Gifts von Tandem Computers, Inc. aus Cupertino, CA, gefunden werden. Unter Gifts werden Anwendungsprogramme verwendet, um Hardwarekomponenten entfernter Maschinen zu steuern, zu diagnostizieren und zu konfigurieren. In einer fehlertoleranten Umgebung gestattet die vorliegende Erfindung, daß das Produkt Gifts Hardware steuert, wobei Komponenten vom Dienst hinzugefügt und entfernt werden und Hardware ohne physikalischen Zugriff und Dienstunterbrechung rekonfiguriert wird.
- In der nachfolgenden Beschreibung ist ein "Objekt" eine Datenstruktur, welche typischerweise "Attribute" und "Methoden" aufweist. Ein Attribut kann eine Datenstruktur sein, welche mit dem Objekt verbunden ist. Ein Beispiel einer solchen Datenstruktur ist ein Feld von Werten (z. B. Ganzzahlen) oder eine Zustandsvariable, welche beim Darstellen von Zustandsinformationen des Objekts nützlich ist. Eine Methode weist eine oder mehrere Anweisungen auf, welche beim Bewirken mit dem Objekt verbundener, sinnvoller Vorgänge nützlich sind. Eine Methode wird, wenn sie in einer prozeduralen Programmiersprache implementiert ist, typischerweise durch entweder einen Operator oder eine Prozedur dargestellt.
- Zusätzlich gehört jedes Objekt zu einer oder mehreren Klassen. Alle Objekte innerhalb einer Klasse sind darin gleich, daß jedes Objekt den gleichen Satz von Attributen und Methoden besitzt. Jede Klasse von Objekten kann verwendet werden, um andere Klassen von Objekten zu definieren. Eine abgeleitete Klasse erbt von einer "Eltern"- Klasse die Attribute und Methoden der Elternklasse und enthält zusätzlich Attribute und Methoden, welche für die abgeleitete Klasse definiert oder bezüglich der Elternklasse modifiziert sind. In dieser Hierarchie wird eine Klasse, von welcher eine oder mehrere andere Klassen abgeleitet sind, eine "Basis"-Klasse genannt.
- Eine Ausführungsform der vorliegenden Erfindung sieht eine Basisklasse SharedThang vor, von welcher alle verteilten Objekte abzuleiten sind. Die Klassendefinition von SharedThang und ihre Implementierung werden in den Dateien SharedThang.C und SharedThang.h gefunden. Die Klasse SharedThang besitzt Attribute (i) stid, welches ein Zeiger zu einem Objekt der Klasse SharedThangId ist, und (ii) commonType, welches ein Zeiger zu einem Objekt der Klasse ClassInfo ist. Das Attribut stid zeigt zu einem SharedThangld-Objekt ("SharedThangld"), welches auf eine Liste aller gemeinsam benutzter Objekte ("shared object list") in dem aktuellen Prozeßraum zugreift. Für jedes gemeinsam benutzte Objekt pflegt, falls das gemeinsam benutzte Objekt ein Master ist, sein SharedThangId eine Liste der Slaves des gemeinsam benutzten Objekts ("Slaves"). Ersatzweise hält SharedThangId die Identität des Masters des gemeinsam benutzten Objekts ("Master"), wenn das gemeinsam benutzte Objekt ein Slave ist.
- Ein ClassInfo-Objekt besitzt die Attribute (i) type, welches ein die Klasse ("Objektklasse") identifizierender "Typencode" ist, (ii) name, welches eine die Objektklasse identifizierende Zeichenkette ist, (iii) nbases, welches die Anzahl der Basisklassen ist, soweit vorhanden, von welcher die Objektklasse abstammt, (iv) bases, welches ein Feld von Zeigern ist, von denen jeder zu einem Objekt der Klasse ClassInfo zeigt, wobei jedes solche Objekt einer der Basisklassen der Objektklasse entspricht, und (v) xdr, welches ein Zeiger zu einer Routine ist, welche zum Kodieren und Dekodieren eines Objekts der Objektklasse zu und von einem neutralen, zur Übertragung zwischen Computern durch einen Datenpuffer der Klasse XdrBuffer geeigneten Datenformat vorgesehen ist.
- Zusätzlich enthält die Klasse ClassInfo die Methoden (i) CastDown, welche verwendet werden kann, um einen Zeiger eines Objekts mit einem Zeiger zu einem anderen in einer Wurzelklasse enthaltenen Objekt auszutauschen, (ii) typeofoder get, welche eine der Objektklasse eines Objekts entsprechende ClassInfo-Struktur zurückgibt, (iii) nameof, welche den Namen der Objektklasse des Objekts zurückgibt, und (iv) traverse, welche jeden Knoten in einem Vererbungsbaum besucht (siehe unten). Die Klassendefinition von ClassInfo und ihre Implementierung werden in ClassInfo.h und ClassInfo.C gefunden. In der vorliegenden Ausführungsform wird ein Objekt der Klasse ClassInfo für (i) jeden unterstützten Datentyp (z. B. Ganzzahlen, Gleitkommazahlen etc.), (ii) jede deklarierte Klasse und (iii) den mit jeder deklarierten Klasse verbundenen Zeigertyp erzeugt.
- In SharedThangId werden die slaves und master jeweils durch ein Objekt der Klasse RemoteId darstellt. Jedes RemoteId identifiziert den Gegenpart (oder "Zwilling") eines gemeinsam benutzten Objekts in der entfernten Umgebung. Zum Beispiel weist ein Zwilling eines gemeinsam benutzten Objekts in dem Server (d. h. ein Master) eine Liste slaves von RemoteId-Objekten auf, wobei jedes RemoteId-Objekt einem der Slaves des Masters entspricht. Umgekehrt weist ein Zwilling eines gemeinsam benutzten Objekts in einem Client (d. h. ein Slave) ein RemoteId-Objekt master auf, welches dem Master des Slaves entspricht. Jedes RemoteId-Objekt weist einen Zeiger zu einem Objekt der Klasse RpcClient und einen Index in eine Liste gemeinsam benutzter Objekte einer SharedThangId auf. Nachdem die SharedThangId's des Servers und des Clients typischerweise unterschiedliche Listen gemeinsam benutzter Objekte aufweisen, weist dasselbe gemeinsam benutzte Objekt unterschiedliche Indizes in der Liste gemeinsam benutzter Objekte des Clients und des Servers auf. Der RpcClient identifiziert einen Kommunikationskanal zwischen einem Master und einem Slave und wird nachstehend genauer erläutert.
- Fig. 1 stellt die Deklarationen der Klassen SharedThang, SharedThangId und RemoteId bereit. Die Klasse SharedThang liefert die Methoden: (i) id(), welche das Attribut stid zurückgibt, (ii) masterid(), welche die RemoteId des Masters eines SharedThang zurückgibt, und (iii) getCommonType(), welche commonType zurückgibt, was ein Objekt der Klasse ClassInfo ist. Die Klasse SharedThangId liefert die Methoden addClient und addMaster zum Hinzufügen jeweils einer Master-Liste slaves einer einem Slave entsprechenden RemoteId und zum Hinzufügen einer dem Master entsprechenden RemoteId in dem Slave.
- In der vorliegenden Ausführungsform wird ein Fernprozeduraufruf durch Ausführen einer RPC-Funktion execute durchgeführt, welche an den RPC-Mechanismus eine "Nachricht" und eine Prozedurnummer übergibt. Die Prozedurnummer identifiziert die Verbindung zwischen den kommunizierenden Programmen, und die Nachricht ist in einem Puffer ("message") der Klasse XdrBuffer enthalten. Die Definition und Implementierung von XdrBuffer sind in den Dateien XdrBuffer.h und XdrBuffer.C enthalten. Um ein von der Klasse Thang (von welcher sich SharedThang ableitet) abgeleitetes Objekt in eine Nachricht zu kodieren oder von einer Nachricht zu dekodieren, wird eine Methode xdr in dem ClassInfo-Objekt der Klasse des Objekts durch den Klassenimplementierer bereitgestellt.
- In einer Nachricht der vorliegenden Ausführungsform besitzt ein kodiertes Objekt die Felder: (i) byte_count, welches die Größe in Bytes des kodierten Objekts ist, und (ii) eine Liste von subrecords. Jeder subrecord besitzt die Felder: (i) type_tag, welches der Typencode eines enthaltenen Objekts ist, (ii) byte_count, welches die Größe in Bytes des subrecords ist, (iii) primitives, welches eine Liste primitiver Datenstrukturen ist, und (iv) eine Liste von subrecords.
- Fig. 2 veranschaulicht die Prozeßräume einer Servermaschine und einer Clientmaschine in einer Ausführungsform der vorliegenden Erfindung. In der Servermaschine 200 ist ein RPC-Mechanismus 204 ein herkömmliches Anwendungsprogramm, welches für andere Anwendungsprogramme eine Fernprozeduraufrufschnittstelle bereitstellt, um auf die zwischenmaschinellen Kommunikationsdienste niedrigen Niveaus im Kernel 250 der Servermaschine 200 zuzugreifen. In analoger Weise stellt ein Rpc-Mechanismus 203 eine herkömmliche Anwendungsprogrammschnittstelle für andere Anwendungsprogramme bereit, um auf die zwischenmaschinellen Kommunikationsdienste des Kernels 251 zuzugreifen. Typischerweise sind die Kopfdateien des Rpc-Mechanismus, wie die Rpc-Mechanismen, 203 oder 204, mit einem Anwendungsprogramm kompiliert, um eine herkömmliche Programmschnittstelle bereitzustellen. Kernel 250 und 251 steuern die zugrundeliegende physikalische Verbindung, z. B. ein Netzwerk oder Busprotokoll zwischen den miteinander verbundenen Rechnern. In der vorliegenden Ausführungsform können die miteinander verbundenen Rechner von sehr unterschiedlicher Architektur sein.
- Für jedes in der vorliegenden Ausführungsform implementierte verteilte Objekt wird ein "Master" des verteilten Objekts in einem Serverprozeß erzeugt, repräsentiert durch Server 206, um den tatsächlichen lokalen Prozeduraufruf anzustoßen. Um auf eine Methode in den Masterobjekt zuzugreifen, ist es erforderlich, den Schlüssel, welcher ein Index in die Liste gemeinsam benutzter Objekte des Servers 206 (d. h. die Liste aller SharedThang's im Server 206) gegen einen Zeiger zu dem Masterobjekt im Speicherraum des Servers 206 auszutauschen. Nachdem ein Zeiger in der Liste gemeinsam benutzter Objekte ein Zeiger zu einem in dem Master enthaltenen Objekt (Klasse SharedThang) ist, muß, falls es notwendig ist, eine Memberfunktion eines anderen in dem Master enthaltenen Objekts (etwa Klasse foo, welche von Klasse SharedThang abgeleitet ist) zu aktivieren, der Zeiger zu SharedThang von der Liste gemeinsam benutzter Objekte gegen einen Zeiger zu dem enthaltenen foo-Objekt ausgetauscht werden. Dieser Prozeß, welcher "Downcasting" genannt wird, wird durch die Memberfunktion CastDown der Klasse ClassInfo durchgeführt. Um CastDown zu implementieren, ist es erforderlich, die Klassenableitungsgeschichte der Klassen aller gemeinsam benutzter Objekte zu kennen. In der vorliegenden Ausführungsform wird die Ableitungsgeschichte bereitgestellt durch Verwenden (i) eines Makros GIFTS_DECLARE, um die Deklarationen jeder Klasse gemeinsam benutzter Objekte zu modifizieren, (ii) um aus dem durch den Vorprozessor cpp erzeugten Code eine Liste gemeinsam benutzter Objektklassen zu extrahieren, und (iii) Bereitstellen einer solchen Liste an ein selbständiges Programm GenType, um einen Code in der Sprache C zu generieren, welcher kompiliert werden kann, um einen Laufzeit-Vererbungsbaum auszubilden. Dieser Prozeß wird durch das Blockdiagramm von Fig. 3a veranschaulicht.
- Wie in Fig. 3a gezeigt, wird bei Schritt 301 ein Makro GIFTS_DECLARE bereitgestellt, um in die Deklaration jeder von der Klasse Thang abgeleiteten Klasse ("Objektklasse") die Deklarationen einzufügen: (i) einer Memberfunktion _typeof(), (ii) einer Anzahl von Symbolen, wobei jedes Symbol die Kettung der Zeichenkette "_magic_" und den Namen einer Basisklasse, von welcher sich die Objektklasse ableitet, bereitstellt, und (iii) einer Zeichenkette _nameof, welcher der Name der Objektklasse zugewiesen ist. Als ein Ergebnis des Makros GIFTS_DECLARE wird die Kompilierung dieser zusätzlichen Deklarationen in der Symboltabelle jeder Klasse eine Anzahl von Symbolen enthalten, welchen die Zeichenkette "_magic_" vorangestellt ist. Diese Symbole werden in der vorliegenden Erfindung verwendet, um die Ableitungsmöglichkeiten jeder von der Klasse Thang abgeleiteten Klasse zu kodieren. Das Makro GIFTS_DECLARE ist in macros.h aufgelistet.
- In Schritt 302 extrahiert eine "Skript"-Datei chomp.cpp unter Verwendung eines Textverarbeitungsdienstprogramms egrep aus den Symboltabellen kompilierter Objektdateien die eingefügten Symbole, welchen die Zeichenkette "_magic_" vorangestellt ist. Diese Symbole werden dann dem selbständigen Programm GenType zugeführt (Schritt 303 zugeführt), welches in UNIX von einem Befehlszeileninterpreter oder einer "Shell" aus läuft. Diese Symbole gestatten GenType, einen Vererbungsbaum bezüglich aller von Thang abgeleiteten Klassen von Objekten aufzubauen. Chomp.cpp ist in Fig. 3b aufgelistet. Der Vererbungsbaum enthält (1) ein Feld list, welches ein Feld ist, welches die ClassInfo-Strukturen entsprechend allen Klassen, Zeigern zu Klassen und unterstützten primitiven Datentypen enthält; und (ii) für jede Klasse ("Objektklasse") gemeinsam benutzter Objekte ein Feld von Zeigern zu ClassInfo, wobei jedes Element des Feldes zu einer Basisklasse zeigt, von welcher die Objektklasse abgeleitet ist.
- GenType gibt den in Schritt 303 in C-Code aufgebauten Vererbungsbaum aus, welcher kompiliert wird, um den Vererbungsbaum als eine statische Datenstruktur sowohl im Server- als auch Client-Adreßraum zu erzeugen. Zusätzlich generiert GenType auch den Code, um die _ tpyeof()-Memberfunktion für jede Klasse zu implementieren. Die _typeof()-Funktion greift auf die list-Datenstruktur zu, um den Typencode eines Objekts wiederzugewinnen. Der Quellcode für GenType ist als GenType.C bereitgestellt.
- Wie zuvor diskutiert, ist, unter der Voraussetzung eines Zeigers zu einem Thang-Objekt, welches in einem größeren Objekt enthalten ist, der Zweck der ClassInfo- Memberfunktion CastDown, einen Zeiger zu entweder einem anderen in dem größeren Objekt enthaltenen Objekt oder dem größeren Objekt selbst wiederzugewinnen. Die für das Downcasten vorgesehene Klasse wird CastDown mit ihrem Namen bereitgestellt. Um einen Zeiger zu dem größeren Objekt zu erhalten, wird eine Funktion root aufgerufen, um den Zeiger "root" des größeren Objekts zurückzugeben. Falls das Downcasten sich auf ein in dem größeren Objekt enthaltenes Objekt bezieht, durchquert CastDown den Vererbungsbaum von der ClassInfo von "root", zurückgegeben von der ClassInfo-Memberfunktion get, in einem Versuch, die vorgesehene Klasse zu erreichen. Falls eine zu dem Namen der vorgesehenen Klasse passende Klasse erreicht ist, berechnet CastDown einen Zeiger zu dem größeren Objekt unter Verwendung des Offsets zwischen der Destruktorfunktion und dem this-Zeiger in jedem in dem Ableitungsweg eingreifenden Objekt. (In der Programmiersprache C++ ist jedes Objekt mit einem Zeiger this ausgestattet, welcher zu dem Objekt selbst zeigt.) Falls der berechnete Zeiger zu dem größeren Objekt zu dem von root zurückgegebenen Zeiger paßt, ist das Downcasten erfolgreich, und der Zeiger zu dem in der angestrebten Klasse enthaltenen Objekt wird zurückgegeben. Anderenfalls wird der Vererbungsbaum weiter durchquert nach einem anderen Vererbungsweg, welcher die vorgesehene Klasse erreicht. Diese Prozedur ist erforderlich, da die Sprache C++ mehrfache Vererbungswege erlaubt.
- Server 206 ist normalerweise als ein Daemon implementiert. Fig. 4a ist ein Blockdiagramm des Programms, welches eine Daemon Sectd (System Exercise and Confidence Test Daemon) implementiert. Daemon Sectd beherbergt ein Master-Objekt SectController. Sectd und SectController sind jeweils durch die Programmsegmente Sectd.C und SectController.C implementiert, welche in Fig. 4b und 8 aufgelistet sind. Wie in Fig. 4a gezeigt, wird Sectd als ein Anwendungsprogram (d. h. Server 206) unter Verwendung der Benutzerschnittstelle Gifts gestartet (Schritt 401). Sectd erzeugt dann den Master für das verteilte Objekt SectController (Schritt 402) durch Aufrufen der "Server"-seitigen Konstruktorroutine. Wie in dem Programmsegment Sectcontroller.C von Fig. 8 gezeigt, ist eine Methode startTester die einzige in Sectd implementierte Methode der Klasse SectController. Im allgemeinen sind Methoden eines gemeinsam benutzten Objekts nur auf der Serverseite implementiert.
- Die Konstruktorroutine (Serverseite) für SectController gibt einen Zeiger für das erzeugte SectController-Objekt zurück (Schritt 403). Um mit seinen Clients zu kommunizieren, erzeugt Sectd ein Kommunikationsserverobjekt RpcServer (Schritt 404). RpcServer wird verwendet, um Kommunikation zwischen RPC-Mechanismus 204 und Sectd zu filtern. Fig. 5 ist ein Blockdiagramm, welches eine Implementierung eines RpcServers veranschaulicht. RpcServer ist durch zwei Programmsegmente RpcServer.h und RpcServer.C implementiert. Nach Erzeugen des RpcServers geht Sectd schlafen, wobei es auf Dienstanforderungen von Client-Objekten wie etwa Client 207 der Client-Maschine 251 wartet. Der Fernprozeduraufrufmechanismus 204 ruft eine Routine SectdProg_1 (aufgelistet in Fig. 4c) auf, welche eine Routine in Sectd in Übereinstimmung mit einem von einem Client-Objekt empfangenen Handle aufruft.
- Wie in Fig. 5 gezeigt, erzeugt Sect einen RpcServer durch Aufrufen der Konstruktorroutine eines RpcServer bei Schritt 501. Diese Konstruktorroutine (i) ruft eine Systemroutine svc_register auf, um einen Transportniveaudienst zum Kommunizieren zwischen RPC-Mechanismus 204 und Sectd zu erzeugen (Schritt 502), und (ii) registriert den RpcServer in dem Registerdienst des Netzwerks (Schritt 503). Der Registerdienst des Netzwerks stellt einen Nachschlagedienst in dem Netzwerk zum Lokalisieren von Programmen bereit. Das Register des Netzwerks empfängt einen Wirtsmaschinennamen, den Programmnamen und eine Version und gibt einen Handle an das angeforderte Programm zurück. Ein Eintrag in dem Netzwerkregisterdienst erlaubt einem entfernten Programm, in einem Fernprozeduraufruf unter Verwendung der Programmnummer auf den RpcServer zuzugreifen.
- Für jede Methode des verteilten Objekts ist eine Stub-Routine in Sectd und jedem seiner Clients, wie etwa Client 207, vorgesehen. Somit sind, wie in Fig. 2 gezeigt, um einen Fernprozeduraufruf für die Methode StartTester von SectController vorzubereiten, "Stub"-Routinen 202 und 201 vorgesehen, um jeweils in Prozeßräumen von Sectd und Client 207 ausgeführt zu werden. Stub-Routinen 201 und 202 führen typischerweise das durch, was "Marshalling" und "Unmarshalling"-Operationen genannt wird. Marshalling bildet maschinenabhängige Datenstrukturen aus den formalen Parametern des Methodenaufrufs (z. B. Zeiger zu einem Feld) einer Maschine in eine "neutrale" Datenstruktur um, welche an die potentiell unterschiedliche Umgebung einer anderen Maschine übergeben werden kann. Unmarshalling bildet das neutrale, zwischen den Umgebungen ausgetauschte Format in maschinenabhängige Datenstrukturen ab. Wenn zum Beispiel ein Anwendungsprogramm 208 eine Client-Stub-Routine 201 mit einer Liste von Argumenten in maschinenabhängigen Datenstrukturen aufruft, führt die Client-Stub-Routine 201 das Marshalling durch und sendet die gemarshallten Argumente, üblicherweise in der Form einer zwischenprozessualen Nachricht, an RPC-Mechanismus 203. Der RPC-Mechanismus 203 und dessen Gegenstück, RPC-Mechanismus 204, fordert vom Kernel 251 Systemdienste (z. B. Anschlüsse und Protokolle) zum Kommunizieren über Maschinengrenzen hinweg an. Die durch RPC-Mechanismus 203 gesendeten gemarshallten Argumente werden durch RPC-Mechanismus 204 empfangen, welcher wiederum die gemarshallten Argumente an Sectd übergibt. Sectd, welcher ein Daemon-Prozeß ist, ruft eine Stub-Routine 202 auf, um die empfangenen Argumente zu unmarshallen. Die Stub-Routine 202 übergibt dann die ge-unmarshallten Argumente an die lokale Prozedur 205 (z. B. "startTester 14SectControllerFRUiRC5Twine") (Der Name dieses Programms ist ein Beispiel eines verstümmelten Namens. Der erste Teil des Namens, welcher vor dem "_" steht, ist der Name der C++-Memberfunktion, und der zweite Teil des Namens, welcher auf "_" folgt, ist der Signaturanteil. Der Signaturanteil kodiert die Parameterliste zu dieser Memberfunktion. Verstümmelte Namen erlauben eine Implementierung eines "Überladens" in der Programmiersprache C++ ohne Modifizieren der Sprache C. Ein C++- Programm wird, nachdem ein Vorprozessor cpp aus dem C++-Programm einen Quellcode in der Programmiersprache C generiert, typischerweise durch einen C-Compiler kompiliert), welche den
- tatsächlich angeforderten Dienst der Methode StartTester implementiert. Ergebnisse, sofern vorhanden, werden von der lokalen Prozedur 205 an die Stub-Routine 202 zurückgegeben, welche die Ergebnisse zur Rückgabe an Client 207 marshallt. Rückgabe von Ergebnissen von Sectd an Client 207 folgt in umgekehrter Reihenfolge im wesentlichen dem Weg der gemarshallten Argumente. Stub-Routine 201 unmarshallt das Ergebnis, welches dann an Anwendungsprogramm 208 zurückgegeben wird. Es gibt keine Grenze bezüglich der Anzahl von Clients, wie etwa Client 207, welche Sectd bedienen kann.
- Das Programmsegment für SectClientController, welches in SectClientController.c von Fig. 6b aufgelistet und in dem Blockdiagramm von Fig. 6a abstrahiert ist, ist ein Beispiel eines Teils eines Client-Prozesses, wie etwa Client 207, welches einen Fernprozeduraufruf bewerkstelligt.
- Vor dem Herstellen irgendwelcher Fernprozeduraufrufe erzeugt SectClientController ein Objekt der Klasse RpcClient, um einen Kommunikationskanal zwischen ihm selbst und Sectd auszubilden (Schritt 601). Die Klasse RpcClient ist auch von der Klasse sharedThang abgeleitet. Eine Implementierung des RpcClient-Objekts und diesbezüglicher Funktionen werden in den Dateien RpcClient.h, RpcClient.c, RpcUtil.h, RpcUtil.h, Wrapper.h und Wrapper.c gefunden.
- Wie in Fig. 6a gezeigt, stellt, wenn SectClientController ein RpcClient-Objekt erzeugt, eine Konstruktorroutine von RpcClient (SectClientControllerseitig) eine Anforderung an Systemdienste, um eine vorübergehende Programmnummer anzufordern, welche mit der Versionsnummer präsentiert wird, um einen Transportniveaudienst einzuleiten (Schritt 602). Dieser Transportniveaudienst wird als ein Server in SectClientController zum Empfangen von Nachrichten von dem RpcClient-Objekt von Sectd verwendet, was nachstehend diskutiert wird. (RpcClients von Sectd stellen einen Weg zum Kommunizieren von Statusinformationen von Master-Objekten in Sectd an die Clients von Sectd bereit, wodurch ein Rückrufmechanismus ausgebildet wird.) Somit agiert in Bezug auf von Sectd empfangenen Nachrichten SectClientController als ein Server. Dieser Transportniveaudienst wird mit dem Netzwerkregisterdienst registriert, um zuzulassen, daß Nachrichten von Sectd SectClientController erreichen (Schritt 603). Die Konstruktorroutine von RpcClient stellt dann einen Fernprozeduraufruf (Schritt 604) zu einer entfernten Routine rct_9RpcClientFPCcUlUlR8ManifestUlPC9RpcHandlePC7timeint erval ("rct") in Sectd (durch SectdProg_1, gezeigt in Fig. 4c) her. Der Fernprozeduraufruf an rct sendet an Sectd (i) die vorübergehende Programmnummer und Versionsnummer des Transportniveaudienstes, (ii) den Wirtsmaschinennamen von SectClientController, (iii) ein "Manifest" (siehe unten) von SectClientController (nachstehend erläutert) und (iv) den Index des RpcClient-Objekts in der geteilten Objektliste von SectClientController. Umgekehrt ruft ein Fernprozeduraufruf an rct, welcher in dem Programmsegment in Wrapper.C implementiert ist, in Schritt 605 die Konstruktorroutine (serverseitig) für RpcClient auf, um (i) das empfangene Manifest zu übersetzen, und (ii) weist zum Zwecke eines rückwärtigen Aufrufs als Master des RpcClient von Sectd dem Index in der Liste von Objekten von Sectd den RpcClient von SectClientController zu. Sectd erzeugt auch einen Nachrichten-Daemon ozmsgd (Schritt 606). Der Fernprozeduraufruf an rct gibt ein Manifest, welches die Information zu allen in Sectd implementierten Klassen einschließt, zurück. Der Nachrichten- Daemon ozmsgd ist als eine Einrichtung gedacht, um die Slaves eines Masters in Sectd "zurückzurufen", um die Slaves von entweder (i) einem asynchronen Zustandswechsel in dem Master, (ii) der Erzeugung eines neuen gemeinsam benutzten Objekts in Sectd, oder (iii) der Zerstörung eines gemeinsam benutzten Objekts in Sectd zu unterrichten.
- In dem herkömmlichen Server-Client-Modell fordert ein Client durch Senden einer Nachricht an einen Server einen Dienst von dem Server an. Der Server bestätigt dann oder gibt, nachdem der angeforderte Dienst durchgeführt ist, ein Ergebnis zurück. In diesem herkömmlichen Modell leitet der Server keine Kommunikation mit dem Client ein. In der vorliegenden Ausführungsform jedoch ist es, da ein Master eines verteilten Objekts einen oder mehrere Clients bedient, manchmal notwendig, daß der Master des verteilten Objekts eine Zustandsänderung des Master-Objekts asynchron kommuniziert. Zu diesem Zweck ruft, in diesem Fall als Client agierend, der Daemon ozmsgd SectClientController und alle ähnlichen Clients von Sectd auf, um den Zustandswechsel des Master-Objekts und die Erzeugung oder Zerstörung eines gemeinsam benutzten Objekts, wie zuvor diskutiert, zu kommunizieren.
- In der vorliegenden Ausführungsform enthält ein Manifest für jede bekannte Klasse Klassen-"Metainformation". Damit Slave- und Master-Objekte richtig angepaßt werden können, enthält eine solche Metainformation für jede Klasse (i) einen Typencode, welcher die Klasse identifiziert, (ii) den Namen der Klasse, (iii) die Anzahl von Basisklassen, sofern vorhanden, von welchen die Klasse abgeleitet ist, und (iv) die Namen solcher Basisklassen. Zusätzlich enthält ein Manifest für jedes gemeinsam benutzte Objekt in dem das Manifest liefernden Prozeß einen Typencode und den Index des gemeinsam benutzten Objekts in die Liste gemeinsam benutzter Objekte des sendenden Prozesses. Das Manifest wird aus der Struktur list aufgebaut, einem Teil des Vererbungsbaums, welcher durch zuvor beschriebenes GenType erzeugt wird. Die Definition und Implementierung des Klassenmanifests sind in den Dateien manifest.c und manifest.h bereitgestellt.
- In der vorliegenden Ausführungsform stellt ein Systemdesigner für den Anwendungsprogrammierer alle zu verwendenden Systemobjekte bereit. Obwohl diese Systemobjekte verteilt oder lokal sein können, ist die Implementierung vor dem Anwendungsprogrammierer verborgen. Wenn die SectClientController-Klasse zuerst instanziiert wird, lokalisiert die Konstruktorroutine des SectClientController den Master-SectController von einer Liste gemeinsam benutzter Objekte des Masters, welche von dem von dem SectController empfangenen Manifest erzeugt wird (Schritt 607). Wie durch dieses Beispiel veranschaulicht, erfordert eine Verbindung zwischen einem Master und dem Slave nicht, daß Master- und Slave-Objekt von der gleichen Klasse sind. In dieser Ausführungsform wird Kompatibilität erreicht, nachdem SectClientController eine von SectController abgeleitete Klasse ist. Somit kann der gleiche SectController in Sectd verwendet werden, um eine Zahl von Vorrichtungen, welche zu von der SectController- Klasse abgeleiteten Klassen gehören, zu steuern. Um die Verbindung zu vervollständigen, fordert SectClientController ein "Join" mit dem Master-Objekt SectController in Sectd durch Herstellen eines Aufrufs an eine Funktion JoinWithMaster an (Schritt 608), wobei an JoinWithMaster übergeben wird: (i) ein Zeiger zu SectClientController, (ii) ein Handle Join_With_Slave_1, welcher eine Anweisung an JoinWithMaster darstellt, eine Routine JoinWithSlave aufzurufen, (iii) ein Zeiger zu dem RpcClient von SectClientcontroller, (iv) der Name der Basisklasse "SectController" und (v) ein Index master in die Liste gemeinsam benutzter Objekte von Sectd, wobei master einem SectController-Objekt in Sectd entspricht. Sowohl JoinWithMaster als auch JoinWithSlave sind in den Programmsegmenten der Daten RpcUtil.h und RpcUtil.c aufgelistet.
- JoinWithMaster erhält das ClassInfo-Objekt, welches einer Klasse SectController entspricht. Das ClassInfo-Objekt wird durch Anwenden der typeof-Methode auf den Namen "SectController" zurückgegeben. Der Index master und der RpcClient werden dann durch die Memberfunktion addMaster von SharedThangId mit dem SectClientController-Objekt verbunden. Danach ruft ein Fernprozeduraufruf (Schritt 609), welcher den Handle Join_With_Slave_1 verwendet, durch SectdProgl die Funktion rjoinWithSlave_FP11SharedThangP9RpcClientUi ("rjoin") in Sectd auf, um einen Index von SectClientController in eine Liste gemeinsam benutzter Objekte von SectClientController an Sectd zu liefern.
- Der Fernprozeduraufruf an rjoin übergibt an Sectd (i) den Index master, welcher SectController in der Liste von SharedThang's von Sectd identifiziert, und (ii) die Indizes von RpcClient und SectClientController in die Liste gemeinsam benutzter Objekte von SectClientcontroller. Um mit dem entsprechenden RpcClient in Sectd zusammenzupassen, wird der Index von RpcClient gegen einen Zeiger zu dem entsprechenden in RpcClient enthaltenen Objekt der Klasse SharedThang ausgetauscht. Dieser SharedThang-Zeiger wird wiederum zu einem Zeiger zu dem durch vorgenannten Sectd erzeugten RpcClient-Objekt downgecastet. rjoin ruft dann die lokale Routine JoinWithSlave, um den SectController von Sectd mit der RemoteId zu verknüpfen, welche ausgebildet ist durch (i) den übergebenen Index von SectClientController und (ii) das entsprechende RpcClient-Objekt von Sectd. Dieses RemoteId-Objekt ist in die slaves-Liste von SectController unter Verwendung der addClient-Memberfunktion von SharedThangId eingegeben.
- Um sicherzustellen, daß die Implementierung für den Anwendungsprogrammierer transparent ist, sieht die vorliegende Erfindung einen Mechanismus vor, welcher für einen Fernprozeduraufruf eine "lokale Prozeduraufrufsemantik" bewahrt. Bei einer lokalen Prozeduraufrufsemantik wartet der Client-Prozeß auf den Prozeduraufruf, um in der gleichen Weise wie eine Prozedur in dem Speicherraum des Client-Prozesses zurückzuspringen. Des weiteren wird aufgrund der Schwierigkeit, in einem herkömmlichen Fernprozeduraufruf sprachenunabhängige Fehlerbehandlungsmechanismen zu implementieren, ein in der entfernten Umgebung auftretender Fehler oft nicht an die lokale Umgebung zurückgegeben. Statt dessen gibt die aufrufende Prozedur nach einer gewissen Zeit eine Zeitablaufnachricht zurück, wenn die erwarteten Ergebnisse nicht empfangen werden. Jedoch kann eine lokale Prozeduraufrufsemantik nur bewahrt werden, wenn der Fehlerbehandlungsmechanismus für Fernprozeduraufrufe ebenfalls ununterscheidbar von dem Fehlerbehandlungsmechanismus für lokale Prozeduraufrufe gemacht wird.
- In einer herkömmlichen Implementierung von Fernprozeduraufrufen führt der Client eine sequentielle Ausführung in seinem Prozeßraum fort, bis eine explizite "Warte"-Anweisung ausgeführt wird. Eine solche Implementierung ist unerwünscht, da das Anwendungsprogramm sowohl über eine Kenntnis einer entfernten Implementierung als auch eine Synchronisierung mit einem entfernten Ereignis verfügen muß.
- Fernprozeduraufrufe können durch Anstoßen einer Stub- Routine, wie etwa Stub-Routine 201, in der mit Bezug auf Fig. 2 beschriebenen Art und Weise in SectClientController bewirkt werden. In dieser Ausführungsform werden Stub-Routinen 201 und 202 unter Verwendung eines durch eine "Skript"-Datei (das "oz"-Skript) implementierten Stub-Routinen-Generators gleichzeitig generiert. Eine Skript-Datei ist ein Programm, welches durch einen UNIX-Befehlszeileninterpreter (im UNIX-Jargon eine "Shell" genannt) ausführbar ist.
- Fig. 7a und 7b sind jeweils die Blockdiagramme der Stub-Routinen SectController::startTester und rstartTester_14SectControllerFRUiRC5Twine ("rstartTester"), welche durch das oz-Skript für die Master- und Slave-Objekte erzeugt werden, welches die verteilte Klasse SectController in SectClientController und Sectd implementiert. Fig. 8 ist der Quellcode in Datei SectController.C für die tatsächliche Implementierung der Klasse SectController in Sectd, welche zusätzlich zu Konstruktor- und Destruktorfunktionen eine Memberfunktion SectController::StartTester aufweist. Nachdem sich StartTester in Sectd befinden soll, geschieht der Zugriff von SectClientController auf StartTester durch die durch das oz-Skript generierte Stub-Routine. Das oz-Skript generiert jeweils zwei Stub-Routinen für SectController in Dateien svc_SectController.C und clnt_SectController.C zur Kompilierung mit Sectd und SectClientController. Zum Zwecke des Kompilierens von SectClientController enthält sectClientController.C die Datei clnt_SectController.C. Für den Zweck eines Kompilierens des Servers 206 enthält SectController.C svc Controller.C. Nachdem die Memberfunktion StartTester tatsächlich nur in Sectd implementiert ist, ist der Rumpf der Memberfunktion SectController::StartTester nur für eine Kompilierung in Sectd enthalten. Der durch das oz-Skript in Sectd generierten Stub-Routine ist das Zeichen "r" vorangestellt, um es von dem tatsächlichen SectController::StartTester- Code zu unterscheiden. Damit wird, wie in Fig. 8 gezeigt, die alternative Compiler-Direktive "#if defined(Server)" verwendet, wo eine Implikation in der Sectd zugehörigen Version von SectController.C (d. h. svc- SectController) erwünscht ist, und die alternative Compiler-Direktive "#if defined(oz)" wird verwendet, wo eine Implikation in der SectClientController zugehörigen SectController.C (d. h. SectController::StartTester-Stub) erwünscht ist. Als ein Kompilierungsergebnis wird eine Objektdatei SectController.o für jede Version von SectController.C zum Verknüpfen mit seinem jeweiligen Client oder Server erhalten. Anwendungsprogramme, welche die Client-Version von SectController.o verküpfen, müssen nicht wissen, daß SectController ein verteiltes Objekt ist.
- Wie in Fig. 7a gezeigt, erhält SectController::startTester den Index masterid (d. h. den Index in die Sectd zugehörige Liste gemeinsam benutzter Objekte) von SectController (Schritt 701). Die vorzeichenlose lange Ganzzahl handle, welche die aufzurufende Memberfunktion (d. h. rstartTester) kodiert, wird dann durch die Memberfunktion rwhich von RpcClient wiedergefunden, wobei der Name der Memberfunktion auf handle abgebildet wird. Die Argumente an die Memberfunktion parm1 und parm2, die Adresse masterid des Masters und das RpcClient-Objekt rid.id werden dann in einer Pufferstruktur der Klasse XdrBuffer bereitgestellt, welche durch die RPC-Mechanismen 203 und 204 unterstützt wird (Schritt 703). Der Puffer und die Zahl handle der entfernten Funktion werden durch den RPC-Mechanismus an Sectd übergeben (Schritt 704). Fig. 9a ist der Quellcode der beispielhaften Stub-Routine von Fig. 7a, welche durch das oz- Skript für SectClientController generiert wird.
- Fig. 7b ist ein Blockdiagrammbeispiel der Stub-Routine rStartTester, welche durch das oz-Skript für Sectd eines Objekts der Klasse SectController erzeugt wird. Wie in Fig. 7b gezeigt, wird der Index des dem Master zugehörigen RpcClient-Objekts in die Liste gemeinsam benutzter Objekte von Sectd aus der von SectClientController empfangenen Nachricht extrahiert (Schritt 750). Dieser Index des RpcClient-Objekts wird dann verwendet, um einen Zeiger in dem Speicherraum von Sectd zu dem in RpcClient enthaltenen SharedThang-Objekt wiederzufinden, wobei die SharedThang::get(id)-Memberfunktion verwendet wird (Schritt 751). Der Zeiger wird dann downgecastet, um ein Zeiger zu einem Objekt der Klasse RpcClient zu werden (Schritt 752). Die verbleibenden Parameter von XdrBuffer werden dann verwendet, um den Index id eines SectControllers in der Liste der gemeinsam benutzten Objekte von Sectd und Parameter parm1 und parm2 von startTester zu erhalten (Schritt 753). Der Index id wird verwendet, um einen Zeiger, welcher dem in SectController enthaltenen SharedThang-Objekt entspricht, wiederzufinden. Dieser Zeiger wird dann in einen Zeiger zu einem Objekt der Klasse SectController downgecastet (Schritt 754). rstartTester ruft dann die tatsächliche lokale Prozedur StartTester als eine Memberfunktion der Klasse SectController auf (Schritt 755). Falls in dem lokalen Prozeduraufruf kein Fehler aufgetreten ist, wird der Rückgabewert in Variable parm1 und der Fehlercode LPC- _Success zurückgegeben (Schritt 756). Anderenfalls werden Ausnahmen durch eine von zwei catch-Anweisungen aufgefangen, und der Fehlercode wird zurückgegeben. Auf diese Weise wird eine Ausnahme an die Stub-Routine in SectClientController zurückübergeben. Somit bewahrt die vorliegende Erfindung die lokale Aufrufsemantik in einem Fernprozeduraufruf. Fig. 9b ist der Quellcode der beispielhaften Stub-Routine rstartTester von Fig. 7b, welche durch das oz-Skript für Sectd generiert wird.
- Fig. 10 ist ein Blockdiagramm, welches die Betriebsweise des oz-Skripts veranschaulicht. Der Fachmann wird verstehen, daß viele Variationen verwendet werden können, um die Stub-Routinen bereitzustellen. Solche Variationen schließen die Verwendung eines durch andere als eine Shell verwendbaren Programms oder die Verwendung von anderen Textverarbeitungsdienstprogrammen als awk ein, sind aber nicht darauf beschränkt. Das oz-Skript der vorliegenden Ausführungsform empfängt als Eingang eine Spezifikationsdatei und akzeptiert wählbare Befehlszeilenargumente. Diese Befehlszeilenargumente spezifizieren, (i) ob Namen in der Spezifikationsdatei "unverstümmelt" sein müssen (Option -raw); (ii) ob eine Client-Stub-Routinen- Datei zu erzeugen ist (Option -c); (iii) ob eine Server- Stub-Routinen-Datei zu erzeugen ist (Option -s); (iv) ob die Kompiliererdirektiven für eine alternative Implikation der Server- oder Client-Stub-Routinen-Dateien an den Rumpf der das verteilte Objekt implementierenden.C-Datei angehängt werden sollen (Option -m); und (v) ob Handles zu den entfernten Funktionen, z. B. rstartTester, zur Implikation zu dem Programm, z. B. SectProg_1, welches durch den RPC-Mechanismus auf der Serverseite aufgerufen wird, generiert werden sollten (Option -h).
- Fig. 11 ist der Inhalt der durch das oz-Skript verwendeten Spezifikationsdatei, um die in Fig. 7a und 7b veranschaulichten Stub-Routinen für SectController zu generieren. Um die Generierung der zuvor diskutierten Stub- Routinen zu veranschaulichen, reicht eine Betrachtung der ersten Zeile in der Spezifikationsdatei aus.
- Wie in Fig. 10 gezeigt, analysiert das oz-Skript die Befehlszeile und extrahiert aus der Befehlszeile Argumente zum Festlegen der inneren Zustände des oz-Skripts (Schritt 1001). Je nachdem, ob die Option -raw gesetzt ist, werden Namensverstümmelungsoperationen an der Spezifikationsdatei durchgeführt (Schritt 1002). Das Verstümmeln übersetzt den Namen einer C++-Funktion in einen eindeutigen Namen, welcher eine Kodierung der Parameterliste der Funktion enthält. Die Ergebnisse der Namensverstümmelung der Spezifikationsdatei werden in einer neuen Datei input (die "Input"-Datei) gespeichert. In dieser Ausführungsform wurde ein anderes Shell-Skript "mangle" verwendet, um die Namensverstümmelung durchzuführen. Jedoch sind andere Shell-Skripte, welche im wesentlichen mit den in der obigen Referenz dargelegten Namensverstümmelungsregeln übereinstimmen, gleichermaßen anwendbar. Falls die Option -raw nicht gesetzt ist, wird die Spezifikationsdatei in die Input-Datei direkt kopiert (Schritt 1003), wobei der Namensverstümmelungsschritt umgangen wird. Zusätzlich werden, wenn die Option -m gesetzt ist, alternative Compiler-Direktiven der Quellcodedatei der verteilten Klasse hinzugefügt (Schritt 1004). Die Input-Datei wird dann geparst, um aus den unverstümmelten Namen eine Liste der in der Input-Datei dargestellten Basisklassen zu extrahieren (Schritt 1005). Zum Beispiel werden in der von der Spezifikationsdatei von Fig. 11 abgeleiteten Input-Datei zwei Basisklassen "SectTester" und "SectController" aus der Input-Datei extrahiert. Die extrahierte Liste von Basisklassen wird in eine "Basislisten"-Datei eingebracht.
- In den nächsten Schritten 1006 und 1007 werden awk- Befehlsdateien svc.awk und clnt.awk vorbereitet. Die Befehlsdatei svc.awk (i) stellt die erforderlichen Kopfdateischnittstellen mit der Fernprozeduraufrufeinrichtung und Deklaration anderer Datenstrukturen, wie etwa SharedThangld, bereit, (ii) prüft eine Input-Temporärdatei auf einen Memberfunktionsaufruf, (iii) stellt in dem Server-Objekt Unmarshalling-Anweisungen zum Übergeben von Parametern des Input-Typs zu tatsächlichen Implementierungen des verteilten Objekts bereit und (iv) stellt Marshalling-Anweisungen zum Zurückgeben von Werten von Parametern anderer Input/Output-Typen bereit. Die Befehlsdatei svc.awk stellt auch eine Anweisung in dem Output-Serverobjekt zum Downcasten eines SharedThang-Objekts zu der in der Input-Temporärdatei spezifizierten Basisklasse bereit.
- Die Befehlsdatei clnt.awk stellt auch Schnittstellen mit der Fernprozeduraufrufeinrichtung und eine Deklaration von Datenstrukturen bereit. Zusätzlich marshallt clnt.awk Parameter vom Input-Typ, um einen Fernprozeduraufruf unter Verwendung der Input-Parameter zu erzeugen und Unmarshalling-Anweisungen zur Ausgabe oder bidirektionale Parameter, deren Werte von dem Fernprozeduraufruf zurückgegeben werden, bereitzustellen.
- In Schritt 1008 wird die Basislisten-Datei verwendet, um für jede Basisklasse Memberfunktionsaufrufe von der Input-Datei zu extrahieren, um in eine Output-Temporärdatei plaziert zu werden. Diese Temporärdatei wird dann in Schritt 1009 durch beide Befehlsdateien clnt.awk und svc.awk verwendet, um die Output-Stub-Routinen-Dateien svc_< base> .C und clnt_< base> .C zu generieren (wobei < base> der Name der Basisklasse, z. B. vorgenannter SectController, ist).
- In Schritt 1010 werden die Memberfunktionen der Klasse SectController in Handles kodiert, um in eine Datei SectdProg.c eingeführt zu werden. SectdProg.c enthält eine Sectd-Funktion SectProg_1, welche über eine Schaltanweisung Funktionen in Sectd in Übereinstimmung mit dem an den RPC-Mechanismus gelieferten Handle aufruft.
- Die vorstehende Beschreibung veranschaulicht besondere Ausführungsformen der vorliegenden Erfindung, beschränkt die vorliegende Erfindung aber nicht. Zahlreiche Modifikationen und Variationen sind innerhalb des Umfangs der vorliegenden Erfindung möglich. Zum Beispiel ist, obwohl die vorstehend bereitgestellte, detaillierte Beschreibung eine Implementierung in der Programmiersprache C++ als ein Beispiel verwendet, die vorliegende Erfindung auf jede objektorientierte Programmiersprache anwendbar. Die vorliegende Erfindung wird durch die nachfolgenden Ansprüche dargelegt.
Claims (20)
1. Struktur zum gemeinsamen Benutzen von Datenobjekten
in Anwendungsprogrammen (208, 205) eines verteilten
Rechnersystems, wobei das verteilte Rechnersystem
erste (207, 203, 251) und zweite (206, 204, 250) Rechner
aufweist, wobei die Struktur aufweist:
eine erste Anwendungsebenenschnittstelle (201)
in dem ersten Rechner (207, 203, 251) zu einem ersten
Fernprozeduraufrufmechanismus (203);
eine zweite Anwendungsebenenschnittstelle (202)
in dem zweiten Rechner (206, 204, 250) zu einem zweiten
Fernprozeduraufrufmechanismus (204);
Mittel (250, 251) in dem ersten (207, 203, 251) und
zweiten (206, 204, 250) Rechner zum Koppeln des ersten
(203) und zweiten (204) Fernprozeduraufrufmechanismus,
zum Befördern von Daten zwischen dem ersten (207, 203,
251) und zweiten (206, 204, 250) Rechner;
erste, mit der ersten
Anwendungsebenenschnittstelle (201) gekoppelte Mittel zum Bereitstellen
einer Datenstruktur, welche eine Basisklasse
(SharedThang) gemeinsam benutzter Objekte darstellt,
wobei jedes gemeinsam benutzte Objekt durch Prozesse
(206, 207) in dem ersten (207, 203, 251) und zweiten (206,
204, 205) Rechner abrufbar ist;
zweite, mit der zweiten
Anwendungsebenenschnittstelle (202) gekoppelte Mittel zum
Bereitstellen der Datenstruktur, welche die Basisklasse
(SharedThang) gemeinsam benutzter Objekte darstellt;
erste, mit der ersten
Anwendungsebenenschnittstelle (201) gekoppelte Mittel zum Bereitstellen von
Datenstrukturen, welche eine Mehrzahl von Klassen
gemeinsam benutzter Objekte darstellen, von denen
jede in Übereinstimmung mit einer Hierarchie von
Klassen von der Basisklasse (SharedThang) abgeleitet
ist, wobei jedes gemeinsam benutzte Objekt in jeder
der Mehrzahl von Klassen gemeinsam benutzter Objekte
durch Prozesse (206, 207) in dem ersten (207, 203,
251) und zweiten (206, 204, 250) Rechner abrufbar ist;
zweite, mit der zweiten
Anwendungsebenenschnittstelle (202) gekoppelte Mittel zum
Bereitstellen der Datenstrukturen, welche die Mehrzahl von
Klassen gemeinsam benutzter Objekte darstellen;
erste Mittel in dem ersten Rechner (207, 203, 251)
zum Aufbauen (Schritt 303) eines Vererbungsbaums, dessen
Wurzel sich in einer die Basisklasse (SharedThang)
darstellenden Datenstruktur befindet, wobei der
Vererbungsbaum Datenstrukturen aufweist, welche
Beziehungen zwischen den Klassen gemeinsam benutzter
Objekte und der Basisklasse (SharedThang) in
Übereinstimmung mit der Hierarchie von Klassen darstellt;
zweite Mittel in dem zweiten Rechner (206, 204,
250) zum Aufbauen (Schritt 303) des Vererbungsbaums in
dem zweiten Rechner (206, 204, 250);
erste Mittel (201) in dem ersten Rechner (207,
203, 251) zum Durchqueren des Vererbungsbaums, um eine
Datenstruktur, welche eine Beziehung zwischen einem
ersten Objekt und einem zweiten Objekt darstellt, in
dem ersten Rechner (207, 203, 251) auf zubauen, wobei
das erste Objekt in einem maschinenunabhängigen
Format durch einen Prozess (206) in dem zweiten Rechner
(206, 204, 250) durch den ersten und zweiten
Fernprozeduraufrufmechanismus (203, 204) angegeben
wird; und
zweite Mittel (202) in dem zweiten Rechner (206,
204, 250) zum Durchqueren des Vererbungsbaums, um eine
Datenstruktur, welche eine Beziehung zwischen einem
ersten Objekt und einem zweiten Objekt darstellt, in
dem zweiten Rechner (206, 204, 250) auf zubauen, wobei
das erste Objekt in einem maschinenunabhängigen
Format durch einen Prozess (207) in dem ersten Rechner
(207, 203, 251) durch den ersten und zweiten
Fernprozeduraufrufmechanismus (203, 204) angegeben
wird.
2. Verfahren zum gemeinsamen Benutzen von Datenobjekten
in Anwendungsprogrammen (208, 205) eines verteilten
Rechnersystems, wobei das verteilte Rechnersystem
erste (207, 203, 251) und zweite (206, 204, 250) Rechner
aufweist, wobei das Verfahren die Schritte aufweist:
Bereitstellen einer ersten
Anwendungsebenenschnittstelle (201) in dem ersten Rechner (207, 203,
251) zu einem ersten Fernprozeduraufrufmechanismus
(203) in dem ersten Rechner (207, 203, 251);
Bereitstellen einer zweiten
Anwendungsebenenschnittstelle (202) in dem zweiten Rechner (206, 204,
250) zu einem zweiten Fernprozeduraufrufmechanismus
(204) in dem zweiten Rechner (206, 204, 250);
Koppeln der ersten (203) und zweiten (204)
Fernprozeduraufrufmechanismen in dem ersten (207, 203,
251) und zweiten (206, 204, 250) Rechner, um Daten
zwischen dem ersten (207, 203, 251) und zweiten (206, 207,
250) Rechner zu befördern;
Bereitstellen einer Datenstruktur sowohl in dem
ersten (207, 203, 251) als auch dem zweiten (206, 204, 250)
Rechner zum Darstellen einer Basisklasse
(SharedThang) gemeinsam benutzter Objekte in dem
ersten (207, 203, 251) und zweiten (206, 204, 250) Rechner
und Bereitstellen von Datenstrukturen sowohl in dem
ersten (207, 203, 251) als auch in dem zweiten (206, 204,
250) Rechner zum Darstellen einer Mehrzahl von
Klassen gemeinsam benutzter Objekte, von denen jede
in Übereinstimmung mit einer Hierarchie von Klassen
von der Basisklasse (SharedThang) abgeleitet wird,
wobei jedes gemeinsam benutzte Objekt in jeder der
Mehrzahl von Klassen gemeinsam benutzter Objekte
durch Prozesse (206, 207) in dem ersten (207, 203, 251)
und zweiten (206, 204, 250) Rechner abrufbar ist; und
Aufbauen eines Vererbungsbaums, dessen Wurzel
sich in einer die Basisklasse (SharedThang)
darstellenden Datenstruktur befindet, in sowohl dem ersten
(207, 203, 251) als auch dem zweiten (206, 204, 250)
Rechner, wobei der Vererbungsbaum Datenstrukturen
aufweist, welche in Übereinstimmung mit einer
Hierarchie Beziehungen zwischen der Mehrzahl von Klassen
gemeinsam benutzter Objekte und der Basisklasse
(SharedThang) darstellen; und
Durchqueren des Vererbungsbaums in sowohl dem
ersten (207, 203, 251) als auch dem zweiten (206, 204, 250)
Rechner, um eine Datenstruktur aufzubauen, welche
ein Verhältnis zwischen einem ersten Objekt und
einem zweiten Objekt darstellt, immer wenn das erste
Objekt in einem maschinenunabhängigen Format durch
einen Prozess (206, 207) in einem von dem ersten (207,
203, 251) und dem zweiten (206, 204, 250) Rechner
angegeben wird und dem anderen von dem ersten (207, 203, 251)
und dem zweiten (206, 204, 250) Rechner über die
Fernprozeduraufrufmechanismen (203, 204) in dem ersten
(207, 203, 251)
und dem zweiten (206, 204, 250) Rechner zur
Verfügung gestellt wird.
3. Struktur nach Anspruch 1, wobei jedes der gemeinsam
benutzten Objekte ein Serverobjekt (206) in einem
ausgewählten von dem ersten (207, 203, 251) und dem
zweiten (206, 204, 250) Rechner und ein Clientobjekt
(207) in dem anderen von dem ersten (207, 203, 251) und
dem zweiten (206, 204, 250) Rechner aufweist, wobei das
Server- (206) und das Clientobjekt (207) über die
erste (201) und zweite (202)
Anwendungsebenenschnittstelle kommunizieren.
4. Struktur nach Anspruch 3, wobei das Clientobjekt
(207) zu entweder (a) der Serverobjektklasse
gemeinsam benutzter Objekte oder (b) einer Klasse
gemeinsam benutzter Objekte, welche von der
Serverobjektklasse gemeinsam benutzter Objekte abgeleitet ist,
gehört.
5. Struktur nach Anspruch 3, wobei das Serverobjekt
(206) mit einer Mehrzahl von Methoden ausgestattet
ist, welche auf dem ausgewählten Rechner auszuführen
sind, und das Clientobjekt (207) auf jede der
Methoden über einen Fernprozeduraufruf über die erste
(201) und zweite (202) Anwendungsebenenschnittstelle
zugreift (Schritt 704).
6. Struktur nach Anspruch 5, die weiter Mittel (201, 202)
zum Berechnen eines Zeigers zu entweder (a) einem
Elternobjekt, welches ein gemeinsam benutztes Objekt
enthält, oder (b) einem in dem Elternobjekt
enthaltenen Objekt auf der Grundlage des Vererbungsbaums
und unter Verwendung eines Zeigers zu dem gemeinsam
benutzen Objekt aufweist.
7. Struktur nach Anspruch 6, wobei das Serverobjekt
(206) eine Liste gemeinsam benutzter Objekte pflegt
und wobei das Clientobjekt (207) eine Methode in
einem der gemeinsam benutzten Objekte in der Liste
unter Verwendung eines Index in die Liste angibt,
wobei das Serverobjekt (206) dann den Index nimmt, um
einen Zeiger zu der Methode unter Verwendung der
Mittel (201, 202) zum Berechnen eines Zeigers zu
erhalten.
8. Struktur nach Anspruch 5, wobei das Serverobjekt
(206) ein Ausführungsergebnis einer beliebigen der
Methoden an das Clientobjekt (207) über die erste
(201) und zweite (202) Anwendungsebenenschnittstelle
zurückgibt (Schritt 755) und das Clientobjekt (207) in
einem Ruhezustand wartet (Schritt 705), bis das Ergebnis
empfangen wird.
9. Struktur nach Anspruch 5, wobei das Serverobjekt
(206) eine beliebige Fehlermeldung, welche während
der Ausführung einer beliebigen der Methoden erzeugt
wird, über die erste (201) und zweite (202)
Anwendungsebenenschnittstelle an das Clientobjekt (207)
zurückgibt (Schritt 756).
10. Struktur nach Anspruch 3, wobei das Clientobjekt
(207) ein Serverkommunikationsobjekt (clientseitiger
RPC-Client) und eine Nachricht erzeugt, welche das
Serverobjekt (206) über eine Erzeugung des
Serverkommunikationsobjekts (clientseitiger RPC-Client)
benachrichtigt, und wobei als Antwort auf die
Nachricht das Serverobjekt (206) ein
Clientkommunikationsobjekt (serverseitiger RPC-Client) zum Senden
von Nachrichten zu dem Clientobjekt (207) erzeugt.
11. Struktur nach Anspruch 4, wobei das Serverobjekt
(206) an das Clientobjekt (207) ein Servermanifest
schickt, welches die Serverobjektklasse und Klassen,
von welchen die Serverobjektklasse abgeleitet ist,
auflistet, und wobei das Clientobjekt (207) an das
Serverobjekt (206) ein Clientmanifest schickt (Schritt
604), welches die Clientobjektklasse und Klassen,
von welchen die Clientobjektklasse abgeleitet ist,
auflistet.
12. Verfahren nach Anspruch 2, welches weiter den
Schritt eines Implementierens jedes der gemeinsam
benutzten Objekte als ein Serverobjekt (206) in einem
ausgewählten aus dem ersten (207, 203, 251) und dem
zweiten (206, 204, 250) Rechner und ein Clientobjekt
(207) in dem anderen von dem ersten (207, 203, 251) und
dem zweiten (206, 204, 250) Rechner aufweist, wobei das
Server- (206) und das Clientobjekt (207) über die
erste (201) und zweite (202)
Anwendungsebenenschnittstelle kommunizieren.
13. Verfahren nach Anspruch 12, welches weiter den
Schritt eines Bereitstellens des Clientobjekts (207)
in entweder (a) der Serverobjektklasse gemeinsam
benutzter Objekte oder (b) einer Klasse gemeinsam
benutzter Objekte, welche von der Serverobjektklasse
gemeinsam benutzter Objekte abgeleitet wird,
aufweist.
14. Verfahren nach Anspruch 13, welches weiter die
Schritte aufweist:
Ausstatten des Serverobjekts (206) mit einer
Mehrzahl von Methoden, welche auf dem ausgewählten
Rechner ausgeführt werden sollen; und
Zugreifen (Schritt 704) auf jede der Methoden von
dem Clientobjekt (207) über einen Fernprozeduraufruf
über die erste (201) und zweite (202)
Anwendungsebenenschnittstelle.
15. Verfahren nach Anspruch 14, welches weiter den
Schritt eines Berechnens eines Zeigers zu entweder
(a) einem Elternobjekt, welches ein gemeinsam
benutztes Objekt enthält oder (b) einem in dem
Elternobjekt enthaltenen Objekt in sowohl dem ersten (207,
203, 251) als auch dem zweiten (206, 204, 250) Rechner
auf der Grundlage des Vererbungsbaums und unter
Verwendung eines Zeigers zu dem gemeinsam benutzten
Objekt aufweist.
16. Verfahre n nach Anspruch 15, welches weiter die
Schritte aufweist:
Pflegen einer Liste gemeinsam benutzter Objekte
in dem Serverobjekt (206);
Angeben eines Index in die Liste, wenn auf eine
beliebige Methode in einem der gemeinsam benutzten
Objekte in der Liste zugegriffen wird; und Nehmen
des Index, um einen Zeiger zu der Methode unter
Verwendung des Schritts zum Berechnen eines Zeigers
zu erhalten.
17. Verfahren nach Anspruch 14, welches weiter die
Schritte aufweist:
Zurückgeben (Schritt 756) eines
Ausführungsergebnisses einer beliebigen der Methoden von dem
Serverobjekt (206) an das Clientobjekt (207) über die erste
(201) und zweite (202) Anwendungsebenenschnittstelle,
und
Warten (Schritt 705) in einem Ruhezustand des
Clientobjekts (207), bis das Ergebnis empfangen wird.
18. Verfahren nach Anspruch 14, welches weiter den
Schritt (756) eines Zurückgebens einer beliebigen
Fehlermeldung, welche während einer Ausführung einer
beliebigen der Methoden erzeugt wird, über die erste
(201) und zweite (202) Anwendungsebenenschnittstelle
an das Clientobjekt (207) aufweist.
19. Verfahren nach Anspruch 12, welches weiter die
Schritte aufweist:
Erzeugen (Schritt 601) eines
Serverkommunikationsobjekts (clientseitiger RPC-Client) und einer
Nachricht, welche das Serverobjekt (206) über die
Erzeugung des Serverkommunikationsobjekts (clientseitiger
RPC-Client) unterrichtet, in dem Clientobjekt (207);
und
Erzeugen (Schritt 606) eines
Clientkommunikationsobjekts (serverseitiger RPC-Client) in dem
Serverobjekt (206) zum Senden von Nachrichten an das
Clientobjekt (207) als Antwort auf die Nachricht.
20. Verfahren nach Anspruch 13, welches weiter die
Schritte aufweist:
Senden eines Servermanifests, welches die
Serverobjektklassen und Klassen, von welchen die
Serverobjektklasse abgeleitet ist, auflistet, an das
Clientobjekt (207); und
Senden eines Clientmanifests, welches die
Clientobjektklasse und Klassen, von welchen die
Clientobjektklasse abgeleitet ist, auflistet, an das
Serverobjekt (206).
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US07/938,102 US5307490A (en) | 1992-08-28 | 1992-08-28 | Method and system for implementing remote procedure calls in a distributed computer system |
PCT/US1993/007886 WO1994006083A1 (en) | 1992-08-28 | 1993-08-26 | Method and system for implementing remote procedure calls in a distributed computer system |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69331440D1 DE69331440D1 (de) | 2002-02-14 |
DE69331440T2 true DE69331440T2 (de) | 2002-08-22 |
Family
ID=25470900
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69331440T Expired - Fee Related DE69331440T2 (de) | 1992-08-28 | 1993-08-26 | Verfahren und system zur durchführung von fernprozeduranrufen in einem verteilten rechnersystem. |
Country Status (5)
Country | Link |
---|---|
US (1) | US5307490A (de) |
EP (1) | EP0657047B1 (de) |
JP (1) | JPH08504975A (de) |
DE (1) | DE69331440T2 (de) |
WO (1) | WO1994006083A1 (de) |
Families Citing this family (238)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5430876A (en) * | 1989-06-27 | 1995-07-04 | Digital Equipment Corporation | Remote procedure callback system and method |
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 |
EP0592080A2 (de) * | 1992-09-24 | 1994-04-13 | International Business Machines Corporation | Verfahren und Gerät für Kommunikation zwischen Prozessen in einem Multirechnersystem |
EP0669020B1 (de) * | 1992-11-13 | 1997-04-02 | Microsoft Corporation | Verfahren zur verteilung von schnittstellenzeigern fur fernprozeduranrufe |
JP3503957B2 (ja) * | 1992-11-25 | 2004-03-08 | 富士通株式会社 | 遠隔データベースの制御方法及び装置 |
US5566302A (en) * | 1992-12-21 | 1996-10-15 | Sun Microsystems, Inc. | Method for executing operation call from client application using shared memory region and establishing shared memory region when the shared memory region does not exist |
US6157961A (en) * | 1992-12-21 | 2000-12-05 | Sun Microsystems, Inc. | Client-side stub interpreter |
DE69327448T2 (de) * | 1992-12-21 | 2004-03-04 | Sun Microsystems, Inc., Mountain View | Verfahren und Vorrichtung für Teilaufgaben in verteiltem Verarbeitungssystem |
US5390325A (en) * | 1992-12-23 | 1995-02-14 | Taligent, Inc. | Automated testing system |
US5452459A (en) * | 1993-01-08 | 1995-09-19 | Digital Equipment Corporation | Method and apparatus for allocating server access in a distributed computing environment |
US5774719A (en) * | 1993-01-08 | 1998-06-30 | Digital Equipment Corporation | Method for comparing data structures that cross address space boundaries |
WO1994022078A2 (en) * | 1993-03-23 | 1994-09-29 | Apple Computer, Inc. | Apparatus and method for a relocatable file format |
US5848234A (en) * | 1993-05-21 | 1998-12-08 | Candle Distributed Solutions, Inc. | Object procedure messaging facility |
US6718399B1 (en) | 1993-05-21 | 2004-04-06 | Candle Distributed Solutions, Inc. | Communications on a network |
CA2097540C (en) * | 1993-06-01 | 1998-05-12 | William G. O'farrell | Accessing remote data objects in a distributed memory environment |
US6226690B1 (en) * | 1993-06-14 | 2001-05-01 | International Business Machines Corporation | Method and apparatus for utilizing proxy objects to communicate with target objects |
JP3365576B2 (ja) * | 1993-06-14 | 2003-01-14 | インターナショナル・ビジネス・マシーンズ・コーポレーション | オブジェクトの実行方法および装置 |
US6751796B1 (en) | 1993-06-25 | 2004-06-15 | Microsoft Corporation | Integration of systems management services with an underlying system object model |
CA2124720C (en) * | 1993-06-25 | 2002-10-22 | Michael R. C. Seaman | Integration of systems management services with an underlying system object model |
US5603031A (en) * | 1993-07-08 | 1997-02-11 | General Magic, Inc. | System and method for distributed computation based upon the movement, execution, and interaction of processes in a network |
US5586317A (en) * | 1993-07-30 | 1996-12-17 | Apple Computer, Inc. | Method and apparatus for implementing I/O in a frame-based computer system |
GB9316948D0 (en) * | 1993-08-14 | 1993-09-29 | Ibm | Programming aid for distributed computing systems |
US6289390B1 (en) | 1993-08-18 | 2001-09-11 | Microsoft Corporation | System and method for performing remote requests with an on-line service network |
CA2107299C (en) * | 1993-09-29 | 1997-02-25 | Mehrad Yasrebi | High performance machine for switched communications in a heterogenous data processing network gateway |
US5596579A (en) * | 1993-10-01 | 1997-01-21 | International Business Machines Corporation | High performance machine for switched communications in a heterogeneous data processing network gateway |
US5517645A (en) * | 1993-11-05 | 1996-05-14 | Microsoft Corporation | Method and system for interfacing components via aggregate components formed by aggregating the components each with an instance of a component manager |
US5485617A (en) | 1993-12-13 | 1996-01-16 | Microsoft Corporation | Method and system for dynamically generating object connections |
US5548726A (en) * | 1993-12-17 | 1996-08-20 | Taligeni, Inc. | System for activating new service in client server network by reconfiguring the multilayer network protocol stack dynamically within the server node |
US5499343A (en) * | 1993-12-17 | 1996-03-12 | Taligent, Inc. | Object-oriented networking system with dynamically configurable communication links |
FR2714746B1 (fr) * | 1993-12-31 | 1996-02-02 | Bull Sa | Procédé de simulation d'une architecture "serveur" à partir d'une architecture "client". |
US5812129A (en) * | 1994-01-03 | 1998-09-22 | International Business Machines Corp. | Method and system for accessing functions of a user interface environment from processes running outside of the user interface environment |
US6813769B1 (en) | 1997-10-28 | 2004-11-02 | Microsoft Corporation | Server application components with control over state duration |
US5832219A (en) * | 1994-02-08 | 1998-11-03 | Object Technology Licensing Corp. | Distributed object networking service |
GB2288477A (en) * | 1994-04-05 | 1995-10-18 | Ibm | Communications system for exchanging data between computers in a network. |
US5694546A (en) | 1994-05-31 | 1997-12-02 | Reisman; Richard R. | System for automatic unattended electronic information transport between a server and a client by a vendor provided transport software with a manifest list |
DE69530731D1 (de) * | 1994-07-22 | 2003-06-18 | Sun Microsystems Inc | Verfahren und Gerät für Speicherplatzeffiziente Kommunikation zwischen Prozessen |
US5778228A (en) * | 1994-08-16 | 1998-07-07 | International Business Machines Corporation | Method and system for transferring remote procedure calls and responses over a network |
CA2153445C (en) * | 1994-09-08 | 2002-05-21 | Ashok Raj Saxena | Video optimized media streamer user interface |
US5684984A (en) * | 1994-09-29 | 1997-11-04 | Apple Computer, Inc. | Synchronization and replication of object databases |
US5625818A (en) * | 1994-09-30 | 1997-04-29 | Apple Computer, Inc. | System for managing local database updates published to different online information services in different formats from a central platform |
JP3361663B2 (ja) * | 1994-10-03 | 2003-01-07 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 通信管理方法 |
US5544310A (en) * | 1994-10-04 | 1996-08-06 | International Business Machines Corporation | System and method for testing distributed systems |
US5870089A (en) * | 1994-10-27 | 1999-02-09 | Dazel Corporation | Apparatus and process for distributing information using an electronic package representation |
US5758074A (en) * | 1994-11-04 | 1998-05-26 | International Business Machines Corporation | System for extending the desktop management interface at one node to a network by using pseudo management interface, pseudo component interface and network server interface |
US5793965A (en) * | 1995-03-22 | 1998-08-11 | Sun Microsystems, Inc. | Method and apparatus for determining the type of an object in a distributed object system |
EP0735472A3 (de) * | 1995-03-31 | 2000-01-19 | Sun Microsystems, Inc. | Verfahren und Gerät für Verschwörung zwischen Objekten |
US5724503A (en) * | 1995-03-31 | 1998-03-03 | Sun Microsystems, Inc. | Method and apparatus for interpreting exceptions in a distributed object system |
US5724512A (en) * | 1995-04-17 | 1998-03-03 | Lucent Technologies Inc. | Methods and apparatus for storage and retrieval of name space information in a distributed computing system |
US6249822B1 (en) | 1995-04-24 | 2001-06-19 | Microsoft Corporation | Remote procedure call method |
US6418324B1 (en) * | 1995-06-01 | 2002-07-09 | Padcom, Incorporated | Apparatus and method for transparent wireless communication between a remote device and host system |
US20040264402A9 (en) * | 1995-06-01 | 2004-12-30 | Padcom. Inc. | Port routing functionality |
US6901433B2 (en) * | 1995-06-07 | 2005-05-31 | Microsoft Corporation | System for providing users with a filtered view of interactive network directory obtains from remote properties cache that provided by an on-line service |
US5713017A (en) * | 1995-06-07 | 1998-01-27 | International Business Machines Corporation | Dual counter consistency control for fault tolerant network file servers |
US5956489A (en) * | 1995-06-07 | 1999-09-21 | Microsoft Corporation | Transaction replication system and method for supporting replicated transaction-based services |
US5774668A (en) * | 1995-06-07 | 1998-06-30 | Microsoft Corporation | System for on-line service in which gateway computer uses service map which includes loading condition of servers broadcasted by application servers for load balancing |
US5956712A (en) * | 1995-06-07 | 1999-09-21 | International Business Machines Corporation | Byte range locking in a distributed environment |
US5978773A (en) * | 1995-06-20 | 1999-11-02 | Neomedia Technologies, Inc. | System and method for using an ordinary article of commerce to access a remote computer |
US5933599A (en) * | 1995-07-17 | 1999-08-03 | Microsoft Corporation | Apparatus for presenting the content of an interactive on-line network |
US6691299B1 (en) | 1995-07-19 | 2004-02-10 | Ricoh Company, Ltd. | Object-oriented communications framework system with support for multiple remote machine types |
US5732261A (en) * | 1995-07-19 | 1998-03-24 | Ricoh Company, Ltd. | Method of using an object-oriented communication system with support for multiple remote machine types |
US5956509A (en) | 1995-08-18 | 1999-09-21 | Microsoft Corporation | System and method for performing remote requests with an on-line service network |
US5941947A (en) * | 1995-08-18 | 1999-08-24 | Microsoft Corporation | System and method for controlling access to data entities in a computer network |
US5892946A (en) * | 1995-09-12 | 1999-04-06 | Alcatel Usa, Inc. | System and method for multi-site distributed object management environment |
US5682534A (en) * | 1995-09-12 | 1997-10-28 | International Business Machines Corporation | Transparent local RPC optimization |
US5815708A (en) * | 1995-10-06 | 1998-09-29 | Sun Microsystems, Inc. | Method and apparatus for dynamically loading method call exception code in response to a software method exception generated in a client/server computer system |
US6088515A (en) | 1995-11-13 | 2000-07-11 | Citrix Systems Inc | Method and apparatus for making a hypermedium interactive |
US5915112A (en) * | 1996-01-02 | 1999-06-22 | International Business Machines Corporation | Remote procedure interface with support for multiple versions |
US5938733A (en) * | 1996-03-08 | 1999-08-17 | International Business Machines Corporation | Object oriented representation of network requests in a client server model |
US5809235A (en) * | 1996-03-08 | 1998-09-15 | International Business Machines Corporation | Object oriented network event management framework |
US5764915A (en) * | 1996-03-08 | 1998-06-09 | International Business Machines Corporation | Object-oriented communication interface for network protocol access using the selected newly created protocol interface object and newly created protocol layer objects in the protocol stack |
US6260074B1 (en) * | 1996-03-30 | 2001-07-10 | Sun Microsystems, Inc. | Method and apparatus for passing generic objects in a distributed system |
US6281893B1 (en) * | 1996-04-04 | 2001-08-28 | Sun Microsystems, Inc. | Method and apparatus for providing an object oriented approach to a device independent graphics control system |
US6598094B1 (en) | 1998-03-20 | 2003-07-22 | Sun Microsystems, Inc. | Method and apparatus for determining status of remote objects 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 |
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 |
US6182083B1 (en) | 1997-11-17 | 2001-01-30 | Sun Microsystems, Inc. | Method and system for multi-entry and multi-template matching in a database |
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 |
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 |
US6466947B2 (en) | 1998-03-20 | 2002-10-15 | Sun Microsystems, Inc. | Apparatus and method for dynamically verifying information in a distributed system |
US6487607B1 (en) | 1998-02-26 | 2002-11-26 | Sun Microsystems, Inc. | Methods and apparatus for remote method invocation |
US6138238A (en) | 1997-12-11 | 2000-10-24 | Sun Microsystems, Inc. | Stack-based access control using code and executor identifiers |
US6446070B1 (en) * | 1998-02-26 | 2002-09-03 | Sun Microsystems, Inc. | Method and apparatus for dynamic distributed computing over a network |
US6832223B1 (en) | 1996-04-23 | 2004-12-14 | Sun Microsystems, Inc. | Method and system for facilitating access to a lookup service |
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 |
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 |
US6438614B2 (en) | 1998-02-26 | 2002-08-20 | Sun Microsystems, Inc. | Polymorphic token based control |
US6708171B1 (en) | 1996-04-23 | 2004-03-16 | Sun Microsystems, Inc. | Network proxy |
US5991823A (en) * | 1996-06-26 | 1999-11-23 | Sun Microsystems, Inc. | Low overhead object adaptor |
US6044409A (en) | 1996-06-26 | 2000-03-28 | Sun Microsystems, Inc. | Framework for marshaling and unmarshaling argument object references |
US6275871B1 (en) * | 1996-07-03 | 2001-08-14 | Siemens Aktiengesellschaft | Asynchronous transport optimizing observer-pattern-like system supporting several modes for an interface definition language-less communication subsystem |
US5867650A (en) * | 1996-07-10 | 1999-02-02 | Microsoft Corporation | Out-of-band data transmission |
US5946463A (en) * | 1996-07-22 | 1999-08-31 | International Business Machines Corporation | Method and system for automatically performing an operation on multiple computer systems within a cluster |
US5781703A (en) * | 1996-09-06 | 1998-07-14 | Candle Distributed Solutions, Inc. | Intelligent remote agent for computer performance monitoring |
US6728737B2 (en) | 1996-10-11 | 2004-04-27 | Sun Microsystems, Inc. | Method and system for leasing storage |
US5832529A (en) | 1996-10-11 | 1998-11-03 | Sun Microsystems, Inc. | Methods, apparatus, and product for distributed garbage collection |
US6237009B1 (en) | 1996-10-11 | 2001-05-22 | Sun Microsystems, Inc. | Lease renewal service |
US6175879B1 (en) * | 1997-01-29 | 2001-01-16 | Microsoft Corporation | Method and system for migrating connections between receive-any and receive-direct threads |
US6067580A (en) * | 1997-03-11 | 2000-05-23 | International Business Machines Corporation | Integrating distributed computing environment remote procedure calls with an advisory work load manager |
US6408342B1 (en) * | 1997-03-28 | 2002-06-18 | Keith E. Moore | Communications framework for supporting multiple simultaneous communications protocols in a distributed object environment |
US6321348B1 (en) * | 1997-04-07 | 2001-11-20 | E-Parcel, Inc. | System for remote internet consulting, servicing and repair |
US5948107A (en) * | 1997-05-28 | 1999-09-07 | Intel Corporation | Method of handling errors in complex inheritance hierarchies |
US6065045A (en) * | 1997-07-03 | 2000-05-16 | Tandem Computers Incorporated | Method and apparatus for object reference processing |
US6157959A (en) * | 1997-07-03 | 2000-12-05 | Tandem Computers, Incorporated | Method and apparatus for providing portable kernel-mode support for fast interprocess communication |
US6567861B1 (en) * | 1997-09-17 | 2003-05-20 | International Business Machines Corporation | Method and apparatus for remotely running objects using data streams and/or complex parameters |
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 |
US6631425B1 (en) | 1997-10-28 | 2003-10-07 | Microsoft Corporation | Just-in-time activation and as-soon-as-possible deactivation or server application components |
US6134594A (en) | 1997-10-28 | 2000-10-17 | Microsoft Corporation | Multi-user, multiple tier distributed application architecture with single-user access control of middle tier objects |
US7076784B1 (en) | 1997-10-28 | 2006-07-11 | Microsoft Corporation | Software component execution management using context objects for tracking externally-defined intrinsic properties of executing software components within an execution environment |
US6047289A (en) * | 1997-11-07 | 2000-04-04 | Novell, Inc. | Method and apparatus for directed data propagation |
US6170065B1 (en) | 1997-11-14 | 2001-01-02 | E-Parcel, Llc | Automatic system for dynamic diagnosis and repair of computer configurations |
US6016496A (en) * | 1997-11-20 | 2000-01-18 | International Business Machines Corporation | Method and apparatus for an object-oriented object for retrieving information from local and remote databases |
US6405264B1 (en) * | 1997-12-18 | 2002-06-11 | Sun Microsystems, Inc. | Marshaling and unmarshaling framework for supporting filters in a distributed object system |
US6249803B1 (en) | 1997-12-18 | 2001-06-19 | Sun Microsystems, Inc. | Method and apparatus for executing code during method invocation |
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 |
US6397252B1 (en) * | 1997-12-19 | 2002-05-28 | Electronic Data Systems Corporation | Method and system for load balancing in a distributed object system |
WO1999044133A2 (en) | 1998-02-26 | 1999-09-02 | Sun Microsystems, Inc. | Method and system for deterministic hashes to identify remote methods |
US6604127B2 (en) | 1998-03-20 | 2003-08-05 | Brian T. Murphy | Dynamic lookup service in distributed system |
US6901596B1 (en) | 1998-05-07 | 2005-05-31 | Hewlett-Packard Development Company, L.P. | Method of communicating asynchronous events to remote procedure call clients |
US6378004B1 (en) * | 1998-05-07 | 2002-04-23 | Compaq Computer Corporation | Method of communicating asynchronous elements from a mini-port driver |
US6138269A (en) * | 1998-05-20 | 2000-10-24 | Sun Microsystems, Inc. | Determining the actual class of an object at run time |
US6256596B1 (en) * | 1998-06-30 | 2001-07-03 | Autodesk, Inc. | Extensible framework for capturing feature information in a neutral format |
US6289012B1 (en) | 1998-08-03 | 2001-09-11 | Instanton Corporation | High concurrency data download apparatus and method |
US6425017B1 (en) | 1998-08-17 | 2002-07-23 | Microsoft Corporation | Queued method invocations on distributed component applications |
US6442620B1 (en) | 1998-08-17 | 2002-08-27 | Microsoft Corporation | Environment extensibility and automatic services for component applications using contexts, policies and activators |
US7305451B2 (en) * | 1998-08-24 | 2007-12-04 | Microsoft Corporation | System for providing users an integrated directory service containing content nodes located in different groups of application servers in computer network |
JP2000099332A (ja) | 1998-09-25 | 2000-04-07 | Hitachi Ltd | 遠隔手続き呼び出し最適化方法とこれを用いたプログラム実行方法 |
US8060656B2 (en) | 1998-10-09 | 2011-11-15 | Netmotion Wireless, Inc. | Method and apparatus for providing mobile and other intermittent connectivity in a computing environment |
US7778260B2 (en) * | 1998-10-09 | 2010-08-17 | Netmotion Wireless, Inc. | Method and apparatus for providing mobile and other intermittent connectivity in a computing environment |
US6546425B1 (en) | 1998-10-09 | 2003-04-08 | Netmotion Wireless, Inc. | Method and apparatus for providing mobile and other intermittent connectivity in a computing environment |
US7136645B2 (en) * | 1998-10-09 | 2006-11-14 | Netmotion Wireless, Inc. | Method and apparatus for providing mobile and other intermittent connectivity in a computing environment |
US7293107B1 (en) | 1998-10-09 | 2007-11-06 | Netmotion Wireless, Inc. | Method and apparatus for providing mobile and other intermittent connectivity in a computing environment |
US8078727B2 (en) | 1998-10-09 | 2011-12-13 | Netmotion Wireless, Inc. | Method and apparatus for providing mobile and other intermittent connectivity in a computing environment |
US6385661B1 (en) * | 1998-10-19 | 2002-05-07 | Recursion Software, Inc. | System and method for dynamic generation of remote proxies |
US6163794A (en) | 1998-10-23 | 2000-12-19 | General Magic | Network system extensible by users |
US6988123B2 (en) * | 1998-11-06 | 2006-01-17 | Seiko Epson Corporation | Methods and apparatus for remote execution of an application over the internet |
US6636891B1 (en) * | 1998-11-06 | 2003-10-21 | Seiko Epson Corporation | Methods and apparatus for controlling an input or output device over the internet |
US6631409B1 (en) * | 1998-12-23 | 2003-10-07 | Worldcom, Inc. | Method and apparatus for monitoring a communications system |
US6922708B1 (en) | 1999-02-18 | 2005-07-26 | Oracle International Corporation | File system that supports transactions |
US6748455B1 (en) | 1999-02-23 | 2004-06-08 | Microsoft Corporation | Object connectivity through loosely coupled publish and subscribe events with filtering |
US6829770B1 (en) | 1999-02-23 | 2004-12-07 | Microsoft Corporation | Object connectivity through loosely coupled publish and subscribe events |
US6901518B1 (en) | 1999-04-08 | 2005-05-31 | Sun Microsystems, Inc. | Method and system for establishing trust in downloaded proxy code |
US7882247B2 (en) | 1999-06-11 | 2011-02-01 | Netmotion Wireless, Inc. | Method and apparatus for providing secure connectivity in mobile and other intermittent computing environments |
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 |
US7280995B1 (en) | 1999-08-05 | 2007-10-09 | Oracle International Corporation | On-the-fly format conversion |
US6549916B1 (en) | 1999-08-05 | 2003-04-15 | Oracle Corporation | Event notification system tied to a file system |
US7418435B1 (en) | 1999-08-05 | 2008-08-26 | Oracle International Corporation | Multi-model access to data |
US6748555B1 (en) * | 1999-09-09 | 2004-06-08 | Microsoft Corporation | Object-based software management |
US6512519B1 (en) | 1999-10-27 | 2003-01-28 | Autodesk, Inc. | Infrastructure for shape event handlers |
US6947965B2 (en) | 1999-11-30 | 2005-09-20 | Recursion Software, Inc. | System and method for communications in a distributed computing environment |
US6920636B1 (en) * | 1999-12-15 | 2005-07-19 | Microsoft Corporation | Queued component interface passing for results outflow from queued method invocations |
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 |
US6950875B1 (en) | 2000-05-09 | 2005-09-27 | Sun Microsystems, Inc. | Message conductors in a distributed computing environment |
US6850979B1 (en) | 2000-05-09 | 2005-02-01 | Sun Microsystems, Inc. | 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 |
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 |
US7370091B1 (en) | 2000-05-09 | 2008-05-06 | Sun Microsystems, Inc. | Method and apparatus for obtaining space advertisements |
US7577834B1 (en) | 2000-05-09 | 2009-08-18 | Sun Microsystems, Inc. | Message authentication using message gates 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 |
US7716492B1 (en) | 2000-05-09 | 2010-05-11 | Oracle America, Inc. | Method and apparatus to obtain service capability credentials |
US8001232B1 (en) | 2000-05-09 | 2011-08-16 | Oracle America, Inc. | Event message endpoints in a distributed computing environment |
US7072967B1 (en) | 2000-05-09 | 2006-07-04 | Sun Microsystems, Inc. | Efficient construction of message endpoints |
US7065574B1 (en) | 2000-05-09 | 2006-06-20 | Sun Microsystems, Inc. | Messaging system using pairs of message gates 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 |
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 |
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 |
US7395333B1 (en) | 2000-05-09 | 2008-07-01 | Sun Microsystems, Inc. | Method and apparatus to obtain negotiated service advertisement |
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 |
US7010573B1 (en) | 2000-05-09 | 2006-03-07 | Sun Microsystems, Inc. | Message gates using a shared transport 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 |
US6792466B1 (en) | 2000-05-09 | 2004-09-14 | Sun Microsystems, Inc. | Trusted construction of message endpoints 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 |
US8082491B1 (en) | 2000-05-09 | 2011-12-20 | Oracle America, Inc. | Dynamic displays 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 |
US8135796B1 (en) | 2000-05-09 | 2012-03-13 | Oracle America, Inc. | Mechanism and apparatus for accessing and addressing services 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 |
US6789126B1 (en) | 2000-05-09 | 2004-09-07 | Sun Microsystems, Inc. | Addressing message gates in a distributed computing environment |
US6970869B1 (en) | 2000-05-09 | 2005-11-29 | Sun Microsystems, Inc. | Method and apparatus to discover services and negotiate capabilities |
US7185005B1 (en) | 2000-05-12 | 2007-02-27 | Oracle International Corporation | Nested transactions in a file system |
US6763440B1 (en) | 2000-06-02 | 2004-07-13 | Sun Microsystems, Inc. | Garbage collection using nursery regions for new objects in a virtual heap |
US6957237B1 (en) | 2000-06-02 | 2005-10-18 | Sun Microsystems, Inc. | Database store for a virtual heap |
US6760815B1 (en) * | 2000-06-02 | 2004-07-06 | Sun Microsystems, Inc. | Caching mechanism for a virtual heap |
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 |
US6865657B1 (en) | 2000-06-02 | 2005-03-08 | Sun Microsystems, Inc. | Garbage collector for a virtual heap |
US6721807B2 (en) * | 2000-08-10 | 2004-04-13 | International Business Machines Corporation | Extensible and efficient double dispatch in single-dispatch object-oriented programming languages |
AU2001283464A1 (en) * | 2000-08-31 | 2002-03-13 | Padcom, Inc. | Method and apparatus for routing data over multiple wireless networks |
GB2368411B (en) * | 2000-10-25 | 2004-01-28 | Proksim Software Inc | Sharing data over a network |
US7058648B1 (en) | 2000-12-01 | 2006-06-06 | Oracle International Corporation | Hierarchy-based secured document repository |
US7296275B2 (en) * | 2001-01-04 | 2007-11-13 | Sun Microsystems, Inc. | Method and system for passing objects in a distributed system using serialization contexts |
US20050198379A1 (en) * | 2001-06-13 | 2005-09-08 | Citrix Systems, Inc. | Automatically reconnecting a client across reliable and persistent communication sessions |
US7562146B2 (en) * | 2003-10-10 | 2009-07-14 | Citrix Systems, Inc. | Encapsulating protocol for session persistence and reliability |
US6871228B2 (en) * | 2001-06-29 | 2005-03-22 | International Business Machines Corporation | Methods and apparatus in distributed remote logging system for remote adhoc data analysis customized with multilevel hierarchical logger tree |
EP1292109A1 (de) * | 2001-08-27 | 2003-03-12 | Ricoh Company, Ltd. | Informationsverarbeitungssystem |
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 |
US7660887B2 (en) * | 2001-09-07 | 2010-02-09 | Sun Microsystems, Inc. | Systems and methods for providing dynamic quality of service for a distributed system |
US7644171B2 (en) * | 2001-09-12 | 2010-01-05 | Netmotion Wireless, Inc. | Mobile networking system and method using IPv4 and IPv6 |
US7853933B2 (en) * | 2001-09-29 | 2010-12-14 | Siebel Systems, Inc. | Computing system and method to perform compile-time extension for world wide web application |
US20030120697A1 (en) * | 2001-12-21 | 2003-06-26 | Lockheed Martin Corporation | System and method for adapting a software control in an operating environment |
US7984157B2 (en) * | 2002-02-26 | 2011-07-19 | Citrix Systems, Inc. | Persistent and reliable session securely traversing network components using an encapsulating protocol |
US7661129B2 (en) * | 2002-02-26 | 2010-02-09 | Citrix Systems, Inc. | Secure traversal of network components |
US7353521B1 (en) | 2002-10-19 | 2008-04-01 | Borland Software Corporation | Object oriented distributed software system with methodology for piggybacked reflective callbacks |
US20040170181A1 (en) * | 2003-02-27 | 2004-09-02 | Padcom, Inc. | Prioritized alternate port routing |
US7158985B1 (en) * | 2003-04-09 | 2007-01-02 | Cisco Technology, Inc. | Method and apparatus for efficient propagation of large datasets under failure conditions |
US7089066B2 (en) * | 2003-04-24 | 2006-08-08 | Colorado Vnet, Llc | Distributed control systems and methods |
US20040218591A1 (en) * | 2003-04-29 | 2004-11-04 | Craig Ogawa | Bridge apparatus and methods of operation |
US8694510B2 (en) * | 2003-09-04 | 2014-04-08 | Oracle International Corporation | Indexing XML documents efficiently |
US8229932B2 (en) | 2003-09-04 | 2012-07-24 | Oracle International Corporation | Storing XML documents efficiently in an RDBMS |
US7792874B1 (en) | 2004-01-30 | 2010-09-07 | Oracle America, Inc. | Dynamic provisioning for filtering and consolidating events |
US7930277B2 (en) * | 2004-04-21 | 2011-04-19 | Oracle International Corporation | Cost-based optimizer for an XML data repository within a database |
US20050243857A1 (en) * | 2004-04-30 | 2005-11-03 | Padcom, Inc. | Simultaneously routing data over multiple wireless networks |
US7587721B2 (en) * | 2004-05-20 | 2009-09-08 | Sap Ag | Sharing objects in runtime systems |
US7681184B1 (en) | 2004-05-24 | 2010-03-16 | Borland Software Corporation | System and methodology for cross language type system compatibility |
US20070208946A1 (en) * | 2004-07-06 | 2007-09-06 | Oracle International Corporation | High performance secure caching in the mid-tier |
US7627547B2 (en) * | 2004-11-29 | 2009-12-01 | Oracle International Corporation | Processing path-based database operations |
US8131766B2 (en) * | 2004-12-15 | 2012-03-06 | Oracle International Corporation | Comprehensive framework to integrate business logic into a repository |
US7921076B2 (en) * | 2004-12-15 | 2011-04-05 | Oracle International Corporation | Performing an action in response to a file system event |
US7634771B2 (en) * | 2005-04-29 | 2009-12-15 | Sap (Ag) | Object generation in packages |
US7587705B2 (en) * | 2005-04-29 | 2009-09-08 | Sap (Ag) | Calls and return calls using client interfaces |
US7669181B2 (en) * | 2005-04-29 | 2010-02-23 | Sap (Ag) | Client interfaces for packages |
US8073841B2 (en) * | 2005-10-07 | 2011-12-06 | Oracle International Corporation | Optimizing correlated XML extracts |
US8356053B2 (en) * | 2005-10-20 | 2013-01-15 | Oracle International Corporation | Managing relationships between resources stored within a repository |
US8949455B2 (en) | 2005-11-21 | 2015-02-03 | Oracle International Corporation | Path-caching mechanism to improve performance of path-related operations in a repository |
US7898968B2 (en) * | 2006-09-15 | 2011-03-01 | Citrix Systems, Inc. | Systems and methods for selecting efficient connection paths between computing devices |
US7827177B2 (en) * | 2006-10-16 | 2010-11-02 | Oracle International Corporation | Managing compound XML documents in a repository |
US7797310B2 (en) * | 2006-10-16 | 2010-09-14 | Oracle International Corporation | Technique to estimate the cost of streaming evaluation of XPaths |
US9183321B2 (en) | 2006-10-16 | 2015-11-10 | Oracle International Corporation | Managing compound XML documents in a repository |
US20090064134A1 (en) * | 2007-08-30 | 2009-03-05 | Citrix Systems,Inc. | Systems and methods for creating and executing files |
US20090222818A1 (en) * | 2008-02-29 | 2009-09-03 | Sap Ag | Fast workflow completion in a multi-system landscape |
US8189466B2 (en) | 2008-03-14 | 2012-05-29 | Neomedia Technologies, Inc | Messaging interchange system |
US7958112B2 (en) * | 2008-08-08 | 2011-06-07 | Oracle International Corporation | Interleaving query transformations for XML indexes |
US8656419B2 (en) * | 2009-07-02 | 2014-02-18 | Ca, Inc. | Dynamic distributed evaluator |
US10296313B2 (en) * | 2014-11-18 | 2019-05-21 | Roger James Poon | Safely consuming dynamically-typed code from a statically-typed programming language |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4887204A (en) * | 1987-02-13 | 1989-12-12 | International Business Machines Corporation | System and method for accessing remote files in a distributed networking environment |
US4914586A (en) * | 1987-11-06 | 1990-04-03 | Xerox Corporation | Garbage collector for hypermedia systems |
US5187790A (en) * | 1989-06-29 | 1993-02-16 | Digital Equipment Corporation | Server impersonation of client processes in an object based computer operating system |
AU628264B2 (en) * | 1990-08-14 | 1992-09-10 | Oracle International Corporation | Methods and apparatus for providing a client interface to an object-oriented invocation of an application |
DE69126857T2 (de) * | 1991-01-18 | 1998-01-08 | Ibm | Objektorientierte Programmierungsplattform |
-
1992
- 1992-08-28 US US07/938,102 patent/US5307490A/en not_active Expired - Lifetime
-
1993
- 1993-08-26 EP EP94908877A patent/EP0657047B1/de not_active Expired - Lifetime
- 1993-08-26 JP JP6507249A patent/JPH08504975A/ja active Pending
- 1993-08-26 DE DE69331440T patent/DE69331440T2/de not_active Expired - Fee Related
- 1993-08-26 WO PCT/US1993/007886 patent/WO1994006083A1/en active IP Right Grant
Also Published As
Publication number | Publication date |
---|---|
DE69331440D1 (de) | 2002-02-14 |
JPH08504975A (ja) | 1996-05-28 |
EP0657047A4 (de) | 1995-08-30 |
EP0657047A1 (de) | 1995-06-14 |
WO1994006083A1 (en) | 1994-03-17 |
US5307490A (en) | 1994-04-26 |
EP0657047B1 (de) | 2002-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69331440T2 (de) | Verfahren und system zur durchführung von fernprozeduranrufen in einem verteilten rechnersystem. | |
DE69615978T2 (de) | Verfahren und Vorrichtung zum Verpackung und Entpackung von Daten in objectreferenzspezifischen Datenformaten anhand generischen Stubs | |
DE69429686T2 (de) | Transaktionsverwaltung in objektorientiertem System | |
DE69719620T2 (de) | Vorrichtung und Verfahren zur Bestimmung von Server-Cluster-Topologien | |
DE69733739T2 (de) | Rechnersystem und Verfahren zum Testen eines Netzwerkmanagement-Agenten (TMN-Agenten) | |
DE69032191T2 (de) | Anordnung und Verfahren zur Realisierung von Hochleistungskommunikation zwischen Softwareprozessen | |
DE69528749T2 (de) | Objektorientierte Programmierschnittstelle zur Entwicklung und zur Ausführung einer Netzwerkverwaltungsapplikation auf einer Netzwerkkommunikationsinfrastruktur | |
DE69309485T2 (de) | Verfahren zur verteilung von schnittstellenzeigern fur fernprozeduranrufe | |
DE69329577T2 (de) | Verfahren und system für implementierung-unabhängige schnittstellenspezifikation | |
DE69636887T2 (de) | System und Verfahren,um verschiedenen Anbietern von Namen zu ermöglichen,sich dynamisch einer Namensföderation anzuschliessen | |
DE69617509T2 (de) | Vorrichtung und Verfahren zur Feststellung von Objekttypen in einem verteilten Objektsystem | |
DE69425318T2 (de) | Verfahren und System für Fernausführung von Codes | |
DE69518446T2 (de) | Typsicheres Rahmenwerk für dynamisch erweiterbare Objekte | |
DE69622144T2 (de) | Allgemeines Fernprozeduraufrufsystem und allgemeines Fernprozeduraufrufverfahren | |
DE69327448T2 (de) | Verfahren und Vorrichtung für Teilaufgaben in verteiltem Verarbeitungssystem | |
DE69128952T2 (de) | Gerät und Verfahren zur Entkupplung von Datenaustauschdetails zur Beschaffung einer Hochleistungskommunikation zwischen Softwareprozessen | |
DE69328162T2 (de) | Gerät und Verfahren zum Verfügbarstellen eines Teiles eines Namensraumes als ein Teil eines anderen Namensraumes | |
DE69727933T2 (de) | Verfahren und gerät zum beschreiben einer definierten schnittstelle, einer operation und eines datentyps in einer schnittstellendefinitionssprache | |
DE69228621T2 (de) | Objektorientiertes verteiltes Rechnersystem | |
DE69122830T2 (de) | Verteiltes Konfigurationsprofil für ein Rechnersystem | |
DE69523939T2 (de) | Verfahren zur erzeugung von objektstrukturen für den zugriff auf konventionelle, nicht objekt-orientierte geschäftsanwendungen | |
DE69727381T2 (de) | Verfahren zum transportieren von in einer schnittstellendefinitionssprache definierten datenstrukturen zwischen heterogenen systemen | |
DE69323675T2 (de) | Partner-Mechanismus zum Verbinden von Systemen mit einer Umgebung für verteilte Berechnungen (UVB) und non-UVB Systemen zum Betrieb in einem Netzwerksystem | |
DE69832354T2 (de) | Netzwerkverwaltungsrahmenwerk | |
DE69406013T2 (de) | Objektorientiertes netz-protokoll-konfigurationssystem |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |