客户端得到的是远程对象的存根, 调用一次后,服务端注销掉这个远程对象, 客户端为什么还能访问远程对象的方法呢???远程对象:
 public class HelloServiceImpl extends UnicastRemoteObject implements
HelloService,Unreferenced {
 
 private boolean isAccessed = false; public HelloServiceImpl() throws RemoteException {
super();
// TODO Auto-generated constructor stub
} /**
 * 
 */
private static final long serialVersionUID = 3892959535244147314L;

public void access() throws RemoteException {
System.out.println("HelloServiceImpl: 我被一个客户引用");
isAccessed = true;
} public void bye() throws RemoteException {
// TODO Auto-generated method stub
System.out.println("HelloServiceImpl: 一个客户不再引用我了"); } public boolean isAccessed() throws RemoteException {
// TODO Auto-generated method stub
return this.isAccessed;
} public void unreferenced() {
// TODO Auto-generated method stub
System.out.println("HelloServiceImpl:我不在被远程引用了");

}}
服务端代码: public class SimpleServer { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub

System.setProperty("java.rmi.dgc.leaseValue", "3000");

try {
HelloService service = new HelloServiceImpl();
Context context = new InitialContext();
context.rebind("rmi:dgc", service);
System.out.println("服务器注册了一个HelloServiceImpl对象");

//等待客户端获得远程对象引用
while(!service.isAccessed())Thread.sleep(500);

context.unbind("rmi:dgc");
System.out.println("服务器注销了一个HelloServiceImpl对象");


} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }}
客户端代码: public class SimpleClient { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Context context = new InitialContext();

HelloService service = (HelloService) context.lookup("rmi:dgc");
service.access();
Thread.sleep(10000);
service.bye();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}  }}服务端控制台结果:服务器注册了一个HelloServiceImpl对象
HelloServiceImpl: 我被一个客户引用
服务器注销了一个HelloServiceImpl对象
HelloServiceImpl: 一个客户不再引用我了
HelloServiceImpl:我不在被远程引用了