java - 当您可以实现 Web 服务 (SOA/REST) 时,用 RMI 实现 EJB 仍然有用吗?

标签 java web-services jakarta-ee ejb rmi

这听起来可能类似于 this ,但事实并非如此。

我对 EJB 和 RMI 比较了解,而且我在 SOA 下使用 Web 服务也有一段时间了。我想知道为什么使用 EJB 在 RMI 下公开远程接口(interface)而不是发布 Web 服务(SOA/REST,但主要是 SOA)是有用的。我不是在问哪个更好,我只是想知道一个很好的理由,说明为什么我更愿意通过 Web 服务实现具有远程接口(interface)的 EJB。

我浏览了很多网页,但似乎都过时了。到目前为止,我所知道的是,在与 Java 遗留系统集成时,EJB 公开远程接口(interface)仅比 WS 更好。如果我想管理事务,我可以使用本地接口(interface)实现 EJB。我也不认为选择 EJB 而不是 RMI 比 Web 服务接口(interface)更有效。

我说的对吗?有什么我想念的吗?

非常感谢。

最佳答案

EJB 更好,如果

  • 你需要执行多次调用,这些调用应该一次完成 交易(理论上我们有交易网络服务,但不是 每个实现都提供它们),(有状态的)EJB 在事务管理方面大放异彩。几乎任何时候你需要状态 EJB 都会比 Web 服务更好;
  • 您需要性能 - 网络 服务很慢——他们使用通过 HTTP 推送的 XML/JSON,RMI EJB 使用的 IIOP 协议(protocol)效率更高;
  • 您需要连接到一些遗留系统,该系统使用过时的 Java Web 服务规范(丑陋的 Axis 1.0 东西,与 JAX-WS 不兼容)将所有内容与 Web 服务连接起来可能是一场噩梦,处理不兼容的 WSDL 定义,奇怪的肥皂信封。 EJB 向后兼容,旧的 EJB 2 可以毫无问题地连接到 EJB 3.1;
  • 现代 EJB (EJB 3.X) 可以通过添加两个或三个简单注释将其接口(interface)公开为 JAX-WS SOAP/WSDL 服务或 JAX-RS REST 服务

为什么 (REST) Web 服务如此流行呢? EJB 只能连接到另一个 Java 应用程序。大多数现代富互联网应用程序都是用 JavaScript 编写的,因此将它们与任何后端连接的唯一方法是使用某种 Web 服务(通常是 REST + JSON)。对于此类应用程序,EJB 毫无用处。

关于java - 当您可以实现 Web 服务 (SOA/REST) 时,用 RMI 实现 EJB 仍然有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10198286/

相关文章:

java - 带有特殊字符的 Xstream

Java Web 服务构造函数调用

Java EE 并发和锁定

java - 在哪里可以找到我的 WADL? (CXF)

web-services - 将 namespace 声明从有效载荷移动到 Axis 创建的 Web 服务上的信封

java - 在 .ear 文件中跨组件共享持久性单元

java - Spring - 实体类应该包含除 getX 和 setX 之外的方法吗?

java - 分发 Java LWJGL 程序

java - 为什么 SwingUtilities.invokeLater() 会导致 JButton 卡住?

java - System.Exit 后的垃圾收集