servlet中的EJB注入失败

时间:2010-12-14 00:34:42

标签: java java-ee jboss ejb-3.0 ejb

我试图将一个EJB无状态bean注入到一个servlet中,但是servlet会抛出一个NullPointerExcetion。我正在使用JBOSS来部署EJB和servlet。

我对Java世界比较陌生,所以我发布了我遵循的步骤。

接口

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

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

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

我使用maven创建了一个bean的jar文件,然后将jar文件复制到JBOSS的“deploy”目录中。我能够看到在JMX控制台中部署的bean。

JMX控制台中的全局JNDI命名空间

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

我的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>");  
 }

....
}

当我指向我的servlet的URL时,我得到NullPointerException。当我评论bean并打印其他东西时,它打印得很好。所以我确定问题在于servlet中的EJB依赖注入。 我尝试过许多其他建议的解决方案,没有真正有效,有人请帮助我。

1 个答案:

答案 0 :(得分:7)

经过很长时间我发现了问题,我发布了它,所以其他人可以受益。 问题是,我使用的是JBOSS 4.2.3,因为这篇文章http://community.jboss.org/message/410211表明jboss 4.2.x不支持servlet中的EJB注入。

我使用了Jboss 5.1,如果servlet和EJB都不在单个ear包中,则必须使用mappedName到EJB Injection。我把WAR中的servlet和EJB放在一个单独的Jar中。查看此帖子了解更多详情http://community.jboss.org/message/8196#8196