首页 > Java > java教程 > 为什么将 EJB 注入 JAX-RS Web 服务时会得到空 EJB?

为什么将 EJB 注入 JAX-RS Web 服务时会得到空 EJB?

Susan Sarandon
发布: 2024-11-08 00:21:03
原创
728 人浏览过

Why Do I Get a Null EJB When Injecting It into a JAX-RS Webservice?

EJB 注入 JAX-RS Web 服务:综合指南

在 Java Enterprise Edition (JEE) 开发领域,通常需要将无状态 EJB 注入到 JAX-RS Web 服务中用于高效数据访问的 JAX-RS Web 服务。然而,遇到 null EJB 和可怕的 NullPointerException 可能会令人沮丧。本文深入探讨了原因并提供了解决此问题的实用解决方案。

由于底层平台限制,通过注释注入 EJB 的初始尝试可能并不总是成功。为了解决这个问题,您可以采取多种方法:

选项 1:利用注入提供程序 SPI

注入提供程序 SPI 提供了一个钩子来自定义注入过程。通过实现 InjectableProvider,您可以指示容器如何解析 EJB 并将其注入到 JAX-RS 资源中。下面是 Jersey 服务器的示例:

@Provider
public class EJBProvider implements InjectableProvider<EJB, Type> {
    // ... Implementation Details ...
}
登录后复制

选项 2:将 BookResource 提升为 EJB

通过使 BookResource 本身成为 EJB,您可以确保 EJB 容器管理生命周期并在班级内进行注射。这消除了对外部注释的需要:

@Stateless
@Path("book")
public class BookResource {
    @EJB
    private BookEJB bookEJB;
    // ...
}
登录后复制

选项 3:利用 CDI 的强大功能

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板