2

这是我第一次与 GAE 合作,我正在尝试让 CDI 工作。长话短说:@Inject我的 servlet 中的字段没有被注入(它总是null)。

我在 Eclipse 中工作并在 GAE SDK 中包含的本地测试服务器上调试应用程序(它也由 Eclipse 启动)。当我在 上访问 servlet 时localhost,我得到一个空指针异常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了Weld 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-INFwar/META-INFMETA-INFbeans.xmlWEB-INFweb.xml

如何验证是否beans.xml已处理和/或修复SomeService未注入?

4

1 回答 1

0

看起来不可能将 CDI 与 GAE 一起使用,因为 GAE 的 Jetty fork 忽略jetty-web.xmlBeanManager. 请参阅此链接此链接。真奇怪GAE不支持使用CDI。

请注意,这些链接确实很旧,但到目前为止我还没有找到任何相反的证据。

无论如何,我的下一步将是使用谷歌自己的依赖注入框架 Guice。此处描述了将它与 GAE 一起使用。不过我更喜欢CDI。

于 2012-05-02T03:55:13.233 回答