Whats new? | Login
Cadastre-se | Atendimento | RSS
 
Live chat by Netwatts
Home Entenda o site Revistas Canais Cursos Palestras Suporte Fórum +Serviços Assine Compre Créditos
Você está em: / canal Java [artigos]
   + Java:   artigos   |   vídeos   |    cursos   |    mais
 
 
Outras seções:
Home 
Entenda o site 
Revistas 
Canais 
Cursos 
Palestras 
Suporte 
Fórum 
Oportunidades 
 Todos os links 

 
  Ir para o Canal Java  
+Canais:
Canal Delphi 
Canal Java 
Canal .net 
Canal Banco de dados 
Canal Mobile 
Canal Ruby on Rails 
Canal PHP 
Canal ASP 
Canal WebDesign 
Canal Engenharia de Software 
Canal Linux 
Canal Scripting 
Canal Outros 
  Todo conteúdo DevMedia 

 
  ver cursos de Java  
+Cursos:
Cursos de Java 
Cursos de .net 
Cursos de Banco de dados 
Cursos de Delphi 
Cursos de Engenharia de Software 
Cursos de Ruby on Rails 
Cursos de ASP 
Cursos de WebDesign 
Cursos de PHP 
Cursos de PalmOS 
Cursos de Linux 
Cursos de Scripting 
  Formações completas 
  Todos os cursos 

 
Canal de conteúdo Java
Revista Java Magazine
Suporte Java
Palestras de Java
E-books de Java
Downloads de Java
 

+Revistas:
ClubeDelphi 
.net Magazine 
Java Magazine 
webMobile Magazine 
SQL Magazine 
Engenharia de Software Magazine 
  Edições anteriores impressas 
  Todas as revistas 


[Fechar]
Este post está disponível para quem é assinante da Java Magazine, SQL Magazine ou para quem possui Créditos DevMedia.


  Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ 0,00 (assinante) ou R$ 0,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ 0,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia


DB4Objects – Parte III

DB4Objects – Parte III

 

Armazenando objetos relacionados

O armazenamento de objetos relacionados é bem simples, utilizando o método set() no objeto que seja top-level da relação para armazenar ambos. Para isso, vamos modificar a classe cliente, adicionando um relacionamento HAS-A Cliente -> Produto. Abaixo segue a classe alterada e a nova classe Produto.

 

Classe Cliente alterada:

package br.com.javamagazine;

 

public class Cliente {

      private int codigo;

      private String nome;

      private Produto produto;

     

      public Cliente(int codigo, String nome) {

            super();

            this.codigo = codigo;

            this.nome = nome;

      }    

      public int getCodigo() {

            return codigo;

      }

      public void setCodigo(int codigo) {

            this.codigo = codigo;

      }

      public String getNome() {

            return nome;

      }

      public void setNome(String nome) {

            this.nome = nome;

      }

     

      public Produto getProduto() {

            return produto;

      }

      public void setProduto(Produto produto) {

            this.produto = produto;

      }

     

      public String toString(){

return "Codigo: "+ codigo + " Nome: " + nome + "\n" + "Produto: "+ produto.getNome();

      }

           

}

 

Classe Produto

package br.com.javamagazine;

 

 

public class Produto {

      private String nome;

      private Double valor;

     

      public Produto(String nome, Double valor) {

            super();

            this.nome = nome;

            this.valor = valor;

      }

     

      public String getNome() {

            return nome;

      }

      public void setNome(String nome) {

            this.nome = nome;

      }

      public Double getValor() {

            return valor;

      }

      public void setValor(Double valor) {

            this.valor = valor;

      }

     

      public String toString (){

            return "Nome: " + nome + "Valor: " + valor;

      }

     

     

}

 

A seguir segue a aplicação do armazenamento de objetos relacionados:

 

package br.com.javamagazine;

 

import com.db4o.Db4o;

import com.db4o.ObjectContainer;

import com.db4o.ObjectSet;

 

public class Main {

