Informationen für Fortgeschrittene

Wenn Sie Synchronisierungsunterstützung anbieten wollen, aber über keinen Mechanismus zur Verwaltung des Synchronisierungsstatus verfügen, bietet Ihnen dieser Abschnitt eine Anleitung für die Erstellung eines Subskribenten von Grund auf. Dies bedeutet, dass keine Synchronisierungsinfrastruktur vorausgesetzt wird. Es wird gezeigt, wie ein Teil der bereitgestellten API für die Verwaltung des Synchronisierungsstatus verwendet werden kann.

Für den Rest dieses Beispiels wird ein laufendes Beispiel verwendet. Der Quellcode kann im Paket 'Dateisystem-Provider' des Plug-ins org.eclipse.team.examples.filesystem gefunden werden. Sie sollten das Projekt aus dem CVS-Repository entnehmen und während dieses Lernprogramms als Referenz verwenden.

Subskribenten von Grund auf implementieren

In diesem ersten Beispiel wird angenommen, dass keine Infrastruktur für die Verwaltung des Synchronisierungsstatus des lokalen Arbeitsbereichs zur Verfügung steht. Wenn Sie einen Subskribenten von Grunde auf implementieren, können Sie einen Teil der zusätzlichen API verwenden, die im Plug-in org.eclipse.team.core zur Verfügung gestellt wird. Das Paket org.eclipse.team.core.variants enthält zwei Unterklassen des Subskribenten , die die Implementierung erleichtern. Die erste ist der im zweiten Beispiel unten erläuterte ResourceVariantTreeSubscriber . Die zweite Klasse ist eine Unterklasse der ersten: ThreeWaySubscriber. Diese Subskribentenimplementierung bietet mehrere hilfreiche Klassen für die Verwaltung des Synchronisierungsstatus eines lokalen Arbeitsbereichs. Wenn Ihnen keine Infrastruktur zur Verfügung steht, ist dies ein guter Einstiegspunkt.

Die Implementierung eines Subskribenten von Grund auf wird anhand des Dateisystembeispiels aus dem Plug-in org.eclipse.team.examples.filesystem verdeutlicht. In der folgenden Beschreibung ist der Code auf einem Minimum gehalten, da er im Eclipse-CVS-Repository zur Verfügung steht. Auch wenn es sich genaugenommen nicht um einen Dreiwege-Subskribenten handelt, kann das Dateisystembeispiel diese Infrastruktur sinnvoll einsetzen. Die Plug-ins FTP und WebDAV werden auch anhand dieser Infrastruktur erstellt.

ThreeWaySubscriber

Für das Dateisystembeispiel wurde bereits eine Implementierung eines RepositoryProviders erstellt, die einem lokalen Projekt eine Dateisystemposition zuordnet und die lokalen Inhalte spiegelt. FileSystemSubscriber wurde als Unterklasse von ThreeWaySubscriber erstellt, um ThreeWaySynchronizer für die Verwaltung des Synchronisierungsstatus des Arbeitsbereichs zu verwenden. Unterklassen dieser Klasse müssen Folgendes ausführen:

Neben der Implementierung des Subskribenten wurden die Operationen 'get' und 'put' des Dateisystem-Providers so geändert, dass sie den Synchronisierungsstatus in ThreeWaySynchronizer aktualisieren. Die Operationen sind in der Klasse "org.eclipse.team.examples.filesystem.FileSystemOperations implementiert".

ThreeWaySynchronizer

ThreeWaySynchronizer verwaltet den Synchronisierungsstatus zwischen dem lokalen Arbeitsbereich und einer fernen Datenstation. Es erstellt einen Zwischenspeicher für die lokalen, zugrundeliegenden und fernen Zeitmarken und stellt sicher, dass sie bestehen bleiben. Hierdurch wird die effiziente Berechnung des Synchronisierungsstatus einer Ressource unterstützt. Außerdem schickt es Benachrichtigungen an registrierte Listener-Funktionen. Der ThreeWaySubscriber übersetzt diese Änderungsereignisse in das richtige Format, so dass sie an die Listener-Funktionen übermittelt werden können, die beim Subskribenten registriert sind.

Der ThreeWaySynchronizer verwendet Zeitplanungsregeln und Sperren des Kerns, um Thread-Sicherheit zu gewährleisten und eine Zusammenfassung von Änderungshinweisen zu unterstützen.

ThreeWayRemoteTree

ThreeWayRemoteTree ist eine Unterklasse der Klasse ResourceVariantTree, die auf ThreeWaySubscriber zugeschnitten ist. Clienten müssen diese Klasse überschreiben, um einen Mechanismus anzubieten, der den fernen Status vom Server abruft. ResourceVariantTree wird im nächsten Abschnitt noch eingehend erläutert.

CachedResourceVariant

CachedResourceVariant ist eine Teilimplementierung von IResourceVariant, die abgerufenen Inhalte über einen bestimmten Zeitraum (zur Zeit eine Stunde) zwischenspeichert. Dies ist deswegen hilfreich, weil Inhalte innerhalb eines kurzen Zeitraums mehrfach abgerufen werden können (um beispielsweise den Synchronisierungsstatus zu bestimmen und die Inhalte in einem Vergleichseditor darzustellen). Unterklassen müssen immer noch die eindeutige Inhaltskennung angeben, zusammen mit einer Bytefeldgruppe, die bestehen bleiben kann, um die Ressourcenvariantenkennung erneut zu erstellen.

Auf der bestehenden Arbeitsbereichsynchronisierung aufbauen

Viele Repository-Provider verfügen möglicherweise bereits über einen Mechanismus für die Verwaltung des Synchronisierungsstatus (wenn sie beispielsweise bestehende Plug-ins haben). ResourceVariantTreeSubscriber und die zugehörigen Klassen bieten die Möglichkeit, auf einer bestehende Synchronisierungsinfrastruktur aufzubauen. Dies ist beispielsweise die Superklasse aller CVS-Subskribenten.

ResourceVariantTreeSubscriber

Wie bereits im vorherigen Beispiel erwähnt, ist ThreeWaySubscriber eine Unterklasse der Klasse ResourceVariantTreeSubscriber, die über ThreeWaySynchronizer eine lokale Arbeitsbereichsynchronisierung anbietet. Unterklassen von ResourceVariantTreeSubscriber müssen folgendes bereitstellen:

Die anderen Fähigkeiten des Subskribenten werden über diese Funktionen implementiert.

ResourceVariantTree

ResourceVariantTree ist eine konkrete Implementierung von IResourceVariantTree und stellt Folgendes bereit:

Die Unterklassen müssen Folgendes implementieren:

Konkrete Implementierungen von ResourceVariantByteStore werden bereitgestellt, die Bytes über mehrere Workbench-Aufrufe hinweg erhalten (PersistantResourceVariantByteStore) oder nur für die aktuelle Sitzung zwischenspeichern (SessionResourceVariantByteStore). Wird ein Subskribent basierend auf einer bestehenden Synchronisierungsinfrastruktur des Arbeitsbereichs erstellt, müssen normalerweise Unterklassen des Typs ResourceVariantByteStore implementiert werden, die eine Schnittstelle zum zu Grunde liegenden Synchronisierungsprogramm bieten. ThreeWayRemoteTree verwendet beispielsweise eine Bytespeicherimplementierung, die ferne Bytes in der Funktion ThreeWaySynchronizer speichert.

Der in diesem Beispiel verwendete Erstellungsprozess für Ressourcenvariantenkennungen unterscheidet sich vom vorherigen Beispiel nur dahingehend, als dass die Kennungen von einem Exemplar der Baumstruktur für Ressourcenvarianten und nicht vom Subskribenten angefordert werden.