Java RMI资源

时间:2009-01-02 18:17:42

标签: java networking network-programming rmi

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

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

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

10 个答案:

答案 0 :(得分:9)

RMI Hello World看起来很不错。当然它仍然是一个简单的例子,因此你可能已经熟悉RMI,因此tips on RMI performance/scalability可能会有用。

答案 1 :(得分:5)

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

如果您仍在考虑继续使用RMI,我建议您阅读the Oracle documentation或在their forums上发布您的问题。

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

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

到目前为止,我发现的最好的书,其中包括一些非常好的RMI,如激活是Java Network Programming and Distributed Computing

我确实看过另一本O'reilly Java RMI书,而且在我看来,它对于任何比最小的RMI项目都要大的东西都不是很好。

答案 4 :(得分:3)

如果您要大量使用RMI,我建议您查看Spring Remoting。它有助于抽象远程协议,帮助您在以后需要时切换远程实现(例如切换到Hessian或SOAP)。

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

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

答案 5 :(得分:2)

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

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

答案 6 :(得分:1)

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

答案 7 :(得分:1)

多宿主RMI(具有多个IP的主机)绝对无价article以非常容易理解的方式解释RMI,并讨论在具有多个IP地址的计算机上托管注册表的问题以及私有IP的方式也可以处理。保存了我的培根。

答案 8 :(得分:0)

除了已经提到的那些,文章Understanding Java RMI Internals相当不错恕我直言,在内部进行了一些。

答案 9 :(得分:0)

这是使用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<Long> someMethod1(Long param1, String param2);

    RFuture<Void> someMethod2(MyObject param);

}

RRemoteService remoteService = redisson.getRemoteService();
YourServiceAsync asyncService = remoteService.get(YourServiceAsync.class);

RFuture<Long> res = asyncService.someMethod1(12L, "param");
res.thenApply(r -> {
 ...
});

更多详情here