将一个无状态EJB注入到Servlet中

5

我试图将一个无状态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查找,它非常有效。是否事实上@Inject在Servlet中不起作用?

我正在使用Glassfish 3.1.2.2

1个回答

11

您正在尝试在构造函数中访问它。注入的依赖项在构造函数中不可用。如果实例尚未构造,则无法设置实例变量。您基本上希望它像这样运行:

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

显然并不是这样。你只有在servlet的init()方法中或者任何doXxx()方法中才可以访问它。

首先,替换

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

通过

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

与具体问题无关,但我强烈建议您遵循Java命名规范。小写和带下划线的类名不符合标准的Java命名规范,会降低经验丰富的Java开发人员对代码的解释速度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接