RMI:如果只有一个JVM,那么远程方法的参数必须实现Serializable吗?

时间:2014-09-06 03:45:01

标签: java interface jvm rmi

对于Java RMI,即使客户端和服务器都在同一个JVM中运行,作为参数传递给Remote对象的对象也必须实现Serializable吗?

2 个答案:

答案 0 :(得分:1)

基本上是的。即使客户端和服务器位于同一个JVM中,通过存根进行远程调用仍会对参数进行编组,使用RMI协议(JRMP)发送请求,在服务器端解组,反之亦然,返回值。如果客户端和服务器碰巧在同一台机器上,则不会发生短路。

从某种意义上说,它有助于验证您的设计。如果存在短路,则在将客户端移动到其他JVM时可能会遇到可串行化问题或意外的对象共享。

可以自己短路RMI,如果你有客户端make" remote"直接调用服务器实现对象而不是存根。这些调用当然是常规方法调用。要避免此问题,您必须确保客户端只能使用存根,而不是实际的实现对象。

答案 1 :(得分:0)

是。没有短路。这将违反RMI规范。