⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 automaticconfigurator.java

📁 jxta_src_2.41b jxta 2.41b 最新版源码 from www.jxta.org
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 *  Copyright (c) 2001-2005 Sun Microsystems, Inc.  All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *
 *  1. Redistributions of source code must retain the above copyright
 *  notice, this list of conditions and the following disclaimer.
 *
 *  2. Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in
 *  the documentation and/or other materials provided with the
 *  distribution.
 *
 *  3. The end-user documentation included with the redistribution,
 *  if any, must include the following acknowledgment:
 *  "This product includes software developed by the
 *  Sun Microsystems, Inc. for Project JXTA."
 *  Alternately, this acknowledgment may appear in the software itself,
 *  if and wherever such third-party acknowledgments normally appear.
 *
 *  4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA"
 *  must not be used to endorse or promote products derived from this
 *  software without prior written permission. For written
 *  permission, please contact Project JXTA at http://www.jxta.org.
 *
 *  5. Products derived from this software may not be called "JXTA",
 *  nor may "JXTA" appear in their name, without prior written
 *  permission of Sun.
 *
 *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 *  DISCLAIMED.  IN NO EVENT SHALL SUN MICROSYSTEMS OR
 *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 *  SUCH DAMAGE.
 *  ====================================================================
 *
 *  This software consists of voluntary contributions made by many
 *  individuals on behalf of Project JXTA.  For more
 *  information on Project JXTA, please see
 *  <http://www.jxta.org/>.
 *
 *  This license is based on the BSD license adopted by the Apache Foundation.
 *
 *  $Id: AutomaticConfigurator.java,v 1.2 2006/06/03 01:10:24 bondolo Exp $
 */
package net.jxta.impl.peergroup;
import java.net.InetAddress;
import java.net.URI;
import java.util.Enumeration;
import java.util.Iterator;

import java.util.NoSuchElementException;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

import net.jxta.document.Advertisement;
import net.jxta.document.AdvertisementFactory;
import net.jxta.document.MimeMediaType;
import net.jxta.document.StructuredDocument;
import net.jxta.document.StructuredDocumentFactory;
import net.jxta.document.StructuredDocumentUtils;
import net.jxta.document.StructuredTextDocument;
import net.jxta.document.XMLDocument;
import net.jxta.document.XMLElement;
import net.jxta.peergroup.PeerGroup;
import net.jxta.protocol.TransportAdvertisement;

import net.jxta.exception.ConfiguratorException;
import net.jxta.exception.JxtaError;

import net.jxta.impl.endpoint.IPUtils;
import net.jxta.impl.protocol.HTTPAdv;
import net.jxta.impl.protocol.PlatformConfig;
import net.jxta.impl.protocol.PSEConfigAdv;
import net.jxta.impl.protocol.RdvConfigAdv;
import net.jxta.impl.protocol.RelayConfigAdv;
import net.jxta.impl.protocol.TCPAdv;

/**
 * A simple platform configurator. This implementation provides reasonable
 * automatic configuration for edge peers on the JXTA public network.
 *
 * <p/>This implementation will read default values from several Java system 
 * properties as appropriate:
 *
 * jxta.peer.name    --  The peer name to use.
 * jxta.http.port    --  The http port to use.
 * jxta.tcp.port     --  The tcp port to use.
 *
 * @see net.jxta.ext.config.Configurator
 **/
public class AutomaticConfigurator extends NullConfigurator {
    
    /**
     *  Log4J logger
     **/
    private final static transient Logger LOG = Logger.getLogger(AutomaticConfigurator.class.getName());
    
    /**
     * Configures the platform using the specified directory.
     **/
    public AutomaticConfigurator(URI jxtaHome) throws ConfiguratorException {
        super(jxtaHome);
    }
    
