View
110
Download
3
Category
Preview:
Citation preview
Camada de Persistência
Framework
Equivalência entre o Projeto Orientado a Objetos e o Modelo
Relacional
O BD relacional reflete exatamente as instâncias das classes, mas com organização distinta
Classes e Atributos
Tabela: Cliente
#IUOCliente (chave, unico) nome (unico) idade debito
3476 João 34 0,00
23984 Maria 35 23,00
2983 Pedro 53 12,00
Associações de * para *
Tabela: Curso_oferece_Disciplina
#IUOCurso (chave) #IUODisciplina (chave)
235 8746
235 347
376 347
568 899
Associações de 1 para *
Tabela: Cliente_fez_Emprestimo
#IUOCliente (chave) #IUOEmprestimo (chave, unico)
8712 7868
8712 5221
893 8762
Associações de 1 para 1
Tabela: Pagamento_referenteA_Venda
#IUOPagamento (chave, unico) #IUOVenda(chave, unico)
678 543
965 67
908 561
Associações Ordenadas
Tabela: Voo_guarda_Reserva
#IUOVoo (chave) #IUOReserva(chave, unico) Ordem
1233 12232 2
1233 4345435 1
5645 344386 2
5645 234323 3
5645 67665 1
2344 23722 1
Associações Qualificadas
Qualificador é um atributo da classe qualificada: implementa-se como associação para *.
Qualificador externo: implementa-se como a associação ordenada, trocando o índice pelo valor do qualificador externo.
Classe de Associação
Tabela: Emprego
IUOEmprego IUOPessoa IUOEmpresa salario dataContratacao
2 44 233 1000 12/03/98
21 44 278 1200 14/10/02
645 345 233 3200 11/03/90
233 33 233 3400 30/11/98
34 63 278 2300 07/02/00
346 55 3332 780 14/09/01
Associações Temporárias e Associações do
Controlador Não são persistentes.
Tabela: PagamentoEmCheque
#IUOPagamentoEmCheque (chave) numeroDoCheque valor vencimento
7887879 8768769 60,00 13/02/04
9876978 6743680 12,00 15/02/04
9877655 8976876 99,88 12/05/03
8976678 4354545 80,90 17/09/04
Herança
Proxy Virtual
Um proxy virtual é um objeto muito simples que implementa apenas duas responsabilidades: Se o objeto real não estiver em
memória, providenciar para que seja trazido
Repassar ao objeto real todas as mensagens que receber em nome dele
Carregamento preguiçoso
Objetos só são trazidos para a memória principal quando necessários para realizar alguma colaboração
Funcionamento Geral de um Proxy Virtual
Classe Proxy Virtual
Para qualquer mensagem recebida faça:
Se o objeto real não está em memória:
solicite o carregamento do objeto real
Fim
repasse a mensagem recebida ao objeto real.
Fim
Estruturas de Dados Virtuais
VirtualSet, VirtualList, VirtualMap Não contêm objetos, mas seus
identificadores únicos: IUO
Estrutura de um Virtual Set
Class VirtualSet {
private Vector iuos = new Vector();
private Iterator cursor;
...
Operações de Inserção e Remoção
...
public void add ( Object obj ) { iuos.add ( obj.iuo() ); };
public void remove (Object obj ) { iuos.remove ( obj.iuo() ); };
...
Iteração
...
public void start () { cursor = iuos.iterator() } ;
public void hastNext () { return cursor.hasNext() } ;
public void next () { BrokerManager.instance().at (cursor.next()) };
}
Materialização
É o ato de trazer um objeto da memória secundária para a principal
É feita por brokers especializados (um singleton para cada classe persistente)
Ao materializar um objeto o broker:
Cria uma instância da classe persistente Inicializa os valores dos atributos da
nova instância com valores da respectiva coluna do banco de dados
Inicializa as coleções virtuais (associações para *) com a lista dos OIDs dos respectivos objetos associados
Inicializa os proxies de objetos associados (associações para 1 ou para 0..1), com o OID do respectivo objeto
Exemplo
Um BrokerDeCliente deve:
Criar uma instância de Cliente Preencher os atributos nome, endereco,
telefone e debito da nova instância com os valores armazenados nas respectivas colunas da tabela Cliente no banco de dados. A linha da tabela selecionada será a linha cuja chave primária #IUOCliente corresponde ao IUO da instância de Cliente em questão
Um BrokerDeCliente deve:
Inicializar o VirtualSet reservas da nova instância de Cliente com os valores dos IUOs da coluna #IUOReserva da tabela associativa Cliente_solicitou_Reserva
Inicializar o VirtualSet emprestimos com os valores dos IUOs da coluna #IUOEmprestimo da tabela associativa Cliente_fez_Emprestimo
Caches
São mapeamentos que associam IUOs com objetos reais
O BrokerManager verifica se um objeto está em memória consultando as caches
Caches
Classificações: Limpos e sujos, dependendo se estão
ou não consistentes com o banco de dados
Novos e velhos, dependendo se já existem ou não no banco de dados
Excluídos, dependendo se foram excluídos em memória, mas ainda não do banco de dados
Funcionamento
Um objeto materializado é inserido em uma OldCleanCache
Quando alterado é movido para uma OldDirtyCache
Quando criado é inserido em uma NewCache
Quando destruído é movido para uma OldDeleteCache ou NewDeleteCache
Controle de Objetos Sujos
Nos métodos: set (atributo) associa, desassocia, adiciona e
remove (associações)
BrokerManager.instance().ficouSujo(this)
Efeitos do Committ
Efetuar um update no banco de dados para os objetos da OldDirtyCache e mover estes objetos para a OldCleanCache
Efetuar um insert no banco de dados para os objetos da NewCache e mover esses objetos para a OldCleanCache
Efetuar um remove no banco de dados para os objetos da OldDeleteCache e remover estes objetos da cache
Remover da cache os objetos da NewDeleteCache
Efeitos do Rollback
remover todos os objetos de todas as caches, exceto os da OldCleanCache
Sugestão para sistemas multi-usuário
Uma OldCleanCache compartilhada por todos os usuários
Cada usuário possuirá individualmente sua própria OldDirtyCache, NewDeleteCache, OldDeleteCache e NewCache
Recommended