2013-07-02 37 views
0

每一件事情作爲工作在客戶端和服務器在同一系統上運行得很好,,但我在遠程M/C運行其中的一個,還有我使用針對VMware的, 客戶端是無法找到服務器的存根(stub)和服務器無法找到動態加載的客戶端類。RMI代碼庫的設置問題

我確定它的問題與我設置代碼庫url的方式有關,但應如何更改它們。

目前,我將它們設置爲

文件:/ E:/ surshikradmin /工作區/ RMI-server/bin目錄/服務器..

和種類的客戶端相同的方式.. 應該怎麼添加主機名稱,但如何? 任何幫助將是非常有用的,因爲它已經多年,我正在處理問題和解決它將使項目去搖滾..

客戶端堆棧跟蹤,如果它coul幫助!

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 

回答

0
  1. 代碼庫系統屬性被設置在該具有類的JVM是可用經由基本代碼:通常,服務器。其目的是告訴JVMs 不要有找到它們的類。將其設置爲那些 JVM不起作用。

  2. 它必須被設置爲將具有意義的對等體的值。因此,導出JVM自己文件系統上的文件或目錄將不起作用,因爲對等端無法看到該文件。

  3. 這就是爲什麼代碼庫的URL通常http:網址。如果您使用file: URL來命名共享驅動器,則可以使用它的共享名稱,但如果您位於局域網內部,我不明白爲什麼您需要使用代碼庫功能。

+0

1.codebase也設置在客戶端,如果服務器應該從客戶端動態加載類,糾正我,如果我錯了。2.共享驅動器可能工作,但如果ma客戶端和服務器連接互聯網,,將一個共享設備工作,或製作一個rmi項目迫使你擁有一個網站.. – pcc

+0

(1)包括在我說的內容中。再讀一遍。我談到了導出遠程對象的JVM,而不是關於當時的服務器和客戶端。 (2)共享文件系統不能在Internet上運行。這就是我提到HTTP的原因。 (3)我不知道你最後一句話的意思。 – EJP

+0

毫安最後一句簡單的意思是,如果我提到的基本代碼URL,就像這樣HTTP://url.com ,,那麼他們必須有一些網站,我把我的共享源代碼,,這意味着我必須使用一些網站建設項目,通過互聯網..我不能建立一個成功的rmi項目,而不使用提供共享代碼的Web服務器。 – pcc