Serializando Beans..!

4 respostas
A

olá pessoal,

gostaria de saber se vale a pena serializar todas as classes beans e qual o efeito desta serialização.
exemplo:

import <a href="http://java.io">java.io</a>.*;

public class pessoa implements Serializable{

// implementação dos get e set

}

Qual o efeito em relação a comunicação com o banco de dados!

um abraço,

4 Respostas

mlopes

Ola,

Os beans devem ser sempre serializaveis, acho eu.

Mas pro Bco de dados não faz diferença, a não ser que os seu seja do tipo objeto, nesse caso não sei.

[]'s

Bani

Se você tiver certeza absoluta que você nunca vai querer serializar o bean, ou até se quiser evitar isso, não precisa, mas dependendo de para o que você vai usar, precisa.

Uma vez eu estava em um projeto que tinha uns 50 beans que não eram serializáveis e certo dia começou a dar erro ao trabalhar com eles na session do Tomcat, aí teve que ir abrindo classe por classe e colocando o implements Serializable… Em uns 15 minutos estava resolvido, mas seria melhor se já tivessem sido criados assim.

Quando é para serializar o bean em arquivo, existem certas regras em relação ao nome do arquivo e tal, mas não sei se existe uma regra que obrigue o bean a ser serializável…

Como foi dito, se você quiser gravar o objeto do bean no banco de dados, ele precisa ser serializável, pois terá que ser convertido em um stream.

dukejeffrie

Não se esqueçam que agora a persistência preferida para JavaBeans é em XML, através da classe java.beans.XMLEncoder.

Tudo o que foi dito aqui no fórum serve para qq objeto, não importa se ele é um JavaBean ou não.

[]s

claudio

Ola Pessoal,

na verdade ninguem se preoculpa com a expecificacao de um javabean, hoje em dia chamamos tudo de beans, mas o coisa nao eh bem assim nao, um javabean precisa:

  1. set/get no padrao
  2. reescrever o equals e o hashcode
  3. implementar serializable
  4. ter um construtor “default”
  5. entre outros…

Quanto a serializacao o que se deve levar em consideracao eh, se os objetos criados por essa classe irao:

  • ser trocados entre camadas:
    por exemplo de um ejb para uma servlet de um servlet para um jsp

  • se ira ser armazenado na sessao:
    alguns containers armazenam a sessao em disco, e se o objetos nao forem serializaveis nao poderam ser armazenados

  • sao atributos de ejbs:
    no passivate o container serializa esses caras, logo eles precisam ser serializaveis :slight_smile:

  • no caso de armazenamento de objetos em file system/db:
    sempre serializaveis!

[Obs]
Sempre que uma classe se torna serializavel, no momento de compilacao o compilador adiciona um atributo chamado serialVersionUID na classe e poe uma constante que foi calculada baseada na estrtura da classe (atributos metodos e etc), isso acontece porque por exemplo se vc guardou um objeto Pessoa que tem nome, email, telefone ontem e hoje vc alterou a classe e tirou o atributo email, quando vc tentar ler o objeto que foi gerado a partir da copia antiga da classe ele ira bater o serialVersionUID e se for diferente ele nao ira permitir a de-serializacao

[Dica]
Para ver o serialVersionUID autogerado utilize o comando:
serialver -show
na janela que se abre digite o nome completo da classe e clique em show, por exemplo digite:
java.lang.String

Abraco,

Criado 2 de abril de 2003
Ultima resposta 3 de abr. de 2003
Respostas 4
Participantes 5