3

私は 1 つのステートレスな 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>

サーブレット クラス

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!";
    }
}

インターフェース

package com;

import javax.ejb.Remote;

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

そのため、「implements Simple」のコメントを外すと、NullPointerException (インターフェイスに @Remote または @Local アノテーションを使用) が発生し、別のケースでは「axaxaxa!」が発生します。なぜそれが起こるのですか?EJB クラスはインターフェイスを実装する必要があると読みました。

私はTommEEcas Application Serverを使用しています。

4

2 に答える 2

5

Bean 変数の型を変更することで問題が解決します (クラス型ではなくインターフェース型に)

NullPointerException のあるバージョン

private SimpleBean bean;

作業バージョン

private Simple bean;
于 2013-04-17T09:58:21.057 に答える
-1

トラブルシューティングを行う前に、コンテナ (つまり、GlassFish、JBoss など) を再起動してみてください。

于 2013-12-05T17:23:46.530 に答える