现在的位置: 首页 > 综合 > 正文

RMI调用模板

2013年10月10日 ⁄ 综合 ⁄ 共 1300字 ⁄ 字号 评论关闭
  

1. 定义远程接口
// 远程接口继承自Remote
// 远程方法的传入参数和返回值必须是自然类型(intfloatboolean等)
// 或者实现了SerializableRemote接口的对象。
public interface Time extends java.rmi.Remote {
    // 远程方法必须抛出RemoteException
    public String getTime() throws RemoteException;
}
2. 定义实现类
// 注意:实现类继承自UnicastRemoteObject和自定义的远程接口Time
public class TimeImpl extends java.rmi.server.UnicastRemoteObject implements Time {
    // 注意:由于RemoteObject构造函数要抛出RemoteException
    // 因此务必定义构造函数并抛出RemoteException
    public TimeImpl() throws RemoteException { super(); }
 
    // 这里是远程方法:
    public String getTime() throws RemoteException {
        return "12:04:27";
    }
// 启动服务:
    public static void main(String[] args) throws Exception {
        // 可以手动启动RMI Registry,也可以在程序中启动:
        java.rmi.registry.LocateRegistry.createRegistry(1099);
        // 绑定名字服务,地址是本地计算机名或本机IP,默认端口是1099
        java.rmi.Naming.bind("//localhost:1099/servicename", new TimeImpl());
        // 如果没有异常抛出,则绑定成功。
        // 如果名字已经被绑定,可以用Naming.rebind()替换掉已绑定的服务。
    }
}
3. 编译生成桩和框架
运行rmic TimeImpl,生成TimeImpl_Skel.classTimeImpl_Stub.class
4. 客户端
// 客户端文件包含客户端代码Client.class,远程接口Time.class
// rmic生成的支持类TimeImpl_Skel.classTimeImpl_Stub.class
public static void main(String[] args) throws Exception {
    // 客户端通过IP引用服务器端的远程对象,因此可以动态选择服务器。
    // 如果不指定端口,默认端口号是1099
    Time time = (Time)java.rmi.Naming.lookup("//localhost:1099/servicename");
    System.out.println(time.getTime());
}
 

抱歉!评论已关闭.