如何快速学习Java RMI
我有一个Java应用程序,我已经工作了一两年了。 我想创建一个非常简单的集合(可能会增加以后的复杂性),我可以用来从另一个JVM(例如MATLAB)控制我的Java应用程序。
我假设RMI是最好的方法,但我不确定,因为我几乎一无所知。
快速学习RMI的最佳方法是什么?
假设我想使用这样的界面:
interface Application { public void setLoggingEnabled(boolean enable); public boolean isLoggingEnabled(); }
如何使用RMI在此接口上实现两个JVM之间的桥接? 关于阻塞/线程/同步,我需要了解什么才能使其工作?
良好的链接开始:
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教程:
一个快速的方法是使用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
您可以从官方RMI教程开始 。
资源:
- Java RMI简介
- 学习Java RMI
在同一主题上:
- Java RMI资源
正如Yok和Colin所说,看一下Oracle(Sun)支持的RMI教程,当你阅读时,尝试编写示例代码并在示例项目中测试它们。
参考
- RMI教程: http : //download.oracle.com/javase/tutorial/rmi/index.html