FileDocCategorySizeDatePackage
StandardHost.javaAPI DocApache Tomcat 6.0.1423098Fri Jul 20 04:20:32 BST 2007org.apache.catalina.core

StandardHost

public class StandardHost extends ContainerBase implements org.apache.catalina.Host
Standard implementation of the Host interface. Each child container must be a Context implementation to process the requests directed to a particular web application.
author
Craig R. McClanahan
author
Remy Maucherat
version
$Revision: 497521 $ $Date: 2007-01-18 19:24:17 +0100 (jeu., 18 janv. 2007) $

Fields Summary
private static org.apache.juli.logging.Log
log
private String[]
aliases
The set of aliases for this Host.
private String
appBase
The application root for this Host.
private boolean
autoDeploy
The auto deploy flag for this Host.
private String
configClass
The Java class name of the default context configuration class for deployed web applications.
private String
contextClass
The Java class name of the default Context implementation class for deployed web applications.
private boolean
deployOnStartup
The deploy on startup flag for this Host.
private boolean
deployXML
deploy Context XML config files property.
private String
errorReportValveClass
The Java class name of the default error reporter implementation class for deployed web applications.
private ObjectName
errorReportValveObjectName
The object name for the errorReportValve.
private static final String
info
The descriptive information string for this implementation.
private boolean
liveDeploy
The live deploy flag for this Host.
private boolean
unpackWARs
Unpack WARs property.
private String
workDir
Work Directory base for applications.
private boolean
xmlValidation
Attribute value used to turn on/off XML validation
private boolean
xmlNamespaceAware
Attribute value used to turn on/off XML namespace awarenes.
private boolean
initialized
Constructors Summary
public StandardHost()
Create a new StandardHost component with the default basic Valve.

    
    // ----------------------------------------------------------- Constructors


                   
      

        super();
        pipeline.setBasic(new StandardHostValve());

    
Methods Summary
public voidaddAlias(java.lang.String alias)
Add an alias name that should be mapped to this same Host.

param
alias The alias to be added


        alias = alias.toLowerCase();

        // Skip duplicate aliases
        for (int i = 0; i < aliases.length; i++) {
            if (aliases[i].equals(alias))
                return;
        }

        // Add this alias to the list
        String newAliases[] = new String[aliases.length + 1];
        for (int i = 0; i < aliases.length; i++)
            newAliases[i] = aliases[i];
        newAliases[aliases.length] = alias;

        aliases = newAliases;

        // Inform interested listeners
        fireContainerEvent(ADD_ALIAS_EVENT, alias);

    
public voidaddChild(org.apache.catalina.Container child)
Add a child Container, only if the proposed child is an implementation of Context.

param
child Child container to be added


        if (!(child instanceof Context))
            throw new IllegalArgumentException
                (sm.getString("standardHost.notContext"));
        super.addChild(child);

    
public javax.management.ObjectNamecreateObjectName(java.lang.String domain, javax.management.ObjectName parent)

        if( log.isDebugEnabled())
            log.debug("Create ObjectName " + domain + " " + parent );
        return new ObjectName( domain + ":type=Host,host=" + getName());
    
public voiddestroy()

        // destroy our child containers, if any
        Container children[] = findChildren();
        super.destroy();
        for (int i = 0; i < children.length; i++) {
            if(children[i] instanceof StandardContext)
                ((StandardContext)children[i]).destroy();
        }
      
    
public java.lang.String[]findAliases()
Return the set of alias names for this Host. If none are defined, a zero length array is returned.


        return (this.aliases);

    
public java.lang.String[]getAliases()

        return aliases;
    
public java.lang.StringgetAppBase()
Return the application root for this Host. This can be an absolute pathname, a relative pathname, or a URL.



    // ------------------------------------------------------------- Properties


                             
       

        return (this.appBase);

    
public booleangetAutoDeploy()
Return the value of the auto deploy flag. If true, it indicates that this host's child webapps will be dynamically deployed.


        return (this.autoDeploy);

    
