Professional Documents
Culture Documents
Qu es J2EE?
Conjunto j d de especificaciones ifi i y prcticas i
Componentes J2EE
C Componentes t software ft autocontenidos. t t id Ensamblados en una aplicacin J2EE, con sus clases l y ficheros fi h relacionados. l i d Tipos p de componentes: p
Clientes de la aplicacin y applets se ejecutan en el cliente. Componentes web (JSP & Servlet) se ejecutan en el servidor. Componentes de d negocio i (EJB) ( ) se ejecutan j en el l servidor.
Clientes J2EE
Clientes web (aka Clientes Clientes ligeros ligeros) ).
Pginas web dinmicas generadas por componentes web de la capa Web Web. Navegador web renderiza las pginas recibidas del servidor.
Capas de J2EE
Contenedores J2EE
I Interfaz t f entre t un componente t y la l funcionalidad de bajo nivel de la plataforma l t f que soporta t ese componente. t Tipos: p
Servidor J2EE proporciona contenedores web y EJB. J Contenedor de EJBs gestiona la ejecucin de EJBs. J Contenedor web gestiona la ejecucin de JSPs y Serlvets. 6
Contenedores J2EE
Empaquetado
Mdulo Mdulo: uno o ms componentes J2EE para el mismo tipo de contenedor + descriptor. Descriptor de despliegue (DD): documento XML que describe las propiedades de despliegue de un mdulo. Tipos i de d mdulos: d l
EJBs: .jar Web .war Web: war Resource Adapter: .rar Cliente de la aplicacin: .jar
Un fichero EAR contiene una aplicacin J2EE, que puede estar compuesta por uno o varios mdulos
Servidores de aplicaciones
Software que ayuda al desarrollo, desarrollo despliegue y control de aplicaciones empresariales (distribuidas). (distribuidas) Sirven como contenedores de los componentes de una aplicacin J2EE Provee middleware para acceso a servicios subyacentes y
Seguridad Persistencia Acceso a datos
10
Contenedores de aplicaciones
E i t muchos Existen h servidores id de d aplicaciones li i
Comerciales
WebSphere (IBM) WebLogic (BEA Systems) Oracle AS (Oracle Corp)
Libres
JBboss (JBoss Inc) Tomcat (Apache Foundation) Jonas (ObjectWeb)
11
Servidores de aplicaciones
Todos d los l comerciales i l ofrecen f
Contenedores de j jsps p y servlets Contenedores de EJBs Funcionalidades aadidas (dependiendo del vendedor)
E Existen i t otros t servidores id de d aplicaciones li i que solo ofrecen contenedor de jsps y servlets (tomcat)
12
Servlets
E Extienden ti d la l funcionalidad f i lid d de d un servidor id web Componentes ejecutables j bl en un contenedor d web Encargados de escuchar a las peticiones de un cliente Encargados de responder a las peticiones de un cliente Mejor rendimiento que CGI : uso de threads
13
JSP
Separacion i entre logica l i de d negocio i y p presentacion Facil mantenimiento Basado B d en la l tecnologia t l i de d servlets l t Orientado a la logica g de p presentacion
14
15
Para n n peticiones
16
Desventajas: D t j
Cmo separar la lgica de negocio y la presentacin? t i ? Cuestiones de concurrencia
17
Ejemplo:
<table border="1" cellspacing="0" p g cellpadding=5> p g <tr><th>number</th><th>squared</th></tr> <% for ( int i=0; i<10; i++ ) { %> <tr><td><%= i %></td> <td><%= ( (i * i) ) %></td></tr> <% } %> </table>
18
Desventajas:
Si slo l se emplean l pginas i JSP, JSP el l cdigo di d de script que realiza la lgica de negocio puede llegar a ser demasiado grande y conf confuso, so haciendo difcil su depuracin 19
20
Resumen
Puedes usar un componente de la vista para presentar datos datos, mostrar un formulario, mensajes de informacin y dems. El protocolo HTTP proporciona un mecanismo para solicitar vistas tanto estticas como dinmicas El contenedor web intercepta las peticiones HTTP y activa el servlet que sea necesario Se puede d desarrollas d ll una clase l servlet l que implemente i l el l mtodo doGet para procesar una peticin Se p puede acceder a la informacin de la p peticin del inputstream a travs del d l objeto b request provisto por el l contenedor. Se p puede generar g una vista escribiendo directamente en el outputstream del objeto request provisto por el contenedor
21
23
24
25
Patrn MVC
Modelo
Vi t Vista
C t l d Controlador
Qu es Apache Struts?
Un framework f k MVC?
Struts p provee un framework unificado p para el despliegue de aplicaciones web que usan la arquitectura q MVC.
27
Qu es Apache Struts?
Un conjunto j de d libreras lib de d etiquetas i personalizadas ? p
Struts provee libreras de etiquetas personalizadas para mostrar propiedades de beans, generar formularios HTML
28
Ventajas de Struts
Configuracin fi i b basada d en archivos hi centralizados:
Archivos XML.
HTML tags:
Asocia formularios HTML con beans. 29
Ventajas de Struts
Validacin lid i de d formularios. f l i Aproximacin consistente con el patrn MVC. MVC
30
Desventajas de Struts
Mayor curva de d aprendizaje di j Peor documentacin:
Comparada con la documentacin standard de servlets y JSP JSPs s.
Menor transparencia:
El framework aade mayor complejidad
Aproximacin rgida:
Con Struts es muy difcil usar algo distinto a MVC. 31
Form
Determina r Accin
Action
Elegir JSP
JSP
32
public void setMensaje(String mensaje) { this.mensaje = mensaje; } public String getMensaje() { return mensaje; } }
33
34
35
36
37
Spring Framework
IoC
39
Inversin de Control
Inversin de control a.k.a. a k a Injeccin de dependencias El patrn en el ncleo de Spring
Hace que el cdigo sea ms fcil de probar. Organiza los objetos de la capa intermedia (con o sin EJBs). Con Spring p g te centras slo en las p propiedades p de los JavaBeans. Diseado para que existan las menores dependencias posibles (casi todos los objetos de negocio NO dependen del framework).
40
Inversin de Control
Provee P de d un framework f k consistente i t t para el l acceso a datos (JDBC o O/R mapping). Posibilita la construccin de la aplicacin usando POJOs.
41
dependencias. p
Diseo por contrato:
Define el comportamiento comportamiento, no la implementacin. Se escribe ib una interfaz/clase i f / l para solucionar l i cada problema. Fcil construir tests para comprobar la funcionalidad de cada implementacin dada. 42
43
Cmo funciona
Defines: fi
Interfaces e implementaciones. p Dependencias entre las clases/interfaces.
Cmo funciona
U Uso d de POJOS para las l implementaciones. i l t i No hay y necesidad de desplegar p g en un contenedor pesado. Mejora la testabilidad. testabilidad . No es intrusivo:
No N dependes d d de d ninguna i API especfica fi d del l contenedor. No N hay h interfaces i t f que implementar, i l t ni i clases l de d las que heredar, salvo las propias. 46
Sin IoC:
El componente tiene el control sobre sus dependencias, con lo que tiene que
conseguirlas. il
Con IoC:
Los componentes de negocio no tienen control sobre sus dependencias. p El contenedor ser el encargado de inyectrselas. y 47
Ejemplo
class MyMain { public static void main(String[] args) { //initialize the IoC container (here it's Spring): XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(new y( ClassPathResource(beans.xml)); ( )); //retrieve MyLogic: MyLogic myLogic = (MyLogic) xmlBeanFactory.getBean(myLogic); //call the method: myLogic.doYourThing(); } } <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans ...> <! this is beans.xml <!-beans xml --> > <beans> <bean id=theBusinessSvc class=foo.BusinessServiceMock /> <bean id=myLogic class=foo.MyLogic> <property name=businessService> <bean b ref=theBusinessSvc f h / /> </property> </bean> </beans>
48
49
50
EJB 3.0
52
Tipos de EJB
Entity i Beans:
Usados p para mapear p tablas de la BBDD a clases (O/R mapping). En lugar de trabajar con resultados resultados de querys querys, trabajas con objetos Java. El servidor de aplicaciones provee de la funcionalidad para cardar, actualizar o borrar los valores de una clase de la BBDD BBDD.
53
Tipos de EJB
Beans de d sesin: i
Usados p para implementar p funcionalidad de la aplicacin. Hay dos tipos:
Con estado. Sin estado estado.
54
Tipos de EJB
Beans de d sesin i con estado: d
El contenedor se encargar g de mantener el estado del objeto a lo largo de la sesin del usuario. (p (p.e. un carro de la compra). p )
55
Tipos de EJB
Message Driven i Beans:
Representan p un servicio sin estado de invocacin asncrona.
56
EJB s EJBs
Proporcionan i l la arquitectura i para el l p distribuidas desarrollo de aplicaciones basadas en componentes. Proporcionan portabilidad entre diferentes plataformas y protocolos de comunicacin. El contenedor se encarga de detalles tales g , transaccionabilidad, , como seguridad, gestin de su ciclo de vida
57
58
59
Persistencia:
El EJBs existe ms all de la vida de la aplicacin. li i Puede ser gestionada por el bean o por el contenedor. d
60
Clave primaria:
Cada bean de entidad debe de tener un nico (y unvoco) n oco) identificador. identificador
61
63
64
65
Ejemplo de EJB
@Entity @Table(name = "PURCHASE_ORDER") public class Order implements java.io.Serializable { private int id; private double total; private Collection Collection<LineItem> LineItem lineItems; @Id @GeneratedValue(strategy=GenerationType.AUTO) public int getId() { return id; } public void setId(int id) { this.id = id; } public double getTotal() { return total; } public void setTotal(double total) { this.total = total; }
66
Ejemplo de EJB
public void addPurchase(String product, int quantity, double price) { if (lineItems == null) lineItems = new ArrayList<LineItem>(); LineItem item = new LineItem(); item.setOrder(this); item.setProduct(product); item.setQuantity(quantity); item setSubtotal(quantity * price); item.setSubtotal(quantity lineItems.add(item); total += quantity * price; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="order") public bli Collection<LineItem> C ll ti Li It getLineItems() tLi It () { return lineItems; } p public void setLineItems(Collection<LineItem> ( lineItems) ) { this.lineItems = lineItems; } }
67
Ejemplo de EJB
@Entity public class LineItem implements java.io.Serializable { private int id; private double subtotal; private int quantity; private String product; private Order order;
@Id @GeneratedValue(strategy=GenerationType.AUTO) public int getId() { return id; } public void setId(int id) { this.id = id; } public double getSubtotal() { return subtotal; } public void setSubtotal(double subtotal) { this.subtotal = subtotal; } public int getQuantity() { return quantity; }
68
Ejemplo de EJB
public void setQuantity(int quantity) { this.quantity q y=q quantity; y; } public String getProduct() { return product; } public void setProduct(String product) { this.product = product; } @ManyToOne @JoinColumn(name = "order_id") public Order getOrder() { return order; ; } public void setOrder(Order order) { this.order = order; } }
69
Recursos
http://java.sun.com h //j http://springframework.org http://struts.apache.org
70