将无状态EJB注入Servlet



我正在尝试将无状态EJB注入servlet。但这并没有奏效。我理解错了吗?如果我在@WebService注释类中这样做,我可以毫无问题地使用注入的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不工作在servlet ?

我用的是Glassfish 3.1.2.2

您试图在构造函数中访问它。注入的依赖项在构造函数中不可用。如果实例尚未构造,则不可能设置实例变量。你基本上希望它像这样工作:

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命名约定。小写和下划线的类名不符合标准的Java命名约定,这会降低经验丰富的Java开发人员对代码的解释速度。

最新更新