Está en la página 1de 0

FacultaddeInformtica

UniversidaddeMurcia

PERSISTENCIADEOBJETOS.
JDO,SOLUCINJAVA

JuanMrmolCastillo
Director:Dr.JessJoaqunGarcaMolina

1
dfd
Agradecimientos
AmiesposaMaraJos,amishijosJuanyMara,queduranteestosltimosaos,
hansufridomisconstantesausenciasconcompresinycario.
AmihermanaLoliycuadoPaco,quedesdesiempretantomehanayudado.
Amisamigosquenohandejandodealentarmeparacompletarconestetrabajolos
estudiosdeinformtica.

3
Prlogo
Lapersistenciaesunproblemaquesiempremehainteresado,pormitrabajocomo
programador y como estudiante de la orientacin a objetos. En mi trayectoria como
programador de aplicaciones, primero con lenguajes de cuarta generacin, y tiempo
despus,conlenguajesorientadosaobjetos,guardaryrecuperardatosdeficherosybases
de datos relacionales, consuman buena parte del esfuerzo de desarrollo. Particip en la
programacin de un conjunto de libreras de objetos que automatizaban la interaccin en
SQL con la base de datos relacional para formularios y listados, pero la solucin no era
completamente satisfactoria, no era transparente, los modelos de objetos y datos eran
distintos, se poda programar sin un modelo de objetos del dominio. La asistencia a
conferencias de Oscar Daz, Mario Piattini, K.Dittrich, y Elisa Bertino, sobre las bases de
datos orientadas a objetos (OODBMS), provoc mi inters por conocer estos sistemas y
estudiarlasolucinalproblemadepersistirobjetosenbasesdedatosrelacionales.
Los planes de estudio, que he tenido ocasin conocer ms de cerca, contienen
crditosdeformacinsobrelaorientacinaobjetos,lasbasesdedatosrelacionalesyJAVA,
con diferentes enfoques y amplitud. Materias todas ellas relacionadas con el problema la
persistencia orientada objetos, que en cambio, no ocupa un lugar propio en los planes de
estudio, pese a ser, en mi opinin, un tema esencial para el trabajo de un ingeniero de
informtica, dominar las tcnicas de cmo transformar los objetos en datos y hacerlos
perduraryviceversa.
Este prlogo precede, un trabajo que, comenz tres aos atrs, cuando aparecan
lasprimerasnoticiassobrelapropuestadecreacindeunnuevoestndarparapersistirlos
objetos Java, el Java Data Objects (JDO), tres aos ms tarde, el estndar se haba
convertido en uno de los temas Java ms populares, con un aparente creciente respaldo,
numerosostrabajosydiscusionesabiertas.
Lacuestindelapersistenciaesamplayafectaadistintasmaterias,comosonlas
bases de datos, lenguajes de programacin, compiladores, la orientacin a objetos y la
programacin, que dan lugara diferentes perspectivas y planteamientos posibles. De otro
lado, para muchos el problema no es tal, hasta enfrentarse a este reiteradas veces, la
persistencia siempre tiene una consideracin lateral, slo es guardar y recuperar datos!
Peromiexperiencia,mellevaapensarqueesnecesariaunavisinglobalparaentenderel
problema en su extensin y comprender la conveniencia de una solucin completa a la
persistenciadeobjetos.
Aquellos que no han necesitado persistir sus objetos, pero vayan a hacerlo, y
quienes no encuentran una solucin satisfactoria a sus necesidades, pero deban decidir
entre comprar o escribir su propia solucin; espero encuentren en las pginas siguientes
elementosdejuicioquesirvanparavalorarcualdebesersudecisin.

5
Introduccin
El desarrollo de aplicaciones para sistemas de informacin empresarial ideados
para su utilizacin en la Red, es un rea en continua expansin desde mediados de los
noventa. Estas aplicaciones deben guardar y recuperar datos que deben perdurar tras
finalizarlaejecucindelasmismas,datosquedebenpersistir,serpersistentes.Estosdatos
songuardadossobrediferentessistemasdegestinymanejodedatoscomosonarchivos,
basesdedatososistemasdeprocesamientodetransacciones.
En mayo del 1995 fue presentado JAVA[49], cuyo nivel de aceptacin es cada vez
mayor,eneldesarrollodeprogramasdirigidosalaRed.LasaplicacionesJavaquemanejan
datos se enfrentan tambin con la dificultad de guardar y recuperar datos, que estn
situados sobre distintos tipos de fuentes de informacin o sistemas de gestin de datos.
Mediosestosqueestnsolidamenteimplantadosenlasorganizacionesyquesonelmotor
dedatosdesussistemasdeinformacin.OtroreaenaugedondeJavaestacreciendoes,el
mercadodelos nuevosaplicativosdiseados paralos pequeosdispositivos conectadosa
laRed,queaparentementevanacambiarnuestrasvidas[21][43]
1
,yquetambinnecesitan
guardar y recuperar datos de estado, pensemos en un moderno asistente personal
conectado va telefona celular a la Red, con agenda, avisos y alarmas. La persistencia de
los objetos es necesaria en todo tipo de entornos, abarca desde los grandes sistemas a
dispositivosdeltamaodeunatarjetadecrdito.
LasaplicacionesJavaquenecesitanmanejardatosquedebenperdurar,planteanun
escenario donde los programadores estn obligados a utilizar y conocer detalladamente
diferentestcnicasdeaccesoeinterfacesdeprogramacinparacadaunodelossistemasde
gestindedatosempleados.Estosignificaconocercomopoco:
Dos lenguajes distintos para plasmar la lgica del negocio: Java y el
lenguajeespecializadorequeridoporelsistemadegestindedatos.
El modo de integrar ambos evitando las resistencia por la falta de
correspondencia(Impedancemismatch)deunoyotrolenguaje;excepcin
hechadelossistemasdegestindedatosbasadosenobjetos
Esta situacin ha impulsado la construccin de servicios para almacenar y
recuperardatos,serviciosdepersistencia,quedesempeensulabordeformatransparente,
uniforme e independiente del sistema plataforma de gestin de datos. Esto permitira
facilitarlatareadelprogramador,siendomsproductivaycentradaenlgicadelnegocio.
Lademandadeserviciosdepersistenciatransparentes,esyhasidofuentedegraninters
para la investigacin con importantes proyectos [33] y para la industria con numerosos
productos[52].
La persistencia del estado de los objetos tiene slidos fundamentos, tericos y
prcticos,conmsdeunadcada[1][2].Lastecnologasdepersistenciadeobjetoshansido
aplicadasconxitoaproyectosconrequisitosdealtasprestacionesenreasdelosnegocios
delastelecomunicacionescomoIridium[54]ybancosdedatoscientficoscomoacelerador
departculasdeStandford[46],desdeprincipiosdelosnoventa,perosingranrepercusin
enelmundodeldesarrollodeaplicacionesdeempresa.
El OMG tiene un servicio estndar de persistencia de estado de los objetos
independiente del lenguaje de programacin einteroperable, denominado Persistent State
Service(PSS),suobjetivoesmanejarelestadopersistentedelosobjetosCORBA,dentrodel

1
Java,primerollamadoOak,fueinicialmenteconcebidoparaunosdispositivosdemanoaplicadosala
televisinporcabledentrodelproyectoGreen[i1]
7
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

mbitodelacomunicacininternaentreserviciosCORBAyserviciosdedatos,lainterfaz
entre ambos para la persistencia del estado de objetos CORBA; probablemente este
estndarseapocoapropiadocomointerfazaunabasededatospuesconsideraelsoporte
detransaccionescomoopcional[22].
La persistencia conJava es un caso particulardel problemadelapersistencia con
objetosdonde,hastafinalesdelao2001,habacuatroestndaresprincipalesparamanejar
datos Java persistentes: la serializacin, Java Database Connectivity (JDBC), SQLJ y la
adaptacin para Java del estndar ODMG. La serializacin preserva la integridad
referencialdelosobjetos,peronosoportalaconcurrenciadeaccesopormltiplessesiones
de usuario. JDBC necesita que el desarrollador explcitamente maneje la correspondencia
entre el estado de los objetos y su proyeccin sobre relaciones delsistema gestor de bases
dedatosrelacional(RDBMS)enusoyconocerotrolenguaje,SQL.SQLJofrecesimplificarel
cdigoJava,alembeberelcdigoSQLestticoenlosprogramas,utilizaJDBCparaelSQL
dinmico y ofrece soporte al modelo de objetos del SQL:1999. Ninguno de los tres cubre
satisfactoriamente la cuestin de la persistencia. El ltimo, la adaptacin para Java del
ODMG,eshastalafechalamejortecnologadisponiblepararesolverlapersistenciaenJava
enopinindeDavidJordanyDouglasBarry[34],expertosderenombresobrelamateriade
la persistencia, ideado para persistir sobre RDBMS y OODBMS. De este ltimo estndar
existen en el mercado acreditados productos como Java Blend de Sun, Jasmine de
Computer Associates, FastObjects de Poet, Objecstore de Progress, Versant, Objectivity y
otros.
La especificacin para datos de objetos Java, Java Data Objects (JDO) desarrollada
bajo el Sun Community Process con la identificacin JSR12, es la nueva propuesta para
resolver el problema delapersistenciade objetos Java, sobre cualquiersistema de gestin
dedatos,tantoenentornosreducidos,comountelfonoJava,comoenlosgrandessistemas
escalables de servidores de aplicaciones. El proceso comenz en Julio de 1.999 y fue
aprobadocomoestndarel25deMarzode2002.
Objetivos
Este trabajo es una aproximacin al problema de la persistencia de objetos y su
solucinenJava,conelestndarJDO,quepretende:

i. Mostrar el problema de la persistencia estableciendo un marco de anlisis


sobre criterios estructurales, de organizacin, funcionales, tecnolgicos y
econmicos.
ii. Exponer una solucin al problema de convertir clases en tablas y objetos en
filasalmacenadasenunabasededatosrelacional.
iii. Presentar brevemente la especificacin JDO: objetivos, alcance,
funcionalidad, situacin actual y futura. No ser un manual de referencia de
JDO.
iv. ElaborarunacomparativafrentealasotrasalternativasdepersistenciaJava,
paraanalizarJDOaluzdelmarcoestablecidoderequisitos.
v. Presentarunasconclusionesqueayudenaformarlaopinindequienleaeste
proyecto,ayudandoadecidircuandoutilizarJDO.
Paralograrlosobjetivosmarcadoshasidodesarrolladoelsiguienteplanteamiento:
1. Estudio de la documentacin relativa a distintos aspectos del problema, recabada
de diferentes autores mencionadosa lo largo texto e incluidos enlas referenciasy
bibliografa.
8
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

2. Llevaracabounprocesodedescubrimientodelosrequisitos,analizandodistintas
situaciones, desde el planteamiento ms simple a la prctica ms compleja, para
ponerdemanifiestoyfundamentarlosrequisitospresentados.Diversosprogramas
Javairnilustrandolassituacionesqueserndiscutidas.
3. Elaborar unas pruebas basadas en sencillos programas Java, para confrontar las
tecnologasylosrequisitos,empleandoalgnproductocomercialJDO.Unadelas
pruebas consiste en la modificacin una aplicacin existente que usa JDBC para
medirelimpactoenlaproductividaddeJDOfrenteJDBC.
Temasnoconsiderados
El tema de la persistencia de objetos y el estudio en profundidad de todos los
aspectosimplicadosenlaespecificacinJDO,esmuyextenso,paraunsoloproyectofinde
carrera.Porlocual,enestetrabajo,nosonconsideradoslossiguientespuntos:
Problemtica de desmenuzamiento y duracin de transacciones. Relacin con
serviciosdetransacciones.
Tratamientodeobjetosdegrantamao:objetosmultimedia,estructurascomplejas
degranvolumen.
Objetos distribuidos. Objetos agregados de otros dispersos sobre diferentes
sistemas.
Optimizacindemodelosparaacceso.Mejorasenlastcnicasdeacceso.
IntegracinenJ2ME,Java2MicroEdition,paradispositivosqueconectanalaRed.
Organizacindelproyecto
Elpresentedocumentoseorganizaencincocaptulos:
El primer captulo, responde a las preguntas: Qu es la persistencia de objetos?
Cul son los requisitos a cubrir? Establece los fundamentos, los trminos y
requisitosqueformanelmarcodeanlisisutilizadoalolargodeltrabajo.
Elsegundo,tratasobrelaequivalenciadeclasesentablasrelacionales,ilustrauna
solucinalproblemadefaltadecorrespondenciaentreclasesytablasdelasbases
dedatosrelacionales
En tercero de los captulos, se descubre Java Data Objects, presentando la
especificacin de una forma breve y resumida, pero til para los objetivos del
proyecto.
Elcaptulonmerocuatro,esdondesecomparanlasalternativasaJDOdentrodel
marco establecido en primer captulo, se razona sobre le rendimiento y la
productividad, mostrando una pruebas simples pero, que ayudan a contrastar
diferentespostulados.
En el ltimo, son expuestas las ventajas e inconvenientes de trabajar con JDO, su
situacin en panorama econmico y posible evolucin futura, junto con las
respuestas a algunas interrogantes que surgen tras leer los cuatro primeros
captulos..

9
Tabladecontenidos
CAPTULO 1 PERSISTENCIA DE OBJETOS: CONCEPTOS Y REQUISITOS. 17
1.1. CONCEPTOS SOBRE PERSISTENCIA DE OBJ ETOS .......................................................... 17
1.1.1. Persistencia........................................................................................................ 17
1.1.2. Instancia Persistente y Transitoria .................................................................... 18
1.1.3. Servicio de persistencia de objetos .................................................................... 18
1.1.4. Persistencia ortogonal ....................................................................................... 23
1.1.5. Cierre de persistencia ........................................................................................ 24
1.1.6. Persistencia por alcance .................................................................................... 24
1.1.7. Transparencia de datos...................................................................................... 24
1.1.8. Falta de correspondencia entre clases y datos .................................................. 25
1.2. REQUISITOS PARA UN SERVICIO DE PERSISTENCIA...................................................... 25
1.2.1. Dimensin tecnolgica. Requisitos estructurales y funcionales......................... 26
1.2.2. Dimensin organizacional ................................................................................. 58
1.2.3. Dimensin Econmica........................................................................................ 62
1.3. RESUMEN................................................................................................................... 62
CAPTULO 2 EQUIVALENCIA CLASE - TABLAS RELACIONALES ............... 65
2.1. FALTA DE CORRESPONDENCIA CLASE-TABLA ........................................................... 65
2.2. IDENTIDAD................................................................................................................. 68
2.3. CONVERSIN DE CLASES EN TABLAS.......................................................................... 69
2.4. RELACIONES DE AGREGACIN Y COMPOSICIN A CLAVES AJ ENAS............................ 71
2.5. LA HERENCIA EN FILAS Y REUNIN (J OIN) ................................................................. 75
2.6. DE TABLAS A CLASES................................................................................................. 78
2.7. RESUMEN................................................................................................................... 79
CAPTULO 3 JAVA DATA OBJECTS....................................................................... 81
3.1. J DO A VISTA DE PJ ARO............................................................................................ 81
3.1.1. Objetivos Fundamentales................................................................................... 82
3.1.2. Entornos de ejecucin objetivo .......................................................................... 82
3.1.3. Capacidad de las clases para persistir. Procesador de cdigo Java................. 83
3.1.4. Estado actual...................................................................................................... 84
3.2. J DO BAJ O LOS FOCOS........................................................................................... 85
3.2.1. JDO a travs de un ejemplo ............................................................................... 85
3.2.2. Modelo de persistencia..................................................................................... 107
3.2.3. Lenguaje de Consultas ..................................................................................... 112
3.2.4. Operaciones ..................................................................................................... 113
3.2.5. Interfaces y clases ............................................................................................ 113
3.2.6. Descriptor de Persistencia XML...................................................................... 117
3.2.7. Gua para la portabilidad ................................................................................ 119
3.2.8. Procesador de Referencias JDO...................................................................... 120
3.2.9. Integracin con servidores de aplicaciones Java............................................. 127
3.2.10. Asuntos pendientes ......................................................................................... 128
3.2.11. La especificacin: su organizacin y redaccin. ........................................... 128
3.2.12. Apndices ....................................................................................................... 129
3.2.13. Implementacin de Referencia y Equipo de compatibilidad de la tecnologa 129
3.2.14. Qu no aborda JDO: Correspondencia objeto-dato...................................... 129
3.3. RESUMEN................................................................................................................. 129
CAPTULO 4 COMPARATIVA JDO VS OTROS .................................................. 131
4.1. MBITO DE LA COMPARATIVA.................................................................................. 131
4.2. COMPARATIVA......................................................................................................... 132
4.2.1. Rendimiento...................................................................................................... 132
4.2.2. Productividad................................................................................................... 146
4.3. COMPARATIVA EN LOS REQUISITOS.......................................................................... 155
4.3.1. Estructurales .................................................................................................... 155
4.3.2. Funcionales...................................................................................................... 158
4.3.3. Funcionalidad avanzada.................................................................................. 161
4.4. RESUMEN................................................................................................................. 164
11
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

4.4.1. Rendimiento ......................................................................................................164


4.4.2. Productividad....................................................................................................164
4.4.3. Verificacin de los requisitos............................................................................165
4.4.4. Es mejor ODMG que JDO?............................................................................165
CAPTULO 5 CONCLUSIONES................................................................................167
5.1. INCONVENIENTES......................................................................................................168
5.2. VENTAJ AS.................................................................................................................171
5.3. IMPACTO DE J DO EN LA ORGANIZACIN...................................................................174
5.4. IMPACTO EN LA TECNOLOGA....................................................................................175
5.5. ECONOMA DE J DO...................................................................................................175
5.6. OTROS RESULTADOS DEL TRABAJ O...........................................................................176
5.7. CONCLUSIONES LTIMAS..........................................................................................176

12
ndicedefiguras
FIGURA 1 DIAGRAMA DE CLASES DEL BANCO.................................................................................... 19
FIGURA 2 PUZZLE DE LA PERSISTENCIA............................................................................................... 28
FIGURA 3 DIAGRAMA DE COLABORACIN VENTA TPV...................................................................... 29
FIGURA 4 CASO DE USO ACTUALIZACIN SALDO............................................................................... 38
FIGURA 5 CASO DE USO CIERRE TPV.................................................................................................. 40
FIGURA 6 LA PROGRAMACIN REQUIERE CUALIFICACIN .................................................................. 59
FIGURA 7 PAPELES EN DESARROLLO CON PERSISTENCIA..................................................................... 60
FIGURA 8 EQUIVALENCIA CLASES DEL BANCO EN TABLAS SIN RELACIONES....................................... 71
FIGURA 9 MAPEO DE LAS RELACIONES DE LAS CLASES DEL BANCO EN RDBMS MYSQL.................. 73
FIGURA 10 CLASE PESONA Y DIRECCION............................................................................................ 74
FIGURA 11 DIAGRAMA DE CLASES DE UN RBOL DE CINCO NIVELES Y CINCO HIJ OS SU EQUIVALENTE E-
R................................................................................................................................................. 75
FIGURA 12 DIAGRAMA DE CLASES DE DIRECCIN .............................................................................. 76
FIGURA 13 CORRESPONDENCIA DE DIRECCIN SEGN MTODO DE DIVISIN POR TIPO...................... 77
FIGURA 14 CORRESPONDENCIA VERTICAL J ERARQUA DE HERENCIA DOMICILIO............................... 77
FIGURA 15TABLAS PARA LAS CLASES DE DIRECCION USANDO DIVISIN HORIZONTAL....................... 78
FIGURA 16 DIAGRAMA DE CLASES DEL BANCO.................................................................................. 85
FIGURA 17 DIAGRAMA DE CLASES DE CLIENTES DE CRDITO............................................................ 103
FIGURA 18 DIAGRAMA DE CLASES ILUSTRANDO LA INDEPENDENCIA ENTRE PERSISTENCIA Y HERENCIA.
.................................................................................................................................................. 105
FIGURA 19 DIAGRAMA DE CLASES ILUSTRANDO LA INDEPENDENCIA ENTRE HERENCIA Y PERSISTENCIA
.................................................................................................................................................. 106
FIGURA 20 DIAGRAMA DE ESTADOS DEL CICLO DE VIDA DE INSTANCIA J DO................................... 110
FIGURA 21DIAGRAMA DE CLASES DE J DO........................................................................................ 113
FIGURA 22 DIAGRAMA DE CLASES DE EXCEPCION J DO.................................................................... 116
FIGURA 23 TIEMPO INICIAL NECESARIO PARA PERSISTIR LOS OBJ ETOS VINCULADOS A LA CREACIN DE
UNA CUENTA. ........................................................................................................................... 137
FIGURA 24 TIEMPO PARA PERSISTIR LOS OBJ ETOS IMPLICADOS EN LA CREACIN DE UNA CUENTA,
IGNORANDO EL RETRASO DE PRIMERA OPERACIN.................................................................... 137
FIGURA 25 J DO VS J DBC VARIACIN DEL RENDIMIENTO Y RETRASO.............................................. 138
FIGURA 26 RESULTADOS PRUEBA DE RENDIMIENTO PARA OBJ ETOS COMPLEJ OS............................... 144
FIGURA 27 TIEMPOS DE EJ ECUCIN DEL RECORRIDO TRANSPARENTE DE RBOLES 5 ARIOS
PROFUNDIDAD 5, 1000 VECES ................................................................................................... 144
FIGURA 28 SOBRECARGA DE LA PERSISTENCIA EN LAS PRUEBAS REALIZADAS ................................. 145
FIGURA 29 COMPARATIVA DEL NMERO DE LNEAS DE CDIGO PARA UNA MISMA APLICACIN
ESCRITA CON J DBC Y ODMG.................................................................................................. 148
FIGURA 30 PORCENTAJ E DE REDUCCIN DEL CDIGO J AVA CON ODMG RESPECTO DE J DBC......... 148
FIGURA 31 LNEAS DE CDIGO EN LA APLICACIN DE CLUBMED CON J DO VS ORIGINAL J DBC...... 149
FIGURA 32 REDUCCIN DEL NMERO DE LINEAS EN CLUBMED MODIFICADO PARA J DO................. 149
FIGURA 33 RETORNO DE INVERSIN EN UNA LICENCIA DE J DO........................................................ 154
FIGURA 34 POSICIN DE J DO EN LA PERSISTENCIA J AVA.................................................................. 172

13
ndicedelistadosJava
LISTADO 1 SERIALIZACIN DE UN OBJ ETO CLIENTE ............................................................................ 19
LISTADO 2 GRABAR UN OBJ ETO CLIENTE CON J DBC.......................................................................... 20
LISTADO 3 GRABAR UN OBJ ETO CLIENTE CON SQLJ ........................................................................... 21
LISTADO 4 MODOS DE PERSISTIR CON UN OODMBS......................................................................... 22
LISTADO 5 EJ EMPLO RUTINA CON TRANSPARENCIA DE DATOS........................................................... 25
LISTADO 6 EJ EMPLO SERIALIZACIN EN J AVA .................................................................................... 34
LISTADO 7 MTODO CARGO EN CUENTA............................................................................................. 39
LISTADO 8 ASPECTOS DE LA INTEGRIDAD........................................................................................... 42
LISTADO 9 ASIGNACIN PERSISTENTE J DBC DEL CDIGO DE CUENTA............................................... 42
LISTADO 10 EJ EMPLO DE TRANSPARENCIA DE DATOS......................................................................... 47
LISTADO 11 MTODO CON TRANSPARENCIA DE DATOS....................................................................... 49
LISTADO 12 IDENTIDAD DE LA CLASE CLIENTE EN TABLAS CON MYSQL.......................................... 69
LISTADO 13 CORESPONDENCIA CLASE PERSONA QUE EMBEBE INSTANCIAS DEL TIPO DIRECCION..... 74
LISTADO 14 CLASES CLIENTE Y CUENTA ORIGINAL........................................................................... 86
LISTADO 15 DESCRIPTOR DE PERSISTENCIA DEL BANCO..................................................................... 92
LISTADO 16 MAPEO DE UN RBOL DE OBJ ETOS CON J RELAY............................................................ 93
LISTADO 17 MAPEO DE UN RBOL DE OBJ ETOS CON KODO............................................................... 93
LISTADO 18 TAREA AMPLICAR CLASES CON J DO RI.......................................................................... 94
LISTADO 19 OPERACIONES DE APLICACIN, APPOPER...................................................................... 95
LISTADO 20 CREACIN DE LA BASE DE DATOS CON J DO RI ............................................................... 96
LISTADO 21 APERTURA DE NUEVA CUENTA ....................................................................................... 98
LISTADO 22 OPERACIN LISTADO DE CLIENTES................................................................................. 98
LISTADO 23 CUENTA MTODO TOSTRING........................................................................................... 99
LISTADO 24 CONSULTAR UN CLIENTE Y SUS CUENTAS....................................................................... 99
LISTADO 25 OPERACIN DE CARGO O ABONO................................................................................... 100
LISTADO 26 ELIMINAR INSTANCIAS PERSISTENTES. REFUNDIR MOVIMIENTOS................................. 101
LISTADO 27 PROPAGAR LA ELIMINACIN DE UN CLIENTE A LAS CUENTAS........................................ 101
LISTADO 28 ELIMINAR LAS INSTANCIAS PERSISTENTES VINCULADAS A LA CUENTA......................... 102
LISTADO 29 ILUSTRANDO LA RELACIN ENTRE HERENCIA Y PERSISTENCIA..................................... 105
LISTADO 30 EJ EMPLO DEFICHERO DESCRIPTOR DE PERSISTENCIA .................................................... 119
LISTADO 31 CLASE ORIGINAL EMPLEADO Y SU CLAVE PRIMARIA..................................................... 121
LISTADO 32CLASE EMPLEADO AMPLIADA........................................................................................ 127
LISTADO 33 PRUEBA DE RENDIMIENTO INTERACTIVO J DO............................................................... 135
LISTADO 34 PERSISTIR UNA CUENTA CON J DBC............................................................................... 136
LISTADO 35 CREACIN DE LOS RBOLES DEL TEST........................................................................... 141
LISTADO 36 RECUPERACIN TRANSPARENTE DE LOS RBOLES ........................................................ 142
LISTADO 37 MTODO ADDRESERVATION CON J DO......................................................................... 149
LISTADO 38 MTODO ADDRESERVATION ORIGINAL CON J DBC....................................................... 150
LISTADO 39 CLASE ARRAYOBJ ECT................................................................................................... 151
LISTADO 40 PRUEBA DE RENDIMIENTO DE CREACIN DE RBOLES ODMG..................................... 151
15
ndicedetablas
TABLA 1 CORRESPONDENCIA MODELO OBJ ETOS ESQUEMA RELACIONAL .......................................67
TABLA 2 CLAVES CANDIDATAS EN EL BANCO.....................................................................................68
TABLA 3 ALTERNATIVAS PARA PERSISTENCIA EN LA COMPARATIVA.................................................131
TABLA 4 CUADRO RESUMEN DEL RENDIMIENTO COMPARADO...........................................................146
TABLA 5 NMERO DE REQUISITOS CUMPLIDOS POR SQLJ , J DBC, ODMG Y J DO............................165

16
Capt ul o 1
PERSI STENCI A DE OBJ ETOS:
Conc ept os y Requi si t os
Este captulo presenta el problema de la persistencia de los objetos de las
aplicaciones, y las caractersticas de una solucin para persistir objetos. Se identifica un
conjunto de requisitos, que servir de base para valorar JDO, como solucin Java a la
persistenciadeobjetos.
En primera parte del captulo, para conocer ms de cerca el problema de la
persistencia,sonexpuestosunaseriedeconceptosytrminosfundamentales,empleadosa
lolargodeestedocumento.Enlasegundapartedeestecaptulo,seintentadesmenuzarel
problematratandodescubrirlosrequisitosquesedeberansatisfacer,estudiandodistintas
situaciones donde deben ser guardados y recuperados objetos considerando diferentes
planteamientosyunacomplejidadcreciente.
1.1. Conceptossobrepersistenciadeobjetos
Acontinuacin,seintroducenunaserieconceptosydefiniciones,deformaclaray
sencilla, tratando de evitar distraer la atencin del tema, o promover guerras semnticas
sobre el significado de los trminos empleados y sus acepciones. Nuevas nociones que
viertenluzsobreeltemaquenosinteresa,yalmismotiempo,sirvendebaseparaformar
uncriteriopropio.
1.1.1. Persistencia
Podemosencontrardiferentesdefinicionesdeltrminopersistencia,segndistintos
puntos de vista y autores. Veamos dos que con ms claridad y sencillez, concretan el
conceptodepersistenciadeobjetos.
Laprimera,msantigua,diceas:Eslacapacidaddelprogramadorparaconseguirque
susdatossobrevivanalaejecucindelprocesoqueloscreo,deformaquepuedanserreutilizadosen
otro proceso. Cada objeto, independiente de su tipo, debera poder llegar a ser persistente sin
traduccinexplicita.Tambin,deberaserimplcitoqueelusuarionotuvieraquemoverocopiarlos
datosexpresamenteparaserpersistentes[2].
Esta definicin nos recuerda que es tarea del programador, determinar cuando y
cmo una instancia pasa a ser persistente o deja de serlo, o cuando, debe ser nuevamente
reconstruida; asimismo, que la transformacin de un objeto en su imagen persistente y
viceversa,debesertransparenteparaelprogramador,sinsuintervencin;yquetodoslos
tipos,clases,deberantenerlaposibilidaddequesusinstanciasperduren.
La otra definicin dice as: Persistencia es la capacidad de un lenguaje de
programacinoentornodedesarrollodeprogramacinpara,almacenaryrecuperarelestadodelos
objetosdeformaquesobrevivanalosprocesosquelosmanipulan[19]
Esta definicin indica que el programador no debera preocuparse por el
mecanismointernoquehaceunobjetoserpersistente,seaestemecanismosoportadoporel
propio lenguaje de programacin usado, o por utilidades de programacin para la
persistencia,comolibreras,frameworkocompiladores.
17
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

En definitiva, el programador debera disponer de algn medio para poder


convertir el estado de un objeto, a una representacin adecuada sobre un soporte de
informacin, que permitir con posterioridad revivir o reconstruir el objeto, logrando que
comoprogramadores,nodebamospreocuparnosdecmoestaoperacinesllevadaacabo.
1.1.2. InstanciaPersistenteyTransitoria
Una instancia persistente es aquella cuyos datos perduran a la ejecucin del
procesoquematerializlainstancia.Unainstanciatransitoriaotemporal,estodainstancia
cuyosdatosdesaparecencuandofinalizanlosprocesosquelamanipulan.Enamboscasos,
las instancias en s, como estructuras de datos residentes en memoria, desaparecen al
finalizarlosprocesosquelascrearon.
Vemoslo con un sencillo ejemplo, imaginemos la ejecucin de un programa que
solicitaintroducirnuestronombrequeserusadorepetidasvecesendistintasoperaciones.
Si este dato es recogido en una instancia transitoria, cuando finalice el programa y lo
volvamosaejecutar,deberemosnuevamenteintroducireldato;perosiestasociadoauna
instancia persistente, el dato introducido podra ser recuperado y mostrado en sucesivas
ejecucionesdelprograma.
1.1.3. Serviciodepersistenciadeobjetos
Elconceptodeserviciodepersistenciaestemavigentededebateeinvestigaciny
desarrollo, en los mundos, acadmico y de la industria. Acotar con nitidez qu es un
serviciodepersistencia,esunacuestinabierta,porquelaseparacinentreesteconceptoy
el de base de datos es difusa. Aqu, asumiendo que el destino final de los datos sern
principalmente los sistemas de gestin de datos de la empresa, es adoptada la siguiente
acepcin:
Serviciodepersistenciaesunsistemaomecanismoprogramadoparaposibilitar
una interfaz nica para el almacenamiento, recuperacin, actualizacin y eliminacin del
estadodelosobjetosquepuedenserpersistentesenunoomssistemasgestoresdedatos.
Ladefinicinhecha,consideraqueelsistemagestordedatos,puedeserunsistema
RDBMS, un sistema OODBMS, o cualquiera otro sistema; que el estado podra estar
repartido sobre varios sistemas, incluso de distinto tipo; y lo ms importante, que un
servicio de persistencia de objetos aporta los elementos necesarios para efectuar la
modificacin y la eliminacin de los objetos persistentes, adems del volcado y
recuperacindelestadoenlossistemasgestoresdedatos.Ytodoello,deberaserefectuado
de acuerdo a la definicin hecha ms atrs de persistencia, sin necesidad de traduccin
explicitaporpartedelprogramador.Entodosloscasos,seacualseaeltipodegestordatos,
los servicios de persistencia de objetos, facilitan la ilusin de trabajar con un sistema de
bases de datos de objetos integrado con el lenguaje de programacin, ocultando las
diferencias entre el modelo de objetos del lenguaje y el modelo de datos del sistema
empleado como base de datos. A pesar de lo dicho, un servicio de persistencia no es un
sistema de gestin de bases de datos orientado a objetos. El servicio de persistencia es un
componente esencial de todo sistema gestor de bases de datos de objetos (ODBMS), que
resuelveotrosaspectos,ademsdelapersistencia[2].Msadelante,elconceptodeservicio
de persistencia ser matizado, a travs de los requisitos que debe cubrir, entonces ser
cuando la idea de servicio quedar ms ntida, frente a la idea de que un servicio de
persistencia podra ser solo un interfaz vaco de funcionalidad para acceder a bases de
datos.
18
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

