如何快速学习Java RMI

时间:2010-09-03 17:15:57

标签: java ipc rmi

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

我假设RMI是最好的方法,但我不确定,因为我几乎一无所知。

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

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

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

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

4 个答案:

答案 0 :(得分:11)

一个快速的方法是使用Spring。这并不一定意味着使用大量的XML配置:可以通过编程方式使用Spring的RMI支持类。

两个关键类是:

以这种方式执行此操作的一个优点是您只需要编写接口的实现,然后可以使用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

答案 1 :(得分:6)

您可以从官方RMI tutorial开始。


资源:

关于同一主题:

答案 2 :(得分:2)

答案 3 :(得分:1)

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

参考