11.04.2013 Views

gestão de dados partilhados em ambientes de computação móvel

gestão de dados partilhados em ambientes de computação móvel

gestão de dados partilhados em ambientes de computação móvel

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

34 CAPÍTULO 3. APRESENTAÇÃO DO SISTEMA DOORS<br />

3.2.2.3 Funcionamento comum no servidor<br />

Nos servidores, os coobjectos são manipulados <strong>em</strong> duas situações: quando o servidor recebe operações<br />

<strong>de</strong> um cliente e durante as sessões <strong>de</strong> sincronização. Para tal, o servidor cria uma cópia do coobjecto<br />

(<strong>em</strong> m<strong>em</strong>ória), executa as acções necessárias e grava o novo estado <strong>em</strong> m<strong>em</strong>ória estável. De seguida<br />

<strong>de</strong>screv<strong>em</strong>-se as acções efectuadas <strong>em</strong> cada uma das situações.<br />

Quando o servidor recebe, <strong>de</strong> um cliente, uma sequência <strong>de</strong> operações, entrega essas operações ao<br />

coobjecto (através da interface <strong>de</strong> sist<strong>em</strong>a do coobjecto). No coobjecto, a função que recebe as opera-<br />

ções, impl<strong>em</strong>entada na cápsula, executa as seguintes acções. Primeiro, entrega a sequência <strong>de</strong> operações<br />

ao componente <strong>de</strong> registo. O componente <strong>de</strong> registo atribui um i<strong>de</strong>ntificador à sequência <strong>de</strong> operações<br />

e armazena-a. Adicionalmente, o sumário das operações 9 conhecidas, mantido no componente <strong>de</strong> atri-<br />

butos e usado durante o funcionamento do coobjecto, é actualizado. Segundo, notifica o componente <strong>de</strong><br />

reconciliação da existência <strong>de</strong> novas operações — este componente é responsável por executar as opera-<br />

ções armazenadas no componente <strong>de</strong> registo <strong>de</strong> acordo com a política <strong>de</strong>finida (garantindo que as várias<br />

réplicas <strong>de</strong> um mesmo coobjecto evolu<strong>em</strong> da forma esperada). A execução das operações é efectuada<br />

<strong>de</strong> forma idêntica à execução local <strong>de</strong> operações no cliente (e po<strong>de</strong> originar a produção e tratamento <strong>de</strong><br />

informação <strong>de</strong> awareness ou a invocação <strong>de</strong> outras operações <strong>de</strong> outros subobjectos — estas invocações<br />

são processadas executando imediatamente as operações nos subobjectos respectivos).<br />

Durante as sessões <strong>de</strong> sincronização os coobjectos po<strong>de</strong>m ser acedidos <strong>em</strong> três situações: (1) para<br />

transmitir o sumário das operações conhecidas e a informação sobre as operações conhecidas noutros<br />

servidores; (2) para enviar o conjunto <strong>de</strong> operações <strong>de</strong>sconhecidas no parceiro; (3) para receber um<br />

conjunto <strong>de</strong> operações <strong>de</strong>sconhecidas do parceiro.<br />

O sumário das operações conhecidas e a informação sobre as operações conhecidas nos outros servi-<br />

dores está guardada nos atributos do coobjecto. Para obter esta informação, o servidor não necessita <strong>de</strong><br />

criar uma cópia do coobjecto — a API do sist<strong>em</strong>a permite obter apenas os atributos <strong>de</strong> um coobjecto.<br />

O conjunto <strong>de</strong> operações que um servidor conhece, mas que o parceiro <strong>de</strong>sconhece, é obtido através<br />

da interface do coobjecto (checkChanges). Esta função obtém o conjunto <strong>de</strong> operações a enviar para o<br />

parceiro a partir do componente <strong>de</strong> registo. Nesta situação, o servidor utiliza a informação sobre o estado<br />

do parceiro (operações conhecidas e operações que o parceiro sabe que os outros servidores conhec<strong>em</strong>)<br />

para actualizar a sua informação local.<br />

Quando um servidor recebe um conjunto <strong>de</strong> operações <strong>de</strong> outro servidor, esse conjunto <strong>de</strong> operações<br />

é entregue ao coobjecto através da interface do coobjecto (insertOp). Esta função efectua as seguintes<br />

operações. Primeiro, entrega as operações ao componente <strong>de</strong> registo, o qual as armazena. Segundo,<br />

9 O i<strong>de</strong>ntificador <strong>de</strong> uma operação e os sumários <strong>de</strong> operações usados no sist<strong>em</strong>a DOORS são baseados <strong>em</strong> relógios lógicos<br />

e vectoriais, como se <strong>de</strong>talha na secção 4.1.1.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!