Java RMI Demo-- Java RMI 示例
本文给出了一个Java RMI的示例,其中注册过程是使用Registry
本例子包含了共4个文件,分别是HelloClient,Hello,HelloServer,config.properti
/*Hello.java*/
package rmi.cn.riil.demo;
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
*
* @author ZB
*
*/
public interface Hello extends Remote {
String sayHello() throws RemoteException;
}
/*HelloServer*/
package rmi.cn.riil.demo;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.ResourceBundle;
/**
*
* @author ZB
*
*/
public class HelloServer extends UnicastRemoteObject implements Hello {
private static final long serialVersionUID = 1L;
String name;
public HelloServer(String s) throws RemoteException {
super();
name = s;
}
public String sayHello() throws RemoteException {
return "Hello world!";
}
public static void main(String[] args) {
/**
* 下面这句话若要加上,则需要进行权限的认证,即增加.policy文件 并且在命令行中使用如下格式 java
* -Djava.security.policy=java.policy test.rmi.HelloServer
*/
/* System.setSecurityManager(new RMISecurityManager()); */
Registry registry = null;
ResourceBundle resource = ResourceBundle.getBundle("config");
try {
/**
* 启动注册服务器,使用了这个语句就不再需要在命令行环境中 启动registry服务了
*/
registry = LocateRegistry.getRegistry();
/* 若没有获得连接,则此句会抛出异常,后面在捕获后进行相关处理 */
registry.list();
System.out.println("Register the exist server!");
} catch (RemoteException re) {
try {
int port = Integer.parseInt(resource.getString("HelloServer.RegistryServerPort"));
registry = LocateRegistry.createRegistry(port);
System.out.println("Create Registry Server!");
} catch (Exception e) {
e.printStackTrace();
}
}
try {
HelloServer helloServer = new HelloServer("Hello");
registry.rebind(resource.getString("HelloServer.HelloServerName"), helloServer); //$NON-NLS-1$
System.out.println("HelloServer server start!"); //$NON-NLS-1$
} catch (Exception e) {
e.printStackTrace();
}
}
}
/*HelloClient*/
package rmi.cn.riil.demo;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.ResourceBundle;
/**
*
* @author ZB
*
*/
public class HelloClient {
public static void main(String[] args) {
try {
ResourceBundle resource = ResourceBundle.getBundle("config");
/* 注册服务器 */
String hostName = resource.getString("HelloServer.RegistryServerName");
int port = Integer.parseInt(resource.getString("HelloServer.RegistryServerPort"));
Registry registry = LocateRegistry.getRegistry(hostName, port);
Hello hello = (Hello) registry.lookup(resource.getString("HelloServer.HelloServerName"));
String message = hello.sayHello();
System.out.println(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
#config.properties
HelloServer.RegistryServerPort=1111
HelloServer.HelloServerName=HelloServer
HelloServer.RegistryServerName=127.0.0.1
首先运行HelloServer服务器 java test.rmi.HelloServer,提示
最后运行HelloClient客户端 java test.rmi.HelloClient
屏幕输出HelloWorld,这样,一个最简单的rmi远程调用成功了