【发布时间】:2012-02-01 11:55:12
【问题描述】:
我正在尝试将 Guice 注入项目转换为 Java EE 项目,即在 glassfish 上运行。
我有一个 lib 项目,它定义了一个接口,Hello,用 @Remote 注释。然后我有一个 impl 项目,它有一个 bean HelloBean,用 @Stateless 注释,以及一个带有参数和 @Inject 的构造函数。
然后我有一个依赖于 lib 的项目及其创建 web 服务的接口,HelloService,用@WebService 注释,Hello 作为用@EJB 注释的成员。
这似乎不起作用。由于 bean 必须有一个无参数的构造函数,我将 HelloBean 创建为一个 bean,并将 HelloImpl 创建为一个带有单个 @Inject 构造函数和参数的 Pojo。然后我尝试使用@Inject、@Resource 和@EJB 将Hello 和HelloImpl 注入HelloBean。似乎没有一个工作。
如果我将 @Inject Hello 或 HelloImpl 转换为 HelloBean,我会得到 NPE。
如果我@ResourceHello 或HelloImpl,我会得到一个Lookup failed for delegate。
如果我@EJBHelloImpl,同样的错误。 @EJB Hello 我得到了stackoverflows(可以理解)。
我确实想使用构造函数注入,因为我觉得这是一种更正确的创建类的方法(一旦构造它们总是有效的)。但我不明白如何将 CDI 和 EJB 结合起来。
如何将带有@Inject 构造函数的 Pojo 放入 bean?还是我的计划存在根本缺陷?
【问题讨论】: