初学,一个关于RMI的问题请教!!!

有三个类:Product为一个远程接口,扩展了Remote类;ProductImpl类实现了远程接口,并且扩展了UnicastRemoteObject类;ProductServer是服务器类,它生成了ProductImpl类的对象。在我的机子上顺利编译通过。接着我用rmic ProductImpl命令生成了ProductImpl_skel和ProductImpl_skub两个类,与前面的几个类放在同一个目录下。但是在我运行ProductServer类时候,总是出错,提示未找到ProductImpl_skub这个存根类。为什么,难道是路径没有配置好吗?急盼大侠指点!!(注:此例子来自core java2一书)

stub好像两边都要放,好长时间没有了,第一次用时好像也在这里卡住。

要用到 codebase

codebase是不是要在配置了如tomcat等服务器的情况下使用?我是在dos窗口下,先用start rmiregistry命令启动注册程序,然后用java ProductServer启动的服务端程序,在这种情况下报的错:classNotFoundException: ProductImpl_stub.请高手继续指点!!

应该是codebase的问题。
你要确保你的Stub能够被客户机正确的找到,就如同本机的classpath一样。
你可以用一个HTTP服务器用来提供下载,在客户机调用的时候用]

-Djava.rmi.server.codebase=http://url:8080/myclasses.jar
来获得

客户端只需要STUB即可,注意路径。
也可以通过设置java.rmi.server.codebase 属性,通过动态URLCLASSLOAD 加载存根类

这个情况发生可能又很多种因素的
首先,如果用jdk1.4以上可以不需要生成skelton,就在编译得时候加上一个参数。
还有要看你用的是什么IDE。每个ide编译路径和stub产生的路径都有差异。
codebase只有当你的客户端在他的classpath种找不到那个stub得时候才要用到,比如客户机和服务机不是同一个机器。而如果client 和server都在同一个机器上就可以不需要codebase,只要server和client运行时都能找到那个stub类就可以.也就是把你的stub类放到classpath中。