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/08/31 08:34:00 UTC

cvs commit: jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/interfaces ApplicationContext.java

donaldp     2002/08/30 23:34:00

  Modified:    src/java/org/apache/avalon/phoenix BlockContext.java
               src/java/org/apache/avalon/phoenix/components/application
                        DefaultBlockContext.java
               src/java/org/apache/avalon/phoenix/components/kernel
                        DefaultApplicationContext.java DefaultKernel.java
               src/java/org/apache/avalon/phoenix/interfaces
                        ApplicationContext.java
  Log:
  Add the ability for a Block to request that its enclosing application
  be shutdown by BlockContext.requestShutdown()
  
  This may in turn shutdown the kernel if it no longer contains any applications and it has not been made persistent.
  
  Revision  Changes    Path
  1.14      +9 -2      jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/BlockContext.java
  
  Index: BlockContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/BlockContext.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- BlockContext.java	6 Aug 2002 11:57:39 -0000	1.13
  +++ BlockContext.java	31 Aug 2002 06:34:00 -0000	1.14
  @@ -20,9 +20,7 @@
       extends Context
   {
       String APP_NAME = "app.name";
  -
       String APP_HOME_DIR = "app.home";
  -
       String NAME = "block.name";
   
       /**
  @@ -42,6 +40,15 @@
        * @return the name of block
        */
       String getName();
  +
  +    /**
  +     * A block can request that the application it resides in be
  +     * shut down. This method will schedule the blocks application
  +     * for shutdown. Note that this is just a request and the kernel
  +     * may or may not honour the request (by default the request will
  +     * be honored).
  +     */
  +    void requestShutdown();
   
       /**
        * Retrieve logger coresponding to named category.
  
  
  
  1.18      +7 -2      jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/application/DefaultBlockContext.java
  
  Index: DefaultBlockContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/application/DefaultBlockContext.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- DefaultBlockContext.java	6 Aug 2002 11:57:39 -0000	1.17
  +++ DefaultBlockContext.java	31 Aug 2002 06:34:00 -0000	1.18
  @@ -23,10 +23,10 @@
       implements BlockContext
   {
       private String m_name;
  -
       private ApplicationContext m_applicationContext;
   
  -    protected DefaultBlockContext( final String name, final ApplicationContext frame )
  +    protected DefaultBlockContext( final String name,
  +                                   final ApplicationContext frame )
       {
           m_name = name;
           m_applicationContext = frame;
  @@ -72,6 +72,11 @@
       public String getName()
       {
           return m_name;
  +    }
  +
  +    public void requestShutdown()
  +    {
  +        m_applicationContext.requestShutdown();
       }
   
       /**
  
  
  
  1.28      +39 -0     jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/DefaultApplicationContext.java
  
  Index: DefaultApplicationContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/DefaultApplicationContext.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- DefaultApplicationContext.java	31 Aug 2002 06:08:02 -0000	1.27
  +++ DefaultApplicationContext.java	31 Aug 2002 06:34:00 -0000	1.28
  @@ -21,6 +21,7 @@
   import org.apache.avalon.phoenix.interfaces.ApplicationContext;
   import org.apache.avalon.phoenix.interfaces.ConfigurationRepository;
   import org.apache.avalon.phoenix.interfaces.ConfigurationValidator;
  +import org.apache.avalon.phoenix.interfaces.Kernel;
   import org.apache.avalon.phoenix.interfaces.ManagerException;
   import org.apache.avalon.phoenix.interfaces.SystemManager;
   import org.apache.avalon.phoenix.metadata.BlockListenerMetaData;
  @@ -63,6 +64,11 @@
   
       private final SarMetaData m_metaData;
   
  +    /**
  +     * The kernel associate with context
  +     */
  +    private Kernel m_kernel;
  +
       protected DefaultApplicationContext( final SarMetaData metaData,
                                            final ClassLoader classLoader,
                                            final Logger hierarchy )
  @@ -86,6 +92,7 @@
               lookup( SystemManager.ROLE );
           m_validator = (ConfigurationValidator)serviceManager.
               lookup( ConfigurationValidator.ROLE );
  +        m_kernel = (Kernel)serviceManager.lookup( Kernel.ROLE );
       }
   
       public void initialize()
  @@ -102,6 +109,38 @@
       public ThreadContext getThreadContext()
       {
           return m_threadContext;
  +    }
  +
  +    public void requestShutdown()
  +    {
  +        final Thread thread = new Thread( "AppShutdown" )
  +        {
  +            public void run()
  +            {
  +                schedulShutdown();
  +            }
  +        };
  +        thread.start();
  +    }
  +
  +    private void schedulShutdown()
  +    {
  +        try
  +        {
  +            //Sleep for a little bit so that the
  +            //thread that requested this method can
  +            //return and do whatever it needs to be
  +            //done
  +            Thread.sleep( 2 );
  +            m_kernel.removeApplication( m_metaData.getName() );
  +        }
  +        catch( Exception e )
  +        {
  +            final String message =
  +                REZ.getString( "applicationcontext.error.noremove",
  +                               m_metaData.getName() );
  +            getLogger().error( message, e );
  +        }
       }
   
       /**
  
  
  
  1.78      +2 -1      jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/DefaultKernel.java
  
  Index: DefaultKernel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/DefaultKernel.java,v
  retrieving revision 1.77
  retrieving revision 1.78
  diff -u -r1.77 -r1.78
  --- DefaultKernel.java	6 Aug 2002 11:57:40 -0000	1.77
  +++ DefaultKernel.java	31 Aug 2002 06:34:00 -0000	1.78
  @@ -13,8 +13,8 @@
   import org.apache.avalon.framework.CascadingException;
   import org.apache.avalon.framework.activity.Disposable;
   import org.apache.avalon.framework.activity.Initializable;
  -import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.Configurable;
  +import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
   import org.apache.avalon.framework.container.ContainerUtil;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
  @@ -296,6 +296,7 @@
           componentManager.put( SystemManager.ROLE, m_systemManager );
           componentManager.put( ConfigurationRepository.ROLE, m_repository );
           componentManager.put( ConfigurationValidator.ROLE, m_validator );
  +        componentManager.put( Kernel.ROLE, this );
           componentManager.makeReadOnly();
           return componentManager;
       }
  
  
  
  1.16      +6 -0      jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/interfaces/ApplicationContext.java
  
  Index: ApplicationContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/interfaces/ApplicationContext.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- ApplicationContext.java	6 Aug 2002 11:57:41 -0000	1.15
  +++ ApplicationContext.java	31 Aug 2002 06:34:00 -0000	1.16
  @@ -27,6 +27,12 @@
       ThreadContext getThreadContext();
   
       /**
  +     * A application can request that it be be shutdown. In most cases
  +     * the kernel will schedule the shutdown to occur in another thread.
  +     */
  +    void requestShutdown();
  +
  +    /**
        * Export specified object into management system.
        * The object is exported using specifed interface
        * and using the specified name.
  
  
  

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