2013-07-30 10 views
5

Glassfish 4.0を使用してRESTアプリケーションを開発しています。@EJBを使用したGlassFish 4 + JAX-RSフィルタ

リソースクラスでは、@Statelessクラスを作成し、@EJBを介して注入する(注入されたクラスはステートレスなEJBです)。

ただし、この方法はJAX-RSフィルタでは機能しません。私は全く注射することができません。

@Provider 
public class UpdateFilter implements ContainerRequestFilter { 

    @EJB 
    private MyBeanInterface doStuffBean; 

    @Override 
    public void filter(ContainerRequestContext requestContext) { 

     ... 
    } 
} 

doStuffBeanは常にnullです:

は、以下のコードを参照してください。

答えて

1

@EJBは、他のEJBやサーブレットのようなJava EE管理クラスでのみ動作すると思います。

CDIを使用している場合は、代わりに@Injectアノテーションを使用できますが、このクラスがManagedBeanでない場合は、ルックアップを行う必要があります。

+0

@Injectは機能しません。例外が発生しました:** UnsatisfiedDependencyException:注入可能なオブジェクトがありませんでした... **。 – bafitor

+0

これは、クラスがマネージドBeanではないためです。私はこのプロバイダをManagedBeanにすることができないのではないかと思いますので、おそらくEJBルックアップを行う独自のプロデューサを作成しなければならず、どこにでも挿入することができます(これを行う方法を示す記事がたくさんあります)このクラスでルックアップを行うことができます。 – ZeusSelerim

0

@Statelessを@ManagedBean、@EJBを@Injectに置き換えてCDIを使用してください。これはJAX-RSの私のために働いています。

注入以外の目的でEJBが必要な場合は、ダブルアノテーション@Stateless @ManagedBeanを維持することができます。

+0

私は両方のソリューションを試しましたが、うまくいきません。 ** UnsatisfiedDependencyExceptionがあります:注射に使用できるオブジェクトがありませんでした。**。何か案が? – bafitor

+1

私はこれまでGF3でこれを見たことがないので、おそらくGF4の問題です。 https://java.net/jira/browse/GLASSFISH-20597はv4.0.1で修正されたと言っています - あなたが使用しているバージョンですか?そうでない場合は、回避策の提案をhttp://stackoverflow.com/questions/16216759/dependency-injection-with-jersey-2-0で試すことができます。@Statelessを削除しようとしましたか、それとも必要ですか? – TheArchitect

関連する問題