Download ENTERPRISE JAVA BEANS
Document related concepts
no text concepts found
Transcript
ENTERPRISE JAVA BEANS (EJB) DAVID VIRGIL NARANJO PROGRAMACIÓN AVANZADA INGENIERIA INFORMÁTICA ÍNDICE DE CONTENIDOS(1/2) 1. 2. 3. 4. 5. 6. Introducción Introducción J2EE ¿Qué es un Java Bean? Diferencias entre un EJB y un Java Bean Ventajas EJB Desventajas EJB ÍNDICE DE CONTENIDOS(2/2) 7. 8. 9. 10. 11. Tipos de EJB Resumen general Componente EJB Ejemplos Creación proyecto 1. INTRODUCCION Construir aplicaciones independientes Programador solo interesado en la lógica de negocio. Uso de componentes Java independientes de los descriptores de despliegue Xdoctlet permite la independencia. Acelerar proceso de desarrollo y despliegue 2. INTRODUCCIÓN J2EE (1/4) Arquitectura multicapa. Aplicaciones empresariales basadas en web Aplicaciones cliente-servidor Utilizar componentes del lado del servidor Uso de contenedores web 2. INTRODUCCIÓN J2EE (2/4) 2. INTRODUCCIÓN J2EE (3/4) COMPONENTES DE NEGOCIO: 2. INTRODUCCIÓN J2EE (4/4) CONTENEDORES J2EE 2. ¿QUÉ ES UN JAVA BEAN (1/3) Un Java Bean es una clase Java que permite agrupar funcionalidades y propiedades utilizadas en una aplicación y poder utilizarse desde una página JSP. Así se consigue aislar la lógica de la aplicación del diseño y aspecto, permitiendo que ambas fases puedan ser desarrolladas de forma simultánea y separadas para luego ser integradas. 2. ¿QUÉ ES UN JAVA BEAN (2/3) Ejemplo: public class LibroListenerBean implements¬ HttpSessionBindingListener { private String titulo; private String autor; public void setTitulo(String titulo) { this.titulo = titulo; } public void setAutor(String autor) { this.autor = autor; } public String getTitulo() { return titulo; } public String getAutor() { return autor; } public String getTitulo() { return titulo; } public String getAutor() { return autor; } } 2. ¿QUÉ ES UN JAVA BEAN (3/3) Ejemplo:Libro.jsp jsp:useBean id="libro"¬ class="iworld.LibroListenerBean"¬ scope="session" /> <%=session.getAttribute("javabean") + "<br>" %> <html><head><title>JavaBeans - iWorld</¬ title> </head><body> <b>Guardamos los datos...</b><p> <jsp:setProperty name="libro"¬ property="titulo" value="Avanced¬ JavaServer Pages" />¬ <jsp:setProperty name="libro"¬ property="autor" value="David M. Geary" /> <b>Recuperamos los datos...</b><br> <jsp:getProperty name="libro"¬ property="titulo" /><br> <jsp:getProperty name="libro"¬ property="autor" /><br> </body></html> 4. JAVA BEAN VS EJB (1/2) Un "Java Bean" es un componente utilizado en Java que permite agrupar funcionalidades para formar parte de una aplicación. "Enterprise Java Bean" también agrupa funcionalidades para una aplicación, sin embargo, a diferencia de un "Java Bean" un "Enterprise Java Bean" es un "deployable component" . 4. JAVA BEAN VS EJB (2/2) Un "Java Bean" requiere ser integrado con otros componentes para que éste sea funcional, mientras un "Enterprise Java Bean" a través de un "EJB Container" puede ser activado("deployed"). 5. VENTAJAS EJB Servicios ("Middleware") Division de trabajo Concentrar esfuerzos en la "lógica de proceso" sin preocuparse del diseño de servicios. Diversos clientes Si ocurre un error que proceso ha de ejecutarse. Si la base de datos especificada se encuentra desactivada, existe otra alternativa JSP o servlets, bases de datos, applets… Diversos vendedores Ejecutar cualquier "EJB" en cualquier "EJB Container“ (IBM, Jboss, Inprise) 6. DESVENTAJAS EJB Tiempo de Desarrollo El desarrollar un Sistema con EJB's es sumamente complejo. Alto conocimiento de Java RMI,JDBC, JNDI, JavaBeans… 7. TIPOS DE EJB (1/2) ENTITY EJB Datos persistentes almacenados en una fila de una tabla/relación de una base de datos SESSION EJB Conversación temporal con un cliente TIPOS: Stateless (Session) EJB's Statefull (Session) EJB's BEANS dirigidos por mensajes 7. TIPOS DE EJB (2/2) DIFERENCIAS Entity Bean/Session Bean Persistencia Acceso compartido Clave primaria 8. RESUMEN GENERAL Los EJB se utilizan en la capa de negocio Los EJB siempre son utilizados desde el servidor. Los JavaBeans se pueden utilizar tanto en el cliente como en el servidor. Tipos de EJB: de sesión o de entidad. Los EJB agrupan funcionalidades Contenedor EJB disponible con J2EE 9. COMPONENTE EJB DIFERENCIAS EJB SESIÓN CON/SIN ESTADO •Un EJB con estado almacena información entre llamadas PARTES COMPONENTE EJB •Interfaz componente -> define los métodos del bean •Interfaz home -> define el metodo create •Clase de implementación del bean •Clase prueba bean 10. EJEMPLOS (1/7) EJB de sesión sin estado: Conversor de monedas INTERFAZ COMPONENTE */ package converter; import javax.ejb.EJBObject; import java.rmi.RemoteException; import java.math.*; public interface Converter extends EJBObject { // Método que permite convertir una cantidad en dolares a yenes public BigDecimal dollarToYen(BigDecimal dollars) throws RemoteException; // Método que permite convertir una cantidad en yenes a euros public BigDecimal yenToEuro(BigDecimal yen) throws RemoteException; } 10. EJEMPLOS (2/7) Implementacion BEAN /* * Clase del Bean de Sesion sin estado ConverterBean */ package converter; // Implementación del método de negocio yenToEuro public BigDecimal yenToEuro(BigDecimal yen) { BigDecimal result = yen.multiply(euroRate); return result.setScale(2, BigDecimal.ROUND_UP); import import import import } java.rmi.RemoteException; javax.ejb.SessionBean; javax.ejb.SessionContext; java.math.*; // Constructor público sin parámetros public ConverterBean() {} // Métodos ejbCreate public void ejbCreate() {} public class ConverterBean implements SessionBean { // Factor de cambio a yenes BigDecimal yenRate = new BigDecimal("121.6000"); // Factor de cambio a euros BigDecimal euroRate = new BigDecimal("0.0077"); // Métodos del interfaz SessionBean public void ejbRemove() {} // Implementación del método de negocio dollarToYen public BigDecimal dollarToYen(BigDecimal dollars) { public void setSessionContext(SessionContext sc) {} BigDecimal result = dollars.multiply(yenRate); return result.setScale(2, BigDecimal.ROUND_UP); } public void ejbActivate() {} public void ejbPassivate() {} } 10. EJEMPLOS (3/7) Interfaz home /* * Interfaz Home del EJB ConverterBean */ package converter; Cliente JSP <%! private Converter converter = null; public void jspInit() { try { InitialContext ic = new InitialContext(); Object objRef = import java.io.Serializable; ic.lookup("java:comp/env/ejb/TheConverter"); import java.rmi.RemoteException; ConverterHome home = import javax.ejb.CreateException; (ConverterHome)PortableRemoteObject.narrow(objRef, import javax.ejb.EJBHome; ConverterHome.class); converter = home.create(); public interface ConverterHome extends EJBHome { } catch (RemoteException ex) { System.out.println("Couldn't create converter bean."+ // Método create que devuelve un objeto de tipo ex.getMessage()); Converter } catch (CreateException ex) { // (interfaz remota de ConverterBean) System.out.println("Couldn't create converter bean."+ ex.getMessage()); Converter create() throws RemoteException, CreateException; } catch (NamingException ex) { System.out.println("Unable to lookup home: "+ } "TheConverter "+ ex.getMessage()); } } %> 10. EJEMPLOS (4/7) …… <p>Introduce una cantidad para convertir:</p> <form method="get"> <input type="text" name="amount" size="25"> <br> <p> <input type="submit" value="Submit"> <input type="reset" value="Reset"> </form> <% String amount = request.getParameter("amount"); if ( amount != null && amount.length() > 0 ) { BigDecimal d = new BigDecimal (amount); %> <p> <%= amount %> dollars son <%= converter.dollarToYen(d) %> Yen. <p> <%= amount %> Yen son <%= converter.yenToEuro(d) %> Euro. <% } %> 10. EJEMPLOS (5/7) EJB de sesión con estado: Carrito compra libros /* * Interfaz remota del EJB CartBean */ import java.util.*; import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface Cart extends EJBObject { public void addBook(String title) throws RemoteException; public Vector getContents() throws RemoteException; } /* * Interfaz home del EJB CartBean */ import java.io.Serializable; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; public interface CartHome extends EJBHome { Cart create(String person) throws RemoteException, CreateException; } 10. EJEMPLOS (6/7) /* * Clase CartBean */ import java.util.*; import javax.ejb.*; public class CartBean implements SessionBean { public Vector getContents() { return contents; } public CartBean() {} String customerName; Vector contents; public void ejbRemove() {} public void ejbCreate(String person) throws CreateException { if (person == null) { throw new CreateException("No se permite entrar sin indentificación."); } else { customerName = person; } public void addBook(String title) { contents.addElement(title); } } contents = new Vector(); public void ejbActivate() {} public void ejbPassivate() {} public void setSessionContext(SessionContext sc) {} } 10. EJEMPLOS (7/7) /* * Aplicación cliente para CartBean */ import java.util.*; import javax.naming.Context; import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject; public class CartClient { public static void main(String[] args) { try { Context initial = new InitialContext(); Object objref = initial.lookup("java:comp/env/ejb/SimpleCart"); CartHome home = (CartHome) PortableRemoteObject.narrow(objref, CartHome.class); Cart shoppingCart = home.create("swc"); shoppingCart.addBook("Harry Potter: La piedra filosofal"); shoppingCart.addBook("Harry Potter: La cámara secreta"); shoppingCart.addBook("Harry Potter: El caliz de fuego"); Vector bookList = new Vector(); bookList = shoppingCart.getContents(); Enumeration enumer = bookList.elements(); while (enumer.hasMoreElements()) { String title = (String) enumer.nextElement(); System.out.println(title); } System.exit(0); } catch (Exception ex) { System.err.println("Capturada una excepción!!!!!"); ex.printStackTrace(); System.exit(1); } } } CREACIÓN PROYECTO (1/1) 1. 2. 3. 4. 5. 6. Bajarse contenedor EJB: BEA Weblogic 8.1 Cargar servidor de aplicaciones WebLogic Creación de proyecto Java con Eclipse Añadir las 3 clases del Bean Hacer deploy del EJB en BEA Crear clase cliente