Modules(模块) JXTA模块是一个底层的JXTA抽象,他用来表示任何的代码块以及各种API。模块是被用来实现服务、消息传输以及JXTA可加载的代码内容。一般来说开发人员不需要关注那些被大部分程序所需要的初始化服务模块。模块抽象不局限于物理的代码是实现,也可以是一个java类或者java包,一个动态的DLL,一系列的XML消息或者一段脚本。而模块的实现主要是留给那些模块开发者来完成。例如,模块可以用来表示构建在不同平台下(Sun、Windows、Solaris)的一个网络服务。模块仅仅提供了一个抽象的概念,它可以方便的让一个节点去实例化一个功能或者一个服务。当一个节点加入一个点组,他们可能会发现一些新的行为,这些行为是需要他们进行实例化的。例如,当加入一个提供搜索服务的点组时,一般都需要这个节点去实例化这个搜索服务。而模块架构能够确保表现和广告平xx立性的行为,并且允许节点去描述和实例化任何一个服务行为。例如,一个节点可以去实例化同一个行为的Java或者C实现。 JXTA支持异构节点运行同一种服务的本质就是描述和发布这些平xx立性的能力。模块的广告机制是让JXTA节点去描述一个平台无关的服务行为。实际上,JXTA使用模块广告机制来对其本身提供的服务进行自描述。 模块抽象概念包含模块类、模块说明以及模块实现: 模块类:主要就是用来广告一种行为的存在。一个类的定义描述的是一个预期的行为和预期绑定的模块。每一个模块都用一个模块ID来标识。 模块说明:用来访问一个模块。包含用来访问和调用此模块所需要的各种信息。用一个服务来举例,此时模块说明可能包含的内容就是和此服务进行连接的管道信息。模块说明可以用来提供此模块类需要的模块功能实现。一个模块类可以对应多个模块说明,但每个说明都有一个{wy}的标识,模块说明标识包含了模块类标识。一个模块说明可以说明网络的兼容性。对于一个给定的模块说明,所有的实现必须使用相同的协议,并且保证是相互兼容的(即使用了不同的语言去实现)。 模块实现:是对一个模块说明的实现。每一个实现都包含了一个模块说明标识。 模块是被点组服务使用的,也可以被一个独立的服务使用。JXTA服务可以用一个模块抽象的概念去标识所有已经存在的服务(模块类),对应的说明以及服务的实现。每一个组件都有一个对应的广告,这些广告就可以被JXTA网络中其他的节点发现。 举例来说,JXTA的发现服务。他有一个模块类ID,同时它可以有多个模块说明,相互之间有可能是不兼容的。每一个说明都有一个说明ID,而每一个说明ID又对应了不同的实现。 总之,一个模块类对应多个模块说明,而每一个说明可以是不兼容的,但每一个说明的不同实现必须是兼容的。
Messages(消息) JXTA的各种程序以及各种服务都需要消息进行交互。JXTA的消息是节点之间数据交换的基本单元。每一个JXTA协议都规定成了一组消息,参与节点利用它们进行交换。通过端点服务、管道服务、JxtaSocket以及其他服务的方式,可以将消息在各个节点之间进行发送和传递。大部分的应用程序不需要直接使用端点服务和管道服务。大多使用的是JXTA socket和JxtaBiDiPipe的方式进行发送和接受消息。 JXTA协议就是一组特殊的交互消息。使用XML消息来定义协议可以允许不同种类的节点使用一个给定的协议。因为数据被标签标识,每一个节点都可以根据自身的能力和角色来实现相应的协议。如果一个节点只需要消息的子集,那么就可以从XML消息的剥离出一部分的标签,来完成任务即可。例如,一个高度受限的节点,本身处理能力也很有限,那么利用标签,就可以提取出感兴趣的,而忽略掉其他的内容。每一个软件平台的绑定模块都描述了如何将一个消息和本地数据结构(Java的对象或者C的结构体)进行相互转化。 JXTA协议规定了两种传输消息的表示方式:XML和二进制。这两种方式就是节点之间交换数据的主要方式。如何选择不同的传输格式,主要是根据底层的网络传输特性来决定。JXSE使用二进制的传输格式。 |