2

struts2、EJB 3.0 を使用しています...私の要件は、struts2 アクション クラスから EJB レイヤーを呼び出すことです。これを達成するには2つの方法があることを願っています:

1.Using @EJB annotation in Action class
2.Using JNDI look up 

私は両方を試しましたが、問題JNDI lookupは、正しいネーミングを使用しているにもかかわらず、 NameNotFoundException. 最終的に、私のチームは@EJB注釈を使用する他の方法に移行しました。

しかし、@EJBアノテーションを使用しているときは、そこから null を取得していますが、注入されていないと思います:

を取得していますNullPointerException

コード:

 @EJB(mappedName="BeanLocal/local")
    BeanLocal bean ;

誰も私がさらにしなければならないことを私に提案できますか...また、SOFにリンクがある場合は、これに関連するものは何も見つからなかったので、私を参照してください

4

3 に答える 3

2

私はこれと同じ問題を抱えていました、そしてこれが私がそれを解決した方法です。

Shinoshaが言ったように、アクションクラスはStrutsコンテナによって管理されるため、@EJBアノテーションは機能しません。

JNDIルックアップを使用するには、Beanを@Remoteにして、mappedNameを指定する必要がありました。その場合、コードは次のようになります(使用しているサーバー、私の場合はWeblogicによって異なります)。

Context ctx = new InitialContext();
MyBean bean= (MyBean) ctx.lookup("MyBeanMappedName#myapp.MyBean");

ルックアップ文字列は、Beanの完全修飾名である必要があります。

于 2012-08-30T12:49:45.413 に答える
2

アクションは管理されていないため、Struts 2 アクション クラスで従来の依存性注入を使用することはできません。ただし、 CDI プラグインまたはGuiceを使用してこれを実現する方法があります。JNDI ルックアップも使用できますが、構文はサーバーによって異なります。あなたの最善の選択肢は、あなたが持っているものに応じてドキュメントを確認することです(JBoss 7.1Glassfish ...)

于 2012-08-29T14:10:45.423 に答える
0

この問題を解決するために、次のインターセプターを作成しました。見て、あなたが持っているかもしれないフィードバックを共有してください:

http://gauravwrites.blogspot.com/2014/11/ejb-injection-in-struts2-interceptor.html

于 2014-11-12T01:43:03.673 に答える