2013-03-27 34 views
5

我試圖向servlet注入一個無狀態的EJB。 但它不工作。我瞭解錯誤嗎? 如果我在@WebService註釋類中執行此操作,我可以使用注入的EJB而不會出現任何問題。向Servlet注入一個無狀態的EJB

我EJB:

@Stateless 
public class doSomethingService 
{ 
    public void doSomething() 
    { 
    System.out.println("DO SOMETHING"); 
    } 
} 

我的servlet:

@WebServlet("/testservlet") 
public class test_servlet extends HttpServlet 
{ 
    private static final long serialVersionUID = 1L; 

    @Inject 
    private doSomethingService injBean; 

    public test_servlet() 
    { 
    super(); 
    injBean.doSomething(); 
    } 

這會導致NullPointerException。我試圖做一個JNDI-Lookup,它工作得很好。 @Inject在Servlets中不起作用嗎?使用Glassfish的3.1.2.2

回答

10

林你試圖訪問它在構造函數中。注入的依賴關係在構造函數中不可用。如果實例尚未構建,則無法設置實例變量。你基本上期望它能像這樣工作:

test_servlet servlet; 
servlet.injBean = new doSomethingService(); 
servlet = new test_servlet(); 

這顯然不是這種情況。您可以在servlet的init()方法中最早訪問它。它也只適用於servlet的doXxx()方法中的任何一個。

要啓動,更換

public test_servlet() { 
    super(); 
    injBean.doSomething(); 
} 

通過

@Override 
public void init() { 
    injBean.doSomething(); 
} 

無關的具體問題,我強烈建議您Java naming conventions工作。小寫和下劃線類名稱不符合標準Java命名約定,這會降低經驗豐富的Java開發人員對代碼的解釋速度。