JavaRMI是Axis2 SOAP的好替代品吗?

JavaRMI是Axis2 SOAP的好替代品吗?,java,jakarta-ee,axis2,rmi,xml-rpc,Java,Jakarta Ee,Axis2,Rmi,Xml Rpc,如果服务器和客户机仅为Java,RMI是否比Axis2实现的SOAP更高效(带宽和延迟)?我知道RMI最近几年已经不受欢迎了,但这并不意味着它不能被使用 那么XML-RPC呢?RMI有一些有趣的特性,速度相当快,但也有一些问题: 您必须确保序列化的所有内容都实现可序列化 您必须确保服务器和客户端拥有所有可序列化类的完全相同版本,并且在完全相同的时间部署,并且您序列化的每个类(包括可序列化对象持有的字段)都适当地使用serialVersionUID。否则,您将陷入痛苦的世界(读:“串行版本不匹配”

如果服务器和客户机仅为Java,RMI是否比Axis2实现的SOAP更高效(带宽和延迟)?我知道RMI最近几年已经不受欢迎了,但这并不意味着它不能被使用


那么XML-RPC呢?

RMI有一些有趣的特性,速度相当快,但也有一些问题:

  • 您必须确保序列化的所有内容都实现可序列化
  • 您必须确保服务器和客户端拥有所有可序列化类的完全相同版本,并且在完全相同的时间部署,并且您序列化的每个类(包括可序列化对象持有的字段)都适当地使用serialVersionUID。否则,您将陷入痛苦的世界(读:“串行版本不匹配”)
  • 您必须确保序列化的类没有保留对最终保留对大型对象的引用的对象的引用,否则您将对传输的数据包的大小感到非常惊讶
  • 如果您决定从Java以外的任何地方访问该服务,则必须编写另一个远程访问层
  • 没有第五条

  • 实际上,这些天我几乎总是推荐休息服务。创建小型Java对象并使用Gson或Jackson或其他工具来回封送数据非常容易,因此相比之下,RMI的优势非常小。

    RMI有一些有趣的特性,速度相当快,但也有一些问题:

  • 您必须确保序列化的所有内容都实现可序列化
  • 您必须确保服务器和客户端拥有所有可序列化类的完全相同版本,并且在完全相同的时间部署,并且您序列化的每个类(包括可序列化对象持有的字段)都适当地使用serialVersionUID。否则,您将陷入痛苦的世界(读:“串行版本不匹配”)
  • 您必须确保序列化的类没有保留对最终保留对大型对象的引用的对象的引用,否则您将对传输的数据包的大小感到非常惊讶
  • 如果您决定从Java以外的任何地方访问该服务,则必须编写另一个远程访问层
  • 没有第五条

  • 实际上,这些天我几乎总是推荐休息服务。创建小型Java对象并使用Gson或Jackson或其他工具来回封送数据非常容易,因此相比之下,RMI的优势非常小。

    RMI基于Java序列化,因此应该非常有效。REST呢?RMI将更快,但它缺少某些功能,如服务器级安全性-但是,如果使用两个内部企业系统,这一点可能会被忽略。另一个问题可能是贷款平衡功能。Webservices有它自己的开销,比如编组/解编,但考虑到现在的服务器功能更强大,这不应该是任何问题。展望未来,webservices使您的企业更加面向SOA。因此,如果您需要将服务扩展到其他应用程序,它将有助于更好的设计parties@user1428716你的意思是“负载平衡功能”,而RMI没有,尽管RMI/IIOP在使用合适的ORB时可以。关于安全性,这一点非常好。我读过关于REST的书,但没看到它这么好,你知道它的性能吗?我将很快阅读链接,但是如果我可以使用JSON并处理无状态情况,并且它比Axis2更快,这可能是有希望的。RMI基于Java序列化,因此它应该非常有效。REST呢?RMI将更快,但它缺少某些功能,如服务器级安全性-但是,如果使用两个内部企业系统,这一点可能会被忽略。另一个问题可能是贷款平衡功能。Webservices有它自己的开销,比如编组/解编,但考虑到现在的服务器功能更强大,这不应该是任何问题。展望未来,webservices使您的企业更加面向SOA。因此,如果您需要将服务扩展到其他应用程序,它将有助于更好的设计parties@user1428716你的意思是“负载平衡功能”,而RMI没有,尽管RMI/IIOP在使用合适的ORB时可以。关于安全性,这一点非常好。我读过关于REST的书,但没看到它这么好,你知道它的性能吗?我将很快阅读该链接,但如果我能使用JSON处理无状态情况,并且比Axis2速度更快,这可能是有希望的。(2)是不正确的。请参阅对象序列化规范中的章节。如果(2)是正确的,这一章就不存在了。回答得很好,tnx!如果(2)是不真实的,当然我可以将所有内容都保存在Java中,那么(3)根本不是问题。对于构建Web服务,我们毕竟必须管理传递的数据,而任何其他自动获取对象并抛出它们而不需要显式转换代码的解决方案也可能会出现同样的问题。我将阅读上述代码,并考虑REST和JSON,也许这可能是RMI和SOAP之间的中间解决方案。@EJP,我知道(2)这在技术上并不总是正确的。然而,事实往往如此(由于第三方库、编写糟糕的代码、意外引用等原因),甚至可能如此。我以前的一个客户机使用带有设置了serialVersionUIDs的DTO的EJB。嗯,结果发现一个字段没有设置,我们的一个开发人员对几个字段重新排序(应该是无害的,对吧?)。我们的测试环境被关闭了一整天,因为数十个依赖项目都因串行版本不匹配而失败,并且必须重建和重新部署。这不是一个好情况。好吧,与其让服务器停机这么长时间,您还可以恢复到一个经过测试的版本/基线,一旦恢复工作,您可以将其与最新代码进行比较。最好是找出事件的起因