【问题标题】:Injecting remote interface from within the same EJB-JAR or EAR从同一个 EJB-JAR 或 EAR 中注入远程接口
【发布时间】:2011-08-10 09:33:50
【问题描述】:

是否从在同一中调用远程@remote 接口 EJB-JAR 或 EAR 会使应用服务器使用 RMI/RMI-IIOP?

或者应用服务器会非常智能并且在本地执行此调用,就好像它调用了@local 接口???

【问题讨论】:

    标签: ejb rmi ear appserver


    【解决方案1】:

    容器不应该进行真正的@local 调用,因为@local 调用通过引用传递,@remote 调用通过值传递。但是,容器可以优化 @remote 调用,以便不命中完整的 RMI/IIOP 网络堆栈。我记得 WebSphere 做过这样的“本地”优化,我无法与其他供应商交谈。

    [历史:早在早期的 EJB3 之前的 WebSphere 版本中,就有一个选项可以启用“使 @remote 看起来像 @local”的道德等价物,但我认为以后的版本不会提供此功能。]

    【讨论】:

    • 如果我用@remote@local 注释我的会话bean 并使用@EJB DI 从同一个EAR 内部调用它,那么在这种情况下应用服务器的行为是什么?
    • 这将取决于客户端选择如何访问它。您已经简单地为本地和远程客户端创建了两条到 EJB 的路径。如果客户端使用本地,那么他们将获得本地行为。我不确定在这两种情况下客户端注入的效果如何 - 我自己从未尝试过。
    • 这取决于注入@EJB的字段类型;你应该能够注入任何一种味道。当然,你需要仔细确保调用者和被调用者不要修改 pass-by-reference 数据。
    • 当前版本的 WebSphere Application Server 中的 ORB 仍然支持“无本地副本”开关,但通常强烈建议不要使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    相关资源
    最近更新 更多