12

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

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

因此,如果有人知道任何好的资源、书籍或好的示例实现,我会非常有兴趣了解它们。

4

10 回答 10

9

RMI Hello World看起来不错。当然,这仍然是一个简单的例子,所以也许关于 RMI 性能/可扩展性的提示会很有用,因为您已经熟悉 RMI。

于 2009-02-03T09:31:52.127 回答
5

Java.RMI 这些年来几乎没有什么变化,所以大部分旧文档仍然可以参考。请注意,如果您使用的是 Java 5.0 版本,则需要编译 RMI 存根,这是一项重大变化。大多数人已经离开 RMI 并接受了River(以前称为 Jini)的分布式系统。

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

至于书籍…… William Grosso 的Java RMI或 Elliotte Harold 的Java Network Programming

于 2009-01-28T21:24:37.763 回答
4

RMI 并没有太大变化。我认为1.3时代的书会很好。

于 2009-01-02T18:28:13.513 回答
3

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

最后,我发现迄今为止最好的一本书,它涵盖了 RMI 的一些非常好的部分,例如激活是Java 网络编程和分布式计算

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

于 2009-02-03T08:56:58.327 回答
3

如果你打算大量使用 RMI,我建议你看看Spring Remoting。它对抽象远程协议有很大帮助,可以帮助您稍后根据需要切换远程实现(例如切换到 Hessian 或 SOAP)。

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

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

于 2009-02-03T09:19:37.593 回答
2

您是否尝试过 Sun't RMI 教程?Sun 的教程都非常好,它们通常是我学习 Java 的第一个起点。

我们在学校使用的一本有很好示例代码的书是J2EE Developer's Handbook。请记住,这是一本大约 1500 页的巨大参考书,其中只有一章(约 50 页)关于 RMI。

于 2009-01-28T21:29:59.983 回答
1

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

于 2009-01-03T15:05:53.373 回答
1

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

这是带有图像的文章,来自归途存档

于 2010-10-01T07:09:14.127 回答
0

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

于 2009-02-03T13:33:23.247 回答
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 -> {
 ...
});

更多细节在这里

于 2016-06-04T08:17:50.113 回答