Recuperação de objeto serializado

6 respostas
L

Em meu aplicativo, estou serializando um objeto, gravando em uma base de dados, e quando necessário, eu consigo recuperá-lo normalmente no estado em que estava qdo foi gravado.

Meu problema é que qdo eu recompilo a classe (mesmo que não altere nada em sua parte PÚBLICA) e tento recuperar os registros gravados anteriormente ocorre um erro dizendo que o CLSID está inválido. Existe alguma maneira de forçar a recuperação destes objetos, desde que não tenha sido lterada a parte pública da classe?



Se alguém puder me ajudar, agradeço desde já.

6 Respostas

F

Ola,



naum entendi muito bem o problema. Poderia especificar um pouco melhor, se possivel descrever uma situacao de exemplo?



Pelo q eu entendi vc serializa o objeto na memoria volatil, para acesso mais rapido e grava ele no banco. E, esta tendo problema em usar o objeto serializado, isto?

L

Sim, em determinados momentos dentro do fluxo, preciso fazer a persistência de alguns dados, e para isto, eu serializo o objeto que está na memória, e gravo no banco como um campo BLOB. Quando eu preciso recuperar os dados, eu leio o campo blob e des-serializo para um objeto na memória (que fica refletindo o que foi gravado anteriormente).



O problema é que quando eu recompilo o objeto, mesmo que com pequenas alterações, não consigo recuperar os registros antigos da base, pois o objeto recompilado fica com um CLSID diferente, e o java não consegue fazer o cast.

F

Oi,



complicada esta.

E, se vc voltar a classe com ela foi serializada(com estrutura identica) e recompilar. O q acontece?



Se tbm não funcionar, ai realmente é um problemão… :frowning:

L

Oi Franklin,



Na verdade, mesmo mantendo a estrutura original, alterando apenas algum pequeno detalhe dentro de algum dos métodos, já causa o problema.



O sistema ainda não está em produção, mas a minha preocupação é que do jeito que está, em futuras manutenções ou atualizações eu terei problemas para não perder a base do cliente.



De qualquer maneira, obrigado por sua atenção.

G

Cara, aconselho gravar os dados do objeto ao invés de serializá-lo no banco… Não vai ser tão trabalhoso se tu usar um framework de persistência! Dá uma olhada no JDO.

Mas pro teu problema acho que tem um workaround… :wink: se tu criar uma classe apenas com os atributos que interessam na persistencia (e seus getters/setters) e criar uma classe filha para a lógica de negócio, tu nunca vai precisar mudar classe dos dados, e fazendo a persistencia dessa classe e nao da filha, não haverá problema de ID inválido.

L

Geovani, na verdade, eu resumi um pouco o problema, a solução de criar uma classe pai, somente com a estrutura, se tornaria bem trabalhosa, pois a classe que eu estou serializando carrega como atributos, diversos outros objetos (o que agrava ainda mais o problema), e eu teria que criar uma classe pai para cada um desses objetos.



Estava com muuuita preguiça, mas acho que vou partir mesmo para agravação dos dados diretamente na base, mas de qualquer maneira, valeu pela dica do JDO, vou dar uma olhada do que se trata, e se eu consigo utilizar para o meu caso.



Valeu.

Criado 14 de fevereiro de 2003
Ultima resposta 17 de fev. de 2003
Respostas 6
Participantes 3