将 EJB 注入 JAX-RS Web 服务
问题描述:
尝试将无状态 EJB 注入到使用注释的 JAX-RS Web 服务,EJB 实例在服务类中保持为 null,从而在使用时导致 NullPointerException。
环境详细信息:
- Glassfish 3.1
- Netbeans 6.9 RC 2
- Java EE 6
解决方案选项:
选项 1 :使用注入提供程序 SPI 进行注入
- 实现执行 EJB 查找和注入的自定义注入提供程序。
- 例如,在 Jersey 1.17 中:
import com.sun.jersey.core.spi.component.ComponentContext;
import ...
public class EJBProvider implements InjectableProvider<EJB, Type> {
// Implementation details...
}
登录后复制
选项 2:将资源类转换为 EJB
- 使 JAX-RS 资源类本身成为无状态 EJB,允许其管理自己的
选项 3:利用 CDI
- 使用上下文和依赖注入 (CDI) 将 EJB 注入到 JAX-RS 资源类中.
示例:
@Path("book")
@RequestScoped
public class BookResource {
@Inject
private BookEJB bookEJB;
// Implementation details...
}
登录后复制
其他资源:
- [EJB 注入]( https://docs.oracle.com/javaee/7/api/javax/ejb/EJB.html)
- [@EJB 注入](https://stackoverflow.com/questions/1130846/ejb-注入)
- [将 REST 服务与 EJB 3.1 相结合](https://dzone.com/articles/combining-rest-services-with-ejb-31)
- [EJB 3.1 和 REST - 轻量级混合](https://weblogs.java.net/blog/emcfarlane/archive/2009/12/10/ejb-31-and-rest-lightweight-hybrid)
- [注入 EJB在战争中从 jar 到 jax-rs 类](https://stackoverflow.com/questions/6474811/injecting-an-ejb-from-a-jar-into-a-jax-rs-class-in-一场战争)
以上是如何将无状态 EJB 注入 JAX-RS Web 服务?的详细内容。更多信息请关注PHP中文网其他相关文章!