560 likes | 704 Views
Bancos de Dados Objeto-relacional e Orientados a Objetos Aula6: DB4O Por: Robson do Nascimento Fidalgo Maria Carolina Torres da Silva rdnf@cin.ufpe.br mcts@cin.ufpe.br. Motivação. A Orientação a Objetos é uma tendência.
E N D
Bancos de Dados Objeto-relacional e Orientados a Objetos Aula6: DB4O Por: Robson do Nascimento Fidalgo Maria Carolina Torres da Silva rdnf@cin.ufpe.br mcts@cin.ufpe.br
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 • ...
DB4O – Visão Geral • Conceitos básicos • Consultas • Objetos Complexos • Coleções e arrays • Herança • Transações • Conhecimentos extras • Conclusões • Referências
DB4O - Introdução • Não é um SGBD • Utiliza arquivo para armazenamento • Suportado nas plataformas: • Java • .NET Framework • Free • Orientação a Objetos PURA • ...
DB4O Aprendendo o básico
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
DB4O – Aprendendo o básico • Objeto a ser persistido: Piloto
DB4O – Aprendendo o básico • Abrir a base de dados • Sintaxe • 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. ObjectContainer base = Db4o.openFile(<nome do arquivo>);
DB4O – Aprendendo o básico • Fechar a base de dados • Sintaxe • Aplicação básica (abrir e fechar a base): base.close(); ObjectContainer base = Db4o.openFile(<nome do arquivo>); try { // Realiza a operações necessárias }finally{ db.close(); }
DB4O – Aprendendo o básico • Aplicação • util.Conectividade • util.Repositorio
DB4O – Aprendendo o básico • Armazenar na base • Chamar o método store • Passar o objeto a ser persistido como parâmetro • Sintaxe: Objectobj = newObject(); ObjectContainerbase = Db4o.openFile(<nome do arquivo>); try { base.store(obj); }finally{ db.close(); }
DB4O – Aprendendo o básico • Armazenar na base (cont.) • Aplicação:
DB4O – Aprendendo o básico • Consultar a base • Querybyexample (QBE) • Forma mais fácil de se familiarizar • NativeQueries (NQ) • Interface principal para consultas • SODA Query API (SODA) • Forma mais avançada
DB4O – Aprendendo o básico • Consultar a base (cont.) • Querybyexample (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
DB4O – Aprendendo o básico • Consultar a base (cont.) • Querybyexample (QBE) (cont.) • Consultar todos os objetos de um tipo • Protótipo vazio! • .class
DB4O – Aprendendo o básico • Consultar a base (cont.) • Querybyexample (QBE) (cont.) • Consultar todos os objetos de um tipo impondo uma restrição • Protótipo restrito
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.
DB4O – Aprendendo o básico • Atualizar a base (cont.) • Aplicação:
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.
DB4O Consultando...
DB4O – Consultando... • Disponibiliza três formas para consulta: • Query-By-Example (QBE): maisapropriadaparausuáriosnovatosem DB4O. • Native Queries (NQ): principal interface pararealização de consultas, recomenda-se seuuso. • SODA:usomaisavançado, provendomaiordinamismonageração de consultas, jáque NQ é fortementetipada.
DB4O – Consultando... • Querybyexample • 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 • ...
DB4O – Consultando... • NativeQueries • 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
DB4O – Consultando... • NativeQueries (cont.) • Aplicação:
DB4O – Consultando... • NativeQueries (cont.) • Para realizar pesquisas mais complexas, o caminho já se mostra óbvio. • Aplicação:
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 NativeQueries por SODA • Nem todas as consultas puderam ser convertidas • Para a grande maioria das aplicações, NativeQueriesé a melhor interface de consulta.
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 meta-descriçã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
DB4O – Consultando... • SODA Query API (cont.) • Aplicação: • Qualquer candidato da classe Piloto será agregado ao resultado. Class: Piloto
DB4O – Consultando... • SODA Query API (cont.) • Aplicação: • Qualquer candidato da classe Piloto, que possua a quantidade de pontos determinada pelo parâmetro será agregado ao resultado. Class: Piloto pontos Equals: qtdePontos
DB4O Objetos complexos
DB4O – Objetos complexos • Aplicação:
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 , NativeQueries, SODA API): • Aplicação: inicial.base.carro.RepositorioCarro.java
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);
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);
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.
DB4O Coleções e arrays
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
DB4O – Coleções e arrays • Array • Aplicação: avancado.dados.LeitorSensor.java • Coleções • Aplicação: avancado.dados.CarroAvancado.java
DB4O – Coleções e arrays • Armazenamento, Consultas, Atualização e Remoção • Aplicação: avancado.base.RepositorioCarroAvancadoeavancado.base.RepositorioLeitorSensor
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.
DB4O Herança
DB4O - Herança • Melhora entendimento e reuso do código • Aplicação: heranca.dados.LeitorTemperatura, heranca.dados.LeitorPressaoe 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
DB4O Transações
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
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
DB4O Conhecimentos extras
DB4O – Conhecimentos extras • Alguns outros tópicos, não abordados aqui • Grafos profudos • Indexes • Otimização de NativeQueries • Ids • Funcionamento do DB4O num arquitetura cliente/servidor • ...
DB4O Para finalizar...
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 • ...