Java RMI资源

大家好,我目前正在开展一个涉及广泛使用Java RMI的项目,我想知道是否有人知道有关它的任何好资源。

我目前发现的材料问题是它通常已经过时(如Java 1.3)和/或半完成。 我甚至乐意买一本关于它的书,但在亚马逊上看,所有的书都像7岁。

因此,如果有人知道任何好的资源,书籍或良好的示例实现,我将非常有兴趣了解它们。 在此先感谢您的帮助。

RMI Hello World一开始看起来不错。 当然它仍然是一个简单的例子,因此您可能已经熟悉RMI,因此可能有关RMI性能/可伸缩性的提示非常有用。

多年来,Java.RMI的变化很小,因此仍然可以引用大多数旧文档。 请注意,如果您使用的是Java 5.0版本,则需要编译RMI存根。 大多数人已经离开RMI并且已经为分布式系统接受了River (以前称为Jini)。

如果您仍在考虑继续使用RMI,那么我建议您阅读Oracle文档或在论坛上发布您的问题。

至于书籍…… 威廉格罗索Java RMI或Elliotte Harold的Java网络编程

RMI没有那么大改变。 我认为1.3时代的书籍​​会很好。

谢谢大家的答案我认为人们所说的关于RMI没有太大变化的内容是正确的,但是教程仍然可以更好地掩盖一些重要的观点。

到目前为止,我发现的最好的书,其中包括一些非常好的RMI,比如激活是Java网络编程和分布式计算 。

我确实看过另一本O’reilly Java RMI书籍,而且在我的观点中它看起来并不是很好,因为它比最小的RMI项目还要大。

如果你要大量使用RMI,我建议看一下Spring Remoting 。 它有助于抽象远程协议,如果您需要(例如切换到Hessian或SOAP),可以帮助您稍后切换远程执行。

如果使用RMI或任何其他远程对象协议,请记住一件事是,您可以通过调用远程对象上的方法来生成大量流量。 在您的代码中,这些对象可能是远程的,这可能并不明显。 它可能会产生性能问题。

如果可以的话,我建议您建立一个或多或少面向服务的体系结构,在这里您可以调用远程服务来获取数据对象,但不要对这些对象有太多行为……

你有没有尝试过Sun’t RMI教程 ? Sun教程都非常好,它们通常是我开始学习Java的第一个地方。

我们在学校使用的具有良好示例代码的书是J2EE Developer’s Handbook 。 请记住,这是一本大约1500页的大型参考书,在RMI上只有一章(约50页)。

O’Reilly RMI的书非常好。 去吧。

关于多宿主RMI(具有多个IP的主机)的绝对宝贵的文章以一种非常容易理解的方式解释RMI,并讨论在具有多个IP地址的机器上托管注册表以及如何处理私有IP的问题。 救了我的培根。

除了已经提到的那些之外, 理解Java RMI Internals的文章相当不错恕我直言,稍微通过内部。

这是使用Redisson框架进行远程方法调用的另一个很好的例子:

让我们假设YourServiceImpl包含您需要远程调用并实现YourService接口的方法。

YourServiceImpl应该通过RemoteService对象在Redisson中注册:

 YourService yourService = new YourServiceImpl(); RRemoteService remoteService = redisson.getRemoteService(); remoteService.register(YourService.class, yourService); 

要远程调用方法,只需要服务接口:

 RRemoteService remoteService = redisson.getRemoteService(); YourService service = remoteService.get(YourService.class); MyObject result = service.myMethod(someParam1, someParam2); 

它还支持异步调用。

 // async interface for YourService @RRemoteAsync(YourService.class) public interface YourServiceAsync { RFuture someMethod1(Long param1, String param2); RFuture someMethod2(MyObject param); } RRemoteService remoteService = redisson.getRemoteService(); YourServiceAsync asyncService = remoteService.get(YourServiceAsync.class); RFuture res = asyncService.someMethod1(12L, "param"); res.thenApply(r -> { ... }); 

更多细节在这里