Trabalho de Persistência para o EPOS
Problema Proposto Implementar no Epos objetos persistentes, ou seja, fazer com que o sistema, ao ser reiniciado, por exemplo, permita sua recuperação.
Proposta para a Solução Proposta: Utilizar templates, declarando os atributos que serão persistidos, também fazer uso de override de operadores, fazendo com que os objetos ao serem atualizados sejam salvos “automaticamente”.
Implementação Para os atributos serem persistidos, a classe deve estender a nossa classe PersistentObject. A utilização de templates permite que o usuário declare os atributos que serão permitidos da seguinte maneira: Persistent var; Na criação destes objetos persistentes também deve ser fornecido um ID, como parâmetro adicional no seu construtor. Quando o objeto for criado, é feita uma verificação pelo seu ID, caso ele já estiver em memória, os valores dos seus atributos persistentes são carregados.
Implementação Foi criada uma interface Memory para que diferentes tipos de memória possam ser utilizados, bastando implementar os métodos read, write e size.
Implementação A classe PersistenceManager vai gerenciar a geração de novos id’s e o armazenamento dos objetos através do ObjectsTable, que carregará e salvará os objetos na memória e os organizará por dois id’s, o do objeto e o do atributo. Os id’s de atributos serão gerados automaticamente pela classe Persistent.
Armazenamento dos dados Quando for definida a memória a ser utilizada através do método setMemory, o PersistenceManager carregará o índice de objetos da memória, que ficará no ObjectsTable. A primeira posição da memória conterá o tamanho do índice. Cada elemento do índice será composto de: identificador, endereço e tamanho.
Diagrama de classes
Sequência – operador =
Sequência - setMemory