2010-12-14 132 views
5

我正在嘗試將一個EJB無狀態bean注入到一個servlet中,但該servlet會引發一個NullPointerExcetion。我正在使用JBOSS來部署EJB和servlet。servlet中的EJB注入失敗

我對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的目錄。我能夠看到部署在JMX控制檯中的bean。

全局JNDI名稱空間在JMX控制檯

+- 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依賴注入。 我嘗試了很多解決方案建議其他地方,沒有什麼真正的工作,有人請幫助我。

回答

7

經過很多小時我發現問題,我張貼它,讓別人可以受益。 問題是,我使用的是JBOSS 4.2.3,因爲這個帖子http://community.jboss.org/message/410211暗示jboss 4.2.x不支持servlet中的EJB注入。

我使用了Jboss 5.1,如果servlet和EJB都不在單個耳朵包中,則必須使用mappedName到EJB注入。我有一個WAR中的servlet,另一個Jar中有EJB。查看該帖子瞭解更多詳情http://community.jboss.org/message/8196#8196

+1

你可以接受你自己的答案,所以其他用戶會知道這個問題已經回答。 – 2012-07-06 19:47:33