Glassfish @inject不适用于无状态EJB
嗨,我有一个非常简单的例子。我在javaee 7中创建了一个资源,如下所示:Glassfish @inject不适用于无状态EJB,glassfish,ejb,java-ee-7,Glassfish,Ejb,Java Ee 7,嗨,我有一个非常简单的例子。我在javaee 7中创建了一个资源,如下所示: @Path("greetings") public class GreetingsResource { @Inject Sample s; @GET public JsonObject greetings(){ return Json.createObjectBuilder().add("first","1") .add("second
@Path("greetings")
public class GreetingsResource {
@Inject
Sample s;
@GET
public JsonObject greetings(){
return Json.createObjectBuilder().add("first","1")
.add("second","2")
.add("third","3")
.add("fourth","4")
.add("helloworld", s.helloWorld())
.build();
}
}
示例是以下简单EJB:
@Stateless
public class Sample {
public String helloWorld(){
return "Hello World";
}
}
最后,资源应用程序类:
@ApplicationPath("resources")
public class RestConfiguration extends Application {
}
我可以访问URL:“localhost:8081/jasonandjaxrs/resources/greetings”
问题在于@Inject给出了以下错误:
1. org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=sample,parent=GreetingsResource,qualifiers={}),position=-1,optional=false
但是@EJB似乎起作用了。我试图理解为什么@Inject不起作用?谢谢。您不能在此设置中使用CDI(意思是@Inject
)。CDI仅适用于由容器管理的bean,而JAX-RS资源类(您的GreetingsResource
)则不适用
JAX-RS 2.0不支持将EJB注入JAX-RS组件
(提供者、资源)
如果在您的案例中使用@Inject
,则注入由HK2依赖注入框架提供,该框架不知道正常的CDIBean。如果您使用@EJB
,它甚至不应该工作,我不知道它为什么工作,也许这与JavaEE7有关
由于它适用于您,在这里使用@EJB
应该没有问题,但是在我对的响应中也有一些替代方法
另请参见:
@Inject
)。CDI仅适用于由容器管理的bean,而JAX-RS资源类(您的GreetingsResource
)则不适用
JAX-RS 2.0不支持将EJB注入JAX-RS组件
(提供者、资源)
如果在您的案例中使用@Inject
,则注入由HK2依赖注入框架提供,该框架不知道正常的CDIBean。如果您使用@EJB
,它甚至不应该工作,我不知道它为什么工作,也许这与JavaEE7有关
由于它适用于您,在这里使用@EJB
应该没有问题,但是在我对的响应中也有一些替代方法
另请参见: