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

asc.di.fct.unl.pt
from asc.di.fct.unl.pt More from this publisher
11.04.2013 Views

60 CAPÍTULO 4. DESCRIÇÃO DAS FUNCIONALIDADES PRINCIPAIS DO SISTEMA DOORS usando sequenciador para efectuar a transformação de operações de acordo com o algoritmo apresentado em [159]. Para utilizarem este componente, os utilizadores devem definir as funções de transformação de operações necessárias. 4.1.6 Operações do sistema Como se referiu anteriormente, as operações definidas num coobjecto podem ser classificadas como ope- rações do sistema. Estas operações são tratadas de forma especial pelos componentes de reconciliação: uma operação de sistema é executada imediatamente após ser recebida no servidor e não é reflectida no sumário das operações executadas. Assim, as operações de sistema podem ser executadas por diferentes ordens nas várias réplicas. O sumário das operações de sistema executadas é mantido de forma inde- pendente pelo componente de reconciliação de forma a garantir que cada operação de sistema apenas é executada uma vez. 4.2 Replicação secundária parcial O mecanismo de replicação secundária parcial (ou caching parcial) permite aos clientes obter cópias parciais dos coobjectos. Uma cópia parcial de um coobjecto consiste na parte comum do coobjecto e num subconjunto dos subobjectos contidos no coobjecto. A parte comum do coobjecto consiste nos componentes necessários (cápsula, atributos do sistema, etc.) à criação de uma cópia do coobjecto. O bom funcionamento deste mecanismo baseia-se no pressuposto que um subobjecto representa uma unidade de manipulação dos dados, sendo possível executar uma operação num subobjecto sem que ocorra nenhum falha na replicação. Desta forma, a divisão de um coobjecto em subobjectos simplifica o processo de replicação antecipada (pre-fetching). A razão lógica desta aproximação consiste na seguinte observação: o programador que desenha o coobjecto é a pessoa que melhor conhece o modo como os vários objectos interagem entre si, e quais devem ser replicados conjuntamente. Assim, o programador pode tornar esta informação visível ao sistema, agrupando os objectos fortemente ligados em unidades de maior dimensão: os subobjectos. Adicionalmente, um subobjecto pode especificar um conjunto de outros subobjectos que devem ser re- plicados conjuntamente com esse subobjecto (através da lista de subobjectos relacionados mantida no componente de atributos do sistema associado ao subobjecto). Um cliente obtém uma cópia parcial de um coobjecto a partir de um servidor. Posteriormente, pode actualizar a cópia parcial ou “aumentá-la” através da replicação de novos subobjectos. O funcionamento do sistema de replicação secundária parcial é detalhado na secção 6.3.1.

4.3. INVOCAÇÃO CEGA 61 4.3 Invocação cega O mecanismo de invocação cega tem como objectivo permitir que os utilizadores produzam contribuições úteis que afectem dados não replicados localmente durante os períodos de desconexão (como se discutiu na secção 2.3.6). Para tal, os utilizadores podem submeter operações sobre subobjectos que não estão presentes local- mente, desde que possuam uma referência (representante) para esse subobjecto. O processamento destas invocações é efectuado de forma semelhante ao processamento normal até ao momento em que as opera- ções devem ser executadas localmente sobre a cópia privada do subobjecto. Neste momento a execução não é efectuada e como resultado da invocação é lançada uma excepção que explica a situação. No en- tanto, como a informação sobre a invocação é guardada no componente de registo, ela será transmitida para o servidor onde será executada de forma semelhante às outras invocações. Desta forma simples, os utilizadores podem submeter modificações sobre subobjectos dos quais não possuem uma cópia local, como pretendido. O modo de processamento descrito é o modo normal utilizado para processar as invocações sobre subobjectos não replicados localmente. No entanto, é possível aos programadores especificar, para cada método, os seguintes comportamentos alternativos: silencioso Neste modo, não são lançadas excepções como resultado de uma invocação sobre um subob- jecto não presente localmente — para métodos que devolvam um resultado, o programador pode especificar um valor a devolver nessa situação. local Neste modo, as invocações sobre subobjectos não presentes localmente falham, sem serem arma- zenadas no componente de registo. A aplicação, ao obter a cópia privada do coobjecto, pode igualmente especificar o comportamento a utilizar. As opções especificadas sobrepõem-se às opções definidas por omissão nos subobjectos. O código para executar estes comportamentos alternativos é criado pelo pré-processador nos representantes dos subobjectos 7 . 4.3.1 Cópias de substituição Para permitir a uma aplicação observar o resultado de uma invocação cega que modifique o estado de um subobjecto, permite-se a criação de uma cópia de substituição desse subobjecto. 7 No caso de a aplicação especificar o modo de operação “silencioso” e o resultado das operações não estiver especificado, as operações devolvem valores pré-definidos — no protótipo do sistema DOORS, implementado em Java, são devolvidos os valores de iniciação para o tipo considerado.

