Utover det grunnleggende

Hvis du har tenkt å tilby synkroniseringsstøtte og ikke har en mekanisme for styring av synkroniseringstilstanden, finner du her en forklaring på implementering av en abonnent fra grunnen av. Dette betyr at det ikke finnes noen eksisterende infrastruktur for synkronisering, men vi skal vise hvordan du bruker et oppgitt programmeringsgrensesnitt til å vedlikeholde synkroniseringstilstanden.

Her skal vi se et eksempel på hvordan du bruker et kjøringseksempel. Du finner kildekoden i pakken fra filsystemleverandøren for plugin-modulen org.eclipse.team.examples.filesystem. Du bør hente ut prosjektet fra CVS-datalageret og bruke det som en referanse mens du leser denne opplæringen.

Implementere en abonnent fra grunnen av

I det første eksempelet forutsetter vi at det ikke finnes infrastruktur for vedlikehold av synkroniseringstilstanden i det lokale arbeidsområdet. Når du implementerer en abonnent fra grunnen av, kan du bruke ytterligere programmeringsgrensesnitt fra plugin-modulen org.eclipse.team.core. Pakken org.eclipse.team.core.variants inneholder to subklasser for Subscriber , som kan brukes for å gjøre implementeringen enklere. Den første er ResourceVariantTreeSubscriber , som beskrives nærmere i det andre eksempelet nedenfor. Den andre er en subklasse for den første: ThreeWaySubscriber. I denne abonnentimplementeringen finner du flere nyttige klasser for håndtering av synkroniseringstilstanden i det lokale arbeidsområdet. Hvis du ikke har en eksisterende infrastruktur, er dette et bra sted å begynne.

Vi viser implementering av en abonnent fra grunnen av, ved hjelp av filsystemeksempelet som er tilgjengelig i plugin-modulen org.eclipse.team.examples.filesystem. Koden i den følgende beskrivelsen er minimal fordi den er tilgjengelig i Eclipses CVS-datalager. Selv om dette ikke teknisk sett er en treveis abonnent, kan filsystemeksempelet likevel utnytte denne infrastrukturen. Plugin-moduler for FTP og WebDAV bygges også ved hjelp av denne infrastrukturen.

ThreeWaySubscriber

I filsystemeksempelet hadde vi en implementering av en RepositoryProvider . Her ble et lokalt prosjekt knyttet til en filsystemplassering som gjenspeilet det lokale innholdet. FileSystemSubscriber ble opprettet som en subklasse for ThreeWaySubscriber slik at ThreeWaySynchronizer ble brukt til styring av arbeidsmiljøets arbeidsområdesynkronisering. Subklasser for denne klassen må gjøre følgende:

I tillegg til abonnentimplementeringen ble get- og put-operasjoner for filsystemleverandøren endret for å oppdatere synkroniseringstilstanden i ThreeWaySynchronizer. Operasjonene implementeres i klassen org.eclipse.team.examples.filesystem.FileSystemOperations.

ThreeWaySynchronizer

ThreeWaySynchronizer styrer synkroniseringstilstanden mellom det lokale arbeidsområdet og den eksterne plasseringen. Den bufrer og opprettholder de lokale, eksterne og basistidsangivelsene for å støtte effektiv beregning av synkroniseringstilstanden til en ressurs. Den aktiverer også varsling om endring til registrerte lyttere. Med ThreeWaySubscriber oversettes disse endringshendelsene til riktig format som sendes til lyttere som er registrert med abonnenten.

ThreeWaySynchronizer bruker Core-skjemaregler og -låser for å sikre trådsikkerhet og oppgi satsvis kjøring av endringsvarsling.

ThreeWayRemoteTree

En ThreeWayRemoteTree er en subklasse for ResourceVariantTree, som er skreddersydd for ThreeWaySubscriber. Den må overstyres av klienter for å kunne hente den eksterne tilstanden fra serveren. ResourceVariantTree beskrives nærmere i neste eksempel.

CachedResourceVariant

En CachedResourceVariant er en delvis implementering av IResourceVariant, som bufrer alt innholdet som er hentet for en bestemt periode (for tiden 1 time). Dette er nyttig siden det i løpet av kort tid gis tilgang til innholdet (for eksempel for å finne synkroniseringstilstanden og vise innholdet i et redigeringsprogram for sammenlikninger). Subklasser må likevel oppgi den unike innhold-IDen sammen med bytematrisen som kan opprettholdes for å opprette ressursvariantressursen på nytt.

Bygge over en eksisterende arbeidsområdesynkronisering

En rekke datalagerleverandører har allerede en mekanisme for styring av synkroniseringstilstanden (for eksempel hvis de har eksisterende plugin-moduler). ResourceVariantTreeSubscriber og de tilhørende klassene gjør det mulig å bygge over en eksisterende infrastruktur for synkronisering. Dette er for eksempel superklassen for alle CVS-abonnenter.

ResourceVariantTreeSubscriber

Som nevnt i tidligere eksempel er ThreeWaySubscriber en subklasse for ResourceVariantTreeSubscriber, som synkroniserer det lokale arbeidsområdet ved hjelp av ThreeWaySynchronizer. Subklasser for ResourceVariantTreeSubscriber må oppgi:

Den øvrige funksjonaliteten for abonnenten implementeres ved hjelp av disse funksjonene.

ResourceVariantTree

ResourceVariantTree er et konkret implementering av IResourceVariantTree som oppgir følgende:

Følgende må implementeres av subklasser:

Det finnes konkrete implementeringer av ResourceVariantByteStore som opprettholder byte på tvers av arbeidsbenkaktiveringer, (PersistantResourceVariantByteStore) eller bufret byte bare for den gjeldende sesjonen (SessionResourceVariantByteStore). Å bygge en abonnent over en eksisterende infrastruktur for arbeidsområdesynkronisering krever imidlertid vanligvis implementering av ResourceVariantByteStore-subklassene, som grenser mot den underliggende synkronisereren. For eksempel bruker ThreeWayRemoteTree implementering av byte-lagring som lagrer eksterne byte i ThreeWaySynchronizer.

Opprettelsen av ressursvariantreferanser for dette eksempelet skiller seg ikke fra det foregående eksempelet, bortsett fra at det sendes forespørsel etter referansene fra en forekomst av ressursvarianttreet i stedet for abonnenten.