`
cuizhenfu#gmail.com
  • 浏览: 67535 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Jxta初始化过程(二)

阅读更多
这篇帖子重点讲NetPeerGroup的创建过程。其中包含两个问题:
  1. 缓存管理(Cm)是在哪里初始化的
  2. WorldPeerGroup是用哪个类初始化的
接上文,先看下面的代码
java 代码
 
  1. // create, and Start the default jxta NetPeerGroup  
  2. NetPeerGroupFactory factory = new NetPeerGroupFactory(config.getPlatformConfig(), instanceHome);  
  3. netPeerGroup = factory.getInterface();  
使用工厂模式实现的。在NetPeerGroupFactory的构造函数中,首先创建了WorldPeerGroup(同样使用了工厂模式),随后使用创建了WorldPeerGroup的子对等组NetPeerGroup
java 代码
  1. /** 
  2.  *  Constructs a Net Peer Group and the World Peer Group using the 
  3.  *  configuration specified by the provided ConfigParams and using the 
  4.  *  specified storeHome location for persistence. The resulting Net Peer  
  5.  *  Group instance will use the default ID, Name and Description. 
  6.  * 
  7.  *  @param config The configuration to use for the newly created World Peer 
  8.  *  Group and Net Peer Groups. 
  9.  *  @param storeHome The optional location that the World Peer Group, the 
  10.  *  Net Peer Group and its' services should use for storing persistent and 
  11.  *  transient information. May be {@code null} if the World Peer Group is  
  12.  *  not provided a persistent store (though this not currently supported). 
  13.  *  @throws PeerGroupException Thrown for problems constructing the Net Peer 
  14.  *  Group. 
  15.  **/  
  16. public NetPeerGroupFactory( ConfigParams config, URI storeHome ) throws PeerGroupException {  
  17.     WorldPeerGroupFactory world = new WorldPeerGroupFactory( config, storeHome );  
  18.     PeerGroup worldGroup = world.getInterface();  
  19.       
  20.     NetGroupTunables tunables = new NetGroupTunables( ResourceBundle.getBundle("net.jxta.impl.config"), new NetGroupTunables() );  
  21.       
  22.     try {  
  23.         net = newNetPeerGroup( worldGroup, tunables.id, tunables.name, tunables.desc, null );  
  24.     } finally {  
  25.         worldGroup.unref();  
  26.     }  
  27. }  
在WorldPeerGroupFactory的构造函数中,调用了getDefaultWorldPeerGroupClass方法通过配置文件net.jxta.impl.config.properties来获得WorldPeerGroup的类名称,并调用newWorldPeerGroup实例化该类。从配置文件
net.jxta.impl.config.properties中,我们看到用于实例化WorldPeerGroup的类名为net.jxta.impl.peergroup.Platform,这样回答了开篇的第二个问题。
java 代码
  1. /** 
  2.  *  Constructs the World Peer Group using the specified configuration and  
  3.  *  using the specified storeHome location for persistence. 
  4.  * 
  5.  *  @param config The configuration to use for the World Peer Group. 
  6.  *  @param storeHome The optional location that the World Peer Group and its' 
  7.  *  services should use for storing persistent and transient information. 
  8.  *  May be null if the World Peer Group is not provided a 
  9.  *  persistent store (though this not currently supported). 
  10.  *  @throws PeerGroupException Thrown for problems constructing the World 
  11.  *  Peer Group. 
  12.  */  
  13. public WorldPeerGroupFactory( ConfigParams config, URI storeHome ) throws PeerGroupException {  
  14.       
  15.     world = newWorldPeerGroup( getDefaultWorldPeerGroupClass(), config, storeHome );  
  16. }  
第一个问题,缓存管理初始化的具体地点位于Platform的直接父类StdPeerGroup的initFirst中,该方法在
newWorldPeerGroup方法中被调用(该调用关系稍微复杂且有些微妙)。
java 代码
 
  1. // initialize cm before starting services. Do not refer to assignedID, as it could be  
  2. // null, in which case the group ID has been generated automatically by super.initFirst()  
  3. try {  
  4.     cm = new Cm(getHomeThreadGroup(), getStoreHome(), getPeerGroupID().getUniqueValue().toString(), Cm.DEFAULT_GC_MAX_INTERVAL, false);  
  5. catch (Exception e) {  
  6.     if (Logging.SHOW_SEVERE && LOG.isLoggable(Level.SEVERE)) {  
  7.         LOG.log(Level.SEVERE, "Error during creation of local store", e);  
  8.     }  
  9.     throw new PeerGroupException("Error during creation of local store", e);  
  10. }  
通过Cm的构造函数,可以看到如果硬盘上已存在缓存的实例化文件,那么会直接从硬盘上读取,否则重新创建。这也是为什么如果我们只调用DiscoveryService.flushAdvertisement方法(该方法仅作用于内存结构,不改变硬盘上的持久化文件)将某个adv删除后,而当程序重新启动后,该adv依然起作用的原因了(除非将.cache目录全部删除)。
java 代码
 
  1. rootDir = new File(ROOTDIRBASE, areaName);  
  2. rootDir = new File(rootDir.getAbsolutePath());  
  3. if (!rootDir.exists()) {  
  4.     // We need to create the directory  
  5.     if (!rootDir.mkdirs()) {  
  6.         throw new RuntimeException("Cm cannot create directory " + rootDir);  
  7.     }  
  8. }  

分享到:
评论

相关推荐

    jxta-shell-src-2.3.4.rar_JXTA Shell 2.5_r_java shell_jxta_jxta s

    源码中包含了如何加载和解析这些配置的细节,这对于理解JXTA网络的初始化过程非常有帮助。 6. 故障排查与调试 通过分析JXTA Shell的源码,开发者可以学习到如何利用日志系统进行故障排查,以及如何通过命令行接口...

    JXTA Platform JAVA参考实现源代码分析

    总结,JXTA平台的JAVA参考实现源代码分析涉及了对等组的概念、系统构建流程、主要类的功能以及代码层面的初始化细节。通过深入理解和分析这些内容,开发者能够更好地掌握JXTA平台的工作原理,为开发基于JXTA的P2P...

    jxta-myjxta-src-2.5.zip_2.5 myjxta_jxta 2.5_jxta-myjxta-2.5.zip_

    在myjxta2.5中,我们可以看到如何初始化P2P网络,创建并管理对等节点,以及节点间的发现、连接和通信过程。 2. **XML消息交换**:JXTA的核心之一是XML消息,用于在对等节点间交换信息。myjxta的源码展示了如何构建...

    JXTA下的媒体数据传输

    JXTA的设计理念是通过一系列标准化的接口和服务来简化P2P应用的开发过程,使开发者能够更容易地创建去中心化的网络应用。本文将详细介绍如何在JXTA框架下实现媒体数据传输。 #### JXTA的特点与优势 1. **平台无关...

    JXTA-TCP-Listening.doc

    1. **初始化JXTA环境**:首先,需要设置JXTA配置文件,定义网络参数如网络ID、成员身份等,并启动JXTA运行时环境。 2. **创建Rendezvous服务**:Rendezvous服务是JXTA网络的关键组件,它负责维持网络的连通性和路由...

    PracticalJXTA2.6_Examples

    初始化包括配置JXTA环境,创建并启动网络接口。发布服务意味着将节点的能力或资源广播到网络中,而发现服务则让节点能够找到网络中的其他节点和服务。 **节点连接** 是节点间通信的关键。JXTA提供了多种连接方式,...

    一种基于Android和JXTA协议模型的无线D2D通信技术

    系统启动时,首先进行初始化,包括检查设备的WiFi连接状态、初始化缓存、建立JXTA网络连接,并搜索集合点获取节点列表。一旦初始化完成,节点就可以通过JXTA的管道服务与其他节点进行通信,请求和发送资源文件。 ...

    基于JXTA的P2P实例的研究与实现

    整个拍卖系统的流程图详细描绘了食客和餐厅之间通过JXTA平台进行通信的步骤,从初始化、发现和加入对等组,到通过管道发送和接收消息,最终实现竞标过程。该流程展示了JXTA平台在P2P网络中的应用,凸显了其对于...

    jxse初学者代码

    初学者通过这些代码,能够了解JXTA的基本概念和用法,如节点的初始化、对等组的加入、消息的发送与接收等。 在JXTA中,每个运行JXTA的设备被称为“对等方”或“节点”,它们通过网络相互连接,形成一个对等网络。在...

    \p2p\Java技术在P2P环境下的应用

    - **组初始化与显示**:选中特定组时,自动初始化并展示其子通告,遵循统一的显示规则,提高用户体验。 ##### 3. 实现细节 实现过程中,设计了三个关键类:AdvertisemenTreeCellRenderer类负责根据节点存储数据的...

    利用P2P实现服务

    1. **初始化网络**:使用JXTA提供的对等体创建和连接功能,初始化网络中的各个节点。 2. **发布拍卖信息**:餐馆作为信息发布者,通过JXTA的服务层发布拍卖信息,这些信息可以通过对等体检索协议被其他节点检索到。 ...

    基于Android的P2P手机高清视频在线点播系统

    - 初始化P2P网络并自动搜索P2P集合点。 - 读取集合点节点列表。 - 读取播放列表。 - 通过播放列表种子服务器搜索片源种子。 - 在集合点中搜索片源种子。 - 连接片源种子节点,请求传输。 - 数据缓冲完成后...

    Android-一个用于Android的P2P库

    解压后,开发者可以查看源代码,了解其内部工作原理,包括如何初始化P2P网络,如何处理节点发现,以及如何建立和维护TCP连接等。 在实际应用中,使用P2P库的Android应用可能涉及以下关键知识点: 1. **多线程和异步...

    局域网P2P资源共享软件的设计与实现

    - **系统启动模块**:负责初始化系统,包括加载配置文件、建立网络连接等。 - **资源共享模块**:实现文件上传和下载的功能,支持用户之间的资源共享。 - **资源搜索模块**:允许用户搜索网络上的共享资源。 - *...

    分布式实验报告CORBA.docx

    9. **实验总结**:实验帮助理解了CORBA的基本概念,包括ORB的初始化、对象的注册与查找,以及客户端与服务器之间的通信流程。同时,也实践了基于Java IDL的CORBA编程,增强了对分布式系统开发的理解。 通过这个实验...

    Java P2P技术内幕

    例如,BitTorrent使用Tracker服务器进行初始化,然后节点之间通过Tracker获取其他对等节点的信息,进行文件的分块下载和上传。 4. **散列表和分布式哈希表(DHT)**:在P2P网络中,节点之间的联系依赖于有效的寻址...

    消息事件说明文档

    // 初始化连接工厂 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory( ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "failover:(tcp://10.42.220.72:61617,tcp:...

Global site tag (gtag.js) - Google Analytics