1.2.9 定义客户端程序入口,检索远程对象并执行其接口
public PersonalClient(String __name) throws RemoteException, MalformedURLException, NotBoundException { String urlPrefix = "rmi://192.168.1.147:1099/"; //Look up the remote object by URL Personal p = (Personal)Naming.lookup(urlPrefix + "Personal.Information.Server"); //Invoke the remote interface Properties props = p.getPersonal(__name); …… //Print the result set showPersonal(props); }
请注意异常处理,至少需要抛出3种异常错误。
1.3 过程说明
实践中,远程接口定义的返回值为Properties,很显然,在不同的Java虚拟机甚至是不同的主机,Properties变量是无法通过内存地址来实现共享的。但是Properties是可序列化对象(见下图2),通过序列化机制可以实现服务器端到客户端的对象拷贝,在客户端构造一个与服务器端相同的Properties对象提供客户端使用。
读者可以思考,如果远程接口定义的返回值的类型不是这么简单,而是例如DataSouce对象,Connection对象或者ResultSet对象时,RMI还能运行得如此正常吗?带着这个问题,我们将踏上迷茫而又有趣的RMI与JDBC的组合应用之旅。