您的位置:首页 > 其它

RMI调用模板

2007-10-13 16:07 127 查看
  
[align=left]1. 定义远程接口[/align]
[align=left]// 远程接口继承自Remote[/align]
[align=left]// 远程方法的传入参数和返回值必须是自然类型(int,float,boolean等)[/align]
[align=left]// 或者实现了Serializable或Remote接口的对象。[/align]
[align=left]public interface Time extends java.rmi.Remote {[/align]
[align=left]    // 远程方法必须抛出RemoteException:[/align]
[align=left]    public String getTime() throws RemoteException;[/align]
[align=left]}[/align]
[align=left]2. 定义实现类[/align]
[align=left]// 注意:实现类继承自UnicastRemoteObject和自定义的远程接口Time:[/align]
[align=left]public class TimeImpl extends java.rmi.server.UnicastRemoteObject implements Time {[/align]
[align=left]    // 注意:由于RemoteObject构造函数要抛出RemoteException,[/align]
[align=left]    // 因此务必定义构造函数并抛出RemoteException:[/align]
[align=left]    public TimeImpl() throws RemoteException { super(); }[/align]
[align=left] [/align]
[align=left]    // 这里是远程方法:[/align]
[align=left]    public String getTime() throws RemoteException {[/align]
[align=left]        return "12:04:27";[/align]
[align=left]    }[/align]
[align=left]// 启动服务:[/align]
[align=left]    public static void main(String[] args) throws Exception {[/align]
[align=left]        // 可以手动启动RMI Registry,也可以在程序中启动:[/align]
[align=left]        java.rmi.registry.LocateRegistry.createRegistry(1099);[/align]
[align=left]        // 绑定名字服务,地址是本地计算机名或本机IP,默认端口是1099:[/align]
[align=left]        java.rmi.Naming.bind("//localhost:1099/servicename", new TimeImpl());[/align]
[align=left]        // 如果没有异常抛出,则绑定成功。[/align]
[align=left]        // 如果名字已经被绑定,可以用Naming.rebind()替换掉已绑定的服务。[/align]
[align=left]    }[/align]
[align=left]}[/align]
[align=left]3. 编译生成桩和框架[/align]
[align=left]运行rmic TimeImpl,生成TimeImpl_Skel.class和TimeImpl_Stub.class。[/align]
[align=left]4. 客户端[/align]
[align=left]// 客户端文件包含客户端代码Client.class,远程接口Time.class,[/align]
[align=left]// 由rmic生成的支持类TimeImpl_Skel.class和TimeImpl_Stub.class:[/align]
[align=left]public static void main(String[] args) throws Exception {[/align]
[align=left]    // 客户端通过IP引用服务器端的远程对象,因此可以动态选择服务器。[/align]
[align=left]    // 如果不指定端口,默认端口号是1099:[/align]
[align=left]    Time time = (Time)java.rmi.Naming.lookup("//localhost:1099/servicename");[/align]
[align=left]    System.out.println(time.getTime());[/align]
[align=left]}[/align]
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息