protected synchronized void doStart ( ) throws Exception { log . info ( "Version " + Version . getImplVersion ( ) ) ; MultiException mex = new MultiException ( ) ; statsReset ( ) ; if ( log . isDebugEnabled ( ) ) { log . debug ( "LISTENERS: " + _listeners ) ; log . debug ( "HANDLER: " + _virtualHostMap ) ; } if ( _requestLog != null && ! _requestLog . isStarted ( ) ) { try { _requestLog . start ( ) ; } catch ( Exception e ) { mex . add ( e ) ; } } HttpContext [ ] contexts = getContexts ( ) ; for ( int i = 0 ; i < contexts . length ; i ++ ) { HttpContext context = contexts [ i ] ; try { context . start ( ) ; } catch ( Exception e ) { mex . add ( e ) ; } } for ( int l = 0 ; l < _listeners . size ( ) ; l ++ ) { HttpListener listener = ( HttpListener ) _listeners . get ( l ) ; listener . setHttpServer ( this ) ; if ( ! listener . isStarted ( ) ) try { listener . start ( ) ; } catch ( Exception e ) { mex . add ( e ) ; } } mex . ifExceptionThrowMulti ( ) ; }
Start all handlers then listeners . If a subcomponent fails to start it s exception is added to a org . mortbay . util . MultiException and the start method continues .