java - 如何快速学习Java RMI

标签 java ipc rmi

<分区>

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

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

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

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

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

我如何使用 RMI 通过此接口(interface)在两个 JVM 之间实现桥接?我必须了解有关阻塞/线程/同步的哪些信息才能使这项工作正常进行?

最佳答案

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

两个关键类是:

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

为了说明这有多快,我刚刚使用您的界面编写了一个服务器和客户端。

我的接口(interface)实现是:

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

关于java - 如何快速学习Java RMI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3638024/

相关文章:

java - 如何诊断 File.delete() 返回错误/查找未关闭的流?

java - 单击 JButton 添加新的 JTextField

c - 使用 Unix 域套接字的 IPC

java - 在 Java RMI 中,客户端如何知道其服务器已死亡?

Java - 分布式编程,RMI?

java - RMI 方法中的参数

java.sql.SQLException : Closed statement: next

命令行中的 Java keylistener

Java 中 COM 的等价物

c++ - boost::进程间消息队列抛出错误