`
hxy-go
  • 浏览: 39279 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

JGROUPS源码分析之一:协议栈的创建(二)

阅读更多

/**

     * Returns an XmlConfigurator based on the provided properties string (if

     * possible).

     *

     * @param properties a string representing a system resource containing a

     *                   JGroups XML configuration, a string representing a URL

     *                   pointing to a JGroups ML configuration, or a string

     *                   representing a file name that contains a JGroups XML

     *                   configuration.

     *

     * @return an XmlConfigurator instance based on the provided properties

     *         string; <code>null</code> if the provided properties string does

     *         not point to an XML configuration.

     *

     * @throws IOException  if the provided properties string appears to be a

     *                      valid URL but is unreachable, or if the JGroups XML

     *                      configuration pointed to by the URL can not be

     *                      parsed.

     */

static XmlConfigurator getXmlConfigurator(String properties) throws IOException {

        XmlConfigurator returnValue=null;

        InputStream configStream=getConfigStream(properties);

 

        if (configStream != null) {

            checkJAXPAvailability();

            returnValue=XmlConfigurator.getInstance(configStream);

        }

 

        return returnValue;

    }

参数propertiesJCHANNEL构造函数传过来,一般为udp.xml.

getConfigStream返回一个配置输入流,

XmlConfigurator.getInstance(configStream),解析流并构造一个XmlConfigurator 的实例。
输入流调用过程:

public static InputStream getConfigStream(String properties) throws IOException {

        InputStream configStream = null;

        if (propertiesOverride != null)

            return getConfigStream(propertiesOverride);

 

        // Check to see if the properties string is the name of a file.

        try {

            configStream=new FileInputStream(properties);

        }

        catch(FileNotFoundException fnfe) {

            // the properties string is likely not a file

        }

        catch(AccessControlException access_ex) {

            // fixes http://jira.jboss.com/jira/browse/JGRP-94

        }

 

        // Check to see if the properties string is a URL.

        if(configStream == null) {

            try {

                configStream=new URL(properties).openStream();

            }

            catch (MalformedURLException mre) {

                // the properties string is not a URL

            }

        }

        // Commented so the caller is notified of this condition, but left in

        // the code for documentation purposes.

        //

        // catch (IOException ioe) {

            // the specified URL string was not reachable

        // }

 

        // Check to see if the properties string is the name of a resource,

        // e.g. udp.xml.

        if(configStream == null && properties.endsWith("xml")) {

            configStream=Util.getResourceAsStream(properties, ConfiguratorFactory.class);

        }

        return configStream;

    }


XmlConfigurator对象构造过程如下:

public static XmlConfigurator getInstance(InputStream stream) throws java.io.IOException {

        return parse(stream);

    }

解析流调用过程如下,参数streamXML配置内容

protected static XmlConfigurator parse(InputStream stream) throws java.io.IOException {

        /**

         * CAUTION: crappy code ahead ! I (bela) am not an XML expert, so the code below is pretty amateurish...

         * But it seems to work, and it is executed only on startup, so no perf loss on the critical path.

         * If somebody<span style

分享到:
评论

相关推荐

    JGROUPS集群框架源码分析之消息发送、处理、接收

    《JGROUPS集群框架源码分析之消息发送、处理、接收》 JGROUPS是一款强大的开源通信框架,专为构建高可用性、高容错性的分布式系统而设计。它提供了集群内的消息传递功能,允许节点间可靠地交换信息。本文将深入探讨...

    Java多播通讯框架 JGroups

    JGroups的灵活性在于它的协议栈,由多个协议层组成,每个协议层负责特定的功能。常见的协议包括: - **TP(Transport)**:基础传输层,如TCP或UDP。 - **PING**:用于节点发现。 - **MERGE2**:合并多个子集群。 -...

    jgroups-3.0.2

    JGroups使用灵活的协议栈,这也是JGroups最强大(the most powerful)的功能,它允许开发人员配置协议栈来适用于他们自己的应用需求和网络特征。这样做的好处在于,开发人员只需要关注他们使用到的协议。通过组合和...

    JGroups_集群.pdf

    JGroups是一个用于建立可靠的组播通信的工具包,它提供了灵活的、可定制的协议栈,以满足不同的需求。JGroups支持多种传输协议,包括UDP、TCP和JMS等。在JGroups中,消息传输可以保证可靠性,即消息在传输过程中不会...

    jgroups源代码

    1. **Protocol Stack**:协议栈是JGroups的核心,由一系列协议构成,每个协议负责特定的任务,如传输层、拥塞控制、选举等。 2. **Transport Layer**:如TCP、UDP,负责底层数据包的发送和接收。 3. **Membership**...

    Jgroups 教程

    配置文件定义了通信协议栈,包括传输层、可靠消息传递层等。 ##### 1.3 测试设置 为了验证JGroups是否正确安装和配置,可以通过运行内置的测试程序来检查。这些测试通常涉及网络连通性检查和基本的消息发送接收。 ...

    Jgroups中的UNICAST3协议中文翻译

    Jgroups 是一种基于 IP 多播的可靠的组播中间件,UNICAST3 协议是 Jgroups 中的一种单播协议,旨在保持单播和 UNICAST2 的正面特征,而修正负面特征。 UNICAST3 协议的主要特点是: * 提供正确的连接管理(使用...

    Jgroups-all.jar

    JGroup是当前被广泛使用的可靠组间通信的工具之一。例如OSCache以及JBossTreeCache都是用的是JGroup。 JGroup功能十分强大,通过配置各种参数就可以充分利用它所提供的各项功能。JGroup最大的特点就是支持协议栈的...

    JGroups群组通讯工具包 v5.3.4.zip

    6. **可扩展性**:JGroups的设计允许用户自定义协议栈,以满足特定的性能和可靠性需求。 7. **安全性**:提供了安全协议,如加密和认证,保护群组通信不被窃听或篡改。 在JGroups-jgroups-5.3.4.Final目录下,通常...

    jgroups-3.2

    其结构上设计灵活,提供了一种灵活兼容多种协议的协议栈,对于每个产品都有不同的可靠性需求。这种协议栈可以让用户定义的自己可靠性指标和性能指标。JGroups可以用来创建一个组,这个组中的成员可以给其他成员发送...

    jgroups

    JGroups支持多种传输层和协议栈,允许开发者构建复杂的群集通信模式。它提供了丰富的API,用于创建通道、发送接收消息以及处理群集视图变化通知等。 ##### 创建通道与加入群集 首先,需要创建一个JGroups通道,这...

    Ehcache通过Jgroups做集群

    3. **Protocol Stack**: Jgroups的协议栈,由多个协议层组成,每个层负责特定的任务,如心跳检测、消息排序或故障检测。合理的配置可以优化集群性能和稳定性。 配置完成后,将Ehcache与Jgroups集成,主要涉及以下...

    基于Java的实例源码-多播通讯框架 JGroups.zip

    2. **API使用**:研究源码中如何使用JGroups的API创建通道(Channel)、发送和接收消息,以及进行状态转移等操作。 3. **示例程序**:分析示例代码,了解如何初始化和管理JGroups集群,以及如何在实际应用中集成...

    Java多播通讯框架 JGroups源码

    1. **协议栈**:JGroups的通信机制基于一系列可配置的协议,形成所谓的协议栈。每个协议处理特定任务,如堆栈顶部的协议负责组成员发现,中间的协议处理消息传输,底部的协议处理网络层操作。理解这些协议的工作原理...

    jgroups官方帮助文档html格式打包2.X版本

    二、JGroups协议栈 JGroups的通信能力依赖于其灵活的协议栈机制。每个协议负责处理特定的通信任务,如组成员发现、消息传输、心跳检测等。2.X版本中的协议栈包括了诸如PING、FD、MERGE2、STABLE、UNICAST2、...

    JGroups-jdk.zip_jgroups

    《JGroups:构建高效可靠的组通信系统》 JGroups是一个用Java编程语言编写的开源库,专注于实现基于IP组播的高效、可配置的组通信协议栈。它为分布式系统提供了一种健壮且灵活的方式来实现节点间的通信,是构建大...

    基于java的开发源码-多播通讯框架 JGroups.zip

    7. **可扩展性**:JGroups设计灵活,可以通过添加或替换协议栈来适应不同的网络环境和需求。 在`belaban-JGroups-2b52899`这个版本中,包含了JGroups的源代码,开发者可以深入学习其内部实现,理解各种通信协议的...

    JavaEE源代码 jgroups-2.2.8

    JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 ...

    jgroups-chat:JGroups 聊天

    - **协议栈(Protocol Stack)**: JGroups 使用协议栈来处理不同的任务,如组成员发现、消息传输和故障检测等。每个协议负责特定的职责,形成一个高效的通信链路。 2. **JGroups 的关键功能** - **成员发现...

Global site tag (gtag.js) - Google Analytics