DB4Objects – Parte III
O armazenamento de objetos relacionados é bem simples, utilizando o método set() no objeto que seja top-level da relação para armazenar ambos...
Estatísticas:
Serviços:

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
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
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
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
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á!

Participe! Inclua um comentário
25/1/2007 19:02
[responder]
5/2/2007 08:53
[responder]



Artigo Java Magazine 59 - Grails: mais inspiração, menos transpiração

Notícias – Adobe anuncia Flex 4 – fisl 9.0 – iPhone SDK para Download – Google lança AJAX Translation API

Notícias - Java SE 6 Developer Preview 9 - GWT-Ext 2.0 - Google Android - Grails 1.0.1 - J2EE Spider 1.0.0-M1

Como manipular arquivos Excel com Jakarta POI – Parte II

Como manipular arquivos Excel com Jakarta POI – Parte I

Alta performance na indexação com Apache Lucene – Parte II

Possibilitando alta performance na indexação com o Apache Lucene - Parte I

DB4Objects na Prática – Parte IV

DB4Objects – Parte III

DB4Objects – Parte II – Mãos a Obra





[vídeo] Consumindo os dados via ajax – Consumindo dados com getJson do jQuery utilizando POCO EF 4.0 – Parte 3

[vídeo] Classe POCO – Consumindo dados com getJson do jQuery utilizando POCO EF 4.0 – Parte 1

Imprimindo Relatório : VCL Crystal Reports XI - Delphi

VCL Crystal Reports XI - Delphi

[vídeo] Gerenciamento das Comunicações - Curso Gerência de Projetos – Parte 8

[vídeo] Plano de Comunicação - Curso Gerência de Projetos – Parte 9

[vídeo] Seleção e Priorização de Projetos - Curso Gerência de Projetos – Parte 6

[vídeo] Escopo, metas, premissas, restrições - Curso Gerência de Projetos – Parte 7

[vídeo] Documento Conceitual do Projeto - Curso Gerência de Projetos – Parte 5


Você está em:




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


