为什么RMI注册表忽略了java.rmi.server.codebase属性
我正在为
java RMI运行Hello World示例
1)我在一个空文件夹中运行注册表 motta@motta-laptop ~/tmp $rmiregistry 2)我启动HTTP服务器以在运行时检索类. download文件夹包含客户端 – 服务器的远程接口 motta@motta-laptop ~/download $java NanoHTTPD 8080 3)我按照java RMI教程的建议启动服务器传递java.rmi.server.codebase属性 motta@motta-laptop ~/server $java -Djava.rmi.server.codebase="http://localhost:8080" WarehouseServer RMI注册表未联系HTTP服务器并抛出异常(请参阅问题后的详细??信息). 1)使用java.rmi.server.codebase属性启动rmi注册表 motta@motta-laptop ~/tmp $rmiregistry -J-Djava.rmi.server.codebase="http://localhost:8080/" 2)像以前一样启动HTTP服务器 3)没有任何选项启动服务器 motta@motta-laptop ~/server $java WarehouseServer 它有效,但为什么呢?似乎在第一个过程中,RMI注册表忽略了java.rmi.server.codebase属性 谢谢 ================================= 我在跑步 java version "1.7.0_21" Java(TM) SE Runtime Environment (build 1.7.0_21-b11) Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01,mixed mode) RMI注册表的例外 Constructing server implementation... Binding server implementation to registry... Exception in thread "main" java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: Warehouse at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:419) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267) at sun.rmi.transport.Transport$1.run(Transport.java:177) at sun.rmi.transport.Transport$1.run(Transport.java:174) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:173) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722) at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:377) at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source) at WarehouseServer.main(WarehouseServer.java:14)
那是对的.原因是,从JDK 7u21开始,java.rmi.server.useCodebaSEOnly属性默认为true,而在以前的版本中默认为false. 当useCodebaSEOnly为false时,RMI Registry(和RMI客户端)使用从服务器传递给它们的代码库.现在默认值为true,注册表和客户端忽略服务器的codebase属性.注册表和客户端必须设置自己的codebase属性以匹配服务器的属性,或者(不推荐)他们可以将useCodebaSEOnly设置为false.有关详细信息,请参见RMI Enhancements in JDK 7. RMI Tutorial尚未更新以反映此更改.对于那个很抱歉.我会确保它得到更新. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何从Windows服务C#取消关机
- 以编程方式在.NET中的Windows7中显示屏幕键盘
- 两大主流Web服务器之分析与对比
- .net – 无法使用EF5和VS 2010加载文件或程序集“Microsoft
- 远程桌面服务 – Microsoft远程桌面服务 – Android
- winapi – Windows 10关闭,最小化和最大化按钮
- .net – 如何在Windows Forms TextBox控件中设置TAB宽度?
- windows-server-2008-r2 – mscorsvw.exe(.NET运行时优化服
- uwp – 资源的冲突值
- windows-server-2008 – 为什么Windows 2008在断电后重新同
- 使用Gogs在Windows系统中搭建Git服务
- windows-server-2008 – 为什么Windows 2008在内
- windows-server-2003 – RDP – 远程桌面断开连接
- windows-server-2012 – Server 2012 R2 Exchang
- windows-server-2008-r2 – 如何选择用于iSCSI的
- windows-server-2008 – 不明原因的慢速千兆网络
- windows – 在主机文件中指定IP与直接使用IP之间
- windows – 自动生成guis?
- 如何在Windows 8.1上安装PyBluez?
- 部署 – 一个大的可执行文件或许多小的DLL?