您的位置:首页 > 编程语言 > Java开发

基于jxta的RMI实现技术

2012-01-13 09:00 183 查看

jxta2.5发布也有很长时间了,逐渐冷落的社区氛围让不少人心灰意冷,包括我在内一度也对这个项目抱有很大的怀疑。不少人在社区论坛上都讨论这个项目是否已经寿终正寝,原因很多,发布周期长,可用性不够好,性能也有问题。还好自己通过不懈的努力坚持了下来,在使用jxta上也有一些心得,解决了一些问题,但是鉴于jxta过于庞大的代码规模,一直没能对底层的运行机制有个很透彻的了解,于是在寻找可用的基于jxta上的RMI实现的时候,很费了一番周折,累啊。。

先说说google到的几个rmi实现源码吧。。

首先找到的是jxta的一个子项目 peermi,该项目声称可以做到在jxta上实现rmi功能,而且提供了示例代码,貌似很有吸引力,但是文档出奇的少,只能看代码,这位程序员作者贯彻了这样一个原则,代码就是最好的文档。这句话并没有错,作者惜字如金,只是偶尔点缀性地提示一下类的基本情况,看过以后甚是不解,于是先搁着。。

另一个据说完成了rmi的实现是 jxta-jngi,翻看一遍,难度更大,作者寥寥数笔概括了一下这个庞大的工程,然后就是洋洋洒洒数万行代码了,呕血。。

最后迫于数天进展缓慢,只能重新嚼 peermi 这根骨头,下面详细介绍一下这个实现涉及的原理,使用方法。

从原理入手,把原理将清楚,代码也就好懂了,后面调试才更有章法。。

首先是RMI 的实现机理,由于rmi 的源代码是可以找到的,所以可以下载看看,但不是必须的,只要了解机理即可,我google了一篇文章,讲的特别好,是 Understanding Java RMI Internals(http://www.developer.com/article.php/3455311),应该是必读的,否则很多问题解决起来总不得要领,蹉跎岁月就不好了。我会在另外一篇文章里详细翻一翻这篇文章的内容,确实很好。当然在读这篇文章前,最好有java
RMI 的开发经验,这样更好理解。

我这里只做个大概的介绍吧,我们都知道一次 RMI 需要三个角色的配合,client,server,registry。client 需要和 server 通信,全凭 registry从中斡旋。client端持有继承了 java.rmi.Remote 的实现接口,server端持有 继承上述接口的实现类,然后通过 rmic程序或者程序中代码生成该实现类的 通信子类,也就是后缀带 stub 的类,这个类实际上包含了 client 远程调用 server 方法所需要的通信代码,所以registry不是必须的,只要这个
stub 存在就可以实现远程调用。这样只要一个类实现了远程调用,他完全可以作为 registry 的替代者(实际上 rmiregistry 就是充当了这样一个角色),所有的远程调用类都注册到这里,然后如果有lookup 查询,那么他负责将 bing 到自身的符合要求的stub类返回,peermi就是这样实现的,确实也不复杂。

在大致了解了 RMI 的机制以后,在具体实现完成前还有很多细节方面要照看到,确实挺磨人的。

peermi 的主页在这里 : https://peermi.dev.java.net/,里面有个执行代码的下载链接,还有svn的地址,都可以用。也可以去 http://sourceforge.net/projects/jxl/,peermi是jxl项目的子项目,里面提供了jxl包含的一些库的源代码,很有用的,都是调试失败近乎绝望以后最后的救命稻草,毕竟这个项目很多年没有维护了,jxta也更新到 2.5了,发生了很大的变化。宗旨是一定要耐心,细心,专心。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息