会RMI的帮帮我,到我提供的连接里去领分(分不多,还请各路好汉都来瞧瞧)
能回答这个问题的 请到http://community.csdn.net/Expert/topic/4107/4107941.xml?temp=8.457583E-02这个连接里去拿分
rmi的java.rmi.server.codebase问题
我在本机上写了个RMI程序,运行成功。现在我想在本机上模拟实际的分布式环境(即:让客户端程序从服务器端指定的java.rmi.server.codebase路径上下载代码存根,而不是通过CLASSPATH来查找代码存根)
我是这样做的(我的服务端程序是rmiServerApp.RmiServer.java ,
远程对象类为rmiServerApp.RemoteObject.java
远程接口类为rmiServerApp.RemoteInterface.java
我以下提供的信息足以让各位帮我解决问题,
贴代码只会增加复杂性):
1。 启动TOMCAT服务器,我的TOMCAT占据的是80端口
2。 编译我写的所有类
3。 在命令行下rmic rmiServerApp.RmiServer 这时rmiServerApp目录下会出现代码存根和Skel
4. 在TOMCAT的根目录下(即http://127.0.0.1/ 所访问的目录)创建文件夹rmiServerApp,然后将 代码存根剪切到该rmiServerApp目录中,我保证CLASSPATH下没有TOMCAT的根目录路径.
5.在e:/下创建名为policy.txt的安全管理器配置文件,内容如下:
grant {
permission java.security.AllPermission;
};
6.在命令行下输入以下命令以运行RmiServer
java -Djava.security.policy=file:e:/policy.txt
-Djava.rmi.server.codebase=http://127.0.0.1/ rmiServerApp.RmiServer
结果运行出错,异常内容如下:
Exception in thread "main" java.rmi.StubNotFoundException: Stub class not found:
rmiServerApp.RemoteObject_Stub; nested exception is:
java.lang.ClassNotFoundException: rmiServerApp.RemoteObject_Stub
at sun.rmi.server.RemoteProxy.getStub(RemoteProxy.java:98)
at sun.rmi.server.RemoteProxy.getStub(RemoteProxy.java:55)
at sun.rmi.server.UnicastServerRef.setSkeleton(UnicastServerRef.java:179
)
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:14
2)
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:12
9)
at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.
java:275)
at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.
java:178)
at java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:7
5)
at java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:6
1)
at rmiServerApp.RemoteObject.<init>(RemoteObject.java:29)
at rmiServerApp.RmiServer.main(RmiServer.java:31)
Caused by: java.lang.ClassNotFoundException: rmiServerApp.RemoteObject_Stub
at java.net.URLClassLoader$1.run(URLClassLoader.java:198)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at sun.rmi.server.RemoteProxy.loadClassFromClass(RemoteProxy.java:191)
at sun.rmi.server.RemoteProxy.getStub(RemoteProxy.java:93)
... 10 more
难道java.rmi.server.codebase只能指定客户端的下载地址而不能动态的扩展服务器端的CLASSPATH吗????????????????