Java EE Enterprise Beans (EJB)



Documentos relacionados
Componentes Distribuidos EJBs. Ing. Cesar Julio Bustacara Medina

Desarrollo de Sistemas Software Basados en Servicios y Componentes

Universidad ORT - Arquitectura de Software. Requisitos

Aplicaciones web construidas a base de componentes:

JAVA ENTERPRISE EDITION (J2EE) ARQUITECTURA TECNOLOGÍAS (1/2) (L1)

Desarrollo de Software con

PRÁCTICA 3: COMPONENTES. Javier Sánchez Pérez Arquitectura del Software Grado en Informática

Ejercicio 4. EJB Sesión - Sistema SGA. Java EE. Ejercicio 4. EJB Sesión Sistema SGA. Curso de Java EE

JAVA EE 5. Arquitectura, conceptos y ejemplos.

Enterprise JavaBeans 3. Aplicaciones Distribuidas

1. Posicionarse en la vista Services y seleccionar el ítem Servers. En el menú contextual del Mouse seleccionar la opción Add Server

Enterprise JavaBeans

Curso de Java EE Todos los Derechos Reservados Global Mentoring Experiencia y Conocimiento para tu Vida 1

Tema 5. Plataforma Java EE

5.4 Caso de estudio: diseño e implementación de la capa modelo de MiniPortal con EJB. Tipos de EJBs y patrones usados

CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa

1. Definición. Open Source. Escalable. Alto desempeño. Arquitectura Modular. Producto de licencia de código abierto sin coste adicional.

Modelo de Objetos Distribuidos

Requisitos. Universidad ORT Arquitectura de Software

'HVDUUROORGH$SOLFDFLRQHV

Ingeniería del Software Arquitectura Física en 3 niveles

Ejercicio 6. Persistencia con JPA - Sistema SGA. Java EE. Ejercicio 6. Persistencia con JPA Sistema SGA. Curso de Java EE

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. IIC1102 Introducción a la Programación

4 Encuentro Internacional de Computación Aplicada

Tema 5. Plataforma Java EE

Curso: Programación con JAVA SE Estándar Edition.

[CASI v.0109] Pág. 1

Proyecto ELO-330 Administración Salas del Departamento de Electrónica RC1. Gerardo Lecaros Felipe Díaz

Técnico Superior en Programación con Java SE Standard Edition

RMI [Remote Method Invocation]

Desarrollo y servicios web Sesión 18

SEGURIDAD EN APLICACIONES WEB CON APACHE TOMEE. Ing. Javier Mantilla Portilla

Notas técnicas de JAVA Nro. 7 Tip Breve

Web Services en Java. Taller de Programación. Instituto de Computación Facultad de Ingeniería Universidad de la República

Desarrollo de Aplicaciones Web con Eclipse

Curso de Jboss Administración

Taller de Sistemas de Información 2

Caso J2EE. Necesidades del negocio. Arquitectura Luther

Descarga, instalación y uso de herramientas:

Instrucciones para el despliegue de EJBs

Instalación y uso del framework Taylor para el modelaje de entidades JPA

Curso de JavaServer Faces

Conceptos fundamentales de la POO. Fundamentos de la Programación Orientada a Objetos Objetos y Clases

Arquitectura Cliente/Servidor. Invocación de Métodos Remotos RMI: Remote Method Invocation. Llamadas a Métodos Remotos

Práctica 4: Java Remote Method Invocation (RMI)

Introducción a JAX-WS Web Services

Introducción Descripción del servicio

Curso de Java EE Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 1

CentralTECH JAVA EE 7 Desarrollo

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

Java 7.0 Advanced Application Developer

Workflows? Sí, cuántos quiere?

Guía de instalación del software de la asignatura

Ejercicio 7. Hibernate Tools y JPA en Eclipse IDE. Java EE. Ejercicio 7. Instalación Hibernate Tools. Curso de Java EE

Agentes con Interfaz Gráfica.

