You are on page 1of 42

JEE – Enterprise Java Beans

Sistemas Distribuidos

Reny Alvarado.

 

Caracas, Febrero 2007  

Aspectos a tratar
• • • • • • • • • • •
 

Java. JEE Java Platform, Enterprise Edition Modelo de Aplicación de JavaEE Arquitectura multicapas de JEE Contenedores JEE Enterprise Bean Tipos de Enterprise Bean Definir accesos de clientes con interfaces  Contenido de un Enterprise Bean Convenciones de nombres para Enterprise Bean Ejemplo de aplicación.
 

Java
• Es un lenguaje de  programación orientado  a objetos. • Fue dado a conocer en  el año 1995 en la  Conferencia de Diseño,  Tecnología y  Entretenimiento, en  Monterrey.
   

Características de Java
Seguridad Simplicidad Portable

Multi-hilo

Distribuido

Arquitectura neutral

Características

Orientado a Objetos

Interpretado Fuertemente tipificado Dinámico

Robusto

 

 

La plataforma Java     .

 Hace que Java sea  independiente de  plataforma.Java Virtual Machine  Es una aplicación que  representa a un  procesador genérico     en el cual corren los  bytecodes de Java. Implementación Concreta Aspectos Especificación abstracta JVM Instancia en Tiempo de Ejecución.     .

Impacto de Java en la WWW     .

  y la Java Persistence  API entre otros.     . Java  Server Pages. tales como: JDBC. XML. JMS.  RMI.JEE Java Platform. Enterprise Edition  • Es una plataforma de programación  para desarrollar y correr aplicaciones  Java de arquitecturas multicapas  distribuidas. servlets. web services. • Incluye varias APIs.  Enterprise JavaBeans. e­mail.

. que es controlada  por el departamento de tecnología de  información de la empresa. • Soporta aplicaciones que implementan  servicios empresariales. • Divide el trabajo en dos partes: la lógica del  negocio y la presentaci ó     n.Modelo de Aplicación de Java EE • El modelo JEE comienza con el lenguaje de  programación Java y la JVM. • La capa media corre en un hardware dedicado y  tiene acceso a todos los recursos  empresariales. • Los requerimientos de los clientes son tratados  en la capa media del modelo.

Arquitectura Multicapas de JEE • Una capa es un concepto abstracto que  define un grupo de tecnologías que  proporcionan uno o más servicios a sus  clientes. cada una  de las cuales se enfoca en proporcionar a  una aplicación un tipo específico de  funcionalidad.     . • J2EE consiste de cuatro capas.

Arquitectura Multicapas de JEE Componente Componente Capa Cliente Capa Web Componente Componente Capa de EJB Componente Componente Capa de sistemas de información empresarial Componente Componente     .

Procesamiento de peticiones en JEE Capa Cliente Componente Respuesta Componente Petición del cliente Capa Web Componente Respuesta Componente Petición del cliente Capa de EJB Componente Respuesta EJB Petición del cliente Capa de sistemas de información empresarial   Componente   RBMS .

Ejemplo de una aplicación JEE     .

• Un contenedor es una interface entre un componente y  una funcionalidad de una plataforma específica de  bajo nivel que soporta ese componente.     .Contenedores JEE • Normalmente. • JEE proporciona servicios en forma de contenedor  para cada componente. las aplicaciones multicapas son difíciles  de escribir. • La arquitectura independiente de plataformas y el  hecho de que JEE esté basado en componentes  facilitan la escritura de aplicaciones porque la lógica  del negocio es organizada dentro de componentes  reusables.

• Modelo de transacción de Java EE: Todos los  métodos en una transacción son tratados como una unidad  sencilla. • Servicios de búsqueda de JNDI: Proporciona  una interfaz unificada para servicios de múltiples nombres y  directorios • Modelo de conectividad remota de Java  EE: Administra las comunicaciones de bajo nivel entre clientes y  EJB’s     .Servicios contenedores • Modelo de seguridad de Java EE: Permite  configurar un componente para que sea accedido sólo por  usuarios autorizados.

    . • Contenedor web: Administra la ejecución de páginas  JSP y componentes servlets para aplicaciones JEE. • Contenedor EJB: Administra la ejecución de EJB para  aplicaciones JEE. • Contenedor de applets: Administra la ejecución de  applets.Tipos  de contenedores • Servidor JEE: Proporciona EJB y contenedores web. • Contenedor de aplicaciones cliente:  Administra la ejecución de componentes de tipo aplicaciones  cliente.

  que encapsula la lógica de negocios de la  aplicación.  escrito en lenguaje de programación java.     .Enterprise Bean • Es un componente del lado del servidor. • El contenedor EJB proporciona servicios  como seguridad y transacciones a sus  Enterprise Beans permitiendo al  desarrollador la construcción y desarrollo  rápido de los mismos.

    .Beneficios de Enterprise Beans • El contenedor EJB le proporciona servicios del  nivel del sistema y el desarrollador se concentra  en resolver los problemas del negocio. • Los beans son componentes portables. • Los clientes son más ligeros porque la lógica del  negocio es contenida en los beans y no en el  cliente. el desarrollador del cliente no tiene  el código que implementa la lógica del negocio o  los accesos a la base de datos. Así.

    . • La aplicación tendrá una variedad de  clientes. • Las transacciones deben asegurar la  integridad de los datos.¿Cuándo usar Enterprise Bean? • La aplicación debe ser escalable.