      public static void main(String[] args) {

            ObjectContainer db=Db4o.openFile("c:/guerra.yap");

            Cliente cliente = new Cliente(123,"José");

            Produto produto = new Produto("Celular",100.2);

            cliente.setProduto(produto);

            db.set(cliente);

            ObjectSet<Produto> set = db.get(Produto.class);

            while (set.hasNext()){

                  System.out.println (set.next());

            }

      }

 

}

 

Saída:

Nome: CelularValor: 100.2

[db4o 5.5.1   2006-12-08 11:51:21]

 'c:/guerra.yap' closed by ShutdownHook.

 

O produto do cliente foi armazenado implicitamente no exemplo citado.

 

Recuperando Objetos relacionados

Agora faremos a busca do Cliente José e do produto relacionado a ele:

 

package br.com.javamagazine;

 

import com.db4o.Db4o;

import com.db4o.ObjectContainer;

import com.db4o.ObjectSet;

import com.db4o.query.Query;

 

public class Main {

      public static void main(String[] args) {

            ObjectContainer db=Db4o.openFile("c:/guerra.yap");

            Query query = db.query();

            query.constrain(Cliente.class);

            query.descend("nome").constrain("José");

            Cliente cliente = (Cliente) query.execute().next();

            ObjectSet<Cliente> set = db.get(cliente);

           

            while (set.hasNext()){

                  System.out.println (set.next());

            }

      }

}

 

Saída:

Codigo: 123 Nome: José

Produto: Pen Drive

[db4o 5.5.1   2007-01-09 17:58:07]

 'c:/guerra.yap' closed by ShutdownHook.

 

Controle de Transações

O db4o oferece o suporte para o controle de transações, onde clientes acessam o banco de forma paralela a um mesmo banco de dados. Provavelmente você já deve ter trabalhado com os Commits e Rollbacks de algum banco relacional que suporte transações. O db4o trabalha de forma semelhante, como veremos a seguir.

 

Commit e Rollback

Por definição o db4o trabalha sempre com transações. Ao iniciar o container, o db4o inicia implicitamente uma transação. Ao fechar o container a transação é terminada e commit é executado também de forma implícita. Toda essa operação é feita de forma automática, mas nada impede que seja feita de forma manual:

 

package br.com.javamagazine;

 

import com.db4o.Db4o;

import com.db4o.ObjectContainer;

import com.db4o.ObjectSet;

 

public class Main {

      public static void main(String[] args) {

            ObjectContainer db=Db4o.openFile("c:/guerra.yap");

            Produto produto = new Produto("Home Theater", 500.0);

            db.set(produto);

            db.commit();           

            ObjectSet<Cliente> set = db.get(Produto.class);

           

            while (set.hasNext()){

                  System.out.println (set.next());

            }

      }

 

}

 

Saída:

Nome: Teclado Valor: 20.0

Nome: Home Theater Valor: 500.0

Nome: Teclado Valor: 20.0

Nome: Pen Drive Valor: 150.0

Nome: Teclado Valor: 20.0

Nome: Celular Valor: 100.2

Nome: Pen Drive Valor: 150.0

Nome: Pen Drive Valor: 150.0

Nome: Pen Drive Valor: 150.0

Nome: Pen Drive Valor: 150.0

Nome: Celular Valor: 100.2

Nome: Palm Valor: 500.0

Nome: Palm Valor: 500.0

Nome: Palm Valor: 500.0

[db4o 5.5.1   2007-01-09 18:18:53]

 'c:/guerra.yap' closed by ShutdownHook.

 

Não há nenhuma diferença em efetuar o db.commit() porque este comando é executado automaticamente quando o container é fechado.

 

Porém, podemos voltar ao estado do banco dados a partir do ultimo commit efetuado utilizando o Rollback:

 

package br.com.javamagazine;

 

import com.db4o.Db4o;

import com.db4o.ObjectContainer;

import com.db4o.ObjectSet;

 

public class Main {

