Todavia a aplicação funciona durante um tempo, mas para de funcionar de repente e da esse erro de cima.
Minha classe que eu pego o arquivo de mensagens esta serializada
publicclassMensagemProviderimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privateResourceBundlebundle;publicResourceBundlegetBundle(){if(bundle==null){FacesContextcontext=FacesContext.getCurrentInstance();bundle=context.getApplication().getResourceBundle(context,"msg");}returnbundle;}publicStringgetValue(Stringkey){Stringresult=null;try{result=getBundle().getString(key);}catch(MissingResourceExceptione){result="???"+key+"??? not found";}returnresult;}}
Alguém já passou por isso ou sabe como consertar esse erro?
Vc tá vendo que ele reclama que o “java.util.PropertyResourceBundle” não está Serializable e não a sua classe.
Não é recursivo o efeito. Todas os atributos contidos em uma classe Serializable também devem ser Serializable.
Isso é só um chute, mas tente colocar o transient no seu bundle (é bundle ein. heheh).
diz aí se deu certo.
abs
P
paulo.bing
Veja a diferença no exemplo (o objeto NotSerializable (que seria equivalente ao seu Bundle) está transient e funciona ok… tirando o transient, ele tenta serializar e dá pau):
packagebr.pbing.serial;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.io.Serializable;publicclassSerialimplementsSerializable{privatestaticfinallongserialVersionUID=-1295773177935401165L;privateIntegerid;privateStringnome;privateIntegeridade;privatetransientNotSerializablenot;publicstaticvoidmain(String[]args){Serialobj=newSerial(1,"Paulo",28,newNotSerializable(35));Stringfilename="c:\\temp\\bing.ser";System.out.println("antes de serializar");System.out.println(obj);write(obj,filename);obj=null;SerialnewObj=read(filename);System.out.println("apos desserializar");System.out.println(newObj);}privatestaticSerialread(Stringfilename){Serialobj=null;FileInputStreamfis=null;ObjectInputStreamois=null;try{fis=newFileInputStream(filename);ois=newObjectInputStream(fis);obj=(Serial)ois.readObject();}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}finally{if(fis!=null){try{fis.close();}catch(IOExceptione){e.printStackTrace();}}if(ois!=null){try{ois.close();}catch(IOExceptione){e.printStackTrace();}}}returnobj;}privatestaticvoidwrite(Serialobj,Stringfilename){FileOutputStreamfos=null;ObjectOutputStreamoos=null;try{fos=newFileOutputStream(filename);oos=newObjectOutputStream(fos);oos.writeObject(obj);}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}finally{if(oos!=null){try{oos.close();}catch(IOExceptione){e.printStackTrace();}}if(fos!=null){try{fos.close();}catch(IOExceptione){e.printStackTrace();}}}}publicSerial(Integerid,Stringnome,Integeridade,NotSerializablenot){super();this.id=id;this.nome=nome;this.idade=idade;this.not=not;}publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicIntegergetIdade(){returnidade;}publicvoidsetIdade(Integeridade){this.idade=idade;}publicNotSerializablegetNot(){returnnot;}publicvoidsetNot(NotSerializablenot){this.not=not;}@OverridepublicStringtoString(){return"Serial [id="+id+", nome="+nome+", idade="+idade+", not="+not+"]";}}classNotSerializable{privateIntegerteste;publicNotSerializable(Integerteste){super();this.teste=teste;}publicIntegergetTeste(){returnteste;}publicvoidsetTeste(Integerteste){this.teste=teste;}@OverridepublicStringtoString(){return"NotSerializable [teste="+teste+"]";}}
Vc tá vendo que ele reclama que o “java.util.PropertyResourceBundle” não está Serializable e não a sua classe.
Não é recursivo o efeito. Todas os atributos contidos em uma classe Serializable também devem ser Serializable.
Isso é só um chute, mas tente colocar o transient no seu bundle (é bundle ein. heheh).
diz aí se deu certo.
abs
E ai paulo,
Valeu cara, a princípio, tudo funcionando. Creio que era isso mesmo, fiquei meio confuso com essa exceção pois já estava bem acostumado a serializar os ManagedBeans no jsf e as classes no jpa e até estava acostumado tb a colocar transient em atributos destas classes, mas não imaginava que o “java.util.PropertyResourceBundle” não podia ser serializado.
Então coloquei “transient no bundle”!! hehe
private transient ResourceBundle bundle;
Vou passar o dia trabalho aqui na aplicação se este erro não ocorrer novamente, fecho o tópico aqui.