2015-11-23 89 views
2

我有一個RMI接口,它有一個void返回的方法。Java RMI:阻止void方法返回?

例如:

public interface IDummy { 
    public void foo() throws RemoteException; 
} 

我然後通過創建一個的UnicastRemoteObject存根和出口存根。

在RMI規範中是否需要調用foo塊直到foo返回? 看起來你將不得不阻止,以防foo引發異常。 儘管返回類型是無效的,foo可能會拋出一個異常,因爲RMI能夠傳輸任意異常,所以必須傳輸該異常。

但是,我聽到有矛盾的報道,RMI沒有必要阻止無效回報的情況。

有沒有人有明確的答案? 我已經查閱了RMI spec,似乎沒有解決這個問題。 Some people聲稱它不會阻止。

此外,我已經通讀了JDK源代碼,即使返回方法無效,它也會阻止它。

回答

3

的規範說:

當調用一個短截線的方法,它執行以下操作:

  • 發起與包含遠程對象的遠程JVM的連接,
  • 警(寫入並傳輸)到遠程JVM,
  • 等待方法調用的結果,
  • unmarshals(讀取)返回值或異常返回
  • 將值返回給調用者。

(重點煤礦)

所以,是的,它必須阻止。

0

它是在RMI規範調用直到返回FOO

它要求所有方法調用阻止,直到他們返回到foo塊所需。這裏沒有什麼特別的RMI。