站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题JXTA Platform JAVA参考实现源代码分析系列文章(1)

JXTA Platform JAVA参考实现源代码分析系列文章(1)

摘要: JXTA Platform JAVA参考实现源代码分析系列文章(1)
1.本文目标

本文是以对JXTA的基本概念有一定理解,并且想进一步挖掘其实现手段的读者为对象的,因此,将不重复介绍JXTA的一些基本知识。

本文的主要目标是分析初始对等系统是如何构建的,及为什么这么构建(How and Why)。为了确保作者的思路集中使目标得以实现,在此基础上的各种服务,及端点协议的实现只能作为一种抽象的概念来阐述。另外,平台实现时所采用的设计模式只会提及名称,而不会去分析。该系列文章的其他章节将会把他们分为不同的目标逐个阐述。

2.JXTA系统的构建入口

2.1 概念分析

JXTA的最核心的概念之一就是对等组,它是共享资源和服务的对等机的集合。同样java参考实现中,就是以对等组为起始的服务平台。然后,在此基础上形成了对等机,以及对等发现,对等解析,对等管道,对等成员资格,对等访问,等协议。

JXTA协议中定义了三个重要的对等组:Null WorldGroup NetGroup

Null 表示为空
WorldGroup 系统级起始对等组,任何其他对等组(null 除外)均是其后代
NetGroup 用户级的缺省对等组,其parentGroup就是WorldGroup
由于我们现在可能还没有实例化的概念,所以暂时均不分析协议中为什么如此定义,及其功能划分的依据。在随后的类图及代码分析中,就自然会明白其中韵味。

2.2 代码分析

以下是一个对等点构建JXTA对等系统的初始代码。

PeerGroup netPeergroup = PeerGroupFactory.newNetPeerGroup();
参考实现中,构建整个系统的框架,采用的是factory模式。这里我们获得的netpeerGroup就是NetGroup。到目前为止,系统已经构建了WorldGroup,以及建立在其上面的各种服务。并且为用户缺省的建立了一个对等组NetGroup。本文的目标就是让我们清楚JXTA系统是如何初始化的,并结合JXTA协议分析这种实现方法的优缺点。

接下来的任务是,首先让我们对JXTA的参考实现中的对等平台的主要类的职责有个整体的概念,然后逐步跟踪各个服务,及端点协议的构建。

3.对等平台的主要类的分析

平台类的类图见下图:注释里简要的描述了个各类或接口的用途。


IMG http://www-900.cn.ibm.com/developerWorks/cn/java/l-jxtaref/1.jpg[/IMG]
从整体上,由类的繁杂的继承层次。可以了解到构建完的JXTA对等组及其服务,有不同层次上的需求,例如,PlatForm是系统级的,构建了属于底层平台的PeerGroup: WorldGroup。而StdPeerGroup则是一般级别的标准对等组,例如,前文中

PeerGroup netPeergroup = PeerGroupFactory.newNetPeerGroup();
返回的就是该级别的对等组。虽然这里采用Factory method模式,让用户获得的是外表一致的PeerGroup接口,但提供的用户仍然是该级别的类服务。

4.深入到代码层

初始化对等组及其服务的序列图如下所示:

PeerGroup netPeergroup = PeerGroupFactory.newNetPeerGroup();

IMG http://www-900.cn.ibm.com/developerWorks/cn/java/l-jxtaref/2.jpg[/IMG]
从图可以看出,JXTA系统的构件分两步完成:1.构建对等平台 2.构建标准对等组。第一步是基础,1.1.1 init() 和1.2.1 init()均比较复杂,以下将进一步分析。

4.1 对等平台的构建

流程描述:

从用户处获得平台的基本配置:Configurator
构建ModuleImplAdvertisement
在此基础上,构建了:PeerAdvertisement和PeerGroupAdvertisement
初始化ModuleImplAdvertisement的端点服务init()
初始化ModuleImplAdvertisement的端点协议init()
初始化ModuleImplAdvertisement的其他服务init()
各项服务依次启动startApp()
各项端点协议依次启动startApp()
以上大致描述了其过程,具体类的调用关系请看序列图。其中配置文件PlatformConfig,和三个广告PeerAdvertisement, PeerGroupAdvertisement, ModuleImplAdvertisement,描述了整个平台的配置。其中ModuleImplAdvertisement包含了对等组应该提供的服务(service),端点协议(protocol)及应用(application)。从XML广告中,可以获得标签为MSID(在PeerGroup以常量形式定义)和Code的元素,这样可以找到具体实现类的地址及初始化参数。以下是ModuleImplAdvertisement中元素的内容:

七个服务:

