问题与承诺
Roman Vichr(rvichr@etensity.com),高级架构设计师,Etensity
Vivek Malhotra(vmalhot@yahoo.com),无线技术专家
随着普及运筹(或简称 PvC)扩展到各种设备(包括移动设备),我们正在研究各种技术以改善 PvC 服务和可靠性。这些技术中最有希望的一个就是 Jini。
Jini 为分布式计算环境中的网络互操作性问题提供了开放解决方案。这意味着 Jini 做到了以下几点:
查找和连接网络上的服务
从不可靠的部分(包括网络本身)创建可靠的服务集
处理非常大的或持续很长时间的网络
使服务的组件能够随时更改而不中断该服务。
Jini 网络技术构建于 Java 平台之上并提供向网络内的设备传递服务的基础结构,并且与连接性、线路协议和传输协议无关。
Jini 的具体细节
正如上面提到的那样,Jini 旨在提供自发的联网,答应用户将几乎任何支持 Java 的设备(也就是说,其操作系统支持 Java 应用程序的任何设备)直接插入到网络,并且网络的所有组件可以立即识别这个新的设备及其能力。例如,假如新设备是一台打印机,则 Jini 网络中的其它计算机将立即能够找到并使用这台打印机。
通过使用在网络中移动的对象,Jini 体系结构意味着整个网络(连同其中每个单独的服务)将可适应于变化。Jini 体系结构为客户机和服务在网络上相互找到对方并共同工作以完成任务指定了一种方法。服务提供程序为客户机提供可移植的基于 Java 技术的对象,这些对象能给予客户机对该服务的访问权。这种网络交互可使用任何类型的联网技术(如 RMI、CORBA 或 SOAP),因为客户机只看到基于 Java 的对象,而且所有随后发生的网络通信都限制在该对象以及发出该对象的服务。
当服务加入到具有支持 Jini 的服务和/或设备的网络中时,它会通过发布一个实现该服务 API 的 Java 对象来宣传自己。这个对象的实现能够以该服务选择的任何方式工作。客户机通过查找支持该 API 的对象来找到服务。当它得到服务的已发布对象时,它将下载与该服务通信所需的任何代码,从而学习如何通过这个 API 与特定的服务实现进行通信。实现该服务的程序员选择如何使用 RMI、CORBA、XML 或专用协议将 API 请求转换成线路上的位。
PvC 中 Jini 面临的挑战
现在让我们研究一下在无线设备中使用 Jini 所引发的问题,非凡是那些在移动设备中嵌入 Jini 技术所引起的问题。首先,Jini 技术要求设备安装了完整的 Java 2 标准版(J2SE)虚拟机(VM)? 缺少用于这些设备的标准无线联网技术更增加了这一困难。
为了帮助克服这些问题,已经创建了代理 Jini 体系结构。在代理 Jini 模型中,移动设备将代码传递到代理主机,代理主机随后执行正常的 Jini 连接活动,如代表该设备注册和使用服务。例如,打印机可以定位代理主机并传递代码以便为该打印机注册打印服务。类似地,无线数码相机会用同一代理主机作为定位打印机和打印图片的方法。
Jini 代理解决方案
Jini 代理项目定义了一种体系结构,它答应原本不能加入 Jini 网络的设备能够加入网络。大多数移动和无线设备都属于这一类,非凡是那些用于 PvC 的设备。它需要使用一个能够与 Jini 网络交互的对象来连接设备及其环境。为做到这一点,需创建一个对象(或代理)来代表设备。通过向代理主机提供 JAR 文件或 JAR 文件的位置,设备在其“本地”网络环境找到代理主机然后用它注册。代理主机实例化一个代理对象,该对象是从该 JAR 文件获得的。这个代理对象随即成为该设备在 Jini 网络上的代表。
无线连接不是因其稳定性而出名的。对于代理体系结构,不管连接建立或中断,代理对象都可以保持活动,维持关于当前会话的信息并代表 Jini 网络中的设备发挥积极作用。随着可以使用不同的 CDC 设备,也可以对特定于设备的代理编程。
下面是使用代理 Jini 体系结构的一些优点:
使用网关与不同的设备互连(因此适合于 PvC 计算)
用于旧设备的 Jini 代理主机;
本地高速缓存;
通过单个入口点连接到因特网(宽带广域网,对本地设备使用较低带宽);
用于本地设备的防火墙(高安全性);以及
被业界广泛采用(OSGi ? 请参阅 http://www.osgi.org ? Espial,Echelon)。
所有这些优点使 Jini 代理体系结构非常适合于 PvC 计算,其中该体系结构所针对的硬件或软件组件的共同属性是不能下载代码,其原因是设备的资源限制或网络连接性限制(比如在无线网络中)。以下是无线 PvC 中 Jini 代理体系结构的基本特点。
设备类型独立性:代理体系结构必须能够支持广泛的具有不同能力的硬件和软件组件。手机这样的设备不能直接使用 Jini,因为它不具备支持完整 J2SE 虚拟机的资源。
网络类型独立性:代理体系结构必须能够容纳不同种类的连接性技术。网络类型独立性包括同时在同一物理传输介质上支持不同的协议。
保留即插即用(plug-and-work):代理体系结构必须保留 Jini 技术的即插即用模型。Jini 体系结构包括发现、代码下载和分布式资源租用等概念。该原则假定存在这样一种机器,该机器既与轻量级设备又与 Jini 网络连接以克服诸如不能下载代码之类的限制。
从 Jini 派生的其它适合 PvC 的体系结构
下面是一些针对非凡实现需求对 Jini 规范进行定制所产生的最新 Jini 项目
Jump 项目(处理 P2P 联网)
Jump 项目的目标是为 P2P(或称为点到点通信)创建新的发现和解析方法。这需要根据规范使用“自然语言寻址”系统的名称服务器(已被 JXTA(请参阅参考资料)采纳),并需要提供代理专用地址的方法的应用程序网关。该项目没有取得解决方案就停止了,这可能是由于 JXTA 项目的引入。有关使用基于 J2ME 的 JXTA 的具体信息可以在其站点找到。
Edge Networking(答应设备进行通信而不管使用什么协议)
Edge Networking 答应将位于网络边缘的所有设备(不管在局域网/广域网上还是通过拨号/DSL 连接)连接在一起。Edge Networking 答应您轻松地使用自然语言发现这些设备,并且答应跨传统网络边界对这些设备进行入站连接。Edge Networking 独立于传输协议,这给予应用程序开发人员使用 JXTA、HTTP、SIP 或任何其它协议进行通信的灵活性。
Davis 项目(处理 JINI 体系结构中安全性的各个方面)
JINI Davis 项目主要关注对与安全性体系结构有关的几个方面的支持,包括非统一网络安全性(涉及到客户机、服务器、远程方法和参数的变化)和各种使用不同协议、算法、机制和策略的安全性实现。
Edge ZUCotto XPresso(商用 JINI 解决方案)
JINI 代理体系结构的这个商业版本旨在使即便是简单的设备也能利用和提供 Jini 服务,但当使用能够运行 Java 应用程序的设备(例如一部嵌入 Zucotto Xpresso Java 本机处理器的手机)时能获得最大的好处。
蓝牙(消除协议差异和设备识别)
蓝牙(Bluetooth)无线技术为移动设备发现其它邻近设备并与其通信提供了一种方法。随着新设备的加入以及已建立设备的移除,每台设备都始终可以被其四周的其它设备识别。这样的动态、临时联网是对 Jini 连接技术的极佳补充,它被设计成在符合 Jini 代理体系结构要求的情形下能很好地执行。
J2ME RMI Profile 的目标
J2ME 与 J2SE 1.2.x 或更高版本的互操作性
针对的设备:
最低 2.5M ROM
最低 1M RAM
TCP/IP 连接
J2ME CDC/Foundation Profile
基于 J2ME 的 JINI(通过将设备视为对象来克服限制)
当前,在 CLDC 无线设备中使用 Jini 存在限制。随着 Jini 代理项目的实现,Jini 正明确地向 J2ME 扩展。例如,想象使用您的 J2ME 设备参与在线交易。当您从一个地点移到另一个地点时,您会碰到不同的人并发现不同的事项(客户机)。所有这些交互都发生在您自己的交易对象上,该对象实际上是您与这个世界的接口 ? 一个从您的 J2ME 设备进行控制的对象。当交易执行时,会向您提供记帐服务,确认您何时开始了交易并据此开始对您收费。
将设备作为 Jini 网络中唯一对象的好处是扩大了交互作用语义集合。在门户模型中,从设备的角度来看设备登录和注册可能相同,但其它服务看到的是门户而不是单个对象。
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 发现协议;设备服务查找服务代理对象完全在本地客户机上运行。
JINI 与未来
如您所见,Jini 联网的所有非凡实现都试图提供满足特定解决方案需要的服务,尤其要解决那些与参与 Jini 网络交互的设备限制有关的问题。
当然,设备限制是移动世界一个非凡的问题。目前的标准不能实现完整的 Jini,因此在各种项目中建立了变通方法。Jini 体系结构的许多变体,从 Jini-RMI 实现、到满足代理 Jini 体系结构需求的蓝牙、以及 Davis 项目的安全性增强、还有 Jini 体系结构,告诉我们 Jini 不是昙花一现,而有可能证实是 PvC 一直需要的无线连接的要害。有了 Jini,我们在网络上支持各种设备以创建真正的用户社区的目标将能够实现。
参考资料
单击本文顶部或底部的讨论参与关于本文的论坛。
您可以在这里找到有关 JINI 联网技术的更多信息。
请访问 Jini 主页页面以获得关于 Jini 的一切信息。
请参阅 Roman 与 Vivek 编写的有关 PvC 体系结构的最新文章。
获取使用代理体系结构的项目的完整信息。
同样,获取关于 Jump 项目的所有信息。
获取有关 Reverse Port Address Translation(或简称 RPAT)的完整规范。
JXTA 项目成员们在继续增强这个极其重要的平台。
请参阅有关用于 JINI 安全性的 Davis 项目的完整规范。
请参阅展示 JINI / J2ME / RMI profile 的图表。
请查看另一个展示 Jini / J2ME / Java2 技术的表格。
请查找有关 Jini PretendServiceRegistrar 的规范。
请继续查找对于重构 Jini 查找服务的指南。
请参阅作为 J2ME 游戏平台运行的 Jini 代理。
获取有关 Jini Madison 项目的最新状况。
使 Pocket PC 代理设备可视化。
请阅读有关 Jini WirelessDevice 项目的规范。
JMatos 软件是一项用于嵌入式处理器的技术,它使 Jini 网络技术可用于 Java 2 Platform Micro Edition (J2ME)。在 PsiNaptic 站点下载副本。
另请参阅在 aJile 平台上可用的 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 与他联系。
Vivek Malhotra 是在美国华盛顿特区工作的无线技术专家。Vivek 有几年开发和实现无线应用程序的经验,并且曾在着重于研究无线行业的专家座谈会中发言。您可以通过 vmalhot@yahoo.com 与 Vivek 联系。