camada de persistência

Post on 30-Dec-2015

26 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

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

top related