camada de persistência

30
Camada de Persistência Framework

Upload: mia-figueroa

Post on 30-Dec-2015

26 views

Category:

Documents


0 download

DESCRIPTION

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. Associações de * para *. Associações de 1 para *. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Camada de Persistência

Camada de Persistência

Framework

Page 2: Camada de Persistência

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

Page 3: Camada de Persistência

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

Page 4: Camada de Persistência

Associações de * para *

Tabela: Curso_oferece_Disciplina

#IUOCurso (chave) #IUODisciplina (chave)

235 8746

235 347

376 347

568 899

Page 5: Camada de Persistência

Associações de 1 para *

Tabela: Cliente_fez_Emprestimo

#IUOCliente (chave) #IUOEmprestimo (chave, unico)

8712 7868

8712 5221

893 8762

Page 6: Camada de Persistência

Associações de 1 para 1

Tabela: Pagamento_referenteA_Venda

#IUOPagamento (chave, unico) #IUOVenda(chave, unico)

678 543

965 67

908 561

Page 7: Camada de Persistência

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

Page 8: Camada de Persistência

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.

Page 9: Camada de Persistência

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

Page 10: Camada de Persistência

Associações Temporárias e Associações do

Controlador Não são persistentes.

Page 11: Camada de Persistência

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

Page 12: Camada de Persistência

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

Page 13: Camada de Persistência

Carregamento preguiçoso

Objetos só são trazidos para a memória principal quando necessários para realizar alguma colaboração

Page 14: Camada de Persistência

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

Page 15: Camada de Persistência

Estruturas de Dados Virtuais

VirtualSet, VirtualList, VirtualMap Não contêm objetos, mas seus

identificadores únicos: IUO

Page 16: Camada de Persistência

Estrutura de um Virtual Set

Class VirtualSet {

private Vector iuos = new Vector();

private Iterator cursor;

...

Page 17: Camada de Persistência

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() ); };

...

Page 18: Camada de Persistência

Iteração

...

public void start () { cursor = iuos.iterator() } ;

public void hastNext () { return cursor.hasNext() } ;

public void next () { BrokerManager.instance().at (cursor.next()) };

}

Page 19: Camada de Persistência

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)

Page 20: Camada de Persistência

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

Page 21: Camada de Persistência

Exemplo

Page 22: Camada de Persistência

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

Page 23: Camada de Persistência

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

Page 24: Camada de Persistência

Caches

São mapeamentos que associam IUOs com objetos reais

O BrokerManager verifica se um objeto está em memória consultando as caches

Page 25: Camada de Persistência

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

Page 26: Camada de Persistência

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

Page 27: Camada de Persistência

Controle de Objetos Sujos

Nos métodos: set (atributo) associa, desassocia, adiciona e

remove (associações)

BrokerManager.instance().ficouSujo(this)

Page 28: Camada de Persistência

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

Page 29: Camada de Persistência

Efeitos do Rollback

remover todos os objetos de todas as caches, exceto os da OldCleanCache

Page 30: Camada de Persistência

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