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