    protected PoolConfiguration loadConfig( String root )
    {
        PoolConfiguration config = (PoolConfiguration) defaultConfig.clone();
        if ( props.containsKey( root + ".useBoundary" ) )
        {
            try
            {
                config.setUseBoundary( Boolean.getBoolean( (String) props.get( root + ".useBoundary" ) ) );
            }
            catch ( NumberFormatException nfe )
            {
                log.error( "useBoundary not a boolean.", nfe );
            }
        }
        if ( props.containsKey( root + ".boundarySize" ) )
        {
            try
            {
                config.setBoundarySize( Integer.parseInt( (String) props.get( root + ".boundarySize" ) ) );
            }
            catch ( NumberFormatException nfe )
            {
                log.error( "boundarySize not a number.", nfe );
            }
        }
        if ( props.containsKey( root + ".maximumPoolSize" ) )
        {
            try
            {
                config.setMaximumPoolSize( Integer.parseInt( (String) props.get( root + ".maximumPoolSize" ) ) );
            }
            catch ( NumberFormatException nfe )
            {
                log.error( "maximumPoolSize not a number.", nfe );
            }
        }
        if ( props.containsKey( root + ".minimumPoolSize" ) )
        {
            try
            {
                config.setMinimumPoolSize( Integer.parseInt( (String) props.get( root + ".minimumPoolSize" ) ) );
            }
            catch ( NumberFormatException nfe )
            {
                log.error( "minimumPoolSize not a number.", nfe );
            }
        }
        if ( props.containsKey( root + ".keepAliveTime" ) )
        {
            try
            {
                config.setKeepAliveTime( Integer.parseInt( (String) props.get( root + ".keepAliveTime" ) ) );
            }
            catch ( NumberFormatException nfe )
            {
                log.error( "keepAliveTime not a number.", nfe );
            }
        }
        if ( props.containsKey( root + ".whenBlockedPolicy" ) )
        {
            config.setWhenBlockedPolicy( (String) props.get( root + ".whenBlockedPolicy" ) );
        }
        if ( props.containsKey( root + ".startUpSize" ) )
        {
            try
            {
                config.setStartUpSize( Integer.parseInt( (String) props.get( root + ".startUpSize" ) ) );
            }
            catch ( NumberFormatException nfe )
            {
                log.error( "startUpSize not a number.", nfe );
            }
        }
        if ( log.isInfoEnabled() )
        {
            log.info( root + " PoolConfiguration = " + config );
        }
        return config;
    }

    protected PoolConfiguration loadConfig( String root )
    {
        PoolConfiguration config = (PoolConfiguration) defaultConfig.clone();
        if ( props.containsKey( root + ".useBoundary" ) )
        {
            try
            {
                config.setUseBoundary( Boolean.valueOf( (String) props.get( root + ".useBoundary" ) ) );
            }
            catch ( NumberFormatException nfe )
            {
                log.error( "useBoundary not a boolean.", nfe );
            }
        }
        if ( props.containsKey( root + ".boundarySize" ) )
        {
            try
            {
                config.setBoundarySize( Integer.parseInt( (String) props.get( root + ".boundarySize" ) ) );
            }
            catch ( NumberFormatException nfe )
            {
                log.error( "boundarySize not a number.", nfe );
            }
        }
        if ( props.containsKey( root + ".maximumPoolSize" ) )
        {
            try
            {
                config.setMaximumPoolSize( Integer.parseInt( (String) props.get( root + ".maximumPoolSize" ) ) );
            }
            catch ( NumberFormatException nfe )
            {
                log.error( "maximumPoolSize not a number.", nfe );
            }
        }
        if ( props.containsKey( root + ".minimumPoolSize" ) )
        {
            try
            {
                config.setMinimumPoolSize( Integer.parseInt( (String) props.get( root + ".minimumPoolSize" ) ) );
            }
            catch ( NumberFormatException nfe )
            {
                log.error( "minimumPoolSize not a number.", nfe );
            }
        }
        if ( props.containsKey( root + ".keepAliveTime" ) )
        {
            try
            {
                config.setKeepAliveTime( Integer.parseInt( (String) props.get( root + ".keepAliveTime" ) ) );
            }
            catch ( NumberFormatException nfe )
            {
                log.error( "keepAliveTime not a number.", nfe );
            }
        }
        if ( props.containsKey( root + ".whenBlockedPolicy" ) )
        {
            config.setWhenBlockedPolicy( (String) props.get( root + ".whenBlockedPolicy" ) );
        }
        if ( props.containsKey( root + ".startUpSize" ) )
        {
            try
            {
                config.setStartUpSize( Integer.parseInt( (String) props.get( root + ".startUpSize" ) ) );
            }
            catch ( NumberFormatException nfe )
            {
                log.error( "startUpSize not a number.", nfe );
            }
        }
        if ( log.isInfoEnabled() )
        {
            log.info( root + " PoolConfiguration = " + config );
        }
        return config;
    }
