Jini网络中的设备支持与环境搭建
1. Jini代理架构
在Jini网络中,对于无法满足CDC和KVM要求的设备,以及更小的设备和CDLC支持问题,Jini社区提出了Jini代理架构(Jini Surrogate Architecture)。
代理架构的概念简单且与Jini的代码移动和代理委托模型相契合。它降低了设备参与Jini网络的要求,当设备存在计算、资源或网络连接限制时,会提供一个代理。代理代表设备执行工作,而不是要求每个设备直接支持代码下载和Jini功能。
代理架构依赖于移动对象,但移动方向相反。设备将移动对象发送到代理主机,该对象在代理主机内运行,并在必要时通过私有协议与设备通信。例如,Palm Pilot或手机可以包含一段小代码,将其导出到代理主机,这段代码包含与设备通信所需的协议和服务信息。
代理主机为代理提供参与Jini网络的环境,管理代理的生命周期,包括加载、启动、停止和处理代理。代理主机负责实现特定互连的互连协议,其中发现协议用于设备和代理主机相互查找。
2. 代理的生命周期状态
代理规范定义了以下代理生命周期状态:
- 设备发现 :代理主机发现设备的存在(或设备发现代理主机的存在)。
- 代理检索 :定位代理的编译类文件并将其加载到代理主机,类文件是jar文件的一部分,jar文件可位于设备本身或其他位置。
- 激活 :实例化用Java编写的代理对象,并调用方法开始代理的执行。代理主机可为代理提供线程或整个JVM,代理之间以及与代理主机的其他元素有一定的隔离。
- 执行 :代理运行的稳定状态,执行后可完成其他Java程序能做的任何事情,如访问其他Jini服务或提供Jini服务。
- 停用 :停止代理。
- 处理 :处理与停用代理相关的对象。
3. 相关接口
- Surrogate接口 :定义了代理主机用于控制代理执行的activate和deactivate方法,还为代理提供对其执行环境的访问。实现该接口的类必须是公共类,且有一个无参数的公共构造函数。
package net.jini.surrogate;
public interface Surrogate {
void activate(HostContext hostContext, Object context) throws Exception;
void deactivate();
}
- GetCodebase接口 :提供一个方法,使代理能够设置其代码库。代理类可选择实现该接口,若实现,代理主机在调用代理的activate方法之前,会调用getCodebase方法并使用返回的URL设置代理的代码库,以覆盖默认代码库。
package net.jini.surrogate;
public interface GetCodebase {
java.net.URL[] getCodebase(HostContext hostContext, Object context) throws Exception;
}
- HostContext接口 :提供访问代理主机提供的执行环境的方法,实现该接口的对象作为参数传递给代理的activate方法和GetCodebase的getCodebase方法。
package net.jini.surrogate;
import net.jini.discovery.DiscoveryManagement;
public interface HostContext {
DiscoveryManagement getDiscoveryManager();
void cancelActivation();
SurrogateController newSurrogate(InputStream surrogate, Object context, DeactivationListener listener) throws SurrogateCreationException;
}
4. 麦迪逊实现
Sun Microsystems提供了符合代理架构规范和IP互连规范的代理主机和IP代理的参考实现,可在 www.jini.org 找到。代理规范可从 http://java.sun.com/products/jini/specs/ 下载,IP项目文档可在 http://developer.jini.org/exchange/projects/surrogate/IP/index.html 获取。
5. 设备性能提升与代理架构的作用
虽然降低设备加入Jini网络的处理要求是Jini设备支持的一个方面,但设备的处理能力可能会随着时间提升。根据摩尔定律,集成电路中的晶体管数量每18个月会翻倍,这一趋势在进入新世纪后仍然成立。例如,Compaq iPaq Pocket PC支持的Intel StrongArm SA1110微处理器,已具备32MB内存和200 + MIPS的性能,且有基于Java的操作系统支持在其上运行完整的J2SE。即使短期内设备无法满足Jini要求,代理架构也提供了另一种解决方案。
6. 网络现实与普适计算
新的网络现实是设备、计算机、汽车甚至电器正在形成一个新的“信息圈”,将我们所有人连接起来。传统的网络管理和管理方式无法跟上这种变化,而Jini等互补技术可以构建更智能的服务,减少管理工作,并管理连接复杂性。
互连设备已经改变了我们的通信和信息交换能力,网络连接设备的市场持续增长。在不到五年的时间里,我们见证了互联网连接世界、手机连接个人以及各种设备连接其间的一切。
7. 环境搭建所需内容
Jini完全用Java编写,至少需要JDK 1.2版本才能运行,建议使用最新版本,如JDK 1.3或JDK 1.4 beta。可从Java Developer Connection( http://developer.java.sun.com/developer/products/jini )下载Jini二进制文件和源代码,需注册并接受Sun社区源代码许可协议。
Jini技术入门套件v 1.1于2000年10月发布,截至编写时为当前版本,还提供了Jini技术入门套件v 1.2 Beta(2001年9月发布)。此外,还有Jini TCK(技术核心平台兼容性套件v 1.1B),但本书未涵盖。安装说明可在 http://developer.java.sun.com/developer/products/jini/installation.index.html 找到,Jini规范可从 http://java.sun.com/products/jini/specs/ 下载。
Jini技术入门套件经过测试的平台包括:
- Java 2 SDK,标准版,v1.3.1 for Solaris SPARC(TM)/x86,适用于最新FCS版本的Solaris 2.6、Solaris 2.7、Sparc上的Solaris 8和X86上的Solaris 8。
- Java 2 SDK,标准版,v1.3.1 for Microsoft Windows 95/98/ME/2000/NT 4.0,适用于Windows 2000(第2版)和NT 4.0(SP6)。
- Java 2 SDK,标准版,v1.3.1 - b24 for Linux(Intel x86),适用于RedHat 7.1。
8. 常见问题与陷阱
Jini需要正确配置和建立的基础设施与支持环境才能正常工作,对于新接触Jini的开发者,尤其是不熟悉RMI和网络基础知识的人来说,这个过程可能很困难。
- 网络配置 :Jini需要支持单播TCP和多播UDP,前者用于使用Jini技术的子系统(如Java远程方法调用RMI),两者都用于Jini发现过程。防火墙是使RMI和Jini正常运行的主要挑战,RMI使用直接和间接转发通过HTTP隧道将RMI和Java远程方法调用协议(JRMP)封装在HTTP消息中来绕过常见过滤。
- IP地址 :配置和启用Jini服务需要有效的IP地址,无效IP地址通常是由于主机配置错误或主机缺乏网络支持。可通过ping 127.0.0.1命令测试本地主机,然后尝试ping IP地址和计算机主机名,若有问题可检查网络表中的活动路由,如使用netstat -nr命令。
- 基础设施 :
- HTTP服务器 :Jini需要一种在网络上移动或下载代码的机制,如HTTP服务器。Jini发行版提供了一个简单的HTTP服务器,但可能会遇到一些问题,如代码库设置和管理问题、端口冲突错误、无法访问jar文件以及找不到服务启动器等。
- 远程方法调用守护程序(rmid) :RMI守护程序对部署Jini至关重要,默认情况下启动时会在启动目录下的日志目录中创建日志文件,用于保存重启的状态信息。若遇到服务激活问题,可能需要手动删除日志文件和日志目录。停止rmid可使用rmid -stop命令,若收到端口已使用的错误,需杀死rmid进程并重新启动。
- 安全管理器和策略文件 :运行rmid时必须设置安全策略,常见问题包括未设置安全策略或设置的策略过于严格。在Jini环境中运行的所有服务和客户端都必须设置安全管理器并定义适当的安全策略文件。
9. 故障排除资源
有许多资源可帮助解决Jini环境中的问题,可阅读Jini常见问题解答( http://www.sun.com/jini/faqs ),Jini邮件列表存档( http://archives.java.sun.com/archives/jini-users.html )包含大量可能遇到的问题信息,可使用错误消息作为搜索参数进行搜索。
Jini网络中的设备支持与环境搭建(续)
10. 代理架构的工作流程总结
为了更清晰地理解Jini代理架构的工作方式,我们可以通过以下流程图展示其主要步骤:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([设备存在限制]):::startend --> B{是否有代理}:::decision
B -->|是| C(提供代理):::process
B -->|否| D(设备无法参与):::process
C --> E(设备发送移动对象到代理主机):::process
E --> F(移动对象在代理主机运行):::process
F --> G(必要时与设备通信):::process
G --> H(代理代表设备参与Jini网络):::process
这个流程图展示了代理架构如何帮助受限设备参与Jini网络。当设备存在计算、资源或网络连接限制时,如果有合适的代理,设备会将移动对象发送到代理主机,由代理代表设备在Jini网络中工作。
11. 代理生命周期状态的详细分析
代理的生命周期状态对于理解其在Jini网络中的运行机制非常重要,下面我们通过表格详细分析每个状态:
| 生命周期状态 | 描述 | 关键操作 |
| — | — | — |
| 设备发现 | 代理主机和设备相互发现对方的存在 | 设备和代理主机使用特定协议进行发现 |
| 代理检索 | 定位并加载代理的编译类文件到代理主机 | 从设备或其他位置获取jar文件并加载 |
| 激活 | 实例化代理对象并开始执行 | 调用代理对象的activate方法 |
| 执行 | 代理处于稳定运行状态 | 完成各种Java程序可执行的任务 |
| 停用 | 停止代理的运行 | 调用代理对象的deactivate方法 |
| 处理 | 处理与停用代理相关的对象 | 释放资源,清理对象 |
12. 接口功能总结
前面介绍了几个重要的接口,下面通过列表总结它们的主要功能:
- Surrogate接口 :
- 定义了代理主机控制代理执行的方法,包括激活和停用。
- 为代理提供对执行环境的访问。
- GetCodebase接口 :
- 使代理能够设置其代码库。
- 可覆盖默认代码库设置。
- HostContext接口 :
- 提供访问代理主机执行环境的方法。
- 用于传递执行环境相关的上下文信息。
13. 环境搭建问题的解决思路
在环境搭建过程中遇到的各种问题,我们可以总结出以下解决思路:
- 网络配置问题 :
- 检查网络是否支持单播TCP和多播UDP。
- 分析防火墙的过滤规则,确定是否可以使用HTTP隧道解决问题。
- IP地址问题 :
- 使用ping命令测试本地主机和IP地址的连通性。
- 检查网络表中的活动路由,确保IP地址配置正确。
- 基础设施问题 :
- HTTP服务器 :
- 正确设置代码库,避免使用localhost。
- 检查端口是否被占用,调整端口配置。
- 确保jar文件和类文件的目录路径正确。
- 检查类路径,确保能找到服务启动器。
- rmid :
- 遇到服务激活问题时,手动删除日志文件和日志目录。
- 正确停止rmid,使用rmid -stop命令。
- 若端口被占用,杀死rmid进程并重新启动。
- 安全管理器和策略文件 :
- 确保设置了安全策略,且策略不过于严格。
- 为所有服务和客户端设置安全管理器和适当的安全策略文件。
14. 总结与展望
互连设备正在推动新一代的通信、信息交换和普适计算的发展,当前的网络和应用解决方案不能低估其互操作性的影响。Java语言为互操作性提供了平台,而Jini则在不同的Java环境之间提供了连接。
虽然设备的处理能力可能会随着时间提升以满足Jini要求,但在短期内代理架构为设备参与Jini网络提供了有效的解决方案。同时,Jini等技术可以应对新网络现实带来的挑战,构建更智能的服务,减少管理工作。
在未来,随着网络技术和设备性能的不断发展,Jini可能会在更多领域发挥重要作用,如智能家居、工业物联网等。我们需要持续关注其发展,并不断优化和改进相关的技术和应用。
超级会员免费看
1317

被折叠的 条评论
为什么被折叠?