DelasalternativasestndarparahacerpersistirlosobjetosenJava,comentadasen
la introduccin (la serializacin, JDBC, SQLJ, ODMG 3.0 y JDO), solo ODMG 3.0 y JDO
pueden tener la consideracin de servicio de persistencia de objetos Java. Tambin es
posible proponer utilizar un servicio de persistencia del OMG, PSS 2.0, para persistir
objetos Java, pero este estndar, considera opcionales las transacciones y la persistencia
transparente [22], que son funciones necesarias para ofrecer un servicio de persistencia
eficaz, conforme a las definiciones vistas de persistencia. JDBC, SQLJ requieren que el
programador defina, e implemente las operaciones de persistencia teniendo en cuenta
cmo convertir los objetos en tuplas. Ambos pueden ser utilizados en la construccin de
serviciosdepersistenciaparabasesdedatosrelacionales.Laserializacineselserviciode
persistencia ms bsico, solo ofrece servicios para guardar y recuperar el estado de un
objetosobreficherosyflujosdeentradasalida.
A partir del diagrama de clases UML de la Figura 1, veamos cmo guardar un
objetoCl i ent eenJava,concadaunolosestndaresmencionadosdeSerializacin,JDBC,
SQLJ,ODMG3.0yJDO.
0..*
0..*
0..*
Cliente
+nif:String
Movimiento
#contenedor:Cuenta
+Movimiento
+toString:String
importe:double
motivo:String
fechaValoracion:Dat
fechaOperacion:Date
Cuenta
+Cuenta
+cargo:double
boole
+abono:double
#anotaMovimiento: a
codigocuenta:String
saldo:double
limiteCredito:double
apuntes:Movimiento []
titulares:Cliente []
+Cliente
NIF:String
cartera:Cuenta

