Author: cziegeler Date: Thu Oct 28 08:31:36 2004 New Revision: 55866 Removed: cocoon/trunk/lib/core/excalibur-event-api-1.1.jar cocoon/trunk/lib/core/excalibur-event-impl-1.1.jar Modified: cocoon/trunk/gump.xml cocoon/trunk/lib/jars.xml cocoon/trunk/src/blocks/axis/java/org/apache/cocoon/webservices/system/System.java cocoon/trunk/src/java/org/apache/cocoon/Cocoon.java cocoon/trunk/src/java/org/apache/cocoon/components/flow/ContinuationsManagerImpl.java Log: Remove dependency to excalibur event Add own simple background thread for continuation handling
Modified: cocoon/trunk/gump.xml ============================================================================== --- cocoon/trunk/gump.xml (original) +++ cocoon/trunk/gump.xml Thu Oct 28 08:31:36 2004 @@ -61,8 +61,6 @@ <depend project="excalibur-store"/> <depend project="excalibur-pool"/> <depend project="excalibur-logger"/> - <depend project="excalibur-event-api"/> - <depend project="excalibur-event-impl"/> <depend project="jakarta-regexp"/> <depend project="jakarta-servletapi-4"/> Modified: cocoon/trunk/lib/jars.xml ============================================================================== --- cocoon/trunk/lib/jars.xml (original) +++ cocoon/trunk/lib/jars.xml Thu Oct 28 08:31:36 2004 @@ -58,29 +58,6 @@ </file> <file> - <title>Excalibur Event</title> - <description> - This is the Excalibur Event package which includes event queues, - asynchronous command processing, and the interfaces to support - event based programming. - </description> - <used-by>Cocoon Flow</used-by> - <lib>core/excalibur-event-api-1.1.jar</lib> - <homepage>http://excalibur.apache.org/</homepage> - </file> - <file> - <title>Excalibur Event</title> - <description> - This is the Excalibur Event package which includes event queues, - asynchronous command processing, and the interfaces to support - event based programming. - </description> - <used-by>Cocoon Flow</used-by> - <lib>core/excalibur-event-impl-1.1.jar</lib> - <homepage>http://excalibur.apache.org/</homepage> - </file> - - <file> <title>Excalibur I18n</title> <description> Part of Excalibur, it is a set of classes and patterns that Modified: cocoon/trunk/src/blocks/axis/java/org/apache/cocoon/webservices/system/System.java ============================================================================== --- cocoon/trunk/src/blocks/axis/java/org/apache/cocoon/webservices/system/System.java (original) +++ cocoon/trunk/src/blocks/axis/java/org/apache/cocoon/webservices/system/System.java Thu Oct 28 08:31:36 2004 @@ -16,7 +16,8 @@ package org.apache.cocoon.webservices.system; import java.util.Properties; -import org.apache.excalibur.util.SystemUtil; + +import org.apache.commons.lang.SystemUtils; /** * Class which provides JVM system related SOAP services. @@ -41,26 +42,7 @@ * @return host architecture */ public String getArchitecture() { - return SystemUtil.architecture(); - } - - /** - * <code>getCPUInfo</code> returns host CPU information. - * - * @return host CPU information - */ - public String getCPUInfo() { - return SystemUtil.cpuInfo(); - } - - /** - * <code>getNumProcessors</code> returns the number of processors in - * this machine. - * - * @return number of processors - */ - public int getNumProcessors() { - return SystemUtil.numProcessors(); + return SystemUtils.OS_ARCH; } /** @@ -69,7 +51,7 @@ * @return host operating system */ public String getOperatingSystem() { - return SystemUtil.operatingSystem(); + return SystemUtils.OS_NAME; } /** @@ -79,6 +61,6 @@ * @return host operating system version */ public String getOperatingSystemVersion() { - return SystemUtil.osVersion(); + return SystemUtils.OS_VERSION; } } Modified: cocoon/trunk/src/java/org/apache/cocoon/Cocoon.java ============================================================================== --- cocoon/trunk/src/java/org/apache/cocoon/Cocoon.java (original) +++ cocoon/trunk/src/java/org/apache/cocoon/Cocoon.java Thu Oct 28 08:31:36 2004 @@ -37,7 +37,6 @@ import org.apache.avalon.framework.context.Contextualizable; import org.apache.avalon.framework.context.DefaultContext; import org.apache.avalon.framework.logger.AbstractLogEnabled; -import org.apache.avalon.framework.parameters.Parameters; import org.apache.avalon.framework.service.ServiceException; import org.apache.avalon.framework.service.ServiceManager; import org.apache.avalon.framework.service.Serviceable; @@ -57,10 +56,6 @@ import org.apache.cocoon.util.ClassUtils; import org.apache.commons.lang.SystemUtils; -import org.apache.excalibur.event.Queue; -import org.apache.excalibur.event.command.CommandManager; -import org.apache.excalibur.event.command.TPCThreadManager; -import org.apache.excalibur.event.command.ThreadManager; import org.apache.excalibur.source.Source; import org.apache.excalibur.source.SourceResolver; import org.apache.excalibur.source.impl.URLSource; @@ -88,10 +83,6 @@ static Cocoon instance; - private ThreadManager threads; - - private CommandManager commands; - /** The application context */ private Context context; @@ -168,32 +159,7 @@ public void contextualize(Context context) throws ContextException { if (this.context == null) { this.context = new ComponentContext(context); - - try { - DefaultContext setup = (DefaultContext) this.context; - this.threads = new TPCThreadManager(); - - Parameters params = new Parameters(); - params.setParameter("threads-per-processor", "1"); - params.setParameter("sleep-time", "100"); - params.setParameter("block-timeout", "1000"); - params.setParameter("force-shutdown", "true"); - params.makeReadOnly(); - - ContainerUtil.enableLogging(this.threads, getLogger().getChildLogger("thread.manager")); - ContainerUtil.parameterize(this.threads, params); - ContainerUtil.initialize(this.threads); - - this.commands = new CommandManager(); - ContainerUtil.enableLogging(this.commands, getLogger().getChildLogger("thread.manager")); - this.threads.register(this.commands); - - setup.put(Queue.ROLE, this.commands.getCommandSink()); - - setup.makeReadOnly(); - } catch (Exception e) { - getLogger().error("Could not set up the Command Manager", e); - } + ((DefaultContext)this.context).makeReadOnly(); this.classpath = (String)context.get(Constants.CONTEXT_CLASSPATH); this.workDir = (File)context.get(Constants.CONTEXT_WORK_DIR); @@ -455,18 +421,10 @@ System.setProperties(systemProps); } - /** - * Dispose this instance + /* (non-Javadoc) + * @see org.apache.avalon.framework.activity.Disposable#dispose() */ public void dispose() { - if (this.commands != null && this.threads != null) { - this.threads.deregister(this.commands); - } - ContainerUtil.dispose(this.commands); - this.commands = null; - ContainerUtil.dispose(this.threads); - this.threads = null; - if (this.serviceManager != null) { if (this.requestListener != null) { this.serviceManager.release(this.requestListener); Modified: cocoon/trunk/src/java/org/apache/cocoon/components/flow/ContinuationsManagerImpl.java ============================================================================== --- cocoon/trunk/src/java/org/apache/cocoon/components/flow/ContinuationsManagerImpl.java (original) +++ cocoon/trunk/src/java/org/apache/cocoon/components/flow/ContinuationsManagerImpl.java Thu Oct 28 08:31:36 2004 @@ -15,18 +15,6 @@ */ package org.apache.cocoon.components.flow; -import org.apache.avalon.framework.configuration.Configurable; -import org.apache.avalon.framework.configuration.Configuration; -import org.apache.avalon.framework.context.Context; -import org.apache.avalon.framework.context.ContextException; -import org.apache.avalon.framework.context.Contextualizable; -import org.apache.avalon.framework.logger.AbstractLogEnabled; -import org.apache.avalon.framework.thread.ThreadSafe; - -import org.apache.excalibur.event.Queue; -import org.apache.excalibur.event.Sink; -import org.apache.excalibur.event.command.RepeatedCommand; - import java.security.SecureRandom; import java.util.Collections; import java.util.HashMap; @@ -38,6 +26,12 @@ import java.util.SortedSet; import java.util.TreeSet; +import org.apache.avalon.framework.activity.Disposable; +import org.apache.avalon.framework.configuration.Configurable; +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.logger.AbstractLogEnabled; +import org.apache.avalon.framework.thread.ThreadSafe; + /** * The default implementation of [EMAIL PROTECTED] ContinuationsManager}. * @@ -49,8 +43,7 @@ */ public class ContinuationsManagerImpl extends AbstractLogEnabled - implements ContinuationsManager, Configurable, - ThreadSafe, Contextualizable { + implements ContinuationsManager, Configurable, Disposable, ThreadSafe { static final int CONTINUATION_ID_LENGTH = 20; static final String EXPIRE_CONTINUATIONS = "expire-continuations"; @@ -61,7 +54,7 @@ protected SecureRandom random; protected byte[] bytes; - protected Sink m_commandSink; + protected ContinuationInterrupt interrupt; /** * How long does a continuation exist in memory since the last @@ -103,26 +96,36 @@ bytes = new byte[CONTINUATION_ID_LENGTH]; } - /** - * Get the command sink so that we can be notified of changes + /* (non-Javadoc) + * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration) */ - public void contextualize(Context context) throws ContextException { - m_commandSink = (Sink) context.get(Queue.ROLE); - } - public void configure(Configuration config) { this.defaultTimeToLive = config.getAttributeAsInteger("time-to-live", (3600 * 1000)); final Configuration expireConf = config.getChild("expirations-check"); try { - final ContinuationInterrupt interrupt = new ContinuationInterrupt(expireConf); - this.m_commandSink.enqueue(interrupt); + this.interrupt = new ContinuationInterrupt(expireConf); + Thread thread = new Thread(interrupt); + thread.setDaemon(true); + thread.setName("continuation-interrupt"); + thread.start(); + Thread.yield(); } catch (Exception e) { getLogger().warn("Could not enqueue continuations expiration task. " + "Continuations will not automatically expire.", e); } } + /* (non-Javadoc) + * @see org.apache.avalon.framework.activity.Disposable#dispose() + */ + public void dispose() { + // stop the thread + if ( this.interrupt != null ) { + this.interrupt.doRun = false; + } + } + public WebContinuation createWebContinuation(Object kont, WebContinuation parent, int timeToLive, @@ -353,47 +356,43 @@ } - final class ContinuationInterrupt implements RepeatedCommand { - private final long m_interval; - private final long m_initialDelay; + final class ContinuationInterrupt implements Runnable { + private final long interval; + private final long initialDelay; + public boolean doRun; + /** * @param expireConf */ public ContinuationInterrupt(Configuration expireConf) { // only periodic time triggers are supported - m_initialDelay = - expireConf.getChild("offset", true).getValueAsLong(100); - m_interval = - expireConf.getChild("period", true).getValueAsLong(100); - } - - /** - * Repeat forever - */ - public int getNumberOfRepeats() { - return -1; - } - - /** - * Get the number of millis to wait between invocations - */ - public long getRepeatInterval() { - return m_interval; - } - - /** - * Get the number of millis to wait for the first invocation - */ - public long getDelayInterval() { - return m_initialDelay; + this.initialDelay = expireConf.getChild("offset", true).getValueAsLong(100); + this.interval = expireConf.getChild("period", true).getValueAsLong(100); } /** * expire any continuations that need expiring. */ - public void execute() throws Exception { - expireContinuations(); + public void run() { + this.doRun = true; + if ( this.initialDelay > 0 ) { + // Sleep + try { + Thread.sleep(this.initialDelay); + } catch (InterruptedException ignore) { + // ignore + } + } + while (doRun) { + expireContinuations(); + // Sleep + try { + Thread.sleep(this.interval); + } catch (InterruptedException ignore) { + // ignore + } + } } } }