簡體   English   中英

EJB注入時空指針異常

[英]Null pointer exception while EJB injection

我用一個無狀態的Ejb編寫了非常簡單的Web應用程序,當我實現接口時,有趣的時刻來了 - ejb依賴注入不起作用:

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);
    }
}

package com;

import javax.ejb.Stateless;

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

inteface

package com;

import javax.ejb.Remote;

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

因此,當我解開“implements Simple”時,我得到NullPointerException(在接口中使用@Remote或@Local注釋),另一種情況我得到“axaxaxa!”。 為什么會這樣? 我讀過Ejb類必須實現接口。

我使用TommEEcas Application Server。

通過更改bean變量類型(到接口類型而不是類類型)來解決問題

帶有NullPointerException的版本

private SimpleBean bean;

工作版

private Simple bean;

在排除故障之前,只需嘗試重新啟動容器(即GlassFish,JBoss等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM