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

Java 当您可以实现Web服务(SOA/REST)时,使用RMI实现EJB仍然有用吗?,java,web-services,jakarta-ee,ejb,rmi,Java,Web Services,Jakarta Ee,Ejb,Rmi,这听起来可能类似于,但事实并非如此 我有点了解EJB和RMI,并且我在SOA下使用web服务已经有一段时间了。我想知道为什么使用EJB在RMI下公开远程接口而不是发布Web服务(SOA/REST,但主要是SOA)是有用的。我不是问哪一个更好,只是想知道为什么我更喜欢通过Web服务实现带有远程接口的EJB 我浏览了很多网页,但都似乎过时了。到目前为止,我所知道的是,当与Java遗留系统集成时,EJB公开远程接口只比WS更好。如果我想管理事务,我可以用本地接口实现EJB。此外,我不认为选择EJB而不

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

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

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

我说得对吗?有什么我遗漏的吗


非常感谢。如果您使用RMI作为有线协议,那么客户端和服务都必须用Java编写

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

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

如果

  • 您需要执行一次应完成的呼叫数 事务(理论上,我们有事务性web服务,但没有 当涉及到事务管理时,每个实现都提供了它们(有状态的)EJB。几乎在任何需要状态性的时候,EJB都比Web服务更好
  • 你需要性能电子网络 服务速度很慢-它们使用通过HTTP推送的XML/JSON,RMI通过 EJB使用的IIOP协议更有效
  • 您需要连接到一些使用过时的Java Web服务规范的遗留系统(丑陋的Axis 1.0之类的东西,与JAX-WS不兼容)。使用Web服务连接所有东西、处理不兼容的WSDL定义和奇怪的SOAP信封可能是一场噩梦。EJB是向后兼容的,旧的EJB2可以连接,EJB3.1没有任何问题
  • 现代EJB(EJB3.X)可以通过添加两到三个简单的注释将其接口公开为JAX-WSSOAP/WSDL服务或JAX-RSREST服务

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

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

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


SOAP/REST最适合在Internet上使用,或者在B2B或其他您无法控制两端并且需要松耦合的情况下使用。由于所有的XML,您的性能都要慢得多,但是您也可以在中间得到一个工业标准协议,它可以保护两端不受单个源问题的影响。比如说,如果我想学习Smalltalk(只是为了好玩和学习,但没有用)?我不会走那么远。这个问题的答案取决于您的环境。不,如果您从头开始编写一个全Java应用程序,并且只有Java客户机,那么我可以看到EJB3,分布式事务组件对您来说很有价值。教条很少有用。谢谢@duffymo!但例如,我也可以拥有分布式、事务性web服务。即使我可以使用EJB3实现Web服务,在这种情况下,RMI接口只有在我必须只与Java客户端连接时才有价值,对吗?不,无状态Web服务不能参与事务。唯一的方法是将“补偿事务”添加到API中。我不喜欢这样,因为这会迫使我的客户对管理交易了解太多。EJB服务可以很容易地让JavaEEAppServer中的事务管理器来做这样的事情。因此,仍然有一个很好的理由使用EJB。谢谢,但是在将其标记为已应答之前,第一个理由不是一个有效的理由,因为我可以用EJB实现一个Web服务,公开一个本地接口,对吗?因此,事务是相同的。没错,当您需要在一个事务中执行多个单独的调用时,问题就开始了。Web服务通常是无状态的,必须“手动”管理事务,这可能会很麻烦。有状态EJB将免费提供这一功能。您也可以使用有状态web服务,即使使用您之前给出的最后一个原因。因此,我将考虑第二和第三个原因,效率(我想有一点)和遗产。谢谢回答得好!顺便说一句,从理论上讲,任何语言的CORBA客户机都可以连接到远程EJB。所使用的协议是IIOP,它不是特定于Java的。实践可能不同;)非常正确,CORBA实际上是一种非常酷的技术,但在一开始它有点难以使用,所以它从未得到真正的普及。这是可悲的,因为我们最终使用低效的协议(基本上是SOAP/WSDLWeb服务)将XML字符串从一个地方抛出到另一个地方。这可能是另一个问题,但可以轻松地调整EJB以将其接口作为web服务公开,因此,您可以启动您定义的第一个体系结构,如果将来需要扩展,您可以通过web服务公开它,或者不公开?@ChristianVielma这是另一个问题,好吧,您不会