在JBoss 7.3上注入本地EJB - @EJB vs @Inject

时间:2014-05-04 12:09:16

标签: java java-ee jboss

我有一个包含WAR的EAR文件。

  • EAR包含一个EJB jar。 EJB公开了本地和远程接口。

    @Stateless(name = "FooServiceEJB")
    @Local(IFooServiceLocal.class)
    @Remote(IFooService.class)
    public class FooServiceBean implements IFooService, IFooServiceLocal {
        ...
    }
    
  • WAR文件定义了一个带JAXRS注释的类。

    @Path("/foo")
    @LocalBean
    @Stateless
    public class FooResource {
       ...
    }
    

我希望将EJB的本地“视图”注入JAXRS资源类。显然我有两个选项,我认为这两个选项是相同的(大部分):

  1. 使用@EJB
  2. 使用@Inject(对许多人来说,这似乎是首选方案 - 请参阅Should I use @EJB or @Inject
  3. 我正在运行JBoss EAP 6.2.0.GA(AS 7.3.0.Final-redhat-14)。

    我看到的行为差异如下(在JBoss上 - 没有尝试过任何其他应用服务器):

    如果我使用 @EJB 注入本地ejb,那么调用语义是引用(如预期的那样)。例如:

    @EJB
    private FooServiceLocal fooService;
    

    但是,如果我使用 @Inject 注入本地ejb,则调用语义按值(即发生序列化)。例如:

    @Inject
    private IFooServiceLocal fooService;
    

    这是我认为正在执行序列化的类的线程堆栈的快照。当我使用@EJB annoation时,线程堆栈完全不同。

    http://i.stack.imgur.com/BXSaz.png

    为什么我看到这种行为上的差异?

0 个答案:

没有答案