Para acceder al ejb que hemos construido e instalado anteriormente vamos a crear una sencilla aplicación web con un servlet que utilice los mecanismos de inyección de dependencia para acceder al componente.Asi mismo deberemos añadir la aplicación web al EAR que vamos a desplegar.
En este caso se trata de algo relativamente sencillo y a continuación se muestra el código del servlet
package com.arquitecturajava.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.ejb.EJB; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.arquitecturajava.ejb.HolaMundoEJBLocal; /** * Servlet implementation class HolaServletEJB */ @WebServlet("/HolaServletEJB") public class HolaServletEJB extends HttpServlet { private static final long serialVersionUID = 1L; @EJB HolaMundoEJBLocal miobjeto; public HolaServletEJB() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter pw=response.getWriter(); pw.println(miobjeto.mensaje()); pw.close(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
En este caso hemos utilizado dos anotaciones @WebServlet que es la anotación encargada de mapear un servlet a partir de Servlets 3.0 (JEE 6) y la anotación @EJB que es la que se encarga de realizar la inyección de dependencia de nuestro EJB en el Servlet.
De esta forma JEE se encarga de inyectar un proxy que implementa el interface local en nuestro Servlet a la hora de acceder al EJB. Para nosotros será transparente pero dentro del servidor de aplicaciones habrá bastante que hacer.
Para que nuestro proyecto Web este incluido dentro del EAR que se va a desplegar pulsaremos boton derecho propiedades y le añadiremos en la sección de deployment descriptor
Una vez hecho esto la aplicación desplegará con los dos módulos sin problemas.
A continuación podemos ver como el servlet muestra la información almacenada en el ejb
Excelente por el tutorial, muchas Gracia
gracias 🙂
Cecilio alvarez cuando corro el servidor el comienza y sincroniza el Hola del ear pero el .jar de ejb y war del web solo me quedan sincronizados y no comenzados y cuando voy a probar la aplicacion me dice recurso no disponible que debo hacer para que me comience y sincronize el .jar y el .war tambien.
Es raro que servidor usas? normalmente si todo despliega como EAR todo se tendría que desplegar y poner a tu disposición de forma simultanea. Puede que tengas algún error y alguna pieza no te despliegue bien?
[…] Otros artículos relacionados: Introducción a EJB , EJB Remotos , EJB Cliente […]
Creo que falta añadir que el proyecto web (que hace de cliente ejb) debe añadir el proyecto donde se define e implementa el ejb, a través de la pestaña “Project” de “Java Build Path”. Esto sería necesario para evitar errores de compilación (errores de clase no encontrada). Es, en este caso, simplemente una dependencia de compilación pero no de ejecución.
Un saludo y genial el post!!
Si tienes razón 🙂
Hola,
Excelente artículo, me saco de apuros :D, gracias.
me alegro 🙂
Si entiendo, pero esta interfaz local estara dentro del proyecto web o esta interfaz es la que se creo dentro del EJB… ??
Lo puedes compartir a traves de un utility project 🙂 de eclipse o un jar de tal forma que cliente y servidor compartan el interface
Hola que tal Cecilio, una duda.. Entiendo lo de la interface local pero ¿Cual es la diferencia con la interface remota?, ¿Cuando se usaria la interface remota, ¿debo montar mi ejb en otro server? y ¿como puedo realizar un ejercicio para poder observar esa diferencia?
Agradezco tu respuesta
Saludos
Una interface local se puede usar dentro del mismo EAR por parte de cualquier EJB una interface remota es para acceso de EJBS que esten en distintos EARs .En muchos casos estan en distintos servidores de aplicaciones . Pero en otros muchos no.
un favor.. estoy siguiendo la guia pero me sorprende esto: import com.arquitecturajava.ejb.HolaMundoEJBLocal; no lo encuentro, soy novato en ejb y estoy tratando de seguir la guia porfavor si me pueden explicar de donde sale ese import. gracias
Se trata del interface local que debes construir tu con los métodos que necesites de acceso local