1 Índice Introducción Propósito Alcance Modelo Arquitectónico Inicial... 3

CONTENIDO. Serialización. Carga dinamica de stubs RMI AVANZADO. Callbacks. Carga dinámica de Stubs

Java en 2 horas. Rodrigo Santamaría

Reutilización de software

Curso de Spring Framework

Enterprise JavaBeans Sesión 1: Características básicas de EJB

Agosto. Un primer JSP. Guía rápida. [ h t t p : / / w w w. o p e n b o x e r m b. c o m / j a v a. p h p ]

DESARROLLO DE UN CLIENTE SOFIA2 (KP) SIGUIENDO ARQUITECTURA KP-MODELO

Tutorial básico del entorno de desarrollo Eclipse.

Programación Orientada a Objetos en Java

Universidad ORT - Arquitecturas de Software sobre plataforma JEE Web Services (parte 1)

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2

Manual de Instalación

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

1. El entorno de desarrollo Eclipse

Guía Rápida de Puesta en Marcha de MailStore

Desarrollo de Aplicaciones web con JPA, EJB, JSF y PrimeFaces

UNIVERSIDAD DE PIURA

Sistemas de Operación 3

Curso de Java POO: Programación orientada a objetos

SISTEMAS DISTRIBUIDOS Profesor: José Luis Montoya Restrepo

Seminario de Java. Contenido

FRAMEWORK 2 Recepción de SMS

Pruebas de unidad con JUnit

5.6.3 Session Facade

Introducción a los EJBs

Experto Universitario Java Enterprise Spring

Tema 1. Introducción a JAVA

Interacción entre Aplicaciones: objetos distribuidos e invocación remota

Primera Escuela de la Red Temática SVO. Madrid, Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta.

Administración de la red (Windows 2008)

Desarrollo de Software con

Analista Programador Java: Business Apps Expert

TciSatSingleW32 Versión 3.1

1. Visión general de RMI

Marcos de Desarrollo. Diseño e implementación de aplicaciones Web con.net

WEB SERVICES CON AXIS

Primeros pasos a la hora de utilizar BitDefender Client Security

Toda base de datos relacional se basa en dos objetos

Universidad Tecnológica Nacional FRC DIPLOMATURA SUPERIOR en Desarrollo bajo Plataforma Java EE

Programa de Ayuda EMCS Instalación Versión SQL Server Versión Marzo 2010

Administración Local Soluciones

Ahora hay que instalar el servidor de la base de datos de MySQL que será EasyPHP. Para esto

Acronis License Server. Guía del usuario

Práctica 2: Java Remote Method Invocation (RMI)

Transcripción:

Java EE Enterprise Beans (EJB) Aplicaciones Web/Sistemas Web Juan Pavón Mestras Dep. Ingeniería del Software e Inteligencia Artificial Facultad de Informática Universidad Complutense Madrid Material bajo licencia Creative Commons, Juan Pavón 2013 Enterprise Beans Componentes Java que implementan la tecnología Enterprise Java Beans (EJB) Se ejecutan en un contenedor EJB (en un servidor de aplicaciones) Implementan la lógica de negocio de la aplicación Son reusables Se pueden adaptar y configurar en el despliegue El contenedor de EJB proporciona varios servicios Ciclo de vida de los EJB Gestión de la persistencia Servicio de nombres Mensajería asíncrona Seguridad de acceso Gestión de transacciones Balanceo de carga Juan Pavón - UCM 2012-13 Enterprise Beans 2

Arquitectura EJB Cliente Cliente Cliente Enterprise Bean Enterprise Bean Enterprise Bean Contenedor EJB Servidor EJB Juan Pavón - UCM 2012-13 Enterprise Beans 3 Servidor EJB Entorno de ejecución Gestión de procesos y threads Gestión de recursos del sistema Conexión a bases de datos API de gestión Juan Pavón - UCM 2012-13 Enterprise Beans 4

