java RMI 的问题

前几天提问了几个问题 解决了一部分 剩下的几个再提一下 希望大家帮忙解释一下

问题4 RMI服务器一直在不断的运行,客户端发出的调用请求到底是服务器上哪段程序监听的?

问题5
public static void main(String[] args) {
try {
HelloService service1 = new HelloServiceImpl("service1");
HelloService service2 = new HelloServiceImpl("service2");

Context namingContext = new InitialContext();
namingContext.rebind("rmi:HelloService1", service1);
namingContext.rebind("rmi:HelloService2", service2);
System.out.println("服务器注册了两个HelloService对象");

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
为什么这段服务器段程序在执行完System.out.println("服务器注册了两个HelloService对象");
后,当前进程仍然没有结束运行?
有书说,向注册表中注册了两个远程对象,注册表一直引用着这两个对象,使得两个对象不会结束生命周期,因而当前服务器程序也不会结束运行。不同的jvm内存中的对象难道可以引用吗?

问题 6
通过命令java -Djava.rmi.server.codebase xxxx运行程序后,可以从网络上装载class
想问一下这个codebase属性的设置作用于哪个类装载器呢?是哪个类装载器负责从codebase指定的路径下装载类?

看看这文章
http://flypig.iteye.com/blog/393156

就是因为这是服务器端程序,当然是不能停止结束,不然客户端怎么去调用服务器的请求

不同的jvm内存中的对象当然是不可以引用的

问题6
这个类装载器一定是继承了URLClassLoader,这个基类就提供可从任何url的地方加载类

RMI的Remote接口在内部是通过socket来做链接的,用这个socket来发送对象,接受对象等。你可以将其理解为一个网络程序。
所以,对于4,5都是同样的问题,网络程序,C/S模式的,服务是不会退出的(服务要为客户端提供服务,所以需要一直存在)。
RMI的根源在于JAVA一直倡导的一切皆对象,而不管这些对象的物理实现是在什么地方,可以是本地的,当然也可以是远程的。所以RMI是可以跨jvm的。

朋友,问题要自动关闭啦,结分哦,