2

GAEを使用するのはこれが初めてで、CDIを機能させようとしています。簡単@Injectに言うと、サーブレットのフィールドが挿入されていません(常に挿入されていますnull)。

私はEclipseで作業しており、GAE SDK(Eclipseによっても起動されます)に含まれているローカルテストサーバーでアプリケーションをデバッグしています。でサーブレットにアクセスするとlocalhost、のnullポインタ例外が発生しsomeServiceます。また、の値を出力して、someServiceそれが実際nullにそうであることを確認しました。

編集:インジェクションポイントに修飾子を追加したとき@Named("skldjfx")、Weldは依存関係が(検証フェーズで)満たされていないことを訴えたので、それは良い兆候です。ただし、フィールドは常にnullです。

サーブレット:

public class BlogServlet extends HttpServlet {

    @Inject private SomeService someService;

    public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {

        resp.setContentType("text/plain");
        resp.getWriter().println("Hello. " + someService.getSomeValue());
        //                                      \
        //                                  always null
    }
}

SomeServiceクラス:

@ApplicationScoped
public class SomeService {

    private String someValue = "some value";

    public String getSomeValue() {
        return someValue;
    }
}

私は溶接を構成Listenerしましたweb.xml

<listener>
    <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>

リスナーは、初期化メッセージをログに記録するため、適切にロードされますorg.jboss.weld.environment.servlet.Listener contextInitialized

beans.xmlとの両方war/WEB-INFに(空の)を含めましたwar/META-INF。私もなしで試してみましたMETA-INF多分beans.xml処理されていませんか?フォルダ内の他のコンテンツWEB-INF(などweb.xml適切に処理されます。

beans.xml処理されているか、修正SomeServiceが注入されていないかを確認するにはどうすればよいですか?

4

1 に答える 1

0

jetty-web.xmlGAE の Jetty フォークはを指定するために必要な を無視するため、GAE で CDI を使用することはできないようBeanManagerです。このリンクこのリンクを参照してください。本当に奇妙な GAE は CDI の使用をサポートしていません。

これらのリンクは非常に古いものであることに注意してください。ただし、これまでのところ、反対の証拠は見つかりませんでした。

とにかく、私の次のステップは、Google 独自の依存性注入フレームワーク Guice を使用することです。GAE での使用については、こちらで説明しています。でも、CDIの方がいいです。

于 2012-05-02T03:55:13.233 に答える