Download - 10. Taller de Formación Java empresarial
![Page 1: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/1.jpg)
10. Taller de Formación Java empresarial
Ing. Laura González Ing. Guillermo Roldós
Ing. Juan Herman
![Page 2: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/2.jpg)
![Page 3: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/3.jpg)
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.
![Page 4: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/4.jpg)
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.
![Page 5: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/5.jpg)
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.
![Page 6: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/6.jpg)
634
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
Vemos,además,queseactivanlossiguientesbotones:
![Page 7: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/7.jpg)
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
![Page 8: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/8.jpg)
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.
![Page 9: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/9.jpg)
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.
![Page 10: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/10.jpg)
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.
![Page 11: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/11.jpg)
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.
![Page 12: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/12.jpg)
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.
![Page 13: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/13.jpg)
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/
![Page 14: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/14.jpg)
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.
![Page 15: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/15.jpg)
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.
![Page 16: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/16.jpg)
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.
![Page 17: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/17.jpg)
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.
![Page 18: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/18.jpg)
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.
![Page 19: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/19.jpg)
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.
![Page 20: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/20.jpg)
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.
![Page 21: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/21.jpg)
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).
![Page 22: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/22.jpg)
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.
![Page 23: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/23.jpg)
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),
![Page 24: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/24.jpg)
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.
![Page 25: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/25.jpg)
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.
![Page 26: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/26.jpg)
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.
![Page 27: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/27.jpg)
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
![Page 28: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/28.jpg)
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.
![Page 29: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/29.jpg)
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.
![Page 30: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/30.jpg)
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
![Page 31: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/31.jpg)
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”
![Page 32: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/32.jpg)
660
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
![Page 33: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/33.jpg)
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
![Page 34: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/34.jpg)
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.
![Page 35: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/35.jpg)
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.
![Page 36: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/36.jpg)
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.
![Page 37: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/37.jpg)
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.
![Page 38: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/38.jpg)
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@[email protected],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.
![Page 39: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/39.jpg)
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)
![Page 40: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/40.jpg)
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
![Page 41: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/41.jpg)
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.
![Page 42: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/42.jpg)
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:
![Page 43: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/43.jpg)
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ó[email protected]ónpuedeutilizarselaanotación@Join-
Tableque,encasoquenoseespecifiquelamisma,tomaraunnombrepordefecto.
![Page 44: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/44.jpg)
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.
![Page 45: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/45.jpg)
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.
![Page 46: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/46.jpg)
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
![Page 47: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/47.jpg)
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
![Page 48: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/48.jpg)
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.
![Page 49: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/49.jpg)
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).
![Page 50: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/50.jpg)
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.
![Page 51: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/51.jpg)
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
![Page 52: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/52.jpg)
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.
![Page 53: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/53.jpg)
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
![Page 54: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/54.jpg)
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.
![Page 55: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/55.jpg)
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.
![Page 56: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/56.jpg)
684
Talle
r de
Form
ació
n Ja
va e
mpr
esar
ial
![Page 57: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/57.jpg)
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.
![Page 58: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/58.jpg)
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.
![Page 59: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/59.jpg)
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.
![Page 60: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/60.jpg)
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
![Page 61: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/61.jpg)
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,@[email protected]
![Page 62: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/62.jpg)
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.
![Page 63: 10. Taller de Formación Java empresarial](https://reader030.vdocumento.com/reader030/viewer/2022020314/586f6c701a28ab83588b8a9a/html5/thumbnails/63.jpg)
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.