public java.lang.StringgetConfigClass()
Return the Java class name of the context configuration class for new web applications.


        return (this.configClass);

    
public java.lang.StringgetContextClass()
Return the Java class name of the Context implementation class for new web applications.


        return (this.contextClass);

    
public booleangetDeployOnStartup()
Return the value of the deploy on startup flag. If true, it indicates that this host's child webapps should be discovred and automatically deployed at startup time.


        return (this.deployOnStartup);

    
public java.lang.StringgetErrorReportValveClass()
Return the Java class name of the error report valve class for new web applications.


        return (this.errorReportValveClass);

    
public java.lang.StringgetInfo()
Return descriptive information about this Container implementation and the corresponding version number, in the format <description>/<version>.


        return (info);

    
public booleangetLiveDeploy()
Return the value of the live deploy flag. If true, it indicates that a background thread should be started that looks for web application context files, WAR files, or unpacked directories being dropped in to the appBase directory, and deploys new ones as they are encountered.

        return (this.autoDeploy);
    
public java.lang.StringgetName()
Return the canonical, fully qualified, name of the virtual host this Container represents.


        return (name);

    
public java.lang.String[]getValveNames()
Return the MBean Names of the Valves assoicated with this Host

exception
Exception if an MBean cannot be created or registered

         Valve [] valves = this.getValves();
         String [] mbeanNames = new String[valves.length];
         for (int i = 0; i < valves.length; i++) {
             if( valves[i] == null ) continue;
             if( ((ValveBase)valves[i]).getObjectName() == null ) continue;
             mbeanNames[i] = ((ValveBase)valves[i]).getObjectName().toString();
         }

         return mbeanNames;

     
public java.lang.StringgetWorkDir()
Host work directory base.


        return (workDir);
    
public booleangetXmlNamespaceAware()
Get the server.xml attribute's xmlNamespaceAware.

return
true if namespace awarenes is enabled.

        return xmlNamespaceAware;
    
public booleangetXmlValidation()
Get the server.xml attribute's xmlValidation.

return
true if validation is enabled.

        return xmlValidation;
    
public voidinit()

    
       
        if( initialized ) return;
        initialized=true;
        
        // already registered.
        if( getParent() == null ) {
            try {
                // Register with the Engine
                ObjectName serviceName=new ObjectName(domain + 
                                        ":type=Engine");

                HostConfig deployer = new HostConfig();
                addLifecycleListener(deployer);                
                if( mserver.isRegistered( serviceName )) {
                    if(log.isDebugEnabled())
                        log.debug("Registering "+ serviceName +" with the Engine");
                    mserver.invoke( serviceName, "addChild",
                            new Object[] { this },
                            new String[] { "org.apache.catalina.Container" } );
                }
            } catch( Exception ex ) {
                log.error("Host registering failed!",ex);
            }
        }
        
        if( oname==null ) {
            // not registered in JMX yet - standalone mode
            try {
                StandardEngine engine=(StandardEngine)parent;
                domain=engine.getName();
                if(log.isDebugEnabled())
                    log.debug( "Register host " + getName() + " with domain "+ domain );
                oname=new ObjectName(domain + ":type=Host,host=" +
                        this.getName());
                controller = oname;
                Registry.getRegistry(null, null)
                    .registerComponent(this, oname, null);
            } catch( Throwable t ) {
                log.error("Host registering failed!", t );
            }
        }
    
public booleanisDeployXML()
Deploy XML Context config files flag accessor.


        return (deployXML);

    
public booleanisUnpackWARs()
Unpack WARs flag accessor.


        return (unpackWARs);

    
public org.apache.catalina.Contextmap(java.lang.String uri)
Return the Context that would be used to process the specified host-relative request URI, if any; otherwise return null.

