在 Java Enterprise Edition (JEE) 开发领域,通常需要将无状态 EJB 注入到 JAX-RS Web 服务中用于高效数据访问的 JAX-RS Web 服务。然而,遇到 null EJB 和可怕的 NullPointerException 可能会令人沮丧。本文深入探讨了原因并提供了解决此问题的实用解决方案。
由于底层平台限制,通过注释注入 EJB 的初始尝试可能并不总是成功。为了解决这个问题,您可以采取多种方法:
注入提供程序 SPI 提供了一个钩子来自定义注入过程。通过实现 InjectableProvider,您可以指示容器如何解析 EJB 并将其注入到 JAX-RS 资源中。下面是 Jersey 服务器的示例:
@Provider public class EJBProvider implements InjectableProvider<EJB, Type> { // ... Implementation Details ... }
通过使 BookResource 本身成为 EJB,您可以确保 EJB 容器管理生命周期并在班级内进行注射。这消除了对外部注释的需要:
@Stateless @Path("book") public class BookResource { @EJB private BookEJB bookEJB; // ... }
CDI(上下文和依赖项注入)提供了一种方便且以声明方式配置的方法来注入 EJB。通过利用 @Inject 注释,您可以无缝访问 JAX-RS 资源中注入的 EJB:
@Path("book") @RequestScoped public class BookResource { @Inject private BookEJB bookEJB; // ... }
值得注意的是,选择适当的方法取决于应用程序的具体要求和设计注意事项。选项 1 提供对注入过程的细粒度控制,而选项 2 和 3 通过利用标准 EJB 或 CDI 机制来简化它。
以上是为什么将 EJB 注入 JAX-RS Web 服务时会得到空 EJB?的详细内容。更多信息请关注PHP中文网其他相关文章!