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.

3.3. FRAMEWORK DE COMPONENTES: COMPONENTES 45<br />

<strong>de</strong>rivados <strong>de</strong>ste subobjecto <strong>de</strong>v<strong>em</strong> iniciar o seu código invocando este método. A operação <strong>de</strong> restauro,<br />

além <strong>de</strong> colocar o estado do subobjecto <strong>em</strong> activo, insere o subobjecto no conjunto <strong>de</strong> subobjectos raiz.<br />

Um terceiro subobjectos base mantém um objecto (opaco) com múltiplas versões. Este subobjecto<br />

<strong>de</strong>fine duas operações básicas que alteram o seu estado: criar e r<strong>em</strong>over uma versão. Internamente cada<br />

versão é imutável e é i<strong>de</strong>ntificada por um i<strong>de</strong>ntificador único. A modificação <strong>de</strong> uma versão do objecto<br />

é impl<strong>em</strong>entada r<strong>em</strong>ovendo a versão antiga e criando uma nova versão. Esta aproximação leva à ine-<br />

xistência <strong>de</strong> conflitos entre operações executadas concorrent<strong>em</strong>ente. Por ex<strong>em</strong>plo, duas modificações<br />

concorrentes <strong>de</strong> uma mesma versão levam a uma dupla r<strong>em</strong>oção da versão antiga (a segunda r<strong>em</strong>oção é<br />

ignorada) e à criação <strong>de</strong> duas novas versões. Este subobjecto garante que as suas várias réplicas conver-<br />

g<strong>em</strong> para um estado comum <strong>de</strong>s<strong>de</strong> que as operações sejam executadas nos servidores respeitando a or<strong>de</strong>m<br />

causal. Este subobjecto base po<strong>de</strong> ser especializado <strong>de</strong> forma a <strong>de</strong>finir o tipo <strong>de</strong> objectos armazenados.<br />

O quarto subobjecto base criado mantém uma lista <strong>de</strong> referências únicas para outros subobjectos,<br />

i.e., <strong>em</strong> cada lista <strong>de</strong> referências não existe nenhum el<strong>em</strong>ento repetido. Duas operações básicas foram<br />

<strong>de</strong>finidas: inserir e r<strong>em</strong>over uma referência para um subobjecto. Adicionalmente, <strong>de</strong>finiu-se uma opera-<br />

ção para mover uma referência. A execução <strong>de</strong>sta operação r<strong>em</strong>ove a referência no subobjecto <strong>em</strong> que<br />

executa e (<strong>em</strong> caso <strong>de</strong> sucesso na r<strong>em</strong>oção) adiciona a referência no mesmo ou noutro subobjecto. A<br />

operação <strong>de</strong> r<strong>em</strong>oção r<strong>em</strong>ove a referência indicada (quando ela existe) in<strong>de</strong>pen<strong>de</strong>nt<strong>em</strong>ente da sua posi-<br />

ção na lista. A operação <strong>de</strong> inserção indica a posição <strong>em</strong> que a referência <strong>de</strong>ve ser inserida. A existência<br />

<strong>de</strong> operações submetidas concorrent<strong>em</strong>ente po<strong>de</strong> levar a que a posição <strong>de</strong> inserção <strong>de</strong> uma referência seja<br />

diferente da <strong>de</strong>sejada, se o componente <strong>de</strong> reconciliação não executar um algoritmo <strong>de</strong> transformação <strong>de</strong><br />

operações, como discutido na secção 4.1 (as operações inclu<strong>em</strong> o código necessário para suportar esse<br />

algoritmo).<br />

Para que as várias réplicas <strong>de</strong> um subobjecto convirjam para o mesmo estado é necessário executar<br />

todas as operações pela mesma or<strong>de</strong>m <strong>em</strong> todas as réplicas. O código das operações não efectua nenhum<br />

tratamento especial para as operações submetidas concorrent<strong>em</strong>ente. Assim, para operações que actuam<br />

sobre referências diferentes, o efeito <strong>de</strong> todas as operações é reflectido no estado final do subobjecto.<br />

Relativamente às operações que actuam sobre uma mesma referência, a or<strong>de</strong>m <strong>de</strong> execução das operações<br />

<strong>de</strong>termina o seu efeito no estado final do subobjecto.<br />

O subobjecto lista <strong>de</strong> referências po<strong>de</strong> ser especializado para <strong>de</strong>finir o tipo <strong>de</strong> referências que po<strong>de</strong>m<br />

ser adicionadas.<br />

O quinto subobjecto base impl<strong>em</strong>enta a interface <strong>de</strong> uma base <strong>de</strong> <strong>dados</strong> relacional SQL. Assim, este<br />

subobjecto <strong>de</strong>fine: uma operação <strong>de</strong> leitura, que permite executar interrogações SQL; e uma operação <strong>de</strong><br />

escrita, que permite executar as instruções <strong>de</strong> modificação SQL. Para armazenar os <strong>dados</strong> e executar as<br />

invocações, este subobjecto utiliza uma base <strong>de</strong> <strong>dados</strong> gerida pelo núcleo do sist<strong>em</strong>a, como um dos recur-

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

Saved successfully!

Ooh no, something went wrong!