【问题标题】:RMI codebase setting issueRMI 代码库设置问题
【发布时间】:2013-06-30 07:20:54
【问题描述】:

当客户端和服务器都在同一个系统上运行时,一切都很好,但是当我在远程 m/c 上运行其中一个时,我正在使用 vmware, 客户端无法定位服务器的存根,服务器无法定位客户端类以进行动态加载..

我确定这是我设置代码库网址的方式的问题,但我应该如何更改它们。

目前,我将它们设置为

file:/E:/surshikradmin/workspace/rmi-server/bin/ 用于服务器..

对于客户来说也是同样的方式.. 我也应该添加主机名,但是如何? 任何帮助都会非常有帮助,因为多年来我一直在处理问题并解决它将使 ma 项目变得摇滚..

如果有帮助的话,客户端堆栈跟踪!

Computeappengine exceptionerror unmarshalling return; nested exception is: 
java.lang.ClassNotFoundException: Engine.ComputeappEngine_Stub
java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
java.lang.ClassNotFoundException: Engine.ComputeappEngine_Stub
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at Client.computeappprog.main(computeappprog.java:23)
 Caused by: java.lang.ClassNotFoundException: Engine.ComputeappEngine_Stub
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:432)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:163)
at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
... 2 more

【问题讨论】:

    标签: java security url rmi code-access-security


    【解决方案1】:
    1. 代码库系统属性在 JVM 中设置,具有类,这些类可通过代码库获得:通常是服务器。它的目的是告诉JVM 没有 有类可以在哪里找到它们。将其设置为 那些 JVM 无效。

    2. 必须将其设置为对对等方有意义的值。因此,导出 JVM 自己的文件系统上的文件或目录将无法工作,因为对等方看不到该文件。

    3. 这就是为什么代码库 URL 通常是 http: URL。你可以使用file: URL,如果它通过它的共享名命名一个共享驱动器,但如果你在一个局域网内,我真的不明白你为什么需要使用代码库功能。

    【讨论】:

    • 1.codebase 也设置在客户端,如果服务器应该从客户端动态加载类,如果我错了,请纠正我.. 2.a 共享驱动器可能工作,但如果 ma 客户端和服务器是通过互联网连接,然后共享设备是否可以工作,或者制作一个 rmi 项目会迫使您拥有一个网站..
    • (1) 包含在我所说的内容中。再读一遍。我谈到了导出远程对象的 JVM,而不是当时的服务器和客户端。 (2) 共享文件系统不能在 Internet 上运行。这就是我提到 HTTP 的原因。 (3) 我不知道你最后一句话是什么意思。
    • ma 最后一句话只是意味着如果我提到代码库 url 像 HTTP://url.com 之类的东西,那么它们必须是我放置共享源代码的某个站点,这意味着我必须使用某个站点构建一个可以在互联网上运行的项目..如果不使用提供共享代码的网络服务器,我无法构建一个成功的 rmi 项目。是这样吗???
    • 您已经提供了一个必须在您的网络上工作的 RMI 服务器。向其中添加 Web 服务器很简单。
    • 它在共享文件夹上工作得很好,但现在问题只是通过互联网转向两个不同的主机..thanx @EJP cz only cz of your shared folder idea,我可以看到它适用于第一个时间,,现在请通过在评论中回答上面的问题来帮助我...我没有提供任何 rmi 服务器,我在我的服务器 jvm 中创建了它,通过 Locateregistry.createregistry(1099);,,在这种情况下我应该怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多