我們希望從我們網絡中的不同主機(dev-pc通過ssh-tunnel,通過直接連接的jenkins-server)訪問同一個RMI服務器。問題在於RMI主機在不同客戶端主機上以不同名稱知道。RMI存根:在客戶端強制主機值
這不是一個問題,當我們連接到註冊表,因爲我們可以將目標主機名是這樣的:
Registry registry = LocateRegistry.getRegistry("hostname", 10099, new CustomSslRMIClientSocketFactory());
但是,當我們查找遠程對象像下面,它包含了錯誤的主機名。
HelloRemote hello = (HelloRemote) registry.lookup(HelloRemote.class.getSimpleName());
在調試器中,我可以看到,就像需要註冊表對象上的主機,但不能在存根:
我們儘快得到一個連接超時,我們調用方法上存根。如果我在調試器中手動將主機值更改爲localhost
,則方法調用將成功。
我知道我可以在服務器端設置java.rmi.server.hostname
,但然後jenkins的連接不再工作。 最簡單的解決方案是強制RMI使用與註冊表相同的主機,以便從該註冊表中檢索到所有存根。有沒有比通過反射替換存根中的主機值更好的方法?