You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by do...@apache.org on 2002/04/30 11:45:16 UTC

cvs commit: jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/application DefaultApplication.java

donaldp     02/04/30 02:45:16

  Modified:    src/java/org/apache/avalon/phoenix/components/application
                        DefaultApplication.java
  Log:
  Made sure that we nulled ThreadContext after processing application specific code so as to make sure we don't reuse same context multiple times.
  
  PR: 8637
  Submitted by: colus@apache.org (Eung-ju Park)
  
  Revision  Changes    Path
  1.12      +60 -19    jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/application/DefaultApplication.java
  
  Index: DefaultApplication.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/application/DefaultApplication.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- DefaultApplication.java	9 Apr 2002 10:55:50 -0000	1.11
  +++ DefaultApplication.java	30 Apr 2002 09:45:16 -0000	1.12
  @@ -246,22 +246,40 @@
           //Setup thread context for calling visitors
           ThreadContext.setThreadContext( m_context.getThreadContext() );
   
  -        final BlockListenerMetaData[] listeners = m_context.getMetaData().getListeners();
  -        for( int i = 0; i < listeners.length; i++ )
  +	try
  +	{
  +	    doLoadBlockListeners();
  +	}
  +	finally
  +	{
  +	    ThreadContext.setThreadContext( null );
  +	}
  +    }
  +
  +    /**
  +     * Actually perform loading of each individual Listener.
  +     * Note that by this stage it is assumed that the ThreadContext 
  +     * has already been setup correctly.
  +     */
  +    private void doLoadBlockListeners()
  +	throws Exception
  +    {
  +	final BlockListenerMetaData[] listeners = m_context.getMetaData().getListeners();
  +	for( int i = 0; i < listeners.length; i++ )
           {
  -            try
  -            {
  -                m_lifecycle.startupListener( listeners[ i ] );
  -            }
  -            catch( final Exception e )
  -            {
  -                final String name = listeners[ i ].getName();
  -                final String message =
  -                    REZ.getString( "bad-listener", "startup", name, e.getMessage() );
  -                getLogger().error( message, e );
  -                throw e;
  -            }
  -        }
  +	    try
  +	    {
  +		m_lifecycle.startupListener( listeners[ i ] );
  +	    }
  +	    catch( final Exception e )
  +	    {
  +		final String name = listeners[ i ].getName();
  +		final String message =
  +		    REZ.getString( "bad-listener", "startup", name, e.getMessage() );
  +		getLogger().error( message, e );
  +		throw e;
  +	    }
  +	}
       }
   
       /**
  @@ -276,6 +294,30 @@
       private final void runPhase( final String name )
           throws Exception
       {
  +        //Setup thread context for calling visitors
  +        ThreadContext.setThreadContext( m_context.getThreadContext() );
  +
  +	try
  +	{
  +	    doRunPhase( name );
  +	}
  +	finally
  +	{
  +	    ThreadContext.setThreadContext( null );
  +	}
  +    }
  +
  +    /**
  +     * Actually run applications phas.
  +     * By this methods calling it is assumed that ThreadContext
  +     * has already been setup.
  +     *
  +     * @param name the name of phase (for logging purposes)
  +     * @exception Exception if an error occurs
  +     */
  +    private final void doRunPhase( final String name )
  +        throws Exception
  +    {
           final BlockMetaData[] blocks = m_context.getMetaData().getBlocks();
           final String[] order = DependencyGraph.walkGraph( PHASE_STARTUP == name, blocks );
   
  @@ -291,14 +333,13 @@
               getLogger().info( message );
           }
   
  -        //Setup thread context for calling visitors
  -        ThreadContext.setThreadContext( m_context.getThreadContext() );
  -
           //All blocks about to be processed ...
           if( PHASE_STARTUP == name )
           {
               //... for startup, so indicate to applicable listeners
  -            m_lifecycle.applicationStarting( new ApplicationEvent( m_sarMetaData.getName(), m_sarMetaData ) );
  +	    final ApplicationEvent event = 
  +		new ApplicationEvent( m_sarMetaData.getName(), m_sarMetaData );
  +            m_lifecycle.applicationStarting( event );
           }
           else
           {
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>