2015-11-23 55 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。