-
Hintergrund der Erfindung
-
Gebiet der Erfindung
-
Die vorliegende Erfindung bezieht
sich auf ein Informationsverarbeitungsgerät und ist speziell anwendbar,
wenn eine verteilte objektorientierte Programmierung etc. durchgeführt wird.
-
Beschreibung des Standes
der Technik
-
Herkömmlicherweise kann ein verteiltes
System einfach entwickelt werden, weil ein Verfahren an ein Objekt
in einem entfernt gelegenen Computer ausgegeben werden kann wie
in dem Fall, in dem ein Verfahren für ein Objekt in einem lokalen
Computer unter Verwendung einer verteilten objektorientierten Technologie
wie z. B. CORBA (common object request broker architecture), DCOM
(distributed component object model), JavaRMI (JAVA remote method
invocation) etc. ausgegeben wird.
-
Da die herkömmliche verteilte objektorientierte
Technologie jedoch keine Funktionen zum Ersetzen eines Teils eines
Programmcodes eines Server-Objekts,
das betrieben wird, oder Addieren eines Teils eines Programmcodes
mit einer neuen Funktionalität
von einem entfernt gelegenen Computer aufweist, können verteilte
Objekte nicht reibungsfrei verwaltet werden.
-
Wenn z. B. ein Programm für einen
neuen Abfragebefehl in einem Server-Objekt einer Datenbank ausgeführt werden
soll, sollte das Server-Objekt beendet und auf solch eine Weise
zurückgesetzt werden,
dass ein neu addiertes Programm für das Server-Objekt zur Verfügung stehen
kann, und danach sollte es wieder aktiviert werden.
-
Mit einer zunehmenden Anzahl von
mit einem aktualisierten Service verbundenen Server-Objekten nimmt
es daher eine längere
Zeit in Anspruch, den Service bzw. Dienst zu stoppen, weil es normalerweise
eine lange Zeit in Anspruch nimmt, einen Programmcode eines Server-Objekts
in einem verteilten System zu addieren oder zu aktualisieren.
-
Außerdem gibt es das Leistungsproblem, falls
das verteilte System einen starken Einfluss einer Netzwerkverzögerung aufweist,
wenn mehrere Verfahren für
das gleiche Objekt aufgerufen werden oder wenn eine große Menge
Daten durch Parameter oder einen Rückgabe- oder Rückkehrwert
eines Verfahrens durchgeleitet wird.
-
Die Anzahl von Verfahrensschnittstellen
eines Server-Objektes sollte überdies
zur Diversifizierung erhöht
werden, um das Server-Objekt für
allgemeine Zwecke zu nutzen oder ein Programm auf der Client-Seite
unter Verwendung der Schnittstellen des Sever-Objektes kundenspezifisch
anzupassen.
-
In dem herkömmlichen verteilten System
erhöhen
daher die komplizierten Server-Schnittstellen die Schwierigkeit
einer Anwendungsentwicklung und die Verzögerung bei der Service-Antwort. Überdies weist
das herkömmliche
verteilte System das Problem auf, dass ein Administrator eine große Verantwortung
bei der Wartung und Verwaltung der Sicherheit der Schnittstelle
hat, wenn ein Programmcode hinzugefügt oder aktualisiert wird.
-
Yau, Stephan S. et al, 'AN OBJECT-ORIENTED
APPROACH TO SOFTWARE DEVELOPMENT FOR PARALLEL PROCESSING SYSTEMS'
PROCEEDINGS OF THE INTERNATIONAL COMPUTER SOFTWARE AND APPLICATIONS
CONFERENCE (COMPSAC), TOKYO SEPT. 11–13, 1991, no. CONF. 15, 11.
September 1991, Seiten 453 – 458, XP000260562,
KNAFL G J, offenbart Klassen mit Verfahren, wodurch ein gleichzeitiger
Zugriff auf ein Verfahren eines Klassenobjekts gestattet wird, aber mit
Hilfe von Schutzvorkehrungen serialisiert werden muß, die an
die Verfahren angefügt
werden und die Sperrungen implementieren. Gewöhnlich kann bei objektorientierten
Klassen ein Verfahren Klassenvariablen festlegen, die zu einem Klassenobjekt
oder zu einem Satz aller Objekte für einen Klassentyp als Ganzes
gehören.
-
WO 94/01819A von Ericsson Telephone
AB offenbart ein Verfahren zum Ändern
einer Software während
eines Computerbetriebs, bei dem der Server eine neue Server-Klasse
empfängt
und installiert, um eine alte Server-Klasse zu ersetzen, und während eines
Computerbetriebs ermöglicht,
dass von einem gegebenen Zeitpunkt an alle Operationen nur auf der
neuen Server-Klasse verarbeitet werden und die alte Server-Klasse überhaupt
nicht mehr genutzt wird.
-
Zusammenfassung
der Erfindung
-
Die erste Aufgabe der vorliegenden
Erfindung ist somit, einen Teil eines Programmcodes ohne Stoppen
des Programms, das gerade verarbeitet wird, zu löschen oder zu ersetzen.
-
Die zweite Aufgabe der vorliegenden
Erfindung ist, ein Programm ohne Programmiererkenntnisse einer Klassenverwaltung
einfach kundenspezifisch anzupassen.
-
Die dritte Aufgabe der vorliegenden
Erfindung besteht darin, die Sicherheit der Schnittstelle zu verbessern,
wenn ein Programmcode in einem verteilten System addiert oder aktualisiert
wird.
-
Gemäß der vorliegenden Erfindung
wird ein Informationsverarbeitungsgerät wie im beigefügten Anspruch
1 definiert geschaffen, um ein durch Klassendaten gebildetes Programm
zu betreiben.
-
Ein Programm kann somit durch Klassendaten
gebildet werden, und die Nutzung des Programms kann für jedes
Stück addierter
Klassendaten überwacht
werden. Folglich können
Klassendaten, die gerade verwendet werden, erkannt werden, während das
Programm betrieben wird, und ein Teil des Programmcodes kann während der
Ausführung
des Programms gelöscht
oder ersetzt werden.
-
Die vorliegende Erfindung enthält eine Agent-Klasse
oder Benutzerarbeitseinheitsklasse (engl. agent class) zum Erzeugen
eines Benutzerarbeitseinheitsklassen-Objekts zum Überwachen
der Nutzung von Klassendaten und erzeugt ein Benutzerarbeitseinheitsklassen-Objekt
gemäß der Benutzerarbeitseinheitsklasse,
wenn eine Operation in den Klassendaten durchgeführt wird.
-
Die Funktion zum Überwachen eines Programms kann
somit einfach zu dem zu überwachenden
Programm addiert werden, die Nutzung des Programms kann ohne Kenntnisse
eines Programmierers über
eine Klassenverwaltung einfach überwacht werden,
und ein Teil des Programmcodes kann gelöscht oder ersetzt werden, während das
Programm läuft.
-
In der vorliegenden Erfindung erzeugt
außerdem
eine Benutzerarbeitseinheitsklasse ein Klassenverwaltungsobjekt
zum Verwalten von zu einem Benutzerarbeitseinheitsklassen-Objekt
addierten Klassendaten jedesmal, wenn eine Anforderung, Klassendaten
zu addieren, ausgegeben wird.
-
Somit kann ein Programm für jede zu
dem Programm neu addierte Funktion überwacht werden, und, wenn
das Programm läuft,
kann bestimmt werden, welche Funktion des Programms gerade genutzt
wird. Daher kann alleiniges Spezifizieren der Funktion eines Teils
des Programms die Funktion des Programms löschen oder ersetzen, während das Programm
läuft.
-
Das Gerät der Erfindung speichert vorzugsweise
die Beziehung zwischen dem Klassenverwaltungsobjekt, das gemäß einer
Aufforderung oder Anforderung zur Addition von Klassendaten erzeugt wurde,
und einer Identifizierungsinformation über das Klassenverwaltungsobjekt.
-
Alleiniges Spezifizieren einer Identifizierungsinformation
wie z. B. eines Namens eines Klassenverwaltungsobjekts etc. löscht und
ersetzt somit einen Teil eines Programmcodes, während das Programm läuft, dadurch
die Last des Programmierers reduzierend, wenn das Programm kundenspezifisch angepasst
wird.
-
In einer bevorzugten Ausführungsform
der vorliegenden Erfindung enthält
ein Klassenverwaltungsobjekt eine Tabelle für lokale Klassendaten zum Speichern
von Klassendaten, die für
das Klassenverwaltungsobjekt spezifisch sind.
-
Selbst wenn ein Konflikt zwischen
den von einem anderen Objekt übertragenen
Klassendaten und den Klassendaten, die durch ein Klassenverwaltungsobjekt
gerade verwaltet werden, auftritt, können somit die Klassendaten,
die von einem anderen Objekt übertragen
werden, und die Klassendaten, die durch ein Klassenverwaltungsobjekt
gerade verwaltet werden, unabhängig
gespeichert werden, und ein Benutzerarbeitseinheitsklassen-Objekt
kann die von einem anderen Objekt übertragenen Klassendaten fern-verarbeiten.
-
In der bevorzugten Ausführungsform
der vorliegenden Erfindung enthält
ein Klassenverwaltungsobjekt auch ein Löschungs-Flag zum Speichern
einer Anforderung zur Löschung
von Klassendaten.
-
Eine Anforderung zur Löschung von
Klassendaten kann somit gespeichert und akzeptiert werden, während die
durch die Anforderung zur Datenlöschung
spezifizierten Klassendaten gerade genutzt werden. Als Folge ist
es nicht notwendig, eine Anforderung zur Löschung von Klassendaten erneut
auszugeben, nachdem die Anforderung einmal zurückgewiesen ist. Da die tatsächliche
Lö schung
der Klassendaten so verwaltet wird, dass sie aufgeschoben wird,
kann die Last des Programmierers reduziert werden.
-
In der bevorzugten Ausführungsform
enthält überdies
ein Klassenverwaltungsobjekt einen Speicherbereich für Ersatz-Klassendaten,
um neue Klassendaten zu speichern, wenn eine Anforderung zur Ersetzung
von Klassendaten ausgegeben wird.
-
Neue Klassendaten können somit
gespeichert werden, wenn eine Anforderung zum Ersatz ausgegeben
wird, und eine Anforderung zum Ersatz von Klassendaten kann akzeptiert
werden, während die
durch die Anforderung zum Ersatz von Klassendaten spezifizierten
Klassendaten gerade genutzt werden. Als Folge ist es nicht notwendig,
eine Anforderung zum Ersatz von Klassendaten erneut auszugeben,
nachdem die Anforderung einmal zurückgewiesen ist. Da die tatsächliche
Löschung
der Klassendaten so verwaltet wird, dass sie aufgeschoben ist, kann
die Last des Programmierers reduziert werden.
-
Als ein weiteres Merkmal der bevorzugten Ausführungsform
enthält
ein Klassenverwaltungsobjekt eine Liste laufender Threads zum Speichern
von Identifizierungsinformationen über ein Thread, das Klassendaten
gerade verarbeitet.
-
Alleiniges Verweisen auf die Liste
laufender Threads bestimmt somit, ob Klassendaten, die gerade verarbeitet
werden, existieren oder nicht, und die Nutzung der Klassendaten
kann einfach geprüft
werden.
-
In der bevorzugten Ausführungsform
der vorliegenden Erfindung enthält
ein Klassenverwaltungsobjekt auch eine Klassennamenliste zum Speichern eines
Klassennamens addierter Klassendaten.
-
Das Klassenverwaltungsobjekt kann
somit einfach die verwalteten Klassendaten selbst prüfen und
kann Klassendaten für
jedes Stück
addierter Klassendaten verarbeiten.
-
Noch ein weiteres Merkmal der bevorzugten Ausführungsform
ist, dass ein Klassenverwaltungsobjekt eine Referenzobjektliste
zum Speichern einer Identifizierungsinformation über das Klassenverwaltungsobjekt
enthält,
welches Klassendaten verwaltet, auf die durch bestimmte Klassendaten
verwiesen wird, und eine Liste verwiesener Objekte, um eine Identifizierungsinformation über ein Klassenverwaltungsobjekt
zu speichern, welches Klassendaten verwaltet, auf die bestimmte
Klassendaten verweisend.
-
Somit kann eine Operation an Klassendaten unter
Berücksichtigung
der Verweise der Klassendaten durchgeführt werden, und der Programmierer muß die Verweise
der Klassendaten nicht erkennen. Daher kann das Programm einfach
kundenspezifisch angepasst werden.
-
In einer anderen Ausführungsform
der vorliegenden Erfindung enthält
eine Benutzerarbeitseinheitsklasse eine Zugriffssteuerklasse zum
Prüfen
von Zugriffsprivilegien von einem Objekt einer anderen Benutzerarbeitseinheitsklasse.
-
Ein Benutzerarbeitseinheitsklassen-Objekt kann
somit ein Zugriffssteuerobjekt basierend auf einer Zugriffssteuerklasse
erzeugen, wenn ein anderes Benutzerarbeitseinheitsklassen-Objekt
Zugriff erlangt. Daher werden jedesmal, wenn ein Benutzerarbeitseinheitsklassen-Objekt
Zugriff erlangt, Zugriffsprivilegien geprüft, und Zugriffsbedingungen
können
für jedes
Benutzerarbeitseinheitsklassen-Objekt einfach ergänzt oder
berichtigt werden, wodurch die Sicherheit der Schnittstelle beim
Addieren oder Aktualisieren eines Programmcodes verbessert wird.
-
In der vorliegenden Erfindung weist
die Schnittstelle für
ein öffentliches
Fern-Verfahren ein Mittel zur Addition von Klassendaten auf, um
Klassendaten zu einem Benutzerarbeitseinheitsklassen-Objekt zu addieren.
-
Während
der Ausführung
eines Programms können
daher Klassendaten für
ein Programm neu addiert werden.
-
Eine Ausführungsform der vorliegenden
Erfindung enthält
eine Einheit zur Erzeugung von Klassenverwaltungsobjekten, um ein
Klassenverwaltungsobjekt für
Klassendaten zu erzeugen, die zu einem Benutzerarbeitseinheitsklassen-Objekt addiert werden;
eine Klassennamen-Registrierungseinheit, um einen Klassennamen von
Klassendaten in einer Klassennamenliste in dem Klassenverwaltungsobjekt
zu registrieren; eine Schreibeinheit für Klassendatentabellen, um
die Klassendaten in eine Tabelle gemeinsam genutzter Klassendaten
zu schreiben; und eine Einheit zur Registrierung von Tabellen für Klassenverwaltungsobjekte,
um Identifizierungsinformationen über das Klassenverwaltungsobjekt
in einer Tabelle für
Klassenverwaltungsobjekte zu registrieren.
-
Somit kann das Benutzerarbeitseinheitsklassen-Objekt
die Nutzung jedes Elements addierter Klassendaten überwachen,
die addierten Daten einfach spezifizieren und eine Operation an
den Klassendaten durchführen.
-
In einer Ausführungsform der vorliegenden Erfindung
werden, wenn ein Klassenname von Klassendaten, die zu einem Benutzerarbeitseinheitsklassen-Objekt addiert wurden,
zu einem Klassennamen von Klassendaten paßt, die in einer Tabelle für gemeinsam
genutzte Klassendaten registriert sind, die zum Benutzerarbeitseinheitsklassen-Objekt
addierten Klassendaten aus der Tabelle gemeinsam genutzter Klassendaten
entfernt.
-
Somit kann ein Konflikt in der gleichen
Klasse in der Tabelle gemeinsam genutzter Klassendaten vermieden
werden.
-
In der vorliegenden Ausführungsform
enthält die
Schnittstelle für
ein öffentliches
Fern-Verfahren ein Klassendaten-Verarbeitungsmittel zum Verarbeiten
von Klassendaten, die in einem Benutzerarbeitseinheitsklassen-Objekt
gespeichert sind.
-
Das Benutzerarbeitseinheitsklassen-Objekt kann
somit eine durch Klassendaten repräsentierte Operation ausführen.
-
In einer Ausführungsform der vorliegenden Erfindung
wird, wenn gerade verarbeitete Klassendaten auf andere Klassendaten
verweisen, eine Ausführungsinformation
für ein
Klassenverwaltungsobjekt festgelegt, welches die gerade verarbeiteten Klassendaten
verwaltet, und wird auch für
ein Klassenverwaltungsobjekt festgelegt, welches die verwiesenen
Klassendaten verwaltet.
-
Selbst wenn eine Anforderung, die
verwiesenen Klassendaten zu löschen
oder zu ersetzen, ausgegeben wird, während die verwiesenen Klassendaten
gerade verarbeitet werden, kann somit die Löschung oder der Ersatz der
verwiesenen Klassendaten bis zum Ende des Prozesses der verwiesenen Klassendaten
vorübergehend
angehalten werden, wodurch eine nicht erfolgreiche Beendigung des
Prozesses auf den Klassendaten vermieden wird.
-
In einer weiteren Ausführungsform
der vorliegenden Erfindung werden, wenn eine Liste laufender Threads
leer ist und ein Löschungs-Flag
eines Klassenverwaltungsobjekts auf WAHR gesetzt ist, Klassendaten,
die dem Klassennamen in der Klassennamenliste des Klassenverwaltungsobjekts
entsprechen, aus der Tabelle gemeinsam genutzter Klassendaten entfernt.
-
Nach Abschließen der in einer Löschungs-Anforderung
spezifizierten Funktion eines Teils eine Programms kann somit die
Funktion des Teils des Programms gelöscht werden. Daher kann ein
Aussetzen des Programms, das gerade ausgeführt wird, oder ein Reaktivieren
des Programms vermieden werden, wenn angefordert wird, daß die Funktion
des Teils des Programms gelöscht
wird.
-
In noch einer weiteren Ausführungsform
der vorliegenden Erfindung werden, wenn eine Liste laufender Threads
leer ist und ein Speicherbereich für Ersatz-Klassendaten Klassendaten
speichert, Klassendaten, die ersetzt werden sollen und in der Tabelle
für gemeinsam
genutzte Klassendaten gespeichert sind, durch Klassendaten ersetzt,
die im Speicherbereich für
Ersatz-Klassendaten gespeichert sind.
-
Nach Abschließen der in einer Ersatz-Anforderung
spezifizierten Funktion eines Teils eines Programms kann somit die
Funktion des Teils des Programms durch eine andere Funktion ersetzt
werden. Daher kann ein Aussetzen des Programms, das gerade ausgeführt wird,
oder ein Reaktivieren des Programms vermieden werden, wenn angefordert
wird, daß die
Funktion des Teils des Programms ersetzt wird.
-
Die Schnittstelle für ein öffentliches Fern-Verfahren
kann ferner ein Klassendaten-Löschungsmittel
zum Löschen
von Klassendaten aus einem Benutzerarbeitseinheitsklassen-Objekt
aufweisen.
-
Das Benutzerarbeitseinheitsklassen-Objekt kann
somit einen Teil eines Programms löschen.
-
Gemäß einer Ausführungsform
der vorliegenden Erfindung wird, wenn eine Identifizierungsinformation über einen
Thread in einer Liste laufender Threads eines Klassenverwaltungsobjekts
festgelegt ist, die Löschung
von durch den Thread verarbeiteten Klassendaten ausgesetzt, und
ein Löschungs-Flag eines
Klassenverwaltungsobjekts wird WAHR gesetzt.
-
Selbst wenn eine Löschungs-Anforderung für gerade
verarbeitete Klassendaten ausgegeben wird, kann somit die Löschungs-Anforderung
für die Klassendaten
akzeptiert werden, ohne eine Verarbeitung der Klassendaten zu stoppen.
Daher kann angefordert werden, die Klassendaten zu löschen, ohne den
Prozess auf den Klassendaten zu beeinflussen.
-
Die Schnittstelle für ein öffentliches Fern-Verfahren
kann ferner ein Klassendaten-Ersatzmittel zum Ersetzen von Klassendaten
eines Benutzerarbeitseinheitsklassen-Objekts aufweisen.
-
Folglich kann das Benutzerarbeitseinheitsklassen-Objekt
einen Teil eines Programms ersetzen.
-
In noch einer anderen Ausführungsform
der vorliegenden Erfindung wird, wenn eine Identifizierungsinformation über ein
Thread in einer Liste laufender Threads eines Klassenverwaltungsobjekts festgelegt
ist, der Ersatz von durch den Thread verarbeiteten Klassendaten
ausgesetzt, und neue Klassendaten werden in einem Speicherbereich
für Ersatz-Klassendaten
des Klassenverwaltungsobjekts festgelegt.
-
Selbst wenn eine Ersatz-Anforderung
für gerade
verarbeitete Klassendaten ausgegeben wird, kann somit die Ersatz-Anforderung
für die
Klassendaten akzeptiert werden, ohne eine Verarbeitung der Klassendaten
zu stoppen. Daher kann angefordert werden, dass die Klassendaten
ersetzt werden, ohne den Prozess auf den Klassendaten zu beeinflussen.
-
Gemäß einer weiteren Ausführungsform
der vorliegenden Erfindung wird, wenn eine Löschungs- oder Ersatz-Anforderung
ausgegeben wird, eine Fehlerbenachrichtigung übertragen, wenn eine Liste verwiesener
Objekte eines Klassenverwaltungsobjekts nicht leer ist, und eine
Identifizierungsinformation über
ein verwiesenes Klassenverwaltungsobjekt wird aus einer Liste verwiesener
Objekte eines verwiesenen Klassenverwaltungsobjekts gelöscht, wenn
eine Liste von Verweisobjekten des Klassenverwaltungsobjekts nicht
leer ist.
-
Folglich kann verhindert werden,
dass Klassendaten, auf die durch andere Klassendaten verwiesen wird,
verloren werden, und eine unnötige
Information kann gelöscht
werden, wodurch der Bedienungskomfort verbessert wird, wenn das
Programm kundenspezifisch angepasst wird.
-
Gemäß einer anderen Ausführungsform
der vorliegenden Erfindung kann ein Benutzerarbeitseinheitsklassen-Objekt
unter Verwendung einer Schnittstelle für ein öffentliches Fern-Verfahren
ein Programm aus der Ferne ausführen,
um von einem anderen Benutzerarbeitseinheitsklassen-Objekt übertragene
Klassendaten zu verarbeiten.
-
Ein weiteres Merkmal in einer Ausführungsform
ist, von einem anderen Benutzerarbeitseinheitsklassen-Objekt übertragene
Klassendaten in einer Tabelle lokaler Klassendaten eines Klassenverwaltungsobjekts
zu speichern.
-
Eine Fern-Ausführung kann somit reibungslos
durch ein Benutzerarbeitseinheitsklassen-Objekt ausgeführt werden,
so daß ein
Konflikt zwischen den Klassendaten und Klassendaten, die für das Klassenverwaltungsobjekt
schon gespeichert sind, vermieden werden kann.
-
Gemäß einer anderen Ausführungsform
der vorliegenden Erfindung wird basierend auf Klassendaten und serialisierten
Daten eines aus den Klassendaten erzeugten Objekts das aus den Klassendaten
erzeugte Objekt wiederhergestellt.
-
Folglich wird das aus den Klassendaten
erzeugte Objekt zu einem anderen Benutzerarbeitseinheitsklassen-Objekt übertragen,
und das Objekt kann fernverarbeitet werden.
-
Gemäß einer weiteren Ausführungsform
der vorliegenden Erfindung werden Klassendaten, die verarbeitet
werden sollen, und Klassendaten, auf die durch die zu verarbeitenden
Klassendaten verwiesen wird, zu einem anderen Benutzerarbeitseinheitsklassen-Objekt übertragen.
-
Folglich können Klassendaten mit einer
Verweisbeziehung fernverarbeitet werden.
-
In noch einer weiteren Ausführungsform
der vorliegenden Erfindung werden Klassendaten in einem Ziel-Benutzerarbeitseinheitsklassen-Objekt
entfernt, und zu verarbeitende Klassendaten werden zu dem Ziel-Benutzerarbeitseinheitsklassen-Objekt übertragen.
-
Somit kann der Datenübertragungsumfang in
einer Fernausführung
reduziert werden, und die Geschwindigkeit einer Fernausführung kann
gesteigert werden.
-
In noch einer anderen Ausführungsform
der vorliegenden Erfindung wird der Ausführungszustand eines mehrere
Funktionen enthaltenden Programms für jede Funktion überwacht,
und ein Prozess wird an einer Funktion des Programms basierend auf
dem Ausführungszustand
des Programms durchgeführt.
-
Wenn die Funktion eines Teils eines
Programms während
der Ausführung
des Programms nicht ausgeführt
wird oder wenn die Funktion eines Teils des Programms während der
Ausführung
des Programms abgeschlossen ist, kann somit die Funktion des Teils
während
der Ausführung
des Programms gelöscht
oder ersetzt werden, wodurch das Programm schnell kundenspezifisch
angepasst wird.
-
Kurze Beschreibung der
Zeichnungen
-
Die vorliegende Erfindung wird aus
der folgenden ausführlichen
Beschreibung ersichtlicher werden, wenn sie in Verbindung mit den
beiliegenden Zeichnungen vorgenommen wird, in denen:
-
1 ein
Blockdiagramm ist, das die funktionale Konfiguration des Informationsverarbeitungsgeräts gemäß einer
Ausführungsform
der vorliegenden Erfindung zeigt;
-
2 ein
Blockdiagramm ist, das ein Beispiel der Konfiguration der in 1 dargestellten Klassendaten-Prozesseinheit
zeigt;
-
3 ein
Blockdiagramm ist, das die funktionale Konfiguration des Computers
gemäß einer Ausführungsform
der vorliegenden Erfindung zeigt;
-
4 ein
Beispiel der Konfiguration des in 3 dargestellten
Klassenverwaltungsobjekts zeigt;
-
5 ein
Beispiel der Konfiguration einer Klasse einer Benutzerarbeitseinheit
zeigt;
-
6 ein
Verfahren zum Erzeugen eines Klassenverwaltungsobjekts zeigt, wenn
Klassendaten addiert werden;
-
7 ein
Beispiel eines Codierens einer Schablone zeigt;
-
8 ein
Beispiel der Systemkonfiguration des in 3 gezeigten Computers zeigt;
-
9 ein
Flußdiagramm
ist, das eine Operation der in 3 gezeigten
Kommunikations-Hintergrundroutine zeigt;
-
10 ein
Flußdiagramm
ist, das eine Operation des in 3 dargestellten
Kommunikations-Thread zeigt;
-
11 den
Zustand zeigt, in welchem Klassendaten zu einem Benutzerarbeitseinheitsklassen-Objekt
addiert werden;
-
12 den
Zustand zeigt, in welchem verwiesene Klassendaten zu einem Benutzerarbeitseinheitsklassen-Objekt
addiert werden;
-
13 das
Verfahren zum Löschen überlappender
Klassendaten aus einem Benutzerarbeitseinheitsklassen-Objekt zeigt;
-
14 ein
Flußdiagramm
ist, das einen Klassendaten addierenden Prozess zeigt;
-
15 ein
Flußdiagramm
ist, das einen Zugriffsprivilegien prüfenden Prozess zeigt;
-
16 ein
Flußdiagramm
ist, das einen Klassendaten abrufenden Prozess zeigt;
-
17 den
Zustand eines Benutzerarbeitseinheitsklassen-Objekts zeigt, wenn
Klassendaten verarbeitet werden;
-
18 den
Zustand eines Benutzerarbeitseinheitsklassen-Objekts zeigt, wenn
verwiesene Klassendaten verarbeitet werden;
-
19 ein
Flußdiagramm
ist, das einen Klassendatenprozess zeigt;
-
20 den
Zustand eines Benutzerarbeitseinheitsklassen-Objekts zeigt, wenn
eine Löschungs-Anforderung
ausgegeben wird, während Klassendaten
verarbeitet werden;
-
21 ein
Flußdiagramm
ist, das einen Klassendaten löschenden
Prozess zeigt;
-
22 den
Zustand eines Benutzerarbeitseinheitsklassen-Objekts zeigt, wenn
eine Ersatz-Anforderung ausgegeben wird, während Klassendaten verarbeitet
werden;
-
23 den
Zustand eines Benutzerarbeitseinheitsklassen-Objekts nach Ersetzen
von Klassendaten zeigt;
-
24 ein
Flußdiagramm
ist, das einen Klassendaten ersetzenden Prozess zeigt;
-
25 ein
(fortgesetztes) Flußdiagramm
ist, das einen Klassendaten ersetzenden Prozess zeigt;
-
26 den
Zustand eines Benutzerarbeitseinheitsklassen-Objekts zeigt, wenn
Klassendaten aus der Ferne ausgewertet werden;
-
27 den
Zustand eines Benutzerarbeitseinheitsklassen-Objekts zeigt, wenn
serialisierte Daten aus der Ferne ausgewertet werden;
-
28 ein
Flußdiagramm
ist, das eine Fernauswertung zeigt;
-
29 den
Zustand eines Benutzerarbeitseinheitsklassen-Objekts zeigt, wenn
verwiesene Klassendaten aus der Ferne ausgewertet werden;
-
30 den
Zustand eines Benutzerarbeitseinheitsklassen-Objekts zeigt, wenn überlappende Klassendaten
aus der Ferne ausgewertet werden; und
-
31 ein
Flußdiagramm
ist, das einen Klassen auslesenden oder wiedergewinnenden Prozess
zeigt.
-
Beschreibung der bevorzugten
Ausführungsformen
-
Die Ausführungsformen der vorliegenden
Erfindung werden im folgenden durch Verweis auf die beigefügten Zeichnungen
beschrieben.
-
1 ist
ein Blockdiagramm, das die funktionale Konfiguration des Informationsverarbeitungsgeräts gemäß einer
Ausführungsform
der vorliegenden Erfindung zeigt.
-
In 1 speichert
eine Klassendaten-Speichereinheit 1 zu einem Objekt addierte
Klassendaten. Eine Klassendaten-Überwachungs-
oder Monitoreinheit 2 überwacht
die Nutzung der in der Klassendaten-Speichereinheit 1 gespeicherten
Klassendaten für
jedes Stück
addierter Klassendaten. Eine Klassendaten-Prozesseinheit 3 verarbeitet
die Klassendaten für
jedes Stück
addierter Klassendaten basierend auf der Nutzung der Klassendaten,
die durch die Klassendaten-Monitoreinheit 2 überwacht
wird.
-
Mit der oben beschriebenen Konfiguration kann
die Klassendaten-Monitoreinheit 2 ein
Programm für
jede Funktion überwachen,
die zu dem Programm neu addiert wurde. Während das Programm läuft, kann
bestimmt werden, welche Funktion des Programms gerade genutzt wird.
Als Folge kann die Klassendaten-Prozesseinheit 3 die Funktion eines
Teils des Programms während
der Operation des Programms verarbeiten, indem nur die Funktion des
Teils des Programms spezifiziert wird.
-
2 ist
ein Blockdiagramm, das ein Beispiel der Konfiguration der Klassendaten-Prozesseinheit 3 darstellt,
die in 1 gezeigt ist.
-
In 2 empfängt eine
Empfangseinheit 11 eine Löschungs-Anforderung, eine Ersatz-Anforderung
etc. für
die in der Klassendaten-Speichereinheit 1 gespeicherten
Klassendaten. Eine Bestimmungseinheit 12 bestimmt basierend
auf dem Überwachungsergebnis
von der Klassendaten-Monitoreinheit 2, ob die durch die
Löschungs-Anforderung,
die Ersatz-Anforderung etc. spezifizierten Klassendaten gerade genutzt
werden oder nicht. Eine Verzögerungseinheit 13 verzögert die
Löschung,
den Ersatz etc. der Klassendaten, bis die Nutzung der Klassendaten
abgeschlossen wurde, falls die Klassendaten gerade genutzt werden.
-
Wenn eine Löschungs-Anforderung oder eine
Ersatz-Anforderung für
gerade verarbeitete Klassendaten ausgegeben wird, empfängt die
Empfangseinheit 11 die Löschungs-Anforderung oder die Ersatz-Anforderung
für die
Klassendaten, ohne eine Verarbeitung der Klassendaten zu stoppen.
Die Verzögerungseinheit 13 identifiziert,
ob die Nutzung der zu löschenden
oder zu ersetzenden Klassendaten abgeschlossen wurde oder nicht,
indem auf das Bestimmungsergebnis von der Bestimmungseinheit 12 verwiesen
wird, und führt
einen Prozess aus, der durch eine Löschungs-Anforderung, eine Ersatz-Anforderung
etc. spezifiziert ist, die von der Empfangseinheit 11 empfangen
wurde, nachdem die Nutzung der zu löschenden oder zu ersetzenden
Klassendaten abgeschlossen ist.
-
Nachdem die Ausführung der Funktion eines Teils
eines durch eine Löschungs-Anforderung
oder eine Ersatz-Anforderung spezifizierten Programms abgeschlossen
ist, kann die Funktion des Teils des Programms gelöscht, durch
eine andere Funktion ersetzt werden etc. Wenn die Funktion des Teils
des Programms gelöscht,
ersetzt etc. wird, ist es nicht erforderlich, das gerade ausgeführte Programm
auszusetzen oder zu reaktivieren.
-
3 ist
ein Blockdiagramm, das die funktionale Konfiguration des Computers
gemäß einer Ausführungsform
der vorliegenden Erfindung zeigt.
-
In 3 ist
eine Agent- oder Benutzerarbeitseinheitsklasse als eine Grundklasse
einer Bibliothek einer Entwicklungssprache vorgesehen, und die Benutzerarbeitseinheitsklasse
ist in einer Bibliothek 31 für Benutzerarbeitseinheitsklassen
gespeichert. Wenn ein System entwickelt wird, beschreibt der Programmierer
eine Anwendung, indem eine Teilklasse basierend auf einer Benutzerarbeitseinheitsklasse
als eine Basisklasse erzeugt wird.
-
Eine Agent- oder Benutzerarbeitseinheitsklasse
enthält
eine Tabelle 23 für
Klassenverwaltungsobjekte zum Speichern der Korrespondenz zwischen
Klassenverwaltungsobjekten 24a bis 24m und den
Namen der Klassenverwaltungs objekte 24a bis 24m;
die Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten von Klassendaten, die zu Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n addiert werden,
eine Tabelle 25 für
gemeinsam genutzte Klassendaten zum Speichern der Klassendaten,
die durch die Klassenverwaltungsobjekte 24a bis 24m verwaltet
werden; und Schnittstellen 26 für öffentliche Fern-Verfahren zum
Durchführen
eines Prozesses auf Klassendaten.
-
Die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n werden
in einem Computer 21 als Spezialfälle einer Benutzerarbeitseinheitsklasse
erzeugt, die in der Bibliothek 31 für Benutzerarbeitseinheitsklassen
gespeichert ist. Zum Beispiel werden die Namen Funktion-1 bis Funktion-m
der Klassenverwaltungsobjekte 24a bis 24m in der
Tabelle 23 für
Klassenverwaltungsobjekte des Benutzerarbeitseinheitsklassen-Objekts 22a registriert.
Gleichzeitig werden darin die Zeiger auf die Klassenverwaltungsobjekte 24a bis 24m gespeichert,
die jeweils den Namen Funktion-1 bis Funktion-m entsprechen.
-
Zum Beispiel sind als die Schnittstelle 26 für öffentliche
Fern-Verfahren für
das Benutzerarbeitseinheitsklassen-Objekt 22a ein remove()-Verfahren 26a,
ein add()-Verfahren 26b, ein get()-Verfahren 26c,
ein set()-Verfahren 26d, ein eval()-Verfahren 26e und
ein call()-Verfahren 26f vorgesehen.
-
Das remove()-Verfahren 26a löscht Klassendaten
aus der Tabelle 25 für
gemeinsam genutzte Klassendaten unter Verwendung der Namen der Klassenverwaltungsobjekte 24a bis 24m als
Argumente, welche zu löschende
Klassendaten verwalten.
-
Das add()-Verfahren 26b erzeugt
neu die Klassenverwaltungsobjekte 24a bis 24m,
welche zu addierende Klassendaten verwalten, wobei als Argumente
die zu addierenden Klassendaten und die Namen der Klassenverwaltungsobjekte 24a bis 24m verwendet
werden, welche die zu addierenden Klassendaten verwalten. Gleichzeitig
registriert das add()-Verfahren die Namen der Klassenverwaltungsobjekte 24a bis 24m in
der Tabelle 23 für
Klassenverwaltungsobjekte und speichert die zu addierenden Klassendaten
in der Tabelle 25 gemeinsam genutzter Klassendaten.
-
Das get()-Verfahren 26c kopiert Klassendaten
aus der Tabelle 25 gemeinsam genutzter Klassendaten, wobei als Argumente
die Namen der Klassenver waltungsobjekte 24a bis 24m verwendet
werden, welche abzurufende Klassendaten verwalten.
-
Das set()-Verfahren ersetzt Klassendaten, die
zu ersetzen sind, in der Tabelle 25 gemeinsam genutzter Klassendaten
durch neue Klassendaten, wobei als Argumente neue ersetzende Klassendaten und
die Namen der Klassenverwaltungsobjekte 24a bis 24m verwendet
werden, welche die zu ersetzenden Klassendaten verwalten.
-
Das eval()-Verfahren 26e führt einen
Fernprozess an Klassendaten oder dem Objekt der Klassendaten durch,
wobei als Argumente zu verarbeitende Klassendaten und serialisierte
Daten eines Objekts der Klassendaten verwendet werden.
-
Das call()-Verfahren 26f erzeugt
ein Objekt aus in der Tabelle 25 gemeinsam genutzter Klassendaten
gespeicherten Klassendaten, wobei als Argumente die Namen der Klassenverwaltungsobjekte 24a bis 24m verwendet
werden, welche die zu verarbeitenden Klassendaten verwalten.
-
Der Computer 21 enthält eine
Kommunikations-Hintergrundroutine 28; einen Netzwerksockel API
(Application Programming Interface) 29; ein Betriebssystem 30;
und eine Systemklassenbibliothek 32.
-
Wenn die Schnittstelle 26 für ein öffentliches Fern-Verfahren
aufgerufen wird, werden Kommunikations-Threads 27a bis 27k zugewiesen,
und es kann mehrere Ausführungsabläufe geben
(z. B. Verfahren und Funktionen), die in einem Programm parallel
durchgeführt
werden, wobei ein Datenbereich unter ihnen gemeinsam genutzt wird.
Die Mehrfach-Thread-Funktion ist eine Standardfunktion in der Sprache
JAVA etc.
-
Die Datenübertragungen von Information
unter den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n im
Computer 21 und die Datenübertragungen von Informationen
zwischen dem Computer 21 und einem anderen Computer werden über einen Netzwerksockel
API eingerichtet.
-
Die Klassen-Ersatzfunktion und die
Funktion zur Fern-Ausführung
der Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n werden
auf ein tatsächliches
System wie z. B. eine Fernwartung von Software angewendet. Unter
Verwendung dieser Klassenersatzfunktion und der Funktion zur Fern-Ausführung kann
Software aus der Ferne ersetzt werden, ohne einen Server zu stoppen,
und die se Funktionen können
auf mehreren Servern in einem Batch-Prozess genutzt werden.
-
Wenn ein Programm mit nur einem Teil
einer Server-Software ergänzt
wird, ist es daher nicht notwendig, den Server zu stoppen und ihn
dann zu reaktivieren, nachdem das Programm ergänzt ist. Besonders wenn ein
verteiltes System genutzt wird, kann die Beanspruchung eines Administrators
erheblich reduziert werden. Tatsächlich
kann eine allgemeine Anwendung flexibel kundenspezifisch angepasst werden,
indem eine Klasse erzeugt wird, die in den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n arbeitet.
-
Gemäß der in 3 gezeigten Ausführungsform ist somit, wenn
mehrere Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n verknüpft sind
und die aktiven Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n eine
Additionsanforderung oder eine Löschungs-Anforderung
für die
Klassendaten empfangen, die ein Programmcode sind, der die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n bildet,
die Tabelle 25 für
gemeinsam genutzte Klassendaten in jedem der Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n vorgesehen,
um Klassenverwaltungsobjekte 24a bis 24m jedesmal
zu erzeugen, wenn eine Additionsanforderung ausgegeben wird.
-
Wenn die Klassenverwaltungsobjekte 24a bis 24m die
Suche in der Tabelle 25 für
gemeinsam genutzte Klassendaten und die Ausführung und die Löschung einer
addierten Klassengruppe verwalten, kann die addierte Klassengruppe
gemeinsam genutzt werden, und eine partielle Klassengruppe kann dynamisch
gelöscht
und aktualisiert werden.
-
Durch Ersetzen eines Programms oder Fern-Ausführen eines
Teils eines Programms in einer Laufzeitumgebung kann überdies
eine flexible Verkettung und ein dynamischer Lastausgleich in einem verteilten
Netzwerkverwaltungssystem, einem verteilten Netzwerkservice, einer
verteilten Gruppenware etc. realisiert werden.
-
Überdies
kann ein Programmcode eines aktiven Server-Objekts während des
Betriebs des Server-Objektes addiert und aktualisiert werden, und
ein mit einem aktualisierten Service verbundenes Server-Objekt muß nicht
komplett gestoppt werden. Als Folge kann ein Service für eine sehr
oder erheblich kurze Zeit gestoppt werden.
-
Eine Benutzerarbeitseinheitsklasse
verweist auf ein Objekt, das mit einer Funktion zum Überwachen
von das Objekt bildenden Klassendaten versehen ist.
-
4 zeigt
ein Beispiel der Konfiguration des in 3 dargestellten
Verwaltungsobjektes.
-
In 4 enthalten
die Klassenverwaltungsobjekte 24a bis 24m eine
Tabelle lokaler Klassendaten (lokale Klassen) 41; ein Löschungs-Flag
(entfernbares Flag) 42; einen Speicherbereich für Ersatz-Klassendaten
(nächste
Klassen) 43; eine ID-Liste laufender Threads (laufende
Threads) 44; eine Klassennamenliste (Klassennamen) 45;
eine Referenzobjektliste (Verweisen) 46; eine Liste verwiesener
Objekte (Verwiesen) 47; und eine Klassensuchfunktion 48 zum
Wiedergewinnen von Klassendaten.
-
Die Tabelle 41 für lokale Klassendaten speichert
Klassendaten, die während
einer Fern-Ausführung
des Programms empfangen werden. Das heißt, wenn die Klassendaten von
irgendeinem von anderen Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n während der
Fern-Ausführung übertragen
werden, speichert die Tabelle 41 für lokale Klassendaten die Klassendaten
unabhängig
von den Klassendaten, die durch Klassenverwaltungsobjekte 24a bis 24m schon
verwaltet werden, wodurch der Konflikt zwischen den übertragenen
Klassendaten und den Klassendaten vermieden wird, die durch die
Klassenverwaltungsobjekte 24a bis 24m schon verwaltet werden,
wenn die Klassendaten aus der Ferne verarbeitet werden.
-
Das Löschungs-Flag 42 gibt
an, ob eine Anforderung, zu der Tabelle 25 gemeinsam genutzter Klassendaten
addierte Klassendaten zu löschen, ausgegeben
wurde oder nicht. Die Anforderung, die Klassendaten zu löschen, kann
akzeptiert werden, selbst wenn die durch die Löschungs-Anforderung spezifizierten
Klassendaten gerade genutzt werden, indem die Anforderung, die Klassendaten
zu löschen,
im Löschungs-Flag 42 gespeichert
wird.
-
Der Speicherbereich 43 für Ersatz-Klassendaten
speichert vorübergehend
neu ersetzende Klassendaten, wenn eine Anforderung, zur Tabelle
25 gemeinsam genutzter Klassendaten addierte Klassendaten zu ersetzen,
ausgegeben wird. Die Anforderung, die Klassendaten zu ersetzen,
kann akzeptiert werden, selbst wenn die durch die Anforderung, die Klassendaten
zu ersetzen, spezifizierten Klassendaten gerade genutzt werden,
indem die neuen Klassendaten in dem Speicherbereich 43 für Ersatz-Klassendaten
bei der Ausgabe einer Ersatz-Anforderung gespeichert
werden.
-
Die ID-Liste 44 laufender
Threads speichert eine Thread-ID, die Klassendaten verarbeitet,
die zu der Tabelle 25 gemeinsam genutzter Klassendaten addiert wurden.
Sie kann bestimmt werden, indem die in der ID-Liste 44 laufender
Threads gespeicherte Thread-ID gespeichert und auf die ID-Liste 44 laufender
Threads verwiesen wird, ob die Klassendaten existieren oder nicht.
-
Die Klassennamenliste 45 speichert
jeden Klassennamen von Klassendaten, die zu der Tabelle 25 gemeinsam
genutzter Klassendaten addiert wurden. Die durch die Klassenverwaltungsobjekte 24a bis 24m verwalteten
Klassendaten können
geprüft werden,
und ein Prozess kann für
jedes Stück
der Klassendaten durchgeführt
werden, die durch die Klassenverwaltungsobjekte 24a bis 24m verwaltet werden.
-
Die Referenzobjektliste 46 zeigt,
welches der Klassenverwaltungsobjekte 24a bis 24m die
Klassendaten verwaltet, die durch die Klassendaten genutzt werden,
die zu der Tabelle 24 gemeinsam genutzter Klassendaten addiert wurden.
Die Referenzobjektliste 45 ermöglicht, daß ein Prozess auf den Klassendaten
unter Berücksichtigung
verwiesener Klassendaten durchgeführt wird.
-
Die Liste 47 verwiesener
Objekte zeigt, welches der Klassenverwaltungsobjekte 24a bis 24m Klassendaten
verwaltet, wobei andere Klassendaten gentzt werden, und ein Prozess
kann an Klassendaten unter Berücksichtigung
der verwiesenen Klassendaten durchgeführt werden.
-
5 zeigt
ein Beispiel der Konfiguration der Benutzerarbeitseinheitsklasse.
-
Eine Benutzerarbeitseinheitsklasse
ist als eine Basisklasse 52 einer Klassenbibliothek 51 vorgesehen.
Die Basisklasse 52 enthält
eine Tabelle 53 für
Klassenverwaltungsobjekte, ein Klassenverwaltungsobjekt 54,
eine Tabelle 55 gemeinsam genutzter Klassendaten und eine Schnittstelle 56 für ein öffentliches
Fern-Verfahren. Eine aus der Basisklasse 52 erzeugte Teilklasse 57 wird
in der Klassenbibliothek 51 registriert, und die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n können aus
der Teilklasse 57 als Spezialfälle (instances) 58a bis 58j erzeugt werden.
-
Ein Entwickler eines verteiltes Systems
kann folglich die Funktion zum Ersetzen von Klassendaten in einer
Laufzeitumgebung realisieren, indem die Teilklasse 57 einer
Benutzerarbeitseinheitsklasse erzeugt und eine Anwendung ohne Spezialwissen über Klassenverwaltung
beschrieben wird, und kann ein flexibles System unter Verwendung
einer Funktion zur Fern-Ausführung
erzeugen, indem Klassendaten von externen Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n übertragen
werden.
-
6 zeigt
ein Verfahren zum Erzeugen eines Klassenverwaltungsobjekts, wenn
Klassendaten addiert werden.
-
In 6 werden
zum Beispiel, wenn Klassendaten A, Klassendaten B und Klassendaten
C unter Verwendung des Namens 'Funktion-1' zu einem Benutzerarbeitseinheitsklassen-Objekt 301 addiert werden,
sie in einer Tabelle 302 für
gemeinsam genutzte Klassendaten gespeichert, und gleichzeitig wird
ein Klassenverwaltungsobjekt 303 zum Verwalten der Klassendaten
A, B und C erzeugt.
-
Die Klassennamen der Klassendaten
A, B und C, die durch das Klassenverwaltungsobjekt 303 verwaltet
werden, werden in dem Klassenverwaltungsobjekt 303 registriert,
und die Funktion 'Funktion-1' wird als der Name des Klassenverwaltungsobjekts 303 in
der Tabelle für
Klassenveraltungsobjekte registriert.
-
Falls Klassendaten D und E als der
Name 'Funktion-2' zum Benutzerarbeitseinheitsklassen-Objekt 301 addiert
werden, nachdem die Klassendaten A, B und C zu dem Benutzerarbeitseinheitsklassen-Objekt 301 addiert
sind, werden die Klassendaten D und E in der Tabelle 302 gemeinsam
genutzter Klassendaten gespeichert, und ein Klassenverwaltungsobjekt 304 zum
Verwalten der Klassendaten D und E wird neu erzeugt.
-
Die Klassennamen der Klassendaten
D und E, die durch das Klassenverwaltungsobjekt 304 verwaltet
werden, werden in dem Klassenverwaltungsobjekt 304 registriert,
und 'Funktion-2' wird als der Name des Klassenverwaltungsobjekts 304 in
der Tabelle für
Klassenverwaltungsobjekte registriert.
-
Falls Klassendaten F, G und H als
der Name 'Funktion-3' zum Benutzerarbeitseinheitsklassen-Objekt 301 addiert
werden, nachdem die Klassendaten D und E zum Benutzerarbeitseinheitsklassen-Objekt 301 addiert
sind, werden die Klassendaten F, G und H in der Tabelle 302 gemeinsam
genutzter Klassendaten gespeichert, und ein Klassenverwaltungsobjekt 305 zum
Verwalten der Klassendaten F, G und H wird neu erzeugt.
-
Die Klassennamen der Klassendaten
F, G und H, die durch das Klassenverwaltungsobjekt 305 verwaltet
werden, werden im Klassenverwaltungsobjekt 305 registriert,
und 'Funktion-3' wird als der Name des Klassenverwaltungsobjekts 305 in
der Tabelle für
Klassenverwaltungsobjekte registriert.
-
So werden jedesmal, wenn eine durch
Klassendaten gebildete Funktion zum Benutzerarbeitseinheitsklassen-Objekt 301 addiert
wird, die Klassenverwaltungsobjekte 303 bis 305 erzeugt.
Als Folge kann ein Programm für
jede durch Klassendaten gebildete Funktion überwacht werden, und es kann
bestimmt werden, welche Funktion des Programms während des Betriebs des Programms
gerade verwendet wird. Daher kann die Funktion eines Teils des Programms
während
des Betriebs des Programms gelöscht
oder ersetzt werden.
-
Falls die Namen 'Funktion-1' bis
'Funktion-3' der Klassenverwaltungsobjekte 303 bis 305 in
der Tabelle für
Klassenverwaltungsobjekte registriert werden, kann überdies
der Programmierer die zu einem Programm addierte Funktion spezifizieren,
indem die Namen 'Funktion-1' bis 'Funktion-3' der Klassenverwaltungsobjekte 303 bis 305 spezifiziert
werden, wodurch die Bequemlichkeit beim kundenspezifischen Anpassen
des Programms verbessert wird.
-
Im folgenden wird das Verfahren zum
kundenspezifischen Anpassen der Anwendung gemäß einer Ausführungsform
der vorliegenden Erfindung beschrieben.
-
7 zeigt
ein Beispiel eines Codierens einer Schablone (engl. template).
-
Es werde angenommen, daß in 7 beispielsweise die Anwendung
zum Screenen oder Sichten einer Mitteilung über die Ankunft einer E-Mail in
einem Schablonen-(Modell)-Format unter Verwendung einer Initialisierungsdatei
geliefert wird. Die Schablone wird verwendet, um die Ankunftsmitteilung über die
Nachricht oder Mail von einem bestimmten Sender zu screenen oder
zu sichten. Auswählen
'Von' aus einem Pop-up-Menü 82 einer
Feldspalte 83 eines Initialisierungsmenüs 81 und Eingeben
des Namens des Senders über
die Tastatur legen den Namen des Senders in einer Spalte 84 Inhalte
fest.
-
Wenn auf der anderen Seite ein Schlüsselwort
von einem Rumpf der E-Mail
ausgelesen oder wiedergewonnen und gesichtet werden soll, kann es nur durch
die Funktionen, die durch die in 7 dargestellte
Schablone geliefert werden, nicht erfolgreich abgefragt werden.
Daher wird extern ein Programmcode zum Durchsuchen des Textes der
E-Mail nach einem Schlüsselwort
erhalten. Der Programmcode für
den Teil der Ankunftsmitteilung der E-Mail, die durch die in 7 gezeigte Schablone geliefert wird,
wird dann durch den Programmcode zum Wiedergewinnen eines Schlüsselwortes
des Textes der E-Mail ersetzt.
-
Wenn ein Programmcode ersetzt wird, überwachen
die Klassenverwaltungsobjekte 24a bis 24m die
Nutzung eines Programmcodes für
einen Teil der Ankunftsmitteilung einer E-Mail. Dies ermöglicht,
daß der
Programmcode ersetzt wird, wenn der Programmcode für den Teil
der Ankunftsmitteilung einer E-Mail nicht ausgeführt wird. Wenn die in 7 gezeigte Schablone kundenspezifisch
angepasst wird, kann daher ein Teil der Funktion des Programms in dem
in 7 gezeigten Schablonenformat
ersetzt werden, ohne die Operation des Programms im in 7 gezeigten Schablonenformat
zu stoppen.
-
Folglich wird ein kundenspezifisch
anzupassendes Programm betrieben, und ein Programmcode, der für eine Anwendung
erforderlich ist, die eingerichtet werden soll, kann für einen
Ersatz wiedergewonnen werden, indem die Schablone codiert und der
Programmcode für
jede Funktion überwacht
wird. Daher kann eine Anwendung ohne Beschränkungen von der aktuellen Schablone
flexibel kundenspezifisch angepasst werden.
-
8 zeigt
ein Beispiel der Systemkonfiguration des in 3 dargestellten Computers.
-
In 8 sind
eine CPU 61, ein RAM 62, ein ROM 63,
eine Kommunikationsschnittstelle 64, ein Drucker 65,
eine Anzeige 66, eine Tastatur 67, eine Maus 68 und
ein Treiber 69 miteinander verbunden. Mit dem Treiber 69 sind
zum Beispiel eine Festplatte 70, eine Diskette 71,
ein Magnetband 72, eine optische Platte 73 wie
z. B. eine CD-ROM, eine DVD-ROM etc. und eine IC-Speicherkarte 74 verbunden.
-
Eine Benutzerarbeitseinheitsklasse
wird in dem ROM 63, der Festplatte 70, der Diskette 71,
dem Magnetband 72, der optischen Bildplatte 73 wie
z. B. einem CD-ROM, einem DVD-ROM etc., der IC-Speicherkarte 74 etc.
gespeichert. Wenn die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n von
der Benut zerarbeitseinheitsklasse aktiviert werden, werden die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n unter
der Steuerung der CPU 61 erzeugt und in dem RAM 62 gespeichert.
Die Operationen an den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n werden
durchgeführt,
indem die Sichtung im Schablonenformat, das auf der Anzeige 66 angezeigt wird,
betrieben wird oder Daten über
die Tastatur eingegeben werden.
-
Überdies
kann ein Programm über
die Kommunikationsschnittstelle 64 gesendet oder empfangen
werden. Das mit der Kommunikationsschnittstelle 64 verbundene
Kommunikationsnetzwerk kann z. B. ein LAN (Lokalbereichsnetz), ein
WAN (weiträumiges
Netz), das Internet, ein analoges Telefonnetz, ein digitales Telefonnetz
(ISDN: Integrated Services Digital Network) und ein drahtloses Kommunikationsnetzwerk,
das in einem PHS (Personal Handy System) genutzt wird, etc. sein.
-
9 ist
ein Flußdiagramm,
das die Operationen der in 3 dargestellten
Kommunikations-Hintergrundroutine 28 zeigt.
-
Wenn in 9 die Kommunikations-Hintergrundroutine 28 eine
Nachricht von einem anderen Computer über den Netzwerksockel API 29 in
einem Zustand empfängt,
in dem sie auf eine Nachricht wartet (Schritt S1), werden
die Namen BENUTZERARBEITSEINHEIT-1 oder AGENT-1 bis AGENT-n der Zielobjekte 22a bis 22n eine
Benutzerarbeitseinheitsklasse, ein Verfahrensnamen und ein Argument
von der Nachricht erhalten (Schritt S2), und die Kommunikations-Threads 27a bis 27k werden
erzeugt (Schritt S3). Die vom anderen Computer erhaltenen Daten
werden dann zu den Kommunikations-Threads 27a bis 27k durchgeleitet.
-
10 ist
ein Flußdiagramm,
das die Operationen der in 3 dargestellten
Kommunikations-Threads 27a bis 27k zeigt.
-
Wenn in 10 die Kommunikations-Threads 27a bis 27k von
der Kommunikations-Hintergrundroutine 28 erzeugt werden
(Schritt S11), werden die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n durch
den Namen AGENT-1 bis AGENT-n der Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n spezifiziert,
die durch die Kommunikations-Hintergrundroutine 28 spezifiziert werden
(Schritt S12).
-
Als nächstes rufen die Kommunikations-Threads 27a bis 27k die
Schnittstelle 26 für
ein öffentliches
Fern-Verfahren für
die spezifizierten Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n, indem
ein von der Kommunikations-Hintergrundroutine 28 übertragenes
Argument eingestellt wird (Schritt S13), und erwarten einen
Rückkehrwert
von den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n (Schritt S14).
-
Bei Empfang eines Rückkehrwertes
der Schnittstelle 26 für
ein öffentliches
Fern-Verfahren von den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n steuern
die Kommunikations-Threads 27a bis 27k die Netzwerksockel-API 29,
um eine den Rückkehrwert
enthaltende Nachricht an ein Benutzerarbeitseinheitsklassen-Objekt
eines anderen Computers zurückzuleiten,
der die Schnittstelle 26 für öffentliches Fern-Verfahren
ausgab (Schritt S15), und die Kommunikations-Threads 27a bis 27k zu
löschen
(Schritt S16).
-
Im folgenden wird das Verfahren zum
Addieren von Klassendaten zu den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n beschrieben.
-
11 zeigt
den Zustand, in welchen Klassendaten zu einem Benutzerarbeitseinheitsklassen-Objekt
addiert werden.
-
Wenn in 11 z. B. eine Funktion mit den Klassendaten
A, B und C zu einem Benutzerarbeitseinheitsklassen-Objekt 101 unter
Verwendung des Namens 'Funktion-1' addiert werden, werden die Klassendaten
A, B und C in einer Tabelle 104 für gemeinsam genutzte Klassendaten
gespeichert, und ein Klassenverwaltungsobjekt 103 zum Verwalten der
Klassendaten A, B und C wird erzeugt. Die 'Funktion-1' wird als
der Name des Klassenverwaltungsobjekts 103 in einer Tabelle
102 für
Klassenverwaltungsobjekte registriert. Entsprechend dem Namen 'Funktion-1'
des Klassenverwaltungsobjekts 103 wird in der Tabelle 102
für Klassenverwaltungsobjekte
ein Zeiger auf der Klassenverwaltungsobjekt 103 erzeugt.
-
Die Klassennamen A, B und C der jeweiligen Klassendaten
A, B und C, die durch das Klassenverwaltungsobjekt 103 verwaltet
werden, werden in der Klassennamenliste (Klassennamen) des Klassenverwaltungsobjekts 103 registriert,
und ein Löschungs-Flag
(entfernbares Flag) wird auf FALSCH gesetzt. Die Tabelle für lokale
Klassendaten (lokale Klassen), der Speicherbereich für Ersatz-Klassendaten (nächste Klassen),
die ID-Liste laufender Threads (laufende Threads), die Referenzobjektliste (Verweisend)
und die Liste verwiesener Objekte (Verwiesen) sind Null.
-
12 zeigt
den Zustand, in welchem Klassendaten mit einer Referenzbeziehung
zu einem Benutzerarbeitseinheitsklassen-Objekt addiert werden.
-
In 12 wird
z. B. die Funktion mit den Klassendaten A, B und C als der Name
'Funktion-1' zu einem Benutzerarbeitseinheitsklassen-Objekt 111 addiert.
Die Klassendaten A, B und C werden in der Tabelle 115 gemeinsam
genutzter Klassendaten gespeichert, und ein Klassenverwaltungsobjekt 113 zum
Verwalten der Klassendaten A, B und C wird erzeugt.
-
Die Klassennamen A, B und C der jeweiligen Klassendaten
A, B und C, die durch das Klassenverwaltungsobjekt 113 verwaltet
werden, werden in der Klassennamenliste (Klassennamen) des Klassenverwaltungsobjekts 113 registriert,
und ein Löschungs-Flag
(entfernbares Flag) wird auf FALSCH gesetzt. Die Tabelle für lokale
Klassendaten (lokale Klassen), der Speicherbereich für Ersatz-Klassendaten (nächste Klassen),
die ID-Liste laufender Threads (laufende Threads) und die Referenzobjektliste
(Verweisend) sind Null.
-
Die 'Funktion-1' wird als der Name
des Klassenverwaltungsobjekts 113 in einer Tabelle 112
für Klassenverwaltungsobjekte
registriert. Entsprechend dem Namen 'Funktion-1' des Klassenverwaltungsobjekts 113 wird
in der Tabelle 112 für
Klassenverwaltungsobjekte ein Zeiger auf das Klassenverwaltungsobjekt 113 erzeugt.
-
Wenn eine Funktion mit den Klassendaten
F und G in diesem Zustand zu einem Benutzerarbeitseinheitsklassen-Objekt 111 addiert
wird, das den Namen 'Funktion-3' nutzt, werden die Klassendaten
F und G zu einer Tabelle 115 gemeinsam genutzter Klassendaten addiert.
-
Anschließend wird ein Klassenverwaltungsobjekt 114 zum
Verwalten der Klassendaten F und G neu erzeugt. Die 'Funktion-3'
wird als der Name des Klassenverwaltungsobjekts 114 in
einer Tabelle 112 für
Klassenverwaltungsobjekte registriert. Entsprechend dem Namen 'Funktion-3'
des Klassenverwaltungsobjekts 114 wird in der Tabelle 112
für Klassenverwaltungsobjekte
ein Zeiger auf das Klassenverwaltungsobjekt 114 neu erzeugt.
-
Die Klassennamen F und G der jeweiligen Klassendaten
F und G, die durch das Klassenverwaltungsobjekt 114 verwaltet
werden, werden in der Klassenna menliste (Klassennamen) des Klassenverwaltungsobjekts 114 registriert,
und ein Löschungs-Flag
(entfernbares Flag) wird auf FALSCH gesetzt. Die Tabelle lokaler
Klassendaten (lokale Klassen), der Speicherbereich für Ersatz-Klassendaten
(nächste
Klassen), die ID-Liste laufender Threads (laufende Threads) und
die Liste verwiesener Objekte (Verwiesen) sind Null.
-
Man nehme an, daß die Klassendaten F auf der
Existenz der Klassendaten A, die zu der Tabelle 115 gemeinsam genutzter
Klassendaten schon addiert wurden, wie folgt basieren:
-
-
Die Referenzobjektliste (Verweisend)
des Klassenverwaltungsobjekts 114 speichert die Referenzinformation über das
Klassenverwaltungsobjekt 113 zum Verwalten der verwiesenen
Klassendaten A, und die Liste verwiesener Objekte (Verwiesen) des Klassenverwaltungsobjekts 113 speichert
die verwiesene Information über
das Klassenverwaltungsobjekt 114, das die verweisenden
Klassendaten F verwaltet.
-
Selbst wenn das remove()-Verfahren 26a und
das set()-Verfahren 26d unter Verwendung des Namens 'Funktion-1'
als Argument aufgerufen werden und eine Löschungs-Anforderung und eine
Ersatz-Anforderung für
eine Funktion mit den Klassendaten A, B und C an das Objekt 111 einer
Benutzerarbeitseinheitsklasse ausgegeben werden, kann das Klassenverwaltungsobjekt 113 die
Löschungs-Anforderung
und die Ersatz-Anforderung für
die Funktion mit den Klassendaten A, B und C halten, indem die Liste
verwiesener Objekte geprüft
wird. Die Funktion der Klassendaten F, die auf die Klassendaten
A verweisen, kann somit gegen Schäden geschützt werden.
-
13 zeigt
das Verfahren zum Zurückweisen
einer doppelten Registrierung von Klassendaten in den Benutzerarbeitseinheitklassen-Objekten 22a bis 22n.
-
In 13 wird
z. B. eine Funktion mit den Klassendaten A, B und C zu einem Benutzerarbeitseinheitsklassen-Objekt 121 unter
Verwendung des Namens 'Funktion-1' addiert, werden die Klassendaten
A, B und C in einer Tabelle 124 gemeinsam genutzter Klassendaten
gespeichert, und ein Klassenverwaltungsobjekt 123 zum Verwalten
der Klassendaten A, B und C wird erzeugt.
-
Die Klassennamen A, B und C der jeweiligen Klassendaten
A, B und C, die durch das Klassenverwaltungsobjekt 123 verwaltet
werden, werden in der Klassennamenliste (Klassennamen) des Klassenverwaltungsobjekts 123 registriert,
und ein Löschungs-Flag
(entfernbares Flag) wird auf FALSCH gesetzt. Die Tabelle lokaler
Klassendaten (lokale Klassen), der Speicherbereich für Ersatz-Klassendaten (nächste Klassen),
die ID-Liste laufender Threads (laufende Threads), die Referenzobjektliste (verweisend)
und die Liste verwiesener Objekte (verwiesen) sind Null.
-
Die 'Funktion-1' wird als der Name
des Klassenverwaltungsobjekts 123 in einer Tabelle 122
für Klassenverwaltungsobjekte
registriert. Entsprechend dem Namen 'Funktion-1' des Klassenverwaltungsobjekts 123 wird
in der Tabelle 122 für
Klassenverwaltungsobjekte ein Zeiger auf das Klassenverwaltungsobjekt 123 erzeugt.
-
Wenn in diesem Zustand ein add()-Verfahren 125
des Benutzerarbeitseinheitsklassen-Objekts 121 unter Verwendung
des Namens 'Funktion-6', der Klassendaten D, E und A als Argumente
aufgerufen wird, werden die Klassendaten D in einer Tabelle 124 gemeinsam
genutzter Klassendaten neu gespeichert nach einem Bestätigen, daß die Klassendaten
D in der Tabelle 124 gemeinsam genutzter Klassendaten des Benutzerarbeitseinheitsklassen-Objekts 121 nicht
gespeichert sind.
-
Nach einem Bestätigen, daß die Klassendaten E in der
Tabelle 124 gemeinsam genutzter Klassendaten nicht gespeichert sind,
werden als nächstes
die Klassendaten E in der Tabelle 124 gemeinsam genutzter Klassendaten
gespeichert.
-
Wenn die Klassendaten A in der Tabelle
124 gemeinsam genutzter Klassendaten gespeichert werden, werden
die Klassendaten D und E aus der Tabelle 124 gemeinsam genutzter
Klassendaten gelöscht,
weil die Klassendaten A schon in der Tabelle 124 gemeinsam genutzter
Klassendaten gespeichert wurden. Die Klassendaten D, E und A mit
dem Namen 'Funktion-6' werden in der Tabelle 124 gemeinsam genutzter
Klassendaten nicht gespeichert.
-
Wenn das Benutzerarbeitseinheitsklassen-Objekts 121 eine
Anforderung empfängt,
mehrere Stücke
von Klassendaten gleichzeitig zu addieren oder zu ersetzen, wird
die Tabelle 124 gemeinsam genutzter Klassendaten in ihrem ursprünglichen
Zustand wiederhergestellt, indem alle Klassendaten gelöscht werden,
die in der Tabelle 124 gemeinsam genutzter Klassendaten addiert
werden sollen, falls ein Konflikt zwischen einem Teil der zu addierenden Klassennamen
und den im Benutzerarbeitseinheitsklassen-Objekt 121 existierenden
Klassennamen während
des Klassendaten addierenden Prozesses entsteht.
-
14 zeigt
ein Flußdiagramm,
das den Klassendaten addierenden Prozess darstellt.
-
Wenn die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n Klassendaten
addieren, wird das add()-Verfahren aufgerufen.
-
Zunächst werden in 14 Zugriffsprivilegien auf die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n geprüft (Schritt S21).
Falls es keine Zugriffsprivilegien gibt, wird der Prozess suspendiert.
-
Anschließend werden die Namen 'Funktion-1'
bis 'Funktion-m', die zugewiesen werden, wenn die Klassendaten addiert
werden, und die zu addierenden Klassendaten aus dem Argument des
Verfahrens 26b erhalten (Schritt S22),
und die Namen 'Funktion-1' bis 'Funktion-m', die zugewiesen werden,
wenn die Klassendaten addiert werden, werden aus der Tabelle 23
für Klassenverwaltungsobjekte abgerufen
oder wiedergewonnen (Schritt S23).
-
Als nächstes wird geprüft, ob die
Namen 'Funktion-1' bis 'Funktion-m', die zugewiesen werden, wenn
die Klassendaten addiert werden, in der Tabelle 23 für Klassenverwaltungsobjekte
existieren oder nicht (Schritt S24). Falls die Namen 'Funktion-1' bis
'Funktion-m', die zugewiesen werden, wenn die Klassendaten addiert
werden, in der Tabelle 23 für Klassenverwaltungsobjekte
existieren, wird eine Fehlermitteilung ausgegeben, und der Prozess
wird suspendiert (Schritt S25).
-
Falls auf der anderen Seite die Namen 'Funktion-1'
bis 'Funktion-m', die zugewiesen werden, wenn die Klassendaten addiert
werden, in der Tabelle 23 für
Klassenverwaltungsobjekte nicht existieren, werden die durch die
Additionsanforderung spezifizierten Klassendaten in die Tabelle
25 gemeinsam genutzter Klassendaten geschrieben (Schritt S26).
-
Danach wird bestimmt, ob der gleiche
Klassenname in der Tabelle 25 gemeinsam genutzter Klassendaten existiert
oder nicht (Schritt S27). Falls detektiert wird, während die
Klassendaten gerade geschrieben werden, daß der gleiche Klassenname in
der Tabelle 25 gemeinsam genutzter Klassendaten existiert, werden
dann die Klassendaten, die in der Tabelle 25 gemeinsam genutzter
Klassendaten bei der Additionsanforderung gespeichert wurden, gelöscht, wird
die Tabelle 25 gemeinsam genutzter Klassendaten in ihrem ursprünglichen
Zustand wiederhergestellt (Schritt S28), wird eine Fehlermitteilung
ausgegeben, und der Prozess endet (Schritt S29).
-
Falls auf der anderen Seite alle
bei einer Additionsanforderung spezifizierten Klassendaten erfolgreich
addiert worden sind, weil der Klassenname in der Tabelle 25 gemeinsam
genutzter Klassendaten nicht existiert, wenn die Klassendaten geschrieben werden,
werden dann die Klassenverwaltungsobjekte 24a bis 24m neu
erzeugt. Die Namen 'Funktion-1' bis 'Funktion-m', die zugewiesen
werden, wenn die Klassendaten, die durch das Argument des add()-Verfahrens festgelegt
werden, werden in der Tabelle 23 für Klassenverwaltungsobjekte
registriert, so daß die
neu erzeugten Klassenverwaltungsobjekte 24a bis 24m durch
die Namen 'Funktion-1' bis 'Funktion-m', die in der Tabelle 23 für Klassenverwaltungsobjekte
registriert sind, identifiziert werden können (Schritt S30).
-
Die Klassennamen aller zu der Tabelle
25 gemeinsam genutzter Klassendaten addierten Klassendaten werden
dann in der Klassennamenliste 45 der neu erzeugten Klassenverwaltungsobjekte 24a bis 24m festgelegt
(Schritt S31).
-
Als nächstes wird die auf die zur
Tabelle 25 gemeinsam genutzter Klassendaten addierten Klassendaten
bezogene Klasse geprüft,
wird eine Zielinformation in der Referenzobjektliste 46 der
neu erzeugten Klassenverwaltungsob jekte 24a bis 24m festgelegt
(Schritt S32), und eine Quelleninformation wird in der
Liste 47 verwiesener Objekte der verwiesenen Klassenverwaltungsobjekte 24a bis 24m festgelegt
(Schritt S33), dadurch den Prozess beendend.
-
Im folgenden wird das Verfahren zum
Steuern von Zugriffsprivilegien gemäß einer Ausführungsform
der vorliegenden Erfindung beschrieben.
-
Man nehme an, daß der Prozess zum Prüfen von
Zugriffsprivilegien beim Ersatz einer Klasse durch den Namen zum
Beispiel "CheckSet" reserviert wird, und die folgende Klasse wird
zu den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n durch den
Namen "CheckSet" addiert.
-
-
Bevor die Klassendaten registriert
werden, werden Zugriffssteuerbedingungen unter Verwendung des anfordernden
Nutzernamens, des Host-Namens und der Namen 'AGENT-1' bis 'AGENT-n'
der Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n etc.
geprüft,
um zu bestimmen, ob die Anforderung, die Klassendaten zu verarbeiten,
akzeptabel ist oder nicht. Das heißt, falls die arbeitenden Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n eine
Löschungs-Anforderung oder
eine Ersatz-Anforderung für
die Klassendaten akzeptieren, wird aus der 'CheckSet' genannten
Klasse zur Ausführung
ein Objekt erzeugt.
-
In diesem Fall wird, außer der
Name der Benutzerarbeitseinheit, die eine Anforderung zum Ersatz
von Klassendaten ausgegeben hat, paßt mit 'Admin' zusammen, der
ersetzende Prozess nicht durchgeführt, sondern eine Ausnahme
(engl. exception) tritt auf. Da die die Zugriffssteuerbedingungen
beschreibende Klasse in der gleichen Weise wie andere Klassen in
den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n verarbeitet
werden, können
die Zustandssteuerbedingungen, die effektiv sind, angefügt oder
ergänzt
werden. Das heißt,
die Zugriffssteuerbedingungen werden als ersetzbare Klassendaten in
den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n verwaltet,
und die Zugriffssteuerbedingungen auf den arbeitenden Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n können ergänzt werden.
-
Selbst wenn ein Programm von einem
entfernten Computer addiert oder aktualisiert wird, wird somit die
Schnittstelle beim Addieren und Aktualisieren eines Programmcodes
gesichert, wodurch die Beanspruchung des Administrators zur Wartung
und Verwaltung verteilter Objekte reduziert wird.
-
15 ist
ein Flußdiagramm,
das den Zugriffsprivilegien prüfenden
Prozess zeigt.
-
Der Zugriffsprivilegien prüfende Prozess
wird durch einen Prozess zum Addieren von Klassendaten zu den Benutzerarbeitseinheitsklasse-Objekten 22a bis 22n,
dargestellt in 13; einen
Prozess zum Erhalten der Klassendaten, dargestellt in 16; einen Prozess, der an
den Klassendaten durchgeführt
wird, dargestellt in 19;
einen Prozess zum Löschen
von Klassendaten, dargestellt in 21;
einen Prozess zum Ersetzen von Klassendaten, dargestellt in 24 und 25; und einen Klassendaten-Fernprozess
aufgerufen, dargestellt in 28.
-
Wenn in 15 eine Prüfung von Zugriffsprivilegien
gestartet wird (Schritt S41), wird aus der Tabelle 15 gemeinsam
genutzter Klassendaten die Klasse der Zugriffsprivilegienprüfung ausgelesen oder
wiedergewonnen, die die Zugriffssteuerbedingungen beschreibt (Schritt S42).
Es wird dann geprüft,
ob die Klasse zum Prüfen
von Zugriffsprivilegien in der Tabelle 25 gemeinsam genutzter Klassendaten
existiert oder nicht (Schritt S43). Falls die Klasse in
der Tabelle 25 gemeinsam genutzter Klassendaten existiert, wird
aus der Klasse der Zugriffsprivilegienprüfung zur Ausführung ein
Objekt erzeugt (Schritt S44).
-
Die Klasse der Zugriffsprivilegienprüfung verweist
auf ein Programm, das Regeln beschreibt, gemäß dem Typ und Argument eines
Prozesses, den Namen AGENT-1 bis AGENT-n der Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n,
dem Prozess, der Nutzernamen anfordert, etc. und kann durch eine andere Klasse
der Prüfung
von Zugriffsprivilegien während
der Operationen der Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n wie
mit anderen Klassendaten ersetzt werden, die zu den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n addiert werden.
-
Danach können Zugriffssteuerbedingungen für jedes
der Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n ergänzt werden,
wodurch die Sicherheit der Schnittstelle bei Addieren und Aktualisieren
eines Programmcodes verbessert wird.
-
Falls auf der anderen Seite die Klasse
der Prüfung
von Zugriffsprivilegien in der Tabelle 25 gemeinsam genutzter Klassendaten
nicht existiert, werden die Zugriffsprivilegien unter den Standardbedingungen
geprüft
(Schritt S45).
-
Es wird dann bestimmt, ob Zugriffsprivilegien existieren
oder nicht (Schritt S46). Falls keine Zugriffsprivilegien
existieren, wird eine Fehlermitteilung ausgegeben (Schritt S47),
und der Prozess endet (Schritt S47). Falls Zugriffsprivilegien
existieren, akzeptieren die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n den
angeforderten Prozess (Schritt S48).
-
Im folgenden wird das Verfahren zum
Erhalten der Klassendaten aus den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n beschrieben.
-
16 ist
ein Flußdiagramm,
das den Prozess zum Erhalten von Klassendaten zeigt.
-
Wenn die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n einen
Prozess zum Erhalten von Klassendaten durchführen, wird das get()-Verfahren aufgerufen.
-
In 16 werden
Zugriffsprivilegien zuerst an den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n geprüft (Schritt S51).
Falls keine Privilegien existieren, endet der Prozess.
-
Als nächstes werden die Namen 'Funktion-1' bis
'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu verarbeitenden Klassendaten aus dem Argument des
get()-Verfahrens erhalten (Schritt S52), und
die Namen 'Funktion-1' bis 'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu verarbeitenden Klassendaten werden aus der Tabelle
23 für
Klassenverwaltungsobjekte abgefragt (Schritt S53).
-
Es wird dann geprüft, ob die Namen 'Funktion-1'
bis 'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu verarbeitenden Klassendaten in der Tabelle 23 für Klassenverwaltungsobjekte
registriert sind oder nicht (Schritt S54). Falls die Namen
'Funktion-1' bis 'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu verarbeitenden Klassendaten in der Tabelle 23 für Klassenverwaltungsobjekte
nicht registriert sind, wird eine Fehlermitteilung ausgegeben, und
der Prozess wird suspendiert (Schritt S55).
-
Falls die Namen 'Funktion-1' bis
'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum Verwalten
der zu verarbeitenden Klassendaten in der Tabelle 23 für Klassenverwaltungsobjekte
registriert sind, werden dann die Klassennamen aus der Klassennamenliste 45 der
Klassenverwaltungsobjekte 24a bis 24m erhalten,
werden die Klassendaten des Klassennamens von der Tabelle 25 gemeinsam
genutzter Klassendaten kopiert (Schritt S56), und die Klassendaten
werden als ein Rückkehrwert
an den Abfrager oder Requester zurückgegeben (Schritt S57).
-
Im folgenden wird das Verfahren zum
Verarbeiten von Klassendaten in den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n beschrieben.
-
17 zeigt
den Zustand eines Benutzerarbeitseinheitsklassen-Objekts, wenn die
Klassendaten verarbeitet werden.
-
In 17 wird
zum Beispiel die Funktion mit den Klassendaten A, B und C als der
Name 'Funktion-1' zu einem Benutzerarbeitseinheitsklassen-Objekt 131 addiert.
Die Klassendaten A, B und C werden in der Tabelle 135 gemeinsam
genutzter Klassendaten gespeichert, und ein Klassenverwaltungsobjekt 133 zum
Verwalten der Klassendaten A, B und C wird erzeugt.
-
Die Klassennamen A, B und C der jeweiligen Klassendaten
A, B und C, die durch das Klassenverwaltungsobjekt 133 verwaltet
werden, werden in der Klassennamenliste (Klassennamen) des Klassenverwaltungsobjekts 133 registriert,
und ein Löschungs-Flag
(entfernbares Flag) wird auf FALSCH gesetzt. Die Tabelle lokaler
Klassendaten (lokale Klassen), der Speicherbereich für Ersatz-Klassendaten (nächste Klassen),
die Referenzobjektliste (verweisend) und die Liste verwiesener Objekte
(verwiesen) sind Null.
-
Die Funktion 'Funktion-1' wird als
der Name des Klassenverwaltungsobjekts 133 in einer Tabelle 132
für Klassenverwaltungsobjekte
registriert. Entsprechend dem Namen 'Funktion-1' des Klassenverwaltungsobjekts 133 wird
in der Tabelle 132 für
Klassenverwaltungsobjekte ein Zeiger auf das Klassenverwaltungsobjekt 133 erzeugt.
-
Wenn eine Anforderung, die Klassendaten
A, B und C zu verarbeiten, an das Benutzerarbeitseinheitsklassen-Objekt 131 ausgegeben
wird, indem der Name 'Funktion-1' spezifiziert wird, werden die
Objekte A, B und C aus den Klassendaten A, B und C erzeugt, und
ein Thread 134 wird zugewiesen.
-
Die ID-Liste laufender Threads (laufende Threads)
speichert eine Identifizierungsinformation über den Thread 134,
der den Objekten A, B und C zugewiesen ist. Wenn die Objekte A,
B und C verarbeitet worden sind, wird die Identifizierungsinformation über den
den Objekten A, B und C zugewiesenen Thread 134 aus der
ID-Liste laufender Threads (laufende Threads) gelöscht.
-
Daher kann das Klassenverwaltungsobjekt 133 einfach
bestimmen, ob die Klassendaten A, B und C, die durch das Klassenverwaltungsobjekt 133 verwaltet
werden, gerade genutzt werden oder nicht, indem auf die ID-Liste
laufender Threads Bezug genommen wird (laufende Threads).
-
18 zeigt
den Zustand eines Objektes einer Benutzerarbeitseinheitsklasse,
dessen Klassendaten mit einer Referenzbeziehung gerade verarbeitet
werden.
-
In 18 wird
zum Beispiel die Funktion der Klassendaten A, B und C als der Name
'Funktion-1' zu einem Objekt 141 einer Benutzerarbeitseinheitsklasse
addiert. Die Klassendaten A, B und C werden in einer Tabelle 147
gemeinsam genutzter Klassendaten gespeichert, und ein Klassenverwaltungsobjekt 143 zum
Verwalten der Klassendaten A, B und C wird erzeugt.
-
Die Klassennamen A, B und C der jeweiligen Klassendaten
A, B und C, die durch das Klassenverwaltungsobjekt 143 verwaltet
werden, werden in der Klassennamenliste (Klassennamen) des Klassenverwaltungsobjekts 143 registriert,
und ein Löschungs-Flag
(entfernbares Flag) wird auf FALSCH gesetzt. Die Tabelle lokaler
Klassendaten (lokale Klassen), der Speicherbereich für Ersatz-Klassendaten (nächste Klassen)
und die Referenzobjektliste (verweisend) sind Null.
-
Die 'Funktion-1' wird als der Name
des Klassenverwaltungsobjekts 143 in einer Tabelle 142
für Klassenverwaltungsobjekte
registriert. Entsprechend dem Namen 'Funktion-1' des Klassenverwaltungsobjekts 143 wird
in der Tabelle 142 für
Klassenverwaltungsobjekte ein Zeiger auf das Klassenverwaltungsobjekt 143 erzeugt.
-
Die Funktion mit den Klassendaten
D wird als der Name 'Funktion-4' zu einem Benutzerarbeitseinheitsklassen-Objekt 141 addiert.
Die Klassendaten D werden in einer Tabelle 147 gemeinsam genutzter
Klassendaten gespeichert, und ein Klassenverwaltungsobjekt 145 zum
Verwalten der Klassendaten D wird erzeugt.
-
Der Klassenname D der durch das Klassenverwaltungsobjekt 145 verwalteten
Klassendaten D wird in der Klassennamenliste (Klassennamen) des Klassenverwaltungsobjekts 145 registriert,
und ein Löschungs-Flag
(entfernbares Flag) wird auf FALSCH gesetzt. Die Tabelle lokaler
Klassendaten (lokale Klassen), der Speicherbereich für Ersatz-Klassendaten
(nächste
Klassen) und die Liste verwiesener Objekte (verwiesen) sind Null.
-
Die 'Funktion-4' wird als der Name
des Klassenverwaltungsobjekts 145 in einer Tabelle 142
für Klassenverwaltungsobjekte
registriert. Entsprechend dem Namen 'Funktion-4' des Klassenverwaltungsobjekts 145 wird
ein Zeiger auf das Klassenverwaltungsobjekt 145 in der
Tabelle 142 für
Klassenverwaltungsobjekte erzeugt.
-
Man nehme an, daß die Klassendaten D zum Beispiel
wie folgt auf der Existenz der Klassendaten A und B basieren.
-
-
Die Referenzobjektliste (verweisend)
des Klassenverwaltungsobjekts 145 speichert die Referenzinformation über das
Klassenverwaltungsobjekt 143 zum Verwalten der verwiesenen
Klassendaten A und B, und die Liste verwiesener Objekte (verwiesen) des
Klassenverwaltungsobjekts 143 speichert die verwiesene
Information über
das Klassenverwaltungsobjekt 145, das die verweisenden
Klassendaten D verwaltet.
-
Wenn eine Anforderung, die Klassendaten
D zu verarbeiten, in diesem Zustand an das Benutzerarbeitseinheitsklassen-Objekt 141 durch
Spezifizieren des Namens 'Funktion-4' ausgegeben wird, wird das
Objekt D aus den Klassendaten D erzeugt, und ein Thread 144 wird
zugewiesen.
-
Die ID-Liste laufender Threads (laufende Threads)
des Klassenverwaltungsobjekts 145 speichert die Identifizierungsinformation
des Thread 144, der dem Objekt D zugewiesen wurde, und
die ID-Liste laufender Threads (laufende Threads) des Klassenverwaltungsobjekts 143 zum
Verwalten von Klassendaten A und B, auf die durch die Klasse D verwiesen
wurde, speichert ebenfalls die Identifizierungsinformation des dem
Objekt D zugewiesenen Thread 144.
-
Wenn die Ausführung des Objekts D abgeschlossen
ist, wird die Identifizierungsinformation über den dem Objekt D zugewiesenen
Thread 144 aus der ID-Liste laufender Threads (laufende Threads)
des Klassenverwaltungsobjekts 143 und des Klassenverwaltungsobjekts 145 gelöscht.
-
Selbst wenn eine Anforderung, die
'Funktion-1' genannte Funktion zu löschen oder zu addieren, während der
Ausführung
der 'Funktion-4' genannten Funktion an das Benutzerarbeitseinheitsklassen-Objekt 141 ausgegeben
wird, kann daher das Klassenverwaltungsobjekt 143 die Anforderung, die
'Funktion-1' genannte Funktion zu löschen oder zu addieren, halten,
indem sie ihre eigene ID-Liste laufender Threads (laufende Threads)
prüft,
wodurch verhindert wird, daß die
Ausführung
der 'Funktion-4' genannten Funktion während der Ausführung der 'Funktion-4'
genannten Funktion zurückgewiesen wird.
-
19 ist
ein Flußdiagramm,
das den an Klassendaten durchgeführten
Prozess zeigt.
-
Wenn die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n einen
Prozess auf den Klassendaten durchführen, wird das call()-Verfahren aufgerufen.
-
In 19 werden
zuerst Zugriffsprivilegien auf die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n geprüft (Schritt S61).
Falls keine Zugriffsprivilegien existieren, endet der Prozess.
-
Als nächstes werden die Namen 'Funktion-1' bis
'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu verarbeitenden Klassendaten aus dem Argument des
call()-erfahrens erhalten (Schritt S62), und
die Namen 'Funktion-1' bis 'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu verarbeitenden Klassendaten werden aus der Tabelle
23 für
Klassenverwaltungsobjekte wiedergewonnen (Schritt S63).
-
Dann wird geprüft, ob die Namen 'Funktion-1' bis
'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu verarbeitenden Klassendaten in der Tabelle 23 für Klassenverwaltungsobjekte
registriert sind oder nicht (Schritt S64). Falls die Namen
'Funktion-1' bis 'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu verarbeitenden Klassendaten in der Tabelle 23 für Klassenverwaltungsobjekte
nicht registriert sind, wird eine Fehlermitteilung ausgegeben, und
der Prozess wird suspendiert (Schritt S65).
-
Falls die Namen 'Funktion-1' bis
'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum Verwalten
der zu verarbeitenden Klassendaten in der Tabelle 23 für Klassenverwaltungsobjekte
registriert sind, wird dann die ID des laufenden Thread zu der ID-Liste 44 laufender
Threads der Klassenverwaltungsobjekte 24a bis 24m addiert,
und die ID eines laufenden Thread wird zur ID-Liste 44 laufender Threads
der Klassenverwaltungsobjekte 24a bis 24m addiert,
die in der Referenzobjektliste 46 der Klassenverwaltungsobjekte 24a bis 24m dargestellt
sind (Schritt S66).
-
Dann wird ein Objekt aus den zu verarbeitenden
Klassendaten erzeugt (Schritt S67), und das Ende des Prozesses
wird abgewartet (Schritt S68). Wenn der Prozess endet,
wird die ID des laufenden Thread aus der ID-Liste 44 laufender Threads
der Klassenverwaltungsobjekte 24a bis 24m gelöscht, und
die ID des laufenden Thread wird aus der ID-Liste 44 laufender
Threads der Klassenverwaltungsobjekte 24a bis 24m gelöscht, die
in der Referenzobjektliste 46 der Klassenverwaltungsobjekte 24a bis 24m dargestellt
sind (Schritt S69).
-
Es wird geprüft, ob die ID-Liste laufender Threads
leer ist oder nicht (Schritt S70). Falls die ID-Liste 44 laufender
Threads nicht leer ist, endet der Ausführungsprozess (Schritt S71).
Wenn die ID-Liste 44 laufender Threads leer ist, wird geprüft, ob das
Löschungs-Flag
WAHR ist oder nicht (Schritt S72). Falls das Löschungs-Flag 42 WAHR
ist, wird dann der Löschungsprozess
reserviert, und der in 21 dargestellte
Löschungsprozess
wird aufgerufen (Schritt S73), und der Ausführungsprozess
endet (Schritt S74).
-
Falls das Löschungs-Flag 42 FALSCH
ist, wird geprüft,
ob der Speicherbereich 43 für Ersatz-Klassendaten leer
ist oder nicht (Schritt S75). Falls der Speicherbereich 43 für Ersatz-Klassendaten
leer ist, endet der Ausführungsprozess
(Schritt S76). Falls der Speicherbereich 43 für Ersatz-Klassendaten
nicht leer ist, wird der ersetzende Prozess reserviert, und der
in 24 und 25 dargestellte ersetzende
Prozess wird unter Verwendung, als Argument, der im Speicherbereich 43 für Ersatz-Klassendaten
gespeicherten Klassendaten aufgerufen (Schritt S77), wodurch
der Ausführungsprozess
endet.
-
Wenn die arbeitenden Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n eine
Anforderung, Klassendaten zu löschen
oder zu ersetzen, akzeptieren, überwachen
die Klassenverwaltungsobjekte 24a bis 24m die
Nutzung aller Klassendaten. Als Folge kann die Löschung oder der Ersatz der
Klassendaten verzögert
werden, bis die zu löschenden
oder zu ersetzenden Klassendaten nicht verfügbar werden, wodurch die Anforderung
zur Löschung
oder zum Ersatz von Klassendaten ohne Stoppen der arbeitenden Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n erfolgreich
verarbeitet wird.
-
Wenn eine Anforderung zur Löschung oder zum
Ersatz von Klassendaten an die arbeitenden Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n ausgegeben
wird, kann eine Stopp-Anforderung an ein Objekt ausgegeben werden,
das die zu löschenden
oder zu ersetzenden Klassendaten gerade nutzt, so daß die Klassendaten
nach der Antwort vom Objekt gelöscht
werden können.
-
Im folgenden wird das Verfahren zum
Löschen
von Klassendaten aus den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n beschrieben.
-
20 zeigt
den Zustand eines Benutzerarbeitseinheitsklassen-Objekts, wenn eine
Löschungs-Anforderung
ausgegeben wird, wenn die Klassendaten verarbeitet werden.
-
In 20 wird
zum Beispiel die Funktion mit den Klassendaten A, B und C als der
Name 'Funktion-1' zu einem Benutzerarbeitseinheitsklassen-Objekt 151 addiert.
Die Klassendaten A, B und C werden in einer Tabelle 155 gemeinsam
genutzter Klassendaten gespeichert, und ein Klassenverwaltungsobjekt 153 zum
Verwalten der Klassendaten A, B und C wird erzeugt.
-
Die Klassennamen A, B und C der jeweiligen Klassendaten
A, B und C, die durch das Klassenverwaltungsobjekt 153 verwaltet
werden, werden in der Klassennamenliste (Klassennamen) des Klassenverwaltungsobjekts 153 registriert.
Die Tabelle lokaler Klassendaten (lokale Klassen), der Speicherbereich für Ersatz-Klassendaten
(nächste
Klassen), die Referenzobjektliste (verweisend) und die Liste verwiesener
Objekte (verwiesen) sind Null.
-
Die 'Funktion-1' wird als der Name
des Klassenverwaltungsobjekts 153 in einer Tabelle 152
für Klassenverwaltungsobjekte
registriert. Entsprechend dem Namen 'Funktion-1' des Klassenverwaltungsobjekts 153 wird
in der Tabelle 152 für
Klassenverwaltungsobjekte ein Zeiger auf das Klassenverwaltungsobjekt 153 erzeugt.
-
Wenn die 'Funktion-1' genannte Funktion ausgeführt wird,
werden ferner die Objekte A, B und C aus den Klassendaten A, B und
C erzeugt und einem Thread 154 zugewiesen. Gleichzeitig
speichert die ID-Liste laufender Threads (laufende Threads) eine
Identifizierungsinformation über
den den Objekten A, B und C zugewiesenen Thread 154.
-
Wenn der Name 'Funktion-1' spezifiziert
ist und eine Löschungs-Anforderung
für die
Klassendaten A, B und C ausgegeben wird, verweist in diesem Zustand
das Klassenverwaltungsobjekt 153 auf eine ID-Liste laufender
Threads (laufende Threads) und bestätigt die Nutzung der Klassendaten
A, B und C.
-
Da eine ID-Liste laufender Threads
(laufende Threads) in diesem Fall die Identifizierungsinformation über den
Thread 154 enthält,
wird erkannt, daß die
Klassendaten A, B und C gerade verwendet werden, wird eine Löschungs-Anforderung für die Klassendaten
A, B und C gehalten, wird ein Löschungs-Flag
(entfernbares Flag) auf WAHR gesetzt, und die Löschungs-Anforderung für die Klassendaten
A, B und C wird gespeichert.
-
Wenn die 'Funktion-1' genannte Funktion vollständig ausgeführt ist,
wird die Identifizierungsinformation über den Thread 154 aus
der ID-Liste laufender Threads (laufende Threads) gelöscht, und
das Klassenverwaltungsobjekt 153 bestätigt, ob eine Löschungs-Anforderung
für die
Klassendaten A, B und C ausgegeben wurde oder nicht, indem auf den
Zustand des Löschungs-Flag
verwiesen wird (entfernbares Flag).
-
Da das Löschungs-Flag (entfernbares
Flag) WAHR ist, werden zu dieser Zeit die Klassendaten A, B und
C erfolgreich gelöscht.
-
Wenn eine starke Löschungs-Anforderung ausgegeben
wird, wird die 'Funktion-1' genannte Funktion, die gerade ausgeführt wird,
suspendiert, um die Klassendaten A, B und C sofort zu löschen.
-
21 ist
ein Flußdiagramm,
das einen Klassendaten löschenden
Prozess zeigt.
-
Wenn die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n Klassendaten
löschen,
wird das remove()-Verfahren 26a aufgerufen.
-
In 21 werden
zuerst Zugriffsprivilegien zuerst auf die Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n geprüft (Schritt S81).
Falls keine Zugriffsprivilegien existieren, endet das Programm.
-
Als nächstes werden die Namen 'Funktion-1' bis
'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu löschenden
Klassendaten aus dem Argument des remove()-Verfahrens 26a erhalten
(Schritt S82), und die Namen 'Funktion-1' bis 'Funktion-m'
der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu löschenden
Klassendaten werden aus der Tabelle 23 für Klassenverwaltungsobjekte
wiedergewonnen (Schritt S83).
-
Dann wird geprüft, ob die Namen 'Funktion-1' bis
'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu löschenden
Klassendaten in der Tabelle 23 für
Klassenverwaltungsobjekte registriert sind oder nicht (Schritt S84).
Falls die Namen 'Funktion-1' bis 'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu löschenden
Klassendaten in der Tabelle 23 für
Klassenverwaltungsobjekte nicht registriert sind, wird eine Fehlermitteilung
ausgegeben, und der Prozess wird suspendiert (Schritt S85).
-
Falls die Namen 'Funktion-1' bis
'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum Verwalten
der zu löschenden
Klassendaten in der Tabelle 23 für
Klassenverwaltungsobjekte registriert sind, wird geprüft, ob die
ID-Liste 44 laufender Threads
leer ist oder nicht (Schritt S86). Falls die ID-Liste 44 laufender
Threads nicht leer ist, wird das Löschungs-Flag 42 der
Klassenverwaltungsobjekte 24a bis 24m auf WAHR
gesetzt (Schritt S87), dadurch den Löschungsprozess beendend (Schritt S88).
-
Falls die ID-Liste 44 laufender
Threads leer ist, wird geprüft,
ob die Liste 47 verwiesener Objekte ebenfalls leer ist
oder nicht (Schritt S89). Falls die Liste 47 verwiesener
Objekte nicht leer ist, wird eine Fehlermitteilung ausgegeben, und
ein Löschungsprozess
wird suspendiert (Schritt S90).
-
Falls die Liste 47 verwiesener
Objekte leer ist, wird geprüft,
ob die Referenzobjektliste 46 ebenfalls leer ist oder nicht
(Schritt S91). Falls die Referenzobjektliste 46 nicht
leer ist, wird dann die verwiesene Information über die Klassenverwaltungsobjekte 24a bis 24m aus
der Liste 47 verwiesener Objekte jedes der Klassenverwaltungsobjekte 24a bis 24m gelöscht, die
in der Referenzobjektliste 46 dargestellt sind (Schritt S92).
-
Falls auf der anderen Seite die Referenzobjektliste 46 leer
ist, spezifizieren die Klassenverwaltungsobjekte 24a bis 24m die
Klassendaten, die aus der Tabelle 25 gemeinsam genutzter Klassendaten gelöscht werden
sollen, indem auf die Klassennamenliste 45 verwiesen wird,
und löschen
die Klassendaten mit dem Klassennamen, der in der Klassennamenliste 45 der
Klassenverwaltungsobjekte 24a bis 24m registriert
ist, aus der Tabelle gemeinsam genutzter Klassendaten (Schritt S93).
-
Die Namen 'Funktion-1' bis 'Funktion-m'
der Klassenverwaltungsobjekte 24a bis 24m werden dann
aus der Tabelle 23 für
Klassenverwaltungsobjekte gelöscht,
und der Löschprozess
endet.
-
Im folgenden wird das Verfahren zum
Ersetzen der Klassendaten der Benutzerarbeitseinheitsklassen-Objekte 22a bis 22m beschrieben.
-
22 zeigt
den Zustand des Objekts einer Benutzerarbeitseinheitsklasse, wenn
eine Ersatz-Anforderung ausgegeben wird, wenn die Klassendaten verarbeitet
werden. In diesem Beispiel wird die 'Funktion-1' genannte Funktion
mit den Klassendaten A, B und C durch die 'Funktion-2' genannte
Funktion mit den Klassendaten D und E ersetzt.
-
In 22 wird
z. B. die Funktion mit den Klassendaten A, B und C als der Name
'Funktion-1' einem Benutzerarbeitseinheitsklassen-Objekt 161 hinzugefügt. Die
Klassendaten A, B und C werden in der Tabelle 165 gemeinsam ge nutzter
Klassendaten gespeichert, und ein Klassenverwaltungsobjekt 163 zum
Verwalten der Klassendaten A, B und C wird erzeugt.
-
Die Klassennamen A, B und C der jeweiligen Klassendaten
A, B und C, die durch das Klassenverwaltungsobjekt 163 verwaltet
werden, werden in der Klassennamenliste (Klassennamen) des Klassenverwaltungsobjekts 163 registriert,
und der Löschungs-Flag
(entfernbares Flag) wird auf FALSCH gesetzt. Die Tabelle lokaler
Klassendaten (lokale Klassen), die Referenzobjektliste (verweisend)
und die Liste verwiesener Objekte (verwiesen) sind Null.
-
Die Funktion 'Funktion-1' wird als
der Name des Klassenverwaltungsobjekts 163 in einer Tabelle 162
für Klassenverwaltungsobjekte
registriert. Entsprechend dem Namen 'Funktion-1' des Klassenverwaltungsobjekts 163 wird
ein Zeiger auf das Klassenverwaltungsobjekt 163 in der
Tabelle 162 für
Klassenverwaltungsobjekte erzeugt.
-
Wenn die 'Funktion-1' genannte Funktion ausgeführt wird,
werden überdies
die Objekte A, B und C aus den Klassendaten A, B und C erzeugt und einem
Thread 164 zugewiesen. Gleichzeitig speichert die ID-Liste
laufender Threads (laufende Threads) eine Identifizierungsinformation über den den
Objekten A, B und C zugewiesenen Thread 164.
-
Wenn der Name 'Funktion-1' spezifiziert
und eine Ersatz-Anforderung für
die Klassendaten A, B und C ausgegeben wird, verweist in diesem
Zustand das Klassenverwaltungsobjekt 163 auf eine ID-Liste laufender
Threads (laufende Threads) und bestätigt die Nutzung der Klassendaten
A, B und C.
-
Da eine ID-Liste laufender Threads
(laufende Threads) eine Identifizierungsinformation über den
Thread 164 enthält,
wird in diesem Fall erkannt, daß die
Klassendaten A, B und C gerade verwendet werden, wird die Ersatz-Anforderung für die Klassendaten
A, B und C gehalten, und die Klassendaten D und E, um die Klassendaten
A, B und C zu ersetzen, werden im Speicherbereich für Ersatz-Klassendaten (nächste Klassen)
gespeichert.
-
Wenn die 'Funktion-1' genannte Funktion vollständig ausgeführt ist,
wird die Identifizierungsinformation über den Thread 164 aus
der ID-Liste laufender Threads (laufende Threads) gelöscht, und
das Klassenverwaltungsobjekt 163 bestätigt, ob eine Ersatz-Anforderung
für die
Klassendaten A, B und C ausgege ben wurde oder nicht, indem auf den
Zustand des Speicherbereichs für
Ersatz-Klassendaten (nächste Klassen)
verwiesen wird.
-
Da der Speicherbereich für Ersatz-Klassendaten
(nächste
Klassen) die Klassendaten D und E speichert, werden in diesem Beispiel
die Klassendaten A, B und C durch die Klassendaten D und E erfolgreich
ersetzt.
-
Wenn eine starke Ersatz-Anforderung
ausgegeben wird, wird die 'Funktion-1' genannte Funktion, die gerade
ausgeführt
wird, suspendiert, um die Klassendaten A, B und C sofort zu ersetzen.
-
23 zeigt
den Zustand des Benutzerarbeitseinheitsklassen-Objekts nach dem
Ersatz der Klassendaten.
-
Wenn in 23 die Klassendaten A, B und C durch
die Klassendaten D und E ersetzt sind, werden die Klassendaten D
und E aus dem Speicherbereich für
Ersatz-Klassendaten (nächste
Klassen) des in 22 gezeigten
Klassenverwaltungsobjekts gelöscht,
und die Klassennamen A, B und C der Klassendaten A, B und C, die
in der in 22 gezeigten Klassennamenliste
(Klassennamen) registriert sind, werden durch die Klassennamen D
und E der Klassendaten D und E ersetzt. Somit wird das in 22 gezeigte Klassenverwaltungsobjekt 163 zu
einem Klassenverwaltungsobjekt 173 aktualisiert.
-
Die in der in 22 gezeigten Tabelle 165 gemeinsam genutzter
Klassendaten gespeicherten Klassendaten A, B und C werden durch
die Klassendaten D und E ersetzt, und die in 22 gezeigte Tabelle 165 gemeinsam genutzter
Klassendaten wird in eine in 23 gezeigte
Tabelle 174 gemeinsam genutzter Klassendaten aktualisiert.
-
Der Name 'Funktion-1' der Klassendaten
A, B und C, die in der in 22 gezeigten
Tabelle 162 für
Klassenverwaltungsobjekte registriert sind, wird durch den Namen
'Funktion-2' der Klassendaten D und E ersetzt, und die in 22 gezeigte Tabelle 162 für Klassenverwaltungsobjekte
wird in eine in 23 gezeigte
Tabelle 172 für
Klassenverwaltungsobjekte aktualisiert.
-
24 und 25 sind Flußdiagramme,
die den Klassendaten ersetzenden Prozess darstellen.
-
Wenn die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n den
Klassendaten löschenden
Prozess ausführen,
wird das set()-Verfahren aufgerufen.
-
In 24 werden
zunächst
Zugriffsprivilegien auf die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n geprüft (Schritt S101).
Falls keine Zugriffsprivilegien existieren, endet der Prozess.
-
Als nächstes werden die Namen 'Funktion-1' bis
'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu ersetzenden Klassendaten und neuer ersetzender
Klassendaten aus dem Argument des set()-Verfahrens 24d erhalten
(Schritt S102), und die Namen 'Funktion-1' bis 'Funktion-m' der
Klassenverwaltungsobjekte 24a bis 24m zum Verwalten
der zu ersetzenden Klassendaten werden aus der Tabelle 23 für Klassenverwaltungsobjekte wiedergewonnen
(Schritt S103).
-
Dann wird geprüft, ob die Namen 'Funktion-1' bis
'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu ersetzenden Klassendaten in der Tabelle 23 für Klassenverwaltungsobjekte
registriert sind oder nicht (Schritt S104). Falls die Namen
'Funktion-1' bis 'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu ersetzenden Klassendaten in der Tabelle 23 für Klassenverwaltungsobjekte
nicht registriert sind, wird eine Fehlermitteilung ausgegeben, und
der Prozess wird suspendiert (Schritt S105).
-
Falls die Namen 'Funktion-1' bis
'Funktion-m' der Klassenverwaltungsobjekte 24a bis 24m zum Verwalten
der zu ersetzenden Klassendaten in der Tabelle 23 für Klassenverwaltungsobjekte
registriert sind, wird geprüft,
ob die ID-Liste 44 laufender Threads leer ist oder nicht
(Schritt S106). Falls die ID-Liste 44 laufender Threads
nicht leer ist, werden die aus dem Argument des set()-Verfahrens erhaltenen
Klassendaten im Speicherbereich 43 für Ersatz-Klassendaten gespeichert (Schritt S107),
dadurch den ersetzenden Prozess beendend (Schritt S108).
-
Falls die ID-Liste 44 laufender
Threads leer ist, wird geprüft,
ob die Liste 47 verwiesener Objekte ebenfalls leer ist
oder nicht (Schritt S109). Falls die Liste 47 verwiesener
Objekte nicht leer ist, wird eine Fehlermitteilung ausgegeben, und
ein löschender Prozess
wird suspendiert (Schritt S110).
-
Falls die Liste 47 verwiesener
Objekte leer ist, wird geprüft,
ob die Referenzobjektliste 46 ebenfalls leer ist oder nicht
(Schritt S111). Falls die Referenzobjektliste 46 nicht
leer ist, wird dann die verwiesene Information über die Klassenverwaltungsobjekte 24a bis 24m aus
der Liste 47 verwiesener Objekte jedes der Klassenverwaltungsobjekte 24a bis 24m gelöscht, die
in der Referenzobjektliste 46 dargestellt sind (Schritt S112).
-
Falls auf der anderen Seite die Referenzobjektliste 46 leer
ist, spezifizieren die Klassenverwaltungsobjekte 24a bis 24m die
aus der Tabelle 25 gemeinsam genutzter Klassendaten zu löschenden Klassendaten
durch Verweisen auf die Klassennamenliste 45 und löschen die
Klassendaten mit dem Klassennamen, der in der Klassennamenliste 45 der Klassenverwaltungsobjekte 24a bis 24m registriert ist,
aus der Tabelle gemeinsam genutzter Klassendaten (Schritt S113).
-
Wie in 25 gezeigt
ist, werden durch die Ersatz-Anforderung spezifizierte neue Klassendaten in
die Tabelle 25 gemeinsam genutzter Klassendaten geschrieben (Schritt S114).
-
Dann wird bestimmt, ob der gleiche
Klassennamen in der Tabelle 25 gemeinsam genutzter Klassendaten
existiert oder nicht (Schritt S115). Falls der gleiche
Klassenname in der Tabelle 25 gemeinsam genutzter Klassendaten existiert,
während
die Klassendaten gerade geschrieben werden, werden die in der Tabelle
25 gemeinsam genutzter Klassendaten neu gespeicherten Klassendaten
gelöscht,
und die Tabelle 25 gemeinsam genutzter Klassendaten wird in ihrem
ursprünglichen
Zustand wiederhergestellt (Schritt S116), eine Fehlermitteilung
ausgegeben wird, und der Prozess endet (Schritt S117).
-
Falls der gleiche Klassenname in
der Tabelle 25 gemeinsam genutzter Klassendaten nicht existiert,
werden dann die Klassennamen aller Klassendaten, die der Tabelle
25 gemeinsam genutzter Klassendaten neu hinzugefügt wurden, in der Klassennamenliste 45 der
Klassenverwaltungsobjekte 24a bis 24m festgelegt
(Schritt S118).
-
Durch Prüfen der Klasse, die auf die
zur Tabelle 25 gemeinsam genutzter Klassendaten addierten Klassendaten
bezogen ist, wird dann eine Zielinformation in der Referenzobjektliste 46 der
Klassenverwaltungsobjekte 24a bis 24m festgelegt
(Schritt S119), und eine Quelleninformation wird in der
Liste 47 verwiesener Objekte der Klassenverwaltungsobjekte 24a bis 24m festgelegt
(Schritt S120), dadurch den Prozess beendend.
-
Im folgenden wird das Verfahren zum Fern-Verarbeiten
von Klassendaten in den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n beschrieben.
-
26 zeigt
den Zustand des Benutzerarbeitseinheitsklassen-Objekts, wenn die
Klassendaten aus der Ferne ausgewertet werden.
-
In 26 wird
zum Beispiel die Funktion mit den Klassendaten A, B und C als der
Name 'Funktion-1' einem Benutzerarbeitseinheitsklassen-Objekt 181 hinzugefügt. Die
Klassendaten A, B und C werden in einer Tabelle 185 gemeinsam genutzter
Klassendaten gespeichert, und ein Klassenverwaltungsobjekt 183 zum
Verwalten der Klassendaten A, B und C wird erzeugt.
-
Die Klassennamen A, B und C der jeweiligen Klassendaten
A, B und C, die durch das Klassenverwaltungsobjekt 183 verwaltet
werden, werden in der Klassennamenliste (Klassennamen) des Klassenverwaltungsobjekts 183 registriert,
und ein Löschungs-Flag
(entfernbares Flag) wird auf FALSCH gesetzt. Die Tabelle lokaler
Klassendaten (lokale Klassen), der Speicherbereich für Ersatz-Klassendaten (neue
Klassen), die ID-Liste laufender Threads (laufende Threads), die
Referenzobjektliste (verweisend) und die Liste verwiesener Objekte
(verwiesen) sind Null.
-
Die 'Funktion-1' wird als der Name
des Klassenverwaltungsobjekts 183 in einer Tabelle 182
für Klassenverwaltungsobjekte
registriert, und ein Zeiger auf ein Klassenverwaltungsobjekt 183 wird
in dem Klassenverwaltungsobjekt 183 entsprechend dem Namen
'Funktion-1' der Tabelle 182 für
Klassenverwaltungsobjekte erzeugt.
-
Wenn ein eval()-Verfahren 186 für das Objekt 183 einer
Benutzerarbeitseinheitsklasse unter Verwendung der Klassendaten
D, E und A als Argumente aufgerufen wird, wird ein Klassenverwaltungsobjekt 184 neu
erzeugt. Die Klassendaten D, E und A werden in der lokalen Klassentabelle
(lokale Klassen) des Klassenverwaltungsobjekts 184 gespeichert.
Die Klassennamenliste (Klassennamen) des Klassenverwaltungsobjekts 184 speichert
die Klassennamen D, E und A der Klassendaten D, E bzw. A.
-
Das Löschungs-Flag (entfernbares
Flag) des Klassenverwaltungsobjekts 184 wird auf FALSCH gesetzt,
und der Speicherbereich für
Ersatz-Klassendaten (nächste
Klassen), die ID-Liste laufender Threads (laufende Threads), die
Refe renzobjektliste (verweisend) und die Liste verwiesener Objekte
(verwiesen) sind Null.
-
Falls die Funktion der Klassendaten
D, E und A zu dem Benutzerarbeitseinheitsklassen-Objekt 181 addiert
wird, werden somit die Klassendaten D, E und A in der Tabelle lokaler
Klassendaten (lokale Klassen) des Klassenverwaltungsobjekts 184 gespeichert.
Selbst wenn die Klassendaten A in der Tabelle 185 gemeinsam genutzter
Klassendaten registriert sind, kann daher der Konflikt des gleichen
Klassennamens A in der Tabelle 185 gemeinsam genutzter Klassendaten
vermieden werden, und die Funktion der Klassendaten D, E und A kann
ausgeführt
werden.
-
Das Verfahren zum Speichern der Klassendaten
D, E und A in der Tabelle lokaler Klassendaten (lokale Klassen)
des Klassenverwaltungsobjekts 184 ist effektiv, wenn die
Häufigkeit
oder Frequenz der Verwendung der Funktion mit den Klassendaten D,
E und A niedrig ist oder wenn die Klassendaten, die verarbeitet
werden sollen, häufig
ergänzt
werden können.
-
27 zeigt
den Zustand des Benutzerarbeitseinheitsklassen-Objekts, wenn serialisierte
Daten aus der Ferner ausgewertet werden.
-
In 27 werden
die Klassendaten D in einer Tabelle 192 gemeinsam genutzter Klassendaten eines
Benutzerarbeitseinheitsklassen-Objekts 191 gespeichert
und als ein Objekt einer Klasse String und ein Objekt einer Klasse
Integer als Attribute aufweisend definiert. Ein Spezialfall 193 der
Klassendaten D wird in dem Benutzerarbeitseinheitsklassen-Objekt 191 erzeugt.
-
Wenn das Benutzerarbeitseinheitsklassen-Objekt 191 ein
eval()-Verfahren 195 eines Benutzerarbeitseinheitsklassen-Objekts 194 unter
Verwendung der Klassendaten D und des Spezialfalls 193 der
Klassendaten D als Argumente verwendend aufruft, serialisiert das
Benutzerarbeitseinheitsklassen-Objekt 191 den Spezialfall 193 der
Klassendaten D.
-
Die Klassendaten D und die serialisierten Daten
des Spezialfalls 193 werden dann als Argumente des eval()-Verfahrens
195 festgelegt und übertragen
'D' {Strings; Integer i;}, 'D', String, '19:50AM', Integer, '19:50AM'.
-
Wenn das eval()-Verfahren 195 aufgerufen wird,
erzeugt das Benutzerarbeitseinheitsklassen-Objekt 194 ein
Klassenverwaltungsobjekt 196 und speichert die Inhalte
{Strings; Integer i;} der Klassendaten in der Tabelle lokaler Klassendaten
(lokale Klassen) des Klassenverwaltungsobjekts 196 und speichert
den Klassennamen D der Klassendaten D in der Klassennamenliste (Klassennamen)
des Klassenverwaltungsobjekts 196.
-
Das Löschungs-Flag (entfernbares
Flag) des Klassenverwaltungsobjekts 196 wird auf FALSCH gesetzt,
und der Speicherbereich für
Ersatz-Klassendaten nächste
Klassen), die ID-Liste laufender Threads (laufende Threads), die
Referenzobjektliste (verweisend) und die Liste verwiesener Objekte
(verwiesen) sind Null.
-
Basierend auf den Klassendaten und
den serialisierten Daten des Spezialfalls 193 wird überdies ein
Spezialfall 197 erzeugt, der durch Wiederherstellen des
Spezialfalls 193 des Benutzerarbeitseinheitsklassen-Objekts 191 erhalten
wird, und die Klassendaten D und der Spezialfall 197 werden
verarbeitet.
-
Wenn das Benutzerarbeitseinheitsklassen-Objekt 194 von
einem anderen Benutzerarbeitseinheitsklassen-Objekt 191 die
Klassendaten und serialisierten Daten eines Objekts empfängt, das
aus den Klassendaten erzeugt wurde, erzeugt das Benutzerarbeitseinheitsklassen-Objekt 194 somit
kein neues Objekt aus den empfangenen Klassendaten, sondern das
Quellenobjekt wird aus den empfangenen Klassendaten und den serialisierten
Daten wiederhergestellt; dadurch kann in einem Fern-Ausführprozess
der Spezialfall 193 des anderen Benutzerarbeitseinheitsklassen-Objekts 191 verarbeitet
werden.
-
28 ist
ein Flußdiagramm,
das einen Prozess zur Fernauswertung zeigt.
-
Wenn die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n den
Klassendaten-Fernprozess ausführen,
wird das eval()-Verfahren aufgerufen.
-
In 28 werden
zuerst Zugriffsprivilegien auf die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n geprüft (Schritt S130).
Falls keine Privilegien existieren, endet der Prozess.
-
Als nächstes werden die Klassendaten
und die serialisierten Objektdaten aus dem Objekt des eval()-Verfahrens erhalten
(Schritt S131), um die Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der Klassendaten neu zu erzeugen und die Klassendaten
des Arguments in der Tabelle 41 lokaler Klassendaten der Klassenverwaltungsobjekte 24a bis 24m einzustellen
(Schritt S132).
-
Durch Prüfen der Klasse, die auf die
zu der Tabelle 41 lokaler Klassendaten addierten Klassendaten bezogen
ist, wird dann die Zielinformation in der Referenzobjektliste 46 der
Klassenverwaltungsobjekte 24a bis 24m festgelegt
(Schritt S133), und die Quelleninformation wird in der
Liste 47 verwiesener Objekte der verwiesenen Klassenverwaltungsobjekte 24a bis 24m festgelegt
(Schritt S134).
-
Eine ID eines laufenden Thread wird
zu der ID-Liste 44 laufender Threads der Klassenverwaltungsobjekte 24a bis 24m addiert,
und die ID eines laufenden Thread wird zu der ID-Liste 44 laufender Threads
der Klassenverwaltungsobjekte 24a bis 24m addiert,
die in der Referenzobjektliste 46 der Klassenverwaltungsobjekte 24a bis 24m dargestellt
sind (Schritt S135).
-
Es wird dann geprüft, ob serialisierte Objektdaten
in dem Argument des eval()-Verfahrens existieren oder
nicht (Schritt S136). Falls in dem Argument des eval()-Verfahrens keine
serialisierten Objektdaten existieren, wird dann ein Objekt aus
den zu verarbeitenden Klassendaten erzeugt, und das Objekt wird
verarbeitet (Schritt S137), und das Ende des Prozesses
an dem Objekt wird abgewartet (Schritt S139).
-
Falls in dem Argument des eval()-Verfahrens serialisierte
Objektdaten existieren, wird dann das Objekt unter Verwendung der
serialisierten Objektdaten und der Klassendaten in der Tabelle 41
lokaler Klassendaten wiederhergestellt, und das Objekt wird verarbeitet
(Schritt S138).
-
Wenn der Prozess abgeschlossen wird,
wird dann die ID eines laufenden Thread aus der ID-Liste 44 laufender
Threads der Klassenverwaltungsobjekte 24a bis 24m gelöscht, und
die ID eines laufenden Thread wird aus der ID-Liste 44 laufender
Threads der Klassenverwaltungsobjekte 24a bis 24m gelöscht, die
in der Referenzobjektliste 46 der Klassenverwaltungsobjekte 24a bis 24m dargestellt
sind (Schritt S140).
-
Die verwiesene Information über die
Klassenverwaltungsobjekte 24a bis 24m wird dann
aus der Liste 47 verwiesener Objekte von jedem der Klassenverwaltungsobjekte 24a bis 24m gelöscht, die
in der Referenzobjektliste 46 dargestellt sind (Schritt S141),
und die Klassenverwaltungsobjekte 24a bis 24m zum
Verwalten der zu löschenden
Klassendaten werden gelöscht
(Schritt S142).
-
29 zeigt
den Zustand des Benutzerarbeitseinheitsklassen-Objekts, wenn Klassendaten mit
einer Referenz- oder Verweisbeziehung aus der Ferne verarbeitet
werden.
-
In 29 wird
zum Beispiel die Funktion mit den Klassendaten A, B und C als der
Name 'Funktion-1' zu einem Benutzerarbeitseinheitsklassen-Objekt 201 addiert.
Die Klassendaten A, B und C werden in einer Tabelle 206 gemeinsam
genutzter Klassendaten gespeichert, und ein Klassenverwaltungsobjekt 203 zum
Verwalten der Klassendaten A, B und C wird erzeugt.
-
Die Klassennamen A, B und C der jeweiligen Klassendaten
A, B und C, die durch das Klassenverwaltungsobjekt 203 verwaltet
werden, werden in der Klassennamenliste (Klassennamen) des Klassenverwaltungsobjekts 203 registriert.
Das Löschungs-Flag (entfernbares
Flag) wird auf FALSCH gesetzt, und die Tabelle lokaler Klassendaten
(lokale Klassen), der Speicherbereich für Ersatz-Klassendaten (nächste Klassen), die ID-Liste
laufender Threads (laufende Threads) und die Referenzobjektliste
(verweisend) sind Null.
-
Die 'Funktion-1' wird als der Name
des Klassenverwaltungsobjekts 203 in einer Tabelle 202
für Klassenverwaltungsobjekte
registriert. Entsprechend dem Namen 'Funktion-1' des Klassenverwaltungsobjekts 203 wird
in der Tabelle 202 für
Klassenverwaltungsobjekte ein Zeiger auf das Klassenverwaltungsobjekt 203 erzeugt.
-
Ferner wird eine Funktion, die 'Funktion-4' genannt
wird und die Klassendaten D aufweist, zu dem Benutzerarbeitseinheitsklassen-Objekt 201 addiert.
Die Klassendaten D werden in der Tabelle 206 gemeinsam genutzter
Klassendaten gespeichert, und ein Klassenverwaltungsobjekt 204 zum
Verwalten der Klassendaten D wird erzeugt.
-
Der Klassenname D der Klassendaten
D, die durch das Klassenverwaltungsobjekt 204 verwaltet werden,
werden in der Klassennamenliste (Klassennamen) des Klassenverwaltungsobjekts 204 registriert.
Das Löschungs-Flag
(entfernbares Flag) wird auf FALSCH gesetzt, und die Tabelle lokaler
Klassendaten (lokale Klassen), der Speicherbereich für Ersatz-Klassendaten
(nächste
Klassen), die ID-Liste laufender Threads (laufende Threads) und
die Liste verwiesener Objekte (verwiesen) sind Null.
-
Die 'Funktion-4' wird als der Name
des Klassenverwaltungsobjekts 204 in einer Tabelle 202
für Klassenverwaltungsobjekte
registriert. Entsprechend dem Namen 'Funktion-4' des Klassenverwaltungsobjekts 204 wird
in der Tabelle 202 für
Klassenverwaltungsobjekte ein Zeiger auf das Klassenverwaltungsobjekt 204 erzeugt.
-
Man nehme an, daß die Klassendaten D wie folgt
auf z. B. der Existenz der Klassendaten A und B basieren.
-
-
Die Referenzobjektliste (verweisend)
des Klassenverwaltungsobjekts 204 speichert die Referenzinformation über das
Klassenverwaltungsobjekt 203 zum Verwalten der verwiesenen
Klassendaten A und B, und die Liste verwiesener Objekte (verwiesen) des
Klassenverwaltungsobjekts 203 speichert die verwiesene
Information über
das Klassenverwaltungsobjekt 204, das die verweisenden
Klassendaten D verwaltet.
-
Die Beziehung beim Aufrufen einer
Klasse kann z. B. in der Sprache JAVA unter Verwendung von getDeclarClasses
(), was ein Klassen-Verfahren ist, geprüft werden.
-
Wenn das Benutzerarbeitseinheitsklassen-Objekt 201 eine
Anforderung, die Klassendaten D mit dem spezifizierten Namen 'Funktion-4'
aus der Ferne zu verarbeiten, ausgibt, wird in diesem Zustand ein
Thread 205 erzeugt, werden die Klassendaten zusammen mit
den Klassendaten A, B und C übertragen,
die durch das Klassenverwaltungsobjekt 203 verwaltet werden,
das in der Referenzobjektliste (verweisend) des Klassenverwaltungsobjekts 204 dargestellt
ist.
-
Die Klassendaten A, B und C, die
durch Klassenverwaltungsobjekt 203 verwaltet werden, und
die durch das Klassenverwaltungsobjekt 204 verwalteten
Klassendaten werden in der Tabelle 206 gemeinsam genutzter Klassendaten
des Benutzerarbeitseinheitsklassen-Objekts 201 gespeichert
und durch das glei che Benutzerarbeitseinheitsklassen-Objekt 201 verwaltet.
Daher können
die Klassendaten A und B, auf die durch die Klassendaten d verwiesen
wird, einfach erhalten werden.
-
Die Beziehung beim Aufrufen einer
aus der Ferne zu verarbeitenden Klasse und einer anderen Klasse,
die erforderlich ist, wenn die Klassen verarbeitet werden, wird
somit vor dem Transfer der Klassendaten geprüft. Wenn die aus der Ferne
zu verarbeitenden Klassendaten übertragen
werden, werden die anderen Klassendaten, die beim Verarbeiten der Klassendaten
erforderlich sind, zusammen übertragen.
Als Folge kann die Last des Prozesses am Ziel reduziert werden,
besonders wenn Klassendaten als z. B. in einem verteilten System
etc. verteilt gespeichert sind.
-
30 zeigt
den Zustand des Benutzerarbeitseinheitsklassen-Objekts, wenn überlappende Klassendaten
aus der Ferne ausgewertet werden.
-
In 30 wird
z. B. eine Funktion, die als 'Funktion-5' bezeichnet wird und die
Klassendaten A, D und E umfaßt,
zu dem Benutzerarbeitseinheitsklassen-Objekt 211 addiert. Die Klassendaten
A, D und E werden in der Tabelle 214 gemeinsam genutzter Klassendaten
gespeichert, und ein Klassenverwaltungsobjekt 213 zum Verwalten
der Klassendaten A, D und E wird erzeugt.
-
Die Klassennamen A, D und E der jeweiligen Klassendaten
A, D und E, die durch das Klassenverwaltungsobjekt 213 verwaltet
werden, werden in der Klassennamenliste (Klassennamen) des Klassenverwaltungsobjekts 213 registriert.
Das Löschungs-Flag (entfernbares
Flag) wird auf FALSCH gesetzt, und die Tabelle lokaler Klassendaten
(lokale Klassen), der Speicherbereich für Ersatz-Klassendaten (nächste Klassen), die ID-Liste
laufender Threads (laufende Threads), die Referenzobjektliste (verweisend)
und die Liste verwiesener Objekte (verwiesen) sind Null.
-
Die 'Funktion-5' wird als der Name
des Klassenverwaltungsobjekts 213 in einer Tabelle 212
für Klassenverwaltungsobjekte
registriert. Entsprechend dem Namen 'Funktion-5' des Klassenverwaltungsobjekts 213 wird
in der Tabelle 212 für
Klassenverwaltungsobjekte ein Zeiger auf das Klassenverwaltungsobjekt 213 erzeugt.
-
Überdies
wird eine Funktion, die 'Funktion-1' genannt wird und die Klassendaten
A, B und C umfaßt,
zum Objekt 215 einer Benutzerarbeitseinheitsklas se addiert.
Die Klassendaten A, B und C werden in der Tabelle 218 gemeinsam
genutzter Klassendaten gespeichert, und ein Klassenverwaltungsobjekt 217 zum
Verwalten der Klassendaten A, B und C wird erzeugt.
-
Die Klassennamen A, B und C der jeweiligen Klassendaten
A, B und C, die durch das Klassenverwaltungsobjekt 217 verwaltet
werden, werden in der Klassennamenliste (Klassennamen) des Klassenverwaltungsobjekts 217 registriert.
Das Löschungs-Flag (entfernbares
Flag) wird auf FALSCH gesetzt, und die Tabelle lokaler Klassendaten
(lokale Klassen), der Speicherbereich für Ersatz-Klassendaten (nächste Klassen), die ID-Liste
laufender Threads (laufende Threads), die Referenzobjektliste (verweisend)
und die Liste verwiesener Objekte (verwiesen) sind Null.
-
Der Name 'Funktion-1' wird als der
Name des Klassenverwaltungsobjekts 217 in einer Tabelle 216
für Klassenverwaltungsobjekte
registriert. Der Zeiger auf das Klassenverwaltungsobjekt 217 wird
in der Tabelle 216 für
Klassenverwaltungsobjekte entsprechend dem Namen 'Funktion-1' des
Klassenverwaltungsobjekts 217 erzeugt.
-
Wenn das Benutzerarbeitseinheitsklassen-Objekt 211 die
'Funktion-5' genannte Funktion durch Benutzerarbeitseinheitsklassen-Objekt 215 aus
der Ferne ausführt,
wird abgefragt, ob die Klassen D, E und A, die die 'Funktion-5'
genannte Funktion bilden, in der Tabelle 218 gemeinsam genutzter Klassendaten
des Benutzerarbeitseinheitsklassen-Objekts 215 existieren
oder nicht.
-
Das Benutzerarbeitseinheitsklassen-Objekt 215 prüft, ob die
Klassendaten D, E und A in der Tabelle gemeinsam genutzter Klassendaten
existieren oder nicht. Unter den Klassendaten D, E und A wird erkannt,
daß die
Klassendaten A in der Tabelle 218 gemeinsam genutzter Klassendaten
existieren. Die Information über
die Existenz der Klassendaten A wird dann an das Benutzerarbeitseinheitsklassen-Objekt 211 zurückgegeben.
-
Wenn das Benutzerarbeitseinheitsklassen-Objekt 211 über die
Existenz der Klassendaten A informiert wird, transferiert es von
den Klassendaten D, E und A, die zum Benutzerarbeitseinheitsklassen-Objekt 215 übertragen
werden sollen, nur die Klassendaten D und E zum Benutzerarbeitseinheitsklassen-Objekt 215.
-
Das Benutzerarbeitseinheitsklassen-Objekt 215 nutzt
die vom Benutzerarbeitseinheitsklassen-Objekt 211 übertragenen
Klassendaten D und E und nutzt auch die in der Tabelle 218 gemeinsam
genutzter Klassendaten gespeicherten Klassendaten A, dadurch die
'Funktion-5' genannte Funktion ausführend.
-
Somit ist es nicht notwendig, die
in der hierzu transferierten Tabelle gemeinsam genutzter Klassendaten
gespeicherten Klassendaten zu übertragen, wenn
eine Fern-Auswertung durchgeführt
wird, und der Transferumfang der Klassendaten kann reduziert werden.
-
Im folgenden wird das Verfahren zum
Wiedergewinnen oder Auslesen von Klassendaten durch die Benutzerarbeitseinheitsklassen-Objekte 22a bis 22n beschrieben.
-
Die Klassenverwaltungsobjekte 24a bis 24m haben
die Klassensuchfunktion 48 und rufen das Verfahrend loadClass()
der Klassenverwaltungsobjekte 24a bis 24m auf,
wenn ein Objekt aus den Klassendaten erzeugt wird, die zu den Benutzerarbeitseinheitsklassen-Objekten 22a bis 22n addiert
wurden, oder wenn ein Objekt aus den im Verfahren des Objektes deklarierten
Klassendaten erzeugt wird.
-
31 ist
ein Flußdiagramm,
das den Klassen auslesenden oder wiedergewinnenden Prozess darstellt.
-
In 31 wird
der Klassenname der wiederzugewinnenden Klassendaten aus den Argumenten des
Verfahrens loadClass() abgerufen (Schritt S151), und die
Tabelle 41 lokaler Klassendaten wird durchsucht (Schritt S152).
Das Ergebnis des Durchsuchens der Tabelle 41 lokaler Klassendaten
wird dann geprüft
(Schritt S153). Wenn die auszulesenden Klassendaten gefunden
sind, werden die Klassendaten als ein Rückkehrwert zurückgeleitet
(Schritt S158).
-
Falls die auszulesenden Klassendaten
in der Tabelle 41 lokaler Klassendaten nicht gefunden werden, wird
die Tabelle 25 gemeinsam genutzter Klassendaten durchsucht (Schritt 154).
Das Ergebnis eines Durchsuchens der Tabelle 25 gemeinsam genutzter
Klassendaten wird dann geprüft.
Wenn die auszulesenden Klassendaten gefunden sind, werden die Klassendaten
als ein Rückkehrwert
zurückgeleitet
(Schritt S158).
-
Falls die auszulesenden Klassendaten
in der Tabelle 25 gemeinsam genutzter Klassendaten nicht gefunden
werden, werden die Bibliothek 31 von Be nutzerarbeitseinheitsklassen
und die Bibliothek 32 von Systemklassen durchsucht (Schritt S156).
Das Ergebnis eines Durchsuchens der Bibliothek 31 für Benutzerarbeitseinheitsklassen
und der Bibliothek 32 für
Systemklassen wird dann geprüft
(Schritt S157). Falls die auszulesenden oder wiederzugewinnenden Klassendaten
gefunden werden, werden die Klassendaten als ein Rückkehrwert
zurückgeleitet
(Schritt S158).
-
Falls die auszulesenden Klassendaten
in der Bibliothek 31 für
Benutzerarbeitseinheitsklassen oder der Bibliothek 32 für Systemklassen
nicht gefunden werden, wird dann eine Fehlermitteilung ausgegeben,
und der Prozess endet (Schritt S159).
-
Wie oben beschrieben wurde, wird
gemäß der vorliegenden
Erfindung eine Benutzerarbeitseinheitsklasse mit verteilten Objekten
mit den Funktionen zum Ersetzen und Fern-Verarbeiten von Klassendaten
versehen. Daher kann ein flexibles verteiltes Objektsystem einfach
betrieben werden, und ein Entwickler kann diese Funktion einfach
und sicher ohne Kenntnis der Klassenverwaltung nutzen.
-
Die vorliegende Erfindung ist oben
beschrieben, ist aber nicht auf die oben beschriebenen Ausführungsformen
beschränkt,
und kann im technologischen Konzept der vorliegenden Erfindung variiert werden.
-
In einer Ausführungsform der Erfindung, wie sie
oben beschrieben wurde, kann ein Programm für jedes Stück von Klassendaten mit addierten
Nutzungsdaten des Programms überwacht
werden. Als Folge können
Klassendaten, die gerade genutzt werden, erkannt werden, während das
Programm betrieben wird, und ein Teil des Programmcodes kann während der
Ausführung
des Programms gelöscht
oder ersetzt werden.
-
Selbst wenn eine Prozessanforderung
zur Löschung,
zum Ersatz etc. an ein gerade ausgeführtes Programm ausgegeben wird,
kann das Programm gelöscht
oder ersetzt werden, ohne die Operation des Programms zu stoppen,
wodurch die Last des Programmierers reduziert wird, wenn das Programm
kundenspezifisch angepasst wird.
-
Ein monitor- oder Überwachungsobjekt
zum Überwachen
der Nutzung von Klassendaten ist in einem zu überwachenden Objekt vorgesehen.
Die Funktion zum Überwachen
eines Programms kann zu dem zu überwachenden
Programm leicht addiert werden, die Nutzung des Programms kann einfach überwacht
werden, ohne Kenntnis des Programmierers über die Klassenverwaltung,
und ein Teil des Programmcodes kann gelöscht oder ersetzt werden, während das
Programm gerade läuft.
-
Ein Überwachungsobjekt kann jedesmal
erzeugt werden, wenn eine Additions-Anforderung von Klassendaten
ausgegeben wird. Ein Programm kann für jede Funktion überwacht
werden, die zu dem Programm neu addiert wurde und, wenn das Programm gerade
läuft,
kann bestimmt werden, welche Funktion des Programms gerade genutzt
wird. Daher kann allein ein Spezifizieren der Funktion eines Teils
des Programms die Funktion des Programms löschen oder ersetzen, während das
Programm gerade läuft.
-
Falls eine Identifizierungsinformation über ein
Klassenverwaltungsobjekt gespeichert ist, löscht dann nur ein Spezifizieren
einer Identifizierungsinformation wie z. B. eines Namens eines Klassenverwaltungsobjekts
etc. einen Teil eines Programmcodes oder ersetzt diesen, während das
Programm gerade läuft,
wodurch die Last des Programmierers reduziert wird, wenn er das
Programm kundenspezifisch anpaßt.
-
Ein Klassenverwaltungsobjekt kann
eine Tabelle lokaler Klassendaten zum Speichern von Klassendaten
enthalten, die für
das Klassenverwaltungsobjekt spezifisch sind. Selbst wenn es einen
Konflikt zwischen den von einem anderen Objekt übertragenen Klassendaten und
den Klassendaten, die gerade durch ein Klassenverwaltungsobjekt
verwaltet werden, gibt, können
die von einem anderen Objekt übertragenen
Klassendaten und die Klassendaten, die durch ein Klassenverwaltungsobjekt
gerade verwaltet werden, unabhängig
gespeichert werden, und ein Benutzerarbeitseinheitsklassen-Objekt
kann aus der Ferne die Klassendaten auswerten, die von einem anderen
Objekt übertragen
wurden.
-
Eine Anforderung zur Löschung von
Klassendaten kann gespeichert und akzeptiert werden, während die
durch die Anforderung zur Löschung von
Daten spezifizierten Klassendaten gerade genutzt werden. Als Folge
ist es nicht notwendig, eine Anforderung zur Löschung von Klassendaten erneut auszugeben,
nachdem die Anforderung einmal zurückgewiesen ist. Wenn die Klassendaten
gelöscht werden,
kann daher die Last des Programmierers reduziert werden.
-
Neue Klassendaten können gespeichert werden,
wenn eine Ersatz-Anforderung
ausgegeben wird, und eine Anforderung zum Ersatz von Klassendaten
kann akzeptiert werden, während
die durch die Anforderung zum Ersatz von Klassendaten spezifizierten
Klassendaten gerade genutzt werden. Als Folge ist es nicht notwendig,
eine Anforderung zum Ersatz von Klassendaten erneut auszugeben,
nachdem die Anforderung einmal zurückgewiesen ist. Wenn die Klassendaten
ersetzt werden, kann daher die Last des Programmierers reduziert
werden.
-
Falls ein Thread, der Klassendaten
gerade verarbeitet, gespeichert ist, bestimmt allein ein Verweisen
auf die Liste laufender Threads, ob Klassendaten, die gerade verarbeitet
werden, existieren oder nicht, und die Nutzung der Klassendaten
kann einfach geprüft
werden.
-
Falls ein den addierten Klassendaten
entsprechender Klassenname gespeichert ist, kann dann das Klassenverwaltungsobjekt
einfach die von ihm selbst verwalteten Klassendaten prüfen und kann
Klassendaten für
jedes Stück
addierter Klassendaten verarbeiten.
-
Die Referenz von Klassendaten kann
in einem Klassenverwaltungsobjekt gespeichert werden. Ein Prozess
kann unter Berücksichtigung
der Referenzen oder Verweise der Klassendaten an Klassendaten durchgeführt werden,
und der Programmierer muß die
Referenzbeziehung der Klassendaten nicht erkennen. Daher kann das
Programm einfach kundenspezifisch angepasst werden.
-
Ein Benutzerarbeitseinheitsklassen-Objekt enthält eine
Zugriffssteuerklasse zum Prüfen
von Zugriffsprivilegien von einem anderen Objekt einer Benutzerarbeitseinheitsklasse.
Ein Benutzerarbeitseinheitsklassen-Objekt kann ein auf einer Zugriffssteuerklasse
basierendes Zugriffssteuerobjekt erzeugen, wenn ein anderes Benutzerarbeitseinheitsklassen-Objekt
Zugriff erlangt. Jedesmal wenn ein Benutzerarbeitseinheitsklassen-Objekt
Zugriff erlangt, können
daher Zugriffsprivilegien geprüft
werden, und eine Zugriffsbedingung kann für jedes Benutzerarbeitseinheitsklassen-Objekt
einfach ergänzt
werden, wodurch die Sicherheit der Schnittstelle beim Addieren zum
oder Aktualisieren eines Programmcodes verbessert wird.
-
Klassennamen von Klassendaten sind
voneinander verschieden. Ein Konflikt in der gleichen Klasse in
der Tabelle gemeinsam genutzter Klassendaten kann vermieden werden.
-
Wenn eine Anforderung, die verwiesenen Klassendaten
zu löschen
oder zu ersetzen, ausgegeben wird, während die verweisenden Klassendaten gerade
verarbeitet werden, kann die Löschung
oder der Ersatz der verwiesenen Klassendaten bis zum Ende des Prozesses
der verwiesenen Klassendaten vorübergehend
gehalten werden, wodurch ein nicht erfolgreiches Beenden des Prozesses
an den Klassendaten vermieden wird.
-
Nach Abschließen der Funktion eines Teils eines
Programms, die in einer Löschungs-
oder Ersatz-Anforderung spezifiziert wurde, kann die Funktion des
Teils des Programms gelöscht
oder ersetzt werden. Daher kann ein Suspendieren des gerade ausgeführten Programms
oder ein Reaktivieren des Programms vermieden werden, wenn die Funktion des
Teils des Programms gelöscht
oder ersetzt wird.
-
Eine Ausführungsform der vorliegenden
Erfindung speichert Klassendaten, die von einem anderen Benutzerarbeitseinheitsklassen-Objekt übertragen
wurden, in einer Tabelle lokaler Klassendaten eines Klassenverwaltungsobjekts.
Eine Fern-Auswertung kann somit durch ein Benutzerarbeitseinheitsklassen-Objekt sanft oder
reibungslos ausgeführt werden,
so daß ein
Konflikt zwischen den Klassendaten und den für das Klassenverwaltungsobjekt
schon gespeicherten Klassendaten vermieden werden kann.
-
Basierend auf Klassendaten und serialisierten
Daten eines Objekts, erzeugt aus den Klassendaten, kann das aus
der Klassendaten erzeugte Objekt wiederhergestellt werden.
-
Somit wird das aus den Klassendaten
erzeugte Objekt serialisiert und übertragen, werden die serialisierten
Daten auf einer Empfangsseite wiederhergestellt, und das Objekt
kann aus der Ferne ausgewertet werden.
-
Klassendaten, auf die durch die zu
verarbeitenden Klassendaten verwiesen wurde, werden übertragen,
um eine Fernauswertung für
Klassendaten mit einer Referenzbeziehung auszuführen.
-
Durch Übertragen von Klassendaten,
die in einem Benutzerarbeitseinheitsklassen-Objekt an einem Bestimmungsziel
nicht existieren, kann der Umfang von Datenübertragungen in einer Fern-Auswertung
reduziert werden, und die Geschwindigkeit einer Fern-Ausführung kann
gesteigert werden.