簡體   English   中英

RMI UnmarshalException

[英]RMI UnmarshalException

我在編碼RMI系統時,在客戶端遇到了異常問題

Exception in thread "main" java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
    java.lang.ClassNotFoundException: com.cs.entity.LectureCourse
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:178)
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178)
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
    at $Proxy1.getNamedClass(Unknown Source)
    at com.cs.test.ClientCRUD.main(ClientCRUD.java:40)

作為com.cs.entity.LectureCourse是一個類,應由客戶端在運行時使用RMI代碼庫功能下載,我已檢查該類以確保

  1. 服務器VM參數上的代碼庫設置正確,並且
  2. 客戶端VM選項-Djava.security.policy =也已正確設置。
  3. -Djava.rmi.server.hostname也用於確保注冊表正確獲取內容

當我在同一節點上運行客戶端和服務器時,它可以工作,但是當單獨的物理機分別持有服務器和客戶端時,客戶端會顯示異常。

有人看過這個問題嗎? 請幫忙...

@EJP

以下是我用來啟動RMI注冊表的代碼(在tomcat 7 contextInitialized內部)

        final String value = "http://192.168.1.11:8080/csl/";
        System.out.println(value);
        System.setProperty("java.rmi.server.codebase", value);

        registry = LocateRegistry.createRegistry(8899)

這是我用來在客戶端中查找注冊表的代碼

    System.setSecurityManager(new RMISecurityManager());

    final String HOST = "192.168.1.11";
    final int port = 8899;
    final Registry registry = LocateRegistry.getRegistry(HOST, port);

我認為它們可以正常工作,但是錯誤讓我很沮喪

我想我找到了問題所在。 如前所述,RMI注冊表是從Tomcat 7 contextInitialized方法啟動的,應在啟動Web項目時調用該方法。 事實證明,如果RMI服務器位於獨立的主應用程序中,則同一段代碼可以很好地工作。 根據我在不同RMI服務器配置中的幾次測試,我得出的結論是

  1. Tomcat 7 contextInitialized方法的作用與普通的Java主程序不同
  2. 我不確定,但是只有在URL(我正在使用網絡服務器)指示特定的jar文件而不是目錄的情況下,代碼庫才能正常工作。 (這可能是我對本教程或類似內容的誤解)

因此,問題出在這就是為什么Tomcat 7不會以不同的方式啟動RMI注冊表? 我還在努力

Tomcat 7 contextInitialized方法的作用與普通的Java主程序不同

當然可以。 但是,如果不知道您有什么具體期望,就無法進一步評論。

我不確定,但是只有在URL(我正在使用網絡服務器)指示特定的jar文件而不是目錄的情況下,代碼庫才能正常工作。 (這可能是我對本教程或類似內容的誤解)

它的效果要好得多,因為只有一個下載,而且您不必在整個代碼庫服務器上散布.class文件:只需部署一個或多個JAR文件。

如果您期望RMI從目錄中加載JAR文件,而無需特別告知,則不會這樣做。 如果您不命名JAR文件,它將查找.class文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM