Lisätietoja synkronoinnista

Jos aiot tukea synkronointia, mutta käytössäsi ei ole valmista menetelmää synkronointitilan hallintaa varten, tässä osiossa kuvataan, kuinka voit toteuttaa synkronoinnin valvontatoiminnon alusta alkaen. Esimerkissä oletetaan, että valmista synkronoinnin rakennetta ei ole olemassa, ja kuvataan mukana toimitettujen sovellusohjelmaliittymien käyttö synkronointitilan ylläpitoon.

Tässä kuvauksessa käytetään ajettavaa esimerkkiä. Lähdekoodi on lisäosan org.eclipse.team.examples.filesystem tiedostojärjestelmän toimittajan paketissa. Kuittaa projekti ulos CVS-tietovarastosta ja käytä sitä viitteenä, kun luet tätä opetusohjelmaa.

Synkronoinnin valvontatoiminnon toteutus alusta alkaen

Ensimmäisessä esimerkissä oletetaan, että käytössä ei ole valmista rakennetta paikallisen työtilan synkronointitilan ylläpitoa varten. Kun synkronoinnin valvontatoiminto toteutetaan alusta alkaen, voit hyödyntää lisäosassa org.eclipse.team.core toimitettua sovellusohjelmaliittymää. Pakkauksessa org.eclipse.team.core.variants on kaksi luokan Subscriber aliluokkaa, joiden avulla toteutusta voidaan yksinkertaistaa. Ensimmäinen aliluokka on ResourceVariantTreeSubscriber, joka kuvataan edempänä toisessa esimerkissä. Toinen aliluokka on ensimmäisen aliluokka: ThreeWaySubscriber. Tämä synkronoinnin valvontatoiminnon toteutus toimittaa useita hyödyllisiä luokkia, joiden avulla paikallisen työtilan synkronointitilaa voidaan ylläpitää. Jos minkäänlaista rakennetta ei ole valmiina, tästä on hyvä aloittaa.

Synkronoinnin valvontatoiminnon toteutus alusta alkaen kuvataan käyttämällä tiedostojärjestelmän esimerkkiä, joka on saatavilla lisäosassa org.eclipse.team.examples.filesystem. Seuraavassa esimerkissä esitellään mahdollisimman vähän koodia, koska koodi on saatavilla Eclipse-ympäristön CVS-tietovarastosta. Teknisesti kyseessä ei ole kolmisuuntainen synkronoinnin valvontatoiminto, mutta tiedostojärjestelmäesimerkki voi kuitenkin hyödyntää tätä rakennetta. FTP- ja WebDAV-lisäosat on myös koottu tätä rakennetta käyttäen.

ThreeWaySubscriber

Tiedostojärjestelmäesimerkissä käytössä on jo RepositoryProvider-luokan toteutus, joka on liittänyt paikalliseen projektiin tiedostojärjestelmän sijainnin, johon paikallinen sisältö on kahdennettu. FileSystemSubscriber-luokka on luotu ThreeWaySubscriber-luokan aliluokkana, jotta työtilan synkronointitilan ylläpidossa voidaan hyödyntää ThreeWaySynchronizer-luokkaa. Tämän luokan aliluokkien on tehtävä seuraavat asiat:

Synkronoinnin valvontatoiminnon toteutuksen lisäksi tiedostojärjestelmän toimittajan haku- ja asetustoimintoja on muokattu niin, että ne päivittävät synkronointitilan ThreeWaySynchronizer-luokassa. Toiminnot on toteutettu luokassa org.eclipse.team.examples.filesystem.FileSystemOperations.

ThreeWaySynchronizer

ThreeWaySynchronizer-luokka hallitsee paikallisen työtilan ja etäsijainnin välistä synkronointitilaa. Se tallentaa paikalliset, perus- ja etäaikaleimat välimuistiin, pitää ne pysyvinä ja tukee resurssin synkronointitilan tehokasta laskentaa. Lisäksi se lähettää muutosilmoitukset rekisteröityneille kuuntelutoiminnoille. ThreeWaySubscriber-luokka kääntää muutostapahtumat oikeaan muotoon, jossa ne voidaan lähettää synkronoinnin valvontatoimintoon rekisteröityneille kuuntelutoiminnoille.

