人们为什么要使用RMI,或者我应该使用RMI? 我看那些教程关于RMI Oracle的网站。但是它并没有提供足够的实际例子。
据我了解,一个软件应该有它的模块作为“无关和分离”成为可能。 RMI某种程度上似乎是高耦合给我的一个例子。 为什么这不是一个坏的编码的做法呢? 我认为客户应该只火指令,而所有对象的实际操作是由服务器来完成。
(我目前正在向计算机科学学士学位和非常缺乏经验,所以请纠正我,如果我理解错了这些概念。)
提前致谢!
人们为什么要使用RMI,或者我应该使用RMI? 我看那些教程关于RMI Oracle的网站。但是它并没有提供足够的实际例子。
据我了解,一个软件应该有它的模块作为“无关和分离”成为可能。 RMI某种程度上似乎是高耦合给我的一个例子。 为什么这不是一个坏的编码的做法呢? 我认为客户应该只火指令,而所有对象的实际操作是由服务器来完成。
(我目前正在向计算机科学学士学位和非常缺乏经验,所以请纠正我,如果我理解错了这些概念。)
提前致谢!
你真的不应该使用RMI今天就为你建立的任何应用程序,基本上是你刚才所说明的理由。
在某些情况下(潜水进入传统或“企业级”应用程序),你只是别无选择。
不过,如果你正在开始一个新的项目,其他的选项有:
对于远程服务进行通信的事实标准。 最大的优势是有它,它重量轻,易于掌握的概念。
从理论上讲,应该需要比RMI更多的工作,因为你必须手工工艺的可用网址,接受每个URL等动词在实践中,我会说,RMI的样板并不能真正帮助任何人。
用java坚持, 新泽西州是一个辉煌的图书馆编写自己的REST Web服务。
如果你想为了与Java的RESTful Web服务解决方案的电池, Dropwizard通过Yammer的的好男人给你一个完整的服务器和框架,准备就在你的业务逻辑插件,并提供日志记录,数据库连接,系列化,请求路由,并甚至度量收集开箱。
以前的标准来远程服务进行通信。 除非你有充分的理由来使用它,我会坚持到REST。
节俭将创建一个客户端和服务器存根,基本上还是在做大量的工作。 该通信是在一个有效的二进制协议。 因为它是在“大数据”领域所使用的许多开源项目它越来越受欢迎的Java世界。 实施例中,卡桑德拉,HBase的(切换到阿夫罗)。 守财奴是一个Twitter项目斯卡拉创建惯用节俭存根。
阿卡是框架实现了Actor模型斯卡拉和Java。 包括服务间通信的规定,并在引擎盖下负责的许多细节。 一世
根据您的需求,有些人会比其他人更适合。
任何时候你有一个需要一些大型的集中式的计算能力或一些昂贵的资源(例如一个庞大的数据库)的功能,但你的输出需要有很多地方这样的工作量不能被部署,那么你会看远程方法调用。 考虑网站,你没有你的桌面,你可能要计算任何搜索在谷歌的一个副本,远程调用谷歌的服务器是否需要结果的瞬间。 RMI是跨服务器分发您的应用程序,并分离出需要访问代码的结果客户的协议/系统。
RMI也可以作为一种方法,以确保应用程序(如专有的算法),你的方面。 RMI不是唯一的方法,你也可以使用HTTP,SOAP等许多其他方法提供其他像真正的语言透明度,更轻松,更高效的实现,更好的去耦。
这里是RMI从既定目标文档
在Java编程语言支持分布式对象的目标是:
- 支持无缝远程调用上在不同的虚拟机的对象
- 从服务器到小程序支持回调
- 集成分布式对象模型到Java编程语言中的一种自然的方式,同时保留大部分的Java编程语言的对象语义的
- 使分布式对象模型和本地Java平台的对象模型明显差异
- 使编写可靠的分布式应用程序越简单越好
- 保留Java平台的运行时环境提供的类型安全
- 支持用于远程对象的各种参考语义; 例如生活(非持久性)的引用,持久引用和延迟激活
- 同时维护安全管理人员和类加载标的所有这些目标提供了Java平台的安全环境是,RMI模式既简单(易用)和自然(在语言非常适合)总体要求。
你说得对,RMI是服务提供者和服务消费者之间太紧密耦合的一个例子。 而且它甚至不如它看起来像第一眼:你永远不知道什么异常,你可能会被推到客户端,导致ClassNotFoundException
掩盖发生的真正的错误。 RMI,同样,EJB,是过去的技术,过去它信奉“透明的分布式对象”的错觉。
今天的远程服务是基于RMI的做法完全相反:REST和JSON。
RMI是完全相反的情况下,如果你要紧密结合,使太紧,似乎是一个本地方法调用。 如果你不希望出现这种情况,不使用它。 整个RPC模式是不是对每个人,包括我,即使我写了一本书上的RMI,但每一个工具都有其用途。 Java EE的是建立在RMI模型的例子。