Contenedor de EJB Entorno de ejecución de los EJBs Transacciones, seguridad javax.ejb.ejbhome, javax.ejb.ejbobject javax.ejb.sessionbean SessionBean1 MessageBean Descriptor de despliegue Descriptor de despliegue SessionBean2 Descriptor de despliegue Acceso a servicios remotos Ciclo de vida, recursos, persistencia, gestión del espacio de nombres JNDI Juan Pavón - UCM 2012-13 Enterprise Beans 5 Clientes EJB Pueden ser servlets o aplicaciones El contenedor de EJBs puede controlar el acceso de los clientes Para localizar los EJBs los clientes usan el Java Naming and Directory Interface (JNDI) El acceso a los EJBs se puede hacer remótamente con Java RMI (Remote Method Invocation) Juan Pavón - UCM 2012-13 Enterprise Beans 6

Enterprise Beans Implementan la lógica de negocio Tipos (EJB 3.1) Enterprise Bean de Sesión Gestionan la lógica de negocio para un cliente Tipos Stateless Session Beans: no mantienen estado entre invocaciones Stateful Session Beans: guardan estado entre invocaciones de un mismo cliente Singletons: una sola instancia que es compartida por muchos clientes Enterprise Bean dirigido por Mensajes Oyente (listener) para un mensaje particular (generalmente a través del API Java Message Service) No mantiene estado entre invocaciones Entity Bean Representaciones de datos almacenados en una BD Recientemente se recomienda usar Java Persistence API (JPA) Juan Pavón - UCM 2012-13 Enterprise Beans 7 Enterprise Beans Gran parte de la funcionalidad la gestiona el contenedor En ejecución, el contenedor intercepta todas las llamadas al EJB Ejecuta código relacionado con la política de multi-threading, transacciones, y seguridad Llamará al método correspondiente Realiza las tareas de limpieza correspondientes tras la llamada Se define mediante declaraciones En el desarrollo: anotaciones en el código En descriptores de despliegue Juan Pavón - UCM 2012-13 Enterprise Beans 8

Enterprise Beans Persistencia El almacenamiento de los datos de los beans Los puede gestionar el servidor: Container-Managed Persistence O el propio bean: Bean-Managed Persistence Transacciones distribuidas El servidor gestionará todas las transacciones Se puede gestionar también directamente (hay que tener las ideas claras) Seguridad Transmisión de datos por SSL/RMI Autenticación de cliente y servidor con SSL Controlo de acceso a objetos, métodos y servicios con ACLs (listas de control de acceso) Multithreading Las políticas de multithreading a aplicar se declaran y el servidor se encarga de ejecutarlas El programador no tiene que ocuparse de este aspecto Juan Pavón - UCM 2012-13 Enterprise Beans 9 Interfaces Inicialmente los EJBs tenían que implementar varias interfaces Desde la especificación 3.0 pueden ser objetos POJO pero con anotaciones Interfaz Home Extiende la interfaz javax.ejb.ejbhome Interfaz remota para crear, encontrar y eliminar beans Interfaz Remote Extiende la interfaz javax.ejb.ejbobject Interfaz remota que define los métodos concretos que implementará el bean Clase Bean Extiende la clase javax.ejb.enterprisebean Implementa la lógica de negocio Juan Pavón - UCM 2012-13 Enterprise Beans 10

