RMI学习案例
来源:互联网 发布:数据库系统概念电子书 编辑:程序博客网 时间:2024/06/06 00:15
RMI学习案例
本人初学RMI,参照网上的实例教程实现了一个实例,在此记录一下:
RMI(即Remote Method Invoke 远程方法调用)。在Java中,只要一个类extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定的服务。JavaDoc描述:Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口。任何远程对象都必须直接或间接实现此接口。只有在“远程接口”(扩展 java.rmi.Remote 的接口)中指定的这些方法才可远程使用。
注意:extends了Remote接口的类或者其他接口中的方法若是声明抛出了RemoteException异常,则表明该方法可被客户端远程访问调用。
同时,远程对象必须实现java.rmi.server.UniCastRemoteObject类,这样才能保证客户端访问获得远程对象时,该远程对象将会把自身的一个拷贝以Socket的形式传输给客户端,此时客户端所获得的这个拷贝称为“存根”,而服务器端本身已存在的远程对象则称之为“骨架”。其实此时的存根是客户端的一个代理,用于与服务器端的通信,而骨架也可认为是服务器端的一个代理,用于接收客户端的请求之后调用远程方法来响应客户端的请求。
新建一个服务端rmiServerTest项目
IHello.java继承Remote接口类
public interface IHello extends Remote {
public String sayHello(String name) throws RemoteException;
}
必须要继承Remote接口,并抛出RemoteException异常
IHelloImp继承UnicastRmoteObject类,实现IHello接口
public class IHelloImp extends UnicastRemoteObject implements IHello {
private static final long serialVersionUID = 8954703199831085541L;//必须实现的构造方法protected IHelloImp() throws RemoteException { super();}@Overridepublic String sayHello(String name) throws RemoteException { return "你好 " + name + " !";}
}
必须继承UnicastRemoteObject,并实现Remote接口,必须实现以上的构造方法,并抛出RemoteException异常。
IHello类测试类
public class IHelloTest {
public static void main(String[] args) {
try { //初始化远程调用对象 IHelloImp iHelloImp = new IHelloImp(); LocateRegistry.createRegistry(8888); //将IHelloImp绑定到远程服务 Naming.bind("rmi://localhost:8888/IHello", iHelloImp); System.out.println(">>>>>INFO:远程IHello对象绑定成功!"); } catch (MalformedURLException e) { System.out.println("发生URL畸形异常!"); e.printStackTrace(); } catch (RemoteException e) { System.out.println("创建远程对象发生异常!"); e.printStackTrace(); } catch (AlreadyBoundException e) { System.out.println("发生重复绑定对象异常!"); e.printStackTrace(); }}
}
注:我这里是将服务端的IHello.java到处为.jar,引入到客户端项目工程中
新建一个Client项目,Client.java测试类
public class RmiClient {
public static void main(String[] args) {
try {
IHello helloImp = (IHello) Naming
.lookup(“rmi://10.88.48.221:8888/IHello”);
System.out.println(helloImp.sayHello(“hch”));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}
http://lavasoft.blog.51cto.com/62575/91679/
http://haolloyin.blog.51cto.com/1177454/332426/
- RMI学习案例
- Java RMI学习入门小案例
- RMI学习
- RMI学习
- rmi学习
- Java RMI简单使用案例
- RMI 学习 ------第一个RMI程序
- RMI学习资源
- RMI学习脑图
- EJB学习笔记(RMI)
- Spring RMI 学习
- RMI一步一步学习
- 学习 Java RMI
- 学习 Java RMI
- EJB(RMI学习)
- RMI 学习记录
- RMI学习笔记
- RMI学习笔记
- Java自定义线程池和线程总数控制
- 【Linux】rpm常用命令及rpm参数介绍
- jacob操作office word简单教程
- struts2.0中struts.xml配置文件详解
- CDOJ 1357 柱爷与最大区间和(dp+滚动数组)
- RMI学习案例
- Spring拦截器
- Java基础复习(二)-----final和static关键字
- svn: Failed to add directory '../target': an unversioned directory of the same name already exis
- php学习之三(条件语句,数组)
- HTML图片标记
- QT UDP通讯
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- for update 作用