60 CAPÍTULO 4. DESCRIÇÃO DAS FUNCIONALIDADES PRINCIPAIS DO SISTEMA DOORS<br />

usando sequenciador para efectuar a transformação <strong>de</strong> operações <strong>de</strong> acordo com o algoritmo apresentado<br />

<strong>em</strong> [159]. Para utilizar<strong>em</strong> este componente, os utilizadores <strong>de</strong>v<strong>em</strong> <strong>de</strong>finir as funções <strong>de</strong> transformação<br />

<strong>de</strong> operações necessárias.<br />

4.1.6 Operações do sist<strong>em</strong>a<br />

Como se referiu anteriormente, as operações <strong>de</strong>finidas num coobjecto po<strong>de</strong>m ser classificadas como ope-<br />

rações do sist<strong>em</strong>a. Estas operações são tratadas <strong>de</strong> forma especial pelos componentes <strong>de</strong> reconciliação:<br />

uma operação <strong>de</strong> sist<strong>em</strong>a é executada imediatamente após ser recebida no servidor e não é reflectida no<br />

sumário das operações executadas. Assim, as operações <strong>de</strong> sist<strong>em</strong>a po<strong>de</strong>m ser executadas por diferentes<br />

or<strong>de</strong>ns nas várias réplicas. O sumário das operações <strong>de</strong> sist<strong>em</strong>a executadas é mantido <strong>de</strong> forma in<strong>de</strong>-<br />

pen<strong>de</strong>nte pelo componente <strong>de</strong> reconciliação <strong>de</strong> forma a garantir que cada operação <strong>de</strong> sist<strong>em</strong>a apenas é<br />

executada uma vez.<br />

4.2 Replicação secundária parcial<br />

O mecanismo <strong>de</strong> replicação secundária parcial (ou caching parcial) permite aos clientes obter cópias<br />

parciais dos coobjectos. Uma cópia parcial <strong>de</strong> um coobjecto consiste na parte comum do coobjecto e<br />

num subconjunto dos subobjectos contidos no coobjecto. A parte comum do coobjecto consiste nos<br />

componentes necessários (cápsula, atributos do sist<strong>em</strong>a, etc.) à criação <strong>de</strong> uma cópia do coobjecto.<br />

O bom funcionamento <strong>de</strong>ste mecanismo baseia-se no pressuposto que um subobjecto representa uma<br />

unida<strong>de</strong> <strong>de</strong> manipulação dos <strong>dados</strong>, sendo possível executar uma operação num subobjecto s<strong>em</strong> que<br />

ocorra nenhum falha na replicação. Desta forma, a divisão <strong>de</strong> um coobjecto <strong>em</strong> subobjectos simplifica o<br />

processo <strong>de</strong> replicação antecipada (pre-fetching).<br />

A razão lógica <strong>de</strong>sta aproximação consiste na seguinte observação: o programador que <strong>de</strong>senha o<br />

coobjecto é a pessoa que melhor conhece o modo como os vários objectos interag<strong>em</strong> entre si, e quais<br />

<strong>de</strong>v<strong>em</strong> ser replicados conjuntamente. Assim, o programador po<strong>de</strong> tornar esta informação visível ao<br />

sist<strong>em</strong>a, agrupando os objectos fort<strong>em</strong>ente ligados <strong>em</strong> unida<strong>de</strong>s <strong>de</strong> maior dimensão: os subobjectos.<br />

Adicionalmente, um subobjecto po<strong>de</strong> especificar um conjunto <strong>de</strong> outros subobjectos que <strong>de</strong>v<strong>em</strong> ser re-<br />

plicados conjuntamente com esse subobjecto (através da lista <strong>de</strong> subobjectos relacionados mantida no<br />

componente <strong>de</strong> atributos do sist<strong>em</strong>a associado ao subobjecto).<br />

Um cliente obtém uma cópia parcial <strong>de</strong> um coobjecto a partir <strong>de</strong> um servidor. Posteriormente, po<strong>de</strong><br />

actualizar a cópia parcial ou “aumentá-la” através da replicação <strong>de</strong> novos subobjectos. O funcionamento<br />

do sist<strong>em</strong>a <strong>de</strong> replicação secundária parcial é <strong>de</strong>talhado na secção 6.3.1.

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

Saved successfully!

Ooh no, something went wrong!