Você está na página 1de 30

Camada de Persistncia

Framework

Equivalncia entre o Projeto Orientado a


Objetos e o Modelo Relacional

O BD relacional reflete exatamente as


instncias das classes, mas com
organizao distinta

Classes e Atributos

Tabela: Cliente
#IUOCliente (chave, unico)

nome (unico)

idade

debito

3476

Joo

34

0,00

23984

Maria

35

23,00

2983

Pedro

53

12,00

Associaes de * para *

Tabela: Curso_oferece_Disciplina
#IUOCurso (chave)

#IUODisciplina (chave)

235

8746

235

347

376

347

568

899

Associaes de 1 para *

Tabela: Cliente_fez_Emprestimo
#IUOCliente (chave)

#IUOEmprestimo (chave, unico)

8712

7868

8712

5221

893

8762

Associaes de 1 para 1

Tabela: Pagamento_referenteA_Venda
#IUOPagamento (chave, unico)

#IUOVenda(chave, unico)

678

543

965

67

908

561

Associaes Ordenadas

Tabela: Voo_guarda_Reserva
#IUOVoo (chave)

#IUOReserva(chave, unico)

Ordem

1233

12232

1233

4345435

5645

344386

5645

234323

5645

67665

2344

23722

Associaes Qualificadas
Qualificador um atributo da classe
qualificada: implementa-se como
associao para *.
Qualificador externo: implementa-se
como a associao ordenada, trocando
o ndice pelo valor do qualificador
externo.

Classe de Associao

Tabela: Emprego
IUOEmprego

IUOPessoa IUOEmpresa

salario

dataContratacao

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

Associaes Temporrias e
Associaes do Controlador

No so persistentes.

Herana

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 no estiver em memria,


providenciar para que seja trazido
Repassar ao objeto real todas as
mensagens que receber em nome dele

Carregamento preguioso

Objetos s so trazidos para a memria


principal quando necessrios para
realizar alguma colaborao

Funcionamento Geral de um
Proxy Virtual
Classe Proxy Virtual
Para qualquer mensagem recebida faa:
Se o objeto real no est em memria:
solicite o carregamento do objeto real
Fim
repasse a mensagem recebida ao objeto real.
Fim

Estruturas de Dados Virtuais


VirtualSet, VirtualList, VirtualMap
No contm objetos, mas seus
identificadores nicos: IUO

Estrutura de um Virtual Set

Class VirtualSet {
private Vector iuos = new Vector();
private Iterator cursor;
...

Operaes de Insero e
Remoo
...
public void add ( Object obj ) { iuos.add ( obj.iuo() ); };
public void remove (Object obj ) { iuos.remove ( obj.iuo() ); };
...

Iterao
...
public void start () { cursor = iuos.iterator() } ;
public void hastNext () { return cursor.hasNext() } ;
public void next () { BrokerManager.instance().at (cursor.next()) };
}

Materializao
o ato de trazer um objeto da memria
secundria para a principal
feita por brokers especializados (um
singleton para cada classe persistente)

Ao materializar um objeto o
broker:

Cria uma instncia da classe persistente


Inicializa os valores dos atributos da nova
instncia com valores da respectiva coluna do
banco de dados
Inicializa as colees virtuais (associaes
para *) com a lista dos OIDs dos respectivos
objetos associados
Inicializa os proxies de objetos associados
(associaes para 1 ou para 0..1), com o OID
do respectivo objeto

Exemplo

Um BrokerDeCliente deve:

Criar uma instncia de Cliente


Preencher os atributos nome, endereco,
telefone e debito da nova instncia com os
valores armazenados nas respectivas colunas
da tabela Cliente no banco de dados. A linha
da tabela selecionada ser a linha cuja chave
primria #IUOCliente corresponde ao IUO da
instncia de Cliente em questo

Um BrokerDeCliente deve:

Inicializar o VirtualSet reservas da nova


instncia 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
So mapeamentos que associam IUOs
com objetos reais
O BrokerManager verifica se um objeto
est em memria consultando as
caches

Caches

Classificaes:

Limpos e sujos, dependendo se esto ou


no consistentes com o banco de dados
Novos e velhos, dependendo se j existem
ou no no banco de dados
Excludos, dependendo se foram excludos
em memria, mas ainda no 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 destrudo movido para uma
OldDeleteCache ou NewDeleteCache

Controle de Objetos Sujos

Nos mtodos:

set (atributo)
associa, desassocia, adiciona e remove
(associaes)

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

Sugesto para sistemas multiusurio


Uma OldCleanCache compartilhada por
todos os usurios
Cada usurio possuir individualmente
sua prpria OldDirtyCache,
NewDeleteCache, OldDeleteCache e
NewCache

Você também pode gostar