这篇帖子重点讲NetPeerGroup的创建过程。其中包含两个问题:
- 缓存管理(Cm)是在哪里初始化的
- WorldPeerGroup是用哪个类初始化的
接上文,先看下面的代码
java 代码
-
- NetPeerGroupFactory factory = new NetPeerGroupFactory(config.getPlatformConfig(), instanceHome);
- netPeerGroup = factory.getInterface();
使用工厂模式实现的。在
NetPeerGroupFactory的构造函数中,首先创建了WorldPeerGroup(同样使用了工厂模式),随后使用创建了WorldPeerGroup的子对等组NetPeerGroup
java 代码
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- public NetPeerGroupFactory( ConfigParams config, URI storeHome ) throws PeerGroupException {
- WorldPeerGroupFactory world = new WorldPeerGroupFactory( config, storeHome );
- PeerGroup worldGroup = world.getInterface();
-
- NetGroupTunables tunables = new NetGroupTunables( ResourceBundle.getBundle("net.jxta.impl.config"), new NetGroupTunables() );
-
- try {
- net = newNetPeerGroup( worldGroup, tunables.id, tunables.name, tunables.desc, null );
- } finally {
- worldGroup.unref();
- }
- }
在WorldPeerGroupFactory的构造函数中,调用了getDefaultWorldPeerGroupClass方法通过配置文件net.jxta.impl.config.properties来获得WorldPeerGroup的类名称,并调用newWorldPeerGroup实例化该类。从配置文件net.jxta.impl.config.properties中,我们看到用于实例化WorldPeerGroup的类名为net.jxta.impl.peergroup.Platform,这样回答了开篇的第二个问题。
java 代码
-
-
-
-
-
-
-
-
-
-
-
-
- public WorldPeerGroupFactory( ConfigParams config, URI storeHome ) throws PeerGroupException {
-
- world = newWorldPeerGroup( getDefaultWorldPeerGroupClass(), config, storeHome );
- }
第一个问题,缓存管理初始化的具体地点位于Platform的直接父类StdPeerGroup的initFirst中,该方法在newWorldPeerGroup方法中被调用(该调用关系稍微复杂且有些微妙)。
java 代码
-
-
- try {
- cm = new Cm(getHomeThreadGroup(), getStoreHome(), getPeerGroupID().getUniqueValue().toString(), Cm.DEFAULT_GC_MAX_INTERVAL, false);
- } catch (Exception e) {
- if (Logging.SHOW_SEVERE && LOG.isLoggable(Level.SEVERE)) {
- LOG.log(Level.SEVERE, "Error during creation of local store", e);
- }
- throw new PeerGroupException("Error during creation of local store", e);
- }
通过Cm的构造函数,可以看到如果硬盘上已存在缓存的实例化文件,那么会直接从硬盘上读取,否则重新创建。这也是为什么如果我们只调用DiscoveryService.flushAdvertisement方法(该方法仅作用于内存结构,不改变硬盘上的持久化文件)将某个adv删除后,而当程序重新启动后,该adv依然起作用的原因了(除非将.cache目录全部删除)。
java 代码
- rootDir = new File(ROOTDIRBASE, areaName);
- rootDir = new File(rootDir.getAbsolutePath());
- if (!rootDir.exists()) {
-
- if (!rootDir.mkdirs()) {
- throw new RuntimeException("Cm cannot create directory " + rootDir);
- }
- }
分享到:
相关推荐
源码中包含了如何加载和解析这些配置的细节,这对于理解JXTA网络的初始化过程非常有帮助。 6. 故障排查与调试 通过分析JXTA Shell的源码,开发者可以学习到如何利用日志系统进行故障排查,以及如何通过命令行接口...
总结,JXTA平台的JAVA参考实现源代码分析涉及了对等组的概念、系统构建流程、主要类的功能以及代码层面的初始化细节。通过深入理解和分析这些内容,开发者能够更好地掌握JXTA平台的工作原理,为开发基于JXTA的P2P...
在myjxta2.5中,我们可以看到如何初始化P2P网络,创建并管理对等节点,以及节点间的发现、连接和通信过程。 2. **XML消息交换**:JXTA的核心之一是XML消息,用于在对等节点间交换信息。myjxta的源码展示了如何构建...
JXTA的设计理念是通过一系列标准化的接口和服务来简化P2P应用的开发过程,使开发者能够更容易地创建去中心化的网络应用。本文将详细介绍如何在JXTA框架下实现媒体数据传输。 #### JXTA的特点与优势 1. **平台无关...
1. **初始化JXTA环境**:首先,需要设置JXTA配置文件,定义网络参数如网络ID、成员身份等,并启动JXTA运行时环境。 2. **创建Rendezvous服务**:Rendezvous服务是JXTA网络的关键组件,它负责维持网络的连通性和路由...
初始化包括配置JXTA环境,创建并启动网络接口。发布服务意味着将节点的能力或资源广播到网络中,而发现服务则让节点能够找到网络中的其他节点和服务。 **节点连接** 是节点间通信的关键。JXTA提供了多种连接方式,...
系统启动时,首先进行初始化,包括检查设备的WiFi连接状态、初始化缓存、建立JXTA网络连接,并搜索集合点获取节点列表。一旦初始化完成,节点就可以通过JXTA的管道服务与其他节点进行通信,请求和发送资源文件。 ...
整个拍卖系统的流程图详细描绘了食客和餐厅之间通过JXTA平台进行通信的步骤,从初始化、发现和加入对等组,到通过管道发送和接收消息,最终实现竞标过程。该流程展示了JXTA平台在P2P网络中的应用,凸显了其对于...
初学者通过这些代码,能够了解JXTA的基本概念和用法,如节点的初始化、对等组的加入、消息的发送与接收等。 在JXTA中,每个运行JXTA的设备被称为“对等方”或“节点”,它们通过网络相互连接,形成一个对等网络。在...
- **组初始化与显示**:选中特定组时,自动初始化并展示其子通告,遵循统一的显示规则,提高用户体验。 ##### 3. 实现细节 实现过程中,设计了三个关键类:AdvertisemenTreeCellRenderer类负责根据节点存储数据的...
1. **初始化网络**:使用JXTA提供的对等体创建和连接功能,初始化网络中的各个节点。 2. **发布拍卖信息**:餐馆作为信息发布者,通过JXTA的服务层发布拍卖信息,这些信息可以通过对等体检索协议被其他节点检索到。 ...
- 初始化P2P网络并自动搜索P2P集合点。 - 读取集合点节点列表。 - 读取播放列表。 - 通过播放列表种子服务器搜索片源种子。 - 在集合点中搜索片源种子。 - 连接片源种子节点,请求传输。 - 数据缓冲完成后...
解压后,开发者可以查看源代码,了解其内部工作原理,包括如何初始化P2P网络,如何处理节点发现,以及如何建立和维护TCP连接等。 在实际应用中,使用P2P库的Android应用可能涉及以下关键知识点: 1. **多线程和异步...
- **系统启动模块**:负责初始化系统,包括加载配置文件、建立网络连接等。 - **资源共享模块**:实现文件上传和下载的功能,支持用户之间的资源共享。 - **资源搜索模块**:允许用户搜索网络上的共享资源。 - *...
9. **实验总结**:实验帮助理解了CORBA的基本概念,包括ORB的初始化、对象的注册与查找,以及客户端与服务器之间的通信流程。同时,也实践了基于Java IDL的CORBA编程,增强了对分布式系统开发的理解。 通过这个实验...
例如,BitTorrent使用Tracker服务器进行初始化,然后节点之间通过Tracker获取其他对等节点的信息,进行文件的分块下载和上传。 4. **散列表和分布式哈希表(DHT)**:在P2P网络中,节点之间的联系依赖于有效的寻址...
// 初始化连接工厂 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory( ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "failover:(tcp://10.42.220.72:61617,tcp:...