日期:2014-05-20  浏览次数:20636 次

java rmi 小问题请教大神
本帖最后由 A280104758 于 2014-02-13 21:32:01 编辑

import javax.naming.Context;
import javax.naming.InitialContext;

public class WarehouseServer {

public static void main(String[] args) throws Exception{

System.out.println("Constructing server implementation ...");

WarehouseImpl centralWarehouse = new WarehouseImpl();
Context namingContext = new InitialContext();
namingContext.bind("rmi:central_warehouse", centralWarehouse);
System.out.println("Waiting for invocations from clients...");
}
}

这个是java核心技术第九版卷二的一个例子,为何显示
namingContext.bind("rmi:central_warehouse", centralWarehouse);
执行不了,显示的net connection出现了问题?


但是当我把代码改成下面这样就可以了呢?

package chapter11.server;

import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;

import javax.naming.Context;
import javax.naming.InitialContext;

public class WarehouseServer {

public static void main(String[] args) throws Exception{

System.out.println("Constructing server implementation ...");
WarehouseImpl centralWarehouse = new WarehouseImpl();
        Context namingContext = new InitialContext();
        LocateRegistry.createRegistry(8888); 
             namingContext.bind("rmi://localhost:8888/central_warehouse", centralWarehouse);
System.out.println("Waiting for invocations from clients...");
}
}




对于客户端的代码

import java.util.Enumeration;

import javax.naming.*;

public class WarehouseClient {

public static void main(String[] args) throws Exception{
Context namingContext = new InitialContext();

System.out.println("RMI registry bindings:");

Enumeration<NameClassPair> e = namingContext.list("rmi://localhost:8888/");
while(e.hasMoreElements())
System.out.println(e.nextElement().getName());
String url = "rmi://localhost:8888/central_warehouse";
Warehouse centralWarehouse = (Warehouse)namingContext.lookup(url);
}
}


为何上述的(Warehouse)namingContext.lookup(url);显示proxy不能够进行强制转换。。。。为什么  呜呜

注:我运行的jdk是jdk1.7
------解决方案--------------------
楼主自问自答啊。。
------解决方案--------------------
嗯 包路径要一致