ThreeWaySynchronizer-luokka käyttää ydinosan ajoitussääntöjä ja lukkoja varmistaakseen säikeen suojauksen ja toimittaakseen muutosilmoitusten eräajot.

ThreeWayRemoteTree

ThreeWayRemoteTree-luokka on ResourceVariantTree-luokan aliluokka, joka on mukautettu ThreeWaySubscriber-luokkaa varten. Työasemien on ohitettava se, jotta ne saavat mekanismin etätilan noutamiseksi palvelimelta. ResourceVariantTree-luokka kuvataan tarkemmin seuraavassa esimerkissä.

CachedResourceVariant

CachedResourceVariant-luokka on IResourceVariant-luokan osittainen toteutus, joka tallentaa noudetun sisällön välimuistiin tietyksi ajanjaksoksi (tällä hetkellä yhdeksi tunniksi). Tämä on hyödyllistä, sillä sisältöä voidaan käsitellä useaan kertaan lyhyen ajan sisällä (esimerkiksi synkronointitilan selvittämiseksi ja sisällön näyttämiseksi vertailun muokkausohjelmassa). Aliluokkien on kuitenkin toimitettava yksilöllinen sisältötunnus sekä tavutaulukko, joka voidaan pitää pysyvänä resurssimuunnoksen kahvan uudelleenluontia varten.

Koonti aiemmin luodun työtilasynkronoinnin päälle

Useissa tietovarastojen toimittajissa saattaa jo olla mekanismi synkronointitilan hallintaa varten (jos niissä on lisäosia). ResourceVariantTreeSubscriber-luokka ja siihen liittyvät luokat mahdollistavat koonnin aiemmin luodun synkronointirakenteen päälle. Seuraava luokka esimerkiksi on kaikkien CVS-synkronoinnin valvontatoimintojen yliluokka.

ResourceVariantTreeSubscriber

Kuten edellisessä esimerkissä mainittiin, ThreeWaySubscriber-luokka on ResourceVariantTreeSubscriber-luokan aliluokka, joka mahdollistaa paikallisen työtilan synkronoinnin ThreeWaySynchronizer-luokkaa käyttämällä. ResourceVariantTreeSubscriber-luokan aliluokkien on toimitettava seuraavat kohteet:

Muut synkronoinnin valvontatoiminnon toiminnot toteutetaan näiden välineiden avulla.

ResourceVariantTree

ResourceVariantTree-luokka on IResourceVariantTree-luokan konkreettinen toteutus, joka toimittaa seuraavat toiminnot:

Aliluokkien on toteutettava seuraavat toiminnot:

Laajennuspisteestä ResourceVariantByteStore on toimitettu konkreettisia toteutuksia, jotka säilyttävät tavut työympäristön kutsujen välillä (PersistantResourceVariantByteStore) tai tallentavat tavut välimuistiin vain nykyisen istunnon ajaksi (SessionResourceVariantByteStore). Synkronoinnin valvontatoiminnon koonti valmiin työtilasynkronoinnin rakenteen päälle edellyttää kuitenkin yleensä sellaisten ResourceVariantByteStore-aliluokkien toteutusta, jotka ovat rajapinnassa taustalla olevan synkronointitoiminnon kanssa. Esimerkiksi ThreeWayRemoteTree hyödyntää tavusäilön toteutusta, jossa etätavut tallentuvat kohteeseen ThreeWaySynchronizer.

Resurssimuunnoksen kahvojen luonti tätä esimerkkiä varten ei eroa aiemmasta esimerkistä lukuun ottamatta sitä, että kahvat pyydetään resurssimuunnosrakenteen esiintymältä synkronoinnin valvontatoiminnon sijasta.