Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Curso Java Avanzado 5 Ejb

18,889 views

Published on

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

Published in: Technology, News & Politics

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>

×