繁体   English   中英

在实现Web服务(SOA / REST)时,使用RMI实现EJB仍然有用吗?

[英]Is still useful to implement EJB with RMI when you can implement Web Services (SOA/REST)?

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

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

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

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

非常感谢提前。

如果是,EJB更好

  • 你需要执行一些应该在一个事务中完成的调用(理论上我们有事务Web服务,但不是每个实现都提供它们),(有状态的)EJB在事务管理方面都很闪耀。 几乎任何时候你需要有状态EJB比Web服务更好;
  • 你需要表现 - Web服务很慢 - 他们使用通过HTTP推送的XML / JSON,而EJB使用的IIOP协议上的RMI更有效率;
  • 你需要连接到一些遗留系统,它使用过时的Java Web Services规范(丑陋的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很没用。

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

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

我认为这是HTTP上的Web服务胜过RMI的一个原因。 每次都是简单而开放的胜利。

它们是用于不同目的的不同东西。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM