当我想将EJB暴露给同一应用服务器上的不同应用程序时,是否需要使用@Remote?

Kyl*_*fro 6 java ejb java-ee java-ee-6 ejb-3.1

我有一个@Stateless @Local Bean成功部署在耳朵里.当我浏览JNDI树时,我可以看到新的EJB 3.1标准全局JNDI名称.(JAVA的:全球/产品/产品EJB /产品经理)

我想在同一个应用服务器上的不同应用程序中使用此EJB .我是否需要为此EJB添加远程接口?

Pas*_*ent 12

规范不要求对本地客户端视图进行应用程序间访问,但容器可能选择支持.如果你希望你的应用程序是可移植的,你不应该依赖它并使用远程接口(一个像样的容器应该优化同一个JVM内的调用).从EJB 3.1规范:

3.2.2本地客户

会话bean可能有本地客户端.本地客户端是与同一JVM并置的客户端,该会话bean提供本地客户端视图,并且可以与bean紧密耦合.会话bean的本地客户端可以是另一个企业bean或Web组件.

通过本地客户端视图访问企业bean需要在本地客户端和提供本地客户端视图的企业bean的同一JVM中进行并置.因此,本地客户端视图不提供远程客户端视图提供的位置透明性.

只有在与提供本地客户端视图的企业bean相同的应用程序中打包的本地客户端才需要通过本地客户端视图访问企业bean.此规范的兼容实现可以选择支持从打包在不同应用程序中的本地客户端访问企业bean的本地客户端视图.应用程序间访问本地客户端视图的配置要求是特定于供应商的,不在本规范的范围内.依赖于对本地客户端视图的应用程序间访问的应用程序是不可移植的.

...

参考

  • EJB 3.1规范
    • 第3.2.2节"本地客户端"

  • +1点上.我所比较的大多数供应商都在自动优化同一虚拟机中发生的远程调用.请注意,非优化器通常不会在同一个vm中传递远程调用的事务和安全信息.偷偷摸摸的检查方法是查看intra-vm远程调用的两侧是否有相同的线程.如果你不这样做,那么运气不好,你就会在返回vm的途中点击完整的远程处理层并从线程池中获取一个新线程. (3认同)