1

セッション Bean を ServletFilter に注入したいのですが、うまくいかないようです。これを達成する方法を教えてください。

public class MyExample implements Filter {
    @EJB
    private MyBean someEjb;

    @Override
    public void destroy() {
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
                     FilterChain filterChain) throws IOException, ServletException{
        someEjb.toString();
    }
}

myEjb が null であるため、結果は NullPointerException になります。使用されるプラットフォームは JBoss 5.1 です。MyBean は、他の EJB またはサーブレットから正しくアクセスできます。

ありがとうございました。


問題は解決しました(理由はわかりませんが):

アプリケーションは 3 つのアーティファクトで構成されています。 - EJB を含む jar - サーブレットを含む war - 上記の両方を含む ear

フィルターを jar にパッケージ化すると、問題が発生します。戦争中のサーブレットと一緒にパッケージ化すれば、問題は発生しません。

したがって、当面の問題は解決しましたが、理解できませんでした。

多分誰かが私がそれを理解するのを助けることができますか?

4

2 に答える 2

3

servletとの両方がEJB1 つの ear ファイルにない場合は@EJB(mappedName="name")、EJB を注入するときに使用する必要があります。詳細については、この投稿を確認してください。

関連リンク:外部モジュールからのインジェクション

もちろん、 「FilterサーブレットServletフィルター」として知られているようなものです。Servletまた、とは両方ともWeb コンポーネントであるため、Java アーカイブではなくFilter、Web アーカイブ に属します。フィルターインは、そのような注釈を挿入するためにスキャンされず、他の通常の Java クラスとして扱われます。.war.jarjar

于 2012-05-30T03:15:31.867 に答える
1

同様の問題に直面しました。Jar 内にパッケージ化された一部@WebFilterのコンポーネントが読み込まれませんでした (注釈が処理されませんでした)。@WebListener

目的は、他の注釈付きコンポーネントを探して他の jar をスキャンするようにコンテナーに指示することでした。

属性metadata-completeを web.xml 宣言に追加するという目標を達成します。例:

<?xml version="1.0" encoding="UTF-8"?>
<web-app  version="3.0" 
          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"
          metadata-complete="false">
  
  ...NORMAL_CONTENT_HERE...
  
</web-app>

それが役に立てば幸い。

于 2016-08-04T06:10:16.007 に答える