有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

ipc如何快速学习Java RMI

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

我认为RMI是最好的方法,但我不确定,因为我对它几乎一无所知

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

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

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

我如何使用RMI通过这个接口实现两个JVM之间的桥梁?我必须知道什么是阻塞/线程化/同步,才能使这项工作正常进行


共 (2) 个答案

  1. # 1 楼答案

    一种快速的方法是使用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