Ha támogatni kívánja a szinkronizálást, és nem rendelkezik meglévő
mechanizmussal a szinkronizálási állapot kezeléséhez, akkor ez a rész
bemutatja az előfizető megvalósítását a nulláról. Ez azt jelenti,
hogy nincs meglévő szinkronizálási infrastruktúra, és bemutatja, hogy a
biztosított API segítségével hogyan tartható karban a szinkronizálási
állapot.
A példa további részében egy futó példát használunk. Az forráskód az org.eclipse.team.examples.filesystem bedolgozó fájlrendszer-szolgáltató csomagjában található. A projektet ki kell iktatni a CVS lerakatból, és hivatkozásként kell használni az ismertető olvasása közben.
Ez az első példa feltételezi, hogy nincs meglévő infrastruktúra a helyi munkaterület szinkronizációs állapotának fenntartásához. Az előfizető nulláról megvalósításakor használhatja az org.eclipse.team.core bedolgozó néhány további alkalmazás programozási felületét. Az org.eclipse.team.core.variants csomag a Subscriber két alosztályát tartalmazza, amelynek segítségével a megvalósítás leegyszerűsíthető. Az első a ResourceVariantTreeSubscriber , amelyet az alábbi második példában mutatunk be. A második az első alosztálya: ThreeWaySubscriber. Ez az előfizető-megvalósítás számos hasznos osztályt biztosít a helyi munkaterület szinkronizálási állapotának kezeléséhez. Ha nem rendelkezik meglévő infrastruktúrával, akkor ez jó hely ennek elkezdéséhez.
Az előfizető nulláról megvalósítása az org.eclipse.team.examples.filesystem bedolgozóban rendelkezésre álló példa fájlrendszer segítségével szemléltethető. Az alábbi leírásban szereplő kód minimális, mert elérhető az Eclipse CVS lerakatból. Habár technikailag nem háromlépéses előfizető, de a fájlrendszer példa jó felhasználása az infrastruktúrának. Az FTP és WebDAV bedolgozók szintén ezen infrastruktúra segítségével vannak összeépítve.
A fájlrendszer-példához már rendelkezünk egy RepositoryProvider megvalósítással, amely a helyi projektet egy fájlrendszer-hellyel társította, amelyen a helyi tartalom tükrözésre került. A FileSystemSubscriber a ThreeWaySubscriber alosztályaként került létrehozásra annak érdekében, hogy a ThreeWaySynchronizer kerüljön használatra a munkaterület szinkronizációs állapot kezeléséhez. Az osztály alosztályainak az alábbiakat kell tenniük:
Az előfizető-megvalósításon kívül a fájlrendszer-szolgáltató get és put műveletei módosításra kerültek a ThreeWaySynchronizer elemben a szinkronizációs állapot frissítése érdekében. A műveletek megvalósításra kerültek az org.eclipse.team.examples.filesystem.FileSystemOperations osztályban.
ThreeWaySynchronizer kezeli a helyi munkaterület és a távoli hely közötti szinkronizálási állapotot. Ideiglenesen és állandóan tárolja a helyi, alap és távoli időbélyeget az erőforrás szinkronizálási állapotának hatékony kiszámításának támogatása érdekében. Aktiválja a módosítás-értesítéseket a bejegyzett figyelőkhöz. A ThreeWaySubscriber lefordítja ezeket a módosítási eseményeket a megfelelő formátumba az előfizetőhöz bejegyzett figyelőkhöz elküldéshez.
A ThreeWaySynchronizer a Központi ütemezési szabályokat és zárolásokat használja a szálbiztonság és a módosítási értesítés kötegelés biztosítása érdekében.
A ThreeWayRemoteTree a ResourceVariantTree alosztálya, amely a ThreeWaySubscriber elemhez van testreszabva. Az ügyfeleknek ezt felül kell írniuk a távoli állapot kiszolgálóról lehívási mechanizmusának biztosítása érdekében. ResourceVariantTree részletesebb leírását a következő példa tartalmazza.
A CachedResourceVariant az IResourceVariant részleges megvalósítása, amely ideiglenes tárolja a lehívott tartalmat egy időtartamig (ez jelenleg 1 óra). Ez hasznos, mivel a tartalom többször is elérhető egy rövid időtartam alatt (például a szinkronizálási állapot meghatározásához és a tartalom összehasonlítás-szerkesztőben megjelenítéséhez). Az alosztálynak továbbra is kell biztosítania az egyedi tartalomazonosítót egy byte-tömbbel, amely az erőforrásváltozó-kezelő újbóli létrehozása érdekében tárolható.
Számos lerakatszolgáltató rendelkezik már a szinkronizálási állapotot kezelő mechanizmussal (ha például már rendelkezik meglévő bedolgozókkal). A ResourceVariantTreeSubscriber és a kapcsolódó osztályok biztosítják az összeépítés lehetőségét egy meglévő szinkronizálási infrastruktúra tetején. Ez például az összes CVS előfizető szülőosztálya.
Ahogy az előző példában említettük, a ThreeWaySubscriber a ResourceVariantTreeSubscriber alosztálya, amely helyi munkaterület-szinkronizációt biztosít a ThreeWaySynchronizer segítségével. A ResourceVariantTreeSubscriber alosztályainak az alábbiakat kell biztosítania:
A ResourceVariantTree (vagy AbstractResourceVariantTree) alosztályait, amely a távoli erőforrások és változók átvizsgálási és frissítési viselkedését adja meg, az előfizetők számára, amelyek támogatják a háromlépéses összehasonlítást, pedig az alap erőforrás-változókat biztosítják.
Az előfizető többi képessége ezen szolgáltatások segítségével kerül megvalósításra.
A ResourceVariantTree az IResourceVariantTree konkrét megvalósítása, amely az alábbiakat biztosítja:
Az alábbiakat az alosztályoknak kell megvalósítania:
A ResourceVariantByteStore konkrét megvalósításai biztosítottak, amelyek tárolják az byte-okat a munkaterület-meghívások során (PersistantResourceVariantByteStore) vagy ideiglenesen tárolják a byte-okat az aktuális munkamenethez (SessionResourceVariantByteStore). Ha összeépít egy előfizetőt a meglévő munkaterület-szinkronizációs infrastruktúra tetején, akkor ehhez általában szükség van a ResourceVariantByteStore alosztályok megvalósítására, amely felületet alkot az alapul szolgáló szinkronizálóhoz. A ThreeWayRemoteTree például egy byte-tároló megvalósítást használ, amely a távoli byte-okat a ThreeWaySynchronizer elemben tárolja.
A példa erőforrásváltozó-kezelőjének létrehozása nem különbözik az előző példától azzal a kivétellel, hogy a kezelők egy erőforrásváltozó-fa példányról kerülnek lekérésre az előfizető helyett.