5

ステートレス EJB をサーブレットに注入しようとしています。しかし、それは機能していません。私は何か間違ったことを理解しましたか?アノテーション付きクラスでこれを行うと@WebService、注入された EJB を問題なく使用できます。

私のEJB:

@Stateless
public class doSomethingService
{
  public void doSomething()
  {
    System.out.println("DO SOMETHING");
  }
}

私のサーブレット:

@WebServlet("/testservlet")
public class test_servlet extends HttpServlet
{
  private static final long serialVersionUID = 1L;

  @Inject
  private doSomethingService injBean;

  public test_servlet() 
  {
    super();
    injBean.doSomething(); 
  }

これにより、NullPointerException. JNDI-Lookup を実行しようとしましたが、非常にうまく機能しました。@Injectサーブレットで動かないのは事実?

Glassfish 3.1.2.2を使用しています

4

1 に答える 1

11

コンストラクターでアクセスしようとしています。注入された依存関係は、コンストラクターでは使用できません。インスタンスがまだ構築されていない場合、インスタンス変数を設定することはできません。基本的に、次のように機能することを期待しています。

test_servlet servlet;
servlet.injBean = new doSomethingService();
servlet = new test_servlet();

これは明らかにそうではありません。init()サーブレットのメソッドで最も早くアクセスできます。doXxx()また、サーブレットのどのメソッドでも利用できます。

開始するには、交換してください

public test_servlet() {
    super();
    injBean.doSomething(); 
}

@Override
public void init() {
    injBean.doSomething(); 
}

具体的な問題とは関係ありませんが、 Java 命名規則に取り組むことを強くお勧めします。小文字および下線付きのクラス名は、標準の Java 命名規則に準拠していないため、経験豊富な Java 開発者によるコードの解釈が遅くなります。

于 2013-03-27T18:31:54.850 に答える