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