【问题标题】:Java RMI ResourcesJava RMI 资源
【发布时间】:2010-09-29 06:53:59
【问题描述】:

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

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

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

【问题讨论】:

    标签: java networking network-programming rmi


    【解决方案1】:

    RMI 没有太大变化。我认为1.3时代的书就可以了。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 引用书籍“如果上下文是直接子上下文或作为包含上下文的子上下文的上下文的子上下文,则上下文是另一个上下文的子上下文”。
      • 翻译?每个上下文都是一个子上下文,除非它位于树的顶部 - 没有父级。
      • 那么他们为什么不这么说,而不是所有的gobbledegook?在将近 30 年的时间里,我还没有发现 O'Reilly 的书有什么大不了的。
      【解决方案3】:

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

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

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

      【讨论】:

      • Jini 和 RMI 是完全不同的层。 Jini 通常使用 RMI 作为其通信协议,而 AFAIK 则没有被广泛采用。
      • JINI 没有指定关于通信协议的任何内容。这是它的最佳功能。在 RMI 上使用 JINI 是可行的,但远不如在运行时网络上有趣。
      • 事实上,很少有人“拥抱” Jini 或 River,而 RMI 仍然是 J2EE 的基础。
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        最后,我发现的最好的书是Java Network Programming and Distributed Computing,它涵盖了 RMI 的一些非常好的部分,例如激活。

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

        【讨论】:

          【解决方案6】:

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

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

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

          【讨论】:

            【解决方案7】:

            RMI Hello World 看起来不错。当然这仍然是一个简单的例子,所以也许tips on RMI performance/scalability 会很有用,因为你已经熟悉了 RMI。

            【讨论】:

            • 为这个关于 RMI 性能/可扩展性的提示干杯看起来很有希望。
            【解决方案8】:

            除了已经提到的那些,Understanding Java RMI Internals 的文章相当不错,恕我直言,稍微介绍了一些内部结构。

            【讨论】:

            • 链接已损坏。
            • 我更新了 https 版本的链接,现在可以使用了
            【解决方案9】:

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

            这是带有来自way back archive 的图片的文章。

            【讨论】:

            • 链接已损坏。
            【解决方案10】:

            这是另一个使用 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

            【讨论】:

              猜你喜欢
              • 2014-04-09
              • 1970-01-01
              • 2018-10-31
              • 2011-06-26
              • 1970-01-01
              • 2011-03-09
              • 2011-03-03
              • 2011-02-07
              • 2010-09-21
              相关资源
              最近更新 更多