bla*_*ine 5 servlets ejb inject cdi
我正在尝试将无状态EJB注入servlet.但它没有用.我明白了什么问题吗?如果我在带@WebService注释的类中执行此操作,我可以毫无问题地使用注入的EJB.
我的EJB:
@Stateless
public class doSomethingService
{
public void doSomething()
{
System.out.println("DO SOMETHING");
}
}
Run Code Online (Sandbox Code Playgroud)
我的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();
}
Run Code Online (Sandbox Code Playgroud)
这导致了NullPointerException.我试着做一个JNDI-Lookup,它运行得很好.是@Inject不是在Servlets 中不起作用的事实?
我正在使用Glassfish 3.1.2.2
Bal*_*usC 11
您正尝试在构造函数中访问它.注入的依赖项在构造函数中不可用.如果尚未构造实例,则无法设置实例变量.你基本上期望它像这样工作:
test_servlet servlet;
servlet.injBean = new doSomethingService();
servlet = new test_servlet();
Run Code Online (Sandbox Code Playgroud)
事实显然并非如此.您可以init()在servlet的方法中最早访问它.它也可以在doXxx()servlet的任何方法中使用.
要开始,请更换
public test_servlet() {
super();
injBean.doSomething();
}
Run Code Online (Sandbox Code Playgroud)
通过
@Override
public void init() {
injBean.doSomething();
}
Run Code Online (Sandbox Code Playgroud)
与具体问题无关,我强烈建议您使用Java命名约定.小写和下划线类名称不符合标准Java命名约定,这会减慢经验丰富的Java开发人员对代码的解释速度.
| 归档时间: |
|
| 查看次数: |
7048 次 |
| 最近记录: |