12

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

我有点了解 EJB 和 RMI,并且在 SOA 下使用 Web 服务已经有一段时间了。我想知道为什么使用 EJB 在 RMI 下公开远程接口而不是发布 Web 服务(SOA/REST,但主要是 SOA)很有用。我不是在问哪个更好,只是我想知道一个很好的理由,为什么我应该更喜欢使用远程接口而不是 Web 服务来实现 EJB。

我查看了很多网页,但似乎都过时了。到目前为止,我所拥有的是 EJB 暴露远程接口仅在与 Java 遗留系统集成时比 WS 更好。如果我想管理事务,我可以使用本地接口实现 EJB。此外,我不认为选择 EJB 而不是 RMI 比 Web 服务接口更有效。

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

真的提前谢谢了。

4

3 回答 3

23

EJB 更好,如果

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

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

于 2012-04-17T20:12:21.943 回答
6

如果使用 RMI 作为有线协议,客户端和服务都必须用 Java 编写。

SOAP 使用基于 HTTP 的 XML,而 REST 使用纯 HTTP 进行客户端和服务之间的通信。对话的任何一端都可以用任何可以通过 HTTP 发送适当请求的语言编写,这远没有限制。

我认为这是基于 HTTP 的 Web 服务胜过 RMI 的原因之一。每次都是简单而公开的胜利。

于 2012-04-17T20:07:59.103 回答
6

它们是用于不同目的的不同事物。

EJB 用于紧密耦合的N层系统中,您可以控制所有元素。它们使用看似普通的方法调用的语言提供直接编码,并通过 IIOP 或 EE 供应商部署的任何其他协议提供 LAN 类型的性能。

SOAP/REST 最适合在 Internet 上使用,或者在 B2B 或其他您无法控制两端并且需要松散耦合的情况下使用。由于所有 XML,您的性能会慢得多,但您还会在中间获得一个行业标准协议,该协议为两端提供针对单一来源问题的保护。

于 2012-04-18T07:52:49.470 回答