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.
Herança
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
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 multiusuário
Uma OldCleanCache compartilhada por
todos os usuários
 Cada usuário possuirá individualmente
sua própria OldDirtyCache,
NewDeleteCache, OldDeleteCache e
NewCache

Download

Camada de Persistência