Estoy empezando con los EJBs. Estoy realizando un ejemplo sencillo de EJB de sesión sin estado (stateless), en el que un servlet que hará de cliente llamará al método del EJB que saludará.
Estoy trabajando con eclipse Helios y jboss 6.0 donde despliego tanto el .war del ejb, como el .jar del servlet. Además tengo instalado el jdk de java 1.6.0_23.
A continuación expongo tanto el código del EJB como de su interfaz y el código del servlet cliente:
Código del EJB:
Código:
código del interfaz local:package proyecto; //import javax.ejb.Local; import javax.ejb.Stateless; @Stateless(name="ejb/saludo") //@Local(SalBeanLocal.class) public class SalBean implements SalBeanLocal { public String diHola(String nombre) { return ("Hola Sr." + nombre + " !!!"); } }
Código:
código del servlet cliente:package proyecto; import javax.ejb.Local; @Local public interface SalBeanLocal { public String diHola(String nombre); }
Código:
Al arrancar el servidor, se despliegan correctamente:package proyecto; import java.io.IOException; 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; @WebServlet("/pruebaServlet") public class pruebaServlet extends HttpServlet { private static final long serialVersionUID = 1L; @EJB(mappedName="ejb/saludo") private SalBeanLocal saludo; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("aqui llego"); System.out.println(saludo.diHola("Juan")); } }
20:08:36,474 INFO [org.jboss.ejb3.deployers.JBossASKernel] Created KernelDeployment for: SalEJB3.jar
20:08:36,478 INFO [org.jboss.ejb3.deployers.JBossASKernel] installing bean: jboss.j2ee:jar=SalEJB3.jar,name=ejb/saludo,service=EJB3
20:08:36,479 INFO [org.jboss.ejb3.deployers.JBossASKernel] with dependencies:
20:08:36,479 INFO [org.jboss.ejb3.deployers.JBossASKernel] and demands:
20:08:36,479 INFO [org.jboss.ejb3.deployers.JBossASKernel] jboss.ejb:service=EJBTimerService; Required: Described
20:08:36,479 INFO [org.jboss.ejb3.deployers.JBossASKernel] jboss-switchboard:appName=SalEJB3,module=SalEJB3,name=ej b/saludo; Required: Create
20:08:36,479 INFO [org.jboss.ejb3.deployers.JBossASKernel] and supplies:
20:08:36,479 INFO [org.jboss.ejb3.deployers.JBossASKernel] Class:proyecto.SalBeanLocal
20:08:36,480 INFO [org.jboss.ejb3.deployers.JBossASKernel] jndi:ejb/saludo/local-proyecto.SalBeanLocal
20:08:36,480 INFO [org.jboss.ejb3.deployers.JBossASKernel] jndi:ejb/saludo
20:08:36,480 INFO [org.jboss.ejb3.deployers.JBossASKernel] jndi:ejb/saludo/local
20:08:36,485 INFO [org.jboss.ejb3.deployers.JBossASKernel] Added bean(jboss.j2ee:jar=SalEJB3.jar,name=ejb/saludo,service=EJB3) to KernelDeployment of: SalEJB3.jar
20:08:36,615 INFO [org.jboss.web.tomcat.service.deployers.TomcatDeplo yment] deploy, ctxPath=/pruebaServlet
El error llega a la hora de ejecutar. Parece que el servlet se ejecuta correctamente hasta la línea que hace la llamada al método del Interfaz del EJB. Por consola aparece lo siguiente:
20:17:03,345 INFO [STDOUT] aqui llego
20:17:03,346 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/pruebaServlet].[proyecto.pruebaServlet]] Servlet.service() para servlet proyecto.pruebaServlet lanzó excepción: java.lang.NullPointerException
at proyecto.pruebaServlet.doGet(pruebaServlet.java:23 ) [:]
at javax.servlet.http.HttpServlet.service(HttpServlet .java:734) [:1.0.0.Final]
at javax.servlet.http.HttpServlet.service(HttpServlet .java:847) [:1.0.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:324) [:6.0.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:242) [:6.0.0.Final]
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:275) [:6.0.0.Final]
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:191) [:6.0.0.Final]
at org.jboss.web.tomcat.security.SecurityAssociationV alve.invoke(SecurityAssociationValve.java:181) [:6.0.0.Final]
at org.jboss.modcluster.catalina.CatalinaContext$Requ estListenerValve.event(CatalinaContext.java:285) [:1.1.0.Final]
at org.jboss.modcluster.catalina.CatalinaContext$Requ estListenerValve.invoke(CatalinaContext.java:261) [:1.1.0.Final]
at org.jboss.web.tomcat.security.JaccContextValve.inv oke(JaccContextValve.java:88) [:6.0.0.Final]
at org.jboss.web.tomcat.security.SecurityContextEstab lishmentValve.invoke(SecurityContextEstablishmentV alve.java:100) [:6.0.0.Final]
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:127) [:6.0.0.Final]
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102) [:6.0.0.Final]
at org.jboss.web.tomcat.service.jca.CachedConnectionV alve.invoke(CachedConnectionValve.java:158) [:6.0.0.Final]
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:109) [:6.0.0.Final]
at org.jboss.web.tomcat.service.request.ActiveRequest ResponseCacheValve.invoke(ActiveRequestResponseCac heValve.java:53) [:6.0.0.Final]
at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:362) [:6.0.0.Final]
at org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:877) [:6.0.0.Final]
at org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.process(Http11Protocol.java:654) [:6.0.0.Final]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run( JIoEndpoint.java:951) [:6.0.0.Final]
at java.lang.Thread.run(Thread.java:662) [:1.6.0_23]
No se donde puedo tener el error. Os lo agradecería si me pudieseis ayudar.
Perdonad por la longitud del mensaje.