Beruflich Dokumente
Kultur Dokumente
CincoSOFT Ltda.
ConsueloFranky@cincosoft.com http://www.cincosoft.com
Introduccin
Java EE 5 reemplaz a J2EE hace menos de 1 ao: cambio profundo de modelo conceptual, arquitectura y estrategia de desarrollo Aplicaciones Java EE 5 son mucho ms concisas y eficientes: reducen el cdigo a la tercera parte El reto es volver a aprender a hacer aplicaciones de una manera completamente distinta Objetivo del curso: visin del desarrollo de aplicaciones Java EE 5, estrategias y guas, frameworks y herramientas
2
A: Arquitectura de una aplicacin Java EE 5 B: Organizacin y configuracin de una aplicacin Java EE 5 C: Programacin de una aplicacin Java EE 5 D: Elementos JSF para pantallas E: Aspectos avanzados en las aplicaciones Java EE 5 F: Meta-framework para acelerar el desarrollo en Java EE 5 (experiencia CincoSOFT)
3
Invoca Maneja
interaccin con usuario servicios
Realiza
servicios sobre objetos del dominio
Servicios Modela
entidades del negocio y sus reglas bsicas bsicos de persistencia de objetos del dominio
Validacin
sintctica
Implanta
reglas del negocio
Despliegue
HTML
Adapta
respuestas a interfaz usuario
Transformacin ObjetoRelacional
Validacin
sintctica
Estado de
sesin -usuario
Validacin
semntica
Soporte
transaccin
Maneja
excepciones
Control
transaccin
Aplicacin
web service
RM I
Servicios
-IIO
Dominio
P I-IIO
Persistencia
BD OO
JDBC
C JDB
RM
RMI-IIOP
IIOP I RM
BD relacional
servlets
TP T H
JNDI
Presentacin
HTML
Servidor de directorios
BC JD
Servidor de componentes
Navegador Web
RMI-IIOP
PC
application
J2SE
J2SE
10
servidor Web
servidor EJB
componente 1
HTML
servlet
componente 2 BD
Servidor de Aplicaciones
11
Descriptor Web clase Servlet archivo JSP archivo HTML archivo GIF
archivo .war ensamblaje del
Sintonizacin y
Aplicacin Java EE
archivo .ear
cliente
servidor Web
servidor EJB
componente 1
servlet HTML
componente 2 BD
Servidor de Aplicaciones
13
Pieza independiente de software que encapsula cierta funcionalidad Se ejecuta del lado servidor Reutilizable: no se disea para solo una aplicacin Sigue un modelo estndar de componente, ==> puede ejecutarse en cualquier plataforma que soporte el modelo Se desarrolla como un conjunto de interfaces y clases que conforman paquetes
4 4
14
15
EJB Home Cliente EJB Object Contenedor Servidor EJB componente B.D.
16
Cliente 1 Cliente 1
Contenedor B.D.
EJB Home Cliente 2 Cliente 2 EJB EJB Object Object componente componente B
Elementos de la arquitectura
N Componente EJB
Lgica del negocio implementada por el desarrollador
N Contenedor EJB
Aloja pool de componentes EJB de una clase determinada Mantiene objetos intermediarios (EJB Home y EJB Object) que interceptan los pedidos de los clientes a los componentes EJB Maneja servicios de: transacciones, threads, persistencia, seguridad.
N Servidor EJB
Aloja los contenedores EJB Maneja los servicios de conectividad, de nombres y de autenticacin
18
sin estado componente de Sesin EJB componente de Entidad componente de Mensajes sincroniza su estado con estado
CMP
no sincroniza su estado
20
Interfaz de creacin
extiende EJBHome
enumera mtodos create() y findByPrimaryKey()
BrokerHome .java
Clase implementadora
implanta componente de sesin o de entidad
define mtodos ejbCreate() y findByPrimaryKey() define mtodos de negocio, por ej: submitOrder() define mtodos de sesin o de entidad
BrokerBean.java
broker.xml
21
componente de sesin
servidor JMS
cola de mensajes
Servidor de Aplicaciones
22
23
24
Manejo de transacciones
25
BMT
transacciones manejadas por el componente mediante JDBC
mediante JTA
CMT
26
NO S NO S NO S NO S NO S NO S
error la del cliente nueva la del cliente nueva nueva ninguna la del cliente ninguna ninguna ninguna error
27
28
Manejo de seguridad
29
N Autorizacin
de utilizar un componente Web: si el usuario pertenece a un rol autorizado de invocar un mtodo de un componente EJB: si el rol del usuario tiene permiso de invocar ese mtodo
30
31
32
Flexibilidad mediante diversidad de tipos de componentes para modelar servicios de sesin o entidades de negocio Manejo de estado Eficiencia mediante manejo de cach de bases de datos en componentes de entidad y pooling de conexiones Escalabilidad y tolerancia a fallas mediante clusters de servidores y balanceo de carga
4 4
33
34
El metapatrn MVC
Model (Modelo): maneja reglas del negocio y estructura de los datos View (Vistas): maneja presentacin de los datos del sistema al usuario Controller (Controlador): transforma pedidos del usuario en operaciones sobre los objetos del modelo y selecciona vista para 35 mostrar resultados al usuario (comportamiento del sistema)
36
Framework JSF
Presentacin Aplicacin Servicios Dominio Persistencia
CONTROLADOR
servlet Faces
MODELO
Backing Bean 1 Backing Bean 2 HTML 1 HTML 2 JSP pantallazo1 JSP pantallazo2 EJB sesin A
EJB entidad C
BD relacional
VISTAS
Navegador Cliente Servidor Web Servidor de componentes Servidor BD
37
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <html> <head> <title>Add 2 numbers</title> </head> <body> <f:view> <h:form id="addForm"> First Number: <h:inputText id="firstNumber" value="#{BackCalc.firstNumber}" required="true" /> <h:message for="firstNumber" /> <br> Second Number: <h:inputText id="secondNumber" value="#{BackCalc.secondNumber}" required="true" /> <h:message for="secondNumber" /> <br> Result: <h:outputText id="output" value="#{BackCalc.result}" /> <br> <h:commandButton id="submitAdd" action="#{BackCalc.add}" value="Add" /> </h:form> </f:view> </body> </html> 38
public class BackCalc { // atributos ligados a los UIComponents: private int firstNumber = 0; private int secondNumber = 0; private int result = 0; // model: podria ser la referencia a un EJB: private Calculator calculator = new Calculator(); //. . . metodos set y get de atributos . . . // reaccion a evento sobre el boton: public String add() { result = calculator.add(firstNumber, secondNumber); return "success"; } }
39
Validacin automtica:
abc
40
@Entity @Table(name="ORDER") @NamedQuery(name="findOrdersByDate", queryString= "select o from Order o where o.orderDate = :date"); public class Order implements java.io.Serializable { private long orderId; private Date orderDate; private List<OrderItem> orderItems = new ArrayList(); @Id(generate=AUTO) @Column(name="ORDER_ID") public long getOrderId() { return orderId;} public void setOrderId(long orderId) { this.orderId = orderId; } @Column(name="ORDER_DATE") public Date getOrderDate() { return orderDate;} public void setOrderDate(Date orderDate) { this.orderDate= orderDate; } @OneToMany(Cascade=All) @JoinColumn("ORDER_ID") public List<OrderItem> getOrderItems(){return orderItems;} public void setOrderItems (List<OrderItem> orderItems) { this.orderItems = orderItems; } }
42
@Stateful public class ShoppingCartBean implements ShoppingCart { @Inject EntityManager em; private List itemsInCart; . . . public Order checkout() { Order order = new Order(); order.setOrderDate(new Date()); order.setOrderItems(this.itemsInCart); em.persist(order);// INSERTs en ORDER y ORDER_ITEM return order; } public List<Order> findOrdersByDate (Date date) { return em.createNamedQuery("findOrdersByDate") .setParameter("date", date).getResultList(); // SELECTs } public void updateOrder(Order order) { em.merge (order); // UPDATEs en ORDER y ORDER_ITEM } }
44
public Order loadOrder(Long orderId) throws DAOException { Order order = null; PreparedStatement ps = null; ResultSet rs = null; String queryOrder = " SELECT order_date FROM ORDER WHERE order_id = ? "; String queryOrderItems = " SELECT order_item_id, quantity " " FROM ORDER_ITEM WHERE order_id = ? "; try { dbConnection = datasource.getConnection(); // consulta a tabla ORDER: ps = dbConnection.prepareStatement(queryOrder); ps.setLong(1, orderId.longValue()); ps.executeQuery(); ORDER_ITEM ORDER rs = ps.getResultSet(); order_item_id order_id rs.next(); order_id order_date order = new Order(); quantity order.setOrderId(orderId); order.setOrderDate(rs.getDate(1)); rs.close(); ps.close(); 45
Servicios
Dominio Persistencia
CONTROLADOR
EJB controlador
MainServlet
RequestProcessor
ScreenFlowManager
WebProxy
StateMachine
JSP template
MODELO
EJB entidad C
VISTAS
HTML 1 HTML 2 Navegador Cliente JSP pantallazo1 JSP pantallazo2 javaBean 1 javaBean 2
EJB sesin A
DAO
BD relaBD cional
Servidor Web
Servidor de componentes
47 Servidor BD
48
Java EE 5: Arquitectura MVC de una aplicacin utilizando JSF, EJB 3.0 y Seam
N. Presentacin
Navegador Cliente
N. Aplicacin (Web)
Servidor Web
N. Servicios
Servidor de componentes
N. Persistencia
Servidor de BD
frameworks
HTML servlet JSF
forw a rd
servlet Seam
ejb Seam
entity manager
BD relacional
JSP JSP
entidades
Convenciones:
interaccin HTTP
invocacin
acceso BD
49
Seam logra que las entidades estn asociadas directamente a las pantallas
N las pantallas muestran valores de atributos de entidades N el usuario modifica o suministra valores para estos atributos N asociacin bidireccional entre pantallas y entidades
4 4 4
Procesamiento de eventos de pantallas es realizado directamente por los componentes EJB de sesin Se eliminan intermediarios => muchos patrones se vuelven innecesarios Modelo de contextos de diversos alcances para manejar
adecuadamente el estado de las aplicaciones
-------------------------------------------------------------------------4
Framework EJB 3.0 recoge experiencias de JDO, HIBERNATE, TOPLINK, SPRING Principal autor de Seam: Gavin King (el mismo autor de HIBERNATE)
51
Alternativas de implementacin
JSP
Facelets
Portal
52
This sample application has been built on top of the following frameworks:
JSF: implemented by Apache Myfaces EJB 3.0: implemented by JBoss JBoss Seam: to glue JSF and EJB 3.0 JBoss jBPM: workflow
CincoSOFT studied the booking seam demo, that illustrates Seam conversations, and wrote a new application whose main characteristics are:
organization oriented by modules and use cases security model based in roles to access system resources workflow using jBPM, with the participation of several use cases and actors dynamic menu with data coming from the database a growing set of high level patterns of screens flexible timeout control of the application and of conversations internationalization event management between ejbs based in annotations, event management for screen rendering standardized source code administration based on ANT (compiling, 53 packaging, deployment, javadoc generation, testng, cvs)
Mostrar:
N diferentes perfiles de usuarios => diferentes opciones de men N elementos de pantallas: mens, tablas con scroll, tablas ordenables, tablas editables con validacin, facilidades ajax N mltiples conversaciones para un mismo usuario (abrir segunda pestaa sobre enlace de conversacin e invocar botn "Buscar" para abrir segunda conversacin) N jBPM: inscripcin de hoteles y aprobacin posterior por parte del superadministrador N internacionalizacin
54
Libros estudiados
Estndares Java EE