如何快速学习 Java RMI [关闭]

Posted

技术标签:

【中文标题】如何快速学习 Java RMI [关闭]【英文标题】:how to learn Java RMI quickly [closed] 【发布时间】:2010-09-03 17:15:56 【问题描述】:

我有一个 Java 应用程序,我已经开发了一两年了。我想创建一个非常简单的接口集(以后可能会增加复杂性),可以用来从另一个 JVM(例如 MATLAB)控制我的 Java 应用程序。

我假设 RMI 是执行此操作的最佳方式,但我不确定,因为我对此几乎一无所知。

快速学习 RMI 的最佳方法是什么?

假设我想使用这样的界面:

interface Application 
   public void setLoggingEnabled(boolean enable);
   public boolean isLoggingEnabled();

如何使用 RMI 在两个 JVM 之间通过此接口实现桥接?关于阻塞/线程/同步,我必须了解什么才能使其工作?

【问题讨论】:

我建议在你的第一个项目中避免回调,也就是说,保持一种通信方式。让服务器能够启动与客户端的通信真的很诱人,但是一旦引入防火墙,事情就会变得很难管理(尤其是在严格控制的环境中)。并不是说回调有什么问题,只是说你应该避免使用它们,直到你得到正确的单向通信。 【参考方案1】:

一种快速的方法是使用 Spring。这并不(必然)意味着使用大量 XML 配置:Spring 的 RMI 支持类可以以编程方式使用。

两个关键类是:

RmiServiceExporter 使对象可以远程访问。 RmiProxyFactoryBean 访问远程对象。

这样做的一个好处是您只需要编写接口的实现,然后可以使用RmiServiceExporter 使其可用。同时,在客户端,使用RmiProxyFactoryBean 会为您提供一个实现接口的代理对象。就客户端代码而言,它与接口的“真实”实现一起工作,但代理会为您执行 RMI 调用。 RMI 的使用是透明的。

作为一个快速的例子,我刚刚使用您的界面编写了一个服务器和客户端。

我的接口实现是:

public class ApplicationImpl implements Application 

    private boolean enable;

    @Override
    public void setLoggingEnabled(boolean enable) 
        this.enable = enable;
    

    @Override
    public boolean isLoggingEnabled() 
        return enable;
    


服务端代码为:

RmiServiceExporter exporter = new RmiServiceExporter();
exporter.setService(new ApplicationImpl());
exporter.setServiceInterface(Application.class);
exporter.setServiceName("application");
exporter.afterPropertiesSet();

客户端代码是:

RmiProxyFactoryBean pfb = new RmiProxyFactoryBean();
pfb.setServiceInterface(Application.class);
pfb.setServiceUrl("rmi://localhost/application");
pfb.afterPropertiesSet();
Application app = (Application) pfb.getObject();

System.out.println(app.isLoggingEnabled());
app.setLoggingEnabled(true);
System.out.println(app.isLoggingEnabled());

按预期输出:

false
true

【讨论】:

酷,感谢您提供的详细信息。不确定我是否想使用 Spring 而不是普通的 RMI(不确定依赖开销),但它给了我一些想法。【参考方案2】:

你可以从官方RMI tutorial开始。


资源:

Introduction to Java RMI Learn Java RMI

关于同一主题:

Java RMI Resources

【讨论】:

第二个链接坏了,可能还好。当官方文档可用时,没有必要也不建议使用第三方资源。【参考方案3】:

好的链接开始:

RMI 指南:

http://download.oracle.com/javase/6/docs/technotes/guides/rmi/index.html

http://download.oracle.com/javase/1.4.2/docs/guide/rmi/

RMI 教程:

http://download.oracle.com/javase/tutorial/rmi/index.html

【讨论】:

+1 用于 RMI 指南,其中包括规范和常见问题解答,我想我现在已经掌握了基础知识,谢谢!【参考方案4】:

正如 Yok 和 Colin 所说,查看 Oracle (Sun) 支持的 RMI 教程,在阅读时尝试编写示例代码并在示例项目中对其进行测试。

参考文献

RMI 教程:http://download.oracle.com/javase/tutorial/rmi/index.html

【讨论】:

以上是关于如何快速学习 Java RMI [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何快速的学好java?

java学习笔记之java如何快速入门

Java学习路线图(如何快速学Java)

java学习作为一名java初学者,如何快速学习j

Java RMI 利用入门学习

RMI学习