java - EJB注入(inject)时出现空指针异常

标签 java servlets dependency-injection ejb

我用一个无状态 Ejb 编写了非常简单的 Web 应用程序,当我实现接口(interface)时有趣的时刻来了——ejb 依赖注入(inject)不起作用:

web.xml

<?xml version="1.0" ?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
  <display-name>Archetype Created Web Application</display-name>
    <servlet>
        <servlet-name>simpleController</servlet-name>
        <servlet-class>com.SimpleController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>simpleController</servlet-name>
        <url-pattern>*.job</url-pattern>
    </servlet-mapping>
</web-app>

Servlet 类

package com;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class SimpleController extends HttpServlet {

    @EJB
    private SimpleBean bean;

    @Override
    protected void doPost (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().println(bean.getSomeString());
    }

    @Override
    protected void doGet (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

bean

package com;

import javax.ejb.Stateless;

@Stateless
public class SimpleBean /*implements Simple*/ {
    public String getSomeString(){
        return "axaxaxa!";
    }
}

界面

package com;

import javax.ejb.Remote;

//@Local
@Remote
public interface Simple {
    String getSomeString();
}

因此,当我取消注释“implements Simple”时,我得到了 NullPointerException(在接口(interface)中带有 @Remote 或 @Local 注释),另一种情况下我得到了“axaxaxa!”。为什么会这样?我读到 Ejb 类必须实现接口(interface)。

我使用 TommEEcas 应用服务器。

最佳答案

问题通过改变 bean 变量类型(到接口(interface)类型而不是类类型)来解决

带有 NullPointerException 的版本

private SimpleBean bean;

工作版本

private Simple bean;

关于java - EJB注入(inject)时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16056881/

相关文章:

java - 在 PageViewer 中动态更新图像

javascript - 以 javascript 形式记录 Bson 查询

java - 使用jsp/servlet在浏览器中显示动态html页面

c# - 如何在 Asp.net Core 运行时从 DependencyInjection 解析泛型类型服务

java - 基于国家/地区的 Spring Boot 依赖注入(inject)

java - 如何修复 Eclipse 中模糊的 Swing 元素

java - 如何在 RecyclerView 中使用字符串?

mysql - 如何将CSV文件中的数据导入MySQL数据库

java - Commons Daemon procrun 标准输出已初始化

java - 如何向具有静态方法的类提供参数而不更改其静态限定符?