首页 > 解决方案 > 如何在 servlet 中获取 EJB 对象?

问题描述

我创建了简单的 EJB,并尝试在我的示例 servlet 中使用,我使用 TomEE 服务器和 eclips 作为 IDE

以下是我的代码

HelloBeanInterface.java

package com.ccc.demo;

public interface HelloBeanInterface {
    public String from();
}

HelloBean.java

package com.ccc.demo;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;

 /**
 * Session Bean implementation class HelloBean
 */
@Stateless
@LocalBean
public class HelloBean implements HelloBeanInterface{

    private String message = "I am from EJB";

    public String from() {
        
        return message;

    }

}

HelloServlet.java

package com.ccc.demo;

import java.io.IOException;
import java.io.Writer;

import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloServlet
 */
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @EJB
    private HelloBeanInterface bean;

   
     /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws 
    ServletException, IOException {

        response.setContentType("text/html");
    
        Writer out = response.getWriter();
    
        out.append("<html>");
        out.append("<body>");
        out.append("<h1>Hello Servlet</h1>");
        out.append("<h1>"+bean+"</h1>");
        out.append("</body>");
        out.append("</html>");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws 
        ServletException, IOException {
                // TODO Auto-generated method stub
                doGet(request, response);
      }

  }

我的问题是这里out.append("<h1>"+bean+"</h1>");bean 的值正在打印我在这里声明的NULL

@EJB
private HelloBeanInterface bean;

这是我运行后的结果

在此处输入图像描述

标签: javaservletsejbejb-3.0apache-tomee

解决方案


我在这里只是冒险猜测 servlet 仅在 Tomcat http 服务器系统中,虽然您使用的是 ejb 类,但您还应该配置一个ejb 应用程序ejb 容器配置文件,并有一个带有 bean 规则的ejb bean 类句法。


推荐阅读