我想了解如何动态代理存根实现实际上是在幕后完成。根据我读,通过时间远程对象是出口,如果没有预先生成存根类被发现,RMI运行时会产生一个动态代理作为存根。然后,该存根绑定到RMI注册表,后来进入一些RMI的客户端。

现在的问题是:既然存根实际上是一个动态生成的代理,它的类定义将不可用在客户端,然后怎么来的客户端仍然能够检索从RMI注册存根?是否有某种动态类加载的发生在幕后或者不RMI使用的另一种技术工作,解决此问题?

有帮助吗?

解决方案

Java.lang.reflect.Proxy是可序列化的,它有ObjectOutputStream中和ObjectInputStream的特殊支持。基本上只实现的接口和调用处理程序被串行化,并且一个新的动态代理是从反序列化过程构造。

其他提示

RMI确实使用动态类加载 - 类路径地连同该呼叫为来自该客户端加载类A“类路径注释”发送。你可以看一下RMI实现更多的信息 - 它可作为JDK源的一部分。具体地,类的ObjectOutputStream和RMIClassloader。

更新:RMI不启动HTTP服务器 - 其实,你需要为这个自定义解决方案。其中之一为你提到的可以是你运行一个HTTP服务器,使可通过服务器类,并通过与HTTP服务器的地址/端口的代码库中的存根,让您的客户端可以下载它们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top