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