2010-12-14 96 views
5

J'essaie d'injecter un bean sans état EJB dans un servlet, mais le servlet génère une erreur NullPointerExcetion. J'utilise JBOSS pour déployer l'EJB et la servlet. Je suis relativement nouveau dans le monde Java, donc je publie les étapes que j'ai suivies.Échec de l'injection EJB dans le servlet

Interface

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

J'ai créé un fichier jar du grain en utilisant maven et je copier le fichier jar dans le répertoire "déploiement" de JBOSS. Je suis capable de voir le bean déployé dans la console JMX.

global JNDI espace de noms dans la console JMX

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

Mon code 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>"); 
} 

.... 
} 

Quand je signale à l'URL de mon servlet, je reçois NullPointerException. Quand je commente le haricot et imprime quelque chose d'autre, il imprime bien. Donc, je suis sûr que le problème est avec l'injection de dépendances EJB dans le servlet. J'ai essayé de nombreuses solutions proposées ailleurs, rien n'a vraiment fonctionné, quelqu'un s'il vous plaît aidez-moi.

Répondre

7

Après beaucoup d'heures j'ai trouvé le problème, je le poste pour que quelqu'un d'autre puisse en bénéficier. Le problème est, j'utilisais JBOSS 4.2.3 et comme ce post http://community.jboss.org/message/410211 suggère que jboss 4.2.x ne supporte pas l'injection d'EJB dans les servlets.

J'ai utilisé Jboss 5.1, même si le servlet et l'EJB ne sont pas dans un seul paquet d'écouteurs, il faut utiliser mappedName pour l'injection EJB. J'ai eu les servlets dans un WAR et l'EJB dans un Jar séparé. Consultez ce post pour plus de détails http://community.jboss.org/message/8196#8196

+1

Vous pouvez accepter votre propre réponse, afin que les autres utilisateurs sachent que cette question a été répondue. –