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.