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
32 CAPÍTULO 3. APRESENTAÇÃO DO SISTEMA DOORS Os clientes e os servidores mantêm uma cópia de cada coobjecto que replicam em memória estável. Para tal, o sistema mantém um conjunto de recursos (ficheiros e bases de dados) associados a cada coobjecto. O modo como o estado de um coobjecto é armazenado nestes recursos pode ser redefinido por cada coobjecto (com excepção dos atributos do sistema). No protótipo do sistema DOORS, esta gravação consiste, por omissão, na gravação do estado dos objectos que representam os componentes e os subobjectos (cada um num ficheiro diferente). Um coobjecto é sempre manipulado em memória. Assim, para manipular um coobjecto, é necessário criar uma cópia desse coobjecto (em memória) 5 . O núcleo do sistema cria esta cópia com base nas propriedades definidas nos atributos do sistema. Estas propriedades especificam a fábrica a usar na criação da cópia do coobjecto e a localização do código necessário. O estado do coobjecto é obtido a partir dos recursos associados ao coobjecto. A cópia de um coobjecto pode ser manipulada directamente pelo núcleo do sistema ou entregue a uma aplicação. Quando apropriado, o novo estado do coobjecto pode ser gravado nos recursos associados ao coobjecto. 3.2.2.2 Funcionamento comum no cliente Num cliente, uma aplicação manipula uma cópia privada de um coobjecto. Como se referiu anterior- mente, esta cópia é criada pelo núcleo do sistema e entregue à aplicação para uso exclusivo. Após obter a cópia do coobjecto (ou simplesmente o coobjecto), a aplicação deve obter uma referên- cia (representante) de um subobjecto base. Este representante (proxy) é usado para aceder e modificar o estado do subobjecto e permite à aplicação navegar através dos subobjectos que constituem o estado actual do coobjecto, obtendo referências para outros subobjectos. Quando uma aplicação invoca um método num representante de um subobjecto, o representante cria um objecto que codifica a invocação executada, incluindo informação sobre o método a executar e os parâmetros da invocação. O subobjecto alvo da invocação não necessita de estar instanciado nesse momento. O representante do subobjecto entrega o objecto que codifica a invocação executada ao com- ponente de adaptação. Vários métodos estão disponíveis no componente de adaptação dependendo de: (1) o método invocado ser de leitura ou escrita 6 ; e (2) a invocação ter sido efectuada directamente pela aplicação ou resultar da execução de outro método do coobjecto (note que um subobjecto pode manter referências para outros subobjectos e o código de um método definido num subobjecto pode invocar métodos de outros subobjectos). O componente de adaptação processa a operação recebida do representante (proxy) do subobjecto 5 Por questões de eficiência, o sistema pode manter cópias em memória do conjunto de coobjectos mais utilizados. 6 Um método de leitura não produz modificações no estado do subobjecto e é apenas usado para aceder ao estado actual do subobjecto. Um método de escrita produz modificações no estado actual do subobjecto.
3.2. FRAMEWORK DE COMPONENTES: PRINCÍPIOS GERAIS 33 em função do tipo de invocação executada (leitura/escrita, directa/indirecta) implementando a política definida pelo componente. Para o processamento de uma operação existem várias possibilidades. Por exemplo, é possível propagar a operação imediatamente para ser executada num servidor (usando os serviços do núcleo do sistema). Neste caso, o resultado da invocação é o resultado obtido remotamente — se este resultado incluir uma referência (representante) de um subobjecto, esta referência é devidamente integrada na cópia do coobjecto 7 . Para executar a operação localmente, o componente de adaptação propaga o objecto que representa a invocação executada para a cápsula do coobjecto. A cápsula controla a execução local da operação. No caso de ser uma operação de leitura ou a invocação resultar da execução de outra operação, a execução local consiste, na execução do método da cópia privada do subobjecto (o resultado obtido, quando exista, é devolvido como resultado da invocação no representante do subobjecto) 8 . No caso de ser uma operação de escrita executada directamente por uma aplicação, o processamento consiste normalmente em dois passos. Primeiro, a operação é entregue ao componente de registo. Segundo, o componente de reconciliação é notificado da presença de uma nova operação no registo — em geral, no cliente, as operações são executadas imediatamente, o que consiste em executar o método da cópia privada do subobjecto. Para executar localmente uma operação num subobjecto, é necessário obter a cópia local do subob- jecto — para tal, usa-se o gestor de subobjectos. Se o subobjecto ainda não estiver instanciado, o gestor de subobjectos encarrega-se de instanciar uma cópia privada. A execução de uma operação pode produzir informação de awareness. Esta informação é criada invocando, durante a execução da operação, um método específico da classe base do subobjecto. Este método apenas reenvia a invocação para o componente de awareness. O componente de awareness processa esta informação de acordo com a política definida — em geral, no cliente, esta informação é ignorada. Para gravar as modificações executadas, as aplicações usam uma função da API do sistema. Esta função, além de gravar a versão provisória do estado do coobjecto na cache do cliente, extrai a sequência de operações a propagar para o servidor. Esta sequência de operações é extraída através de um método definido na interface de sistema do coobjecto (checkChanges), o qual se limita a obter esta informação no componente de registo. Como se descreveu anteriormente, o componente registo mantém a sequência de todas as operações de escrita executadas pela aplicação (e que foram executadas localmente). 7 Esta integração, executada automaticamente, consiste em ajustar, no representante, a referência para o componente de adaptação. 8 Para situações excepcionais, definiu-se um mecanismo que permite indicar durante a execução de uma operação que se pretende registar a próxima invocação executada noutro subobjecto. Deste modo, esta invocação será propagada para todas as réplicas em conjunto com a invocação original que levou à execução da operação que está a ser executar.
- Page 1 and 2: Universidade Nova de Lisboa Faculda
- Page 3: Agradecimentos Para a realização
- Page 7 and 8: Abstract The widespread use of mobi
- Page 9 and 10: Conteúdo 1 Introdução 1 1.1 Moti
- Page 11 and 12: CONTEÚDO xi 5 Avaliação do model
- Page 13 and 14: CONTEÚDO xiii 10 Sistema de reconc
- Page 15 and 16: Lista de Figuras 3.1 Arquitectura d
- Page 17 and 18: Lista de Tabelas 8.1 Tabela de comp
- Page 19 and 20: Capítulo 1 Introdução Os avanço
- Page 21 and 22: 1.2. SISTEMAS DISTRIBUÍDOS DE GEST
- Page 23 and 24: 1.3. VISÃO GERAL E CONTRIBUIÇÕES
- Page 25 and 26: 1.3. VISÃO GERAL E CONTRIBUIÇÕES
- Page 27 and 28: Capítulo 2 Princípios gerais No c
- Page 29 and 30: 2.2. MOTIVAÇÃO - ALGUMAS APLICAÇ
- Page 31 and 32: 2.3. PRINCÍPIOS 13 garantir a disp
- Page 33 and 34: 2.3. PRINCÍPIOS 15 obter o estado
- Page 35 and 36: 2.3. PRINCÍPIOS 17 sobre a evoluç
- Page 37 and 38: 2.3. PRINCÍPIOS 19 2.3.6 Invocaç
- Page 39 and 40: 2.3. PRINCÍPIOS 21 solúveis). As
- Page 41 and 42: Capítulo 3 Apresentação do siste
- Page 43 and 44: 3.1. MODELO GERAL 25 para a activid
- Page 45 and 46: 3.1. MODELO GERAL 27 Aplicação At
- Page 47 and 48: 3.2. FRAMEWORK DE COMPONENTES: PRIN
- Page 49: 3.2. FRAMEWORK DE COMPONENTES: PRIN
- Page 53 and 54: 3.2. FRAMEWORK DE COMPONENTES: PRIN
- Page 55 and 56: 3.3. FRAMEWORK DE COMPONENTES: COMP
- Page 57 and 58: 3.3. FRAMEWORK DE COMPONENTES: COMP
- Page 59 and 60: 3.3. FRAMEWORK DE COMPONENTES: COMP
- Page 61 and 62: 3.3. FRAMEWORK DE COMPONENTES: COMP
- Page 63 and 64: 3.3. FRAMEWORK DE COMPONENTES: COMP
- Page 65 and 66: 3.4. FRAMEWORK DE COMPONENTES: IMPL
- Page 67 and 68: 3.4. FRAMEWORK DE COMPONENTES: IMPL
- Page 69 and 70: Capítulo 4 Descrição das funcion
- Page 71 and 72: 4.1. RECONCILIAÇÃO 53 Segundo, um
- Page 73 and 74: 4.1. RECONCILIAÇÃO 55 4.1.3 Ordem
- Page 75 and 76: 4.1. RECONCILIAÇÃO 57 4.1.4.2 Ver
- Page 77 and 78: 4.1. RECONCILIAÇÃO 59 No decurso
- Page 79 and 80: 4.3. INVOCAÇÃO CEGA 61 4.3 Invoca
- Page 81 and 82: 4.4. INTEGRAÇÃO DE SESSÕES SÍNC
- Page 83 and 84: 4.4. INTEGRAÇÃO DE SESSÕES SÍNC
- Page 85 and 86: 4.4. INTEGRAÇÃO DE SESSÕES SÍNC
- Page 87 and 88: Capítulo 5 Avaliação do modelo d
- Page 89 and 90: 5.1. EDITOR MULTI-SÍNCRONO DE DOCU
- Page 91 and 92: 5.1. EDITOR MULTI-SÍNCRONO DE DOCU
- Page 93 and 94: 5.1. EDITOR MULTI-SÍNCRONO DE DOCU
- Page 95 and 96: 5.2. AGENDA PARTILHADA 77 Figura 5.
- Page 97 and 98: 5.2. AGENDA PARTILHADA 79 de awaren
- Page 99 and 100: Capítulo 6 Núcleo do sistema DOOR
3.2. FRAMEWORK DE COMPONENTES: PRINCÍPIOS GERAIS 33<br />
<strong>em</strong> função do tipo <strong>de</strong> invocação executada (leitura/escrita, directa/indirecta) impl<strong>em</strong>entando a política<br />
<strong>de</strong>finida pelo componente. Para o processamento <strong>de</strong> uma operação exist<strong>em</strong> várias possibilida<strong>de</strong>s. Por<br />
ex<strong>em</strong>plo, é possível propagar a operação imediatamente para ser executada num servidor (usando os<br />
serviços do núcleo do sist<strong>em</strong>a). Neste caso, o resultado da invocação é o resultado obtido r<strong>em</strong>otamente —<br />
se este resultado incluir uma referência (representante) <strong>de</strong> um subobjecto, esta referência é <strong>de</strong>vidamente<br />
integrada na cópia do coobjecto 7 . Para executar a operação localmente, o componente <strong>de</strong> adaptação<br />
propaga o objecto que representa a invocação executada para a cápsula do coobjecto.<br />
A cápsula controla a execução local da operação. No caso <strong>de</strong> ser uma operação <strong>de</strong> leitura ou a<br />
invocação resultar da execução <strong>de</strong> outra operação, a execução local consiste, na execução do método da<br />
cópia privada do subobjecto (o resultado obtido, quando exista, é <strong>de</strong>volvido como resultado da invocação<br />
no representante do subobjecto) 8 . No caso <strong>de</strong> ser uma operação <strong>de</strong> escrita executada directamente por<br />
uma aplicação, o processamento consiste normalmente <strong>em</strong> dois passos. Primeiro, a operação é entregue<br />
ao componente <strong>de</strong> registo. Segundo, o componente <strong>de</strong> reconciliação é notificado da presença <strong>de</strong> uma<br />
nova operação no registo — <strong>em</strong> geral, no cliente, as operações são executadas imediatamente, o que<br />
consiste <strong>em</strong> executar o método da cópia privada do subobjecto.<br />
Para executar localmente uma operação num subobjecto, é necessário obter a cópia local do subob-<br />
jecto — para tal, usa-se o gestor <strong>de</strong> subobjectos. Se o subobjecto ainda não estiver instanciado, o gestor<br />
<strong>de</strong> subobjectos encarrega-se <strong>de</strong> instanciar uma cópia privada.<br />
A execução <strong>de</strong> uma operação po<strong>de</strong> produzir informação <strong>de</strong> awareness. Esta informação é criada<br />
invocando, durante a execução da operação, um método específico da classe base do subobjecto. Este<br />
método apenas reenvia a invocação para o componente <strong>de</strong> awareness. O componente <strong>de</strong> awareness<br />
processa esta informação <strong>de</strong> acordo com a política <strong>de</strong>finida — <strong>em</strong> geral, no cliente, esta informação é<br />
ignorada.<br />
Para gravar as modificações executadas, as aplicações usam uma função da API do sist<strong>em</strong>a. Esta<br />
função, além <strong>de</strong> gravar a versão provisória do estado do coobjecto na cache do cliente, extrai a sequência<br />
<strong>de</strong> operações a propagar para o servidor. Esta sequência <strong>de</strong> operações é extraída através <strong>de</strong> um método<br />
<strong>de</strong>finido na interface <strong>de</strong> sist<strong>em</strong>a do coobjecto (checkChanges), o qual se limita a obter esta informação<br />
no componente <strong>de</strong> registo. Como se <strong>de</strong>screveu anteriormente, o componente registo mantém a sequência<br />
<strong>de</strong> todas as operações <strong>de</strong> escrita executadas pela aplicação (e que foram executadas localmente).<br />
7 Esta integração, executada automaticamente, consiste <strong>em</strong> ajustar, no representante, a referência para o componente <strong>de</strong><br />
adaptação.<br />
8 Para situações excepcionais, <strong>de</strong>finiu-se um mecanismo que permite indicar durante a execução <strong>de</strong> uma operação que se<br />
preten<strong>de</strong> registar a próxima invocação executada noutro subobjecto. Deste modo, esta invocação será propagada para todas as<br />
réplicas <strong>em</strong> conjunto com a invocação original que levou à execução da operação que está a ser executar.