next up previous contents index
Next: Leitura Up: Persistência Previous: Exemplos de agrupamentos

Escrita

A operação de escrita de um grafo persistente em memória estável consiste em percorrer e salvaguardar todos os agrupamentos que dele fazem parte, mesmo que alguns sejam remotos. A operação de salvaguarda de um agrupamento faz-se através da salvaguarda de todos os objectos que dele fazem parte, partindo da raiz.

Dentro de cada objecto podem existir dois tipos de entidades: referências para outros objectos e que o se designará por dados, i.e., qualquer coisa que não seja uma referência.

O algoritmo de escrita apenas se preocupa directamente com as referências. Os dados são da exclusiva responsabilidade do programador da aplicação. Este tem à sua disposição dois métodos da carta, que pode redefinir. Se não forem redefinidos, apenas as referências serão salvaguardadas.

O primeiro método, SPM_quotPI_OnSave", permite executar operações de escrita de dados sobre uma entidade de armazenamento temporário (EAT) que é passada como argumento. A natureza exacta de uma EAT depende da realização concreta, mas que deve possuir uma região disponível para a escrita de dados, assim como um contador que permita saber qual a quantidade de informação armazenada. O segundo método, SPM_quotPI_OnRestore", recupera os dados do objecto a partir da EAT, previamente inicializada, passada como argumento. Deve haver cuidado para que as acções desempenhadas por ambos os métodos sejam complementares. A estrutura de EAT é a que se apresenta na figura 5.11.

  
Figure 5.11: Estrutura de uma EAT.

O algoritmo de travessia do grafo baseia-se em procura em profundidade. A procura de referências processe-se para cada objecto encontrado, excepto se o objecto não existir no contexto local. A procura pára sempre que seja encontrado um IOP pertencente ao agrupamento em construção ou a outro agrupamento. No caso de se ter um objecto remoto, a procura pára e apenas o IOP do objecto remoto é armazenado. Do lado remoto uma operação de escrita é iniciada, sendo retornado o IOP da raiz implícita do agrupamento formado remotamente. Por cada objecto encontrado, e depois de terem sido processadas todas as referências, o método OnSave é executado sobre a carta correspondente ao objecto. No caso remoto, a execução do método tem lugar no contexto onde a carta reside.

A lista de referências a processar é obtida automaticamente a partir da carta, através do método SPM_quotPI_getRefs", que retorna um conjunto de referências a processar. Este método, ao contrário dos dois anteriores, que podem ser opcionalmente redefinidos pelo programador, é automaticamente criado, pelo gerador de cartas, para cada classe que deva suportar persistência para as suas instâncias.

Além das referências para outros objectos e dos dados dependentes do nível de programa, quando um objecto é processado também se salvaguarda o seu tipo, com vista a posterior recuperação.

A estrutura global de um agrupamento figa definida como se ilustra na figura 5.12. Existem três tabelas e dois blocos de informação sobre o conteúdo dos objectos do agrupamento.

  
Figure 5.12: Estrutura de um agrupamento.

A primeira tabela contém as dimensões de si própria, das outras duas e dos dois blocos restantes. Destes, o primeiro contém descritores de objectos e o segundo as EAT utilizadas pelo nível de programa.

A segunda tabela contém as correspondências entre os identificadores intra-agrupamento, LIDs, e as posições correspondentes dentro do bloco de descritores. Note-se que, no decurso da vida de um agrupamento, alguns dos seus objectos podem ser destruídos. Os LIDs a eles associados deixam de ser válidos e não podem ser reutilizados. O mapa de LIDs deve então conter informação sobre o facto de eles serem inválidos.

A terceira tabela contém informação sobre os tipos dos objectos no interior do agrupamento.

O bloco de descritores contém, por cada entrada, o número de referências do objecto para outros objectos, o identificador do tipo, a dimensão da EAT do nível de programa, assim como a sua localização. Se a dimensão da EAT for dada como nula, a sua posição é ignorada.

Finalmente, o bloco de dados contém informação da responsabilidade do programador do nível de programa, pelo que a informação neles contida é completamente arbitrária.



next up previous contents index
Next: Leitura Up: Persistência Previous: Exemplos de agrupamentos



David M. M. de Matos
Thu Jun 29 14:58:09 MET DST 1995