Curso Java EE - 02 Leccion 02 - Teoria

Embed Size (px)

Citation preview

  • Experiencia y Conocimiento para tu Vida

    Curso de Java EE

    Todos los Derechos Reservados Global Mentoring 1

  • Experiencia y Conocimiento para tu Vida

    Los Enterprise Java Beans (EJB) es cdigo Java del lado del Servidor. Normalmentetienen la lgica de negocio de nuestra aplicacin, y por lo tanto cubren el rol de lacapa de servicio de nuestras aplicaciones Java, segn se estudi en la leccinanterior.

    Al da de hoy los EJBs son clases puras de Java (POJOs) los cuales al serdesplegados en un Servidor de Aplicaciones permiten reducir la complejidad deprogramacin, agregando robustez, reusabilidad y escalabilidad a nuestrasaplicaciones empresariales de misin crtica.

    Hoy ms que nunca la versin EJB 3.1 pueden ser programados una vez yejecutados en cualquier servidor de aplicaciones Java que soporte el estndar JavaEE 6. Los EJBs ya han cumplido ms de una dcada desde su aparicin, y al da dehoy son una tecnologa muy probada y que brinda beneficios tales como seguridad,transaccionalidad, multi-threading, entre muchas caractersticas ms, todo esto atravs del servidor de aplicaciones Java.

    A diferencia de un JavaBean, que es una clase pura de Java, un EnterpriseJavaBean es una clase de Java con caractersticas que lo hacen mucho ms potentey robusto: Los mtodos de un EJB son transaccionales. Los mtodos pueden ser remotos. Facilidad de comunicacin con las bases de datos. Los mtodos pueden ser seguros. Los mtodos pueden ser asncronos. Entre muchas caractersticas ms.

    En la figura podemos observar que el cdigo Java del lado del Servidor es un EJB, elcual puede ser ejecutado por una aplicacin, conocida como Cliente. Este clienterealiza una peticin al componente EJB, pudiendo ser una llamada local (si seencuentra en el mismo servidor) o una llamada remota (si se encuentra fuera delservidor de aplicaciones). Si la llamada es remota, se utiliza el protocolo RMI(Remote Method Invocation), el cual es parte de la versin estndar de Java.

    Curso de Java EE

    Todos los Derechos Reservados Global Mentoring 2

  • Experiencia y Conocimiento para tu Vida

    En una arquitectura tpica Java EE, los EJB juegan el rol de la capa de Servicio, donde escomn encontrar muchas de las reglas de negocio de nuestra aplicacin.

    Una regla de negocio son las normas o polticas de la empresa u organizacin, por ejemplo, siun cliente ha sido leal a un producto por cierta nmero de aos, se le puede aplicar undescuento extra por determinado monto de compra. Este tipo de decisiones se aplicanautomticamente por medio de los sistemas, y la capa de negocio es la encargada de ejecutarestas reglas.

    Los EJBs al ejecutarse dentro de un contenedor EJB y a su vez dentro de un servidor deaplicaciones Java, tiene a su disposicin varias caractersticas que puede utilizar, tales como:

    Seguridad por medio Llamadas Asncronas Llamadas Remotas por medio de RMI Manejo de Transacciones por medio de JTA Exposicin de reglas de negocio por medio de Servicios Web (JAX-WS o JAX-RS) Servicio de Inyeccin de Dependencias por medio de CDI Servicio de Pool de Conexiones Manejo de Concurrencia Seguro (Tread-Safety) Manejo de Tareas Programadas (Scheduling) Manejo de Mensajera por medio de JMS Interceptors, permiten interceptar llamadas a mtodos y agregar funcionalidad extra o

    complementaria por medio de AOP (Aspect Oriented Programming)Los servidores de aplicaciones Java, tambin agregan otras caractersticas tales como:clustering, balance de cargas y tolerancia a fallos. Esto permite crear aplicaciones de misincrtica con operaciones 7/24 los 365 das del ao. As que independientemente del tipo deservidor de aplicaciones que utilicemos, tendremos todas estas caractersticas disponibles alcrear y desplegar nuestros EJBs.

    Contamos con un curso de administracin del servidor JBoss, el cual pueden revisar en estelink, en el cual se estudian configuracin como Clustering, tolerancia a fallos y configuracionesde alta disponibilidad. Pueden revisar toda la informacin de este curso en el siguiente link:

    http://globalmentoring.com.mx/curso-jboss/

    Curso de Java EE

    Todos los Derechos Reservados Global Mentoring 3

  • Experiencia y Conocimiento para tu Vida 4 Todos los Derechos Reservados Global Mentoring

    En versiones previas a EJB 3.0, el programador deba crear varias clases e interfaces para hacerfuncionar un EJB: una interface local o remota (o ambas), una interface de tipo home local o remota (oambas), y un archivo de configuracin xml, conocido como deployment descriptor.Los EJB en su versin 3.0 promovi el uso de anotaciones para su configuracin, y la versin 3.1contina agregando y simplificando la integracin de tecnologas empresariales a travs del concepto deanotaciones. Este concepto simplific en gran medida el desarrollo de EJBs, y en general de toda latecnologa Java.

    Existen diferentes tipos de beans, dependiendo de la funcin que se agrega a una arquitecturamulticapas Java. Adems esta organizacin permite entender mejor la configuracin de una aplicacinempresarial.

    Debido a que las aplicaciones empresariales suelen ser complejas, se han definido los siguientes tiposde EJBs, segn los requerimientos a cubrir.

    EJB de Sesin: Un bean de sesin se invoca por el cliente para ejecutar una operacin de negocioespecfica.

    Stateless: Este tipo de EJB no mantiene ningn estado del usuario, es decir, no recuerda ningntipo de informacin despus de terminada una transaccin.

    Stateful: Este tipo de EJB, mantiene un estado de la actividad del cliente, por ejemplo, si se tieneun carrito de compras. Este estado se puede recordar incluso una vez terminada la transaccin,pero si el servidor se reinicia esta informacin se pierde. El similar al alcance Session de unaaplicacin Web.

    Singleton: Este tipo de beans utiliza el patrn de diseo Singleton, en el cual solamente existeuna instancia en memoria de esta clase.

    Otras clasificaciones que podemos encontrar son:

    EJB Timer: Esta es una caracterstica que se puede agregar a los beans, para que se ejecutenen un tiempo especificado (scheduling).

    Message-driven beans (MDBs): Este tipo de beans se utiliza para enviar mensajes utilizando latecnologa JMS. El estudio de este tipo de beans queda fuera del alcance de este curso.

    Entity Beans: Esta es una clasificacin anterior a la versin 3.0 de los EJB, sin embargo al dade hoy el estndar JPA (Java Persistance API) ha sustituido a este tipo de beans. As que, amenos que estemos utilizando una versin anterior a 3.0, se debera utilizar JPA en lugar de losEntity Beans.

    Curso de Java EE

  • Experiencia y Conocimiento para tu Vida

    La versin EJB 2.x inclua ms conceptos y ms complejidad de programacin. En laversin 3 estos conceptos se han simplificado enormemente.

    Los EJBs pueden ser configurados de la siguiente forma, con el objetivo de permitirla comunicacin con sus mtodos:

    Interfaces de Negocio: Estas interfaces contienen la declaracin de los mtodosde negocio que son visibles al cliente. Estas interfaces son implementadas poruna clase Java.

    Una clase Java (bean): Esta clase implementa los mtodos de negocio y puedeimplementar cero o ms Interfaces de Negocio. Dependiendo del tipo de EJB,esta clase se debe anotar con @Stateless, @Stateful o @Singleton dependiendodel tipo de EJB que deseemos crear.

    Como podemos observar en la figura, tenemos diferentes formas de comunicarnoscon nuestro componente EJB.

    Interfaz Local: Se utiliza cuando el cliente se encuentra dentro del mismo servidorJava, de esta manera se evita la sobrecarga de procesamiento al utilizar llamadasremotas va RMI.

    Interfaz Remota: Se utiliza cuando el cdigo del cliente est fuera del servidor deaplicaciones Java (en una Java Virtual Machine distinta) y por lo tanto debemoshacer llamadas remotas para poder ejecutar los mtodos del EJB.

    No Interface: Es una simplificacin en la versin 3.1, ya que no se requiere deuna interfaz para establecer la comunicacin, siempre y cuando las llamadas seanlocales, es decir, dentro del mismo servidor de aplicaciones Java.

    Curso de Java EE

    Todos los Derechos Reservados Global Mentoring 5

  • Experiencia y Conocimiento para tu Vida

    Previo a la versin J2EE se requera crear varias clases para hacer funcionar a unEJB: una interfaz local o remota (o ambas), un interfaz home local o remota (oambas) y un descriptor de despliegue xml. La versin Java EE 5 y EJB 3.0 simplificdramticamente esta configuracin agregando el concepto de anotaciones, sinembargo todava se requera agregar una interfaz a los EJB, local o remota.

    Como se observa en la figura, la versin Java EE 6 y EJB 3.1 permite convertir unaclase pura de Java (POJO: Plain Old Java Object) en un EJB simplementeagregando la anotacin del bean correspondiente, por ejemplo @Stateless. Esto enautomtico hace que esta clase tenga caractersticas como mtodos transaccionales,mtodos con seguridad, y puede acceder al manejador de entidades (entity manager)y as persistir informacin en la base de datos, entre muchas caractersticas ms.Todo esto simplemente agregando la anotacin EJB.

    Otra forma de configurar un EJB es utilizando el archivo descriptor ejb-jar.xml, el cualya es opcional al da de hoy. Este archivo descriptor sobrescribe el comportamientoagregado con las anotaciones en las clases Java.

    Aunque el cdigo mostrado en la figura es muy simple, debemos hacer nfasis yrecordar que un EJB es un componente que se ejecuta en un contenedor Java. Esteambiente de ejecucin es el que permite agregar las caractersticas empresariales anuestras clases Java permitiendo realizar llamadas remotas, inyeccin dedependencias, manejo de estados y ciclo de vida, pooling de objetos, manejo demensajera, manejo de transacciones, seguridad, soporte de concurrencia,interceptores, manejo de mtodos asncronos, entre varias caractersticas ms.Todo esto ocurre simplemente haciendo deploy de esta clase Java al servidor deaplicaciones (sea embebido o no). Esto permite que el programador Java se enfoqueen los mtodos de negocio y delegue todas estas caractersticas de requerimientosno funcionales a los servidores de aplicaciones Java.

    Curso de Java EE

    Todos los Derechos Reservados Global Mentoring 6

  • Experiencia y Conocimiento para tu Vida

    JNDI (Java Naming and Directory Interface) es un API que nos permite encontrarservicios o recursos en un servidor de aplicaciones Java.

    En un inicio JNDI era la nica manera de encontrar los componentes EJB, peroconforme se introdujo el concepto de EJB locales y el manejo de anotacionesexistieron otras maneras de ubicar y proporcionar una referencia de loscomponentes empresariales que se necesitan, a este concepto se le conoce comoinyeccin de dependencias.

    Anterior a la versin JEE 6, no exista un nombre estndar para ubicar a los EJBpor medio del API JNDI, por lo que cada servidor Java brindaba sintaxis distintaspara ubicar a los componentes empresariales. Sin embargo, a partir de la versinJava EE 6, se introdujo un nombre global para ubicar a los componentes EJB.java:global[/]//[!]

    Esto permite ubicar de manera estndar cualquier EJB en cualquier servidor deaplicaciones Java. El cdigo bsico para encontrar un EJB utilizando JNDI es:

    HolaMundoEJB ejb = (HolaMundoEJB) contexto.lookup("java:global/classes/HolaMundoEJB");

    O Incluyendo el nombre del paquete Java:

    HolaMundoEJB ejb = (HolaMundoEJB)

    contexto.lookup("java:global/classes/HolaMundoEJB!beans.HolaMundoEJB");

    Curso de Java EE

    Todos los Derechos Reservados Global Mentoring 7

  • Experiencia y Conocimiento para tu Vida

    En la figura mostrada podemos observar un ejemplo en capas de una arquitecturaempresarial. En este ejemplo la clase Cliente en la capa de presentacin necesita delcomponente EJB de la capa de servicio, el cual puede estar ubicado en el mismo servidor(llamada local) o fuera del mismo (llamada remota). Para que la clase Cliente pueda utilizar elcomponente EJB, el servidor de aplicaciones puede proporcionar una referencia de dichocomponente, a esto se le conoce como Inyeccin de Dependencias.

    La inyeccin de dependencias revisa si existe en memoria un EJB ya sea con el mismo tipo ocon el mismo nombre, segn se especifique, y si existe ese objeto, el servidor de aplicacionesJava regresa una referencia para que pueda ser utilizado. En la versin empresarial Java EE6 existen dos maneras de realizar la inyeccin de dependencias.

    a) Utilizando la anotacin @EJB: Esta opcin est disponible desde la versin Java EE 5, sinembargo es la forma de inyeccin de dependencias ms bsica. La anotacin @EJB serecomienda cuando utilizamos llamadas remotas a los EJB, inyectar un recurso (JDBCDataSource, JPA, Web Service, etc) o si queremos mantener compatibilidad con Java EE5. Ejemplo de cdigo en el cliente:

    @EJBprivate PersonaEJBRemote personaEJB;

    a) Utilizando la anotacin @Inject: Esta forma de inyeccin de dependencia se apoya delconcepto CDI (Context and Dependency Injection), y est disponible a partir de la versinJava EE 6. Esta forma es ms flexible y robusta, ya que muchos de los conceptos fuerontomados de la experiencia de otros frameworks como Spring, los cuales tienen mtodosde inyeccin de dependencias ms poderosos y robustos. Para que el servidor deaplicaciones Java reconozca el concepto de CDI, se debe agregar un archivo llamadobeans.xml. Se recomienda utilizar la anotacin @Inject sobre @EJB en todos los casos,excepto cuando tenemos EJBs remotos o queremos mantener compatibilidad con JavaEE 5. Ejemplo de cdigo en el cliente.

    @Injectprivate PersonaEJB personaEJB;

    Curso de Java EE

    Todos los Derechos Reservados Global Mentoring 8

  • Experiencia y Conocimiento para tu Vida

    En la figura podemos observar el API Java EE y en particular la relacin con elperfil Web, el cual tiene acceso nicamente a ciertas APIs.

    Esto surgi debido a que muchas de las aplicaciones Java EE no necesitabande todo el poder ni las APIs tan robustas con las que cuenta, por lo tantonicamente se agregaron a este perfil Web las APIs ms comunes. La buenanoticia es que podemos utilizar EJBs 3.1 en nuestras aplicaciones Web sinagregar la complejidad de configuracin de los EJBs en versiones anteriores.

    De hecho, en la versin Java EE 6 es posible utilizar EJBs locales sinnecesidad de empaquetarlos por separado en un archivo .jar, sino nicamenteutilizar un archivo .war. El tema de empaquetamiento lo revisaremos msadelante. Sin embargo, lo que debemos resaltar de esta figura es observarque tenemos acceso a los EJB, JPA, JTA, CDI, como las APIs ms comunesque utilizaremos en nuestras aplicaciones empresariales.

    Si necesitamos de otras APIs como Java Mail, Web Services, etc, sernecesario utilizar un servidor de aplicaciones completo (full).

    Seleccionar un tipo de perfil depender de los requerimientos actuales yfuturos de nuestra aplicacin empresarial, as que queda a consideracin delArquitecto/Programador la seleccin del perfil Java EE ms adecuado a susnecesidades.

    Curso de Java EE

    Todos los Derechos Reservados Global Mentoring 9

  • Experiencia y Conocimiento para tu Vida

    Los componentes predominantes en Java EE 6, sin duda son los EJBs, loscuales agregan de manera muy simple transaccionalidad, seguridad, entrems caractersticas que ya hemos comentado.

    Segn la lmina anterior, podemos utilizar el perfil Web de Java EE y utilizarEJBs. La especificacin mnima de APIs que podemos utilizar en un perfilWeb se conoce como EJB Lite. Las limitaciones de APIs que tenemos en elperfil Web son las limitantes que tenemos cuando utilizamos EJB, por ello elnombre de lite.

    Podemos observar en la figurar que si utilizamos el perfil Web y porconsiguiente EJB Lite, nicamente tendremos acceso al API listada,excluyendo JMS, llamadas remotas a EJB, exposicin de mtodos del EJBcomo Web Service, llamadas Asncronas, soporte para EJB 2.x, entre otrascaractersticas que NO estarn disponibles.

    Sin embargo podemos observar que muchos de los requerimientosempresariales ms comunes SI tendremos acceso. Por ejemplo: Seguridad,Manejo de Transacciones, declaracin de EJB Locales de tipo Stateless,Stateful, Singleton, con o sin Interface Local, etc.

    Esto simplific en gran medida las aplicaciones Web que necesitan de estetipo de requerimientos empresariales, sin sacrificar el performance ni elrendimiento de nuestra aplicacin Java.

    Curso de Java EE

    Todos los Derechos Reservados Global Mentoring 10

  • Experiencia y Conocimiento para tu Vida

    Debido a que una aplicacin Java Empresarial incluye distintos tipos decomponentes, tales como: Servlets, pginas JSF, Web Services, EJB, etc,estos componentes deben empaquetarse para ser desplegados en el servidorde aplicaciones Java.

    Los mdulos EJB se depositan en META-INF/ejb-jar.xml y en WEB-INF/ejb-jar.xml para los mdulos Web. EJB lite puede empaquetarse directamente enun archivo .war (Web Archive File) o .jar (Java Archive File).Si tus requerimientos utilizan la especificacin completa de EJBs (llamadasremotas, JMS, llamadas asncronas, Web Services, etc), entonces se debeempaquetar en un archivo .jar y no en un archivo .war.Un archivo .ear (Enterprise Archive File) es utilizado para empaquetar uno oms mdulos, ya sean .jar o .war., en un archivo nico, el cual es reconocidopor el servidor de aplicaciones y ste se encarga de desplegar correctamentecada mdulo empaquetado en el archivo .ear.

    Como podemos observar en la figura, si necesitamos desplegar unaaplicacin Web, podemos empaquetar los EJBs y las clases de Entidad enarchivos .jar separados, los Servlets, y pginas JSP o JSF dentro del archivo.war, y estos archivos agregarlos a un archivo .ear, el cual empaqueta todoslos componentes en uno solo.

    Desde la especificacin EJB 3.1, el concepto de EJB Lite puede empaquetarcomponentes EJB directamente en un archivo .war, sin necesidad del archivo.jar.

    Curso de Java EE

    Todos los Derechos Reservados Global Mentoring 11

  • Experiencia y Conocimiento para tu Vida

    En sus inicios los EJB para ser probados, deban desplegarse en un contenedorJ2EE compatible, y hasta no haber sido desplegados no haba forma de saber si uncomponente funcionaba o no.

    Esto haca muy lento el desarrollo de aplicaciones ya que el programador pasabamucho tiempo desplegando su aplicacin, nicamente para darse cuenta que debacorregir su cdigo. Esto sin incluir el tiempo en detener y reiniciar el servidor deaplicaciones Java. Si una aplicacin era de mediana a grande poda demorar variosminutos por cada cambio en un componente slo para revisar si se habaprogramado correctamente.

    En la versin Java EE 6 y EJB 3.1 contamos con un contenedor embebido, el cualnos permite realizar pruebas unitarias de nuestros componentes empresariales. Laidea del contenedor embebido es poder ejecutar componentes EJB dentro deaplicaciones Java SE (aplicaciones estndar), permitiendo utilizar la misma JVM(Java Virtual Machine) para ejecutar pruebas (testing), procesos de tipo batch, EJBen aplicaciones de escritorio, entre varias tareas ms.

    Un contenedor embebido provee del mismo ambiente de ejecucin que uncontenedor Java EE y puede manejar los mismos servicios: inyeccin dedependencias, acceso a componentes empresariales, acceso a CMT (Container-Managed Transactions) para el manejo de transacciones, etc.En la figura podemos observar un ejemplo de cmo ejecutar el contenedorembebido, adems utilizar JNDI para encontrar un EJB y ejecutar un mtodo.EJBContainer contenedor = EJBContainer.createEJBContainer();Context contexto = contenedor.getContext();HolaMundoEJB ejb = (HolaMundoEJB)

    contexto.lookup("java:global/classes/HolaMundoEJB");ejb.saluda();

    Curso de Java EE

    Todos los Derechos Reservados Global Mentoring 12

  • Experiencia y Conocimiento para tu Vida

    Curso de Java EE

    Todos los Derechos Reservados Global Mentoring 13

  • Experiencia y Conocimiento para tu Vida

    En Global Mentoring promovemos la Pasin por la Tecnologa Java.

    Te invitamos a visitar nuestro sitio Web donde encontrars cursos Java Online desde Niveles Bsicos,Intermedios y Avanzados.

    Adems agregamos nuevos cursos para que contines con tu preparacin como consultor Java demanera profesional.

    A continuacin te presentamos nuestro listado de cursos en constante crecimiento:

    Fundamentos de Java

    Programacin con Java

    Java con JDBC

    HTML, CSS y JavaScript

    Servlets y JSPs

    Struts Framework

    Hibernate Framework

    Spring Framework

    JavaServer Faces

    Java EE (EJB, JPA y Web Services)

    JBoss Administration

    Datos de Contacto:

    Sitio Web: www.globalmentoring.com.mx

    Email: [email protected]

    Ayuda en Vivo: www.globalmentoring.com.mx/chat.html

    14Todos los Derechos Reservados Global Mentoring

    Curso de Java EE