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>