2013-03-27 10 views
5

ステートレスEJBをサーブレットにインジェクトしようとしています。 しかし、それは動作していません。私は間違ったことを理解しましたか? 注釈付きクラスの@WebServiceでこれを行うと、問題なく注入されたEJBを使用できます。ステートレス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

答えて

10

を使用して

イム

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

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

これは明らかです。あなたはサーブレットの方法としてはinit()で一番早くアクセスできます。これはサーブレットのdoXxx()メソッドのいずれかでも使用できます。開始、具体的な問題に

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

無関係によって

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

を置き換える、私は強くあなたのJava naming conventions上で動作するようにお勧めする

。小文字のクラス名と下線のクラス名は標準のJava命名規則に準拠していないため、経験豊富なJava開発者によるコードの解釈が遅くなります。

関連する問題