Figura1DiagramadeClasesdelBanco
doSer i al i ze
ent e cl i ) throws Except i on {
Fi l eOut put St r eam(
" nuevo_cl i ent e" ) ) ;
Serializacin
private void per si st eMet o
( Cl i
try {
Obj ect Out put St r eamsal i da = new
t St r eam( new Obj ect Out pu

sal i da. wr i t eObj ect ( cl i ) ;
sal i da. cl ose( ) ;
}
catch ( Except i on e) {
e. pr i nt St ackTr ace( ) ;
}
}
Listado1Serializacindeunobjetocliente
19
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

tipo Ser i al i zabl e, esto es, la clase


al i zabl e para conseguir la
i ) throws Except i on {
pst mt ;
l eci da
(
i ent e " +
( Ni f ) VALUES ( ? ) " ) ;
1, cl i . ni f ) ;

bj et os que dependen del cl i ent e*/
er a del cl i ent e
t ement (
asCl i ent e " +
" ( codi gocuent a, sal do, l i mi t eCr edi t o, ni f ) VALUES ( ?, ?, ?, ?) " ) ;

int l ast = cl i . get Car t er a( ) . l engt h;
for ( int i = 0; i <
Cuent a cu = ( cl i . get Car t er a( ) ) [ i ] ;
pst mt . set St r i ng( 1, cu. get Codi gocuent a( ) ) ;

. . . . . . .
( int j = 0; j < mx; ++j ) {
;
;
objetoclienteconJDBC
eto Cl i ent e sobre varias
objeto de las
lasconclavesajenasalatablaCliente,
numerosos detalles, que este momento, es
atencin de la idea, principal, que es, tener que
s de forma expresa con el esfuerzo del
Con la serializacin el objeto debe ser del
cl i ent e debe implementar los mtodos de la interfaz Ser i
persistenciaconSerializacin.

EnJDBC
private void per si st eMet odoJ DBC( Cl i ent e cl
Connect i on con;
ull; Dr i ver dr i ver = n
edSt at ement Pr epar
try {
est ab / / La connexi on ya f ue
eSt at ement pst mt = con. pr epar
" I NSERT I NTO Cl
"
pst mt . set St r i ng(
) ; pst mt . execut e(
/ *guar dar l os o
/ / Cuent as de l a car t
pst mt = con. pr epar eSt a
" I NSERT I NTO Cuent

l ast ; ++i ) {
pst mt . set Doubl e( 2, cu. get Sal do( ) ) ;
pst mt . set Doubl e( 3, cu. get Li mi t eCr edi t o( ) ) ;
pst mt . set St r i ng( 4, cl i . ni f ) ;
pst mt . execut e( ) ;
/ / Par a cada cuent a guar dar l os apunt es y l os t i t ul ar es
int mx = cu. get Ti t ul ar es( ) . l engt h;
for ( int j = 0; j < mx; ++j ) {
/ / . . . gr abar t i t ul ar es
. . .
}
for
/ / . . . gr abar apunt es
. . . . . . . . . . . . .
}
}
pst mt . cl ose( )
( ) con. commi t
}
catch ( Except i on e) {
r i t ackTr ace( ) ; e. p nt S
}
}
Listado2Grabarun

En listado anterior, el programa descompone el obj


tablas, ejecutando una insercin en la tabla Cliente, y grabando cada
coleccionescartera,titularesyapuntes,ensendas
estra
tab
mediante el atributo ni f . El listado mu
no desviar la mejor no profundizar, para
convertir en filas, los objetos y sus atributo
programador.
EnSQLJ
20
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

per si st eMet odoSQLJ ( Cl i ent e cl i ) {





}



}
}
. . . .
}
catch
. . .
En
persistencia SQLJ es ms simple y
conciso
las variable
objetos en s
filassobrel JyJBDC,
nosons
una o
decmounobjetoeshechopersistente[7]:
ndo es creado de algn
de un subtipo (clase
tos de los tipos cuyas
ser identificado como persistente en
alguno de los tipos predeterminados por el
nten
unmtodoqueprovocaqueun
puedeserenlacreacindel
ierinstante,segnimplementacin.
hechopersistentealserreferenciadoporotroquees
Aadir un objeto a una coleccin persistente, la asignacin de un
un atributo de otro persistente o la asignacin a cierto tipo de
unobjetotransitoriopaseaserpersistente.
private void

try {
/ * conexi n
. . . .
*/
#sql {I NSERT I NTO Cl i ent e( Ni f ) val ues( : cl i . ni f ) };
for ( int i = 0; i < l ast ; ++i ) {
Cuent a cu = ( cl i . get Car t er a( ) ) [ i ] ;
#sql {
I NSERT I NTO Cuent asCl i ent e
( codi gocuent a, sal do, l i mi t eCr edi t o, ni f ) VALUES
( : ( cu. get Codi gocuent a( ) ) , : ( cu. get Sal do( ) ) ,
: ( cu. get Li mi t eCr edi t o( ) ) , : ( cl i . ni f ) ) };

/ / Par a cada cuent a guar dar l os apunt es y l os t i t ul ar es
int mx = cu. get Ti t ul ar es( ) . l engt h;
for ( int j = 0; j < mx; ++j ) {
/ / . . . gr abar t i t ul ar es
. . . . . . . . . .
for ( int j = 0; j < mx; ++j ) {
/ / . . . gr abar apunt es
. . . . . . . . . . . . .
. . . .
( SQLExcept i on ex) { / / Cat ch SQLExcept i ons.
. . . . .
Listado3GrabarunobjetoclienteconSQLJ
esencia el cdigo JDBC y SQLJ siguen el mismo patrn para realizar la
, la diferencia esencial entre JDBC y SQLJ es sintctica,
paraexpresarestaoperacin,alembeberelcdigoSQLmezcladodirectamentecon
s Java. SQLJ y JDBC exigen al programador la traduccin explcita de los
u representacin sobre una base de datos relacional, convertir los objetos en
asrelacionesdefinidasenelRDBMS,estosignificaentonces,queSQL
erviciosdepersistencia,enelsentidodelasdefinicionesvistasdepersistencia.
De otra parte, los OODBMS ofrecen servicios de persistencia, que adoptan
msdelassiguientesaproximaciones
1. Por tipo: Un objeto puede llegar a ser persistente cua
tipo (clase) dotado de la capacidad de persistir o
rsistentes son distin descendiente) de estos. Los tipos pe
ancias son transitorias. El tipo podra inst
su declaracin, o por herencia de
sistema. De forma parecida,la serializacin obligaquelas clasesimpleme
lainterfazSerializable.
2. Porinvocacinexplicita:elprogramadorinvoca
almtodo objetopaseaserpersistente.Lallamada
objetooencualqu
3. Porreferen
e.
cia:unobjetoes
persistent
objeto a
referencias,provocanque
21
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

e listado aparecen resaltados ejemplos que ilustran los tres modos


osOODBMS:ObjectStoreconsintaxisODMG3.0yconJDO.
) ;
i a
nt es. add( Cl i ) ;
Per si st enceManager Fact or y pmf =
J DOHel per . get Per si st enceManager Fact or y( pr oper t i es) ;
Per si st enceManager pm= pmf . get Per si st enceManager ( ) ;
/
/ / . . . .
a

G3.0,queconJDBCoSQLJ.LapersistenciaafectaalosprogramasJavaen
mayor
En el siguient
nterioresutilizandod a
ODMG con OODMS ObjectStore
private void per si st eMet odoODMGModos( Cl i ent e cl i ) {

db = Dat abase. open( " OODBMSBANCO" , . . . . . . ) ; Dat abase
Tr ansact i on t r = new Tr ansact i on( ) ;
t ry {
t r . begi n( ) ;
Li st Of Obj ect l i st aCl i ent es =
( Li st Of Obj ect ) db. l ookup( " Cl i ent es" ) ;
l i ent es == null) { if ( l i st aC
/ / Por Ti po per si st ent e;
Li st Of Obj ect ( db l i st aCl i ent es = new
db. bi nd( l i st Cl i ent es, " Cl i ent es" ) ;
}
por Ref er enc / /
l i st aCl i e
t r . commi t ( ) ;
db. cl ose( ) ;
}
on e) { catch ( ODMGExcept i
/ / . . . . .

Persistir con JDO

private void per si st eMet odoJ DOModos( Cl i ent e cl i ) {
. . . .
Tr ansact i on t r = pm. cur r ent Tr ansact i on( ) ;
try {
t r . begi n( ) ;
t odosLosCl i ent es = pm. get Ext ent ( Li sOf Obj ect . class, true) ;
/ / . . . .
if ( t odosLosCl i ent es == null) {
/ / por i nvocaci n
pm.makePersistent(listaClientes);
.......
}
Portipo
PorReferencia
PorInvocacin
/ / por Ref er enci
listaClientes.add(Cli);
t r . commi t ( ) ;
pm. cl ose( ) ;
}
catch ( J DOExcept i on e) {
/ / . . . . .

Listado4ModosdepersistirconunOODMBS
Vemosenelanteriorlistado,queelcdigoenamboscasospresentagransimilitud,
nohaycdigoparaconvertirlosobjetosaunformatoapropiadoparalabasededatos,no
es necesaria una traduccin explicita para lograr persistir los objetos. La persistencia
parecemenoscomplicadaconlaserializacin,oconlasOODBMS,seanonoconformesal
estndarODM
medida con JDBC y SQLJ, que con la funcionalidad aportada por servicios de
persistencia similares a los de los ejemplos anteriores, en estos ltimos, el cdigo java es
Porreferencia
22
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

1.1.4.
s caractersticas sern ortogonales, si el uso de una no afecta a la otra, esto es,
dientes entre s. Programas y persistencia sern ortogonales, si la forma en la
quelos
lapersisten
sobre objet a manera con
indepen
caracterstic
programaci Lapersistenciadeunobjetodebeserortogonalaluso,tipoe
identific
manipu o
suidentifica
losobjetos[

3. Facilitarlaintegridadypermitirqueacteelsistemadetipossubyacente,que
podraverificarlaconsistenciaylacorrespondenciadetipos,
base de datos y objetos en programa, la integridad no sera
sarrolladoenlaUniversidad
de Glas
ms independiente de la persistencia, ms en consonancia con la primera de las
definicionesdadasdepersistencia.
Persistenciaortogonal
Do
son indepen
objetossonmanipuladosporestosprogramas,esindependientedelautilizacinde
cia,quelosmismosmecanismosoperarantantosobreobjetospersistentescomo
os transitorios, ambas categoras seran tratadas de la mism
dencia de su caracterstica de persistencia. Ser persistente debera ser una
a intrnseca del objeto, soportada por la infraestructura del entorno de
nypersistencia.
acin.Estoes,cualquierobjetodeberapoderexistireltiempoqueseapreciso,ser
lad sintenerencuenta,siladuracindesuvida,superaalprocesoquelocreo,y
cinnoestarvinculadaalsistemadetipos,comolaposibilidaddarnombresa
2]
Veamoscomoeldensop rrafoanterior,afecta alainteraccinconlabasededatos,
alcdigodenuestrosprogramasyquebeneficiosaporta.Alahoradeplasmarelusodela
persistencia en nuestros programas, una persistencia ortogonal ideal, llevara a no tener
que modificar el cdigo de nuestras clases, salvo aquellas donde debamos introducir las
operaciones que provocan la persistencia para cualquier objeto que sea duradero. Los
beneficiosqueaportalapersistenciaortogonalsonimportantes:mayorescotasdefacilidad
de mantenimiento, correccin, continuidad del cdigo y productividad de desarrollo. Se
consigue:
1. Menos cdigo. Una semntica para expresar las operaciones de persistencia
ms simple de usar y entender. Evita la duplicidad de cdigo uno preparado
parainstanciastransitoriasyotroparainstanciaspersistentes.
2. Evitarlatraduccinexplicitaentreelestadodelosobjetosysurepresentacin
enbasededatos,queredundaenmayorfacilidaddemantenimientoymenos
cdigotambin.
automticamente
entre estados en
responsabilidaddelprogramador.
Todo lo visto en este apartado apunta la conveniencia de usar persistencia
ortogonal. En la prctica conseguir persistencia ortogonal completa no es fcil,
habitualmenteencontraremoslimitaciones.Habrclasesdeobjetosquenosonsoportadas
por los servicios de persistencia, bien por compromisos de diseo, como la dificultad de
implementacin; bien porque cabe pensar que determinados objetos no tienen sentido
fuera del contexto de ejecucin concreto de un proceso, como por ejemplo un puerto de
comunicacionesparaIP.Noobstante,enelproyectoPjama,de
gow se da soporte a tipos de objetos propios del contexto de ejecucin [33]. Para
lograr una persistencia lo ms ortogonal posible, los servicios de persistencia adoptan
distintos enfoques, unos, necesitan que el cdigo de la clases sea modificado, en otros,
debemos incluir meta informacin en forma de marcas, comentarios, ficheros,... para un
preprocesadordecdigofuenteuobjeto,querealizaloscambiosnecesariosparaconseguir
persistencia,y en otros, todala informacin necesaria es obtenida en tiempo de ejecucin,
23
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

odeinterfacesdeprogramacin.
a e r d
mbindeberanserguardadasorecuperadas[19].Deotro
modo, cuando el objeto fuese recuperado, llegara a estar incompleto, sera inconsistente
ado. En la Figura1, si una cuentatiene movimientos, estos
persistircuandolacuentaseaguardada,yviceversa.
1.1.6.
unobjetopersistente,losobjetosdelcierredepersistenciadeunobjeto
sonhec
1.1.7.
tos, el
clases
nadosen
e programacin elegido, no es necesario
se de datos automticamente, cuando las
s del estado de objetos
osestadosdelosobjetos
sonrecuperadosyactualiza enlasemnticade
referenc

falta de correspondencia (impedance mismatch) entre la base de datos y lenguaje de


presentandounentornodeejecucinextendidoconlascapacidadesdepersistencia,donde
lafuncionalidadconsisteenunconjunt
1.1.5. Cierredepersistencia
Los objetos suelen referenciar a otros objetos, estos a su vez a otros, y as puede
continuar sucesivamente. C da objeto pued tene un gran nmero e objetos
dependientes de manera directa e indirecta. Esta relacin de dependencias es parte
integrante del estado de cada objeto. Cuando el estado de un objeto es salvado o
recuperado,susdependenciasta
con respecto a como fue guard
debern
Un mecanismo de persistencia que posibilita la persistencia automtica de las
dependenciasdeunobjeto,quedebanpersistir,sedicequeadmiteelcierredepersistencia.
Cuandoelestadodeunobjetoesalmacenado,losestadosdelosobjetosdependientesque
tengan que ser persistentes, son tambin almacenados, y as, sucesivamente. En otro
sentido,enlarecuperacindelestadodeunobjeto,losestadosdelosobjetosdependientes
son recuperados. El cierre de persistencia determina el conjunto de referencias necesario,
queayudaaconseguirlaconsistenciaentreelestadodelobjetoenelinstantedeguardary
estadoresultantedesurecuperacin.
Persistenciaporalcance
La persistencia por alcance o persistencia en profundidad, es el proceso de
convertir automticamente en persistente, todo objeto referenciado directa o
indirectamentepor
hospersistentes[34][35].Eslaaplicacinrecurrentedelaestrategiadepersistencia
porreferencia,vistamsatrs.
Transparenciadedatos
Cuando un sistema o entorno de programacin ofrece transparencia de da
las conjunto de las clases persistentes y el esquema de la base de datos es uno,
basededatos[34][2][10].Losestadosalmace definendehechoelesquemaenla
la base de datos, son manejados con el lenguaje d
otro. Los objetos son recuperados de la ba
referencias a estos son accedidas. Tambin, las modificacione
persistentessonreflejadasenlabasededatosautomticamente.L
dosdeformatransparente;nohaycambios
ia o de asignacin en la aplicacin. Objetos transitorios y persistentes son
manipuladosdeigualforma.Lasoperacionespropiasdelapersistenciasonefectuadassin
la intervencin directa del programador, con ms cdigo. La frontera entre el lenguaje de
programacin y los servicios de datos desaparece a los ojos del programador, evitando la
programacin[1].
Vemoslo con un ejemplo que ilustra el concepto, imaginemos una rutina que
recorre y actualiza los elementos de una coleccin. Cuando esta coleccin es recorrida, el
programanosepreocupadequeelsiguienteobjetosearecuperadodesdelabasededatos,
sielobjetonoestaenmemoria,elserviciodepersistencialoobtienedesdelabasededatos
24
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

aesuna
de
persiste ciaortogonaltotal,eselcasodequedeterminadasclasesnopuedanpersistir,esto
concreta
1.1.8.
programacinusado,hay
una falta de correspondencia (impedance mismatch) entre la base de datos y lenguaje de
rrespondencia,quedefinacomoun
claseseconvierteendatossobreelmodeloofrecidoporsistemaquealbergarelestadode
losobje
uctivo.
1.2. Requ
que que sea considerado, estas funcionalidades
cambian
de memoria (caches) y la gestin del almacenamiento son las
cuestiones crticas; en otro rea, el diseador de componentes, muy posiblemente, estara
para el proceso. La rutina siguiente tal cual est, puede ser aplicada sobre una coleccin
quecontengaalgunoselementospersistentesosolotemporales,debeserindiferente.
private void r ut i naConTr anspar enci aDat os( Col l ect i on cl l Cuent as) {
final double xl c = 1. 10;
I t er at or i t = cl l Cuent as. i t er at or ( ) ;
while ( i t . hasNext ( ) ) {
Cuent a cu = ( Cuent a) i t . next ( ) ;
cu. set Li mi t eCr edi t o( cu. get Li mi t eCr edi t o( ) *xl c) ;
Listado5Ejemplorutinacontransparenciadedatos.
Nodebemosconfundirtransparenciaconpersistenciaortogonal,laprimer
consecuencia de la segunda. Podemos encontrar transparencia de datos sin disponer
n
mentesuponequelasolucinnoseraortogonal,independiente,respectoeltipo.
Faltadecorrespondenciaentreclasesydatos
Cuando trabajamos con sistemas gestores de datos, como bases de datos
relacionales,ficheros,basesdedatosdocumentalesXML,etc.,cuyomodelodatosnotiene
unaequivalenciadirectaconelmodelodeobjetosdellenguajede
programacin,esnecesarioestablecerunmodelodeco
tos.Aestaequivalenciaentrelaclaseylosdatos,sedenominaaqucorrespondencia
clasedatos(objectmapping).Elcasoparticulardelacorrespondenciaentreclasesytablasen
un RDBMS, es la correspondencia objetoregistros. Utilizaremos el trmino mapear, para
sealar al proceso de definicin de la correspondencia entre las clases de los objetos
persistentesylosmodelosdedatos,elprocesopuedeimplicarcambiosenambosladosde
la correspondencia, en el modelo de clases creado o modificado para asumir ciertos
modelosdedatos,yalcontrario,elmodelodedatospuedeserdiseadoocambiado,para
permitirunacorrespondenciamseficienteyeficazconciertosmodelosdeclases.

Hemosvistounabreverelacindelosconceptosmsrelevantesconcernientesala
cuestin de la persistencia. Las definiciones de persistencia vistas nos invitan a emplear
unapersistenciaquenocambielaformadetrabajarconellenguajedeprogramacin,que
actudeformatransparenteyconsistente,dondeelmodelodeclasesyelmodelodedatos
sonlamismacosa,yqueseaunapersistenciaortogonal.Losbeneficiossernuncdigocon
menoslneas,msfcildemantener,mscorrectoyprod
isitosparaunserviciodepersistencia
Intentaremos ahora establecer cuales son las funcionalidades a soportar por un
servicio de persistencia, teniendo en cuenta los aspectos tcnicos, los organizativos y
econmicos. Dependiendo del enfo
,tendrnmayoromenorimportancia,yalgunasdeellassernincompatibles.Siel
punto de vista escogido es el desarrollo de programas rpido, nos interesar un servicio
simple, transparente y sencillo de usar, que cubra los requisitos esenciales; si nuestro
intersesconseguirunelevadonmerodetransacciones,omanejargrandesvolmenesde
informacin de bases de datos relaciones, la correspondencia entre clases y relaciones, el
rendimiento, la jerarqua
25
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

acin con el
marco (fr uni
ial, pues toda tecnologa no puede sustentarse o evolucionar sin el
respaldo
Rumbaugh, Ivar Jacobson,
ClausP.
1.2.1.
ente desde diferentes sistemas gestores de datos,
que sea
unserviciodepersistencia,talycomoha
enlaprctica,lasprestaciones
delserv
sautoresy,ensegundotermino,respectodelcosteybeneficio
aportad
otros
dispuesto a penalizar el rendimiento, si con ello consigue una mejor integr
amework) de componentes, o una mayor formidad en el tratamiento de
distintas fuentes de datos; un gestor o directivo le importa ms la tasa de retorno de la
inversin, la productividad, la disponibilidad de un mayor nmero de proveedores, de
profesionalesymenorescostesdeformacin,etc.Comopodemosimaginar,estableceruna
solucinvalidaparatodoslosenfoquesestareadifcil.
Los requisitos sern considerados sobre tres dimensiones: tecnolgica,
organizacionalyeconmica.Ladimensintecnolgicarecogelosmecanismosquedebera
cubrir un servicio de persistencia. Respecto a la organizacin nos interesa conocer el
impacto provocado por la adopcin de un servicio de persistencia como es JDO. El factor
econmico es esenc
deunmercadoslido[31].
Paraacometerlatarea,noshemosfijadoenlostrabajosincluidosenlasbibliografa
deautoresreconocidoscomoS.W.Ambler,M.Atkinson,K.Dittrich,CraigLarman,Arthur
M. Keller, Bertino, C. Szypersky, T. Reenskaug, G. Booch, J.
PrieseyWolfangKeller,RobertOrfali,DavidJordan,cuyasreferenciasaparecena
msadelanteeneltexto.
Dimensintecnolgica.Requisitosestructuralesyfuncionales
Queremos determinar qu mecanismos debe proporcionar un buen sistema de
persistencia que asuma los enfoques antes expuestos. Trataremos de conseguir especificar
las funcionalidades de un servicio de persistencia con transparencia de datos, capacidad
para guardar y recuperar concurrentem
ortogonal en la mayor medida posible, robusto, consistente, eficaz, fcil de usar y
extensible. Cada funcionalidad va a ser considerada respecto a su influencia en el
rendimiento, mantenimiento y coste de la solucin. En primer lugar son consideradas las
cualidadesestructuralesquedeberatenerunserviciodepersistencia.Paraseguidamente,
introducirlafuncionalidadqueseesperaacometa
sidodescritoantes.
La ilustracin de ejemplos y situaciones, es utilizada para poner de manifiesto los
requisitosparaobtenerlafuncionalidadesperada.Ejemplosquecubrirnunosrequisitosy
servirn para mostrar otros. Escenarios cuya descripcin permitir presentar distintas
cuestionesapartirdelascualesserexpuestalafuncionalidad.
Comonotodoslosrequisitostcnicossoncubiertos
iciosernclasificadasenesencialesuopcionalesdeacuerdoalniveldeexigenciade
su soporte. Exigencia determinada,enprimer lugar, a la necesidad o conveniencia tcnica
segnlaopinindedistinto
oalrendimientoylamantenibilidad.Habrtambinrequisitosquesonsoportados
directamenteporlosmecanismossubyacentes,yqueportanto,nonecesitanserplasmados
a nivel del servicio de persistencia, y que son el reflejo de los presentes en los
mecanismosdepersistenciautilizados.
El documento de Scott W. Ambler Design of a Robust Persistence Layer For
Relational Databases[32], es el fundamento y guin inicial de los siguientes apartados.
Base que es ampliada para considerar un punto de vista ms general, incorporando
aportacionesdelosautoresmencionados.
26
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

1.2.1.1.
lidades y capacidades elegidas como
ccin de la funcionalidad. El aspecto estructural determina en
buena m
s son las bases sobre la que
construirlafuncionalidad
Pretender El
planteamiento a es son
considerados verdaderas autoridades a del diseo de programas,
ente, dentro de la construccin de programas orientados a objetos. Pero
loscriterios,principiosyreglasdecarctergeneralampliamenteaceptados,
noessu
.Nosignificaesto,quela
a cubrir la complejidad de la tarea encomendada, pero el planteamiento,
entacinydocumentacinnodebenparecercuencosdeespaguetis.Debera
sertom

abilidad va a
depend
menteevitandoresultadosno
espe o lesmarcados,quedebeser
con u
anormales.Msadelanteveremosquefuncionalidadserequiere.
Modularidad
Lasolucinaunproblemacomplejopasaporestablecerunaarquitecturamodular,
que estructura el problema en distintas partes, cuyas soluciones contribuyen a la solucin
Estructurales
Los requisitos estructurales, son las cua
referente para la constru
edida como es conseguida la funcionalidad, cual ser la continuidad, la facilidad
deuso,lacapacidaddeintegracin,laeficaciaylaeficiencia,elcoste,...factorestodosellos
quedeterminanlacalidaddelassolucionesimplementadas.
Cules son las propiedades estructurales que debe tener todo servicio de
persistencia? Cul es la estructura ms indicada? Cule
?
contestar directamente de la forma adecuada es una osada.
qu, es asumir las pautas y recomendaciones marcadas por quien
de la disciplin
primordialm
transcribiraqu
ficiente,almenos,losprincipalesaspectosdebenserconcretados.Evidentemente,
que un servicio de persistencia debera ser diseado de una forma disciplinada, rigurosa,
consistente, correcta, robusta, eficaz, extensible, reutilizable, eficiente, transportable,
funcional,oportuna,compatibleymanejable[19].
Pasemos ahora a intentar concretar algunas de las cualidades o propiedades, que
debensatisfacerunbuenserviciodepersistencia.
Simplicidadysencillez
Un requisito primordial para lograr una buena arquitectura es intentar mantener la
simplicidadylasencillezdelasolucin,evitarlosartificiosinnecesarios
solucin no deb
diseo,implem
adaenconsideracinlasiguientemximadeHoare:
Haydosformasdeconstruirundiseodesoftware:
Unaformaeshacerlotansimplequeobviamentenohaydeficiencias
Ylaotraformaeshacerlotancomplicadoquenohaydeficienciasobvias.
C.A.R.Hoare
Fiabilidad
Un servicio de persistencia debera mostrar una alta probabilidad de funcionar
correctamentebajotodacircunstancia.Lafiabilidadoconfiabilidadesunodelosfundamentos
bsicos sobre los que se sustenta toda solucin estructurada. La confi
er,engranmedida,delaspropiedadesestructuralescomoelintercambiodedatos,
lasealizacinytratamientodecondicionesdeerror,lagestindeexcepciones,iniciacin
devariables,etctera.Tododebesercuidadosamentepensadoyllevadoacabo.
Unserviciodepersistenciadebeserfiable,funcionarcorrecta
rad soimprevisibles.Larobustezesunodelosobjetivosinicia
seg ido gracias a un diseo que contemple el tratamiento y reaccin ante situaciones
27
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

completa del problema inicial. Esto es, la solucin a un problema complejo, pasa por la
creacindemdulosqueensambladosdefinenelsistemaqueplasmalasolucin.
Una buena modularidad facilita la consecucin de tres propiedades esenciales a
toda solucin de programacin: la ocultacin de la informacin, la facilidad de
mantenimiento y el desarrollo en paralelo de las partes. Debemos recordar que toda
construccin orientada objetos debe seguir una arquitectura guiada por los tipos de los
objetos que manipula [7]. Asimismo, que la separacin de conceptos frente a su coste de
realizacin,ayudaaconcretarladivisinenmdulosdelafuncionalidad0.
Algunasdelaspropuestasrevisadas[41],[42],[14],[6],[24],[32]y[4],difierenenlos
componentes concretos que forman la arquitectura pero desde punto de vista ms
generalcoincidenen:

un
Estructurarlasresponsabilidadesencapasdeservicios.
Ladistincinclaradedoscapasunaobjetualyotradegestindelalmacenamiento.

Figura2Puzzledelapersistencia
Laestructurageneralencapas,facilitalaorganizacindelosserviciosendistintos
deloscualesconstituyenelsoporteparalosserviciosdelnivelsuperiory
es sustentado, que
cen
a
abstracciones bien conocidas, con patrones de solucin
bien im
osdepersistenciayelmundodelosobjetos.Elcostede
separar en capas un servicio de persistencia debe ser recuperado por un aumento en la
mantenibilidadyunamsfc
Encaps
niveles,cadauno
a su vez, por los servicios necesita del nivel inferior, consiguiendouna
altacohesin,bajoacoplamientoyfacilidadparalaencapsulacin.Ejemplosclsicossonlas
pila de servicios para red OSI y TCP/IP. Para estudiar ms detenidamente esta forma de
estructurar los servicios de persistencia, para el caso particular de las bases de datos
relacionalesver[12][6][32].
La separacin en una capa de objetos y otra para administrar el alma amiento,
contribuyealaseparacindelosconceptosdelaorientacinobjetos,deaquellosrelativosa
laprogramacindebasesdedatos,sistemasdearchivososerviciosdeempresa.Cadaun
estas reas est representada por
plantados dentro sus dominios de aplicacin. De esta forma, podrn ser aplicadas
las mejores soluciones a cada abstraccin. Entre ambas capas, se sitan uno o ms niveles
de serviciosque cubren parte de la funcionalidad requeridayla falta de correspondencia,
entrelosmundosdelosmecanism
ilpuestaapuntodelrendimiento[32].
ulacin
Scott W. Ambler [32] propone que idealmente solo se deberan mandar los
mensajesdesalvar,borraryrecuperaralobjetoencuestinocultndosetododetallesobreel
28
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

laocultacindelainformacin.
mecanismo concreto de persistencia. En [42] de Wolfgang Keller podemos encontrar
tambin, la justificacin sobre la conveniencia de que un servicio de persistencia debe
encapsularlosdetallesdelosmecanismosdepersistenciasubyacentes.
As pues, alcanzar la encapsulacin de los mecanismos de persistencia es un requisito
esencial.Laestructuracinencapasfacilitalograrelrequisitode
DiferentesEstilosdeAplicacin
Veamos a un ejemplo que servir como ilustracin de nuevos requisitos, una
secuenciasimpledeloquesucedecuandovamosapagarlacompradelsupermercadocon
unatarjetadepagoelectrnico...
TPV Servicio Autorizaci
<<actor>>
Cajero
2.2: mostrarTicket
2.1: SolicitarAprobacion
1:[*] //introducirProducto
2: efectuarPagoconTarjeta

cia sern muy distintos. Un TPV podra ser desde un terminal


clsico
de enormes
prestacion pa
en
gestores relacionales. En otro, las aplicaciones de CAD, CASE, GIS, OLAP,... donde los
Figura3DiagramadeColaboracinVentaTPV
Lasecuenciamuestralainteraccinentretresobjetos:elcajero,untpvyunservicio
de autorizacin bancaria. Un cajero debidamente acreditado ante el TPV que realiza las
transaccionesdeanotarlosproductosquenosllevaremosacasa,laoperacindelpagocon
tarjetayfinalizarlaventaconlaentregadelticket,etc.ElTPV,queinstanciaelsistemade
ventas, tiene por misin registrar la salida de artculos, los registros de actividad sobre
operaciones del cajero, preparar la cuenta y acceder al servicio de autorizaciones de pago
con tarjeta. El tercero, el servicio de autorizacin de pago, accede a los sistemas de banca
electrnicaparaconcederodenegarlaoperacindepago.
Evidentemente, tanto el TPV como los Servicios de Autorizacin, necesitan
registrar los datos procesados, podemos imaginar que la plataformas tecnolgicas y los
mecanismos de persisten
a un ordenador personal adaptado a tal propsito con bajas prestaciones de
cmputo. Los servicios de autorizacin son servicios crticos que requieren
es ra atender un elevado nmero de transacciones por minuto, tpicamente
soportadossobregrandesequiposcentrales.
Sobrelabasedeesteejemplo,yechandounvistazoalaliteraturasobrelasbasesde
datos, podemos convenir varios tipos de sistemas de informacin, con diferentes
necesidades de mecanismos para guardar, recuperar y concurrir sobre los datos. Aqu,
sern definidas dos categoras. De un lado, las aplicaciones de gestin con diferentes
necesidadesdeprestacionesyrendimiento,cubiertasporsistemasbasadosenarchivosy
29
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

sistema
coste [41] [42] [32] [7] [28] [25]
[8].
arquitecturas de aplicaciones que han sido ampliamente
nuevas entran en escena como Model Driven Architecture (MDA) o los
s en .NET. Todas ellas pueden ser clasificadas de forma genrica en
arquitec
uitecturas implica un mayor coste de
que enla prctica lamayor partede los productos eligenun modelo de
a satisfacer un determinado sector del mercado, y delegan en el
desarro
poda ser
solapad con distintasaplicacionesenelmismosistema,peor
an, la ser interrumpida, a riesgo de hundir todo el
sistema. e no era escalable frente al
nmero
Extens li
er capaces de aadir nuevas clases a las aplicaciones,
deberamos r los mecanismos de persistencia empleados. Tambin
tendra e os. De hecho con una modularidad
adecuad
s gestores de bases de datos relacionales clsicos no han cubierto sus requisitos de
persistencia en trminos de rendimiento, mantenimiento y
Es requisito esencial soportar, las aplicaciones de la primera categora, las
aplicacionesdelosnegocios,querepresentanlamayoradelasaplicacionesenuso.Laotra
categoraesconsideradacomounrequisitoopcional.
Diferentesarquitecturas
Las funcionalidades de una aplicacin deben ser organizadas siguiendo algn
modelo de arquitectura, que, cuando la aplicacin es ejecutada, determina la interaccin
entre sus funcionalidades y donde son desplegadas en el entorno de ejecucin. En la
actualidad coexisten distintas
aceptadas, y otras
modelos basado
turas monolticas, las cliente/servidor en dos o ms capas y las distribuidas de
objetos. En todas tendremos la necesidad de la persistencia de datos. Arquitecturas
diferentes, con necesidades de persistencia distintas, que conducen a que es necesario,
soportar diferentes arquitecturas. Las opiniones de los trabajos vistos en este trabajo de S.
Ambler [32], T.Reenskaug [25] , C. Priese [24], y B.Meyer [19], recogen esta necesidad de
diferentesarquitecturas
Es necesario que un buen servicio de persistencia ofrezca soporte a los modelos clsicos de
arquitecturamonoltico,cliente/servidorendosomscapasydistribuidasdeobjetos.
Esto supone para el diseador de servicios de persistencia seguir ciertas
especificaciones que garanticen la integracin del servicio de persistencia en las
arquitecturas objetivo. Soportar diferentes arq
desarrollo, por lo
arquitectura con vistas
lladorlaposibleadaptacinalmodelodearquitecturaescogida,locualnosiempre
esposible.Quizsfueramsadecuadoexpresaresterequisitoenformanegativacomo:
Esesencialqueunserviciodepersistencianodebaimponerrestriccionesestructuralesque
impidansuinclusiny/oadaptacinadiferentesarquitecturas.
Unejemplodelosinconvenientesdenoasumirelrequisitoexpuesto,eselusode
cdigonoreentrantequeevitaramantenerenejecucinmsdeunaimagendeunmismo
ejecutable o librera. Hace ya unos aos, programando aplicaciones de gestin en un
entorno grfico muy conocido, las libreras proporcionadas para acceder a una base de
datos archconocida, no permitan aprovechar la capacidad de ejecucin concurrente en
hebras del entorno grfico, la ejecucin de consultas con mltiples registros no
a lapresentacinyedicinen
nzada una consulta esta no poda
Esta limitacin forzaba el diseo de la aplicacin qu
de registrosolacarga.
ibi dad
Al igual que deberamos s
ser capaces de sustitui
qu ser posible incorporar nuevos mecanism
a deberaser posible extenderel serviciode persistenciacon nuevosmecanismos.
Que un servicio de persistencia sea extensible o no, es una decisin de diseo motivo de
30
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

los programas
odificando su funcionalidad, en este sentido sera preciso
n a los servicios de persistencia. La extensibilidad es una
cualidad
noma de los desarrollos, mayor
product
nacin de valores por defecto, el nmero de servicios disponible, la
compat
indelcdigo.
cillo o
iodepersistencia.Lafacilidaddeusopuedollegaraserun
el xito de un buen servicio de persistencia. Un servicio
puedes
de datos o peticiones de servicio, con un rendimiento y
productividad
s p
controversia. De un lado los programadores de los servicios de persistencia querrn
disponer de la posibilidad adaptar el servicio a sus necesidades dado el caso; de otro los
fabricantes,celososguardianesdelcdigodesusimplementaciones.Laorientacinobjetos
permite satisfacer a ambas partes. Debemos tener en cuenta que
evolucionan, incorporando o m
dotar de extensibilidad tambi
deseabledeunbuensistemadepersistencia.
Facilidaddeuso
Lafacilidaddemanejoesotradelaspropiedadesqueseesperatengatodoservicio
de persistencia. En los apartados anteriores queda de manifiesto la conveniencia, de que
unserviciodepersistenciadebepresentarsusserviciosdeformaclara,concisa,oportunay
manejable. Ser fcil de usar contribuye a conseguir la eco
ividad y menor coste en horas/hombre. Esta cualidad garantiza la aceptacin y el
xito de implantacin de un servicio de persistencia. Cosas tales como la nomenclatura
consistente de las caractersticas, la flexibilidad y expresividad en la definicin de las
operaciones, la asig
ibilidad con otros tipos de objetos, el empleo de asistentes para automatizar las
principales tareas y el empaquetamiento y distribucin, son elementos que ayudan a
conseguirunserviciomsfcildeusar.Lafacilidaddeusodeberarepercutiren:
Unmenoresfuerzodediseo.
Menorcosteyesfuerzodeproducc
Facilidadparalaprueba.
Mejorverificabilidad.
Mejormantenibilidad.
Facilidaddeinstalacinyconfiguracin.
Todos estos factores debern ser tenidos en cuenta, an cuando su medida no
siempre es fcil. El sentido comn ser la mejor herramienta para decidir si es sen
complicadoelusodeunservic
factor crtico determinante en
erelmseficazyeficiente,elmsbaratoperosinoesfcildeusar,tendrseveras
dificultadesalcanzarseraceptadoeimplantadoenlasorganizaciones.
Escalabilidadyrendimiento
La arquitectura de una solucin, afecta a su capacidad para acometer aumentos
importantes en el volumen
acordes. La escalabilidad es uno de los objetivos iniciales que no es
alcanzable, sin un diseo preparado frente a grandes variaciones en la carga. La
escalabilidad es una cualidad necesaria para un servicio de persistencia, porque al ser un
intermediarioentrelosobjetosylosserviciosdedatos,seconvierteenunfactorcrticoque
puedellegaraserelcuellodebotelladetodounsistema.
Se espera que un servicio de persistencia se adapte a las fluctuaciones en el volumen de
datosypeticionesofreciendoelserviciomseficazencadacaso.Estoes,unserviciodepersistencia
deberaserescalable.
Paramejorarelrendimiento,elaccesoalosobjetosdebeseroptimizadoytambin
elacceso alo mecanismosde ersistencia,paralocual,sedebemaximizarelrendimiento
31
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

de m
introdu
toasncronodecomunicacionesyoperacionesconpersistencia.
corresp yrecuperardatosyobjetos,perosinloscules
lasolucin ad. Las propuestasde [41][32]
incorpo serviciosdepersistencia.
tacin
unserviciodepersistenciapuedeserefectuadadedistintas
formas,
etadas como fuentes o binarios, a sofisticados
framewo
Idealmente, la persistencia ortogonal podra ser una caracterstica del lenguaje de
is y semntica seran extendidas para incluirla, incluyendo al
nes y modificadores en declaracin de los tipos, atributos y
doparecequetiendealasopcionesenlatadas,siguiendolosmodelos
iones de servicios y framework. Todas las realizaciones, que
dosaspectosprincipales:
acin acerca de qu ser persistente y
formacin estar incluida en el
rte de las fuentes, incluidos los
sitorios son ficheros comunes de texto,
ros XML e incluso sofisticados modelos de objetosdatos, almacenados en
etossernpersistentes,y
las operaciones de
fuente, en el cdigo
os de un sencillo ejemplo para
in de
los ecanismos y minimizar el nmero de peticiones a los mismos [41]. Esto lleva a
cirenlaarquitecturadelservicioelementoscomo:
Cachesdedatosyobjetos.
Encolamientodeoperaciones.
Procesamien
Mecanismosparaoptimizarlaconcurrencia.
Cada uno de estos elementos, le corresponder una funcionalidad que no
ondeconelpuroobjetivodeguardar
al problema de la persistencia no sera de utilid
ranlanecesidaddeoptimizarelrendimientodelos
Modelosdeimplemen
Laimplementacinde
cadaunadelascualespresentasusventajaseinconvenientes,tienesuspartidarios
ysusdisidentes.Encontraremosenelmercado,unabanicoderealizaciones,quevandesde
las clsicas colecciones de clases empaqu
rk,dotadosconprogramasasistenteparacadaactividaddelprocesodecreacin,
mantenimientoyejecucin.
Cada una de las opciones que podremos encontrar, seguramente, ser la ms
adecuada a cada caso, en funcin de los requisitos, la cultura de desarrollo y las
disponibilidadespresupuestarias.Alahoradeescoger,deberemostenermuypresentela
flexibilidad para poder amoldar la implementacin del servicio de persistencia a nuestras
necesidades.
programacin, su sintax
nuevas instruccio efecto,
Pero,elmerca objetos.
sicos de colecc cl
encontraremos,presentanencomn
La utilizacin de meta datos. Meta inform
cual ser la correspondencia clasetipo. La meta in
ios a pa cdigo fuente de la clases o en repositor
s repo utilizados para la persistencia. Lo
fiche
basesdedatos.
Lainclusinautomticadecdigoenlasclasescuyosobj
en los mtodos de las clases cuyas instancias conducen
persistencia. El cdigo aadido podr ser en el cdigo
ejecutable,ounamezcladeambos.
Pasemosahoraaestudiarlosaspectosfuncionales.
1.2.1.2. Funcionalidad
Guardaryrecuperarobjetos
Este es el requisito esencial por excelencia. Partim
ayudar a descubrir nuevas funcionalidades requeridas. El ejemplo es la continuac
odondeseguardabauncliente. aquelvist
32
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

rtida,lomsinmediatoesaprovecharloquetenemosms
bjetos,usarlainterfazSer i al i zabl equerecogeslola
obliga,enprincipio,aimplementarmtodoalguno.La
cuyas instancias deseamos hacer persistentes, tiene que ser declarada como
reun

m.

lic static void
est RWSer i al i ze t s = new Test RWSer i al i ze( ) ;
cl i AGuar dar = new Cl i ent e( ) ;
ll;
t s. per si st eMet odoSer i a
cl i Recuper ado = t s. r ecuper aMet odoSer i al i ze( i dCl i ) ;

i u d
if



}
catch
e. pr i nt St ackTr ace( ) ;
}
}

private i al i ze( Cl i ent e cl i , St r i ng i dExt er no)
throws
{
try {
Obj ect Out put St r eamsal i da = new Obj ect Out put St r eam( new

sal i
sal i
}
catch
}

Ni f cl i ent e guar dado A- 30000


Sinotrarestriccindepa
amanoparahacerpersistirloso
cadepersistenciayqueno semnti
clase,
Ser i al i zabl e.Paraguardarunobjetodebemosusarelmtodowr i t eObj ect sob
rarecuperarusarelmtodor eadObj ect aplicadoaunobjeto objetoOutputStream,ypa
I nput St r ea

package casosdeuso;

j ava. i o. *; import
import banco. *;

class Test RWSer i al i ze public
{
pub mai n( St r i ng[ ] ar gs)
{
T
Cl i ent e
Cl i ent e cl i Recuper ado = nu

try {
final St r i ng i dCl i = " A- 30000" ;
cl i AGuar dar . set NI F( i dCl i ) ;
l i ze( cl i AGuar dar , i dCl i ) ;
Syst em. out . pr i nt l n( " Ni f cl ent e g ar da o " +
cl i AGuar dar . get NI F( ) ) ;
Syst em. out . pr i nt l n( " Ni f cl i ent e r ecupeado " +
cl i Recuper ado. get NI F( ) ) ;

if ( cl i Recuper ado. get NI F( ) . equal s( cl i AGuar dar . get NI F( ) ) ) {
Syst em. out . pr i nt l n( " Obj et os con l os mi smos cont eni dos" ) ;
}
( ! cl i Recuper ado. equal s( cl i AGuar dar ) ) {
Syst em. out . pr i nt l n(
Identificador
Conectaobjetoyestado
guardado
Instancias
contenido
distintas.
conigual
pero
" Obj et os i nt er nament e di st i nt os, I dent i dad di f er ent e" ) ;
}
( Except i on e) {
void per si st eMet odoSer
Except i on

Fi l eOut put St r eam( i dExt er no) ) ;
da. wr i t eObj ect ( cl i ) ;
da. cl ose( ) ;
( Except i on e) {
e. pr i nt St ackTr ace( ) ;
}
}
}
Ej ecuci n
33
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

i smos cont eni dos


nt e di st i nt os, I dent i dad di f er ent e
6EjemploserializacinenJava
cuestiones:
segnelcaso.
Operac
de los estados de los objetos
persisten
persistente,quesirve
para localizar, de forma inequvoca, la imagen del objeto guardado en los repositorios de
datos. C
emadeidentidadempleadoparalosobjetospersistentes,esunodelos
elemen
l
adores. La eleccin de
que tc a a, en conjuncin de los
gestoresdestino,yaseanbasesdedatosrelacionalesuotros.HayOODBMSquepermiten
asignaraunatributo,ovarios,lacaractersticadeunicidad,quesirvecomoidentidad,pero
Ni f cl i ent e guar dado A- 30000
Obj et os con l os m
Obj et os i nt er name
Listado
El cdigo anterior guarda y recupera un objeto de la clase Cl i ent e, que fue
declarada Ser i al i zabl e, objeto que es hecho persistente con el mtodo
per si st eMet odoSer i al i ze, que escribe el objeto sobre un archivo donde queda
almacenado el estado del objeto persistente. Seguidamente, el objeto es recuperado con el
mtodo recuperaMetodoSerialize desde el mismo archivo donde fue guardado. La salida
estndar muestra como ambos objetos son distintos aunque con los mismos contenidos,
estadosiguales.
Revisandoelcdigodellistadoanteriorseplanteandistintas
Lanecesidaddeunosidentificadores,queconectanlosestadosalmacenadosy
losobjetosenejecucin.Enlistadoanterioreraelnombredelarchivodondees
almacenadoelobjeto.
Elobjetorecuperadonoeselmismoensentidoestricto,tieneelmismoestado,
el mismo contenido, es otro objeto con los mismos contenidos. Los objetos
iguales,peronoidnticos
Puedenproducirseexcepcionesalinteractuarconelmecanismodepersistencia
quedebensermanejadas.
No basta solo con guardar y recuperar. Qu sucede cuando un objeto
persistente es modificado o eliminado? El estado almacenado debe reflejar los
cambios producidos. El archivo en ejemplo anterior debera ser actualizado o
suprimido,
ionesbsicasdeactualizacindelestado
Guardar y recuperar el estado de los objetos, significa que todo objeto persistente
necesitar, que su estado sea creado, ledo, actualizado y borrado del medio, soporte de
informacinosistemadondeseadepositado.Esesencialqueunsistemadepersistenciafacilite
las operaciones bsicas de creacin, lectura, actualizacin y borrado
tes[32][4].
Identidaddelosobjetospersistentes
Necesitamosasociaralmenosunidentificadoracadaobjeto
ada identificador establece una correspondencia entre el objeto persistente y su
estado almacenado, una referencia con la que es posible efectuar las operaciones de
actualizacin para reflejar los cambios efectuados en los objetos durante la ejecucin; en
base a estos identificadores es posible asignar una identidad para los objetos persistentes.
Laeleccindelsist
tosclavedeladefinicindelacorrespondenciaclaseobjetos.
Podemos encontrar modelos de persistencia, en los que la identificacin es
explicita,esobligatorioaadirodesignarunomsatributosde aclase,comolaidentidad
del estado depositado en el sistema gestor de datos; en otros, esto es una opcin, pues
disponen de la capacidad de generar automticamente los identific
nic s emplear depende de los entornos de persistenci
34
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

distinta
SGBDR. La ses de datos relacionales, disponen tambin de una identidad
generad
zar los
archivo
ilizar identificadores asignados por los usuarios o
beraofreceralasaplicacionesunsistemadeidentidado
claves,
.
nteoindirectamente,con
el objet
solo depsito, todo contenido en una unidad que no
permite
re referencias internas en ejecucin y la
identida
ademsdeladeidentidadasignadaporelsistema,loqueesunaclaveprimariaen
s principales ba
aautomticamenteparaidentificaralosregistros,queesindependienteydistinta
de la designacin de clave primaria, los identificadores de fila, ambos sirven para
establecer la identidad de una fila de datos. Los sistemas de archivos tambin presentan
modelos de identificacin que establecen como nombrar de modo singular y locali
squemanejan.
Losidentificadorespodrnteneronosignificadoparaelusuario,peroestilpoder
dar un nombre a los objetos persistentes, mediante el cual buscar y localizar los objetos
almacenados en los sistemas gestores de datos, nombrar los objetos es para nosotros un
modo natural deidentificar. Estndares como ODMG 3.0, CORBA naming servicesyJava
JNI,ofrecenestaposibilidadaunqueconperspectivasdistintas.
Es un requisito esencial que todo servicio de persistencia soporte identificadores de objetos
utilizados para guardar, y acceder posteriormente, a los estados de los objetos persistentes.
Opcionalmentedeberaserposibleemplearnombres,identificadoresasignadosporelprogramadoro
usuario,paralalocalizacindeobjetospersistentes,parasuidentificacin.
Hemosvistoquelosmecanismosdepersistenciaofrecenfrmulasdiferentes,para
establecer la identidad de los datos, los servicios de persistencia deben aprovechar la
capacidaddelosmecanismosparaestableceryasegurarlaidentidad.Enconcreto,conlos
sistemas relacionales, es preciso facilitar la integracin de claves primarias e identidad de los
objetospersistentes.
La posibilidad de ut
programadores,llevaaquesede
independiente de los mecanismos de persistencia soportados, esto aporta
flexibilidad frente a cambios del mecanismo empleado. Un servicio de persistencia debera
ofrecerlosmediosparadefinirymanejarmodelosdeidentidadbasadosen:
Laidentidadasignadaporlosmecanismosdepersistencia.
Identidad asignada mediante la aplicacin bien con nombres [2], bien con claves
primarias[41]
Los trabajos de G.Booch, J. Rumbaugh, A. Keller, y S. Ambler ensean distintos
modelosdesoportedelasclavesprimariasparasistemasrelacionales.En[7]y[4]podemos
llegaraconoceralgunosdelosmodelosusadosporlossistemasbasadosenobjetos.
Volvamos sobre el ejemplo anterior. Sabemos que Ser i al i zabl e, asegura una
persistenciaporalcance,todoslosobjetosrelacionadosdirectame
o a almacenar o recuperar son automticamente procesados. As pues, bastar con
designarelidentificadordelobjetosingularrazdelcierredepersistencia,paraalcanzarel
objetivo de guardar y recuperar objetos. La serializacin empaqueta el cierre de
persistencia de un objeto en un
accederalosobjetoscontenidosporseparado.Sideseamosaccederporseparadoa
losobjetoscontenidos,cadaunodelosobjetos,debeserguardadodeformaindependiente,
asignarle una identidad persistente, y de alguna forma mantener el vnculo de las
referencias internas existentes entre estos objetos y los correspondientes identificadores
asignados. En definitiva, la equivalencia ent
d persistente, debe ser manejada por el servicio de persistencia, de forma que se
mantenga la integridad de las relaciones entre objetos persistentes. Los estados
almacenadosestnrelacionadosentres,comolosobjetosalosquecorresponden,elcierre
depersistenciaquedatambinalmacenadocomounarelacinentreestadosdelosobjetos.
35
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

ridad.[1][2]
los tipos bsicos o por defecto,
comop
tiposoclasesysuscorrespondientestipos,quedefinensuestadopersistenteen
tos.Laconversindeberaserefectuadasinnecesidaddeaadircdigoadicional,
sinlain
jetos construidos
conotro s.Unservicio
depersis
t o que un
conjunto de conjuntos son crticos pues son la forma
natural ndo real, las tuplas son la forma
natural
capturan el cionar
estructuradosqueimplementanelconjunto,tuplaylista.Generalizando,unserviciodepersistencia
deberas
Latraduccindereferenciasentiempodeejecucinalaidentidadpersistente,yviceversa,
debeserefectuadadeformaconsistenteporelserviciodepersistencia.
Correspondenciaclasesdatos
Alguardaryrecuperarlosobjetos,existeunafaltadecorrespondenciaentretipos
delosobjetosylostiposdelosdatosenlosalmacenesdepersistencia,excepcinhechade
los gestores de datos objetuales, que debe ser resulta al hacer persistir los objetos en un
servicio de datos, para ello hay identificar qu clases sern persistentes, esto es, definir la
correspondencia de clases con las entidades de los servicios de datos. La correspondencia
permitealserviciodepersistenciallevaracabointercambioentreambossistemasdetipos
coninteg
Un servicio de persistencia debera proporcionar los medios para expresar y establecer la
correspondenciaentreelmodelodeclasesylosesquemasdelosserviciosdedatos.Lasdiferencias
entre los sistemas de tipos del lenguaje y los mecanismos de persistencia, exigen la
definicin de las de equivalencias entre estos, tanto para
aralostiposcomplejoscomosonlasestructurasdedatos.
Un servicio de persistencia con transparencia de datos debera producir la conversin
automticaentrelos
losdepsitosdeda
tervencindelprogramador.
Lacorrespondenciadebecubrirelcasodelasclasessondefinidasapartirdeotras
de las que dependen, resultandoas que se definen objetos complejos, ob
sobjetos,ademsdelostiposbsicoscomoenteros,carcterydem
tenciadebesoportarobjetoscomplejos[2].
En re los objetos complejos estn el conjunt , la tupla y la lista forman
constructores bsicos esenciales. Los
de representar colecciones de objetos del mu
representar las propiedades de un concepto u objeto y las listas o series (array)
orden [2]. Un servicio de persistencia debera propor soporte a los tipos
oportarcoleccionespersistentes.
Lasrelacionesentreobjetostambintienenqueserconvertidassobrelosdatos,as
que la herencia, la agregacin, la composicin, la simple asociacin y el polimorfismo
deben ser representados con datos usando los elementos proporcionados por los
mecanismosde persistencia para perdurar de formaeficaz y eficiente, la tareano siempre
esfcil.Bastedemomentoreconocerqueunserviciodepersistenciadefacilitarlosmediospara
expresaryplasmarlasrelacionesentrelosobjetosentrminosdelosmecanismosdepersistenciaque
permite.
Enparticular,elmapeoconlasbasesdedatosrelacionalesesobjetodenumerosos
trabajosyesfuerzos,entreotrosmencionarlaspropuestasdeJ.Rumbaugh[30],C.Larman
[18], A. Keller [41], W. Keller [42], S. Ambler [32], o R.G.G.Cattell [7] consideran la
problemticadelmapeosobrebasesdedatosrelacionales.
La correspondencia clasesdatos, la informacin sobre el mapeo, debe ser accesible en
tiempo de ejecucin para asegurar la integridad con el conocimiento que se obtiene de la
correspondencia.
36
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

aconsiderarlaconvenienciadealcanzarlamayorindependencia
posible.
elcdigoobjeto,debesermodificado,ademsdelimitarlostiposdedatos
quepueden algnentornocomoGemStone,dondela
maquin extensiones sintcticas para sealar
atributo imarias, etc.; y con la modificacin del papel de algunos
objetos, medio para alcanzar persistencia, como las variables
globales entes, consiguiendo as una solucin sin fisuras entre
lenguaj b
l ang. t hr eads.
licacionesnonecesitanguardaryrecuperarunthread
que no tienen sentido fuera del proceso que los usa.
Hay tra
moladefinicinmencionadaalprincipio.Revisandoalgunosdelosproductos
comerci
evitarmodificarelfuenteimplementando
capacidaddepersistenciaalcdigoobjeto
ejecutable, un sencillo, y fcil de usar archivo de configuracin, es utilizado para indicar
quevaa serpersistente.
a independencia completa de la persistencia frente a Java, persistencia ortogonal
al tipo, uso e identificacin, es costosa y compleja de implementar, podra a llegar a
necesita del cambio en la especificacin de Java como lenguaje. Esto podra suponer un
gran revs ala ampliaaceptacin e implantacin de Java. Pero sin elevadaindependencia
nohayt ansparenciadedatos,queesunodelosobjetivosaconseguir.
Adaptarelcdigoyasum lahabitualparaobtener
persistencia bastante independient los programas y de los
sistema
relacional,cumplatodoslasreglasdeCodd[8]ynoporelloseabandonsu
uso.En
Ortogonalidad
Enlasdefinicionesyconceptospresentadossobrepersistencia,yenlaintroduccin
deestaseccin,conducen
Desdeelpuntodevistadeprogramador,estoimplicaconseguir:
Nonecesitarmodificarelcdigofuentedelasclasesymtodos.
Independencia de uso, los mtodos manipulan objetos persistentes y
transitoriosusandoelmismocdigo.
Transparenciadedatos,esquemaesnico.
Poder utilizar claves primarias, asignar nombres o identificadores para
denominar,localizaryrecuperarobjetospersistentes.
EnningunodeloslenguajesdeprogramacinmshabitualescomoC,C++,VBasic,
Delphi, Eiffel, es posible conseguir una persistencia ortogonal total. De alguna forma el
cdigofuenteo
persistir.EnSmalltalk,encontramos
a virtual Smalltalk es extendida con ciertas
s transitorios y claves pr
que se convierten en el
, o las colecciones persist
ey asededatosdeobjetos,dotadaunaortogonalidadimportante
EnJava,haytiposdeobjetosquenopuedenserpersistentesconlatcnicadescrita
de la serializacin, como por ejemplo, las instancias de j ava.
Ciertamente,lamayorpartedelasap
o una variable semforo, son objetos
bajos como el proyecto Pjama [33] que pretenden alcanzar una ortogonalidad
completa. El estndar ODMG 3.0, tampoco especifica una persistencia completamente
ortogonal,co
alesalosquesehatenidoaccesoyalgunapropuestacomoUFO[24],vemosqueen
Java es necesario heredar o implementar determinados interfaces y patrones de cdigo.
UnodelosproductosdeVersant,Enjin,consigue
unprocesadordecdigoejecutablequeaadela

L
r
r
iralgunalimitacin,eslafrmu
e respecto de los lenguajes de
s de persistencia. Que pretendamos conseguir persistencia ortogonal, no debe
significar adoptar una postura estricta y purista, sino de compromiso de diseo; ninguna
basededatos
resumidascuentas,unserviciodepersistenciadebeserlosuficientementeortogonalcomo
paraconseguir:
1. Nonecesitarmodificarelcdigofuente.
2. Independenciadeuso.
37
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

esprimariasparalaidentificacinylocalizacindeobjetos
acerperdurarsusdatos.Vemosloconotro
o.
usodela
iante aplicaciones como las de banca
ico.
Figura4CasodeusoActualizacinSaldo
debe ser compartida, esta es una obligacin de todo servidor de
tosquetienesureflejoenlosserviciosdepersistenciaqueusandelosserviciosde
datos.[8][2].
sumanunsaldo,perolacuenta
muestra
if ( ( sl d >= sal do) | | ( - sl d > l i mi t eCr edi t o) ) {
3. Transparenciadedatos.
4. Utilizarclav
Estos aspectos conducen a nuevos requisitos, que sern tratados en apartados
posteriores,peroantescontinuemosanalizandonecesidadesmsbsicas.
Concurrencia.Compartirlosdatos
La tcnica serializacin no es suficiente para la mayora de las aplicaciones que
necesitancompartirinformacinademsdeh
escenari
LasituacinestpicaenelmundoinformticodelaBanca,eselcasode
actualizacin del saldo de una cuenta bancaria, med
electrnicaporlaRedyelcomercioelectrn

La informacin
baseda
Un objeto persistente tiene dos aspectos: uno en ejecucin y otro su estado
almacenado. Como consecuencia de esta dualidad, la gestin del acceso concurrente a
objetos debe cubrir ambos aspectos, el objeto como entidad en ejecucin y su estado
almacenado en los servicios de datos. De otro modo llegaremos a situaciones
inconsistentes.Porejemplo,losmovimientosdeunacuenta
otrodistinto.
Javaaportamecanismosparalasincronizacinadistintosniveles:declase,objeto,
mtodo y bloque de sentencias, con clusulas y primitivas que controlan el acceso
concurrente. En otros lenguajes es necesaria la implementacin de las tcnicas de
sincronizacin. El siguiente listado la clusula synchronized indica que el mtodo no ser
ejecutado al mismo tiempo por dos procesos, el acceso al mtodo queda bloqueado
mientrassuejecucinnohasidocompletada.
/ **
* Decr ement a el sal do de cuent a anot ando l os det al l es de l a
oper aci n
* @par amcant i dad i mpor t e del car go > 0
* @par ammot i vo de car go
* @par amf echaVal or del car go
* @r et ur n t r ue si f ue r eal i zado el car go, f al se en ot r o caso
*/
public boolean car go( double cant i dad, St r i ng mot i vo, Dat e f echaVal or )
{
synchr oni zed ( t hi s) {
double sl d = sal do;
sl d - = cant i dad;
Actualizar Saldo
Aplicacion
38
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

t aMovi mi ent o( - cant i dad, mot i vo, f echaVal or ) ;



Listado7Mtodocargoencuenta
losestadosde
los objetos,
uepermitendecidirsobreelefectodelasmodificaciones.Enambosmodelosde
bloqueo
enninguna.Unserviciodepersistencia
losgestoresdedatosconlos
y opcionalmente, el bloqueo
optimist
ueo automtico o explicito, etc. Igualmente su
implant

deshace
instruccionesSQLdelamayoradesistemasgestores,eliniciodeunatransaccincomienza
r et ur n f al se;
}
ano
sal do = sl d;
debe += cant i dad;
r et ur n t r ue;
}
}
Si volvemos sobre el Listado 6, vemos que el estado grabado en el archivo podra
ser modificado desde otro proceso ejecutado desde otra mquina provocando la
inconsistenciaentreelobjetoysuestadoguardado.Unserviciodepersistenciadeobjetosdebe
resolver el acceso concurrente a los objetos persistentes teniendo en cuenta tambin el acceso
concurrenteasuestadoalmacenadodeformaconsistente.
Cadaprocesopuedeaccederalsistemagestordedatos,depositode
para recuperar un mismo estado. Pero qu sucede cuando un objeto es
modificado y su estado es accedido entre tanto por otro proceso? Es necesario emplear
alguna estrategia de bloqueo que garantice la consistencia. Los sistemas gestores de datos
proporcionan la capacidad de compartir y concurrir a los estados guardados. Las
aplicaciones utilizan las interfaces de programacin de los servicios de datos para la
concurrencia, basadas en las estrategias habituales de control de acceso pesimista y
optimista, en el primero los datos son bloqueados para su modificacin hasta finalizar el
proceso que solicita la modificacin, y el control optimista, no se produce el bloqueo ante
nuevasmodificaciones,peropuedeseranalizadalaconsistenciaporlapresenciademarcas
detiempoq
pueden ser efectuados de forma automtica o explicita, esto es, el acceso a los
datos desencadena las acciones de control de concurrencia o bien, la invocacin de
primitivas de bloqueo. La principal diferencia entre una estrategia y otra es la mayor
capacidaddeprocesamientodelcontroldeconcurrenciaoptimista.Pocosgestoresdedatos
ofrecenambasestrategias,inclusoloshayquenoofrec
debeaprovecharlasestrategiasdecontroldeconcurrenciaofrecidaspor
que interacta, y en ausencia de estas, implantar el bloqueo pesimista
a.
Elproblemadelaconcurrenciaesporssolountemamuyampliofueradelalcance
de este texto. En [17] se presenta de forma escueta y sencilla una introduccin a la
problemticadelaconcurrenciaconbasesdedatos.
Transacciones
Elsoportedetransaccionesesunrequisitoesencial.Almenosdebensersoportadaslas
funcionalidades de consolidar y cancelar las modificaciones. Que estrategia de
transaccionesseautilizadaautomticaoexplicita,laeleccindelosdistintasrealizaciones:
bloqueos, anidamiento,..., son caractersticas, que responden a criterios de diseo y
necesidad. Habr sistemas que soporten o necesiten de anidamiento de transacciones,
transacciones de larga duracin, bloq
acindependerdelsoportedadoporsistemagestordedatosfinal.
Conlaserializacinnohaytransacciones,lasmodificacionessonconsolidasenlos
estados almacenados, volviendo a ejecutar la operacin de escribir el objeto. Trabajando
con ODMG 3.0, estn disponibles las operaciones de transaccin de iniciar, consolidar y
r las modificaciones efectuadas. Trabajando con sistemas de bases de datos SQL,
las operaciones de consolidar y deshacer transacciones forman parte del repertorio de
39
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

Al margen del aspecto prctico de la consistencia, desde el punto de vista del


desarrollo de aplicaciones para sistemas de informacin de empresa otro argumento ms
que apoya el requisito de disponer de transacciones, es la conveniencia de que las
aplicacionesofrezcanlacapacidaddeprobarydeshacermodificaciones[25],permitiralos
usuariosjugarconlasaplicacionessinconsecuencias.
Integracindediferentestiposdemecanismosdepersistencia
Un gran nmero de aplicaciones, como la de nuestro ejemplo de Banca, deben
integrar datos procedentes de bases de datos relacionales. En otras, es un requisito que el
soporte persistente de los estados de los objetos, sea una base datos relacional. Por otro
lado, las bases de datos relacionales de distintos fabricantes utilizan mecanismos de
persistencia muy dispares que presentan limitaciones e incompatibilidades. A esto,
debemossumarquelasorganizacionesutilizanotrosserviciosdedatosnorelacionales,con
sus propios mecanismos persistencia. Sin embargo, encontramos aplicaciones que exigen
integrar datos procedentes de distintos servicios de datos: base datos relacionales,
documentales,sistemasdearchivos,Web...LostrabajosrelacionadosdeC.Priese[12],C.
Larman [18], S. Ambler [32], con racin de mecanismos de
persiste
, al final del da sus datos son transferidos y procesados a
con la ejecucin de una orden SQL, as JDBC y SQLJ ofrecen la operacin con
transacciones.En0ilustraelaccesoconcurrenteaobjetosenJavaylasoperacionesbsicas
conJDBC.

sideran necesaria la integ


ncia distintos. El soporte de los mecanismos de persistencia para las principales bases de
datosrelacionalesdelmercadoesesencial.
Tambin sera interesante que sean soportados otros mecanismos de persistencia bajo una
mismainterfazdeprogramacin.Manejarunnicolenguajeanconsistemasdiferentes,una
interfaz comn, permitira unificar bajo un mismo protocolo el acceso a servicios de datos
diferentes.Estosignificamayorproductividad,facilidaddeintegracineinteroperatividad.
Veamoscomoilustracindeestanecesidad,sobreunsimplificadocasodeusodel
cierrediariodeunterminalpuntodeventadesupermercados.Imaginemosunacadenade
supermercadoscondistintoslocalesdispersos,dondelosterminalesTPVoperandeforma
autnoma durante la jornada
otrossistemasinformacincentralesdelacorporacin.
EIS SUPERMERCADO
Consolidar Inventario
Cierre Diario TPV
Cuadre de Caja Contabilizar Venta
Registrar Produccin
Cajero TPV
<<include>>
<<include>>
<<include>>
<<include>>

Figura5CasodeusoCierreTPV
40
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

ujos de caja,...; los registros sobre las operaciones manuales efectuadas por
operado
s fuentes, tendr que acceder a cada uno de los servicios de
datos,d
estasituacin,comocomnalamayorpartedelossistemasdeinformacin
de las numerosos ejemplos donde es necesaria la
comunic los requisitos estructurales, expuestos ms atrs,
esencialquepoderestablecer
de los mecanismos de persistencia soportados por el
stenciaesunmediadorentredossistemasomundos,eldelos
dos,proteger
y el acceso no correctos [19] [8]. Esta responsabilidad es
s,queesunrequisitoprevioparalograrlatransparencia
tegridaddelosobjetos,susdatos,susreferenciasaotrosobjetos,
las transacciones. Cabra pensar que la integridad queda garantizada, por
cada extremo de la comunicacin transacciones; de unlado,
en los
ando son bases de datos; y cubriendo ambos lados, las
tran cc
que sig
sistema niporungestordedatos,sinoquedebensercubiertosconlacolaboracin
del rv
evoluci
corresp gestindedatos
afectan a la integridad, cuestin que debe ser contemplada en el diseo de un servicio de
persistencia.
Podemosimaginarquelosdatoslocalesatransferirseencuentranenarchivosoen
unabasededatoslocalenelTPV,desdeah,losdatoscontablesmigranaunERPbasado
en SAP/R3 o CICS con su propia interfaz de datos: datos sobre los pagos con tarjetas
pendientes de compensar con las entidades financieras, cifras de ventas detallada por
artculo, fl
r: tiempos de apertura del cajn monedero, tasas errores de lectores pticos,
movimientosdelacintatransportadora,periodosdeinactividad,incidencias,...vanaparar
unabasededatosmultidimensionaldecontroldeproduccin;yporltimo,lassalidasde
artculossonconsolidadascontralosinventariosdelosalmacenes,quepodranestarsobre
unabasededatosrelacional.
Distribucinsobredistintosmecanismos.ConexionesMltiples
Utilizardatosdefuentesdistintas,ensuemplazamiento,tipoeinclusofabricante,
significa efectuar conexiones a cada uno de los servicios de datos implicados. Cada
conexindefineuncontextoocanalsobreelqueoperarenlosdatos.Unobjetoquemaneja
datos integrados desde varia
ondepersistenlosdatosseparados,conlosmecanismosdepersistenciapropiosde
cada servicio, esto es, emplear canales adecuados para cada servicio. Posiblemente, el
acceso deba ser simultneo, como en el anterior caso de uso del cierre diario de TPV, que
necesitadeunaconexinalsoportelocalyotraconeldestinodelosdatos.En[14]recoge
expresamente
empresas. Evidentemente, existen
ci ultnea. Tambin a n sim
icanlanecesidaddeconexionesmltiplesysimultaneas.Es justif
mltiples conexiones simultaneas a cada uno
iodepersistencia. servic
Integridad
Unserviciodepersi
gestores de datos y el de los objetos en ejecucin. En su papel mediador debe permitir
atosentrelosobjetosylosserviciosdedatos.Compartirytransferir compartirytransferird
datosimplicalaresponsabilidaddeasegurarlaexactituddelosdatosmaneja
los datos contra modificaciones
preservarlaintegridaddelosdato
s. dedato
Esneces
tegridad de
arioasegurarlain
y la in
parala persistencia junto con
objetos, el lenguaje de programacin con su sistema de tipos y gestin de
excepciones,ydelotro,losgestoresoserviciosdedatosquesustentanlaintegridaddatosy
la integridad referencial cu
sa ionesintegrandolasoperacionesdecadaladocomounasolayatmica.Elcdigo
ue revela varios aspectos de la integridad que no pueden ser cubiertos ni por un
detipos,
se iciodepersistencia.
La agregacin, composicin, la herencia, el polimorfismo y la ligadura tarda, la
n de los esquemas de clases y bases de datos, y la dificultad de la falta de
ondenciaentrelossistemastiposdeloslenguajesylossistemasde
41
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

publi
{
codi gocuent a = unCodi gocuent a;
}
nt e r ecuper aMet odoSer i al i ze( St r i ng i dCl i )


catch ( Except i on
Listado8Aspectosdelaintegridad
saresolverconlaintervencin
persistente, el estado
ctualizado para reflejar el
cer la
entre el estado de un objeto persistente y su representacin en el
e,salvoqueambosutilicenelmismosistemadetipos,parapoder
ademsdelagrabarlosnuevosobjetos.
nciadetipos,larecuperacindelestadodeobjetoexigeque
peradoseanconsistentesconeltipo
estionesparadescubrirnuevosrequerimientos.
in
this
Veamoselsiguientecdigo:
c void set Codi gocuent a( St r i ng unCodi gocuent a)

private Cl i e
throws Except i on
{
try {
Obj ect I nput St r eament r ada = new Obj ect I nput St r eam( new Fi l eI nput St r eam(
i dCl i ) ) ;
Cl i ent e cl i Recuper ado = ( Cl i ent e) ent r ada. r eadObj ect ( ) ;

ent r ada. cl ose( ) ;
return cl i Recuper ado;
}
e) {
La asignacin debe
BD si el cambiar la
objetoesp
.
}
Ellistadoanteriorpresentatrescuestionesesenciale
delserviciodepersistencia:
Sincronizacin, al modificar el estado de un objeto
rsistencia, debera ser a depositado en el medio de pe
cambio.
Correspondencia entre los modelos de clasesdatos, es necesario, cono
correspondencia
t mediopersisten
efectuarlasincronizacin
Consistenciaocongrue
lostiposdedatosdelestadoalmacenadoyrecu
declaradodelobjetopersistente.
Estudiemosestascu
Sincronizac
En el ejemplo del Banco es necesario actualizar los datos almacenados, la
asignacin del atributo codigocuenta o del saldo, implica que su estado persistente
debera ser sincronizado con su estado en ejecucin. Las transacciones, las operaciones
bsicas y las conexiones proporcionan la funcionalidad bsica. El cdigo ms atrs del
mtodo setCodigocuenta, con persistencia completamente transparente, provocara la
actualizacindelestadopersistentedeformaacordealcontroltransaccionalutilizado.Enel
siguientepresentaelextremoopuestodondeelprogramadorasumelaresponsabilidad.
Listado9asignacinpersistenteJDBCdelCdigodeCuenta
private boool ean J DBCset Codi goCuent a( St r i ng unCodi gocuent a)
throws Except i on
{
try {
St r i ng ant CodC = this. codi gocuent a;
. codi gocuent a = unCodi gocuent a;
pst mt = con. pr epar edSt at ement (
" UPDATE Cuent as SET codi gocuent a = ? " +
" WHERE pkcuent a =?" ) ;
pst mt . set St r i ng( 1, this. codi gocuent a) ;
ersistente
CorrespondenciaBDytipos
programa.
Correspondencia
objetoregistro

Seala desde donde


Copiarlosdatos
42
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A


}
s
sobrelaquesonefectuadaslasoperacionesdebasesdedatos,un
empleo
lizado el estado persistente de los objetos, es tan
importa
nizacin o
estadopersistentedelosobjetos,requieresaberenejecucin
cuales
integridad, ofrecer los
mec s
signif trol de concurrencia
(bloqueo por ejemplo un
obje
agregad minado el objeto compuesto deben ser eliminados los agregados; las
relacion
utores como B.
pst mt . set St r i ng( 2, this. pkcuent a) ;
pst mt . execut eUpdat e( ) ; / / t r ansacci on i ni ci ada con ej ecuci n SQL
pst m. cl ose( ) ;
con. commi t ( ) ;
r et ur n t r ue;
}
catch ( Except i on e) {
Syst em. er r . pr i nt l n
( " Excepci on. Rest aur ar val or es " ) ;
Syst em. er r . pr i nt l n( e) ;
this. codi gocuent a = ant CodC;
con. r ol l back( ) ;
r et ur n f al se;
Enestecdigoanterior,elprogramadorsepreocupadesalvaguardarlosdatosen
variables,paraelcasodequeseproduzcaunerror,queobligueadeshacerlamodificacin,
cancelandolatransaccinparaqueloscambiosenlabasededatosnosurtanefecto;sitodo
vabien,unavezcopiadoelnuevovalordesdeelatributocodi gocuent aalcontextodela
sentencia SQL preparada, los cambios son consolidados en la base de datos mediante la
invocacindelaoperacindeconsolidarcommi t ,mediantelaconexinalabasededatos.
Elprogramadordebeconocer,cualeslatabladondepersistelacuenta,lacorrespondencia
objetoregistro; se presupone una variable de clase, o instancia, que repre enta una
conexinabierta(con)
de transacciones pesimista implcito, el orden de las sentencias es crucial,...Pero
queocurrasielatributocodi gocuent afuerapblicoyunmtodoasignarsuvalorsin
mediar operacin contra la base de datos? Provocara la falta de integridad Cul sera el
valorcorrecto,elasignadoenlaaplicacinoelresidenteenlabasededatos?
La necesidad de mantener actua
nte que encontramos numerosos ejemplos donde las clases del dominio son
utilizadassloparaencapsularelcdigodeaccesoyactualizacinalosdatos.
Al sincronizar, estamos moviendo o copiando el contenido de los objetos a su
representacin persistente. Considerando el objetivo de transparencia de datos. Un servicio de
persistenciadeberaactualizarautomticamentelosestadosalmacenadosdelosobjetospersistentes.
Actualizar los estados de los objetos modificados, ocultando las instrucciones dependientes del
mecanismo de persistencia utilizado, el lenguaje empleado con el mecanismo. La sincro
Deshacer
cambios
actualizacinautomtica,del
lasituacindelobjeto,siesnuevo,osifueguardadoymodificado,peronohasido
aunconsolidadoenbasededatos,...conocerelestadoactualdelciclodevidadelosobjetos
persistentes, informacin que es independiente del objeto, pero sin la cual no es posible
automatizarlatarea.Estoafectatambinalasrelacionesentrelosobjetos.
Un servicio de persistencia de objetos, debe manejar las relaciones entre objetos de
agregacin, asociacin, composicin y herencia de manera que se preserve la
ani mosparaconseguirlaintegridaddelasreferenciasentreobjetosdeformaautomtica.Esto
ica que las operaciones borrado, actualizacin, copia o con
s) deben proceder, segn como estn relacionados los objetos,
to compuesto, al ser bloqueado para modificacin, sern bloqueados sus objetos
os, al ser eli
es entre los objetos deben ser consistentes, no puede ser eliminado un objeto
referenciadoporotro.
Siqueremosalcanzarlamayorortogonalidadposible,esnecesariocrearelcierrede
persistenciadecadaobjetopersistenteautomticamente,dichodeotraforma,unserviciode
persistencia debera ofrecer persistencia por alcance. La opinin y trabajos de a
43
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

Meyer,

alcance.
tremo, FastObjects o Versant productos estos
quesop
yelestadorecuperadodesdeelobjetoent r ada?En
el ejem

ndetipossimilaralaspresentesenJavayC++[19].
jecucin.
ofaltadeintegridad.
referencias?Accederymodificarelestadoenbasededatosdeunobjetocontenidocomo
K. Priese, y D. Jordan y M. Atkinson ponen de manifiesto la conveniencia de
implementarlapersistenciaporalcance.
ElestndarODMG3.0exigelatransparenciadedatosylapersistenciaporalcance.
Los estndares SQLJ, JDBC no consideran la transparencia de datos, ni la persistencia por
Encontramos productos OODMBS que no soportan transparencia de datos, y que
requieren la intervencin del programador marcando los objetos, como modificados para
actualizar y debiendo definir el protocolo de transferencia o copia al estado guardado,
como sucede con Objectivity; y en el otro ex
ortantransparenciaypersistenciaporalcancedelestadodirectamente.
Compatibilidaddetipos
MsatrsenelListado8Cmoesgarantizadalacompatibilidaddetiposentreel
objetodelproceso,cl i Recuper ado
plo se presupone que el tipo que ser recuperado es compatible con la conversin
forzada de tipos que aparece. Si algn proceso sustituye el archivo asociado al objeto
ent r adaconuntipoincompatible,adisexactituddelosdatos,noesposiblemantenerla
integridad.Cuandounobjetoesguardadoalrecuperarloesnecesario:
Conocer el tipo de datos del objeto, su clase, y tambin el tipo de dato de cada
objetodelcierredepersistencia,cuandoestosseanextrados.
Los tipos utilizados para reinstanciar alos objetos, debern estar disponibles para
serusados.
La consistencia entre los tipos guardados y actuales de los objetos, y la
disponibilidad de las clases en ejecucin, conlleva no pocos quebraderos de cabeza en
tiempodeejecucin.Tantoscomoparaqueunlenguaje,Eiffel,paradigmadeloslenguajes
orientadosaobjetos,justifiquelainclusindelainstruccindeintentodeasignacin,una
operacindeconversi
Parapreservarlaconsistenciadelostiposentreobjetosydatos,lainformacinsobre
el tipo de cada objeto persistente debera ser persistente tambin junto al estado guardado de cada
objeto,deestaformaesposibleconocerentiempodeejecucineltipoqueserprecisoantes
deusarlo,facilitandoelasegurarlaintegridadenlacorrespondenciaentreclaseydatos.
Las disponibilidad de los tipos esta supeditada a la evolucin del esquema de
clases y al despliegue de las mismas, temas que dependen del proceso de produccin de
programasquedebeincluirlastareasyprocesosnecesariosparagarantizarlapresenciade
lasclasesadecuadasentiempodee
Enningncaso,lassituacionesdeerrorprovocadaspornoestardisponibleuntipo
o por incongruencia deben provocar la finalizacin abrupta de la aplicacin, el
programador debe tener la oportunidad de poder manejar las situaciones de error por
inconsistencia
Las relaciones entre los objetos, de composicin, agregacin y herencia necesitan
mantenerlaintegridaddelasreferencias,lasolucinnoesnica,enunaaproximacinlas
relaciones pueden ser contenidas como parte integrante del estado de un objeto, en otras,
lasrelacionesseconviertenenobjetosindependientesconestadopropio.
Cuando un objeto es contenido dentro de otro (composicin), forma parte del
estado del objeto que lo contiene, y como tal debe ser gestionado por el servicio de
persistencia. El objeto contenido tendr identidad propia en el depsito de los
datos?Podr ser obtenido directamente por una consulta, o habr que navegar por las
44
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

validez de la referencias, un objeto


referenc
s
referenc

excepciones o
encascadadelasdependenciasaunquenoexigelapersistenciapor
alcance.
no ser persistente pero otras
descend
implicaperdidadeinformacinqueesnecesariaparamaterializar
la liga
enelprrafo
anterior
privado,seraunquebrantamientodelaintegridad.Laagregacinoasociacinenlaque
objetosestnrelacionados,perotienenvidasindependientes,eslarelacindondeunobjeto
es referenciado por otro, presenta el problema de la
iado puede haber sido eliminado, provocando un error cuando otro objeto
pretenderecuperarlo.
Qu hacer cuando un objeto es eliminado y existen referencias dirigidas a este?
Sonposiblesdistintastcnicas,porejemplo,levantarunaexcepcinalintentarsuprimirun
objeto referenciado por otros, notificar a los objetos contenedores para actualizar su
ias, eliminar cada referencia pero no el objeto salvo la ltima, detener la
eliminacinosimplementeeliminarelobjetosinms,accesosposterioresprovocaranuna
excepcin de objeto inexistente. Qu hacer cuando al recuperar un objeto por medio de
una referencia, su clase ha cambiado? Cambiar el objeto en ese instante, forzar el tipo al
anteriorolevantarunaexcepcin.
El manejo de las situaciones descritas demuestran una complejidad y esfuerzo de
programacin importantes para conseguir mantener la integridad de las relaciones de
agregacin y composicin entre objetos, que van ms all de conservar el cierre de
persistencia.
Cada estndar considera la integridad referencial de distinta forma. La
serializacinsoloconsideralaposibilidaddeguardarconjuntamenteelobjetoconsucierre
de persistencia, an cuando los objetos del cierre de persistencia deberan poder ser
accedidos de forma independiente unos de otros. ODMG 3.0, maneja expresamente la
herencia y agregacin con los atributos, para la composicin y las relaciones para la
asociacin, las relaciones pueden estar dirigidas y tener inversa, levantar
provocarlaeliminacin
En la persistencia con objetos sobre bases de datos relacionales para dar soporte
adecuado a la integridad, se hace necesaria la incorporacin de disparadores de bases o
restriccionesdeintegridaddedatosquegaranticenlaintegridaddelosobjetoscompuestos
de objetos, JDBC y SQLJ no contempla la integridad de las referencias, debiendo ser el
programadorelqueplasmelaintegridadreferencial.
La herencia plantea dificultades para la persistencia relativas a la ocultacin de la
informacin y al polimorfismo. Una clase podra
ientes directos o indirectos s. Qu sucede con las caractersticas privadas
heredadas?Tambin,puedeocurrirqueunaclaseseapersistentetengadescendientesque
hacenprivadascaractersticasheredadas,caractersticasheredadasquecambiandetipo...
Elpolimorfismo
dura tarda. Para posibilitar el polimorfismo de instancias persistentes en
transparencia de datos, el conocimiento sobre el tipo debe ser tambin persistente, para
poderapartirdeeste,decidircualeseladecuadoausaralrevivirunainstancia,cuandoel
contextodeejecucinnopermiteinferireltipooclasecorrecto.
Si el lenguaje de programacin permite herencia, polimorfismo y ligadura dinmica,
entonces el servicio de persistencia debera facilitar la operacin sobre objetos persistentes con
polimorfismo.
ElpatrndediseoBridge[13]esunejemplodelanecesidaddescrita
,aplicadoen[26],enelquelaimplementacindeundiccionarioescambiadasegn
el volumen de informacin, esto significara utilizar estados persistentes que sern tipos
distintos en diferentes momentos. Otro, son las colecciones persistentes que contienen
45
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

addeaccesoalasinstancias
e persistencia en su papel de mediador debe trasladar hasta los
clientes
privilegios,resulta
as, un
conocer s
mantenimie que los cambios en los permisos de acceso no afectan al cdigo. Las
referenc
deprotecci eprivilegios[13][27].
s bre
lasvista
con todo s da
objetos,sin hayunestndarqueestablezcacualdebe
ser el
polticas de gina de almacenamiento, coleccin o
contenedor,
para ca
funcin de la identidad del usuario y el grupo; Gemstone permite definir polticas de
acceso
considerar
soluciones de credencial y privilegio sobre instancias,
clases,
rability Version 2 son dos marcos de referencia sobre los que
siendo en esta ltima
tas.
uesientanlasbasespara
justificadoporsusventajas,tambin
isitos necesarios para conseguir esta.
para centrar la atencin sobre la
arenciadedatos:
recuperacindelestadoalmacenadodelosobjetos,incluidaslasrelacionesconotros
objetos que pertenecen a distintas clases dentro una jerarqua de herencia. Algunos de los
productosrevisados,nosoportanpolimorfismo,comoporejemploCastor.
Integridaddeacceso
Laintegridadrequiereproteccinademsdeexactitud,asegurarqueelaccesoalos
datos, sea realizado acorde a los privilegios establecidos. Los mecanismos de persistencia
ofrecen distintas capacidades de control de acceso a los datos, para establecer polticas de
privilegiossobrelalecturaymodificacindeestos,enbaseasistemasdecredencialestales
comoloscertificadosdigitales,nombresdeusuarioconcontraseas,kerberosuotros.Los
ejemplos vistos del Banco y el supermercado describen dos entornos que requieren
asegurarlaspolticasdeprivilegiosestablecidas.
Unserviciodepersistenciadeberaasegurarlasegurid
que maneja. El servicio d
, usuarios o procesos, las polticas establecidas con el concurso de los mecanismos
depersistenciausados.
Un punto de vista importante, es conseguir tambin la ortogonalidad entre
persistencia y seguridad, consiguiendo que los programas sean independientes de la
seguridad,queelcdigofuentenoseaalteradoconcomprobacionesde
cdigo ms seguro, porque el programador no tiene capacidad para alterar o
la polticas de privilegios, y adems, la independencia facilita un mejor
nto, por
ias inteligentes o proxys son un posible instrumento para plasmar esta necesidad
ndelacceso,sinproducirunarevelacind
Lo sistemasdebasesdedatosrelacionalesarticulanlosprivilegiosdeaccesoso
s,lassentenciasgrantylasfigurasdeusuario,grupoorolconcontraseas,creando
e to un esquema de autorizacin y privilegios. En las bases de datos basa s en
laposibilidaddevistasdeobjetos,no
mecanismo de autorizacin, cada fabricante aporta su punto vista, ofreciendo
acceso en uno o ms niveles, desde la p
hasta la clase, el objeto y sus atributos. Por ejemplo, Versant permite definir
da clase de una base de datos, cual es el acceso a las instancias contenidas en
para los objetos almacenados juntos en contenedores, denominados cluster, sin
la clase de los objetos; Objectivity brinda una serie de libreras para construir
ad hoc que manejan el concepto
contenedores y bases de datos. En Java, la API Security o el estndar CORBA
Common Secure Interope
construir las polticas de privilegios de un servicio de persistencia,
finirpolticasdeaccesoanivelinstanciasconcre posiblede
Transparenciadedatos
Hastaelmomentohansidoexpuestosdi
tarelobjetivoinicialdetransparenciadedatos
stintosaspectosq
concre
han sido presentados buena parte de los requ
Requisitos expuestos, que son relacionados aqu
aratenertransp transparenciadedatos.Esnecesariop
1. La
objetos.
46
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

truccin o materializacin de los objetos persistentes referenciados en los


3. ridaddeidentidadydelasreferencias.
4. tro de una transaccin del estado persistente de los objetos
conelestadoalmacenado.
los cambios producidos en el estado de los objetos y su
istencia.
la informacin suficiente de las modificaciones producidas en el transcurso
deunatransaccin,p nsaccinesrechazada.
so de contexto del banco, como funciona
latr





cl i . di r ecci on. por t al = " s/ n" ;

















Except i on e) {




un obje ferencia del tipo
Cl i t siesmodificadousandolamagia
ded o

e de datos sin que el
datos recuperados el objeto de tipo adecuado, en esta
ocasindeltipoDi r ecci n.
2. La cons
atributosdelosobjetospersistentesaccedidos.
Elcumplimientodelasrestriccionesdeinteg
La sincronizacin den
persistentes
5. co de Seguimiento automti
consolidacinenlosmediosdepers
6. Mantener
arapoderdescartarestoscambios,silatra
7. Convertir de modo automtico objetos transitorios a persistentes si son referenciados
por algn atributo persistente de un objeto cuando la transaccin es consolidada, esto
es,plasmarpersistenciaporalcance
Veamos el siguiente cdigo dentro del ca
ansparenciadedatos.
private void comof unci onaTr anspar enci a( )
{
Cl i ent e cl i = Ser vPer si st enci a. buscar Cl i ent e( " . . . . " ) ;
cl i . di r ecci on. cal l e = " Avda. Medi t er r aneo" ;
Cuent a[ ] ncu = new Cuent a[ 27] ;
ncu[ 27] . movi mi ent oAper t ur a( 5000) ;
cl i . set Car t er a( ncu) ;
}
private void i nvocar Oper aci onComoFT( )
{
try {
Tr ansact i on t = new Tr ansact i on( ) ;
t . begi n( ) ;
comof unci onaTr ansapar enci a( ) ;
t . commi t ( ) ;
}
catch (
r ol l back( ) ;
e. pr i nt St ackTr ace( ) ;

}
Listado10Ejemplodetransparenciadedatos
El primer mtodo comof unci onaTr anspar enci a comienza con la localizacin de
to cliente, que estar disponible mediante la variable de re
en e,cl i ,objetopersistente,que delatransparencia
at s,entoncesimplicaloshechossiguientes:
Lamodificacindelacalleyelportaldelobjetodi r ecci ncontenidoenelobjeto
referenciado por la variable cl i , es extrado desde la bas
programador indique expresamente su recuperacin. La navegacin implica,
localizar los datos correspondientes, a los estados almacenados de las referencias
accedidas, construir con los
47
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

s llevadas a cabo son automticamente reflejadas en los estados


saccin.
el mtodo, debe tener en marcha una transaccin
suvez
apuntaalosapuntesdemi cuent a,
objetos movimiento han sido previamente
o
MovsCuent a, que forma parte de la interfaz visual. Navegar entre los
peracin de los objetos, si todava no estaban en el espacio de
memoriadelaaplicacin.Lao escostosa,porloque
mejorar na i lo
demos consultar en [13]. Las
referencias inteligentes son utilizadas por los principales sistemas gestores de bases de
Las modificacione
almacenadosenlabasededatos.Lasasignacionesdelacalleyportalsontrasladas
en su momento, hasta el estado almacenado del objeto di r ecci n apuntado
desde la referencia cl i , otra vez ms, sin que el programador intervenga
explcitamente.
Los objetos transitorios referenciados por un objeto persistente se convierten en
persistentes, el vector ncu pasa a ser persistente tras la invocacin del mtodo
set Car t er a.Elprogramadornocodificalatransicindetemporalapersistente.
Lasrelacionesentrelosobjetossonmantenidasdeformaconsistente,enellistado
anteriorelobjetodi r ecci nyelnuevovectordelascuentasasociadasalcliente,
son reflejadas sobre la base de datos vinculados al objeto cl i ent e que los
contiene.
Todaslasmodificacionesylosnuevosobjetoshechospersistentessongrabadosen
la base de datos. El programador no incluye cdigo expreso de grabacin en base
dedatos.
Comoduranteelprocesoesposiblequesurjaunproblemaentreelprogramayla
base de datos, los datos necesarios para efectuar la recuperacin ante una
excepcinsonconservados,sinlaintervencindelprogramador.
El mtodo de este ejemplo, comof unci onaTr anspar enci a, opera tanto con
instanciasquesonpersistentes,comocontransitorias,nohaydiferencias,salvoque
sesolicitalalocalizacindeunainstanciaaunobjetoquerepresentaelserviciode
persistenciaydebeserinvocadodentrodeunatran
El contexto donde es invocado
quegaranticelaintegridad.
Referenciasinteligentes
Ellistadosiguientemanejaunobjetopersistentemi cuent a,quecontienea
aotrosdeltipoMovi mi ent o,cuandolareferenciam,
pueden suceder dos cosas, o todos los
recuperados, desde la base de datos por el programador, o bien son recuperados sol
cuandoesestrictamentenecesarioporelsistema,cuandopasanasercopiadoscomotexto
en el objeto l i st
objetos provocar la recu
peracinderecorridoconrecuperacin
la vegac n ser una meta a grar. En [7] [20], se presentan sucintamente
algunas de las ideas empleadas para mejorar la navegacin, como son la conversin
dinmicadeidentificadoresdeobjetosadireccionesdememoriayviceversa,swizzlingyla
indizacin por identificador de objetos y direcciones memoria. En [12], es descrito el
concepto de referencias inteligentes que quieren mejorar el rendimiento de acceso a los
objetospersistentes.Lasreferenciasinteligentesamortiguanlasobrecargaproducidaporla
recuperacin de objetos durante la navegacin. Tambin pueden ser utilizadas para
asegurar la integridad de las referencias y el control del acceso concurrente, de modo
transparente para el programador al mediar entre acceso y la recuperacin desde los
sistemas de datos, posibilitan la incorporacin del cdigo necesario para concretar estas
funcionalidades.Lasreferenciasinteligentesopunterosinteligentes,sonunadelascuatro
aplicaciones del patrn de diseo llamado Proxy que po
48
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

scomoPjama0paraJavasobregestordeobjetosy
0,0y[i2

etos,
posponiendolo
o las referencias antes de ser usadas, y al gestionar el bloqueo concurrente se
ninconsistente.
1.2.1.3.
partir de un identificador de objetos, un nombre asociado previamente, o con
una b
ar en ODMG 3.0, OQL
[7].
definici
Estereq
como consultas para expresar que objetos queremos
alca
consulta
ofrecerla
orientac etos, posibilita ofrecer una solucin que evite las diferencias entre los
meca is
nivel
en [7] y
objetos.
datosobjetualesyendiseosreconocido
6]paraobjetossoportadosporbasesrelacionales.
private void most r ar Cuent a( ) {
Movi mi ent o [ ] m;
Deci mal For mat d = new Deci mal For mat ( ) ;
St r i ng sl d ;
l bl CodCuent a. set Text ( mi cuent a. get Codi gocuent a( ) ) ;
l abel Cr edi t o. set Text ( d. f or mat ( mi cuent a. get Li mi t eCr edi t o( ) ) ) ;
sl d = d. f or mat ( mi cuent a. get Sal do( ) ) ;
l bl Sal do. set Text ( sl d) ;
m= mi cuent a. get Apunt es( ) ;
for( int i = l i st MovsCuent a. get I t emCount ( ) ; i < m. l engt h ; i ++) {
l i st MovsCuent a. add( ( ( Movi mi ent o) m[ i ] ) . t oSt r i ng( ) + " Sal do: " +
sl d, i ) ;
}
}/ / most r ar Cuent a
Listado11Mtodocontransparenciadedatos
Un servicio de persistencia debera emplear referencias inteligentes para mejorar el
rendimiento, reduciendo el coste del esfuerzo de recuperacin de los obj
hastaelinstanteantesdesernecesariosuusoyparafacilitarelcontroldela
integridad referencial y acceso concurrente, sin intervencin del programador. La
operacinderecuperacindeobjetos,ademsdelaccesoalosmecanismosdepersistencia,
requiere de la asignacin de memoria y su inicializacin, la creacin de una instancia, su
inicializacin, la asignacin de los valores recuperados, etc., esto llega a ser un problema
cuando trabajamos con objetos verdaderamente grandes como colecciones persistentes
enormes, y por otra parte, la necesidad de asegurar la integridad puede ser acometida
validand
evitansituacionesdebloqueoyactualizaci
Consultasexprofeso
La transparencia de datos permite navegar desde una instancia persistente por la
telaraa de referencias de su cierre de persistencia, pero al menos una referencia, la del
objetorazdeesecierredebeserobtenidaexpresamente.Estaprimerareferenciapuedeser
obtenida a
squeda condicional sobre las instancias persistentes, mediante consultas ad hoc.
Consultasynavegacinentreobjetossecomplementan,lasconsultaspermitenlocalizarlos
objetosdesdelosquenavegarhastaaaquellosquedeseamanipular.
Los sistemas gestores relacionales proporcionan SQL para realizar consultas ad
hoc, en el lado de los gestores objetuales tambin tienen su estnd
Los productos consultados ofrecen interfaces de programacin que permiten la
nyejecucindeconsultasadhocObjectivity,Versant,FastObjectyApacheOJB.
uisitoestapresenteenelmanifiestosobrebasesdedatosdeobjetos,queestablece
ltimo requisito, la facilidad de
nzar, con un alto nivel de abstraccin, eficiencia e independencia. Una facilidad de
sadhocayudaasimplificarlaprogramacinyamejorarlaextensibilidad[2].
Siunserviciodepersistenciapretendeserelpuntodeaccesoalosserviciosdedatos,deber
posibilidaddeefectuarconsultasadhocatravssuya.Unavezms,laaplicacindela
in a obj
n mos soportados bajo una misma interfaz, en esta ocasin, de consultas con alto
deabstraccin,eficienciaeindependenciadelosmecanismos.Eltemaesmuyamplio,
[4] podemos hallar una breve introduccin a la problemtica de las consultas con

49
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

Funcio
eficienci deformaefectiva
ustracin de un escenario sobre el ejemplo del banco es el
pretexto
c t
los datos precisos para llevar a cabo el
arente para el programador? Hay ciertas
s aplicaciones esperan acceder a objetos
dosporelserviciodepersistencia,queobtienelosdatosdesdelosmecanismos
de pers
a total en el acceso a los objetos [41] [32]. Con caches y el
agrupam
nalidadesrelativasalrendimiento
Son necesarias otras funcionalidades para lograr la persistencia con la eficacia y
aadecuadas,lasoperacionesdepersistenciadebenserejecutadas
y econmica en recursos. La il
para presentar nuevos requisitos relativos al rendimiento, el escenario de la
Figura4.
Lasaplicacionesaccedenalascuentasdelbancoparallevaracabocargosyabonos,
esto puede implicar extraer cada objeto uen a al que se aplica la operacin de cargo o
abono; cada una de estas operaciones, aade una nueva instancia movi mi ent o a la
coleccindenumerososmovimientosqueunacuentatiene,ensuma,unasituacindonde
sepodranplantearalgunaspreguntasrelativasalrendimiento:
Procesarunobjetocadavezovariossimultneamente?Accederobjetoporobjeto
en secuencia, es ms lento que agrupar las operaciones, de forma que se solapen
aquellas actividades que pueden ser simultneas, o que agrupadas reducen la
latenciaenelaccesoalosdatos.
Extraertodoslosmovimientosdecadaobjetocuentaosolounareferenciaalque
esnecesario?Conciertasoperacionesnoesprecisoconseguirelobjetoalcompleto,
simplementedisponerdeunaalgunarepresentacinsuficiente,paraeltratamiento
a efectuar, extraer y manejar exactamente,
proceso.
Porqunomodificarelestadodelosobjetosdirectamenteenlabasededatossin
reconstruir los objetos, de forma transp
ocasiones, donde cada elemento de una coleccin es actualizado, sin provocar
efectos laterales en otros objetos; con la indicacin expresa del programador, la
magiadelapersistenciapodraresolver,aplicardirectamentelastransformaciones
enlosestadosalmacenadosenlugarsobrecadaobjetoafectado.
Gestinautomticadecach
La utilizacin de tcnicas de lectura anticipada y escrituras diferidas, sistemas de
cach, permite mejorar el rendimiento del flujo de almacenamiento y recuperacin de
objetos desde los gestores de datos. El empleo inteligente de caches reduce los costes de
acceso los servicios de datos [41]. La
proporciona
istencia para ser convertidos en objetos y viceversa, el servicio recibe objetos que
deben ser convertidos, en datos apropiados a los mecanismos de persistencia. Todo ello,
requiere un espacio de memoria y un tiempo de cmputo, que afecta al tiempo de
respuesta de las operaciones de las aplicaciones, mientras que los usuarios esperan
respuestas inmediatas. El rendimiento del acceso y actualizacin de objetos puede
aumentar,silasoperacionesparamaterializarydesmaterializarinstanciassonsustentadas
con una gestin de caches adecuada, que pueden facilitar la agrupacin de mltiples
operacionesy objetos por acceso, parareduciras nmero de peticiones a losmecanismos
de persistencia y la latenci
iento de operaciones por acceso, son dos de los mecanismos para acometer,
aumentosimportantes,escaladas,enlacarga[6].
Unserviciodepersistenciadeberaimplantarunagestindecachdeobjetosparamejorar
elrendimientodeaccesoalosobjetospersistentes.Deberaserposibleextraeryalmacenargruposde
variosobjetosencadaaccesoalosserviciosdedatos.
50
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

o Oracle,
este particular, con el anuncio de
e el rendimiento escalable. El tema es
comple
uno, para incluir un nuevo movimiento en la coleccin
almacen
puesayudanalrecorridodecoleccionesmanejandolos
s. Un
s o
ciones de los objetos que representan, son
llamado b ntantes(proxies).Lasreferenciasinteligentes,lositeradoresylos
cachesc p tafuncionalidad,necesariaparaacometerlarecuperacinselectiva
delestadod syamencionados,S.W.Ambler,W.Kellerhan
incluido resentantes en sus propuestas de servicios de
persistencia soportar objetos representantes para mejorar el
rendimientodelaccesotransparente.
Eltemanoestrivial.Lamayoradelosmecanismosdepersistenciaempleanalgn
tipodecachomemoriaintermediaparagestionarelaccesoyactualizacindelosdatos.A
la dificultad propia de la gestin de cach, se aade la problemtica de la integracin,
coherencia y validacin de caches diferentes, los de cada mecanismo de persistencia y los
de un servicio de persistencia. En los ltimos aos, varios fabricantes com
Gemstone y Poet, viene haciendo especial nfasis sobre
nuevos avances patentados de gran incidencia sobr
joyestfueradelmbitodeestaslneas.Unasreferenciasquepuedenservircomo
primeraaproximacin,son[6][19][41][32].
Iteradores
A lo largo del texto han sido mencionados distintos ejemplos, en los que era
necesarioprocesarlosobjetosdeunacoleccin,unasecuenciadeobjetos.Laiteracinsobre
los elementos de una coleccin debe ser realizada con eficacia y eficiencia, esto es una
necesidad asumida en parte por los mecanismos de persistencia, que suelen ofrecer los
medios para iterar de un modo controlado sobre secuencias de elementos. Las bases de
datos relacionales ofrecen la facilidad de iterar sobre las filas resultantes de una consulta,
mediante los cursores, los OODBMS tambin ofrecen objetos iteradores sobre colecciones
deobjetospersistentes.
EnlaFigura1lasrelacionesson[0..n],estasrelacionessernplasmadasmediante
colecciones de objetos arbitrariamente grandes; en la situacin anterior de aadir un
movimiento a la Cuent a, el empleo de un iterador podra evitar extraer todos los
movimientos de la cuenta afectada, por ejemplo calculando la referencia adecuada sin
necesidad de recuperar objeto alg
adacorrespondiente.LostrabajosdeW.Keller[42]M.Atkison[33]yS.W.Ambler
[32],porcitarsolotres,incluyenexpresamentelaconvenienciadelsoportedecursorespara
elaccesoalosdatos.Asumiendoqueloscursoresson,endefinitiva,unaformadeiterador,
lanecesidaddesusoporteesclara,
recursos necesarios, para crear la ilusin de navegacin por los objetos contenido
serviciodepersistenciadeberaofreceriteradoressobrecoleccionesdeobjetospersistentes.
ProyeccionesuObjetosRepresentantes(proxies)
Las cuestiones al principio de este apartado y lo escrito en prrafos anteriores,
permiten cuestionar si realmente es necesario extraer un objeto al completo, para operar
con l, no bastara con extraer aquello que va a ser afectado? Imaginemos un estudio de
ingeniera de obras pblicas faranicas, donde su sistema de informacin maneja objetos
talescomounobjetoproyecto,agregadodemuchosmsobjetosymuygrandes,comop.Ej.
planos,imaginemo queunobjetoproyectoesaccedid paramodificarlaasignacindeun
captulo de su presupuesto. Alguien puede creer que sera eficiente extraer todo el objeto
paramodificarlospocoscaracteresqueocupanunimporte?Lasolucinesutilizarobjetos
especiales que actan en representacin de los objetos a tratar, distintos a los originales,
ideados para contener justo lo necesario para posibilitar la ilusin de interaccin con los
objetos persistentes, estos objetos son proyec
so jetosreprese
om lementanes
elosobjetos.Variosdelosautore
la funcionalidad de objetos rep
. Un servicio de persistencia debera
51
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

3]sedescribeelpatrnProxy(representante)queesfundamentobsicopara
compre
e persistencia y sin trastocar demasiado la ortogonalidad. Son
conside
in de expresiones calculadas en la definicin de los ndices, decidir entre usar la
estndar para la consultas con proyecciones, sobre
corresp
QLcon
lapretensin se
sgestoresrelacionales,ofrecenmodosparalaextraccinyactualizacinde
datos especialmente concebidos para mejorar el rendimiento. Consultas paraleladas y de
En[1
nder y acometer la realizacin de esta funcionalidad. En [19] tambin ilustra la
conveniencia de objetos y clases de utilidad para la aplicacin que actan como
representantesdeformaexpresa.
Aprovecharlascaractersticasavanzadasderendimientodelosserviciosdedatos
La ltima cuestin planteada al comienzo del apartado, considera que ciertas
operaciones de actualizacin podran ser ms rpidas de efectuar directamente sobre los
datos sin necesidad de recuperar objetos, siempre que sea posible asegurar que otros
objetos en ejecucin no se ven afectados por estos cambios. Esta forma de actuar requiere
de aprovechar las capacidades particulares de los servicios de persistencia, lo que puede
parecer un contrasentido respecto del objetivo de ortogonalidad enunciado ms atrs,
plantear la utilizacin del lenguaje del mecanismo de persistencia particular; pero,
precisamente las tcnicas orientadas a objetos, posibilitan sacar partido de las
caractersticas avanzadas de los mecanismos de persistencia, sin revelar los detalles a los
clientes del servicio d
rados tres aspectos principalesa las bases de datos relacionales cuya aportacin al
aumento de rendimiento no deberan ser ignorados por una mal entendida pureza de la
orientacinaobjetosdelasoluciones[41][32]:
SQLnativo
Modosdeoperacinavanzados
Procedimientosalmacenados
SQLnativo
El lenguaje de consulta de bases de datos estructurado, SQL, que ofrecen gestores
relacionales, presenta variaciones que afectan tambin a como son efectuadas las
sentencias. A ttulo de ejemplo, Oracle aade la clusula connect by, a la sentencia
sel ect parapresentarresultadossegnunordenjerrquico;ensusversiones7,elorden
de inclusin en la clusula f r omde las relaciones, afectaba expresamente al rendimiento,
con la eleccin de la relacin directriz del acceso a los datos. SQLBase 5.x permita la
utilizac
semntica de Oracle, o la
ondenciasdeclavesajenascompuestaconnulos(outerjoins).As,unlargoetctera
con SqlServer, Potgress, RDB, DB2, Sysbase... SQL, aunque es un lenguaje declarativo,
requiere de un conocimiento profundo del esquema manipulado y de las operaciones a
realizar, ya que una misma operacin expresada con sentencias distintas, e idntico
resultado, podran tener un coste de cmputo y tiempo muy dispares incluso en varios
rdenesdemagnitud.
Las directivas, instrucciones dirigidas al intrprete o compilador de SQL, son otra
de las capacidades para mejorar el rendimiento propias del SQL de cada producto. Estas
permiten alterar el plan de ejecucin que elabora el compilador, por ejemplo, alterar el
nmerodehebrasalparalelarunaconsulta,elndicequeguelaseleccin,...Deunaforma
uotra,estasextensionespermitenmodificarelplandeejecucindelassentenciasS
demejorarelrendimientoylaproductividad. Hayproductosentre losque
hatenidoaccesoqueexpresamentepermitenSQLnativocomoHibernate.
Modosdeoperacin
Alguno
52
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

solo lect
s,ocomointerfacesdeprogramacinespeciales,ejemplosdeambas
ncia al t er sessi on y la interfaz de SQLBase de Centura
ado en la base de
datosmism olibrerasdeprocedimientosyfunciones,
y como acceso a datos (disparadores). El cdigo
almacen jas y empotrar operaciones del
negocio, ntepodranserexpresadascomosimples
sentenciasSQL,porsufaltadecompletitudcomputacional.Enmuchasocasiones,elcdigo
almacen o de
objetos entre clientes y servidores, como
servicios de se de objetos, por ejemplo Gemstone/S, que
present lkyJavajuntoalservidordeobjetos.
a conveniente poder disponer de las capacidades para mejorar el
rendimie , os. Idealmente deberan ser
ntosdeserviciosopropiedadesrelativasa

relaciona
tencia:
cambiodelesquema.
s e
coninstanciaspersistentesguardadas,esmodificada
tersticas?Cmoasimilarloscambiosenelesquemadelosserviciosdedatos?
ura, actualizaciones sin posibilidad de recuperacin, y procesamiento asncrono y
diferido de las operaciones. Estas capacidades son presentadas, a veces, como nuevas
sentenciasSQLnativa
opciones, Oracle con su sente
Corp.
Procedimientosalmacenados
Los principales sistemas gestores de bases de datos relacionales actuales permiten
la ejecucin de cdigo en el lado del propio servidor, este es almacen
a,queloofreceenformadepaquetes
cdigo asociado a ciertas operaciones de
ado, permite definir reglas de integridad comple
enlapropiabasededatos,quedifcilme
ad constituye la nica solucin efectiva. Tambin los sistemas de las bases
brindan esta posibilidad de partir el cdigo
aplicaciones integrados en la ba
asendosentornosdeejecucinSmallta
En definitiva, ser
nto ofrecidas por los mecanismos de persistencia utilizad
presentadasporelserviciodepersistenciaamododeconju
losmecanismos.
Un servicio de persistencia con soporte relacional debera permitir la utilizacin de cdigo
SQL nativo, modos de operacin nativos y procedimientos almacenados de los servicios de datos
lessoportados.
Funcionalidadesavanzadas
Una vez cubiertos los aspectos bsicos de la problemtica de la persistencia,
veamosotrosaspectosquepodransertenidosencuentaporlosserviciosdepersistencia,
porquelapuestaenprcticadeunserviciodepersistenciadesvelanuevasreasdeinters
queseesperaseanresueltasconlaayudadelserviciodepersis
Lagestindel
Serviciodepersistenciacomofuentededatos.
Mltipletransaccionescoordinadas.
Procesamientode ucesosyeventosrelativosaerrores,transpar ncia.
Medidasdeproductividadyrendimiento.
Laeficienciadealmacenamiento.
Trazabilidad.
Neutralidadrespectoallenguajedeprogramacin.
Gestindelcambiodelesquemadepersistencia
Quocurrecuandounaclase
ensuscarac
Estaspreguntasdestacanlaproblemticadelcambioenelesquemadepersistencia.
Acometer la gestin de los cambios en el esquema necesita disponer de la capacidad de
manejar meta informacin, datos sobre los esquemas de las clases y de los datos; meta
53
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

micos,cambiancon
eltiemp
adaptacin, ante cambios en los
modelo e cambios en el modelo de
objetos os lenguajes de
program cin
Version
situaciones donde los objetos, instancias
individ
pone un esfuerzo de programacin que puede ser
n modelo general de correspondencia como [6] o
[24]. Es
os con SQL. Un servicio de
persisten
icio de persistencia podra ofrecer datos en forma de registros, adecuados
de usuario final que existen o para la
matos (html, csv o XML). S.W. Ambler propone
expresa
informacin que es utilizada en automatizar la gestin de las modificaciones, en ambos
lados de la correspondencia clasedatos. El tema es muy amplio para ser descrito en este
trabajo.Unadescripcindelataxonomadelcambioseencuentraen[4].Veamossolotres
cuestionesrelativasalaevolucineintegracindeesquemas.
Evolucindelesquema
Ennumerosasocasioneslosesquemasdepersistenciasondin
o,perolaevolucindelesquemadeclasesydepersistencia,nosiemprepuedenser
simultaneas, pensemos en una base de datos con una coleccin de instancias que ocupa
varios terabytes de datos, plantear un cambio instantneo en la estructura de
almacenamiento de tantos datos no es factible, tendra ms sentido evolucionar, segnun
modelo de actualizacin bajo demanda. Esto implica la necesidad de poder manejar el
esquema de persistencia en ejecucin. Lo que conduce a que una facilidad opcional para un
serviciodepersistencia,seralaadministracindelesquemadepersistenciaentiempodeejecucin.
Esto permitira cierta flexibilidad y capacidad de
s d datos y del esquema de persistencia, e incluso, ante
en tiempo de ejecucin, posibilidad que esta disponible en ciert
a comoSmalltalkyJava.
es
La necesidad de evolucin comprende
uales, pueden cambiar no solo en el contenido de sus atributos, sino en sus
caractersticas, en su funcionamiento, manteniendo constante su identidad; estos cambios
creandistintasvariantesdeunmismoobjeto,versiones,querepresentanlaevolucindeun
objeto. Pensemos por ejemplo en un seguimiento de cambios o trazas de documentos o
programas,dondeesnecesariomantenercadaversin,querepresentaunmismoobjetoen
instantesdiferentes[4].
Automatizacindelacorrespondenciaygeneracindeesquemas.
La falta de correspondencia su
evitada mediante la aceptacin de alg
to permitira la automatizacin del proceso de correspondencia manejando meta
informacinsobreobjetosylostiposdelosmecanismosdepersistencia.Laautomatizacin
debera ser efectiva en losdos sentidos, desde los objetos a los datos y al contrario, desde
losdatosalosobjetos.Enparticular,lasbasesdedatosrelacionalesposibilitanestaforma
de actuar, porque facilitan la operacin sobre sus catlog
ciapodrafacilitarconlametainformacinadecuada:
Lageneracindeesquemasdedatosapartirdelasclases.
Lageneracinautomticadeclasesapartirdelosesquemasdedatos.
Lagestindelcambioacadaladodelacorrespondenciaclasedatos.
Serviciodepersistenciacomofuentededatos
Un serv
para muchas de las herramientas de consulta
generacin de archivos en diferentes for
mente esta opcin [32]. Los servicios de persistencia podran presentar los datos que
obtienenenformaderegistros.Conellosepotenciaelpapeldemediadordedatosdelosserviciosde
persistenciaampliandosusposibilidadescomopasarelatransparente.Losserviciosdepersistenciaa
54
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

Mltip
poder ser tratados adecuadamente.
Errores valores
desuprocesamiento.Lasdiferenciasentrelosdistintosmecanismospueden
ser alla
ciones. Las excepciones recogern las situaciones de error,
anormales no progra
suvezseconviertenasenfuentesdedatosparaotrosservicios,comolasherramientasdegeneracin
yejecucinconsultaseinformes.
letransaccionescoordinadas.
Elplanteamientoestablecidoenseccionesanteriores,consideraquelosserviciosde
persistencia deben integrar distintos mecanismos de persistencia; trabajar con varios
mecanismos de persistencia de forma simultnea, esto necesita de coordinar las
transacciones entre los diferentes mecanismos, cuando los objetos persistentes implicados
enunamismaoperacinresidensobremecanismosdispares.
El modelo de transacciones de un servicio de persistencia podra asumir la
integracinycoordinacindelosmodelosdetransaccionesaportadosporlosmecanismos
de persistencia que soporta, evitando delegar esta actividad en el programador. As
tambin,lastransaccionesdesplegadasporlosserviciosdepersistenciadeberanpoderser
coordinadasaunnivelsuperior,integrandolastransaccionesenservidoresdeaplicaciones
y monitores transaccionales, permitiendo de esta forma la integracin de los servicios de
persistenciaconotrostiposdeservicios,presentadosenestosservidoresdeaplicacionesy
transacciones.
Procesamientodeeventosenejecucin
Durante la ejecucin de los objetos persistentes surgen seales desde el entorno y
desde las distintas piezas que sustentan el servicio de persistencia, seales que pueden
cambiarelflujohabitualdelaejecucin.Estassealescorrespondenasituacionesdeerror
debidas a acontecimientos inesperados o fallos, y a sucesos o eventos consecuencia de la
actividaddepersistencia.Enamboscasos,loseventospuedenrequerirlaintervencindel
programadorconlaincorporacindecdigoadecuado.
Los errores que surgen en la operacin con los mecanismos de persistencia,
deberan ser transmitidos hasta los programas para
como la duplicidad en claves nicas, la asignacin de nulos o la violacin
de reglas de integridad complejas ejecutadas por los servicios de datos, deberan ser
manejados por las aplicaciones, en la misma forma que cualquier otro error en tiempo de
ejecucin. Desgraciadamente las codificaciones hechas, para unas mismas situaciones de
error, por productos distintos son tambin distintas, con el consiguiente impacto en la
programacin
nadas con un diseo que envuelva, unifique y homogenice el tratamiento de los
errores desplegados desde los mecanismos de persistencia. Todo servicio de persistencia
debera definir una gestin de errores que unifique, homogenice los errores presentados por los
mecanismossoportados.Tpicamentelagestindeerroresestarsustentadaporlautilizacin
devariablesdeestadoyexcepciones.Lasvariablesuobjetosdeestadorecogenelresultado
de xito o fracaso de las opera
einesperadasque no pueden ser tratadas en elflujo rmal del ma, por
ejemplo,lainterrupcindelacomunicacin.
Cuandolatransparencianoescompletamenteortogonal,afectaalmodoenelque
objetos dependientes se relacionan en tiempo de ejecucin, aunque las aplicaciones
manejanlosobjetossinnecesidaddesabersilainstanciaestaonoenmemoriarealmente,
simplemente usan los objetos de igual forma que otros no persistentes, en determinadas
casosesnecesarioconocer,siunainstanciayaestadisponibleenmemoria,siserenviadaa
persistirenelprximociclodeacceso.Tresaspectossonconsideradosaqu:laconsistencia
de referencias desde objetos transitorios a objetos persistentes, los atributos derivados y
55
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

ue apuntan a ese
ue apuntan a objetos persistentes que podran
no esta
tende
cesarioverificarsiesposiblerealizarlaoperacin.Estas
yotras
n
t
, con
numero
reglasdeintegridadcomplejas.Entodosloscasospuedesernecesarioatraparlassealeso
eventosproducidosporlaactividaddepersistencia.
El cierre de persistencia de un objeto no incluye los objetos q
objeto raz del cierre. Objetos transitorios q
r en memoria, as se plantea la validez de esas referencias que de alguna forma
deben ser controladas. Una solucin podra ser emplear referencias inteligentes o proxies
pordoquier.
Los atributos derivados son resultado de un clculo basado en los valores de los
atributos de una o ms instancias, que pueden necesitar que los atributos no persistentes
deban ser inicializados justo despus de la recuperacin de los datos. Tambin podra ser
necesarioqueelvalordeunatributodebaserobtenidojustoeninstantedeconsolidarenel
depsitodedatos,comoejemplo,elcasodelasclavesprimariasautomticasgeneradaspor
elmecanismodepersistencia.
Utilizar reglas de integridad escritas una sola vez y evitar una programacin
defensiva requiere habilitar mecanismos que se activen ante determinadas operaciones o
cambios en el ciclo de vida de lasinstancias persistentes. Por ejemplo cuandose pre
eliminarunainstanciapodraserne
situacionessimilaresmuestranqueseraadecuadodisponerdelafuncionalidadde
poder asociar acciones a determinadas transiciones del ciclo de vida de una instancia
persistente. Monitorizar reiteradamente el estado asociado a una instancia, no es la
solucin idnea. Una solucin basada en los patrones de diseo, los mtodos plantilla,
observador o comando [13], resultan una aproximacin eficiente donde los objetos
interesadosenelcontroldedeterminadoseventosimplantanciertoprotocoloqueindicaa
losserviciosdepersistencia,quienesdebernsernotificadosdelaocurrenciadelossucesos
oportunos. Los servicios de persistencia podran ofrecer la capacidad de notificar los eve tos
relativosalciclodevidadelasinstanciaspersistentesmanejadasporelservicio.
Medidasdeproductividadyrendimiento
Unaspectoopcionalperointeresantedesdeelpuntodevistadelaingeniera,esla
capacidaddetomarmedidassobreelrendimientoylaproductividad.Es asmedidastienen
inters en las fases de optimizacin de las aplicaciones e incluso de diseo y ajuste del
propio servicio de persistencia. Tiempos de transferencia y respuesta, sobrecarga en la
comunicacin, nmero de peticiones por minuto a los servicios los de datos, nivel de
concurrencia,nmerosdeoperacionesporpeticin,tasasdeaciertoyfallosdecach,...Es
posible definir toda una plyade de mediciones, que sirven al propsito de cuantificar el
coste y rendimiento reales, obtenidos con los diseos puestos en prctica. Debemos
considerar que el papel desempeado por los servicios en transparencia es activo
sasoperacionesinternas,novisiblesdesdeelexteriordelosservicios,quetambin
tiene sentido medir. Los servicios de persistencia podran aportar estadsticas sobre su
funcionamientoparaposibilitarelanlisisdelfuncionamientodelassolucionesimplantadas.
Laeficienciadealmacenamiento
Unacuestinrelacionadaconlacorrespondenciaentreobjetosysoportesdedatos
es el almacenamiento. Tener separados los datos y los objetos permite separar la
responsabilidad dejando a cada parte que cumpla su funcin de la mejor manera posible.
Es ms, es un objetivo esencial conseguir la independencia de datos protegiendo a las
aplicaciones contra cambios en la estrategia de acceso y almacenamiento [9]. A primera
vista,noparecenecesarioquelosprogramasseocupendedndeocmosonalmacenados
56
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

fsicame
de prestaciones, pero tambin tiene sus lmites. Habitualmente existe una
unidad
contenedores(objectivity),yenotrosarchivos,
documentos,
una cuestin balad la eleccin e implantacin de una estrategia de
to,nitampocounrequisitoslodegrandesycrticossistemas.Enlaprctica
son num
n necesidad de un elevado nmero de transacciones que balacean la carga
o el ejemplo visto del supermercado. Una ilustracin
tratamiento al vuelo del almacenamiento son los contenedores dinmicos de
Objectiv
anismos de persistencia que
Objectivity, compatibles con
ODMG
manera
los defe
de libre de datos. Los servicios de persistencia podran facilitar la creacin de
registros
imple e
nte sus objetos, los mecanismos de persistencia ofrecen la gestin del
almacenamiento,almenos,lossistemasdebasesdatosrelacionalesylasdeobjetos.
Elalmacenamientodeterminalavelocidaddeacceso,recuperacinyactualizacin
de los datos, y los lmites de concurrencia, volumen y espacio. Parmetros de
almacenamientoquesoncrticosparaquelasaplicacionesobtenganadecuadostiemposde
respuesta. Los principales sistemas de bases de datos utilizan una gestin del
almacenamiento complejay sofisticada, que cubre normalmentela necesidadde satisfacer
la demanda
lgicabsicadealmacenamientoqueserposiblegestionardesdelasaplicaciones,
en los sistemas relacionales las tablas e ndices, en los de objetos colecciones, pginas
(Gemstone,Versant),particiones(Versant)o
etc. Estas unidades permiten a las aplicaciones escoger dnde guardar sus
datos,parasatisfacersusrequerimientossincomprometerlaindependenciadedatos.
No es
almacenamien
erosos los ejemplos que utilizan una gestin dinmica del almacenamiento en
tiempo de ejecucin. Por ejemplo, en los ancestros de la aplicaciones de gestin, la
contabilidad y facturacin era, y es, habitual que en funcin de la fecha de trabajo o
ejercicio, los registros irn a distintos archivos o tablas; las aplicaciones con archivos de
movimientos locales que posteriormente son consolidados contra servidores centrales;
aplicaciones co
sobre diverso almacenamiento, com
del
ity, las particiones lgicas de Versant y las tablas divididas o particionadas de
Oracle.
Seradeseablequetodoserviciodepersistenciapermitieraadministrarelesquema
de persistencia en tiempo de ejecucin y disponer de la facilidad de interactuar con una
interfaz de gestin lgica del almacenamiento de los mecanismos soportados. Resolver la
cuestin con las bases de datos relacionales ser fcil, en principio bastar con lanzar
sentencias SQL apropiadas, para lograr el almacenamiento deseado; la dificultad mayor
estriba en las diferentes interfaces empleadas por otros mec
ofrecen interfaces de programacin propias, como Versant y
3.0.
Laeficaciadeaccesoalosdatosdepende,tambin,engranmedidadelaformaen
laque la correspondenciaobjetosdatos seaestablecida ydel patrn de accesoa los datos,
factoresdeterminantesparaelrendimiento.
En definitiva, los servicios de persistencia podran ofrecer la facilidad de ajustar
dinmicamentelosparmetrosdefuncionamientointernoqueafectanalrendimiento.
Trazabilidad
La trazabilidad es una cualidad deseable para todo diseo de programacin, de
que,permitaanalizarlacorreccindelfuncionamiento,yasistirenlaresolucinde
ctos. El empleo de bitcorasdeactividad, los famososlog, es habitual a todo tipo
ras y servicios
de actividad que permitan asistir en las tareas de prueba y correccin de las soluciones
m ntadas.
57
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

Neutra
o con bases de datos relacionales, es posible emplear distintos lenguajes
de
combin
lenguaje
caracter
persistir aje,paraposteriormenterecuperarestosymodificarsuestadodesde
otro len
ad,esaprovecharlaventaja,quepuedesuponerelegirel
aje ms adecuado para cada tarea, la arquitectura dirigida por el modelo (Model
adentreplataformas.Lacapacidadparamanejarobjetospersistentesdesde
Neutralidadrespectodelfabricante.Seraidealquelosobjetoshechospersistentes
sobreunproductodeunfabricantepudieranserrescatadosporproductosdeotros
fabricantes,facilidad atosrelacionalescon
1.2.2.
es surgen, etctera. Obviamente cada organizacin
introdu
productorasdebernadaptarsuprocesodedesarrollo,comoveremos.Lasorganizaciones
lidadrespectoallenguaje
Trabajand
programacin para tratar las mismas tablas, es habitual encontrar soluciones que
an ms de un lenguaje. En cambio, la posibilidad de que objetos creados con un
de programacin sean recuperados para ser usados con otro lenguaje, es una
sticaavanzada,pococomnentrelosproductosrevisados.Crearobjetoshacerlos
conunlengu
guaje, no es practica habitual, salvo en el mundo OMG CORBA. Solo algunos
sistemas de bases de datos de objetos, a los que se ha tenido acceso, ofrecen cierta
neutralidadentreC++,JavaySmalltalkperoconlimitaciones.
Elintersdeestaneutralid
lengu
DrivenArchitecture,MDA)ylassolucionesCORBAsonunclaroejemplo.Noobstante,el
temaesmuycomplejoquedandomuylejosdelpropsitodeestedocumento.
Sindudahaynumerosascuestionesmsquetodavanohansidotratadas.Lasque
aqu han sido expuestas, parecen ser suficientes para establecer un marco de anlisis que
permitaestudiarlascualidadesdelestndarquevaaserobjetodeestetexto.Eneltintero
quedanporejemplo:
mbito de identificadores. Los servicios de persistencia como mediadores deben
manipular identificadores con mbitos distintos, a un lado los lenguajes de
programacin,alotrolosserviciosdedatos,cadaunoconsusreglasyrestricciones
mbitoyuso.
Movilid
distintas plataformas. El formato de almacenamiento, entre otras caractersticas
necesariasydeseablesdeberapermitirciertaneutralidad,respectoalaplataforma
donde los datos son almacenados, posibilitando el acceso y manipulacin sobre
otrasplataformas.ElmundoOMGysussolucionespuedenensearnosbastanteal
respecto.

quepuedeserobtenidaenlasbasesded
SQL.Estoevitaraunadependenciaexcesivadeunsoloproveedordeserviciosde
persistencia.
Todos los requisitos expuestos contribuyen favorablemente al rendimiento,
mantenimientoycostedelosserviciosdepersistenciaquecubranlosrequisitosexpuestos.
Dimensinorganizacional
Estamosinteresados,enconocercomolaorganizacindelaempresaseraafectada
por la incorporacin de un servicio de persistencia ortogonal. Cuestiones tales, como qu
piezas de la cadena de valor seran alteradas, cambios en las relaciones de los actores
implicados, qu nuevas relacion
cir los cambios que estime oportuno, si bien, desde aqu intentaremos anticipar
con una visin general, donde incide la incorporacin de un sistema de persistencia con
soportedetransparenciadedatos.Laadopcindeunserviciodepersistenciaimpactaenla
produccindeprogramas.Afectatantoalasentidadesqueproducenprogramas,bienpara
el mercado o su propio consumo, y las empresas que los consumen. Las organizaciones
58
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

licacinmecnicadetrabajonocualificadoyrutinario,tareasrepetitivasqueno
requiere
noproductoras,tendrnquerevisarsusprocesosdecontratacinygestindesistemasde
informacin.
Laproduccindeprogramas,sesustentaeneltrabajodepersonalmuycualificado
y entregado a su labor. La produccin industrial de programas, no puede ser entendida,
comolaap
n de esfuerzo intelectual. [3]. Un servicio de persistencia, como ocurre con
cualquier otra librera o utilidad para la programacin, no va a permitir producir
programascorrectosconpersonal,sinlaformacinypreparacinadecuadas.

Figura6Laprogramacinrequierecualificacin
Algunosautoresestimanqueun30%delcdigodelasaplicacionesestadedicadoa
tratar la persistencia, siendo esta una de las causas, que impulsa la incorporacin de
servicios de persistencia, e ardar y recuperar
objetos
aque,elesquemade
datos d
reelprogramadordeobjetosyeladministradorodiseadordebasesdedatos,
se incorpor
es
vitar el reiterado cdigo necesario, para gu
transformando datos. La mera incorporacin, como utilidad de programacin, de
unserviciodepersistenciapodrareducirelnmerodelneasdecdigoefectivo,perono
es suficiente, el proceso completo de desarrollo de sistemas de informacin debera ser
revisado. Con las medidas adecuadas, los costes de desarrollo y mantenimiento deberan
mejorar. Tener menos cdigo facilita conseguir cdigo de calidad. Dependiendo de los
sistemas de informacin de que se trate y de la cultura de la organizacin, el reuso y sus
beneficiospodranaumentar.
Emplearunserviciodepersistenciacontransparenciadedatos,permitedesacoplar
losobjetosdelosesquemasdebasesdedatos.Aumentalaflexibilidadantecambiosenlos
requisitos de las aplicaciones y de los sistemas de almacenamiento. Al separar, es posible
posponer decisiones de diseo que no afectan a las partes. Posponer la decisiones, facilita
profundizar en el conocimiento del problema y de la solucin, adoptando finalmente las
decisionesmsacertadas.Nuncaposponerdecisiones,debesignificareludirlosproblemas
quedebenserresueltos.
Laadopcindeunserviciodepersistenciadeobjetosconduce
isminuya de importancia en el diseo de las soluciones frente al modelado de
objetos.
A nivel de papeles o figuras dentro del equipo de desarrollo de sistemas de
informacin, podra ser efectiva una nueva divisin de las responsabilidades. Al habitual
repartoent
a un tercer personaje, que asume la responsabilidad de la gestin de los
esquemas de persistencia, el experto en persistencia. Con una denominacin u otra, la
responsabilidad divididaentrequienestratanconobjetosexclusivamente,losqueestn
59
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

ocupados con los almacenes de datos de la empresa y,ahora, aquellos cuya preocupacin
es,establecerlamejorcorrespondenciaentreobjetosylosdatosdelaempresa.

Figura7Papelesendesarrolloconpersistencia
Des de valor, esto
supone una facilita crecer
acumul
conflicto de intereses entre el desarrollador y el administrador de bases de datos. La
solucin
aptabilidad y
toleranc
produccin de programas, requiere de que todos los actores implicados en la
valor, conozcan las capacidades y limitaciones del servicio de persistencia
adoptad
de un punto de vista de la divisin del trabajo y de la cadena
especializacin en actividades separadas; la especializacin
ando conocimiento y experiencia sobre la actividad asignada. Tambin, puede
suponer una mejora del reuso del conocimiento y del personal, las personas adquieren
mayordestreza,queredundaenmayorcalidadymenorestiemposdedesarrollo,tantopor
la habilidad adquirida, como al posibilitar la concurrencia de tareas, si los papeles son
desempeadosporpersonasdiferentes.
Pero la especializacin tiene sus inconvenientes, el principal inconveniente es, el
pasa, por un mayor conocimiento de ambas partes de las tareas del otro, y una
mejor comunicacin, para ello una posibilidad es, la rotacin en los papeles asignados,
transcurrido un tiempo adecuado desempeando una actividad, se emplaza a asumir el
papeldelotro.Estoconduceaunmejorreusodelconocimiento,unamejorcomunicacin,a
reducir los conflictos de intereses, pues los objetivos convergen, mayor ad
iaacambiosenlasnecesidadesdelacadenadevalor.
Los esquemas rgidos de asignacin de funciones a personas, no terminan de
funcionar bien con las tecnologas orientadas a objetos, las metodologas y mtodos
modernoscomolospresentadosen[25][18]y[3][15],apuestanporfomentarlafiguradel
ingeniero que ocupa distintos papeles en distintos momentos, segn su perfil personal y
destrezas.
La adopcin de un servicio de persistencia no es asunto exclusivo de los
programadores. Alcanzar la correcta implantacin de un servicio de persistencia, en el
proceso de
cadena de
o,conunconocimientoadecuadoasuposicinenlacadenadevalor.
Para las empresas productoras de programas un servicio de persistencia debera
permitir,desdeelpuntodevistaorganizativo:
Posibilitarunaprendizajerpido.
Reducir el nmero de lneas de cdigo efectivo para llevar a cabo la
persistencia.
Introducir mayor flexibilidad en el proceso de produccin: Centrar el
desarrolloenelmodelodeobjetos.Desacoplarlasactividadesrelacionadascon
60
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

ia, ayudan, o por el contrario dificultan, conseguir la implantacin de un nuevo


servicio. En este sentido, la documentacin de un servicio de persistencia, debera
lidades de integracin en el proceso de produccin de
ategiasdeintegracinquesirvandereferenciaoguaalas
organiz
t
los
desarro
adores,estoayudaamejorarla
especifi
serunescollo
insalvable.
La cues
organizaciny nefectuardeunmomentopara
otro, sin m I
temaestratgico motal,requiereuncuidadosoplaneamiento,deformaymaneraque
minimic los riesgos,
competitivi
guiadaycuidad
radical.
No hay
organizacin, e acin del personal afectado, son los elementos que
ayudan a llevar a cabo un planteamiento acertado. El consejo tpico es comenzar con un
organizacin, acometiendo cada vez proyectos ms
importa
meses cada una, como
mximo.
los cambios en el esquema fsico, el esquema de persistencia y el modelo de
clases.
Mejorarlacomunicacindentrodelprocesodeproduccinyayudarareducir
losconflictosentreprogramadores,analistasyadministradores.
Estos objetivos no tienen nada que ver con cuestiones tcnicas, en un principio,
pero la documentacin, las herramientas y la notacin, aportadas con un servicio de
persistenc
ejemplificar distintas posibi
programas,documentarlasestr
aciones.
Ahora veamos, que beneficio pueden obtener las organizaciones que son clien es
de las anteriores, consumidores de programas. Para las organizaciones clientes de
lladoresdesistemasdeinformacin,laincorporacindeunserviciodepersistencia
debera mejorar la flexibilidad ante cambios de plataforma tecnolgica y proveedor,
conseguiras,menorescostesdedesarrollo,implantacinymantenimiento.
La adopcin de un servicio de persistencia adecuado, permitira dialogar con los
desarrolladores en trminos propios del negocio, la comunicacin entre usuarios y
desarrolladores debera mejorar. Se logra una mejor comunicacin al reducir el salto
semnticoentreellenguajedelnegocioyeldelosprogram
cacin y mitigar los errores de interpretacin. Un buen servicio de persistencia,
basado en estndares reales, podra favorecer disponer de un mayor nmero de
proveedores. El choque con la cultura presente en la organizacin, sobre bases datos
relacionalesylareticenciaaconsiderarotrasalternativasnorelacionales,esunadificultad
aadidaparalaintegracindeunserviciodepersistencia,quepuedellegara
tin no es tan simple como comprar un CD y ya est. Los cambios de
detecnologaenlasempresas,nosepuede
s. ntroducir JDO afecta al mismo corazn de la fabrica de programas. Es un
.Yco
al mismo tiempo, el cambio de ser rpido, para evitar perdida de
dad eincurrirencostesdeoportunidadimportantes.Latransicintienequeser
osamentemanejada.Elcambiodebeserevolutivo,peroresultafinalmente
muchos misterios al respecto. El sentido comn, la cultura de la
l nmero y prepar
pequeo proyecto piloto de costes reducidos, con un equipo reducido pero escogido de
miembros de la organizacin, aprovechar la experiencia para difundirla y aplicarla en
sucesivas fases al resto de la
ntes con el personal ms experimentado, que a su vez contribuye con su
conocimiento a mejorar el proceso y formar nuevos programadores en JDO. Creo
personalmente, que el cambio debe efectuarse en tres fases de seis

61
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

1.2.3.
nuevo estndar. Una tecnologa imperfecta en un mercado en
funcionamientoessostenible;unatecnologaperfectasinmercado,sedesvanecer[31].
Echando la vista atrs solo unos pocos aos, podemos recordar el fracaso en la
adopci
n, siempre y cuando la
implant
s del 2001 que, los mercados para la
tecnolo
osmtodos,nuevasherramientasyestrategiasdeintegracin.
icados. La falta de desarrolladores cualificados es y ser la principal
dificultad para adopcin de Java entre las organizaciones que ofrecen
serviciosenlaRed.
Los prrafos anteriores describen un escenario del mercado donde JDO deber
mostrar su utilidad ante la cautela de las organizaciones para elegir entre JDO y la
competenciadeMicrosoft.NET.
La realidad econmica de la empresa se impone sobre los criterios meramente
tcnicos, la inversin en servicios de persistencia debe ser rentable. Si las cuentas no
cuadran,difcilmentelasempresasinvertirnenpersistenciaJava.
El retorno a la inversin en servicios de persistencia debera proceder de la
reduccin efectiva de los costes de produccin, mantenimiento y amortizacin de los
sistemas en los que son aplicados. A menores costes, manteniendo economa y
productividad, mejora el retorno de las inversiones en desarrollos de sistemas de
informacin. Tambin, el riesgo en las inversiones sobre TIC, as construidos debera ser
menor,habidacuentadelamayorofertaydelaflexibilidadquedeberaaportarunservicio
depersistenciaestndar.
1.3. Resumen
Este primer captulo ha presentado qu se entiende por persistencia de objetos,
algunos de los conceptos ms importantes en torno al problema de hacer perdurar los
objetosmsalldelaejecucindelasaplicacionesqueloscrean.
DimensinEconmica
Los aspectos tcnicos son esenciales, pero son los factores econmicos los que
determinan xito de un
n de tecnologas calificadas como la mejor del momento, basadas en el consenso
entre un importante nmero de los principales productores. Recordemos la pugna
Opendoc frente COM, claramente ganada por el segundo. La estandarizacin supone un
elemento esencial en el abaratamiento de los costes de producci
acindelestndarseaefectiva.Laestrategiadedivulgacinydeintroduccinenel
mercadosonclavesparaalcanzarlaaceptacinefectiva.
El Gartner Group estimaba a principio
ga Java muestran las reglas siguientes [48]: El mercado se mueve hacia usuarios
que adoptan una tecnologa cuando esta ha demostrado su utilidad, cuya eleccin viene
estratgicamente planificada, y a la vista de la experiencia de otros. Estos usuarios
reclamannuev
Las decisiones de compra estn dirigidas ms, a soluciones con respaldo
quealmejorproducto.Solucionescompletasdeunsoloproveedorydelos
grandescanalesmaestrosdedistribucin.
J2EE ha llegado a ser la plataforma para el lado servidor de la soluciones
Java.
Lasnuevasherramientascentrarnsuintersenlosmodelosdedesarrollo
deaplicacionesparalosnuevosemergenteseservicios.Estasherramientas
deben permitir crear soluciones reales con desarrolladores poco
cualif
62
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

s
el
La dificultad de nsin del lenguaje
de programacin, y la encia mediante la
utilizacin de servicios de persistencia de objetos bajo la forma de framework de
persiste

La idea fundamental es que la capacidad necesaria para persistir los objetos debe
erlomsindependientedellenguajedeprogramacinydelmedioutilizadoparasoportar
estadopersistentedelosobjetosqueperduran.
incluir la capacidad de persistir como una exte
tendencia del mercado, es solventar la persist
ncia.
Han sido concretado una serie de requerimientos debe satisfacer un servicio de
persistencia de objetos, que ofrezca transparencia de datos, persistencia por alcance, sea
ortogonal a tipos y mecanismos de persistencia, que asegure la integridad transaccional y
referencial de los objetos persistentes y sus relaciones, adaptable a diferentes contextos y
arquitecturas,yquelogreunrendimientoadecuado.
En el plano de la empresa, la adopcin de un servicio de persistencia implica
cambios en la produccin de programas con nuevas figuras, responsabilidades y
actividades, pero siempre considerado que la inversin en servicios de persistencia debe
serviableyrentable.

63
Capt ul o 2
EQUI VA LAS
LACI ONAL
Este tra en su primer tulo, que todo rsistencia de
objetos,debeutilizarlasbasesdedatosrelacionales,pararecogerlosestadosdelosobjetos
persistentes La cuestin de cmo hacer corresponder objetos en relaciones y viceversa,
siemprehasidodeobjetointersdeestudio,anlisisypropuestadesolucinennumerosos
trabajosdemerec onocimiento,algun esostra captulo,
las propuestas de A. Keller, S. Ambler, C. Priese, J.Rumbaugh W. Keller y R.G.G.Cattell,
sustentanlasideasrecogidasacontinuacin.
ste cap ribe las ideas fundamentales de la solu al problema de la
correspondenci , sin entrar en rofundidad, pues necesitara de todo un
proyecto fin de carrera. Las tcnicas de correspondencia presentadas, sern ilustradas con
diagramasylistadosdeejemplosprcticos.
2.1. Faltad Tabla
utilizadosparamodelarlasrealidades,que
seespecificalosatribu ortamientode
la realidad e objetos. Un tabla especifica los datos de la entidad que
representa, concreta una relacin entre valores de los dominios de los datos escogidos.
Ambos capturan caractersticas de inters para
caractersticasligadasalcomportamientoenejec P
cla ica m p
tabla toma su sentido esencialmente, de servir
datos que modela. No hay por tanto, una e y nica entre ambos
conceptos.Tampocoaniveldelaimplementacinesposibleunaequivalenciadirectaentre
los tipos de datos sobre los que se construye
sistem cturad p
usado;unatablanopuedeutilizarunvectoro rotras
relaciones(tablasovistas),conlasquemodelarestosatributoscomplejos,habitualmentesu
sistema de tipos es diferente de aquellos pr e
programacin, ite utilizar estructuras s
(hoy SQL99 s soporta tipos estructurados, co una
dificultadofaltadecorrespondenciaentreambosmodosderepresentarlasentidadesque
manejan nuestrosprogramas,quedeberemossercapacesderesolver.Latareadecrearuna
corresp
cionesentretablas.
Laherenciasobretablas.
Todo ello a simple vista parece ser sencillo, directo y sin complicaciones, pero
resulta una tarea difcil cuando se requiere conseguir eficiencia, alto rendimiento,
LENCI A CLASE - TAB
RE ES
bajo seala cap servicio de pe
idorec osde bajossonlabasedeeste
tulo desc
a clasetabla
cin
p
eCorrespondenciaClase
Claseytablasonconceptosdiferentes,
despusmanejanlasaplicaciones.Unacla
que modela, defin
tosyelcomp
a
la aplicacin, pero la tabla ignora aquellas
ucin,cosaquesimodelalaclase. arala
osiblemente independiente, en cambio, la
al propsito de persistir y compartir los
quivalencia exacta
se, la persistencia es una caracterst s,
n clases y tablas, una clase aprovecha el
rovisto por el lenguaje de programacin
rbolcomoatributo,necesitadecrea
a de tipos primitivos y estru os,
esent s en los principales lenguajes de
de datos como dominio de los atributos
mo atributos). En definitiva, existe
y no perm

ondencia entre un modelo de objetos y un esquema de relaciones requiere de


establecerunaequivalenciaentre:
Identidades,laidentidaddeunobjetoysurepresentacinenlastablas.
Clasesyrelaciones.
Relacionesentrelasclasesysuequivalenciaenrela
65
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

adalcambio,facilidaddemantenimientoyserequieredarrespuestaalaherencia
conceptosnosoportadosporelmodelorelacional.Lacuestinpuedeser
plantea
roducenrigidez,faltade
flexibilidadalcambio,alaevolucin,yesfrenoanuevasmejoras.
idad oportunos. En la prctica, un
modelo
elmejoresquemaderelacionesadecuado,aun
un sistema legado, con un esquema relacional
previo
podemospartirdeequivalenciasdelaTabla1.
flexibilid
yelpolimorfismo,
dadesdeunenfoquedominadoporunodelosextremosdelacorrespondencia,los
objetosoporlosdatos,resultandoenmodelosquenoseajustanalosprincipiosclsicosde
diseo e implementacin establecidos en lado dominado. La idea clave en la
correspondenciaentreclasesytablas,esconseguirunesquemasimple,sencilloyclaro,los
esquemasdetraduccincomplejossinunciertopatrnsencillo,int
La creacin del esquema de correspondencia, puede ser realizado desde dos
perspectivas, una centrada en el modelo de datos, donde las tablas dirigen el proceso de
creacindelacorrespondencia,buscandogenerarlasclasesqueseamoldanacadatabla;y
otra perspectiva, enfocada desde el modelo de objetos, que impulsa encontrar un modelo
detablasqueseaelmsapropiadopararepresentardeunformaeficazlosobjetos.
Enmimodestaopinin,experiencia,comopartidariodelaorientacinaobjetosy
desde la perspectiva de este trabajo, que es utilizar las bases de datos para almacenar los
estadosdelosobjetos,elmodelodeobjetosdedominarelesquemadepersistenciabasado
en un modelo de entidadrelacin, se debe procurar no forzar cambios en el modelo de
objetos,porelhechodeemplearunabasededatosrelacionalparapersistirlosobjetos,pero
al mismo tiempo, es necesario sacar partido de las capacidades ofrecidas por el modelo
relacional, para conseguir un rendimiento e integr
purodeobjetos,trasladadoaunesquemaderelaciones,suelecasarcondificultady
resulta en un pobre rendimiento; el enfoque contrario, centrado sobre el modelo entidad
relacin, favorece el rendimiento concurrente y es ms fcil de convertir en clases 0, pero
suele carecer de ventajas de un buen diseo orientado a objetos; es fcil caer en clases
vacas de funcionalidad, que ms bien representan registros con nula reusabilidad. Los
modelos de tablas creados a partir de un modelo de objetos, pueden conducir a modelos
relacionales poco tiles, desde el punto de vista de los usuarios finales, pero gracias a la
potencia expresiva de SQL y la vistas, normalmente, se logra construir una visin de los
datosmsadecuadaparaelusuariofinal,singravepenalizacinparaelrendimiento.Son
muchos losque consideran mejor, partir de una representacin relacional porsu facilidad
parasermanipuladayentendida,adems,desumejorrendimientoenconcurrencia,para
despus,enbasealastablascrearunmodelodeobjetosacorde.Entrequienesprocedende
la cultura de la programacin orientada a objetos, existe una postura de considerar una
aproximacinoportunista,dondesegenera
modelo de objetos, salvo que se parta de
a continuar, en cuyo caso es mejor seguir un enfoque dirigido desde el modelo
esquema relacional. En una primera aproximacin, para establecer una correspondencia
entreclasesytablas
66
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

nciaModel EsquemaRelacio
lode etos lo lacional

oObjetos Tabla1Corresponde nal


Mode obj Mode Re
Identidad Claveprimaria
Clase Relacin(Tabla,Vista)
Instancia Fila
Atributodeinstanciapersistentecon
dominiountipobsicooprimitivo

Columna
AtributopersistenteReferenciaaobjetos
contipoconocido

ClaveAjena
Atributopersistentetipocoleccin
Nohayequivalenciadirecta,debeseruna
relacin, si la cardinalidad es (m:n),
entonces una entidad de asociacin; Si
las relaciones (1:n), entonces atributos en
correspondientes.
AtributopersistentedeClase
Una tabla con las caractersticas comunes
atodaslasinstanciasdeunaclase.
Herencia atributos de instancia de la jerarqua
herenciacompletaomltiplestablas
Una relacin agregada con todos los

A la vista de la tabla anterior, no parece que la actividad de definir la


correspondencia sea algo complejo, pero como se ver, en apartados siguientes y con la
quedar patente su dificultad, por ejemplo, son
clase necesite ms de una tabla para persistir sus
instanci
ilustracin de los propios ejemplos,
habituales los casos, donde una sola
as,queseanecesarioaadircolumnasparadarsoportealbloqueooptimista,oque
noexistanunconjuntodeatributosquepuedaserclaveprimaria.
67
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

2.2. Iden
claveprimaria,estoes,identificaracadaobjeto.
primer captulo, que puede ser satisfecho con distintas alternativas,
porejemplo,
es, el uso de una clave primaria automtica, que incluya un indicador de la
clase del objeto correspondiente. Esto permite aprovechar la potencia de la integridad
referencial de las bases de datos relacionales, utilizando una sola columna, evita accesos
adicionales a los datos para determinar el tipo, no fuerza la introduccin de campos
adicionales,permiteunmayorreuso,mejormantenimientoeintroducemenoscomplejidad
enelcdigodelosprogramas,aunqueconllevaunaligerasobrecargaporextraereinsertar
lasealdetipoenelcampodeclaveprimaria.Laclaveautomticapodraseruncontador
obtenido, a partir de una tabla de contadores comn, o una secuencia generada por el
SGBDR,comoenOracle,SqlServer,SqlBase,oPostgreSQL,omediantealgunaformulacin
hashing. En JDO, el modelo de identidad por aplicacin da soporte a la identidad por
claves primarias, exigiendo la inclusin de nuevas clases que representan estas claves
primariasverificandociertaspropiedades.
En el ejemplo del banco Figura 1 con las clases Cliente, Cuenta y Movimiento,
desdeunpuntodevistarelacional,seraposibleestablecerlassiguientesequivalenciapara
clavesprimarias:
Tabla2ClavescandidatasenelBanco
Clase Atributo Tabla Columna
tidad
Laequivalenciaentreidentidadesdeobjetosyrelaciones,eslacorrespondenciade
identidad persistente a claves primarias. El identificador persistente de los objetos puede
ser, o una caracterstica ajena a los objetos construida y gestionada por el servicio de
persistencia, o bien, un conjunto de atributos de los objetos persistentes que satisfacen la
singularidadde
Debemosmencionardosaspectos,unolaeleccindeclavesprimarias,elotroesla
necesidaddeconocereltipodelosobjetospolimrficos.Losobjetosconcretansuidentidad
mediante identificadores internos al sistema, carentes de significado para el usuario; en
ladorelacional,hoyporhoy,tambinlosprincipalesSGBRempleanidentificadoresdefilas
automticos e internos, pero habitualmente, las claves elegidas tienen significado, son
dependientes del valor de unos o ms atributos con sentido para el usuario final, lo que
ante cambios de la estructura de estos atributos, el esquema y cdigo de los programas
tienen que ser modificados. Desde aqu, se recomienda la utilizacin de claves primarias
sin significado en los esquemas relacionales, utilizando secuencias, contadores o tickets.
Conservar el tipo de las instancias, su clase, junto a los datos de estas instancias es un
requisito, visto en el
unatablautilizadacomodiccionario,unacolumnautilizadacomoselector,o
enlapropiaidentidadembutidaenlaclaveprimaria.
Un enfoque bastante prctico y que facilita un nivel rendimiento adecuado, para
lograr la identificacin en un gran nmero de casos, til para ambos lados de la
equivalencia
Cliente Nif Cliente Nif
68
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

69
Cuenta CodigoCuenta Cuenta CodigoCuenta
Movimiento Movimiento

La gestin de identidad con claves primarias haciendo equivaler atributos a


columnas, necesita del cdigo adecuado en el lado de los objetos, que podra ser
transparenteparaelprogramador.Engeneral,introducirclavesprimariasenunmodelode
objetos,requieredeciertoesfuerzodeprogramacin,queesmayorautilizarenunmodelo
de identidad gestionada por el mecanismo de persistencia. La prctica totalidad de los
productos revisados, que consiguen persistir objetos en tablas implantan, los aspectos
mencionadosdeunaidentidad,basadaenunasecuenciaocontador,ydeconservareltipo
delosobjetos.VeamoscmoseplasmalaidentidadpersistentedelaclaseCliente.


Listado12IdentidaddelaclaseClienteentablasconMySQL.
Lacorrespondenciaescogidaenestecaso,sevaledeuntablacontadorparagenerar
el valor dela columna OID, que esla clave primaria y el campoCLASS p conservar el
tipo. Obviamente, CLA ro que la clase
Cliente
public class Cl i ent e
implements Ser i al i zabl e
{
/ **
* I dent i f i caci n del cl i ent e
*/
protected St r i ng ni f ; .
CREATE TABLE `cl i ent e` (
`CLASS` varchar( 255) default NULL,
`OI D` bi gi nt ( 20) NOT NULL default ' 0' ,

`NI F` varchar( 255) default NULL,

PRIMARY KEY ( `OI D`) ,

# Gener ador de i dent i dades


CREATE TABLE `sequence` (
`I D` t i nyi nt ( 4) NOT NULL default ' 0' ,
`SEQUENCE_VALUE` bi gi nt ( 20) default NULL,
PRIMARY KEY ( `I D`)
) TYPE=I nnoDB;

ara
SS hace falta para cubrir el polimorfismo. Si es segu
noformarpartedeunarelacindeherencia,Clientenuncausardepolimorfismo,
entonceslacolumnaCLASSpodrasereliminada.Comovemoselni f ,essimplementeun
atributoporelqueconsultar,aunqueconndicesenelRDBMS,sepodraforzarqueexistan
valoresnicossinafectaralcdigoJava.
Otra cuestin que se revela interesante la Tabla 2, es la ausencia de atributos que
puedan ser clave primaria para la clase Movimiento. Esta situacin es normal en los
modelos de objetos, lo cual es otro argumento ms, para utilizar claves primarias sin
significado,gestionadasporelRDBMScomoelidentificadorOIDdelejemplo,queobtiene
suvalordeuncontadorbasadoenlatablasequence.
2.3. Conversindeclasesentablas
Lacorrespondenciamsdirectaysimple,eshacercorrespondercadaclaseconuna
tabla,ycadaobjeto,conunafiladelatabla,steeselpuntodepartidaparalaconstruccin
delacorrespondenciaentreunmodelodeobjetosyunesquemarelacional.Lostrabajosde
A. Keller [41], A.Brown [6], S.Ambler [32], ensean que la correspondencia entre clases y
tablasdebeserdirecta,deunaclaseaunatabla,yviceversa,estafrmulaescorrectaparala
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

fectuarelprocesodetraduccin
entre lo
corresp
De est
normal
recuper
desnorm
introdu
column
persiste lmacenados en columnas blob, e incluso dado el caso, hacer persistir
atributo era
de trad
actualiz
con la
objetoc
proceso
acceso
caracter
claseta
mayora de los casos, porque planteamientos ms complejos, pueden implicar falta de
rendimientoyproblemasenlasactualizaciones.
LatablaanteriorTabla1,espuntodepartidaparae
s modelos relacionales y de objetos, donde en principio, a cada clase se le hace
onderconunatabla,acadaatributopersistenteunacolumnaenlatabladesuclase.
a forma, se construye un modelo de tablas, que inicialmente debera estar
izado.
Los modelos normalizados, con frecuencia adolecen de bajo rendimiento al
arodesgranarlosobjetossobrerelaciones.Esentoncescuandosedebeprocedera
alizar los relaciones para mejorar el rendimiento y valorar la oportunidad de
cir cambios como son, modificar los esquemas legados existentes con nuevas
as, serializar ciertos atributos, objetos completos que forman parte del cierre de
ncia, son a
s fu de la base de datos, como archivos. Situaciones que complican, el proceso
uccin, tomando decisiones, que deben considerar cmo van a ser accedidos y
adoslosobjetos,sielaccesoseproducealiterarsobreunconjuntoodirectamente
identidad, concurrentemente por varios procesos simultneos o navegando desde
ontenedor...
Esimportantequelosserviciosdepersistenciapermitanplanteamientosflexiblesal
de correspondencia clasetabla, conjugando el propsito de persistencia, con el
correcto a los datos y un rendimiento suficiente. Esta flexibilidad es una de las
sticas, que ms distinguen a buen producto para crear esquemas de persistencia
bla.
70
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

CORRESPONDE
CORRESPONDE
1..*
1
CORRESPONDE
1..*
1..* 1..*
1..*
movimiento
-FECHAOPERACION:Timestam
-FECHAVALORACION:Timesta
-IMPORTE:double
-J DOCLASS:String
-J DOID:long
-J DOVERSION:int
-MOTIVO:String
-APUNTES_J DOID:long
cliente
-J DOID:long
-J DOCLASS:Strin
-J DOVERSION:in
-NIF:String
cuenta
-J DOID:long
-J DOCLASS:String
-J DOVERSION:int
-CODIGOCUENTA:Strin
-DEBE:double
-HABER:double
-LIMITECREDITO:doub
-SALDO:double
banco.Movimiento
+Movimiento
+toString:String
motivo:String
importe:double
fechaValoracion:Dat
fechaOperacion:Date
InstanceCallbacks
banco.Cuenta
#debe:double
#apuntes:HashSet
#haber:double
+Cuenta
+aperturaCuentaNuevoClient
+cargo:boolean
+abono:boolean
+refundirMovimientos:void
#anotaMovimiento:void
+getApuntes:Collection
+setApuntes:void
+toString:String
+jdoPreDelete:void
+jdoPostLoad:void
+jdoPreStore:void
+jdoPreClear:void
codigocuenta:String
saldo:double
limiteCredito:double
titulares:HashSet
InstanceCallbacks
banco.Cliente
#nif:String
#cartera:HashSet
+Cliente
+toString:String
+jdoPreDelete:void
+jdoPostLoad:void
+jdoPreStore:void
+jdoPreClear:void
+carteraElimimable:boolea
+addCuenta:void
NIF:String

2.4. Rela
an como atributos de instancia, cuyo tipo es la clase
asociada, o un tipo coleccin con objetos de la clase relacionada. Dependiendo de la
Figura8EquivalenciaclasesdelBancoentablassinrelaciones
EnlaFigura8,cadaclasecorrespondeconunatabla,cadaatributocorrespondecon
lacolumnadelmismonombre,yalavistaesta,quelostiposdedatosdelascolumnasson
distintos, pero equivalentes a aquellos de los atributos que representan. Como se ver la
regla de uno a uno entre clases a tablas, se debe romper cuando se persiste atributos
multivaluados(arrays,vectores,)yjerarquasdeherencia.Otroselementosqueatraenla
atencinsonlascolumnasquenocorrespondenconlosatributosdeclase:JDOI,queesel
identificadorclaveprimariayJDOVERSION,agregadaparaincorporarlafuncionalidades
deversionadoybloqueooptimista.EnlaFigura8esunacorrespondenciaincompleta,hay
atributosdondenoaparecesucorrespondientecolumna,sonlosatributosquedefinenlas
relacionesdeagregacinycomposicinentrelasclases.
cionesdeAgregacinyComposicinaclavesajenas
Las relaciones de agregacin y composicin entre clases, son traducidas a
relacionesentretablasmedianteclavesajenas,aslasrelacionesentreobjetossontrasladas
a relaciones entre filas, a travs de los valores de las columnas que son clave ajena. Las
relaciones entre clases se materializ
71
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

ardina
senunamismaclaseensurelacionesconotras:
A. Embeber las claves ajenas en las tablas correspondientes a las clases con
relaciones 1:1 o 1:n. En una relacin de uno a uno, cada tabla aade una columna
clave ajena de la otra. Para la relacin de uno a varios (DepartamentoEmpleado),
lastablasdelosobjetosquesonagregados(laspartes),aadenlaclaveajena(clave
ajena inversa) a la tabla de la clase que hace de contenedor (el todo), incluso si la
clase contenida no tena un atributo equivalente. El atributo coleccin de la clase
contenedor (lado uno de la relacin) no necesita mapeo a una columna. Este
planteamiento muestra un rendimiento intermedio frente a otras alternativas, es
flexible al cambio de la estructuras y permite toda suerte de actualizaciones y
consultas.
B. Utilizartablasdeas lasclasessonm:ny1:n,
esnecesariocons ecadaelementodela
ncia de proces
asociadaunatabla,ylaasociacinen
as a ca
sont
to
jenas, son rep
atributos ndice o selector del
composicin, la supresinde unafil in
, la clave
illa para rela eor
rendimiento al navegar, travs de
tenidoscomo rtedeotros,sonrepresentadosenlatabla
oinsertandoenlatablasusatributos,oincluyendoun
campo especial. Cuando cada clase tiene un atributo del tipo de la otra clase
asociada, ambas clases son asignadas a la misma tabla. Un ejemplo sera clase
direccin embebida en la clase Persona, que aade a la tabla de PERSONA, los
mismo sicin
ite la actualizacin concurrente sobre los elementos
cionadas
roveedoryEmpleado).
Insistir que estas alternativas no son excluyentes entre s, pueden ser combinadas
enladefinicindelacorrespondenciaparaunamismaclase.Cadaestrategiadifiereensu
rendimiento, sus posibilidades de recuperacin selectiva y actualizacin concurrente, su
niveldeacoplamientoyenlafacilidadparasermanejadosconSQLconsencillez(elacceso
a los campos blob desde SQL no es ni obvio, ni fcil en la mayora de los principales
c lidaddelarelacin,deltipodeasociacin,agregacinocomposicin,yporltimo,
delanecesidaddeconsultayactualizacin,sonaplicadasdistintastcnicas,quepuedenser
combinada
ociacinsilasrelacionesentre
ultaryma dualment ocuando
relacin, en concurre
nipularindivi
os diferentes. Cada clase en la relacin tiene
treestasclases,serepresentasobreotratabla,
s que mantiene las claves ajen da una de tablas respectivas asociadas a la
clases.Lastablasdeasociacin ambin,lacorrespondenciaadecuadaparalas
de clasesdeasociacin[5]ylosatribu stipodiccionario(Map,HashMap,etc),don
entados los atributos de la asociac adems de la claves a res in o los
ndice del ario. una diccion Si relaci n es
supres a del todo, o contenedor,implica la
de lasfilas con clave ajena
menos acoplada y senc
eliminada. Se trata dela frmula ms flexible,
cionar varias clases, pero tambin la de p
la asociacin, de unos a otros objetos con
reiteracin.
C. Losobjetoscon
delaclasequeloscontiene,
pa
s campos que la tabla DIRECCION. Si la relacin es 1:n de compo
(p.ej. rbol compuesto por ramas), el atributo coleccin que aglutina los objetos
contenidos, podra ser hecho corresponder con una columna blob o similar, que
contendr los identificadores (las claves primarias) de los objetos, o los propios
estadosesosobjetoscontenidos.Laeleccindependerdequetratamientodebase
datos se aplique a los objetos contenidos. Esta alternativa es bastante eficaz
respecto al rendimiento, dado que requiere menos accesos, pero es menos flexible
al cambio, al reuso y no perm
individuales de las colecciones desde otros procesos, presenta la dificultad de
mantenimiento al representar una misma clase en diferentes contextos, por
ejemplo, la clase Direccion integrada dentro de distintas clases no rela
(P
72
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

sistemas de bases de datos relacionales). Entre los productos revisados los hay que
desgrananlascoleccionessobretablas,conunafilaporobjetoexclusivamenteyotros,que
permiten adems almacenar las colecciones en columnas blob, con gran rendimiento en
recuperacin o grabacin, pero lentos en la localizacin de un objeto contenido concreto
que satisface cierta condicin; los productos vistos mayoritariamente aprovechan la
capacidaddepropagacindelasactualizacionesdelRDBMSanfitrinenlasrelacionesde
composicin, y todos permiten ajustar la correspondencia en base las tcnicas expuestas.
VeamosaplicadaslastcnicasdeesteapartadosobreelejemplodelBanco.
cuenta
J DOID INTEGER
CODIGOCUENTA (O) VARCHAR(255)
DEBE (O) FLOAT
HABER
J DOCL
J D
movimiento
J DOID INTEGER
APUNTES_J DOID (O) (FK,IE1) INTEGER
FECHAOPERACION (O) DATETIME
(O) FLOAT
ASS (O) (IE1) VARCHAR(255)
FECHAVALORACION (O) DATETIME
IMPORTE (O) FLOAT
J DOCLASS (O) (IE2) VARCHAR(255)
J DOVERSION (O) (IE3) INTEGER
MOTIVO (O) VARCHAR(255)
OVERSION (O) (IE2) INTEGER
LIMITECREDITO (O) FLOAT
SALDO (O) FLOAT
clien_cartera
CARTERA_J DOID (O) (FK,IE1) INTEGER
J DOID (O) (FK,IE2) INTEGER
cliente
J DOID INTEGER
cuent_titulares
TITULARES_J DOID (O) (FK,IE2) INTEGER
J DOID (O) (FK) INTEGER
J DOCLASS (O) (IE1) VARCHAR(255)
J DOVERSION (O) (IE2) INTEGER
NIF (O) VARCHAR(255)

Figura9MapeodelasrelacionesdelasclasesdelBancoenRDBMSMySQL
La figura anterior muestra la representacin en tablas de las relaciones entre las
el banco aplicando las tcnicas B y A. Las relaciones entre Cliente y Cuenta,
das por los respectivos atributos cartera y titulares, son trasladas a sendas tablas
o la tcnica del apartado B (entidades azules), porque una misma cuenta puede
en la cartera de diferentes clientes, un cliente puede aparecer como titular de ms
cuenta y es posible, que una cuenta est en la cartera de un cliente no siendo ste
eesacuenta.Lastablasderelacinhansidonombradassiguiendoladenominacin
bre de tabla de la clase que contiene el atributo ms nombre del atributo. Las
asOID,enCUEN_TITULARESesclaveajenaaCUENTAyenCLIENT_CARTERA
ornea a CLIENTE, no son clave primaria en ambos casos; la columna
RES_JDOI es clave ajena de CLIENTE y APUNTES_JDOI, de CUENTA, ambas
clases d
expresa
aplicand
figurar
de una
titulard
del nom
column
clave f
TITULA
column n
origen.
pertene
aadien
APUNTES_O
estaaso
asson ominadasconelnombredelatributocoleccinensusrespectivasclasesde
La relacin composicin de Movimientos en Cuenta, donde cada Movimiento
ce a una nica Cuenta que lo contiene, se traduce con la tcnica del apartado A,
do a la tabla MOVIMIENTO, una columna clave ajena a CUENTA,
ID,quecontendrelvalordelaclaveprimaradelainstanciaCuentaalaque
ciadoelobjetomovimiento.
73
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

ailu
ms de
direcci
Falt strarlatcnicadelapartadoCdondeunamismatablaaglutinaobjetosde
una clase, veamos la traduccin a tablas de la clase Persona con su atributo
n.
Persona
-nombre:String
1 1
-apellidos:String
-nif:String
-direccion:Direccion
Direccion
-via:String
-num:int
-domicilio:Domicilio
-codpostal:CodigoPosta

Figura10ClasePesonayDireccion
public class Per sona
{
private St r i ng nombr e;
private St r i ng apel l i dos;
private Di r ecci on di r ecci on;
private St r i ng ni f ;
}

public class Di r ecci on
{
private St r i ng vi a;
pr i vat e i nt num;
private Codi goPost al
codpost al ;
}

CREATE TABLE `per sona` (


`CLASS` varchar( 255) default NULL,
`OI D` bi gi nt ( 20) NOT NULL default ' 0' ,
`VERSI ON` int( 11) default NULL,
`NOMBRE` varchar( 255) default NULL,
`APELLI DOS` varchar( 255) default NULL,
`NI F` varchar( 255) default NULL,

`DI RECCI ON_NULL` t i nyi nt ( 4) default NULL,
`VI A` varchar( 255) default NULL,
`NUM` int( 11) default NULL,
`CODPOSTAL_OI D` bi gi nt ( 20) default NULL,
PRIMARY KEY ( `OI D`) ,
FOREIGN KEY ( `CODPOSTAL_OI D`)
REFERENCES `codi gopost al ` ( `OI D`)
)

ejemplo para mostrar la importancia de la serializacin y la utilizacin de


campos blobs, cuando se representan objetos complejos y recursivos, se muestra en el
diagramadeFigura11quedefinenobjetosconectadosenunaestructuraderbol:

Listado13CorespondenciaClasePersonaqueembebeinstanciasdeltipoDireccion
El listado anterior ensea como la correspondencia escogida, proyecta la clase
Persona sobre la tabla del mismo nombre, incluye adems los atributos necesarios para
almacenar el estado de sus instancias Direccin, junto al resto del estado de Persona, sin
necesidad de usar otras tablas. Esta correspondencia de composicin donde las instancias
Direccin,sonembebidasencadaobjetoPersona,esindependientedequeclaseDireccin
seaobjetodeotrascorrespondencias.
Otro
74
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

75
1 nodo padre
nodo terminal
5
1
1..5
nodo padre
nodo hijo
Collectio
java.io.Serializab
ArrayOfObjec
-pVF:Vector
empty:boolean
java.io.Serializab
MyClass
i:int
d:double
string:String
strings:String[]
+MyClass
Figura11DiagramadeclasesdeunrboldecinconivelesycincohijossuequivalenteER.
En la anterior figura se aprecian que el atributo pVF de tipo Vector, es traslado a
unacolumnadetipoBlob,dondesealmacenaelrbolserializado,quependedelnodoraz
insertadocomofilaenlatablaarrayobject.
2.5. LaHerenciaenfilasyreunin(join)
]. Son
propuestas atendiendo a cmo son distribuidos los atributos sobre relaciones, tres modos
decorrespondenciapararepresentarunajerarquadeherenciasobretablas,:
A. Divisin Vertical. Cada clase en la jerarqua persiste en una tabla distinta,
en correspondencia uno a uno. Los atributos propios (no heredados) son
representados slo en las columnas de tabla correspondiente a la clase que los
declara.Deestaforma,unmismoobjetopodranecesitarpersistirsobremsdeuna
tabla,lastablasdesusancestrosylatabladesutipo.Laclaveprimariadelatabla
delaclaverazdelaherencia,eslaclaveajenaenlastablasdelosdescendientes.Es
elmodoqueseadaptamejoralmodelodeobjetos,incluidaherenciamltiple,yel
quemejormantenimientopresenta.Elproblemadeestafrmulaes,lapenalizacin
al rendimiento y a la concurrencia cuando, la jerarqua de herencia es profunda,
tres o ms niveles, pues son necesarias sentencias SQL con una reunin (join) de
todas las tablas implicadas. Este es el error clsico en la correspondencia clase
tabla, cuando los atributos de los objetos estn dispersos verticalmente en la
jerarqua, o los objetos pueden pertenecer a varias clases simultneamente. Es
apropiado utilizar la divisin vertical de la herencia, cuando la profundidad de la
jerarquaesbaja,ylosobjetosnorepresentandiferentespapelessimultneamente.
B. Divis ientes)enla
arrayofobject
J DOID INTEGER
J DOCLASS (O) (IE1) VARCHAR(255)
J DOVERSION (O) (IE2) INTEGER
PVF (O) LONGVARBINARY
jdo_sequence
ID TINYINT
SEQUENCE_VALUE (O) INTEGER
mycla_strings
J DOID (IE1) INTEGER
STRINGS_ORDER INTEGER
ELEMENT VARCHAR(255)
myclass
STRINGS_ORDER (FK) INTEGER
J DOID (FK) INTEGER
D (O) FLOAT
I (O) INTEGER
J DOCLASS (O) (IE1) VARCHAR(255)
J DOVERSION (O) (IE2) INTEGER
STRING (O) VARCHAR(255)

Al igual que sucede con las relaciones entre clases, cmo sea definida la
correspondenciadelaherenciaentreobjetos,tieneunmarcadoimpactoenelrendimiento,
en particular, las sentencias SQL de reunin para obtener los valores de los atributos
heredados. Las referencias [16], [32], [41] coinciden en el planteamiento, que tiene su
fundamento, en las propuestas de J. Rumbaugh y M. Blaha, en su mtodo OMT [30
inHorizontal.Cadaclaseconcretaterminal(sindescend
jerarqua, le corresponde una tabla que contiene todos los atributos, heredados y
propios,paralosatributosredefinidossonaadidasnuevascolumnasadecuadasal
tiporedefinido.Ofreceunbuenrendimientopuessolohayqueaccederaunafila,
pero una pobre adaptabilidad al cambio en la estructura. El soporte del
polimorfismo requiere el trasvase de datos y conseguir la integridad con herencia
mltipleescomplicado.
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

istente atributos cuyo tipo es redefinido en las subclase son


introducidas nuevas columnas adecuadas al tipo redefinido. La clase a la que
pertenece un objeto, es determinada por una columna que hace de selector o
discriminadordetipo.Elmodelodeidentificacinpropuestomsatrs,sirvepara
determinareltipootiposactualesdeunobjeto.Elrendimientoeselevado,unafila
ounobjeto.Permiteelsoportedeherenciamltipleconlacodificacinadecuada.
Veamos un ejemplo aplicado de las tcnicas descritas de correspondencia de la
herencia. El siguiente diagrama de clases, muestra la relacin de herencia ser traducida
concadaunadelastcnicasexpuestas,ayudandoailustrarelcriterioparaelegirlaeleccin
msadecuadaenlaprctica.
C. Divisinportipos.Todaslasclasesdeunajerarqua,sonproyectadassobre
una nica tabla, todos los distintos atributos presentes en la jerarqua tienen su
columna, cuando ex
1 1
1
1
Direccion
-via:String
-num:int
-codpostal:CodigoPosta
CodigoPosta
-codigo:String
-provincia:int
Edificio
-escalera:int
-planta:int
-puerta:int
Organizacion
-nombre:String
-departamento:String
-domiciliointerno:Direccion
Residencia
-planta:int
-seccion:String
-habitacion:int
Proveedor
-razonsocial:String
-direccion:Direccion
Urbanizacion
-Parcela:int
-nombre:String
-numero:int
Persona
-nombre:String
-apellidos:String
-nif:String
-direccion:Direccion

Figura12DiagramadeclasesdeDireccin
La clase Direccin es una clase abstracta, no puede construir instancias, sirve para
compartir el cdigo de las subclases y permite que las clases cliente Persona y Proveedor
utilicen una referencia polimrfica a objetos Edificio, Residencia, Urbanizacin u
Organizacin. La clase Direccin se debe indicar que es persistente, pese a ser abstracta,
pues Direccion debe persistir su atributo domicilio. Los productos necesitan esta
informacin para construir el esquema de traduccin. Veamos una primera traduccin de
en relaciones, empleando la divisin por tipos, elegida porque nunca
mutar de un tipo a otro, o mostrar dos papeles, los tipos son
exclusiv
la jerarqua anterior
una misma instancia
os.
76
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

jdo_sequence
PK ID TINYINT
SEQUENCE_VALUE INTEGER
persona
PK JDOID INTEGER
APELLIDOS
I2 J DOCLASS
VARCHAR(255)
VARCHAR(255)
I3 J DOV
NIF
ERSION INTEGER
VARCHAR(255)
NOMBRE VARCHAR(255)
codigopostal
PK JDOID INTEGER
CODIGO VARCHAR(255)
I1 J DOCLASS VARCHAR(255
I2 J DOVERSION INTEGER
)
PROVINCIA INTEGER
proveedor
PK JDOID INTEGER
I2 J DOCLASS VARCHAR(255)
I3 J DOVERSION INTEGER
RAZONSOCIAL VARCHAR(255)
direccion
FK2,I1 CODPOSTAL_J DOID INTEGER
DEPARTAMENTO VARCHAR(255)
FK1,I2 DOMICILIOINTERNO_J DOID INTEGER
ESCALERA INTEGER
HABITACION INTEGER
I3 J DOCLASS VARCHAR(255)
I4 J DOVERSION INTEGER
NOMBRE VARCHAR(255)
NOMBRE1 VARCHAR(255)
NUM INTEGER
NUMERO INTEGER
PARCELA INTEGER
PLANTA INTEGER
PLANTA1 INTEGER
PUERTA INTEGER
SECCION VARCHAR(255)
VIA VARCHAR(255)
J DOID INTEGER

Figura13CorrespondenciadeDireccinsegnmtododedivisinportipo.
En la figura anterior vemos como se aprovecha la capacidad del RDBMS, para
asegurar la integridad referencial con claves ajenas. El otro aspecto que destaca es la
presencia de las columnas nombre, nombre1, correspondientes con los atributos
denominados nombre en Organizacin y Urbanizacin respectivamente, y las columnas
plantayplanta1quecorrespondenconelatributoplantadeEdificioydeResidencia.
jdo_sequence
PK ID TINYINT
SEQUENCE_VALUE INTEGER
organizacion
PK,FK1 JDOID INTEGER
DEPARTAMENTO VARCHAR(255)
FK2,I1 DOMICILIOINTERNO_J DOID INTEGER
NOMBRE VARCHAR(255)
persona
PK JDOID INTEGER
APELLIDOS VARCHAR(255)
FK1,I1 DIRECCION_J DOID INTEGER
I2 J DOCLASS VARCHAR(255)
I3 J DOVERSION INTEGER
NIF VARCHAR(255)
NOMBRE VARCHAR(255)
codigopostal
PK JDOID INTEGER
CODIGO VARCHAR(255)
I1 J DOCLASS VARCHAR(255)
I2 J DOVERSION INTEGER
PROVINCIA INTEGER
proveedor
PK JDOID INTEGER
FK1,I1 DIRECCION_J DOID INTEGER
I2 J DOCLASS VARCHAR(255)
I3 J DOVERSION INTEGER
RAZONSOCIAL VARCHAR(255)
direccion
PK JDOID INTEGER
FK1,I1 CODPOSTAL_J DOID INTEGER
I2 J DOCLASS VARCHAR(255)
I3 J DOVERSION INTEGER
NUM INTEGER
VIA VARCHAR(255)
residencia
PK,FK1 JDOID INTEGER
HABITACION INTEGER
PLANTA1 INTEGER
SECCION VARCHAR(255)
urbanizacion
PK,FK1 JDOID INTEGER
NOMBRE1 VARCHAR(255)
NUMERO INTEGER
PARCELA INTEGER
edificio
PK,FK1 JDOID INTEGER
ESCALERA INTEGER
PLANTA INTEGER
PUERTA INTEGER

Figura14CorrespondenciaverticaljerarquadeherenciaDomicilio
La correspondencia producida por divisin vertical, resulta en relaciones
normalizadasenterceraformanormal(3FN).Nohayredundancia,yesposibleaprovechar
la integridad referencial ofrecida por las bases de datos relacionales. El esquema fsico de
relacionesesparaleloalajerarquiadeherencia,laregladeunoaunovistasecumple.Esta
tcnicaofrecelamayorflexibilidadalamodificacineincorporacindeatributos.Elmayor
77
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

escollo se produce, si la jerarqua de herencia tiene varios niveles, entonces se penaliza el


rendimiento,debidoalnmerodetablasenlazadasenlasentenciaSQLderecuperaciny
actualizacindeunobjeto,
J DO_SEQUENCE
PK ID FLOAT
SEQUENCE_VALUE FLOAT
ORGANIZACION
PK JDOID FLOAT
FK1,I1 CODPOSTAL_J DOID FLOAT
DEPARTAMENTO VARCHAR(255)
DOMI_STRJ DOID VARCHAR(255)
I2 J DOCLASS VARCHAR(255)
I3 J DOVERSION FLOAT
NOMBRE VARCHAR(255)
NUM FLOAT
VIA VARCHAR(255)
URBANIZACION
PK JDOID FLOAT
FK1,I1 CODPOSTAL_J DOID FLOAT
I2 J DOCLASS VARCHAR(255)
I3 J DOVERSION FLOAT
NOMBRE VARCHAR(255)
NUM FLOAT
NUMERO FLOAT
PARCELA FLOAT
VIA VARCHAR(255)
PERSONA
PK JDOID FLOAT
APELLIDOS VARCHAR(255)
DIR_STRJ DOID VARCHAR(255)
I1 J DOCLASS VARCHAR(255)
I2 J DOVERSION FLOAT
NIF VARCHAR(255)
NOMBRE VARCHAR(255)
CODIGOPOSTAL
PK JDOID FLOAT
CODIGO VARCHAR(255)
I1 J DOCLASS VARCHAR(255)
I2 J DOVERSION FLOAT
PROVINCIA FLOAT
PROVEEDOR
PK JDOID FLOAT
DIR_STRJ DOID VARCHAR(255)
I1 J DOCLASS VARCHAR(255)
I2 J DOVERSION FLOAT
RAZONSOCIAL VARCHAR(255)
EDIFICIO
PK JDOID FLOAT
FK1,I1 CODPOSTAL_J DOID FLOAT
ESCALERA FLOAT
I2 J DOCLASS VARCHAR(255)
I3 J DOVERSION FLOAT
NUM FLOAT
PLANTA FLOAT
PUERTA FLOAT
VIA VARCHAR(255)
RESIDENCIA
PK JDOID FLOAT
FK1,I1 CODPOSTAL_J DOID FLOAT
HABITACION FLOAT
I2 J DOCLASS VARCHAR(255)
I3 J DOVERSION FLOAT
NUM FLOAT
PLANTA FLOAT
SECCION VARCHAR(255)
VIA VARCHAR(255)

Figura15TablasparalasclasesdeDireccionusandodivisinhorizontal.
En la divisin horizontal los atributos heredados y propios son colocados en una
mismatabla,resultamuyeficazelaccesoalosdatos.Laprincipaldesventajadeestatcnica
dedivisinhorizontal,essupeorflexibilidadalcambio,frentelamodificacinoadicinde
atributosalasclases,porqueobligaarevisartodaslasrelaciones.Otroelementopatentees
la imposibilidad para aprovechar la integridad referencial, como en la figura anterior, las
clases Proveedor y Persona no concretan una relacin de claves ajenas, el servicio de
persistencia responde de la integridad de los vnculos. En este ejemplo, basado en el
productodeSolarmetric,KODO,lasentidadescliente,PersonayProveedor,incluyenuna
columna DIR_STROID, que contiene el identificador persistente y el tipo del objeto
asociado, as resuelve el polimorfismo con referencias persistentes y la integridad
referncial.
2.6. DetablasaClases
Aunque estemos ms interesados en la prctica de convertir objetos en tplas,
tambin es necesario, al menos, introducir brevemente cmo transformar tablas en clases.
Laideaesencialeslamismavistacuandoseproponalaequivalenciaenelsentidoclasea
tabla, para cada tabla se crea una clase que representa la tabla dentro del modelo de
objetos. El proceso es aplicar las reglas vistas en los apartados anteriores a la inversa,
comenzandoporasociaracadatablaunaclase,cadacolumnadelatablaconunatributoen
laclase,aprovecharlasclavesajenasparadefinirlasclasesdeasociacinylosatributosde
referencia,yhacercorresponderlasclavesprimariasconatributosquepreservanlamisma
propiedad de servir de identificador de los objetos. Una posibilidad para mantener la
78
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

correspondencia jetostipoMap,
utilizados estos regacin y la
composicin.
las capacidades del RDBMS para ofrecer
distinta
2.7. Resu
e
contener la imagen
transformasegntres
formula
acidades para la actualizacin, rapidez de
acilidad de mantenimiento y continuidad. Dependiendo del caso,
quemsseajustelasnecesidadesconcretasdelcasoreal.

entreclavesprimariasyreferenciasaobjetosesemplearob
para los atributos de referencia entre clases para la ag
Es habitual que de esta forma, se concrete un modelo de objetos vaco de
funcionalidad,sinapenascomportamiento.Siemprequeseaposible,sedebenmodificarlos
esquemas de tablas existentes, para lograr un modelo de objetos con funcionalidad y
sentido en la lgica del negocio, aprovechando
svisionesdedatos,yconlaaplicacindeciertospatronesdediseo,comoelBridge
y el Proxy [13][18]. El mayor problema son los sistemas legados, en ocasiones, impiden
podermodificarelesquemadetablas,paraseradaptadoparapersistirobjetos.
men
Enestecaptulosehapresentadolastcnicasbsicasparatransformarlasclasesen
tablas, ilustrando cada caso con un ejemplo prctico. La esencia del proceso consiste en
correspondercadacadaclaseconunatablaprincipal,cadaatributoconunacolumna,cada
referencia o coleccin de referencias de las relaciones d agregacin o composicin, con
claves ajenas, tablas de asociacin, o columnas con capacidad para
serializadadeobjetos,tiposblob(binarylargeobject).Laherenciase
s:aunatablabasequecontienetodoslosatributosyunacolumnadiscriminadorde
tipo final de los objetos representados; una jerarqua de tablas paralela a la jerarqua de
herencia; o un conjunto de tablas, una por subclase terminal con los atributos propios y
heredados.
Cada alternativa ofrece diferentes cap
acceso, concurrencia y f
serescogidalafrmula
En mi humilde opinin, el proceso de transformar objetos a filas, no hay que ser
dogmtico,niforzarlasemnticaenningunodelosextremosdelatraduccindeobjetosa
filas, y aprovechar las ventajas y capacidades de cada mundo el de las clases y el de las
gestoresdebasesdedatosrelacionales.

79
Capt ul o 3
Des m
objetos Java. La
restodeltrabajo
En este
versin 1.0.1 [51
persiste
jetivos,principaleselementosysusituacinalafechadeserescritoestecaptulo.La
segund
.
icacin[51]yendoslibrosde
idntico
3.1. JDO
instanciastienenquepersistir,yespecificaloscontratosentreproveedoresdeclasesconcapacidadde
JDO.
JAVA DATA OBJ ECTS
de ayode2002hasidopropuestocomonuevoestndardepersistenciapara
especificacin Java Data Objects (JDO), que ser el foco de atencin del
,elanlisisdeJavaDataObjects.
captulo, se describe la especificacin del estndar Java Data Objects,
], con un nivel de detalle acorde al propsito de analizar este estndar de
ncia, bajo la perspectiva del marco que definen los requisitos considerados en el
primer captulo, para ello, el captulo esta organizado en dos secciones. La primera
presentadeformabreveunavisingeneraldeJDO,quepermiteconocerlaespecificacin,
susob
a seccin desgrana los detalles de la especificacin con la profundidad adecuada
para discutir su nivel de conformidad con el marco de requisitos, utiliza la ilustracin de
unapequeaaplicacincuyosobjetosdebenpersistirconJDO,yseguidamenteseexponen
los entresijos de JDO, de forma clara y concisa con el objeto de permitir discutir, ms
adelante, sobre sus cualidades y sus debilidades, sobre su congruencia con el
planteamientoelaboradomsatrsdecmoresolverlapersistencia
Elcaptuloseapoyaenlostextosdelapropiaespecif
ttulo, Java Data Objects uno de R. Roos [29] y el otro de los reconocidos C.
Russell, lider de la especificacin, y D. Jordan [16], miembro del comit experto, en este
ltimolibroseemplealamismaideadetomarunaaplicacincomovehculoqueintroduce
enelestudio,compresinyanlisisdeJDO
3
.
avistadepjaro
La especificacin Java Data Objects (JDO) es el estndar de la comunidad Java que define
lasinterfacesyclasesparamanejarlasclasesdeldominio(objetosdenegocioydeaplicacin),cuyas
perdurarsusinstancias,yelentornodeejecucinqueespartedelapropiaimplantacinde
JDO no es una propuesta para definir un OODBMS. JDO quiere ser el estndar
parainteractuarconlossistemasdegestindedatosposibilitandounavisindelosdatos
consistente y uniforme, constituida por objetos Java, con independencia del sistema de
gestindedatosdondelosdatosresidan.
JDO no es un servicio de persistencia. Es la especificacin de cmo los
programadoresvenunmodelodeserviciosdepersistenciacontransparenciadedatos.JDO
eslapartevisibledelunsistemacomplejoqueesunserviciodepersistencia.
JDO resume en unas interfaces de programacin los servicios necesarios para
alcanzar la persistencia de objetos Java sobre distintos sistemas de gestin de datos, de
forma uniforme, sin necesidad de conocer los mecanismos de persistencia realmente

3
Hacernotarqueelplanteamientodeldirectordeproyectotresaosantesdeescribirestecaptulo,era
presentarunaaplicacinsobrelaquedescribirlosdistintoselementosqueconstituyenlafuncionalidad.Azaresde
la vida han querido que la edicin del libro de David Jordan y Craig Russell, y la redaccin de estas lneas sean
contemporneas.
81
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

utilizad
rio
necesar
3.1.1.
sesencialesdelaespecificacinJDOsondos:Proporcionarsoporteala
persiste
ientodedatos,queseacapaz
egre con los servidores de
aprovechandosusservicios.
qu
temas de gestin de datos, que son empleados en el sostenimiento de los
almacen
in con los entornos de servidores de aplicaciones, definiendo los
contrato
lgicadenegocioyde
present
,laJDOSPI.Estos
sernco
3.1.2.
por las
implementac
os. Y as pues, que no sea necesario escribir cdigo de persistencia para la
infraestructuradeaccesoalosmecanismosdepersistencia.
LatransparenciadedatosdeJDO,nonecesitaalterarlosfuentesJava,perorequiere
de la definicin de la correspondencia datosobjetos y la inclusin del cdigo bina
ioenlasclasescuyosobjetossernpersistentes.
JDO propone elusode lameta informacin necesaria enficherosXML, separados
del cdigo, y la posibilidad del usoun procesador (postprocesador) de clases compiladas,
para alcanzar un buen nivel de persistencia ortogonal asegurando la transparencia de
datos.
ObjetivosFundamentales
Losobjetivo
ncia de objetos Java, que representan objetos de negocio y datos de aplicacin,
ofreciendo a los programadores una perspectiva centrada en Java de la informacin
persistente,deformatransparenteeindependientedelsistemagestordedatos.Yfacilitar
larealizacindeimplementacionesdeaccesoalossistemasdegestindedatosquepuedan
ser integradas en los servidores de aplicaciones de empresa Java [51] [16] [29]. Dicho de
otra forma, Persistencia Java Transparente, Neutral, Escalable e Integrable, persistencia
transparenteneutralrespectoaltipodesistemadealmacenam
de procesar cargas de trabajo importantes y que se int
aplicacionesJava
JDO iere ofrecer una solucin al problema de la persistencia Java, que presenta
unanicavisindelosdatospersistentes,consistenteconelmodelodeobjetosJava,donde
no es necesario conocer cada uno de los lenguajes de acceso a datos, impuestos por los
diferentes sis
esdedatos.LoscomponentesdeaplicacinconJDOpercibenunavisinJavade
losdatosorganizadosenclasesconrelacionesycoleccionesdeconstruccionesnativasJava,
un modelo de informacin que es un modelo de objetos Java. Adicionalmente JDO
considera, la integrac
s entre el servidor de aplicaciones y la implantacin de JDO, para facilitar un uso
transparente de los mecanismos ofrecidos por los servidores de aplicaciones como son, la
distribucinycoordinacindetransacciones,laseguridad,ylagestindelaconexin.De
estaformalosprogramadorescentranelesfuerzodedesarrolloenla
acin,despreocupadosporlascuestionesdeconectividadyaccesoalossistemasde
datosconcretos.
JDO definedos tipos de interfacesagrupados en sendos paquetes: una interfazde
programacinaplicaciones(API)dirigidoalosprogramadoresdeaplicaciones,laJDOAPI,
yotro,paralosfabricantesdecontenedoresdedatoseimplementaciones
mentadosenlasseccionesposteriores.
Entornosdeejecucinobjetivo
Dos son los entornos de ejecucin que deben ser soportados
ionesdeJDO:
Entornos no administrados, entornos locales o de arquitectura en dos
capas.Estemododeejecucintratalapersistenciatransparente,ocultando
a los componentes de aplicacin las cuestiones especficas para localizar,
obtener y guardar objetos con un servicio de informacin de empresa
82
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

la
problem
sejecutadasenelordenadorde
escritoriooeltelfonomvilJava,aplicacionesdeconsolayapplet,quepresentandatosde
l mbito de la aplicacin y de los datos concierne al sistema
in,conindependenciadelosdatosseanlocalesalsistemade
ejecucinoremotosenlosalmacenesdedatosdeempresa.Estaformadetrabajarrequiere
que la
este entorno se
brindan distintos modelos de aplicacin, que segn que alternativa sea escogida, la
automticagestionadaporelservidordeaplicaciones
P) o mediante la interfaz javax.jdo.PersistenceManager,
adems
licaciones es ms compleja
deentenderyutilizar,peropreparalaaplicacinanteelaumentooescaladadelacargaa
acometer. Es un modo de operar cada vez ms usado por los servicios Web que se
desplieganconelconcursodeservidoresdeaplicacionesJ2EE.
3.1.3. Capacidaddelasclasesparapersistir.ProcesadordecdigoJava
Las clases cuyas instancias pueden ser persistentes, deben incorporar el cdigo
necesario para hacer efectiva la magia de la persistencia transparente, esto supone, o bien
queelprogramadoraadeelcdigoprecisoparamaterializarlacapacidaddepersistir,oes
utilizada una herramientaqueample, extienda el cdigo originalfuente o compilado con
las modificaciones precisas, evitando al programador este importante esfuerzo. La
especificacin JDO propone la figura del procesador de clases en cdigo ejecutable java,
Enhancer, que es un programa que modifica los archivos compilados de las clases,
aadiendo el cdigo ejecutable necesario para efectuar grabacin y recuperacin
transparentedelosatributosdelasinstanciaspersistentes.Deestaformadesdeelpuntode
vistadelprogramadorsoloaadeunaetapamsasuciclodedesarrollo,laextensindelas
clasespersistentes.
JDOpretendequelamayoradelasclasesescritasporlosprogramadorespuedan
ser persistentes, que los objetos pertenecientes a clases concretas definidas por el
programador puedan perdurar su estado, con la nica limitacin de que el estado
persistente de las instancias a perdurar, este compuesto por los atributos persistentes que
sean independientes del contexto de ejecucin: tipos primitivos, tipos de referencia e
interfazyalgunasclasesdelsiste te,).
concreto(EIS).LasaplicacionesinteraccionanconunavisinJavanativade
clases que representan los datos de los servicios de EIS (bases de datos,
sistemasCRM,ERP,...).
Entornos administrados, usados en servidores de aplicaciones o
arquitecturas de tres o ms capas. Las aplicaciones dirigidas a estos
entornos adems de la persistencia transparente, disponen de la
transparenciadelosserviciosofrecidosalasaplicaciones,porlossistemas
de servidor de aplicaciones Java, servicios relativos a transacciones,
seguridad,conexiones,etc.EstemodoutilizalaarquitecturaJ2EEConector.
El resultado en ambos casos pretende ser que las aplicaciones consigan ignorar
ticadelaconectividadconunEISespecficoyunmarcodedesarrollosencillode
usar.
Elentornodedoscapasestpicodelasaplicacione
archivos y bases de datos, e
dondeesejecutadalaaplicac
aplicacin conozca, para lograr la persistencia, de objetos los interfaces
javax.jdo.PersistenceManageryjavax.jdo.spi.PersistenceCapable.
El entorno de servidores de aplicaciones al que JDO esta adaptada, es Enterprise
Java Beans (EJB) utilizando para ello la arquitectura J2EE Conector. En
aplicacindispondrdepersistencia
(Container Manager Persistente, CM
de disponer de los servicios de transaccin, seguridad y conexin ofrecidos por
todo servidor de aplicaciones J2EE. Esta forma de construir ap
maquemodelanestado(Array,Da
83
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

de
cdigo
o el depsito de datos es una base de datos relacional u otro EIS no
basadoenobjetos.LaespecificacinJDOnoestablececmoelmapeoobjetodatosdebeser
realizado. Es una cuestin abierta al planteamiento que adopte, quien proporciona la
implementacin para acceder a un sistema gesto de datos concreto. La nueva versin de
JDOendesarrolloespecificare ssistemasdebasesde
srelacionales.
dodiseadaparaquefabricantesdesistemasgestoresdedatos,sistemas
s beneficiarios de su aceptacin. Los
,...) que implementen las interfaces
n un acceso de datos estandarizado que podra ser usado por cualquier
e use JDO. Los componentes de aplicacin diseados para
aptarseparaaccederacadasistemadedatos,podrnacceder
oslossistemasqueimplementenlaespecificacinJDO.
3.1.4.
ar desde el 25 de Marzo de 2002 habiendo seguido la
estandarizacin abierta del programa de Java Community
l status de estndar por 10 votos a favor sobre 12 y
presasquevotaronafavorfueronSunMicrosystems,IBM,HP,
etworks, CISCO, Fujitsu BEA, Macromedia y Oracle. Apache y
es antes de ser consideradas completas, deben demostrar
prctica, mediante una implementacin de referencia y unas bateras
uebasdeconformidad,quesondisponibleslibrementeen[51].
Habiendo sido adoptado como estndar, el proceso de revisin para alcanzar y
gunosdelasempresasdemayor
os y servicios de aplicacin, han
aldo al estndar, caso de Sysbase, Informix, Versant, Poet (hoy
SAP,IONA,SoftwareAG,Rational,Oracle,Ericsson.
Elpasadoao2003hemosasistidoalcrecimientodelnmerodeparticipesenesta
es el portal ww.jdocentral.com, con ms de
documentacin,noticias,forosde
cenadeproductoscomerciales(Genei,Solarmetric,
isphere,)ydecdigoabierto,(YakartaOJB,XORM,JPOX,TJDO,Speedo).
El21deagostodel2003,cincodelosfabricantesdeimplementacionescomerciales
rtos ms reconocidos de JDO, entre otros
de las compaas Oracle y SAP,
JDO a la versin 2.0. Esta
erdaderopuntodeiniciodesdeelquesehapromovidola
La frmula consignada para indicar qu clases y atributos de stas sern
persistentes, es utilizar un fichero de configuracin XML, el descriptor de persistencia,
cuya meta informacin es usada para, el pre o post procesamiento con el procesador
yentiempodeejecucinparalograrlapersistenciadelosestadosdelosobjetos.
Adems de introducir la funcionalidad, para que las instancias de las clases con
capacidad de persistir puedan perdurar en los sistemas gestores de datos, es necesario,
establecerlacorrespondenciaentrelosobjetosysuestadopersistente,proyectarlosobjetos
como datos, cuand
r
lmapeoentreobjetosydatosparalo
dato
JDOhasi
de acceso a datos y desarrolladores Java sean lo
es de EIS (bases de datos, sistemas CRM, ERP fabricant
de JDO, ofrecera
componente de aplicaciones qu
usarJDO,notendranquead
atod
Estadoactual
JDO es un estnd
formalizacin del proceso de
ocess2.1. Pr
La especificacin alcanz e
ningunoencontra.Lasem
q, Apple, Nokia N Compa
Calderanovotaron.
Todas las especificacion
que funcionan en la
depr
resolvernuevosrequisitosyasehainiciadoenel2003.Al
cia en el panorama de la sistemas gestores de dat relevan
anunciado su apoyo y resp
partedeVersant),
nueva tecnologa, cuyo punto de encuentro
15.000miembrosactivos.Esteportalpodemosencontrar
discusinyalmenosdisponibleunado
Hem
de JDO de ms xito, algunos pocos de los expe
eadores, gente del cdigo abierto, y representantes sus cr
mantuvieron un encuentro para discutir sobre la evolucin de
reuninnooficialconstituyeelv
84
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

isin de la especificacin java JDO, que deber ser aprobada en su


ansidodiscutidaslasnuevasfuncionalidadesquedeberincorporar
turoJDO,sinperdervistalosobjetivosinicialessalvoeldecompatibilidadbinaria,
den funcionalidad para estandarizar el
y comportamiento, la
marias, la posibilidad de consultas de
previa deobjetos, el uso de las conexiones para ejecucin de
, funcionalidades pensadas para el uso en aplicaciones Web,
codificacinautomticadelosidentificadoresdeobjetosparafacilitarsuusocomo
conseguir la persistencia
deusoysimplicidadquecaracterizaaJDO.
, se inici el proceso de revisin JSR243 Java Data Objects
to2004finalizelplazode
ndeJDO.
3.2. JDO
EnestepuntoseiniciaunainmersinenJDOconcdigoJAVAdeunaaplicacin
a es llamar a la atencin sobre las estructuras, la forma de usar y los
uce JDO, en la manera de hacer programas Java con persistencia, para
Oyas,comprobarquaspectos
delmarcodelcaptuloprimerosoncubiertosycualesno.
3.2.1. o
se basa en la ilustracin del Banco utilizado en el primer
yomodelodeobjetosapareceenlasiguientefigura.
peticin formal de rev
Enestareuninh da.
enelfu
los cambios impulsados en este encuentro aa
mapeo a las bases de datos relacionales, su representacin
incorporacin a las consultas de funciones su
eliminacin sin recuperacin
ncias en bases de datos sente
comola
parmetros en URL, y otros muchas m
ntedeobjetosJava,conlafacilidad
s que redundan en
transpare
En transcurso del 2004
2.0,conlosvotosencontradeIBM,OracleyBEA.El7deagos
revisinpblicadelborradorinicialdelarevisi
BAJOLOSFOCOS
de ejemplo, la ide
od cambios que intr
seguidamentemostrarJDO,revisarlaespecificacindeJD
delosrequisitos
JDOatravsdeunejempl
La aplicacin ejemplo
captulocu
1..* 1..*
1..* 1
1..* 1..*
Movimiento
Cliente
#nif:String
#cartera:HashSet
+Cliente
+toString:Strin
+jdoPreDelete:void
g
PreClear:void
teraElimimable:bo
+jdoPostLoad:void
+jdoPreStore:void
+jdo
+car
+addCuenta:void
NI
+Movimiento
+toString:String
motivo:String
uble
acion:Date
importe:do
fechaValor
fechaOperacion:Date
F:String
Cuenta
#debe:double
#apuntes:HashSet
#haber:double
+Cuenta
+aperturaCuentaNuevoClient
+cargo:boolean
+abono:boolean
+refundirMovimientos:void
#anotaMovimiento:void
+toString:String
+jdoPreDelete:void
+jdoPreClear:void
+getApuntes:Collection
+setApuntes:void
+jdoPostLoad:void
+jdoPreStore:void
codigocuenta:String
saldo:double
limiteCredito:double
titulares:HashSet

16DiagramadeClasesdelBanco Figura
85
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

unasecuenciadeoperacionesparacrearuncliente,una
actualicenlasinstanciasdeCuenta,comofuevistoenel
asdeestasclasesdebenperdurar,serpersistentes.
java correspondientes al modelo de objetos de la figura anterior,
iones sobre instancias de las clases Cliente, Cuenta y
texto fuente de estas clases y que cambios implica JDO. Como
los ha sido utilizada la implementacin de referencia de

class Cl i ent e
Ser i al i zabl e
;
t val ue of t he NI F pr oper t y
I F( )
urn ni f ;

NI F pr oper t y
car t er a pr oper t y.
val ue of t he car t er a pr oper t y
Laaplicacinvaaefectuar
cuentayalgunosmovimientosque
primercaptulo,peroaqulasinstanci
Las clases
codifican las relaciones y las operac
Movimiento. Veamos el
plataforma para probar los ejemp
JDO(JDORI)[16].

Listado14ClasesClienteyCuentaoriginal
/ **
* Cl i ent e
* Ver si on 0. 2
* Mar zo 2002
* Copyr i ght J uan Mar mol Tr abaj o f i n de car r er a
*/
package banco;
import j ava. i o. Ser i al i zabl e;
import j ava. ut i l . HashSet ;
import j ava. ut i l . I t er at or ;
/ **
* Cl i ent e del banco
* @aut hor j uan mar mol
* @ver si on 0. 2
* @si nce Mar zo 2002
*/
public
implements
{
/ **
nt e * I dent i f i caci n del cl i e
*/
protected St r i ng ni f ;
/ **
* @l i nk aggr egat i on
/ *
protected HashSet car t er a

public Cl i ent e( )
{
}
/ **
* Access met hod f or t he NI F pr oper t y.
* @r et ur n t he cur r en
*/
ic St r i ng get N publ
{
ret
}
/ **
* Set s t he val ue of t he NI F pr oper t y.
e of t he * @par amunNI F t he new val u
*/
public void set NI F( St r i ng unNI F)
{
ni f = unNI F;
}
/ **
t he * Access met hod f or
*
r ent * @r et ur n t he cur
*/
public HashSet get Car t er a( )
Nohaymtodosdeaccesoadatosenellenguaje
delsistemadondepersistenlasinstancias
No hay que importar mdulos de jdo,
en las clases persistentes. Solo en las
que las manejan las operaciones dela
APIJDO.
ElestadopersistenteJDOdeunainstanciaesta
alor de sus campos. El valor
e depender de de
otos ligados a la
e
definido por el v
de los campos no pued
objetos inaccesibles o rem
jecucinnicadelprograma.
86
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

t s t he val ue of t he car t er a pr oper t y.


ar amunaCar t er a t he new val ue of t he car t er a pr oper t y
ar t er a)
nst anci a Cl i ent e como cadena de car act er es
t a) i t . next ( ) ;
rn st r ;

;
a suma de l os movi mi ent os de l a cuent a
i ent os de l a cuent a
os movi mi ent os de l a cuent a
mi t e de cr edi t o concedi do par a est a cuent a
e

nal i t y 0. . *
tected Col l ect i on apunt es;
{
return car t er a;
}
/ **
Se *
* @p
*/
ic void set Car t er a( HashSet unaC publ
{
aC r a; car t er a = un ar t e
}
/ **
* Ret or na l a i
* @r et ur n St r i ng Cl i ent e como cadena
*/
public St r i ng t oSt r i ng( )
{
r i ng( " Cl i ent e: " + get NI F( ) + " \ n" ) ; St r i ng st r = new St
I t er at or i t = get Car t er a( ) . i t er at or ( ) ;
e ( i t . hasNext ( ) ) { whil
Cuent a cu = ( Cuen
st r . concat ( cu. t oSt r i ng( ) + " \ n" ) ;
}
u ret
}
/ **
* Cuent a
* Ver si on 0. 2
* Mar zo 2002
yr i ght J uan Mar mol Tr abaj o f i n de car r er a * Cop
*/
package banco;
rt j ava. ut i l . Cal endar ; impo
import j ava. ut i l . Col l ect i on
import j ava. ut i l . Dat e;
import j ava. ut i l . HashSet ;
import j ava. ut i l . I t er at or ;
/ **
* Cuent a
* @ver si on 0. 2
* @aut hor j uan mar mol
* @si nce Mar zo 2002*/
class Cuent a public
{
/ **
* I dent i f i caci n de l a cuent a
*/
ected St r i ng codi gocuent a; prot
/ **
Sal d de l a cuent a. Ref l ej a l * o
*/
otected double sal do; pr
/ **
* Acumul ado car gos. Ref l ej a l a suma de l os movi m
*/
ected double debe; prot
/ **
Acumul ado abonos l a cuent a. Ref l ej a l a suma de l *
*/
otected double haber ; pr
/ **
* Li
*/
protected double l i mi t eCr edi t o;
/ **
* @l i nk aggr egat i onByVal u
@associ at es Movi mi ent o *
* @suppl i er Car di
/ *
pro
/ **
* @l i nk aggr egat i on
* @associ at es banco. Cl i ent e
El estndar establece como obligatorio el
soporte de algunos de los tipo coleccin, el
resto opcionales a eleccin del fabricante
JDO.
Las relaciones entre objetos son
relacionesnativasJava.
87
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

l del cl i ent e
r mat o l egal
l apunt e de aper t ur a
i t o segun l a cl asi f i caci n de r i esgo del
c void
e
)
t NI F( ni f ) ;
a( ccc) ;
e( ) ;
;
o de cuent a anot ando l os det al l es de l a oper aci n
par amcant i dad i mpor t e del car go > 0
n ot r o caso
e cant i dad, St r i ng mot i vo, Dat e f echaVal or )
r edi t o) ) {
vo, f echaVal or ) ;

t i dad;
;
ono
abono
abono
par amval or f echa val or
ar go, f al se en ot r o caso
val or )
return false;
* @suppl i er Car di nal i t y 1. . *
* @cl i ent Car di nal i t y 1. . *
*/
tected pro HashSet t i t ul ar es;

lic Cuent a( ) pub
{
codi gocuent a = new St r i ng( ) ;
sal do = 0;
l i mi t eCr edi t o = 0;
t i t ul ar es = new HashSet ( ) ;
new apunt es = HashSet ( ) ;
}

/ **
* Asi gna l os dat os par a una nueva cuent a
* @par amni f Numer o de I dent i f i caci on Fi sca
* @par amccc Codi go Cuent a Cl i ent e Asi gnado segun f o
* @par amapor t aci on I mpor t e en EU de l a apor t aci n de
* @par aml i mcr edi t o Li mi t e de Cr ed
cl i ent e
*/
publi aper t ur aCuent aNuevoCl i ent e( St r i ng ni f , St r i ng ccc,
doubl apor t aci on,
double l i mcr edi t o
{
synchronized ( this) {
l i ent e = new Cl i ent e( ) ; Cl i ent e nuevoc
nuevocl i ent e. se
set Codi gocuent
set Li mi t eCr edi t o( l i mcr edi t o) ;
Cal endar al manaque = Cal endar . get I nst anc
Dat e f echa = al manaque. get Ti me( )
abono( apor t aci on, " Apunt e Aper t ur a" , f echa) ;
t i t ul ar es. add( nuevocl i ent e) ;
this nuevocl i ent e. get Car t er a( ) . add( ) ;
}
}
/ **
* Decr ement a el sal d
* @
* @par ammot i vo de car go
* @par amf echaVal or del car go
, f al se e * @r et ur n t r ue si f ue r eal i zado el car go
*/
public boolean car go( doubl
{
synchronized ( this) {
double sl d = sal do;
sl d - = cant i dad;
( - sl d > l i mi t eC if ( ( sl d >= sal do) | |
return false;
}
ent o( - cant i dad, mot i anot aMovi mi
o = sl d; sal d
debe += can
return true
}
}
/ **
* Abono en cuent a.
* Se aade el movi mi ent o de ab
mcant i dad i mpor t e del * @par a
* @par ammot i vo del
* @
* @r et ur n t r ue si f ue r eal i zado el c
*/
public boolean abono( double cant i dad, St r i ng mot i vo, Dat e
{
synchronized ( this) {
double sl d = sal do;
sl d += cant i dad;
if ( sl d <= sal do) {

}
Jdo exige que exista un
constructorsinargumentos.
Las operaciones son nativas Java.
Nocambialasemnticaportrabajar
con instancias persistentes o
transitorias.Lalgicadelnegocioes
puroJava.
Loscambiossobrelasinstancias
persistentessontraslados
camentealconsolidarlos
cambiosdentrodeunatransaccin.
automti
88
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

a

if

}
Cal endar
Dat e f ecv = cal . get Ti me( ) ;
HashSet a
set Apunt es( a i ent os ser an r ecol ect ados
if ( haber >
anot aMo
}
if ( debe < 0
anot aMovi mi ent o( debe, , f ecv) ;
}
}
}
/ **
* Anot aci on de
* @par ami mpor t e I mpor t e en EU del asi ent o
asi ent o
*/
. i
t FechaOper aci on( f op) ;
apunt es. add( mov) ;
}
publi
cuent a
cuent a)
not aMovi mi ent o( cant i dad, mot i vo, val or ) ;
sal do = sl d;
haber += cant i dad;
return true;
}
}
/ **
* Anot ar movi mi ent o en l a cuent a
*/
public void r ef undi r Movi mi ent os( )
{
synchronized ( this) {
( get Apunt es( ) . si ze( ) < 2) {
return;
cal = Cal endar . get I nst ance( ) ;
punt esRef undi dos = new HashSet ( ) ;
punt esRef undi dos) ; / / l os movi m
0) {
Una limitacin prctica es no e
estados de forma transaparente de
liminar los
la BD, ni
satisfacer la integridad las referencias
mecanismos que deben
las funciones
llamada (callbacks) para algunos
afectadas. JDO facilita
ser incorporados al modelo,
retorno de
eventosdelapersistencia.
vi mi ent o( haber , " Fusi on oper aci ones abonos" , f ecv) ;
) {
" Fusi on oper aci ones car go"
nuevos movi mi ent os a l a cuent a
* @par ammot i vo Descr i pci n mot i vo del
* @par amf ecVal or Fecha de val or aci n del apunt e
protected void anot aMovi mi ent o( double i mpor t e, St r i ng mot i vo,
Dat e f ecVal or )
{
synchronized ( this) {
Movi mi ent o mov = new Movi mi ent o( ) ;
mov. set I mpor t e( i mpor t e) ;
mov. set Mot i vo( mot i vo) ;
mov. set FechaVal or aci on( f ecVal or ) ;
Cal endar cal = Cal endar . get I nst ance( ) ;
Dat e f op = cal get T me( ) ;
mov. se
}
/ **
* Access met hod f or t he codi gocuent a pr oper t y.
* @r et ur n t he cur r ent val ue of t he codi gocuent a pr oper t y
*/
c St r i ng get Codi gocuent a( )
{
return codi gocuent a;
}
/ **
* Set s t he val ue of t he codi gocuent a pr oper t y.
* @par amunCodi gocuent a de l a
*/
public void set Cod nt a( St r i gocue i ng unCodi go
{
codi gocuent a = unCodi gocuent a;
}

/ **
* Access met hod f or t he sal do pr oper t y.
* @r et ur n t he cur r ent val ue of t he sal do pr oper t y
*/
public double get Sal do( )
{
return sal do;
}

/ **
* Set s t he val ue of t he sal do pr oper t y.
89
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

val ue of t he sal do pr oper t y


er t y.
mi t eCr edi t o pr oper t y
/ **
* Se
* @p
*/
* Set s t he val ue of t he apunt es pr oper t y.
* @par amunosApunt es de l a cuent a
de car act er es
i cos
t unost i t ul ar es)
* @par amaSal d new o t he
*/
public void set Sal do( double aSal do)
{
sal do = aSal do;
}
/ **
r edi t o pr op * Access met hod f or t he l i mi t eC
* @r et ur n t he cur r ent val ue of t he l i
*/
r edi t o( ) public double get Li mi t eC
{
rn l i mi t eCr edi t o; retu
}
t s t he val ue of t he l i mi t eCr edi t o pr oper t y.
ar amunl i mi t eCr edi t o par a descubi er t o
*/
public void set Li mi t eCr edi t o( double unl i mi t eCr edi t o)
{
l i mi t eCr edi t o = unl i mi t eCr edi t o;
}
/ **
* Access met hod f or t he apunt es pr oper t y.
* @r et ur n t he cur r ent val ue of t he apunt es pr oper t y
public Col l ect i on get Apunt es( )
{
return apunt es;
}
/ **
*/
public void set Apunt es( HashSet unosApunt es)
{
/ / Cui dado ms de una apl i caci n podr a i nt ent ar est o,
/ / asi pues, . . .
apunt es = unosApunt es;
}

/ **
* Ret or na l a cuent a como un cadena
et ur n St r i ng con l os dat os bs * @r
*/
publi ng t oSt r i ng( ) c St r i
{
( " Cuent a: " + get Codi gocuent a( ) ) ; St r i ng st r = new St r i ng
st r = st r + " sal do: " + Doubl e. t oSt r i ng( get Sal do( ) ) + " \ n" ;
I t er at or i t = get Ti t ul ar es( ) . i t er at or ( ) ;
{ while ( i t . hasNext ( ) )
Cl i ent e cl i = ( Cl i ent e) i t . next ( ) ; / / navegaci on t r anspar ent e
" " + cl i . get NI F( ) ) ; st r . concat (
}
st r += " \ n" ;
return st r ;
}
/ **
* Access met hod f or t he t i t ul ar es pr oper t y.
e cur r ent val ue of t he t i t ul ar es pr oper t y * @r et ur n t h
*/
public HashSet get Ti t ul ar es( )
{
return t i t ul ar es;
}
/ **
* Asi gna l os t i t ul ar es de l a cuent a
* @par amunost i t ul ar es Cl i ent es t i t ul ar es de l a cuent a
*/
public void set Ti t ul ar es( HashSe
{
t i t ul ar es = unost i t ul ar es;
}
}
90
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

no fuerza cambios
tentes,imponeciertas
obligacin importante es asegurar la integridad
sobrelos
aadir
os
utos y las
lascondiciones
ar el cdigo compilado de las clases persistentes y de las que
nlapersistenciadelasprimeras.
os
Veamos nosocupa.
3.2.1.1.
EnunficheroXMLseindicaquclasesyquatributosdeestassonpersistentes,en
persistencia, cuales son los modelos de
entreobjetosydatos.Enelejemplodel
objetos, que no requiere expresar la
cheros
sistentedeunaclase,estrepresentadoporlosvalores
dependientes de
esentanentidadesdeejecucinJava,porquesinoal
muestra el descriptor de persistencia, que
/ j ava. sun. com/ dt d/ j do_1_0. dt d" >
>
=" Cuent a" >
<field name=" t i t ul ar es" >

<

=" codi gocuent a" >


</field>
<field name=" haber " >
A cd la vista del igo Java anterior, se comprueba como JDO
significativosenlasclasesdeldominio,cuyasinstanciassernpersis
bligaciones. Una limitaciones y o
referencial,anteseliminarunainstanciapersistente,nohayrecoleccindebasuras
estados almacenados, salvo que el sistema gestor anfitrin lo ofrezca, esto implica
un cdigo extra en las clases del modelo. No son definidos nuevos mtodos o atribut
porque las persistentes, el cdigo para acceder y manipular los atrib clases sean
relacionesdelasclasesnosufrealteraciones.
Cmohacerqueunaclaseseapersistenteyquesusobjetosperduren?
1. IndicarqueserpersistenteenunarchivoXML.
2. Establecerlosparmetrosdeconfiguracinquedefinen
deejecucindelapersistencia.
3. Pro
maneja
ces
4. Finalmente, es posible operar con la persistencia aplicando algun
mtodosquedesencadenanlamagiadelapersistencia.
lasecuenciamscercasobreelejemploque
Declararquclasessonpersistentes
qu forma clientela y herencia se mezclan con
pleados,ycualeslacorrespondencia identidadem
banco se u un mecanismo de persistencia de tiliza
conexinentredatosyobjetos,nieltipodeidentidadautilizar,soloqueespersistenteyla
e relacin entre clases persistentes, se utiliza para gestionar la persistencia la plataforma d
referencia de (RI), cuyo mecanismo de persistencia es un sistema de fi JDO
indexados.
Ladefinicindelestadoper
de los atributos escogidos para persistir. Estos valores no pueden ser
osoquerepr objetosinaccesibles,remot
recuperarelobjeto,lasdependenciasnopodranserreconstruidas.
En el ejemplo, el siguiente listado
describequeserpersistente:
<?xml ver si on=" 1. 0" encodi ng=" UTF- 8" ?>
<!DOCTYPE j do S ht t p: / YSTEM "
<jdo>
ame=" banco" <package n
<class name

<collection el ement - t ype=" Cl i ent e" / >
/field>
<field name=" apunt es" >
<collection el ement - t ype=" Movi mi ent o" / >
</field>
<field name
</field>
<field name=" l i mi t eCr edi t o" >
</field>
<field name=" sal do" >
</field>
<field name=" debe" >


91
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo





e
>





</packa
</jdo>
stado15Descriptordepersistenciadelbanco
El de c
quatributosde c
sisetratadeun ser
compat
otrosobjetospersistentes.Enelejemplotodoslosatributos
renciasaobjetospersistentes.
s, basados en ejemplos utilizados en
captulo as por los fabricantes de JDO, para
expresa oprevistoenJDO,delos
tag ext datos de la
transfor tilizando XML. As
pues,se
<?xml
<!DOCT
<j do>
<pac
< e=" dat ast or e" name=" MyCl ass" >

<extension vendor e=" I " >
<

vendor - name=" j r el ay" key=" col umn" val ue=" D" >
y=" j dbc- t ype" val ue=" FLOAT" / >

</field>
</class>
<class name=" Cl i ent e" >
<field name = " car t er a" >
<coll ction el ement - t ype=" Cuent a" / >
</field
<field name = " ni f " >
</field>
</class>
<class name=" Movi mi ent o" >
</class>
ge>
Li
s riptor de persistencia establece que clases tendrn instancias persistentes,
estaspuedenpersistir,paralosatributosqueexpresanrelacionesseindi a,
acoleccinocorrespondenciaclavevalor,cuyoselementostendrnque
ibles,conlaclaseindicadaenladeclaracinelementtypeysiestoselementossern
partedelobjetooreferenciasa
sonpersistentesylascoleccionescontienenrefe
Losarchivosdescriptoresdepersistenciadebensernombradoscomo(literalmente)
package. j do, cuando contiene la descripcin del estado persistente de las clases de la
aplicacinopaquete,ocuandosolocontieneladefinicindepersistenciadeunaclasesola,
entonces,<nombr e l a cl ase>. j do.
Veamos otros ejemplos ms complicado
s siguientes, sealan las alternativas escogid
relmapeodeclasesentablas,bienseutilizaelmecanism
ension y vendor, y la otra alternativa, consiste en incluir los meta
macin de clases blas, en ficheros aparte, frecuentemente u a ta
gnelfabricanteencontraremosunaalternativa,otraoambas.
ver si on=" 1. 0" ?>
YPE j do SYSTEM " j do. dt d" >
kage name=" j do. t est . per f or mance" >
class i dent i t y- t yp
<field name=" i " >
- name=" j r el ay" key=" col umn" val u
extension vendor - name=" j r el ay" key=" j dbc- t ype" val ue=" I NTEGER" / >
</extension>
<extension vendor - name=" j r el ay" key=" j ava- t ype" val ue=" i nt " / >
</field>
<field name=" d" >
<extension
<extension vendor - name=" j r el ay" ke
</extension>
<extension vendor - name=" j r el ay" key=" j ava- t ype" val ue=" doubl e" / >
</field>
<field name=" st r i ng" >
<extension vendor - name=" j r el ay" key=" col umn" val ue=" STRI NG" >
<extension vendor - name=" j r el ay" key=" j dbc- t ype" val ue=" VARCHAR" / >
<extension vendor - name=" j r el ay" key=" si ze" val ue=" 60" / >
</extension>
<extension vendor - name=" j r el ay" key=" j ava- t ype"
val ue=" j ava. l ang. St r i ng" / >
</field>
<field name=" st r i ngs" >
<array/ >
<extension vendor - name=" j r el ay" key=" col umn" val ue=" STRI NGS" >
<extension vendor - name=" j r el ay" key=" j dbc- t ype"
val ue=" VARBI NARY" / >
92
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

>


"
n vendor - name=" j r el ay" key=" cl ass- i d- col umn"
CLASS_I D" >
val ue=" CHAR" / >
=" j r el ay" key=" j dbc- t ype" val ue=" I NTEGER" / >
>
>
CEST 2003" vendor -
unrboldeobjetosconJRELAY
fabricante sobre la misma figura, es como
=" 1. 0" encodi ng=" UTF- 8" ?>
ing>
t . per f or mance" >
ss" >
<jdbc-class-map t ype=" base" pk- col umn=" J DOI D" t abl e=" MYCLASS" / >
t ype=" ver si on- number " col umn=" J DOVERSI ON" / >
t ype=" i n- cl ass- name" col umn=" J DOCLASS" / >
c-field-map t ype=" val ue" col umn=" D" / >
al ue" col umn=" I " / >
" st r i ng" >
<jdbc-field-map t ype=" val ue" col umn=" STRI NG" / >
</field>
<field name=" st r i ngs" >
" el ement - col umn=" ELEMENT"
DOI D"
t abl e=" MYCLA_STRI NGS" /
</field>
tornodeejecucinconpersistenciaJDOrequiere,comocabradeesperar,que
ecanismo de persistencia, estn
ro adems tambin deben estar
</extension>
<extension vendor - name=" j r el ay" key=" j ava- t ype"
val ue=" j ava. l ang. St r i ng[ ] " / >
</field
<extension key=" cl ass- i d" val ue=" MyC" vendor - name=" j r el ay" / >
<extension key=" t abl e" val ue=" MYCLASS" vendor - name=" j r el ay" >
<extension vendor - name=" j r el ay" key=" i d- col umn" val ue=" I D" >
<extension vendor - name=" j r el ay" key= j dbc- t ype" val ue=" CHAR" / >
<extension vendor - name=" j r el ay" key=" si ze" val ue=" 20" / >
</extension>
<extensio
val ue="
<extension vendor - name=" j r el ay" key=" j dbc- t ype"
<extension vendor - name=" j r el ay" key=" si ze" val ue=" 3" / >
</extension>
<extension vendor - name=" j r el ay" key=" ver si on- col umn"
val ue=" VERSI ON" >
<extension vendor - name
</extension>
</extension>
</class
</package
<extension key=" ver si on" val ue=" Sun Aug 31 21: 53: 38
name=" j r el ay" / >
</ jdo>
Listado16Mapeode
La otra alternativa ofrecida por otro
sigue.
<
mapp
?xml ver si on
<
<package name=" j do. t es
<class name=" MyCl a

<jdbc-version-ind
jdbc-c < lass-ind
field name=" d" > <
<jdb
</field>
field < name=" i " >
jdbc-field-map t ype=" v <
/field < >
<field name=





<jdbc-field-map t ype=" col l ect i on
or der - col umn=" STRI NGS_ORDER" r ef - col umn. J DOI D=" J
>
</class>
</package>
Listado17MapeodeunrboldeobjetosconKODO
Alavistaest,quelacuestindelmapeotienesudificultad,porlocualseaconseja
utilizarproductosquefacilitenelmanejodelosdescriptoresdepersistencia.
3.2.1.2. Prepararelentornodetrabajo
Elen
las clases que implantan JDO y las de soporte del m
accesibles como otras libreras necesarias en ejecucin, pe
losarchivosde:
93
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

idad, normalmente en un
nismo
xin y
accesiblesdurantelaejecucin,
ortar a la implementacin de JDO la metainformacin necesaria,
ente en los
e donde
ses persistentes y su versin original, ya
como la duplicacin de instancias para su
los caminos
hastalo
3.2.1.3.
preparadas istentes, una vez
compiladasyantesdeeje r,queextiendeo
ampla
banco\ Movi mi ent o. cl ass
\ banco\ Cuent a. cl ass
\ banco\ Cl i ent e. cl ass"
ivosdeclasescompiladosdeben
utar la aplicacin. Algunos entornos JDO ofrecen la
tiempo de ejecucin, cuando las clases son cargadas en la
mquin
ctarconelsistemadegestindedatos
npersistenciasobrelosobjetosdelaaplicacin,hayquecrear
nismo de persistencia utilizado y la aplicacin en ejecucin. Este
lasoperacionespersistentes,que
una de las operaciones cuyos
r,tienequeserrealizadadentrodeunatransaccin,quegarantiza
JDO, el contexto de la conexin, la transaccin y las
encia, son manejados con un objeto de la clase
ciones del ejemplo, estn diseadas aplicando el patrn de
ocomando,queencontramosen[13]yilustradoen[19],tambinsonsimilares,alos
es que requieren de persistencia,
uso, obtienen un objeto gestor de persistencia de la clase,
Las propiedades que determinan la conectiv
ficherodetextofiguralaconfiguracindelaconexin:tipodemeca
rio, contrasea, y otras caractersticas de la cone empleado, usua
funcionamiento.
Losdescriptoresdepersistenciadebenestar
para ap
que puede figurar empotrada en el cdigo Java. Habitualm
EBINF, el correspondiente al paquet directorio METAINF, W
estnlasclases.
La versin modificada de las cla
que algunas operaciones,
transmisinporlaRed,solosonposiblesaplicaralasclasesoriginales.
En nuestro ejemplo, la variable de entorno CLASSPATH, contiene
sarchivosnecesarios.
Procesarlasclasesparalapersistencia
Una vez las clases del dominio que van a ser pers
cutarlaaplicacinesnecesarioaplicarelEnhance
lasclasesquepersistenyaquellasquemanejanlapersistencia,generandolaimagen
ejecutable de las clases dotadas de la capacidad de persistir y de manejar persistencia.
UtilizandoApacheAnt[45]latareaescomosigue.
<target name= " enhanceJ DORI 101" >
<java f or k=" yes" f ai l oner r or =" yes"
cl assname=" com. sun. j dor i . enhancer . Mai n"
cl asspat hr ef =" pr oj ect . cl ass. pat h" >
<arg l i ne=" - v - d $${enh. home}
${enh. home}\ banco\ package. j do
${dest }\
${dest }
${dest }
/ >
</java>
Listado18TareaAmplicarclasesconJDORI.
Cadavezquelasfuentesseancompiladas,losarch
ser procesados antes de ejec
modificacin de las clases en
avirtualJava.
3.2.1.4. Cone
Parapoderoperarco
un canal entre el meca
canalproporcionaelcontexto,sobreelquesonefectuadas
los datos y sus modificaciones perduren. Cada logran que
resultadosdebenperdura
la consistencia e integridad. En
persist operaciones internas con
PersistenceManager. Las opera
dise
casos de uso, o prueba, de JUnit. Todas las operacion
cuando se crea el caso de
94
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

partir de ste la referencia a un objeto t r ansacci n. El


la conexin con el mecanismo de persistencia, por el
En el ejemplo cada operacin con objetos persistentes, es una subclase de
ones de la Aplicacin, AppOper, que concreta la funcionalidad de persistencia
provoca la ejecucin del mtodo diferido
e cada subclase concreta con las instrucciones Java a ejecutar
cont ext o de per si st enci a.
n con el si st ema gest or de bases de dat os.
cuyo concur so son ef ect uadas l as
mf = J DOHel per . get Per si st enceManager Fact or y(
( Syst em. er r ) ;
i on( ) ;
x. commi t ( ) ;
aci on( ) ;
Listado19OperacionesdeAplicacin,AppOper

objetospersistentesdeberemosproporcionarelespaciodonde
de sus estados. En JDORI esto consiste en abrir una conexin
losarchivosdelabasededatosalconsolidar
) ;
onnect i onCr eat e" , " t r ue" ) ;
ax. j do. opt i on. Connect i onURL" ,
Per si st enceManager , y
Per si st enceManager establece
programador.
Operaci
comn a todas las operaciones, y
ej ecut ar Oper aci on, qu
tosobjetos. sobrees
/ **
* Cr ear e i ni ci ar el
i ci a l a conexi * I n
* Asi gna l a t r ansacci on con
oper aci ones per si st ent es
*/
c AppOper ( ) publi
{
try {

p
obt ener Pr opi edadesJ DO( ) ) ;
pm= pmf . get Per si st enceManager ( ) ;
t x = pm. cur r ent Tr ansact i on( ) ;
}
catch ( Except i on ex) {
ex. pr i nt St ackTr ace
Syst em. exi t ( - 1) ;
}
}

publi c void ej ecut ar ( )
{
try {
t x. begi n( ) ;
ej ecut ar Oper ac
t
}
catch ( Except i on ex) {
ex. pr i nt St ackTr ace( Syst em. er r ) ;
if ( t x. i sAct i ve( ) ) {
t x. r ol l back( ) ;
}
}
}

protected abstract void ej ecut ar Oper
Crearbasededatos
Antesdeoperarcon
lmacenados los datos son a
conunapropiedadqueprovocalacreacinde
ransaccin. unat
public Cr ear BD( St r i ng f i chbd)
{
try {
) ; j dopr oper t i es = obt ener Pr opi edadesJ DO(
onexi on" Syst em. out . pr i nt ( " pr opi edades c
j dopr oper t i es. l i st ( Syst em. out ) ;
m. sun. j dor i . opt i on. C j dopr oper t i es. put ( " co
j dopr oper t i es. put ( " j av
Normalmente toda oper
objetos del modelo qu
acin sobre
e persisten,
debe ser realizada dentro de una
transaccin.
es un objeto transaccin que
la
en base de
t x
asume el papel de garantizar
integridad los cambios
datos
Unafactoraproporciona
gestoresdepersistencia
pmgestiona la persistencia.
Ofrece las operaciones para
hacer persistente un objeto,
conocer su status persistente
y eliminar permanentemente
unobjeto.
95
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

d) ;
r .
get Per si st enceManager Fact or y(
j dopr oper t i es) ;
Per si st enceManager pmc = pmf c. get Per si st enceManager ( ) ;
Tr ansact i on t x = pmc.
t x. begi n( ) ;

i f i caci on conexi on, excepci on en caso de er r or
pmf = J DOHel per . get Per si st enceManager Fact or y( j dopr oper t i es) ;
pm= m
t x = m

Out p S
j dop p
Syst em.
eracindelarchivodepropiedadespara
tes
s
o la clase
bclases, del patrn de inicio
nte.
al gestor de persistencia que la convierta en
tente.
/ **
t o expl i ci t ament e
er si on 0. 1
" f ost or e: . . / db/ " + f i chb
OHel pe Per si st enceManager Fact or y pmf c = J D



cur r ent Tr ansact i on( ) ;
t x. commi t ( ) ;
pmc. cl ose( ) ;
j dopr oper t i es. put ( " com. sun. j dor i . opt i on. Connect i onCr eat e" ,
" f al se" ) ;
/ / ver
p f . get Per si st enceManager ( ) ;
p . cur r ent Tr ansact i on( ) ;
ut t r eamf op = new j ava. i o. Fi l eOut put St r eam( " j do. pr oper t i es" ) ;
r o er t i es. st or e( f op, " par amet r os per si st enci a" ) ;
out . pr i nt ( " Base de dat os: " + f i chbd + " cr eada" ) ;
}
catch ( Except i on ex) {
ex. pr i nt St ackTr ace( Syst em. er r ) ;
}
Listado20CreacindelabasededatosconJDORI
Una vez creada la base de datos fijamos los valores que determinan las
caractersticas de las sucesivas conexiones sobre un archivo, este ejemplo denominado
j do. pr oper t i es. Algunas de las caractersticas de conexin, pueden ser cambiadas
durante la ejecucin para aprovechar funcionalidades como las transacciones de solo
lectura, bloqueo optimista, retener los estados al finalizar las transacciones o permitir
instancias transitorias transaccionales, cuyo estado es preservado durante una transaccin
parapoderdeshacerlasmodificaciones,silatransaccinesrechazada.
Conlacreacindelabasededatosylagen
laconexin,lafasedepreparacinestcompleta.
3.2.1.5. Operarsobrelasinstanciaspersisten
JOD permite una verdadera transparencia, consigue con instancia que operar
rias. En el ejempl persistentes no sea distinto de manejar instancias transito
eraciones definidas en su abstracta AppOper, asla a las op
ejecucinyconsolidacin,detodaoperacinpersiste
Hacerpersistentesinstancias
Fcil. Crear la instancia y pedir
persis
* Aper t ur aCuent a. j ava
* Ver si on 0. 1
* Ener o 2003
* Copyr i ght J uan Mar mol Tr abaj o f i n de car r er a
*/
package casosdeuso;

import j ava. ut i l . I t er at or ;
import banco. Cuent a;
import banco. Movi mi ent o;

/ **
* Hacer per si st ent e un obj e
aut hor J uan Mar mol * @
* @v
96
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

f i caci on Fi scal
St r i ng ni f ;
* Codi go Cuent a Cl i ent e
*/
apor t aci on;

/ **
CCARGC] ,
( ar gs[ CREARGC] ) ,
e( ar gs[ CANARGC] ) ) ;

l i