    /**
     *  {@inheritDoc}
     **/
    public PlatformConfig getPlatformConfig() throws ConfiguratorException {
        super.getPlatformConfig();
        
        boolean reconf;
        
        try {
            reconf = buildPlatformConfig();
        } catch(RuntimeException serious) {
            if (LOG.isEnabledFor(Level.ERROR)) {
                LOG.error("Trouble while fixing PlatformConfig. Hope for the best.", serious);
            }
            
            reconf = true;
        }
        
        // See if we need a reconf
        if ( reconf ) {
            throw new IncompleteConfigurationException("Damaged platform configuration.");
        }
        
        // Save the updated config.
        save();
        
        return advertisement;
    }
    
    /**
     *  Makes sure a PlatformConfig is present and if not, creates one.
     *
     *  <p/>Performs some checking of PlatformConfig values and will fix some
     *  minor configuration problems automatically.
     *
     *  @return If <tt>true</tt> then manual reconfiguration (of some form) is required.
     **/
    private boolean buildPlatformConfig() {
        
        boolean reconf = false;
        
        if (advertisement == null) {
            if( LOG.isEnabledFor(Level.INFO) ) {
                LOG.info( "New PlatformConfig Advertisement" );
            }
            
            advertisement = (PlatformConfig) AdvertisementFactory.newAdvertisement( PlatformConfig.getAdvertisementType() );
            
            advertisement.setDescription("Platform Config Advertisement created by : " + AutomaticConfigurator.class.getName() );
        }
        
        // Set the peer name
        String peerName = advertisement.getName();
        
        if ((null == peerName) || (0 == peerName.trim().length())) {
            String jpn = System.getProperty("jxta.peer.name", "" );
            
            if(0 != jpn.trim().length()) {
                advertisement.setName(jpn);
            }
        }
        
        // Check the HTTP Message Transport parameters.
        XMLDocument http = (XMLDocument) advertisement.getServiceParam(PeerGroup.httpProtoClassID);
        HTTPAdv httpAdv =  null;
        boolean httpDisabled = false;
        
        if (http != null) {
            try {
                httpDisabled = http.getChildren("isOff").hasMoreElements();
                
                XMLElement param = null;
                
                Enumeration httpChilds = http.getChildren( TransportAdvertisement.getAdvertisementType());
                
                // get the HTTPAdv from TransportAdv
                if( httpChilds.hasMoreElements() ) {
                    param = (XMLElement) httpChilds.nextElement();
                }
                
                if (null != param) {
                    httpAdv = (HTTPAdv) AdvertisementFactory.newAdvertisement( param );
                    
                    if( !httpDisabled ) {
                        // check if the interface address is still valid.
                        String intf = httpAdv.getInterfaceAddress();
                        
                        if( (null != intf) && !isValidInetAddress(intf) ) {
                            reconf = true;
                            
                            if (LOG.isEnabledFor(Level.INFO)) {
                                LOG.info("Reconfig requested - invalid interface address");
                            }
                        }
                    }
                }
            } catch (RuntimeException advTrouble) {
                if( LOG.isEnabledFor(Level.WARN) ) {
                    LOG.warn( "HTTP advertisement corrupted", advTrouble );
                }
                
                httpAdv = null;
            }
        }
        
        if (httpAdv == null) {
            if( LOG.isEnabledFor(Level.INFO) ) {
                LOG.info( "HTTP advertisement missing, making a new one." );
            }
            
            int port = 0;
            // get the port from a property
            String httpPort = System.getProperty("jxta.http.port");
            if (httpPort != null) {
                try {
                    int propertyPort = Integer.parseInt( httpPort );
                    if( (propertyPort < 65536) && ( propertyPort >= 0 ) )
                        port = propertyPort;
                    else {
                        if( LOG.isEnabledFor(Level.WARN) ) {
                            LOG.warn( "Property 'jxta.http.port' is not a valid port number : " + propertyPort );
                        }
                    }
                } catch ( NumberFormatException ignored ) {
                    if( LOG.isEnabledFor(Level.WARN) ) {
                        LOG.warn( "Property 'jxta.http.port' was not an integer : " + http );
                    }
                }
            }
            
            httpAdv = (HTTPAdv) AdvertisementFactory.newAdvertisement( HTTPAdv.getAdvertisementType() );
            httpAdv.setProtocol( "http" );
            httpAdv.setPort(port);
            httpAdv.setServerEnabled(false);
        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -