Java RMI 指的是远程方法调用 (Remote Method Invocation),可以让java在一个虚拟机中调用另一个虚拟机的方法,但是必须要实现远程接口 java.rmi.Remote
在一些系统中,使用RMI还是比较方便的,但是也有弊端,也就是两端都得使用java才能调用,而不像web service那样,可以跨语言端来使用。
接下来就通过一个简单的helloworld来说明下RMI的应用,JDK1.6
首先定义一个借口 Hello, 一定要继承Remote借口
package com.jacksoft.rmi.server;
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
* Define a interface Hello and sayHello method
* @author Jack
*
*/
public interface Hello extends Remote{
public void sayHello() throws RemoteException;
}
就是一个简单的sayhello的方法,注意,调用的方法都需要抛出RemoteException这个异常,否则会抛出异常:remote object implements illegal remote interface; nested exception is:
接下来定义实现类HelloImpl:
package com.jacksoft.rmi.server;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class HelloImpl extends UnicastRemoteObject implements Hello {
protected HelloImpl() throws RemoteException {
super();
}
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void sayHello() {
System.out.println("-------------say Hello()----------------");
}
}
很简单,就是打印一句话,当然一般实际应用都是返回我们需要的数据来进行处理,这里就简单的打印一句话就完了,下面就是服务端启动代码,需要绑定一个地址:
package com.jacksoft.rmi.server;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class Server {
public static void main(String[] args) throws Exception {
Hello hello = new HelloImpl();
LocateRegistry.createRegistry(8080);
Naming.bind("rmi://localhost:8080/Hello", hello);
System.out.println("server is running....");
}
}
首先是创建连接,指定端口8080,接着绑定URL和我们的对象,也就是hello的实现,这样服务端就算完成了,运行起来吧。
最后就是客户端调用,写个客户端:
package com.jacksoft.rmi.server;
import java.rmi.Naming;
public class Client {
public static void main(String[] args) throws Exception {
Hello hello = (Hello) Naming.lookup("rmi://localhost:8080/Hello");
hello.sayHello();
System.out.println("执行成功");
}
}
运行客户端后,在服务器端的控制台会看到有文本输出,说明调用成功了。