为什么@Inject无法工作,但@EJB在JavaEE 7中工作?

问题描述:

我正在通过JavaEE7-samples回购github。我发现作者提到这个code snippet如下:为什么@Inject无法工作,但@EJB在JavaEE 7中工作?

// Cannot be injected using @Inject 
@EJB Cart bean; 

笔者明确提到,@Inject将无法​​正常工作。但我想知道背后的原因是什么?

我已阅读以下帖子@EJB@Inject之间的差异。但是这并没有帮助我。如果bean有本地接口

http://www.adam-bien.com/roller/abien/entry/inject_vs_ejb

What is the difference between @Inject and @EJB

Should I use @EJB or @Inject

双方将合作。但是@Inject to work必须启用CDI(在WEB-INF文件夹中创建beans.xml文件)。

如果bean有远程接口,你需要有生产类用下面的代码来声明资源:

public class RemoteProducer { 
    @Produces @EJB 
    HelloRemote helloBean; 
} 

欲了解更多详细信息,请参阅JSR-299 CDI specification 3.5节。
因此,为了简化使用,我建议坚持使用@EJB for EJB。

+0

我想你不需要Java EE 7容器中的beans.xml,这正是我正在使用的。 – 2014-10-01 23:56:55

+0

@brainstorm啊,你可能是对的。我已经在Java EE 6容器中测试过它。 – Gas 2014-10-02 00:01:07

+0

和上面的javaee7-samples链接是针对javaee7进行测试的。所以我仍然没有明白为什么@Inject不会工作.. – 2014-10-02 00:16:21