Kudy dál

Chcete-li poskytovat podporu pro synchronizaci, ale dosud nemáte mechanizmus pro řízení stavu synchronizace, v této sekci najdete pokyny jak implementovat Odběratele zcela od nuly. To znamená, že dosud neexistuje žádná infrastruktura pro synchronizaci a uvidíte zde, jak použít rozhraní API, které se poskytuje pro udržování stavu synchronizace.

Po zbytek tohoto příkladu využijeme již běžící příklad. Zdrojový kód můžete najít v balíčku poskytovatele systému souborů modulu plug-in org.eclipse.team.examples.filesystem. Při čtení tohoto návodu byste měli přezkoušet projekt z úložiště CVS a použít jako odkaz.

Implementace odběratele od začátku

V prvním příkladu se předpokládá, že dosud neexistuje žádná infrastruktura pro udržování stavu synchronizace lokálního pracovního prostoru. Při implementaci odběratele od začátku můžete využít další rozhraní API poskytované v modulu plug-in org.eclipse.team.core. Balíček org.eclipse.team.core.variants obsahuje dvě podtřídy třídy Subscriber , které lze použít pro usnadnění implementace. První podtřídou je ResourceVariantTreeSubscriber , o které pojednává druhý příklad uvedený níže. Druhá podtřída je podtřídou první podtřídy: ThreeWaySubscriber. Tato implementace odběratele poskytuje několik užitečných tříd pro správu stavu synchronizace lokálního pracovního prostoru. Nemáte-li dosud žádnou infrastrukturu, je to dobré místo kde začít.

Implementace odběratele od začátku bude ilustrována na příkladu systému souborů, jenž je k dispozici v modulu plug-in org.eclipse.team.examples.filesystem. Kód v následujícím popisu je maximálně zkrácen, protože je k dispozici v úložišti CVS produktu Eclipse. Přestože se technicky nejedná o trojstranného odběratele, příklad systému souborů může i tak tuto infrastrukturu s výhodou využít. Na této infrastruktuře jsou rovněž postaveny moduly plug-in FTP a WebDAV.

Trojstranný odběratel ThreeWaySubscriber

Pro příklad systému souborů jsme již měli implementaci RepositoryProvider , který asocioval lokální projekt s umístěním systému souborů, kde byl zrcadlen lokální obsah. Odběratel FileSystemSubscriber byl vytvořen jako podtřída třídy ThreeWaySubscriber, aby bylo možné využít třídu ThreeWaySynchronizer pro správu stavu synchronizace pracovního prostoru. Podtřídy této třídy musí učinit následující:

Kromě implementace odběratele byly upraveny operace get a put pro poskytovatele systému souborů, aby byl aktualizován stav synchronizace v ThreeWaySynchronizer. Operace jsou implementovány ve třídě org.eclipse.team.examples.filesystem.FileSystemOperations.

ThreeWaySynchronizer

ThreeWaySynchronizer spravuje stav synchronizace mezi lokálním pracovním prostorem a vzdáleným systémem. Ukládá do mezipaměti a trvale uchovává lokální, základní a vzdálená časová razítka, aby se zajistil efektivní výpočet stavu synchronizace prostředku. Dále spouští upozornění na změny pro všechny zaregistrované listenery. ThreeWaySubscriber převádí tyto události změn do správného formátu, aby mohly být odeslány listenerům zaregistrovaným u odběratele.

ThreeWaySynchronizer využívá zámky a pravidla plánování jádra pro zajištění bezpečnosti vláken a dávkového zpracování upozornění na změny.

ThreeWayRemoteTree

ThreeWayRemoteTree je podtřídou třídy ResourceVariantTree, jenž je přizpůsobena třídě ThreeWaySubscriber. Musí být klientem potlačena, aby se poskytl mechanizmus pro načítání vzdáleného stavu ze serveru. O třídě ResourceVariantTree se podrobněji pojednává v následujícím příkladu.

CachedResourceVariant

CachedResourceVariant je částečnou implementací třídy IResourceVariant, která po určitou dobu (v současnosti 1 hodinu) ukládá do mezipaměti veškerý načtený obsah. To je užitečné, protože k obsahu se během krátkého časového období může přistupovat i několikrát (například pro určení stavu synchronizace a zobrazení obsahu v editoru porovnání). Podtřídy však musí i tak poskytnout jedinečný identifikátor obsahu společně s polem bajtů, které může být trvale uchováno za účelem opětného vytvoření popisovače varianty prostředku.

Stavění na základech existující synchronizace pracovního prostoru

Řada poskytovatelů úložišť již může disponovat mechanizmem pro správu svého stavu synchronizace (např. pokud mají stávající moduly plug-in). Třída ResourceVariantTreeSubscriber a související třídy umožňují stavět na základě existující infrastruktury pro synchronizaci. Např. toto je supertřída všech odběratelů CVS.

ResourceVariantTreeSubscriber

Jak jsme zmínili v předchozím příkladu, třída ThreeWaySubscriber je podtřídou třídy ResourceVariantTreeSubscriber, která poskytuje synchronizaci lokálního pracovního prostoru za použití třídy ThreeWaySynchronizer. Podtřídy třídy ResourceVariantTreeSubscriber musí poskytovat:

Další možnosti odběratele jsou implementovány za použití těchto prostředků.

ResourceVariantTree

ResourceVariantTree je konkrétní implementací třídy IResourceVariantTree, která nabízí následující:

Následující je nutno implementovat pomocí podtříd:

Jsou poskytnuty konkrétní implementace třídy ResourceVariantByteStore, které trvale uchovávají bajty mezi jednotlivým vyvoláním pracovní plochy (PersistantResourceVariantByteStore) nebo ukládají do mezipaměti bajty pouze pro aktuální relaci (SessionResourceVariantByteStore). Sestavování odběratele na základech existující synchronizace pracovního prostoru však zpravidla vyžaduje implementaci podtříd ResourceVariantByteStore, které spolupracují se základním synchronizátorem. Například třída ThreeWayRemoteTree využívá implementace úložiště bajtů, které ukládá vzdálené bajty ve třídě ThreeWaySynchronizer.

Vytvoření popisovačů varianty prostředku v tomto příkladě se od předchozího příkladu neliší, pouze popisovače jsou požadovány od instance stromu varianty prostředku, namísto od odběratele.