如果你从事过jini开发,你会知道jini客户端是不需要知道服务的位置的;它们简单地通过发现机制来获得一个代理以访问它们需要的服务.相反,在rmi(远程方法调用)中,你必须知道你想访问的服务器的url.在本文中,我们将向你展示怎样为rmi实现一个类jini的发现机制,这将使得一些客户端从必须知道rmi服务器url的麻烦中解脱出来.
本文主要是针对没有用过jini的rmi开发者.通过深入观察jini内部的运作,我们希望你能开始了解jini的机制有多么强大.我们当然不是希望你重新实现jini,但这篇文章能帮助你理解这些机制是怎样运作的.甚至可能帮助你说服你的经理或部门头头,该考虑将jini作为一项可行的分布式系统技术. 【程序编程相关:球无线局域网设备收入增长10%】
你可能首先会想,为什么要这么麻烦;为什么不干脆用jini?我们也同意这样的逻辑,特别是对新的系统来说.不管怎样,已经有许多基于rmi的系统存在,并且在jini被java开发的主流接受以前,我们仍然要提供更优雅的rmi解决方案.事实上,我们在这儿描述的工作,是这样的需求的结果:开发一项jini服务使它同时可以作为一个独立的rmi服务器运行,但使用类jini的发现机制. 【推荐阅读:和记黄埔与微软合作 用户3G手机将与MS】
【扩展信息:美议员针对黄色网站提案 建议统一管理域名】 我们不会太深入jini的发现机制,所以如果你对此不是很熟悉,我们建议你快速浏览一下bill venners的"locate services with the jini lookup service."( http://www.javaworld.com/javaworld/jw-02-2000/jw-02-jiniology.html) rmi基础与jini查找 在rmi中,客户端必须知道它所要连接的服务器的位置.rmi服务器的地址是uri的形式rmi://<主机>:<端口>/<服务名>,其中端口号是rmiregistry用来侦听请求的端口.例如:translator service
=(translator)naming.lookup("rmi://thehost/spanishtranslator"); 在jini中,客户端通过一个jini工具类来找到服务,比如servicediscoverymanager.在下面的例子中,我们创建了一个servicetemplate的实例,该实例包含一个类列表;在我们的例子中,是我们要匹配的类??translator.class: class [] classes=new class[]{translator.class}; servicetemplate tmpl=new servicetemplate(null,classes,null); servicediscoverymanager lmgr=new servicediscoverymanager(null,null); serviceitem serviceitem =lmgr.lookup(tmpl,null); translator service=serviceitem.service;... 下一页