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 ent e Asi gnado
* @par ampl m Li mi t e de Cr edi t o concedi do segun su cl asi f i caci on de
r i esgo
* @
pi mp;
ej ecut ar Oper aci on( )
{
) ;
at or ( ) ;
* @si nce Febr er o 2004
*/
public class Aper t ur aCuent a
extends AppOper

{
/ **
* o I dent i Numer
*/
vate pri
/ **
private St r i ng ccc;
/ **
* Li mi t e de Cr edi t o Concedi do
*/
private double l i mcr edi t o;
/ **
* Apor t aci on en eur os
*/
private double
* Aper t ur a de cuent a par a nuevo cl i ent e
* @par amar gs Ni f , CCC, cr edi t o, cant i dad eur os
*/
public static void mai n( St r i ng[ ] ar gs)
{
Aper t ur aCuent a nc;
if ( ar gs. l engt h < NUMARGC) {
Syst em. er r . pr i nt ( " Por f avor , NI F, CCC, cr edi t o, cant i dad" ) ;
return;
}
s[ C nc = new Aper t ur aCuent a( ar gs[ NI FARGC] , ar g
Doubl e. par seDoubl e
ubl Doubl e. par seDo
nc. ej ecut ar ( ) ;

/ **
per t ur a Cuent a Nuevo Cl i ent e * A
* @par ampni f NI F del cl i ent e
* @par ampccc Codi go Cuent a C
par ampi mp I mpor t e en eur os de l a apor t aci n i ni ci al
*/
public Aper t ur aCuent a( St r i ng pni f , St r i ng pccc, double pl m,
double pi mp)
{
super( ) ;
ni f = pni f ;
ccc = pccc;
l i mcr edi t o = pl m;
apor t aci on =
}

protected void
Cuent a cu = new Cuent a( ) ;
cu. aper t ur aCuent aNuevoCl i ent e( ni f , ccc, l i mcr edi t o, apor t aci on) ;
pm. makePer si st ent ( cu) ; / / Hecho per si st i r expl i ci t ament e
/ / l os obj et os dependi ent es son hechos per si st ent es por al cance
Syst em. out . pr i nt l n( " Aper t ur a Cuent a: "
Syst em. out . pr i nt ( cu. t oSt r i ng( ) ) ;
Laconexinylatransaccin
enlasuperclase.
El objeto es hecho
hechas
persistir
expresament,perolosobjetosdesu
cierre de persistencia tambin, sin
intervencin expresa del
programador.
I t er at or i t = cu. get Apunt es( ) . i t er
( i t . hasNext ( ) ) { while
97
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

Listado21Aperturadenuevacuenta
stos pueden ser recuperados de la base de datos de
deunaclase.
iterarsobreelconjuntodetodaslas
tipo.Unaextensin,objetodeltipoExt ent ,esunafacilidadde
unaclasedotadadepersistencia,o
dos de persistencia. Una vez que una
larecuperacinestos
a memoria automticamente, esto con transparencia
de dato
nsultadas. Las tres formas de acceso
pueden
d void ej ecut ar Oper aci on( )
{ / /
ensi onCl i ent es. cl ose( i t er ) ;
et ur n St r i ng con l os dat os bsi cos
Movi mi ent o mov = ( Movi mi ent o) i t . next ( ) ;
Syst em. out . pr i nt ( mov. t oSt r i ng( ) ) ;
}
}
}
Accederalasinstancias
Hechos persistir los objetos, e
tresformas:
Recorrerlaextensin
Navegarporelmodelodeobjetospersistente.
Ejecutar una consulta sobre las instancias de una clase, su extensin, una
nstanciasdeesetipo,osobreotraconsulta. coleccinconi
Recorrerlaextensindeunaclase,consisteen
instanciasdedeterminado
JDOparaaccederalconjuntodetodaslasinstanciasde
de la clase y sus descendientes igualmente dota
instanciaesrecuperada,elaccesoasusobjetosrelacionados,provoca
es, navegar por el modelo de objetos
s. La ejecucin de una consulta, resulta en una coleccin de aquellas instancias de
ciertaclase,referenciadasenunacoleccinoporsuextensin,quesatisfacen,unpredicado
sobre los atributos y referencias de las instancias co
sercombinadasentres,unpatrnmuyhabitualenlasaplicaciones,serlocalizar
con una consulta aquella instancia que cumple cierta condicin de bsqueda, a partir de
sta navegar por su cierre de persistencia, cuyos objetos a su vez pueden ser objeto de
nuevasconsultas.Veamosunejemplodelodicho.
Coleccindelasinstanciaspersistentesdeunaclase
protecte
Recor r er l a ext ensi on de t odas l as i nst anci as per si st ent es Cl i ent e
Ext ent ext ensi onCl i ent es = pm. get Ext ent ( Cl i ent e. class, true) ;
I t er at or i t er = ext ensi onCl i ent es. i t er at or ( ) ;
while ( i t er . hasNext ( ) ) {
Cl i ent e cl i = ( Cl i ent e) i t er . next ( ) ;
Syst em. out . pr i nt ( cl i . t oSt r i ng( ) ) ;
}
ext

}
Listado22OperacinListadodeClientes
ElcdigoanteriorrecorrelacoleccindetodaslasinstanciasdelaclaseCl i ent ey
todas las subclases persistentes de Cl i ent e (porque el segundo argumento de
get Ext ent , es t r ue). Al finalizar la iteracin, los recursos asignados son liberados al
invocarelmtodoclose.Sielsistemagestordedatosasociadoproporcionaunavisinde
datosconsistente,entoncesellistadoanteriormostrarelestadodelosclientesaliniciode
latransaccin.
Navegarentreobjetosdelmodelo
/ **
* Ret or na l a cuent a como un cadena de car act er es
* @r
*/
public St r i ng t oSt r i ng( )
{
98
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

t r i ng( " Cuent a: "


e) i t . next ( ) ; / / navegaci on t r anspar ent e
;
23CuentamtodotoString
acta sobre la coleccin de los titulares
ando el NIF de cada de uno de estos. No ha sido necesario codificar otro mtodo
distintoparatrabajars unainstancia
Cuent a
econocemossuNIF.
ej ecut ar Oper aci on( )
s, true) ;
) ;
t r i ng pni f " ) ;
do. i t er at or ( ) ;
) ;
yst em. out . pr i nt ( cl i ent e. t oSt r i ng( ) ) ;

Listado24ConsultarunClienteysuscuentas
carlaclasedelasinstanciasaprocesar,clasecandidata,
asdelresultado,yelmbitodelosidentificadoresque
coleccin
nsin, la
seconsulta;cuandosetratadeuna
puede ser el resultado de otra consulta
Laactualizacindeunainstanciapersistenteestransparente,enprincipio.Estoes,
amos la asignacin se realiza
conobjetosnopersistentes; scambiosenel
estado s u
{
St r i ng st r = new S + get Codi gocuent a( ) ) ;
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
st r . concat ( " " + cl i . get NI F( ) ) ;
}
st r += " \ n"
urn ret st r ;
}
Listado
El mtodo t oSt r i ng de la clase Cuent a,
mostr
obreinstanciaspersistentes.Sistemtodoseaplicaa
persistente, al acceder a cada referencia del tipo Cl i ent e, el objeto
correspondienteesinstanciadodenuevoconlosdatosobtenidosdesdelabasededatospor
JDO,sinindicacinexpresaenelcdigo.
Consultar
Consultarpermitelocalizaryrecuperarlasinstanciaspersistentescontenidasensu
extensin correspondiente, o en una coleccin arbitrara de objetos persistentes, que
cumplenciertopredicadodeseleccinofiltro,enJDOQL,quetienesintaxisJava.Veamos
comolocalizarymostrarlosdetallesdeunclientedelqu
protected void
{
/ / Consul t ar cuent as de un cl i ent e
Ext ent ext ensi onCl i ent es = pm. get Ext ent ( Cl i ent e. clas
Quer y consul t a = pm. newQuer y( ext ensi onCl i ent es, " ni f == pni f "
consul t a. decl ar ePar amet er s( " S
C l ect i on l t ado = ( Col l ect i ol r esu on)
consul t a. execut e( ni f consul t a) ;
I t er at or i t er = r esul t a
while ( i t er . hasNext ( ) ) {
ent e = ( Cl i ent e) i t er . next ( cl i
S
}
consul t a. cl ose( r esul t ado) ;
Cadaconsultarequiereindi
specificareltipodelasinstanci parae
aparecenenlascondicionesdelfiltro,queseleccionalasinstanciasincluidasenla
eccin candidata, es una exte del resultado. Cuando la coleccin consultada, col
entealaextensinque clasecandidataeslacorrespondi
coleccin arbitraria de objetos persistentes, como
previa, se debe asignar la clase candidata de la consulta invocando el mtodo
set Candi dat es.
Actualizacininstancias
utiliz y la invocacin de mtodos modificadores, tal y cmo
laimplementacindeJDO,seencargadequelo
de los objetos persi tentes perduren, queden grabados. El siguiente listado es n
sencilloejemploilustrativo.
protected void ej ecut ar Oper aci on( )
Conjunto instancias Cliente y
subclasesdeClientepersistentes.
Condicin de Seleccin
JDQOL
nifesunatributodeCliente
99
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

uent as, " codi gocuent a == ccc" ) ;


r i ng ccc" ) ;
ut e( ccc) ;
= Cal endar . get I nst ance( ) ;
) ;
o es hecho per si st ent e por al cance
a. car go( - cant i dad, mot i vo, f ec) ;
em. out . pr i nt ( cuent a. t oSt r i ng( ) ) ;
i
ones de los
objetos
con la ejecucin del mtodo
makeDi . e de
currente por mltiples procesos. Veamos un par de ejemplos de
cdigo.
Ext ent cuent as = pm. get Ext ent ( Cuent a. class, true) ;
Quer y consul t a = pm. newQuer y( c
consul t a. decl ar ePar amet er s( " St
Col l ect i on r esul t ado = ( Col l ect i on) consul t a. exec
I t er at or i t er = r esul t ado. i t er at or ( ) ;

if ( i t er . hasNext ( ) ) {
cuent a = ( Cuent a) i t er . next ( ) ;
st em. out . pr i nt ( cuent a. t oSt r i ng( ) ) ; Sy
}
ose( r esul t ado) ; consul t a. cl
endar cal Cal
Dat e f ec = cal . get Ti me( ) ;
if ( cuent a == null) {
Syst em. er r . pr i nt ( " Codi go de cuent a i ncor r ect o"
return;
}
t / / el abono o el car go de un movi mi en
if ( cant i dad >= 0) {
cuent a. abono( cant i dad, mot i vo, f ec) ;
}
else {
t cuen
}
yst S
Listado25Operacindecargooabono
En el listado anterior recordar que el mtodo ejecutaroperacin es invocado
dentro una transaccin, cuando la transaccin es consolidada (commit), los nuevos datos
estarndisponiblesenlabasededatosdelBanco.
Las actualizaciones deberan ser aplicadas siempre a los atributos de los objetos
persistentes, no a referencias a las instancias manejadas por estos atributos, ya que el
mecanismo habitual empleado para conservar el estado al inicio de una transaccin, es
crearuncopiasuperficialdelosobjetospersistentesamodificar,aspues,losatributosque
no forman parte del objeto copiado, no puede ser recuperadas s la transaccin es
rechazada.
La cuenta es modificada sin
hacer nada de especial por ser
persistente
Existe una limitacin sobre el control automtico de las modificaci
persistentes agregados formando parte de otros, y adems, son compartidos entre
varios objetos persistentes, las actualizaciones de estas instancias deben ser advertidas
expresamente a los distintos objetos que los contienen,
rty Estasituacinpodrhabitualmenteserevitadaconajusteseneldis o las
clases.
Borrarinstancias
EnJDOlosestadosalmacenadosdelasinstanciaspersistentesdebensereliminados
explcitamente de los sistemas de datos donde permanecen, excepcin hecha de algunos
sistemas gestores de datos basados en objetos. En Java, cuando las instancias dejan de ser
referenciadas por otros objetos, son eliminadas automticamente, pero esto no puede
significar la eliminacin de los sus estados persistentes. Para eliminar los estados
almacenados se debe codificar expresamente su eliminacin para la mayora de los
sistemas. Una estrategia de eliminacin automtica centrada en la capa del servicio de
persistencia,requiereunaasignacinderecursosimportanteyprovocaralacontencinen
el acceso a datos con

protected void ej ecut ar Oper aci on( )


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

Syst em. er r . pr i nt ( " Codi go de cuent a er r oneo" ) ;



pm. del et ePer si st ent Al l ( movs) ;
Sy
asegurar
erfazI nst anceCal l backsenlasclasesdel
dominio
eliminados(recordarqueesunejemplo!enla
realidadlosdatospasaranaunsistemadehistricos).

protected void ej ecut ar Oper aci on( )


{ Cl i ent e cl i ;
Consul t aCl i ent e concl i = new Consul t aCl i ent e( ni f ) ;

concl i . ej ecut ar Oper aci on( ) ;
cl i = concl i . obt ener Cl i ent e( ) ;
if ( cl i ! = null && cl i . car t er aEl i mi mabl e( ) ) {
synchronized( cl i ) {
pm. del et ePer si st ent ( cl i ) ;
}
}
}

EnlaclaseCl i ent e

public void j doPr eDel et e( )
{
Cuent a cu;
Per si st enceManager pm= J DOHel per . get Per si st enceManager ( this) ;
I t er at or i t = get Car t er a( ) . i t er at or ( ) ;
while ( i t . hasNext ( ) ) {
cu = ( Cuent a) i t . next ( ) ;
cu. get Ti t ul ar es( ) . r emove( this) ;
/ *Los cl i ent es el i mi nados dej an de ser t i t ul ar es de sus cuent as*/
if ( cu. get Ti t ul ar es( ) . si ze( ) == 0 && ! J DOHel per . i sDel et ed( cu) ) {
pm. del et ePer si st ent ( cu) ;
}
}
}
formaautomticaparadeterminadoseventosdelciclodevidade
s, el programador no debera invocar los mtodos esta interfaz
Col l ect i on movs;
Consul t aCuent a consul t acuent a = new Consul t aCuent a( codi goCuent a) ;
consul t acuent a. ej ecut ar ( ) ;
cuent a = consul t acuent a. obt ener Cuent a( ) ;
if ( cuent a == null) {
Syst em. er r . pr i nt l n( codi goCuent a) ;
return;
}
movs = cuent a. get Apunt es( ) ;
cuent a. r ef undi r Movi mi ent os( ) ;
st em. out . pr i nt ( cuent a. t oSt r i ng( ) ) ;
}
Listado26EliminarInstanciasPersistentes.Refundirmovimientos.
Laeliminacindelosestadospersistentessuscitalacuestindelaintegridaddelas
referencias vista en el primer captulo. JDO permite la integridad de las
referenciasconlaimplementacindeunaint
.Enesteejemplodebancosonexpuestosdoscasos,laeliminacindeunclientey
la eliminacin de una cuenta: cuando se elimina un cliente este deja de ser titular de sus
cuentas,decuyosfondoselBancosabebienquehacer,cuandounacuentaeseliminada,los
movimientoscorrespondientestambinson
La operacin aprovecha la ca
Java de recoleccin de memoria
borrado
pacidad de
e invoca el
de los estados con
deletePersitentAll
Listado27Propagarlaeliminacindeunclientealascuentas.
Los mtodos de la interfaz I nst anceCal l backs son invocados por la
implementacinJDOde
las instancias persistente
101
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

rlavalidezdelaoperacin,
Cuent a
t os of r ece l a el i mi naci n en cascada
on J DO a ni vel del ser vi ci o o en l a apl i caci n
. si ze( ) == 0) {
nager pm= J DOHel per . get Per si st enceManager ( this) ;
t Al l ( this. apunt es) ;
t ul ar es( ) . i t er at or ( ) ;
t ( ) ) {
i ent e) i t . next ( ) ;
Del et ed( cl i ) ) {
emove( this) ;
( ) . si ze( ) == 0) {
t ent ( cl i ) ;
ciaspersistentesvinculadasalaCuenta
problemtica interesante, el soporte de las
relacin con esta cuestin, JDO no maneja las
ones entre los objetos persistentes, directamente sobre la base de datos, exige la
inado, pero los objetos persistentes
vidas independientes, no actualizan
anceCal l backs.
revisin 2.0 de JDO, resuelve esto, con la gestin
tica incluida la eliminacin de los estados persistentes, sin necesidad de
es:AgregacinyHerenciaenJDO
s persistentes Java de agregacin, referencia y herencia
relaciones entre objetos transitorios Java, si bien existen
lase,
os o
ms atrs los listados de est
en llegar a ser objetos persistentes, los
s ligados al sistema de ejecucin (clases del sistema, objetos remotos), no pueden
rficas, referencias
en ejecucin son
ointerfaz.Tambinesposibleusar
como atributos de una instancia,
ncias, sern tipos
pensable para expresar relaciones en Java, son las
pos ofrecidos
JDO, y adems, contempla otros tipos como
directamente.Elobjetivoesmantenerlaconsistencia,noproba
queesasuntoparalalgicadelnegocio.
public void l ase j doPr eDel et e( ) / / En l a c
{
/ ** Pr opagar l a el i mi
se de da
naci n a l os movi mi ent os
* O l a ba
* O bi en c
*/
f this s( ) i ( . get Ti t ul ar e
return;
}
j avax. j do. Per si st enceMa
pm. del et ePer si st en
this. get Ti I t er at or i t =
while ( i t . hasNex
Cl i ent e cl i = ( Cl
if ( ! J DOHel per . i s
cl i . get Car t er a( ) . r
if ( cl i . get Car t er a
pm. del et ePer si s
}
}
}
}
Listado28Eliminarlasinstan
El cdigo anterior muestra una
entes. En relaciones entre los objetos persist
relaci
recuperacin del objeto a eliminar para ser elim
onados por agregacin, instancias relaci de
automticamente la consistencia de sus referencias, por eso los I nst
Otros
utom
planteamientos son posibles, la
a
recuperacinydeformaautomtica.
3.2.1.6. Relacionesentreobjetospersistent
Las relaciones entre objeto
con JDO, no son distintas de las
algunasrestriccionesypautasatenerencuenta.
Las referencias Java, utilizadas para definir atributos de instancia, de c
dos, pueden estar adas a objetos transitori parmetros o variables de mto conect
persistentes indistintamente. JDO no exige la utilizacin de ciertos tipos concretos
dedicados a ser referencias de objetos persistentes,
plos de ello. Pero no todos los tipos pued
e captulo
son ejem
objeto
ser persistentes. JDO permite la utilizacin de referencias polim
radas de un clase o interfaz en una jerarqua de herencia, que decla
asignadasaunobjetosubtipodescendientedeesaclase
se Object, referencias, cuyo tipo sea una interfaz o la cla
procurando que en ejecucin los tipos concretos asignados a estas refere
permitidosporJDO.
El otro elemento indis
colecciones, JDO especifica los tipos C
iamente por toda implementacin
ollection, Set, HashSet como ti
necesar
102
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

nales (Hastable, TreeSet, ArrayList, LinkedList, Vector, HashMap, TreeMap), cuyo


orte queda a eleccin de los fabricantes de implementaciones JDO. Los elementos
componentes de las co rsistencia, por
defecto
na

edequesuclaseseadescendiente,
o no, de otra clase; depende de que si la clase haya sido declarada en el descriptor de
persistencia. Los atributos declarados como persistentes en una clase, son persistentes
tambinenlassubclasespersistentesdeesta.
Vemoslo con el siguiente diagrama de clases que presenta como ejemplo una
jerarqua de clases que quiere representar las condiciones y productos financieros de
crdito segn el tipo de cliente, por supuesto, seguramente otra clasificacin sera ms
apropiada,perocomoilustracinestil.
opcio
sop
lecciones son especificados en el descriptor de pe
estipodeloselementosenlascoleccionesesObject.
Los cambios producidos en los objetos persistentes son automticamente
sincronizados en sus estados almacenados, para los objetos dependientes agregados por
referencia, pero no as para los objetos contenidos como parte integrante de otro (ste
extremoseexplicaenlosdetallesdelaespecificacin,msadelante).
Cmoafectalapersistenciaalaherenciaentreclases?LapersistenciaJDOdeu
clase es independiente de su posicin en la jerarqua de herencia a la que pertenezca, que
lasinstanciasdeunaclasepuedanperdurar,nodepend
Persona Juridic
-balance:String
Profes nal io Empleado
-empleador:ClienteCredito
ClienteCredito
-riesgo:int
-productosSeguro:HashSe
-productosCredito:HashSe
-informeFinanciero:String
-limiteRiesgo:double
-deuda:float
-patrimonio:float
Persona Fisica
-nivelRetributivo:in
Profesional Colegiado
-organoColegial:Asociacione
Funcionario
#empleador:Organismo_Public
Asociaciones Empresa
-acciones:int
-empleados:int
Organismo Public
Cooperativas
-socios:int
Ayuntamiento

y
alacapacidaddecadaclasepara
ero descriptor de
packag

Figura17Diagramadeclasesdeclientesdecrdito
Partiendodelajerarquadeclasesanteriorseilustralainteraccinentreherencia
persistenciaJDOmedianteelsiguientecdigo,queverific
persistir sus instancias conforme a la declaracin hecha en el fich
persistenciaempleado.
e casosdeuso;
103
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

/ **
i ght : Copyr i ght ( c) 2004</ p>
* <p>Company: Pr oyect o Fi n de Car r er a Per si st enci a y J DO</ p>
* @ver
*/
import j ava. ut i l . I t er at or ;
import j ava. ut i l . Vect or ;
import j avax. j do. spi . Per si st enceCapabl e;
import cl i ent escr edi t o. *;

public class Pr uebaHer enci a
extends AppOper
{
private Vect or vI ns;

public Pr uebaHer enci a( )
{
vI ns = new Vect or ( ) ;
vI ns. add( Pr of esi onal . class) ;

vI ns. add( Empl eado. class) ;


vI ns. add( Per sona_Fi si ca. class) ;

vI ns. add( Cooper at i vas. class) ;


vI ns. add( Cl i ent eCr edi t o. class) ;
vI ns. add( Obj ect . class) ;
}

public static void mai n( St r i ng[ ] ar gs)
{
Pr ue
pr uebaHer enci a1. ej ecut ar ( ) ;
}
ll;
wh
( i t . next ( ) ) ;
ase = ( ( Cl ass) cl s) . get Name( ) ;
Syst em. out . pr i nt l n( " Ver i f i cando per si st enci a par a: " + si dCl ase) ;
Syst em. out . pr i nt l n( " I mpl ement a I nt er f az Per si st enceCapabl e: " +
) ) ;
Syst em. out . pr i nt l n( " Las i nst anci as cl ase " + st r Cl ase +
" no pueden per si st i r " ) ;
}
* <p>Ti t l e: Per si st enci a y J DO. I l ust r aci on 2</ p>
* <p>Descr i pt i on: Desar r ol l o de ej empl os i l ust r ast i vos par a~nel pr oyect o
f i n de car r er a de J uan Mr mol Cast i l l o</ p>
* <p>Copyr
* @aut hor J uan Mr mol
si on 1. 0
baHer enci a pr uebaHer enci a1 = new Pr uebaHer enci a( ) ;

protected void ej ecut ar Oper aci on( )
{
I t er at or i t = vI ns. i t er at or ( ) ;
Obj ect cl s = null;
St r i ng si dCl ase = nu
ile ( i t . hasNext ( ) ) {
cl s =
si dCl
(
ass) . i sAssi gnabl eFr om( ( ( Cl ass) Per si st enceCapabl e. cl
cl s)
t est Per si t ( ( Cl ass) cl s, si dCl ase) ;
}
}

st r Cl ase) protected void t est Per si t ( Cl ass cl ase, St r i ng
{
try {
Obj ect obj Test = cl ase. newI nst ance( ) ;
this. pm. makePer si st ent ( obj Test ) ;
st r Cl ase + Syst em. out . pr i nt l n( " Las i nst anci as de " +
" pueden per si st i r " ) ;
}
catch ( Except i on ex) {
104
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

}
instancia
con JDO, y verifica si es posible guardar una instancia. Utilizamos dos casos de ejemplo
ependencia entre la herencia y la persistencia JDO, en una
primera
osydescendientes,esdeclaradapersistentedeformaaislada.
SituacinC
}
Listado29IlustrandolarelacinentreHerenciayPersistencia
Elcdigorecorrelajerarquadeclasesmostrandoparacadaclasesiimplementala
interfaz de JDO Per si st enceCapabl e, necesaria para que pueda persistir la
que muestran el nivel de ind
situacindondeunaclaseabstracta,quenopuedetenerinstanciasconcretas,est
declarada como persistente y un descendiente indirecto necesita persistir; y en segundo
caso,unaclaseconancestr
lasePersistenteydescendientenodirecto
<<persistente>>
ClienteCredito
-riesgo:int
-productosSeguro:HashSe
-productosCredito:HashSe
-informeFinanciero:String
-limiteRiesgo:double
-deuda:float
-patrimonio:float
Persona Fisica
-nivelRetributivo:in
super-clase persistente
<<persistente>>
Empleado
-empleador:ClienteCredit
Profesional
Declaracin de persistencia en package.jdo
<class name="ClienteCredito" >
....
</class>
<class name="Empleado"

ndenciaentrepersistenciayherencia.
heredados. gestiona automticamente los atributos heredados que
no persistentes. En el ejemplo anterior el atributo
es controlado por las implementaciones de JDO. Esto puede
suceder
guraanterioraparece
Ver i f i d
I mpl emnt
Las i nst a

Ver i f i cando per si st enci a par a: cl i ent escr edi t o. Cl i ent eCr edi t o
I mpl ement a I nt er f az Per si st enceCapabl e: t r ue
Las i a

Ver i f i cand
I mpl ement a I nt er f az Per si st enceCapabl e: f al se
Las i a

persistence-capable-superclass="ClienteCredito">
<field name ="empleador" ></field>
</class>
Figura18Diagramadeclasesilustrandolaindepe
Qusentidotieneestasituacin?Lanecesidaddepersistirymanipularatributos
Actualmente, JDO no
pertenecen a clases
ni vel Ret r i but i vo, no
cuandolosatributosenlasclasesintermediasnotienenquepersistir.
Lasalidadelaejecucindelprogramaparalasclasesdelafi
comosigue:

can o per si st enci a par a: cl i ent escr edi t o. Empl eado


e a I nt er f az Per si st enceCapabl e: t r ue
nci as de cl i ent escr edi t o. Empl eado pueden per si st i r
nst nci as cl ase cl i ent escr edi t o. Cl i ent eCr edi t o no pueden per si st i r
o per si st enci a par a: j ava. l ang. Obj ect
nst nci as cl ase j ava. l ang. Obj ect no pueden per si st i r
105
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

herencia de implementacin de la interfaz PersistenceCapable, no


es sufic
Vemos como la
iente para conseguir la persistencia de las instancias de una clase, ya que, es
necesario adems indicar a JDO, que clases pueden persistir en el fichero descriptor de
persistencia.
SituacinSuperclasenopersistente,descendientedirectopersistentesindescendientes
capacesdeperdurar.
Profesional
<<persistente>>
Persona Fisica
-nivelRetributivo:in
Empleado
-empleador:ClienteCredit
ClienteCredito
-riesgo:int
-productosSeguro:HashSe
-productosCredito:HashSe
-informeFinanciero:String
-limiteRiesgo:double
-deuda:float
-patrimonio:float
Declaracin de persistencia en package.jdo
<class name="Persona_Fisica" >
</class>

desemforo,sealesoconstantescompartidas,
suelenser
I mpl ement a I nt er f az Per si st enceCapabl e: t r ue
e cl i ent escr edi t o. Empl eado no pueden per si st i r
Ver i f i cando per si st enci a par a: cl i ent escr edi t o. Per sona_Fi si ca
I mpl e
t escr edi t o. Cl i ent eCr edi t o no pueden per si st i r
Ver i f i cando per si st enci a par a: j ava. l ang. Obj ect
I mpl e
Figura19Diagramadeclasesilustrandolaindependenciaentreherenciaypersistencia
La situacin descrita en la anterior figura tiene sentido en aquellas situaciones
dondelassuperclasesdeunaclasepersistente,nocontieneatributosquenecesitenpersistir,
comoaquelloscalificadoscomotransitorios(transient,volatile),oconstantes(final),casode
atributosdeclasequerepresentanvariables
clasesabstractas.
LaejecucindelprogramaanteriorListado29,paraeldescriptordelaFigura19es
lasiguiente:

Ver i f i cando per si st enci a par a: cl i ent escr edi t o. Pr of esi onal
I mpl ement a I nt er f az Per si st enceCapabl e: t r ue
Las i nst anci as cl ase cl i ent escr edi t o. Pr of esi onal no pueden per si st i r
Ver i f i cando per si st enci a par a: cl i ent escr edi t o. Empl eado
Las i nst anci as cl as
ment a I nt er f az Per si st enceCapabl e: t r ue
Las i nst anci as de cl i ent escr edi t o. Per sona_Fi si ca pueden per si st i r
Ver i f i cando per si st enci a par a: cl i ent escr edi t o. Cl i ent eCr edi t o
I mpl ement a I nt er f az Per si st enceCapabl e: f al se
Las i nst anci as cl ase cl i en
ment a I nt er f az Per si st enceCapabl e: f al se
Las i nst anci as cl ase j ava. l ang. Obj ect no pueden per si st i r

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

3.2.2.
aoperarelmodelo.
de reglas que rigen la interaccin entre los
elementosd m
Alg delodepersistenciadeJDO,proceden
del modelo persistencia para Java del ODMG, frente al que
JDO muest su l ODMG es la
transparencia e
Lapersistenciatransparente.

here
Laproposici anciasdentrodelmodelo.
ide
una clase control, gestor de persistencia,
3.2.2.1. rea e
Los e
lasclasesconla
3.2.2.2. Transpar
Lat
i dascomosiestuvieran
objetosprovocaquelos
estado almacenado, como si
Laa dearchivos,),del
que se
consolida.
n automtica entre los tipos de datos nativos de los sistemas de
Lailustracindelasdossituacionesvistas,muestraneltratamientodelaherencia
en JDO. Todava hay otras situaciones que considerar, cuando es utilizado el modelo de
identidad gestionado por la aplicacin (identidad de aplicacin), que exige seguir ciertas
pautas[51],peronosondeintersparaelenfoquedeesteapartado,msadelante,algunos
puntossobrelacuestinsontratadosalrevisarelcontenidodelaespecificacin.
Modelodepersistencia
JDOhasidodiseadaenbaseunmodelodepersistencia,quecomocualquierotro,
quedacaracterizadopor:
Unosfundamentosquedansoportealmodelo.
Unaseriededefinicionesdelosconceptosyelementosdescritosenelmodelo.
Una serie de reglas, que determinan la funcionalidad del modelo, constituyen
lasrestricciones,losrequisitosylaform
Un modelo de persistencia es una representacin que describe los conceptos,
elementos (tipos y objetos) y el conjunto
el odelo.
unosdelosnotablesfundamentosdelmo
de impulsado por el estndar
ra stanciales diferencias. La principal aportacin asumida de
d datos.Losconceptosesencialesenlosquelaespecificacinsesustenta,son:
La definicin de instancias JDO, sus categoras y restricciones de tipo y
ncia.
ndelciclodevidadelasinst
La ageneracinautomticadecdigo.
La persistencia dirigida por
PersistenceManager.
d inters
objetos que inter san a JDO pesistir son los objetos de las clases del dominio,
lgicadelnegocio,definidasporlosprogramadores.
encia
ransparencia,serefierea:
La lusindequelasinstanciaspersistentessonmaneja
siempredisponiblesenmemoria.Lanavegacinentre
objetos visitados sean recuperados, a partir del
nuncahubieransidodestruidosdelamemoria.
ctualizacinimplcitaenlosEIS(basededatos,sistema
estado correspondiente a cada instancia modificadaen una transaccin
La conversi
datos,dondeelestadodeloobjetosesguardado,ylostiposJavausadospara
losatributosdelosobjetospersistentes.
107
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

3
tan aspectos ligados al entorno de ejecucin, a los
elem t
cuyo es
definida
tienese stir.
o
JDO, so instancia JDO,
con u
el servic
de pers
de pers
modific e cu st
defecto, s de los tipos soportados para persistir, salvo los
sient, static y final, podrn formar estados persistentes. Todos los
modific
JDO clasifica los objetos persistentes en dos categoras en funcin como son
almacenados,sicomoobjetosindependientesdirectamenteaccesibles,ointegradosdentro
del estado almacenado de otro. Esto determina la necesidad de poseer identidad propia
paraserreferenciadoporotrosobjetos,oprescindirdeidentidadporserparteincluidade
un objeto. Esto es similar a lo que sucede en lenguajes orientados a objetos como Eiffel o
C++,conlasemnticaporreferenciaovalor.
Los objetos con identidad propia, son los objetos de primera categora. Los objetos
contenidos(embebidos)enotros,quenoprecisanteneridentidadpropia,sonlosobjetosde
segunda categora. Para que un objeto pueda ser de primera categora, su clase deber
implantar la interfaz PersistenceCapable y se deber incluir las declaraciones
oportunaseneldescriptordepersistencia.
La pertenencia a una de estas categoras afecta a la funcionalidad de compartir,
integridad y transparencia. Para los objetos de primera clase, la implementacin de JDO
debe asegurar la singularidad, que recuperado el objeto a cach slo habr una instancia
que lo represente, el seguimiento de las actualizaciones y su sincronizacin con el estado
almacenado. Los objetos de segunda categora no son compartidos entre distintos objetos,
noseasegurasusingularidadydebengestionarsusactualizacionesnotificandoasuobjeto
contenedor de primera clase. En el caso particular de los Arrays, la pecificacin
contemplacomoopcional
3.2.2.5.
virtual Java. Relaciona unvocamente identificador java interno,
ntificador empleado por el mecanismo de persistencia para localizar los estados
doscorrespondientes.
cia persistente de primera categora tendr un identificador de objeto
JDOqu
3.2.2. . InstanciasJDO
El modelo empleado por JDO limita las clases cuyas instancias pueden ser
persistentes. Las clases que represen
en os de procesamiento y procesos, no pueden ser persistentes, ni tampoco aquellas
tado dependa de objetos con estado inaccesible o remoto. Instancias de las clases
s en los paquetes como java.lang, java.net, java.io no podrn ser persistentes, no
ntidorecuperarobjetosligadosauncontextodeejecucinquedejodeexi
Las instancias correspondientes a bjetos que sern persistentes y manejados con
n denominadas instancias JDO. El estado persistente de una
stit idoporlosatributoscuyostipospuedanydebanserpersistentes,esgestionadopor
io de persistencia que implementa la especificacin JDO. Mediante un descriptor
istencia escrito en XML escrito por el programador o quien administre el esquema
istencia, se indica al Enhancer, que atributos sern tenidos en cuenta, en la
acin del cdigo compilado Java de las clas s yas in ancias persistirn. Por
todos los atributos declarado
calificados como tran
adoresJavasonsoportadosporJDO.
3.2.2.4. Objetosdeprimeraclaseydesegunda
es
lagestinautomticadelasactualizaciones.
IdentidadJDO
EnJDOlaidentidaddeunobjetopersistente,esdistintadelaidentificacininterna
del objeto en la mquina
con el ide
almacena
Cada instan
epermitesulocalizacin,asegurarsusingularidadylograrlasincronizacinentre
estado almacenado y las modificaciones consolidadas de la instancia, esto es, cada objeto
persistentetieneunaidentidadJDO.
108
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

entacin o el mecanismo de persistencia, los campos clave


constitu imaria que identifica unvocamente a cada instancia; cada clave
primaria daporunaclaseconidnticosatributosennombreytipo.La
identida
ImplementarlainterfazSerializable.
3.2.2.6. Tipos persistentes
tanlainterfazPersistenceCapable.
tcomotipodeprimeracategora.
JDOpersiguelaortogonalidadentreherenciaypersistencia,queambaspuedanser
usadas sin interferencia mutua. En apartados anteriores queda ilustrado como dentro de
LaespecificacinincluyetresdistintostiposdeidentidadJDO:identidadporbasede
datos, identidad por aplicacin e identidad no perdurable. La identidad por base de datos es
manejadaporlaimplementacindeJDOodirectamenteporelmecanismodepersistencia
subyacente, y es independiente del valor de los atributos de instancia. La identidad por
aplicacin, su valor depende de uno o ms atributos, atributos clave, y su singularidad es
asegurada por la implem
yen una clave pr
debeserrepresenta
d no perdurable o provisional, es utilizada para identificar a cada instancia JDO
mientras permanece en la mquina virtual java, pero que no es usada, ni conservada por
losmecanismosdepersistencia,elaccesoalosregistrosdeactividad,esunejemplodeeste
uso.LasimplementacionesdeJDOpuedenoptarporfacilitarlaidentidadporaplicacin,la
identidad por gestor de datos o ambas. La identidad no perdurable es opcional. Toda
implementacinJDOdeberproporcionarunaclasedesoportedelaidentidadJDOparalas
clasesquenoutilicendeidentidadporaplicacin.
Lasclasesparalasclavesprimariasusadasparalaidentidadporaplicacin,deben
serconformeconlossiguientesrequisitos:
Laclasedebeserdeclaradapblica.

Debedisponerdeconstructorpordefectoosinargumentos.
Los atributos no estticos (static) deben ser del tipo Serializable y acceso
pblico.
Losnombresdelosatributosutilizadoscomoclaveylosasdeclaradosen
el archivo descriptor de persistencia para las clases del dominio que usan
esaclaseclave,debenserlosmismos.
Lamtodosequals()yhashCode()debenusarlosvaloresdeloscampos.
delosAtributos
JDOrestringelostiposposiblesdelosatributosquepersistena:
Lostiposprimitivos,consideradosdesegundacategora.
Clases de objetos inmutables, como Boolean, String, Locales,
BigDecimal,... pudiendo ser de primera o segunda categora, a criterio de
laimplementacinJDO.
Clases de objetos mutables: Date, HashSet; la implementacin de JDO,
determinalacategoradesusoporte,comoprimeracategoraosegunda.
Clasesqueimplan
TipoObjec
Tipos de las interfaces Collection, obligatorias Set y Collection, otras
categorassonelegidasporlaimplementacindeJDO.
Otrasinterfacessonconsideradascomotiposdeprimeracategora.
3.2.2.7. Herencia
109
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

una je ses, las clases podrn disponer de persistencia,


indepen
ientoparamanejarlosvaloresdelos
de de los ascendientes de la clase declarada. Los atributos
deunaclasesernpersistentesenlassubclases.
e menos derivada,
s alta, de la jerarqua que implemente la interfaz PersistenceCapable. (una
stracinadecuadaen[29])
Podemosdescribirlasdistintassituacionesrequeridaseneltratamientodelciclode
istemedianteundiagramadeestados.
rarqua herencia de cla
dientemente de su posicin en la jerarqua. No obstante los diseos de clases
deberntenerpresenteciertasreglas:
LosatributosdeclaradospersistenteseneldescriptorXMLdeunaclase,nopueden
seratributosheredadosestoeselcomportam
atributos, no depen
declaradospersistentes
Las clases sin la cualidad de persistir con algn descendiente inmediato
persistente,debenincluiraccesibleunconstructorsinargumentos.
Cuando la identidad es establecida mediante la aplicacin, la clase usada como
claveparalaidentidaddebeserlamismaparatodalajerarqua.Losatributosque
designan la clave deben estar declarados nicamente en la clas
m
ilu
3.2.2.8. Ciclodevida
vidadeunainstanciaquepers

Figura20DiagramadeestadosdelciclodevidadeinstanciaJDO
JD establecediezestadosdeloscuales,sietesonobligatorios,correspondientesa
lidad especifica
O
la funciona da, y tres pertenecientes a funcionalidades opcionales. Veamos
losesta
Estados
instancias parten de este estado. Tambin, alcanzan el estado Transitorio, todas las
dos obligatorios.
Transitorio
Todas las instancias son creadas inicialmente como transitorias, tanto aquellas
cuyas clases sean persistentes como las que no. Su comportamiento es el propio de una
instancia no persistente. El servicio de soporte de persistencia no interviene. Las nuevas
110
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

tente
este estado todas las instancias transitorias convertidas en persistentes
durante
n
de persistencia, etc. La modificacin del valor de un atributo provoca la
transicinalestadoPersistenteAlterado.Laconsolidacindelatransicinencursoprovoca
istente del objeto en el sistema de datos asociado, y alcanzar el
estadoVaco.LaeliminacinllevaalestadodeNuevoPersistenteEliminado.
Vaco
Este estado es para las instancias JDO que representan objetos almacenados con
identidad ya determinada pero, cuyos atributos no estn asignados o sincronizados con
estasinstanciasquelosrepresentan,soninstanciasJDOvacas.Elestadovacosatisfacela
singularidad de las instancias entre transacciones, mantiene la identidad JDO y la
asociacinconlainstanciaPer si st enceManager correspondiente.Esteestadopuedeser
no visible para las aplicaciones porque es necesario a nivel de la implementacin JDO. La
modificacindeunatributoprovocalatransicinalestadoPersistenteAlterado.Elaccesoal
valor de los atributos con su consiguiente recuperacin activa la transicin a Persistente
Completo.
PersistenteCompleto
EsteeselestadodelasinstanciasJDOcuyosatributoshansidorecuperadosporla
implementacinJDOyquenohansidomodificadosenlatransaccinencurso.Cuandoel
valordeunatributoesaccedido,siesnecesariosuvaloresobtenidodelsistemadedatos
asociado por el servicio de persistencia JDO. La modificacin de un atributo provoca la
transicin al estado de Persistente Alterado. La eliminacin de la instancia fuerza la
transicinalestadodePersistenteEliminado.Laconsolidacin,revocacindelatransaccin
encursoprovocalatransicinalestadoVaco,conlaactualizacinadecuadaenelsistema
de datos. El descarte intencionado del cach de una instancia JDO, mtodo evict(obj)
(vaciar),conducealestadoVaco.
PersistenteAlterado
CuandounainstanciaJDOesmodificadaylamodificacinnohasidoconsolidada
sobreelsistemadedatos,estaalcanzaelestadodePersistenteAlterado.Laconsolidac no
revocacin de las modificaciones n al estado de Vaco. La
nteEliminado.Elrefrescodelosatributosconlosdatos
actuales
instancias que dejan de ser persistentes, por eliminacin consistente de los datos
almacenadosoporinvocacindelmtodomakeTr ansi ent ( obj ) . Unainstanciacambia
alestadoNuevoPersistentealsucedereleventohazPersistente,estoes,cuandoesinvocadoel
mtodo makePer si st ent ( obj ) explcitamente o por aplicacin de la persistencia por
alcance,cuandounainstanciapersistentesealmacena,lasinstanciasreferenciadaspasana
sertambinpersistentes.
NuevoPersis
Alcanzan
la transaccin encurso. Lasinstancias en este estado pasan a estar bajo el control
deserviciodepersistenciaJDO.Latransicinaesteestadoprovocaquelasinstanciaspasen
asermanejadasporobjetosdelaclasePer si t enceManager quecontrolarnlasrestantes
transicionesdelciclodevidayaccionesrelativasalapersistencia:asig acindeidentidad
JDO, satisfaccin de la singularidad, respaldo de los valores de los atributos para su
revocacin, coordinacin de la participacin por otras instancias, sincronizacin con los
mecanismos
el almacenamiento cons
i
efectuadas, cambia la situaci
eliminacinllevaalestadodePersiste
enlatransaccinencurso,conllevaconseguirelestadodePersistenteCompleto.
111
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

nt o del ePer si st enAl l ,


latransaccinnoescompletada.Silatransaccines
rechazada,
3.2.3.
ObjectsQueryLanguage,esellenguajeconelqueinterrogara
istencia, sobre las instancias persistentes que verifican las
condici
O s de ta e a

JD i e a d
deconsultadelosgestoresdatosaccedidos.
rmes, esto es, iterar y procesar un elevado
Nuevopersistenteeliminado
CuandounainstanciaJDO,elestadoNuevoePersistente,eseliminadaexpresamente
pasaasteestadoprovisional,entantosedecideconsolidarorechazarlaeliminacin,que
provoca la eliminacin del estado almacenado, dado el caso. Terminada la transaccin la
instanciaparaasertransitoria,alestadosTransitorio.
PersistenteAlterado
Una instancia en estado Persistente Completo, recuperada del mecanismo de
persistencia, es marcada con el mtodo del et ePer si st e
pasaaesteestadotemporal,mientras
lainstanciapasaalestadodeVaco,loquesignificaquequizstengaquevolver
a ser refrescada desde el sistema de datos correspondiente. Si se consolida la transaccin,
entonces,lainstanciapasaasertransitoria,alcanzaelestadoTransitorio.

Como podemos ver el ciclo de vida descrito recoge todas las situaciones posibles
relativasalapersistenciadeunainstanciaysusefectos.
LenguajedeConsultas
JDOQL,JavaData
los mecanismos de pers
ones de la consulta, todo expresado con una sintaxis Java, que no obliga a conocer
otro lenguaje sintcticamente distinto. En los apartados anteriores se ilustrado con
ejemplos, como trabajar con JDOQL. Aclararemos en este apartado, algunos aspectos no
vistos de JD QL. Sabemo que el resultado las consul s siempre s un coleccin, la
coleccin es inmutable de las instancias seleccionadas. La clase PersistenceManager
acta como factora de instancias de Query cuya clase debe ser proporcionada por la
implementaci nJDO.Lasconsultas OQL,sonmanejadasmed ant un interfaz eJDO,
la interfaz Quer y El diseo de JDOQL y de la interfaz que manipula las consultas, tienen
presentelossiguientesobjetivos:
La neutralidad del lenguaje, independencia del lenguaje frente a los
mecanismosdondepersistenlasinstancias.
Disponerdelacapacidadparalaoptimizacindelasconsultas.
Contemplar dos modos de procesamiento de consultas, procesamiento en
memoriaodelegadoalossistemas
Soportar conjuntos resultado eno
nmerodeinstanciasconunlimitadousodelosrecursosdelsistema.
Elusodeconsultascompiladas,evitandorepetirelprocesodepreparacinde
lasconsultas.
El anidamiento de las consultas. El resultado de una consulta puede ser el
objetosobreelquevolverarefinarunaconsulta.
Tressonloselementosbsicosrequeridosparapoderllevaracabounaconsultaa
travsdelosobjetosdelainterfazQueryson:Laclasedelasinstanciasquesonconsultadas
(clase candidata), el tipo de la coleccin resultado, bien java.util.Collection o Extent; y el
filtro de consulta, una expresin booleana Java que concreta el criterio de seleccin. Los
filtros no pueden incluir la invocacin de los mtodos de los objetos consultados. Los
112
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

uedadeparmetrosyvariablesqueforman
El empleo de variables es tema de debate respecto de la
JDOafirmanclarificarenlaprximaespecificacindeJDO.
3.2.4.
3.2.5.
atributos de la clase candidata del tipo coleccin pueden ser incluidos en los filtros para
verificarsiestnvacosoincluyenun ciertoelementoligadoaunavariable.Lascadenasde
caracteres pueden ser procesadas con los mtodos de startsWith y endsWith. La interfaz
permitelainclusinenalacondicindebsq
parte del filtro de consulta.
movilidad,quelosautoresde
Operaciones
Las operaciones necesarias para manejar el modelo de persistencia de la
especificacinJDOestnrecogidasenlaseriedeinterfacesyclasesquesondescritasenla
especificacin.Alolargodelcaptulo,seailustradodiversocdigoJavadelosprincipales
elementos necesarios para operar con instancias persistentes y JDO, ahora sern
especificados de forma breve los principales componentes de la interfaz de programacin
que propone JDO. Para conocer detalles concretos, la propia especificacin es el texto de
referencia.
Interfacesyclases

Figura21DiagramadeclasesdeJDO
3.2.5.1. I e
ta
de persi r
cdigoJava er(procesadordereferenciasJDO)queinsertaelcdigo
nt rfazPersistenceCapable
Es eslainterfazquetienequeimplantartodaclasequenecesitedelacapacidad
sti sus instancias. Hay dos opciones: teclear el cdigo o utilizar el procesador de
,JDOReferenceEnhanc
113
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

squepermitena
la impl
az permiten
idadJDO,algestordeestado,obtenerelestadoencurso
rsistenteAlterado.Lasaplicacionesnodeberanusarestainterfaz,
es una
iciales
n PersistenceManager, son obtenidas mediante la interfaz
Per si s
d n implementa s n
y el mtodo esttico
frmula recomendada para preservar la
movilid istenceManager,entre
implementac a la situacin de
persistencia de las instancias JDO de J DOHel per , delegan en las instancias, parmetro
actual de la invocacin, retornando valores adecuados aun cuando los objetos sean
transitorios. Los componentes de aplicacin encargados de manejar las instancias JDO
utilizanestainterfazparaaccederalstatusdepersistenciadelasinstanciasJDO,elestado
dentrodelciclodevidadelasinstanciasJDO.
3.2.5.4. InterfazPersistenceManagerFactory
La responsabilidad de la creacin de las instancias de Per si st enceManager se
concreta en la interfaz Per si st enceManager Fact or y. El enfoque recomendado es
utilizar esta interfaz para obtener referencias vlidas a objetos del tipo PersistenceManager.
La referencias a los objetos de esta interfaz, deberan ser obtenidos a travs del mtodo
esttico de la clase J DOHel per get Per si st enceManager Fact or y, segn queda
recomendadoenlapropiaespecificacindeJDO.LosfabricantesdeimplementacionesJDO
deben proporcionar una clase que implemente esta interfaz. La interfaz configura las
caractersticas de las instancias gestores de persistencia (PersistenceManager). Estas
caractersticas siguen el patrn Java Beans para facilitar el empleo de los mtodos de
configuracin. Las caractersticas son los parmetros de conexin (usuario, fuente y
contrasea),del modelo transaccional, concurrencia,etc. Es recomendada lautilizaci de
factoras de conexiones (Co r necesarias otras
ejecutablenecesarioenlasclasesJavacompiladas,losatributosymtodo
ementacin manejar las instancias JDO. Y todo ello sin necesidad de modificar el
cdigo fuente java, basta con incluir las oportunas declaraciones en el descriptor de
persistenciaXML. Los mtodos definidos en esta interf obtener las referencias
algestordepersistencia,alaident
ymodificarelestadoaPe
interfaz facilitada para los fabricantes de implementaciones de JDO. Los
programadores de aplicaciones deberan utilizar los mtodos de la clase JDOHelper en
lugardelosmtodosdefinidosenPer si st enceCapabl e.
3.2.5.2. InterfazPersistenceManager
Loscomponentesdeaplicacinconresponsabilidadenlamanipulacindelciclode
vidadelasinstanciasyenlaconsultadeobjetosalmacenados,utilizarnestainterfaz.Los
objetos de aplicacin accedern a los servicios de esta interfaz mediante instancias de la
implementacinJDOquematerializanestainterfaz.Habitualmentelasreferenciasin
a los objetos que implementa
t enceManager Fact or y. Un objeto PersistenceManager debera ser capaz de
manejar un nmero in eterminado de insta cias. Las cione JDO o pueden
usar los objetos de usuario como barreras de sincronizacin, salvo para la sustitucin del
gestordeestadoasociadoacadainstanciaJDO.
3.2.5.3. ClaseJDOHelper
Las aplicaciones deberan usar los mtodos de esta clase en lugar de los
establecidos en Per si st enceCapabl e. Esta clase recoge el enfoque recomendado para
accederalestadodepersistenciadelainstanciaJDOdeformaindirecta,yparaobteneruna
referencia vlida al generador de instancias gestoras de persistencia,
PersistenceManagerFactory, cuya clase debe ser facilitada por el fabricante de la
implementacin JDO. J DOHel per ofrece los mtodos estticos de consulta del estado de
persistencia, cambio al estado de Persistente Alterado
get Per si st enceManager Fact or y, que es la
adenlaobtencindelaprimerareferenciaainstanciasdePers
iones de distintos fabricantes. Los mtodos para acceder
n
nect i onFact or y) cuando pueden se
114
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

caracter
in de responsabilidades dentro de las
ager ya que existe una relacin uno a uno entre
.Conestainterfazseproporcionaunagestinde
las opci
mecanismo de persistencia subyacente y control
el primero, exigido por la especificacin JDO, desde el
la consolidacin o revocacin de las modificaciones
efectuad
er presente una vista consistente de los datos de los objetos que
ionaldondelosdatospersisten.Laoperacincon
transaccionesimplicaelestablecimientodeconexionesconlossistemasdedatos,dondeel
estado
En entornos de servidores de aplicaciones J2EE, la
Transactionylasconexionesmediante
la aplic
eventosdelciclodevidadelainstancia
ejecutados por StateManager. De esta forma es
posible
ramador. Los eventos considerados del diagrama de
estados
cronizacin de las modificaciones con el estado
todoj doPr eSt or e.
sticas de conexin como el dispositivo de conexin, controlador, puertos, etc. La
interfaz incluye un mtodo para consultar va objetos Properties las opciones no
configurables, y otro para la obtener la coleccin de las caractersticas opcionales que
disponelaimplementacindeJDOutilizada.
3.2.5.5. InterfazTransaction
La interfaz Tr ansact i on establece la separac
atribuciones de PersistenceMan
Per si st enceManager yTr ansact i on
ones disponibles para el manejo de transacciones, que puede ser aprovechada por
los desarrolladores de clases y componentes de aplicacin, en un entorno sin servidor de
aplicaciones.LasestrategiasdegestintransaccionalofrecidasporestainterfazdeJDOson
dos: gestin transaccional mediante el
optimista de transacciones. En
primer acceso a los datos hasta
as, se mantiene activa una transaccin en el mecanismo de persistencia
correspondiente.Enelsegundo,opcional,cuandolosdatossonvolcadosalmecanismoes
activada una transaccin, verificando la consistencia de los datos modificados frente a
actualizaciones paralelas. La arquitectura posibilita as, que un objeto
Per si st enceManag
controla,sustentadaenelsistematransacc
de los objetos perdura. JDO no concreta cuales son las interfaces entre la
implementacin JDO y los componentes de conexin, ni su vinculacin con las
transacciones y el perfeccionamiento de las mismas (consolidacin o revocacin), esto
queda interno a la implementacin elaborada por cada fabricante. JDO si establece que la
configuracin de las conexiones es responsabilidad de la implementacin realizada de
Per si st enceManager .
implementacindebeestablecerelvinculoentre
acin de la Arquitectura de Conexin J2EE (J2EE Connection) proporcionando las
implementacionesdelosprotocolosnecesarios.
3.2.5.6. InterfazInstanceCallbacks
El papel de la interfaz InstanceCallbacks es proporcionar un mecanismo para
efectuaraccionesquesonasociadasadeterminados
JDO. Los mtodos de esta interfaz son
laincorporacindereglasdeintegridadcomplejas enelciclode vidadelainstancia
JDO. El cdigo de las acciones y la declaracin de implementacin no son automticas,
deben ser codificadas por el prog
msatrsson:
Recupera atributos: Tras la carga de los atributos a la instancia, del grupo por
defectodeextraccin,seefectaelmtodoj doPost Load.
Consolidacin: Previa a la sin
almacenado,esinvocadoelm
Elimina y Elimina Persistente: la transicin a los estados persistente eliminado y
nuevopersistenteeliminadoconllevalaejecucindelmtodoj doPr eDel et e.
Los eventos que conducen al estado Vacio, provocan la ejecucin del mtodo
j doPr eCl ear .
115
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

3.2.5.7.
e de la
iterarsobre todaslasinstancias de una
rdedatosquecontienetodasinstancias
deuna
mentacin de JDO debe proporcionar una clase que implemente esta interfaz. Los
mt o
modific l s e o
instanci te para las clases PersistenceCapable
incl e
un mod
pueden agerquiensirveomltiples.Estainterfazgenerala
secuenc
instanci
3.2.5.10. deJDOExceptionyderivadas
InterfazQuery.ElinterfazconJDOQL,ellenguajedeconsultas
La interfaz Quer y permite recuperar instancias JDO mediante consultas con
criterios de bsqueda expresados con esta interfaz y el lenguaje de consulta de JDOL,
descritoenapartadosanteriores.
3.2.5.8. InterfazExtent
Cada instancia de la clase Ext ent representa la coleccin completa de todas las
instancias de una clase almacenadas en el sistema de datos accedido. Tambin es posible
que decidir incluir o excluir las instancias de las subclases de la clase asociada, bas
coleccin delExtent. Los usos de Ext ent son dos:
determinadaclaseyejecutarunaQuer yenelgesto
ciertaclase.Estopermiteelmanejodegrandesconjuntosdedatosylagestindelos
recursosafectados.LasconsultasefectuadassobreunainstanciaExtent,sonprocesadasen
elsistemagestordedatosdondepersistenlosestadosdelasinstanciasconsultadas.
3.2.5.9. InterfazStateManager
Los programadores no deben acceder a esta interfaz, que permite controlar el
comportamiento de las clases que pueden persistir, las que implantan
Per si st enceCapabl e que es la nica interfaz que accede a St at eManager . La
imple
od s de esta interfaz recogen la consulta sobre el estado persistente, el acceso y
acin de os atributos, y la transicin entre algunos estado d l cicl de vida de
as JDO. El cdigo generado automticamen
uy las invocaciones a los mtodos de esta interfaz. La especificacin JDO no impone
elo de servicio concreto de control del estado de las instancias JDO, por tanto,
serunanicainstanciaStateMan
ia de invocaciones de los mtodos relativos a los cambios al ciclo de vida de
asJDO,recogidosenlainterfazI nst anceCal l backs.
Clases
JDOExceptioneslaclasebaseparatodaslasexcepcionesJDO.

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

de las excepciones
cadasporuncontexto
deejecu
deloss elerror:
el usua a la posibilidad de
corregir dadde
plantear nsivo.
3.2.5.11
entacin JDO, facilita un
registro reflexin en tiempo de
ejecuci ceCapabl e) registran la
metain
3.2.5.12
ite reservar determinadas operaciones a la implementacin JDO,
operaci nodeberanserejecutadasporotrosobjetos,deotromodoseraposibleel
accesoainformacinpr tes,oprovocar
conteni
estordelosvaloresdelosatributosalatributousadoenlaidentificacinde
unainstanciapersistente.
onsumer
3.2.6.
Esta c y derivadas permit lase en la gestin disciplinada
producidasentiempodeejecucindebidasasituacioneserrorprovo
cininadecu unproblemadelainfrae ado,bienpor structuraoporelusoincorrecto
cacindelasexcepcionesrespondealafuenteuorigend ervicios.Lasclasifi
rio, el mec o de persistencia o la implantacin de JDO; y anism
yreintentar.Errorescomunespuedensercorregidosenejecucinsinnecesi
unestilo ogra depr macindefe
. ClaseJDOImplHelper
Esta es una clase de asistencia para el lado de la implem
ando la necesidad de de meta datos de las clases, evit
n. Las clases con capacidad para persistir (Per si st en
formacindurantelainiciacin.
. Clase rmission JDOPe
E ase perm sta cl
onesque
ivilegiadasobrelosmetadatosdelasclasespersisten
dosinconsistentesentreaplicacinysistemasdedatos.Estainterfaznoserusada
porlasaplicaciones.
3.2.5.13. InterfazObjectIdFieldSupplier
EstainterfazinternaaPer si st enceCapabl e,esusadaparacopiarcamposdesde
elidentificadordeobjetosdelainstancia,algestordecamposempleadoporelmanejador
del estado de la instancia asociado, objeto de la clase StateManager. Esta interfaz no ser
usada por las aplicaciones. Cada mtodo de esta interfaz facilita la copia segn el tipo de
datosdesdeelg
3.2.5.14. InterfazObjectIdFieldC
EstainterfazinternaaPer si st enceCapabl e,esusadaparacopiarloscamposde
identificadordeobjetosdecadainstanciaJDOdesdeelgestordecamposcorrespondiente
quecontrolaelestadodelainstancia.Estainterfaznoserusadaporlasaplicaciones.Cada
mtododeestainterfazfacilitalacopiasegneltipodedatosdesdelosatributosclavede
lainstanciaalgestordelosvaloresdelosatributos.
3.2.5.15. InterfazObjectIdFieldManager
Esta interfaz interna a Per si st enceCapabl e, extiende los dos anteriores por
convenienciadeimplementacin.
Hastaaquladescripcindelosprincipalesaspectosdelasinterfacesyclasesque
forman el paquete de servicios que debe ofrecer cualquier implementacin JDO. Ahora
pasamosadesgranarotroselementosqueformapartedelaespecificacin.
DescriptordePersistenciaXML
Ms atrs, en repetidas ocasiones ha quedado dicho que JDO requiere un archivo
en XML, donde se describe cuales son las clases cuyas instancias podrn persistir y cmo
objetos y datos estn vinculados. El descriptor de persistencia es la base de conocimiento
conlametainformacinnecesaria,paragenerarelcdigodepersistenciaapropiadoypara
traducirobjetosadatosyviceversa,definirlacorrespondenciaobjetodato.
117
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

s de implantaciones JDO, quienes proporcionan mediante el


especificarlarelacinentredatosyobjetos.
etasXML
ificacinJDOdefineeldocumentodedefinicindetipos,
DTD,q
r r m
etiquetaesusadaparaespecificarlascaractersticasdelosatributosde
parte
deextraccin,serrecuperadoenlaprimeralecturadelsistemadedatos,y
l tipo coleccin son especificados mediante esta
d e d
butos de instancia del tipo array, permite especificar el
bricantes incorporen nuevas
especificacin de JDO, modificado con
tabu ci
<jdo>
El contenido de los archivos utilizados cmo descriptor de persistencia, viene
determinadoporlagramticaestablecidaenlaespecificacinJDOdentrodesucaptulo18.
El fichero es utilizado por el procesador de cdigo, procesador de referencias JDO
(Enhancer),paraaadirelcdigoapropiadoenlasclasespersistentesyenlasreferenciasa
las instancias de estas clases. Tambin la implementacin JDO podra usar la informacin
delarchivoentiempodeejecucin.
DestacarqueJDOnoespecificacomoestablecerlacorrespondenciaentreobjetosy
datos. Son los fabricante
mecanismodeextensinprevisto,como
3.2.6.1. Elementosdedescripcin.Etiqu
JDOestablecequeelarchivodescriptordebeserdenominadoconlaextensinjdoy
el nombre la clase que tendr instancias persistentes, con el nombre del paquete que
contiene las clases a considerar o simplemente package.jdo ubicado donde el mismo
paquetecuyasclasespodranpersistir.
Elcaptulo18delaespec
uedeterminalagramticaquerigelasdefinicionescontenidasencadadescriptorde
persistencia. Las etiquetas principales que encontramos en un descriptor persistencia JDO
son:
<jdo> Elemento raz del documento que debe aparecer dentro del mbito de esta
etiqueta estarn contenidas las definiciones de uno o ms paquetes y
especificacionesdeextensionesdefabricante.
<package>Estableceelmbitodelaespecificacindelasclasesamodificarparala
persistenciadesusinstancias.
<class>Definelasca acte sticasdepersistenciaparalaclasequereferencia: odo
de identidad, atributos clave, caractersticas de los atributos y si dispondr de
Extent.
<field>Esta
instancia: ser persistente o solo transaccional, formar parte de la clave primaria
para identidad por aplicacin, gestin de los nulos, formar del grupo por
defecto
estaragregadoporvaloroporreferenciaparalostiposnoprimitivos.
<collection> Los atributos de
etiquetaysustrminossoneltipo eel mentos contenidosymodo eagregacin.
<array> Identifica a los atri
mododeagregacindeloselementoscontenidos.
<extensin>Estaetiquetayloselementosqueincorpora,constituyenelmecanismo
de extensin que facilita JDO para que los fa
funcionalidades,nuevascaractersticasyelmodeladodelarelacinobjetodatos.

Veamos un ejemplo extrado de la propia


la onesycolorparafacilitarsulectura

<?xml ver si on=1. 0 encodi ng=UTF- 8?>
<!DOCTYPE j do SYSTEM j do. dt d>
118
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

obj i
extension vendor - name=sunw key=i ndex val ue=bt r ee/ >
/field
< name=dept >
sunw key=i nver se val ue=emps/ >
<collection el ement - t ype=Empl oyee>
<extension vendor - name=sunw
ey=el ement - i nver se val ue=dept / >
ion>
</field>
ass>
stencia
pecfica qu podr perdurar y algo ms. Podrn persistir los
objetosdelaclaseEmplea ;cadaclaseusael
modelo
name
o emps es una
oleccincuyoselementossondeltipoEmpl oyee.Lasmarcasextensinvendor,enestecaso
ctosligadosalaimplementacinJDO,comoelusodendicesbtreey
ulan ambas clases Empleado y
3.2.7.
acionesseanporttilesentre
na aplicacin debera
ncion Odefabricantesdiferentes.Enel
ptulo ecen
spers las de movilidad, entonces
in.
ubicuo (que funcione en
das p cionales que los fabricantes
erstica no
ndolascapacidadesopcionales,evitandoladependenciacon
ados
nda
ntos,nosedebe
mienceporjdo,enelsoportede
entre usar identidad fijada por la
aplicaciones no deberan requerir de los
instanciasJDO.Encuantoala
nejodel
oqueo
<package name=com. xyz. hr >
<class name=Empl oyee i dent i t y- t ype=appl i cat i on
ect dcl ass=Empl oyeeKey>
<field name=name pr i mar y- key=t r ue>
<
< >
<field name=sal ar y def aul t - f et ch- gr oup=t r ue/ >
field
<extension vendor - name=
</field>
<field name=boss/ >
</class>
<class name=Depar t ment i dent i t y- t ype=appl i cat i on
obj ect i dcl ass=Depar t ment Key>
<field name=name pr i mar y- key=t r ue/ >
<field name=emps>


k
</collect

/c < l
/pack < age>
/jdo < >
Listado30EjemplodeFicherodescriptordepersi
El listado anterior es
doyDepartamentoensusatributossealados
de identidad por aplicacin que requiere de sendas clases para claves primarias
segnlaetiquetaobjectidclass,lasclasesEmpl oeeKeyyDepar t ment Key;elatributo
adems de persistir su valor, es la clave primaria en su clase. El atribut
c
deSun,concretanaspe
de relaciones inversas entre los atributos que vinc
Departamento.
G paralaportabilidad ua
UnodelosobjetivosdeJDOesconseguirquelasaplic
implementaciones realizadas por fabricantes distintos, esto decir, u
fu arsincambiosutilizandoimplementacionesdeJD
ca 19delaespecificacinserecogenlasrecomendacionesdemovilidadqueapar
di as por la especificacin. Si una aplicacin sigue las reg
funcionarconcualquierimplementacinJDOqueseaconformeconlaespecificac
Las primeras recomendaciones para conseguir un cdigo
to artes) son sobre el tratamiento de las caractersticas op
podran soportar en sus implementaciones, capturar la excepcin de caract
soportadayprogr
infrae
amarignora
la structura de JDO utilizada. Otro aspecto con impacto para lograr aplicaciones
ubicuas es el modelado de objetos, para ello las referencias entre objetos declar
en ser de primera categora, las instancias de segu Per si st enceCapabl e deb
categora,vectoresincluidos,nodebensercompartidasentreobjetosdisti
incluirenlasignaturamtodosoatributoscuyonombreco
la identidad JDO cada fabricante puede decidir
aplicacin, por la base de datos o ambas, las
estadosopcionalesoelestadovacodelciclodevidadelas
conectividadadiferentesbasesdedatos,lasaplicacionesdeberanevitarquesuma
bl durantelastransacciones,seaotrodistintodelalecturaconsistenteproporcionada
119
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

ncione en todas partes y con cualquier fabricante, que ya fueron


asdenuevoenesteapartado.Obviamente,
macin orientados objetos, es posible
ylagananciadecaractersticasespeciales,
d de seleccionar el cdigo ejecutableapropiadoen
programacin orientada objetos
3.2.8.
necesarioentiempo
s clases dotadas de persistencia y los
mpliadas con las
able, pueden ser
estadosalmacenadosen
ficacin,esmodificarelcdigoejecutabledela
sistenciatransparente.El
tos de las instancias, es
aadidosalaclase,que
s nuevos atributos para
a en tiempo de ejecucin, la
cia, la serializacin y la
lsignificado
r, JDO Enhancer. La
zar otras
lasclases.
decdigoobjeto.
cabo la modificacin de las
vilidaddelasclasesdeaplicacinentreimplementaciones
adas por distintas

in sin necesidad de conceder
ados.
delosatributos,sinintervencin
tesdeaplicacin.
stanciastransitorias.
por los mecanismos de persistencia. La especificacin incluye otras consideraciones para
que el cdigo fu
mencionadasanteriormente,ynosernrepetid
empleando una tecnologa y un lenguaje de progra
conciliarlaindependenciadelaimplementacin
sin renuncia,precisamente la flexibilida
el trascurso de la ejecucin, es una de las ventajas de la
dotadadepolimorfismo.
ProcesadordeReferenciasJDO
Elcaptulo20delaespecificacinJDO,detallatodocuantoes
de ejecucin, para satisfacer el contrato entre la
gestores de persistencia de cualquier implementacin JDO. Las clases a
caciones necesarias para implementar la interfaz PersistenceCap modifi
sincronizadassusinstanciaspersistentesconloscorrespondientes
smeca ismos lo n depersistencia.
Lapropuestahechadesdelaespeci
clasesparaaadirelcdigoobjetopreciso,queharefectivalaper
objeto de acceso a la lectura y escritura de los atribu cdigo
sustituidoporuncdigoequivalentequeinvocanuevosmtodos
garantizan el correcto tratamiento de la persistencia. Son aadido
facilitar el tratamiento de la introspeccin, la transparenci
gestin del estado del ciclo de vida, el tratamiento de la heren
gestindelaidentidadyclavesprimaras.Elprogramaencargadodeampliare
de las referencias JDO es denominado como ampliador o mejorado
especificacin indica que las implementaciones pueden escoger y utili
acionescomoladegenerarcdigofuenteprocesandoelcdigojavade aproxim
Mayoritariamentelosfabricanteshanoptadoporlageneracin
3.2.8.1. Objetivos
Los objetivos principales establecidos para llevar a
clasesson:
Lacompatibilidadymo
JDOdediferentesfabricantes.
Compatibilidad binaria entre las clases as modific
implementacionesdeJDO.
M intrusinenlosmto syeninstan nima do ciasdelasclases.
Proporcionar meta datos en tiempo de ejecuc
relosatributospriv permisosdereflexinsob
No obligar a los programadores a escribir mtodos para acceso y modificacin de
losatributos.
MantenerlanotacinJavadenavegacin.
Gestinautomticadelosmodificacionesdevalor
delascomponen
educir R lasobrecargadecdigoparalasin
120
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

scalificadoresdeclaseyatributo.
seguridad de las instancias persistentes evitando el acceso no
denmerosdelneaparadepuracin.
icacin detallada de los cambios,
especificacin,dondepuedeverlos
cl ave
posi ci n r el at i va 3
rrespondientealaclaseampliadaconlacapacidaddepersistir,
cildeentender:
r el at i va 1
i va 2, campo cl ave
anej a anci a
r i ng[ ] j doFi el dNames = {boss, dept , empi d,
I ndi dor es - base de dat os
i vat e
j doPer si st enceCapabl eSuper cl ass = <pcsuper >;
Soporteatodoslo
Preservar la las
autorizado.
depuracinmediantelainsercin Facilitarla
Usotransparentedelapersistencia.
En la especificacin podemos encontrar una expl
luidoenlapropia queaquveremosconunejemploinc
cambios que seran introducidos en el fuente de clase modificada. El cdigo original
apareceenazul,elcdigoaadidoestaennegro,elficherofuenteoriginalescomosigue
package com. xyz. hr ;
yeeKey { cl ass Empl o
i nt empi d;
}
cl ass Empl oyee
{
Empl oyee boss; / / campo de posi ci n r el at i va 0
Depar t ment dept ; / / campo de posi ci n r el at i va 1
si ci n r el at i va 2, campo i nt empi d; / / campo de po
St r i ng name; / / campo de
} / / end cl ass def i ni t i on
Listado31ClaseoriginalEmpleadoysuclaveprimaria
fuenteco Elcdigo
eselsiguienteconalgunoscomentariosparaqueseamsf

package com. xyz. hr ;


i mpor t j avax. j do. spi . *; / / gener ado por el enhancer
cl ass Empl oyeeKey {
t empi d; i n
}
cl ass Empl oyee
i mpl ement s Per si st enceCapabl e / / gener ado por enhancer . . .
{
a 0 Empl oyee boss; / / campo de posi ci n r el at i v
Depar t ment dept ; / / campo de posi ci n
i nt empi d; / / campo de posi ci n r el at
St r i ng name; / / campo de posi ci n r el at i va 3
/ / Campos aadi dos
pr ot ect ed t r ansi ent j avax. j do. spi . St at eManager j doSt at eManager = nul l ;
/ / M dor que cont r ol a el est ado de l a i nst
pr ot ect ed t r ansi ent byt e j doFl ags =
j avax. j do. Per si st enceCapabl e. READ_WRI TE_OK;
/ / Si no hay super cl ase, aadi r l o si gui ent e:
pr i vat e f i nal st at i c i nt j doI nher i t edFi el dCount = 0;
/ * en ot r o caso,
pr i vat e f i nal st at i c i nt j doI nher i t edFi el dCount =
et ManagedFi el dCount ( ) ; <per si st ence- capabl e- super cl ass>. j doG

*/
pr i vat e f i nal st at i c St
name};
pr i vat e f i nal st at i c Cl ass[ ] j doFi el dTypes = {Empl oyee. cl ass, Depar t ment . cl ass,
i nt . cl ass, St r i ng. cl ass};
/ / ca par a si ncr oni zaci on del est ado memor i a
pr f i nal st at i c byt e[ ] j doFi el dFl ags = {
MEDI ATE_READ+MEDI ATE_WRI TE,
MEDI ATE_READ+MEDI ATE_WRI TE,
MEDI ATE_WRI TE,
CHECK_READ+CHECK_WRI TE
};
ui ent e: / / Si no hay super cl ase, aadi r l o si g
pr i vat e f i nal st at i c Cl ass j doPer si st enceCapabl eSuper cl ass = nul l ;
/ * en ot r o caso,
i vat e pr f i nal st at i c Cl ass
121
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

t at i c l ong ser i al Ver si onUI D = 1234567890L; / / val or par a


{
l se:

nal ( ) {
ul l ?f al se:
Tr ansact i onal ( t hi s) ;

t hi s) ;
oMakeDi r t y ( St r i ng f i el dName) {
r et ur n;
Di r t y( t hi s, f i el dName) ;
( ) {
l a
at eManager
m) ;
ssi on( / / t hr ows except i on i f not
n. SET_STATE_MANAGER) ;
i s) ;
pr i vat e f i nal s
ser i al i zaci n
*/
/ / Mt odo de i ni ci al i zaci n gener ado
st at i c {
mpl Hel per . r egi st er Cl ass ( j avax. j do. spi . J DOI
Empl oyee. cl ass,
j doFi el dNames,
j doFi el dTypes,
j doFi el dFl ags,
oPer s j d i st enceCapabl eSuper cl ass,
new Empl oyee( ) ) ;
}
/ / Consul t a de est ado aadi das
publ i c f i nal bool ean j doI sPer si st ent ( )
r et ur n j doSt at eManager ==nul l ?f a
j doSt at eManager . i sPer si st ent ( t hi s) ;
}
publ i c f i nal bool ean j doI sTr ansact i o
r et ur n j doSt at eManager ==n
j doSt at eManager . i s
}
b f i nal bool ean j doI sNew( ) { l i c pu
r et ur n j doSt at eManager ==nul l ?f al se:
j doSt at eManager . i sNew( t hi s) ;
}
publ i c f i nal bool ean j doI sDi r t y( ) {
r et ur n j doSt at eManager ==nul l ?f al se:
ager . i sDi r t y( t hi s) ; j doSt at eMan
}
publ i c f i nal bool ean j doI sDel et ed( ) {
r et ur n j doSt at eManager ==nul l ?f al se:
j doSt at eManager . i sDel et ed(
}
publ i c f i nal voi d j d
i f ( j doSt at eManager ==nul l )
j doSt at eManager . make
}
publ i c f i nal Per si st enceManager j doGet Per si st enceManager ( ) {
r et ur n j doSt at eManager ==nul l ?nul l :
j doSt at eManager . get Per si st enceManager ( t hi s) ;
}
publ i c f i nal Obj ect j doGet Obj ect I d( ) {
r et ur n j doSt at eManager ==nul l ?nul l :
j doSt at eManager . get Obj ect I d( t hi s) ;
}
pub c f i na Obj ec l i l t j doGet Tr ansact i onal Obj ect I d
r et ur n j doSt at eManager ==nul l ?nul l :
j doSt at eManager . get Tr ansact i onal Obj ect I d( t hi s) ;
}
/ *j doRepl aceSt at eManager
El od i ci t a al gest or de est ado mt o sol act ual l a apr obaci n par a
sust i t uci n o l a
aut or i zaci n del i nvocador par a asi gnar el est ado
*/
publ i c f i nal synchr oni zed voi d j doRepl aceSt
( j avax. j do. spi . St at eManager sm) {
/ / l anza excepci n si el smvi gent e no per mi t e el cambi o
i f ( j doSt at eManager ! = nul l ) {
j doSt at eManager =
j doSt at eManager . r epl aci ngSt at eManager ( t hi s, s
} el se {
Secur i t yManager sec = Syst em. get Secur i t yManager ( ) ;
i f ( sec ! = nul l ) {
sec. checkPer mi
aut hor i zed
j avax. j do. J DOPer mi ssi o
}
j doSt at eManager = sm;
}
}
/ / j doRepl aceFl ags
Fl ags ( ) { publ i c f i nal voi d j doRepl ace
i f ( j doSt at eManager ! = nul l ) {
j doFl ags = j doSt at eManager . r epl aci ngFl ags ( t h
122
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A


xcept i on( )
l gest or de est ado asi gna l os
e at r i but os per si st ent es pr opi os ms l os
en
ount ( ) {
h;
ampo
r et ur n x. name;
e est ado
or al macenado en l a
ger sm= x. j doSt at eManager ;
or def ect o( MEDI ATE_READ)
}
}
/ / j doNewI nst ance

/ *El pr i mer o de l os mt odos auxi l i ar es asi gna el val or del par met r o act ual gest or
de de est ado par a l a nueva i nst anci a cr eada
*/
) { publ i c Per si st enceCapabl e j doNewI nst ance( St at eManager sm
st r act a, t hr ow new J DOFat al I nt er nal E / / Si l a cl ase es ab
Empl oyee pc = new Empl oyee ( ) ;
pc. j doSt at eManager = sm;
pc. j doFl ags = LOAD_REQUI RED;
r et ur n pc;
}
/ * El Segundo de l os mt odos auxi l i ar es adems de
val or es de l a cl ave pr i mar i a usada como i dent i f i cador J DO
*/
publ i c Per si st enceCapabl e j doNewI nst ance( St at eManager sm, Obj ect
oi d) {
/ / Si es abst r act a, t hr ow new J nt er nal Except i on( ) DOFat al I
Empl oyee pc = new Empl oyee ( ) ;
pc. j doSt at eManager = sm;
pc. j doFl ags = LOAD_REQUI RED;
/ / Copi a l os campos cl ave en i d dor J DO de l a i nst anci a ent i f i ca
j doCopyKeyFi el dsFr omObj ect I d ( oi d) ;
r et ur n pc;
}
/ / j doGet ManagedFi el dCount
/ *Est e mt odo gener ado devuel ve el nmer o d
her edados que son manej ados. Est e mt odo ser usado dur ant e l a car ga de l a cl ase
el ent or no de ej ecuci n.
*/
pr ot ect ed st at i c i nt j doGet ManagedFi el dC
r et ur n j doI nher i t edFi el dCount + j doFi el dNames. l engt
}
/ / Mt odos gener ados par a l ect ur a del val or de l os at r i but os j doGet XXX. Uno por c
per si st ent e
/ *Los cal i f i cat i vos de acceso son l os mi smos que l os decl ar ados par a el campo
or i gi nal . As pues, l a pol t i ca de pr i vi l egi os es l a mi sma que l a del campo
or i gi nal .
*/
f i nal st at i c St r i ng
j doGet name( Empl oyee x) {
/ / est e campo per t enece al gr upo de ext r acci n por def ect o( CHECK_READ)
EAD_WRI TE_OK) { i f ( x. j doFl ags <= R
/ / ok t o r ead

}
/ / el campo necesi t a ser ext r ai do por el gest or d
/ / est a l l amada podr a r esul t ar en l ugar del val
i nst anci a
St at eMana
i f ( sm! = nul l ) {
i f ( sm. i sLoaded ( x, j doI nher i t edFi el dCount + 3) )
r et ur n x. name;
r et ur n sm. get St r i ngFi el d( x, j doI nher i t edFi el dCount + 3,
x. name) ;
} el se {
r et ur n x. name;
}
}
f i nal st at i c com. xyz. hr . Depar t ment
j doGet dept ( Empl oyee x) {
/ / est e no per t enece al gr upo de ext r acci n p
St at eManager sm= x. j doSt at eManager ;
i f ( sm! = nul l ) {
i f ( sm. i sLoaded ( x, j doI nher i t edFi el dCount + 1) )
r et ur n x. dept ;
r et ur n ( com. xyz. hr . Depar t ment )
sm. get Obj ect Fi el d( x,
j doI nher i t edFi el dCount + 1,


x. dept ) ;

} el se {
r et ur n x. dept ;
Mtodosde
creacinde
tancias ins
Mtodos
atributo.S
delecturade
ielatributono
moriase
recuperadelgestorde
estadoqueasuvezlo
podraextraerdelabase
dedatos.
estaenme
123
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

n de val or al at r i but o j doSet XXX. Uno por campo per si st ent e


i nal . Por t ant o,
or def ect o
ct ual i za el val or del campo en l a
nt ;
Fi el d) {
pl aci ngObj ect Fi el d ( t hi s,

br eak;
bj ect Fi el d ( t hi s,


d ( t hi s,

n
}
}
/ / Mt odo de asi gnaci
/ *Los cal i f i cat i vos de acceso son l os mi smos que l os del campo or i g
l a mi sma pol t i ca de pr i vi l egi os de acceso or i gi na es apl i cada.
*/
f i nal st at i c voi d
j doSet name( Empl oyee x, St r i ng newVal ue) {
/ / est e campo per t enece al gr upo p
i f ( x. j doFl ags == READ_WRI TE_OK) {
r o escr i bi r / / ok par a l ee
x. name = newVal ue;
r et ur n;
}
ger ; St at eManager sm= x. j doSt at eMana
i f ( sm! = nul l ) {
sm. set St r i ngFi el d( x,
j doI nher i t edFi el dCount + 3,
x. name,
newVal ue) ;
} el se {
x. name = newVal ue;
}
}
f i nal st at i c voi d
j doSet dept ( Empl oyee x, com. xyz. hr . Depar t ment newVal ue) {
/ / est e campo no per t enece al gr upo por def ect o de ext r acci n
St at eManager sm= x. j doSt at eManager ;
i f ( sm! = nul l ) {
sm. set Obj ect Fi el d( x,
j doI nher i t edFi el dCount + 1,
x. dept , newVal ue) ;
} el se {
x. dept = newVal ue;
}

}
/ / j doRepl aceFi el d y j doRepl aceFi el ds
/ *El mt odo gener ado j doRepl aceFi el d obt i ene un Nuevo val or desde el gest or de
est ado asoci ado par a un campo especi f i co en base a su posi ci n. Est e mt odo es
i nvocado por el gest or de est ado, cada vez que a
i nst anci a
*/
publ i c voi d j doRepl aceFi el d ( i nt f i el dNumber ) {
r el at i veFi el d = f i el dNumber - j doI nher i t edFi el dCou i nt
swi t ch ( r el at i ve
case ( 0) : boss = ( Empl oyee)
j doSt at eManager . r e

f i el dNumber ) ;

case ( 1) : dept = ( Depar t ment )
j doSt at eManager . r epl aci ngO

f i el dNumber ) ;
br eak;
case ( 2) : empi d =
j doSt at eManager . r epl aci ngI nt Fi el d ( t hi s,

f i el dNumber ) ;
br eak;
case ( 3) : name =
j doSt at eManager . r epl aci ngSt r i ngFi el

f i el dNumber ) ;
br eak;
def aul t :
/ * Si hay super cl ase, del egar a esa
i f ( r el at i veFi el d < 0) {
super . j doRepl aceFi el d ( f i el dNumber ) ;
} el se {
t hr ow new I l l egal Ar gument Except i on( f i el dNumber ) ;
}
*/
/ / Si no hay super cl ase, t hr ow an except i o
Mtodosde
asignacinde
atributo.Traslada
lamodificacinal
gestordeestado,si
esnecesario.
124
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

( f i el dNumber ) ;
publ i c f i nal voi d j doRepl aceFi el ds ( i nt [ ] f i el dNumber s) {



boss) ;
br eak;
case

f i el dNumber ,







f i el dNumber , me) ;
br eak;



super . j doPr ovi deFi el d


}


except i
Ar gument Except i on( f i el dNumber ) ;

}

pub


) ;
}
}
ds
i but os desde ot r a i nst anci a a est a. Est os podr an
ser ut i l i zados por St at eManager asoci ado par a cr ear i magenes pr evi as par a su uso en
de pr i vi l egi os, el mt odo
l as i nst anci as af ect adas
per t enecen al mi smo St at eManager .
*/
t hr ow new I l l egal Ar gument Except i on
} / / swi t ch

}
f or ( i nt i = 0; i < f i el dNumber s. l engt h; ++i ) {
i nt f i el dNumber = f i el dNumber s[ i ] ;
j doRepl aceFi el d ( f i el dNumber ) ;
}
}
/ / j doPr ovi deFi el d y j doPr ovi deFi el ds
/ *El mt odo gener ado j doPr ovi deFi el d ent r ega l os val or es al gest or de est ado en base
a su posi ci n, por ej empl o cuando el campo es consol i dado per si st ent e.
*/
publ i c voi d j doPr ovi deFi el d ( i nt f i el dNumber ) {
i nt r el at i veFi el d = f i el dNumber - j doI nher i t edFi el dCount ;
swi t ch ( r el at i veFi el d) {
case ( 0) : j doSt at eManager . pr ovi dedObj ect Fi el d( t hi s,

Mtodosde
enciade
gestorde
transfer
datosal
estado.
f i el dNumber ,

( 1) : j doSt at eManager . pr ovi dedObj ect Fi el d( t hi s,
dept ) ;
br eak;
case ( 2) : j doSt at eManager . pr ovi dedI nt Fi el d( t hi s,

f i el dNumber , empi d) ;
br eak;
case ( 3) : j doSt at eManager . pr ovi dedSt r i ngFi el d( t hi s,

na
def aul t :
/ * Si hay super cl ase, del egar a esa
i f ( r el at i veFi el d < 0) {
( f i el dNumber ) ;
} el se {
t hr ow new I l l egal Ar gument Except i on( f i el dNumber ) ;

*/
/ / Si no hay super cl asepc super cl ass, t hr ow an
on
t hr ow new I l l egal
} / / swi t ch

l i c f i nal voi d j doPr ovi deFi el ds ( i nt [ ] f i el dNumber s) {
f or ( i nt i = 0; i < f i el dNumber s. l engt h; ++i ) {
i nt f i el dNumber = f i el dNumber s[ i ] ;
j doPr ovi deFi el d ( f i el dNumber

/ / j doCopyFi el d and j doCopyFi el
/ *Est os mt odos copi an l os at r
el descar t e de t r ansacci ones. Par a evi t ar pr obl emas
j doCopyFi el d puede ser i nvocado uni cament e cuando
publ i c voi d j doCopyFi el ds ( Obj ect pc, i nt [ ] f i el dNumber s) {
/ / l a ot r a i nst anci a debe per t enecer al mi smo St at eManager
/ / y su r ef er enci a no debe ser nul a
i f ( ( ( Per si st enceCapabl e) ot her ) . j doSt at eManager
! = t hi s. j doSt at eManager )
t hr ow new I l l egal Ar gument Except i on( t hi s. j doSt at eManager ! =

ot her . j doSt at eManager ) ;
i f ( t hi s. j doSt at eManager == nul l )
t hr ow new I l l egal St at eExcept i on( t hi s. j doSt at eManager ==

nul l ) ;
/ / t hr ow Cl assCast Except i on, si el ot r o cl ase es i nadecuada
Empl oyee ot her = ( Empl oyee) pc;
f or ( i nt i = 0; i < f i el dNumber s. l engt h; ++i ) {
125
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo


Fi el d ( Empl oyee ot her , i nt f i el dNumber ) {
el d = f i el dNumber - j doI nher i t edFi el dCount ;
swi t ch ( r el at i veFi el d) {

br eak;
me = ot her . name;

andl ed i n super cl ass


como si gue:

*/

}
/
/ / wr i t eObj ect
/ *Si no exi st e un mt odo pr ogr amado expl i ci t ament e wr i t eObj ect , ent onces uno
es gener ado. wr i t eObj ect asegur a que t odos l os at r i but os per i st ent es y
t r an c n l a i nst anci a y que ent onces
el l a sal i da gener ada por def ect o es vol cada sobr e el ar gument o.

pr i vat e voi d wr i t eObj ect ( j ava. i o. Obj ect Out put St r eamout )
. I OExcept i on{
j doPr eSer i al i ze( ) ;

}
ue t odos l os at r i but os per si st ent es y
t r ansacci onal es
nci a por del egaci n en el

pr i
devuel ve una nueva i nst anci a del i dent i f i cador J DO,
usado /
pub
*/
pub
I nt Fi el d ( 2) ;
}
pub
( ( Empl oyeeKey) oi d) . empi d = empi d;
/ *
( Obj ect I dFi el dConsumer
f c,
j doCopyFi el d ( ot her , f i el dNumber s[ i ] ) ;
} / / f or l oop
} / / j doCopyFi el ds
pr ot ect ed voi d j doCopy
i nt r el at i veFi
case ( 0) : t hi s. boss = ot her . boss;
br eak;
case ( 1) : t hi s. dept = ot her . dept ;
br eak;
case ( 2) : t hi s. empi d = ot her . empi d;
case ( 3) : t hi s. na
br eak;
def aul t : / / ot her f i el ds h
/ / est a cl ase no t i ene super cl ase, l anza una excepci n
t hr ow new I l l egal Ar gument Except i on( f i el dNumber ) ;
/ * Si t i ene super cl ase, el campo se t r at a
super . j doCopyFi el d ( ot her , f i el dNumber ) ;
br eak;
/ / swi t ch
} / j doCopyFi el d
sa i onal es que son ser i al i zabl e, ser n car gados e
*/
Mtodospara
la
zacin.
t hr ows j ava. i o
out . def aul t Wr i t eObj ect ( ) ;
/ / j doPr eSer i al i ze
/ *El mt odo j doPr eSer i al i ze asegur a q
gestionar
seriali
que son ser i al i zabl e son car gados en l a i nst a
St at eManager .
*/
vat e f i nal voi d j doPr eSer i al i ze( ) {
i f ( j doSt at eManager ! = nul l )
j doSt at eManager . pr eSer i al i ze( t hi s) ;
}
/ / j doNewObj ect I dI nst ance
/ / Est e mt odo aadi do cr ea y
/ par a l a i dent i f i caci n por Apl i caci n.
publ i c Obj ect j doNewObj ect I dI nst ance( ) {
r et ur n new Empl oyeeKey( ) ;
}

l i c Obj ect j doNewObj ect I dI nst ance( St r i ng st r ) {
r et ur n new Empl oyeeKey( st r ) ;
}
/ / j doCopyKeyFi el dsToObj ect I d
/ *Est e mt odo copi a l os at r i but os cl ave pr i mar i a desde ot r a i nst anci a per si st ent e o
desde ot r o Obj ect I dFi el dSuppl i er .
l i c voi d j doCopyKeyFi el dsToObj ect I d ( Obj ect I dFi el dSuppl i er f s,
Obj ect oi d) {
( ( Empl oyeeKey) oi d) . empi d = f s. f et ch
l i c voi d j doCopyKeyFi el dsToObj ect I d ( Obj ect oi d) {

}
j doCopyKeyFi el dsFr omObj ect I d
Est e mt odo copi a l os at r i but os cl ave pr i mar i a a ot r a i nst anci a per si st ent e o
Obj ect I dFi el dConsumer .
*/
publ i c voi d j doCopyKeyFi el dsFr omObj ect I d
Obj ect oi d) {
f c. st or eI nt Fi el d ( 2, ( ( Empl oyeeKey) oi d) . empi d) ;
}
pr ot ect ed voi d j doCopyKeyFi el dsFr omObj ect I d ( Obj ect oi d) {
Mtodosde
generacinde
ra
ancias.
identidadpa
nuevasinst
126
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

mpi d = ( ( Empl oyeeKey) oi d) . empi d;


} / / en
Listado32ClaseEmpleadoampliada
nesa
los rib y en
corr
respons todos facilitan la interaccin con la implementacin, como la
tran r s y el gestor de estado asociado. La gestin
de la identidad JDO, su asignacin y la copia de los campos clave primaria o la
ente. La
la clase
laclaseoriginal.
3.2.8.2.

m
esdurantelaintroinspeccin.
aquenoseandeclarados
den estos atributos deben
3.2.9.
amplio y
complejo, que la especificacin trata de forma breve y densa, cuando no se conoce J2EE.
sido diseado considerando dos escenarios principales dentro de los servicios de
aplicacin Java: Session Beans con clases persistentes JDO para implementar objetos
depend
istentes como
retorno de invocaciones en referencias remotas hechas por los clientes conectados a los
e
}
d cl ass def i ni t i on
Bsicamenteelcdigoaadidoconsisteeninterceptarlosaccesosyasignacio
at utos de las instancias persistentes para asegurar la recuperacin desde
espondencia con el almacen de datos, delegando a la implementacin estas
abilidades. Otros m
sfe encia entre los campos de las instancia
serializacin, son otros de los mtodos necesarios incorporados automticam
serializacin queda de forma que es posible la restauracin en una instancia de
ampliadaoen
Limitaciones
Laespecificacinestablecealgunaslimitaciones:
Duplicado de instancias (cloning): Las instancias copia de otra persistente, deben
ser marcadas como transitorias. El Enhancer, modifica ciertos mtodos invocados
por el mtodo cl one pero hay dos situaciones no cubiertas: la invocacin de un
mtodosobrelacopiaycuandolaclaserazdeherencianodeclaraelmtodoclone,
el clon no queda desconectado, hasta que este produce un primer acceso al
StateManager.
Introinspeccin: No son introducidos cambios en la funcionalidad de
introinspeccin, que es un objetivo para futuras versiones de JDO. Todos los
campos son expuestos a las interfaces de progra acin. Sera de esperar la
posibilidaddenavegacinentreinstanciaspersistent
Referenciaspblicas:Losatributospblicosserecomiend
persistentes, la razn es que tal caso las clases que acce
serampliadasconprocesadordecdigo.
Herencia:EsnecesarioutilizarunamismaclaseparafacilitarlaidentidadJDOpor
aplicacinenunamismajerarquadeherencia.Actualmentenosongestionadoslos
atributos de las clases ancestro que no son persistentes. Es una funcionalidad que
serrecogidaenprximasversionesdeJDO.
Estasrestriccionespuedenserevitadasenciertosrodeosyenlaprctica,afectana
unnmerodesituacionesreducido.
IntegracinconservidoresdeaplicacionesJava
La integracin en servidores de aplicaciones Java de JDO es un tema
JDO ha
ientes,yEntityBeanconclasespersistentesJDOutilizandolapersistenciamanejada
por los beans (BMP) o por el contenedor(CMP). La cuestin es oscura, pero hay unas
cuantas ideas clave a tener en cuenta. La utilizacin de JNDI para localizar la factora de
creacin degestores de persistencia, Per si st enceManager Fact or y. Laintegracin con
las transacciones de servidor de aplicaciones, es preferible usar los objetos Tr ansact i on
proporcionados por servidor de aplicaciones. Y no usar instancias JDO pers
127
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

servicio
3.2.10
elenfoqueaquconsiderado.


cin

3.2.11
O esta descrita en 24 captulos y 3 apndices, en algo ms de un centenar y
medio de pginas; a primera vista y acostumbrados a especificaciones mucho ms largas,
puede parecer que la especificacin no sea completa, pero no es as. Podramos distinguir
seisblo enlaespecificacin:
Un primer bloque, captulos 1 a 4, donde se delimita el contexto de la
especificacin:mbito,objetivos,arquitecturas,actoresimplicadosysuspapeles,ysendos
escenariosejemplodelosdosmodelosdearquitecturaconsiderados.
El segundo, dedicado a la definicin del modelo de persistencia que propugna la
especificacin,captulosdel5al6.Presentaelciclodevidadelasinstanciasapersistiryel
modelodeobjetosparalapersistencia,quesepretendeseaelmismomodelodeobjetosde
aplicacinynegocioutilizadoenunacorrespondenciasinseparaciones.
El tercer bloque formado por los captulos 7 al 15, detalla los interfaces de
programacinautilizarparamanejarlapersistencia.
Bloque cuatro, captulo 16, presenta la integracin entre JDO y los granos de Java
paraempresa.
El quinto, captulos 17 a 22, se detalla la especificacin de distintos aspectos
tcnicos a cubrir por los servicios ofrecidos con una implementacin JDO desde la
perspectivadeintegracineinteroperatividad.
Y un ltimo bloque compuesto por el captulo 23, que presenta la gramtica BNF
dellenguajedeconsultasdeJDO,yelcaptulofinal24,querecogeunalistadecuestiones
pendientespospuestashastalasiguienteversindelaespecificacin.
sdeaplicaciones.Laespecificacinapuntaciertospatronesdecdigoqueayudana
laimplantareintegrarelusodeJDOenunservidordeaplicaciones.
. Asuntospendientes
LaespecificacinJDOrecogeenelltimocaptulo,unalistadecuestionesabiertas
pendientesderesolver.Untotaldequincecuestionessonrecogidas.Algunasdelascuales
sondeespecialinterspara
Transaccionesanidadas.
Puntosdesalvaguardayretroceso.
Referenciasentreinstanciasgestionadaspordistintosgestoresdepersistencia.
Interfazdeprogramacindelprocesadordecdigo.
Interfazdeprogramacinparalarecupera anticipadadeobjetos.
Manejodeobjetosnoestructuradosenormes.
Soporteparalasrelaciones.
Desconexinycierredelafactoradeconexiones.
Cuestionesdemanejodecadenasenconsultas.
Proyeccionesenlasconsultas.
Todas estos temas se pretende estn resueltos, en una prxima revisin de la
especificacin,queyaestahainiciadosucurso.
. Laespecificacin:suorganizacinyredaccin.
JD
ques
128
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

3.2.12. A
os
apndicesquerecogen:
entacinJavadeconsideracinparalaespecificacin
Las decisiones de diseo tomadas para determinar las interfaces y las alternativas
3.2.13. Implementacin
cancelacalificacindeversindefinitiva,y
los pro
loga, es el conjunto de pruebas,
herramientasydocumentacinquepermiteaquienimplementalaespecificacinverificar
sisurea
de los
productos que dicen ser compatibles con JDO. Todo ello permite manejar ms
adecuad
3.2.14 JDO:Correspondenciaobjetodato
Quizs tras la lectura de los prrafos anteriores nos encontramos que an
considerando la lista de asunto s, parece faltar algo m Cmo vincular los
objetos y sus atributos con el modelo de datos de los sistemas de gestin de datos
utilizadosco elose sobjetos.Desdeelenfoquedeestetrabajo,la
corresponde tos es o de
persistencia no o concretar la relacin entre objetos y datos
en los mecanismos de persistenc dio para expresar ste vnculo es incluir, en el
descriptor de persistencia, la d n la correspondencia nte las etiquetas
extensin.Elproblemadelacorrespondenciaesrelegadoani implementacinJDO
ydelosmecanismospropuestosporsufabricante.Esteaspectodelapersistenciaesuneje
centrald nuevaversindeJDO2.0,q enfased andariz in.
3.3. Resumen
nstecaptulolaespecificacinJDOhasidocomentada,paraponerdemanifiesto
los elementos principales de la especificacin. La especificacin esta enfocada a la
persistencia del modelo de objetos del dominio, como un servicio de programacin Java.
JDO establece un modelo de persistencia para las clases del dominio de las aplicaciones
consistente con el modelo de objetos Java, un modelo que no fuerza la utilizacin de
elementosligadosalaimplementacinconcretadelserviciodepersistencia.
pndices
Al final de la documentacin de la especificacin de JDO, estn incluidos un
Lasreferenciasadocum
deimplementacin.
Elhistorialderevisindeldocumento
deReferenciayEquipodecompatibilidaddela
tecnologa
JDO ha sido desarrollada siguiendo el proceso de estandarizacin impulsado por
Sun, el Java Community Process (JCP). Este proceso de estandarizacin obliga a la
realizacindeunapruebadeconceptodelaespecificacinydeunabateradepruebasde
compatibilidadantesdequelaespecificacinal
ductos puedan ser marcados con la conformidad a JDO. La implementacin de
referenciaconcretayhaceejecutablelaespecificacin,constituyelapruebadeconceptode
la tecnologa. El equipo de compatibilidad de la tecno
lizacinesconformealaespecificacin.
JDO incluyeambos conjuntos de programas y documentacin, que son clavepara
permitir efectuar las pruebas oportunas sobre la utilidad de JDO y la verificacin
amentelosriesgosenlaapuestaporestatecnologa
. Qunoaborda
s pendiente s:
moalmacnd
ncia objeto da
. En efecto, JDO
stadosdelo
un requisit
especifica com
ia. El me
eclaraci
que debe ser cubierto por los servicios
media
veldela
ela ueesta eest ac
E
129
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

lodevidadelasinstanciasJDOtienesieteestadosesencialesquecomprenden
que una instancia persistente recorre desde su creacin, modificacin
ccin persistente. Estn especificados en JDO, otros estados de
pcional.
macin bsicos para
consegu
y Ext ent .
ficacin,lasrecomendaciones
bs s
con n
Commu rogramacindeaplicacionesqueposibilitala
persiste
utiliz
deaplic
Elcic
todas las etapas,
hasta su destru
implementacino
Lasinstanciaspersistentesnecesitandeunaidentidadligadaalapersistencia.JDO
ofrece tres modos de identidad: identidad por aplicacin, identidad por gestor de datos e
identidadnoperdurable.
JDO concreta en once interfaces los contratos de progra
ir una persistencia transparente y una facilidad para la recuperacin selectiva de
instanciasmedianteellenguajedeconsultaJDOQL.
Parte de las interfaces estn dirigidas a los fabricantes de implementaciones JDO,
para garantizar su interoperatividad. Un programador debera dominar para conseguir la
persistencia de objetos, bsicamente conocer y utilizar J DOHel per , Tr ansact i on,
I nst anceCal l backs, Quer y
Laespecificacinconcretacmodeclararquevaapersistirmediantearchivosxml.
Los archivos descriptores de persistencia son utilizados por la implantacin y por el
procesadordereferenciasJDO,paragenerarelcdigonecesarioaincluir,enlasclasescon
instanciaspersistentes.Tambin,hasidoincluidaenlaespeci
ica para alcanzar un buen nivel de movilidad, entre diferentes productos conformes
la ormaqueJDOestablece.
La especificacin estndar Java Data Objects, desarrollada en el marco de Java
nityProcess,defineunainterfazdep
nciatransparente,escalabledesdesistemasempotradosaempresarialeseintegrable
andoelestndarEJByJ2EE.Dossonlosmodelosdeejecucin:doscapassinservidor
acionesytrescapasintegradoenservidordeaplicacionesJava.

130
Capt ul o 4
I VA J DO VS OTROS
4.1. mb
a comparativa que se pretende elaborar, tiene
presentes trabajos sobre la cuestin de
K.Dittri dan,trabajosentreloscuales
secompara
A lo
fundamento
enjuiciarJD
Para
podra s
queesms
requisitospropuestos
La si
JDOde
delacompa
COMPARAT
itodelacomparativa
En el primer captulo eran presentadas distintas tecnologas para guardar y
recuperardatosJavapersistentes:laserializacin,JDBC,SQLJylaadaptacinparaJavadel
ODMG(ODMGBindingforJava),yfueestablecidounmarcoderequisitosasatisfacerpor
unserviciodepersistenciaorientadoobjetos.ElanteriorsehapresentadoJDO.
EstecaptulopretendecompararJDOfrenteaJDBC,SQLJyODMGadaptadopara
Java,desdelasperspectivasdelrendimiento,laproductividadyelmarcoderequisitos,que
fue establecido unos captulos antes. L
las opiniones, sobre la cuestin vertidas en los
ch[10],TornstenyD.Barry[35],E.Cecchet[37]yD.Jor
laserializacin,JDBCyJDO[38].
largo del trabajo realizado hasta el momento, han sido presentados algunos
s,opinionesycomentariosquesustentanunabasesobrelaquienleepuedeya
Ofrenteaotrastecnologasdepersistencia.
llevaracabolatareadecomparar,atendiendoalovistohastaelmomento,se
con eguir el objetivo de comparar con unas pruebas de rendimiento sencillas, ver
productivoyfinalmente,elaborarunresumendondesecomparacualesdelos
soncubiertosporlastecnologasencomparacin.
guiente tabla, obtenida del artculo de D.Jordan [38], explica la posicin de
sde laperspectivadeunaarquitecturaencapas,quesirveparadescribirelcontexto
rativa.
Tabla3Alternativasparapersistenciaenlacomparativa
Aplicacin
Objetos java como interfaz bsico
Objetos java
actan como
interfaz bsico

Celdas de
una tabla
sirven como
interfaz
bsico
JDO
J DBC
Serializacin RDBMS OODBMS
SISTEMA DE FICHEROS

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

4.2. Comparativa
4.2.1. Rendi
ortante para extrapolar
conclus
apartado de rendimiento, se buscaron
pruebas adas, tres
pruebas nibles sus
siendoredactadosestosprrafos:
patrones de diseo de aplicacin y
aciones. David Jordan ha
ara usar JDO, cuyos resultados viene
sasconferencias.
mientodediferentesproductosJDOsobrelabase
de datos de
as de mapeo
confirmar o descartar, los
ados muestran, diferencias
qu se mide, cmo y bajo que
por operacin, nmero de
ntodebeserconsiderado
sdistintos,comorendimientoholsticoynointegral.
eba es medir, si el rendimiento comparado de JDO, es tan
pueda sustituir a las otras tecnologas de la comparativa, o
n psimo, que no sea conveniente usar
las bases de datos, por lo que no es
urrencia.
jetivo de JDO, donde el aspecto del
que tienen los usuarios de lo rpido que
,eltiempoderespuestadelasoperacionesinteractivasy
portantesdedatoscomplejos.Enrazndelo
empo necesario para llevar a cabo las transacciones
to compuesto de varios de forma interactiva y, por otro lado,

miento
El rendimiento es para muchos un factor primordial, en la eleccin de una
tecnologa. Una tecnologa con aparentes grandes cualidades pero sin la capacidad para
acometer determinadas cargas de trabajo, en tiempos de respuesta, considerados
comnmente aceptables, es desechada. Hay circunstancias bajo las que esta es, la premisa
quemspesaenladecisindeelegirunatecnologayunproducto.
Las pruebas de rendimiento entraan una dificultad imp
iones generales, ya que, los resultados dependen de los productos y entorno
concretos,queinfluyenenlamedida,deformaque,losresultadoscambian,inclusomucho,
en funcin los productos escogidos y los ajustes hechos en la plataforma. De ah, lo
sofisticadoylaboriosodeunasautnticaspruebasderendimiento,queseranobjetodeun
trabajofindecarreracompleto.
Por todo ello, a la hora de plantear este
estndar y sus resultados, para ser tenidos en cuenta. Fueron encontr
relacionadas con este trabajo, pero para ninguna de la tres, estn dispo
resultados,cuandoestaban
RUBIS [53] es un banco de pruebas para
escalabilidad de rendimiento de servidores de aplic
realizado una la adaptacin de esta p
presentadoendiver
OO7[44]permitemedirelrendi
un mode
objetos.
lo usado en 1994, para medir el rendimiento de las bases
TORPEDO2004 [55] que mide la sofisticacin de las herramient
ObjetoRelacional(OR),enlugardelrendimiento.
En este trabajo, las pruebas estn encaminadas a
pronsticos hechos desde los siguientes apartados, si los result
significativasentretecnologas.
Disear una prueba de rendimiento exige decidir
circunstancias o carga. Qu considerar? Tiempo de respuesta
racionesporsegundo,nmerodetransacciones,...Elrendimie ope
conunaponderacindefactore
El propsito de las pru
adecuado como para que JDO
por el contrario, el rendimiento obtenido resulte ta
es medir el rendimiento de JDO. El objetivo no
necesariogenerarunapruebaenconc
Las aplicaciones de negocio son el ob
rendimiento ms relevante, es la percepcin
funcionanlasaplicaciones,estoes
delasoperacionesqueprocesanvolmenesim
cual, las pruebas medirn
s de crear un obje
el ti
respectiva
132
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

simular una actualizacin m una estructura de


objetos
soperaciones.
con la creacin y el recorrido de los
cinco ramas con cinco niveles de profundidad, rboles de 19.531
ejemplo de complejidad, el nmero de nodos escogido es
idades
muchos dominios de los negocios, ejemplos
contrato, la estructura de una organizacin,
iones
Caccediendoasistemasrelacionalesmsreconocidos.Noson
ruebas sobre SQLJ, porque la prueba con SQLJ no aportara
codificacin de bucles de
estnalmismonivel.
sdeobjetosmsextendidas.Si
BMS, con la plataforma de
, las diferencias mnimas para poder
(RI),queusa
y ODMG 3.0 para RDBMS, por su
n el mercado. Los fabricantes de RDBMS centran su inters en
acceso JDBC, caso de Versant,
porunsimpleporttilPIV
iaparallevaracabolasprueba
manejaarchivosindexados,las
bjectStore,VersantyFastObject,y
Lossistemasgestoresdebasesde
delmomentoactual..
sesde
mitiran
xtraer
acin
ver, persistiendo a buen seguro, con otros entornos de
4.2.1.1. PruebadeTransaccinInteractivaenelBanco
La prueba consiste en el caso de uso de la creacin de una cuenta para un nuevo
cliente delBanco. Esuna situacin tpica de las transacciones enlos modelos de negocios,
dominio que los sistemas relacionales imperan, que permite comprobar, si JDO es
asiva con la creacin y recuperacin de
complejayvoluminosa.
La primera prueba sesimula conla ejecucinde una transaccin interactivasobre
el ejemplo del Banco, con la creacin de una cuenta para un cliente nuevo. Podran
efectuarse otras, la consulta, actualizacin y eliminacin, tras comentar los resultados de
estaveremos,sisonnecesariaslasotra
La segunda de las transacciones, se simular
nodos de un rbol de
nodos. Los rboles son un
importante para el entorno de ejecucin, y adems,son la formade representar ent
formadas por numerosos componentes en
de un documento como un tenemos des
productoscochesosistemasCAD/CAM.
Lacomparativaconsideralassiguientessituac
JDOfrenteaJDB
realizadas p
variacionessignificativas,dadoqueSQLJ,utilizaJDBCparalassentenciasSQL
dinmicas, y mayor su ventaja es su sintaxis y la
accesoadatos,porlodemsSQLJyJDBC
JDOfrenteaODMGaccediendoabasesdedato
a los RD bien ODMG 3.0, considera el acceso
productos disponibles pruebas y los
inclinarlabalanzaafavordeunodelosdos.
Lamedicindelrendimientodelaimplementacindereferencia
archivosindexados.
No tiene sentido medir el rendimiento, SQLJ
poco peso especifico e
ofrecer ceso JDBC. Incluso en OODBMS se ofrece un ac
MatisseuObjectivity.
Elentornodeejecucindelaspruebasestaconfigurado
a2.4GHZconRAM256MB,comomecanismosdepersistenc
sevanutilizarlaimplementacindereferenciadeJDO,que
basesdedatosdeobjetoscompatiblesconODMG3.0.O
ysSql,SqlServeryOracle. lasbasesdedatosrelacionalM
losmsrepresentativos datosson
Elentornoejecucinnoesideal,otrasconfiguracionesconunservidordeba
datos en red, con unos cuantos ajustes en los parmetros de funcionamiento, per
obtenerunosresultadosmsprximosaunasituacinreal,peroanas,esposiblee
quenosocupa,porquelasdiferenciasencompar conclusionesdeintersalpropsito
son muy relevantes, como se
prueba.
133
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

s dedicadas a los negocios en este estilo de aplicaciones


ados dos programas Java, uno para JDO y otro para
los objetos implicados, clientes, los movimientos de
las cuentas y la relac , de cliente a cuenta,
cartera, de cuenta a clientes, titula que lo contiene. Los
program
Los programas adaptan el ejemplo de las clases AperturaCuenta y AppOper del
ndos de la creacin de dos
cuentas
publ
Doubl e. par seDoubl e( ar gs[ CREARGC] ) ,
Doubl e. par seDoubl e( ar gs[ CANARGC] ) ) ;
nc


apropiado para las aplicacione
. interactivas
De esta forma, son prepar
e codifican la creacin de JDBC, qu
apertura, iones correspondientes entre estos
res, y del movimiento a la cuenta
as ejecutados insertan los datos de los objetos en una instancia del SGBR MySql
empleando el mismo controlador de acceso a datos favoreciendo la comparacin. Se
ejecutan dentro del mismo programa dos transacciones consecutivas, para amortiguar el
efectodeinicio,conlascargainicialecreacindecaches,etctera.
Listado 19, para medir el tiempo de ejecucin en milisegu
parasendos nuevos clientes. La primera transaccin queda afectada por el efecto
inicial de carga de las clases y metadatos necesarios para operar, la segunda debera
aprovechar la estructuras creadas en la primera transaccin mejorando la respuesta. Esto
facilitatambinlacomparacinentreJDOyJDBC.
LaesenciadelprogramaparaJDOestaenelsiguientelistadoListado33:
private Cuent a cu;
/ **
* Aper t ur a de cuent a par a nuevo cl i ent e
* @par amar gs Ni f , CCC, cr edi t o, cant i dad eur os
*/
ic static void mai n( St r i ng[ ] ar gs)
{
Aper t ur aCuent a nc;
if ( ar gs. l engt h < NUMARGC) {
Syst em. er r . pr i nt ( " Por f avor , NI F, CCC, cr edi t o, cant i dad" ) ;
return;
}
nc = new Aper t ur aCuent a( ar gs[ NI FARGC] , ar gs[ CCCARGC] ,

. ej ecut ar ( ) ;
Syst em. out . pr i nt l n( " Ti empo ej ecuci n ( ms) : " +
nc. obt ener Ti empoRespuet a( ) ) ;
nc. ccc = ar gs[ CCCARGC + 4] ;
nc. ni f = ar gs[ NI FARGC + 4] ;
nc. ej ecut ar ( ) ;
Syst em. out . pr i nt l n( " Ti empo ej ecuci n ( ms) " +
nc. obt ener Ti empoRespuet a( ) ) ;

EnlaclaseancestroAppOper:
public void ej ecut ar ( )
{
try {
long st ar t , st op;
st ar t = Syst em. cur r ent Ti meMi l l i s( ) ;
t x. begi n( ) ;
ej ecut ar Oper aci on( ) ;
t x. commi t ( ) ;
st op = Syst em. cur r ent Ti meMi l l i s( ) ;
t i empoRespuest a = st op - st ar 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( ) ;
}
134
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

ySQLusandoelmismocontroladorconector.Elprogramaadaptado
paraJDBC,sediferenciaenlacodificacindelaoperacinqueconsiguelapersistencia,el
mtodoconcretoejecutarOperacion,
protected void ej ecut ar Oper aci on( )
{
St r i ng st r SQL;
cu = new Cuent a( ) ;
cu. aper t ur aCuent aNuevoCl i ent e( ni f , ccc, l i mcr edi t o, apor t aci on

/ / Aper t ur aCuent aNuevoCl i
try {
/ / Al t a cl i ent e
st r SQL = " I nser t i nt o Cl i ent e ( ni f ) val ues ( \ " " + ni f + " \ " ) " ;
pst mt = con. pr epar eSt at ement ( st r SQL) ;

t mt . e ut e(
/ / Al t a cuent a
st r SQL =
" I nser t i nt o Cuent a ( codi gocuent a, debe, haber , l i mi t eCr edi t o, sal do ) " +
" val ues ( \ " " + ccc + " \ " , ?, ?, ? , ?) " ;
pst mt = con. pr epar eSt at ement ( st r SQL) ;

pst mt . set Doubl e( 2, cu. get haber ( ) ) ;
pst mt . set Doubl e( 3, cu. get Li mi t eCr edi t o( ) ) ;
pst mt . set Doubl e( 4, cu. get Sal do( ) ) ;
pst mt . execut e( ) ;
/ / Al t a Movi mi ent o
st r SQL = " I nser t i nt o Movi mi ent o ( codi gocuent a, " +
" f echaOper aci on, f echaVal or aci on, " +
" mot i vo, i mpor t e ) val ues" + " ( \ " " + ccc +
" \ " , ?, ?, ? , ?) " ;
pst mt = con. pr epar eSt at ement ( st r SQL) ;

long f o, f v;
I t er at or i t = cu. get Apunt es( ) . i t er at or ( ) ;
while ( i t . hasNext ( ) ) {
Movi mi ent o mov = ( Movi mi ent o) i t . next ( ) ;
f o = mov. get FechaOper aci on( ) . get Ti me( ) ;
f v = mov. get FechaVal or aci on( ) . get Ti me( ) ;
pst mt t Ti m ne
pst mt t Ti m ne
pst mt . set St r i ng( 3, mov. get Mot i vo( ) ) ;
pst mt . set Doubl e( 4, mov. get I mpor t e( ) ) ;
pst mt . execut e( ) ;
}
/ / Al t a en r el aci ones Car t er a y Ti t ul ar es
St
st r SQL = " I nser t i nt o car t er a ( ni f , codi gocuent a ) " + val nc;
pst mt . execut e( st r SQL) ;

Listado33PruebaderendimientoInteractivoJDO
El programa anterior ser ejecutado sobre la implementacin JDO RI y sobre dos
productos comerciales JDO para RDBMS, Kodo Solarmetric y JDO Genie, ambos sobre
JDBCaccediendoaM
) ;
ent e
ps xec ) ;

. se e( 1, w j ava. sql . Ti me( f o) ) ;
. se e( 2, w j ava. sql . Ti me( f v) ) ;
pst mt . set Doubl e( 1, cu. get debe( ) ) ;
r i ng val nc = " val ues( \ " " + ni f + " \ " , \ " " + ccc + " \ " ) " ;
st r SQL = " I nser t i nt o t i t ul ar es ( ni f , codi gocuent a ) " + val nc;
pst mt . execut e( st r SQL) ;
}
catch ( Except i on e) {
e. pr i nt St ackTr ace( Syst em. er r ) ;
135
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo


para la productividad. Antes de obtener los resultados
numricos de la ejecucin de los correspondientes programas y analizar los resultados,
mencionarqueseespera JDBCySQLJ.
JDOena basesdedatosrelacionalesvsJDBC/SQLJ
A star JDO frente SQLJ, estamos comparando tecnologas, que
tiene comn de persistir datos, pero por lo dem sfacen objetivos
diferentes, ta entonces una comparacin desigual. Las implementaciones JDO
revis e este trabajo, utilizan JDBC internamen esta situado encima, en
una ramacinqueutilizadelosserviciosdeJDBC. podrasuceder
conSQL plementacin podramodificarelcdigoejecutabledelasclasescon
cdigo embebido SQLJ a JDBC para el acc co SQL. Bajo esta
perspectiva, una implementac sustentada sobre JDB es ms lenta en el
accesoalosdatosdelRDBMSsiempre.Pero deconlosobjetos?
Insistir que el inters aqu, es s, no el acceso a los datos.
SQLJ y JDBC no manejan objetos sin intervencin del programador, los datos ex
debensertransforma LJmanejantiposde
datos de
implem
quelasolucinJDBCsinmodelodeobjetos,debidoaqueJDBCnotienelasobrecargade
rniente a JDO,
www.jdocentral.com
try {
con. r ol l back( ) ;
}
catch ( Except i on a) {
a. pr i nt St ackTr ace( ) ;
}
Listado34PersistirunacuentaconJDBC
Enunprimervistazo,ladiferenciaesencialentrelaimplementacinJDOylaJDBC
es,elaumentodelaslneasdecdigonecesariasparalograrlapersistenciadelosobjetos
con JDBC, hecho de relevancia
respectoalrendimientodeJDOfrente
ccesoa
l contra JDBC y
n un objetivo s, sati
resul
adas durant te; JDO
capadeprog Igualmente
J,unaim JDO
esttico y usar eso dinmi
in JDO C o SQLJ,
quesuce
el efecto sobre los objeto
trados
dosenobjetosporelprogramadorJDBC3.0ySQ
usuario de SQL99, con la asistencia objetos para correspondencia que
entan el interfaz SQLData, pero sin transparencia! En resumidas cuentas, en el
mejor de los casos cuando se trata con objetos, la latencia resultante debera tender a ser
muysimilares.
Esdeesperarqueconunmodelodeobjetosmuysimple,JDOdeberasermslento
delservicioJDO,consuscaches,controldemodificaciones,Peroconmodelosdeobjetos
complejos,qusucede?Enlosmodeloscomplejosesdondelosmecanismosparamejorarel
rendimientodesempeansupapel,aventajandoaunaaplicacinJDBCnopreparada.
La opiniones en el foro de referencia para todo lo conce
, como la de David Jordan, expresan que cuanto ms complejo es el
deobjetos(relacionesdeherencia,clientela,coleccionesgrandes,navegacinentre
objetos...) mayor es el rendimiento de una buena implementacin frente al equivalente
JDBC (y SQLJ), que probablemente requiera un mayor esfuerzo de programacin y
obtendra peores
modelo
resultados. En una situacin ideal los programadores alcanzaran una
con una implementacin de JDO con
elementos co
deexperienciaydesarrolloenlapersistenciadeobjetos.
solucin cuyo cdigo tendra mucho de comn
mocaches,bloqueosinteligentes,etc.Laspruebasderendimientoconrboles
msadelante,nosayudarnaconfirmarorefutaresteplanteamiento.
Echando la vista atrs buscando situaciones parecidas, los primeros sistemas de
basesdedatosrelacionalesseenfrentaronaunasituacinanlogafrenteaquienesusaban
solo ficheros indexados como los sistemas VSAM, comercializado todava hoy. Es de
esperar importantes mejoras en el rendimiento de las implementaciones, segn maduren
losproductosJDO,cuyosfundamentostcnicosrecogenlosavancesdemsdedosdcadas
136
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

introducido suficiente como para desdear


JDO? P
Aceptemos que efectivamente JDO es ms lento que JDBC y SQLJ, manejando
datos de forma interactiva. Sera el retraso
asemos a ver los resultados obtenidos para analizarlos con la perspectiva de los
comentarioshechos.
Apertura nueva Cuenta JDO vs JDBC
294,00
236,83 A
821,33
821,00
210,00
c
c
e
s
o

I
n
i
c
i
a
l
0 100 200 300 400 500 600 700 800 900
media del tiempo de ejecucin en milisegundos
JDBC puro JDO Genie JDO Solametric Kodo RI ODMG versant

Figura23TiempoinicialnecesarioparapersistirlosobjetosvinculadosalacreacindeunaCuenta.

Apertura nueva Cuenta JDO vs JDBC


294,00
821,33
821,00
210,00
c
c
e
s
o

I
n
i
c
i
a
l
236,83
0 100 200 300 400 500 600 700 800 900
A
media del tiempo de ejecucin en milisegundos
JDBC puro JDO Genie JDO Solametric Kodo RI ODMG versant

Figura24TiempoparapersistirlosobjetosimplicadosenlacreacindeunaCuenta,ignorandoel
retrasodeprimeraoperacin.
Los resultados presentados han sido obtenidos de una batera de pruebas
consistente, en ejecutar cada programa de forma aislada, libres de concurrencia desde la
lnea de comandos, en 30 ocasiones, agrupando series de 10 ejecuciones consecutivas del
mismo programa, donde los cuatro peores resultados son descartados, y eligiendo como
serie representativa, para cada programa, aquella de resultados ms regulares donde los
valoresconvergenentresucesivasejecuciones.Paralasseriesfinalessecalculanlasmedias
de tiempo presentadas en los grficos. Este complicado procedimiento, pretende evitar la
distorsinintroducidaporelentornodeejecucin.
137
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

entodelmappingobjetosatablas,conocimientoqueenelcaso
de JDB
Las figuras Figura 23 y Figura 24, muestran que con los mejores datos obtenidos,
para el primer acceso, JDO es un rendimiento 24,14% menos eficaz, un 19,44% ms lento
que JDBC, (JDOGenie 294 ms, frente 236,83 ms de JDBC puro), debido en esencia, a la
construccin inicial de las estructuras internas del servicio persistencia, en especial, el
procesamientodelconocimi
C esta embutido en el cdigo de forma invariable. En el segundo acceso, con las
estructurasyelmapeoestablecidosenmemoria,paralosmejoresresultadosseobtieneque,
JDOessolo4%menoseficazqueJDBC,un3.85%mslentoparaestecaso(Kodo43,33ms
frente41,67msdeJDBCpuro).
Rendi mi ento/ Retraso JDO VS JDBC
-24,14%
-4,00%
Si gui ente
V
a
19,44%
3,85%
-10,00%
0,00%
10,00%
20,00%
30,00%
r
i
a
c
i

n
-20,00%
-30,00%
Ini ci al
Acceso
Rendi mi ento Retraso

Figura25JDOvsJDBCvariacindelrendimientoyretraso
lento que JDBC en transacciones
conmodelossencillosdeobjetos,confirmandolosargumentosexpuestosmsatrs.
a suficiente para rechazar JDO frente a JDBC? parece que no, porque
os de respuest almente, de un orden magnitud r, inferiores al
aaplicacin.
evar a cabo la consulta, modificacin eliminacin de un
firmaran con mayores diferencias, recalcaran los
realizados,porlocualnomerecelapenaelesfuerzodesurealizacin.Elpeor
la recuperacin de la instancia antes de su
BCfrenteaJDO.
ltadosobtenidos,sehanconseguidolos
O no comercial, JDO MAX [50] sobre
a tiempos de creacin similares (48 ms), del mismo orden de
.
datosdeobjetos
JDO con ODMG, tericamente no debera haber diferencias de
miento, pues ocupan el mismo hueco entre objetos y bases de datos, sea esta
e datos de objetos han
acceder a sus sistemas de bases de datos, por ejemplo,
rocedern de las
la interfaces de programacin de los sistemas empleados, que no
JDO, y, del uso de tipos de datos predefinidos optimizados, tipos
A
iva
la vista de los resultados, JDO JDBC es ms
interact
Pero
s ti
es la diferenci
lo emp a fin son de simila
bleparaelcomndelosusuariosalinteractuarconun segundo,tiempoacepta
Nuevas pruebas, para ll
objeto, de forma interactiva, con
pronsticos
caso sera el de la eliminacin que requiere
borradodefinitivo,cosaqueevidentementefavoreceaJD
Paracontrastarlaverosimilituddelosresu
datos de rendimiento de una implementacin JD
MySql 4.0, que muestr
magnitud
JDOvsODMGsobrebasesde
Al comparar
rendi
relacional o de objetos. Algu
a
nos fabricantes de sistemas de bases d
lanzado interfaces JDO par
Progress, Versant y Poet. Las principales diferencias de rendimiento p
mejoras introducidas en
tienen equivalencia en
138
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

y los propios del fabricante. En un acceso interactivo no hay las


resultados de la ejecucin de la
. En la
es JDO
tados son del mismo orden
d,unsegundo,tiempodeesperarazonableenunatransaccininteractiva.
los resultados estn en un mismo orden de magnitud y
io los tiempos de respuesta son aceptables, por lo cual,
nescontransaccionesinteractivas,siJDO
ompensan su falta de rendimiento en el terreno de las
ctivas.
relacionales(OR)
baquemanejaunmodelodeobjetos
es un campo donde existen implantadas
una gran tradicin, las herramientas OR, verdadera competencia de JDO
S: Cocobase, Castor, Toplink, Jakart OJB o Hibernate, son algunos de
teora, las herramientas OR y JDO JDBC, deberan ofrecer rendimientos muy
n filas en objetos, y viceversa,
tosmecanismosparamejorarelrendimiento
portantesycomplicadosdedatos:generacininteligente
cho de otra forma, en una visin general de la arquitectura
de JDO, ambas estn a un mismo nivel y ocupan la misma
in.LaventajadeJDOsobrelosproductosOR,noeselrendimiento,procededeotros
os, ms concretamente, ser una solucin general, no solo para RDBMS, ser ms
productiva,serunestndaryo l,contransparenciade
datos, p
4.2.1.3. Prueb un
realidad basada solo en Otro aspecto de la prueba es, que es ms
adecuad
unos programas, basados en un test de
acinde5rboles5ariosdeprofundidad5,
ando un total de 97.655 objetos, que son
predefinidos ODMG
diferenciassignificativasentreJDOyODMG.
Las figuras Figura 23 y Figura 24, muestran los
misma prueba de apertura de una cuenta, sobre un OODBMS ODMG Versant
ersant ofrece peores resultados quelas solucion segunda transaccin, el producto V
JDBC sobre RDBMS probada. Pero en todos los casos los resul
demagnitu
En resumidas cuentas,
desde el punto de vista de usuar
parecerazonablenodescartarJDOparaaplicacio
aporta otros bene
ionesintera
ficios, que c
aplicac
4.2.1.2. JDOfrentealasherramientasObjeto
Enelsiguienteapartado,sepresentaunaprue
complejo que persiste sobre unos RDBMS. Este
soluciones, con
accediendo a RDBM
losactualesymsextendidosdelosproductosOR.
En
similares, realizan un trabajo muy similar, convertir datos e
coneficaciayrendimiento,dispon
lmenesim
endedistin
cuandoseaccedenvo
de SQL, caches, cursores,,
as de las soluciones y
di
en cap
posic
aspect
frecerlamejorpersistenciaortogona
ersistencia por alcance, sin necesidad de modificar el fuente. En las conclusiones
volveremossobreeltema,paraaclararporquelegirJDOfrentealasORcitadas.
La cuestin es suficientemente interesante, como para dedicar un proyecto fin de
carrera.Enestetrabajo,seasumeelplanteamientodelaigualdadderendimientoentrelas
ORyJDOaccediendoalosRDBMS.
adeTransaccinmanejode granvolumendedatoscomplejos.
La prueba ideada para simular una transaccin que maneja un gran volumen de
objetos complicados, es crear y recuperar rboles 5arios de profundidad 5. Esta prueba
permitecontrastarlaidoneidaddeJDOparamanejarsituacionesconmodeloscomplejosy
grandes volmenes de datos, y al mismo tiempo sirve tambin para ver, la influencia del
modelo de relaciones empleado para persistir los objetos, cuando se utiliza un RDBMS
como almacn de objetos. Tambin adems, se ilustra como JDO cubre el RDMBS
ofreciendo una objetos.
a para comparar el rendimiento de JDO frente ODMG en OODBMS, porque
ODMG tiene ms aceptacin en los OODBMS, que sobre los RDBMS, y los OODBMS son
aplicadostradicionalmenteaestassituacionesdedatoscomplejosygranvolumen.
Para la prueba han sido elaborados
conFastObjects.Lacre rendimientodistribuido
con un total de 19,531 nodos por rbol, result
139
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

acin transparente mediante el recorrido


deocasiones(97.655objetosx1000veces).
para ser ejecutados sobre varios productos
SQL, Oracle y SQLServer, frente a otros ODMG OODBMS: Versant,
ore.
rar un
adoenlasituacinmodelada,sedeberanincluirfuncionalidadescomo
jetos,decursores,,quecomplicanbastantelaprogramacinparaalcanzarel
sobre JDBC, se suponen estn
s situaciones complejas y con grandes volmenes de
ra este tipo de trabajos, mejor que programar en JDBC
igojavadelprogramadecreacindelosrboleseselsiguiente
oi d = " t empoi ds" ;
Ar r ayOf Obj ect cr eat eTr ee( int dept h, int nodesPer Leaf ) {
Ar r ayOf Obj ect ar r = new
for ( int i = 0; i < no
i

}

Obj
Vec


S
hechos tir. Y otro, para la posterior recuper persis
decadaunodelosrbolescreados,enunmillar
amas son configurados y adaptados, Los progr
JDO para RDBMS My
astObjectsyObjectSt F
La prueba no incluye un programa con JDBC solo, porque para log
adecu rendimiento
chesdeob ca
rendimiento de una solucin JDO, cuyas implementaciones
optimizadas para acometer esta
ume que pa informacin. As, se as
directamente,espreferibleutilizarJDOJDBC,quedebera.
deejecucinnecesariopararealizarlas Lapruebatomacomoreferenciaeltiempo
tareasdecreacinyrecorridodelosrbolesdepruebaempleandosoloobjetostransitorios,
lo cual sirve para ver la sobrecarga introducida por la persistencia y lo ajustado de las
implementacionesJDO.
Elcd
class Wr i t e {
static private Dat abase db;
public final static St r i ng st r f

static
Ar r ayOf Obj ect ( ) ;
desPer Leaf ; ++i ) {
f ( dept h == 0) {
ar r . add( new MyCl ass( ) ) ;
}
else {
ar r . add( cr eat eTr ee( dept h - 1, nodesPer Leaf ) ) ;
}
}
return ar r ;
static Vect or wr i t e( int dept h, int nodesPer Leaf , int nTr ees) throws
J DOExcept i on {
Ar r ayOf Obj ect ao = null;
ect oi d = null;
t or t r ees = new Vect or ( ) ;

try {
for ( int i = 0; i < nTr ees; ++i ) {
Tr ansact i on t xn = db. cur r ent Tr ansact i on( ) ;
t xn. begi n( ) ;
ao = cr eat eTr ee( dept h, nodesPer Leaf ) ;
db. makePer si st ent ( ao) ;
t r ees. add( db. get PM( ) . get Obj ect I d( ao) ) ;
t xn. commi t ( ) ;
}
}
catch ( Except i on exc) {
exc. pr i nt St ackTr ace( ) ;
}
return t r ees;
}

public static void mai n( St r i ng[ ] ar gs) throws J DOExcept i on {
if ( ar gs. l engt h < 3) {
Syst em. out . pr i nt l n(
" pl ease speci f y dept h, nodes/ l eaf and number of t r ees. " ) ;
yst em. exi t ( 1) ;
}

long st ar t , st op;
Mtodosde
nrecursivo,
incin
ersistenteo
rio.
creaci
sindist
entrep
transito
Cdigoparahacer
persistenteslosrboles.
Laversinnopersistente
comentalademarcacin
delatransacciny
makePersistent
140
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

" nodes per l eaf " ) ;



try
t

obi nd,asignandounnombrealarazdecadauno
delosrboles.
El cdigo de la prueba de recorrido de los rboles, que recupera reconstruye los
rboles,yrecorresusnodossiguiendounpatrnderecorridoenordendeformarecursiva,
estenellistadosiguiente:
static int count Leaf s( Obj ect obj ) {
int count = 1;
if ( obj instanceof Ar r ayOf Obj ect ) {
Ar r ayOf Obj ect ar r = ( Ar r ayOf Obj ect ) obj ;
Vect or t r ees;

int dept h = I nt eger . par seI nt ( ar gs[ 0] ) ;
int nodesPer Leaf = I nt eger . par seI nt ( ar gs[ 27] ) ;
int nTr ees = I nt eger . par seI nt ( ar gs[ 9] ) ;

Syst em. out . pr i nt l n( " Cr eat i ng " + nTr ees + " t r ees wi t h dept h " + dept h +
" and " +
nodesPer Leaf +
{
db = new KodoJ DO( ) ;
db. open( ) ;
}
catch ( J DOExcept i on exc) {
Syst em. out . pr i nt ( " Er r or de conexi n" ) ;
exc. pr i nt St ackTr ace( ) ;
throw exc;
}

try {
st ar t = Syst em. cur r ent Ti meMi l l i s( ) ;
r ees = wr i t e( dept h, nodesPer Leaf , nTr ees) ;
st op = Syst em. cur r ent Ti meMi l l i s( ) ;

}
finally {
db. cl ose( ) ;
}
Syst em. out . pr i nt l n( " Ti me t o wr i t e: " + ( st op - st ar t ) / 1000 + " sec" ) ;

try {
Obj ect Out put St r eamoi ds = new Obj ect Out put St r eam(
new Fi l eOut put St r eam( st r f oi d) ) ;
oi ds. wr i t eObj ect ( t r ees) ;
oi ds. cl ose( ) ;
} catch ( Except i on e) {
e. pr i nt St ackTr ace( ) ;
}
}
Listado35Creacindelosrbolesdeltest.
El cdigo anterior mide el tiempo total para persistir todos los rboles creados en
su ejecucin. Cada rbol es creado en memoria en una rutina recursiva, y hecho persistir
expresamente con el mtodo makePer si st ent . Al medir el tiempo total del conjunto de
las transacciones, se consigue incluir en la medida la influencia de los resortes para el
rendimiento del mecanismo de persistencia y se reduce la distorsin por los tiempos de
inicializacin.
Para la persistencia en RDMBS, son considerados dos modelos de datos, uno
indicadoenlosgrficosporrbolenfilas,dondelosobjetosquedandesgranadosenfilas
hastasusdatosprimitivosycadaelementodeunacoleccincorrespondeaunafila,yotro,
concebido para la rapidez, donde los rboles son serializados y almacenados en nico
campotipoblob,indicadoenlasgrficascomorbolserializados.Paralacomparativacon
ODMG, se utilizan dos mtodos para alcanzar la persistencia, la persistencia por alcance
dadaunareferenciainicial,yelmtod
Cdigoentrelasversiones
difiereenlaclaseutilizada
comobasededatos.La
sintaxisutilizadaescomo
laODMG,parafacilitarla
migracin.
141
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

I t er at or i = ar r . i t er
while ( i . hasNext ( ) ) {
count += count Leaf s( i . next ( ) ) ;
}
}
return count ;
}
static void r ead( Vect or t r ees, int nTr ees, int nTr aver sal s) throws
J DOExcept i on {
try {

Tr ansact i on t xn = db. cur r ent Tr ansact i on( ) ;

Ar r ayOf Obj ect t r ee ;
t xn. begi n( ) ;

for ( int i Tr aver sal s = 0; i Tr aver sal s < nTr aver sal s; ++i Tr aver sal s) {
I t er at or i t = t r ees. i t er at or ( ) ;
for ( int i Tr ees = 0; i Tr ees < nTr ees && i t . hasNext ( ) ; ++i Tr ees) {
at or ( ) ;

t r ee = ( Ar r ayOf Obj ect ) db. get PM( ) . get Obj ect ByI d( i t . next ( ) , true) ;
Syst em. o
count Leaf s( t r ee) ) ;
}
}
t xn. commi t ( ) ;
}
catch ( Except i on exc) {
exc. pr i nt St ackTr ace( ) ;
}
Listado36Recuperacintransparentedelosrboles
EnlistadoanteriorListado36solo nainstruccin,marcadaenamarillo,indicaque
el objeto t r ee debe ser recuperado de base de datos. Veamos ahora que se puede
esperar de los resultados, sabiendo que la especificacin JDO asume como objetivo la
conveniencia de la optimizacin en el ceso a datos y el manejo de grandes conjuntos
resultados(JDOPg.10014.2Objetivos).
Antes de ejecutar las pruebas, comprobamos como JDO efectivamente oculta el
RDMBS, ofreciendo una abstraccin basada exclusivamente en objetos, manejados con
independenciadesisonpersistentesono.
C s
masivas,puedenserfuentedeproblemasd encin,alrecorreryactualizarcolecciones
de obje
cticatodoslosproductosrevisadosofrecen.
jodecantidadesimportantesdeinformacin,enlaque
JDO 1.0
ut . pr i nt l n( " Tr ee has " +
u
la

ac
onJDOelmanejodegrandesvolmenesdedatos,queresultanenactualizacione
econt
tos simultneamente accedidaspor distintosprocesos, con elacceso transparentey
el bloqueo automtico, que JDO implanta. Un control transaccional optimista, puede
mitigar la contencin en estas situaciones, pero esta una funcionalidad es opcional en el
estndar,queenlapr
Continuando con el problema de manejar y actualizar gran cantidad de datos,
considerando como destino de la persistencia los RDBMS, que ofrecen cdigo empotrado
en el servidor de base de datos. Es cierto que JDO no supera la rapidez de los
procedimientos almacenados en bases de datos en el tratamiento masivo de datos.
Tampoco JDBC, ni SQLJ superan a estos procesos embutidos dentro del SGBDR. De los
productos JDO probados, algunos permiten ejecutar cdigo almacenado en las bases de
datos Oracle, SQLserver y SAPdb. Esto permite disponer en JDO, de la efectividad del
cdigoenbasededatos,mejorandoelrendimiento.
Hayunasituacindemane
, es ostensiblemente ms lento que JDBC y SQLJ, es la eliminacin de los estados
persistentes. JDO obliga a recuperar las instancias para proceder a su eliminacin, siendo
142
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

aprovechando los
dispara
en
nicatr
deunobjetoqueda
consolid
yentornosdelibrerasdeejecucindiferentes.
Comprobemos si se confirman los argumentos presentados con las programas de
prueba. Los resultados present ras, han sido obtenidos de la
ejecucin de los programas repetidas veces para reducir la distorsin debida al
en pruebas. No han uidos datos obtenidos con otros productos, bien por
al tacindelosmismosalahoradeprueba,obienporquelosresultadosnotenan
ca serexcesivamentelargos.
posiblesuprimirlasimgenesalmacenadasdelosobjetos,sinlasobrecargadelaoperacin
derecuperacin,conunasencillasentenciaDELETEejecutadaenelRDBMS.Esfcilevitar
la recuperacin de instancias para su eliminacin persistente,
dores y cdigo empotrado de los RDBMS. Esa limitacin en la eliminacin de
objetos, se corrige en la siguiente versin JDO, con mtodos al efecto, sin necesidad de
recuperarlosobjetoscorrespondientes.
Aprovechando las posibilidades de los RDBMS modernos, JDO podra alcanzar
cotas similares a JDBC y SQLJ, que tambin necesitan aprovechar la funcionalidad
empotrada en RDBMS para ser ms eficaces manipulando gran cantidad de datos. La
cuestin importante Es la diferencia tal como para despreciar JDO frente a JDBC/SQLJ?.
Mi opinin es que no,sisabe aprovechar las capacidades delosRDBMS, combinadas con
JDO. Solo un programador novel, sin experiencia, trata de procesar millares de datos
ansaccindeformaremota,trasegandoingentesvolmenesdedatosporlasredes,
esperandoquelapotenciadecomputoyelanchodebanda,resuelvalacontingencia.
FrentealossistemasOODBMSODMG,lasituacindeJDOesdeigualaigual.El
rendimiento en los sistemas de datos de objetos en operaciones de actualizacin masiva,
puedeserinclusosuperioralosrelacionalespuesunasolamodificacin
ada para todas sus referencias, evitando el trasiego de grandes volmenes de
datos.Dehechoelelevadorendimientodelossistemasdebasesdedatosdeobjetosesuno
delosargumentosparasueleccinfrentealossistemasdebasesdedatosrelacionales.El
acelerador de partculas nucleares de Stanford y del CERN, son ejemplo de referencia.
Existen ya implementaciones comerciales de OODBMS que ofrecen interfaz JDO, como
FastObjects, por lo cual JDO puede aprovechar el mayor de rendimiento de los OODBMS
enesteterreno.Pareceverosmilquelosrendimientosentareasdeactualizacionesmasivas
seansimilaresentreJDOyODMG.
EntodosloscasosseutiliceunRDMBSuOODBMS,elfactordecisivocontribuyenteal
rendimiento es plasmar un buen diseo de las clases, de los modelos de persistencia y del esquema
fsicoenbasesdedatos.
Una primera conclusin, previa inclusin a los resultados, es que en todos los
casos,RDMBS,OODBMSoficheros,JDOpermiteemplearelmecanismomsconvenientea
laproblemticaconcretasinsernecesarioprogramarparacadamecanismodepersistencia
expresamente, esta es la principal ventaja que transluce a la prueba. La adaptacin
requerida en los programas JDO para usar una u otra plataforma ha sido la de emplear
unosarchivosdeconfiguracin
ados en las siguientes figu
de carga
torno de sido incl
gunalimi
bida,por
143
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

Creacin de rboles 5 arios profundidad 5


7
9
24
0,371
27
Si stema de Persi stenci a
(Pr oduct o / Api /Mt odo / SGBD)
Transient
Fastobjects J DO / jdo / Fastobjects
FastObjects ODMG / odmg / bind / FastObjects
ObjectStore ODMG / odmg / por alcance / ObjectStore
VERSANT ODMG / odmg / bind / Versant
319
578
Libelis J DO / jdbc/ rbol en filas / SQLServer
KODO J DO / jdbc / rbol en filas / MySQL
3
KODO J DO / jdbc / rbol serializado / MySQL
9
11
559
KODO J DO / jdbc / rbol en filas / Oracle
KODO J DO / jdbc / arbol serializado / Oracle
541
KO serializado / SQLServer DO J DO / jdbc / arbol
KODO J DO / jdbc / arbol en filas / SQLServer Ti empo ej ecuci n (sec.)

Figura26Resultadospruebaderendimientoparaobjetoscomplejos

1000 recorridos de 5 rboles 5 arios profundidad 5


Sistema de Persistencia
(Producto / Api /Mtodo / SGBD)
Transient
F objects J DO / jdo / Fastobjects
45
36
39
44
46
24
30
ast
FastObjects ODMG / odmg / bind / FastObjects
ObjectStore ODMG / odmg / por alcance / ObjectStore
VERSANT ODMG / odmg / bind / Versant
Libelis J DO / jdbc/ rbol en filas / SQLServer
KODO J DO / jdbc / rbol serializado / MySQL
47
366
KODO J DO / jdbc / rbol en filas / Oracle
KODO J DO / jdbc /
Ti empo ej ecuci n (sec.)
arbol serializado / Oracle
KODO J DO / jdbc / arbol serializado / SQLServer

eje ecorr ted les5ariosprofu


veces
r lt de los que a era vi
destaca una primera gran interrogante Por qu hay tanta diferencia entre las series que
utilizan nmodelodedatosnormalizadoylosqueusancolumnasblobparaalmacenarlos
objetosserializados?
las sobre un modelo normalizado, donde los objetos y
ntras que utilizando columnas tipo blob el nmero total
grabado en 5 filas, una por cada rbol. Igualmente ocurre con la
ra,alrecuperarlosrboles,lareconstruccinapartirdemsdemedio
millard
Figura27Tiemposde cucindelr idotransparen erbo ndidad5,1000
Las dos figuras precedentes muest an unos resu ados prim sta
u
La diferencia surge por el esfuerzo de computo necesario para que los 97.655
objetos, se conviertan en 585.930 fi
relaciones son desagregados. Mie
de objetos, queda
operacindelectu
efilas,suponeuntareaenorme,querequiereaqu,enelmejorcaso,algomsde6
minutos,366s.conOracle,losdemsRDBMS,trasmsde15m.,nohabancompletadola
prueba de lectura. Tambin, destaca el hecho de que bajo estas circunstancias, los
OODBMSaventajanalosRDMBS.
Otro aspecto destacado de los resultados que enfrenta a OODBMS y RDMBS, es
que los tiempos de las pruebas para el modelo de datos que contienen los rboles
144
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

icultadeimplicacionesdeunbuenmodelodedatosadecuado
para el
oparahacerpersistenteelobjeto,
dndole
oducida,esinclusoinferiora
product
Figura28Sobrecargadelapersistenciaenlaspruebasrealizadas
serializados en un campo blob, estn en los mismos ordenes de magnitud que los
programas de carga equivalentes para ODBMS ODMG, desde unos pocos segundos a
menosdeunminuto,tantoparalacreacin,comoparalarecuperacin.
Quedapatenteladif
rendimiento. Los esquemas normalizados, son fciles de entender y de usar, pero
paraciertostiposdetareasnoapropiados.Ademsderendimientosdispares,losesquemas
ofrecen distintas posibilidades de actualizacin y consulta. En este caso, el modelo
desagregado permite el bloqueo y consulta individual de una instancia cualesquiera para
su actualizacin, mientras que el modelo con blob, deja todo el rbol bloqueado en el
RDBMS cuando es actualizado un nodo, salvo que sea emplee un bloqueo optimista. La
mayor desventaja del modelo con serializado, es la imposibilidad para consultar ad hoc
conSQLdirectamenteelnodocualesquieradeunrbolquecumpleciertascondiciones.
La tesis sostenida sobre si JDO es adecuado para situaciones de manejo gran
nmero de objetos complejos, queda respaldada por la pequea batera de pruebas
efectuada,enespecial,enconsideracindelostiemposderespuestamejoresobtenidosde
la solucin JDO RDBMS frente a ODMG OODMS, en teora ms eficaz; y a tenor del
esfuerzoquesupondraprogramarunasolucinequivalenteenJDBC.
Respecto de ODMG y JDO, se comprueba que las diferencias de tiempos, aunque
enproporcinsonabultadas(3s.sobre7s.y30s.sobre45s.),losordenesdemagnitudde
los resultados, tanto para JDO sobre RDMBS como ODMG sobre OODBMS, son los
mismos. Es ms, para FastObjects OODBMS, con frontal JDO y ODMG, es ms rpido su
APIJDOqueelAPIODMG(30spor44s)debidoalmtod
un nombre. Tambin se confirma en parte, el pronstico hecho de cmo JDO y
ODMGdeberantenerrendimientosmuysimilares.
En otro orden de cosas, los resultados anteriores desvelan tambin un hecho
importante a mencionar. Que el modelo relacional no siempre es la opcin ms adecuada
parapersistir,esteesunejemplo,dondelosOODBMS,ofrecenmejoresresultadosquelas
demsalternativas.
Por otro lado, respecto a la optimizacin de algunas de las implementaciones
utilizadas,ejemplodeKodo,seobservaquelasobrecargaintr
osideadosparaOODBMS,comoVersant.UnabuenaimplementacinJDO,puede
llegarasertanbuenacomounproductoODMGOODBMSenlagrabacinyrecuperacin
segnqucargasemaneje.
Sobrecarga persistencia
1886,79%
1800,00%
0%
808,63%
150,00%
125,00%
0,00%
200,00%
400,00%
600,00%
800,00%
0% 1000,0
1200,00%
1600,00%
2000,0
Creacin Recorrido
1400,00%
jdo rdbms
oodbms
145
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

Las pruebas efectuadas confirm na tecnologa adecuada para su uso con


modelosde objetos complejos y con elevadonmerode instancias. Las prestacionesde JDO pueden
sertanbuenascomolasdeODMG.CuandoseutiliceunRDBMS,debemoscomprobarqueel
modelo de datos cubre las expectativas de rendimiento que se espera. No siempre un
sistema relacional es el mecanismo de persistencia ms adecuado, no debemos d ar
otros sistemas persiste , princip lmente lo cheros y s bases atos de objetos,
cuando el rendimiento, la productividad y complejidad de la solucin RDBMS, no son
adecuadosalosrequisitos.
4.2.1.4. Conc
ElrendimientodeJDOconsiderand podeprocesamientodeunatransaccin
eneltratamientodeobjetossimples,esaceptablefrentealasotrastecnologasJBDC
y
Con modelos de objetos so de navegar entre un nmero
importantedeobjetos,JDOesmssimpleyconsigueunrendimientocorrecto.
JDO con JDBC, y un esquemas de tablas apr , logr seguir rendimientos
correctos,ensituacionescongranvolumende omp
JDOofreceunrendimientosimilar MGen uebasefectuadas.
AlmargendeJDO,laleccinaprendidaesqueunbuendiseodeobjetosydatosson
unfac ve ca sn de rectos.
Tabla4Cuadroresumendelrendimientocomparado
an que JDO es u
fisticados, que necesiten
opiado an con
datosc lejos.
aOD laspr
torcla paraal nzarlo iveles rendimientocor

de ncia a s fi la de d
esde
lusindelRendimiento
oeltiem
ODMG.
Considerandosoloelrendimiento,JDOnoremplazaaJDBCySQLJ,enaplicaciones
condatossimplesmanejadosconSQL.
Rendimiento
J DO ODMG
Tecnologa J DBC/SQLJ
J DBC OODBMS OODBMS
Esquema persistencia normalizado normalizado
desnormalizado
y serializacin
objetos objetos
Modelo de objetos simple Superior Aceptable Alto Aceptable Aceptable
modelo de objetos complejo Inaceptable Inaceptable Alto Alto Alto

ElrendimientodeJDOnoesunfactorclaramentediferenciador,afavoroencontra
deJDOyfrentealrestodelasotrastecnologas.Suaportacinesencialtienequevenirde
otradimensin,laproductividad.
Productividad
La productividad en la programacin Java sobre una tecnologa de persistencia,
vienedeterminadaprincipalmenteporesfuerzonecesarioparacrearlosprogramasconesa
tecnologaydecuntocuestanlosproductosnece
4.2.2.
sariosparausaresatecnologa.Dejandoa
un lado el aspecto organizativo, el esfuerzo de producir programas Java, con una
tecnologa uotra, depende de cuanto cdigo fuentesea necesario programar para realizar
la funcionalidad requerida. La inversin en una tecnologa de persistencia debe estar
146
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

justificada por el retorno de la inversin producido por la misma, debe rpidamente


amortizaryproducirbeneficios.Si rmitedesarrollarconmenoresfuerzo
una misma funcionalidad, y adems a menor coste, entonces es ms productiva, y en
consecuenciamsrentable.
La funcionalidad a por una tecnologa y su tegracin el modelo de
objetos java, repercuten en la facilidad ra expresa n menos lneas cdigo, por lo
que reduce el esfuerzo de desarrollo. A lo largo del trabajo han sido ilustrados distintos
ejemplosdelafuncionalidaddelastecnologasencomparacin.Respectoasuintegracin
conelmodelodeobjetosjavasabemos:QueJDOimponepocaslimitacionesalmodelode
objetosyaldiseo,esencialmentenoesposiblepersistiraquellosobjetosligadosalsistema
entiempodeejecucin(hebras,threads,)yremotosaotrasJVM.LaintegracindeJDBC
se reduce a la equivalencia de los tipos primitivos o bsicos Java con los tipos de los
RDBMSenlainteraccinconSQL.SQLJrequieremenoslneasdecdigoqueJDBC,para
lasoperacionesconSQLesttico,peroporlodemsesidnticoaJDBC.ODMGseadaptaal
modelo de objetos Java, salvo en que exige de ciertos tipos, para representar algunas
estructurasdedatos.Lafuncionalidadtransparenciadedatosylapersistenciapor ance
deJDOyODMG,favorecenlaintegracinconelmodelodeobjetosjava,repercutiendoen
un menor n , un buen
nmero
biaenJDBC3.0ysusoporteparatiposestructuradosdeusuario,queutilizacierta
clasedeinstanciasparalacorrespondenciaentreinstanciasytiposdedatosdeusuariode
SQL99(Captulos16y17delaes .
Dejemosdeladolaintegracin Javaylafacilidadde rollo,elnmerode
lneas de cdigo materializar la funcionalidad necesaria onfigura como un
indicador del esfue de desarrollo que permite la comparac re cada una de la
tecnologas consideradas. Menos lneas igo, sign menor desarrollo,
mayor facilidad de mantenimiento, menos costes de rrollo ue con menos
lneasdecdigoun yorproductividad.Laingenieradelsoft otrosmuchos
indicadores,posiblementemsadecuados,p nmerodeln rdeanlisis
fcildeentenderyusar,quenorequieremayorcomplejidad.
Elnmerodelneasesunindicadorquefavorecelacomparacin,peroEsposible
expresar con JDO siempre la func nalidad requerida con claridad y senc lez? Los
lenguajes de uctividad. Es
necesario
MG,yloslenguajesdeconsultaJDOQLfrenteaSQLyOQL.
4.2.2.1. NmerodelneasdeJ

DMG con JDBC. Los resultados


,unareduccintotalde74.21%delnmerodelneasdecdigo,de
nenODMG,amaterializarlamismafuncionalidadconJDBC.
unatecnologape
pecificacinJDBC3.0)
con desar
para , se c
rzo in ent
de cd ifica, tiempo de
desa . Se consig
ama waredefine
eroel easesunfacto
io
aport da in con
pa r co el
alc
mero de lneas dedicadas a la persistencia de los objetos. En JDBC
de lneas consisten en la invocacin de mtodos, para hacer corresponder
argumentos formales de las sentencias SQL con los valores actuales o variables destino.
Estocam
il
consultas son otro elemento necesario que contribuye a la prod
disponer de la posibilidad de especificar consultas que obtienen los objetos que
satisfacenciertopredicado,deintegrarunlenguajeparahacerconsultas,sincodificarcomo
recuperarlosobjetos[2].
En los siguientes apartados, se analizar la reduccin en el nmero de lneas de
JDOfrenteaJDBCyOD
DORDMBSfrenteJDBC
Torsten Stanienda y Douglas K. Barry, en su artculo Solving the Java Storage
[35], comparaban la programacin con persistencia transparente, con la Problem
programacin a nivel de interfaz en JDBC, comparando O
ensuartculomuestran
cribirlasoluci es
147
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

Li neas de Cdi go
85 176
95
69 71
496
360 671
195
80%
100%
346 351 1923
0%
e
R
o
o
m
C
o
u
r
s
e n n
t
r l
20%
40%
60%
L
e
c
t
u
r
P
P
e
r
s
o
S
t
u
d
e
r
o
f
e
s
s
o
T
o
t
a
jdbc
odmg

Figura29ComparativadelnmerodelneasdecdigoparaunamismaaplicacinescritaconJDBCy
ODMG
elnmerodelneasdelasolucinJDBC
con una y otra solucin. La siguiente
nmerodelneasparacadaclase.
Lafiguraanteriorenfrentaparacadaclase
ODMG, junto al total de lneas y su equivalente
presentalosporcentajesdereduccinen
Reduccin Cdigo
% 100,00%
76,39%
51,28%
80,06%
%
79,77%
0,00% 20,00% 40,00% 60,00% 80,00
Professor
Student
Person
LectureRoom

vaconODMGrespectodeJDBC.
ndoelartculoparecequeenese
go de persistencia necesario. Otros
delapersistencianoresideenlasclases
en [18], en tales casos la reduccin es
diciona la cantidad de lneas del total,
,esporeso,quevemosestimacionessobre
ia, que oscilan desde el 40% (Oracle) al 70% (Cocobase).
l,parecedemsinters,medirelefectosobreelcdigodedicadoa
erzo necesario para llevar a cabo la misma funcionalidad de
ente a JDBC solo, sin la ayuda de herramientas OR, que
JDO.
ajando con JDO, en el nmero de lneas dedicadas a
modificar una aplicacin ya realizada, ms real que el ejemplo del
perosimple,sencilla:laaplicacindegestindereservasderestaurantes,ClubMed,
del libr
incluido
Figura30PorcentajedereduccindelcdigoJa
Lareduccinvistaesmuysignificativa,pero
di
leye
ejemplo, las clases del modelo encerraban el c
n planteamientossoncomnmenteutilizados,endo
del modelo, an trabajando con JDBC, por ejemplo,
muy inferior. Tambin el tipo de aplicacin con
dedicadasamanejarlapersistenciadeloobjetos
el esfuerzo dedicado a
a
persistenc
Enrazndetodolocu
la persistencia, el esfu
persistencia de los objetos, fr
tambinreducensignificativamenteelesfuerzodedesarrolloparapersistircomo
Para me
tir, se escoge
dir el ahorro trab
persis
banco,
o de Robert Orfalli [23]. Al mismo, tiempo permite hacernos una idea, de la
capacidad e impacto de JDO en la adaptacin de aplicaciones heredadas, uno de los
objetivos marcados en este trabajo. La versin modificada sustituye los mtodos con
instrucciones en JDBC, por otros equivalentes con JDO. Otros mtodos de la aplicacin,
snuevosmtodosquetienenqueverconlaplataformaoproductosescogidos,son
ignorados.Lafuenteseencuentraenlosanexos.
148
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

Lneas de Cdigo
16
15 23
4
4
18
18
118
43
17 25
23
30
37
22 19
216
20
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
a
d
c
a
n
c g
t
C
lu
g
d
R
e
e
l
R
e
e
t
B
g
e
t
C
l
b
R
e
s
e
t
R
e
s
e
r
v
s
e
r
v
a
r
g
a
i
a
t
i
o
n
a
t
i
o
n
n
I
n
f
o
u
b
P
r
i
e
r
v
a
s
e
r
v
g
e
t
D
g
e
t
C
lu
b
s
T
o
t
a
l
e
s
c
e
s
t
i
o
n
s
a
t
i
o
n
a
t
e
s
g
e
Original
J DO

ndeClubMedconJDOvsoriginalJDBC
plo es inferior a la obtenida en artculo de
in total es de un 45,37%, con una media de reduccin
Figura31Lneasdecdigoenlaaplicaci
La reduccin obtenida sobre este ejem
[35], de la Figura 29. La reducc
39,69%.
Reduccin Cdigo
62,79%
86,67%
1,35%
82,61%
100,00%
%
11,76%
8,00%
5
9,09%
5,26%
45,37%
0,00% 20,00% 40,00% 60,00% 80,00%
Totales
getClubs
getDates
getReservation
getClubReservations
getClubPrices
getBargainInfo
cancelReservation
addReservation

Figura32ReduccindelnmerodelineasenClubMedmodificadoparaJDO
as que consiguen un menor nmero de lneas con un
do la potencia sintctica de Java. Tambin, cambiando
de objetos persistentes es posible mejorar el nmero de lneas. El
puede comprobar sobre en los siguientes fragmentos de cdigo un ejemplo de los
lcdigo.
j ava. l ang. Except i on {
this. pm. cur r ent Tr ansact i on( ) ;
pm. r ef r esh( aResv) ; / / r ecuper ar dat os asi gnados por BD
Evidentemente, hay frmul
cdigo ms enrevesado aprovechan
el diseo del modelo
lector
cambiosene
Listado37MtodoaddReservationconJDO
public long addReser vat i on( Cl ubs aCl ub,
r vat i ons aResv) throws Rese
try {
sact i on t = Tr an

t . begi n( ) ;

aResv. set Cl ub( aCl ub) ;
this. pm. makePer si st ent ( aResv) ;
149
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

aResv. get Resvno( ) ;


} catc
get Resul t Set ( ) ;
r s
Zi p) " +

ps
ps s t
ps s
i on e) {
pr i nt l n( " Syst emExcept i on i n addReser vat i on" ) ;
}
ductivoqueJDBC.
t . commi t ( ) ;
return
h ( Except i on e) {
Syst em. er r . pr i nt l n( " Syst emExcept i on i n get Cl ubs" ) ;
Syst em. er r . pr i nt l n( e) ;
throw e;
}
}
Listado38MtodoaddReservationoriginalconJDBC
public int addReser vat i on( St r i ng cl ub, Cl ubs. r esvSt r uct r esvDat a) throws
Except i on {
try {
pst mt = con. pr epar eSt at ement (
" SELECT MAX( ResvNo) FROM RESERVATI ONS" ) ;
pst mt . execut e( ) ;
Resul t Set r s = pst mt .
. next ( ) ;
int r esvNo = r s. get I nt ( 1) ;
r esvNo = r esvNo + 1;

pst mt = con. pr epar eSt at ement (
" I NSERT I NTO Reser vat i ons " +
" ( ResvNo, Cl ub, WeekDat e, Last Name, " +
" Fi r st Name, Par t yAdul t s, " +
" Par t yChi l dr en, Tot al Far e, Payment Met hod, " +
" PhoneNo, Addr ess, Ci t y, St at e,
" VALUES( ?, ?, ?, ?, ?, ?, ?, ?, " +
" ?, ?, ?, ?, ?, ?) " ) ;
pst mt . set I nt ( 1, r esvNo) ;
pst mt . set St r i ng( 2, cl ub) ;
pst mt . set St r i ng( 3, r esvDat a. weekDat e) ;
pst mt . set St r i ng( 4, r esvDat a. l name) ;
pst mt . set St r i ng( 5, r esvDat a. f name) ;
t mt . set Shor t ( 6, r esvDat a. par t yAdul t s) ;
pst mt . set Shor t ( 7, r esvDat a. par t yChi l dr en) ;
pst mt . set St r i ng( 8, r esvDat a. t ot al Far e) ;
pst mt . set St r i ng( 9, r esvDat a. payment ) ;
pst mt . set St r i ng( 10, r esvDat a. phone) ;
pst mt . set St r i ng( 11, r esvDat a. addr ess) ;
pst mt . set St r i ng( 12, r esvDat a. ci t y) ;
t mt . et St r i ng( 13, r esvDat a. st a e) ;
t mt . et St r i ng( 14, r esvDat a. zi p) ;
pst mt . execut eUpdat e( ) ;
pst mt . cl ose( ) ;
con. commi t ( ) ;
return r esvNo;
}
catch ( Except
Syst em. er r .
Syst em. er r . pr i nt l n( e) ;
throw e;
}
La mayor simplicidad y fcil lectura de la versin JDO frente a la plasmada con
JDBC, no admite discusin. El cdigo de la aplicacin con JDBC podra ser mejorado,
expresado con algunas menos lneas, implantando un objeto de mapeo del tipo SQLData.
Noobstante,creoquebuenapartedelosdesarrollosJava,sondelestilodellistadoanterior.
Endefinitiva,JDOpuedelograrlamismafuncionalidaddepersistenciaconmenos
lneasqueJDBC,JDOconsiguesermspro
150
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

esencial
entre am
/ / l
re

{
Syst em. out . pr i nt (

4.2.2.2. NmerodelneasJDOfrenteaODMGparaJava
ElnmerodelneasdeunasolucinJDOyotraODMGparaJavaesmuysimilar,
ya que ambas tecnologas implantan la transparencia y la persistencia por alcance. Basta
con vistazo, al cdigo fuente de las pruebas de rendimiento, Listado 35, y al Listado 40,
paraconfirmarquenohaydiferencianotoriaenelnmerodelneas.Ladiferencia
bas en el cdigo, es la exigencia de ODMG de utilizar ciertos tipos. En el test de
rendimiento la clase ArrayOfObject, precisamente para facilitar la migracin de la
aplicacin a ODMG, porque el estndar incluye un tipo anlogo del mismo nombre
ArrayOfObject, que en los programas ODMG, no hace falta declarar. En resumen, el
nmerodelneasparaprogramarenjavalapersistenciaconJDO,noesclaramentemenor
queenODMGparaJava;enestesentido,JDOnoesmsproductivoqueODMG.
Listado39ClaseArrayObject
public class Ar r ayOf Obj ect
implements Col l ect i on, j ava. i o. Ser i al i zabl e {
/ / Est a cl ase es una Fi r st Cl ass Obj ect ( FCO)
/ / Tendr a i dent i dad pr opi a.
/ / Es compl ej o, l os ar bol es sobr e
os que se mi de el r endi mi ent o

private Vect or pVF = new Vect or ( ) ;

public int si ze( ) {
turn this. pVF. si ze( ) ;
}
Listado40PruebaderendimientodecreacinderbolesODMG
static Vect or wr i t e( int dept h, int nodesPer Leaf , int nTr ees) throws
com. ver sant . odmg. ODMGExcept i on {
Ar r ayOf Obj ect ao = null;
Vect or t r ees = new Vect or ( ) ;
try {
St r i ng s = null;
for ( int i = 0; i < nTr ees; ++i ) {
Tr ansact i on t xn = new Tr ansact i on( ) ;
s = " Ar bol " + i ;
t xn. begi n( ) ;
ao = cr eat eTr ee( dept h, nodesPer Leaf ) ;
db. bi nd( ao, s) ;
t r ees. add( s) ;
t xn. commi t ( ) ;
}
}
catch ( Except i on exc) {
exc. pr i nt St ackTr ace( ) ;
}
return t r ees;

try {
db = Dat abase. open( " per f base" , Dat abase. openExcl usi ve) ;
}
catch ( ODMGExcept i on exc)
" Er r or de conexi n" ) ;
exc. pr i nt St ackTr ace( ) ;
throw exc;
}
try {
st ar t = Syst em. cur r ent Ti meMi l l i s( ) ;
t r ees = wr i t e( dept h, nodesPer Leaf , nTr ees) ;
st op = Syst em. cur r ent Ti meMi l l i s( ) ;

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

4.2.2.3.
r a los datos. En ODMG y JDO, el acceso a transparente evita la
nec d
lalocali
por re
, consiste de una interfaz de programacin, Query, y una semntica con
gram ti
cand a
comput
queels
mecanis
motivo
JDO2.0
agrupam
datosre
relativas dos de datos de usuarios (objetos) aumentando su
com ej
to de objetos que
cum e
sobre al
Cuando deunaSQL,esunResulSet,unconjuntodefilas
cuyoselemen distintosmtodosJDBC.
que recl
conexiones directas subyacentes para procesar las sentencias SQL. Los productos JDO
revisad
in de nuevos
programadores,puesnorequierenco eJavaotrolenguaje,elSQLoelOQL.
Afindecuentas,SQLesclaramentesuperioraJDOQL,tambinmscomplejoynecesita
de una intervencin mayor del programador. Si bien SQL es ms potente en todos los
aspectos que JDOQL, la integracin con JDBC de SQL, requiere de ms lneas de cdigo
JavaqueJDOQL.
4.2.2.4. LenguajedeconsultasJDOQLfrenteaOQL
OQLyJDOQLsonambossonorientadosaobjetos,parecidosenquelosfiltrosde
consultaaccede satri yob miem los oscon dos.ODMG3.0
OQL admite adems la composicin, la proyeccin o un tipo primitivo como el resultado
de una consulta, es un lenguaje funcional y ortogonal, que permite subconsultas,
agrupamiento e invo rico y complejo que
JDOQL,
menor potencia
que SQL y que OQL, el nmero de casos prcticos reales que necesitan de consultas de
LenguajedeconsultasJDOQLfrenteaSQL
Los programas JDBC y SQLJ se caracterizan por la utilizacin del SQL, como
frmula para accede
esi addeutilizarunlenguajedeconsultasportodaspartes,solocuandoesnecesarioen
zacindelosobjetosiniciales,desdeloscualessealcanzanotrosconlanavegacin
la ferencias.
JDOQL
caJava,queexpresalascondicionesdeseleccin,aplicadasalacoleccindeobjetos
id tos implicados. Es un hecho reconocido la limitacin expresiva y completitud
acionalJDOQLfrenteaSQL.Perocomocontrapartida,JDOQLesindependientede
istemaseaunsistemarelacionalono,estopermitedesacoplarlasconsultasdelos
mosdepersistencia.
LamenorpotenciaexpresivaycompletitudcomputacionalJDOQLfrenteaSQL,es
dedebatesobrelaconvenienciadeextenderJDOQL,dehecho,laespecificacinde
extenderesteconnuevafuncionalidad:borradodirecto,envodeSQLalSGBDR,
ientos,resultadoscalculadosyotros.Enelescenariodelosfabricantesdebasesde
lacionalesyobjetorelacionalessevieneincorporandoSQL99,connuevasclusulas
al manejo de tipos estructura
pl idad,dificultaddeaprendizajeyuso0.
El resultado de una consulta JDOQL siempre es un conjun
pl nlascondicionesdelfiltrodeconsulta,nuncaelresultadodeunclculoefectuado
gunos de estos objetos, cosa que si es posible en SQL sobre las filas procesadas.
trabajamosconJDBC,elresultado
tosnecesitansertratadoscon
CuandoseaccedeconJDOaunsistemarelacional,partedelapotenciaexpresiva,
aman algunos, puede ser obtenida conectando objetos a vistas o accediendo a las
ospermitenelaccesoalasconexionessubyacentes,paralarealizacindesentencias
SQLquenopodranserexpresadasenJDOQL,conlaeconomasintcticapropiadeSQL.
La simplicidad de JDOQL es una ventaja en la formac
nocerademsd
nalo butos jetos brosde objet sulta

cacin de mtodos de instancia. OQL es ms


tambinconcordandoconelplanteamientohecho,esmsproductivoqueJDOQL.
LaventajaesencialdeJDOfrenteODMGesJDOQLtieneunasintaxisJava,queevitatener
queaprenderlasintaxisdeotrolenguaje.
En mi modesta opinin, si bien es verdad que JDOQL tiene una
152
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

predica
OQLesmejorqueJDOQL.
que JDO es una tecnologa con la que es
ms fc
de JDO no
excluye
estaalapar,sinose
conside

ica la inversin en JDO, para lo cual se estimar el


4.2.2.5.
laapuestaporunatecnologa
Secalculacomolaraznentrelosbeneficiosreportadosporlainversin
detiempoconsiderado.CuantomayoreselROI,msfavorable
es la decisin de inversin. En este apartado se pretende estimar el retorno de invertir en
a oste de desarrollo, es el beneficio que debe
financiarlainversinenJDO.
La
todas y ca
dedesarro
el mappin Hibernate, son la verdadera
competencia mantenimientoydepuracin,tareas
que requie del cdigo, son las actividades de
cin
considerab segn algunos autores es de hasta el 70% del coste del software
[19]. En r tiene mayores implicaciones que afectan al
negocio, a el acortamiento de los ciclos de desarrollo y de
n
descabellado estimar que el 35% menos de
lneas, se traduce en un 35 % menos del tiempo de desarrollo dedicado al mantenimiento
delasoper
Co in en
JDO no es poco hay que olvidar que hay situaciones donde
JDBC es ms n la serializacin puede ser la
opcinm ebaderendimientodeODMGha
sidoutilizada la serializacin para intercambiar los identificadores delos objetos entre los
ura. En todos los casos, si la incorporacin de JDO, aumenta
losbeneficios,quedajustificadasuinversin.
dos complicados es de escasa incidencia. La gran mayora de las consultas
utilizadasenlosprogramasdenegociosonsimples,respondenapredicadosarquetipode
quobjetosverificanquesusatributoscumplenciertaigualdad,yquobjetosperteneceno
estn,entalocualcoleccin.Estaesunadelasrazonesfundamentales,deporqueJDOQL
cubreesencialmenteesetipodeconsultas.Creo,sibien
Por todo lo expuesto, podemos convenir
il programar la persistencia Java que con JDBC solo. Con JDO se necesitan menos
lneasdecdigo,deunmenoresfuerzodeprogramacin,paraunagranmayoradecasos,
a excepcin de cuando hay que elaborar consultas SQL complicadas. El uso
de usar JDBC, cuando sea preciso y conveniente. Frente a ODMG para Java, al
igualquesucedeconelrendimiento,laelaboracindeprogramasJDO
raelhechodecadafabricanteutilizaunaadaptacinconformealestndarODMG.
Aunquepoderexpresarconsultas,esunelementoimportanteparalaproductiva,lamayor
potencia de SQL y OQL frente JDOQL, puede ser compensada por la simplicidad, y
facilidad de uso de este ltimo, en un buen nmero de casos. En definitiva JDO permite
mejorarlaproductividaddelaprogramacinJavaconpersistencia.
Falta comprobar si se justif
retornodelainversinenJDO.
RetornodelainversinenJDO
Para elegir una tecnologa decidiendo invertir en ella, debe ser rentable, los
beneficios reportados deben superar a la inversin necesaria. El retorno de la inversin
(ROI)esunamedidacomnparaanalizarlarentabilidad,en
yunosproductos.
necesaria,paraelperiodo
JDO, sumiendo que la reduccin en el c
adopcin de entornos integrados de desarrollo plagados de asistentes para
dauna de las tareas de programacin, conduce a una uniformidad del esfuerzo
llo,aunconplataformasyproductosdiferentes.Herramientasparaautomatizar
g de clases a tablas como Cocobase, Toplink o
deJDO.Perosinembargo,elesfuerzode
ren de la revisin y reescritura manual
produc de programas ms afectadas, donde la mejora si puede ser estimada
le. Cuyo coste
ealidad, la reduccin de cdigo
umenta la calidad, posibilita
puestae
fuente en
elmercadodelosprogramas.Desdeestepuntodevistadeltrabajarenelcdigo
el mantenimiento, no parece tan
acionesdepersistencia.
mo JDO para usar los RDBMS, normalmente necesita de JDBC, la invers
evita invertir en JDBC. Tam
adecuado que JDO. Lo mismo que tambi
sadecuadoensucaso,porejemplo,enlapru
programas de creacin y lect
153
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

Pa para un puesto de
ollador en tareas de mantenimiento, desde el enfoque propuesto, se parte de las
tes
Pe suficienteparaalcanzarla
ayprocesodedesarrollo.
Co amasjavadeoscilanentrelos[10,00,100,00]ala
hora.
lasimplementacionescomercialesparaunalicenciade
los 1.000 y los 6.000. Examinados distintos precios
fabricantes incluido mantenimiento, la inversin promedio en JDO sera de
3.3
ra
Un
fo erar que no todo el tiempo trabajado es productivo, este dato
correspondealascifrasmanejadasenEspaaporalgunadelasempresasdelsector
se Seconsideraunajornadade40horas
se
El laproduccineficazestadedicadoacodificarpersistenciaJava.
JD stencia.
de
desarrollo, r y
pr
Loscostesdeformacin,adaptacinyentrenamientoparaimplantarlatecnologa
absorbidosenelporcentajedetiempono
Re
in,
desarrollad
ra estimar el clculo del retorno de la inversin en JDO
desarr
siguien premisas:
riododeclculo,2anualidades,alconsiderarunplazo
inydestrezasadecuadasusandounatecnolog formac
stesdeproduccindeprogr

Lospreciosdemercadode
desarrollo, oscilan entre
49,80.SesuponelamismainversinparaJDBC,pueslospreciososcilanenun
ngosimilar.
aeficaciadel65%,el65%deltiempodeproduccinesprovechoso.Estaesuna
rma de consid
rviciosdeinformticadenuestroentorno.
manay52semanas.
40%de
Oreduceun35%elesfuerzodedesarrollodelapersi
El efecto de la mayor capacidad productiva por la reduccin del esfuerzo
ms cantidad de tiempo para producir, es ignorado para simplifica
esentarunescenarioprudente.
seignoran,porquesesuponenigualesy
productivoestimado.
sultandoconesteescenariodepremisas,queseobtieneunrpidoretornodela
en poco menos de un ejercicio la inversin en una licencia de JDO para un
or,quedafinanciadaporelahorroenloscostesdeproduccin.
invers
Retorno Inversin
113,01%
226,02%
339,03%
452,04%
10,00 20,00 30,00 40,00 50,00 60
565,05%
678,06%
0,00%
200,00%
400,00%
600,00%
800,00%
1000,00%
1200,00%
00%
00%
1800,00%
,00 100,00
1695,15%
1400,
1600,
B
/
I

%
Coste / Hora

Figura33RetornodeInversinenunalicenciadeJDO.
erior al 100%, seala que en el mismo periodo,
inversin y beneficios se igualan, cuanto mayor sea este mejor, la inversin es ms
favorable. Bajo el escenario considerado, en todos los casos, la inversin en JDO sera
dap
Un retorno de inversin (ROI) sup
supera orlosbeneficiosreportadosconelmenorcostedeproduccin.
154
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

La ha indica que inversin en JDO es rentable a corto plazo. Esta


justificadasuinversinconsiderandonicamentelareduccinenloscostesdeproduccin
sal rodelneasquemantener,enunescenarioprudentequeconsidera
poco ms con
i
Co
JD BC, requiere un menor esfuerzo de desarrollo,
menoslneasdecdigo,un40%menosdecdigoenlapruebadeestetrabajo.
ctos de JDO es rentable considerando exclusivamente la
reduccindelesfuerzodedesarrolloqueaportanlosproductosJDO.
Re
mercado q
desarrollo permite desarrollar una vez para distintas plataformas
ODMGqueadoptenJDO.Enestesentido,esmsproductivoyrentableJDOqueODMG.
4.3. Com a
Ha
imi
satisfacen
resumidael
4.3.1.
Sim
ebido.Mayorcomplejidadalmezclardoslenguajesyextender
estimacin hec
debido menornme
de la cuarta parte (26%) del tiempo de produccin dedicado a trabajar
aentareasdemantenimientoydepuracin. persistenc
4.2.2.6. nclusindelaproductividad
O es ms productivo que JD
La inversin en produ
specto ODMG, JDO allana las diferencias entre los diferentes productos del
ue adopta de forma particular el estndar. JDO no reduce el esfuerzo de
frente a ODMG, pero
parativ enlosrequisitos
sidopresentadaunacomparativadeJDOfrentealrestodetecnologasrespecto
entoysuproductividad.Quedaconocerenquemedidacadaunalastecnologas
el marco de requisitos establecido en el primer captulo. De forma breve y
siguientecuadropretendecubriresteobjetivo.
alrend
Estructurales
R01. plicidadysencillez(Obligatorio)
SQLJ
SeapoyaenJDBC.Mssimpleenlacodificacin,pocoselementos,paraindicar
elcdigoemb
SQLparaserembebido.HeredalosdefectosdeJDBC,cuandoesnecesariousar
SQLdinmico.EsnecesariodominarSQLyJava.
Mscomplejodosmodelosdatosyobjetos
JDBC El peor, 40 clases e interfaces. Las soluciones son ms complejas de plasmar
Dosmodelosdatosyobjetos
queJDO
ODMG
Menosinterfacesquejdo,ymayorcomplejidad.OQLbasadaensintaxisSQL,
senecesitaconocerdoslenguajes.
UnsolomodeloODMGadaptadoaJava.
JDO
requieredesentenciasenotro Sencilloysimple,18claseseinterfaces.No
lenguaje.JDOQLesJava.
Unsolomodelodeobjetos,elpropiodeJava.
R02..Fiabilidad(Obligatorio)
155
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

ientoexcepciones,verificacintipocompilacin
SQLJ
Tratam
JDBC Tratamientoexcepcionesentiempodeejecucin
ODMG
Excepcionesycompilacin.Esmsfiabledelos4.
JDO Excepcionesycompilacin
R03.Encap
fcil caer en el diseo no modular, al separar
sinsolucindecontinuidadentrelosdosmodelos,eldeobjetos
yeldedatos
sulacin(Obligatorio)
SQLJ Es posible programarla, pero es
datosyobjetos.IncluyecapacidadesparamapeoatiposdeusuarioSQL99.
Hayseparacin
JDBC EsposibleencapsularelcdigoJDBC
JDBC 3.0 incorpora clases pa
java.
ra el mapeo entre SQL99 tipos usuario y clases
delos:Objetosydatos Brechaqueseparalosdosmo
ODMG S,hayseparacinentremodelodeobjetosydatos.EselmodeloODMGJava
JDO Si,noexisteseparacinentredatosyobjetos,unnicomodeloJavadeobjetos.
R04.Diferentesestilosdeaplicacin(Obligatorio)
SQLJ Modelo transaccional. El estndar no considera la posibilidad de distintos
estilos de aplicacin, es una cuestin de programacin y de las posibilidades
do.AplicacionesOLTP.BloqueoporSQL SGBDRemplea
JDBC demSQLj.AplicacionesOLTP.BloqueoSQL.
ODMG DBMS, no
incluye transacciones distribuidas o incluidas en serv. aplicaciones J2EE,
or.OLTP.Bloqueoexpreso
Modelo transaccional ODMG 3.0 depende del OODBMS y el R
manejoporprogramad
JDO Contempla distintos estilos de aplicacin. Modelo transaccional pesimista y,
nes dirigidas a
optimista(opcional),bloqueoautomticoysegnSGdatos.
Una Implementacin estndar debe soportar las aplicacio
EntornolocaleintegradosenServ.AplicacionesEJB
R05.Difere
distribuidos. El modelo base es una arquitectura monoltica, no se consideran
ntesarquitecturas(Obligatorio)
SQLJ C/S de dos o ms capas, no considera la posibilidad de objetos remotos
156
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

otrosmodelos.
JDBC demSQLJ.
ODMG
Losproductoscomercialespuedenseraplicadosendiferentesarquitecturas,
peronoesestndar.
JDO Exigenciaestndarfuncionamientoendistintasarquitecturasdesdeempotrado
aservidoraplicacionesJ2SEE
R06.Extensibilidad(Opcional)
SQLJ No se consideran otros mecanismos que no sean compatibles SQLJ. No puede
por el programador, extendiendo los las ser aadidos nuevos mecanismos
claseseinterfaces
JDBC IdnticamentequeSQLJ
ODMG
Si,implementandolasinterfacesesposiblepersistirenotrosmecanismos.Las
clasesbaseofrecidaspuedenserextendidasconnuevasfuncionalidad.
JDO Si es extensible, se consideran distintos meca relacionales y objetuales.
Es posible
nismos
implantar los interfaces exigidos. Adems la sustitucin de
implementacionesestaaseguradaporlaexigenciadecompatibilidadbinaria
R07.Facilidaddeuso(Obligatorio)
ofuentemenoslegible. SQLJ DominardoslenguajesJavaySQL.Presentaelcdig
JDBC La facilidad de uso procede de que los patrones de cdigo estn solidamente
establecidos.
ODMG
Buena,perocadafabricanteofrecesuimplementacin.HayqueaprenderOQL
JDO LafacilidaddeusoesExcelente,APIcomn.EsnecesariodominarJDOQL
R08.Escalabilidadyrendimiento
ydel tratamiento de grandes
cantidadesdefilas,dependientedelaimplantacin
SQLJ Si tiene muypresente el objetivo de rendimiento
JDBC Sonrequisitosasumidos.Seofrecendistintasopciones.Defactoofrecidaporlos
fabricantesdeconectoresabasesdedatos
ODMG
odondecadafabricanteofrecesupropiaaproximacin. Sonobjetiv
JDO
Si,esunaexigencia,algunasopcionessonestndar.Elfabricantepuededecirla
implantacinmsconveniente.
157
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

4.3.2. ion
rd torio)
Func ales
R09.Gua aryrecuperarobjetos(Obliga
SQLJ No. Permite SQL 99 tipos de usuario expresa. Cierre de persistencia
programadoadiscrecin
JDBC No.SeprogramaparacadacasoJDBC3.0SQLData,simplificaeldesarrollo.Va
. programacinexpresa
ODMG
Si,hacerpersistentemediantebloqueoexpresooguardarelobjeto.Incluyeel
grafodeobjetosdependientes
JDO camente. Hacer persistente y ya esta. Incluye el grafo de objetos Si, automti
dependientes
R10.Operacionesbsicasdeactualizacindelestado(Obligatorio)
SQLJ Programadasexpresamente
JDBC Programadasexpresamente
ODMG
saenelcontextodeunatransaccin,bloquearelobjeto,
transaccin
Si,deformaexpre
provocasuconsolidacinalfinalizarla
JDO Si,deformaexplicitaytransparente,JDOcontrolaloscambios.MakeDirty(Obj)
R11.Identi
SQLJ madas
daddelosobjetospersistentes(Obligatorio)
Progra
JDBC Programadas
ODMG
porelOODBMSO,oelRDBMS Ofrecida
JDO Si,sonconsideradostresmodelos:database,application,nodurable.
R12.Ortog lidad(Obligatorio)
SQLJ esortogonal,noesfcilimplantarcdigogenricodeaccesoadatos,fuerte
lamientoentreelcdigo,elmodelodeobjetosydedatos.
ona
No,
acop
JDBC peroesposiblecrearsolucionesbastanteortogonales. No,
ODMG
ciertostipos.
Si,algunostiposdeobjetosnopuedenpersistir.Esunaexigenciaelusode
JDO Sieselmsortogonalqueelresto.Algunosobjetosligadosnopuedenpersistir.
158
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

ncu atorio)
SQL
R13.Co rrencia(Oblig
SQLJ Si,Bloqueoexpresooimplcitosobrelosdatosporinvocacin
JDBC SQL Si,Bloqueoexpresooimplcitosobrelosdatosporinvocacin
ODMG
Si,manualmanejadaporelprogramadorysegnfabricante.
JDO Si,elbloqueoimplcitoautomticodelosdatosasociadosenSGBD.
R14.Transa
SGBR.Noafectalosobjetos
cciones(Obligatorio)
SQLJ Si,del
JDBC Si,delSDGBR.Noafectalosobjetos
ODMG
Si,perodependendelaimplementacindecadafabricante.Bloqueoanivelde
objetos
JDO Si, locales o integradas en JCA (Connector interfaz), segn otros API java
estndar
R15.Diferentesmecanismosdepersistencia(ObligatorioaRDBMS,otrosopcional)
SQLJ SI,solomecanismosqueofrezcanunservicioJDBC.
JDBC SI,solomecanismosqueofrezcanunservicioJDBC.
ODMG
Si,basesdedatosrelacionalesydeobjetos.
JDO Si, es posible, cada Gestor Persistencia asociado a uno. Un objeto queda
vinculadoaunsoloGestor.
R16.Distribucinsobredistintosmecanismos
SQLJ Si,amecanismosqueofrezcanunservicioJDBC.
JDBC Si,amecanismosqueofrezcanunservicioJDBC.
ODMG
onexinsimultneasaBDdistintas. Si.C
JDO ciado a una BD. Conexiones Si, mediante Gestor Persistencia, cada uno aso
mltiples
R17.Integridadobjetos
SQLJ No,Programada.
159
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

JDBC No,Programada
ODMG Si,noincluyeeventosdeBD
JDO Si, incluye la notificacin de algunos eventos de BD. Pero no considera
estandarizarelmapeodeobjetosatablas,esresponsabilidaddelosfabricantes
o des lucionesJDO.
R18.Transparencia(Obligatorio)
SQLJ No, la transparencia no se considera, pues tampoco tiene presente un modelo
bjetos. deo
JDBC No, la transparencia no se considera, pues tampoco tiene presente un modelo
deobjetos.
ODMG
isitoplasmadoenlasimplementacionesODMG Si,latransparenciaesunrequ
JDO implementacin Si,esunobjetivofundamentaldetoda
R19.Consultas(Obligatorio)
To
jed
bebidoparalasconsultasestticasySQLdinmicomedianteJDBC
dos cubren el requisito de construir y utilizar consultas ad hoc, utilizando un
econsultas. lengua
SQLJ SQLem
JDBC SQL
ODMG
OQL
JDO JDOQL
R20.Cach(Obligatorio)
SQLJ Si.
JDBC Si.
ODMG
Si.
JDO Si.
R21.Iteradores(Obligatorio)
ultSet SQLJ Si.Res
160
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

JDBC Si.ResultSet
ODMG
Si.Iteradotesparalascoleccionespersistentesylasconsultas
JDO Si.Iteradotesparalascoleccionespersistentesylasconsultas

bjeto presentantes(Obligatorio)
SQLJ oesunafuncionalidadrecogida.
R22.O sre
N
JDBC Idem
ODMG
Siconsideraestacapacidad.
JDO Si. El estndar no menc
por defecto de carga, d
iona este tipo de objetos, pero la definicin del grupo
ividiendo la recuperacin de atributos, en diferentes
fases es una forma de proxy. Varios productos ofrecen esta capacidad
e. expresament
R23.Aprov ersticasderendimientodelosserviciosdedatos
SQLJ acaractersticaestndar.SibienesposibleutilizarSQLnativo
echarcaract
Noesun
JDBC Noesespecificacinestndar,aunqueesposibleaprovecharelSQLnativo
ODMG
Laespecificacinnoincluyereferenciaaesteextremo.
JDO Esunaexigenciaestndar
4.3.3. avanzada
R24.Evolucindelesquema
SQLJ ndelesquema.
Funcionalidad
Noseconsideralaevoluci
JDBC No.
ODMG
Noesunafuncionalidadespecificadaporelestndar.Peromayoritariamente
proporcionanestafuncionalidad.. losproductos
JDO No forma parte del estndar, pero buena parte de los productos tienen en
ideracinestaposibilidad. cons
R25.Versiones
161
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

Noseconsideraestaposibilidad. SQLJ
JDBC Noseconsideraestaposibilidad
ODMG
Noesincluidaestafuncionalidadenelestndar.
JDO No es una funcionalidad estandarizada, pero los productos revisados
consideranestacapacidad
R26.Automatismoactividadesdemapeo
SQLJ No
JDBC No
ODMG
Noesactividadestndar,peroseofreceporpartedelosfabricantes,
aprovechandoODLyOIF.
JDO No. El mapeo no esta conside ar 1.0, si el 2.0. Los productos
mspopularesofrecenestaactividad.
rado en el estnd
R27.Serviciodepersistenciaco e
cio res el ivo es el ac
relacionalesexclusivamente
mofuentesd datos
SQLJ No, es una fun nalidad p ente, pues objet ceso a datos
JDBC Idem.
ODMG
No

JDO No
R28.CoordinacinTransaccional
SQLJ No
JDBC No
ODMG
No
JDO Si,transaccionesdistribuidasenservidorJ2EE
R29.Tratamientodeeventosdeejecucin:Controldeerrores,actividaddepersistencia
SQLJ NocontemplaeventosdelSGBD.ExcepcionesdelSGBD
JDBC Idem
162
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

laBD.
ODMG
Excepioneslevantadaspor
JDO Se atrapan las excepciones del mecanismo de persistencia y se consideran
varioseventosrelativosalciclodevidadelasinstancias.
R30.Medidasderendimiento
SQLJ Si
JDBC Si
ODMG

JDO Noesunaspecto porlasimplementaciones


JDO.
consideradoenelestndar,perosi
R31.Gestin
SQLJ SivaSQL.
delAlmacenamiento
JDBC SivaSQL.
ODMG
No.CadafabricanteimplementaunaclaseDatabase,quepuedeincluiresta
gestin.
JDO No
R32.Trazabilidad
SQLJ No.Segnfabricante.Noesrequisitodelaespecificacin.
JDBC No.
ODMG
No.
JDO No. Pero los productos suelen presentar algn nivel de seguimiento de la
actividaddepersistencia..
R33.Neutralidadrespectoallenguaje
SQLJ No
JDBC No
ODMG
Siesunrequisitoestndar,siemprequeseusenlostiposestandarJava,C++e
inclusoSmalltallk
JDO Si,encuantoquetodossonobjetosJava.
163
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

4.4. Resumen
4.4.1. Rendimiento
l rendimiento de las implementaciones JDO, en aplicaciones interactivas es
inferior, pero en el orden de magnitud que las otras tecnologas en comparacin,
JDBC/S LJ y ODMG. Ante soluciones con modelos de objetos complejos y volmenes
importantes,JDOparecequeaportamejoresrendimiento,quesolucionesdeprogramadas
sobreSQLJoJDBC.
JDBC,lasherramientasORsonlaautnticacompetenciadeJDOparaRDBMS.
JDOnosupleaJDOconaplicacionesconmodelosdeobjetossimples,dedicadasa
presentaryactualizardatos.
Este captulo de comparativa, ha presentado la posicin de JDO frente a las
JDBC/SQLJyODMG,entresdimensionesrendimiento,productividadysatisfaccindelos
requisitosasatisfacerportodasolucindepersistencia.
E

Q
En
Rendimiento
J DO ODMG
Tecnologa J DBC/SQLJ
J DBC OODBMS OODBMS
Esquema persistencia normalizado normalizado
desnormalizado
y serializacin
objetos objetos
Modelo de objetos simple Superior Aceptable Alto Aceptable Aceptable
modelo de objetos complejo Inaceptable Inaceptable Alto Alto Alto

4.4.2. Productividad
es ms productivo que las soluciones JDBC. Las pruebas aqu realizadas
sostienenlatesisdelamayorproductividaddeJDO.Dependiendodeltipodeaplicacinla
reduccin del cdigo alcanza rpidamente el 40%. La valoracin de la diferencia de
productividadconJDBCessuficientepararentabilizarlainversinenJDO,sinconsiderar
otrosfactores.
OQL es menos potente que SQL. Pero con las vistas SQL y el mapping objetos
tablas, s posible aunar la potencia expresiva SQL con la facilidad, simplicidad y
uniformidaddeJDOQLyJDO.OQLtambinesmejorqueJDOQLperopocorelevanteen
elmerca o.
siguiente versin aporta mayor funcionalidad a JDOQL, con proyecciones,
sentenciasyfuncionesconagrupamientos,yotrasmejorasdemandadasporlacomunidad
dedesarrollo.
LainversinenJDO,quedajustificada,porelahorroencostesdemantenimiento.
Es posible financiar la adquisicin de herramientas JDO, obteniendo un retorno de
inversinimportante,segnelescenarioprudenteconsideradoconcostesde30,00/hora
x hombre, se obtiene un ROI de 339,03%. Tambin estn disponibles diversas
implementacioneslibresdepagoparafinescomerciales.JDOesmsproductivoqueJDBC.
JDO
JD
e
d
La
164
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

4.4.3. Verificacindelosrequ
JDO es la tec marco de requisitos
establecidoenelprime nidos.Cabrasealar
que JDO, cuando almacena los objetos sobre un RDBMS, delega en el fabricante la
especifi
isitos
nologa, que ms requisitos satisface del
rcaptuloconuntotal30requisitosde33defi
cacin del mapeo de clases en tablas, que, en mi humilde opinin, debera estar
incluidaenelestndar.
Comparados con JDO y ODMG, JDBC y SQLJ no satisfacen requisitos exigibles
comolasimplicidad,facilidaddeuso,laencapsulacinytodoslosrelativosalmanejode
objetos, incluida la integridad, identidad, ortogonalidad y la transparencia, adems de
otros.

Tabla5NmeroderequisitoscumplidosporSQLJ,JDBC,ODMGyJDO
Nmero de Requisitos cumplidos
SQLJ JDBC ODMG JDO
Obligatorios 22 10 9 20 22
Opcionales 11 2 2 7 8
Total 33 12 11 27 30
4.4.4.
r una
funcionalidadanlogaaloscallbacks.
EsmejorODMGqueJDO?
AlcompararlastecnologasdeSQLJ,JDBC,ODMGyJDO,aprimeravistaparece
JDOnosuperedemasiadoaODMG.DesdeunaperspectivacentradaenJava,diferencias
entre ambos son ms claras y a favor de JDO. Ambos ofrecen persistencia por alcance y
transparencia de datos, es lo que los hace tan iguales. Pero revisando ms a fondo una y
otraespecificacin,aniveltcnicohaydiferenciasimportantes.
En primer lugar, los modelos de objetos, el de ODMG no el modelo Java, es una
adaptacinqueexigeusarciertostiposparalasestructurasdedatos.
A nivel de los interfaces para manejar la persistencia, JDO es ms potente, con
funcionesparaconsultarelestadoyloscallbacks.
ElmodelodeidentidadenODMGeselaportadoporelsistemadebasesdedatos
empleadoyasignarnombresalosobjetos.EnJDOexistenmsposibilidadesparadefinirla
identidad(aplicacin,basesdedatosynodurable).
EnODMGlosobjetospersistentespuedensermanejadosdentrodelatransaccin,
losobjetospersistentesduranenlaJVM,loquelatransaccinqueloscontrola.EnJDOlas
instanciasJDOperduranmsalldelatransaccin,estnligadasasuPersistenteManager,
ysepuedenmodificaralgunasdesuspropiedades.
En JDO se pueden utilizar los callbacks para algunos eventos de la actividad
contra el mecanismo de persistencia. En ODMG, no forma parte del estnda
En OMG los bloqueos se manejan explcitamente, en JDO los bloqueos son
automticos.
EnJDO,lastransaccionespuedenestarcoordinadasporungestordetransacciones
deJ2EE,enODMGnoincluyelafacilidaddetransaccionescoordinadasydistribuidas.
165
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

idaJDOyausentedeODMG.
JDO allana las diferencias entre las implantaciones de los distintos sistemas de
ndoas,JDOesunainversinatractivafrenteainvertirenconocimientoy
licenciasdedistintossistemasdepersistenciadeobjetos.LainversinenJDOparecequees
msint
Quizs la diferencia ms importante en cuanto a Java, es la integracin con EJB,
asum
persistencia,sie
eresantequeODMGyqueJDBCsolo.

166
Capt ul o 5
CONCLUSI ONES
ste es el captulo final. Presenta los inconvenientes y las ventajas de trabajar con
JDO, su situacin actual en el mercado, su evolucin en curso y finalmente, contestar a
algunas de las interrogantes, que surgen tras leer los captulos anteriores: Es JDO una
tecnologa til, es otra ms para persistir? Qu organizaciones necesitan JDO? Por qu
utilizar JDO para RDMBS, en lugar de productos como Cocobase, Castor, jakarta OJB,
Toplink
eleccindeotrasalternativas,durantelaprimaverayelveranodel2004.Momentos
en los O
todas las otras tecnologas con las que ha sido
compar
de los autores de la especificacin
ODMG,
problemadelapersistenciaJavaensuglobalidad,paratodos
losmb
encia, imponiendo pocas cortapisas al
diseo
ara unos es un inconveniente
limitant
oHibernate?TienefuturoJDO?
Mientraseraredactadoestecaptulo,algunodelosestndares,casoJDBC4.0oEJB
2.0, evolucionan para alcanzar ms funcionalidad, dentro del marco de requisitos
establecido en el primer captulo, iniciando nuevos procesos de revisin de sus
especificaciones estndar, que generan importantes debates sobre las virtudes, crticas a
JDOy
racle, IBM y BEA se descolgaban de JDO, al rechazar la revisin de JDO, JSR243
JDO2.0,afavordepromoverlainiciativaparaacometerunsistemadepersistencialigero
dentrodelaprximaEJB3.0.
Sabemos que JDO es posterior a
ada, e incorpora buena parte de la experiencia acumulada, superando algunas de
las limitaciones no resueltas por aquellas. Por ejemplo, la decisin de acceder a RDBMS,
OODBMSoEIS,conunamismainterfaz.Pensemosqueentrelosmiembrosdelcomitde
expertos creador de la especificacin, estn algunos
de herramientas para la persistencia en bases de datos relacionales y verdaderos
expertos en Java, siendo as, a buen seguro, habrn sido consideradas las carencias y
dificultadesquedebanserresueltas,paraalcanzarcomoobjetivolapersistenciaortogonal.
JDO 1.0.1. [51], es la especificacin una interfaz de aplicaciones ambiciosa, que
pretendecubrirlasolucinal
itosdondeJava,pretendeocuparunaposicindestacada:elmundodelosservicios
Web,laspequeasylasgrandesaplicaciones.Suvisineslograrlasolucindepersistencia
ortogonal,aprovechandolaexperienciaacumuladaentecnologasdepersistenciaJava,de
laquetomalosconceptosdepersistenciaporalcanceytransparenciadedatos,quepermite
usarloscuatrosistemasmsusadosparaguardardatos,losRDBMS,losOODBMS,losEIS
y los archivos, y trata conseguir un proceso de desarrollo uniforme adecuado para
pequeas aplicaciones y grandes desarrollos. JDO logra que el cdigo fuente de las clases
del dominio pueda ser independiente de la persist
delasclases.Conello,JDOpermiteelprogramadorcentrarsuesfuerzoenlalgica
del negocio, que es la que proporciona valor, no malgastar esfuerzos en transformar los
objetos en datos. La estrategia acometida para lograr su aceptacin y estandarizacin, es
proponer una solucin sencilla, simple, clara, fcil de usar y aprender, auspiciada con el
procesodeestandarizacindelacomunidadJava,JCP,enuncortoplazodetiempo.
Veamos los inconvenientes y ventajas de trabajar con JDO. Cuando se habla de
inconvenientes y ventajas sobre alguna cuestin como las que nos ocupa, existe una
dificultad esencial, los puntos de vista diferentes. Lo que p
e insalvable, para otros, simplemente es un pequeo escollo fcil de evitar. Las
ventajas se tornan inconvenientes, dependiendo del criterio e inters de quinargumente.
En este sentido, los inconvenientes son comentados para discutir su importancia, si se
167
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

5.1. Inconvenientes
LosprincipalesinconvenientesdeJDOprocedendelimitacionespordecisionesde
diseo y de la falta de claridad en algunos aspectos de su especificacin. Inconvenientes
que, sinduda,son causados porserlaprimera versin. Aunqueno esla primera ocasin,
en la que se intenta conseguir un desarrollo de persistencia ortogonal Java, ODMG para
Java y la rechazada propuesta del proyecto Pjama, son ejemplos de ello. Si es la primera,
quesiguelaestrategiacomn,paraincorporarnuevasfuncionalidadesyserviciosdeJava,
de definir un conjunto de clases e interfaces concretos dentro del proceso JCP. ODMG
dejabaalgunascuestionesabiertaslosfabricantes,quedificultabansuaceptacinyPjama,
proponacambiarellenguajeJava.
La integracin y creacinde serviciosweb J2EE con JDO es, elpunto ms oscuro
delaespecificacin,querequiereunarevisinqueexplique,cmotrabajarconJ2EE,laweb
yJDO.Labibliografadisponiblecompensaestadificultad,enespecialconellibrotitulado
JavaDataObjects,dedosdelosautoresdelaespecificacinCraigRussellyDavidJordan
[16].
Esunasolucingeneralalproblemadelapersistencia,porloquenosebeneficiade
la riqueza y potencia de los sistemas subyacentes concretos, no ofrece la funcionalidad
aportadaporlosRDBMS,OODBMS,uotrossistemasalosquepuedeacceder.
En algunos estilos de programacin sitios Web, aparece el inconveniente de tener
que hacer transitorios objetos persistentes, para una vez modificados, consolidarlos
haciendo que sean persistentes nuevamente. Esto sucede con aplicaciones basadas en
sucesivas peticiones http y en sesiones cliente EJB modificando objetos localmente, que
estn desligados de sus contenedores, bases de datos o EIS. En el primer caso, las
aplicacionesWebconhttp,unaspeticionesobtienenlosobjetosdesdelosserviciosybases
de datos, liberan los recursos, sucesivas peticiones http, modifican estos objetos, para
finalmente, ser consolidados con sus modificaciones en su contenedor original. En las EJB
clientes remotos, necesitan transferir los objetos que modifican, esto requiere hacer
transitorioslasinstanciasJDO,paraserializarlas,paraalfinal,volveradeserializaryhacer
persistentes los objetos transmitidos con sus modificaciones. As, estos tipos de aplicacin
no aprovechan la funcionalidad JDO de transparencia de las modificaciones, que requiere
quelasinstanciasJDOestnenganchadasaunPer si st enceManager .En[16]vemosun
ejemplodeaplicacinwebconJDO,quesufredelaproblemticacitada.Antelademanda
por cubrir situaciones como la descrita, JDO 2.0 incluye los mtodos al efecto, attach y
dettach,quemarcanuncierredepersistenciaparasermanipuladofueradelcontextodeun
gestor de persistencia, manteniendo el control de modificaciones, para su posterior
actualizacinalenganchar(attach)denuevo.
Continuando con los estilos de aplicacin, JDO es menos apropiado para las
aplicacionesintensivasenmanejodedatosrelacionales,quenorequierendeunmodelode
objetosoestrivial.
Hay que tener cuidado cuando se usa, por primera vez, una clase que representa
una clave primaria, asegurando que la clase de objetos persistentes asociados a esa clave
primaria, este previamente cargada y registrada como persistente. Este inconveniente
menor,sesolucionaconlainclusinenladeclaracindelaclaseclave,deunainstruccin
puedenevitar,osi,serncorregidosporlafuncionalidadprevistadelanuevaversinJDO
2.0.

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

estticadecreacindeunobjetopersistentedelaclaseasociadaalaclave.En[16]podemos
verdistintosejemplosdeestasolucin.
Otra limitacin, ya mencionada antes en otros captulos, es tener que recuperar
necesariamente los objetos persistentes para su eliminacin. De un lado, esto parece til
para facilitar la implementacin de la integridad referencial. Por otro, es cierto que
habitualmente los programas siguen una secuencia de localizar, mostrar, editar y validar
losobjetos.Enrazndeestasecuenciaydelafacilidadparalaintegridad,seraeleliminar
losobjetosunavezrecuperados.Noobstante,laprximaversinaadeasusinterfaces,un
mtododeborradodirectoenlabasededatossinrecuperacinprevia.
El conjunto estndar de tipos de colecciones, asumidas Collection, Set y HashSet,
podra haber sido ms amplio, incluyendo a las consideradas opcionales, Vector, Map,
ArrayList, HasMap, Hashtable, LinkedList, TreeMap, TreeSet. Clases e interfaces
opcionales,soportadosacriterioalosfabricantes.Estaesunapequealimitacin,queresta
potencia de modelado de clases, para usar de las estructuras de datos ms adecuadas al
caso.
Dejarelsoportedelosatributosdetipoarray,acriteriodelosfabricantes,parece
un pequeo inconveniente, que compromete, otra vez, la potencia de disear clases. Esta
es una limitacin menor, porque se utiliza el tipo Vector habitualmente, que ofrece ms
funcionalidadyseguridadquelosarrays.
Un inconveniente para quienes acostumbran a construir sus diseos a partir de
interfaces,esqueslolasclasespuedenserpersistentes,nolasdefinicionesdeinterfaz,no
obstante, los atributos persistentes si pueden ser referencias a interfaces. La siguiente
versinJDO2.0,permitelapersistenciadeinterfaces.
Lasfuncionesprogramadasparaserinvocadasautomticamenteporelserviciode
persistencia, los callbacks para algunos eventos del ciclo de vida de las instancias
persistentes, parecen pocos y su utilidad para manejar la integridad, no est clara. La
siguiente versin cambia e introduce nuevas signaturas, teniendo presentes ms eventos
delciclodevidapersistente.
JDO no soporta objetos complejos distribuidos entre distintos mecanismos de
persistencia. Un objeto y su cierre de persistencia estn bajo el control de un gestor
PersistenceManager, que solo esta conectado a un mecanismo de persistencia: rdms,
oodbms, ficheros o EIS. Esta limitacin es fcil de superar con un poco de programacin
extra:cuandosealcanzanciertosatributos,quedeotraformaseranreferenciasnormales,
seempleasuvalorparaextraer,desdeotrosPersistenceManagerconectadosamecanismos
diferentes,loscorrespondientesobjetosvinculados.
JDO no permite que objetos remotos sean persistentes. Esta es limitacin
establecida en la especificacin de JDO, los objetos tienen que pertenecer a la JVM, en la
que persisten. Lo normal es que cada JVM, recupere versiones propias de los objetos
almacenadosen la base de datos, cuyaintegridad selogra mediante las transacciones yla
gestin del bloqueo. Esto no es impedimento, para que los objetos JDO sean manejados
remotamentevaRMIoCORBA.UnodelosproductosJDOGenieofreceunservidorJDO,
que proporciona, a JVM remotas, la interaccin con estado compartido de los objetos
persistentesmanejados,sintransferirobjetosentrelasJVM.
JDOQLesmuylimitado,segnfuevistoenuncaptuloanterior.Elhechodetener
que consultar clases concretas y no poder consultas por interfaces directamente, es una
dificultad reseable, que perjudica a los programas que pretenden crear cdigo genrico.
Laprximaversintraeconsigo,mejorasimportantesenlasconsultasconlaposibilidadde
169
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

consultar aquellos objetos cuyas clases implantan cierto interfaz, funciones agregadas
sumarias(sum,avg,min,max,count),msfuncionesmatemticasydemanejodepatrones
decaracteres,yposibilidadesdistintasenelretornodelresultadodelasconsultascomolas
proyecciones,filasenmspuroestiloJDBC[39].
La correspondencia tablaobjetos, es una cuestin que la especificacin JDO 1.0.1.,
no considera, que es crucial cuando se pretende una verdadera compatibilidad entre
productos, y adems, es importante para facilitar su adopcin accediendo a RDBMS. La
versinJDO2.0,normalizalaespecificacindelacorrespondenciaentreclasesytablasen
unesquemarelacional.
Otro inconveniente, ms relacionado con interoperatividad, tiene que ver con la
representacininternalaidentidad,quedecidecadafabricante.Losobjetosmanejadoscon
sendosPersistenceManagerdeproductosdistintos,nopuedenintercambiarlasidentidades
internas manejadas. Esto es, obtener el id interno en uno, para recuperar el mismo objeto
coneseid,enotrogestordeotramarca.Estaesunasituacinpoconormal,integrarenuna
mismaaplicacin,productosdefabricantesdistintosparaaccederalosmismosobjetos.
JDOeslentomsqueJDBCenelaccesoaRDBMS.Notanto,laspruebasrealizadas
muestran que cuanto ms complejo es el modelo de objetos utilizado, mejor adoptar JDO
queprogramarunasolucinespecificaenJDBC.Lostiemposderespuestassonadecuados
frente al esfuerzo de programacin. En las pruebas de rendimiento, para el mejor caso, la
sobrecargadeJDO,rondael4%,quenoparecedemasiado,
Esfalsoquenoseanecesarioconocerotrolenguaje,msconcretamenteSQL.Yase
coment antes, que se puede programar en JDO, sin saber SQL en un buen nmero de
casos, pero, un buen programador debe profundizar cuanto sea necesario, para conseguir
lasolucinmseficazaunproblemadadoaprovechandolosrecursosasualcance.Siperl,
awk o una librera, solucionan un problema de forma ms sencilla y eficaz, Por qu no
usarlos?. Si SQL y el cdigo empotrado en base de datos, sirven para solucionar un
problema,conmenorcomplejidadyesfuerzo,entoncessedebenutilizar.
La sobrecarga que introduce la persistencia, en los objetos transitorios
pertenecientes a las clases persistentes, parece que puede evitar, considerando que en
tiempodeejecucinlosejecutablesdelasclasesoriginalesdebenestaraccesibles.Escierto
que la persistencia JDO introduce una sobrecarga. Un anlisis del cdigo extendido con
persistencia, revela que la sobrecarga al acceder a un atributo de un objeto transitorio,
consiste,comomximo,enlaverificacindedoscondiciones.
Para algunos es un gran inconveniente, que el cdigo ejecutable sea extendido
automticamente con la funcionalidad de persistencia, principalmente, porque oculta los
detalles de la actividad de persistencia, e impide optimizar el cdigo. La especificacin
estndar no exige implantar una extensin del cdigo ejecutable. Los fabricantes pueden
escogersimodificarelbytecodeomodificarelcdigofuente.AlgunodelosproductosJDO
vistos,permitelamodificacindelcdigofuenteampliadoconlapersistencia.Conservarel
cdigo fuente de las clases inalterado, y las ventajas esto conlleva, es la verdadera
contrapartidadeesteinconveniente.Deunaparte,losprincipalesproductosJDO,facilitan
la generacin de bitcoras muy detalladas de la actividad de persistencia, del texto SQL
generado en el acceso RDMBS y proporcionan medidas de rendimiento de cierto nmero
deparmetros.Deotrolado,unodelosprincipiosbsicosdeldesarrollodeprogramas,es
laconfianzaenlacorreccindelsoftwareutilizadoensuconstruccin[19],esporesto,que
utilizamoscompiladoresynoensambladoresparaprogramar.
170
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

Utilizar para los descriptores de persistencia XML, en vez de cdigo compilado,


podra ser considerado un inconveniente respecto al rendimiento y posible fuente de
errores en ejecucin. Flexibilidad contra eficiencia. Ciertamente puede ser ms lento, leer
metainformacin de un archivo XML, si el paquete maneja algunos cientos de clases
persistentes,peroencontra,ayudaaevitartenerquecompilarporcambiosenelmapping.
Este tipo de compromisos, facilita la adaptacin a distintas plataformas y productos. La
compatibilidad binaria, garantiza que una clase compilada con un producto, debe ser
ejecutada con otro, pero no dice nada de las exigencias de metainformacin, donde cada
fabricante usa sus tags vendor, para representar los datos que considera oportunos,
esencialmente el mapping. De esta forma, embutir en un fichero externo el conocimiento
exigido por un producto, ayuda a cambiar de producto, con solo sustituir los archivos de
configuracinapropiados.
Con JDO el esquema fsico queda oculto, y no ofrece medios para manipularlo en
tiempodeejecucin.Estoesuninconvenienteparasistemasdeinformacinconrequisitos
extremos de rendimiento del almacenamiento y recuperacin de objetos. Las aplicaciones
con requisitos extremadamente exigentes de rendimiento de la persistencia, se benefician
de una estrategia de contenedores dinmicos, donde en tiempo de ejecucin, se usa el
almacenamiento ms adecuado. La alternativa en JDO, es utilizar colecciones y clases
contenedoras,quecorrespondenconlasalternativasdealmacenamientoprecisas.
Un inconveniente de JDO, es ser un estndar en proceso de revisin, que podra
sufrircambiosdrsticos,dandoaltrasteconlosdesarrollosllevadosacabohastalafecha.
Es cierto que JDO, esta siendo revisado, quizs a de finales del 2004, se disponga de una
nueva versin definitiva. Pero uno de los objetivos, establecidos en el borrador de la
propuesta de revisin publicada, es asumir la compatibilidad hacia atrs, para evitar
problemasdemigracin.
Ante tanto inconveniente parece que no fuera til trabajar con JDO. Lo cierto y
verdad es, que la mayora de las desventajas expuestas, no son tan importantes que
impidan resolver la necesidad de persistencia de los proyectos Java ms comunes. Buena
parte de las limitaciones realmente importantes, son resultas en la prxima versin, como
aparece en los comentarios introducidos, el desenganche y reconexin de instancias para
lasaplicacionesWeb,lasmejorasenJOQLylaestandarizacindelmapping.
5.2. Ventajas
LamayorventajaperceptiblealtrabajarconJDO.1.0.1,esqueconsiguedifuminar
la frontera entre la bases de datos y los objetos en memoria ejecutados dentro de la JVM,
gracias a la transparencia de datos y la persistencia por alcance. Salvo en la lgica de
manejo de persistencia, con la demarcacin de transacciones, manipulacin de claves y
estado, consultas y el aseguramiento de la integridad referencial. El resto, la autentica
lgicadelnegocio,seexpresaenJavapuro,noentrminosdebasesdedatos,nienXML,ni
enSQL,soloyexclusivamenteenJava.Elresultadoessimilaracomoloscompiladoresy
lenguajes de programacin, ocultan al programador la estructura de registros del
procesador, caches, etc. Son muy importantes los beneficios consecuencia de ventaja
fundamental.
171
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

Figura34PosicindeJDOenlapersistenciajava
JDO evita tener que conocer otros APIS para persistir. La figura anterior ensea
grficamente,comoJDOocultalasdiferenciasexistentesentre,losdistintosmediosusados
para perdurar los objetos, ofreciendo una interfaz nica. Tampoco es menos verdad, que
hay situaciones donde es ms apropiado utilizar JDBC y serializable, por rendimiento o
porquenohacefaltalafuncionalidaddetransparenciadedatosypersistenciaporalcance
deJDO.
JDOesunasolucinglobalalproblemadelapersistenciadeobjetosJava.
Reduce el salto semntico y la complejidad. Consigue centrar el esfuerzo en el
desarrolloenlalgicadenegocio.Desplazaelfocodeatencinsobreelmodelodeobjetos,
relegandoaunsegundoplanoelmodelodatos,puntodepartidaparamuchos.
Una ventaja esencial de JDO es ser un estndar, en el sentido propio del trmino,
porelprocedimientoJCP,sumadurez,yelnmerodeproductosdisponibles.Elhechode
que JDO se ha desarrollado al amparo del Java Comunity Process, es cuando menos, un
granpuntoafavorparallegaraserunestndarreal.Sonvariaslasventajasconsecuencia
deestehechofundamental.
La independencia del fabricante, es una de esas consecuencias primarias de ser
estndar.LosprogramasqueusanlosAPISJDOsonindependientesdelosproductosJDO,
si un programa JDO sigue las recomendaciones de portabilidad, entonces la marca del
productoutilizadoquedaoculta.
La independencia del esquema de persistencia (tablas, definicin de archivos, ),
esunagranventaja.Lacorrespondencia,esquemalgicoyfsico,destinodelosestadosde
los objetos persistentes, puede ser modificada sin necesidad de cambiar los programas.
Permite la evolucin del esquema. Solo los productos que crean la ilusin de persistencia
JDOdebenconocerelmapping.Todoslosproductosvistospermitencomenzarlaejecucin
de las aplicaciones con ficheros descriptores de persistencia con mapping diferentes. En
unaaplicacinJDBC,loscambiosenelesquemaprovocanavalanchasdemodificacionesen
elcdigo.
Independencia y neutralidad del mecanismo de persistencia. El cdigo de los
programas no est ligado a un mecanismo de persistencia concreto. Es una facilidad
remplazar unas bases de datos por otras, permitiendo que la misma aplicacin pueda
almacenar sus objetos en distintas plataformas de almacenamiento de datos RDBMS,
OODBMS,EISyficheros,sinnecesidadderecompilar.Esposibleprogramarsinnecesidad
deconocerelmecanismodepersistencia,nitenerloencuentaelcdigo.Dejarenunfichero
apartelametainformacinnecesariaparalapersistencia,nuevamentecomoantes,consigue
172
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

mayoradaptabilidadyflexibilidadalcambio.Laspruebasderendimientoenestetrabajo,
sonunejemplodeloescrito.
JDOpermiteemplearelmecanismomsconvenientealaproblemticaconcretasin
sernecesariodeprogramarparacadamecanismodepersistenciaexpresamente.
Una posibilidad que alcanza relevancia, al utilizar JDO, es poder utilizar sistemas
de bases de datos orientados a objetos, cuando el modelo relacional no cumpla con los
requerimientosderendimientoyactualizacinnecesarios.AntesdeJDO,osedesarrollaba
parardbms,oparaoodbms.
Dicho ya con otras palabras, pero se debe destacar, que JDO sirve para acceder a
losRDMBS,ocultandolafaltadecorrespondenciaentretablasyobjetos.
EnelsentidoqueJDOesindependientedelosmecanismosdepersistencia,esuna
tecnologadeintegracinideal.
Consecuencia de las ventajas anteriores, es que JDO permite posponer decisiones
deimplementacin,amomentosposterioresdeldesarrollosinperdidadefuncionalidado
eltemoratenerquereconstruirelcdigo.
El lenguaje de consultas JDOQL, tiene una sintaxis java, es simple, pero al mismo
tiempo,unamismaconsultasirveparaaccederasistemasradicalmentediferentes,RDBMS,
OODBMS,ficheros,oEIS.
JDO es fcil de usar y aprender, los ejemplos presentados en este trabajo, as lo
confirman.Elnmerodeelementosqueesnecesariomanejaresrelativamentepequeo,los
patrones de cdigo con persistencia ms comunes, son como los presentados en los
diferenteslistadosvistosenestetrabajo.
En cuanto al rendimiento, JDO logra rendimientos adecuados con modelos de
objetos complejos. Si el destino es un RDBMS, es posible superar el rendimiento de una
solucinJDBCconvencionalconunmodelonormalizadodedatos.
La programacin con JDO es ms productiva, requiere de menos lneas de cdigo
trabajarconpersistenciaJDOqueconotrastecnologas.Enestetrabajosehaalcanzadoun
40% menos de lneas. Menor nmero de lneas repercute en menores costes de
mantenimiento,mscalidadycorreccin.Algunosproductoscomercialesparapersistencia
relacionalcomoCocobase,argumentanquehastael85%delcdigodelasaplicacionesde
negocio, estadedicadoa codificar las operaciones de persistencia. Podemosimaginar que,
si es cierto esto, despreocupados con JDO de codificar la traduccin de objetos en filas, y
viceversa, entonces se dispone de ms tiempo para producir cdigo que aporta valor, las
reglasdelnegocio.
La generacin automtica de cdigo es soportada por todos los productos de
persistencia JDO vistos en la prctica. El cdigo insertado directamente en los ejecutables,
sin trastocar el fuente, facilita uniformidad, reduce las posibilidad de introducir bichos,
reducelapruebaymantenimientodelcdigofuente.Estaesunadeesasventajasqueson
inconveniente,segnquienmire.
Las aplicaciones JDO son adaptables a distintas arquitecturas de aplicacin,
aplicacionesmonolticaslocales,clienteservidor,desplegadasenservidorWeb,enservidor
deaplicaciones.
EldesarrolloconJDOfacilitalaeconomadeescala,enlaproduccindeprogramas
dirigidosasectoresconcretosdelosnegocios,yaque,elmodelodeobjetosconsusreglas
denegocio,permaneceinalteradoeindependiente,deadaptarlasvistasadecuadasparaun
173
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

PDA o un PC, servidor Web o un servidor de aplicaciones. Empleando en cada caso los
sistemas de bases de datos ms apropiados y el producto JDO escogido. El caso de EJB y
sus diferentes modelos de aplicacin, necesita de programar cierto nmero de interfaces
requeridos, enlazando con los servicios ofrecidos por el modelo de objetos. Un mismo
producto terminado para diferentes arquitecturas y plataformas presentes en el mercado
objetivo.Bastapreparardistribucionesdiferentesconficherosdeconfiguracinadecuados
con las propiedades de conexin, controladores de acceso, y mapping, que se adaptan al
entornodeejecucinconcreto,sintenerquemodificarunalneaenlasclasesdeldominio.
JDOesunaalternativasuperioralosEJBentitybeans,complicadosyextensosde
programar,sonunerrortotalreconocidoporlospropiosmiembrosdelgrupodeexpertos
encargadodelestndarEJB.EllugarqueocupanlosEntityBeans,enlaarquitecturaJ2EE,
deservidordeaplicaciones,puedeserocupadoconJDO.EstaeslaopininDavidJordan,
expuestaenjdoCentral.NoesdeextraarquelaespecificacindelnuevoEJB.3.0,pretenda
lograrunmarcodepersistencialigero.
La inversin en JDO es viable y rentable. Es viable porque la propia reduccin de
costesessuficienteparasufragarlaadquisicindelicenciasdeproductosJDO.Esrentable
porquealospreciosactuales,esposiblelograrunaltoretornodelainversin.
Mejora la competitividad de las empresas de desarrollo en Java de aplicaciones
para los negocios, en razn de las ventajas expuestas. No usar JDO, puede significar una
perdidadecompetitividad.
El riesgo de inversin en JDO es manejable y reducido. El nmero de
implementacionesdefuenteabierta,yproductoscomercialesquepermitenunaevaluacin
exhaustiva de sus funcionalidades, permiten analizar la conveniencia y aplicabilidad a
proyectosconcretosconsiguereducirelriesgodeinvertirenJDO.
JDOeslatecnologa,entrelaselegidasenestetrabajo,quesatisfacemsrequisitos
delmarcodefinidoenelprimercaptulo.

La adopcin de un servicio de persistencia de objetos, no es una cuestin


meramente de tcnica introduce cambios de calado en la organizacin, en sus aspectos
productivos.
5.3. ImpactodeJDOenlaorganizacin
En el primer captulo fueron expuestos los cambios que deben suponer en la
organizacin de un servicio de pesistencia. Evidentemente, con JDO, se pueden lograr los
planteamientos expuestos antes, posibilita un rpido aprendizaje, aumenta la
productividad, flexibilidad. El programador es el principal beneficiado, porque ya no
dedica esfuerzos a transformacin de los estados de los objetos en datos. Con JDO es
posible la divisin de las responsabilidades, entre programador y DBA, pues la
informacinsobreelesquemadepersistenciaquedafueradelafuente,eneldescriptorde
persistencia.Lafiguraopapeldelexpertoenpersistencia,apareceparalograradoptarlos
mejores compromisos entre dba y programadores, plasmados en el descriptor de
persistencia.
LafrmulaparaadoptarJDOenlaorganizacin,debeseguirelprocesodescritoen
el primer captulo. Definir un plan, su valoracin, acometer unos proyectos piloto semilla
delcambio,yevolucionarconformealplan.
174
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

Insistir, que a los reiterados los beneficios de una programacin con persistencia
ortogonal, los fabricantes de programas ven mejorada su cadena de valor, y los
consumidores,mejoransuinversinenprogramasaadiendoflexibilidadeindependencia
de sus relaciones con sus proveedores de programacin y de sistemas gestores de datos,
obtienen la capacidad para cambiar de sistemas de gestor de datos o combinar distintos
segnlasnecesidades,sinperdidadelosinversionesprevias,realizadaseneldesarrollode
programasJava.
5.4. Impactoenlatecnologa
Obviamente, como con cualquier otro producto JDO afecta al entorno tecnolgico
delaempresa.GraciasalplanteamientodeserunaAPIms,noimponecambiosradicales
en la tecnologa, que impidan utilizar las tecnologas previas a su incorporacin. Bastar
conincluirenelentornodelibrerasydeejecucin,laslibrerasyejecutablesdelproducto
JDOelegido.
Los scripts de desarrollo tendrn que ser, las tareas ant, maven o make con las
necesarias del postprocesamiento de las clases para la ampliacin de cdigo. Tambin
puede ser necesario incluir, procedimientos para crear, actualizar, revisar y validar los
esquemasdebasesdedatos.
La disponibilidad de la implementacin de referencia, y otros productos JDO de
fuente abierta, permite configurar equipos de desarrollo a coste cero. Es recomendable
utilizar algn producto JDO que permitan automatizar las tareas de mapping, con un
entornogrficomanejable,eintegrableconelentornoIDEJavaelegido.Perodeestaforma,
sepuedenestableceretapasdedesarrolloconresponsabilidadesseparadas,posponiendoa
las fases de produccin ms avanzada, los procesos de mapeo a rdbms, con generacin
scriptssql,creacindelesquemadetablas.
5.5. EconomadeJDO
LosresultadosdeestetrabajosealanpequeoelriesgodeinvertirenJDO,frente
los beneficios que puede reportar su aumento en la productividad y rentabilidad. Si la
reduccin en el nmero de lneas y tiempo de mantenimiento, son tan altos como parece
por este trabajo, entonces, aquellos decididos a programar en Java, con bases de datos,
deberan evaluar el coste de oportunidad y la probable perdida de competitividad por no
invertirenJDO.
Antes de introducir JDO en una organizacin, se tiene que valorar con
detenimientoyprofundidad,loscostesybeneficiosdelcambio.Laideadecomenzarcon
unapequeaylimitadainversin,sobrealgnprototipoquerequierapersistencia,esuna
frmula para comprobar y estimar, la variacin en los costes y beneficios de invertir en
JDO.
Cuanto mayor sea el coste horahombre, dedicado a tareas de mantenimiento
mayoreselretornodelainversinenJDO,segnhasidoexpuesto,encaptulocuatro,con
unoscostesde100,elROIporlareduccincostes,essuperioral1000%,ndicealcanzado
porpocasinversionesfueradelcasinodelaBolsa.
175
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

5.6. Otrosresultadosdeltrabajo
El modelo relacional es adecuado en un buen nmero de casos, pero mirando las
pruebas de rendimiento de este trabajo, vemos que no siempre. Este hecho es la razn
fundamental por la que en los ltimos tiempos, las empresas de motores relacionales, se
apremianporincorporarensussistemas,otrosmodelos,eldeobjetos,elmultidimensional
ylosbasadosenXML.
JDO amplia el mercado de los productores de sistemas de bases de datos
objetuales, que son conscientes de la importancia de la integracin con otros sistemas de
bases de datos, en especial con los relacionales. Los gigantes de la bases de datos
relacionales, tambin, van poco a poco dirigiendo sus premeditados pasos hacia sistemas
objeto relacionales sin discontinuidades entre cdigo y datos, que adems tambin son
capacesdemanipulardatosdeotrossistemas.
En el sitio web de Doug Barry [36] y los sitios web [47] [46], encontramos
referencias que desmienten que los OODBMS son lentos. Hoy por hoy, la mayor base de
datos, pblicamente conocida, es la base de datos Babar, con ms de 890 terabytes,
dispersasenmsdeuncentenardeequiposycasiunmillndearchivos[46].
EnrelacinconloslenguajesdeconsultaylosOODBMS.Lasprincipalesbasesde
datos a las que se ha podido acceder en este trabajo, Versant, ObjectStore, Objectivity,
implantaninterfacesODBC,proyectandolosdatosdelosclasescontenidasenlasmismas,
siguiendo un esquema directo de objetos a tablas, que permite consultar, recuperar e
inclusoactualizar,losdatosasociadosalosobjetosquealmacenan.Facilitandoas,elacceso
en consultas adhoc SQL y la utilizacin de herramientas de consulta y generacin de
informeshabitualesenlosentornosrelacionales.
5.7. Conclusionesltimas
Es momento de responder aquellas preguntas planteadas en la introduccin del
captulo.
EsJDOunatecnologatil,esotramsparapersistir?
Los argumentos expuestos en los apartados previos, los ejemplos ilustrados y las
pruebas efectuadas, son argumentos de peso, que presentan JDO, como una solucin
global, transparente, ortogonal, y escalable al problema de la persistencia de objetos Java.
Es posible acceder a suficientes productos que permiten evaluar su funcionalidad. Es una
tecnologaverdaderamentetil,ylamejordelasvistasenestetrabajo.
QuorganizacionesnecesitanJDO?
Todaslasque necesiten un servicio depersistenciade objetos Java sobreunabase
dedatosrelacionaluotrosistema,especialmente,siempleansistemasgestoresdedatosde
categorasdistintas.LasempresasqueestnevaluandousarunaherramientaOR,deberan
evaluarJDO.
PorquutilizarJDOparaRDMBS,enlugardeproductoscomoCocobase,Castor,
jakartaOJB,ToplinkoHibernate?
Porquetodosestosproductosyotros,solventanexclusivamenteelproblemadela
persistencia sobre RDMBS. Son soluciones parciales a la persistencia de objetos Java,
mientrasque,conJDOesposibleutilizarotrossistemas:OODBMS,archivosoEIS.Porque
los productos mencionados no son estndar, son productos nicos, con APIS y frmulas
176
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

para consultar la base de datos distintas, vinculados a una organizacin, fundacin o


empresa. JDO logra una persistencia ms ortogonal que el resto. En particular, Castor no
soporta colecciones polimrficas Toplink de Oracle, no ofrece transperencia de datos.
Cocobase, necesita cierta manipulacin de las relaciones para lograr la transparencia y la
sincronizacinexpresadelestadodelosobjetosenlabasededatos.JakartaOJB,Hibernate
o Castor, ofrecen transparencia en la recuperacin, pero no de las actualizaciones, que
tienenquesersincronizadasporinvocacinexpresalosmtodosapropiados.Enelverano
2004,enmiopinin,HibernateeraelliderdelosproductosOR,suprincipalinconveniente,
es necesitar de programar en XML, pues adems del mapping, es posible ajustar el
comportamientodehibernatemedianteXML.
TienefuturoJDO?
CitandouninformedelGarnetGroup,losfabricantesdesolucionesJava,tienenla
oportunidaddeproporcionarunatecnologadeintegracinideal.JDOpresentaunmodelo
de integracin que, relega al usuario de los entresijos de los mecanismos de integracin,
dejandolaresponsabilidadalosfabricantesdesistemasgestoresdedatos.Elusuariosolo
debe indicar qu, el fabricante debe facilitar cmo. La principal dificultad y riesgo de
integracineslacompatibilidadbinaria,segnelpropiogrupodetrabajodelJSR12.
La evolucin de JDO debera posibilitar una transicin suave, desde las modelos
actuales a especificaciones ms evolucionadas y completas, que permitiran aumentar su
cuota de mercado y la fidelidad de sus usuarios [31]. Esto puede ser conseguido con una
especificacin simple, fcil de usar, sujeta a un criterio de mnimos esenciales, que con el
tiempoevolucioneamodelosmscomplejosycompletos.JDOtieneapenasuncentenarde
folios, muy pocos interfaces y detalla los modos y escenarios de uso. En mi modesta
opinin,hanescogidounbuencamino,quegarantizasucontinuidad.
El mercado objetivo de la Red, esta creciendo. Se espera que ipv6 y los nuevos
sistemas de telefona mvil van a suponer la aparicin de nuevas sociedades de
intermediacin con nuevos servicios en reas de banca, el ocio, servicios de valor
aadido,..., nuevos eservicios. Nuevos eservicios que deben integrar los sistemas
heredados y las bases de datos. Necesidad que JDO puede ayudar cubrir como ninguna
otratecnologaanterior.
El respaldo a JDO es muy representativo por parte de los ms relevantes
fabricantes de sistemas de gestin de datos de todos los enfoques. Basta con ver quienes
formanbanelgrupodeexpertos:Oracle,IBM,Informix,SAP,SoftwareAG,Versant,Poet,
Objectivity...Si bienalgunos de losgrandes, IBM, Oracle y BEA, se han descolgado en la
revisindejdoencurso,JSR243encurso.
JDO esta alcanzando gran eco entre la comunidad acadmica y en la empresa
desarrolloJava.Sonnumerososlosforos,conferenciasyartculosqueencontramosdonde
seexplicaqueesJDO,cualessonsusvirtudesy,avecestambin,susdefectos.Noobstante,
debera haber una estrategia de difusin especialmente dirigida a la empresa mediana y
pequea,noalasgrandesempresas,quecuentancondepartamentosdeinnovacineI+D.
Microsoftsilohace,inundalosmediosconpublicidadynoticiasrespectoasusproductos.
ElsitioWebwww.jdocentral.com,eselrecursodelaRedreferenteesencialatodo
lo concerniente de la actividad de difusin y debate sobre JDO. En este sitio los expertos
reconocidos,lospropioscreadoresdelaespecificacinviertensusopinionessobredistintas
cuestiones que surgen sobre el uso, adopcin, carencias y nuevos requisitos que son
demandadosporlacomunidaddemiembrosquevacreciendoentornoaJDO.
177
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

El hecho de que diferentes empresas grandes y pequeas respalden JDO, y que


existan varios proyectos de fuente abierta, garantizan la continuidad de JDO, al menos, a
medio plazo, en el transcurso del 2004, se produjeron diferentes movimientos del sector,
con adquisiciones, alianzas, las cuentas de resultados presentadas de algunas de los
productoresdeserviciosJDO.
Los argumentos y comentarios expuestos, apuntan que JDO ocupa ya un lugar
destacadoentrelassolucionesdepersistenciaparaobjetosJava.ParecequeJDOestaenla
lneadelosestndares,quetienenelxitoasegurado.

Paraterminar,resumirenpocaspalabraselresultadodeltrabajo:
Los servicios de persistencia deben ser ortogonales, dotados de transparencia de
datos y persistencia por alcance, superando la falta de correspondencia entre objetos y
basesdedatos,dotadadelosrecursosnecesariosparaformaeficazyeficiente,difuminarla
fronteraentrelosprogramasenejecucinylabasededatos,ocultandoalprogramadorlos
entresijosydiferenciasentrelosdiferentesmecanismosdepersistenciaRDBMS,OODBMS,
archivos y sistemas de informacin empresarial. Los servicios de persistencia ayudan a
aumentar el valor en la produccin y mantenimento de programas, con mayor
productividadyrentabilidad.
JDOeslainterfazdeprogramacindeunosserviciosdepersistencia,quelogranel
mejor nivel de compromiso con la funcionalidad exigida por el marco definido en este
trabajo, y reporta importantes beneficios con su adopcin. Los servicios JDO, ofrecen
Persistencia Java Transparente, Neutral, Escalable e Integrable, persistencia transparente
neutral respecto al tipo de sistema de almacenamiento de datos, preparada para afrontar
cargas de trabajo importantes, que se adapta la arquitecturas de aplicacin, actuales se
integraconlosservidoresdeaplicacionesJavaaprovechandosusservicios.

JDOeslamejortecnologadepersistenciadeobjetosJavadelmomento,ao2004.

178
BIBLIOGRAFAREFERENCIADA

[1] M.ATKINSONR.MORRISON,OrthoganallyPersistentObjectSystems.The
VLDB.Journal4(3)pag319401.1995
[2] M.P.ATKINSON,F.BANCILHON,D.J.DEWITT,K.R.DITTRICH,D.
MAIER,ANDS.B.ZDONIK. The object-oriented database system
manifesto. SIGMOD Conference, May 1990.
[3] KENTBECK,ExtremeProgrammingExplained,EmbraceChange,Addison
WesleyOctubre,1999
[4] ELIZABERTINO,LOREZONMARTINO.Sistemasdebasesdedatos
orientadosaobjetos.AddisonWesley1993
[5] GRADYBOOCH,JAMESRUMBAUGH,IVARJACOSON,Ellenguaje
UnificicadodeModelado,AdisonWesley,1999
[6] BROWN,K.yWHITENACK,B.CrossingChasms:APatternLanguagefor
ObjectRDBMSIntegrationdentrodelPatternLanguagesofProgram
DesingVol2,AddisonWesley,1996
[7] R.G.G.CATTELL,ObjectDataManagementAddisonWesley,1994
[8] EDGARF.CODD,TheRelationalModelforDatabaseManagement:Version
2.AddisonWesleyPublishingCo.1990.
[9] C.J.DATE,Introduccinalossistemasdebasesdedatos,AddisonWesley,
1986.
[10] K.R.Dittrich,conferenciaseminariosobrebasededatosorientadasaobjetos,
Murcia,1996
[11] BRUCEECKEL,ThinkingJava.PrenticeHall.
[12] D.R.Edelson,SmartPointers:Theyresmart,buttheyrenopointers,Usenix
c++conference,1992.
[13] ERICHGAMMA,RICHARDHELM,RALPHJONSON,JOHNVLISSIDES,
DesignPatterns,ElementsofReusableObjectOrientedSoftware,Addison
Wesley,1995
[14] CATHERINEHAMON&ARTHURM.KELLER,TwoLevelCachingof
CompositeObjectViewsofRelationalDatabasesInt.Conf.onData
Engineering,Taipei,Taiwan,March1995.
[15] RONJEFFIRIES,ANNANDERSEN,CHETHENDRICKSON,Extreme
ProgrammingInstalled,AddisonWesleyPubCo;Octubre,2000
[16] DAVIDJORDAN,CRAIGRUSSELLJavaDataObjects.ORelly.April2003
[17] HENRYF.KORTH,ABRAHAMSILBERSCHATZ,FundamentosdeBasesde
Datos,MgGrawHill.
[18] GRAIGLARMANUmlyPatrones,PrenticeHall,1999
[19] BERTRANDMEYER,ObjectOrientedSoftwareConstruction2
nd
Editon,
PrenticeHall,1997
[20] SCOTTMEYERS,MoreEffectiveC++,AddisonWesley,1996
[21] NICHOLASNEGROPONTE,BeeingDigital.VintageBooks.1996
[22] OMGPersistentStateServiceSpecification2.0,formal/020906
[23] R.ORFALIANDD.HARKEY,Client/ServerProgrammingwithJavaand
CORBA,JohnWileyandSons,NewYork,1998.Client/ServerProgramming
withJavaandCORBA,2ndEdition,Wiley,Marzo1998
[24] CLAUSP.PRIESE,AflexibleTypeExtensibleObjectRelationalDatabase
WrapperArchitecture
[25] TRYGVEREENSKAUG,WorkingwithObjectsTheOOramSoftware
EngineeringMethodManningPublicationsCompany,1995
[26] RIEL,ARTHURJ.ObjectOrientedDesignHeuristics.AddisonWesley,1996.
179
J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A JuanMrmolCastillo

180
[27] AlejandroRoca,JuanMrmol,CORBASEGUROCORBASLLAplicaciones
deObjetosdistribuidassegurasAsignaturaProgramacinparalas
Comunicaciones,2000
[28] ROGERS.PRESSMAN,SotwareEngineering,McGrawHill3ed.1991
[29] ROBINROOS,JavaDataObjects,AddisonWesleyPublisherLtd.,2002
[30] JAMESRRUMBAUGH,MICHAELR.BLAHA,WILLIAMLORENSEN
FREDERICKEDDY,WILLIAMPREMERLANI,ObjectOrientedModeling
andDesing,PrenticeHall.1990
[31] SZYPERSKY,C.ComponentSoftware:BeyondObjectOriented
Programming.AddisonWesley.Massachusetts.1997.

DocumentosenlaRed
[32] SCOTT W. AMBLER Design of Robust Persistence Layer.
http://www.ambysoft.com/persistenceLayer.html
[33] DR.MALCOLM ATKINSON, Pjama Project
http://www.dcs.gla.ac.uk/pjava/
[34] HTDOUGLAS BARRY, DAVID J ORDAN, ODMG: The Industry Standard for J ava
Object Storage
http://www.objectidentity.com/images/componentstrategies.htmlTH
[35] DOUGLAS BARRY, TORSTEN STANIENDA Solving the Java Object Storage
Problem
http://csdl.computer.org/comp/mags/co/1998/11/ry033abs.htm
[36] HTDouglas Barry Web Services and Service-Oriented Architectures
http://www.service-architecture.com/TH
[37] EMMANUEL CECCHET, Performance Comparison of Middleware Architectures
for Generating Dynamic Web Content
http://sardes.inrialpes.fr/papers/files/03-Cecchet-Middleware.pdf
http://www.cs.rutgers.edu/~rmartin/teaching/spring04/cs553/cecchet02a.p
df 4th ACM/IFIP/USENIX International Middleware Conference, Rio de
Janeiro, Brazil, junio 16-20, 2003
[38] DAVID JORDAN, Comparison Between Java Data Objects (JDO), Serialization
an JDBC for Java Persistence
http://www.jdocentral.com/pdf/DavidJordan_JDOversion_12Mar02.pdf
[39] David Jordan, New Features in the JDO 2.0 Query Language
http://jdocentral.com/JDO_Articles_20040329.html
[40] DAVID JORDAN, The JDO Object Model, David Jordan, Java Report, 6/2001
http://www.objectidentity.com/images/jdo_model82.pdf
[41] HTARTHUR M. KELLER y otros, Architecting Object Applications for High
Performance with Relational Databases, 1995
www.hep.net/chep95/html/papers/p59/p59.ps TH
[42] HTWOLFGANG KELLER, Object/Relational Access Layers A Roadmap, missing
Links and More Patterns
http://www.objectarchitects.de/ObjectArchitects/orpatterns/TH
[43] HTRober D. Poor. Hyphos
http://www.media.mit.edu/pia/Research/Hyphos/,TH
[44] 007 benchmark, http:/www.objectidentity.com/images/007jdo.pdf)
[45] HApache Ant es una herramienta para gestionar tareas de compilacin analoga
makefile
.http://ant.apache.org/H
[46] HTBabar database
http://www.slac.stanford.edu/BFROOT/www/Public/Computing/Databases/inde
x.shtmlTH
JuanMrmolCastillo J JD DO Op pe er rs si is st te en nc ci ia aJ JA AV VA A

181
[47] HTEjemplo alto rendimiento
http://www.fastobjects.com/us/FastObjects_IndustrySolutions_NetworkTelecom
_StreamServe.asp http://www.objectivity.com/Industry/Success/telecom.htmlTH
[48] Gartner Group J ava
H www.gartner.com/webletter/actuate/article2/article2.htmlH
[49] HTJ AVA TECHNOLOGY: THE EARLY YEARS
http://java.sun.com/features/1998/05/birthday.htmlTH
[50] JDO MAX http://www.jdomax.com/c/extranet/home?e_l_id=22
[51] JSR-000012 JavaTM Data Objects Specification (Proposed Final Draft)
HThttp://jcp.org/aboutJava/communityprocess/first/jsr012/index.htmlTH
Implementacin Jdo de Referencia
http://jcp.org/aboutJava/communityprocess/final/jsr012/index2.html
[52] Productos de persistencia
http://www.persistence.com/products/edgextend/index.php,
http://www.objectmatter.com/,
http://www.chimu.com/products/form/index.html,
Cocobase(http://www.thoughtinc.com/cber_index.html),
http://www.secant.com/Products/OI/index.html,
Toplink(HThttp://otn.oracle.com/products/ias/toplink/htdocs/sod.htmlTH)
Hibernate (HThttp://www.hibernate.orgTH)
ObjectRelationalBridge (OJB) HThttp://db.apache.org/ojb/TH
[53] RUBIS Benchmark, HThttp://rubis.objectweb.orgTH
[54] Telefonia global www.iridium.com
http://www.objectivity.com/NewsEvents/Releases/archived_releases/1999/
MotorolaDeliversIridium.html
[55] Torpedo HThttp://www.middlewareresearch.com/torpedo/TH

HHHHHHHHHHHHHHHHHHHHHHHHHHHHH