2010-12-14 13 views
5

Sto tentando di iniettare un bean stateless EJB in un servlet, ma il servlet lancia una NullPointerExcetion. Sto usando JBOSS per distribuire EJB e servlet.EJB injection in servlet failed

Sono relativamente nuovo al mondo Java, quindi sto postando i passi che ho seguito.

interfaccia

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

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

Bean

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"; 
} 
} 

ho creato un file JAR del bean utilizzando Maven e ho copiato il file jar per "distribuire" directory di JBoss. Sono in grado di vedere il bean distribuito nella console JMX.

globale JNDI Namespace in JMX console

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

Il mio codice 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>"); 
} 

.... 
} 

Quando indico l'URL del mio servlet, ho NullPointerException. Quando commento il fagiolo e stampo qualcos'altro, stampa bene. Quindi sono sicuro che il problema è con l'iniezione di dipendenza EJB nel servlet. Ho provato molte soluzioni suggerite altrove dove, niente ha funzionato davvero, qualcuno per favore aiutami.

risposta

7

Dopo un sacco di ore ho trovato il problema, sto postando così qualcun altro può beneficiare. Il problema è che stavo usando JBOSS 4.2.3 e poiché questo post http://community.jboss.org/message/410211 suggerisce che jboss 4.2.x non supporta l'iniezione EJB nei servlet.

Ho usato Jboss 5.1, anche se sia il servlet che l'EJB non sono in un solo pacchetto auricolare, si deve usare mappedName all'iniezione EJB. Ho avuto i servlet in una WAR e il bean in un Jar separato. Controlla questo post per maggiori dettagli http://community.jboss.org/message/8196#8196

+1

Puoi accettare la tua risposta, in modo che altri utenti sappiano che questa domanda ha avuto risposta. –