net.jxta.impl.rendezvous.RendezVousServiceImpl
net.jxta.impl.endpoint.EndpointServiceImpl
net.jxta.impl.membership.NullMembershipService
net.jxta.impl.discovery.DiscoveryServiceImpl
net.jxta.impl.peer.PeerInfoServiceImpl
net.jxta.impl.pipe.PipeServiceImpl
net.jxta.impl.resolver.ResolverServiceImpl
四个端点协议:

net.jxta.impl.endpoint.tls.TlsTransport
net.jxta.impl.endpoint.tcp.TcpTransport
net.jxta.impl.endpoint.EndpointRouter
net.jxta.impl.endpoint.servlethttp.ServletHttpTransport
一个应用:

net.jxta.impl.peergroup.StartNetPeerGroup

IMG http://www-900.cn.ibm.com/developerWorks/cn/java/l-jxtaref/3.jpg[/IMG]
内容:

本文目标
JXTA系统的构建入口
对等平台的主要类的分析
深入到代码层
构建过程的再分析
参考资料
关于作者
后记


Also in the Java zone:

教学
工具与产品
代码与组件
所有文章
实用技巧




Project JXTA 初始对等系统的构建
潘大为 (ppalas@sina.com)
华中科技大学计算机学院2000级硕士研究生
2002 年 6 月

1.本文目标

本文是以对JXTA的基本概念有一定理解,并且想进一步挖掘其实现手段的读者为对象的,因此,将不重复介绍JXTA的一些基本知识。

本文的主要目标是分析初始对等系统是如何构建的,及为什么这么构建(How and Why)。为了确保作者的思路集中使目标得以实现,在此基础上的各种服务,及端点协议的实现只能作为一种抽象的概念来阐述。另外,平台实现时所采用的设计模式只会提及名称,而不会去分析。该系列文章的其他章节将会把他们分为不同的目标逐个阐述。

2.JXTA系统的构建入口

2.1 概念分析

JXTA的最核心的概念之一就是对等组,它是共享资源和服务的对等机的集合。同样java参考实现中,就是以对等组为起始的服务平台。然后,在此基础上形成了对等机,以及对等发现,对等解析,对等管道,对等成员资格,对等访问,等协议。

JXTA协议中定义了三个重要的对等组:Null WorldGroup NetGroup

Null 表示为空
WorldGroup 系统级起始对等组,任何其他对等组(null 除外)均是其后代
NetGroup 用户级的缺省对等组,其parentGroup就是WorldGroup
由于我们现在可能还没有实例化的概念,所以暂时均不分析协议中为什么如此定义,及其功能划分的依据。在随后的类图及代码分析中,就自然会明白其中韵味。

2.2 代码分析

以下是一个对等点构建JXTA对等系统的初始代码。

PeerGroup netPeergroup = PeerGroupFactory.newNetPeerGroup();
参考实现中,构建整个系统的框架,采用的是factory模式。这里我们获得的netpeerGroup就是NetGroup。到目前为止,系统已经构建了WorldGroup,以及建立在其上面的各种服务。并且为用户缺省的建立了一个对等组NetGroup。本文的目标就是让我们清楚JXTA系统是如何初始化的,并结合JXTA协议分析这种实现方法的优缺点。

接下来的任务是,首先让我们对JXTA的参考实现中的对等平台的主要类的职责有个整体的概念,然后逐步跟踪各个服务,及端点协议的构建。

3.对等平台的主要类的分析

平台类的类图见下图:注释里简要的描述了个各类或接口的用途。




从整体上,由类的繁杂的继承层次。可以了解到构建完的JXTA对等组及其服务,有不同层次上的需求,例如,PlatForm是系统级的,构建了属于底层平台的PeerGroup: WorldGroup。而StdPeerGroup则是一般级别的标准对等组,例如,前文中

PeerGroup netPeergroup = PeerGroupFactory.newNetPeerGroup();
返回的就是该级别的对等组。虽然这里采用Factory method模式,让用户获得的是外表一致的PeerGroup接口,但提供的用户仍然是该级别的类服务。

4.深入到代码层

初始化对等组及其服务的序列图如下所示:

PeerGroup netPeergroup = PeerGroupFactory.newNetPeerGroup();



从图可以看出,JXTA系统的构件分两步完成:1.构建对等平台 2.构建标准对等组。第一步是基础,1.1.1 init() 和1.2.1 init()均比较复杂,以下将进一步分析。

4.1 对等平台的构建

流程描述:

