Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
1
Bancos de Dados Objeto-relacional
e Orientados a Objetos
Aula6:
DB4O
Por:
Robson do Nascimento Fidalgo
[email protected]
Maria Carolina Torres da Silva
[email protected]
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
2
Motivação
• A Orientação a Objetos é uma tendência.
 Conceitos fundamentados
 Abstração máxima
 Aprendizado rápido
• Aumentar a produtividade
• Diminuir a dependência da camada de persistência
• ...
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
3
DB4O – Visão Geral
•
•
•
•
•
•
•
•
•
Conceitos básicos
Consultas
Objetos Complexos
Coleções e arrays
Herança
Transações
Conhecimentos extras
Conclusões
Referências
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
4
DB4O - Introdução
• Não é um SGBD
• Utiliza arquivo para armazenamento
• Suportado nas plataformas:
 Java
 .NET Framework
• Free
• Orientação a Objetos PURA
• ...
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
5
DB4O
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
6
DB4O – Aprendendo o básico
• Operações básicas:




Abrir e fechar a base
Armazenar na base
Consultar itens, com ou sem restrição
Alterar e remover um item já existente na base
• Metodologia
 Aplicação em um exemplo
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
7
DB4O – Aprendendo o básico
• Objeto a ser persistido: Piloto
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
8
DB4O – Aprendendo o básico
• Abrir a base de dados
 Sintaxe
ObjectContainer base = Db4o.openFile(<nome do arquivo>);
• Objeto ObjectContainer
 Representa a base de dados
 Interface abstrata
 Métodos básicos
• Observação: arquivo de qualquer extensão
 Dar preferência a arquivos vazios inicialmente.
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
9
DB4O – Aprendendo o básico
• Fechar a base de dados
 Sintaxe
base.close();
• Aplicação básica (abrir e fechar a base):
ObjectContainer base = Db4o.openFile(<nome do arquivo>);
try {
// Realiza a operações necessárias
}finally {
db.close();
}
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
10
DB4O – Aprendendo o básico
• Aplicação
 util.Conectividade
 util.Repositorio
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
11
DB4O – Aprendendo o básico
• Armazenar na base
 Chamar o método store
 Passar o objeto a ser persistido como parâmetro
 Sintaxe:
Object obj = new Object();
ObjectContainer base = Db4o.openFile(<nome do arquivo>);
try {
base.store(obj);
}finally {
db.close();
}
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
12
DB4O – Aprendendo o básico
• Armazenar na base (cont.)
 Aplicação:
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
13
DB4O – Aprendendo o básico
• Consultar a base
 Query by example (QBE)
• Forma mais fácil de se familiarizar
 Native Queries (NQ)
• Interface principal para consultas
 SODA Query API (SODA)
• Forma mais avançada
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
14
DB4O – Aprendendo o básico
• Consultar a base (cont.)
 Query by example (QBE)
• Cria um protótipo do que se deseja consultar
• Retorna todos os objetos do mesmo tipo que contenham os
mesmos valores dos campos do protótipo
• Resultado abstraído no tipo ObjectSet
 Estende de java.util.List e java.util.Iterator
 Pode ser parametrizado
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
15
DB4O – Aprendendo o básico
• Consultar a base (cont.)
 Query by example (QBE) (cont.)
• Consultar todos os objetos de um tipo
 Protótipo vazio!
 .class
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
16
DB4O – Aprendendo o básico
• Consultar a base (cont.)
 Query by example (QBE) (cont.)
• Consultar todos os objetos de um tipo impondo uma restrição
 Protótipo restrito
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
17
DB4O – Aprendendo o básico
• Atualizar a base
 Simples como armazenar
• Resgatar o objeto que se deseja alterar
• Realizar a alteração desejada
• Chamar o método store com esse objeto como parâmetro
• Observação: é necessário realizar o resgate inicial
antes da alteração.
 Caso isso não seja feito, ao chamar o método store um
novo objeto será inserido na base.
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
18
DB4O – Aprendendo o básico
• Atualizar a base (cont.)
 Aplicação:
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
19
DB4O – Aprendendo o básico
• Remover da base
 Simples como armazenar e alterar
