2010-12-14 19 views
5

Estoy intentando inyectar un bean sin estado EJB en un servlet, pero el servlet arroja una Excepción de puntero nulo. Estoy usando JBOSS para implementar el EJB y el servlet.La inyección de EJB en el servlet falla

Soy relativamente nuevo en el mundo Java, por lo que estoy publicando los pasos que hemos seguido.

interfaz

package MavenEJB.Bidding` 
import javax.ejb.Local; 

@Local 
public interface PlaceBid { 
public String AddBid(); 
} 

frijol

package MavenEJB.Bidding; 
import javax.ejb.Stateless; 
@Stateless(name="PlaceBid") 
public class PlaceBidBean implements PlaceBid { 
public PlaceBidBean(){} 

/** 
    * Include logic to add the bid 
    */ 

public String AddBid(){ 
    return "Placed bid using EJB"; 
} 
} 

he creado un archivo jar del grano usando Maven y copié el archivo jar "desplegar" de la JBOSS. Puedo ver el bean desplegado en la consola JMX.

JNDI global de espacio de nombres en la consola JMX

+- PlaceBid (class: org.jnp.interfaces.NamingContext) 
    | +- local (proxy: $Proxy63 implements interface MavenEJB.Bidding.PlaceBid,interface org.jboss.ejb3.JBossProxy) 

Mi código servlet

public class PlaceBidServlet extends HttpServlet { 

    @EJB 
    private PlaceBid placeBid; 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.setContentType("text/html"); 

    PrintWriter out = response.getWriter(); 
    out.println("<HTML>"); 
    out.println("<HEAD><TITLE>Hello</TITLE></HEAD>"); 
    out.println("<BODY>"); 
    out.println("Output from EJB" +placeBid.AddBid()); 

    //out.println("Output from EJB"); 
    out.println("</BODY></HTML>"); 
} 

.... 
} 

Cuando señalo a la URL de mi servlet, consigo NullPointerException. Cuando comento el bean e imprimo algo más, se imprime bien. Así que estoy seguro de que el problema es con la inyección de dependencias EJB en el servlet. Probé muchas soluciones sugeridas en otras partes donde nada funcionó realmente, alguien por favor ayúdeme.

Respuesta

7

Después de una gran cantidad de horas que se encontró el problema, yo estoy publicando que otra persona pueda beneficiarse. El problema es que yo estaba usando JBOSS 4.2.3 y, como este post http://community.jboss.org/message/410211 sugiere 4.2.x JBoss no soporta la inyección de EJB en servlets.

Utilicé Jboss 5.1, también si tanto el servlet como el EJB no están en un solo paquete ear, se debe usar mappedName para la inyección EJB. Tenía los servlets en un WAR y el EJB en un Jar separado. Revise esta publicación para más detalles http://community.jboss.org/message/8196#8196

+1

Puede aceptar su propia respuesta, para que otros usuarios sepan que esta pregunta ha sido respondida. –

Cuestiones relacionadas