svn commit: rev 23213 - in avalon/trunk/planet/facilities/http: impl/src/main/org/apache/avalon/http/impl spi/src/main/org/apache/avalon/http test/src/main/test/http

[email protected]
Newsgroups gmane.comp.jakarta.avalon.cvs
Message-ID <[email protected]>
Author: niclas
Date: Sat Jul 24 08:56:33 2004
New Revision: 23213

Modified:
   avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/ComponentModelHolder.java
   avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/DefaultModelListener.java
   avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/DefaultServer.java
   avalon/trunk/planet/facilities/http/spi/src/main/org/apache/avalon/http/HttpService.java
   avalon/trunk/planet/facilities/http/test/src/main/test/http/TestComponent.java
Log:
Added support for Dynamic unloading of components from the Http Facility.

Modified: avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/ComponentModelHolder.java
==============================================================================
--- avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/ComponentModelHolder.java	(original)
+++ avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/ComponentModelHolder.java	Sat Jul 24 08:56:33 2004
@@ -76,12 +76,12 @@
                IOException
     {        
 
-        boolean servlet_error=true;
+        boolean servlet_error = true;
 
         try
         {
             m_adapter.service( request, response );
-            servlet_error=false;
+            servlet_error = false;
         }
         catch(UnavailableException e)
         {

Modified: avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/DefaultModelListener.java
==============================================================================
--- avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/DefaultModelListener.java	(original)
+++ avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/DefaultModelListener.java	Sat Jul 24 08:56:33 2004
@@ -152,12 +152,11 @@
             {
                 if( flag )
                 {
-                    if( getLogger().isInfoEnabled() )
-                    {
-                        getLogger().info( 
-                          "component: " + component + " is a HttpRequestHandler" );
-                    }
                     m_server.register( component );
+                }
+                else
+                {
+                    m_server.unregister( component );
                 }
             }
         }

Modified: avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/DefaultServer.java
==============================================================================
--- avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/DefaultServer.java	(original)
+++ avalon/trunk/planet/facilities/http/impl/src/main/org/apache/avalon/http/impl/DefaultServer.java	Sat Jul 24 08:56:33 2004
@@ -99,7 +99,7 @@
    /** 
     * Mapping table for URL space to Servlet
     */
-    private HashMap m_ServletMap;
+    private HashMap m_ComponentMap;
      
 
    //---------------------------------------------------------
@@ -168,6 +168,8 @@
 
         m_server.setTrace( true );
 
+        // Niclas: This needs to be changed ASAP as Jetty has 
+        //         moved into Commons-Logging in the next generation.
         //
         // map the jetty logging channel to the avalon logger
         //
@@ -238,7 +240,7 @@
             String component = servletConf.getChild( "component" ).getValue( "" );
             String url = servletConf.getChild( "url" ).getValue( "" );
             if( ! "".equals( component ) && ! "".equals( url ) )
-                m_ServletMap.put( component.trim(), url.trim() );
+                m_ComponentMap.put( component.trim(), url.trim() );
         }
     }
         
@@ -273,15 +275,14 @@
     public void register( ComponentModel model )
     {
         final String path = model.getPath();
-        final String url = (String) m_ServletMap.get( path );
+        final String url = (String) m_ComponentMap.get( path );
         
         getLogger().info( 
           "registering servlet: " 
           + path + " to url: " + url );
         
-        HttpContext context = m_server.getContext( path + "*" );
-        ContainmentModelHandler handler = 
-          getContainmentHandler( context, path );
+        HttpContext context = m_server.getContext( path );
+        ContainmentModelHandler handler = getContainmentHandler( context, path );
         handler.addComponentModel( model );
         m_server.addContext( context );
         if( m_server.isStarted() )
@@ -297,6 +298,23 @@
         }
     }
 
+   /**
+    * Unregister a servlet under a context.
+    * @param model the component model
+    */
+    public void unregister( ComponentModel model )
+    {
+        final String path = model.getPath();
+        final String url = (String) m_ComponentMap.get( path );
+        
+        getLogger().info( 
+          "unregistering servlet: " 
+          + path + " from url: " + url );
+        
+        HttpContext context = m_server.getContext( path );
+        m_server.removeContext( context );
+    }
+    
     private ContainmentModelHandler getContainmentHandler( 
       HttpContext context, String partition )
     {

Modified: avalon/trunk/planet/facilities/http/spi/src/main/org/apache/avalon/http/HttpService.java
==============================================================================
--- avalon/trunk/planet/facilities/http/spi/src/main/org/apache/avalon/http/HttpService.java	(original)
+++ avalon/trunk/planet/facilities/http/spi/src/main/org/apache/avalon/http/HttpService.java	Sat Jul 24 08:56:33 2004
@@ -25,8 +25,14 @@
 public interface HttpService
 {
    /**
-    * Register a servlet under a context.
+    * Register a component model under a context.
     * @param model the component model
     */
     void register( ComponentModel model );
+
+   /**
+    * Unregister the component model under the context.
+    * @param model the component model
+    */
+    void unregister( ComponentModel model );
 }

Modified: avalon/trunk/planet/facilities/http/test/src/main/test/http/TestComponent.java
==============================================================================
--- avalon/trunk/planet/facilities/http/test/src/main/test/http/TestComponent.java	(original)
+++ avalon/trunk/planet/facilities/http/test/src/main/test/http/TestComponent.java	Sat Jul 24 08:56:33 2004
@@ -43,7 +43,7 @@
  * requests.
  * 
  * @avalon.component name="test" lifestyle="thread"
- * @avalon.service type="org.apache.avalon.http.Handler"
+ * @avalon.service type="org.apache.avalon.http.HttpRequestHandler"
  * @author <a href="mailto:[email protected]">Avalon Development Team</a>
  */
 public class TestComponent extends AbstractHttpRequestHandler
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.