param
uri Request URI to be mapped


        if (log.isDebugEnabled())
            log.debug("Mapping request URI '" + uri + "'");
        if (uri == null)
            return (null);

        // Match on the longest possible context path prefix
        if (log.isTraceEnabled())
            log.trace("  Trying the longest context path prefix");
        Context context = null;
        String mapuri = uri;
        while (true) {
            context = (Context) findChild(mapuri);
            if (context != null)
                break;
            int slash = mapuri.lastIndexOf('/");
            if (slash < 0)
                break;
            mapuri = mapuri.substring(0, slash);
        }

        // If no Context matches, select the default Context
        if (context == null) {
            if (log.isTraceEnabled())
                log.trace("  Trying the default context");
            context = (Context) findChild("");
        }

        // Complain if no Context has been selected
        if (context == null) {
            log.error(sm.getString("standardHost.mappingError", uri));
            return (null);
        }

        // Return the mapped Context (if any)
        if (log.isDebugEnabled())
            log.debug(" Mapped to context '" + context.getPath() + "'");
        return (context);

    
public javax.management.ObjectNamepreRegister(javax.management.MBeanServer server, javax.management.ObjectName oname)

        ObjectName res=super.preRegister(server, oname);
        String name=oname.getKeyProperty("host");
        if( name != null )
            setName( name );
        return res;        
    
public voidremoveAlias(java.lang.String alias)
Remove the specified alias name from the aliases for this Host.

param
alias Alias name to be removed


        alias = alias.toLowerCase();

        synchronized (aliases) {

            // Make sure this alias is currently present
            int n = -1;
            for (int i = 0; i < aliases.length; i++) {
                if (aliases[i].equals(alias)) {
                    n = i;
                    break;
                }
            }
            if (n < 0)
                return;

            // Remove the specified alias
            int j = 0;
            String results[] = new String[aliases.length - 1];
            for (int i = 0; i < aliases.length; i++) {
                if (i != n)
                    results[j++] = aliases[i];
            }
            aliases = results;

        }

        // Inform interested listeners
        fireContainerEvent(REMOVE_ALIAS_EVENT, alias);

    
public voidsetAppBase(java.lang.String appBase)
Set the application root for this Host. This can be an absolute pathname, a relative pathname, or a URL.

param
appBase The new application root


        String oldAppBase = this.appBase;
        this.appBase = appBase;
        support.firePropertyChange("appBase", oldAppBase, this.appBase);

    
public voidsetAutoDeploy(boolean autoDeploy)
Set the auto deploy flag value for this host.

param
autoDeploy The new auto deploy flag


        boolean oldAutoDeploy = this.autoDeploy;
        this.autoDeploy = autoDeploy;
        support.firePropertyChange("autoDeploy", oldAutoDeploy, 
                                   this.autoDeploy);

    
public voidsetConfigClass(java.lang.String configClass)
Set the Java class name of the context configuration class for new web applications.

param
configClass The new context configuration class


        String oldConfigClass = this.configClass;
        this.configClass = configClass;
        support.firePropertyChange("configClass",
                                   oldConfigClass, this.configClass);

    
public voidsetContextClass(java.lang.String contextClass)
Set the Java class name of the Context implementation class for new web applications.

param
contextClass The new context implementation class


        String oldContextClass = this.contextClass;
        this.contextClass = contextClass;
        support.firePropertyChange("contextClass",
                                   oldContextClass, this.contextClass);

    
public voidsetDeployOnStartup(boolean deployOnStartup)
Set the deploy on startup flag value for this host.

param
deployOnStartup The new deploy on startup flag


        boolean oldDeployOnStartup = this.deployOnStartup;
        this.deployOnStartup = deployOnStartup;
        support.firePropertyChange("deployOnStartup", oldDeployOnStartup, 
                                   this.deployOnStartup);

    
public voidsetDeployXML(boolean deployXML)
Deploy XML Context config files flag mutator.


        this.deployXML = deployXML;

    
public voidsetErrorReportValveClass(java.lang.String errorReportValveClass)
Set the Java class name of the error report valve class for new web applications.

param
errorReportValveClass The new error report valve class


        String oldErrorReportValveClassClass = this.errorReportValveClass;
        this.errorReportValveClass = errorReportValveClass;
        support.firePropertyChange("errorReportValveClass",
                                   oldErrorReportValveClassClass, 
                                   this.errorReportValveClass);

    
public voidsetLiveDeploy(boolean liveDeploy)
Set the live deploy flag value for this host.

param
liveDeploy The new live deploy flag

        setAutoDeploy(liveDeploy);
    
public voidsetName(java.lang.String name)
Set the canonical, fully qualified, name of the virtual host this Container represents.

param
name Virtual host name
exception
IllegalArgumentException if name is null


        if (name == null)
            throw new IllegalArgumentException
                (sm.getString("standardHost.nullName"));

        name = name.toLowerCase();      // Internally all names are lower case

        String oldName = this.name;
        this.name = name;
        support.firePropertyChange("name", oldName, this.name);

    
public voidsetUnpackWARs(boolean unpackWARs)
Unpack WARs flag mutator.


        this.unpackWARs = unpackWARs;

    
public voidsetWorkDir(java.lang.String workDir)
Host work directory base.


        this.workDir = workDir;
    
public voidsetXmlNamespaceAware(boolean xmlNamespaceAware)
Set the namespace aware feature of the XML parser used when parsing xml instances.

param
xmlNamespaceAware true to enable namespace awareness

        this.xmlNamespaceAware=xmlNamespaceAware;
    
public voidsetXmlValidation(boolean xmlValidation)
Set the validation feature of the XML parser used when parsing xml instances.

param
xmlValidation true to enable xml instance validation

        
        this.xmlValidation = xmlValidation;

    
public synchronized voidstart()
Start this host.

exception
LifecycleException if this component detects a fatal error that prevents it from being started

        if( started ) {
            return;
        }
        if( ! initialized )
            init();

        // Look for a realm - that may have been configured earlier. 
        // If the realm is added after context - it'll set itself.
        if( realm == null ) {
            ObjectName realmName=null;
            try {
                realmName=new ObjectName( domain + ":type=Realm,host=" + getName());
                if( mserver.isRegistered(realmName ) ) {
                    mserver.invoke(realmName, "init", 
                            new Object[] {},
                            new String[] {}
                    );            
                }
            } catch( Throwable t ) {
                log.debug("No realm for this host " + realmName);
            }
        }
            
        // Set error report valve
        if ((errorReportValveClass != null)
            && (!errorReportValveClass.equals(""))) {
            try {
                boolean found = false;
                if(errorReportValveObjectName != null) {
                    ObjectName[] names = 
                        ((StandardPipeline)pipeline).getValveObjectNames();
                    for (int i=0; !found && i<names.length; i++)
                        if(errorReportValveObjectName.equals(names[i]))
                            found = true ;
                    }
                    if(!found) {          	
                        Valve valve = (Valve) Class.forName(errorReportValveClass)
                        .newInstance();
                        addValve(valve);
                        errorReportValveObjectName = ((ValveBase)valve).getObjectName() ;
                    }
            } catch (Throwable t) {
                log.error(sm.getString
                    ("standardHost.invalidErrorReportValveClass", 
                     errorReportValveClass));
            }
        }
        if(log.isDebugEnabled()) {
            if (xmlValidation)
                log.debug(sm.getString("standardHost.validationEnabled"));
            else
                log.debug(sm.getString("standardHost.validationDisabled"));
        }
        super.start();

    
public java.lang.StringtoString()
Return a String representation of this component.


        StringBuffer sb = new StringBuffer();
        if (getParent() != null) {
            sb.append(getParent().toString());
            sb.append(".");
        }
        sb.append("StandardHost[");
        sb.append(getName());
        sb.append("]");
        return (sb.toString());