Funcionamiento Naming Service Servidor Cliente RMI RMI Home Interface (Factory) Remote Interface EJB Object (Wrapper) Contenedor Enterprise Java Bean (Biz Logic) Escrito por el programador Implements Invoca Crea/Usa Adaptado de jguru (2000): Enterprise JavaBeans Fundamentals Juan Pavón - UCM 2012-13 Enterprise Beans 11 Programación de EJB Interfaz Remote Extiende la interfaz javax.ejb.ejbobject Interfaz remota que define los métodos concretos que implementará el bean import javax.ejb.ejbobject; import java.rmi.remoteexception; public interface Cliente extends EJBObject { public Name getnombre() throws RemoteException; public void setnombre(string nombre) throws RemoteException; public Address getemail() throws RemoteException; public void setemail(string email) throws RemoteException; Juan Pavón - UCM 2012-13 Enterprise Beans 12

Programación de EJB Interfaz Home Extiende la interfaz javax.ejb.ejbhome Interfaz remota para crear, encontrar y eliminar beans Se genera automáticamente la clase que la implementa import javax.ejb.ejbhome; import javax.ejb.createexception; import javax.ejb.finderexception; import java.rmi.remoteexception; public interface ClienteHome extends EJBHome { public Cliente create(integer idcliente) throws RemoteException, CreateException; public Cliente findbyprimarykey(integer idcliente) throws RemoteException, FinderException; public Enumeration findbynombre(string nombre) throws RemoteException, FinderException; Juan Pavón - UCM 2012-13 Enterprise Beans 13 Programación de EJB Clase Bean Extiende la interfaz javax.ejb.ejbhome Interfaz remota para crear, encontrar y eliminar beans import javax.ejb.entitybean; public class ClienteBean implements EntityBean { String nombre; String email; public String getnombre() { return nombre; public void setnombre (String nombre) { this.nombre = nombre; public Address getemail() { return email; public void setemail(string email) { this.email = email; Juan Pavón - UCM 2012-13 Enterprise Beans 14

Entorno de trabajo Para desarrollar, Eclipse o Netbeans Como servidor de aplicaciones que tenga contenedor de EJBs JBoss: http://www.jboss.org Hay una versión para desarrolladores: JBoss Developer Studio (Eclipse + JBoss Tools) Glassfish: https://glassfish.java.net/es/ Una comparativa interesante: http://antoniogoncalves.org/2011/10/20/o-java-ee-6-application-servers-where-art-thou/ Bases de datos Apache Derby: http://db.apache.org/derby/ H2: http://www.h2database.com Juan Pavón - UCM 2012-13 Enterprise Beans 15 Primera aplicación EJB con Eclipse y JBoss Una posibilidad es instalar JBoss Developer Studio Otra es configurar Eclipse para trabajar con JBoss Tools Help Eclipse Marketplace Buscar: JBoss Seleccionar JBoss Tools para la versión de eclipse actual (Juno) Se pueden seleccionar únicamente Java Development Tools y JBoss AS Tools Otros plugins se podrán instalar posteriormente si fueran necesarios Al acabar, reinicializar eclipse Como BD se puede instalar Derby, muy eficiente y escrita en Java Instalar los plugins Derby 10 Core Plug-in y Derby 1.0 UI Descargarlos de http://db.apache.org/derby/derby_downloads.html Y descomprimirlos en la carpeta de instalación de eclipse Alternativa: Eclipse Data Tools Platform http://www.vogella.com/articles/eclipsedatatoolsplatform/article.html Juan Pavón - UCM 2012-13 Enterprise Beans 16

Primera aplicación EJB con Eclipse y JBoss Instalar JBoss http://sourceforge.net/projects/jboss/files/jboss/jboss-6.0.0.final/ jboss-as-distribution-6.0.0.final.zip/download Añadir el servidor JBoss en eclipse En Servers o File New Other Server Server Añadir el JBoss AS 6.x Indicar el directorio donde se ha descomprimido el JBoss Para arrancar el servidor, seleccionarlo y con el menú contextual elegir Start Crear un nuevo proyecto EJB New EJB Project Indicar que se usará el servidor JBoss en Target Runtime Crear una clase Java que será el primer EJB Crear un paquete (es.ucm.jpavon.ejb) En ejbmodule crear el primer EJB con New Session Bean (EJB 3.x) Juan Pavón - UCM 2012-13 Enterprise Beans 17 Primera aplicación EJB con Eclipse y JBoss package es.ucm.jpavon.ejb; import javax.ejb.remote; import javax.ejb.stateless; Indica que el POJO es un Bean stateless para que el contenedor lo trate como un EJB @Remote @Stateless public class PrimerBean implements PrimerBeanRemote { public String saluda(string nombre) { return "Hola " + nombre; Al haber declarado @Remote eclipse añade la interfaz Se genera al haber declarado la clase como Remote package es.ucm.jpavon.ejb; import javax.ejb.remote; @Remote public interface PrimerBeanRemote { public String saluda(string nombre); Hay que declarar los métodos que vaya a ofrecer el Bean Juan Pavón - UCM 2012-13 Enterprise Beans 18

Primera aplicación EJB Cliente El cliente puede ser otra aplicación Crear en eclipse un nuevo proyecto Java Para que pueda usar la configuración del proyecto anterior (y acceder a las librerías correspondientes de EJB) En el proyecto, seleccionar Build Path Configure Build Path Pestaña Projects, botón Add, seleccionar el anterior Crear la clase del programa cliente Ejecutar como una aplicación normal Juan Pavón - UCM 2012-13 Enterprise Beans 19 Primera aplicación EJB Cliente package es.ucm.jpavon.cliente; import java.util.properties; import javax.naming.*; import es.ucm.jpavon.ejb.primerbeanremote; Referencia JNDI del componente public class ClienteEJB { private static final String JNDI_PRIMER_BEAN = "PrimerBean/remote"; public static void main(string[] args) throws NamingException { Properties p = new Properties(); p.put("java.naming.factory.initial",org.jnp.interfaces.namingcontextfactory"); p.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces"); p.put("java.naming.provider.url", "jnp://localhost:1099"); Context contexto = new InitialContext(p); Contexto del contenedor PrimerBeanRemote bean = (PrimerBeanRemote)contexto.lookup(JNDI_PRIMER_BEAN); String respuesta = bean.saluda("cliente Java"); System.out.println(respuesta); Juan Pavón - UCM 2012-13 Enterprise Beans 20

Anotaciones EJB El uso de anotaciones de metadatos (desde EJB 3.0) simplifica la codificación de EJBs Se genera código automáticamente Cambios de las anotaciones requieren recompilar Definidas como clases del paquete javax.ejb Por ejemplo, la anotación @Remote corresponde a javax.ejb.remote Se pueden definir para afectar a clases o métodos Descripción completa: http://docs.oracle.com/cd/e11035_01/wls100/ejb30/annotations.html Juan Pavón - UCM 2012-13 Enterprise Beans 21 Anotaciones EJB Anotaciones de Beans de Sesión @Stateful: Indica que el Bean de Sesión es con estado @Stateless: Indica que el Bean de Sesión es sin estado @Init: Especifica que el método se corresponde con un método create de un EJBHome o EJBLocalHome de EJB 2.1 @Remove: Indica que el contenedor debe llamar al método cuando quiera destruir la instancia del Bean retainifexception - indica si el Bean debe mantenerse activo si se produce una excepción. Por defecto a false @Local: Indica que la interfaz es local @Remote: Indica que la interfaz es remota @PostActivate: Invocado después de que el Bean sea activado por el contenedor @PrePassivate: Invocado antes de que el Bean esté en estado passivate Adaptado de: http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=anotacionesejb3 Juan Pavón - UCM 2012-13 Enterprise Beans 22

Anotaciones EJB Anotaciones de un Bean de Entidad @Entity: Indica que es un Bean de Entidad Anotaciones del ciclo de vida: @EntityListeners, @PrePersist, @PreRemove, @PostUpdate, @PersistenceContext, etc. Anotaciones de un Bean Manejador de Mensajes @MessageDriven: Indica que la clase es un Bean Manejador de Mensajes Atributos name por defecto el nombre de la clase pero se puede especificar otra messagelistenerinterface interfaz del Bean message listener activationconfig otras opciones de configuración para JMS mappedname si se quiere que el contenedor maneje el objeto indicado de manera específica description - descripción del Bean Adaptado de: http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=anotacionesejb3 Juan Pavón - UCM 2012-13 Enterprise Beans 23 Anotaciones EJB Anotaciones comunes a los Beans de Sesión y Beans Manejadores de Mensajes @Timeout: Asigna un tiempo de ejecución a un método. @ApplicationException: Excepción a enviar al cliente cuando se produzca. Transacciones @TransactionManagment: Especifica quién va a manejar la transacción: el contenedor (TransactionManagmentType.CONTAINER) o el Bean (TransactionManagmentType.BEAN). @TransactionAttribute: Especifica el método de negocio invocado por el contexto de la transacción únicamente si es manejada por el contenedor. (TransactionAttributeType.REQUIRED (por defecto) MANDATORY REQUIRES_NEW SUPPORTS NOT_SUPPORTED NEVER. Adaptado de: http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=anotacionesejb3 Juan Pavón - UCM 2012-13 Enterprise Beans 24

Anotaciones EJB Interceptores (métodos invocados automáticamente al invocar a los métodos de negocio de un Bean) @Interceptors: Interceptores asociados con el Bean @AroundInvoke: Designado a un método de un Interceptor @ExcludeDefaultInterceptors: Se utiliza para excluir la invocación de un Interceptor en caso de que para un Bean de negocio en concreto no queramos que se llame a ningún metodo de los Interceptores. @ExcludeClassInterceptors: Excluye la invocación de los Interceptores a nivel de clase. Métodos del ciclo de vida @PostConstruct: Invocado después de que el Bean sea creado (después de hacerse las inyecciones de dependencias). @PreDestroy: Invocado después de que el Bean sea destruido del pool del contenedor. Adaptado de: http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=anotacionesejb3 Juan Pavón - UCM 2012-13 Enterprise Beans 25 Anotaciones EJB Seguridad @DeclareRoles: Especifica los roles de seguridad asociados con el Bean. @RolesAllowed: Sólo los roles declarados en esta anotación podrá;n invocar el método. Se pueden especificar los roles permitidos a nivel de clase o a nivel de método. @PermitAll: Permite la invocación por todos los roles definidos. Se puede especificar a nivel de clase o a nivel de método. @DenyAll: Bloquea a todos los roles de manera que ninguno podrá; llamarlo. Únicamente a nivel de método. @RunAs: Se aplica a nivel de clase e indica el rol con el que se ejecuta el Bean: @RunAs("admins") Adaptado de: http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=anotacionesejb3 Juan Pavón - UCM 2012-13 Enterprise Beans 26

Conclusiones El modelo EJB permite programar POJOs y simplemente añadiendo anotaciones convertirlos en componentes que pueda manejar un contenedor EJB El contenedor proveerá las propiedades y comportamientos especificados sin necesidad de programarlos explícitamente Ciclo de vida Distribución Transacciones Seguridad Persistencia Juan Pavón - UCM 2012-13 Enterprise Beans 27 Bibliografía Eric Jendrock et al. The Java EE 6 Tutorial (2013) http://docs.oracle.com/javaee/6/tutorial/doc/ Introducción a EJB 3.1 en davidmarco.es http://www.davidmarco.es/blog/entrada.php?id=239 Otras introducciones sencillas: http://www.slideshare.net/pacogarat/ejb-con-eclipse-y-jboss http://theopentutorials.com/examples/java-ee/ejb3/how-to-create-asimple-ejb3-project-in-eclipse-jboss-7-1/ Documentación oficial Java EE Specifications http://www.oracle.com/technetwork/java/javaee/tech/index.html Enterprise JavaBeans technology: http://www.oracle.com/technetwork/java/javaee/ejb-141389.html API specification for version 6 of Java EE http://docs.oracle.com/javaee/6/api/ Juan Pavón - UCM 2012-13 Enterprise Beans 28