Desarrollo de aplicaciones Desarrollo de aplicaciones Java EE ... - gul

61 downloads 423 Views 2MB Size Report
¿Qué es J2EE? j d ifi i á i. • Conjunto de especificaciones y prácticas que permiten desarrollar, desplegar y. q p. p g y gestionar aplicaciones multicapa” – Sun.
Desarrollo de aplicaciones Java EE con Struts 2, Spring y EJB 3.0

© 2007, Grupo Salenda, S.L.

¿Qué es J2EE? • Conjunto j dde especificaciones ifi i y prácticas á i

q ppermiten desarrollar, desplegar que p g y gestionar aplicaciones multicapa” – Sun Microsystems. • Lógica dividida en componentes. • Componentes divididos en capas. 2

Componentes J2EE • CComponentes t software ft autocontenidos. t t id • Ensamblados en una aplicación J2EE, con sus clases l y ficheros fi h relacionados. l i d • Tipos p de componentes: p – Clientes de la aplicación 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 ell servidor.

3

Clientes J2EE • Clientes web (aka “Clientes Clientes ligeros ligeros”)). – Páginas web dinámicas – generadas por componentes web de la capa Web Web. – Navegador web – renderiza las páginas recibidas del servidor.

• Aplicaciones cliente (aka “Clientes pesados”). – Interfaz de usuario (Swing / AWT / SWT). – Se ejecutan en el PC del cliente. – Acceden A d di directamente t t a los l componentes t de d negocio

4

Capas de J2EE

5

Contenedores J2EE • IInterfaz 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 EJB’s – gestiona la ejecución de EJB’s. J – Contenedor web – gestiona la ejecución de JSP’s y Serlvets. 6

Contenedores J2EE

7

Empaquetado • Módulo Módulo: uno o más componentes J2EE para el mismo tipo de contenedor + descriptor. • Descriptor de despliegue (DD): documento XML que describe las propiedades de despliegue de un módulo. • Tipos i de d módulos: ód l – – – –

EJB’s: .jar Web .war Web: war Resource Adapter: .rar Cliente de la aplicación: .jar

• Un fichero EAR contiene una aplicación J2EE, que puede estar compuesta por uno o varios módulos

8

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 aplicación J2EE • Provee middleware para acceso a servicios subyacentes y – – – –

Seguridad Persistencia Acceso a datos …

9

Arquitectura de un servidor de aplicaciones

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)



Comparativa de servidores de aplicaciones – http://en.wikipedia.org/wiki/Matrix_of_Application_Servers#Java http://en wikipedia org/wiki/Matrix of Application Servers#Java

11

Servidores de aplicaciones • Todos d los l comerciales i l ofrecen f – Contenedores de jjsp’s p y servlets – Contenedores de EJB’s – Funcionalidades añadidas (dependiendo del vendedor)

• EExisten i t otros t servidores id de d aplicaciones li i que solo ofrecen contenedor de jsp’s y servlets (tomcat) 12

Servlets • EExtienden 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

Servlets en el servidor web • Diagrama i d de despliegue d li d de un servidor id web con un contenedor web:

15

Ejecución de los servlets • Para una petición: i ió

• Para ‘n’ n peticiones

16

Ventajas y desventajas de los Servlets • Ventajas: V t j – Prestaciones (los threads son más rápidos y ligeros que los procesos) – Escalable – El llenguaje j JJava es orientado i t d a objetos bj t y robusto. b t – El lenguaje Java es multiplataforma

• Desventajas: D t j – ¿Cómo separar la lógica de negocio y la presentación? t ió ? – Cuestiones de concurrencia

17

Tecnología JavaServer Pages (JSP) •

LLas plantillas l till d de código ódi son como páginas á i HTML estáticas, táti pero con código Java embebido para permitir la generación dinámica de datos y HTML.

• Ejemplo: p g >

48

