我想知道Java RMI服务器API中是否存在某种回调机制。我想实现的是,我得到类似事件的电话:Java RMI服务器:要在事件上调用的方法
- 打开的连接
- 方法被调用
- 关闭引黄
- ...
的RMI东西本身运行良好,并且我也了解RMI的日志记录可能性。但我有兴趣了解服务器如何执行,创建一些统计数据等。
一种可能性是将方法调用添加到每个远程对象的方法,但这很丑,因为我的统计信息部分独立于提供的功能的实际实现。
我想知道Java RMI服务器API中是否存在某种回调机制。我想实现的是,我得到类似事件的电话:Java RMI服务器:要在事件上调用的方法
的RMI东西本身运行良好,并且我也了解RMI的日志记录可能性。但我有兴趣了解服务器如何执行,创建一些统计数据等。
一种可能性是将方法调用添加到每个远程对象的方法,但这很丑,因为我的统计信息部分独立于提供的功能的实际实现。
方法调用的回调相当直接,只是应用java.lang.reflect.Proxy
。
然而,RMI遇到了很多麻烦,使您无法连接和断开连接事件。如果没有很多麻烦,你将无法获得这些信息,并且由于客户端连接池,这些事件不会像你想象的那么多。你必须实现一个RMIClientSocketFactory,它为套接字创建提供了回调,并且返回了一个包装套接字,该套接字在close()
上提供回调,并且从服务器下载RMIClientSocketFactory时,您还必须设计一种方法让所有此代码变为您的客户可以访问它,以便它可以注册它的回调。仅仅后者是不平凡的。
我很害怕答案会听起来像这样...让我们等一下,也许别人想出了一些奇特的东西,否则我会接受你的答案。无论如何,我会看看Proxy API。谢谢。 – Scolytus
难道你不能用AOP来实现它,并将关注点与远程对象分开吗? – Anshu
虽然一个有趣的方法,AOP不适合我的需求。 – Scolytus