      public static void main(String[] args) {

            ObjectContainer db=Db4o.openFile("c:/guerra.yap");

            Produto produto = new Produto("DVD", 300.0);

            db.set(produto);

            System.out.println("Exibindo dados antes do Rollback: \n");

            ObjectSet<Cliente> set = db.get(Produto.class);

           

            while (set.hasNext()){

                  System.out.println (set.next());

            }

            db.rollback();

            System.out.println("Exibindo dados depois do Rollback: \n");

           

            set = db.get(Produto.class);

           

            while (set.hasNext()){

                  System.out.println (set.next());

            }

           

      }

 

}

 

Saída:

Exibindo dados antes do Rollback:

 

Nome: Teclado Valor: 20.0

Nome: Home Theater Valor: 500.0

Nome: Teclado Valor: 20.0

Nome: Pen Drive Valor: 150.0

Nome: Teclado Valor: 20.0

Nome: DVD Valor: 300.0

Nome: Celular Valor: 100.2

Nome: Pen Drive Valor: 150.0

Nome: Pen Drive Valor: 150.0

Nome: Pen Drive Valor: 150.0

Nome: Pen Drive Valor: 150.0

Nome: Celular Valor: 100.2

Nome: Palm Valor: 500.0

Nome: Palm Valor: 500.0

Nome: Palm Valor: 500.0

Exibindo dados depois do Rollback:

 

Nome: Teclado Valor: 20.0

Nome: Home Theater Valor: 500.0

Nome: Teclado Valor: 20.0

Nome: Pen Drive Valor: 150.0

Nome: Teclado Valor: 20.0

Nome: Celular Valor: 100.2

Nome: Pen Drive Valor: 150.0

Nome: Pen Drive Valor: 150.0

Nome: Pen Drive Valor: 150.0

Nome: Pen Drive Valor: 150.0

Nome: Celular Valor: 100.2

Nome: Palm Valor: 500.0

Nome: Palm Valor: 500.0

Nome: Palm Valor: 500.0

[db4o 5.5.1   2007-01-10 11:02:43]

 'c:/guerra.yap' closed by ShutdownHook.

 

Podemos perceber que o banco voltou ao seu estado original a partir do ultimo commit executado. O Produto DVD foi armazenado no cache, mas não foi “comitado”, já que executamos o Rollback.

 

No próximo artigo falaremos sobre o ambiente Cliente / Servidor, com exemplos de aplicações Embedded e Networking, Id’s, Encriptação, Tunning, Manutenção e o Object Manager. Até lá!





GLAUCIO GUERRA
Há cinco anos atuando com desenvolvimento de software, Glaucio Guerra (glaucioguerra@gmail.com) trabalha como Analista de Sistemas no ambiente Petrobras, no Rio de Janeiro, sendo bacharelando em Ciência da Computação. Atualmente, concentra seus proje...
Ver space do autor


Estatísticas deste post:
Visualizações:  10928
Favoritado:  7 vez(es)
 
Nenhum voto recebido

  Central de Serviços:
Inclua seu próprio artigo! (ajuda)
Participe! Inclua um comentário
Adicionar este post a Favoritos
Marcar este post como lido/assistido
Inclua uma anotação pessoal (ajuda)
RSS Feeds
Versão para impressão



Participe! Inclua um comentário
[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Juliano
25/1/2007 19:02
 Parabéns
Nunca vi em lugar nenhum um artigo tão didático sobre Banco de Dados OO, não sei se o mérito é seu ou do DB4Objects que me parece sensácional! :) Obs. Achei que você ia buscar pelo nome do produto no ex. da pesquisa do obj. relacionado ao cliente. Como se faz isso? Outra dúvida, SQL nem pensar? Bom... Aguardo as próximas partes!
Responder


Glaucio Guerra
2/5/2007 8:53:11 AM
 Pesquisa
Olá Juliano, obrigado por sua opinião. Com relação a sua dúvida, essa busca seria bi-direcional, então você precisaria fazer com que o produto também tenha um relacionamento com o Cliente. Me mande um e-mail para eu criar um exemplo para você ok? Um abraço!
Responder
[Fechar]

Você precisa estar logado para dar seu feedback.

Clique aqui para efetuar o login

Caso não tenha um cadastro DevMedia, clique aqui para se cadastrar (gratuito)
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
2009 - Todos os Direitos Reservados a DevMedia Group