我正在尝试将Guice注入项目转换为Java EE项目,即在glassfish上运行。
我有一个lib项目,它定义了一个接口,Hello,用@Remote
注释。然后我有一个impl项目,它有一个bean HelloBean
,带有@Stateless
注释,以及一个带参数和@Inject
的构造函数。
然后我有一个依赖于lib的项目,它依赖于创建web服务的接口HelloService
,注释为@WebService
,Hello
作为注释为{{1}的成员}}
这似乎不起作用。由于bean必须具有no-args构造函数,因此我将@EJB
创建为bean,将HelloBean
创建为具有单个HelloImpl
构造函数的Pojo,并带有参数。我尝试将@Inject
和Hello
同时注入HelloImpl
HelloBean
,@Inject
和@Resource
。似乎没有用。
如果我@EJB
@Inject
或Hello
进入HelloImpl
,我会获得NPE。
如果我HelloBean
@Resource
或Hello
,我会收到HelloImpl
。
如果我Lookup failed for delegate
@EJB
,则出现同样的错误。 HelloImpl
@EJB
我获得了stackoverflows(可以理解)。
我确实想使用构造函数注入,因为我觉得它是一种更正确的创建类的方法(一旦构造它们总是有效的)。但我不知道如何将CDI和EJB结合起来。
如何将带有Hello
构造函数的Pojo放入bean中?或者我的计划存在根本缺陷?
答案 0 :(得分:2)
更好的方法是定义使用@Inject注释的初始化方法。任何参数都是注入点,应通过CDI提供。您也可以使用构造函数执行此操作。确保你也有WEB-INF / beans.xml。