Padrão DAO e o Serializable

6 respostas
AGAraujo

Bom dia pessoal,

Estou utilizando o padrão DAO e agora me veio a questão: POR QUE UTILIZAR SERIALIZABLE NOS OBJETOS DE DADOS? O que pode acontecer se eu não o fizer assim? É necessário em uma aplicação WEB? Por que?

Alguém saberia explicar ou me informar onde posso ter esta informação?

Obrigado!

6 Respostas

Lavieri

quando vc define uma classe como Serializable, vc esta dizendo que ela pode ser convertida em bityes que possam ser guardados em algum lugar, um banco, um arquivo, etc etc etc… e depois esses dados, podem ser desserializado, e voltam a ser a classe que era antes…

se vc não poem isso, não é possivel transformar uma classe em dados que possam ser guardado em um campo de banco de dados…

Ps.: eu esotu falando de guardar a classe inteira, como esta em uma banco, ou arquivo, ou algo do genero… e não de pegar o valor de cada campo dela e guaradar em um lugar…

seria algo como

public class MeuTeste implements Serializable {

private String cor;

private BigInteger teste;

private Exception blablabla;

private OutraClasseSerializable etcetcetc;

//…

}

da pra pegar essa classe todinha, e transformar numa array de bitys, e guardar em algum lugar, e depois fazer o processo inversto…

pelomenos ate onde entendo… seriallizable serve pra isso

AGAraujo

Boa Lavieri,

Blz! Entendi sua explicação. Mas ai vem a questão: então o que está acontecendo é que estamos guardando este valor em algum lugar, correto? mas para que eu vou guardar este valor em algum lugar? Estou pensando assim:

  1. Usuário faz uma requisição sobre os dados de uma tabela
  2. O DAO traz estes dados, através do DO (data object: pessoaobjeto por exemplo)
  3. O usuário recebe estes dados
  4. Fim

Onde estamos guardando o DO? Numa session? Para quê? Por que?

Obg pela explicação.

Lavieri

aquilo é para tornar possivel Serializar um objeto…

vc mostrou o mundo perfeito no seu exemplo… agora imagine o seguinte

  1. Usuario altera um dado
  2. Usuario manda o objeto ser salvo no banco
  3. Da um erro não esperado na hora de salvar
  4. Vc salva o que ocorreu em um LOG, junto com a Exception e com o Bean que gerou o erro
  5. Vc informa o erro para o usuario, pede desculpas e bola pra frente…

… se não for possivel salvar o Objeto como estava… o passo 4 não pode existir… quando vc for olhar no log, um erro relatado por um usuario, nunca tera informações do Bean… ja que ele não pode ser serializado…

Ps.: não ha custo nenhum em escrever… “implements Serializable”

AGAraujo

Vlw pela discussão… obg pelo auxilio.

Vamos lá!

Sem otimo!! Melhor ainda!

Só que eu gostaria de entender isto… vamos ao seu exemplo… e se eu estiver errado me corrija por favor…

para que o passo 4 existisse eu faria o seguinte:

...
DO obj = this.getDO(); //retorna o objeto a ser salvo
try{
  boolean r = objDAO.save(obj);
  if (r) {
    this.setLog (<informação do sucesso> + obj.toString());
  }
  else {
    this.setLog (<informação do erro> + obj.toString());
  }
}
catch (){
    this.setLog (<informação do exception> + obj.toString());  
}
...

Não preciso de um serializable… pelo menos, em teoricamente! Ai posso dar continuidade ao passo 4 e 5 do seu exemplo. Ou estou errado?

Vlw!!

T

Usualmente você precisa implementar Serializable se, por algum motivo, objetos dessa classe podem ficar em uma sessão (Web ou EJB). Isso permite ao web container ou application server que tais objetos possam ser transferidos para um cluster, por exemplo.

AGAraujo

Somente para este tipo de situação então eu necessito de um serializable, correto?

Então vamos ver se entendi, em conjunto com a explicação do Leviari.

Só há necessidade de utilizarmos serializable se formos guardar o objeto serializable em uma sessão, por exemplo, fazendo com que minha thread chame receba o mesmo estado que deixou pela última vez… correto?

Se não houver esta necessidade não há motivo para utilizar um Serializable, certo?

Então posso escrever um DAO sem necessidade de serializar meus objetos… correto?

Criado 7 de abril de 2009
Ultima resposta 7 de abr. de 2009
Respostas 6
Participantes 3