我在IBM RAD(又名Eclipse 3.4)和WebSphere 7.0中有一个基本的EJB 3.0(Java EE 5)项目
我创建了一个EAR项目,一个EJB项目(用于EJB),一个JPA项目(用于域对象)和一个Dynamic Web项目(用于我的JAX-RS Web服务)。
EJB项目包含如下所示的EJB:
@Stateless
public TestBean implements TestBeanLocal {
/* ... */
@Local
public TestBeanLocal {
/* ... */
Web项目包含JAX-RS Web服务,如下所示:
@Path(value="/mywebservice")
public MyWebService implements Application {
@EJB
private TestBeanLocal myBean;
@GET
@Produces({"text/plain"})
public String getList() {
return myBean.getList();
/* ... */
我的问题是MyWebService中的“myBean”属性从未注入。它总是空的。
我错过了什么想法?
谢谢, 罗布
答案 0 :(得分:2)
Java EE容器只对它管理的组件执行@EJB注入。对于Java EE 5,这将包括servlet,Web服务和EJB。在你的情况下,组件由Wink管理,所以问题是Wink是否应该解释@EJB(我猜不是)。使用Java EE 6注入是因为JAX-RS是Java EE版本的一部分,组件由容器管理,而不是由第三方框架管理。
答案 1 :(得分:0)
经过多次拉动之后,我创建了一个干净的新项目(下面的类名略有不同)...我注意到在WebSphere的启动日志中EJB有JNDI名称,所以我尝试通过它的JNDI查找EJB在Web服务的构造函数中......
String sJNDI = "ejblocal:testEAR/testEJB.jar/TestBean#test.TestBeanLocal";
TestBeanLocal testBeanLocal = (TestBeanLocal) new InitialContext().lookup(sJNDI);
......这很有用。
我现在的问题是,我真的必须这样做才能看到我的豆子吗?还是我错过了什么?在使用Java EE 6版本的GlassFish的另一个项目中,我所要做的就是放入@EJB并且没关系。这在Java EE 5 / WebSphere 7中根本不起作用吗?或者它可能是IBM RAD 7(又名Eclipse 3.4)的限制?
谢谢, 罗布