Tipos de Enterprise Bean Session Message­Driven   • Actúa como un listener  para tipos de mensajes  particulares. Opcionalmente puede  implementar un servicio  web. • • Ejecuta una tarea para  un cliente.     . tales como el  API de Servicios de  Mensajes de Java.

• Para accesar una aplicación que es desarrollada  en el servidor. • La sesión permanece mientras el cliente esté  conectado con el servidor     . • Una Session Bean es similar a una sesión  interactiva ya que no es compartida. el cliente invoca los métodos de  la Session Bean.¿Qué es una Session Bean? • Una Session Bean representa un componente  sencillo dentro de un servidor de aplicación. tiene sólo  un cliente y no es persistente.

•Cuando el cliente invoca un método  del bean.   • • • Las variables de instancia  representan el estado de una  única sesión cliente­bean. todas las variables de  instancia son equivalentes. •Excepto durante la invocación de un  método.   .  pero sólo durante la duración de la  invocación. El estado es retenido mientras  dure la sesión. las variables de instancia  bean pueden contener un estado.Modos de administración de estado Stateful Session Bean Stateless Session Bean   • No existe un estado conversacional  entre el cliente y el bean. cuando la sesión  finaliza el estado desaparece.  permitiendo al contenedor EJB  asignar una instancia a cualquier  cliente. El estado es llamado estado  conversacional  porque el cliente  interactúa con su bean.

existiendo solo por un período corto.   . •El bean es un mediador entre el cliente y los otros componentes de la aplicación. solo un cliente tiene acceso a una instancia bean. •El bean implementa un servicio web. •El bean necesita mantener información del cliente a través de las invocaciones de métodos. el bean ejecuta una tarea genérica para todos los clientes.  Stateful Session Bean •El estado del bean representa la interacción entre el bean y un cliente específico. •En una invocación de método simple.   Stateless Session Bean •El estado del bean no tiene datos de un cliente específico.¿Cuándo usar Session Bean? Session Bean •Si en un momento dado. •El estado de un bean no es persistente.

•  Se  diferencia  de  un  Session  Bean  en  que  el  cliente  no  puede  accesarlos  por  medio  de  interfaces.¿Qué es Message­Driven Bean? •Es  un  Enterprise  Bean  que  permite  a  las  aplicaciones  Java  EE  procesar  mensajes  asincrónicamente.     . • Los mensajes pueden ser enviados por cualquier  componente  JEE. •  Message­Driven  Bean  pueden  procesar  mensajes JMS y otros tipos de mensajes.  una  aplicación  JMS  o  una  aplicación que no usa la tecnología Java.

  pero  pueden  acceder  y  modificar esos datos. •No  representan  directamente  datos  compartidos  en  la  base  de  datos.     . •Pueden ser transacciones completas.Características de Message­Driven Bean •Son invocados asincrónicamente. •Pueden ser de corta duración.

•Para  recibir  mensajes  asincrónicamente  use  Message­Driven Bean     .¿Cuándo usar Message­Driven Bean? •Los Session Bean permiten enviar mensajes JMS   y  recibirlos  sincrónicamente  pero  no  asincrónicamente.

Uso de los Message­Driven Beans     .

•Un  cliente  puede  accesar  el  Session  Bean  sólo  a  través  de  los  métodos  definidos  en  la  interface  de  negocio  del  Bean. •Las  interfaces  bien  diseñadas  simplifican  el  desarrollo  y  mantenimiento de aplicaciones JEE. •Cuando  se  diseña  una  aplicación  JEE  se  debe  decidir  el  tipo de acceso permitido al cliente: remoto. local o servicio  web.     .Definir accesos de clientes con interfaces •Sólo  aplica  a  Session  Bean  ya  que  los  Message­Driven  Bean  no  tienen  interfaces  que  definen  el  acceso  de  los  clientes. los otros aspectos del Bean son ocultados al cliente. •La  interfaz  del  negocio  define  la  vista  de  cliente  de  un  Bean.

    .Clientes Remotos •Puede correr en otra máquina y otra JVM •Puede  ser  un  componente  web. •Para un cliente remoto la localización del Enterprise  Bean es transparente.  una  aplicación  cliente u otro Enterprise Bean.

    . •Puede  ser  un  componente  web  u  otro  Enterprise  Bean. •Para  un  cliente  local.  la  ubicación  del  Enterprise  Bean no es transparente.Clientes locales •Debe correr en la misma JVM a la que tiene acceso  el Enterprise Bean.

