Utöver grunderna

Om du tänker ge synkroniseringssupport och inte har en befintlig mekanism för att hantera synkroniseringsläge förklaras hur du implementerar Subscriber från början i det här avsnittet. Det innebär att det inte finns någon befintlig infrastruktur för synkronisering och visar hur du använder vissa API:er som tillhandahålls för underhåll av synkroniseringsläget.

I resten av det här exemplet använder vi ett körningsexempel. Källkoden finns i paketet med filsystemsprovidern för insticksprogrammet org.eclipse.team.examples.filesystem. Du bör checka ut projektet från CVS-lagret och använda som referens medan du går igenom den här självstudiekursen.

Implementera en prenumerant från början

I det första exemplet antas att det inte finns någon befintlig infrastruktur för underhåll av synkroniseringsläget för lokal arbetsyta. När du implementerar en prenumerant från början kan du använda vissa ytterligare API:er som finns i insticksprogrammet org.eclipse.team.core. Paketet org.eclipse.team.core.variants innehåller två underordnade klasser av Subscriber som kan användas till att förenkla implementationen. Den första är ResourceVariantTreeSubscriber , vilken behandlas i det andra exemplet nedan. Den andra är en underordnad klass till den första: ThreeWaySubscriber. I prenumerantimplementationen finns flera bra klasser för hantering av synkroniseringsläget i en lokal arbetsyta. Om du inte har någon befintlig infrastruktur är detta ett bra ställe att börja på.

Implementering av en prenumerant från början visas med hjälp av filsystemexemplet som finns i insticksprogrammet org.eclipse.team.examples.filesystem. Koden i följande beskrivning är minimal eftersom den finns tillgänglig i Eclipse CVS-lager. Även om den tekniskt sett inte är en trevägsprenumerant kan filsystemexemplet ändå utnyttja infrastrukturen på ett bra sätt. FTP- och WebDAV-insticksprogrammen skapas också med hjälp av den här infrastrukturen.

ThreeWaySubscriber

För filsystemsexemplet hade vi redan en implementation av en RepositoryProvider som associerade ett lokalt projekt med en filsystemsplats där det lokala innehållet speglades. FileSystemSubscriber skapades som en underordnad klass tillThreeWaySubscriber för att använda en ThreeWaySynchronizer för hantering av arbetsytans synkroniseringsläge. Underordnade klasser till den här klassen måste göra följande:

Förutom prenumerantimplementation ändrades get- och put-åtgärderna för filsystemsprovidern för att uppdatera synkroniseringsläget i ThreeWaySynchronizer. Åtgärderna implementeras i klassen org.eclipse.team.examples.filesystem.FileSystemOperations.

ThreeWaySynchronizer

ThreeWaySynchronizer hanterar synkroniseringsläget mellan den lokala arbetsytan och en fjärrplats. Den cachelagrar och permanentar lokala, bas- och fjärrtidsstämplar för att kunna hantera effektiv beräkning av synkroniseringsläget för en resurs. Även ändringsaviseringar till registrerade lyssnare aktiveras. Med ThreeWaySubscriber översätts dessa ändringshändelser till rätt format för att kunna skickas till lyssnare som registrerats med prenumeranten.

I ThreeWaySynchronizer används Core-schemaregler och -lås för att säkerställa trådsäkerhet och satsvis bearbetning av ändringsavisering.

ThreeWayRemoteTree

En ThreeWayRemoteTree är en underordnad klass tillResourceVariantTree som skräddarsytts för ThreeWaySubscriber. Den måste åsidosättas av klienter för att kunna hämta fjärrläge från servern. ResourceVariantTree beskrivs mer detaljerat i nästa exempel.

CachedResourceVariant

En CachedResourceVariant är en delvis implementation av IResourceVariant som cachelagrar allt hämtat innehåll för en viss tidsperiod (för tillfället 1 timme). Detta är bra eftersom innehållet kan accessas flera gånger under en kort tidsperiod (t.ex. för att bestämma synkroniseringsläget och visa innehållet i en jämförelseredigerare). Underordnade klasser måste fortfarande tillhandahålla det unika innehålls-ID:t tillsammans med bytematrisen som kan permanentas för att återskapa resursvarianthanteraren.

Skapa ovanpå befintlig arbetsytesynkronisering

Många lagerproviders kanske redan har en mekanism för hantering av synkroniseringsläget (t.ex. om de har befintliga insticksprogram). ResourceVariantTreeSubscriber och relaterade klasser ger möjligheten att skapa ovanpå en befintlig infrastruktur för synkronisering. Detta är exempelvis den högsta klassen över alla CVS-prenumeranter.

ResourceVariantTreeSubscriber

Som nämndes i tidigare exempel är ThreeWaySubscriber den underordnade klassen tillResourceVariantTreeSubscriber som ger synkronisering av lokal arbetsyta med hjälp av ThreeWaySynchronizer Underordnade klasser till ResourceVariantTreeSubscriber måste tillhandahålla:

De övriga funktionerna i prenumeranten implementeras med hjälp av dessa funktioner.

ResourceVariantTree

ResourceVariantTree är en konkret implementation av IResourceVariantTree som tillhandahåller följande:

Följande måste implementeras av underordnade klasser:

Det finns konkreta implementationer av ResourceVariantByteStore som permanentar bytes över arbetsmiljöanrop (PersistantResourceVariantByteStore) eller cachelagrade bytes bara för aktuell session (SessionResourceVariantByteStore). Att skapa en prenumerant ovanpå befintlig infrastruktur för arbetsmiljösynkronisering kräver däremot vanligen implementationen av underordnade klasser förResourceVariantByteStore som gränsar mot underliggande synkroniserare. Exempelvis använder ThreeWayRemoteTree en bytelagringsimplementation som lagrar fjärrbytes i ThreeWaySynchronizer.

Skapandet av resursvarianthanterare för exemplet skiljer sig inte från föregående exempel, förutom att hanterarna begärs från en resursvariantträdförekomst i stället för från prenumeranten.