Curso Java Avanzado 5 Ejb

17,971 views
17,971 views

Published on

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

Published in: Technology, News & Politics
2 Comments
32 Likes
Statistics
Notes
No Downloads
Views
Total views
17,971
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
0
Comments
2
Likes
32
Embeds 0
No embeds

No notes for slide
  • Curso Java Avanzado 5 Ejb

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

    ×