You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2004/02/02 12:31:38 UTC

cvs commit: avalon/merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl DefaultKernel.java

mcconnell    2004/02/02 03:31:37

  Modified:    merlin/facilities/http README.TXT
               merlin/facilities/http/listener project.xml
               merlin/facilities/http/listener/src/java/org/apache/avalon/http/listener
                        DefaultHTTPModelListener.java
               merlin/kernel/impl project.xml
               merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl
                        DefaultKernel.java
  Log:
  Updates related to the management of components that are servlets.
  
  Revision  Changes    Path
  1.2       +15 -1     avalon/merlin/facilities/http/README.TXT
  
  Index: README.TXT
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/facilities/http/README.TXT,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- README.TXT	2 Feb 2004 03:29:22 -0000	1.1
  +++ README.TXT	2 Feb 2004 11:31:37 -0000	1.2
  @@ -8,8 +8,22 @@
   
   Lots of little things still to be done - like:
   
  -  (a) servlet recognition, 
  +  (a) servlet recognition
     (b) how do we associate a context at the <compoent> directive level
     (c) servlet/component registration
  +
  +Update:
  +
  +  Recognition - the listener now recognizes components that 
  +  are themselves Servlets.  One issue that came up was the 
  +  availability of the servlet apis - the workaround was to 
  +  update the kernel factory meta to include servlet api in the 
  +  general api for merlin - but we will need a better solution
  +  in the long term to support comman api addition (perhaps 
  +  using a AVALON_HOME/lib as a location for common apis).
  +
  +Next Steps:
  +
  +  Assiciation with the server and context stuff.
   
   Steve.
  
  
  
  1.2       +5 -0      avalon/merlin/facilities/http/listener/project.xml
  
  Index: project.xml
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/facilities/http/listener/project.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- project.xml	13 Jan 2004 12:46:54 -0000	1.1
  +++ project.xml	2 Feb 2004 11:31:37 -0000	1.2
  @@ -49,6 +49,11 @@
       </dependency>
   
       <dependency>
  +      <id>servletapi</id>
  +      <version>2.3</version>
  +    </dependency>
  +
  +    <dependency>
         <groupId>merlin</groupId>
         <artifactId>merlin-unit</artifactId>
         <version>3.3-SNAPSHOT</version>
  
  
  
  1.3       +55 -2     avalon/merlin/facilities/http/listener/src/java/org/apache/avalon/http/listener/DefaultHTTPModelListener.java
  
  Index: DefaultHTTPModelListener.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/facilities/http/listener/src/java/org/apache/avalon/http/listener/DefaultHTTPModelListener.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultHTTPModelListener.java	24 Jan 2004 23:25:31 -0000	1.2
  +++ DefaultHTTPModelListener.java	2 Feb 2004 11:31:37 -0000	1.3
  @@ -20,6 +20,8 @@
   import org.apache.avalon.composition.event.CompositionEvent;
   import org.apache.avalon.composition.event.CompositionEventListener;
   import org.apache.avalon.composition.model.ContainmentModel;
  +import org.apache.avalon.composition.model.ComponentModel;
  +import org.apache.avalon.composition.model.DeploymentModel;
   
   import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
  @@ -33,6 +35,9 @@
   
   import org.apache.avalon.http.HttpService;
   
  +import javax.servlet.Servlet;
  +
  +
   /**
    * DefaultHTTPModelListener listens to application model events
    * and registeres itself as a factory relative to servlet 
  @@ -112,7 +117,51 @@
               getLogger().debug( 
                 "registering listener: " + m_model );
           }
  -        m_model.addCompositionListener( this );
  +
  +        synchronized( m_model )
  +        {
  +            processModel( m_model, true );
  +        }
  +    }
  +
  +    private void processModel( DeploymentModel model, boolean flag )
  +    {
  +        if( model instanceof ContainmentModel ) 
  +        {
  +            ContainmentModel containment = 
  +              (ContainmentModel) model;
  +            if( flag )
  +            {
  +                containment.addCompositionListener( this );
  +            }
  +            else
  +            {
  +                containment.removeCompositionListener( this );
  +            }
  +            DeploymentModel[] models = containment.getModels();
  +            for( int i=0; i<models.length; i++ )
  +            {
  +                processModel( models[i], flag );
  +            }
  +        }
  +        else if( model instanceof ComponentModel )
  +        {
  +            ComponentModel component = (ComponentModel) model;
  +            Class clazz = component.getDeploymentClass();
  +            if( Servlet.class.isAssignableFrom( clazz ) )
  +            {
  +                if( getLogger().isInfoEnabled() )
  +                {
  +                    getLogger().info( 
  +                      "component: " + component + " is a Servlet" );
  +                }
  +
  +                // ## TODO
  +                // register the component with the http
  +                // server under a special servlet holder
  +                //
  +            }
  +        }
       }
   
      //---------------------------------------------------------
  @@ -125,13 +174,17 @@
       public void modelAdded( CompositionEvent event )
       {
           System.out.println( "# model added: " + event );
  +        DeploymentModel model = event.getChild();
  +        processModel( model, true );
       }
   
      /**
  -    * Model addition.
  +    * Model removal.
       */
       public void modelRemoved( CompositionEvent event )
       {
           System.out.println( "# model removed: " + event );
  +        DeploymentModel model = event.getChild();
  +        processModel( model, false );
       }
   }
  
  
  
  1.20      +9 -0      avalon/merlin/kernel/impl/project.xml
  
  Index: project.xml
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/kernel/impl/project.xml,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- project.xml	24 Jan 2004 23:25:31 -0000	1.19
  +++ project.xml	2 Feb 2004 11:31:37 -0000	1.20
  @@ -215,6 +215,15 @@
         <version>2.4.0</version>
       </dependency>
   
  +    <dependency>
  +      <groupId>servletapi</groupId>
  +      <artifactId>servletapi</artifactId>
  +      <version>2.3</version>
  +      <properties>
  +        <avalon.classloader>api</avalon.classloader>
  +      </properties>
  +    </dependency>
  +
     </dependencies>
     
   </project>
  
  
  
  1.6       +18 -1     avalon/merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl/DefaultKernel.java
  
  Index: DefaultKernel.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl/DefaultKernel.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- DefaultKernel.java	24 Jan 2004 23:25:31 -0000	1.5
  +++ DefaultKernel.java	2 Feb 2004 11:31:37 -0000	1.6
  @@ -491,7 +491,24 @@
           {
               getLogger().debug( "disposal" );
           }
  +
           shutdown();
  +
  +        try
  +        {
  +            setState( DECOMMISSIONING );
  +            m_system.decommission();
  +        }
  +        catch( Throwable e )
  +        {
  +            if( getLogger().isWarnEnabled() )
  +            {
  +                final String error =
  +                  "Ignoring block decommissioning error.";
  +                getLogger().warn( error, e );
  +            }
  +        }
  +
           m_state.dispose();
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org