1. 程式人生 > >RMI除錯踩坑記錄

RMI除錯踩坑記錄

RMI 使用的兩種方式: 1.RMI服務的具體提供者和RMI登錄檔 工作在同一個JVM上 (LocateRegistry.createRegistry(1099)) 2.RMI登錄檔和RMI Server 實現是可以分成 兩個JVM 執行的(LocateRegistry.getRegistry("192.168.10.156", 1099));Stub需要手動生成
這裡方法一測試後沒遇見什麼問題,方法二遇見了幾個坑,分享如下:
rmic -classpath E:\testworkspace\testBSocket\target\classes testRMI.RemoteServiceImpl
上面的Dos視窗程式碼講解一下: rmic命令:就是rmic命令了,這個命令專門用來生成Stub和Skeleton(JDK1.5+不會生成Skeleton了) -classpath:classpath引數。指定class目錄的位置。這個引數和您安裝JDK時,在環境變數中設定的CLASSPATH引數含義是一樣的。只是在我的環境中,工程編譯的路徑是E:\testworkspace\testBSocket\target\classes,這個路徑沒有設定設定在環境變數中,所以在生成Stub需要專門指定(否則rmic沒法識別到哪個根路徑識別class) testRMI.RemoteServiceImpl:要生成Stub的RMI Server服務實現類。
這個類一定要實現java.rmi.Remote介面 在執行完成後,對應的class目錄下您將可以看到生成好的Stub class。RemoteUnicastServiceImpl_Stub.class就是剛才生成的Stub class。這個Stub class和RemoteServiceInterface需要放到“RMI 登錄檔”執行JVM的classpath下面。
  • 接下來我們啟動遠端“RMI 登錄檔”服務:
//設定classpath  set CLASSPATH=%CLASSPATH%;E:  \testworkspace\testBSocket\target\classes
//linux下的話,就這麼命令  export CLASSPATH=$CLASSPATH:/usr/java/classpath //啟動登錄檔應用程式  rmiregistry 1099
如果不指定埠引數,那麼預設的埠就是1099。
前提:所有命令最好都在 E:\testworkspace\testBSocket\target\classes路徑下dos視窗輸入
啟動登錄檔命令: 對於Windows start rmiregistry Solaris OS或Linux: rmiregistry &
問題一: 在啟動服務獲取登錄檔時,必須先啟動登錄檔使服務連線到登錄檔,否則報錯


問題二: 如果不是在上面提到的 前提路徑下啟動登錄檔,在啟動服務時報錯