10. taller de formación java empresarial
Post on 06-Jan-2017
228 Views
Preview:
TRANSCRIPT
10. Taller de Formación Java empresarial
Ing. Laura González Ing. Guillermo Roldós
Ing. Juan Herman
631
Taller de Formación Java em
presarial
Instalación de Entorno de Trabajo
¿Qué herramientas tenemos que instalar?
Las herramientas que vamos a usar para el desarrollo de aplicaciones bajo la plataforma JEE durante el curso son las siguientes:• Java Developmet Kit (JDK): Conjunto de herramientas para el desarrollo de aplicacio-
nes JAVA. http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u25-down-
load-346242.html•PostgreSQL: Sistema de Gestión de Base de Datos (del inglés DBMS - DataBase Ma-
nagment System).http://www.enterprisedb.com/products-services-training/pgdownload#windows• JBoss Application Server (JBoss AS): Servidor de Aplicaciones JEE.http://sourceforge.net/projects/jboss/files/JBoss/JBoss-6.0.0.Final/jboss-as-distribu-
tion-6.0.0.Final.zip/download•Eclipse: Entorno de Desarrollo Integrado (del ingés IDE – Integrated Development
Environment).http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr2JBossTools: http://sourceforge.net/projects/jboss/files/JBossTools/JBossTools3.2.x/
jbosstools-3.2.0.GA.aggregate-Update-2011-02-16_18-30-44-H329.zip/download?use_mirror=ufpr
¿Qué pasos debemos seguir?
1. Paraempezar,debemoscopiarlacarpetaHerramientas,queseencuentraenelDVDentregadoparaeldesarrollodelcurso,enalgúndirectoriolocalalcualllamaremosenade-lante%TF_JEE%.
2. Instalamos la JDK: %TF_JEE%\Herramientas\1.Java\jdk-6u25-windows-i586.exesiguiendolospasosdelwizarddeinstalación.
632
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
3. Instalamos PostgreSQL: %TF_JEE%\Herramientas\2.PostgreSQL\postgresql-9.0.4-1-windows.exesiguiendolospasosdelwizarddeinstalación.
4. Instalaciónde JBossAS:Loúnicoquedebemoshaceresdescomprimirel archivo%TF_JEE%\Herramientas\3.JBoss\jboss-as-distribution-6.0.0.Final.zip.
5. Instalación de Eclipse: Al igual que con JBoss solo debemos descomprimir el archivo entregado%TF_JEE%\Herramientas\4.Eclipse\eclipse.zip.Laversióndeeclipseentrega-dacorrespondealaversiónHelios-SR2conlossiguientepluginsdeJBossToolsyainstalados:a. HibernateToolsb. JBossToolsRichFacesc. JBoss WebServices Toolsd. JBossAS Tools
Opcionalmente,seentregaelinstaladordeFirefox5,yaqueesperfectamentecompatibleconlasherramientasqueutilizaremosparaeldesarrolloWEB.Elinstaladorseencuentraen%TF_JEE%\Herramientas\5.Extras\FirefoxSetup5.0.1.exe
¿Cómo integramos Eclipse con JBoss?
El plugin JBossAS Tools (ya instalado en la versión entregada) nos brinda la posibilidad de manejarlaconfiguracióndelJBossdesdeelpropioIDE,ademásdelaposibilidaddeiniciarlo(enmodonormalodebug),reiniciarlo,detenerloyrepublicarlosproyectossinnecesidaddecopiarcarpetas,archivosoutilizarcomandosporconsola.Veamospasoapasocomorealizardichaintegración:1. SobrelavistaServersdamosclickderecho->New->Server.
633
Taller de Formación Java em
presarial
2. ElegimosJBossAS6.0.
3. SeleccionamoscomoHomeDirectorylarutadondedescomprimimosJBoss\jboss-6.0.0.Final.ConfiguracióndefaultypresionamosFinish.
4. Elpaso3agregaráunnuevoítemenlavistadeServers,sidamosdobleclicksobreélpodemosverlasiguientepantalladeconfiguración.
634
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
Vemos,además,queseactivanlossiguientesbotones:
635
Taller de Formación Java em
presarial
Taller de Formación Java EETema: Introducción a componentes de
negocio (EJB)1era Parte
1 Introducción
Cuando se va a desarrollar un Sistema de Información de cierto tamaño (o que se espera quepuedacrecerenelfuturo),esnecesariotenerencuentavariosaspectosparasudiseñocomo,porejemplo,elmanejodelaseguridad,accesoaBasesdeDatosygestióndetransac-ciones,escalabilidad,posibilidaddedistribuirlainstalaciónenmúltiplesservidores,etc.LasespecificacionesJEE[1]resuelvenestaproblemáticaatravésdelacreacióndecom-
ponentesdenegocio llamadosEJB,quesimplificanmuchísimoeldesarrollo.La ideaestábasada en el uso de un contenedor de EJB (o EJB Container) que se encarga de gran parte delastareasmencionadasantes,dejandoaldesarrolladorlaimplementacióndelalógicadenegocioparticulardecadaservicio.Deestaforma,secumpleconelprincipiodequecadacomponente de software resuelve la parte de la que es responsable en un sistema débilmente acoplado.
1.1 Qué son y para qué sirven los EJB
LosEJB(porlassiglaseninglésdeEnterpriseJavaBeans,oComponentesdeNegocioJava),tambiénllamadosEnterpriseBeans,soncomponentesdesoftwareescritosenJavaqueencapsulan las complejidades relacionadas con todos los servicios de base necesarios para unaaplicacióndemedianoogranporte,permitiendoqueeldesarrolladorseconcentreen
636
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
implementar lo realmente importante. Estos componentes no son capaces de ejecutarse por sísolos,sinoquenecesitandeunservidorqueloscontengaylesbrindetodoslosserviciosnecesarios (el Contenedor).Enunaarquitecturaencapastradicional,losEJBseencuentranenlacapalógicay,even-
tualmente,enlacapadepersistencia,comopuedeverseenlaFigura1.
1.2 Cómo funcionan los EJB
CuandosedesarrollauncomponenteEJB,loqueseescriberealmenteesunaclasePOJOjunto con determinados annotations1queindicanlascaracterísticasypropiedadesdedichocomponente.EstaspropiedadessonleídaseinterpretadasporelContainerypermitenaéstedecidir cómo controlar cada instancia del EJB y su ciclo de vida. En un contenedor pueden existirdiferentesEJBs,losquepuedenformarpartedelamismaaplicaciónodemásdeuna.ExistendiferentestiposdeEJB,losqueseránvistosmásadelante,cadaunodeloscuales
tieneunfinespecíficoyesmanejadoporelcontenedordeformadiferente.Eselcontenedor
elquecreaydestruyelasinstanciasdelosEJBdeacuerdoasusnecesidades,asícomogestio-na el ciclo de vida de cada instancia. Esto no es controlable por el desarrollador.Cuandouncliente(seaésteunaaplicaciónJavaounapáginaJSPoJSF)deseaejecutarun
servicioprovistoporunEJB,debeprimerosolicitarunainstanciadelmismoytodalainte-racciónesatravésdelContainer,comoseobservaenlaFigura2.
2 Contenedor de EJB
Comoyasemencionóantes,unContenedordeEJBesunaaplicaciónquecumpleconunaseriedeespecificacionesparaejecutarcomponentesEJB.LasespecificacionesJEEsonprovistasporSun(ahoraOracle)ypuedenserimplementadaspormásdeunproveedor,cadaunodeloscualesimplementasupropiaversióndelasmismas.Existenservidoresgratuitosopagos,cadaunopuedebrindarmayoromenorfuncionalidadperotodosdebencumplirconlasespecificacionesoficiales.EnlaFigura3seobservaundiagramaquemuestracómolosEJBsonejecutadosdentrodeunEJBContainer,yésteespartedeunApplicationServer.UnadelasventajasdeestoesquelosEJBsonmultiplataforma,esdecir,quesondesarro-
lladosunavezynoesnecesariomodificarlossisecambiadeproveedordelContainer.
1Lasannotationssirvenparaexpresarmetadataacercadeunaclase,métodooatributodeformaintegradaconelcódigode la misma.
637
Taller de Formación Java em
presarial
AlgunosdeloscontenedoresdeEJBcomúnmenteusadosson:• JBossAS[2]esunservidordeaplicacionescompletodondenosoloseejecutanEJBs
sinotambiénaplicacionesWeb,portales,etc.Esmuyutilizadodebidoaqueesunproductoopen-sourcedeexcelentecalidad,robustoyconmuchosañosenelmercado.•GlassFish[3]fuedesarrolladoporSuncomounproductoopen-source,sibienesmás
recientequeJBossestámuyextendidoactualmente.ApartirdelaadquisiciónporpartedeOracle,SunformapartedelpaqueteMiddlewaredeOracle.•WebLogicServer[4]fuedesarrolladoporBEASystemsyadquiridorecientementepor
Oracle,esunproductocomercialmuyrobusto.•WebSphere [5],productocomercialdesarrolladopor IBM, se integra fácilmentecon
otrosproductosdelacompañía.Las responsabilidades principales de un Contenedor son las siguientes:•Manejo del ciclo de vida de las instancias de EJB.•PooldeinstanciasdecadaEJB,dondedebeequilibrarlacantidaddeinstanciasnecesa-
riaspararesponderrápidamentesinconsumirrecursosexcesivamente.•Gestióndetransaccionesparaqueseatransparenteparaeldesarrollador,éstesolamente
debe declarar unas directivas.•Seguridad a nivel de usuarios y roles.• Inyeccióndedependencias,loquepermitelainvocaciónremotadeotrosEJBsinqueel
desarrolladordebaespecificarsuubicación.•SoporteparaWebServices,quebrindanlaposibilidaddeinteractuarconserviciosalo-
jadosenotrasplataformasotecnologías.•Timer para ejecutar eventos cada determinada cantidad de tiempo.
3 Tipos de EJB
ExistendostiposprincipalesdeEJB, losqueseveránenestecapítulo.EstetipodebeespecificarsecomounaanotaciónenlaclaseJavaqueloimplementa.
3.1 Session Beans
Soncomponentesquecontienen lógicadenegocios,puedenversecomoserviciosex-puestosparaserconsumidosporlosclientes,tantolocalcomoremotamente(luegoseverácon mayor profundidad este concepto). Cuando un cliente desea ejecutar una operación de un determinado EJB el servidor (Container) le provee una instancia del mismo para que eje-cute el método deseado sobre ella.
638
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
Existen,asuvez,trestiposdeSessionBeans,determinadosporcómosonmanejadaslasinstancias con respecto a los clientes que consumen sus servicios.
3.1.1 Stateless Session Beans
EstosEJBnomantieneninformaciónacercadelosclientesqueatienden,inclusoesposi-ble que un mismo cliente sea atendido por diferentes instancias del mismo EJB. Cuando un clientedeseaejecutarunaoperaciónpideunainstanciaalContainer,éstetomaunainstanciadedichoEJBdeunpooldeinstanciasdisponibles,ejecutaelmétodosolicitadoydevuelvelainstanciaalpoolsinquequederegistradaningunainformacióndelaoperaciónquerealizó.Estoseobservamásclaramenteen laFigura4(másadelanteseexplicaráelconceptodeProxyqueapareceenlafigura).
Sonlosmásutilizados,suprincipalventajaesqueconsumenpocosrecursosyaquelasinstancias son reaprovechadas y un mismo servidor puede atender a mayor cantidad de clien-tes. Esto brinda mayor escalabilidad a la aplicación.ParacrearunEJBdeestetipodebemosagregarlaanotación@Stateless,comoseveenel
ejemplodelaFigura5.Aestamaneradeespecificarlasdependenciasdeclarativamenteselellama“dependencyinjection”,yaqueelContainerinyectalasdefinicionesnecesarias.
3.1.2 Stateful Session Beans
Adiferenciadelosanteriores,enestecaso,cadainstanciadeunEJBatiendeaunúnicocliente,porloquepuedeguardarinformaciónacercadesuestado.Estetipodecomponentessonutilizadosencasosenquesenecesitemantenerunarelación“conversacional”entreelclienteyelservidor.Elejemplomáscomúnesel“carritodecompras”,enelqueelservi-dordebeconocerlosítemsqueelclientehaidocomprando.EnlaFigura6semuestraesteconcepto.
639
Taller de Formación Java em
presarial
ClaramenteestosEJBconsumenmayorcantidadderecursosquelosanteriores,yaqueporcadaclienteesnecesariocontarconunainstanciadelEJBconlocual,amayorcantidaddeclientescreceránlosrequerimientosparaelservidor.Estorestaescalabilidadalaaplica-ción.
Delmismomodoqueenelcasoanterior,paracrearunEJBdeestetipoesnecesarioes-pecificarlaanotación@Stateful.
3.1.3 Singleton Session Beans
Enestecaso,unaúnicainstanciadelEJBescreadaparatodalaaplicación,por loquetodoslosclientescompartirándichainstanciayéstamantieneelestadoentreunainvocaciónde un cliente y otra.Enloscasosanteriores(StatelessyStateful),elcontaineraseguraqueningunainstancia
estarásirviendoamásdeunclienteenunmomentodado.Sinembargo,enestecasosípuededarseesasituaciónylamismainstanciapuedeestarsiendoaccedidapormásdeunclientealmismotiempo.Porlotanto,esnecesariotenerestoencuentaysincronizarlaspartesdelcódigo que no puedan ejecutarse concurrentemente.
3.2 Message Driven Beans
EstetipodeEJB(tambiénllamadosMDB)nosoninvocadosdirectamenteporclientes,sinoquelosmismosenvíanmensajesasincrónicamenteaunsistemademensajeríaJMS(Java
MessageService)paraqueseantomadosdeallíyprocesadosporestosEJB.EstoseobservamejorenlaFigura7.
640
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
Hastalaversión2.0laespecificaciónJEEsoportabasolamenteJMS,2 pero a partir de la versión2.1seextendióacualquiersistemaquesoporteJCA3 (Java Connector Architecture).
4 Ejemplo de EJB
Aefectosdeclarificar losconceptosvertidosenestedocumentosemuestra la imple-mentacióndeunservicioofrecidoporunEJB,incluyendoelaccesoalosdatos.SedescribeunservicioparaingresarlibrosaunaBasedeDatosparalocualexistendosEJBdetipo
Stateless:•Unoqueofreceserviciosdealtonivelseráelqueelclienteinvoquepararealizarlaope-
ración,cuyocódigoseobservaenlaFigura8.•Otroquebrindaserviciosdepersistencia,queseráusadoporelanteriorparaaccedera
losdatos.ElcódigoeselquesemuestraenlaFigura9.Deestaforma,selograencapsularlaresponsabilidaddecadacomponente,loquefavore-
celaextensibilidaddelaaplicación.Comosepuedeverenesteejemplo,elprimerservicioactúacomoclientedelsegundo.Lo
primeroquehayquenotaresquenuncasecreaunainstanciadeLibroDAO,sinoquedirec-tamenteseusa,esoesporqueelContainerseencargadeinyectarlasdependenciasnecesarias.EncuantoaLibroDAO,sedeclaraelcontextodepersistenciaatravésdeunareferencia
a“libroUnit”(tambiénseusadependencyinjectionaquí).EstecontextoindicainformaciónacercadelaBasedeDatos(suubicación,usuarioycontraseña,etc.)ydebeestardeclaradoenformaexternaalaaplicación.Puedeserdeclaradoenunarchivollamadopersistence.xml
2JMSesunserviciobrindadoporJavaparaaplicacionesbasadasenmensajes,esdecir,quelacomunicaciónentreclienteyservidoresasincrónicaatravésdecolasdemensajería.3JCAesunconceptomásamplioqueJMSyrefiereatodolorelativoaconectividadentreservidoresoentreclienteyservidor.
641
Taller de Formación Java em
presarial
oatravésdeunDataSource(esdecir,unadefinicióndefuentededatosqueserealizadirec-tamente en el Servidor de Aplicaciones).
5 Bibliografía
JavaCommunityProcess,JavaEE6Specificationhttp://jcp.org/aboutJava/communityprocess/final/jsr316/index.htmlJBoss Application Serverhttp://www.jboss.org/jbossas/GlassFishServerhttp://glassfish.java.netOracle WebLogic Serverhttp://www.oracle.com/technetwork/middleware/weblogic/overview/index.htmlIBM WebSpherehttp://www-01.ibm.com/software/websphere/
642
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
Taller de formación Java EETema: Introducción a componentes
de negocio (EJB)2da Parte
1 Introducción
Comosevioenlaprimerapartedeestecursointroductorio,losEJBsoncomponentesdesoftware que ofrecen servicios a nivel de lógica de negocios y persistencia. Éstos no tienen entidadporsímismossinoquedebenejecutarseenunContainer,queesquienproveetodoslos servicios de base que el EJB necesita.Comosemostró,esposibleatravésdeestatecnologíalaimplementacióndesistemasde
medianoygranportesintenerqueimplementartodaslascomplejidadesqueestoimplica,comocontroldeconcurrencia,transaccionalidad,seguridad,etc.Enestasegundaparteseprofundizaráenlosdistintostiposdeinterfacesqueofrecenlos
EJB,asícomoendosconceptosimportantesalahoradeimplementarunasoluciónbasadaen JEE: manejo de transacciones y seguridad.
2 Cómo exponer un EJBUnavezdesarrolladoelcomponenteEJB,sedebedecidircómoseráexpuesto,esdecir,
cómoesofrecidoesteservicioparaserconsumidopor losclientes.Paraestoexistentresopciones,lasquesedesarrollaránenestecapítulo,quebásicamentedeterminanlavisibilidadque se le desea dar al servicio.
2.1 Interfaz Remota
Unainterfazremotapodráseraccedidaporcualquiercliente,tantoseaotroEJBqueestécorriendodentrodelmismoContainercomounaaplicaciónexterna,inclusoelclientepue-deestarubicadoenotramáquinafísica.Yaqueunainterfazdeestetipopuedeseraccedidatantoremotacomolocalmente,escomúnquelasinterfacessedefinancomoremotasenge-neral.Además,sibienestopuedeagregarunoverheaddelladodelContainer,afuturopuedeotorgarmásflexibilidada laaplicación.Téngaseencuentaque,aunqueunsistemapuedepensarsequevaaejecutarsiempreenunúnicoContainer,esprobablequeenelfuturosedecida(porrazonesdeescalabilidad)distribuirenmásdeunservidor.
643
Taller de Formación Java em
presarial
SielclientequeconsumeunEJBremotoestáejecutandodentrodelContainerpuedereferenciarlousandoinjectionpero,siesunaaplicaciónexterna,debebuscaryobtenerunareferenciaalserviciousandoJNDI(JavaNamingandDirectoryInterface).ParadeclararunainterfazremotaseanotacomoseobservaenlaFigura1,yenlaFigura2puedeobservarseelcódigodeunclienteexternoparaejecutarunEJB.
2.2 Interfaz Local
Una interfazdeeste tiposeráaccedidasolamenteporclientesqueejecutendentrodelmismoContainer,esdecir,queelservicionoesexpuestoparaserconsumidopúblicamentesino solamente por otros componentes conocidos o controlados. Si bien un cliente local es máseficientequeunoremoto,engeneralseconsideraquelasinterfaceslocalesgeneranunmayoracoplamientoenlaaplicaciónyaquenopermitenquelamismasedistribuyaenmásde un servidor.
Paradeclararunainterfazlocalseusalaanotación@Local,comoseobservaenlaFigura3.
2.3 Sin interfaz
ExistelaposibilidaddequeunEJBnoimplementeningunainterfaz,nilocalniremota.Enestecasosedeclaraimplícitamenteunainterfazlocalcontodoslosmétodospúblicos.
2.4 Referencias a objetos remotos
ComoseobservaenlaFigura4,cuandounclienteremotointeractúaconunEJBlohaceenrealidadatravésdeunainterfazremotayusandolosserviciosprovistosporelContainer.Pero,¿quésucedeconlosobjetosquesepasancomoparámetrosoconelvalorquepuederetornarunmétododelEJB?Comoserecordará,enJavacuandounmétodoretornaunob-
jetoestádevolviendo,enrealidad,unareferenciaaunobjetoqueseencuentraenelHeap.1¿Cómosesuponequeelclienteremotopuedaaccederaunobjetosinotieneaccesoal
Heapenelqueseencuentradichoobjeto?NuevamenteelContainerseencargadeesto,paraqueloquesedevuelvaalclientenoseaunareferenciaalheaplocalsinounproxyalobjetooriginal,llamado“stub”.Esteproxyactúacomosifueraelobjetooriginal,perocadavezqueselesolicitaalgoenvíalasolicitudalobjetoremotooriginal.
1ElHeapesunespaciodememoriautilizadoporlaJVMparaalmacenarobjetos.
644
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
Paraquetodoestofuncionecorrectamente,tantolosparámetroscomolosvaloresde-vueltosporlosmétodosdelasinterfacesremotasdebenserserializables.2 Esto es debido a queencadainvocaciónlosobjetosdebenserserializadosparaserenviadosremotamente.
3 Persistencia
Enlagranmayoríadelossistemasdeinformaciónlapersistenciaesunodelosaspectosmásimportantesydondehayqueprestarmásatenciónduranteeldesarrollo.EnJEEexistendosconceptosbásicosquesimplificanmucholagestióndelapersistencia,losquesedescri-ben a continuación.
3.1 Transacciones
ElcontroldetransaccionesesunservicioimportantebrindadoporelContainer,yaquea través de una simple anotación éste se encarga de inyectar todo el código necesario para el manejodetransacciones,tantodesdeeliniciodelasmismashastaelcommitorollbackencasodeproducirseexcepciones.Comosesabe,unatransacciónesunaunidaddetrabajoformadaporunoomásaccesosa
losdatos.Estaunidaddetrabajodebeejecutarseexitosamenteensutotalidadonoseejecuta,nosepermitequeseejecuteparcialmenteyaqueestogeneraríainconsistenciasenlabasededatos.EnJEElastransaccionessedefinenaniveldemétodosdenegocio,yaquesonéstoslosquecorrespondenalconceptodeunidaddetrabajo,aunquesepuededefinirtambiénanivel de EJB haciendo que todos sus métodos posean el mismo atributo.ParaindicaralContainercómodebemanejarelinicioyfindelastransaccionesseutiliza
laanotación@TransactionAttribute,quepuedetenerunodelosvaloresindicadosaconti-nuación.
3.1.1 Required
Sialinvocaralmétodoyaexisteunatransacciónabiertaseusaésta(caso-a-enlaFigura5),encasocontrariosecreaunanueva(lacualescerradaunavezfinalizadalaejecucióndelmétodo,caso-b-).
2Unobjetoesserializablecuandoesposibleconvertirloabytesparaserenviadoatravésdelared.
645
Taller de Formación Java em
presarial
Esteeselvalorpordefectoquetomaelatributo@TransactionTypeencasodenodefi-nirseningúnvalor.
3.1.2 Requires_New
Sialinvocarelmétodoyaexisteunatransacciónabiertaéstaquedaensuspensoycreaunanueva.Elmétodoinvocadoutilizaestanuevatransaccióny,alfinalizar,vuelvearetomarsela anterior.
3.1.3 Mandatory
Indica que el método necesita una transacción abierta por el llamante. En caso de que no hayaunatransacciónabiertaarrojaunaexcepción.
3.1.4 Supports
Encasodequeexistaunatransacciónabiertaseutilizay,encasocontrario,ningunatran-sacción es creada.
3.1.5 Not_Supported
Encasodequeexistaunatransacciónabiertaéstasesuspendemientrasseinvocaaestemétodoy,unavezfinalizado,seretomadichatransacción.Sinoexisteunatransacciónnoescreada ninguna tampoco.
646
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
3.1.6 Never
Sinoexisteunatransacciónnosecreatampocouna.Siyaexisteunatransacciónabiertasearrojaunaexcepción.
EnelcuadrodelaFigura11seresumenlasposiblessituacionessegúnelatributo@Tran-sactionTypedefinidoparaelmétodoinvocado.
3.2 Entidades persistentes
Lasbasesdedatosrelacionalesnoestánorientadasaobjetossinoatablasrelacionadasatravésdedependenciasfuncionales,porloquedeberealizarseunmapeoentrelasentidadesqueformanunaaplicación(elmodelodedominio),ylastablasquevanapersistirsusatribu-tos.EstemapeoseespecificaatravésdelasanotacionesquedefinenlaJavaPersistenceAPI(JPA),lacualseráestudiadaenprofundidadenotrodocumento.
4 Seguridad
LaseguridadenJEEesmanejada tantodeclarativamentecomoprogramáticamenteenloscasosquenoessuficienteconlaprimera.Estábasadaenroles,esdecir,quelosusuariospuedenperteneceraunoomásrolesysobreéstosserealizanloscontrolesdeaccesoalosmétodos de los EJB.Existentresconceptosimportantesparadeterminarsiunaccesoestápermitidoparaeje-
cutar determinada operación:•Autorización:permiteodeniegalaejecucióndedeterminadaoperaciónométododeun
EJB.Estábasadaenlaidentificaciónyenlaautenticación.• Identificación:permitereconocerelusuarioqueestáintentandoejecutarelmétodo.
647
Taller de Formación Java em
presarial
•Autenticación:eselprocesodevalidaciónoverificacióndequeelusuarioesrealmentequien dice ser.Engeneral,enunaaplicaciónJEEelprocedimientodeautenticaciónimplicalossiguien-
tes pasos:•Selepidealusuarioqueingresesuidycontraseñaatravésdeunapáginawebodeuna
aplicación de otro tipo.•Estas credenciales son validadas contra un proveedor JAAS (Java Authentication and
AuthorizationService).•Silaautenticaciónesválida,elclienterecibeunobjetollamadotoken(oprincipals),el
cualseráusadoenformatransparenteencadainvocaciónamétodosdeEJBparaindicarlealContainerquiéneselusuarioqueestárealizandolaoperaciónyqueelmismoestáautorizado.•EnbaseadichotokenelContainertambiénobtendráelolosrolesalosquepertenece
elusuarioy,enbaseaeso,determinarásipuedeonoejecutarlosmétodosinvocados.Comosepuedever,lavalidacióndeusuarioycontraseñaserealizaaniveldelacapaWeb,
yelEJBrecibeyaunobjetoqueindicaqueelusuarioesválido(aunquetodavíanohadeci-dido si dicho usuario puede invocar al método solicitado).
4.1 Seguridad declarativa
Comosemencionó,laespecificacióndelospermisosparaejecutarlosmétodosdelosEJBserealizananivelderolesautorizadosparaeso.Estosehaceatravésdelaanotación@RolesAllowed,lacualsepuedeutilizartantoenmétodoscomoentodalaclase(enestecasoindicaquelosrolesespecificadospuedenaccederatodossusmétodos).EnlaFigura12puedeverseunejemplodeunEJBenelqueseespecificaestarestricción.
Ademásdelasanotacionesmencionadas,esposibleespecificar@PermitAllparaindicarque un método es accesible a todos los roles o @DenyAll para indicar que un método no es accesibleaningúnrol.
648
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
4.2 Seguridad programática
Enalgunasocasionesnosonsuficienteslasanotacionesmencionadasparapermitirode-negarelaccesoaunmétodo.Enestoscasosesnecesarioutilizarprogramaciónparaobtenermásinformación.SibienelusodeestametodologíaexcedeelalcancedeestedocumentoenlaFigura13seobservaunejemplodeusodelAPIdeseguridaddeJEEaefectosilustrativos.
649
Taller de Formación Java em
presarial
Introducción a Java Server Faces (JSF)
1era Parte
1 Introducción
1.1 Aplicaciones Web
UnaaplicaciónWebesunaaplicaciónqueescapazdeinteractuarconunclientequeseejecuta enunnavegadorde Internet (comoFirefox,Chromeo InternetExplorer).EstasaplicacionesgenerancontenidoHTMLdinámicamenteatravésdelainvocaciónporpartedelosclientesdepedidosHTTP(HTTPRequest),losquesonatendidosporunWebContainer(comoTomcat)queeselentornodeejecucióndelasaplicacionesWeb.EnlaFigura1seobservamásclaramenteelfuncionamientodeunaaplicaciónWebtradicional.
Losservlets sonsimplesclases JavacapacesdeatenderpedidosHTTPy retornarunarespuesta.Muchasveces,partedelcontenidodeunaaplicaciónWebesestático(comoporej.imágenes),estosarchivossonretornadosdirectamenteporelContainersinintervencióndeningúnservlet.
1.2 Java Server Faces
1.2.1 Descripción
JavaServerFaces(oJSF,[1])esunframeworkprovistoporlaplataformaJavaEEparadesarrollaraplicacionesWebyestácompuestopordosgrandesmódulos:•LibreríasdetagsparaagregarcomponentesapáginasWeb.•UnaAPIparamanejarelestadodeloscomponentes,escuchareventos,realizarvalida-
ciones,etc.,atravésdelosllamadosmanagedbeans(tambiénllamadosbackingbeans).
650
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
UnaaplicaciónJSFestá,entonces,compuestaporlossiguienteselementos:•UnaomáspáginasHTML,utilizadasgeneralmentecomocontenedoresdelaspáginas
JSF.•UnconjuntodepáginasJSF,quesonlasquecontienenlostags.•Unconjuntodemanagedbeans,componentesdelladodelservidorquemantienenel
estadodeloscomponentesrepresentadosenlaspáginas,entreotrastareas.•Unarchivodescriptordelaaplicación(llamadoweb.xml).•Archivosderecursos,comoimágenes,javascripts,css,etc.•Opcionalmente,esposibleincluirunarchivollamadofaces-config.xml,dondeseespe-
cificancomponentespersonalizadosdevalidación,conversiones,etc.
1.2.2 Facelets
Esunlenguaje[2]expresadocomounconjuntodetagsquepermiteconstruirpáginasatravésdelacomposicióndeotraspáginas,formandoárbolesjerárquicosdondelaspáginasse anidan unas dentro de otras.•EscomúnutilizartagsfaceletsparaorganizarlaspáginasJSF,deformadesimplificar
eldesarrolloyfacilitarlareutilizacióndecomponentes.Porejemplo,esposibledefinirunaplantillaformadaporuncabezal,uncuerpoyunpie,haciendoqueelcabezalypieseman-tengan a lo largo de la aplicación y cambiando solamente el cuerpo de la misma.
1.2.3 Ejemplo
Aefectosdeclarificarlosconceptosantesdecontinuarprofundizandoaspectosteóricos,enlaFigura2semuestrapartedeunapáginaJSF,mientrasqueenlaFigura3seobservaparte del código del managed bean correspondiente.
651
Taller de Formación Java em
presarial
2 Patrón Model-View-Controller (MVC)
2.1 MVC
Model-View-Controller(oMVC,[3])esunpatróndediseñodeaplicacionesquepermitela separación (desacoplamiento) entre los componentes de la misma de acuerdo a sus res-ponsabilidades:•Model:contienelosdatosointeractúadirectamenteconelcomponenteencargadode
obtenerlos.•View:muestralosdatosalusuariodeunaaplicaciónypermitesuinteracción.Unmo-
delopuedetenerasociadasmásdeunavista,dependiendodecómosequieranmostrarlosdatos en cada caso.•Controller:eselquerecibelospedidosdelusuario,invocaalasoperacionesdelmodelo
necesarias y retorna una nueva vista.Deestaforma,sesimplificaeldesarrolloymantenimientodelaaplicación,yaquecada
componentetieneclaramentedelimitadosucampodeacción.EnlaFigura4semuestraundiagrama de este patrón de diseño.
2.2 MVC aplicado a JSF
JavaServerFacesfuediseñadodeacuerdoalpatrónMVC,porloquerespetaclaramentelaseparaciónentremodelo,vistaycontrolador,comoseobservaenlaFigura5.CuandounusuariosolicitaunapáginaJSF,estepedidoescapturadoporelFacesServlet (Controller),
652
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
obtiene la información necesaria de los Managed Beans (Model) y arma la respuesta en base alapáginaJSF(View)quecorresponda.FacesServleteselservletprovistoporelframeworkdeJSFparaatendertodaslassolicitu-
des de los clientes. Es esta clase la que se encarga de iniciar el ciclo de vida de cada solicitud. Elconceptodeciclodevidaseestudiaconmásdetalleenelcapítulosiguiente.
3 Ciclo de vida
EsimportantecomprenderelciclodevidadeunrequestaunaaplicaciónJSFparapo-der entender mejor la forma en que se vinculan los elementos de la aplicación. A través del cicloqueseexplicaráenestasección,seejecutantodaslastareasque,deotraforma,deberíaescribireldesarrolladorcomoservalidaciones,actualizacióndelmodelodedatos,etc.Detodasformas,esposibleinterveniromodificarcadaunodelospasosdelciclodevida,siesnecesariomodificarelcomportamientoparaadaptarloaalgunanecesidadespecífica.EnlaFigura6seobservaeldiagramadeloseventosqueocurrenencadainvocaciónauna
páginaJSF,losquesedescribiránbrevementeenestasección.En[4]puedeverunadescrip-ciónmásdetalladadeloqueocurreenlasfasesdeconversiónyvalidación.
1. RestoreView(recuperarvista)Se crea una estructura (llamada component tree) conteniendo todos los elementos de la
vistayseguardaenunobjetollamadoFacesContext,elcualestádisponibledurantetodoelciclo de vida.
2. ApplyRequestValues(aplicarvaloresdelapetición)Paracadaelementodelcomponenttreeseobtienesuestado(osea,suvalorenelformu-
larioenviado)yseguardaenelFacesContext.Siocurrenerroresdurantelaconversióndedatos(porejemplo,seingresaronvaloresalfanuméricosenuncamponumérico),segeneranerrores y se salta directamente al paso 6 para generar la respuesta.
3. Process Validations (procesar validaciones)Serealizantodaslasvalidacionesespecificadasenloscomponentescontralosvaloresob-
tenidos en la fase anterior. Si hay componentes que no pasan la validación se generan errores y se salta directamente al paso 6 para generar la respuesta. Las condiciones de validación son expresadasenloscomponentesenformadeclarativa,comoseobservaenlaFigura7.
653
Taller de Formación Java em
presarial
4. UpdateModelValues(actualizarvaloresdelmodelo)Unavezqueseverificóquelosvaloresingresadossonválidos,seactualizanlosvaloresen
elmodelo(osea,losatributosdelbackingbean).5. Invoke Application (invocar aplicación)Reciénenestemomento,unavezquesevalidaronlosdatosyseactualizaronlosbeans,
esposibleejecutarlalógicadelaaplicación,comoejecutarelcódigoasociadoaunbotónonavegaraotrapágina.
6. RenderResponse(generarrespuesta)Se genera la respuesta al usuario. En caso que se hayan producido errores durante las
fasesanterioressemuestralamismapáginaperoincluyendomensajesdeerrorjuntoaloscomponentes que los generaron.
4 Managed beans
4.1 Descripción
Los managed beans (también llamados backing beans) son simples clases java anotadas como@ManagedBean,porloquesonmanejadasporelContainer.Elobjetivodeestascla-sesesalmacenarlosdatosdelaspáginasJSFy,almismotiempo,servirdenexoconlacapade lógica de la aplicación.
4.2 Scope
Cadamanagedbeanposeeunscopequedeterminaeltiempodevidadedichobean,esdecir,cómosegestionalacreaciónydestruccióndeinstancias.Estescopeseespecificaatravésdeunannotation,acontinuaciónsedetallanlosvaloresquepuedetomar:@ApplicationScoped:indicaqueelbeanpersistedurantetodalavidadelaaplicación,o
sea,quedesdequeselevantalaaplicaciónhastaquesebajaelWebContainer,todaslasinte-raccionesconelbeaniráncontralamismainstanciadelaclase.@SessionScoped:elbeanpersistedurantelasesióndelclientey,unavezfinalizadalase-
sión,seborralainstancia.Esdecir,queunanuevainstanciadeestebeansecrearáporcadasesión iniciada por el cliente.@ViewScoped:persistemientrasduralainteraccióndelclienteconunapágina.@RequestScoped:elbeanpersistesolamenteduranteelciclodevidadeunrequest.
4.3 Integración de Managed Beans y páginas JSF
4.3.1 Expression Language
ElExpressionLanguage(tambiénconocidocomoEL)permitelavinculaciónentrecom-ponentesdelavista(páginasJSF)yatributosdelosmanagedbeansatravésdeexpresionessencillasdelaforma“#{expr}”.Enunapáginasecolocaunaexpresiónparareferirseaunatributodelbean,comoseveenelejemplodelaFigura8.
654
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
Enelejemplo,cuandosecargalapáginaseinvocaráalmétodogetNombre()paracargarelvaloramostrar.Cuandoseposteaelformulario,sielvalordelcuadrodetextocambió,seinvocaráalmétodosetNombre()actualizandoelatributoconelvaloringresado.Cuandolaexpresiónseutilizaenvaloresquesepuedenactualizar(comoenelcasodela
Figura8),solamentesepermitenexpresionescomolaquesemuestra,dondelamismahacereferenciadirectamenteaunatributodelbean.Sinembargo,encasosdondeelvalornosepuedecambiar,esposibleintroducirexpresionesmáscomplejascomo,porejemplo:#{Cus-tomer.status==‘VIP’}.Sibienunestudioprofundodeestelenguajeescapaalalcancedeestedocumento,espo-
sibleobtenerunareferenciacompletaen[5].
4.3.2 Manejo de eventos
Engeneral,cualquieraplicaciónnecesitaejecutareventosantedeterminadasaccionesdelusuariocomoseleccionarunítemdeunalistaocliquearenunbotón.EnunaaplicaciónWebesto implica una comunicación con el servidor de forma que se ejecute el código asociado alevento.EnJSF,estoseventosseespecificanatravésdeunareferenciaaunmétododelmanagedbean.ExistentrestiposdeeventosenJSF:•Eventos de cambio de valor:Son disparados cuando el usuario cambia el valor de un campo de entrada de datos (como
cuadrodetexto,checkbox,combo,etc.).Seespecificanatravésdelosllamadoslisteners,quesonmétodosquereaccionanadiferentessituaciones.UnejemploseobservaenelcódigodelaFigura9enelque,cuandoelusuariocambiaelvalorseleccionadodeunalista,seejecutael método ciudad() del bean formulario.
•Eventos de acción:Son disparados por componentes capaces de ejecutar acciones, como botones
(h:commandButton)olinks(h:commandLink).EnlaFigura10seobservaunejemplo.
•Eventos de fase:SondisparadosduranteelciclodevidadeJSFysuestudioexcedeelalcancedeestedo-
cumento.
655
Taller de Formación Java em
presarial
5 Bibliografía
JavaServerFacesTechnologyhttp://www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.htmlIntroducciónaFaceletshttp://download.oracle.com/javaee/6/tutorial/doc/giepx.htmlPatrón MVC orientado a Javahttp://java.sun.com/blueprints/patterns/MVC-detailed.htmlFasesdeconversiónyvalidacióndedatoshttp://www.ibm.com/developerworks/java/library/j-jsf3/TutorialsobreExpressionLanguagehttp://download.oracle.com/javaee/6/tutorial/doc/gjddd.html
656
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
Introducción a Java Server Faces (JSF)
2da Parte
1 Introducción
EnlaprimerapartedeestaseriesebrindóunaintroducciónaJavaServerFaces(JSF),semostrólabaseenquesesostieneaniveldediseño,ysedescribieronlosManagedBeansyelciclodevidadeunapetición.Enestedocumentoseorientaelestudiohacialavista,esdecir,laspáginasqueseráninterpretadascomoHTMLparalainteracciónconelusuario,eneltopesuperior de las capas que forman la arquitectura de Java EE.Sedescribirálaestructuraquedebentenerestaspáginasysemostraránalgunasdelasli-
breríasprincipalesqueexistenenlaactualidad,aunqueexistenmuchasmásquenosepodránmostrar en este documento.
2 Páginas JSF
LaspáginasJSFestáncompuestasporlossiguienteselementosprincipales:•UntagHTMLquecontienetodalapáginaeincluyeunconjuntodenamespaces,losque
especificanquélibreríasdecomponentesseusarán.•Unconjuntodecomponentesincluidosenlaslibreríasespecificadas.EnelejemplodelaFigura1seobservaunapáginamuysencillaamodoilustrativo.Como
seve,inicialmentesedefineelnamespace“h”,queseusaráluegoparareferirseaunadelaslibreríasbásicasdeJSF.
2.1 Facelets
Apartirdelaversión2.0deJSF(conocidacomoJSF2),secomienzaautilizarFacelets([1])pordefectoparaestructurardeunamaneramássencillalaspáginas,yaqueesposiblecrearplantillas(templates)ocomponerelementoscomplejosapartirdeotrosmássencillos.
Es necesario incluir el namespace “http://java.sun.com/jsf/facelets” (al que llamaremos ui),parapoderutilizarestoscomponentes.Esposibledefinirmódulosreusablesqueseránusadosluegoparacomponermódulosmáscomplejosoincluirlosdirectamenteenlapágina.Existendosmanerasimportantesdereutilizarlaspáginasutilizandofacelets,lasqueseverána continuación.
657
Taller de Formación Java em
presarial
2.1.1 Modularización
Sedefinentemplatesutilizandolossiguientestags:•ui:composition,permitecrearunmóduloreutilizable,•ui:define,paradefinirunáreaotipodecontenido,•ui:insert,parainsertarenunapáginaelcontenidodeunárea.EnelcódigodelasFiguras2y3semuestraunejemplodemodularizaciónatravésde
templates.Porunladosedefineeltemplateutilizandoui:define,yseinsertadondesedeseeusando ui:insert. Obsérvese el uso del atributo “template” en el tag ui:composition.
2.1.2 Inclusión
Seincluyedirectamenteelcontenidodeunapáginadentrodeotra,comoseveenelejem-plodelaFigura4,dondesemuestraademáscomodefinirparámetros.
3 Librerías más utilizadas
3.1 Componentes básicos
Existenalgunaslibreríasdecomponentesbásicos,provistosporSun,quebrindanlasfun-cionalidadesquecualquieraplicaciónrequiere.EstaslibreríassonllamadasCoredebidoaqueformanelnúcleoquebrindalasfuncionalidadesbásicas.En[2]seencuentralalistacompletadetagsdefinidosenestaslibrerías.
658
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
3.1.1 Librería Html
ContienecomponentesparalostagsmáscomunesdeHTML,comosepuedeverenlaTabla1,conloscomponentesmáscomúnmenteutilizados.Elprefijo“h”estádefinidocomoel namespace “http://java.sun.com/jsf/html”.
Aunque cada uno de estos componentes tiene un conjunto de atributos que se les puede especificar, algunosdeellos soncomunesa todosestos componentes.Esposibleutilizarexpresiones(utilizandoelExpressionLanguageyavisto)paralosvaloresdeestosatributos,loquebrindagrancontrolsobreelcomportamientodeloscomponentesdelapágina.Estosatributos se listan en la Tabla 2.
3.1.2 Librería Core
ContienecomponentesparafuncionalidadesbásicasquenosoncubiertosporlalibreríaHtml,comosermanejodeeventos,conversióndedatos,etc.EnlaTabla3seobservanal-gunosdeestoscomponentes.Elprefijo“f ”estádefinidocomoelnamespace“http://java.sun.com/jsf/core”.
Paramásinformaciónacercadeladefinicióndelistenerssobreloscomponentes,puedeconsultaren[3].
3.2 RichFaces
Estácompuestopordoslibreríasopen-sourcecreadasporJBoss([4]),lasqueextiendenlasfuncionalidadesqueselogranutilizandolaslibreríasbásicasdeSun.Ademásdequese
659
Taller de Formación Java em
presarial
liberanactualizacionespermanentemente,existeunacomunidadmuyactiva.Almomentodeescribirestedocumento,laúltimaversiónestabledeRichFacesesla4.0,consoporteparaJSF2.AlgunasdelasprincipalesfuncionalidadesdeRichFacessedetallanacontinuación,aun-
queunalistacompletaexcedeelalcancedeestedocumento.•SoporteAjax.•Validación del lado del cliente.•Posibilidaddecambiarelaspectodeunapáginadeformasimple,usandolafuncionali-
daddeskinning([5]).•Actualizarlavistaapartirdecambiosocurridosenelservidor,apartirdelatecnología
depushing([6]).•Soporte avanzadode colas de eventos generadospor el cliente, para escenarios que
requieren alta performance.
3.2.1 Principales componentes
Acontinuaciónsemuestranloscomponentesmáscomúnmenteutilizados,puedeaccederaunalistacompletaen[7],asícomoauncompletoshow-case([8]).Paraalgunoscompo-nentessemuestraunejemplo,afindeilustrarmejorsuuso.Losnamespaceutilizadosson:• rich: “http://richfaces.org/rich”•a4j: “http://richfaces.org/a4j”
660
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
661
Taller de Formación Java em
presarial
4 Bibliografía
IntroducciónaFaceletshttp://download.oracle.com/javaee/6/tutorial/doc/giepx.htmlTags definidos en librerías Core. http://download.oracle.com/docs/cd/E17802_01/
j2ee/javaee/javaserverfaces/2.0/docs/pdldocs/facelets/index.htmlDefinicióndelistenersencomponentesJSFhttp://download.oracle.com/javaee/6/tutorial/doc/bnasz.htmlRichFaceshttp://www.jboss.org/richfacesRichFacesskinninghttp://docs.jboss.org/richfaces/latest_4_0_X/Developer_Guide/en-US/html/chap-
Developer_Guide-Skinning_and_theming.htmlRichFacespushinghttp://in.relation.to/Bloggers/GettingStartedWithRichFaces40PushReferenciadecomponentesRichFaceshttp://docs.jboss.org/richfaces/latest_4_0_X/Component_Reference/en-US/html/Show-casedecomponentesRichFaceshttp://livedemo.exadel.com/richfaces-demo/richfaces/contextMenu.jsf
662
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
Java Persistence API (JPA)
1 Introducción
1.1 Mapeo Objeto-Relacional
Asícomounmodelodedominiotieneclases,elmodelorelacionaltienetablas.Estosmo-delosparecenlosuficientementesimilarescomoparaqueexistalaposibilidaddecomunicarun modelo con el otro. La técnica de atravesar el puente entre ambos modelos se conoce comoMapeoObjeto-Relacional,más conocido comoORM (del inglésObject-RelationalModel).UnORMdefineunaformadetransformarautomáticamenteunmodeloenelotro.La
diferenciadeparadigmasexistenteentreelmodeloorientadoaobjetosyelmodelorelacionalse conoce como Impedance Mismatch (desajuste por impedancia).
1.1.2 Impedance Mismatch
Veamos algunos ejemplos de modelos de dominios y la variedad de modelos relacionales que pueden persistir el mismo conjunto de datos.•Representacióndeunaclase:
SupongamoslaclaseEmpleadocomomuestralafigura1.1.
663
Taller de Formación Java em
presarial
Consideremoslosmodelosrelacionalesdelafigura1.2.
La representación ideal de la clase Empleado corresponde al escenario (A) donde cada atributo mapea directamente contra una columna de la tabla.
En el escenario (B) la fecha de inicio del empleado es persistida en tres columnas separa-das(día,mes,año).DadoquelaclaseusaDatecomotipodedato,nopareceunadecisiónadecuada el mapeo en tres columnas distintas de tipo entero.El salario puede ser considerado un atributo sensible comercialmente, por lo que no
parececonvenientequeestéubicadoenlatablaEMP,lacualpuedeserusadaconvariadospropósitos.Enelescenario(C),latablaEMPesrecortadayelsalariosealmacenaenlatablaEMP_SAL.Estopermiterestringirelaccesoalsalariodeunempleadopermitiendoelaccesoalainformaciónbásicadelmismo.
Relaciones
Consideremos ahora la claseEmpleado de la Figura 1.1.Existen varios conceptos dedominioconloscualespodríamosasociarlaveamos,porejemplo,unaclaseDirecciónconlacualunempleadopuedatener,alosumo,relaciónconunainstancia.EsteejemplosemuestraenlaFigura1.3.
Vimosanteriormentetresformasdistintasdemapearlaclaseempleado,veamosahoraenlaFigura1.4tresmanerasdemapearlarelaciónentrelasclasesEmpleadoyDirección.
664
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
Elescenario(A)muestraelmapeoidealdelarelaciónpresentadaenlaFigura1.3.LatablaEMPcontieneunaclaveforáneaalatablaDIRECCIONenlacolumnaDIRECCION_ID.Elescenario(B)hacealmapeomáscomplejo,dadoqueenelmodelodeobjetoseselem-pleadoquienreferenciaaladirecciónyenestecasolatablaDIRECCIONesquiencontienelaclaveforáneaalatablaEMP.Elescenario(C)esaúnmáscomplejo,introduceunatablademapeoEMP_DIRECCIONdondesealmacenanlasrelacionesentrelosregistrosdelatablaEMPylosdelatablaDIRECCION.
Herencia
RecordemoslaclaseEmpleadointroducidaenlaFigura1.1eimaginemosqueunaempre-sanecesitadistinguirentreempleadosfull-timeypart-time,dadoqueparaelempleadofull-time la empresa maneja un salario mensual mientras que para un empleado part-time maneja unsalarioporhoratrabajada.DeestarealidadsurgeeldominiodelaFigura1.5.
Veamos nuevamente tres maneras distintas de persistir en el modelo relacional el mismo juego de datos.Unaestrategiasimpledemapearherenciaescrearunatablaporcadaclasenoabstracta
contodossusdatos(incluso losheredados) talcomomuestraelescenario(A),notarquenoexisterelaciónentrelastablasloquepuedehacerquelasconsultassobrelosempleadosresultenmáscomplejas.
665
Taller de Formación Java em
presarial
Elescenario (B)presentaunaestrategiamáseficienteperononormalizadaen la cual,todoslosdatosdetodaslasclasessecolocanenunaúnicatabla.EstohacequelasconsultasresultenmássencillaseintroducelacolumnaTIPOparapoderdiferenciarentrelosemplea-dos part-time y full-time.
En el escenario (C) se separa nuevamente el modelo en tablas separadas por tipo de em-pleadoaligualqueenel(A),peroseintroduceunatablaEMPquemantieneunarelaciónconambas y los atributos comunes.
1.2 Entidad JPA
UnaclaseJavapuedeserfácilmentetransformadaenentidadagregandoalgunasanotacio-nes. Supongamos una clase Empleado escrita en Java de la siguiente manera:
ParahacerdelaclaseEmpleadounaentidaddebemosanotarlaclasecon@Entity,estaanotación le indica al motor de persistencia que la clase es una entidad. La segunda anotación quedebemosagregares@Id,indicandocuáleselatributoqueidentificaalaclase,elcualdebeserúnicoparalasdistintasinstanciasdelamisma.
Simplemente agregando estas dos anotaciones convertimos la clase Empleado en una entidad JPA.
666
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
2. ORM JPA
2.1 Asignación de Tablas
Comoyavimosenelcapítulo1,paramapearunaentidadaunatablasoloesnecesarioagregarlasanotaciones@Entityy@Id.Enestoscasoselnombredelatablaes,pordefecto,elmismoqueeldelaclase.Siqueremosqueelnombredelatablanoseaelquetomarápordefecto,entoncesdebemosanotarlaclaseconlaanotación@Tableincluyendoelnombreque deseamos para la tabla. Veamos un ejemplo:
Laanotación@Tableofrecelaposibilidadnosólodeelegirelnombredelatabla,sinotambién el nombre de un esquema de base de datos.
Algunasbasesdedatossoportanlanocióndecatálogo.Paraestasbasesdedatossepuedeespecificarlapropiedadcatalogdelaanotación@Table.
2.2 Asignación de Tipos Simples
Lalistadetipospersistentesesbastantelargaeincluyeprácticamentetodoslostiposquedeseamos persistir:•Tiposprimitivos:byte,int,short,long,boolean,char,float,double.•Wrappers de tiposprimitivos:Byte, Integer, Short,Long,Boolean,Character, Float,
Double.•ArraysdeBytesydecaracteres:byte[],Byte[],char[],Character[.•Tiposnuméricosgrandes:java.math.BigInteger,java.math.BigDecimal.•Strings: java.lang.String.•TipostemporalesJava:java.util.Date,java.util.Calendar.•TipostemporalesJDBC:java.sql.Date,java.sql.Time,java.sql.Timestamp.•Tiposenumerados:desistemaodefinidosporelusuario.•Objetosserializables:desistemaodefinidosporelusuario.
667
Taller de Formación Java em
presarial
2.2.1 Asignación de Columnas
Especificandolaanotación@Columnenelatributoseindicanlascaracterísticasespecífi-cas de la columna en la base de datos.Unaseriedepropiedadessepuedenespecificarparalaanotación@Column,veremosla
aplicación de algunas de ellas.Conlapropiedadnamedelaanotación@Columnsepuedeespecificarelnombreque
tomarálacolumnaenlabasededatosquepordefectotomaelvalordelcampo.
Algunas otras propiedades de la anotación @Column son las siguientes:•unique:booleanoqueindicasilacolumnaesclaveúnicaparalatabla.•nullable: booleano que indica si la columna acepta valores nulos.• length:enteroqueindicaellargodelacolumna(válidoparastrings).
2.2.2 Tipos Enumerados
Otro de los tipos simples que pueden ser tratados de forma especial son los enumerados. Los valores de un tipo enumerado son constantes que se pueden manejar de manera diferen-te dependiendo de las necesidades de aplicación.Pordefecto,se interpretan losvaloresdeuntipoenumeradoporsuvalorordinalyse
asumiráquelacolumnadelabasededatosesdetipoentero.Consideremos el siguiente tipo enumerado:
SidefinimosunatributopersistentedetipoTipoEmpleadotenemos lasdossiguientesopciones:
2.2.3 Tipos de Datos Temporales
Lasbasesdedatossoportanhoyendíadiferentestiposdedatostemporales:•Date•Time•Timestamp (date + time)
668
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
Laanotación@Temporaldefinecuáldelostiposanterioressequiereusarparamapearun java.util.Dateo java.util.Calendar.Pordefecto, seasume timestamp,dadoqueeseldemenorgranularidad.Enelcasodelostiposjava.sql.Date,java.sql.Timeojava.sql.Timestampel mapeo no es necesario. Veamos un ejemplo a continuación:
2.3 Asignación de Clave Primaria
Cuandoidentificamosunacolumnacomoclaveprimarialoqueleestamospidiendoalabase es que fuerce unicidad. Las claves primarias que consisten en datos de negocio se de-nominannaturalkeys.Unejemplodeestoeselnúmerodecéduladeidentidad.ClavesdelaformaEMP_IDsedenominansurrogatekey.Estasúltimassonmuypopularesporsufaci-lidaddeautogeneración.Ensistemasqueutilizanframeworksdepersistenciasonaltamenterecomendadas.Existentresformaspopularesdegenerarclavesprimarias:•A través de campos identity.•A través de secuencias.•Utilizandounatablanumeradora.Cualquiera de los tres mecanismos se soportan a través de la anotación @GeneratedValue.
2.3.1 Generación Automática de Id
Unaposibleopciónesdejarenmanosdelproveedorlaestrategiadeautogeneracióndeidentificadores.EnestecasoseutilizaGenerationType.AUTO.
ElmodoAUTOes,enrealidad,unaestrategiadegeneraciónparalaetapadedesarrolloocreacióndeprototipos.Encualquierotrasituaciónseríamejorusarunadelasestrategiasdegeneración discutidas en las secciones posteriores.
2.3.2 Generación Automática Usando una Tabla
Lamaneramásflexibleyportátilparageneraridentificadoresesutilizarunatabladebasededatos.Nosóloesportableadiferentesbasesdedatossinoquetambiénpermitealmacenarvariassecuenciasdeidentificadoresdiferentesparadiferentesentidadesdentrodelamismatabla.Unatabladegeneracióndeidentificadoresdeberíatenerdoscolumnas.Laprimeraco-
lumnaesdetipostringyseutilizaparaalmacenarelgeneradordesecuenciaparticular.La
669
Taller de Formación Java em
presarial
segundacolumnaesdetipoenteroyalmacenaelvaloractualdelasecuencia.Laformamássencilladeutilizarunatablaparageneraridentificadoresessimplementeespecificarlaestra-tegia de generación TABLE en la estrategia:
Enestecasosecrearáunatablapordefecto.Unmodomásexplícitoseríaespecificarlatablaquesevaautilizarparaelalmacenamientodelidentificadormedianteelusodelaano-tación @TableGenerator y referenciarla en la anotación @GeneratedValue.
2.3.3 Generación Automática Usando Secuencias
Muchasbasesdedatossoportanunmecanismointernoparalageneracióndeidentifica-doresllamadosecuencias.*Talcomoenlageneraciónusandounatabla,sisedeseausarunasecuenciadebasesdedatosynonosinteresaqueseaunasecuenciaparticular,especificandoeltipodegeneradoressuficiente.
Tambiénpodríamosdefinirunnombredesecuenciaparticulardelasiguienteforma:
2.3.4 Generación Automática Usando Identidades
Muchasbasesdedatossoportanladeclaracióndeunacolumnacomoidentity.Cadavezqueseinsertaunafilaenlatablaalacolumnaidentityseleasignaautomáticamenteuniden-tificadorúnico.SeutilizalaestrategiaIDENTITYdelaanotación@GeneratedValue.
Engeneral,estevaloresobtenidounavezqueelregistroes“commiteado”enlabasededatos,porloquenosiempreestarádisponibleenelprograma.
*Secuencia:tablaconuncamponuméricoenelcualsealmacenaunvalorycadavezqueseconsultaseincrementatalvalorparalapróximaconsulta.
670
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
2.4 Relaciones
Lamayoríadelasentidadesdebensercapacesdeestarrelacionadasconotrasentidades.Desdeelpuntodevistadedireccionalidadpodemosclasificarlasrelacionescomounidirec-cionales y bidireccionales:•unidireccionales:Sólosepuedenavegardesdeunaentidadalaotra,•bidireccionales: Desde cualquiera de las dos entidades es posible navegar a la otra.Permutando la direccionalidad con las cardinalidades “a uno” y “a muchos” nos encon-
tramos con los siguientes nombres dados a las asignaciones:•one-to-one•one-to-many•many-to-one•many-to-many
2.4.1 OneToOne Unidireccional
Imaginemos que los empleados de la empresa tienen asignado su lugar de estacionamien-to.EstecasoseríaunarelaciónunoaunoentrelaentidadEmpleadoylaentidadEstaciona-miento.
EnJPA,lasentidadespodríamosescribirlasdelasiguientemanera.
Laanotación@JoinColumnnoesobligatoria,seutilizaenelcasodequesedeseesobres-cribirelvalorpordefectodelacolumnadondesealmacenaráelidentificadordelestaciona-miento en la tabla de empleados.
2.4.2 OneToOne Bidireccional
Supongamos que ahora necesitamos tener en la entidad Estacionamiento la referencia al empleadoalquepertenece.Deberíamos,enestecaso,modificarlaentidadparaquequedede la siguiente forma:
671
Taller de Formación Java em
presarial
El valor de mappedBy es el nombre del atributo de la entidad propietaria a la entidad inversa.
2.4.3 OneToMany - ManyToOne
Unejemploderelaciónone-to-manysedaentreundepartamentodeunaempresaylosempleados que trabajan en él.
Enesteejemplo,larelaciónesbidireccional,loqueimplicaaunarelaciónmany-to-onesilo miramos desde la entidad Empleado.
2.4.4 ManyToMany
Siguiendoconlosejemplosanteriores,supongamosquelaempresatrabajaenvariospro-yectos,encadaproyectoparticipanunconjuntodeempleadosy,asuvez,unempleadopue-departiciparenvariosproyectos.Enestasituación,larelaciónentrelaentidadProyectoylaentidad Empleado es una relación many-to-many.
En JPA las clases se pueden escribir de la siguiente manera:
Adiferenciadelostiposderelacionesanteriores,lasrelacionesentreobjetosenelcasomany-to-many se almacenan en una tabla separada ya que no es posible almacenarlo en una columnadeunadelastablas.Porlotanto,noseutilizalaanotación@JoinColumn.Paraespecificarelnombredelatabladeasociaciónpuedeutilizarselaanotación@Join-
Tableque,encasoquenoseespecifiquelamisma,tomaraunnombrepordefecto.
672
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
3 Entity Manager
Lasentidadesnosepersistenalsercreadasniseactualizanautomáticamenteenlabasededatosalsermodificadas.Eslaaplicaciónquiendebeencargarsedegestionarelciclodevidadelasentidades.Paraestepropósito,JPAofrecelainterfazEntityManager.ElEntityManageractúacomopuenteentreelmundoorientadoaobjetosyelmundorelacional.
3.1 Ciclo de Vida
UnaentidadqueestásiendoadministradaporelEntityManagerseconsideramanagedoattached,cuandoelEntityManagedterminadeadministrarlaentidad,decimosqueestáenestadodettached.SiunaentidadnopasaporelEntityManager,decimosqueestáenestadotransient.
Cuandounaentidadesreciéncreadaatravésdenew,entoncesestáenestadonewotran-sient.Unaentidadentraaestadomanagedcuandoespasadacomoparámetroalosmétodospersist,mergeorefresh, tambiénunaentidadestáenestadomanagedcuandoesrecibidacomoresultadodeunmétodofind.UnaentidadqueyanoestáasociadaaunEntityManager(porejemplo,alpasardeuna
capaaotradelaaplicación–alserializarse–)estáenestadodetached.Enesteestado,yanotenemosgarantíadequeelestadode laentidadseencuentresincronizadoconlabasededatos.LaaccióndeperderesevínculosedenominaDetachmentyladevolveravincularlose denomina Merge.
3.2 Persistence Context
Formalmente,unpersistencecontextesunconjuntodeentidadesadministradasporunEntityMangager durante un persistence scope. El persistence scope es el tiempo que un con-junto de entidades permanecen administradas.
673
Taller de Formación Java em
presarial
Existendostiposdepersistencescopes:
•Transaction:Lasentidades“attacheadas”durantelatransacciónsonautomáticamente“desatacheadas” al terminar la misma.•Extended:UnEntityManagertieneuntiempodevidaqueabarcavariastransacciones,
solopuedeserutilizadodentrodeunSessionBeanStatefuldurandotantocomolainstanciapermanezcaactiva.
3.3 Persistiendo Entidades
Veamos un ejemplo de persistencia de una entidad empleado sobre el cual trabajaremos en esta sección.
3.3.1 Cascada
Pordefecto,elcomportamientodeJPAesdenopersistirentidadesrelacionadas.Enelejemploanterior,elEstacionamientonoseríainsertadoautomáticamente,paraqueestofun-cione,debemosmodificarelparámetrocascadedelarelación.
Elcascadingdefinecomosepropagalaoperaciónsobreloselementosrelacionadoscuan-do hacemos una operación en el elemento “padre”. Los valores posibles salen del enumerado CascadeType:•ALL•MERGE•PERSIST•REFRESH•REMOVE
Sielcascadingnoesespecificado,entoncesdebemosmanualmentepropagarlasopera-cionesdepersistencia.Paraesto,enelejemploanterior,debemosprimeropersistirelEsta-cionamiento y luego el Empleado.
674
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
3.4 Recuperación por Clave Primaria
JPAsoportaelmétodofindenelEntityManager.Aestemétododebemospasarlelaclasequeestamosbuscandoyelvalordelaclaveprimariaqueestamosfiltrando.
3.4.1 Modos de Búsqueda
Elmododebúsquedadefinequédatosseráncargadosdesdelabasededatosalaaplica-ción al obtener una entidad.
Tenemos dos posibilidades:•Eager: los datos son cargados al levantar la entidad.•Lazy:losdatossoncargadosdelabasededatosademanda,cuandosonutilizados.
Esimportantetenerencuentaquealconfigurarunarelaciónaunacolecciónenmodoeager,quepodríaestarcargandodemasiadosobjetosamemoriadadoquenosolosecargarántodoslosobjetosrelacionados,sinotambiéntodoslosquelosmismostenganreferenciadosenmodoeager.Deestaforma,alrecuperarunainstanciadeunaentidadsepodríaestarcar-gandogranpartedelabasededatosamemoria,causandoineficienciaenlaaplicación.Elcomportamientopordefectodel fetchpara relacionesesdiferentesegúnel tipode
relación:•One-to-one=EAGER•One-to-many=LAZY•Many-to-one=EAGER•Many-to-many=LAZYNotarquelasrelacionesto-onesoncargadasallevantarlaentidad(EAGER)mientrasque
lasrelacionesto-manyselevantanademanda(LAZY).
3.5 Detachment y Merge
Sibienunaentidadattachedesextremadamenteútilesdifícilmantenerlas“attacheadas”todoel tiempo,uncasotípicosedaen lasaplicacionesweb.Escomúnque lasentidades
tenganqueserserializadasyenviadasalacapaweb,enlacapaweblasentidadespodríansermodificadas,fueradelscopedelEntityManager.Enalgúnmomentonecesitamosasociareste
675
Taller de Formación Java em
presarial
elementoconlabasededatosnuevamenteparasincronizarsuestado.Paraesto,usamoselmétodo merge.Elmétodomergenosgarantizaqueelobjetoestáasociadonuevamenteconelpersistence
contextyqueserásincronizadoconlabasededatos.
LuegodeejecutadoelmétodoupdateEmpleadolabasededatosseráactualizadaconelestadodelempleado.Elmétodomergesolopuedeserusadoparaentidadesqueexistanenlabasededatos,sitratamosde“mergear”unelementonoexistenteseproduciráunaexcepciónIllegalArgumentException.
3.6 Borrar Entidades
UtilizamoselmétodoremovedelEntityManager.Estemétodosolopuedeseraplicadosobreentidades“attached”comosemuestraenlafigura3.1.
3.7 Refrescar Entidades
Elmétodorefreshpermitecargarlosdatosdeunaentidaddesdelabasededatos.Noesmuycomúnusarestemétodo,aunqueavecespuedeserútilparadeshacerloscambiosenuna transacción.Sinembargo,hayunescenariodondeesmuyútil.¿Quépasasialinsertarunregistroen
labasededatoslapropiabasemodificaelvalordealgunascolumnasatravésdeuntrigger?Enestecaso,desdeJavasoloveremosloinsertado,yaquelosdatosgeneradosporlabasenoseráncargados.Enestoscasospodríamosobtenerlosdatosmodificadosrefrescandolasentidades correspondientes.
3.8 Flushing
LasoperacionesdelEntityManager,comopersist,mergeyremove,noalteranlabasededatosinmediatamente.Principalmenteestosehacepormotivosdeperformance,lasopera-cionesSQLenmodobatchsuelensermásperformantesquelasoperacionesemitidasdeaunaporvez.Lasoperacionesanteriores(alteracionesdelabase)sonpospuestashastaquese“flushee”
elEntityManager.Pordefecto,elmododeflushesAUTO,estosignificaqueesemitidopor
676
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
elEntityManagersegúnseanecesario.ElmododeflushlopodemoscontrolarconelmétodosetFlushModedelEntityManagerutilizandoelenumeradoFlushModeType.Paraefectuarelflushademandahacemos:
4 Recuperando Información
PararecuperarinformaciónutilizandoJPAexistentresposiblesformas:•AtravésdelmétodofinddelEntityManager.•Consultas escritas en Java Persistence Query Language (JPQL).•Consultas nativas escritas en SQL.El API de consultas de Java soporta dos tipos de consultas (queries):•Named.•Dynamic.LasNamedQueriessonconsultasalmacenadasquepuedenserreutilizadasenunpro-
grama,mientrasquelasDynamicQueriessonconsultasqueseformandinámicamenteenelprograma,suestructuraseconstruyeprogramáticamente.
4.1 Named Queries
LasNamedQueriessecreanasociadasalaentidadquequeremosconsultar,ladefiniciónpuedeseralmacenadaenformatoXMLoenelpropiocódigodelaclase.Asimismo,debentenernombreúnicodentrodeunaPersistenceUnit.
Luego,duranteelcódigodelprograma,secreanlasqueriesreferenciándolaspornombre.
4.2 Dynamic Queries
LaDynamicQueriessecreandinámicamenteenelcódigodelprograma,adiferenciadelas anteriores no llevan nombre.
677
Taller de Formación Java em
presarial
4.3 Parámetros en la Query
EnunaquerypodemosusarunacláusulaWHEREpararestringirlosvaloresobtenidos.Por ejemplo, todos los empleadosque tienenun salario superior aunvalordeterminadopuedenobtenerseasí:
Enelcasoanterior,parametrizamoslaconsultautilizandoparámetrosposicionales.Paraestablecerelvalordelparámetrobastaconhacer:
Podemosusarotrotipodeparámetros,llamadosparámetrosnombrados(namedparame-ters),delaforma:
Estosmejoranlalegibilidadybúsquedadeerroresdeunaquery.Establecerelvalordeunnamedparameterserealizadelasiguienteforma:
4.4 Recuperando una Entidad
Sinuestraconsultadevuelveunainstancia(tupla)resultado,conelmétodogetSingleRe-sultpodemosobtenerla.Silaconsultaretornamásdeunatupla,lainvocacióndeéstemétodoproduce un error.
4.5 Recuperando una Colección
Lamayoríadelasqueriesretornamásdeunatuplaresultado.Paraesto,podemosusarelmétodogetResultList():
5 Configuración XML
Sedebedefinirundescriptordelaunidaddepersistencia(META-INF/persistence.xml).
678
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
Los posibles valores para la propiedad hibernate.hbm2ddl.auto son:•validate:validarelesquema,norealizacambiosenlabasededatos;•update:actualizaelesquema;•create:creaelesquema,implicaladestruccióndelosdatosanteriores;•create-drop: crea el esquema al iniciar y lo borra al terminar.Elvalorcreate-dropsueleutilizarseúnicamenteenetapadepruebasluego,elvalorreco-
mendable es update.
6 Bibliografía
[1]MikeKeith yMerrick Schincariol, Pro JPA 2:mastering the JavaPersistenceAPI,Apress,2009.
679
Taller de Formación Java em
presarial
1 Introducción
UnWebServiceesunaaplicacióndesoftwareidentificadaporunaURI,cuyasinterfacesyformasdeaccesopuedenserdefinidas,descriptasydescubiertascomoartefactosXML.UnWebServicesoportalainteraccióndirectaconotroscomponentesdesoftwareutili-
zandomensajesbasadosenXMLeintercambiadosatravésdeprotocolosbasadoseninter-net.1
1.1 Descripción General
LatecnologíadeWebServicespermitequeaplicacionesdiversas,queseejecutanendis-tintoscomputadores,puedanintercambiardatoseintegrarseconotrassinrequerirningúnotro componente de hardware o software propietario. Las aplicaciones que se basan en la tecnologíadeWebServices,puedencomunicarsesinimportarellenguaje,plataformaopro-tocolosinternosqueutilicen.[1]Deestaforma, losWebServicesson,actualmente,elmecanismopreferidopara lograr
interoperabilidadentreplataformasdedesarrolloheterogéneasyconstituyenlatecnologíapreferida para la implementación de Arquitecturas Orientadas a Servicios (Service Oriented Architecture,SOA).UnWebServiceesunaaplicacióndesoftwarequepuedeseraccedidadeformaremota
utilizandodiferenteslenguajesbasadosenXML.Comúnmente,unWebServiceseidentificaconunaURL,comocualquiersitioWeb.LoquehacequelosWebServicesseandistintosalossitiosWebeslaformadeinteracciónqueestospuedenproveer.[2]LamayoríadelossitiosWebestándiseñadosparaproveerunarespuestaaunapersona.Lapersona,atravésdeunexploradorWeb,ingresalaURLdelsitioo“haceclick”enun
enlaceparacrearunasolicitud.Estasolicitudtomalaformadeundocumentodetextoquecontienealgunasinstruccionessimplesparaelservidor,porejemplo,elnombredeldocumentoquesequiereacceder(ej.index.html).EstetipodeinteracciónsemuestraenlaFigura1.
UnWebServiceessimilaraunsitioWeb,enelsentidoqueseaccedeatravésdeunaURL.Ladiferenciaprincipalestáenloqueseenvíacomosolicituddesdeelclientealservicio.Los
Web services
1http://www.w3.org/TR/ws-desc-reqs/#definitions
680
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
clientesdeWebServicesenvíancomosolicitudundocumentoXML,conunformatoes-pecialqueseajustaalasreglasdelestándarSOAP(SimpleObjectAccessProtocol[3]).UnmensajeSOAPpuedeincluir,porejemplo,lallamadaaunmétodoespecificandolosvaloresdelosparámetros.LaFigura2muestralainteraccióndeuncliente(porejemplo,unaaplica-ción empresarial) interactuando con un Web Service a través de un Web Server.
1.2 Interoperabilidad
GranpartedelentusiasmoalrededordelatecnologíadeWebServicessebasaenlapro-mesadeinteroperabilidad[2].Lainteroperabilidadeslahabilidaddelossistemasdesoftwareydelosprocesosdenegocioalosquedansoporte,deintercambiardatosydecompartirinformaciónyconocimiento[4].LaarquitecturadeWebServicesestábasadaenenviarmensajesXMLqueseadhierenal
estándarSOAP.UnmensajeXMLpuederepresentarsecomocaracteresASCII,porloquepuedesertransferidofácilmentedecomputadoracomputador.Estopermitequecualquiertipodeaplicacióndesoftwarepueda,potencialmente,comunicarseconotra.Esta comunicación puede darse a través de distintas ubicaciones, sistemas operativos,
lenguajesyprotocolos,entreotros.LaFigura3presentalasprincipalesrelacionesentreestosestándares.
2.2.1 Simple Object Access Protocol (SOAP)
SOAPesunformatobasadoenXMLparaconstruirmensajes,deformaindependientealtransporteenquesetransmiten,yunestándarqueespecificacómoelmensajesedebeprocesar.LosmensajesSOAPconsistenenunsobre(envelope)quecontieneunencabezado(hea-
der)yuncuerpo(body).SOAPtambiéndefineunmecanismo,denominadoSOAPfaults,para indicar y comunicar problemas que ocurran al procesar el mensaje.LaFigura4presentalasdistintasseccionesenlasquesedivideunmensajeSOAP.LaseccióndeencabezadodeunmensajeSOAPesextensibleypuedecontenervariosen-
cabezadosqueseutilizanparaespecificardistintostiposdeinformación,porejemplo,comomuestralaFigura5,aniveldecomportamientotransaccionalydeseguridad.
681
Taller de Formación Java em
presarial
Porotrolado,laseccióndelcuerpodeunmensajeSOAPalojaelcontenidodelmensaje.EnuncontextodeWebServicesestecontenidoseencuentraenformatoXMLyseajusta
aloespecificadoenladescripcióndelWebService(WSDL)queseinvoca.EnelcuerpodeunmensajeSOAPtípicamenteseespecifica:•unasolicitudparaefectuarciertaoperación,• la respuesta a cierta solicitud que puede ser:•unresultadoo,•un error (fault).
LaFigura6muestra,enprimerlugar,elcuerpodeunmensajeSOAPdeunasolicitudpara
682
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
ejecutarlaoperación“Translate”(pasandocomoparámetrolapalabra“red”)y,ensegundolugar,elcuerpodeunmensajeSOAPconlarespuestaadichasolicitud.
2.2.2 Web Services Description Language (WSDL)
WSDL[8]esunlenguajededefinicióndeinterfacesbasadoenXMLquepermitedes-cribirdeformaestándaralosWebServices.LosdocumentosWSDLsecomponendedosgrandes partes: una descripción abstracta y una descripción concreta.ComosepresentaenlaFigura7,enladescripciónabstractaseencuentranloselementos
types,messagesyportType,loscualesespecificanlasdescripcionesfuncionalesy,aniveldedatos,delasoperacionesqueproveeelWebService.
683
Taller de Formación Java em
presarial
Porotrolado,comosepresentaenlaFigura8,enladescripciónconcretaseencuentranlos elementos binding y service. Los elementos binding proveen instrucciones para interac-tuarconelWebServiceatravésdeprotocolosespecíficos,porejemplo,SOAPsobreHTTP.Porúltimo,loselementosservice(atravésdelelementoport)proveenunadirecciónderedespecíficaatravésdelacualelWebServicepuedeserinvocado.
Amododeejemplo,laFigura9ylaFigura10presentanladescripciónWSDLabstractayconcreta,respectivamente,deunserviciodenominadoHelloWorldServiceelcualtieneunaoperacióndenominada“sayHello”,lacualrecibecomoparámetrounStringydevuelvecomorespuesta otro String.
684
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
685
Taller de Formación Java em
presarial
Laprincipalventajadeestaseparación,abstractayconcreta,eslaposibilidaddedefinirlainterfazdeunservicioconsusoperacionesymensajes(descripciónabstracta)deformaindependiente(distintosdocumentosWSDL)alosprotocolosdetransporte,ubicacionesytecnologías(descripciónconcreta),loscualespodríancambiarmásfrecuentemente.
2.2.3 Universal Description Discovery and Integration (UDDI)
UDDI[9]esunestándarpararegistrarybuscarWebServicesendirectorios.Enprimerlugar,unproveedordeservicioutilizaUDDIparaalmacenarladescripcióndel
servicio,laubicacióndelservicioylasinterfacesparaaccederalservicio,entreotrosdatos.Atravésdeestoselementos,juntoconotrasposiblescategorizaciones,losconsumidoresdeserviciospuedenrealizarbúsquedasdeWebServicespara,posteriormente,ubicaralservicioyconectarseparautilizarlo.UDDIdefinelasinterfacesaundirectorioqueson,ensímismas,Web Services descriptos a través de WSDL.UDDIdefineentonces:•unmodelodedatosparaalmacenarinformacióndeserviciosyproveedores,•dosinterfacesparautilizarelregistroUDDI:•Publish•Inquiry
Atravésde laInterfazdePublicación(publish),unproveedordeWebServicespuedepublicar,actualizaroeliminarinformaciónenelregistroUDDI.Porotrolado,atravésdelaInterfazdeBúsqueda(inquiry),unconsumidordeWebServicespuedebuscarWebServices,proveedores de Web Services e información de los mismos.
2.2.4 Resumen
LaFigura11presentaunresumendelasespecificacionesquecomponenlaprimeragene-racióndeestándaresparaWebServices.
2.3 Segunda Generación de Estándares
LaprimerageneracióndeestándaresparaWebServicespermitelacreacióndeWebSer-vices independientes capaces de encapsular unidades aisladas de funcionalidad de negocio. Sinembargo, tambiéncuentaconvarias limitacionesquesonabordadasporunasegundageneracióndeestándares.
686
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
Algunasdelasproblemáticasqueabordaestanuevageneraciónsonelmanejotransac-cional(WS-Coordination,WS-AtomicTransaction,WS-BusinessActivity),lacomposicióndeprocesosdenegocio (WSBPEL),manejode seguridad (WS-Security,WSSecureConversa-tion,WS-Trust),mensajeríaconfiable(WS-ReliableMessaging)ymanejodepolíticasadistin-tos niveles (WS-Policy).LaFigura12muestracómoserelacionanalgunosdeestosestándaresentreellosyconlos
estándaresdelaprimerageneración.
2.4 Organizaciones Involucradas
ExistenvariasorganizacionesinvolucradaseneldesarrollodelatecnologíadeWebServi-ces.Deacuerdoalfocodeestedocumentosedescribentresdelasprincipalesorganizacionesinvolucradasconestatecnología:OASIS(OrganizationfortheAdvancementof StructuredInformationStandards),W3C(WorldWideWebConsortium)yWS-I(WebServicesIntero-perabilityOrganization).OASISesunconsorciointernacionalsinfinesdelucroqueconduceeldesarrollo,conver-
genciayadopcióndeestándaresparalasociedaddelainformaciónglobal.Estaorganizaciónsefundóen1993ytienemásde5000participantesquerepresentanamásde600organi-zacionesymiembros individualesen100países.Algunasde lasespecificacionesque llevaadelanteOASISsonWS-SecurityyUDDI.W3Cfuecreadoenoctubrede1994yagrupaamásde350organizacionesmiembrode
todoelmundo.Desdeel comienzode losestándaresde laWorldWideWeb, talescomoHypertextMarkupLanguage(HTML)yCascadingStyleSheets(CSS),laW3ChamanejadomuchasdelasespecificacionesfundamentalesdeInternet.EnlaactualidadtambiénmanejamuchasdelasprincipalesespecificacionesrelacionadasaXMLyWebServices,incluyendoXML,XPath,XSLT,SOAPyWSDL.WS-Iesunconsorciointegradoporlíderesdelaindustriaquepromuevelainteroperabi-
lidaddeWebServicesentreplataformas,sistemasoperativosylenguajesdeprogramación.EsteconsorcioseocupadedefiniryprobarunsubconjuntodeespecificacionesexistentesparamejorarlainteroperabilidadentreplataformasdeWebServicesdispares.Asuvez,tam-biénestádesarrollandoaplicacionesdeejemployherramientasdeprueba.
687
Taller de Formación Java em
presarial
3 Desarrollo de Web Services
3.1 Plataformas de Web Services
Las plataformas de Web Services son un conjunto de herramientas para un lenguaje de programaciónespecíficoquepermiteninvocarWebServicesyrealizareldespliegue(deploy)deWebServices.[11][12]Lasplataformastienen,engeneral,componentesenelservidoryenelcliente.Loscom-
ponentesenelservidorsealojanusualmenteenalgúntipodecontenedor,porejemplo,unservidorJavaEEouncontenedordeservlets.Loscomponentesenelclienteseempaquetan,engeneral,comoherramientasparaaccederainterfacesasociadasaWebServices.LasplataformasdeWebServicesproveen,engeneral,tressubsistemas:Sub-sistemade
Invocación,Sub-sistemadeSerializaciónySub-sistemadeDeployment.LaFigura13presentagráficamenteelsub-sistemadeinvocación,tantodelladodelcliente
como del lado del servidor.
Los componentes del sub-sistema de invocación que se alojan del lado del servidor se encargan de:•RecibirmensajesSOAPdesdeeltransporte(HTTP,etc.).• Invocarmanejadoresparaseguridaduotrascaracterísticasavanzadas.•Determinar la operación que se quiere invocar.•Determinar la clase/método que se quiere invocar.•EnviarelmensajeSOAPalsistemadeserialización.•Invocar la clase-método.•Enviarelresultadoalsistemadeserialización.•CrearyenviarelmensajeSOAPaltransporteparaelenvíodelarespuesta.
Porotrolado,loscomponentesdelsub-sistemadeinvocaciónquesealojandelladodelcliente se encargan de:• InstanciarlaclasequeimplementalainterfazparaaccederalWebServiceymanejarsu
invocación.•Enviarparámetrosalsistemadeserialización.•Adjuntar los mismos en un mensaje SOAP.• Invocarmanejadoresparaseguridaduotrascaracterísticasavanzadas.
688
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
•EnviarelmensajeSOAPatravésdeltransporte(ej:HTTP).•RecibirlosmensajesSOAPderespuestadesdeeltransporte.•EnviarlosmensajesSOAPalsistemadeserializaciónycompletarlainvocación.Elsub-sistemadeserializacióntienecomoresponsabilidadtransformarinstanciasdecla-
sesenelementosXMLyviceversa.Porúltimo,elsub-sistemadedeploymentproveeherramientasparaconfiguraruncom-
ponente de software para que pueda ser invocado como un Web Service a través de mensajes SOAP.
En particular permite:•Desplegar el componente de software.•MapeodeoperacionesespecificadasenelWSDL,conlasdelcomponentedesoftware.•Configuraciónserialización(esquema–parámetros).•Publicación del WSDL.•Configuraraspectosavanzados(seguridad,etc.).•Configurarel listenerenunadirecciónderedpara“escuchar” lassolicitudesalWeb
Service.
AlgunasplataformasdeWebServicesqueseutilizanactualmenteson:WindowsCommunicationFoundationhttp://msdn.microsoft.com/en-us/library/ms730294.aspx
ApacheAXIS2http://axis.apache.org/axis2/java/core/
ApacheCXFhttp://cxf.apache.org/
Proyecto Metrohttp://metro.java.net/
JBoss Web Serviceshttp://www.jboss.org/jbossws
3.2 Implementación de Web Services
LaimplementacióndeunWebServicesepuederealizardeformabottom-upotop-down.Cuandoserealizabottom-up,laimplementacióndelWebServicesecomienzaporelcó-
digofuente(porejemplo,unaclaseJava).Porotrolado,cuandolaimplementaciónserealizadeformatop-down,secomienzaporeldocumentoWSDLquedescribealservicio.Enamboscasos,esnecesariocontarademásconherramientasocomponentesdesoft-
ware, en general, provistospor las plataformasdeWebServices que, a partir del códigofuente,odeundocumentoWSDL,generanelrestodeloscomponentesnecesariosparalapuesta en marcha del Web Service.Laimplementaciónbottom-upconstituyeunaformarápidadeexponerfuncionalidades
denegocioa travésde la tecnologíadeWebServices.Además,norequiereconocimiento
689
Taller de Formación Java em
presarial
previodeXMLSchemayWSDLporpartede losdesarrolladores.Sinembargo, conesteenfoqueelesquema(queespecificalostiposdedatosquemanejaelWebService)queda,engeneral,embebidoenelpropioWSDL,dificultandosuaprovechamientoporotrosservicios.Otradesventajadeesteenfoqueesque,algenerareldocumentoWSDLapartirdelcódigofuente,puedencrearsedependenciasentreestedocumentoydichocódigo.Porotrolado,laimplementacióntop-downpermiteeldesarrolloindependienteyparalelo
entreclienteyservicio.Cuandosecreannuevostiposdedatos,estospuedenserreutilizadosporotrosserviciosydadoquesecomienzala implementaciónporeldocumentoWSDL,nosegenerandependenciasconelcódigofuente.Sinembargo,esteenfoquepresentacomodesventajaqueserequiereconocimientopreviodeXMLSchemayWSDL.
4 Web Services en Java
LaplataformaJavaproveevariosestándaresquedansoportealdesarrollodeWebServi-ces.EstosestándaresconstituyenunconjuntodetecnologíasquepermitenconsumirycrearWebServicesutilizandoJava.
4.1 Estándares Java para Web Services
AlgunosdelosestándaresJavaparaWebServicessonSOAPwithAttachmentsAPIforJava (SAAJ), JavaArchitecture forXMLBinding (JAXB), JavaAPI forXML-BasedWebServices(JAX-WS)yWebServicesMetadata(WS-Metadata).SOAPwithAttachmentsAPIforJava(SAAJ,JSR67)permitemanipularsobres(enve-
lopes) SOAPde formaprogramática.Es posible, por ejemplo, crear un envelope SOAP,agregarleunheaderyunbody,paraluegoenviarloporHTTPparainvocarunWebService.LaFigura14presentaunejemplodeusodeSAAJ.JavaArchitectureforXMLBinding(JAXB,JSR222)defineunenlaceJava-XMLestán-
darparaconvertirrepresentacionesJavaencomponentesXMLesquemayviceversa.EsteestándarapuntaafacilitaralosprogramadorestrabajarconinstanciasXMLdeunesquema.JavaAPIforXML-BasedWebServices(JAX-WS,JSR224)esunAPI,basadaenSAAJ,
paraconsumiryproveerWebServices.LacapaXMLseocultaalprogramador,quienutilizaobjetos generados por herramientas incluidas en Java SE y Java EE. Para la conversión Java XMLseutilizaJAXB.WebServicesMetadatafortheJavaPlatform(WS-Metadata,JSR181)defineunconjunto
deanotacionesquepermitenconfigurarcómoelcontenedorrealizaráeldesplieguedeunWebServiceatravésdelaclaseJavaqueutilizalasanotaciones.Algunosejemplosdeanotacionesson:@WebService,@WebMethody@WebParam.En
690
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
tiempo de despliegue (deployment) el contenedor interpreta estas anotaciones y genera el restodelosartefactosnecesarios(porejemplo,elWSDL).
4.2 Anotaciones para Implementar Web Services
Las anotacionesprovistaspor laplataforma Javapermiten fácilmente implementarunWebServiceconunenfoquebottom-up,apartirdeunaclaseJava.Amododeejemplo,laFigura15presentalaimplementacióndeunWebServicedeno-
minado“HelloWorld”queproveeunaoperacióndenominada“sayHello”.EstaoperaciónrecibeunparámetrodetipoStringydevuelveunvalortambiéndetipoString.Laanotación@WebServiceespecificaqueunaclasecorrespondealaimplementaciónde
un Web Service. Se puede aplicar también a interfaces. Si se aplica directamente sobre la clase ynolainterfaz,entonceselcontenedorgenerarálainterfazapartirdelosmétodospúblicos.Esta anotación se puede aplicar también a Stateless Session Beans.Laanotación@WebMethodpermiteespecificarlaformaenquelosmétodosdeunaclase
JavaseexponencomooperacionesdelWebService.Porejemplo,laFigura16especificaotronombreparaelmétodo“sayHello”.Deformasimilar,lasanotaciones@WebResulty@WebParampermitenespecificardis-
tintosaspectos(porejemplo, losnombres)delresultadoyparámetrosde lasoperaciones,respectivamente.LaFigura17presentaunejemplodeesto.
691
Taller de Formación Java em
presarial
5 Bibliografía
M.Papazoglou,WebServices:PrinciplesandTechnology,1sted.PrenticeHall,2007.S.Potts,SamsTeachYourself WebServicesin24Hours.Sams,2003.“SOAPSpecifications.” [Online].Available: http://www.w3.org/TR/soap/. [Accessed:
07-Jul-2011].“IDABC-DocumentationontheEuropeanInteroperabilityFramework.”[Online].Available: http://ec.europa.eu/idabc/en/document/3473/5585.html. [Accessed: 12-
Sep-2011].“ExtensibleMarkupLanguage(XML).”[Online].Available:http://www.w3.org/XML/.
[Accessed:10-Jul-2011].“W3CXMLSchema.” [Online].Available:http://www.w3.org/XML/Schema. [Acces-
sed:10-Jul-2011].“SOASpecifications-WS-*Specs.”[Online].Available:http://www.whatissoa.com/soaspecs/ws.php.[Accessed:14-Sep-2011].E.Christensen,F.Curbera,G.Meredith,andS.Weerawarana,“WebServicesDescription
Language(WSDL)1.1,”W3C,15-Mar-2001.“UDDIVersion3.0.2.”[Online].Available:http://uddi.org/pubs/uddi-v3.0.2-20041019.
htm.[Accessed:07-Jul-2011].“SOAPSpecifications.” [Online].Available: http://www.w3.org/TR/soap/. [Accessed:
07-Jul-2011].M.D.Hansen,SOAUsingJavaWebServices.PrenticeHall,2007.M.Kalin,JavaWebServices:UpandRunning,1sted.O’ReillyMedia,2009.
top related