从用户处获得平台的基本配置:Configurator
构建ModuleImplAdvertisement
在此基础上,构建了:PeerAdvertisement和PeerGroupAdvertisement
初始化ModuleImplAdvertisement的端点服务init()
初始化ModuleImplAdvertisement的端点协议init()
初始化ModuleImplAdvertisement的其他服务init()
各项服务依次启动startApp()
各项端点协议依次启动startApp()
以上大致描述了其过程,具体类的调用关系请看序列图。其中配置文件PlatformConfig,和三个广告PeerAdvertisement, PeerGroupAdvertisement, ModuleImplAdvertisement,描述了整个平台的配置。其中ModuleImplAdvertisement包含了对等组应该提供的服务(service),端点协议(protocol)及应用(application)。从XML广告中,可以获得标签为MSID(在PeerGroup以常量形式定义)和Code的元素,这样可以找到具体实现类的地址及初始化参数。以下是ModuleImplAdvertisement中元素的内容:

七个服务:

net.jxta.impl.rendezvous.RendezVousServiceImpl
net.jxta.impl.endpoint.EndpointServiceImpl
net.jxta.impl.membership.NullMembershipService
net.jxta.impl.discovery.DiscoveryServiceImpl
net.jxta.impl.peer.PeerInfoServiceImpl
net.jxta.impl.pipe.PipeServiceImpl
net.jxta.impl.resolver.ResolverServiceImpl
四个端点协议:

net.jxta.impl.endpoint.tls.TlsTransport
net.jxta.impl.endpoint.tcp.TcpTransport
net.jxta.impl.endpoint.EndpointRouter
net.jxta.impl.endpoint.servlethttp.ServletHttpTransport
一个应用:

net.jxta.impl.peergroup.StartNetPeerGroup



4.2 标准对等组的构建

入口程序:pg就是以上所建立的平台对等组。

PeerGroup newPg = pg.newGroup
(pgId,netPgImplAdv,"NetPeerGroup","NetPeerGroup by default");
事件的序列图与平台的构建类似,不同的是:

Init()的起点是StdPeerGroup,
Init()参数中parentgroup是对等平台,而对等平台的parentgroup=null;
造成的效果是:

ModuleImplAdvertisement中的应用为: net.jxta.impl.shell.bin.Shell.Shell
标准对等组不负责端点协议的维护。也就是说,通过端点服务,可以保证对具体的peergroup提供透明的端点协议。
5.构建过程的再分析

现在,本文的目标之一:对等平台是如何构建(how)的已然清楚,另外一个目标为什么如此构建(why)可能有了一定的答案,但仍然不知其所以然。下面将以问答的方式试着分析这个论题。

5.1 为什么分两个层次构建这个平台?

对等平台的目标是为对等点提供交互的方便,这种交互可能包括信息交互,也有可能是计算能量,存储能量的交互等等。为了达到互操作性,平台无关性和普遍存在性,Project JXTA架构了其体系结构如下:


IMG http://www-900.cn.ibm.com/developerWorks/cn/java/l-jxtaref/4.jpg[/IMG]对等平台(sub-project Platform)的定位是在JXTA Core的实现上,所以它只包含了最核心的服务。由其在图中的位置,可以看出其必须完成两个目标:

系统内部要能够封装好各种服务,对外保证服务的透明性。划分好哪些是属于对等组的特性(例如,对等发现服务),哪些是属于对等机的特性(例如,各个对等机之间的网络连接协议)是其关键。对等机是网络上唯一的,而对等组提供了交互的方便,一个对等机可以属于n个对等组。
所提供的各个服务必须具有可扩展性。只有这样,才可能在上面架构应用级的服务。
有以上目标,platform必须提供两个层次的对等组:对等机级的和对等组级的。这就是WorldGroup和NetGroup的概念。NetGroup的目标之一就是利于应用程序扩展的。

5.2 为什么类的继承层次如此多?

本文没有对对等服务和对等端点协议的实现给予详细分析,现在大体的分析PlatForm的实现框架,其包括两个部分:协议的定义(主要是各种接口)和参考实现(具体的实现类)。这与整个Project JXTA的思路相当一致,其包含协议的定义和各种平台各种语言的参考实现。仅凭这一点,我们可以体会到这种框架的可扩展性相当好。类图中PeerGroup以上均属于协议的定义。

  端点协议实现了接口Module
  对等服务实现了接口Service
  对等组实现了接口 PeerGroup

由这三个接口的继承关系,我们就很清晰的体会到了对等组,对等服务,端点协议的包容关系以及接口划分层次的目的。

参考文献

官方的 Jxta 社区位于 Jxta.org。您可在这里找到最新的规范、文档、源代码和二进制文件
在 developerWorks Java 技术专区查找更多 Java 参考资料
Early Adopter JXTA 作者 Sing Li
关于作者:

潘大为,华中科技大学计算机学院2000级硕士研究生,研究方向网络对等计算,网络信息系统。 Email: ppalas@sina.com


↑返回目录
前一篇: java设计模式之Factory
后一篇: java中不同的工程怎么样才能共享同一块内存?