2012-09-25 23 views
1

我想知道Java RMI服务器API中是否存在某种回调机制。我想实现的是,我得到类似事件的电话:Java RMI服务器:要在事件上调用的方法

  • 打开的连接
  • 方法被调用
  • 关闭引黄
  • ...

的RMI东西本身运行良好,并且我也了解RMI的日志记录可能性。但我有兴趣了解服务器如何执行,创建一些统计数据等。

一种可能性是将方法调用添加到每个远程对象的方法,但这很丑,因为我的统计信息部分独立于提供的功能的实际实现。

+0

难道你不能用AOP来实现它,并将关注点与远程对象分开吗? – Anshu

+0

虽然一个有趣的方法,AOP不适合我的需求。 – Scolytus

回答

2

方法调用的回调相当直接,只是应用java.lang.reflect.Proxy

然而,RMI遇到了很多麻烦,使您无法连接和断开连接事件。如果没有很多麻烦,你将无法获得这些信息,并且由于客户端连接池,这些事件不会像你想象的那么多。你必须实现一个RMIClientSocketFactory,它为套接字创建提供了回调,并且返回了一个包装套接字,该套接字在close()上提供回调,并且从服务器下载RMIClientSocketFactory时,您还必须设计一种方法让所有此代码变为您的客户可以访问它,以便它可以注册它的回调。仅仅后者是不平凡的。

+0

我很害怕答案会听起来像这样...让我们等一下,也许别人想出了一些奇特的东西,否则我会接受你的答案。无论如何,我会看看Proxy API。谢谢。 – Scolytus