我有一个 RESTful 服务,它使用 @EJB 注释注入 EJB(3.0)。此注入不起作用,因为当我尝试访问 bean 上的 greeting() 方法时收到 NullPointerException。
这个确切的代码适用于 Glassfish 3.1,现在在 WAS8.0.2 上它失败了。然而,当使用完全相同的方法从 servlet 引用时,注入在同一个应用程序中起作用
@Stateless
@Path("/hello")
public class HelloRestService {
@EJB
public HelloInterface helloImpl;
}
我的 Bean 看起来像这样
package impl;
@Stateless
@Local
public class HelloImpl implements iface.HelloInterface {
@Override
public String greeting() {
return "Hello developer";
}
}
我尝试使用在服务器启动期间打印出来的 jndi 名称来查找实现
helloimpl = (HelloImpl) new InitialContext().lookup("java:global/REST_EAR/REST_WAR/HelloImpl!iface.HelloInterface");
然而,这会导致 ClassCastException
java.lang.ClassCastException: iface.EJSLocal0SLHelloImpl_f8ca883b incompatible with impl.HelloImpl
我可以阅读很多内容吗..?
现在我正在使用 Wink 作为我的 JAX-RS 1.1 实现。我以前使用过泽西岛,结果相同。
有谁知道这是否是导致 DI 失败的 JAX-RS / WAS 问题..?如前所述,它肯定与 REST 有关,@EJB 注入从 Servlet 工作