Integración con Struts Package packt; import com.opensymphony.xwork2.ActionSupport; public class Action extends ActionSupport p pp { private servicios.MiBean mB; public Action(servicios.MiBean bean) { mB = bean; } public String execute() throws Exception { //Lógica …. return SUCCESS; }

49

Integración con Struts encoding "UTF 8"? 765123 /

50

EJB 3.0

© 2007, Grupo Salenda, S.L.

¿Qué son los EJB EJB’s? s? • Es una tecnología l í para d desarrollar ll p multicapa. p aplicaciones • Un estándar implementador por muchos proveedores de contenedores contenedores. • Componentes distribuidos de negocio y acceso a datos. • Existen varios tipos

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 sesión: ió – Usados p para implementar p funcionalidad de la aplicación. – Hay dos tipos: • Con estado. • Sin estado estado.

54

Tipos de EJB • Beans de d sesión ió con estado: d – El contenedor se encargar g de mantener el estado del objeto a lo largo de la sesión del usuario. (p (p.e. un carro de la compra). p )

• Beans de sesión sin estado: – Es E un componente t con un ciclo i l d de vida id corto, t no alcanza más allá de cada conexión del cliente. (p e implementar lógica para mandar un (p.e. n mail). mail)

55

Tipos de EJB • Message Driven i Beans: – Representan p un servicio sin estado de invocación asíncrona.

56

EJB s EJB’s • Proporcionan i lla arquitectura i para ell p distribuidas desarrollo de aplicaciones basadas en componentes. • Proporcionan portabilidad entre diferentes plataformas y protocolos de comunicación. • El contenedor se encarga de detalles tales g , transaccionabilidad,, como seguridad, gestión de su ciclo de vida … 57

Beneficios de los EJB EJB’ss • Simplifican i lifi ell desarrollo d ll d de aplicaciones li i gran envergadura. g distribuidas de g – El contenedor le provee de servicios de bajo nivel. – La lógica de negocio se encuentra en los beans, y no en el cliente => clientes más ligeros. ligeros – Son portables y reusables.

58

¿Cuándo usar EJB EJB’s? s? • Cuando C d … – La aplicación debe de ser escalable • Pueden ser distribuidos en varias máquinas y su localización seguirá siendo transparente para los clientes. clientes

– Se debe primar la integridad de los datos • Los EJB EJB’ss soportan transacciones con este fin fin. Pueden acceder de forma concurrente a objetos compartidos.

– La aplicación tendrá varios clientes • Clientes remotos Java, en otros lenguajes, navegadores web …

59

EJB’ss de entidad EJB • Nos centraremos en los l EJB’s ’ de d entidad. id d – Representan p un objeto j de negocio g en un sistema de almacenamiento persistente.

• Persistencia: – El EJB’s existe más allá de la vida de la aplicación. li ió – Puede ser gestionada por el bean o por el contenedor. d

60

EJB’ss de entidad EJB • Acceso compartido: id – Como los Beans de entidad p pueden ser accedidos por múltiples clientes al mismo tiempo p es imprescindible p q que realicen su trabajo j dentro de transacciones.

• Clave primaria: – Cada bean de entidad debe de tener un único (y unívoco) ní oco) identificador. identificador

61

EJB’ss de entidad EJB • Relaciones: l i – Al igual g q que una tabla en el modelo relacional,, un EJB de entidad puede tener relaciones con otros ((1:1,, 1:n,, n:m). )

• Persistencia manejada por el contenedor: – El contendor t d maneja j todo t d ell acceso a lla BBDD BBDD. – El EJB no contiene SQL, luego no está atado a ningún mecanismo de d almacenamiento l en concreto. 62

EJB’ss de entidad EJB – Debido D bid a esto, t los l EJB’s EJB’ son portables t bl entre t distintas plataformas/contenedores/bbdd’s. – Se debe de proveer del “Abstract Schema”

63

EJB’ss de entidad EJB • Campos persistentes: i – Todos los campos p p persistentes son almacenados en la BBDD subyacente. – El contenedor de EJB se encarga de que SIEMPRE estén sincronizados. – Normalmente cada Entity se aloja en una tabla, tabla y cada campo en una columna.

64

EJB’ss de entidad EJB • Campos relacionales l i l – Un campo p relacional es una clave ajena j en la base de datos.

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 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 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 C ll ti Li It getLineItems() tLi It () { return lineItems; } p public void setLineItems(Collection ( 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

numbersquared