DE69327448T2 - Verfahren und Vorrichtung für Teilaufgaben in verteiltem Verarbeitungssystem - Google Patents

Verfahren und Vorrichtung für Teilaufgaben in verteiltem Verarbeitungssystem Download PDF

Info

Publication number
DE69327448T2
DE69327448T2 DE69327448T DE69327448T DE69327448T2 DE 69327448 T2 DE69327448 T2 DE 69327448T2 DE 69327448 T DE69327448 T DE 69327448T DE 69327448 T DE69327448 T DE 69327448T DE 69327448 T2 DE69327448 T2 DE 69327448T2
Authority
DE
Germany
Prior art keywords
subcontract
client
server
call
communication buffer
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
Application number
DE69327448T
Other languages
English (en)
Other versions
DE69327448D1 (de
Inventor
Graham Palo Alto Hamilton
Michael L. Palo Alto Powell
James G. Los Altos Mitchell
Jonathan J. Mountain View Gibbons
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Application granted granted Critical
Publication of DE69327448D1 publication Critical patent/DE69327448D1/de
Publication of DE69327448T2 publication Critical patent/DE69327448T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • G06F9/548Object oriented; Remote method invocation [RMI]

Description

  • Gebiet der Erfindung
  • Die vorliegende Erfindung bezieht sich auf die Gebiete der verteilten Rechnersysteme, der Client-Server-Datenverarbeitung und der objekt-orientierten Programmierung. Insbesondere ist die vorliegende Erfindung ein Verfahren und eine Einrichtung zum Bereitstellen von Programmechanismen zum Behandeln einer Objekte einschließenden Zwischen-Client-Kommunikation, welche unabhängig von dem Betriebssystemkernel sind zu handhaben.
  • HINTERGRUND
  • Ein Schlüsselproblem bei der Betriebssystementwicklung und -pflege ist das Ermöglichen der Einführung neuer Schnittstellen und Implementierungstechniken auf eine Weise, welche Clients und Programmierern eine maximale Flexibilität gestattet, ohne das Betriebssystem mit Implementierungsdetails herunterzuladen. Darüber hinaus wird das Problem dringlicher, wenn objekt-orientierte Betriebssysteme entwickelt werden, welche Mikro-Kernel-Architekturen aufweisen. Mikro-Kernels ermöglichen es typischerweise Clients, komplexe Subsysteme, wie beispielsweise Dateisysteme, auf der Client-Ebene zu implementieren. Dennoch sind grundlegende Systemprozesse, wie beispielsweise Zwischen-Client- oder Zwischen-Computer-Kommunikationen, so komplex, daß Clients und Objektimplementierer nicht mit diesen Problemen befaßt werden sollten. D. h., diese Prozesse, die inhärent vom "System"-Typ sind, werden effektiver von Standardmodulen ausgeführt, sollten aber auf eine Weise gehandhabt werden, welche es nicht erfordert, daß das Basisbetriebssystem durch diese Prozesse eingeschränkt wird.
  • Diese Offenbarung beschreibt eine Lösung für dieses grundlegende Problem für Systeme, welche die Objektmetapher verwenden, um die Schnittstellen zwischen verschiedenen Komponenten eines Systems zu definieren. Eine elegante Lösung wird beschrieben, welche es Standardmodulen gestattet, die Kommunikation von Objektaufrufen zwischen entfernten Computern zu handhaben, welche andere Objekte als Parameter der Aufrufe senden können.
  • Bei einem objekt-orientierten System ist ein Objekt eine Komponente, die Daten und Operationen umfaßt, welche aufgerufen werden können, um die Daten zu bearbeiten. Die Operationen werden auf dem Objekt aufgerufen, indem Aufrufe an das Objekt gesendet werden. Jedes Objekt weist einen Objekttyp auf. Der Objekttyp definiert die Operationen, die an den Objekten dieses Typs ausgeführt werden können. Die Objektoperationen werden unabhängig von den Objekten selbst implementiert. Darüber hinaus kann ein Objekttyp die Objektoperationen erben, die für andere Objekttypen definiert und implementiert sind. Für eine weitergehende Beschreibung des objekt-orientierten Entwurfs und der Programmiertechniken siehe "Object-oriented Software Construction" von Bertrand Meyer, Prentice-Hall, 1988.
  • Bei der Client-Server-Datenverarbeitung gibt es typischerweise einen Satz von Computern, die miteinander über ein die Computer verbindendes Netzwerk kommunizieren können. Einige dieser Computer dienen als Anbieter von Diensten oder von Funktionalität für andere Computer. Die Anbieter derartiger Dienste oder einer derartigen Funktionalität sind als "Server" bekannt, und die Verbraucher derartiger Dienste oder einer derartigen Funktionalität werden "Clients" genannt. Das Client-Server-Modell umfaßt allgemein auch den Fall, bei dem unterschiedliche Programme, die auf dem gleichen Computer ablaufen, miteinander über irgendeinen geschützten Mechanismus kommunizieren und als Bereitsteller und Verbraucher einer Funktionalität agieren.
  • Bei objekt-orientierten verteilten Systemen, die auf dem Client-Server-Modell basieren, gibt es Server, die objekt-orientierte Schnittstellen an ihre Clients bereitstellen. Diese Server unterstützen Objekte, die aus Daten und zugehöriger Software bestehen. Clients können einen Zugriff auf diese Objekte erlangen und Aufrufe auf diesen ausführen. Diese Aufrufe werden von dem Client an den Server gesendet. Beim Server werden diese Aufrufe über die dem Objekt zugeordnete Software ausgeführt. Die Ergebnisse dieser Aufrufe werden dann zurück zu dem Client übermittelt.
  • Die Objektmetapher ist eine nützliche Technik, da sie eine Trennung zwischen der Schnittstelle eines Objekts und seiner Implementierung bereitstellt, und weil sie mehrere Implementierungen einer einzigen Schnittstelle ermöglicht, welche sich in einem verteilten System auf unterschiedlichen Maschinen aufhalten können. Jedoch definiert bei vorhandenen objekt-orientierten Systemen das Basissystem fundamentale Objekteigenschaften, wie beispielsweise, was ein Objekt"aufruf" bedeutet, was es bedeutet, "ein Objekt als Argument weiterzuleiten", etc.
  • Indem man es dem Basissystem überläßt zu definieren, was die fundamentalen Eigenschaften sind, ist es unglücklicherweise erforderlich, daß das Basissystem all jene fundamentalen Eigenschaften unterstützt, von denen wir wünschen, daß die Objekte sie aufweisen. Es sei beispielsweise angenommen, daß wir wünschen, eine Objektreplikation so zu unterstützen, daß die Zuverlässigkeit erhöht wird. Es ist für den Client-Anwendungscode nicht wünschenswert, daß er eine zusätzliche Arbeit ausführt, um mit replizierten Objekten zu sprechen. Folglich wäre es vorzuziehen, eine Replikation durch das System zu unterstützen. Aber es gibt eine Vielzahl von Wegen zum Implementieren einer Replikation. Die Frage ist, ob jemand einige dieser Wege in das Basissystem einbaut und die anderen zurückweist. Wenn ein Anwendungsentwickler einen effektiveren Weg der Verwaltung replizierter Objekte innerhalb seiner Anwendung entdeckt, wäre es für ihn wünschenswert, in der Lage zu sein, seinen neuen Mechanismus zu benutzen, ohne den Basismechanismus ändern zu müssen. Während das Basissystem verwendet werden könnte, um irgendwelche Standardbasismechanismen für bestimmte Eigenschaften, wie beispielsweise Replikation, Beharrlichkeit, Absturz, Wiederherstellung und Caching, zu unterstützen, scheint dies zwei Gefahren hervorzurufen. Erstens kann es einen einfachen Objektaufruf aufwendig machen, selbst für diejenigen Objekte, die die aufwendigen Eigenschaften nicht wünschen. Zweitens macht es es für Dritte schwierig, neue Eigenschaften hinzuzufügen, die ihren speziellen Anforderungen genügen.
  • Dementsprechend ist ein Verfahren erforderlich, um die Kontrolle der Basismechanismen des Objektaufrufs und der Argumentweiterleitung, die in verteilten Systemen am wichtigsten sind, bereitzustellen, wobei das Verfahren durch irgendeine Anordnung implementiert wird, welche getrennt von den Objektschnittstellen und Objektimplementierungen ist.
  • Techniken zum Bereitsstellen einer sprachlichen Auskleidung für Fernoperationen (beispielsweise "Fernprozeduraufrufe") sind seit vielen Jahren in Benutzung. Typischerweise nehmen diese die Form an, daß eine ferne Schnittstelle in irgendeine Sprache definiert ist. Dann wird ein Paar von Stümpfen (stubs) aus dieser Schnittstelle erzeugt. Der Client-Stumpf (client stub) läuft in einer Maschine und präsentiert eine Schnittstelle auf Sprachebene, die aus der Fernschnittstelle (remote interface) abgeleitet ist. Der Server-Stumpf (server stub) läuft auf irgendeiner anderen Maschine und ruft eine Schnittstelle auf Sprachebene auf, die aus der Fernschnittstelle abgeleitet ist. Es wird jetzt auf 1 Bezug genommen; um eine Fernoperation durchzuführen, ruft eine Client- Anwendung 12 auf eine Maschine 10 den Client-Stumpf 14 auf, welcher die dem Aufruf zugeordneten Argumente in Netzwerkpuffer arrangiert oder einreiht (marshals) und sie an den Server-Stumpf 22 auf der ferner Maschinen 18 übermittelt, welcher die Argumente aus dem Netzwerkpuffer dearrangiert oder ausreiht (unmarshals) und die Server-Anwendung 24 aufruft. In ähnlicher Weise werden dann, wenn die Server-Anwendung 24 eine Antwort zurückgibt, die Ergebnisse durch den Server-Stumpf 22 eingereiht (marshaled up) und an den Client-Stumpf 14 zurückgegeben, welcher die Ergebnisse ausreiht (unmarshals) und sie an die Client-Anwendung 12 zurückgibt. Die gesamte Mechanik der Argument- und Ergebnisübermittlung und des Fernobjektaufrufs wird in den Stümpfen ausgeführt. Sowohl die Client-Anwendung als auch die Server-Anwendung befassen sich damit bloß in Form von herkömmlichen Schnittstellen auf Sprachebene.
  • Wenn die Argumente oder Ergebnisse einfache Werte, wie beispielsweise ganze Zahlen oder Zeichenketten, sind, ist das Geschäft des Arrangierens und Dearrangierens (marshaling and unmarshaling) ziemlich einfach. Die Stümpfe werden normalerweise einfach den wahren Wert des Arguments in den Netzwerkpuffer eingeben. Bei Sprachen jedoch, die entweder abstrakte Datentypen oder Objekte unterstützen, wird das Arrangieren signifikant komplexer. Eine Lösung besteht für die Stümpfe darin, die internen Datenstrukturen des Objekts zu arrangieren und dann diese Daten zurück in ein neues Objekt zu dearrangieren. Dies weist verschiedene schwerwiegende Nachteile auf. Zunächst ist es eine Verletzung des "Abstraktions"-Prinzips der objekt-orientierten Programmierung, da die Stümpfe keine geschäftsmäßige Kenntnis über die Interna der Objekte haben. Zweitens erfordert dies, daß die Server- und die Client-Implementierungen des Objekts das gleiche interne Layout für ihre Datenstrukturen verwenden. Drittens kann es das Arrangieren großer Mengen von nicht erforderlichen Daten umfassen, da nicht sämtliche der internen Zustände des Objekts tatsächlich zu der anderen Maschine übermittelt werden müssen. Eine alternative Lösung besteht darin, daß dann, wenn ein Objekt arrangiert wird, keine seiner internen Zustände übermittelt werden. Statt dessen wird ein identifizierendes Token für das Objekt erzeugt und dieses Token wird übermittelt. Beispielsweise werden bei dem Eden-System den Objekten Namen zugewiesen, und, wenn ein Objekt arrangiert wird, dann wird sein Name statt seiner tatsächlichen Repräsentation arrangiert. Wenn nachfolgend ferne Maschinen es wünschen, an diesem Objekt zu arbeiten, so müssen sie den Namen verwenden, um die ursprüngliche Stelle des Objekts zu lokalisieren und ihre Aufrufe an diese Stelle zu übermitteln. Dieser Mechanismus ist für schwergewichtige Objekte, wie beispielsweise Dateien oder Datenbanken, geeignet, aber ist oftmals für leichtgewichtige Abstraktionen ungeeignet, wie beispielsweise für ein Objekt, das ein kartesisches Koordinatenpaar repräsentiert, bei dem es besser wäre, den realen Zustand des Objekts zu arrangieren. Schließlich liefern einige objekt-orientierte Programmiersysteme die Mittel für eine Objektimplementierung, um zu steuern, wie seine Argumente arrangiert und dearrangiert werden. Beispielsweise können bei dem Argus-System Objektimplementierer Funktionen zum Abbilden zwischen ihrer internen Darstellung und einer speziellen konkreten externen Darstellung bereitstellen. Die Argus-Stümpfe rufen die richtigen Abbildungsfunktionen auf, wenn sie Objekte arrangieren und dearrangieren, so daß statt irgendeiner bestimmten internen Darstellung die externe Darstellung übermittelt wird. Diese abweichenden Lösungen erfordern entweder sämtlich eine einzige Standardarrangierpolitik für sämtliche Objekte, oder sie erfordern, daß einzelne Objektimplementierer die Verantwortung für die Details des Arrangierens übernehmen.
  • Innerhalb der objekt-orientierten Sprachen gestattet die Technik der Reflexion es Objektimplementierern, die Kontrolle über einige der fundamentalen Objektmechanismen zu erlangen. [siehe "Reflective Facilities in Smalltalk-80" von Brian Foote & Ralph E. Johnson, 1989, OOPSLA '89 Proceedings, Seiten 327-335]. Einfach ausgedrückt, ist ein reflektives System eines, welches Strukturen enthält, die Aspekte des Systems selbst repräsentieren, und eine reflektive Berechnung ist eine Berechnung des Systems über sich selbst.
  • In der 3-KRS-Sprache beispielsweise können Objekte Meta-Objekte aufweisen, die ihnen zugeordnet sind. Ein Meta-Objekt stellt Methoden bereit, die angeben, wie ein Objekt Informationen erbt, wie ein Objekt gedruckt wird, wie Objekte erzeugt werden, wie eine Nachrichtenweiterleitung (d. h. ein Objektaufruf) implementiert ist, etc.. 3-KRS stellt jedoch keine Kontrolle über die Argumenteweiterleitung zur Verfügung.
  • Durch Bereitstellen des reflektiven Objektaufrufs in Smalltalk-80 war es möglich, Objekte zu implementieren, welche während des Aufrufens automatisch gesperrt wurden, und Objekte, welche nur einen Wert berechnen, wenn sie zuerst gelesen werden.
  • Während jedoch die Reflexion innerhalb eines einzelnen Adreßraums verwendet wurde, gab es keinen Versuch, sie speziell auf die Probleme der verteilten Verarbeitung anzuwenden.
  • Demzufolge schafft die vorliegende Erfindung eine Einrichtung und ein Verfahren, die bzw. das ein Logikmodul aufweist, das ein Subkontrakt genannt wird, und das entworfen worden ist, um die Kontrolle der Basismechanismen des Objektaufrufs und der Argumentweiterleitung bereitzustellen, die in verteilten Systemen am wichtigsten sind, und zwar auf eine Weise, welche es für die Objektimplementierer einfach macht, einen vorhandenen Subkontrakt auszuwählen und zu verwenden, und welches es den Anwendungsprogrammierern ermöglicht, keine Kenntnis von den speziellen Subkon trakten zu haben, die für die bestimmten Objekte verwendet werden.
  • ZUSAMMENFASSENDE DARSTELLUNG DER ERFINDUNG
  • Die vorliegende Erfindung schafft einen eleganten und einfachen Weg, um Mechanismen zum Aufrufen von Objekten durch Client-Anwendungen und zur Argumentweiterleitung zwischen Client-Anwendungen und Objekt-Implementierungen bereitzustellen, ohne daß die Client-Anwendung oder das Betriebssystem die Details kennen, wie diese Mechanismen arbeiten. Darüber hinaus funktionieren diese Mechanismen in einer Umgebung verteilter Computer mit ähnlicher Leichtigkeit und Effizienz, wobei die Client-Anwendungen auf einem Computerknoten und die Objekt-Implementierungen auf einem anderen sein können.
  • Die Erfindung umfaßt einen neuen Typ eines Objekts, der ein "Spring-Objekt" genannt wird, welcher eine Methodentabelle, einen Subkontraktmechanismus und eine Datenstruktur umfaßt, welche den lokalen privaten Zustand des Subkontrakts repräsentiert.
  • Der Subkontraktmechanismus ist das Herz der voliegenden Erfindung, und jeder Subkontrakt enthält einen clientseitigen Abschnitt und einen sich darauf beziehenden server-seitigen Abschnitt. Jeder Objekttyp weist einen zugeordneten Subkontrakt auf. Der client-seitige Abschnitt eines Subkontrakts hat die Fähigkeit, ein neues Spring-Objekt zu erzeugen, ein Spring-Objekt zu löschen, Informationen über das ihm zugeordnete Objekt in einen Kommunikationspuffer einzureihen (marshal), Daten aus einem Kommunikationspuffer auszureihen (unmarshal), welche das ihm zugeordnete Objekt darstellen, einen Kommunikationspuffer zu seinem zugeordneten server-seitigen Subkontrakt zu übermitteln, was entweder die Übermittlung eines Objekts von einem Ort zu einem anderen Ort oder die Übermittlung einer Kopie eines Objekts von einem Ort zu einem anderen umfaßt. Der server-seitige Abschnitt des Subkontraktmechanismus umfaßt, die Fähigkeit ein Spring-Objekt zu erzeugen, eine Unterstützung für eine Verarbeitung eingehender Aufrufe und zugehöriger Kommunikationspuffer bereitzustellen und eine Unterstützung für den Aufruf eines Objekts bereitzustellen.
  • Die Erfindung umfaßt Verfahren zum Verwenden von Subkontrakten, um Objektaufrufe zu verarbeiten, einschließlich der Weiterleitung von Argumenten, wobei die Argumente selbst wiederum Objekte sein können, in einem verteilten Datenverarbeitungssystem, in dem die Client-Anwendungen sich auf anderen Computern als die Objekt-Implementierungen aufhalten können.
  • BESCHREIBUNG DER ZEICHNUNGEN
  • Die Aufgaben, Merkmale und Vorteile des Systems gemäß der vorliegenden Erfindung werden aus der folgenden Beschreibung ersichtlich, in welcher:
  • 1 die bekannte Beziehung von Client- und Server-Anwendungen zu Stümpfen und zur Netzwerksoftware veranschaulicht.
  • 2 veranschaulicht die Hauptsystemkomponenten des SPRING-Betriebssystems.
  • 3 veranschaulicht die Beziehung zwischen Stumpfobjekten, Subkontraktobjekten und Server-Anwendungsobjekten.
  • 4 veranschaulicht einen Fernobjektaufruf unter Verwendung des Subkontrakts.
  • 5 veranschaulicht den Objektaufruf auf einer Einzelmaschine unter Verwendung eines Subkontrakts.
  • 6-9 veranschaulichen ein Ablaufdiagramm einer beispielhaften Verwendung des erfindungsgemäßen Verfahrens des Subkontrakts.
  • 10a und lOb veranschaulichen die SPRING-Sicht von Objekten gegenüber der bekannten Sicht von Objekten.
  • BEZEICHNUNGEN UND TERMINOLOGIE
  • Die folgenden detaillierten Beschreibungen können anhand von Programmprozeduren, die auf einen Computer oder einem Netzwerk von Computern ausgeführt werden, präsentiert werden. Diese prozeduralen Beschreibungen und Darstellungen sind diejenigen Mittel, die von Fachleuten auf diesem Gebiet verwendet werden, um auf effektivste Weise die Substanz ihrer Arbeit anderen Fachleuten zu übermitteln. Unter einer Prozedur wird hier und im allgemeinen eine in sich konsistente Sequenz von Schritten verstanden, die zu einem gewünschten Ergebnis führt. Diese Schritte sind solche, die physikalische Manipulationen physikalischer Größen erfordern. Überlicherweise, jedoch nicht notwendigerweise, nehmen diese Größen die Form elektrischer oder magnetischer Signale an, die gespeichert, übertragen, kombiniert, verglichen oder auf andere weise manipuliert werden können. Hauptsächlich aus Gründen der allgemeinen Verwendung hat es sich gelegentlich als geeignet erwiesen, auf diese Signale als Bits, Werte, Elemente, Symbole, Zeichen, Terme, Zahlen o. dgl. Bezug zu nehmen. Es sei jedoch angemerkt, daß all diese und ähnliche Begriffe den richtigen physikalischen Größen zugeordnet sein sollen und bloß geeignete, auf diese Größen angewendete Bezeichnungen sind.
  • Darüber hinaus werden die ausgeführten Manipulationen oftmals mit Begriffen, wie Addieren oder Vergleichen, bezeichnet, welche üblicherweise den durch einen menschlichen Bediener durchgeführten geistigen Operationen zugeordnet werden. Keine derartige Fähigkeit eines menschlichen Bedieners ist bei irgendwelchen der hier beschriebenen Operationen, welche Teil der vorliegenden Erfindung bilden, erforderlich und in den meisten Fällen auch nicht erwünscht; die Operationen sind Maschinenoperationen. Nützliche Maschinen zum Ausführen der Operationen gemäß der vorliegenden Erfindung umfassen digitale Mehrzweckcomputer oder ähnliche Einrichtungen.
  • Die vorliegende Erfindung bezieht sich darüber hinaus auf eine Einrichtung zum Durchführen dieser Operationen. Diese Einrichtung kann für die geforderten Zwecke speziell konstruiert sein oder sie kann ein Mehrzweckcomputer sein, der selektiv durch ein in dem Computer gespeichertes Computerprogramm aktiviert oder umkonfiguriert ist. Die hier angegebenen Prozeduren beziehen sich nicht inhärent auf einen spezielllen Computer oder eine andere Einrichtung. Zahlreiche Mehrzweckmaschinen können mit den in Übereinstimmung mit den hier angegebenen Lehren geschriebenen Programmen verwendet werden, oder es kann sich als geeigneter herausstellen, spezialisiertere Einrichtungen zum Durchführen der erforderlichen Verfahrensschritte zu konstruieren. Die erforderliche Struktur für eine Vielzahl dieser Maschinen wird aus der angegebenen Beschreibung ersichtlich.
  • BESCHREIBUNG DES BEVORZUGTEN AUSFÜHRUNGSBEISPIELS
  • Die folgende Offenbarung beschreibt Lösungen für die Probleme, welche von Konstrukteuren objekt-orientierter Systeme angetroffen werden, wenn sie versuchen, Schemata für den Objektaufruf und die Argumentweiterleitung in verteilten Systemen, bei denen die Argumente Objekte sein können, auf eine Art und Weise zu implementieren, welche das objekt-orientierte Basissystem nicht auf Verfahren festlegt, welche zu einem späteren Zeitpunkt schwierig zu ändern sind. Die Erfindung umfaßt einen neuen Objekttyp, der "Spring-Objekt" genannt wird, welcher eine Methodentabelle, einen Subkontraktmechanismus und eine Datenstruktur, welche den lokalen privaten Zustand des Subkontrakts repräsentiert, umfaßt. Es werden ein Verfahren und eine Einrichtung für einen Subkontraktmechanismus offenbart, welcher jedem Objekt zugeordnet ist. Jeder Subkontrakt enthält einen client-seitigen Abschnitt und einen zugehörigen server-seitigen Abschnitt. Jeder Objekttyp weist einen zugeordneten Subkontrakt auf. Der client-seitige Abschnitt eines Subkontrakts hat die Fähigkeit, ein neues Spring-Objekt zu erzeugen, ein Spring-Objekt zu löschen, Informationen über das ihm zugeordnete Objekt in einen Kommunikationspuffer einzureihen oder zu arrangieren (marshal), Daten in einem Kommunikationspuffer, welche das zugehörige Objekt repräsentieren, auszureihen oder zu dearrangieren (unmarshal), einen Kommunikationspuffer zu seinem zugehörigen server-seitigen Subkontrakt zu übermitteln, was entweder die Übermittlung eines Objekts von einem Ort zu einem anderen oder die Übermittlung einer Kopie eines Objekts von einem Ort zu einem anderen umfaßt. Der server-seitige Abschnitt des Subkontraktmechanismus umfaßt die Fähigkeit, ein Spring-Objekt zu erzeugen, Unterstützung bei der Verarbeitung eingehender Aufrufe und zugehöriger Kommunikationspuffer bereitzustellen und Unterstützung für die Aufrufung eines Objekts bereitszustellen.
  • In der folgenden Beschreibung werden aus Gründen der Erläuterung spezielle Daten und Konfigurationen angegeben, um ein besseres Verständnis der vorliegenden Erfindung zu erreichen. Das hier beschriebene bevorzugte Ausführungsbeispiel ist als Abschnitt des objekt-orientierten SPRING-Betriebssystems implementiert, das von Sun Microsystems, Inc. (Sun Microsystems ist eine registrierte Handelsmarke von Sun Microsystems, Inc.) hergestellt wird. Für einen Fachmann ist es jedoch klar, daß die vorliegende Erfindung auch ohne die speziellen Details ausgeführt und in zahlreichen Computersystemen und verschiedenen Konfigurationen oder Ausgaben und Modellen von eng gekoppelten Prozessoren oder in verschiedenen Konfigurationen von lose gekoppelten Multiprozessorsystemen implementiert werden kann.
  • Ein SPRING-Objekt ist eine Abstraktion, die einen Zustand enthält und einen Satz von Methoden bereitstellt, um diesen Zustand zu manipulieren. Die Beschreibung des Objekts und seiner Methoden ist eine Schnittstelle, die in der Schnittstellendefinitionssprache spezifiziert ist. Die Schnittstelle ist ein streng typisierter Kontrakt zwischen dem Implementierer (Server) und dem Client des Objekts.
  • Eine SPRING-Domäne ist ein Adreßraum mit einer Sammlung von Threads. Eine gegebene Domäne kann als Server einiger Objekte und als Clients anderer Objekte agieren. Der Implementierer und der Client können in derselben Domäne oder in verschiedenen Domänen sein.
  • Da SPRING objekt-orientiert ist, unterstützt es den Gedanken der Schnittstellen-Vererbung. Spring unterstützt sowohl den Gedanken der einzelnen als auch der mehrfachen Schnittstellenvererbung. Eine Schnittstelle, die ein Objekt des Typs "foo" akzeptiert, akzeptiert auch eine Instanz einer Unterklasse von "foo". Beispielsweise weist das Adreß raum-Objekt eine Methode auf, die ein Speicher Objekt nimmt und es in den Adreßraum abbildet. Dieselbe Methode akzeptiert auch Datei- und Einzelbild_puffer-Objekte, solange diese aus der Speicher_Objekt-Schnittstelle erben.
  • Das SPRING-Kernel unterstützt grundlegende Querdomänaufrufe und -threads, eine maschinenabhängige Behandlung auf niedriger Ebene ebenso wie grundlegende virtuelle Speicherunterstützung für die Speicherabbildung und physikalische Speicherverwaltung. Ein SPRING-Kernel weiß nichts über andere SPRING-Kernels – sämtliche Fernaufrufe werden durch einen Netzwerk-Proxy-Server behandelt. Darüber hinaus hängt das virtuelle Speichersystem von externen Seitenwechslern (pagers) ab, um die Speicher- und Netzwerkkohärenz zu handhaben.
  • Es wird auf 2 Bezug genommen; ein typischer SPRING-Knoten läßt verschiedene Server zusätzlich zu dem Kernel 50 ablaufen. Diese umfassen den Domänenmanager 52; den virtuellen Speichermanager ("VMM") 54; einen Benennungs-Server 56, den CFS-Datei-Server 58; einen lokalen Datei-Server 60; eine Verbinderdomäne 62, die für die Verwaltung und Cache-Speicherung dynamisch verbundener Bibliotheken verantwortlich ist; einen Netzwerk-Proxy 64, der Fernaufrufe behandelt; und einen tty-Server 66, der die grundlegende Terminalbehandlung ebenso wie Einzelbildpuffer und Maus-Unterstützung handhabt. Andere Haupt-SPRING-Systemkomponenten, welche vorhanden sein könnten, sind ein UNIX-Prozeß-Server 68, ein Subkontraktregister 69 und eine beliebige Anzahl von SPRING-Anwendungen 70.
  • SPRING ist eine experimentelle verteilte Umgebung. Sie umfaßt gegenwärtig ein verteiltes Betriebssystem und ein Unterstützungsgerüst für verteilte Anwendungen. SPRING ist vorgesehen, um Lösungen für eine Reihe von Problemen vorhandener Betriebssysteme zu erforschen, insbesondere die Probleme der Entwicklung und der Erweiterung des Systems über der Zeit.
  • SPRING ist darauf gerichtet, Schnittstellen bereitzustellen statt einfach Implementierungen bereitzustellen. SPRING ermutigt die Koexistenz von radikal verschiedenen Implementierungen einer gegebenen Schnittstelle innerhalb eines einzigen Systems. Es hat sich als geeignet herausgestellt, die Objektmetapher zu verwenden, um diese Trennung von Schnittstellen und Implementierungen auszudrücken.
  • SPRING hilft dabei, es den Anwendungsprogrammierern einfacher zu machen, neue fundamentale Eigenschaften dem System hinzuzufügen, ohne die Basismechanismen ändern zu müssen. Beispielsweise weist das aktuelle System keine Unterstützung für unteilbare (atomic) Transaktionen auf. Es sollte möglich sein, langsam neue Eigenschaften wie diese dem System hinzuzufügen.
  • Die Schnittstellendefinitionssprache
  • Das einigende Prinzip von SPRING besteht darin, daß sämtliche der Schlüsselschnittstellen in einer Standardschnittstellendefinitionssprache definiert werden. Diese Sprache ist objekt-orientiert und umfaßt die Unterstützung für eine mehrfache Vererbung. Sie befaßt sich lediglich mit Schnittstelleneigenschaften und stellt keinerlei Implementierungsinformationen zur Verfügung.
  • Aus der Schnittstellendefinitionssprache ist es möglich, sprachspezifische Stümpfe (stubs) zu erzeugen. Diese Stümpfe stellen eine sprachspezifische Abbildung zu den SPRING-Schnittstellen zur Verfügung. In unserer Hauptimplementierungssprache C++ beispielsweise werden Spring-Objekte durch C++-Objekte dargestellt. wenn eine Methode an einem Stumpfobjekt aufgerufen wird, so führt sie entweder einen lokalen Aufruf innerhalb des aktuellen Adreßraums durch oder leitet den Aufruf an einen anderen Adreßraum weiter, welcher sich auf einer anderen Maschinen befinden kann.
  • SPRING legt eine ungewöhnlich starke Betonung auf die Trennung der Schnittstellen von Implementierungen. Clients sind darauf beschränkt, daran zu operieren, was sie als lokale Objekte wahrnehmen, und das System erlegt keinerlei Beschränkungen auf, wie diese Objekte implementiert werden. Beispielsweise könnte manchmal der darunterliegende Zustand eines Objekts in dem gleichen Adreßraum wie der Client sein, manchmal könnte er an einem anderen Adreßraum sein, manchmal könnte er in dem Speicher sein, den sich der Client und der Server teilen, oder manchmal könnte er dynamisch zwischen verschiedenen dieser Zustände migrieren.
  • Das Spring-Objektmodell
  • SPRING weist eine geringfügig abweichende Art der Sicht auf Objekte gegenüber anderen verteilten objektorientierten Systemen auf, und es ist erforderlich, dies zu klären, bevor die Details des Subkontrakts erörtert werden.
  • Die meisten verteilten Systeme präsentieren ein Modell, bei dem sich Objekte bei Server-Maschinen aufhalten und Client-Maschinen Objekt-Handles besitzen, die auf das Objekt bei dem Server zeigen (siehe 10a). So beschäftigen sich Clients mit Objekt-Handles statt mit Objekten.
  • SPRING präsentiert ein Modell, bei dem die Clients direkt an Objekten arbeiten und nicht an Objekt-Handles (siehe 10b). Bei einigen dieser Objekten geschieht es, daß ihr gesamter interessierender Zustand an irgendeiner fernen Stelle gehalten wird, so daß ihr lokaler Zustand bloß aus einem Handle zu diesem fernen Zustand besteht. Ein Objekt kann zu einem Zeitpunkt nur an einem Platz vorhanden sein, so daß dann, wenn wir ein Objekt zu irgendjemandem anderen übermitteln, wir das Objekt nicht mehr selbst besitzen. Wir können jedoch auch das Objekt kopieren, bevor wir es übermitteln, was so implementiert werden könnte, daß es nunmehr zwei verschiedene Objekte gibt, die auf denselben fernen Zustand verweisen.
  • Während man somit bei Systemen, wie beispielsweise Eden, davon sprechen könnte, daß verschiedene Clients Objekt-Handles aufweisen, die zu irgendeinem fernen Objekt Bezug nehmen, würde man bei SPRING davon sprechen, daß verschiedene Clients Objekte aufweisen, die zu dem gleichen fernen Zustand verweisen.
  • Für die meisten server-basierten Objekte ist dieser Unterschied hauptsächlich einer der Terminologie. Jedoch unterstützt SPRING darüber hinaus Objekte, welche nicht server-basiert sind oder bei denen der Zustand des Objekts zwischen dem Client und dem Server aufgeteilt ist. Bei diesen Fällen ist es viel geeigneter, den Client so zu betrachten, als ob er das wahre Objekt besitzt, statt daß er bloß einen Zeiger besitzt.
  • Zum gegenwärtigen Zeitpunkt basiert das SPRING-Betriebssystem auf einem minimalen Kernel, welches eine grundlegende objekt-orientierte Zwischen-Prozeß-Kommunika tion und Speicherverwaltung bereitstellt. Die Funktionalität, wie beispielsweise die Benennung, der Seitenwechsel, Dateisysteme, etc., werden als Benutzermodus-Dienste an der Oberfläche des grundlegenden Kernels zur Verfügung gestellt. Das System ist inhärent verteilt, und eine Anzahl von Cache-Speicherungstechniken wird verwendet, um die Netzwerkleistung für Schlüsselfunktionen in die Höhe zu treiben. Das System unterstützt darüber hinaus eine ausreichende UNIX-Emulation, um Standardwerkzeuge, wie beispielsweise make, vi, csh, das X-Fenstersystem, etc., zu unterstützen.
  • Das Ziel von SPRING besteht darin, eine große Mannigfaltigkeit zu unterstützen. Es wird als wichtig angesehen, daß einzelne Subsysteme ihre eigenen Wege zur Ausführung ihrer Aufgaben entwickeln können, welche die allgemeinen Regeln und Konventionen umgehen können.
  • Der Subkontraktmechanismus
  • Bei moderneren Systemen spricht (kommuniziert) die Anwendungssoftware nicht direkt mit der Netzwerksoftware. Statt dessen spricht die Anwendungssoftware mit "Stümpfen" (14 in 1). Es gibt jeweils einen verschiedenen Stumpf für jede verschiedene Schnittstelle, die über das Netzwerk unterstützt wird. Der Stumpfbefehlscode ist für das Konvertieren zwischen einer speziellen Schnittstelle auf Sprachebene, wie sie von der Anwendungssoftware gesehen wird, und den Standardkommunikationsstellen auf niedriger Ebene, die von der Netzwerksoftware zur Verfügung gestellt werden, verantwortlich. Beispielsweise sind die Stümpfe für das Aufnehmen der Argumente an einen Fernaufruf und das Einbringen dieser Argumente in eine Nachricht, die für die Netzwerksoftware zum Übermitteln über das Netzwerk geeignet ist, verantwortlich.
  • Es wird jetzt auf 4 Bezug genommen; bei der Umgebung gemäß der vorliegenden Erfindung gibt die Client- Anwendung 12 auf eine Maschine 10 Aufrufe an den geeigneten client-seitigen Stumpf 14 aus, welcher bei einem clientseitigen Abschnitt eines "Subkontrakts" 30 verspricht, welcher mit der Netzwerksoftware 16 kommuniziert, welche mit ihrer im allgemeinen auf einer anderen Maschine 18 befindlichen Gegenstücknetzwerksoftware 20 kommuniziert. Diese server-seitige Netzwerksoftware 20 überträgt eingehende Nachrichten an den server-seitigen Abschnitt des Subkontrakts 32, welcher wiederum die Daten an die Server-Anwendung 24 liefert. Wie angezeigt, paßt der Subkontrakt sich zwischen den Stümpfen und der Netzwerksoftware ein. Die Stümpfe verwenden einen Subkontrakt, um Fernaufrufe durchzuführen, und in ähnlicher Weise verwendet dann der Subkontrakt die Netzwerksoftware, um den tatsächlichen Aufruf durchzuführen. Verschiedene Subkontrakte implementieren verschiedene Arten von Fernkommunikationsprotokollen (zur Replikation, zum Caching, etc.) auf der Oberseite der Standardkommunikationssoftware.
  • Innerhalb eines Einzelcomputers können verschiedene Anwendungen darüber hinaus Subkontrakte verwenden, um zu kommunizieren. Es wird jetzt auf 5 Bezug genommen; die Client-Anwendung 12 ist in einem Anwendungsraum 38 und gibt Aufrufe an den geeignete client-seitigen Stumpf 14 aus, welcher wiederum den geeigneten Subkontrakt 30 aufruft. Der Subkontrakt 30 überträgt dessen Kommunikationen zu dem Betriebssystem 36, welches sie zu dem server-seitigen Subkontrakt 32 vermittelt, welcher wiederum die Daten an seinen server-seitigen Stumpf 22 abgibt, der die Daten zu der Server-Anwendung 24 weiterleitet. In diesem Fall ersetzen die von dem Betriebssystem 36 zur Verfügung gestellten Zwischen-Prozeß-Kommunikationsgrundelemente den von der Netzwerksoftware (16 und 20 in 4) zur Verfügung gestellten Zwischen-Maschinen-Kommunikationsmechanismus.
  • Selbst innerhalb einer einzigen Anwendung, die in einem einzigen Adreßraum abläuft, kann der Subkontrakt verwendet werden, um zwischen verschiedenen Komponenten der Anwendung zu kommunizieren.
  • Jetzt seien unter Bezugnahme auf 3 die Dinge aus einer objekt-orientierte Perspektive betrachtet; die Client-Anwendung 1 wird in Form von "Stumpfobjekten" 2 betrieben. Jedes dieser Stumpfobjekte 2 enthält ein Subkontraktobjekt 3, dessen interner Zustand 4 (der als seine "Repräsentation" bekannt ist) irgendeine Form eines Zeigers 6 auf den realen darunterliegenden Zustand 5 enthalten kann, welcher sich in dem gleichen Adreßraum, in einem anderen Adreßraum auf der gleichen Maschine oder vollständig auf einer anderen Maschine aufhalten kann. Der darunterliegende Zustand wird typischerweise selbst als Objekt 5 in dem Adreßraum der Server-Anwendung dargestellt.
  • Wo der Subkontrakt hineinpaßt
  • Ein Spring-Objekt wird von einem Client so wahrgenommen, als ob es aus drei Dingen besteht: einer Methodentabelle, welche für jede sich aus der Typdefinition des Objekts ergebene Operation einen Eintrag enthält; einer Subkontrakt-Beschreibung, welche die in dem nächsten Abschnitt beschriebenen grundlegenden Subkontrakt-Operationen spezifiziert; und irgendeinem lokalen privaten Zustand, welcher als Repräsentation des Objekts bezeichnet wird.
  • Ein Client tritt mit einem Objekt in Wechselwirkung, indem er Methoden an einem als C++-Objekt erscheinenden Objekt aufruft. Der Befehlscode für dieses Objekt wurde tatsächlich automatisch erzeugt, und er transformiert die Methodenaufrufe in Aufrufe entweder der regulären Methodentabelle des Objekts oder an seinem Subkontrakt-Operationenvektor. Wie diese Methoden ihre Wirkung erreichen, ist gegenüber dem Client versteckt.
  • Sofern das Objekt durch einen fernen Server implementiert ist, so besteht eine typische Anordnung darin, daß der Subkontrakt die Mittel zum Kommunizieren mit dem ferner Server implementiert, während die Methodentabelle aus einem Zeiger auf Stumpfmethoden besteht, deren einzige Aufgabe darin besteht, die Argumente in einen Puffer einzureihen (to marshal), den Subkontrakt zum Ausführen des Fernaufrufs aufzurufen und dann irgendwelche Ergebnisse aus dem Erwiderungspuffer auszureihen (unmarshal). SPRING stellt einen automatischen Stumpfgenerator bereit, um geeignete Stümpfe aus der Schnittstellendefinitionssprache zu erzeugen.
  • Bei dem fernen Server gibt es typischerweise irgendeinen Subkontraktbefehlscode zum Ausführen irgendeiner Subkontraktarbeit, die eingehenden Aufrufen zugeordnet ist, und irgendeinen server-seitigen Stumpfbefehlscode, der die Argumente für jede Operation ausreiht (unmarshals) und in die Server-Anwendung aufruft. (Dieser Server-Stumpfbefehlscode wird ebenfalls automatisch erzeugt).
  • Sofern ein Objekt vollständig lokal implementiert ist, dann ist es möglich, die Verwendung von Stumpfmethoden zu vermeiden und Implementierungsmethoden bereitzustellen, die direkt in die Methodentabelle versetzt werden können. SPRING stellt eine Unterstützung zum Erzeugen von Methodentabellen in diesem Fall zur Verfügung.
  • Grundlegende Subkontraktmechanismen
  • Die client-seitigen Subkontraktoperationen sind:
    • – Kopiere (copy)
    • – Konsumiere (consume)
    • – Reihe aus (unmarshal)
    • – Reihe ein (marshal)
    • – Reihe ein und Kopie (marshal_copy)
    • – Rufe auf (invoke)
    • – Rufe Preamble auf (invoke preamble)
    • – Enge ein (narrow)
    • – Objekt Typ-ID
    • – Objekt Manager-ID
    • – Ist Null
  • Um die Subkontraktoperationen zu veranschaulichen, werden wir als Beispiel einen Subkontrakt verwenden, der Singleton genannt wird. Dieser Subkontrakt ist auf einer SPRING-Kernel-Kommunikationsmöglichkeit aufgebaut, die Türen genannt wird. Eine Tür ist ein Kommunikationsendpunkt, zu welchem Threads adreßraumüberquerende Aufrufe ausführen können. Eine Domäne, die eine Tür erzeugt, empfängt einen Türidentifizierer, welchen sie zu anderen Domänen weiterleiten kann, so daß diese Aufrufe zu der zugehörigen Tür ausgeben können. Das Kernel verwaltet sämtliche Operationen an Türen und Türidentifizierern, einschließlich ihrer Konstruktion, ihrer Zerstörrung, ihres Kopierens und ihrer Übertragung.
  • Bei Singleton hält eine Server-Domäne den darunterliegenden Zustand, der einem Objekt zugeordnet ist, und erzeugt eine Tür, um eingehende Aufrufe zu akzeptieren. Die Client-Domänen besitzen bloß einen Türidentifizierer, den sie verwenden, um zu der Server-Domäne hindurch aufzurufen.
  • Somit besteht ein auf dem Singleton-Subkontrakt aufgebautes SPRING-Objekt aus einer Methodentabelle, die vollständig aus Stumpfmethoden besteht, einem Singleton-Subkontraktdeskriptor und einer Repräsentation, die aus einem Kernel-Türidentifizierer besteht.
  • Kopiere
  • Die Subkontrakt-Kopiere-Operation wird verwendet, um ein neues Spring-Objekt zu erzeugen, welches in enger Beziehung zu einem vorhandenen Spring-Objekt steht. Die exakte Beziehung der Kopie zu dem Original ist vollständig vom Verhalten des Subkontrakts abhängig. Manchmal kann der Subkontraktbefehlscode das Kopieren selbst durchführen, aber manchmal kann er auswählen, den Implementierungscode des Objekts einzuschließen.
  • Singleton implementiert das Kopieren, indem er bei dem Kernel nachfragt, eine Kopie des aktuellen Türidentifizierers herzustellen, und indem er dann ein neues Objekt erzeugt, dessen Repräsentation dieser neue Türidentifizierer ist und welches denselben Subkontrakt und dieselbe Methodentabelle wie das aktuelle Objekt referenziert. Somit sind nach dem Kopieren jetzt zwei verschiedene Spring-Objekte vorhanden, die jeweils den gleichen darunterliegenden Server-Zustand referenzieren. (In diesem Falle ist die Semantik des Kopierens die Semantik des Kopierens eines Zeigers).
  • Bei einem serverlosen Objekt könnte die Implementierung des Kopierens das Kopieren des gesamten Zustands des Objekts umfassen, so daß das neue Objekt vollständig von dem ursprünglichen Objekt unterschieden ist.
  • Verbrauche (Consume)
  • Die Subkontrakt-Verbrauche-Operation wird verwendet, um ein Spring-Objekt zu löschen.
  • Singleton implementiert das Verbrauchen, indem der dem aktuellen Objekt zugeordnete Türidentifizierer gelöscht wird. Dies beeinflußt nicht direkt den Server-Zustand des Objekts, und dann, wenn es irgendwelche weiteren Spring-Objekte gibt, die den gleichen Server-Zustand referenzieren, bleiben diese durch diese Operation unbeeinflußt.
  • Es sei angemerkt, daß in der Praxis dann, wenn sämtiche Türidentifizierer, die eine Tür referenzieren, gelöscht worden sind, das Kernel den Server benachrichtigt, so daß er seinen Server-Zustand freigeben kann, wenn er es auswählt.
  • Einreihen (marshal)
  • Die Subkontrakt-Einreih-Operation wird verwendet, wenn ein Objekt an eine andere Maschine übermittelt wird.
  • Sie nimmt das aktuelle Objekt und bringt genügend Informationen in einen Kommunikationspuffer, so daß ein im wesentlichen identisches Objekt aus diesem Puffer in einer anderen Domäne ausgereiht (unmarshal) werden kann.
  • Da die gewünschte Semantik darin besteht, das Objekt zu übermitteln, ist es klar, daß wir, nachdem wir das Objekt gesendet haben, es nicht mehr länger in unserem Adreßraum haben sollten. Somit ist ein impliziter Seiteneffekt des Einreihens das Löschen des gesamten dem Objekt zugeordneten lokalen Zustands.
  • Singleton implementiert das Einreihen, indem er seinen Türidentifizierer in den Einreihpuffer anordnet. Der Querdomänenaufrufmechanismus des Kernels löscht implizit den Türidentifizierer aus dieser Domäne, wenn er den Kommunikationspuffer zu einer anderen Domäne übermittelt.
  • Einreihen Kopieren (marshal copy)
  • Unsere Schnittstellendefinitionssprache unterstützt einen Parameterweiterleitmodus des Kopierens. Dieser Modus impliziert, daß eine Kopie des Argumentobjekts übermittelt wird, aber die aktuelle Domäne das Originalobjekt behält. Dieser Modus war ursprünglich implementiert, indem zunächst die Subkontrakt-Kopier-Operation und dann die Subkontrakt-Einreih-Operation aufgerufen wurde. Es wurde jedoch beobachtet, daß dies häufig zu redundanter Arbeit bei der Herstellung eines Spring-Objekts führt, das sofort gelöscht wurde. Dies war insbesondere aufwendig für serverlose Objekte mit einem zustandgroßen Umfangs.
  • Somit wurde die Einreih Kopier-Operation eingeführt. Sie ist so definiert, daß sie die Wirkung eines Kopierens gefolgt von einem Einreihen herstellt, aber es wird gestattet, einige der Zwischenschritte herauszuoptimieren.
  • Im Falle von Singleton kopieren wir einfach den aktuellen Türidentifizierer und bringen den neuen Türidentifizierer in den Kommunikationspuffer.
  • Im Falle eines serverlosen Objektes könnte Einreihen_Kopieren das Kopieren seiner Datenstrukturen in den Einreihpuffer umfassen.
  • Ausreihen (unmarshal)
  • Die Ausreih-Operation wird verwendet, wenn ein Objekt aus einer anderen Domäne empfangen wird. Ihre Aufgabe besteht darin, ein vollständig ausgestattetes Spring-Objekt herzustellen, das aus einer Methodentabelle, einem Subkontraktvektor und einer Repräsentation besteht.
  • Wenn irgendeine Software (typischerweise eine Stumpfmethode) entscheidet, ein Objekt aus einem Kommunikationspuffer zu lesen, muß sie sowohl einen anfänglichen Subkontrakt als auch eine anfängliche Methodentabelle auf der Grundlage des erwarteten Typs des Objekts auswählen. Sie ruft dann den anfänglichen Subkontrakt auf, leitet ihr die anfängliche Methodentabelle zu.
  • Der Subkontrakt muß dann versuchen, ein Objekt auf der Grundlage der Informationen in dem Kommunikationspuffer herzustellen. Dies umfaßt typischerweise das Lesen ausreichender Informationen aus dem Kommuniationspuffer, um in der Lage zu sein, eine Repräsentation zu erzeugen.
  • In dem Fall von Singleton umfaßt dies normalerweise das Lesen eines Türidentifizierers aus dem Puffer und das Erzeugen einer Repräsentation, um diesen Türidentifizierer zu halten.
  • Schließlich steckt das Ausreihen den Subkontraktzeiger, den Methodentabellenzeiger und die Repräsentation zusammen, um ein neues Spring-Objekt zu erzeugen.
  • Aufrufen
  • Die Aufruf-Operation wird verwendet, um einen Argumentpuffer an ein Ziel (destination) zu übermitteln und einen Ergebnispuffer zu empfangen.
  • Im Falle von Singleton umfaßt dies einfach ein Trap für das Kernel, um den Querdomänenaufruf an den Zieltüridentifizierer durchzuführen.
  • Im Falle einer Subkontrakte unterstützenden Replikation könnte dies die Übermittlung des Argumentpuffers zu einem (oder mehreren) eines Satzes möglicher Server umfassen.
  • Aufruf Preamble
  • Die Subkontrakt-Aufruf-Operation wird nur aufgerufen, nachdem das gesamte Argumenteinreihen bereits erfolgt ist. In der Praxis wurde bemerkt, daß es Fälle gibt, bei denen ein Subkontrakt eines Objekts es vorziehen würde, früher in dem Prozeß involviert zu werden, so daß er entweder einige Preamble-Informationen in den Kommunikationspuffer einschreiben kann oder Flags setzen kann, um das zukünftige Einreihen zu beeinflussen.
  • Um es dem Subkontrakt zu ermöglichen, irgendwelche erforderlichen Zustände einzurichten, weist SPRING eine neue Subkontraktoperation Aufruf Prämbel auf, welche aufgerufen wird, bevor irgendein Argumenteinreihen aufgetreten ist.
  • Beispielsweise kann bei einigen Situationen ein Subkontrakt einen geteilten Speicherbereich verwenden, um mit einem Server zu kommunizieren. In diesem Fall kann dann, wenn Aufruf_Prämbel aufgerufen wird, der Subkontrakt den Kommunikationspuffer so einstellen, daß er in den geteilten Speicherbereich zeigt, so daß Argumente direkt in den Bereich eingereiht werden und nicht kopiert zu werden brauchen, nachdem das gesamte Einreihen abgeschlossen ist.
  • Objekt_Typ_ID
  • Spring unterstützt eine Laufzeittypisierung in begrenztem Umfang. Diese wird während Operationen, wie beispielsweise Objekt-Browsing, oder zum Validieren der Typ-Sicherheit bestimmter Operationen (inbesondere Benennung) verwendet, welche nicht auf der statischen Typüberprüfung vertrauen können.
  • Die Objekt Typ-ID-Operation gibt den wahren Typ-ID für das aktuelle Objekt zurück.
  • Einige Subkontrakte implementieren diese Operation, indem sie zu dem Server hindurch aufrufen, um den Typ-ID zu erlangen. Andere Subkontrakte implementieren diese Operation, indem sie den Typ_ID des Objekts als Teil ihrer Repräsentation halten, was erfordert, daß er als Teil der eingereihten (marshaled) Form des Objekts übermittelt wird.
  • Einengen
  • Die Subkontrakt-Eineng-Operation wird verwendet, um eine typ-überprüfte Typeinengung auf einem Objekt von einem Basistyp zu einem abgeleiteten Typ zu unterstützen. Diese Operation verwendet den Typ-ID des Objekts, um zu Validieren, daß die Einengung gültig ist, und um eine Ausnahme zu erzeugen, wenn sie es nicht ist.
  • Objekt Manager-ID
  • Diese Subkontrakt-Operation unterstützt die Spring-Benennungsarchitektur. Sie schafft einen zuverlässigen Weg, um einen Namen für einen darunterliegenden Server eines Objekts zu erlangen. Sie wird typischerweise implementiert, indem zu dem darunterliegenden Server hindurch aufgerufen wird, um den Namen zu erlangen.
  • Ist Null
  • Spring unterstützt den Gedanken von Null-Objekten. Diese schaffen Platzhalterobjekte, die während einer Pro gramm- und Datenstrukturinitialisierung verwendet werden können. Vereinbarungsgemäß führen Null-Objekte zu Ausnahmen bei sämtlichen Methoden und bei den meisten Subkontrakt-Operationen.
  • SPRING unterstützt Null-Objekte, indem es sie mit speziellen Null-Subkontrakten beliefert. Die Ist Null-Operation eines Null-Subkontrakts gibt wahr zurück, wo normale Subkontrakte falsch zurückgeben.
  • Null-Subkontrakte gestatten typischerweise, daß ihre Objekte eingereiht werden, aber führen zu Ausnahmen bei den meisten anderen Subkontrakt-Operationen.
  • Ein Beispiel der Subkontrakt-Verwendung
  • Es ist nützlich, die Sequenz von Subkontrakt-Operationen zu betrachten, die durchgeführt werden, wenn ein fernes Objekt aufgerufen wird. Man beachte, daß dies nur ein Beispiel ist, und daß Fachleute erkennen werden, daß Subkontrakte, wie sie bei der vorliegenden Erfindung definiert werden, dazu gebracht werden können, viel exotischere Dinge auszuführen, als hier beschrieben werden. In der folgenden Erörterung soll auf die 6 bis 9 Bezug genommen werden.
  • Es sei angenommen, daß wir ein Objekt A haben, welches eine Methode Fred unterstützt und welches einen Subkontrakt SA verwendet.
  • fred:proc(copy x:wombat) returns fruitbat
  • Von dem Rückgabetyp fruitbat ist bekannt, daß er irgendeinen Subkontrakt SF verwendet.
  • Sagen wir, daß wir ein Objekt X des Typs wombat haben, welches einen Subkontrakt SX verwendet, und wir rufen A's Methode Fred auf, wobei wir X als Argument einleiten 50:
    • 1. Zunächst geben wir die Stumpfmethode für "Fred" ein 52, 54.
    • 2. Der Stumpfbefehlscode ruft A's Aufruf_Preamble-Operation auf 56.
    • 3. Der SA-Aufruf Preamble-Befehlscode führt irgendwelche erforderliche Initialisierung durch und gibt zurück 58.
    • 4. Der Stumpfbefehlscode versucht dann, das Argumentobjekt X als Kopieargument einzureihen, indem die Einreih Kopier-Operation von X aufgerufen wird. In 6 läuft dies wie folgt ab: Stumpf Fred macht einen Test, um nachzusehen, ob es irgendwelche einzureihenden Argumente gibt 60. Da die Antwort ja ist, testet dann der Stumpf Fred die Argumente, um nachzusehen, ob irgendwelche davon Objekte sind 62. Bei Auffinden des Objekts X und Erlangen der Kenntnis darüber, daß X einen Subkontrakt SX hat, ruft Stumpf Fred den Subkontrakt SX auf, um Objekt x einzureihen 64.
    • 5. Der SX-Einreih Kopier-Befehlscode arrangiert, daß Informationen, die eine Kopie von X beschreiben, in den Argumentpuffer eingegeben werden, und gibt an Stumpf Fred zurück 64.
    • 6. Der Stumpfbefehlscode hat jetzt sämtliche Argumente eingereiht und ist nunmehr bereit, den Aufruf tatsächlich auszuführen. So ruft er die Aufruf-Operation von A auf 70.
    • 7. Die SA-Aufruf-Methode führt die Arbeit durch, die erforderlich ist, um den Argumentpuffer an den Ziel-Server zu übermitteln, mit einer Anforderung, daß ein Aufruf auf der Fred-Methode auf dem Server-Zustand für das Objekt A auftritt, und wartet auf einen aus dem Server zurückkehrenden Ergebnispuffer 72.
    • 8. Es wird jetzt auf 7 Bezug genommen; der Aufruf wird von dem Ziel-Server empfangen und die Daten werden an den server-seitigen Subkontrakt SSA geliefert, der den Puffer zum server-seitigen Stumpf S2 liefert 74, 76. Stumpf S2 überprüft, um nachzusehen, ob es Argumente gibt, die auszureihen sind 78, und dann, um nachzusehen, ob irgendwelche der Argumente Objekte sind 80. Wenn er auffindet, daß es ein auszureihendes Objekt X gibt, ruft der Stumpf S2 die Ausreih-Operation des SSA-Subkontrakts auf 82. Subkontrakt SSA überprüft den Subkontrakt-ID des Objekts X, um zu finden, daß es einen ihm zugeordneten Subkontrakt SX aufweist 84. Subkontrakt SSA ruft dann die Ausreih-Operation auf Subkontrakt SX auf 84, und der Subkontrakt SX reiht das Objekt X aus, um es an den Subkontrakt SSA zurückzugeben, welcher wiederum es an den Stumpf S2 zurückgibt 86. Stumpf S2 leitet, sobald er das Ausreihen sämtlicher Argumente abgeschlossen hat, den Aufruf und die Argumente an die angezielte Objektimplementierung weiter 92 und wartet auf eine Erwiderung 94. Der Objektimplementierer verarbeitet den Aufruf und erzeugt ein Objekt fruitbat-1 mit Subkontrakt SF und einen serverseitigen Subkontrakt SSF und instruiert den Subkontrakt SSF, als server-seitiger Subkontrakt für den Subkontrakt SF zu dienen 96. Subkontrakt SSF erzeugt einen internen Zustand, um fruitbat-1 zu identifizieren, und gibt das Objekt fruitbat zurück, das auf diesen Zustand zeigt 98. Der Objektimplementierer gibt jetzt das Objekt fruitbat an den server-seitigen Stumpf S2 zur Rückgabe an den Client 100 zurück. Es wird jetzt auf 8 Bezug genommen, Stumpf S2 muß jetzt die Einreih-Routine der Argumente erneut durchlaufen, um das Objekt fruitbat einzureihen 104, 106, 108, 110 und 112, wobei die eingereihten Argumente an Stumpf S2 zurückgegeben werden, welcher die eingereihten Daten an den server-seitigen Subkontrakt SSA für eine erneute Übermittlung an den client-seitigen Subkontrakt SA liefert 116, 114.
    • 9. Der Stumpfbefehlscode empfängt jetzt den Ergebnispuffer aus der SA-Aufruf-Methode 130 und wünscht, das Ausreihen der Ergebnisse zu starten. In diesem Fall ist von dem Ergebnis bekannt, daß es ein Objekt des Typs fruitbat ist, welches den Subkontrakt SF aufweist, so daß Stumpf Fred (SA) die Ausreih-Operation des SF-Subkontrakts aufruft, wobei die reguläre Methodentabelle für den Typ fruitbat eingeleitet wird. Die gesamten Aufrufschritte sind in den Blöcken 142, 134, 136, 138 gezeigt und werden vollständiger unten in der Diskussion über kompatible Objekte beschrieben.
    • 10. Der SF-Ausreih-Befehlscode versucht jetzt, ein Objekt aus dem Ergebnispuffer auszureihen (unmarshal). Er kombiniert die Informationen aus dem Ergebnispuffer mit seiner eigenen Subkontraktmethodentabelle und mit der regulären Methodentabelle, die ihm zugeleitet wurde, um ein neues Spring-Objekt zu bilden, welches er zurück zu dem Stumpf leitet 140.
    • 10. Der Fred-Stumpf hat jetzt seine Aufgabe beendet und kann das Ergebnisobjekt an die Anwendungsebene zurückgeben 148.
  • Der Prozeß wurde durch den Stumpfbefehlscode für die Methode Fred von A angesteuert, aber schloß darüber hinaus die Subkontrakte für das Ziel-Objekt, für das Argument-Objekt und für das Ergebnis-Objekt ein.
  • Kompatible Subkontrakte
  • Selbstverständlich ist es für unterschiedliche Objekte wünschenswert, unterschiedliche Subkontrakte zu haben. Insbesondere können zwei Objekte, welche von der Client-Anwendung als solche vom gleichen Typ wahrgenommen werden, tatsächlich unterschiedliche Subkontrakte aufweisen. Beispielsweise kann eine Instanz des "Datei"-Typs den Standard"-Singleton"-Subkontrakt verwenden, während eine andere Instanz von "Datei" den interessanteren "Cachable"-Subkontrakt verwendet.
  • Für jeden Typ kann ein Standardsubkontrakt spezifiziert werden, der verwendet wird, wenn mit dem Typ gesprochen wird; was aber macht SPRING, wenn ein abweichender Subkontrakt tatsächlich benötigt wird? Beispielsweise wird der Standardtyp Datei spezifiziert, um einen einfachen Singleton genannten Subkontrakt zu verwenden. Der Typ Cachable Datei ist ein Untertyp von Datei, welcher statt dessen den Caching-Subkontrakt verwendet. Was geschieht aber, wenn ein Objekt des Typs Cachable Datei dort gesendet wird, wo ein Objekt des Typs Datei erwartet wird? Selbstverständlich wird der Empfänger, wenn er darauf besteht, das Caching-Objekt so auszureihen, als wäre es ein Singleton, dann enttäuscht werden.
  • Dieses Problem wird durch Einführen des Begriffs eines kompatiblen Subkontrakt gelöst. Ein Subkontrakt A wird als kompatible mit einem Subkontrakt B angesehen, wenn der Ausreih-Befehlscode für den Subkontrakt B in richtiger Weise das Empfangen eines Objekts des Subkontrakts A bewältigt.
  • Der normale, zum Implementieren kompatibler Subkontrakte verwendete Mechanismus besteht darin, irgendeine Form eines Subkontraktidentifzierers als Teil der eingereihten (marshaled) Form jedes Objekts einzuschließen.
  • So beginnt eine typische Subkontrakt-Ausreih-Operation damit, daß ein flüchtiger Blick auf den erwarteten Subkontraktidentifizierer in dem Kommunikationspuffer geworfen wird. Wenn er den erwarteten Identifizierer für den aktuellen Subkontrakt enthält, fährt der Subkontrakt mit einem regulären Ausreihen fort. wenn sie jedoch irgendeinen anderen Wert sieht, dann ruft sie in ein Register auf, um den richtige Code für diesen Subkontrakt zu lokalisieren, und ruft dann diesen Subkontrakt auf, um das Ausreihen durchzuführen.
  • Gegenwärtig sind sämliche unserer Subkontrakte miteinander kompatibel, und sie verwenden ein einziges Schema, um sich selbst zu identifizieren. Es wäre jedoch möglich, andere Sätze von Subkontrakten hinzuzufügen, welche abwei chende Schemata für die gegenseitige Identifikation verwenden und welche inkompatibel mit dem Standardsatz wären.
  • Entdecken neuer Subkontrakte
  • Ein Programm wird typischerweise mit einem Satz von Bibliotheken verbunden, die einen Satz von Standard-Subkontrakten bereitstellen. Zur Laufzeit jedoch kann es sein, daß es Objekte antrifft, welche Subkontrakte verwenden, die sich nicht in seinen Standardbibliotheken befinden.
  • Es wird ein Mechanismus bereitgestellt, um von den Subkontraktidentifizierern auf Bibliotheksnamen abzubilden, und ein dynamisches Verbinden von Bibliotheken zum Erlangen neuer Subkontrakte wird unterstützt.
  • Sagen wir, daß eine Domäne erwartet, daß unter Verwendung des Singleton-Subkontrakts ein Objekt vom Typ Datei empfangen wird, wir aber statt dessen ihr ein Objekt vom Typ Replizierte Datei unter Verwendung des Replicon-Subkontrakts senden. Die Singleton-Ausreih-Operation entdeckt dann, daß sie sich mit einem abweichenden Subkontrakt befaßt, und sie wird einen Aufruf in das Subkontraktregieter der Domäne ausführen, um den richtigen Subkontraktcode aufzufinden. Das Register wird entdecken, daß gegenwärtig kein geeigneter Subkontrakt geladen ist, aber es wird dann einen Netzwerkdienst verwenden, um den Subkontraktidentifizierer auf einen Bibliotheksnamen (sagen wir replicon.so) abzubilden, und es wird dann versuchen, dynamisch in dieser Bibliothek zu verbinden, um den Subkontrakt zu erlangen.
  • Obwohl das Programm kein Konzept für replizierte Objekte hatte und anfänglich nicht mit irgendwelchen Bibliotheken verbunden war, die replizierte Objekte verstanden, waren wir somit in der Lage, dynamisch den richtigen Befehlscode zu erlangen, um mit einem replizierten Datei-Objekt zu sprechen.
  • Dieser Mechanismus bedeutet, daß es möglich ist, neue Subkontrakte hinzuzufügen und sie zu verwenden, um mit alten Anwendungen zu sprechen, ohne entweder die alten Anwendungen oder die Standardbibliotheken zu ändern, wobei nur vorausgesetzt wird, daß wir eine geeignete Subkontraktbibliothek während der Laufzeit des alten Programms verfügbar machen können. Diese dynamische Verbindungsstrategie ist weit davon entfernt, unfehlbar zu sein.
  • Vielen Domänen, insbesondere Servern des Systems, widerstrebt es, einfach irgendwelchen beliebigen dynamischen Bibliotheksbefehlscode ablaufen zu lassen, der von einem potentiell bösartigen Client benannt worden ist. So wird aus Sicherheitsgründen der dynamische Verbinder nur dem Laden solcher Bibliotheken zustimmen, die sich auf einem gekennzeichneten Verzeichnissuchpfad befinden. So erfordert es typischerweise den Eingriff eines Systemadministrators, um eine neue Subkontraktbibliothek in einem Standardverzeichnis zu installieren, welches die meisten Domänen auf ihren Suchpfaden haben.
  • Die Server-Seite
  • Viele Subkontrakte unterstützen eine Client-Server-Verarbeitung. Die client-seitige Sicht eines Subkontrakts wurde beschrieben, aber für server-basierte Objekte gibt es darüber hinaus eine bestimmte Menge von Einrichtungen auf der Server-Seite.
  • Auf der Client-Seite ist die Subkontraktimplementierung nicht für Anwendungsprogrammierer verfügbar. Auf der Server-Seite jedoch ist es Server-Implementierungen gestattet, enger mit bestimmten Subkontrakten gekoppelt zu sein. Beispielsweise kann ein replizierter Subkontrakt spezielle Schnittstellen zu der Server-Anwendung erfordern, um die Replikation zu unterstützen.
  • Somit können die server-seitigen Schnittstellen erheblich zwischen Subkontrakten variieren. Jedoch gibt es drei Elemente, die typischerweise vorhanden sind: die Unterstützung für ein Erzeugen eines Spring-Objekts aus einem Objekt auf Sprachebene, die Unterstützung für eine Verarbeitung eingehender Aufrufe und die Unterstützung zum Aufrufen eines Objekts. Ein Objekt "auf Sprachebene" ist eines, das nur einen Zustand und einen Satz von Methoden enthält.
  • Erzeugen eines Spring-Objekts
  • Subkontrakte müssen einen Weg zum Erzeugen von Spring-Objekten aus Objekten auf Sprachebene bereitstellen. Dieser kann eine oder zwei Formen annehmen.
  • Die einfachste Form besteht darin, daß ein Subkontrakt ein normales client-seitiges Spring-Objekt erzeugt. Dies bedeutet, daß er irgendeine Art eines Kommunikationsendpunkts (z. B. eine Kern-Tür (nucleus door)) erzeugen und ein client-seitiges Spring-Objekt herstellen muß, dessen Repräsentation diesen Endpunkt verwendet.
  • Einige Subkontrakte jedoch stellen eine spezielle Unterstützung für Spring-Objekte zur Verfügung, die sich in dem gleichen Adreßraum wie ihr Server aufhalten. Beispielsweise der Singleton-Subkontrakt stellt einen optimierten Aufrufmechanismus zur Verfügung, der innerhalb eines einzigen Adreßraums verwendet werden kann. Wenn ein Spring-Objekt unter Verwendung eines derartigen Subkontrakts erzeugt wird, wird es typischerweise ein Objekt unter Verwendung eines speziellen server-seitigen Operationsvektors herstellen und es vermeiden, den Aufwand des Erzeugens von für eine domänenübergreifende Kommunikation erforderlichen Ressourcen aufzuwenden. Wenn und sofern das Objekt tatsächlich zur Übertragung zu einer anderen Domäne eingereiht worden ist, wird der Subkontrakt schließlich diese Ressourcen erzeugen.
  • Somit stellt der Singleton-Subkontrakt anfänglich ein Spring-Objekt unter Verwendung nur eines lokalen C++-Zeigers auf den Server-Zustand her. Nur dann, wenn dieses Objekt für eine externe Übertragung eingereiht wird, lei stet sich Singleton den Aufwand des Erzeugens einer Kern-Tür und des Einreihens des zugehörigen Tür-ID.
  • Verarbeitung eingehender Aufrufe
  • Gelegentlich wird ein Subkontrakt einen Kommunikationsendpunkt erzeugen, der einen eingehenden Aufruf direkt an die server-seitigen Stümpfe liefert. Häufiger jedoch wird der Subkontrakt arrangieren, daß der eingehende Anruf zunächst in dem Subkontrakt eintrifft, und wird dann selbst den Aufruf an die Stumpfebene weiterleiten.
  • Dies gestattet es dem server-seitigen Subkontrakt, einen Dialog mit dem zugehörigen client-seitigen Befehlscode aufrechtzuerhalten, indem zusätzliche Informationen auf Aufrufe und Erwiderungen huckepack aufgesetzt werden. Ein Subkontrakt beispielsweise, der eine Replikation unterstützt, könnte Informationen auf Erwiderungen aufsetzen, um Clients über Änderungen in dem Satz der replizierten Server zu informieren oder darüber, auf welchem Server er es vorziehen würde, den Client zu verwenden.
  • Aufrufen eines Objekts
  • Gelegentlich wird ein Server entscheiden, daß er es wünscht, ein Stück des Zustands zu verwerfen, selbst wenn es Clients gibt, die gegenwärtig Objekte aufweisen, die auf diesen Zustand verweisen. Dies ist insbesondere wichtig für Betriebssystemdienste, welche es wünschen können, Ressourcen zurückzufordern, ohne darauf zu warten, daß sämtliche ihrer Clients sich damit einverstanden erklären.
  • Somit stellen typische server-seitige Subkontrakte einen Weg für die Server-Anwendung zur Verfügung, um ein ausstehendes Objekt aufzurufen. In dem Fall von Singleton wird dies beispielsweise implementiert, indem die darunterliegende Kern-Tür (nucleus door) aufgerufen wird, welche effektiv weitere eingehende Kernel-Aufrufe verhindert.
  • Beispiel-Subkontrakte
  • Das Folgende ist eine kurze Übersicht über einige beispielhafte Subkontrakte. Für einen Fachmann ist es klar, daß kein bestimmter Typ dieser Typen für die Ausführung der vorliegenden Erfindung erforderlich ist und daß viele andere Typen von Subkontrakten denkbar sind. Zur Verkürzung werden vereinfachte Umrisse ihrer Kernmerkmale angegeben und Beschreibungen von Fehlerbedingungen und speziellen Fällen fortgelassen.
  • Man beachte, daß in sämtlichen Fällen der Client-Anwendungscode bloß einfache Spring-Objekt-Aufrufe durchführt, die Objekte als Argumente weiterleiten. Sämtliche beschriebenen Einrichtungen sind in den Subkontrakten versteckt.
  • Der Cluster-Subkontrakt
  • Der Singleton-Subkontrakt verwendet eine eigenständige Kernel-Tür für jedes Stück des Server-Zustands, der als separates Spring-Objekt aufgedeckt werden könnte. Da das Kernel eine Fähigkeit wie ein Sicherheitsmodell auf Türidentifizierer auferlegt, ist dies eine gute Implementierung für irgendwelche Objekte, die verwendet werden, um den Zugriff auf selbständig geschützte Systemressourcen zu gewähren.
  • Einige Server jedoch exportieren eine große Anzahl von Objekten, wobei dann, wenn einem Client der Zugriff auf irgendeines der Objekte gewährt wird, diesem ebenso der Zugriff auf sämtliche Objekte gewährt werden könnte. In diesem Fall kann es den Systemmehraufwand reduzieren, wenn man in der Lage ist, auf einen Satz von Objekten über eine einzige Tür zuzugreifen.
  • Der Cluster-Subkontrakt unterstützt diesen Gedanken. Jedes Cluster-Objekt wird durch die Kombination eines Türidentifizierers und eines Ganzzahl-Tag repräsentiert. Die Cluster-Aufruf Preamble- und -Aufruf-Operationen verabreden sich, das Tag entlang zu dem Server zu verfrachten, wenn sie einen domänenüberquerenden Aufruf an der Tür durchführen. In ähnlicher Weise senden und empfangen die Einreihund Ausreih-Methoden sowohl den Türidentifizierer als auch das Ganzzahl-Tag.
  • Der Caching-Subkontrakt
  • Wenn sich ein Server auf einer anderen Maschine als seine Clients befinden, ist es oftmals nützlich, ein Caching auf den Client-Maschinen durchzuführen. Wenn ein cache-speicherbares Objekt zwischen den Maschinen übermittelt wird, ist es somit erwünscht, daß die empfangende Maschine das empfangene Objekt bei einem lokalen Cache-Manager registriert und auf das Objekt über den Cache zugreift.
  • Der Caching-Subkontrakt stellt diese Funktionalität zur Verfügung. Die Repräsentation eines Caching-Objekts umfaßt einen Türidentifizierer (door identifier) DIl, der auf den Server zeigt, und einen Türidentifizierer DI2, der auf einen lokalen Cache zeigt.
  • Wenn wir ein Caching-Objekt zwischen Maschinen übermitteln, übermitteln wir nur den DI1-Türidentifizierer. Der Caching-Ausreih(unmarshal)-Befehlscode präsentiert den DI1-Türidentifizierer einem lokalen Cache-Manager und empfängt einen neuen DI2. Immer dann, wenn der Subkontrakt eine Aufruf-Operation ausführt, verwendet er den DI2-Türidentifizierer. So gehen sämtliche Aufrufe an einem cache-speicherbaren Objekt zu einem Cache-Manager auf der lokalen Maschine. Die Verwendung eines Kontrakts dieses Typs ist voll-ständiger beschrieben in der parallel anhängigen Anmeldung mit der Seriennummer / , angemeldet von Michael N. Nelson und Yousef A. Khalidi für "A Method and Apparatus for a Caching File Server", angemeldet am gleichen Tag wie diese Anmeldung, wobei auf die Anmeldung hiermit Bezug genommen wird.
  • Der wiederherstellbare (recoverable) Subkontrakt Einige Server halten ihren Zustand in einem stabilen Speicher. Wenn ein Client ein Objekt aufweist, dessen Zustand in einem derartigen Server gehalten wird, würde er es wünschen, daß das Objekt in der Lage ist, sich geräuschlos aus Server-Abstürzen wiederherzustellen. Normale Spring-Türidentifizierer werden ungültig, wenn ein Server abstürzt, so daß wir irgendeinen neuen Mechanismus hinzufügen müssen, um es einem Client zu gestatten, sich mit einem Server neu zu verbinden. Da normale Türidentifizierer eine Fähigkeit einer Eigenschaft besitzen, würden wir auch gern einen Weg haben, den Server zu überzeugen, daß wir berechtigt sind, ein vorgegebenes Stück des Server-Zustands zu benutzen.
  • Der wiederherstellbare Subkontrakt verwendet eine Repräsentation, die aus einem normalen Türidentifizierer plus dem Namen eines Wiederherstellungsmanagers plus einem kryptographisch unterzeichneten Zertifikat besteht. Wenn ein Server ein wiederherstellbares Objekt hinaus in die Welt leitet, erzeugt er ein Zertifikat, das den Zugriff beschreibt, zu dem dieses Objekt berechtigt ist, und unterzeichnet es unter Verwendung einer herkömmlichen kryptographischen Signatur.
  • Normalerweise führt der wiederherstellbare Aufrufcode einfach einen einfachen Türaufruf an dem Türidentifizierer durch. Wenn dies jedoch fehlgeht, ruft der Subkontrakt statt dessen in den Wiederherstellungsmanager, wobei er sein Zertifikat präsentiert und anfordert, benachrichtigt zu werden, wenn der Server sich wieder herstellt. Wenn der Server neu lädt, kontaktiert er den Wiederherstellungsmanager und gibt unter Verwendung der Zertifikate zum Gültig-Machen des Zugriffs den Clients neue Türidentifizierer, so daß sie die Operationen wieder aufnehmen können.
  • Der Replicon-Subkontrakt
  • Der Replicon-Subkontrakt ist ein extrem einfacher Subkontrakt, der sich mit replizierten Diensten befaßt.
  • Ein Zustand eines Replicon-Objekts besteht aus einem Vektor von Türidentifizierern. Wenn er einen Aufruf durchführt, versucht er, einen Aufruf über Domänen hinweg an jedem der Türidentifizierer auszugeben, bis einer der Aufrufe Erfolg hat.
  • Es gibt viele zusätzliche Merkmale, die einfach zu dem Replicon-Subkontrakt hinzugefügt werden könnten. Beispielsweise könnte man zusätzlich zu dem Vektor von Türidentifizierern ein Konfigurations-Tag für die aktuelle Server-Konfiguration verfolgen. Immer dann, wenn ein Server-Aufruf ausgeführt wird, könnte dieses Konfigurations-Tag übermittelt werden. Sofern der Server es wünscht, die Konfiguration zu ändern (weil Server neu geladen wurden oder wegen einer Lastausbalancierung), kann er einen neuen Vektor von Türidentifizierern und Konfiguration-ID auf den Ergebnispuffer huckepack aufsetzen.
  • Reflexionen an Subkontrakten
  • Einer der Gründe, weswegen ein Subkontrakt effektiv ist, besteht darin, daß er die Aufgabe des Implementierens von Objekten von dem Implementieren von Objektmechanismen abtrennt. Subkontraktimplementierer stellen einen Satz von interessierenden Subkontrakten zur Verfügung, die Objektimplementierern ermöglichen, aus einem Bereich unterschiedlicher Objektverfahrensweisen auszuwählen, ohne zu erfordern, daß jeder Objektimplementierer mit den Details der Objektimplementierungseinrichtungen vertraut wird.
  • Der Satz von Operationen, die ein Subkontrakt bereitstellt, erscheint der richtige Schlüssel zum Erlangen der Steuerung innerhalb einer verteilten Umgebung zu sein. Aufgrund der Konstruktion umfassen sämtliche Schlüsselaktio nen, die an fernen Objekten vorgenommen werden, den Subkontrakt des Objekts auf die eine oder andere Weise.
  • In der Praxis gelang es dem Subkontrakt, die Funktionalität zu reduzieren, die von dem Basissystem bereitgestellt werden muß. Eine Reihe von interessierenden neuen Subkontrakten wurden implementiert, ohne irgendwelche neuen Möglichkeiten des Basissystems zu erfordern.
  • Der kompatible Subkontraktmechanismus und das dynamische Verbinden von Subkontrakten bedeutet, daß neue Subkontrakte in die Welt eingeführt werden können und auf alten SPRING-Systemen benutzt werden können, ohne irgendwelche Änderungen an dem vorhandenen Betriebssystem.
  • Das bevorzugte Auführungsbeispiel
  • Bei einem bevorzugten Ausführungsbeispiel kann der hier beschriebene Subkontraktmechanismus von Fachleuten besser verstanden werden, indem auf das folgende Listing des Schnittstellendefinitionsbefehlscodes Bezug genommen wird.
  • Figure 00400001
  • Figure 00410001
  • Figure 00420001
  • Figure 00430001
  • Figure 00440001
  • Figure 00450001
  • Figure 00460001
  • Figure 00470001
  • Figure 00480001
  • Figure 00490001
  • Figure 00500001
  • Figure 00510001
  • Während die Erfindung anhand eines bevorzugten Ausführungsbeispiels in einer speziellen Betriebssystemumgebung beschrieben worden ist, werden Fachleute erkennen, daß die Erfindung mit Modifikationen in anderen und unterschiedlichen Betriebssystemen innerhalb des Umfangs der anhängigen Ansprüche ausgeführt werden kann.

Claims (7)

  1. Ein objektorientiertes Anrufungs- und Kommunikationssystem zwischen einem Client und einem Server, gekennzeichnet durch: auf der Client-Seite: einen lokalen Knoten (1); ein an dem lokalen Knoten lokalisiertes lokales Objekt zum Ausführen eines Aufrufs von einer Anwendungsprozedur zu einem Server-Objekt (5), wobei das Server-Objekt (5) eine Objektimplementierung des lokalen Objekts ist, ohne daß die Anwendung einen Ort des Server-Objekts oder einen Ort der Implementierung des Server-Objekts kennt und ohne daß die Anwendung Details darüber weiß, wie Argumente zum Aufrufen des Server-Objekts (5) arrangiert (marshalled) werden müssen, wobei das Server-Objekt (5) eine Datenstruktur aufweist; einen an dem lokalen Knoten (1) angeordneter Stumpf (stub) (14), welcher beim Ausführen von Aufrufen an dem Server-Objekt (5) assistiert, indem Argumente für das Server-Objekt (5) in einen Kommunikationspuffer (4) arrangiert werden; eine Mehrzahl von client-seitigen Subkontrakt-Mechanismen (30), wobei unterschiedliche lokale Objekte (2) innerhalb einer einzigen Anwendung einer unterschiedlichen der Mehrzahl von client-seitigen Subkontrakt-Mechanismen (30) zugeordnet sein können; und wobei ein client-seitiger Abschnitt eines der Mehrzahl von client-seitigen Subkontrakt-Mechanismen (30) mit einem lokalen Objekt (2) gekoppelt ist, wobei es für den client-seitigen Abschnitt eines Subkontrakt-Mechanismus (30) nicht erforderlich ist, daß er Kenntnis über Typen der von dem ersten Objekt gesendeten Argumente hat, und wobei der client-seitige Abschnitt eines Subkontrakt-Mechanismus so konfiguriert ist, daß er von dem Stumpf (14) einen Methodenidentifizierer und einen Zeiger (6) auf einen Kommunikationspuffer (4) empfängt, wobei der Kommunikationspuffer Argumente enthält, die in einem Aufruf an das Server-Objekt (5) gesendet werden sollen, wobei der client-seitige Abschnitt eines Subkontrakt-Mechanismus (30) eine Option hat, um zusätzliche Daten zu dem Kommunikationspuffer (4) hinzuzufügen, um zusätzliche Informationen dem Server-Objekt (5) zur Verfügung zu stellen, und wobei er selektiv einen von einem Zeiger (6) auf den Kommunikationspuffer (4) repräsentierenden Parameter und den Inhalt des Kommunikationspuffers an das Server-Objekt (5) übermitteln kann, und wobei der client-seitige Abschnitt des einen der Mehrzahl von Subkontrakt-Mechanismen (30) Operationsaufrufe ausführen kann, um ein neues Objekt zu erzeugen, welches sich auf ein vorhandenes Objekt bezieht; und auf der Server-Seite: einen Server-Knoten (18); und eine Mehrzahl von server-seitigen Subkontrakt-Mechanismen (32), von denen jeder einem zugehörigen der Mehrzahl von client-seitigen Subkontrakt-Mechanismen (30) zugeordnet ist, wobei ein server-seitiger Abschnitt der Mehrzahl von serverseitigen Subkontrakt-Mechanismen (32) auf dem Server-Knoten (18) lokalisiert ist und dem client-seitigen Abschnitt des Subkontrakt-Mechanismus (30) zugeordnet ist zum Austauschen von Nachrichten und zum Verarbeiten von durch den clientseitigen Abschnitt des Subkontrakt-Mechanismus (30) initiierten Operationsaufrufen, wobei der server-seitige Abschnitt des Subkontrakt-Mechanismus (32) so konfiguriert ist, daß er die Argumente in dem Kommunikationspuffer (4) de-arrangiert, die Argumente zu einem aufgerufenen Objekt liefert, die Ergebnisse von dem aufgerufenen Objekt empfängt, die Ergebnisse in einen Ergebnispuffer (32) arrangiert und selektiv einen Zeiger (6) auf den Ergebnispuffer (32) repräsentierende Parametern und den Inhalt des Ergeb nispuffers an den client-seitigen Abschnitt des Subkontrakts (30) kommuniziert.
  2. Das Objekt-Anrufungs- und Kommunikationssystem nach Anspruch 1, wobei der client-seitige Abschnitt des einen der Mehrzahl von Subkontrakt-Mechanismen (30) Informationen über sein zugehöriges Objekt in den Kommunikationspuffer (4) arrangieren kann.
  3. Das Objekt-Anrufungs- und Kommunikationssystem nach Anspruch 1, wobei das selektive Kommunizieren eines der einen Zeiger (6) auf den Kommunkationspuffer (4) repräsentierenden Parameter und des Inhalts des Kommunikationspuffer durch den client-seitigen Abschnitt des einen der Mehrzahl von Subkontrakt-Mechanismen (30) es dem client-seitigen Abschnitt des Subkontrakt-Mechanismus (30) gestattet: eine Kopie eines Objekts von einem Ort zu einem anderen zu übermitteln; und ein Objekt von einem Ort zu einem anderen zu übermitteln.
  4. Das Objekt-Anrufungs- und Kommunikationssystem nach Anspruch 1, wobei der server-seitige Abschnitt des einen der Mehrzahl von Subkontrakt-Mechanismen (32) Operationsaufrufe zum Erzeugen eines Objekts und zum Aufrufen eines Objekts ausführen kann.
  5. Ein computer-implementiertes Verfahren zum Übermitteln von Nachrichten zwischen einer Client-Anwendung und einem Server in einem objekt-orientierten System, wobei es Client-Anwendungen, Objekte, Stümpfe (stubs), Objektimplementierungen und Server gibt, wobei die Nachricht Argumente enthält, von denen zumindest ein Element ein Objekt enthält, wobei das Verfahren gekennzeichnet ist durch die folgenden Schritte. Erzeugen (50) einer Operationsanrufung an einem lokalen Objekt durch eine Client-Anwendung unter Computersteuerung, wobei das Objekt eine Datenstruktur aufweist; Empfangen (54) der Operationsanrufung durch einen client-seitigen Stumpf des Objekts; Arrangieren von der Operationsanrufung zugeordneten Argumenten in einem Kommunikationspuffer, wobei die Arrangieroperation die Schritte umfaßt: Bestimmen (62), ob irgendeines der zu arrangierenden Argumente ein Objekt ist; Identifizieren (64) eines einer Mehrzahl von Subkontrakten, welcher dem zu arrangierenden Objekt zugeordnet ist, für jedes Objekt, welches ein zu arrangierendes Argument ist; Verwenden des identifizierten Subkontrakts, welcher dem zu arrangierenden Objekt zugeordnet ist, wobei das Objekt, welches als ein zu arrangierendes Argument verwendet wird, in einen Kommunikationspuffer (4) arrangiert wird und; Zurückgeben eines Abschlußsignals an den client-seitigen Stumpf (64); Transformieren der Operationsanrufung in einen Operationsaufruf auf einem client-seitigen Subkontrakt durch den client-seitigen Stumpf, wobei der client-seitige Subkontrakt einer einer Mehrzahl von Subkontrakten ist (70); Verwenden des client-seitigen Subkontrakts, um die Operationsanrufung und den zugehörigen Kommunikationspuffer von der Client-Anwendung zu der Implementierung des Objekts zu übermitteln (72); Verwenden des client-seitigen Subkontrakts, um eine Erwiderung von der Implementierung des Objekts zu empfangen und um einen Rückgabekommunikationspuffer zu dem client-seitigen Stumpf zu liefern (130); De-arrangieren der Ergebnisse und des zurückgegebenen Kommunikationspuffers durch den client-seitigen Stumpf (132); und Verfügbar-Machen der Ergebnisse für die Client-Anwendung (148).
  6. Das Verfahren nach Anspruch 5, wobei die Client-Anwendungen und Objekt-Implementierungen sich auf verschiedenen Computern im dem verteilten Computersystem aufhalten können.
  7. Das Verfahren nach Anspruch 5 in einem objektorientierten verteilten System, das eine Vielzahl unterschiedlicher Arten von Objekten und einen Satz von Subkontrakt-Identifizierern aufweist, wobei jeder Subkontrakt-Mechanismus durch einen Subkontrakt-Identifizierer identifiziert wird, zum De-Arrangieren eines Objekts aus einem Kommunikationspuffer, ferner gekennzeichnet durch die Schritte: De-Arrangieren eines Subkontrakt-Identifizierers aus dem Kommunikationspuffer durch einen Subkontrakt-Mechanismus unter Computersteuerung, wobei der erste Subkontrakt-Mechanismus einer einer Anzahl unterschiedlicher Subkontrakt-Mechanismen zum Kommunizieren mit fernen Objekten ist, wobei jeder unterschiedliche Subkontrakt-Mechanismus einen Satz von Prozeduren zum Durchführen zumindest eines Objekt-Arrangierens, Objekt-De-Arrangierens und Objekt-Anrufens aufweist; Verwenden eines Subkontrakt-Registers zum Lokalisieren eines Satzes von Prozeduren, die einen zweiten Subkontrakt-Mechanismus implementieren, welcher durch den Subkontrakt-Identifizierer identifiziert wird, durch Durchführung der zusätzlichen Schritte des: Überprüfens des Registers, um festzustellen, ob ein dem Subkontrakt-Identifizierer zugeordneter Subkontrakt-Mechanismus in dem Register enthalten ist (136); Konstruieren eines Geteilte-Bibliothek-Dateinamens auf der Grundlage des Subkontrakt-Identifizierers (136); und Aufrufens eines dynamischen Verbinderprogrammmechanismus, um einen Programmcodemechanismus mit dem Register zu verbinden, wobei der Programmcodemechanismus durch den Ge teilte-Bibliothek-Dateinamen auf der Grundlage des Subkontrakt-Identifizierers identifiziert wird, wobei der durch den Geteilte-Bibliothek-Dateinamen auf der Grundlage des Subkontrakt-Identifizierers identifizierte Programmcodemechanismus der dem Subkontrakt-Identifizierer zugeordnete Subkontrakt-Mechanismus ist (138); Auswählen einer De-Arrangier-Prozedur aus dem Satz von Prozeduren, der den zweiten Subkontrakt-Mechanismus implementiert (140); Durchführen eines lokalen Prozeduraufrufs zu der De-Arrangierprozedur, um das De-Arrangieren des Objekts durchzuführen (140); und De-Arrangieren des Objekts durch De-Arrangieren von Daten und Kommunikationsinformationen, die für den zweiten Subkontrakt-Mechanismus geeignet sind (148).
DE69327448T 1992-12-21 1993-11-10 Verfahren und Vorrichtung für Teilaufgaben in verteiltem Verarbeitungssystem Expired - Fee Related DE69327448T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US99586392A 1992-12-21 1992-12-21
US995863 1992-12-21

Publications (2)

Publication Number Publication Date
DE69327448D1 DE69327448D1 (de) 2000-02-03
DE69327448T2 true DE69327448T2 (de) 2004-03-04

Family

ID=25542291

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69327448T Expired - Fee Related DE69327448T2 (de) 1992-12-21 1993-11-10 Verfahren und Vorrichtung für Teilaufgaben in verteiltem Verarbeitungssystem

Country Status (4)

Country Link
US (2) US5577251A (de)
EP (1) EP0604010B1 (de)
JP (1) JPH06231069A (de)
DE (1) DE69327448T2 (de)

Families Citing this family (137)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0604010B1 (de) * 1992-12-21 1999-12-29 Sun Microsystems, Inc. Verfahren und Vorrichtung für Teilaufgaben in verteiltem Verarbeitungssystem
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
GB2297180B (en) 1993-09-27 1998-05-20 Oracle Corp Method and apparatus for parallel processing in a database system
IL111154A0 (en) * 1993-10-21 1994-12-29 Martino Ii John A Systems and methods for electronic messaging
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
US6769009B1 (en) 1994-05-31 2004-07-27 Richard R. Reisman Method and system for selecting a personalized set of information channels
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
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
US5802291A (en) * 1995-03-30 1998-09-01 Sun Microsystems, Inc. System and method to control and administer distributed object servers using first class distributed objects
US6249822B1 (en) * 1995-04-24 2001-06-19 Microsoft Corporation Remote procedure call method
US6009464A (en) * 1995-09-20 1999-12-28 Sun Microsystems, Inc. Method and apparatus for enabling application programs to communicate with network clients and servers
US5737607A (en) * 1995-09-28 1998-04-07 Sun Microsystems, Inc. Method and apparatus for allowing generic stubs to marshal and unmarshal data in object reference specific data formats
US5764902A (en) * 1995-09-29 1998-06-09 Intel Corporation Conditional insert or merge in a data conference
US6047309A (en) * 1995-10-02 2000-04-04 International Business Machines Corporation Recording observed and reported response characteristics at server and/or client nodes in a replicated data environment, and selecting a server to provide data based on the observed and/or reported response characteristics
US5758186A (en) * 1995-10-06 1998-05-26 Sun Microsystems, Inc. Method and apparatus for generically handling diverse protocol method calls in a client/server computer system
US8271339B2 (en) 1995-11-13 2012-09-18 Lakshmi Arunachalam Method and apparatus for enabling real-time bi-directional transactions on a network
US6212556B1 (en) * 1995-11-13 2001-04-03 Webxchange, Inc. Configurable value-added network (VAN) switching
US7930340B2 (en) 1995-11-13 2011-04-19 Lakshmi Arunachalam Network transaction portal to control multi-service provider transactions
US8037158B2 (en) 1995-11-13 2011-10-11 Lakshmi Arunachalam Multimedia transactional services
US5784620A (en) * 1995-11-15 1998-07-21 Philips Electronics North America Corp. Object-oriented system having shared-persistent class pattern
US6260074B1 (en) * 1996-03-30 2001-07-10 Sun Microsystems, Inc. Method and apparatus for passing generic objects in a distributed system
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
US5864852A (en) * 1996-04-26 1999-01-26 Netscape Communications Corporation Proxy server caching mechanism that provides a file directory structure and a mapping mechanism within the file directory structure
US20030195846A1 (en) 1996-06-05 2003-10-16 David Felger Method of billing a purchase made over a computer network
US7555458B1 (en) 1996-06-05 2009-06-30 Fraud Control System.Com Corporation Method of billing a purchase made over a computer network
US8229844B2 (en) 1996-06-05 2012-07-24 Fraud Control Systems.Com Corporation Method of billing a purchase made over a computer network
US5961601A (en) * 1996-06-07 1999-10-05 International Business Machines Corporation Preserving state information in a continuing conversation between a client and server networked via a stateless protocol
US6189048B1 (en) * 1996-06-26 2001-02-13 Sun Microsystems, Inc. Mechanism for dispatching requests in a distributed object system
US6044409A (en) 1996-06-26 2000-03-28 Sun Microsystems, Inc. Framework for marshaling and unmarshaling argument object references
US6032199A (en) * 1996-06-26 2000-02-29 Sun Microsystems, Inc. Transport independent invocation and servant interfaces that permit both typecode interpreted and compiled marshaling
US5991823A (en) * 1996-06-26 1999-11-23 Sun Microsystems, Inc. Low overhead object adaptor
US6718550B1 (en) 1996-06-26 2004-04-06 Sun Microsystems, Inc. Method and apparatus for improving the performance of object invocation
US6044224A (en) * 1996-06-26 2000-03-28 Sun Microsystems, Inc. Mechanism for dynamically associating a service dependent representation with objects at run time
US5809507A (en) * 1996-07-01 1998-09-15 Sun Microsystems, Inc. Method and apparatus for storing persistent objects on a distributed object network using a marshaling framework
US5949998A (en) * 1996-07-03 1999-09-07 Sun Microsystems, Inc. Filtering an object interface definition to determine services needed and provided
US6336148B1 (en) * 1996-09-25 2002-01-01 Sun Microsystems, Inc. Automatic checking of public contracts and private constraints on distributed objects
US5907847A (en) * 1996-09-26 1999-05-25 Sun Microsystems, Inc. Method and apparatus for coupling object state and behavior in a database management system
US5978842A (en) * 1997-01-14 1999-11-02 Netmind Technologies, Inc. Distributed-client change-detection tool with change-detection augmented by multiple clients
US6112183A (en) * 1997-02-11 2000-08-29 United Healthcare Corporation Method and apparatus for processing health care transactions through a common interface in a distributed computing environment
US6282581B1 (en) * 1997-03-27 2001-08-28 Hewlett-Packard Company Mechanism for resource allocation and for dispatching incoming calls in a distributed object environment
US5999988A (en) * 1997-03-31 1999-12-07 Sun Microsystems, Inc. Method and apparatus for generating and employing a run-time generated stub to reference an object in object oriented systems
JP3817823B2 (ja) * 1997-04-10 2006-09-06 ソニー株式会社 データ通信方法
US6240466B1 (en) 1997-04-21 2001-05-29 International Business Machines Corporation Object-oriented apparatus and method for determining new object location relative to an existing object
US5943497A (en) * 1997-04-30 1999-08-24 International Business Machines Corporation Object-oriented apparatus and method for controlling configuration of object creation
US6094664A (en) * 1997-05-30 2000-07-25 Sun Microsystems Method and apparatus for optimizing the null pointer exception in an object-oriented programming environment with statically typed variables
US6578113B2 (en) * 1997-06-02 2003-06-10 At&T Corp. Method for cache validation for proxy caches
US6151639A (en) * 1997-06-19 2000-11-21 Sun Microsystems, Inc. System and method for remote object invocation
US6157959A (en) * 1997-07-03 2000-12-05 Tandem Computers, Incorporated Method and apparatus for providing portable kernel-mode support for fast interprocess communication
US6065045A (en) * 1997-07-03 2000-05-16 Tandem Computers Incorporated Method and apparatus for object reference processing
US5905868A (en) * 1997-07-22 1999-05-18 Ncr Corporation Client/server distribution of performance monitoring data
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
US6631425B1 (en) 1997-10-28 2003-10-07 Microsoft Corporation Just-in-time activation and as-soon-as-possible deactivation or server application components
US6438616B1 (en) * 1997-12-18 2002-08-20 Sun Microsystems, Inc. Method and apparatus for fast, local corba object references
US6510460B1 (en) 1997-12-18 2003-01-21 Sun Microsystems, Inc. Method and apparatus for enforcing locking invariants in multi-threaded systems
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
US6205491B1 (en) * 1997-12-18 2001-03-20 Sun Microsystems, Inc. Method and apparatus for deferred throwing of exceptions in C++
US6249803B1 (en) 1997-12-18 2001-06-19 Sun Microsystems, Inc. Method and apparatus for executing code during method invocation
US6167565A (en) * 1998-01-08 2000-12-26 Microsoft Corporation Method and system of custom marshaling of inter-language parameters
US6629126B1 (en) * 1998-03-13 2003-09-30 Genuity Inc. Framework for providing quality of service requirements in a distributed object-oriented computer system
US6298391B1 (en) 1998-03-13 2001-10-02 Microsoft Corporation Remote procedure calling with marshaling and unmarshaling of arbitrary non-conformant pointer sizes
US6601110B2 (en) * 1998-03-17 2003-07-29 Sun Microsystems, Inc. System and method for translating file-level operations in a non-door-based operating system to door invocations on a door server
US7028312B1 (en) * 1998-03-23 2006-04-11 Webmethods XML remote procedure call (XML-RPC)
US6061744A (en) * 1998-05-12 2000-05-09 Autodesk, Inc. Generous tit-for-tat cooperative distributed computing
US6473791B1 (en) 1998-08-17 2002-10-29 Microsoft Corporation Object load balancing
WO2000010084A2 (en) * 1998-08-17 2000-02-24 Microsoft Corporation Object load balancing
US6442620B1 (en) 1998-08-17 2002-08-27 Microsoft Corporation Environment extensibility and automatic services for component applications using contexts, policies and activators
US6425017B1 (en) 1998-08-17 2002-07-23 Microsoft Corporation Queued method invocations on distributed component applications
US6385661B1 (en) * 1998-10-19 2002-05-07 Recursion Software, Inc. System and method for dynamic generation of remote proxies
US6581088B1 (en) * 1998-11-05 2003-06-17 Beas Systems, Inc. Smart stub or enterprise javaTM bean in a distributed processing system
US6385643B1 (en) * 1998-11-05 2002-05-07 Bea Systems, Inc. Clustered enterprise Java™ having a message passing kernel in a distributed processing system
US6571274B1 (en) * 1998-11-05 2003-05-27 Beas Systems, Inc. Clustered enterprise Java™ in a secure distributed processing system
US6236999B1 (en) * 1998-11-05 2001-05-22 Bea Systems, Inc. Duplicated naming service in a distributed processing system
GB9825102D0 (en) 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6574736B1 (en) 1998-11-30 2003-06-03 Microsoft Corporation Composable roles
US6385724B1 (en) 1998-11-30 2002-05-07 Microsoft Corporation Automatic object caller chain with declarative impersonation and transitive trust
US6487665B1 (en) 1998-11-30 2002-11-26 Microsoft Corporation Object security boundaries
US6367074B1 (en) * 1998-12-28 2002-04-02 Intel Corporation Operation of a system
US6421739B1 (en) * 1999-01-30 2002-07-16 Nortel Networks Limited Fault-tolerant java virtual machine
US6829770B1 (en) 1999-02-23 2004-12-07 Microsoft Corporation Object connectivity through loosely coupled publish and subscribe events
US6748455B1 (en) 1999-02-23 2004-06-08 Microsoft Corporation Object connectivity through loosely coupled publish and subscribe events with filtering
JP4146983B2 (ja) * 1999-02-26 2008-09-10 インターナショナル・ビジネス・マシーンズ・コーポレーション サーバ・オブジェクトのメソッドを呼び出すプロセス方法及びデータ処理システム
FR2792435B1 (fr) 1999-04-15 2001-07-13 Cit Alcatel Procede de modification d'un protocole entre objets distribues
GB2349717A (en) * 1999-05-04 2000-11-08 At & T Lab Cambridge Ltd Low latency network
US20060034275A1 (en) 2000-05-03 2006-02-16 At&T Laboratories-Cambridge Ltd. Data transfer, synchronising applications, and low latency networks
DE60039554D1 (de) * 1999-06-25 2008-09-04 Canon Res Ct France S A Verteilte Verwaltung von Datenobjekten in einem Kommunikations-Netzwerk
US6748555B1 (en) * 1999-09-09 2004-06-08 Microsoft Corporation Object-based software management
JP4592242B2 (ja) * 1999-10-05 2010-12-01 富士通フロンテック株式会社 サーバ/クライアントシステム
US6947965B2 (en) 1999-11-30 2005-09-20 Recursion Software, Inc. System and method for communications in a distributed computing environment
US6678743B1 (en) 1999-11-30 2004-01-13 Recursion Software, Inc. Method for moving objects in a distributed computing environment
US6654748B1 (en) 1999-12-07 2003-11-25 Rwd Technologies, Inc. Dynamic application browser and database for use therewith
US6920636B1 (en) * 1999-12-15 2005-07-19 Microsoft Corporation Queued component interface passing for results outflow from queued method invocations
AU2001233287A1 (en) * 2000-02-03 2001-08-14 Community Integration Technologies, Inc. Method for inter-component communication
WO2001057674A2 (en) * 2000-02-07 2001-08-09 Insignia Solutions Plc Non-zero null references to speed up write barrier checking for garbage collection
US6363417B1 (en) 2000-03-31 2002-03-26 Emware, Inc. Device interfaces for networking a computer and an embedded device
US7783720B1 (en) * 2000-04-21 2010-08-24 Oracle America, Inc. CORBA metadata gateway to telecommunications management network
US7543304B2 (en) * 2000-12-14 2009-06-02 Borland Software Corporation Method for efficient location of corba objects based on an unmarshaled object key in a request
US6842786B1 (en) * 2001-02-09 2005-01-11 Adobe Systems Incorporated Method and apparatus for remote communication of data associated with dynamically generated type object at runtime to describe the data type
US7024451B2 (en) * 2001-11-05 2006-04-04 Hewlett-Packard Development Company, L.P. System and method for maintaining consistent independent server-side state among collaborating servers
US6976254B2 (en) 2001-11-28 2005-12-13 Esmertec Ag Inter-method control transfer for execution engines with memory constraints
US8095503B2 (en) * 2002-03-29 2012-01-10 Panasas, Inc. Allowing client systems to interpret higher-revision data structures in storage systems
US20030212761A1 (en) * 2002-05-10 2003-11-13 Microsoft Corporation Process kernel
US7222136B1 (en) * 2002-05-23 2007-05-22 Oracle International Corporation Communicating data dictionary information of database objects through a redo stream
US7293011B1 (en) 2002-11-27 2007-11-06 Oracle International Corporation TQ distribution that increases parallism by distributing one slave to a particular data block
US7523169B1 (en) 2003-02-28 2009-04-21 Verizon Data Services Llc Method and system for mapping network data for network database access
JP2005038076A (ja) * 2003-07-17 2005-02-10 Fujitsu Ltd プログラムテスト用会話型スタブ装置およびスタブプログラム記憶媒体
US20050125486A1 (en) * 2003-11-20 2005-06-09 Microsoft Corporation Decentralized operating system
US8478742B2 (en) * 2004-04-14 2013-07-02 Oracle Corporation Using estimated cost to refresh a set of materialized views (MVS)
US7702627B2 (en) * 2004-06-22 2010-04-20 Oracle International Corporation Efficient interaction among cost-based transformations
US20050283471A1 (en) * 2004-06-22 2005-12-22 Oracle International Corporation Multi-tier query processing
US7814042B2 (en) * 2004-08-17 2010-10-12 Oracle International Corporation Selecting candidate queries
US8346886B2 (en) * 2004-09-08 2013-01-01 Red Hat, Inc. System, method, and medium for configuring client computers to operate disconnected from a server computer while using a master instance of the operating system
US7549151B2 (en) * 2005-02-14 2009-06-16 Qnx Software Systems Fast and memory protected asynchronous message scheme in a multi-process and multi-thread environment
US7885817B2 (en) * 2005-03-08 2011-02-08 Microsoft Corporation Easy generation and automatic training of spoken dialog systems using text-to-speech
US7707131B2 (en) * 2005-03-08 2010-04-27 Microsoft Corporation Thompson strategy based online reinforcement learning system for action selection
US7734471B2 (en) * 2005-03-08 2010-06-08 Microsoft Corporation Online learning for dialog systems
US7840682B2 (en) 2005-06-03 2010-11-23 QNX Software Systems, GmbH & Co. KG Distributed kernel operating system
US8667184B2 (en) 2005-06-03 2014-03-04 Qnx Software Systems Limited Distributed kernel operating system
US7971194B1 (en) 2005-06-16 2011-06-28 Sap Portals Israel Ltd. Programming language techniques for client-side development and execution
US7877379B2 (en) * 2005-09-30 2011-01-25 Oracle International Corporation Delaying evaluation of expensive expressions in a query
US7680096B2 (en) * 2005-10-28 2010-03-16 Qnx Software Systems Gmbh & Co. Kg System for configuring switches in a network
US7644062B2 (en) * 2006-03-15 2010-01-05 Oracle International Corporation Join factorization of union/union all queries
US7945562B2 (en) * 2006-03-15 2011-05-17 Oracle International Corporation Join predicate push-down optimizations
US7809713B2 (en) * 2006-03-15 2010-10-05 Oracle International Corporation Efficient search space analysis for join factorization
US7877373B2 (en) * 2006-06-30 2011-01-25 Oracle International Corporation Executing alternative plans for a SQL statement
US7971209B2 (en) 2007-05-18 2011-06-28 Sap Ag Shortcut in reliable communication
US8903801B2 (en) 2007-09-14 2014-12-02 Oracle International Corporation Fully automated SQL tuning
US8341178B2 (en) * 2007-09-18 2012-12-25 Oracle International Corporation SQL performance analyzer
US8335767B2 (en) 2007-10-17 2012-12-18 Oracle International Corporation Maintaining and utilizing SQL execution plan histories
US8438152B2 (en) * 2007-10-29 2013-05-07 Oracle International Corporation Techniques for bushy tree execution plans for snowstorm schema
US8584105B1 (en) * 2011-12-12 2013-11-12 Google Inc. Javascript application programming interfaces for independently compiled javascript binaries
US9870390B2 (en) 2014-02-18 2018-01-16 Oracle International Corporation Selecting from OR-expansion states of a query
US10621064B2 (en) 2014-07-07 2020-04-14 Oracle International Corporation Proactive impact measurement of database changes on production systems
US10585887B2 (en) 2015-03-30 2020-03-10 Oracle International Corporation Multi-system query execution plan
US11386058B2 (en) 2017-09-29 2022-07-12 Oracle International Corporation Rule-based autonomous database cloud service framework
US11327932B2 (en) 2017-09-30 2022-05-10 Oracle International Corporation Autonomous multitenant database cloud service framework

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS647231A (en) * 1987-06-30 1989-01-11 Toshiba Corp Parallel processing device for object directional system
US5206951A (en) * 1987-08-21 1993-04-27 Wang Laboratories, Inc. Integration of data between typed objects by mutual, direct invocation between object managers corresponding to object types
US5133075A (en) * 1988-12-19 1992-07-21 Hewlett-Packard Company Method of monitoring changes in attribute values of object in an object-oriented database
US5247676A (en) * 1989-06-29 1993-09-21 Digital Equipment Corporation RPC based computer system using transparent callback and associated method
US5129083A (en) * 1989-06-29 1992-07-07 Digital Equipment Corporation Conditional object creating system having different object pointers for accessing a set of data structure objects
US5136712A (en) * 1989-06-29 1992-08-04 Digital Equipment Corporation Temporary object handling system and method in an object based computer operating system
US5057996A (en) * 1989-06-29 1991-10-15 Digital Equipment Corporation Waitable object creation system and method in an object based computer operating system
US5187790A (en) * 1989-06-29 1993-02-16 Digital Equipment Corporation Server impersonation of client processes in an object based computer operating system
US5218699A (en) * 1989-08-24 1993-06-08 International Business Machines Corporation Remote procedure calls in heterogeneous systems
US5313629A (en) * 1989-10-23 1994-05-17 International Business Machines Corporation Unit of work for preserving data integrity of a data-base by creating in memory a copy of all objects which are to be processed together
US5265206A (en) * 1990-10-23 1993-11-23 International Business Machines Corporation System and method for implementing a messenger and object manager in an object oriented programming environment
US5187786A (en) * 1991-04-05 1993-02-16 Sun Microsystems, Inc. Method for apparatus for implementing a class hierarchy of objects in a hierarchical file system
US5261098A (en) * 1991-08-28 1993-11-09 Sun Microsystems, Inc. Method and apparatus for deriving object type and obtaining object type attribute values
US5307490A (en) * 1992-08-28 1994-04-26 Tandem Computers, Inc. Method and system for implementing remote procedure calls in a distributed computer system
EP0604010B1 (de) * 1992-12-21 1999-12-29 Sun Microsystems, Inc. Verfahren und Vorrichtung für Teilaufgaben in verteiltem Verarbeitungssystem

Also Published As

Publication number Publication date
US5787251A (en) 1998-07-28
JPH06231069A (ja) 1994-08-19
DE69327448D1 (de) 2000-02-03
EP0604010A1 (de) 1994-06-29
US5577251A (en) 1996-11-19
EP0604010B1 (de) 1999-12-29

Similar Documents

Publication Publication Date Title
DE69327448T2 (de) Verfahren und Vorrichtung für Teilaufgaben in verteiltem Verarbeitungssystem
DE60125705T2 (de) Vorrichtung und Verfahren zur Implementierung eines HTTP Programmstacks auf einem Client
DE60006451T2 (de) Verteilte Authentifizierungsmechanismen zur Behandlung von verschiedenen Authentifizierungssystemen in einem Betriebsrechnersystem
DE69724877T2 (de) Verfahren und Vorrichtung zum Betrieb einer Aggregation von Serverrechnern mittels eines Doppelzweck-Proxy-Servers
DE69814900T2 (de) Verfahren und system zur unterstützung verteilter software- entwicklung ohne bewusstsein der verteilten charakteristik der software
DE60006217T2 (de) Techniken zum gewähren des zugriffs durch eine kontextsperre in einem gerät mit kleinem platzbedarf unter verwendung von einem eingangspunktobjekt
DE69832354T2 (de) Netzwerkverwaltungsrahmenwerk
DE69824879T2 (de) Verteilter web- anwendungs- server
DE60133648T2 (de) System und verfahren zum führen von laufzeitdaten in einem server-netzwerk
DE69636887T2 (de) System und Verfahren,um verschiedenen Anbietern von Namen zu ermöglichen,sich dynamisch einer Namensföderation anzuschliessen
DE69734175T2 (de) Transportunabhängige Anruf- und Dienstschnittstellen, die die Marshalling von integrierten Type-Codes sowie kompilierten Code erlauben
DE60126016T2 (de) Serverseitige Kontrollobjekte zur Verarbeitung von kundenseitigen Benutzerschnittstellenelementen
DE69628965T2 (de) Verfahren und Gerät zum Verwalten von Beziehungen zwischen Objekten in einer verteilten Objektumgebung
DE69637436T2 (de) Objektorientiertes Kommunikationssystem mit Unterstützung für mehrere entfernte Maschinentypen
DE69736697T2 (de) Verfahren und Gerät zur Steuerung von Zugriff auf Systembetriebsmittel
DE60011615T2 (de) Techniken zum erlauben von zugang durch eine kontextsperre in einem kleinen gerät unter verwendung von globalen datenstrukturen
DE69531112T2 (de) Mechanismus zum verknüpfen von dateien auf einem emulierten system mit dem zentralsystem für den zugriff durch emulierte systembenutzer
DE69935805T2 (de) Rechnersystem und verfahren zum betreiben von mehreren betriebssystemen in verschiedenen partitionen des rechnersystems und um den verschiedenen partitionen die kommunikation miteinander durch gemeinsame speicher zu erlauben
DE69533530T2 (de) Verfahren und System zur dynamischen Aggregation von Objekten
DE69820566T2 (de) Verfahren, Vorrichtung, und Programmprodukt zum Zugriff auf einen Server-basierten Verwaltungsinformationsdienst
DE69921474T2 (de) Methode-referenzierung in objektbasierter programmierung
DE602004004300T2 (de) Verfahren, System und Computerprogramm für das Senden und Empfangen von Meldungen durch einen individuellen Kommunikationskanal
DE69936627T2 (de) In einer warteschlange angeordnete aufrufe von prozeduren für verteilte auf komponenten basierte anwendungen
DE69936162T2 (de) Verfahren und Gerät für ein objektorientiertes Unterbrechungssystem
DE60035745T2 (de) Verfahren zum bei Bedarf Laden und Ausführen einer Netzwerkanwendung

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee