sábado, 19 de junho de 2010

java.io.NotSerializableException: org.hibernate.util.MarkerObject

Problema

java.io.NotSerializableException: org.hibernate.util.MarkerObject

Ao utilizar o a4j:keepAlive nos arquivos jsf, o mesmo exige que o Managed Bean e suas dependências implementem Serializable. Porém, a classe MarkerObject do hibernate (versão 3.3.2.GA) não implementa.

Solução

Implementar Serializable na classe MarkerObject

1) Edite o arquivo (hibernate-distribution-3.3.2.GA\project\core\src\main\java\org\hibernate\util\MarkerObject.java).

2) Implemente Serializable na classe. Deve ficar assim:
     import java.io.Serializable;
     public class MarkerObject implements Serializable{

3) Execute javac MarkerObject.java. Isso vai gerar o arquivo MarkerObject.class.

4) Descompacte o arquivo (hibernate-distribution-3.3.2.GA\hibernate3.jar).

5) Substitua o arquivo (hibernate3\org\hibernate\util\ MarkerObject.class) pelo arquivo .class gerado no passo 3.

6) Gere o arquivo .jar com (jar cvfm) ou utilize um programa que faça compactação jar.
A raiz do novo arquivo hibernate3.jar deve ser igual ao original com os seguintes diretórios: META-INF e org.

7) Substitua o arquivo hibernate3.jar do diretório lib da sua aplicação ou do seu JBoss pelo arquivo gerado no passo 5.

Você pode utilizar o exemplo acima para fazer outras customizações no código fonte do hibernate.

Nenhum comentário:

Postar um comentário