我想知道 Java RMI 服务器 API 中是否有某种回调机制。我想要实现的是,我接到了以下事件的电话:
- 打开的连接
- 方法被调用
- 封闭式连接
- ...
RMI 东西本身运行良好,而且我也知道 RMI 的日志记录可能性。但我有兴趣更深入地了解服务器的性能、创建一些统计数据等。
一种可能性当然是为我的每个远程对象的方法添加一个方法调用,但这很丑陋,因为我的统计部分独立于所提供功能的实际实现。
方法调用的回调相当简单,只是java.lang.reflect.Proxy
.
然而,RMI 为使您与连接和断开事件隔离开来麻烦很多。您将无法在没有很多麻烦的情况下找到那些,并且由于客户端连接池,事件不会像您想象的那样显示太多。您必须实现一个 RMIClientSocketFactory ,它在创建套接字时提供回调,并返回一个提供回调 on 的包装套接字close()
,并且当从服务器下载 RMIClientSocketFactory 时,您还必须设计一种方法让所有这些代码都可以访问给您的客户,以便它可以注册其回调。仅后者是不平凡的。