Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Junta de Comunidades de Castilla-La Manc a Conse!e"#a de Educaci$n% Cultu"a & De'o"tes Sergio Tendero Zapero
ndice de contenido
1. Arquitectura Java EE....................................................................................................................................4 1.1. La platafor a Java................................................................................................................................4 1.1.1. El lengua!e Java............................................................................................................................4 1.1.". #erra ientas de desarrollo $ e!ecuci%n........................................................................................& 1.". Ediciones..............................................................................................................................................' 1.(. Java Enterprise Edition.......................................................................................................................11 1.(.1. )odelo de aplicaci%n..................................................................................................................11 1.(.". *apas en la arquitectura Java EE................................................................................................14 1.(.(. *ontenedores Java EE................................................................................................................1+ 1.(.4. E paquetando aplicaciones........................................................................................................", 1.(.-. Java EE A./................................................................................................................................"" ". Entorno de desarrollo.................................................................................................................................."" (. *apa 0eb...................................................................................................................................................."(.1. Aplicaciones web en Java EE............................................................................................................."(.1.1. /ntroducci%n................................................................................................................................"(.1.". *iclo de vida de una aplicaci%n web..........................................................................................."+ (.1.(. )%dulos web.............................................................................................................................."+ (.1.4. *onfigurando aplicaciones web.................................................................................................."' (.". Tecnolog1a Java Servlets.....................................................................................................................(, (.".1. 23u4 es un Servlet5....................................................................................................................(, (.".". *iclo de vida de un Servlet.........................................................................................................(1 (.".(. /niciali6aci%n de un Servlet.........................................................................................................(1 (.".4. Escribiendo 4todos de servicio.................................................................................................(" (.".-. *o partiendo infor aci%n.........................................................................................................(( (.".7. 8iltrando peticiones $ respuestas................................................................................................(4 (.".+. /nvocando otros recursos web.....................................................................................................(7 (.".&. )anteniendo el estado del cliente...............................................................................................(+ (.".'. 8inali6ando un Servlet................................................................................................................(& (.(. Tecnolog1a JavaServer .ages..............................................................................................................(' (.(.1. 23u4 es una p9gina JS.5............................................................................................................(' (.(.". *iclo de vida de una p9gina JS..................................................................................................4, (.(.(. *reando contenido est9tico.........................................................................................................4" (.(.4. *reando contenido din9 ico......................................................................................................4" (.(.-. :sando scripting en p9ginas JS.................................................................................................4(
"
(.(.7. :sando etiquetas en JS..............................................................................................................44 (.(.+. El lengua!e de e;presiones unificado..........................................................................................4(.(.&. *o ponentes Java<eans.............................................................................................................47 (.(.'. =eutili6aci%n de contenido en p9ginas JS..................................................................................4' (.(.1,. Transfiriendo el control a otro co ponente web.......................................................................4' (.4. Arquitectura de la capa web................................................................................................................-, (.4.1. /ntroducci%n................................................................................................................................-, (.4.". JS.> )odelo 1.............................................................................................................................-1 (.4.(. JS.> )odelo ".............................................................................................................................-" (.4.4. Apac?e Struts..............................................................................................................................-(.-. A!a; en Java EE..................................................................................................................................74 (.-.1. /ntroducci%n................................................................................................................................74 (.-.". A!a; $ tecnolog1as en el lado del servidor Java EE.....................................................................7+ 4. *apa de negocio..........................................................................................................................................7& 4.1. /ntroducci%n........................................................................................................................................7& 4.". Tecnolog1as $ estrategias....................................................................................................................7' 4.".1. Apro;i aci%n .@J@ A Java<eans..............................................................................................7' 4.".". Apro;i aci%n EJ<......................................................................................................................+1 -. *apa de persistencia...................................................................................................................................++ -.1. /ntroducci%n........................................................................................................................................++ -.". )odelos cl9sicos de persistencia........................................................................................................++ -.".1. .ersistencia en las clases del odelo..........................................................................................+& -.".". .ersistencia en clases au;iliares..................................................................................................+& -.(. )ecanis os $ tecnolog1as de persistencia..........................................................................................&1 -.(.1. Java Database *onnectivit$ BJD<*C...........................................................................................&1 -.(.". )apeo @b!etoD=elacional. Java .ersistence A./........................................................................&( 7. *o unicaci%n entre capas $ aplicaciones...................................................................................................', 7.1. /ntroducci%n........................................................................................................................................', 7.". =)/ A EJ<s........................................................................................................................................', 7.(. Servicios 0eb.....................................................................................................................................'" 7.(.1. /ntroducci%n................................................................................................................................'( 7.(.". A;is ............................................................................................................................................'7.(.(. JAED0S.....................................................................................................................................'7 +. <ibliograf1a $ referencias............................................................................................................................'+
Enterprise EditionF viendo qu4 co ponentes $ servicios proporciona la platafor a en cada una de
1. Arquitectura Java EE
La platafor a Java est9 confor ada por un con!unto de productos $ especificaciones software de @racle *orporation que co ponen un entorno para el desarrollo $ despliegue de aplicaciones software.
1.1.1.
El lenguaje Java
Java es un lengua!e de progra aci%n de prop%sito generalF original ente desarrollado por Ja es Gosling para la e presa Sun )icros$ste s $ liberado en 1''- co o el co ponente central de la platafor a Java.
La sinta;is del lengua!e deriva de * $ *HHF pero dispone de un anipulaci%n directa de punteros o e oria.
odelo de ob!etos
9s
si ple $ eli ina ?erra ientas de ba!o nivelF que suelen inducir a nu erosos erroresF co o la
bibliotecas de clases de Java ?an sido desarrolladas por Sun )icros$ste s desde su aparici%nF $ 4
continuadas tras su adquisici%n por parte de @racle *orporation. .ara elloF en 1''& se cre% el Java *o unit$ .rocess BJ*.C co o proceso for ali6ado que per ite a las diferentes partes interesadas involucrarse en la definici%n de nuevas versiones $ caracter1sticas de la platafor a Java. El proceso de definici%n est9 basado en el uso de los Java Specification =equest BJS=CF que son docu entos for ales que describen las especificaciones $ tecnolog1as propuestas para que sean aIadidas a la platafor a Java.
A nivel de licenciasF se ?an liberado la gran Licencia .Jblica General de GK: BGK: G.LC.
Los ob!etivos de diseIo del lengua!e de progra aci%n Java est9n dirigidos por la naturale6a de los entornos de traba!o en los que el software debe ser desplegado. En particularF el gran creci iento de /nternet $ la 0orldD0ide 0ebF !unto con el co ercio electr%nicoF ?a provocado la necesidad de desarrollar aplicaciones segurasF robustasF con un alto rendi iento $ con la capacidad de e!ecutarse en Jltiples platafor as sobre redes distribuidas $ ?eterog4neas.
De esta
aneraF entre los principios de diseIo del lengua!e Java pode os destacar>
Si ple $ orientado a ob!etos> las caracter1sticas del lengua!e lo ?acen f9cil de aprenderF per itiendo a los progra adores co en6ar a utili6arlo r9pida ente. Ade 9s es orientado a ob!etosF para aprovec?arse de las 9s odernas etodolog1as de desarrollo software $ para ensa!es t1picos del software per itir su uso en aplicaciones distribuidas de tipo clienteDservidorF cu$as necesidades coinciden con los paradig as de encapsulaci%n $ el paso de orientado a ob!etos. =obusto $ seguro> uno de los aspectos de e!ecuci%n. Se dispone de un progra ador es el que decide el e oriaF decide cuando la 9s i portantes es la alta fiabilidad del softwareF e oria u$ sencilloF en el cual el
para lo que se proporcionan co probaciones en tie po de co pilaci%n as1 co o en tie po odelo de gesti%n de o ento en el que se crea un ob!etoF $ por tanto se ocupa la ediante el recolector de basuraF el que
el lengua!e co o en el entorno de e!ecuci%n que per ite construir aplicaciones seguras frente a intrusiones de c%digo alicioso.
.ortable $ arquitect%nica ente neutral> al estar dirigido a un entorno e inente ente ?eterog4neoF es necesario que el software se aco ode a diversos siste as operativosF platafor as $ que sea capa6 de interoperar con transportar c%digo eficiente ente sobre Jltiples interfaces de progra aci%nL para elloF el co pilador de !ava genera bytecodeF que es un for ato inter edio que per ite Jltiples platafor as ?ardware $ software. Este 9quina 9quinas c%digo inter edio podr9 ser e!ecutado en una platafor a espec1fica a trav4s de una refle!adas en el b$tecode segJn la platafor a concretaF e;istiendo as1 diferentes virtuales para las diversas arquitecturas. Alto rendi iento> se dispone de diferentes ecanis os que per iten lograr este ob!etivoF Jltiples ?ilos Bt?readsC si ult9neosF de
virtual de Java o Java Mirtual )ac?ine BJM)CF que interpreta $ e!ecuta las instrucciones
anera que cada uno de ellos puede reali6ar una tarea de for a paralela Bdescargar un fic?eroF interaccionar con el usuarioF etc.CL ade 9s de 4steF en la interpretaci%n del c%digo no es necesario volver a co probar el entorno de e!ecuci%nF el recolector de basura se e!ecuta en un ?ilo de ba!a prioridadF etc. /nterpretado $ din9 ico> co o se co ent% anterior enteF Java utili6a una e!ecuci%n basada en la interpretaci%n de un c%digo inter edio Bb$tecodeCL esto conlleva algunos beneficios asociados co o una e!ora en la fase de enla6ado del progra aF que tiene un car9cter din9 icoF enla6ando s%lo las clases que se necesitan.
A la vista de estos principiosF un ciclo de desarrollo $ e!ecuci%n si ple en Java i plicar1a escribir el c%digo fuente del progra a en fic?eros con e;tensi%n .!avaF co pilarlosF obteniendo as1 una serie de fic?eros .class que contienen el bytecode o c%digo inter edio $ e!ecutarlos en una instancia de una 9quina virtual.
*o o se di!o anterior enteF es posible i ple entar diferentes platafor as e;istentesF per itiendo as1 e!ecutar el
siste as operativosF $ alcan6ado as1 uno de los ob!etivos de JavaF el Nwrite onceF run an$w?ereOF es decirF se puede escribir un progra a $ e!ecutarlo en cualquier dispositivo para el que se ?a$a i ple entado una 9quina virtual.
Desafortunada enteF no todo son venta!asF $ la interpretaci%n del c%digo inter edio provoca un rendi iento en e!ecuci%n inferior a los progra as que se e!ecutan a trav4s de c%digo nativo. .ara ini i6ar este i pacto en el rendi iento se ?an introducido t4cnicas co o la co pilaci%n en tie po de e!ecuci%n o NJustDinDti e co pilationO BJ/TCF que convierte el c%digo inter edio en c%digo nativo durante su e!ecuci%n. Esta t4cnica suele estar incluida en las Jlti as 9quinas virtuales disponibles.
A nivel generalF puede decirse que los progra as escritos en Java $ e!ecutados con t4cnicas J/T son 9s lentos que los generados con lengua!es que utili6an co pilaci%n nativaF co o * o *HHF de un orden si ilar a otros que ta bi4n usan t4cnicas J/TF co o *P u otros de la platafor a .KETF +
9s r9pidos que los lengua!es que no utili6an co piladores nativos co o .#.F .erlF =ub$ o
.?$ton.
1.1.2.
Dos de los principales productos de la platafor a son el Java Develop ent Qit BJDQC $ el Java =unti e Environ ent BJ=EC.
El JDQ es la parte de la platafor a dirigida a los desarrolladoresF por lo que inclu$e tanto el propio lengua!e de progra aci%n JavaF co o un con!unto de ?erra ientas de desarrollo> el int4rprete B!avaCF el co pilador B!avacCF el e paquetador B!arCF el depurador B!dbCF el generador de docu entaci%n B!avadocCF etc. Ade 9s de todas estas ?erra ientasF una distribuci%n del JDQ inclu$e el con!unto de co ponentes del J=E.
El J=E proporciona el entorno de e!ecuci%n de aplicaciones JavaF para lo cual cuenta con una i ple entaci%n del con!unto de librer1as est9ndar BJava A./CF $ la Java Mirtual )ac?ine BJM)CF ade 9s de otros co ponentes adicionales. 9quina virtual de Java o
De for a an9loga a otras platafor as de progra aci%nF el con!unto de librer1as est9ndar proporciona un con!unto de funciones $ servicios al progra ador para la reali6aci%n de tareas co unes> ane!o de datosF seguridadF acceso a bases de datosF creaci%n de interfaces de usuarioF etc. Las clases se organi6an en la A./ en paquetesF conteniendo cada paquete un con!unto de interfacesF clases $ e;cepciones. La definici%n de la A./ est9 controlada por @racle a trav4s del progra a Java *o unit$ .rocess.
.or su parteF la JM)F es el ente que per ite la e!ecuci%n del c%digo inter edio generado por el co pilador de JavaF obteniendo as1 la independencia de la platafor aF que es uno de los principales ob!etivos de esta tecnolog1a. &
A continuaci%nF se
1.2. Ediciones
La platafor a Java est9 dividida actual ente en edicionesF estando cada una de ellas dirigida a un entorno diferente de aplicaciones $ contando con un con!unto de librer1as est9ndar que pueden variar en a$or o enor edida.
Java *ard> es la edici%n dirigida a la e!ecuci%n de aplicaciones Java BappletsC en tar!etas inteligentes o Rs art cardsR $ otros dispositivos si ilaresF siendo los principales ob!etivos de la tecnolog1a la portabilidad $ seguridad. Tiene su propia definici%n de bytecode $ de su 9quina virtual BJava *ard Mirtual )ac?ineCF as1 co o un con!unto S/). 1ni o de librer1asF todo ello opti i6ado para el entorno al que va dirigido. Su uso es frecuente en tar!etas tipo
'
%viles co o tel4fonos
o .DAs. Se caracteri6a por disponer de un con!unto reducido de las librer1as de clases de Java que per iten el desarrollo de aplicaciones para estos dispositivos de recursos reducidos. Actual ente se dispone de dos configuracionesF entendidas co o un con!unto de librer1as b9sicas $ una serie de capacidades de la 9quina virtual. La N*onected Li ited Device *onfiguration B*LD*CO para dispositivos pequeIos $ la configuraci%n N*onected Device *onfiguration B*D*CO para dispositivos con unas capacidades superiores. La pri era de ellas es la utili6ada co o est9ndar de facto para el desarrollo de !uegos para %vil. Java Standard Edition BJava SEC> es la edici%n central de la tecnolog1aF en la que se funda entan las de 9sF $ que posibilita el desarrollo de aplicaciones de prop%sito generalF e!ecutables en ordenadores personalesF servidores $ dispositivos si ilaresF $a sea en for a de appletsF aplicaciones de escritorio o de consola. Define un con!unto de librer1as que confor an su A./ $ que dan servicios de car9cter general a las aplicaciones Buso de siste as de arc?ivosF redesF interfaces gr9ficasF etc.C. Java Enterprise Edition BJava EEC> se trata de la edici%n dirigida al desarrollo de aplicaciones e presarialesF ulticapa $ distribuidas. .ara ello se basa en la A./ de la edici%n est9ndar a la que aIade un con!unto de librer1asF tales co o JD<*F =)/F eD ailF J)SF web servicesF E)LF etcL as1 co o una serie de especificaciones para co ponentes de la arquitectura Java EEF co o Enterprise Java <eansF *onnectorsF servletsF portletsF Java Server .agesF etc. .or Jlti oF aparece el concepto de servidor de aplicaciones Java EEF co o una entidad software con capacidad de ane!ar las transaccionesF la seguridadF la escalabilidadF la concurrencia $ la gesti%n de los co ponentes de la arquitectura que se despliegan sobre 4lF per itiendo as1 que el desarrollador se concentre en la i ple entaci%n de la l%gica de negocio en lugar de la infraestructura o las tareas de integraci%n.
1,
Java8E> es la edici%n
cliente o =/A Bric? /nternet applicationsC. Dispone de un SDQ propio en el que se inclu$en ?erra ientas para la co pilaci%n $ e!ecuci%nF $ una A./ con soporte para contenidos ulti ediaF co ponentes de interfa6 de usuarioF etc.
La edici%n e presarial de Java o Java EEF est9 dirigida al desarrollo de aplicaciones e presarialesF aplicaciones $ ulticapa $ distribuidas. .roporciona a los desarrolladores un con!unto potente e!orar el rendi iento de dic?as aplicaciones. co ponentes $ servicios que les per ite reducir el tie po de desarrolloF la co ple!idad de las
1.3.1.
Modelo de aplicacin
11
Java EE propone un
El
odelo est9 diseIado para soportar aplicaciones que i ple enten los servicios
e presariales para clientesF e pleadosF proveedoresF u otros que realicen peticiones o contribuciones a la e presaF siendo por tanto dic?as aplicaciones in?erente ente co ple!as en su l%gicaF con necesidad de acceder a arquitectura Jltiples fuentes de datos $ de ser distribuidas a una gran variedad de clientes. .ara responder a estos servicios $ requeri ientosF Java EE define una ulticapa que proporciona la escalabilidadF accesibilidad $ gesti%n que este tipo de aplicaciones e presariales necesita.
Este
odelo divide el traba!o para i ple entar los servicios e presariales requeridos en
dos partes> la l%gica de negocio $ presentaci%nF que deber9 i ple entar el desarrollador $ los servicios est9ndares del siste a que son proporcionados por la propia platafor aF aportando as1 al desarrollador soluciones para los proble as de nivel de siste a que i plica un servicio i ple entado ba!o una arquitectura ulticapa.
En este
odelo
co ponentesF que reali6an diferentes funciones $ que pueden estar desplegados en diferentes 9quinas dependiendo de la capa a la que el co ponente pertene6caF es decirF la platafor a Java EE define una arquitectura con una separaci%n de capasF cada una de ellas con un con!unto de responsabilidades $ unos co ponentes asociados puestos a disposici%n del desarrollador para i ple entar las funcionalidades de cada capa espec1fica.
1"
:n co ponente Java EE es una unidad funcional de software autocontenidaF que se ensa bla dentro de una aplicaci%n con sus clases $ fic?eros asociados. La especificaci%n de Java EE define los siguientes co ponentes> Aplicaciones cliente $ applets que se e!ecutan en el clienteF perteneciendo as1 a la capa cliente. Java ServletF JavaServer 8aces $ JavaServer .ages BJS.C son co ponentes web que se e!ecutan en el servidor Bcapa webC. Enterprise Java<eans BEJ<C son co ponentes de la capa de negocio que se e!ecutan en el servidor.
is a
anera
que cualquier progra a del lengua!e. La diferencia entre las clases Java est9ndares $ los co ponentes radica en que estos Jlti os deben cu plir su correspondiente especificaci%nF lo cual garanti6a su correcta e!ecuci%n $ gesti%n en los servidores Java EE.
1(
1.3.2.
El capa.
ulticapa. A
(i)
Capa cliente.
En la capa cliente est9n los co ponentes que interactJan directa ente con el usuarioF per iti4ndole introducir los datos $ enviar peticiones. .roporcionan la interfa6 gr9fica de presentaci%n al usuario $ ta bi4n pueden incluir introducidos por el usuario ecanis os de validaci%n de los datos ediante lengua!es de script. E;isten dos tipos de co ponentes>
*lientes web> consisten en dos partes diferenciadasF las p9ginas web din9 icas que contienen diferentes tipos de lengua!e de arcado $ que se generan a trav4s de los co ponentes web que se e!ecutan en la capa webF $ el navegador webF que renderi6a las p9ginas recibidas del servidor. A este tipo de clientes se le suele deno inar Rclientes ligerosRF $a que la carga de operaci%n se reali6a en el servidorF ientras que el cliente se li ita a presentar los contenidos. En ocasionesF una p9gina web recibida de la capa web puede incluir un appletF que es una pequeIa aplicaci%n cliente escrita en el lengua!e de progra aci%n Java $ que se e!ecuta en la 9quina virtual del cliente. 9quina
Aplicaciones cliente> se deno ina as1 a las aplicaciones que se e!ecutan en la cliente $ que per iten disponer de una interfa6 lengua!es de
directa ente a la capa de negocio $ pueden i plicar procesa iento de datosF por tanto se les suele deno inar de tipo Rcliente pesadoRF estando nor al ente basadas en la platafor a Java SE.
14
A la ?ora de elegir un tipo de cliente u otroF se debe considerar la posibilidad de 9s funcionalidad en la parte del cliente Bcliente pesadoC o concentrarla ligeroC. )antener la aplicaci%nF sin e bargoF antenerla en el cliente per itir9
antener
9s en el servidor Bcliente
9s funcionalidad en el servidor facilitar9 la distribuci%nF despligue $ gesti%n de e!orar la e;periencia del usuario.
(ii)
Capa web
La capa web se encarga de recibir $ procesar las peticiones que provienen de la capa clienteF generando contenido din9 ico que puede requerir de la interacci%n con la capa de negocioF interconectandoF por tantoF la capa cliente con la l%gica de la aplicaci%n. Los co ponentes $ tecnolog1as 9s i portantes de esta capa son>
Servlets> son clases progra adas en lengua!e Java $ que son capaces de procesar din9 ica ente peticiones $ construir las respuestas. Se basan en el odelo requestA response del protocolo #TT.F disponiendo de todo el poder de la A./ de Java. .9ginas JS.> son docu entos que se e!ecutan co o servlets pero que per iten una apro;i aci%n 9s natural a la ?ora de crear contenido est9ticoF $a que per iten intercalar arcado. 1c%digo Java $ JS. con lengua!es de
JavaServer 8aces> es una tecnolog1a que proporciona un fra eworS de co ponentes de interfa6 de usuario a las aplicaciones web.
Al igual que en la capa de clienteF se pueden incluir co ponentes Java<eans para gestionar la entrada del usuario $ enviar esa entrada a los co ponentes que se e!ecutan en la capa de negocio para su procesa iento.
(iii)
Capa de negocio
Se ocupa de i ple entar la l%gica de negocio necesaria para dar respuesta a los requisitos del do inio de la aplicaci%nF lo que inclu$e recibir los datos de la capa cliente $ la capa web $ procesarlosF e itiendo as1 los resultados adecuadosF $ gestionandoF si es necesarioF la persistencia de la infor aci%nF co unic9ndose con la capa de siste as de infor aci%n e presarial.
17
(iv)
Esta capa per ite la cone;i%n de la arquitectura Java EE con los recursos e presariales co o siste as E=.F siste as transaccionalesF siste as de base de datosF u otros siste as de infor aci%n ?eredadosF con los que la aplicaci%n necesita co unicarseF por e!e plo para proporcionar conectividad con bases de datos.
1.3.3.
ontenedores Java EE
En las aplicaciones
para la gesti%n de las transaccionesF del estadoF de la e!ecuci%n contenedor para cada tipo de co ponenteF de
otros detalles de ba!o nivel. Java EE proporciona una serie de servicios sub$acentes en for a de anera que el desarrollador puede utili6arlos $ centrarse en la resoluci%n del proble a de negocio concreto.
1+
:n contenedor es la interfa6 entre un co ponente $ la funcionalidad de ba!o nivel espec1fica de la platafor a que soporta el co ponente. Antes de poder e!ecutar un co ponente deber9 ser ensa blado en un %dulo Java EE $ desplegado en el contenedor correspondiente.
El proceso de ensa blado i plica especificar una serie de par9 etros del contenedor para los co ponentes de la aplicaci%n Java $ para la aplicaci%n en s1 is aF de anera que dic?os par9 etros per iten configurar el soporte sub$acente aportado por el servidor Java EEF inclu$endo servicios co o la seguridadF la gesti%n de las transaccionesF el servicio de bJsqueda Java Ka ing and Director$ /nterface BJKD/CF la conectividad re otaF etc. Es decirF en funci%n de los par9 etros especificados al ensa blar la aplicaci%nF pode os ?acer que 4sta var1e su co porta iento sin necesidad de ca biar el c%digo de los co ponentes. Aparte de estos servicios configurablesF los contenedores ta bi4n proporcionan servicios no configurables co o la gesti%n del ciclo de vida de los EJ<s $ ServletsF la gesti%n del pool de cone;iones a base de datosF la persistencia de datos $ el acceso a la A./ de la platafor a.
La platafor a Java EE define cinco tipos de contenedores> *ontenedor de applets> gestiona la e!ecuci%n de los applets. *onsiste en un navegador web $ un plugDin de Java e!ecut9ndose !untos en el cliente. *ontenedor de aplicaci%n cliente> gestiona la e!ecuci%n de los co ponentes de la aplicaci%n cliente. Tanto el contenedor co o la aplicaci%n se e!ecutan en cliente. *ontenedor web> gestiona la e!ecuci%n de las p9ginas JS. $ los servlets de las aplicaciones Java EEF controlando el ciclo de vida de los servlets $ el apeo entre una :=L $ un servlet deter inadoF garanti6ando que la petici%n dispone de los derec?os de acceso adecuados. Ta bi4n per iten gestionar algunos co ponentes EJ< para aplicaciones Java EE. Los co ponentes web $ su contenedor se e!ecutan en el servidor Java EE. *ontenedor de Enterprise Java <eans BEJ<C> gestiona la e!ecuci%n de los EJ<s en las aplicaciones Java EE. Al igual que los co ponentes webF se e!ecutan en el servidor Java EE. Servidor Java EE> es la parte de e!ecuci%n de un producto Java EEF proporcionando contenedores de EJ< $ web.
1&
anera que
garanticen la co patibilidad con la tecnolog1a que i ple entan. Esto i plica que deben ser capaces de proporcionar los servicios asociados al contenedor $ a los co ponentes que 4ste soporta.
Las i ple entaciones de servidores total ente co patibles con Java EE 7F pueden consultarse en> ?ttp>TTwww.oracle.co Ttec?networST!avaT!avaeeToverviewTco patibilit$D!spD1(7'&4.?t l Entre ellos se inclu$en> @racle Glass8is? Server (.; @racle 0ebLogic Server 1" J<oss Application Server +.; Apac?e Geroni o (.,DbetaD1
1'
ta bi4n se pueden encontrar servidores web que Jnica ente disponen del contenedor webF co o por e!e plo Apac?e To catF que es un contenedor web que i ple enta las especificaciones de Java Servlets $ JS. para generar un servidor web #TT. para Java.
1.3.!.
Empaquetando aplicaciones
producci%nF por lo queF una ve6 que se disponga de una versi%n de la aplicaci%n estableF 4sta deber1a publicarse en el servidor correspondiente. .ara elloF Java EE dispone de los servidores de producci%n. :na aplicaci%n Java EE se entrega a trav4s de un Enterprise Arc?ive BEA=CF que es un Java Arc?ive BJA=C est9ndar con la e;tensi%n .ear. :n fic?ero JA= supone la agregaci%n de uc?os fic?eros en uno. Se utili6a para distribuir etadatos $ los recursos asociados. .ara e paqueta iento $ despliegueF que nos per iten garanti6ar una correcta publicaci%n en los
aplicaciones Java o librer1asF inclu$endo las clasesF los for ato Z/.. :n fic?ero EA= contiene
crear el arc?ivo JA= se utili6a el co ando jar, incluido en el JDQF que genera un arc?ivo que usa el
:n descriptor de despliegue es un docu ento E)L con e;tensi%n .; l que describe los par9 etros de despliegue de una aplicaci%nF %dulo o co ponente. La infor aci%n del descriptor odificar el c%digo fuente. En tie po de %dulo o es declarativaF pudiendo ser ca biada sin necesidad de
e!ecuci%nF el servidor Java EE lee el descriptor de despliegue $ actJa sobre la aplicaci%nF su c%digo.
co ponente en consecuenciaF por tanto per ite variar el co porta iento de la aplicaci%n sin variar
Se pueden diferenciar dos tipos de descriptores de despliegueF los que se definen a trav4s de la especificaci%n Java EEF que per iten la configuraci%n de cualquier i ple entaci%n que cu pla ",
con dic?a especificaci%nL $ los dependientes del del entorno de e!ecuci%nF que per iten configurar par9 etros espec1ficos de la i ple entaci%n Java EE que da el servidor de aplicaciones utili6ado. .or e!e plo puede per itir configurar el Rconte;t rootR de la aplicaci%nF el apeo entre los no bres portables de los recursos de la aplicaci%n $ los recursos del servidorF as1 co o otros par9 etros espec1ficos del servidor de aplicaciones co o las directivas de cac?eo. Los descriptores se inclu$en en el directorio )ETAD/K8 del e paquetado. :n %dulos> )%dulos EJ<F que contienen fic?eros de clases B.classC de EJ<s $ el descriptor correspondienteF en el que se pueden incluir aspectos co o los atributos de seguridad $ transacci%n para los beans. Se e paquetan en fic?eros JA= con la e;tensi%n .!ar. )%dulos webF que contienen fic?eros de clases de ServletsF fic?eros JS.F otras clases de soporteF fic?eros #T)LF otros recursos est9ticosF $ un descriptor de despliegue de aplicaci%n web. Los %dulos web se e paquetan con la e;tensi%n .war B0eb A=c?iveC. )%dulos de aplicaciones clienteF que contienen fic?eros de clases $ un descriptor de despliegue de la aplicaci%n cliente. Se e paquetan con la e;tensi%n .!ar. )%dulos adaptadores de recursosF que contienen todas las interfacesF clasesF librer1as $ docu entaci%nF !unto con el descriptor de despliegue del adaptador del recursoF i ple entando as1 la arquitectura de conector para un E/S particular. Se e paquetan co o fic?eros JA= con la e;tensi%n .rar Bresource adapter arc?iveC. %dulo Java EE consiste en uno o 9s co ponentes Java EE para el is o tipo de
"1
1.3.".
Java EE A#$
El Jlti o co ponente clave de la platafor a Java EE es la A./F $a queF co o se co ent% anterior enteF inclu$e todas las bibliotecas de Java SE 9s algunas adicionales que per iten proporcionar los servicios requeridos por las aplicaciones Java EE.
2. Entorno de desarrollo
El entorno de desarrollo de aplicaciones Java EE tiene dos ele entos principalesF una ?erra ienta /DE B/ntegration Develop ent Environ entC para el desarrollo $ un servidor Java EE ""
para el despliegue $ e!ecuci%n. <9sica enteF un /DE es una aplicaci%n software que proporciona utilidades a los desarrolladores para la construcci%n de aplicacionesF tales co oF editores de c%digo fuenteF co piladoresF depuradoresF ?erra ientas de construcci%n auto 9ticas BbuildCF diagra as de clasesF etc. Ade 9s suelen incluir la posibilidad de au entar sus prestaciones a trav4s de plugDins u otros ecanis os de e;tensi%n. .ara la platafor a Java EEF los /DEs 9s conocidos son Ket<eans $ EclipseF siendo este
Jlti o es el que se utili6ar9 en el curso en su versi%n REclipse /DE for Java EE DevelopersRF que se puede descargar desde ?ttp>TTwww.eclipse.orgTdownloadsT Eclipse es un /DE escrito principal ente en JavaF lo que i plica que para e!ecutarse necesitar9 tener acceso a un J=EF esto per ite que la ?erra ienta sea independiente de la platafor a en la que se e!ecuta. Al ser una ?erra ienta de desarrolloF necesita proveer de una serie de utilidades co o co piladorF depuradorF etc. lo cual podr1a ?acerse enla6ando con el JDQ oficial. Sin e bargoF Eclipse inclu$e el Java Develop ent Tools BJDTC que proporciona una serie de utilidades entre las que destaca> :n co pilador incre ental de JavaF que i ple enta la especificaci%n del lengua!e Java. El ?ec?o de ser incre ental per ite que una ve6 reali6ada la pri era construcci%n en las siguientes s%lo se reconstru$e la parte que ?a ca biado. El co pilador clasifica los proble as encontrados en errores $ advertencias. La e;istencia de una advertencia no afecta a la e!ecuci%n $ depuraci%n del progra a. Los errores de co pilaci%n respecto a la especificaci%n del lengua!e Java sie pre se reportan co o erroresF advertenciasF errores o que directa ente se ignoren. :n asistente de c%digo. :na infraestructura de bJsqueda inde;ada que se usa en la bJsquedaF asistencia de c%digo $ refactori6aci%n. "( ientras que para el resto de proble as el desarrollador puede especificar si desea que se reporten co o
El co pilador de Java de Eclipse cu ple con las especificaciones de los distintos JDQ disponibles. El desarrollador deber9 seleccionar para cada aplicaci%n el nivel de confor idad desea utili6ar. Esto provocar9 que las clases generadas por el co pilador deber9n ser e!ecutadas por un J=E del is o o superior nivel.
Si se desea co pilar en Eclipse utili6ando el co pilador oficialF se podr1a ?acer a trav4s de la ?erra ienta Ant.
:n servidor Java EE es aquel que es co patible con alguna de las especificaciones de Java EE. En este curso se va a utili6ar el Apac?e To cat +.,.; co o servidor web Java EE $ J<oss Application Server +.1.; co o servidor de aplicaciones Java EE.
"4
A'ac e Tomcat es un servidor web #TT. de c%digo abierto que i ple enta las especificaciones de Java Servlet $ JavaServer .ages BJS.CF por tanto se le puede considerar un contenedor web Java EE. En su versi%n +.,.; soporta las especificaciones Servlet (.,F JS. "." $ EL "."F por tanto es un contenedor web Java EE 7. JBoss A'lication Se"(e" o J<oss AS es un servidor de aplicaciones Java EE de tipo open source desarrollado por J<ossF que es una divisi%n de =ed #at. / ple enta las especificaciones $ servicios de un servidor de aplicaciones Java EE co pleto> EJ<F J.AF JAASF J)SF JKD/F JTAF etc.F disponiendo de J<oss0eb co o contenedor webF estando 4ste basado en Apac?e To cat. J<oss AS en su versi%n +.1.; ?a sido certificado co o i ple entaci%n co pleta de Java EE 7.
3.
apa %e&
3.1.1.
$ntroduccin
En la arquitectura Java EEF la capa web se encarga de recibir $ procesar las peticiones que provienen de la capa clienteF generando contenido din9 ico que puede requerir de la interacci%n con la capa de negocioF interconectandoF por tantoF la capa cliente con la l%gica de la aplicaci%n.
T1pica enteF el cliente env1a una petici%n #TT. al servidor webF que en el caso de la platafor a Java EE dispondr9 de un contenedor web. El servidor web se encarga de convertir la petici%n a un ob!eto #TT.Servlet=equestF que contendr9 toda la infor aci%n de la petici%nF $ pasarlo al co ponente web responsable de tratarlaF por e!e plo un servlet o una p9gina JS.. El co ponente web puede generar un ob!eto #TT.Servlet=esponse o pasarle la petici%n a otro co ponente web. En cualquier caso se generar9 dic?o ob!etoF que ser9 convertido por el servidor "-
Entre los co ponentes web nos encontra os a los Servlets $ las p9ginas JS.. Los Servlets son clases del lengua!e de progra aci%n Java que din9 ica ente procesan peticiones $ generan respuestasL por su parteF las p9ginas JS. son docu entos basados en te;to que se e!ecutan co o Servlets pero con una apro;i aci%n Los Servlets se aco odan 9s natural para crear contenido est9tico. Aunque servlets $ p9ginas JS. pueden utili6arse de for a interca biableF cada tipo de co ponente tiene sus venta!as. e!or a las aplicaciones orientadas a serviciosF por e!e plo los puntos de 9s adecuados para la acceso o RendpointsR de los servicios web se pueden i ple entar co o servletsF $ a las funciones de control de una aplicaci%n orientada a la presentaci%n. Los JS. son generaci%n de contenido basado en lengua!es de arcado co o #T)L o E)L.
La Jlti a tecnolog1a de co ponentes web incluida en la especificaci%n de Java EE son los JavaServer 8acesF cu$o prop%sito es el de construir aplicaciones alta ente interactivas $ orientadas a la presentaci%nF para lo que generan contenido basado en lengua!es de arcado co o E#T)L.
Los co ponentes web son soportados por los servicios del contenedor webF co o gesti%n de las peticionesF concurrenciaF seguridadF $ gesti%n del ciclo de vida.
"7
3.1.2.
:na aplicaci%n web consta de co ponentes webF fic?eros de recursos est9ticos Bco o i 9genesCF clases de a$uda $ librer1as. El contenedor web proporciona servicios de soporte que e!oran las capacidades de los co ponentes web $ facilitan su desarrollo. Sin e bargoF para poder obtener estos serviciosF el proceso de creaci%n $ e!ecuci%n de una aplicaci%n web var1a de otras aplicaciones con clases convencionales.
El proceso de creaci%nF despliegue $ e!ecuci%n de una aplicaci%n web puede resu irse de la siguiente anera>
1. Desarrollar el c%digo de los co ponentes web ". Desarrollar el descriptor de despliegue de la aplicaci%n web. (. *o pilar los co ponentes web $ las clases de soporte referenciadas por los co ponentes. 4. @pcional ente> e paquetar la aplicaci%n en una unidad desplegable. -. Desplegar la aplicaci%n en un contenedor web. 7. Acceder a la :=L que referencia la aplicaci%n web.
3.1.3.
Mdulos 'e&
En la arquitectura Java EEF los co ponentes web $ los contenidos web est9ticos co o i 9genes se deno inan recursos web. :n recursos web. :n en la especificaci%n de Java Servlet. %dulo web es la unidad 9s pequeIa de despliegue para %dulo web Java EE se corresponde con una aplicaci%n web tal co o se define
fic?eros> *lases de utilidad que se e!ecutan en serverDside> para acceso a base de datosF confor es a la arquitectura de co ponentes Java<eansF etc. *lases de clientDside> applets $ otras clases de utilidad.
:n etc.
%dulo web tiene una estructura espec1fica. El directorio ra16 se deno ina Rdocu ent
rootRF en 4l es donde se sitJan las p9ginas JS.F las clases de clientDsideF los recursos web est9ticosF
El directorio ra16 contiene un subdirectorio lla ado web-inf, en el se pueden encontrar los siguientes fic?eros $ directorios> classes> es el directorio que contiene las clases de serverDside> servletsF clases de utilidad $ Java<eans. tags> un directorio que contiene fic?eros de tagF que son la i ple entaci%n de las librer1as de tags. lib> el directorio que contiene los arc?ivos JA= con las librer1as invocadas desde las clases de serverDside. Descriptores de despliegueF co o el web.; lF que es el descriptor de despliegue de la aplicaci%n webF u otros descriptores propios de tecnolog1as o servidores.
A continuaci%n se
%dulo web>
"&
Si el
%dulo web no contiene ni servletsF ni filtros ni co pontentes tipo RlistenerRF entonces %dulo web s%lo
contiene p9ginas JS. $ fic?eros est9ticos no ser9 necesario incluir un fic?ero web.; l.
:n
%dulo web puede ser desplegado co o una estructura de fic?eros sin e paquetarF lo %dulo web descrito es portableF
que es conocido co o un Re;ploded arc?iveRF o e paquetarse en un fic?ero JA= conocido co o fic?ero 0A= B0eb A=c?iveC utili6ando la e;tensi%n .war. El pudiendo ser desplegado en cualquier contenedor confor e a la especificaci%n de Java Servlet.
3.1.!.
Las aplicaciones web se configuran a trav4s de anotaciones $ de los ele entos definidos en el descriptor de despliegue de la aplicaci%n. A continuaci%n se e;ponen algunos de las principales tareas a reali6ar al configurar la aplicaci%n>
)apear las :=Ls a co ponentes web> dada una petici%n recibida por el contenedor webF "'
ane!ar la petici%n.
Declarar los fic?eros de bienvenida> son los fic?eros a utili6ar en caso de que una petici%n no apee directa ente a un co ponente web. Si no se especifica nadaF se utili6ar9 el inde;.;;; co o p9gina de bienvenida por defecto. *onfigurar par9 etros de iniciali6aci%n> se pueden configurar par9 etros a co partir entre todos los co ponentes web a trav4s de un ob!eto que representa el conte;to de la aplicaci%n. Ta bi4n se pueden indicar par9 etros para un co ponente web espec1fico. )apear errores a p9ginas de error> Se puede especificar un apeo entre el c%digo de estado
devuelto por una respuesta #TT. Bp.e!>error -,,CF o una e;cepci%n del lengua!e !ava a cualquier co ponente web. Las p9ginas JS. ta bi4n per iten especificar una p9gina en caso de error. Si se ?a definido tanto en el web.; l co o en la !spF esta Jlti a tiene precedencia. Declarar referencias a recursos> si un co ponente web usa ob!etos co o enterprise beansF data sources o web servicesF se pueden utili6ar las anotaciones de Java EE para in$ectar esos recursos en la aplicaci%n.
3.2.1.
)*u+ es un ,ervlet-
La tecnolog1a Java Servlets supone la respuesta de la platafor a Java a la necesidad de generar contenido din9 ico en el servidor ante una petici%n de un cliente. :n Servlet es una clase del lengua!e de progra aci%n Java que e;tiende las capacidades de los servidores que ?ospedan aplicaciones accedidas por edio del odelo de progra aci%n (,
petici%nDrespuesta. Aunque los servlets pueden responder a cualquier tipo de respuestaF nor al ente se usan para las aplicaciones ubicadas en servidores web. .ara estas aplicaciones la tecnolog1a Java Servlet define una clases servlets especificas para #TT.. Los paquetes javax.servlet $ javax.servlet.http proporcionan las interfaces $ clases para escribir servlets. Todos los servlets deben i ple entar la interfa6 Servlet que define los GenericServletF 4todos del ciclo de vida. .ara i ple entar servicios gen4ricos se puede usar o e;tender la clase ientras que para servicios espec1ficos de tipo #TT. se puede utili6ar la clase 4todos co o doGet o doPost para ane!ar las peticiones #TT.. HttpServlet que proporciona
3.2.2.
El ciclo de vida de un servlet es controlado por el contenedorF de petici%n se apea a un servletF el contenedor reali6a los siguientes pasos>
1. Si no e;iste una instancia del servletF entonces carga la clase del servletF crea una instancia e iniciali6a el servlet lla ando al ". /nvoca el 4todo init.
4todo destroy.
3.2.3.
$niciali.acin de un ,ervlet
Despu4s de que el contenedor web cargue $ cree la instancia de la clase del servletF $ antes de que co ience a atender peticionesF es necesario iniciali6arlo. En la iniciali6aci%n se suelen leer datos de configuraci%n persistentesF se iniciali6an recursosF o reali6an actividades inicialesL para ello se puede sobreescribir el en la iniciali6aci%n. 4todo init de la interfa6 ServletF sabiendo que este 4todo ser9 invocado
(1
3.2.!.
Los servicios proporcionados por un Servlet se i ple entan a trav4s del la clase GenericServlet o los espec1ficas de otros protocolos.
4todo service de
El patr%n general de un
a los recursos $ l%gica e;terna $ co poner la respuesta en base a la infor aci%n obtenida.
/i0
:na petici%n contiene datos pasados entre un cliente $ el servlet. Todas las peticiones i ple entan la interfa6 ServletRequestF en particularF las peticiones #TT. i ple entan la interfa6 H PServletRequest que e;tiende a la anterior. Estas interfaces definen 4todos para acceder a la siguiente infor aci%n> .ar9 etros> se usan para trans itir infor aci%n entre clientes $ servlets. Atributos de tipo ob!eto> se utili6an para pasar infor aci%n entre el contenedor de servlets $ un servlet o entre servlets que colaboran. /nfor aci%n sobre el protocolo utili6ado para co unicar la petici%n $ sobre el cliente $ servidor involucrados en la petici%n. /nfor aci%n sobre locali6aci%n.
Ta bi4n se puede obtener el flu!o de entrada Binput strea C de la petici%n $ obtener los datos anual ente.
En una petici%n #TT. se pueden obtener las cabecerasF la consulta reali6adaF etc.
("
/ii0
onstruyendo respuestas
:na respuesta contiene los datos pasados del servidor al cliente. Las respuestas i ple entan la interfa6 ServletResponse que define 4todos que per iten>
:tili6ar un flu!o de salida Boutput strea C en el que enviar los datos al clienteF $a sean caracteres o datos binarios. /ndicar el tipo de contenido devuelto. .or e!e plo> set!ontent ype"#text$ht%l&'. Gestionar el buffer de respuesta al cliente. /ndicar infor aci%n de locali6aci%n co o por e!e plo la codificaci%n de caracteres.
Las respuestas a peticiones #TT. usan el ob!eto #TT.Servlet=esponse que dispone de ca pos para representar cabeceras co o el c%digo de estado Bpara indicar la ra6%n de una petici%n no satisfec?a o redirigidaC o las cooSiesF que se utili6an para al acenar infor aci%n en el clienteF co o el identificador de cliente que per ite el segui iento de su sesi%n.
3.2.".
ompartiendo in(ormacin
Los co ponentes web a veces necesitan co partir infor aci%n para reali6ar sus tareas. .ara elloF la tecnolog1a Java Servlets dispone de cuatro ob!etos de diferente alcance>
Clase !ava;.servlet.Servlet*onte;t
((
Desarrollo de aplicaciones web con Java Enterprise Edition Sesi%n .etici%n .9gina !ava;.servlet.?ttp.#ttpSession Subtipo de !ava;.servlet.Servlet=equest !ava;.servlet.!sp.Jsp*onte;t .9gina JS. que crea el ob!eto *o ponentes web sesi%n *o ponentes web ane!ando la petici%n ane!ando una petici%n que pertenece a la
*o o cualquier otro ob!eto o recurso co partido es necesario controlar el acceso a estos ob!etosF 9s aJn al encontrarnos en un entorno ulti?iloF $a queF nor al enteF un contenedor web crea un ?ilo para ane!ar cada petici%n. Si se quiere garanti6ar que cada instancia de un Servlet ie bros de la instancia. Esta arca
ane!a una Jnica petici%n cada ve6F este Servlet deber1a i ple entar la interfa6 Sin(le hread)odelF asegurando as1 un acceso e;clusivo a los una soluci%n puede tener un aspecto negativo en el rendi ientoF $a que las peticiones que gestionase is a instancia se procesar1an secuencial enteL ade 9s la especificaci%n de Sevlet ".4 esta interfa6 co o RdeprecatedR.
Si real ente se necesita gestionar el acceso concurrente a los recursosF sean o no de un ServletF lo gesti%n de transacciones para datos alo!ados en siste as gestores de bases de datos.
ie bros
3.2.2.
:n filtro es un ob!eto que puede transfor ar la cabecera $ el contenido de una petici%n o una respuesta. Los filtros difieren de los co ponentes web en que 4stos nor al ente no crear una respuestaF sino que proporcionan una funcionalidad que se puede aIadir a cualquier tipo de recurso web. De esta aneraF un filtro no deber1a tener dependencias de ningJn recurso web para el cual est9 actuando co o filtro. Las principales tareas que puede reali6ar un filtro son> *onsultar la petici%n $ actuar en consecuencia. <loquear el par petici%nDrespuesta. )odificar las cabeceras $ datos de la petici%n $To la respuesta. .ara ello proporciona una
(4
Las aplicaciones de los filtros inclu$en> autenticaci%nF loggingF conversi%n de i 9genesF co presi%n de datosF encriptaci%nF transfor aci%n de E)LF etc.
Se puede configurar un recurso web para ser filtrado por una cadena de ceroF uno o instancia cuando el contenedor carga el co ponente.
9s
Las tareas involucradas para el uso de filtros son> .rogra ar el filtro> un filtro es una clase que i ple enta la interfa6 *ilterF cu$o principal es do*ilter en el que se deben e!ecutar las tareas del filtro. .rogra ar la petici%n o respuesta personali6ada> e;isten la respuesta. .ara uc?as for as de odificar una 4todo
petici%n o una respuestaF por e!e plo aIadiendo atributos a la petici%n o insertando datos en odificar los flu!os de entrada o salidaF se suele utili6ar un ob!eto tipo RwrapperR o envoltorio siguiendo el patr%n R0rapperR o el RDecoratorR. Especificar la cadena de filtros para cada recurso web> un contenedor web utili6a el no bre o un patr%n :=L. Los filtros se invocan en el orden en el que el lista de apeo
de filtros para decidir qu4 filtros aplicar a cada recurso webF para lo que puede utili6ar un apeo aparece en la apeos del 0A=F dentro del descriptor del despliegue. Ade 9sF es necesario
especificar c% o se aplica a las peticiones> s%lo cuando viene de una petici%n directaF s%lo cuando proviene de un RforwardRF s%lo cuando se utili6a un RincludeRF o s%lo cuando se est9 utili6ando un filtro. ecanis o de errorF pudiendo indicarse varios tipos de aplicaci%n al is o
(-
3.2.4.
:n co ponente web puede invocar otros recursos web de dos for as> directa e indirecta ente. :n co ponente web invoca a otro indirecta ente cuando inclu$e su :=L dentro de la respuesta devuelta al cliente.
e;istiendo dos posibilidadesF que el co ponente web inclu$a el contenido del otro recursoF o que le trans ita el flu!o e infor aci%n de la petici%n.
.ara invocar a otro recurso disponible en el servidor pri ero se debe obtener un ob!eto Request+ispatcherF $a sea de la petici%n o del conte;to web. Dependiendo de donde se ?a$a obtenido ser9 necesario indicar el ca ino de acceso al recurso de for a relativa Bsi se obtiene de la petici%nC o de for a absoluta Bsi se obtiene del conte;to webC.
/i0
#abitual ente es Jtil incluir otro recurso web en la respuestaF por e!e plo partes est9ticas a incluir co o un anuncioF infor aci%n de cop$rig?tF etc. .ara ello es necesario invocar al include "request, response' del ob!eto Request+ispatcher. 4todo
Si el recurso es un co ponente webF el efecto de la inclusi%n es enviar la petici%n al co ponente $ e!ecutarloF per itiendo que escriba infor aci%n en el cuerpo de la respuestaF pero no que ca bie infor aci%n referente a las cabeceras.
(7
/ii0
9s de un pasoF de
anera
que un co ponente puede ?acer un procesa iento preli inar $ otro subsiguiente para generar la respuestaF cu$a invocaci%n puede depender de ese procesa iento preli inar.
4todo forward
"request, response' del Request+ispatcher. Es necesario reseIar que al ?acer estoF la :=L de la petici%n ca biar9 a la del recurso invocado. Ade 9s este tipo de transferencia solo puede ?acerse si no se ?a accedido previa ente a los ob!etos Servlet,utputStrea% o Print-riterF es decirF si no se a e pe6ado a co poner una respuestaF $a que esta deber1a ser construida por el co ponente al que se transfiere.
3.2.6.
)uc?as aplicaciones requieren que una serie de peticiones de un cliente est9n asociadas entre s1F de anera que e;ista un estado asociado al clienteF que se deno ina sesi%n. Debido a queF antiene infor aci%n de la sesi%nF nor al enteF las peticiones utili6an el protocolo #TT.F que no ecanis os para i ple entarlas.
la tecnolog1as Java Servlet ?a tenido que proporcionar una A./ para gestionar las sesiones $
Las sesiones se representan por el ob!eto HttpSessionF que est9 accesible (etSession de un ob!eto petici%n. Este sino crea una nueva.
ediante el
4todo
(+
:na ve6 que se dispone de la sesi%nF se le pueden asociar atributos de tipo ob!eto por no breF de $a sea en la anera que se ?ar9n accesibles a todos los co ponentes web que accedan a esa sesi%nF is a petici%n o en peticiones sucesivas dentro de la is a sesi%n.
9s la
sesi%nF cada sesi%n tendr9 un tie po de vida asociado Bti eoutC que puede ser accedido $ configurado en el propio ob!eto o ta bi4n a trav4s del descriptor de despliegue para indicar un tie po por defecto. Ta bi4n se dispone de un liberando cualquier dato asociado. 4todo invalidate que per ite ter inar la sesi%n
usuario. Todos ellos se basan en pasar un identificador entre el cliente $ el servidor. Este antenido en el cliente co o cooSie o puede ser incluido por el co ponente web en cada :=L que se devuelve al cliente Breescritura de :=LC.
3.2.7.
3inali.ando un ,ervlet
*uando un contenedor de servlet deter ina que un servlet debe ser eli inado Bpor e!e plo cuando el contenedor requiere e oria o se est9 apagandoCF el contenedor invoca el 4todo destroy de la interfa6 Servlet. En ese 4todo el progra ador deber9 liberar los recursos asociados al
En principioF la invocaci%n a destroy deber1a ?acerse cuando todas las peticiones de servicio se ?a$an co pletadoF pero podr1a ?aber circunstancias en las que esto podr1a no cu plirse Bpor e!e ploF por requerir un tie po superior al esperado o Rde graciaRCF en ese caso es necesario (&
asegurarse que todos los ?ilos que todav1a est9n de diferentes ecanis os para asegurarlo>
o ento.
.roporcionar un s?utdown li pioF para lo que se deber9 notificar a los duraci%n el s?utdown $ esperar a que ter inen. Tener un pool de
4todos de larga
La tecnolog1a JavaServer .ages BJS.C per ite crear contenido webF tanto con co ponentes est9ticos co o din9 icosF de una apro;i aci%n anera sencilla. .ara elloF esta tecnolog1a pone a disposici%n del desarrollador todas las capacidades de la tecnolog1a Java Servlet pero proporcionando una 9s natural para crear el contenido est9tico.
Las principales caracter1sticas de esta tecnolog1a son> :n lengua!e para desarrollar p9ginas JS.F que son docu entos de te;to que describen c% o procesar una petici%n $ construir una respuesta. :n lengua!e de e;presiones para acceder a ob!etos del lado del servidor. )ecanis os para definir e;tensiones al lengua!e JS..
3.3.1.
:na p9gina JS. es un docu ento que contiene dos tipos de te;to> datos est9ticosF que pueden ser e;presados en cualquier for ato basado en te;to B#T)LF SMGF 0)L $ E)LCF $ ele entos JS. que per iten construir el contenido din9 ico. ('
La e;tensi%n reco endada para un fic?ero de una p9gina JS. es .!sp. La p9gina puede estar co puesta de un fic?ero que inclu$a otros fic?eros que pueden contener una p9gina JS. co pleta o un frag ento de una p9gina JS.. La e;tensi%n reco endada para un fic?ero de un frag ento es .!spf.
3.3.2.
:na p9gina JS. atiende peticiones co o un servletF por tantoF el ciclo de vida $ las capacidades est9n deter inadas por la tecnolog1a Java Servlet.
uc?as de
de la p9gina JS. est9 obsoleto respecto a la p9gina JS.. En caso afir ativoF el contenedor traduce la p9gina JS. a una clase Servlet $ co pila la clase. .or tantoF una de las venta!as de las p9ginas JS. sobre los servlets es queF durante el proceso de desarrolloF el proceso de construcci%n se reali6a auto 9tica ente.
Durante la fase de traducci%nF cada tipo de dato de la p9gina JS. se trata de for a diferente. Los datos est9ticos se traducen en c%digo que per ite incluir los datos en el flu!o de respuestaF ientras que los ele entos JS. se tratan de la siguiente anera>
Las directivas se utili6an para controlar co o el contenedor web traduce $ e!ecuta la p9gina JS.. Los ele entos de scripting se insertan en la clase servlet de la p9gina JS.. Si se utili6a el lengua!e de e;presiones se generan los par9 etros para lla ar al evaluador de e;presiones JS.. Los ele entos tipo jsp./set0(et1Property se convierten en lla adas a co ponentes Java<eans. 4todos de los
4,
Los ele entos jsp./include0forward1 se convierten en invocaciones a la A./ de Servlet. El ele ento jsp.plu(in se convierte en lengua!e de activaci%n de un applet. Las etiquetas personali6adas se convierten en lla adas al i ple ente cada etiqueta.
Java
Las fases de traducci%n $ co pilaci%n pueden producir errores que se observan s%lo cuando la p9gina es solicitada la pri era ve6F en este casoF el servidor devolver9 una JasperE;ception $ un ensa!e de la p9gina JS. $ la l1nea en la que ocurri% el error.
:na ve6 que la p9gina ?a sido traducida $ co piladaF el servlet generado sigue el ciclo de vida nor al de esta tecnolog1a> 1. Si no e;iste una instancia del servlet de la p9gina JS.F el contenedor carga la claseF crea una instancia $ la iniciali6a lla ando al ". Se invoca el 4todo !sp/nit.
Se pueden controlar diferentes par9 etros en la e!ecuci%n de una p9gina JS. utili6ando las directivas de p9ginaF co o las de control del buffer de salida o el ane!o de los errores. Este control de errores tiene precedencia sobre el indicado en el descriptor de despliegue de la aplicaci%n $ per ite indicar una p9gina de error a la que redirigir en caso de ocurra una e;cepci%n durante la e!ecuci%n.
En las p9ginas utili6adas co o p9ginas de error es ?abitual incluir la directiva> 234 pa(e is5rrorPa(e67true7 38. 3ue ?ace disponible un ob!eto de tipo javax.servlet.jsp.5rror+ata a la p9gina de anera que se pueda obtener $ ostrar infor aci%n sobre el error ocurrido.
41
3.3.3.
*rear contenido est9tico en una p9gina JS. es tan si ple co o escribirlo en una p9gina que consistiese Jnica ente en ese tipo de contenido. Este contenido est9tico puede ser e;presado en cualquier for ato de te;to> #T)LF 0)L $ E)L. Al principio de la p9gina se inclu$e una directiva con el atributo contentT$pe para indicar al navegador el tipo de contenido est9tico que debe interpretar. Ta bi4n se puede indicar la codificaci%n de la respuesta ?aciendo uso de esa is a directiva>
<%@ page contentType="text/html; charset= TF!"" %#
3.3.!.
Se puede crear contenido din9 ico accediendo a las propiedades de los ob!etos. Estos ob!etos pueden ser> / pl1citos> son los que crea el contenedor web $ contienen infor aci%n sobre la petici%nF p9ginaF sesi%n o aplicaci%n. Espec1ficos de la aplicaci%n> en uc?as ocasionesF el co porta iento de la aplicaci%n se ediante etiquetas
encapsula en ob!etos de negocio. Estos ob!etos pueden ser accedidos est9ndar de JS. o ?aciendo uso de scriptlets incrustados en la p9gina JS..
ulti?iloF es
necesario garanti6ar un acceso concurrente correcto a los ob!etos co partidosF de for a an9loga a co o se indic% con los propios servlets. La directiva is hreadSafe per ite indicar si las peticiones a un is o !sp pueden atenderse de for a concurrente Bvalor trueF que es el co porta iento por defectoC o secuencial Bvalor falseF que i plicar1a generar un servlet que i ple entase la interfa6 Sin(le hread)odelC.
El siguiente diagra a indica los distintos alcances que pueden ser aplicados a cualquier ob!eto creado> 4"
En los siguientes apartados de esta secci%n se ver9n los diferentes a los ob!etos $ co ponentesF generando as1 el contenido din9 ico.
3.3.#.
Los ele entos de scripting per iten utili6ar sentencias del lengua!e de progra aci%n Java en las p9ginas JS.. .or tantoF se podr9n reali6ar tareas co o acceder a ob!etosF definir gestionar el flu!o de control de la anera convencional en el lengua!e Java. 4todos $
En teor1aF el uso de scripting en las p9ginas JS. deber1a ser sustituido por el uso de etiquetas de librer1asF en particular la JSTLF pero en ocasiones se ?ace necesario utili6ar esta alternativa. AJn as1F se proporciona un ecanis o que pro?1be el uso de scripting en un grupo de JS. a trav4s de la inclusi%n de un ele ento scriptin(-invalid en el descriptor de despligue.
El lengua!e de scripting por defecto es JavaL aJn as1 se podr1a utili6ar otro lengua!eF para lo cual ?abr1a que incluir una directiva infor ando de esta circunstancia> 4(
Debido a que los ele entos de scripting i plican el uso de sentencias JavaF puede ser necesario i portar clases $ paquetes usados en la p9gina. .ara ello se dispone de una directiva de i portaci%n>
<%@ page import="%$lly!&$ali%ie'!classname( pac)agename*+" %#
Se pueden incluir tres bloques o ele entos para el uso de scripting> Declaraciones JS.> se usan para declarar variables $ sobreescribir los 4todos. Estas declaraciones se
incluir9n en la clase servlet generada a partir de la p9gina JS.F per itiendoF por e!e ploF 4todos jsp9nit $ jsp+estroy. Su sinta;is es>
<%, scripting!lang$age!'eclaration %#
Scriptlets JS.> per iten incluir cualquier frag ento de c%digo con sentencias Java v9lidasF que ser9n insertadas en el 4todo del servicio en el servlet de la p9gina JS.F segJn la ubicaci%n en la que se ?a$an definido en la propia p9gina. Su sinta;is es>
<% scripting!lang$age!expression %#
E;presiones JS.> se utili6an para insertar el valor de una e;presi%n basada en el lengua!e de scripting en el flu!o de datos que se devuelve al clienteF para lo que el valor de la e;presi%n se convierte a String. Su sinta;is es>
<%= scripting!lang$age!expression %#
3.3.2.
Las etiquetas son ele entos que pueden incrustarse en una p9gina JS. $ que per iten encapsular tareas recurrentes de todo tipo. Estas etiquetas est9n agrupadas en librer1as que pueden ser definidas por el usuario.
44
JavaServer .ages Standard Tag Librar$ BJSTLC es un con!unto de librer1as que inclu$en funcionalidades co unes a condicionales para uc?as aplicaciones JS.. JSTL inclu$e etiquetas para iteraci%nF anipulaci%n de docu entos E)LF ane!ar el flu!o de controlF
Antes de utili6ar un con!unto de etiquetas es necesario indicar en la p9gina JS. que se va a utili6ar una librer1a de etiquetas a trav4s de la directiva correspondiente.
<%@ tagli/ pre%ix="tt" 0tag'ir=/123!4.F/tags/'ir 5 $ri= 64 7 %#
Si se utili6a una :=/ absoluta no ser9 necesario incluir un ele ento taglib en el web.; l. EstoF por e!e ploF se suele ?acer con las JSTL est9ndares. Ade 9sF es necesario ?acer accesibles a la aplicaci%n web las clases que i ple entan la librer1a deter inada. Esto puede ?acerse inclu$4ndolas en el 0A= o estando disponibles en un directorio co Jn del servidor de aplicaciones en el que se desplegar9 la aplicaci%n. En el caso de las librer1as JSTL suelen estar presentes en el servidor.
3.3.4.
4-
que representa la uni%n del lengua!e de e;presiones ofrecido por JS. "., $ el creado para la tecnolog1a JavaServer 8aces.
Este lengua!e per ite incluir e;presiones que se evalJan de for a in ediata o apla6adaF acceder a ob!etos i pl1citos que apean los distintos alcances de una aplicaci%n webF utili6ar operadores $ palabras reservadas para definir el valor de la e;presi%nF etc.
Estas e;presiones pueden utili6arse directa ente en el cuerpo del docu ento o en tags que acepten e;presiones en sus atributos.
3.3.6.
omponentes Java<eans
Los co ponentes Java<eans son clases Java que pueden ser f9cil ente reutili6adas entre aplicaciones. *ualquier clase Java que siga unas ciertas convenciones de diseIo ser9 un co ponente Java<ean.
La tecnolog1as JS. soporta directa ente este tipo de co ponentes a trav4s de sus ele entos del lengua!eF per itiendo acceder a los beans definidos a trav4s de estas clases de una sencilla. anera
Las propiedades pueden ser de lectura $ escrituraF de s%lo lectura o de s%lo escritura. .ueden ser si plesF es decirF contienen un valor si pleF o inde;adasF representando un arra$ de valores. Las propiedades deben ser accesibles a trav4s de unos sinta;is>
9roperty=lass get9roperty?@ ; *** < set9roperty?9roperty=lass pc@ ; *** <
.ara indicar que la p9gina va a utili6ar un co ponente Java<ean se debe utili6ar un ele ento jsp.use:ean co o sigue>
Se debe indicar el alcance del ob!eto que puede ser> applicationF sessionF request o pa(eF si no e;istiese el bean se crear1a.
:na ve6 instanciado el beanF se puede acceder a sus propiedades utili6ando el ele ento jsp.setProperty para asignarles valor $ jsp.(etProperty para consultarlo. .ara consultar ta bi4n es posible utili6ar una e;presi%n EL.
*uando se est9n desarrollando beans para procesar datos de un for ularioF se puede seguir un patr%n de diseIo ?aciendo coincidir los no bres de las propiedades de los beans $ de los ele entos input del for ulario. Esto per ite que el si ple ente inclu$endo una sentencia del tipo> otor de JS. asigne todos los valores entrantes del for ulario que son parte del ob!eto de la petici%nF a las propiedades correspondientes en el bean
4+
Esto se consigue gracias a un proceso deno inado introspecci%nF que per ite a una clase e;poner sus propiedades ba!o petici%n. Esta introspecci%n es gestionada por el i ple enta a trav4s del no bresF se podr1a conseguir el apeo indicando individual ente cada propiedad> otor de JS. $ se ecanis o de refle;i%n de Java. Si no e;istiese una correspondencia de
Esta caracter1stica de creaci%n de beans por introspecci%n puede ser procesar for ularios #T)L>
u$ Jtil a la ?ora de
La p9gina JS. inicial per ite crear un bean a partir de un for ularioF en ocasiones se les suele deno inar R8or <eanRF $ lo coloca en la petici%nF que es enviada a un servletF este Jlti o puede recuperar el bean $ por tanto la infor aci%n del for ulario de una anera 9s sencilla.
El servletF dentro de sus responsabilidades de procesa ientoF puede JS. a la que se redirige el flu!o $ que per ite obtener la respuesta devuelta al cliente.
odificar las
propiedades del bean $ crear otros beans adicionales. Todos ellos podr1an ser pasados a una p9gina
4&
3.3.7.
E;isten diferentes
La directiva include> es procesada cuando la p9gina JS. se traduce al servletF por lo que su efecto es insertar el te;to contenido en otro fic?eroF $a sea est9tico o din9 icoF en la p9gina JS. con el include. La sinta;is de la directiva es>
Definir includes en el descriptor de despliegue para un grupo de p9ginas JS.. S%lo pueden colocarse al principio de la p9gina include-prelude o al final include-coda.
:tili6ar el ele ento jsp.includeF el cual es procesado cuando la p9gina se e!ecuta. Si inclu$e un recurso est9ticoF si ple ente se inserta su contenido en la p9gina JS. lla anteF incluido en la respuesta de la p9gina lla ante. ientras que si es din9 icoF la petici%n se env1a al recurso incluido que se e!ecutaF siendo el resultado
<jsp:incl$'e page="incl$'e'9age" /#
3.3.1>.
Al igual que en los servletsF ta bi4n se per ite transferir el control a otro co ponente a
4'
trav4s del ele ento> jsp.forward. Es necesario que no se ?a$a enviado ningJn dato al cliente antes del forwardF $a que de otro odo se obtendr9 una e;cepci%n.
<jsp:%orAar' page="/main*jsp" /#
Tanto en el caso de usar jsp.forwardF co o jsp.include, el contenido de la petici%n se pasa al !sp al que se redirige. Ade 9s es posible pasar nuevos par9 etros utili6ando el ele ento jsp.para%.
3.!.1.
$ntroduccin
:na ve6 vistas las principales caracter1sticas de las tecnolog1as Java Servlets $ JavaServer .agesF se est9 en disposici%n de plantear la arquitectura correspondiente a la capa web dentro de una aplicaci%n web co pleta.
En los co ien6os de la platafor a Java EEF al s%lo disponer de la tecnolog1a ServletF era a trav4s de esta tecnolog1a con la que se defin1an los servlets capaces de atender las peticiones llegadas desde la capa cliente. Al aparecer JS.F esta tecnolog1a se convirti% en la predo inante a la ?ora de i ple entar la capa webF principal enteF por el ?ec?o de proporcionar un enfoque natural para la creaci%n del contenido devuelto al cliente. 9s
Las arquitecturas basadas en la tecnolog1a JS. pueden dividirse en dos apro;i acionesF -,
lla adas arquitectura JS. )odelo 1 $ )odelo "F que difieren esencial ente en el lugar donde se reali6a la a$or parte del procesa iento de las peticiones.
3.!.2.
J,#? Modelo 1
En la arquitectura )odelo 1F la p9gina JS. por s1 solaF es responsable de procesar las peticiones entrantes $ responder al cliente. Todav1a e;iste separaci%n entre la presentaci%n $ el contenidoF porque todos los accesos a los datos son llevados a cabo ediante Java <eans.
Aunque el )odelo 1 deber1a ser perfecta ente apropiado para aplicaciones si plesF puede que no sea deseable para aplicaciones co ple!as. El uso indiscri inado de esta arquitectura nor al ente dirige al progra ador a escribir una cantidad u$ i portante de scriptlets de JS. de c%digo Java dentro de las p9ginas JS.F especial ente si ?a$ una cantidad significante de procesa iento de peticiones dentro de la i ple entaci%n. A pesar de que esto no podr1a parecer un proble a para los desarrolladores JavaF es real ente un aspecto i portante si las p9ginas JS. son creadas $ antenidas por diseIadores Blo cual es lo nor al en grandes pro$ectosC.
-1
3.!.3.
J,#? Modelo 2
La arquitectura )odelo " es una apro;i aci%n ?1brida para servir contenido din9 icoF $a que co bina el uso tanto de JS. co o de servlets. .or lo tantoF coge las venta!as de a bas tecnolog1asF usando JS. para generar la capa de presentaci%n $ los servlets para llevar a cabo las tareas de procesa iento. En esta arquitecturaF el servlet actJa co o controlador $ est9 encargado del procesa iento de las peticiones $ la creaci%n de los beans u ob!etos usados por el JS.F as1 co o de to ar las decisiones acerca de la pr%;i a p9gina JS. que se va a ostrar.
Es i portante darse cuenta de que no e;iste procesa iento en las p9ginas JS.. Ellas s%lo son responsables de e;traer los ob!etos o los beans que deber1an ?aber sido previa ente creados por el servletF $ de e;traer la infor aci%n din9 ica que estos ob!etos traen e insertarla en sus plantillas est9ticas. Esta apro;i aci%n reali6a una separaci%n 9s li pia entre la presentaci%n $ el contenidoF deli itando los roles $ las responsabilidades de los desarrolladores $ de los diseIadores 0eb.
@tra de las venta!as de esta apro;i aci%n es que la capa de control presenta un punto de entrada Jnico a la aplicaci%nF per itiendo una gesti%n del estadoF seguridad $ presentaci%n unifor e $ f9cil de antener. 9s
Aunque el )odelo " no no bra e;pl1cita ente los ele entos del )odeloDMistaD *ontroladorF en realidad se apro;i a uc?o a esta arquitectura. De ?ec?oF en uc?os 9 bitosF se
-"
Desde un punto de vista te%ricoF la arquitectura )odeloDMistaD*ontrolador B)M*C se basa en aislar la l%gica de do inio de la entrada $ la presentaci%n. .ara conseguir esto la aplicaci%n se divide en tres capasF cada una con unas responsabilidades $ tareas espec1ficas> El odelo representa los datos de negocioF con la l%gica de negocio u operaciones que odificaci%n de estos datos de negocio. El odelo notifica a los odelo. Ade 9sF odelo.
gestionan el acceso $ la
visores cuando ca bia $ per ite a estos visores consultar el estado del
per ite al controlador acceder a la funcionalidad de la aplicaci%n encapsulada en el La vista presenta el contenido del odelo. @btiene datos del
presentan los datos. Actuali6a la presentaci%n de los datos cuando ca bia el vista puede trans itir la entrada de un usuario al controlador.
El controlador define el co porta iento de la aplicaci%n. Atiende las peticiones de usuario $ selecciona las vistas para la presentaci%n. /nterpreta las entradas del usuario $ las en acciones a ser reali6adas por el son peticiones #TT. GET $ .@ST. :n controlador selecciona la vista a las interacciones del usuario $ el resultado de las operaciones del odelo. apea odelo. En una aplicaci%n webF las entradas del usuario ostrar basado en
(i)
*mplementando el controlador
En la platafor a Java EEF el controlador suele i ple entarse a trav4s de un clase servlet. Este servlet puede ser JnicoF de anera que se define un punto de entrada co Jn para todas las peticiones de la aplicaci%nF siguiendo as1 el patr%n 8ront *ontroller.
Este enfoque per ite concentrar la gesti%n de la seguridadF los errores $ la asignaci%n de recursos a las peticiones Bpor e!e ploF cone;iones a bases de datosCF sin e bargoF concentrar todas las peticiones en una Jnica clase i plica incluir una gran cantidad de procesa iento dependiente de la petici%n a tratarF gener9ndose un c%digo con una ba!a co?esi%n $ poco escalable $ antenible.
-(
.ara evitar estos proble asF pueden adoptarse diferentes soluciones que controlador.
10
,'itc@ A case
Si se tiene un nJ ero de tipos de peticiones relativa ente ba!oF cuatro o cincoF es posible i ple entar el controlador con una Jnica clase que dispone de un bloque switc?Dcase en el que en funci%n de un valorF se selecciona el tipo de petici%n a tratar.
El valor que identifica la petici%n puede ser pasado co o par9 etro a trav4s de un ca po oculto del for ulario que genera la petici%nF o puede venir codificado en la propia url de la petici%n.
En cualquier casoF se podr9 obtener un valor que indique el bloque case a e!ecutar que no deber1a i plicar una gran cantidad de l%gica.
20
#atrn
omando
Si el nJ ero de tipos de peticiones es alto o requieren de una gran cantidad de l%gicaF se suele utili6ar el patr%n *o ando. Este patr%n i plica la definici%n de una clase espec1fica para cada petici%n o acci%nF que presenta una interfa6 unifor e a trav4s de la i ple entaci%n de un el co ponente de la vista a cargar. 4todo cu$a invocaci%n da co o resultado la e!ecuci%n de la l%gica de negocioF $ cu$o resultado deter ina
-4
Al igual que en el enfoque switc?DcaseF es necesario indicar al controlador que co ando es el que debe e!ecutarse a consecuencia de una petici%n deter inada. .ara elloF siguen siendo v9lidos los ecanis os de paso de par9 etros o codificaci%n en la url de la petici%n. En funci%n del valor de la acci%n a reali6arF se instanciar9 la clase del co ando a e!ecutarF nor al ente ?aciendo uso de una 89brica.
La siguiente ilustraci%n
3.!.!.
Apac@e ,truts
Apac?e Struts es un fra eworS de c%digo abierto para el desarrollo de aplicaciones web Java EE.
Su ob!etivo es crear un entorno de desarrollo de aplicaciones con un alto grado de escalabilidad $ antenibilidad. .ara elloF i ple enta el patr%n de diseIo )odeloDMistaD --
*ontrolador a trav4s del uso de tecnolog1as est9ndarF co o ServletsF Java<eansF =esource<undlesF E)LF librer1as de etiquetasF entre otrasF proporcionando al desarrollador un arco de traba!o con un con!unto de clases $ utilidades que per iten $ facilitan la creaci%n de aplicaciones web.
(i)
Action"ervlet
Struts proporciona un controlador a trav4s de la clase ;ctionServletF que ?ereda de HttpServlet. Esta clase se instancia al iniciar la aplicaci%n $ carga toda la infor aci%n sobre los apeos B;ction)appin(C que deter inan el control de flu!o. De esta de aneraF todas las peticiones que llegan desde el cliente son recibidas por el controlador ;ctionServletF $ en base a la infor aci%n apeos reali6a una serie de actividades pasando el flu!o de control al co ponente adecuado Bnor al ente un ;ctionC.
-7
(ii)
Action+apping
;ction)appin(. Esta clase encapsula infor aci%n de configuraci%n que nor al ente es obtenida a trav4s del procesa iento de un E)L.
Vfor DbeansW> contiene la definici%n de los beans de for ulario B ;ction*or%C que podr9n ser instanciados en la aplicaci%n. VglobalDforwardsW> define instancias de la clase ;ction*orward que pueden utili6arse a nivel global para dirigir el flu!o de la aplicaci%nF identific9ndolas a trav4s de un no bre l%gico. VactionD appingsW> per ite definir las acciones del siste a en base a un con!unto de propiedades> t$pe> no bre co pleto de la clase que i ple enta la acci%n. na e> no bre del bean de for ulario que se va a usar en esta acci%n. pat?> define la ruta de la petici%n que i plica e!ecutar la acci%n. validate> per ite indicar si se deben reali6ar las validaciones previas a la e!ecuci%n. forward> para cada acci%n se pueden definir posibles ca inos de flu!o.
El arc?ivo E)L suele lla arse strutsDconfig.; lF aunque es posible utili6ar variosF que pueden definir %dulos o do inios distintos dentro de la aplicaci%n.
-+
(iii)
Action,orm
:na de las principales tareas en el desarrollo de una aplicaci%n web es ser capa6 de gestionar la entrada del usuarioF ?ec?a nor al ente utili6ando etiquetas de for ularios #T)L. Struts proporciona la clase ;ction*or% co o ecanis o de captura $ validaci%n de la entradaF 9s p9ginas. representando cada clase que e;tienda de ;ction*or% un for ulario de una o
Las clases ;ction*or% no requieren de la i ple entaci%n de ningJn definen propiedades $ sus 4todos de acceso. De esta
4todo espec1ficoF
pero suelen seguir las convenciones de codificaci%n de los co ponentes Java<eansF es decirF aneraF el fra eworS de Struts es capa6 de asignar los par9 etros de la petici%n a las propiedades del bean de for ularioF a trav4s de introspecci%nF validarlos $ si todo es correctoF pasarlos a la acci%n Bclase ;ctionC que debe tratar la petici%n.
necesario indicarlo en la definici%n del ;ction)appin( de la acci%n. *uando el flu!o de control pase a la acci%nF 4sta tendr9 disponible una instancia del ;ction*or% indicado con la infor aci%n de los par9 etros introducida por el usuario. La acci%n puede recuperar esta infor aci%n para interaccionar con el odelo e incluso puede odificarla co o consecuencia de su e!ecuci%nF $a ecanis os $ etiquetas ?abituales de queF al seguir nor al ente las convenciones Java<eansF el ;ction*or% puede ser utili6ado para pasar infor aci%n a la vistaF la cual acceder9 a trav4s de los los beans.
por el controlador despu4s de que se ?a$an rellenado las propiedades del bean $ antes de pasar el 4todo tiene una i ple entaci%n por defecto que devuelve nullF que indica que no se ?an producido errores de validaci%n $ que se puede invocar a la acci%nL el desarrollador puede sobreescribirlo reali6ando las validaciones que considere apropiadas $ devolviendo un listado de ;ction5rrors en caso de que se encuentren proble as.
-&
:na apro;i aci%n co Jn es reali6ar validaciones iniciales usando el luego ane!ar la validaci%n de la l%gica de negocio desde el ob!eto ;ction.
4todo validate, $
Struts proporciona el plugDin Struts Malidator que contiene un con!unto de reglas de validaci%n b9sicas $ que puede ser a pliadas con facilidad.
/iv0
Action
La clase ;ction es la encargada de procesar las solicitudes. El controlador deber9 evaluar la infor aci%n sobre la petici%n $ en base a la infor aci%n sobre los es la que debe tratarlaF invocando al apeosF decidir qu4 clase ;ction 4todo recibe tanto los 4todo execute de la clase. Este
ob!etos que representan la petici%n $ la respuesta BHttpServletRequest $ HttpServletResponse para una petici%n ?ttpCF co o un ob!eto ;ction*or% con la infor aci%n de los par9 etros pasados por el usuario $ el ob!eto ;ction)appin( que le facilitar9 la tarea de reenv1o del control a otra acci%n o a un co ponente de la vista.
T1pica enteF en el
Se valida el estado actual de la sesi%n del usuarioF co probando si se ?a autenticado correcta enteL sinoF podr1a redirigirse a una p9gina que le per ita introducir sus credenciales u otra infor aci%n de autenticaci%n. Esto podr1a ocurrir porque un usuario intente entrar Xen el edioX de una aplicaci%nF o porque la sesi%n ?a e;pirado $ el ediante filtros Binterfa6 contenedor de servlet cre% una nueva. En otras ocasionesF la responsabilidad sobre la autenticaci%n $ autori6aci%n de la aplicaci%n se lleva a cabo !ava;.servlet.8ilterC que pueden apo$arse en alguna A./ o fra eworS de seguridad. Se pueden reali6ar validaciones sobre la infor aci%n que viene en la petici%nF $a sean co ple entarias o no a las que se ?acen a trav4s del ;ction*or%. Si se encuentra un proble aF se pueden al acenar las claves de los puedan corregir los errores. -' ensa!es de error apropiados co o un atributo de la petici%nF $ reenv1ar el control de vuelta al for ulario de entrada para que se
:na ve6 ?ec?as todas la validacionesF se reali6a el procesa iento requerido por la acci%nF lo cual suele i plicar co unicarse con la capa de aplicaci%n. A partir de la infor aci%n recuperada del odeloF se pueden actuali6ar los ob!etosF odelo que i ple enta la l%gica de la
nor al ente de tipo Java<eanF que ser9n utili6ados por el co ponente de la vista para ostrar el resultado al usuario. Estos ob!etos pueden tener un 9 bito de solicitud o de sesi%nF dependiendo de cu9nto tie po se necesite antener estos 1te s disponibles.
8inal enteF $ ta bi4n en base al resultado obtenido en el procesa ientoF la acci%n devuelve un ob!eto ;ction*orward que identifica el co ponente de la vista al que se le debe pasar el control. .ara facilitar la deter inaci%n del ;ction*orward a devolver se puede ?acer uso de la infor aci%n de apeo disponible en el ;ction)appin( pasado al 4todo execute.
Es necesario tener en cuenta algunas consideraciones a la ?ora de codificar clases de acci%n> El servlet controlador crea un s%lo e!e plar de cada clase ;ctionF $ la usa para todas las solicitudes. .or tantoF deber9 estar codificada para operar correcta ente en un entorno ultiDt?read B ulti?iloCF al igual que si se estuviese codificando un servlet. #a$ dos principios funda entales> :tili6ar sola ente variables locales a los 4todosF $ no variables de instancia en la clase
;ctionF $a que las variables locales se crean en una pila que es asignada por la JM) a cada ?ilo individual B?a$ un ?ilo por cada petici%nC. Si es necesario pasar infor aci%n entre los 4todos de la claseF se deber1an pasar c% o par9 etros. Si se utili6an variables de instancia ?abr9 que prever un posible acceso concurrente. *o o regla generalF asignar recursos Bco o las cone;iones a una base de datosC $ antenerlos a trav4s de las solicitudes del is o usuario Bguard9ndolos en la sesi%nC puede causar proble as de escalabilidad. Es conveniente liberar esos recursos antes de reenviar el control al co ponente de la vista apropiado $ si vuelven a ser necesariosF se reasignar9n en la siguiente solicitud. Durante las tareas reali6adas en la acci%n se pueden obtener e;cepcionesL es i portante capturarlas $ tratarlas adecuada enteF $a que si se lan6asen podr1an llegarle al usuario de la
7,
aplicaci%n directa ente. Ade 9sF en el trata iento es i portante liberar cualquier recurso que pueda ?aber quedado asignado.
/v0
Aportaciones a la vista
El fra eworS de Struts utili6a las tecnolog1as b9sicas de Java EE para la vistaF tanto JavaServer .ages co o librer1as de etiquetasF a las que aIade un con!unto de utilidades $ co ponentes que van dirigidos a facilitar el desarrollo de esta capaF entre los que destacan> )ensa!es internacionali6ados> to ando co o base las clases de internacionali6aci%n $ locali6aci%n de la platafor a Java B<ocaleF Resource:undleF PropertyResource:undleF )essa(eResourceCF Struts per ite definir arc?ivos de los co ponentes de la vista para ensa!es pueden ser utili6ados desde ostrar al usuario la infor aci%n en el lengua!e escogido.
Librer1a de etiquetas> Struts inclu$e un con!unto de etiquetas personali6adas para JS. que a$udan a los desarrolladores tanto en la gesti%n $ acceso a los beans Binclu$endo los ;ction*or%sCF la creaci%n de for ularios basados en etiquetas #T)L o E#T)L Ben los que se pueden incluir ensa!es internacionali6adosCF $ la gesti%n del flu!o a trav4s de etiquetas de l%gica e iteraci%n. *o posici%n de p9ginas con Tiles> Struts proporciona un siste a de plantillas que per ite construir la vista co binando varios ele entos o RtilesR.
(vi)
-e()est &rocessor
.ara finali6arF es conveniente recordar el flu!o de control que i plica el uso del patr%n )odeloDMistaD*ontrolador $ su i ple entaci%n presentando el co ponente Request Processor. ediante Struts. .ara elloF la e!or anera es
El Request Processor se encarga de controlar los pasos de procesa iento que atraviesa una 71
petici%n entrante. .ara ello sigue el patr%n de diseIo *?ain of =esponsabilit$ que le da una gran fle;ibilidad $ capacidad de ser personali6adoF aIadiendo nuevos pasosF $ eli inando o el orden de los e;istentes. A continuaci%nF se ?an e;cluido algunos para si plificar la e;posici%nC> Seleccionar la infor aci%n sobre locali6aci%n de la petici%n. Al acenar la :=/ de la petici%n. /ncluir cabeceras en la respuesta Bprag aF cac?eDcontrolF e;piresF etc.C. Seleccionar el tipo de contenido $ la codificaci%n de la respuesta BcontentDt$peF c?aracterD encodingC. Deter inar el ;ction)appin( asociado con la ruta de la petici%n. Si el apeo tiene infor aci%n de roles que lo pueden e!ecutarF co probar que el usuario odificando uestra la secuencia de pasos por defecto Ben la que se
actual dispone de esos roles. /nstanciar o recuperar el ;ction*or% asociado a la acci%n seleccionada. =ellenar las propiedades del ;ction*or% con los par9 etros que vienen en la petici%n. =eali6ar la validaci%n del ;ction*or%. Si la validaci%n fallaF se vuelve a la p9gina de entrada infor ada en el apeo. 4todo de e!ecuci%nF pasando la infor aci%n de
apeo B;ction)appin('.
La acci%n devuelve un ;ction*orward que per ite al RequetProcessor redirigir el flu!o al co ponente adecuadoF nor al ente de la vista.
:n posible paso a aIadir ser1a el procesador de ilesF que es necesario e!ecutar si esta os utili6ando este co ponente en nuestra aplicaci%n.
(vii)
7"
En los arc?ivos de configuraci%n tipo strutsDconfig.; l se le indica al controlador de Struts c% o debe procesar cada una de las peticiones que le llegan. .ara definir qu4 peticiones le van a llegar al controlador es necesario incluir en el descriptor de despliegue de la aplicaci%n Bweb.; lC su declaraci%n co o servlet.
En la declaraci%n se indica la clase que i ple enta el controlador de Struts B ;ctionServletC $ los fic?eros de configuraci%nL ade 9sF se indica que este servlet debe cargarse al iniciar la aplicaci%nF o ento en el que recupera toda la infor aci%n del apeo de dic?os fic?eros.
En cuanto a las peticiones que ser9n procesadas por el controlador de StrutsF se inclu$e una declaraci%n con el patr%n de urls a asignarF t1pica ente Y.doF aunque podr1a ser cualquier otro.
/viii0
,truts 2
Struts 1 consigui% convertirse en el est9ndar de facto para el desarrollo de aplicaciones web Java EEF sin e bargoF con el tie po surgi% la necesidad de crear una nueva generaci%n del fra eworS cu$o principal ob!etivo era b9sicas de Struts 1F e!orar su facilidad de uso. As1F a partir del pro$ecto 0eb0orS !unto con la versi%n inicial del fra eworS se desarrolla Struts "F que sigue las directrices e!orando su i ple entaci%n del patr%n )M*.
9s independientes posibles tanto del propio fra eworS de 4todo execute que reciba la
Struts co o de la A./ de Servlet. Esto se traduce a queF por e!e ploF las clases de acci%n $a no est9n obligadas a ?eredar de ;ctionF ni ta poco deben incluir un infor aci%n de la petici%n $ la respuesta ?ttpF ni un Action8or F $a que la captura de la entrada puede ?acerse a trav4s de las propiedades de la propia clase que actJa co o acci%nL por tantoF 7(
cualquier
?abitual ente se inclu$e un execute sin par9 etros. Ade 9sF para el interca bio de infor aci%n con la vistaF en lugar de los ?abituales espacios de ob!etos de la A./ Servlet BapplicationF sessionF requestF pageCF Struts " reco ienda el uso de MalueStacS para independi6ar as1 las acciones de la tecnolog1as Servlet $ facilitar el acceso a la infor aci%nL en cualquier casoF los alcances ?abituales siguen estando disponibles para su uso en el conte;to de la acci%n BAction*onte;tC.
@tras aspectos a reseIar son la inclusi%n del lengua!e de e;presiones X@b!ect Grap? Kotation LanguageX B@GKLCF con el prop%sito de facilitar el acceso a la infor aci%n desde la vistaF as1 co o la conversi%n de tiposF o un nuevo fra eworS de validaci%n EworSF aunque se sigue conservando la posibilidad de ?acer una validaci%n tradicional a trav4s de la i ple entaci%n de un 4todo validate en la acci%n.
3.".1.
$ntroduccin
A!a; es el acr%ni o de ;synchronous =avaScript ;nd >)<, constitu$endo una t4cnica o
odelo interacci%n que e plea diferentes tecnolog1as de la 0eb con el ob!etivo de interactividad $ usabilidad de las aplicaciones.
e!orar la
A!a; per ite reali6ar una petici%n desde el navegador al servidor en segundo planoF es decirF
74
de for a as1ncrona $ sin interferir en la visuali6aci%n $ el co porta iento de la p9gina que se est9 ostrando. Esta petici%n nor al ente i plica un interca bio de datos con el servidorF cu$a respuesta recibida en el navegador suele causar ca bios en la infor aci%n que tendr9 co o resultado una odificaci%n en el estado del cliente. ostrada al usuario. .or tantoF una acci%n en el cliente provoca una co unicaci%n con el servidorF transparente al usuarioF
A continuaci%n se indican las tecnolog1as que ?abitual ente se utili6an para i ple entar la t4cnica A!a;> Lengua!es de infor aci%n. El Docu ent @b!ect )odel BD@)C accedido ediante el lengua!e de scripting para ostrar arcado co o #T)L o E#T)LF $ *SS para la presentaci%n de la
e interactuar din9 ica ente con la infor aci%n presentada. :n ob!eto E)L#ttp@b!ect co o ve?1culo de la co unicaci%n entre cliente $ servidor. E)L o JS@K BJavaScript @b!ect KotationC co o est9ndar para el interca bio de datos. JavaScript co o lengua!e de scripting que per ite la colaboraci%n del resto de las tecnolog1as utili6adas.
El E)L#ttp@b!ect es uno de los ele entos clave en A!a;F siendo una interfa6 que per ite la reali6aci%n de peticiones #TT. desde un navegador. Esta interfa6 es i ple entada de for a integrada por los principales navegadores del ercadoF peroF aunque se ?a desarrollado una especificaci%n est9ndarF pueden e;istir diferencias en la i ple entaci%n concreta de cada uno.
La clase que i ple enta E)L#ttp@b!ect contiene un con!unto de atributosF petici%nF al segui iento de su estado $ a la recuperaci%n del resultado devuelto.
4todos $
eventos que per iten gestionar el di9logo con el servidorL dando soporte a la creaci%n $ env1o de la
La siguiente ilustraci%n
ediante A!a;>
7-
1. :n usuario genera un evento en el clienteF provocando la invocaci%n de una funci%n Javascript. ". La funci%n Javascript crea $ configura un ob!eto E)L#ttp=equestF especificando la funci%n que recoger9 el resultado BcallbacSC. (. Se reali6a una petici%n as1ncrona al servidor a trav4s del ob!eto E)L#ttp=equest. 4. El servidor web procesa la petici%n $ devuelve el resultadoF en este caso en E)L. -. Al recibir la respuestaF el ob!eto E)L#ttp=equest invoca a la funci%n Javascript encargada de procesar el resultado. 7. La funci%n de procesa iento anali6a la respuesta recibida $ nor al ente infor aci%n ostrada al usuario a trav4s del D@). odifica la
Entre los posibles usos de A!a; se pueden citar> la validaci%n de datos en servidor en tie po realF el autoco pletado de ca posF la carga de datos ba!o de andaF la recarga auto 9tica de infor aci%n de la p9ginaF etc.
77
3.".2.
SegJn lo visto ?asta el o entoF todas las tecnolog1as que utili6a A!a; pertenecen al lado cliente o son for atos de interca bio de infor aci%n entre cliente $ servidor. Sin e bargoF queda claro que uno de los aspectos 9s i portantes es el procesa iento en servidor de la petici%n #TT. que se genera a trav4s del ob!eto E)L#ttp=equest. .ara un servidorF el ane!o de una petici%n A!a; no es diferente al de cualquier otra petici%n. .or tantoF en un entorno Java EE se pueden utili6ar las tecnolog1as de procesa iento de peticiones convencionalesF co o son Java ServletsF JavaServer .ages o JavaServer 8aces. A partir del uso de las tecnolog1as de servidor Java EE disponiblesF pueden identificarse diferentes estrategias de diseIo puestas a disposici%n del desarrolladorF de anera que pueda elegir la que considere 9s adecuada. A continuaci%n se e;ponen tres de las 9s ?abituales> Tecnolog1as base> en la que el desarrollador utili6a directa ente las tecnolog1as de A!a;F encarg9ndose de la codificaci%n de las funciones JavascriptF el ane!o del ob!eto E)L#ttp=equestF teniendo en cuenta sus peculiaridades en funci%n del navegadorF $ los aspectos de presentaci%n de la infor aci%nF accediendo al D@). En el lado servidorF codifica el co ponente webF que ?abitual ente ser9 un ServletF para que reciba la petici%n $ genere la respuesta. :so de una biblioteca Javascript> en lugar de escribir todo el c%digo del lado clienteF es posible apo$arse en alguna biblioteca Javascript co o j?uery, Prototype o @ahooA Bser 9nterface <ibrary "@B9'F que per iten liberar al desarrollador de las tareas de ba!o nivelF co o la gesti%n del ob!eto E)L#ttp=equest $ su co patibilidad con el navegadorF o el procesa iento de la respuesta recibidaF reduciendo as1 el c%digo necesario para i ple entar una funcionalidad A!a; en la aplicaci%n. :so de un fra eworS de co ponentes preparados para A!a;> en particularF en la platafor a Java EE se dispone de la tecnolog1a de co ponentes JavaServer 8acesF que puede ser e;tendida de anera que se creen co ponentes que inclu$an funcionalidades A!a;F co o los que proporciona el fra eworS /*Efaces o el =ic?8aces. Estos co ponentes ;jaxenabled inclu$en todo el c%digo necesario para i ple entar la funcionalidad A!a;F presentando una interfa6 li pia $ reutili6able al desarrollador final que puede usarlos sin necesidad de conocer los detalles.
7+
!.
apa de negocio
'.1. *ntrod)ccin
En la capa de negocio o
de negocio de la aplicaci%n. Esta l%gica de negocio es la que representa la funcionalidad espec1fica de un do inio particularF co o un siste a bancarioF un sitio de co ercio electr%nicoF un gestor de inventario $ fabricaci%nF etc. .or tantoF supone la capa 9s espec1fica del siste a a desarrollar.
La l%gica de negocio debe per itir representar tanto el estado del siste a co o su co porta iento. As1F en las etodolog1as de an9lisis $ diseIo orientado a ob!etos el siste a se odela a trav4s de un con!unto de ob!etos que interaccionan entre s1 $ que se caracteri6an por su claseF su estado Bele entos de datosC $ su co porta iento. Aunque el paradig a de orientaci%n a ob!etos aboga por encapsular en la clase tanto el estado co o el co porta ientoF es ?abitual que al ob!etos o co porta iento del is o. is a entidad o
Estado del siste a> nor al ente se utili6an un con!unto de clases $ sus propiedadesF de anera que los valores de las propiedades son los que representan el estado del siste a en un o ento dado. .or e!e ploF en un siste a de co pra por internetF el estado se podr1a o ento. )ientras que puede e;istir infor aci%n de estado que no es antenga por un periodo de tie po largoF es ?abitual encontrar siste as representar por un carro de la co pra con unos art1culosF unas cantidades $ unos precios en un deter inado necesario que se
que necesitan ?acer persistente esta infor aci%nL en este Jlti o casoF ser9 necesario co unicar los ob!etos de estado con el siste a de al acena iento a trav4s de la capa de persistencia. *o porta iento del siste a> la l%gica funcional $ las reglas de negocio del siste a se representan a trav4s de invocaciones a 4todosF que pueden ubicarse en las is as clases utili6adas para representar el estado del siste aF o co o se indic% anterior enteF en un 7&
con!unto de clases dedicadas a reali6ar esta l%gica. En este Jlti o casoF suele ser necesario pasar los ob!etos de estado del siste aF que van a negocioF co o argu entos de dic?os o anipularse en los 4todos de la l%gica de a$or 4todos. Los ob!etos de estado contendr9n una
enor cantidad de l%gica dependiendo del do inio $ alcance del siste a espec1fico.
La
is a l%gica de negocio debe poder ser utili6ada con independencia de que la capa de
presentaci%n se base en un cliente ligero BnavegadorC o pesado Baplicaci%n de escritorioCF o del siste a o tecnolog1a que proporcione la persistencia. .or tantoF debe ser diseIada siguiendo criterios de alta co?esi%n $ ba!o acopla iento respecto del resto de capas de la aplicaci%n. Ade 9sF suele ser ?abitual encontrar siste as cu$a l%gica de negocio puede requerir de cierta fle;ibilidad en su configuraci%n o la capacidad de ser a pliados sin perder sus calidades de servicio BescalabilidadC. .ara cu plir estas posibles e;pectativasF se suele ?acer uso de los patrones de diseIoF tanto en la capa de odelo co o en el resto de capas de la aplicaci%n. 9s ?abitual ente en la i ple entaci%n de la l%gica de
negocio es el Service <ayer o capa de servicio. Este patr%n i plica el estableci iento de una capa de negocio que presenta el con!unto de operaciones disponibles en la aplicaci%nF coordinando su respuesta $ co porta iento transaccionalL actuando as1 co o una interfa6 de acceso a las funcionalidades de la aplicaci%n con independencia del cliente. La capa de servicio suele estar co puesta por ;pplication Services o servicios de aplicaci%nF que son co ponentes que encapsulan en sus operaciones la l%gica de negocio de la aplicaci%n. Estos co ponentes interaccionar9n con el resto de co ponentes de la capa de negocio para i ple entar la funcionalidad requerida.
!.2.1.
7'
.@J@ es el acr%ni o de .lain @ld Java @b!ect. Este no bre se utili6a para enfati6ar que se trata de un ob!eto Java ordinarioF es decirF no est9 ligado a dependencias de ningJn fra eworS o co ponente deter inadoF especial enteF no es un Enterprise Java<ean.
p$/lic class =lase9>8> exten's javax*servlet*http*DttpServlet ; E p$/lic class =lase9>8> implements javax*ej/*2ntity3ean ; E
:n Java<ean es un .@J@ que sigue una serie de convenciones de codificaci%nF $a e;plicadas al e;poner la arquitectura de co ponentes Java<eansF $ que son> Disponer de un constructor pJblico por defectoF que facilita la instanciaci%n del ob!eto. *ontener propiedades que deben ser accesibles a trav4s de que siguen una est9ndar de no brado. Deben ser seriali6ables. 4todos de lectura $ escrituraF $
Estas convenciones ?acen que los Java<eans tengan una serie de caracter1sticas esperablesF pero no los ?acen dependientes de ningJn fra eworS o tecnolog1a espec1fica.
En consecuenciaF se trata de clases que presentan una codificaci%n sencilla $ un alto grado de reutili6aci%nF $a que no dependen de fra eworSs espec1ficos. Ade 9sF per iten acceder a la l%gica de negocio de la aplicaci%n en un entorno local $ con un alto rendi iento de e!ecuci%nF $a que se consideran ob!etos ligerosF por no i plicar su procesa iento la necesidad de e!ecutar servicios adicionales.
+,
A partir de la definici%n de estado del siste aF e;puesta en la introducci%nF es f9cil inferir que la arquitectura de co ponentes Java<eans es una clara candidata a representarloF pues se basa en ob!etos con un con!unto de propiedades $ sus 4todos de acceso Blectura $ odificaci%nC.
.or su parteF la l%gica de negocio podr9 alo!arse bien !unto con la infor aci%n del estado en los Java<eansF o ta bi4n en clases .@J@ adicionales. Estar9 en uno u otro lado dependiendo en gran edida del do inio espec1fico del proble a. .or e!e ploF si es una l%gica que tiene que ver ientras que si afecta a 9s de un ob!eto de estado o no es intr1nseca a la naturale6a de directa ente con la naturale6a de una entidad o beanF estar9 en el propio Java<ean que lo i ple enteF un bean sino nor al. Si la aplicaci%n utili6a el patr%n Service <ayer los co ponentes de la capa de servicio ser9n nor al ente clases .@J@F cu$os 4todos representar9n las operaciones del siste a. 9s bien a la aplicaci%n o funcionalidad generalF se encontrar9 en una clase .@J@
!.2.2.
Apro;imacin EJ<
:n Enterprise bean o bean e presarial es un co ponente Java EE que i ple enta la tecnolog1a Enterprise Java<eans BEJ<C. Estos beans se despliegan en el contenedor de EJ<F dentro del servidor e presarialF que proporciona servicios a nivel de siste aF co o seguridad $ transacciones a estos beansF facilitando su r9pida construcci%n $ despliegue.
Estos beans son co ponentes de la capa de negocioF por tanto en su codificaci%nF ?ec?a en lengua!e JavaF encapsulan la l%gica de negocio de la aplicaci%n.
Lo que diferencia a esta apro;i aci%n de la .@J@DJava<eansF es el con!unto de servicios que aporta el contenedor EJ<F que facilitan que el desarrollador se centre en la i ple entaci%n de +1
la l%gica de negocio de!ando otras cuestiones ?ori6ontales al contenedorF $ sobre todoF proporcionan un ecanis o de acceso re oto a la l%gica de negocio.
A pesar de estas venta!as a la ?ora de desarrollar la l%gica de negocio con esta apro;i aci%nF el uso de la tecnolog1a EJ< puede tener efectos negativos en el rendi iento respecto a la basada en .@J@DJava<eansF $a que estos Jlti os se consideran co ponentes tantoF es necesario especificar una serie de necesidades o a optar por esta apro;i aci%n> La aplicaci%n debe ser escalable. La tecnolog1a EJ< per ite la distribuci%n de sus co ponentes en Jltiples 9quinas de for a transparente al usuarioF por lo que si se incre enta el nJ ero de co ponentes o de usuarios es factible incre entar el nJ ero de servidores utili6ados. La l%gica de negocio debe poder ser accesible desde Jltiples ubicaciones re otas $ 9s ligeros en su e!ecuci%n. .or otivos que pueden llevar al desarrollador
.or tantoF la tecnolog1a EJ< per ite co partir la l%gica de negocio de for a re otaF segura $ con independencia del nJ ero $ tipo de usuarios o clientes.
(i)
10
,ession <ean
:n Session <ean o bean de sesi%n encapsula l%gica de negocio que puede ser utili6ada por un cliente a trav4s de la invocaci%n de los referencia local o re otaF o por 4todos del beanF a los que tendr9 acceso a trav4s de una edio de un servicio web.
State*ul Session Beans> son beans de sesi%n con estadoF siendo este estado el con!unto de valores de las variables de la instancia utili6ada. El estado est9 asociado a un Jnico clienteF es decirF por cada cliente que acceda a un bean de sesi%n con estado se tendr9 una instancia dedicadaF por lo que a veces se le deno ina estado conversacional. *uando el cliente ter ina su sesi%nF el bean ter ina su asociaci%n $ se libera la infor aci%n de sesi%n. )antener el estado conversacional per ite que un bean de sesi%n se pueda utili6ar para reali6ar un flu!o de traba!o o escenario. Stateless Session Beans> un bean de sesi%n sin estado no con el clienteF por tantoF cuando se invoca un s%lo se pueden ser utili6adas por antiene un estado conversacional
antiene durante dic?a invocaci%n. Las instancias de beans de sesi%n sin estado Jltiples clientesF por lo que presentan una
cuando se incre enta el nJ ero de usuarios. Ade 9sF al ser sin estado pueden i ple entar un servicio webF lo cual no es posible en un bean con estado. Sin+leton Session Beans> este tipo de beans de sesi%n i ple entan el patr%n SingletonF lo que significa que s%lo se instancian una ve6 por aplicaci%n. Es decirF es si ilar a un bean sin estadoF pero en lugar de e;istir varias instanciasF probable ente en un poolF que atienden a los clientesF en este caso e;iste una Jnica instancia para todos los clientesF cu$o estado es antenido entre las invocaciones de sus 4todosF por lo que es co partido por todos. Se crear9 la instancia al iniciarse la aplicaci%n $ se eli inar9 cuando 4sta ter ineF por lo que puede ser utili6ado para reali6ar tareas de iniciali6aci%n $ finali6aci%n de la aplicaci%n. Al igual que los bean sin estadoF puede i ple entar un servicio web.
En cualquier casoF un bean de sesi%n no es persistenteF es decirF sus datos no se al acenan en una base de datos.
20
MessageACriven <ean
ensa!es de
Estos
ensa!es pueden ser enviados desde cualquier co ponente Java EE> una aplicaci%n clienteF ensa!es ensa!es.
otro enterprise beanF un co ponente webF etc.F o ta bi4n desde un siste a que genere J)S u otro tipo de
ensa!es es
u$ si ilar a un bean de sesi%n sin estadoF aunque se ensa!es se le env1a un ensa!e a un cola ensa!es
diferencian en la for a en la que son accedidosF $a que un bean de sesi%n es accedido a trav4s de ientras que a un bean dirigido por antenida en el servidor. Ade 9sF los bean de sesi%n reparten la l%gica de negocio en un con!unto 4todos que se pueden invocar individual enteF ientras que los bean dirigidos por reciben los ensa!es de la cola en un Jnico punto de entradaF que se encarga de procesarlos en base
(ii)
ensa!e no definen interfaces ni vistas sin interfa6 para el acceso de los clientes.
encion% anterior enteF la l%gica de negocio est9 disponible a trav4s de los 4todos se publican al cliente a trav4s de una vista sin interfa6F que 4todos deter inados. En cualquier casoF a bos ecanis os 4todos pJblicos de la clase que i ple enta el beanF o a trav4s de una interfa6 de
A la ?ora de i ple entar un beanF es necesario indicar el tipo de acceso per itidoF que +4
10
Acceso Docal
Si el bean puede ser utili6ado por otro bean o co ponente que se encuentra en la aplicaci%n que el accedidoF ser9 necesario proveer de acceso local. Esto puede ?acerse vista sin interfa6 del beanF o proporcionando una interfa6 de negocio que contenga los negocio $ del ciclo de vida del beanF $ negocio puede ser local o re ota.
is a
ediante la 4todos de
El cliente podr9 acceder a la vista sin interfa6 o a la interfa6 de negocio local por in$ecci%n de dependencias o por JKD/.
20
Acceso =emoto
accedidoF es necesario disponer de un acceso re oto. En este caso no es posible ?acer uso de una vista sin interfa6F sino que debe utili6arse una interfa6 de negocio re ota 4Re%oteF en la queF de anera an9loga al acceso localF puede obtenerse una referencia a trav4s de in$ecci%n de dependencias o JKD/.
30
En ocasiones es necesario que la l%gica de negocio est4 disponible re ota enteF con independencia del tipo de cliente utili6ado. En este casoF es necesario utili6ar los Servicios web. :n bean de sesi%n sin estado puede ser utili6ado co o servicio webF de for a que sus 4todos de negocio ser9n utili6ados co o puntos de acceso o RendpointsR del servicio. El cliente utili6ar9 el +-
servicio web sin necesidad de conocer si est9 i ple entado a trav4s de un bean de sesi%n sin estadoF o de otras opciones co o servicios web con JAED0SF con el fra eworS A;isF etc.
(iii)
:n bean e presarial estar9 for ado por un clase que i ple enta los de negocio accesiblesF $ opcional ente un con!unto de clases de apo$o.
as1 co o los del ciclo de vida del beanF unas posibles interfaces de negocio que definen los
El bean podr9 e paquetarse $ distribuirse de dos for as> A trav4s de un fic?ero EJ< JA=> presenta una unidad de encapsula iento autocontenidaF que per ite utili6ar el bean para co poner diferentes aplicacionesF por e!e plo inclu$4ndolo en un fic?ero EA=. El arc?ivo incluir9 las clases del beanF $ un posible e!bD !ar.; l en el directorio /ncluido en un etaDinf. odela con beans
e presarialesF se pueden incluir sus clases en las ubicaciones ?abituales para las clases del %dulo BwebDinfTclasses o en webDinfTlib co o un fic?ero JA=C $ el fic?ero e!bD!ar.; l en el is o directorio que los descriptores de despliegue de la aplicaci%n web.
+7
".
apa de persistencia.
#.1. *ntrod)ccin
:na de las posibles necesidades de la l%gica de negocio es que deter inada infor aci%n del estado del siste a sea persistente. .ara elloF se utili6a la capa de persistencia o de datosF que gestiona la persistencia de los beans de estado de la capa de do inio. Las clases cu$as instancias se guardan en algJn siste a de al acena iento persistente se deno inan Nclases persistentesO. .or lo generalF lo instancias del discoL B:pdateC 1ni o que se ?ar9 con las clases persistentes de la capa de do inio ser9> B*reateC crear instancias nuevas $ guardarlas en discoL B=eadC leer odificar el estado de las instancias $ actuali6arlo en discoL $ 1ni o de operaciones se conoce co o BDeleteC eli inar instancias del disco. Este con!unto
Noperaciones *=:DOF por las siglas de *reateF =eadF :pdate $ Delete. En el conte;to de un SG<D relacionalF la operaci%n *reate corresponder9 a una operaci%n 9nsert de S3LF la operaci%n =ead a un Select de S3LF corresponder9n con las operaciones del is o no bre en S3L. ientras que :pdate $ Delete se
.or tantoF la capa de persistencia tiene co o principales responsabilidades $ ob!etivos> / ple entar las operaciones de persistencia B*=:DC. Aislar a la l%gica de negocio de la tecnolog1a de al acena iento Bnor al ente un SG<DC. .resentar una interfa6 co Jn de acceso a datos.
E;isten
patrones cl9sicos> ++
".2.1.
que gestionen su propia persistencia. .or tantoF deber9n i ple entarF ade 9s de sus que ?ace a la capa de do inio de asiado dependiente del instancias.
negocioF los correspondientes a las operaciones *=:D. Esta soluci%n se considera proble 9ticaF $a ecanis o de al acena iento de las
".2.2.
@tra posibilidad es dar la i ple entaci%n a las operaciones *=:D en clases asociadas que se encarguen Jnica ente de gestionar la persistencia de las instancias de las clases de do inio. De este odoF las clases de do inio se olvidan de las responsabilidades de persistencia $ se centran en ecanis o o tecnolog1a de i ple entar la resoluci%n del proble a. :n ca bio en el al acena iento no afectar1a a las clases de do inio.
(i)
+&
El patr%n fabricaci%n pura i plica la creaci%n de una clase au;iliar a la que la clase principal delega las operaciones que no son de negocio. En este casoF lo que se delega es la responsabilidad de i ple entar las operaciones de persistencia.
<9sica enteF se crear9 una clase total ente dependiente de la clase del al acena iento. *uando la clase del correspondiente clase au;iliar.
co o dar persistencia a dic?a clase $ que inclu$e el c%digo dependiente de la tecnolog1a de odelo necesite una operaci%n de persistencia ?ar9 uso de su
E;isten diferentes posibilidades a la ?ora de i ple entar el patr%n fabricaci%n pura para la persistenciaF variando en la for a en la que se relaciona la clase de do inio con la clase au;iliarF en todo casoF la clase de do inio tiene los 4todos *=:DF pero en su cuerpo lo que se ?ace es lla ar 4todo> directa ente a la clase au;iliar que i ple enta dic?o
En los
siste a de al acena ientoF por e!e ploF si se trata de una base de datos relacionalF se tendr1a la gesti%n de la cone;i%n $ las sentencias S3L.
+'
(ii)
La principal diferencia es que la clase que necesita persistencia puede no tener ninguna relaci%n con la clase DA@F con lo que se incre enta el grado de independencia. De esta ser9 una tercera clase la encargada de gestionar las operaciones de persistencia. aneraF
El cliente puede ser una clase de negocioF co o un bean de sesi%nF o una clase R#elperRF que per itan i ple entar una funcionalidad que de anda el acceso a los datos.
El ob!eto de transferencia de datos 22 ransfer,bject88 podr1a ser un bean de estadoF aunque ta bi4n podr1an definirse ob!etos espec1ficos para la co unicaci%n de datos entre capas.
El ob!eto DA@ i ple enta las operaciones de persistenciaF utili6ando un ob!eto de transferencia para devolver los datos al cliente en caso de lecturas $ recibi4ndolo para el caso de escrituras. Se co unica con una fuente de datos para reali6ar las operaciones. &,
".3.1.
(i)
*ntrod)ccin
Java Database *onnectivi$ BJD<*C es la A./ que ofrece la platafor a Java en su edici%n est9ndarF $ por tanto ta bi4n disponible desde las aplicaciones e presarialesF para el acceso a datos desde aplicaciones Java. Est9 dirigida al acceso a bases de datos relacionales basadas en S3LF aunque ta bi4n per ite acceder a otras fuentes de datos. Desde el punto de vista del desarrollador de aplicacionesF el uso de JD<* i plica tres operaciones b9sicas> establecer una cone;i%n con una fuente de datosF enviar sentencias S3L $ procesar los resultados devueltos. .ara dar soporte a estas operaciones es necesario disponer de un D"i(e" JDBCF que es un co ponente software que per ite interaccionar a la aplicaci%n Java con la base de datosF traduciendo las lla adas a la A./ JD<* a co andos entendibles por Siste a Gestor de <ase de DatosF de anera que se ?aga posible el interca bio de infor aci%n. El estableci iento de la cone;i%n requiere que est4 disponible el Driver de la base de datos que se va a utili6arF de for a que el +river)ana(er pueda obtener una cone;i%n indicando la :=L asociada a dic?a base de datos. :na ve6 establecida la cone;i%n "!onnection'F se puede co en6ar a crear $ e!ecutar sentencias que per itan i ple entar las operaciones de persistencia requeridasF para lo que puede ?acerse uso de las interfaces State%ent, PreparedState%ent $ !allableState%entF esta Jlti a per ite la invocaci%n de procedi ientos al acenados en la base de datos. La e!ecuci%n de las sentencias provocar9 la devoluci%n de unos resultados a procesarF espec1fica ente en el caso de las consultas se suele obtener un con!unto de registros con la infor aci%n devueltaF encapsulados en un ob!eto ResultSet que per ite recorrer los datos devueltos $ acceder a los etadatos asociadosF co o por e!e plo el nJ ero de registros obtenidos $ sus tipos de datos. Es i portante gestionar el ciclo de vida tanto de las cone;iones co o de otros recursos utili6ados en el acceso a datosF de for a que una ve6 que se ?a$an ter inado las operaciones a reali6ar se liberen estos recursos. Ade 9sF ta bi4n es necesario reali6ar un trata iento de las &1
posibles e;cepciones que se puedan producirF co o la S?<5xception, de la que es co plicado recuperarseF por lo que se reco ienda traducirla a una e;cepci%n de tipo unchecCed que provoque des?acer las posibles operaciones reali6adas BroolbacC' $ la notificaci%n al usuario.
(ii)
.ataso)rces
En el apartado anterior se e;puso la anera convencional de establecer una cone;i%n JD<* a trav4s del uso del +river)ana(er. Sin e bargoF desde Java 1.4F el ecanis o reco endado para gestionar las cone;iones en JD<* es el uso de la interfa6 +atasource. La interfa6 +atasource representa una factor1a de cone;iones a una fuente de datos previa ente configurada. E;iste diferentes i ple entaciones de la interfa6> de proveedores de bases de datosF de servidores Java o de bibliotecas de tercerosF co o c(p, o D<*. de Apac?e. En cualquier casoF el uso de +atasource per ite aislar los aspectos de configuraci%n de la cone;i%n del c%digo que la utili6aF por lo que se obtiene un c%digo 9s portable $ f9cil de antener. Ade 9sF ?abilita la reali6aci%n de transacciones distribuidas $ el uso de un pool de cone;ionesF que per ite la gesti%n de la cone;iones activas ?aciendo posible su reutili6aci%nF e!orando as1 el rendi iento $ la seguridad de la aplicaci%n.
/iii0
5@eadDocal en JC<
La clase hread<ocal per ite la definici%n de variables locales a un ?ilo de e!ecuci%n. En el 9 bito de las aplicaciones web Java EE to a especial ente relevancia su usoF $a queF al estar cada petici%n asociada a un ?ilo de e!ecuci%nF esta clase proporciona un ecanis o para co partir variables entre todos los co ponentes $ clases que intervienen en el procesa iento de una petici%n. En el caso de la persistencia con JD<*F se puede utili6ar hread<ocal para al acenar la instancia de la cone;i%n asociada a la petici%nF de anera que $a no ser9 necesario pasarla co o argu ento a cada uno de los 4todos utili6ados. #a$ que tener especial cuidado al utili6ar la clase hread<ocal $a que puede provocar un incre ento del acopla iento en el diseIo de la aplicaci%n. &"
".3.2.
(i)
*ntrod)ccin
El
apeo ob!etoDrelacional es una t4cnica de progra aci%n que se basa en convertir datos
entre el siste a de tipos utili6ado en un lengua!e de progra aci%n orientado a ob!etos $ el utili6ado en una base de datos relacional. En la pr9cticaF esto se traduce a definir un con!unto de relaciones o apeos entre los ob!etos de negocio $ las tablas de base de datos que per iten su persistencia.
E;isten
apeo ob!etoD
relacionalF que suelen variar en el lengua!e de orientaci%n a ob!etos al que est9n dirigidasF en la for a en la que se definen las asociaciones o etc.CF en el lengua!e de consultas definidoF etc. apeos Bcon fic?eros de configuraci%nF anotacionesF
apeoF el
tanto para la platafor a Java co o para .Ket. A partir de #ibernateF Java EE ?a definido una especificaci%nF deno inada J.A o Java .ersistence A./F que estandari6a la A./ $ los necesarios para i ple entar un ecanis o de persistencia ob!etoDrelacional.
(ii)
gesti%n de datos relacionales en aplicaciones Java. La especificaci%n J.A puede dividirse en tres
&(
9reas principales> La A./ de persistencia. El lengua!e de consultas. La A./ *riteria. Los etadatos de apeo ob!etoDrelacional.
10
Entidades
:na entidad es un ob!eto de do inio persistenteF que t1pica ente representa una tabla en una base de datos relacional. De esta for aF cada instancia de la entidad se corresponde con un registro de la tabla.
:na clase de entidad debe cu plir los siguientes requisitos> Debe estar anotada con 45ntity. Debe tener un constructor sin argu entos pJblico o protegido. Ko puede ser declarada co o final, ni ta poco sus variables o persistentes. Si sus instancias van a ser pasadas co o valorF por e!e plo a trav4s de la interfa6 re ota de un bean de sesi%nF deber9n i ple entar la interfa6 SerialiDable. Las variables de instancia persistentes deben ser declaradas co o protegidas o privadas $ s%lo pueden ser accedidas por sus 4todos de la clase. 4todos arcados co o
.ara indicar los datos que deben ser persistentes se pueden utili6ar los ca pos de la clase o los 4todos de accesoF si es que se ?an seguido las convenciones Java<ean para definici%n de propiedades. En cualquier casoF ser9n persistentes salvo que se indique e;pl1cita ente que deben considerarse transitorios 4 ransient.
&4
*ada entidad debe tener un identificador Jnico de ob!eto o clave principalF que per itir9 identificar el ob!etoF pudiendo ser si ple o co puesta. Si es si ple se utili6ar9 la anotaci%n 49dF ientras que si es co puesta se deber9 definir en una clase de clave pri aria.
Las entidades pueden estar relacionadas entre s1 a trav4s de cuatro tipos de relaciones> uno a unoF uno a uc?osF uc?os a uno $ uc?os a uc?osF teniendo cada tipo de ultiplicidad su anotaci%n correspondiente. Las relaciones pueden ser unidireccionales o bidireccionales. En este Jlti o caso ?abr9 que indicar que parte de la relaci%n es la esclava en la anotaci%n Bse corresponder1a se 9ntica ente con la clave a!enaCF a lo que ade 9s se puede aIadir si la relaci%n i plica dependencia en e;istenciaF pudiendo provocar un borrado en cascada.
enudo navega entre relacionesF por lo que si la relaci%n ientras que si es unidireccional lo ?ar9 en uno
Las entidades soportan ?erencia de clasesF asociaciones poli %rficas $ consultas poli %rficas. .ueden e;tender de clases que sean o no de entidadF $ cada clase de entidad puede ser concreta o abstracta. .or tantoF es posible establecer Jltiples tipos de !erarqu1as de ?erencia con entidadesF que podr9n ser i ple entadas a trav4s de tres estrategias b9sicas> una Jnica tabla para toda la !erarqu1a de clasesF una tabla para la ra16 $ otra para cada subclase con una clave a!ena a la ra16F $ por Jlti oF una tabla para cada clase concreta.
20
Eestionando Entidades
La especificaci%n J.A define la interfa6 5ntity)ana(er para gestionar las entidades. *ada instancia del gestor de entidades est9 asociada a un conte;to de persistenciaF que define el con!unto particular de entidades gestionadas $ el alcance ba!o el que las instancias de una entidad particular son creadasF guardadas $ eli inadas. &-
persistencia para llevar a cabo las operaciones de creaci%n $ eli inaci%n de instancias de entidadesF la bJsquedas de entidades $ otras posibles consultas personali6adas.
.or tantoF el gestor 5ntity)ana(er tendr9 asociadasF a trav4s del conte;to de persistenciaF un con!unto de instancias de las entidades que representan los ob!etos de negocio del siste aF sobre los que e!ecutar9 operaciones de persistencia.
E;isten dos tipos de gestores de entidades> Gestionados por el contenedor> en este casoF es el contenedor el responsable de la gesti%n del ciclo de vida del 5ntity)ana(erF ocup9ndose de abrir $ cerrar el gestor. El conte;to de persistencia se propaga auto 9tica ente a todos los co ponentes que utili6an la instancia del 5ntity)ana(er dentro de una transacci%n Java Transaction Arc?itecture BJTACF con lo que no es necesario pasar una referencia de la instancia entre los co ponentes. Gestionados por la aplicaci%n> el ciclo de vida del gestor se debe ane!ar anual ente en el anual ente. .ara
c%digo de la aplicaci%n. El conte;to de persistencia no se propaga de for a auto 9tica entre co ponentesF por lo que si se quiere utili6ar en varios se deber9 pasar obtener una instancia de 5ntity)ana(er gestionado por la aplicaci%n es necesario ?acer uso de 5ntity)ana(er*actoryF que per itir9 obtener gestores asociados a una unidad de persistencia.
@tro de los co ponentes clave dentro de la arquitectura de persistencia de J.A son las unidades de persistencia B.ersistence :nitCF que definen un con!unto de tipos de entidades que pueden ser ane!ados por un 5ntity)ana(er. La infor aci%n de una unidad de persistencia se refle!a en el arc?ivo persistence.x%lF en el que ade 9s se inclu$e infor aci%n sobre el tipo de transacci%n a utili6arF la fuente de datosF el proveedor que i ple enta J.AF $ otros par9 etros espec1ficos del proveedor.
&7
Las transacciones definen cuando se sincroni6an las entidades con la base de datos. J.A soporta dos tipos de gesti%n de las transacciones> JTA $ =esourceDLocal. Los 5ntity)ana(er gestionados por el contenedor utili6an sie pre JTAF cada unidad de persistencia. JTA> el ciclo de vida de la transacci%n est9 controlado por el contenedor que puede co partirla entre co ponentes. =esourceDlocal> son las transacciones nativas de los drivers JD<* que se referencian en las unidades de persistencia. .or tantoF el control del ciclo de vida se ?ar9 e;pl1cita ente en la aplicaci%n a trav4s de la A./ de 5ntity ransaction. ientras que los gestionados por la aplicaci%n pueden utili6ar a bas. El tipo de transacci%n utili6ada se define en el fic?ero persistence.x%l para
*o o se indic% inicial enteF J.A es una especificaci%n que proporciona una interfa6 para la i ple entaci%n del ecanis o de persistencia ob!etoDrelacional en Java EE. En tie po de e!ecuci%nF ser9 necesario un proveedor de persistencia que proporcione dic?a i ple entaci%n.
La
a$or1a de los fra eworSs de persistencia $a proporcionan una i ple entaci%n para uestra una tabla con
J.AF algunos de ellos con una alta integraci%n con los servidores Java EE en los que se despliegan las aplicaciones que requieren de la persistencia. A continuaci%nF se infor aci%n referente a productos de persistencia>
&+
30
1peraciones de persistencia
Las operaciones de persistencia se reali6an a trav4s del 5ntity)ana(er sobre las instancias del conte;to de persistencia asociado.
entityGanager*persist ?>/ject entity@ entityGanager*%in' ?2ntity*=lass( >/ject primaryHey@ entityGanager*merge ?>/ject entity@ entityGanager*remove ?>/ject entity@
Ade 9s de las operaciones b9sicasF J.A proporciona dos A./ *riteria. A continuaci%n se e;pondr9 breve ente J.3L.
El len+ua!e de consultas JP,L es un lengua!e basado en cadenas de te;to si ilar a S3LF pero orientado a la consulta de entidades $ sus relaciones. .or tantoF per ite la definici%n de consultas personali6adas pero en lugar de utili6ar tablas $ sus colu nas utili6a las entidadesF sus propiedades $ las relaciones entre entidades.
Estas consultas pueden ser din9 icasF si se definen directa ente dentro de la l%gica de negocio de la aplicaci%nF utili6ando el 4todo create?uery>
p$/lic Fist %in'1ith.ame?String name@ ; ret$rn em*createJ$ery? "S2F2=T c F6>G =$stomer c 1D262 c*name F4H2 :c$st.ame"@ *set9arameter?"c$st.ame"( name@ *setGax6es$lts?-K@ *get6es$ltFist?@; <
define a trav4s de
etadatos.
@.ame'J$ery? name="%in'Cll=$stomers1ith.ame"( &$ery="S2F2=T c F6>G =$stomer c 1D262 c*name F4H2 :c$st.ame" @ LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL c$stomers = em*create.ame'J$ery?"%in'Cll=$stomers1ith.ame"@ *set9arameter?"c$st.ame"( "Smith"@ *get6es$ltFist?@;
A bos tipos de consultas ad iten incluir par9 etrosF tanto por no bre co o por posici%n>
em*createJ$ery? "S2F2=T c F6>G =$stomer c 1D262 c*name F4H2 :c$st.ame"@ *set9arameter?"c$st.ame"( name@ *get6es$ltFist?@; LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL em*createJ$ery? MS2F2=T c F6>G =$stomer c 1D262 c*name F4H2 N-O@ *set9arameter?-( name@ *get6es$ltFist?@;
&'
2.
4.1. *ntrod)ccin
La arquitectura Java EE per ite el desarrollo de aplicaciones tantoF ser9n necesarios ta bi4n con otras aplicaciones.
En realidadF de lo que se dispone es de un con!unto de tecnolog1as $ especificaciones para proveer acceso re oto a los co ponentes u ob!etos de la arquitectura Java EEF principal ente de la capa de negocioF $a que para acceder a la capa web se suele utili6ar el protocolo est9ndar #TT..
La tecnolog1a Java =e ote )et?od /nvocation o Java =)/ es una interfa6 de progra aci%n que per ite la co unicaci%n entre aplicaciones Java SE de una for a si ilar a las lla adas a procedi ientos re otos.
=)/ se basa en que un ob!eto AF para co unicarse con otro <F necesita conocer Jnica ente un subcon!unto del con!unto de operaciones pJblicas de <. As1F < recoge este subcon!unto de operaciones en una interfa6F que ofrece de for a re ota. De este odoF la interfa6 re ota ser9 una 4todo $ que esF por tantoF especiali6aci%n de la interfa6 java.r%i.Re%oteF que no define ningJn
una interfa6 de no bradoL la clase que i ple enta la interfa6 re ota ser9 una especiali6aci%n de alguna de las clases diseIadas espec1fica ente para este tipo de co unicacionesF co o java.r%i.server.BnicastRe%ote,bject.
',
La aplicaci%n cliente deber9 obtener una referencia a la interfa6 re ota. .ara elloF previa ente deber9 ?aberse publicado en algJn puerto de la utili6ando un servidor =)/. 9quina de la aplicaci%n servidoraF
java.r%i.Ea%in(. el pri er par9 etro es la :=L en la que se publica el ob!etoF al que ade 9s se asigna un no breL el segundo representa la instancia del ob!eto re oto que se publica.
.aming*/in'?"rmi://-BP*K*K*-:BKKQ/servi'orejemplo"( instanciaServi'or@;
Focate6egistry*create6egistry?BKKQ@;
La clase que desee acceder de for a re ota al ob!eto publicado debe locali6arloF lo que consigue utili6ando el 4todo Ea%in(.looCup"Strin('F que devuelve una referencia a un ob!eto Re%ote $ al que debe ?acerse un cast para transfor arlo al ob!eto deseadoF que debe estar en la for a de una interfa6 re ota. Es decir>
'1
:na ve6 obtenida la referenciaF se pueden reali6ar las lla adas que se deseen a las operaciones ofrecidas en la interfa6 re otaF co o si se tratara de un ob!eto local.
=)/ es una interfa6 para co unicaciones re otasF que requiere de un protocolo de transporte sub$acente. E;isten dos opciones principales> Java =e ote )et?od .rotocol BJ=).C> es el protocolo espec1fico de Java para buscar $ referenciar ob!etos re otos. *onsigue una alta eficiencia $a que la co unicaci%n se ?ace a nivel de 9quinas virtuales de Java BJM)CF lo que i plica que tanto el cliente co o el servidor deben ser aplicaciones Java. =)/D//@.> El protocolo =)/ sobre //@. surge con el ob!etivo de integrar la co unicaci%n =)/ de Java con la arquitectura *@=<A B*o esta arquitectura. on @b!ect =equest <roSer Arc?itectureCF per itiendo as1 la co unicaci%n con otras aplicaciones que no sean Java pero que ad itan
La tecnolog1a EJ< per ite acceder a la l%gica de negocio de for a re otaF a partir de una arquitectura de co ponentes de servidor. El servidor dispone de un contenedor de EJ< $ utili6a =)/ co o base para proporcionar el acceso a los co ponentes desde las aplicaciones clienteF en particular a trav4s de =)/D//@.. .or tantoF =)/ per ite la co unicaci%n con ob!etos re otos distribuidos que podr1an ser co ponentes EJ<.
'"
2.3.1.
$ntroduccin
aplicaciones softwareF e!ecut9ndose en una variedad de platafor as $ fra eworSs. Est9n caracteri6ados por su gran interoperabilidad $ e;tensibilidadF as1 co o por su descripci%n independiente de la 9quina gracias al uso de E)L. Los servicios web ofrecen un ecanis o de ba!o acopla iento que per ite a las aplicaciones interaccionar entre s1 para ofrecer servicios sofisticados de valor aIadido.
A nivel conceptualF un servicio es un co ponente software proporcionado a trav4s de un punto de acceso o RendpointR disponible a trav4s de red. El cliente del servicio $ el proveedor utili6an ensa!es para interca biar peticiones $ respuestas. Estos ensa!es son autocontenidos $ ?acen pocas asunciones sobre las capacidades tecnol%gicas de a bos e;tre os.
A nivel t4cnicoF los servicios web pueden i ple entarse de diferentes el pri ero por ser el i ple entaci%n. 9s e;tendidoF para a continuaci%n
tipos principales son los Servicios 0eb E)L $ los Servicios 0eb =ESTful. Se describir9 en detalle ostrar dos alternativas de
el est9ndar Si ple @b!ect Access .rotocol BS@A.CF un lengua!e E)L que define una arquitectura $ ensa!es. Las operaciones ofrecidas por el servicio est9n descritas en el lengua!e 0eb Services Description Langua!e B0SDLCF que ta bi4n es un lengua!e E)LF en este caso para la definici%n de interfaces de servicios web. Ade 9s de las operacionesF un docu ento 0SDL suele incluir los tipos de datos interca biadosF los co unicaci%n utili6ado. En principioF los cualquier protocolo est9ndarF pero lo ensa!esF los puntos de acceso $ el protocolo de ensa!es S@A. pueden ser interca biados a trav4s de
La siguiente figura representa un posible esque a de funciona iento de un Servicio 0eb '(
E)L>
:na aplicaci%n Java puede actuar co o cliente o co o proveedora del servicio. A continuaci%nF se uestran los principales requisitos o tareas a i ple entarF segJn el rol>
*o o .roveedor> Es necesario ?abilitar un punto de acceso o RendpointR que sea capa6 de aceptar peticiones #TT.. Dentro de la tecnolog1a JavaF los Java Servlets per iten recibir $ procesar peticiones de este tipo. Los ensa!es S@A. inclu$en la infor aci%n de la operaci%n con los datos asociadosF ecanis o de
que suelen estar definidos con E)L Sc?e a. Las aplicaciones Java solo pueden traba!ar con datos en for a de ob!etos JavaF por lo que ser9 necesario un transfor aci%n entre tipos Java $ E)L Sc?e a. Las operaciones ofrecidas deber9n tener una i ple entaci%n. En principioF cualquier clase Java puede contener 4todos que i ple enten las operaciones de un Servicio 4todos de 0eb. .articular enteF un EJ< de sesi%n sin estado puede publicar sus negocio a trav4s de un Servicio 0eb. Debe generar el docu ento 0SDL que actJa co o interfa6 $ NcontratoO del Servicio 0eb ofrecido. .or tantoF una aplicaci%n Java que actJe co o proveedora de un servicio web deber9 '4
aceptar peticiones #TT.F procesar su contenido siendo capa6 de transfor ar los datos a ob!etos Java $ generar la invocaci%n al Sc?e a $ ser incluido en un #TT.. 4todo que i ple enta la operaci%n. El 4todo devolver9 un valor de un tipo Java que deber9 transfor arse en su correspondiente E)L ensa!e S@A. que se devolver9 a trav4s de una respuesta
*o o *liente> De for a an9loga al servidorF necesitar9 una traducci%n entre los tipos E)L Sc?e aF definidos en el docu ento 0SDL generado por el servidorF $ los tipos de Java que son los que ane!ar9 el cliente para ?acer la invocaci%n. ensa!e S@A. que define la invocaci%n del
servicio. Ade 9sF recibir9 la correspondiente respuesta #TT. que puede contener un valor de retorno en un tipo E)L Sc?e a a transfor ar. .ara lla ar al servicio webF nor al ente se invoca un si ple ente deber9 reali6ar la lla ada al 4todo definido en alguna clase
de tipo RStubR que suelen generarse a partir del 0SDL. .or tantoF la aplicaci%n cliente 4todo utili6ando los tipos adecuados para los argu entos $ recogiendo la respuesta si es necesario.
La platafor a Java dispone de fra eworSs $ especificaciones que se ocupan de las tareas 9s tediosas a la ?ora de crear servicios webF per itiendo que el desarrollador se centre en la i ple entaci%n de la l%gica del servicio web o de la lla ada al e;pondr9n las 9s relevantes. is o. A continuaci%n se
2.3.2.
A;is
Apac?e A;is es un fra eworS de tipo open source que constitu$e el est9ndar de facto para el uso de Servicios 0eb E)L en Java. A;is i ple enta un servidor S@A. para el procesa iento de ensa!esF as1 co o un con!unto de utilidades $ A./s para la generaci%n $ despliegue de '-
A;is per ite la definici%n de servicios a trav4s de un contenedor Apac?e To cat o con un invocaci%n a la clase Java que
4todo general independiente del contenedor. En cualquier 4todo que i ple enta la operaci%n del servicio.
casoF provoca la configuraci%n de un Servlet que captura la petici%n $ la procesaF generando la antiene el Ade 9sF per ite generar el docu ento 0SDL asociado al servicio web.
Desde el punto de vista del clienteF A;is per iteF a partir de un docu ento 0SDLF generar las clases RStubR para la invocaci%n del servicio web.
Est9 disponible la versi%n A;is" que supone un rediseIo co pleto del fra eworSF $ que ade 9s proporciona la capacidad de actuar co o una aplicaci%n servidora de sus propios servicios web.
odular que le per ite aIadir funcionalidades $ capas a %dulo Apac?e =a part que aIade
2.3.3.
JAFA%,
JAED0S o Java A./ for E)L 0eb Services es la especificaci%n de la platafor a Java EE para la construcci%n de servicios web $ clientes que se co unican utili6ando E)L. JAED0S utili6a anotaciones para establecer las clases que i ple entan el servicio web '7
Ade 9sF se define la especificaci%n de un entorno de e!ecuci%n que pueden i ple entar los servidores Java EEF ocup9ndose de la generaci%n $ trata iento de los infor aci%n e;presada con las anotaciones. El servidor J<oss AS i ple enta la especificaci%n JAED0S ofreciendo utilidades para la generaci%n de servicios web a partir de unas clases con las anotaciones correspondientesF $ ta bi4n la generaci%n de las clases RStubR del cliente a partir de un docu ento 0SDL. ensa!es S@A. a partir de la
4. <i&liogra(8a y re(erencias
Apac?e Software 8oundation B",1"C. ;pache ;xisF BserGs Guide. Accesible en ?ttp>TTa;is.apac?e.orgTa;is"T!avaTcoreTdocsTuserguide.?t l
J<oss *o
?ttps>TTdocs.!boss.orgTaut?orTdispla$TAS+TGettingHStartedHGuide
'+
?ttp>TT!ava.sun.co TblueprintsTcore!"eepatternsT.atternsT8ront*ontroller.?t l.
@racle *orporation B",1,C. !ore =F55 Patterns - +ata ;ccess ,bject. Accesible en ?ttp>TT!ava.sun.co TblueprintsTcore!"eepatternsT.atternsTDataAccess@b!ect.?t l.
.oloF ). B",,+C. ;puntes de 9n(enierKa de Software 99. Accesible en ?ttp>TTwww.infD cr.ucl .esTwwwT poloTasigT,+,&Tiso-.?t l.
=ed #at /nc. B",,-C. 9ntroducin( =P; Persistence. Accesible en ?ttp>TTdocs.!boss.orgT?ibernateTstableTentit$ anagerTreferenceTenT?t lTpr,1.?t l.
'&