Clientes Locales vs.     . Clientes Remotos •  Acoplamiento  fuerte  o  ligero  de  los  beans  relacionados. • Distribución de componentes. • Tipos de clientes. • Rendimiento.

Clientes de Servicios Web Un cliente de servicio web puede accesar una  aplicación JEE de dos maneras: • El  cliente  puede  accesar  un  servicio  web  creado con JAX­WS. • El  cliente  puede  invocar  los  métodos  del  negocio  utilizando  un  stateless  session  bean.     .

  • Interfaces del negocio:  La  interfaz del negocio  Clases  de  ayuda  (Helper):    define  los  métodos  implementados  por  la  clase  Enterprise Bean • Otras  clases  necesitadas por la clase Enterprise Bean.El contenido de un Enterprise Bean Para desarrollar un Enterprise Bean se depe  proporcionar los siguientes archivos: • Clase  Enterprise  Bean:  Implementa  los  métodos definidos en la interfaz del negocio y algunos  métodos callback del ciclo de vida.   .

Estructura de un JAR Enterprise Bean     .

Item Nombre Clase Interfaz del  negocio   Sintaxis <name>Bean <name>Bean <name>   Ejemplo CuentaBean CuentaBean Cuenta .  por  ello  es  útil  seguir  las  siguientes  convenciones de nombres.Convenciones de nombres para  Enterprise Bean •Enterprise beans están compuestos por múltiples  partes.

Cuando usar EJB: •Transacciones de negocios multisistemas •Funcionalidad distribuida •Componentes portables •Aplicaciones  que  necesiten  comunicación  asincrona •Presencia de múltiples roles de seguridad     .

Cuando no usar EJB: •Control  por  parte  de  la  aplicación  de  la  concurrencia. •Rendimiento.     . •Aplicaciones con poca lógica de negocio.

        String id) throws BookException.util.     public void remove(). import java.List. @Remote public interface Cart {     public void initialize(String person) throws BookException.ejb.ejb.     public void initialize(         String person. import javax.     public List<String> getContents().util. import cart.     public void addBook(String title). }     .     public void removeBook(String title) throws BookException.BookException.Remote.Ejemplo: Interfaz de Negocio package cart.

IdVerifier. import cart.         }     }     public List<String> getContents() {         return contents. import javax.     }     public void initialize(         String person.validate(id)) {             customerId = id.util.     } }     .         } else {             customerName = person.     }     public void removeBook(String title) throws BookException {         boolean result = contents.         }         customerId = "0".         String id) throws BookException {         if (person == null) {             throw new BookException("Null person not allowed.ejb.Ejemplo: Stateful Session Bean package cart.Stateful.         } else {             throw new BookException("Invalid id: " + id). import cart.Remove.     }     @Remove()     public void remove() {         contents = null.         contents = new ArrayList<String>().").util.remove(title)."). @Stateful() public class CartBean implements Cart {     List<String> contents.ArrayList.         if (result == false) {             throw new BookException("\"" + title + "\" not in cart.add(title).util.List. import javax.ejb.     String customerName.BookException.         } else {             customerName = person.").util.     String customerId.         if (idChecker.     public void initialize(String person) throws BookException {         if (person == null) {             throw new BookException("Null person not allowed.         }         IdVerifier idChecker = new IdVerifier(). import java.         }         contents = new ArrayList<String>().     }     public void addBook(String title) {         contents.ejb. import java.

tutorial.Ejemplo: Stateless Session Bean package com. import javax.WebMethod.jws.". @Stateless @WebService public class HelloServiceBean {     private String message = "Hello.jws.Stateless.helloservice.javaee.sun.     } }     . import javax. ". import javax.ejb.ejb.     public void HelloServiceBean() {     }     @WebMethod     public String sayHello(String name) {         return message + name + ".WebService.

Resource. import javax.getClass().ejb.             } else {                 logger.         } catch (Throwable te) {             te. import javax.util.             e.JMSException.                 logger.MessageDriven. import javax. import javax.  implements MessageListener {             } static final Logger logger =          } catch (JMSException e) { Logger. public SimpleMessageBean() {         } }     } }     .         try {             if (inMessage instanceof TextMessage) {                 msg = (TextMessage) inMessage. import java.Logger.warning( @MessageDriven(mappedName = "jms/Queue")                         "Message of wrong type: " public class SimpleMessageBean                         + inMessage.ejb.printStackTrace().Ejemplo: Message Driven Bean import javax.info("MESSAGE BEAN: Message received: " +                  msg.TextMessage.logging.ActivationConfigProperty.getName()).jms.Message. private MessageDrivenContext mdc.getText()).annotation.ejb. import javax.setRollbackOnly(). @Resource             mdc.jms.jms.jms. import javax.MessageDrivenContext. import javax.getLogger("SimpleMessageBean").MessageListener.     public void onMessage(Message inMessage) {         TextMessage msg = null.printStackTrace().

Gracias Reny Alvarado     .