0

问题

在应用程序客户端中注入企业 Java bean @EJB,使用 Java Web 启动并从 GlassFish 3.1.2.2(构建 5)服务器启动。只要满足要求[见底部注释]。但是,如果我使用 注入某些东西,一切都会失败@Inject,尽管我们尝试注入任何资源类型。我知道它失败了,因为NullPointerException如果我尝试使用注入的资源,我会得到一个。这告诉我注释处理器已经完全忘记了@Inject

我不仅@EJB对同时完美地工作@Inject根本不工作很感兴趣,而且我还认为这种注入的“静默失败”一定违反了Java EE 6 规范。该规范在第 69 页上说:

如果容器未能找到注入所需的资源,则该类的初始化必须失败,并且该类不得投入使用。

此问题可能与GlassFish中的错误有关或表达。

我的最终目标..

.. 是将 API 与实现分开,以便在需要进行性能测试和分析我的应用程序时,我可以更轻松地尝试不同的实现。但是我认为这种设计模式几乎不可能在应用程序客户端中重新创建?我的直接方法是创建Main类中所有实现的新实例或使用工厂。当然,最好的解决方案是使用限定符!

注意:在应用程序客户端中注入的要求是必须为组件启用 CDI(包必须包含文件beans.xml,如果您习惯于注解,很可能是空的!)并且在应用程序客户端中对 CDI 的支持实际上是可选的,具体实施。此外,如果启用并支持 CDI,那么您应该知道应用程序客户端容器只能在客户端启动期间处于活动状态,因此需要将资源注入到Main类中并且字段是static.

4

0 回答 0