Professional Documents
Culture Documents
SerializaoSoluoParaPersistnciadeObjetos
Pesquisar
DesenvolvimentoJava
SerializaoSoluoParaPersistnciadeObjetos
NesteartigoapresentooGustavoRafaelValiati,quepodesercontatadopeloemailgustavovaliati@gmail.com.
OGustavofoimeualunoemalgumasdisciplinasdesuagraduoeestconclundooltimoperododocurso
deTecnologiaemAnliseeDesenvolvimentodeSistemasdaUTFPRcampusMedianeira,nesteprimeiro
semestrede2012.
porEvertonCoimb radeArajo
72
NesteartigoapresentooGustavoRafaelValiati,quepodesercontatadopeloemail
gustavovaliati@gmail.com.OGustavofoimeualunoemalgumasdisciplinasdesua
graduoeestconclundooltimoperododocursodeTecnologiaemAnlisee
DesenvolvimentodeSistemasdaUTFPRcampusMedianeira,nesteprimeiro
semestrede2012.
1.INTRODUO
Nemsempresedesejaterobjetosouestruturadedadosdeumaplicativo,comumciclodevidaque
duranomximootempoemqueforarmazenadoemmemriaRAM.Ouseja,algumasvezesdesejase
guardlosporumtempoindeterminado,sendopossvelrecuperlosposteriormente.Enestecaso,o
termopersistnciatemseuconceitodefinido.
Persistirdados,requerqueestespossamserserializveis.Aserializaopossibilitarcapturaro
estadodoobjetoouaestruturadedados,etransformaremumacadeiadebytesquandofor
necessrio.Tornasepossveltambm,recuperarosbytespersistidosparafazeroprocessoinverso,e
terosdadosdevoltaparaaaplicaoemexecuo.
Destamaneira,qualquerformadedadosqueestejasendotrabalhadanaaplicao,eestapuderser
serializada,poderserpassadaparaomeiofsico,eteroprocessorevertido.
Aserializaonoselimitaapenasempossibilitaragravaododadoemdisco,maspermitequeo
http://www.linhadecodigo.com.br/artigo/3401/serializacaosolucaoparapersistenciadeobjetos.aspx
1/11
08/07/2015
SerializaoSoluoParaPersistnciadeObjetos
mesmosejatransmitidoporrede.Istoporquaserializaocriaumstreamdebytes,querequisito
paratransmissodedadosporrede.
Diversaslinguagenspossuemsuporteserializao,como:Java,C,C++,Python,PHP,.NET,entre
outras.Nesteartigo,sertratadoapenasdaserializaocomJava,emsuaimplemetaobsica,
algunsproblemasesolues,comcdigosparaexemplificao.
2.SERIALIZAOCOMJAVA
Serializarumobjeto,emJava,spossvelcasosuaclasseestejamarcadacomoserializvel.Essa
marcaofeitacomasimplesimplementaodainterfacejava.io.Serializable.Essainterfaceno
possuimtodosparaseimplementarenematributos.AindanoexistiamasanotaesnoJava1.1,
versoquetrouxepelaprimeiravezaserializaoaoJava,edestamaneiraaimplementaoda
interfaceeraamelhormaneirademarcarumaclasse.
Aheranaentreclassesnaturalmenteafetadapelaserializao.Jquequandoumaclasse
implementaainterfaceSerializable,todaclassequedelaestendertambmestarimplicitamente
marcadacomoserializvel
.
Paraexemplo,sercriadaumaclassepojo.Frutaquecontmdoisatributos:nomeecor.Nocdigo
exemplo(Listagem1),podesenotaraclasseFrutamarcadaparaaserializao:
Listagem1Marcandoumaclassecomoserializvel.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
importjava.io.Serializable;
publicclassFrutaimplementsSerializable{
privateStringnome;
privateStringcor;
publicFruta(Stringnome,Stringcor){
this.nome=nome;
this.cor=cor;
}
publicStringgetCor(){returncor;}
publicStringgetNome(){returnnome;}
publicvoidsetCor(Stringcor){this.cor=cor;}
publicvoidsetNome(Stringnome){this.nome=nome;}
}
Podesedizerqueaimplementaodoprocessodeserializaoedeserializaosimplesdeumobjeto,
nopossuiumcdigodifcildeseescrever.Istoporquduasclassesfazemamaiorpartedotrabalho,
demaneiraquecompoucaslinhasdecdigopodesetransformarumobjetoembyteseviceversa.
Essasduasclassessojava.io.ObjectInputStreamquerecebebytesparacriarumobjetoe
java.io.ObjectOutputStreamquecriaumacadeiadebytesapartirdeumobjeto.
3.SERIALIZANDOEDESERIALIZANDOOESTADODEUMOBJETO
Comoexemplo,serpersistidoumobjetoemdisco.Paraisto,almdasclasses
http://www.linhadecodigo.com.br/artigo/3401/serializacaosolucaoparapersistenciadeobjetos.aspx
2/11
08/07/2015
SerializaoSoluoParaPersistnciadeObjetos
java.io.ObjectInputStreamejava.io.ObjectOutputStream,seroutilizadasduasoutrasquetrabalham
comarquivos,quesojava.io.FileInputStreamejava.io.FileOutputStream,queseguemamesma
lgicadeInputStreameOutputStream,squeagorarelacionadoaosistemadearquivosenoaos
objetos.
Paraserializao,devesecriarumnovojava.io.FileOutputStream,comocaminho(path)doarquivo
ondesedesejaarmazenaroestadodoobjeto.Tambmdevesercriadoumnovo
java.io.ObjectOutputStreamqueestligadoaoarquivo.Eporltimodeveseexecutaraescritado
objetoalvo,paradentrodoobjetodestreamqueporsuavezestligadoaoarquivodestino.Aps
executadosessespassos,possvelencontrarnosistemadearquivosumnovoarquivoquecontm
osbytescorrespondentesdescriodoestadodoobjeto.NaListagem2,encontraseocdigo
exemplo.
Listagem2Serializaodeumobjeto.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
importjava.io.FileOutputStream;
importjava.io.ObjectOutputStream;
publicclassSerializador{
publicSerializador(){}
publicvoidserializar(Stringpath,Objectobj)throwsException{
FileOutputStreamoutFile=newFileOutputStream(path);
ObjectOutputStreams=newObjectOutputStream(outFile);
s.writeObject(obj);
s.close();
}
}
Eparaadeserializao,oprocessoextremamenteparecidocomaserializao.Criaseumnovo
java.io.FileInputStreamrelacionadoaoarquivoondeoestadodoobjetoencontrasepersistido.Deve
secriartambmumnovojava.io.ObjectInputStreamqueestarvinculadoaoarquivodeorigem.Por
ltimo,executasealeituradoarquivoparaarestauraodoestado.NaListagem3encontraseo
exemplodocdigo.
Listagem3Deserializaodeumobjeto.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
importjava.io.FileInputStream;
importjava.io.ObjectInputStream;
publicclassDeserializador{
publicDeserializador(){}
publicObjectdeserializar(Stringpath)throwsException{
FileInputStreaminFile=newFileInputStream(path);
ObjectInputStreamd=newObjectInputStream(inFile);
Objecto=d.readObject();
d.close();
returno;
}
}
http://www.linhadecodigo.com.br/artigo/3401/serializacaosolucaoparapersistenciadeobjetos.aspx
3/11
08/07/2015
SerializaoSoluoParaPersistnciadeObjetos
AListagem4,contmoexemplodaexecuodaserializaoeemseguidadadeserializao.
Listagem4SerializandoeDeserializando
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
importoperacoes.Deserializador;
importoperacoes.Serializador;
importpojo.Fruta;
publicclassPrincipal{
publicstaticvoidmain(Stringargs[]){
//serializa
Serializadors=newSerializador();
Frutafruta=newFruta("Maa","Vermelha");
try{
s.serializar("/home/gustavo/fruta",fruta);
}catch(Exceptionex){
System.err.println("Falhaaoserializar!"+ex.toString());
}
//deserializa
Deserializadord=newDeserializador();
fruta=null;
try{
fruta=(Fruta)d.deserializar("/home/gustavo/fruta");
}catch(Exceptionex){
System.err.println("Falhaaodeserializar!"+ex.toString());
}
System.out.println(fruta.getNome()+""+fruta.getCor());
}
}
NaListagem5,encontraseumexemplodeserializaoedeserializaodeumArrayListdaclasse
Fruta.apenasmaisumexemploquedemonstraacapacidadedesepersistirqualquerobjetoque
sejaserializvel.EssaserializaosfoipossvelporqueaclasseArrayListimplementaainterface
Serializableporpadro.
Listagem5SerializaodeArrayList.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//serializaoedeserializaocomArrayList
ArrayList<Fruta>frutas=newArrayList<Fruta>();
Frutaf1=newFruta("Laranja","Amarela");
Frutaf2=newFruta("Abacate","Verde");
Frutaf3=newFruta("Morango","Vermelho");
frutas.add(f1);
frutas.add(f2);
frutas.add(f3);
try{
s.serializar("/home/gustavo/frutas",frutas);
frutas=null;
frutas=(ArrayList<Fruta>)d.deserializar("/home/gustavo/frutas");
for(Frutaf:frutas){
System.out.println("ArrayList:"+f.getNome()+""+f.getCor());
}
}catch(Exceptionex){
System.err.println("Falhaaoserializaroudeserializar!"+
ex.toString());
}
http://www.linhadecodigo.com.br/artigo/3401/serializacaosolucaoparapersistenciadeobjetos.aspx
4/11
08/07/2015
SerializaoSoluoParaPersistnciadeObjetos
4.PARTICULARIDADESDASERIALIZAO
Comodito,aserializaodeumobjetoemJavapodeseralgofcildesefazer.Masexistemcertas
informaesquesoimportantesesablaspodeevitarvriosproblemas.
Umdosproblemasquenemtudopodeserserializado,comoobjetosdasclassesThreadeSocket
eatributosestticos.Osatributosestticosestovinculadosclasseenoaoobjeto.Assimquando
setratadoestadodoobjeto,oscamposestticosnosoconsiderados.EmrelaosThreads,suas
instnciasssoteisenquantoestiverememexecuonaJVM,epodemserparadas/destrudase
iniciadascominstruesdesuaclasse.Noexistealgonoestadodestasinstnciasquesejatilpara
sepersistir,eporissonohsentidoempersistirtaisinstnciaspararestaurarposteriormente.
Maseseexistiralgumaclasseemquesejanecessriopersistila,eestapossuiumainstnciada
classeThread?Nestecaso,utilizandoumrecursopodesepersistiraclasseinteira,menosa
instnciathread.Esterecurso,refereseemindicarquetalinstnciathreadumobjetoTransient.Na
Listagem6encontraseumexemplodaimplementaocomusodeTransient.
Listagem6UsodoTransient
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
importjava.io.Serializable;
publicclassImplementacaoTransientimplementsSerializable,Runnable{
transientprivateThreadthread;
//marcadocom"transient"paraquesuainstncianosejaserializada
//Demaisvaloresdeestadoseroserializados
privateintvalorParaPersistir;
publicImplementacaoTransient(intvalorParaPersistir){
this.valorParaPersistir=valorParaPersistir;
thread=newThread(this);
thread.start();
}
publicvoidrun()
{
while(true){
//cdigoaserexecutadopelaThread
}
}
}
Valeressaltarque,oqueserializadoapenasoestadodoobjeto,enoosmtodoseaclasse.No
exemploacima,apenasainstnciadoobjetothreadedoobjetovalorParaPersistircompunhamo
estadodoobjeto.Assim,evitasequeosistemadeserializaotenteserializarumobjetono
serializvelegereerros.ApsadeserializaodeumobjetodaclasseImplementacaoTransienteste
estartotalmentefuncional.
Umoutroproblemaquepodeviraocorrer,serefereaoversionamentodasclasses.Todaclasse
possuiumatributoocultochamadoserialVersionUIDcomumvalorgeradoautomaticamente.Objetos
criadoslevamconsigooserialVersionUIDdesuaclasse,queindicasuaverso.Todavezqueuma
classesofrealteraesemseucdigo,umnovoserialVersionUIDgerado.Oproblemacoma
http://www.linhadecodigo.com.br/artigo/3401/serializacaosolucaoparapersistenciadeobjetos.aspx
5/11
08/07/2015
SerializaoSoluoParaPersistnciadeObjetos
serializaosurgequandoserializaseoestadodeumobjetoeposteriormentetentaserestauraro
estadoparaaaplicao,mashouverammudanasnocdigodaclasse.Nestecaso,umaexceo
java.io.InvalidClassExceptiondisparada,poisdefato,oestadodoobjetocorrespondeaumaverso
declassedoqualfoicriadoquejnoexistemais.Portanto,issosocorreparaevitarerrosde
programao,emquetentaserestauraroestadodeumobjetoparaumaclassequepossuiverso
diferentedaqualoobjetofoiserializadoinicialmente.Eissopodesignificardiferentesversesdeuma
mesmaclasseFrutaporexemplo,oudiferentesversesporclassesseremtotalmentediferentes
como:oestadodeumobjetodaclasseFrutaserrestauradoparaclasseCarro.
Masquandonecessrio,conscientemente,recuperaroestadodeumobjeto,mesmoquehouveram
alteraesnaclassedoqualfoigerado,possvelcontrolarmanualmenteoserialVersionUID.Para
isto,bastadeclararexplicitamentenaformadeatributoestticoefinal,umvalorLongqualquerpara
corresponderversodaclasse.Eassim,mesmoquehouveremmodificaesnaclasse,averso
permeneceramesma,evitandoasexceesdaincompatiblidadedeclasses.Noentanto,vale
ressaltarqueoversionamentonoumimpeclioparaoprogramador,massimmuitoimportanteem
LOGIN
casosquedesejasemanterumcontrolesobreacompatibilidadedecdigonaaplicao,definindo
versesparaclassesNocdigodaListagem7encontraseoexemplodocontrolemanualdo
serialVersionUID.
Listagem7UsomanualdoserialVersionUID
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
importjava.io.Serializable;
publicclassFrutaimplementsSerializable{
privateStringnome;
privateStringcor;
staticfinallongserialVersionUID=123L;//indicaaversaodaclasse
publicFruta(Stringnome,Stringcor){
this.nome=nome;
this.cor=cor;
}
publicStringgetCor(){returncor;}
publicStringgetNome(){returnnome;}
publicvoidsetCor(Stringcor){this.cor=cor;}
publicvoidsetNome(Stringnome){this.nome=nome;}
}
OJDKforneceumaferramentaquepermitevisualizaraversodequalquerclasseJava.Bastano
terminaldosistemaoperacionalutilizarocomandoserialverseguidodaclassequalificada,conforme
exemplodaListagem8.
Listagem8Verificaodaversodeclasse
1
serialverpojo.Fruta
Aserializaoacabainflingindoalgunsmodelosdeseguranaemseuprocedimentopadro,ecriando
entoumnovoproblema.Quandoumestadodeobjetopersistidonosistemadearquivosouenviado
porrede,ofluxobinriopodeserdetectado,analisadoeobtidasinformaessobreaclasseeo
estadodoobjeto.Porexemplo,seutilizadoumeditordetextoqualquerparaabriroarquivopersistido
http://www.linhadecodigo.com.br/artigo/3401/serializacaosolucaoparapersistenciadeobjetos.aspx
6/11
08/07/2015
SerializaoSoluoParaPersistnciadeObjetos
doestadodoobjetodaclasseFrutadosexemplosanteriores,comumosatributoseoutras
informaesapareceremcomoumsimplestexto,totalouparcilamentelegveis,assimcomo
demonstradonaListagem9.
Listagem9Exemplodeleituradearquivobinriodeumestadodeobjetopersistido.
1
2
##sr#
pojo.Fruta#######{###L##cort##Ljava/lang/String;L##nomeq#~##xpt##Vermelhat##Maa
Comumaferramentamenossimplesseriapossvelaumentaraquantidadedeinformaeslegveis,
coletandoumamaiorquantiadedados.
Noentando,oprocessodeserializaopermitequehajaumacertapersonalizaodaserializaoe
deserializaodeumobjeto.IssodeveseapossibilidadedasobrescriodosmtodoswriteObjecte
readObjectdentrodaclasseaserserializada,comoaclasseexemplarpojo.Fruta.Estasobrescrita
permiteumcontroletotalsobreaserializao,poisasclassesjava.io.ObjectOutputStreame
java.io.ObjectInputStream,aoserializaroestadodeumobjeto,primeiramenteverificamseesse
mtodofoisobrescritonaclassealvoeassimoutilizam,seno,serutilizadooprotocolopadrode
serializao.
Realizandoasobrescriodosmtodospossvelcriptografarosdadosnaserializaoe
descriptografarosdadosnadeserializao,pormeiodealgumalgoritmoqueoprogramadorvenha
implementar.Assimosdadospodemserpersistidosoutransmitidosporrede,semquesejapossveller
aspartesmaisimportantesdoestadodeumobjeto.Nalistagem10,aclassepojo.Frutafoi
modificadadandoorigemaclassepojo.FrutaSobrescritaquepossuiadicionamenteasobrescrio
dosmtodoswriteObjectereadObject.Comoesteapenasumexemplo,nofoiescritoum
verdadeiroalgoritmodecriptografia,massimapenasumatrocanovalordaStringdocampocor,
identificandoquehouveramalteraestantonoprocessodeserializaoquantonodedeserializao.
Nalistagem11encontraseaexecuodaserializao.
Listagem10SobrescritadosmtodoswriteObjectereadObject.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
importjava.io.Serializable;
publicclassFrutaSobrescritaimplementsSerializable{
privateStringnome;
privateStringcor;
staticfinallongserialVersionUID=123L;//indicaaversaodaclasse
publicFrutaSobrescrita(Stringnome,Stringcor){
this.nome=nome;
this.cor=cor;
}
publicStringgetCor(){returncor;}
publicStringgetNome(){returnnome;}
publicvoidsetCor(Stringcor){this.cor=cor;}
publicvoidsetNome(Stringnome){this.nome=nome;}
privatevoidwriteObject(java.io.ObjectOutputStreamstream)throwsjava.io.IOException
{
//criptografarosdadosantesdeliberarostream
//EXEMPLO:setCor(criptografar(getCor()));
setCor(getCor()+">CRIPTOGRAFADO");//apenasconcatenaodestringparaindicaral
http://www.linhadecodigo.com.br/artigo/3401/serializacaosolucaoparapersistenciadeobjetos.aspx
7/11
08/07/2015
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
SerializaoSoluoParaPersistnciadeObjetos
//liberarostream
stream.defaultWriteObject();
}
privatevoidreadObject(java.io.ObjectInputStreamstream)throwsjava.io.IOException,Clas
{
//liberarstream
stream.defaultReadObject();
//descriptografarosdados
//EXEMPLO:setCor(descriptografar(getCor()));
setCor(getCor()+">DESCRIPTOGRAFADO");//apenascontatenaodestringparaindicar
}
}
Listagem11Execuodaserializaodaclassepojo.FrutaSobrescrita.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//serializa
Serializadors=newSerializador();
FrutaSobrescritafrutaSobrescrita=newFrutaSobrescrita("Maa","Vermelha");
try{
s.serializar("/home/gustavo/frutaSobrescrita",frutaSobrescrita);
}catch(Exceptionex){
System.err.println("Falhaaoserializar!"+ex.toString());
}
//deserializa
Deserializadord=newDeserializador();
frutaSobrescrita=null;
try{
frutaSobrescrita=(FrutaSobrescrita)d.deserializar("/home/gustavo/frutaSobrescrit
}catch(Exceptionex){
System.err.println("Falhaaodeserializar!"+ex.toString());
}
System.out.println("Sobrescrita:"+frutaSobrescrita.getNome()+""+frutaSobrescr
5.CONCLUSO
Aserializaoumprocedimentodesimplesexecuoporpartedoprogramador.Compoucotempo
decodificaopossvelimplementarapersistenciadeumestadodeobjetoparaosistemade
arquivosoudetransmissoporrede.possvelreproduzirosexemploscriadosnesteartigo,em
situaesatmesmomaiselaboradas.Aapresentaodealgunsproblemasesoluestrazidaspor
particularidades,abreoentendimentodequeaserializaopodedeixardesersimplesconformefor
aplicadaemdiferentescontextos,equeaomesmotempomuitoflexvelaopermitiraoprogramador
implementardiferentessolues.
AssistaaovdeoSerializao/DeserializaodeobjetoscomYAML
6.BIBLIOGRAFIA
ORACLEjava.ioInterfaceSerializableDisponvelem:http://docs.oracle.com/javase/1.4.2/docs/ap
i/java/io/Serializable.htmlAcessoem:11/03/2012
http://www.linhadecodigo.com.br/artigo/3401/serializacaosolucaoparapersistenciadeobjetos.aspx
8/11
08/07/2015
SerializaoSoluoParaPersistnciadeObjetos
ORACLEDiscoverdeSecretsofJavaSerializationAPIDisponvelem:http://java.sun.com/devel
oper/technicalArticles/Programming/serialization/Acessoem:11/03/2012
NEWARD,Ted5coisasquevocnosabiasobre...SerializaodeObjetosJavaDisponvel
em:http://www.ibm.com/developerworks/br/library/j5things1/index.htmlAcessoem:11/03/2012
DOWNS,AndrewJavaSerializationDisponvelem:http://www.mactech.com/articles/mactech/Vol.1
4/14.04/JavaSerialization/index.htmlAcessoem:11/03/2012
PREISSLER,LucianoE.GEYER,CludioF.R.SerializaoemJavaDisponvelem:http://www.in
f.ufrgs.br/gppd/disc/cmp167/trabalhos/sem991/T1/luciano/final.htmAcessoem:11/03/2012
EvertonCoimbradeArajoDesde1987atuanareadetreinamentoedesenvo
lvimento.ComoMestreemCinciadaComputao,professordaUNIVERSIDAD
ETECNOLGICAFEDERALDOPARAN,CampusMedianeira,ondelecionadisc
iplinasrelacionadasaodesenvolvimentodeaplicaesweb,comJavae.NET.
autordoslivrosDesenvolvimentoparaWEBcomJava,OrientaoaObjetoscomJavaSimpl
es,FcileEficiente,AlgoritmoFundamentoePrticaemsuaterceiraedioedoslivrosDelphi
ImplementaoeTcnicasparaAmbientesVirtuaiseC++BuilderImplementaoeTcnicas
paraAmbientesVirtuais.TodospelaVisualBooks.Podesercontactadoatravsdoemaileverto
n@utfpr.edu.brouevertoncoimbra@gmail.com.
72
Leiatambm
ConhecendoainterfaceMapdoJava
Java
TrabalhandocomaInterfaceSetnoJava
Java
ClassesWrappersemJava
Java
ComboBoxModelemJava
Java
ReduzindoaMutabilidadeemJava
Java
http://www.linhadecodigo.com.br/artigo/3401/serializacaosolucaoparapersistenciadeobjetos.aspx
9/11
08/07/2015
SerializaoSoluoParaPersistnciadeObjetos
Publicidade
REVISTASDEVMEDIA
.netMag123
Easy.netmag41
VERTODAS
TOP10ARTIGOS
ASSINE
TOP10AUTORES
ComandosbsicosemSQLinsert,
update,deleteeselect
HTMLBsico
MenuemCSSMenudropdownhorizontal
comHTML5eCSS3
Excel:Comoverificarseexistevalores
duplicados
PrincipaisInstruesemSQL
Criandoumsistemadecadastroelogin
comPHPeMySql
FormatodosregistrosdoSintegra
http://www.linhadecodigo.com.br/artigo/3401/serializacaosolucaoparapersistenciadeobjetos.aspx
10/11
08/07/2015
SerializaoSoluoParaPersistnciadeObjetos
CdigoJavascriptIntroduo
CdigoparabackgroundHTMLeCSS
10
Excel:ComparandoListas
VERTODOS
LinhadeCdigo
Curtiu
13milcurtidas
Voccurtiuisso
Copyright2015todososdireitosreservadosparaWeb03
http://www.linhadecodigo.com.br/artigo/3401/serializacaosolucaoparapersistenciadeobjetos.aspx
11/11