• Resgatar o objeto que se deseja remover
• Chamar o método delete com esse objeto como parâmetro
• Observação: é necessário realizar o resgate inicial
antes da remoção. Um protótipo não é suficiente.
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
20
DB4O
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
21
DB4O – Consultando...
• Disponibiliza três formas para consulta:
 Query-By-Example (QBE): mais apropriada para usuários
novatos em DB4O.
 Native Queries (NQ): principal interface para realização de
consultas, recomenda-se seu uso.
 SODA: uso mais avançado, provendo maior dinamismo na
geração de consultas, já que NQ é fortemente tipada.
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
22
DB4O – Consultando...
• Query by example
 Já visto anteriormente
 Uso de protótipos/templates
 Limitações:
• Validação com todos os campos do objeto, exceto os que
possuírem valores default.
• O preenchimento dos campos força uma combinação de cláusulas
AND na nossa consulta.
• Consultas mais complexas não são possíveis (AND, NOT, OR,
etc.)
• Não pode filtrar as consultas usando valores defaults, já que os
mesmos são interpretados como não restritivos
• ...
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
23
DB4O – Consultando...
• Native Queries
 Recomendação para consultas a partir de uma aplicação
• Usa semântica da linguagem de programação utilizada
• Altamente organizada
• Escolha segura para o futuro
 Aceita em qualquer plataforma suportada por DB4O
 Uso de predicados para filtrar o retorno
 Aplicação: inicial.base.piloto.RepositorioPilotoNQ.java
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
24
DB4O – Consultando...
• Native Queries (cont.)
 Aplicação:
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
25
DB4O – Consultando...
• Native Queries (cont.)
 Para realizar pesquisas mais complexas, o caminho já se
mostra óbvio.
 Aplicação:
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
26
DB4O – Consultando...
• SODA Query API
 É a API de consulta mais baixo nível de DB4O
 Acessa diretamente os nós do grafo da consulta
 Utiliza string para identificar campo
• Não fornece segurança de tipo
• Nem checagem em tempo de compilação
• É um pouco complicado de escrever
 Tentou-se trocar Native Queries por SODA
• Nem todas as consultas puderam ser convertidas
• Para a grande maioria das aplicações, Native Queries é a melhor
interface de consulta.
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
27
DB4O – Consultando...
• SODA Query API (cont.)
 Criar um objeto Query
• Métodos básicos de uma consulta
 Ordenação
 Adicionar restrições
 ...
 Troca os protótipos utilizados em QBE para uma metadescrição dos objetos que se deseja retornar.
• Um grafo de consulta é montado com os nós e restrições.
 Cada nó é preenchido por um objeto candidato
 Cada restrição define se inclui ou exclui o candidato do resultado
 Aplicação: inicial.base.pilotoRepositorioPilotoSODA
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
28
DB4O – Consultando...
• SODA Query API (cont.)
 Aplicação:
Class: Piloto
 Qualquer candidato da classe Piloto será agregado ao resultado.
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
29
DB4O – Consultando...
• SODA Query API (cont.)
 Aplicação:
Class: Piloto
pontos
Equals: qtdePontos
 Qualquer candidato da classe Piloto, que possua a quantidade de
pontos determinada pelo parâmetro será agregado ao resultado.
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
30
DB4O
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
31
DB4O – Objetos complexos
• Aplicação:
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
32
DB4O – Objetos complexos
• Armazenamento:
 Aplicação:
Observação: Insere o carro e o piloto do carro, exceto
se o piloto relacionado com o carro tenha sido
trazido da base.
• Consultas (QBE , Native Queries, SODA API):
 Aplicação: inicial.base.carro.RepositorioCarro.java
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
33
DB4O – Objetos complexos
• Atualização:
 Aplicação: inicial.base.carro.RepositorioCarro.java
 Em algumas situações, a base não terá sido alterada
• Sessões diferentes com objetos carregados em memória.
 Para solucionar esse problema
Db4o.configure().objectClass(<nome completa da classe>)
.cascadeOnUpdate(true);
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
34
DB4O – Objetos complexos
• Remoção:
 Aplicação: inicial.base.carro.RepositorioCarro.java
 Em algumas situações, é necessário que todos os objetos
