当服务加入到具有支持 Jini 的服务和/或设备的网络中时,它会通过发布一个实现该服务 API 的 Java 对象来宣传自己。这个对象的实现能够以该服务选择的任何方式工作。客户机通过查找支持该 API 的对象来找到服务。当它得到服务的已发布对象时,它将下载与该服务通信所需的任何代码,从而学习如何通过这个 API 与特定的服务实现进行通信。实现该服务的程序员选择如何使用 RMI、CORBA、xml 或专用协议将 API 请求转换成线路上的位。
JINI-RMI 方法(克服设备差异的另一种方法) 客户机 A 向查找服务(Lookup Service)发送一个多播请求;服务 B 以同样的方式向查找服务发送一个多播请求。查找服务用编组的查找服务代理对象响应客户机 A 和服务 B;服务 B 向查找服务发送一个 ServiceRegistrar.register() 请求。查找服务用注册响应。客户机 A 发出针对服务 B 的 ServiceRegistrar.lookup(),查找服务用服务 B 代理对象响应。客户机 A 直接将方法发送至服务 B,服务 B 从而对客户机 A 作出响应。
当在小设备上使用 Jini 时,驻留在小设备上的服务 B 就会面临一个问题,因为它不能解组查找服务代理对象。这会产生一个“假装的”查找服务与客户机 A 交互。客户机 A 调用 ServiceRegistrar.register(),该方法返回服务 B 代理对象。这意味着设备执行自己的查找服务以及所有 Jini 发现协议;设备服务查找服务代理对象完全在本地客户机上运行。
请阅读文章:Developing Web applications for Pervasive Computing Devices。
Artima.com 站点提供了关于 Jini 技术的有用参考资料。
请查看 Project JXTA 站点,以获取有关加入该项目、获取下载以及获取其它有用资料的信息。
关于作者 Roman Vichr 是 DDLabs(前身是 Etensity)的一名高级架构设计师,DDLabs 是一家电子商业和 EAI 咨询公司。在致力于客户机/服务器的数据库治理和 Web 应用程序开发九年时间后,他最近的爱好还包括将数据库扩展到无线技术中。他是搞光纤出身,最高学位是 1992 年在布拉格的 Institute of Chemical Technology 获得的这一领域的博士学位。可以通过 rvichr@etensity.com 与他联系。