Page tree
Skip to end of metadata
Go to start of metadata

Synchronization manager

Vivo 2.2 poskytuje rozhraní pro selektivní synchronizaci lokální instance Vivo se vzdálenou.

Pro získání rychlého přehledu doporučujeme nejprve pročíst:

  1. Uživatelskou nápovědu pro Synchronizace obsahu.
  2. Nastavení spojení nástrojem Connection token manager a skriptlet.

Základní části

Server

Třída Vivo\CMS\Service\SynchronizationManager\Server (definovaná jako aplikační objekt synchronizationManagerServer) implementuje rozhraní Vivo\CMS\Service\SynchronizationManager\RemoteSynchronizationManagerInterface, které jí zaručuje možnost přístupu ze vzdálených instancí viva pomocí RMI - Remote method invocation. Serverová část musí mít v configu nadefinované přístupové tokeny pro connection token manager.

Definice tokenu pro connection manager
objects:
    connectionTokenManager:
            class: Vivo\CMS\Service\ConnectionTokenManager
            arguments:
                serverTokens:
                    12344549d565d9505b287de0cd20ac77be1d3f2c: "*" # token pro klienta, přístup z jakékoli IP

 

Hlavní poskytované metody:

Vivo\CMS\Service\SynchronizationManager\Server - hlavní metody
/**
 * Initialize server session
 *
 * @param string $token
 * @throws \Vivo\CMS\Exception
 * @throws \Vivo\IllegalAccessException
 * @return string
 */
public function initServerSession($token){}
 

/**
 * Get list of entity checksums to be compared with different environment
 * Returns array like:
 * [
 *  '/something' => ['uuid' => 'ENTITY-UUID', 'title' => 'Some page', 'modification_time' => 123456789, 'checksum' => 'FILES-MD5-HASH']
 * ]
 * Where array keys are relative entity paths from /data/repository/site-name/ROOT/ or $basePath
 *
 * @param string $basePath [optional] Relative to /data/repository/site-name/ROOT/
 * @param bool $recursive [optional]
 * @return array
 */
public function getEntitiesList($basePath = "/", $recursive = true){}


/**
 * Get all data from entity (all files contents)
 * [
 *  '/Entity.object' => ['content' => 'xx', 'checksum' => 'xx', 'mtime' => 'xx'],
 *  '/Content/Soubor.neco' => ['content' => 'xx', 'checksum' => 'xx', 'mtime' => 'xx']
 * ]
 *
 * @param string $path Relative to /data/repository/site-name/ROOT/
 * @return array
 */
public function getEntityData($path){}


/**
 * Write data back to entity, accepts input generated from @see getEntityData
 *
 * @param string $path Relative to /data/repository/site-name/ROOT/
 * @param array|null $entityData
 * @return string
 */
public function setEntityData($path, array $entityData = null){}

 

Klient

Třída Vivo\CMS\Service\SynchronizationManager\Client definovaná jako aplikační objekt synchronizationManagerClient se stará o ovládání serverové části manažeru a spolupracuje s grafickým rozhraním.

Klientská instance musí mít v aplikačním configu definovaná spojení na vzdálené instance. Název spojení je definován názvem aplikačního objektu s parametrem class nastaveným na Vivo\CMS\Service\SynchronizationManager\RemoteSynchronizationManagerInterface (zároveň musí být vhodně nastaven salt pro connection manager).

Ukázka konfigurace klienta
objects:
    vzdalenySynchronizationManager:
        class: Vivo\CMS\Service\SynchronizationManager\RemoteSynchronizationManagerInterface
        arguments:
            remoteUrl: http://nejaka.domena.tld/rmi/synchronizationManagerServer
	
	druheSpojeni:
        class: Vivo\CMS\Service\SynchronizationManager\RemoteSynchronizationManagerInterface
        arguments:
            remoteUrl: http://nejaka.jina.domena.tld/rmi/synchronizationManagerServer

    connectionTokenManager:
            class: Vivo\CMS\Service\ConnectionTokenManager
            arguments:
                clientSalt: NejakyKlic

 

Princip fungování

Uživatel vybere ze seznamu dostupných spojení v rozhraní a zadá PIN (heslo), ze kterého se vygeneruje komunikační token. Následně se se vzdáleným prostředím naváže spojení, pošle token ověření a pokud souhlasí na serverové straně, vygeneruje se na obou stranách session - na vzdálené straně se uloží IP klienta a token, na klientské informace o spojení (token, název spojení, vzdálená session ID apod.). V tuto chvíli je možné mezi instancemi vyměňovat data formou klient-server. Klient získá informace o entitách na zdáleném serveru a lokálních entitách (stromy) a porovná je. Výsledkem mohou být tyto stavy:

  • stejný obsah na obou stranách
  • obsah existuje jen na jedné straně
  • obsah existuje na obou stranách, ale liší se (rozdílné entity na té samé cestě nebo ta samá entita, ale rozdílný obsah)
  • obsah existuje na obou stranách, ale v různých složkách (konflikt)

Následně je možné přenášet 1:1 konkrétní entity oběma směry, případně zobrazit diff mezi nimi.

 

  • No labels