Curso Java Avanzado 5 Ejb

  • 16,567 views
Uploaded on

Tema 5 - EJB 3.0 - Curso Java Avanzado de 25 horas.

Tema 5 - EJB 3.0 - Curso Java Avanzado de 25 horas.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
16,567
On Slideshare
0
From Embeds
0
Number of Embeds
7

Actions

Shares
Downloads
0
Comments
2
Likes
28

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Java Avanzado Emilio Avilés Ávila http://www.techmi.es
  • 2. Workshop (25 horas) Workshop Java avanzado para empresas y profesionales
  • 3. Temario
    • Introducción al desarrollo Web
    • Servlets
    • JSP
    • Javabeans
    • EJB
    • Struts
    • Resumen y conclusiones
  • 4. Tema 5 EJB: Enterprise Java Beans
  • 5. Objetivos
    • Introducción al desarrollo Web
    • Servlets
    • JSP
    • Javabeans
    • EJB
    • Struts
    • Resumen y conclusiones
    • ¿Qué son los EJBs?
    • Beneficios y diferencias con los javaBeans
    • Cambios en la J2EE5.0
    • EJB 2.1 vs 3.0
    • Tipos EJBs
      • Session
        • Stateless
        • Stateful
      • MDB (MessageDriven)
      • Entity Bean
        • JavaPersistence Api
    • Prácticas y Ejemplos
  • 6. 5 – EJB
    • ¿Qué es un EJB?
      • Es un componente del la parte servidor que encapsula la lógica de negocio de una aplicación.
      • La Lógica de negocio es el código que cumplimenta el propósito de la aplicación.
      • Ejemplo : una aplicación de control de inventario
        • El enterprise bean podría implementar la lógica de negocio de métodos que se llamas en compruebaNivelInventario o por ejemplo solicitaProducto .
        • Invocando a estos métodos, los clientes remotos podrían acceder a los servicios de inventario proporcionados por la aplicación.
  • 7. 5 – EJB
    • Beneficios EJBs
      • Simplifican el desarrollo de aplicaciones grandes y/o distribuidas
        • El contenedor proporciona servicios a nivel de sistema a los EJBs (Seguridad y Transacciones)
          • Permite dedicarnos sólo a problemas de negocio
        • Abstrae al programador de la capa de cliente
          • Puede dedicarse exclusivamente del diseño.
          • Permite construir clientes ligeros (móviles)
        • Al ser portables pueden ser incluidos en otra aplicación con beans ya existentes.
  • 8. 5 – EJB
    • ¿Cuándo usar EJBs?
      • Cuando la aplicación sea escalable
        • Si el número de usuarios es elevado
          • Distribución en varias máquinas (cluster, HA)
          • La localización es transparente al cliente
      • Cuando deba haber integridad de datos
        • Los EJBs soportan transacciones
          • Mecanismo para soportar acceso concurrente a objetos
      • Cuando hay distintos tipos clientes
        • Con pocas líneas de código, cualquier cliente remoto puede localizar EJBs
        • Clientes móviles, TV, Tablet PC, etc.
  • 9. 5 – EJB
    • Diferencia entre JavaBeans y EJB
      • Paquetes
        • JavaBeans: paquetes java definibles.
        • EJB: Paquete javax.ejb.
      • Ámbito de interacción
        • JavaBeans : Interactúan entre ellos SÓLOs dentro del mismo espacio de nombres .
        • EJB : Interactúan con otros componentes que pueden pertenecer a otro espacio.
      • Capa
        • JavaBeans : Capa cliente y Negocio .
        • EJB: Solo capa de negocio y acceso a BDD.
  • 10. 5 – EJB
    • Diferencia entre JavaBeans y EJB (II)
      • JavaBeans:
        • Es una interfaz de Sun para construir aplicaciones reutilizables.
        • Permite construir bloques que puedan usarse de forma separada o en conjunción con otros.
      • EJB:
        • Sólo se utilizan en la capa de negocio (Bussiness Tier)
        • Pueden servir de comunicación entre componentes del servidor y una Base de Datos (EIS)
  • 11. 5 – EJB
    • Componentes de Negocio
      • Es la lógica que resuelve o cumple las necesidades de un negocio en particular
        • Banca
        • La venta
        • Financiación
      • Se maneja o encapsulan mediante Enterprise Java Bean (EJB)
      • Representa el modelo de comunicarnos con lo que conocemos como modelo de datos
  • 12. 5 – EJB
    • Modelo de Datos
      • Capa de sistema de información Empresarial
      • En J2EE EIS
      • Maneja el software del sistema de información:
        • ERP’s, BDD, CRMs, BackEnds.
      • Las aplicaciones J2EE, y en particular la lógica de negocio a través de sus componentes, requieren de acceso a estos datos.
  • 13. 5 – EJB
    • Ejemplo de una arquitectura J2EE
  • 14. 5 – EJB
    • Donde estamos: Foto!!
  • 15. 3 – JSP: Java Server Pages
    • Ejercicio práctico
      • Mi primer Enterprise Application
        • Crear un proyecto J2EE en NetBeans
        • … . Suerte
  • 16. 5 – EJB
    • ¿Qué trae nuevo J2EE 5.0 respecto a EJB?
      • Los descriptores de despliegue XML son ahora opcionales . (No más ejb-jar.xml )
      • En lugar de ello, empleamos Annotations (anotaciones, también llamados metadatos ) directamente en un POJO, dentro del código fuente en el que estemos trabajando.
        • POJO: Plain Old Java Object
      • Se reconocen porque empiezan por @
  • 17. 5 – EJB
    • Anotaciones @
      • Las anotaciones se usan para incrustar datos en un programa que de otra forma tendrían que ser proporcionados en un fichero por separado.
      • JEE5 proporciona anotaciones para estas tareas:
        • Definir y usar Web Services
        • Desarrollar aplicaciones EJB
        • Mapeo de clases Java a XML
        • Mapeo de clases Java a Bases de Datos
        • Mapeo de métodos a operaciones
        • Especificación de dependencias externas
        • Especificación de información de despliegue, incluyendo seguridad .
  • 18. 5 – EJB
    • Anotaciones (Metadatos) para EJB
    • @Stateless, @Stateful. Para indicar si es un componente bean de sesión stateless o stateful
    • @PostConstruct, @PreDestroy, @PostActivate, @PrePassivate. Indicación un método como de event callback *
    • @EJB. Usado en un cliente JEE para referenciar instancias de Enterprise Beans.
    • @PersistenceUnit. Se usa para expresar una dependencia de un E ntityManagerFactory .
    • @PersistenceContext. Se usa para expresar una dependencia de un EntityManager .
    • @WebServiceRef. Se usa en un cliente para referenciar web services .
    • @Resource. Para todos los demás recursos no cubiertos por @EJB o @WebServiceRef
    • @Timeout. Especifica un método timeout sobre un componente que use servicios de temporizador ( container-managed timer services) .
    • @MessageDriven. Especifica un bean message-driven . Un bean message-driven es un consumidor de mensajes que puede ser llamado por su contenedor.
    • @TransactionAttribute. Aplica un atributo transaction a todos los métodos de un interfaz de negocio o a métodos de negocio individuales de un bean
    • @TransactionManagement. Declara si un bean tendrá transacciones container-managed o bean-managed (controladas por contenedor o por bean).
    • @RolesAllowed, @PermitAll, and @DenyAll. Permisos de métodos.
    • @RolesReferenced. Declara roles de seguridad referenciados en el código del bean
    • @RunAs. Usa un rol de seguridad especificado para ejecutar un método.
  • 19. 5 – EJB
    • Características EJB 2.1
      • Muy potente, pero complejo de usar
      • Demasiadas clases e interfaces.
      • Java Naming an Directory Interface (JNDI) para búsquedas.
      • Interfaces Javax.ejb
      • Descriptores de despliegue
      • Modelo de programación complicado y pesado
      • Incremento de costes
  • 20. 5 – EJB
    • Desarrollo simplificado con EJB 3.0
      • La tecnología EJB es ahora más sencilla de aprender y usar.
      • Menor número de clases e interfaces
      • Inyección de dependencias ( dependency injection )
      • Búsquedas simples
      • No se requieren interfaces de contenedor
      • No se requieren descriptores de despliegue
      • Persistencia simplificada
      • Mapeo objeto/relacional
      • Incremento de la productividad del programador.
  • 21. 5 – EJB
    • Compatibilidad EJB 2.1 - EJB 3.0
      • Todas las aplicaciones existentes en la actualidad siguen funcionando en este modelo.
      • Facilidad de integración entre componentes y aplicaciones preexistentes.
      • Permite que se actualicen o reemplacen componentes (usando APIS EJB 3.0) sin afectar a los clientes existentes.
      • La migración incremental facilita la adopción de la tecnología EJB 3.0
  • 22. 5 – EJB
    • Tácticas de EJB 3.0
      • El contenedor realiza más cantidad de trabajo tedioso, y el desarrollador menos, de modo que puede centrarse en tareas más importantes.
      • El Bean especifica lo que necesita usando metadatos, de modo que ya no tenemos que escribir interfaces de contenedor innecesarios.
      • El contenedor actúa de intermediario para proporcionar los servicios que sean requeridos.
  • 23. 5 – EJB
    • Tipos de EJB
      • Beans de sesión:
        • Representa una conversación temporal con un cliente.
        • Cuando el cliente finaliza su ejecución, el bean y sus datos desaparecen.
      • Beans de entidad o Java Persistence API
        • Representa datos persistentes almacenados en una fila de una tabla/relación de una base de datos.
        • Si el cliente termina o si se apaga el servidor, los servicios subyacentes se aseguran de grabar el bean.
        • La nueva Java Persistence API ha simplificado la persistencia de los entity beans.
        • Los nuevos entity objects son POJOs que proporcionan una vista orientada a objetos de los datos almacenados en una base de datos.
      • Beans dirigidos por mensajes:
        • Combina las características de un bean de sesión y un
        • Permite que un componente de negocio reciba asincrónicamente mensajes JMS.
  • 24. 5 – EJB
    • Stateless Session Bean
      • No dispone de variables de instancia.
      • Los datos no son compartidos por los métodos.
      • Realizan trabajos o métodos independientes.
      • El resultado de las operaciones no son dependientes de ningún estado.
  • 25. 5 – EJB
    • Ejemplo stateless session bean
      • Sesión bean de operaciones con clientes
        • Consultar, guardar o borrar clientes
      • Necesita siempre de una interfaz
      • En caso de no crearla, la crea el contenedor
  • 26. 5 – EJB
    • Interfaz Local o Remota
      • @Local: Si el bean está siendo usado por una clase se está ejecutando en la misma JVM
      • @ Remote: Distinta máquina virtual (JVM)
  • 27. 3 – JSP: Java Server Pages
    • Ejercicio práctico
      • Mi primer Session Stateless Bean
        • Crear con NetBeans SessionBean Cliente
        • public void grabarCliente(Cliente cliente );
        • public Cliente getCliente ( Long id );
        • public Collection getAllClientes();
        • public boolean deleteCliente ( Long id );
        • … . Suerte
  • 28. 5 – EJB
    • Interfaz Local o Remota
      • Servlet y bean session
        • Una vez ensamblado y desplegado
        • El contenedor es el interface del bean con funcionalidades de bajo nivel del sistema.
  • 29. 3 – JSP: Java Server Pages
    • Ejercicio práctico
      • Servlet -> StateLess
        • Crear con NetBeans el proyecto que viene como ejemplo
          • Sample -> ServletStateLess
        • … . Suerte
  • 30. 5 – EJB
    • Ejemplo Completo stateless session Bean
      • @PersistenceContext. Se usa para expresar una dependencia de un EntityManager
  • 31. 5 – EJB
    • WebServices con stateless session bean
      • Generar una respuesta basado en información del cliente.
        • HelloServiceBean  sayHello(String hola)
        • El endPoint debería tener
          • Anotación jws.WebService o jws.WebServiceProviderla
          • La clase con anotación @Webservice
          • Los Bussiness Method deben ser públicos y NO deben ser static ni final.
          • Los Bussiness Method deben anotar jws.WebMethod
          • La clase que lo implemente NO final ni abstract ni métodos finalize()
          • El endpoint debe anotar @stateless
  • 32. 5 – EJB
    • stateful session bean
      • Al contrario que los anteriores, tienen estado
      • Pueden almacenar variables de instancia
      • Los datos son compartidos por los métodos.
      • El resultado de las operaciones son dependientes del estado cuando éstas son llamadas.
  • 33. 5 – EJB
    • Ejemplo stateful session bean
      • Carro de la compra on-line
        • El usuario va agregando productos a la cesta.
        • En el momento de la compra, tendrá que realizar el registro de sus datos.
          • Dirección de entrega
          • Tarjeta de crédito
      • Estos datos se almacenan en variables que conforman el estado del bean
      • Necesita también siempre de una interfaz
      • Sino, la crea el contenedor
  • 34. 5 – EJB
    • Ejemplo Carro de la compra on-line
      • Interfaz ( remote o local)
      • Implementación = stateful session bean
  • 35. 3 – JSP: Java Server Pages
    • Ejercicio práctico
      • Mi primer Session Statefull Bean
        • Crear con NetBeans SessionBean Carrito
          • Interfaz Local y remota
        • Metodos
        • public void añadirProducto(String producto);
        • public void eliminarProducto(String producto);
        • public Colection listarCompra();
        • … . Suerte
  • 36. 5 – EJB
    • Message driven bean
      • Este tipo de beans (MDB) permite a las aplicaciones
      • procesar mensajes de forma asíncrona a través del servicio JMS
        • JMS funciona a través de colas de mensajes
        • Los clientes envían sus peticiones a las colas
        • Estas colas son controladas por los Message Driven Beans
        • Los MDB procesan los mensajes que hay en ellas y ejecutan ciertos servicios dependiendo del mensaje procesado.
      • Este tipo de beans se aproximan más a la forma conceptual de los Stateless Session Bean en el sentido que son beans que no deben almacenar estado alguno.
  • 37. 5 – EJB
    • ¿Cómo funcionan las colas de los MDB?
      • Cuando un mensaje llega a la cola el contenedor hace una llamada al método onMessage del Message Driven Bean
        • Este método debería invocar a métodos de otros sesión bean o realizar la lógica de negocio de debiera ejecutar
          • Es más conveniente no tener aquí lógica de negocio,
          • Sino hacer invocaciones a métodos de otras clases que sí se encarguen de realizar lógica de negocio.
      • Para declarar un MDB
        • @MessageDriven a una clase que implemente la interface MessageListener
        • Indicar el nombre de la cola del contenedor ( la cuál es accesible vía JNDI) que va a controlar el MDB
  • 38. 5 – EJB
    • Ejemplo Aplicación cliente JMS.
      • La aplicación cliente envía el msg a la cola.
      • La cola tuvo que ser creada ( Admin Console).
      • El JMS provider (en nuestro caso el Application Server ) entrega el msg al MDB
  • 39. 5 – EJB
    • Ejemplo Aplicación cliente JMS – Código
      • Injectamos los recursos Conexión y las colas
      • Creamos la conexión , session y productor .
    Enviamos mensajes con el cliente
  • 40. 3 – JSP: Java Server Pages
    • Ejercicio práctico
      • Mi primer MDB
        • Crear con NetBeans MessageDrivenBean
          • SMTPBroker
        • Crear la cola Queue
          • Verla en la consola del Servidor de aplicaciones
        • OnMessage
          • Llamada (a un session Bean)
        • … . Suerte
  • 41. 5 – EJB
    • Dependecy Injection
      • Patrón según el cual las dependencias de un objeto se proporcionan automáticamente por una entidad externa a ese objeto
        • No es necesario que ese objeto pida el recurso explícitamente.
      • Para solicitar la inyección de un recurso, el componente usa la anotación @Resource .
        • En algunos recursos especializados, también las anotaciones @EJB y @WebServiceRef.
      • Patrón Hollywood: “No me llames, ya te llamo yo”
  • 42. 5 – EJB
    • Dependecy Injection (II)
      • La idea es tener objetos separados para que la implementación solo dependa del Interface
      • El Assambler proporciona los campos de la implementación al MovieLister
  • 43. 5 – EJB
    • Dependecy Injection
  • 44. 5 – EJB
    • Ciclo de Vida de los Session EJB
      • Stateful Session EJB
      • Stateless Session EJB
  • 45. 5 – EJB
    • Ciclo de Vida de los MessageDriven EJB
      • Message Driven Beans
  • 46. 5 – EJB
    • Java Persistence API
      • Antiguos EJB de entidad ( Entity EJB).
      • Un entidad es un objeto de persistencia.
        • Normalmente representa un registro de BDD.
      • Trata lo siguiente:
        • Como los datos relacionales se mapean a Objetos Java persistentes.
        • Como se almacenan en la BDD relacional.
        • Conseguir existencia de un estado continuado incluso después de finalizada la aplicación.
        • Estandariza el mapeo objeto relacional.
  • 47. 5 – EJB
    • Características Java API persistence (I)
      • Las entidades son POJOs:
        • Al contrario que los componentes EJB que usan container-managed persistence (CMP).
        • Los objetos entidad ya no son componentes
      • Mapeo estandarizado objeto/relacional
        • Mapear información objeto/relacional annotations o XML
        • Coge la filosofía ORM de Hibernate
      • Soporte de herencia y polimorfismo:
        • Obviamente al ser los objetos de entidad POJOs.
  • 48. 5 – EJB
    • Características Java API persistence (II)
      • Soporte a consultas nativas ( native query ):
        • Además del Java Persistence Query Language.
        • Consultas en el lenguaje nativo de la BD subyacente.
      • Named Query
        • Es una consulta estática expresada en metadatos.
        • Consulta Java Persistence query o native query.
        • Lo cual mejora la reutilización de consultas.
      • Reglas de empaquetado simplificadas:
        • Al se POJO pueden ser empaquetadas en cualquier lugar de un aplicación.
  • 49. 5 – EJB
    • Características Java API persistence (II)
      • Soporte para bloqueo optimista ( optimist locking ):
        • Es una técnica que evita el bloqueo por razones de rendimiento pero teniendo en consideración que la transacción puede fallar debido a colisión con otro usuario.
      • Entidades separadas ( Detached Entities ):
        • Como las entidades son POJOs, pueden ser serializadas ( implements Serializable ) y enviadas a través de la red a distintas direcciones.
        • Ya no son necesarios los Data Transfer Objects (DTOs).
      • EntityManager API :
        • En operaciones CRUD ( Create Read Update Delete ) que impliquen entidades.
      • Conectividad de proveedores de persistencia de terceros:
        • Es un interfaz entre un contenedor Java EE y un proveedor de persistencia. (JDBC, etc.)
  • 50. 5 – EJB
    • Características Java API persistence (III)
      • La API propiamente dicha javax.persistence
      • Objetos principales
        • EntityManager : permite crear, encontrar por clave primera, y eliminar objetos persistentes, y crea objetos Query
        • Query : permite lanzar consultas en EJB-QL
        • Internamente las implementaciones usan el API de JDBC (transparentemente al programador)
      • EJB-QL (EJB Query Language)
        • Lenguaje de consultas de búsqueda y borrados & actualizaciones en masa. La implementación traduce al SQL de la BD que se esté usando
  • 51. 5 – EJB
    • Entity beans
    • Son Clase ( POJO )
      • Representa una tabla de una base de datos
      • Cada instancia de esta clase representa un registro de la tabla
      • Mapeo propiedades de una clase / campos de una tabla.
    • Especificar las relaciones que tienen las clases
      • uno a uno, uno a muchos, muchos a uno y muchos a muchos
    • Todo Entity Bean debe tener una clave primaria
      • Identifica a ese registro de forma única dentro de la tabla.
    • Configuraciones a través de anotaciones
    • JPA (Java Persistent API ) gestiona todos los aspectos relativos a la persistencia
  • 52. 5 – EJB
    • Ejemplo Entity bean: Team
      • Establecer anotación @entity
      • Establecer @id para la clave primaria
      • Anotaciones de relación (@OneToMany)
  • 53. 5 – EJB
    • Ejemplo Entity bean: Team
  • 54. 5 – EJB
    • Ejercicio práctico
      • Crear la Entidad Player, que al igual que la entidad anterior va a tener:
        • Una anotación @Entity
        • Otra anotación @Id
        • Una anotación @ManyToOne para establecer una relación bidireccional entre las dos entidades
  • 55. 3 – JSP: Java Server Pages
    • Ejercicio práctico
      • Mi primer Entity Bean con NetBeans
        • Crear un Entity Bean: Team
          • private Long id;
          • protected String name;
          • protected Date fechaCreacion;
          • protected Collection players; /* @OneToMany */
        • Crear un Entity Bean: Player
          • private Long id;
          • protected String name;
          • protected Team team; /* @ManyToOne ]/
        • … . Suerte
  • 56. 5 – EJB
    • Ejemplo Empleados/Departamentos
  • 57. 5 – EJB
    • Ejemplo uso entity bean
      • A través del stateless bean HRMS
  • 58. 3 – JSP: Java Server Pages
    • Ejercicio práctico
      • Relacionar SessionBean con Entity Beans
        • Crear un método de Negocio en Cliente
        • public Player crearPlayer(String name)
        • Buscar con el EntityManager, el Player con ese nombre
          • PISTA1: @PersistenceContext private EntityManager em;
          • PISTA2: Player player =
          • em.find(Player.class, name);
        • … . Suerte
  • 59. 5 – EJB
    • Ejemplos
  • 60. Conclusiones
    • Introducción al desarrollo Web
    • Servlet
    • JSP
    • Javabeans
    • EJB
    • Struts
    • Resumen y conclusiones
    • ¿Qué son los EJBs?
    • Beneficios y diferencias con los javaBeans
    • Cambios en la J2EE5.0
    • EJB 2.1 vs 3.0
    • Tipos EJBs
      • Session
        • Stateless
        • Stateful
      • MDB (MessageDriven)
      • Entity Bean
        • JavaPersistence Api
    • Prácticas y Ejemplos
  • 61. Referencias
    • EJB Wikipedia: http:// es.wikipedia.org / wiki / Enterprise_JavaBeans
    • Manual J2EE 5.0: http://java.sun.com/j2ee/5.0/docs/tutorial/doc/
    • Enterprise JavaBeans 3.0 specification:
    • http://java.sun.com/products/ejb/docs.html
    • The Enterprise JavaBeans web site:
    • http://java.sun.com/products/ejb