sejam apagados
• Exemplo: sempre que um carro for apagado do sistema, seu piloto
também deve ser
 Isso não é feito automaticamente!
 Para solucionar esse problema:
Db4o.configure().objectClass(<nome completa da classe>)
.cascadeOnDelete (true);
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
35
DB4O – Objetos complexos
• Remoção (cont.):
 CUIDADO:
• Ao se deletar um objeto, todos os que dependem dele são
apagados automaticamente.
• DB4O não realiza nenhuma verificação!
• Se um piloto é deletado, todos os carros que ele dirige também
serão deletados sem que haja nenhum alerta.
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
36
DB4O
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
37
DB4O – Coleções e arrays
• Algumas relações são melhores modeladas com
coleções ou arrays.
 DB4O dá suporte a ambos!
• Aprenderemos:




Armazenar
Consultar
Atualizar
Deletar
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
38
DB4O – Coleções e arrays
• Array
 Aplicação: avancado.dados.LeitorSensor.java
• Coleções
 Aplicação: avancado.dados.CarroAvancado.java
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
39
DB4O – Coleções e arrays
• Armazenamento, Consultas, Atualização e Remoção
 Aplicação: avancado.base.RepositorioCarroAvancado e
avancado.base.RepositorioLeitorSensor
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
40
DB4O – Coleções e arrays
• Consultas (QBE)
Observação 1: Tentar buscar uma lista com protótipo
sem instanciar o objeto que o possui, funciona!
Observação 2: Tentar buscar array com protótipo não
funciona sem instanciar o objeto que o possui.
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
41
DB4O
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
42
DB4O - Herança
• Melhora entendimento e reuso do código
 Aplicação:
heranca.dados.LeitorTemperatura,
heranca.dados.LeitorPressao e
heranca.dados.LeitorSensorHeranca
• CUIDADO com uso de classes abstratas ou
interfaces nas consultas
• Consultas: heranca.base.RepositorioLeitoresHeranca
• Inserção, Atualização e remoção
 sem nenhuma alteração
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
43
DB4O
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
44
DB4O – Transações
• Acesso concorrente ao uma única base
 DB4O provê um mecanismo de transação
• Commit
• Rollback
• Commit e Rollback
 Sempre age dentro de uma transação
• Implicitamente iniciada quando abre-se a base
• E implicitamente finalizada quando fecha-se a base
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
45
DB4O – Transações
• Rollback
 Cuidado com objetos alterados, mas não armazenados.
 Aplicação: MainTransacao.java
• Objeto ExtObjectContainer
 Retorna o estado do objeto para o estado antes do rollback
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
46
DB4O
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
47
DB4O – Conhecimentos extras
• Alguns outros tópicos, não abordados aqui






Grafos profudos
Indexes
Otimização de Native Queries
Ids
Funcionamento do DB4O num arquitetura cliente/servidor
...
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
48
DB4O
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
49
DB4O – Considerações Finais
• Vantagens
 Aprendizado rápido
 Produtividade máxima
 Custo mínimo
• Java
• Biblioteca open-source
• IDE free
 Independência da equipe de BD
 ...
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
50
DB4O – Considerações Finais
• Desvantagens
 SQL não existe
 Não é um SGBD
 Dados armazenados em um arquivo qualquer
• Falta de segurança
• Nenhum poder de recuperação
• ...
 Controle manual
 Alto poder ao desenvolvedor
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
51
DB4O – Considerações Finais
• Resumindo...
 Para aplicações simples, uma boa opção!
 Para aplicações complexas, de grandes empresas...
• Melhor repensar seu uso
 Precisa amadurecer para ganhar o mercado
 Academicamente interessante
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
52
DB4O – Considerações Finais
• Configuração para desenvolvimento
 Tutorial completo de instalação
• Desde o eclipse até a configuração do projeto
• Ainda não finalizado
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
53
DB4O
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
54
DB4O – Referências
• DB4O - Site oficial
 http://www.db4o.com/
• DB4O – Tutorial
 http://www.cin.ufpe.br/~mcts/ETI/DB4O/Tutorial.pdf
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
55
Bancos de Dados Relacional-objeto e Orientados a Objetos - Prof. Robson Fidalgo 
56
Download

DB4O