部署RMI应用(服务器与RMI注册表分离方式)

一般情况下,我们的部署RMI应用的时候是把服务器和RMI注册表进程同时运行在一个服务器上,这是由于RMI注册表在注册远程对象的时候需要加载实现Remote的接口(.class)生成的字节码文件。但RMI服务同样支持从远程服务器的加载。

部署这样一个应用分为四步:
第一步:
1.下载NanoHTTPD到httpserver目录
NanoHTTPD是一个简易的HTTP服务器。参数说明
>java NanoHTTPD –p 端口号 –d http访问的更目录
2.在httpserver目录下编译NanoHTTPD类
3.在httpserver目录下创建目录download,启动NanoHTTPD打开命令行输入:java NanoHTTPD –p 8989 –d download。Download目录是用于存放实现了Remote接口的.class文件这里注意如果有有包的话还要创建同样包路径,也就是RMI注册表需要加载字节码文件。
第二步:
在服务器找到一个空目录或创建,并将classpath环境变量设置为空,window下set %classpath%=;这样是为了防止加载到服务器本地的一些类造成混乱。
第三步:
创建远程对象类,实现Remote接口继承UniCastRmoteObject.远程对象中的每个方法都要抛出RemoteException异常。-Djava.rmi.server.codebase=
创建server端注册远程对象。这些博客中有写。
第四步:
创建客户端,通过客户端访问远程对象。客户端中同样需要带完整类路径的远程对象的.class文件。(可以从server端直接复制和包一起复制)


//		System.setProperty("java.rmi.server.codebase", "http://localhost:8888/example/");
//		RemoteService service = new RemoteServiceImpl();
//		Naming.rebind("service", service);
//		
//		String path = ClassLoader.getSystemClassLoader().getResource(".").toString();
//		System.setProperty("java.rmi.server.codebase", path);
//		Registry registry = LocateRegistry.getRegistry();
//		RemoteService service = new RemoteServiceImpl();
//		registry.rebind("service", service);

你可能感兴趣的:(rmi)