Author: akarasulu Date: Tue Dec 9 23:57:51 2003 New Revision: 1399 Added: incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/ incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/DefaultStage.java incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/EnqueuePredicate.java incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/Stage.java incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageConfig.java incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageHandler.java incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageMonitor.java incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageMonitorAdapter.java incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageThreadPool.java Log: Added the SEDA Stage code as common code - not a service. Added: incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/DefaultStage.java ============================================================================== --- (empty file) +++ incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/DefaultStage.java Tue Dec 9 23:57:51 2003 @@ -0,0 +1,319 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve" + and "Apache Software Foundation" must not be used to endorse or promote + products derived from this software without prior written + permission. For written permission, please contact apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation. For more information on the + Apache Software Foundation, please see . + +*/ +package org.apache.eve.seda ; + + +import java.util.Set ; +import java.util.HashSet ; +import java.util.LinkedList ; +import java.util.EventObject ; + + +/** + * The default Stage implementation. + * + * @author Alex Karasulu + * @author $Author$ + * @version $Revision$ + */ +public class DefaultStage implements Stage +{ + /** driver max wait/timeout in millis */ + private static final long DRIVER_WAIT = 200 ; + /** the configuration bean */ + protected final StageConfig m_config ; + /** this Stage's event queue */ + private final LinkedList m_queue = new LinkedList() ; + /** this Stage's active handler threads */ + private final Set m_activeWorkers = new HashSet() ; + + /** this Stage's StageDriver's driving thread */ + private Thread m_thread = null ; + /** the start stop control variable */ + private Boolean m_hasStarted = new Boolean( false ) ; + /** this Stage's monitor */ + private StageMonitor m_monitor = new StageMonitorAdapter() ; + + + // ------------------------------------------------------------------------ + // C O N S T R U C T O R S + // ------------------------------------------------------------------------ + + + /** + * Creates a DefaultStage using a configuration bean. + * + * @param a_config the configuration bean + */ + public DefaultStage( StageConfig a_config ) + { + m_config = a_config ; + m_hasStarted = new Boolean( false ) ; + } + + + // ------------------------------------------------------------------------ + // Stage Methods + // ------------------------------------------------------------------------ + + + /** + * @see org.apache.eve.seda.Stage# + * addPredicate(org.apache.eve.seda.EnqueuePredicate) + */ + public void addPredicate( EnqueuePredicate a_predicate ) + { + m_config.getPredicates().add( a_predicate ) ; + } + + + /** + * @see org.apache.eve.seda.Stage#getConfig() + */ + public StageConfig getConfig() + { + return m_config ; + } + + + /** + * @see org.apache.eve.seda.Stage#enqueue(java.util.EventObject) + */ + public void enqueue( final EventObject an_event ) + { + boolean l_isAccepted = true ; + + for ( int ii = 0; ii < m_config.getPredicates().size() && l_isAccepted; + ii++ ) + { + EnqueuePredicate l_test = + ( EnqueuePredicate ) m_config.getPredicates().get( ii ) ; + l_isAccepted &= l_test.accept( an_event ) ; + } + + if( l_isAccepted ) + { + synchronized ( m_queue ) + { + m_monitor.lockedQueue( this, an_event ) ; + m_queue.addFirst( an_event ) ; + m_queue.notifyAll() ; + } + + m_monitor.enqueueOccurred( this, an_event ) ; + } + else + { + m_monitor.enqueueRejected( this, an_event ) ; + } + } + + + /** + * Gets this Stage's monitor. + * + * @return returns the monitor + */ + public StageMonitor getMonitor() + { + return m_monitor ; + } + + + /** + * Sets this Stage's monitor. + * + * @param a_monitor the monitor to set + */ + public void setMonitor( StageMonitor a_monitor ) + { + m_monitor = a_monitor ; + } + + + // ------------------------------------------------------------------------ + // Runnable Implementations + // ------------------------------------------------------------------------ + + + /** + * The runnable driving the main thread of this Stage. + * + * @author Alex Karasulu + * @author $Author$ + * @version $Revision$ + */ + class StageDriver implements Runnable + { + public final void run() + { + m_monitor.startedDriver( DefaultStage.this ) ; + + while( m_hasStarted.booleanValue() ) + { + synchronized ( m_queue ) + { + if( m_queue.isEmpty() ) + { + try + { + m_queue.wait( DRIVER_WAIT ) ; + } + catch( InterruptedException e ) + { + try { stop() ; } catch ( Exception e2 ) + {/*NOT THROWN*/} + m_monitor.driverFailed( DefaultStage.this, e ) ; + } + } + else + { + EventObject l_event = + ( EventObject ) m_queue.removeLast() ; + m_monitor.eventDequeued( DefaultStage.this, l_event ) ; + Runnable l_runnable = new ExecutableHandler( l_event ) ; + m_config.getThreadPool().execute( l_runnable ) ; + } + } + } + } + } + + + /** + * The runnable driving the work of this Stage's handler. + * + * @author Alex Karasulu + * @author $Author$ + * @version $Revision$ + */ + class ExecutableHandler implements Runnable + { + final EventObject m_event ; + + public ExecutableHandler( EventObject an_event ) + { + m_event = an_event ; + } + + public void run() + { + synchronized( m_activeWorkers ) + { + m_activeWorkers.add( Thread.currentThread() ) ; + } + + try + { + m_config.getHandler().handleEvent( m_event ) ; + } + catch( Throwable t ) + { + m_monitor.handlerFailed( DefaultStage.this, m_event, t ) ; + } + + synchronized( m_activeWorkers ) + { + m_activeWorkers.remove( Thread.currentThread() ) ; + } + + m_monitor.eventHandled( DefaultStage.this, m_event ) ; + } + } + + + // ------------------------------------------------------------------------ + // start stop controls + // ------------------------------------------------------------------------ + + + /** + * Starts up this Stage's driver. + */ + public void start() + { + synchronized( m_hasStarted ) + { + if ( m_hasStarted.booleanValue() ) + { + throw new IllegalStateException( "Already started!" ) ; + } + + m_hasStarted = new Boolean( true ) ; + m_thread = new Thread( new StageDriver() ) ; + m_thread.start() ; + } + + m_monitor.started( this ) ; + } + + + /** + * Blocks calling thread until this Stage gracefully stops its driver and + * all its worker threads. + */ + public void stop() throws InterruptedException + { + synchronized( m_hasStarted ) + { + m_hasStarted = new Boolean( false ) ; + + synchronized( m_activeWorkers ) + { + while ( m_thread.isAlive() || ! m_activeWorkers.isEmpty() ) + { + Thread.sleep( 100 ) ; + } + } + } + + m_monitor.stopped( this ) ; + } +} Added: incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/EnqueuePredicate.java ============================================================================== --- (empty file) +++ incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/EnqueuePredicate.java Tue Dec 9 23:57:51 2003 @@ -0,0 +1,72 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve" + and "Apache Software Foundation" must not be used to endorse or promote + products derived from this software without prior written + permission. For written permission, please contact apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation. For more information on the + Apache Software Foundation, please see . + +*/ +package org.apache.eve.seda ; + + +import java.util.EventObject ; + + +/** + * Predicate used to determine whether or not an event is enqueued onto a Stage. + * + * @author Alex Karasulu + * @author $Author$ + * @version $Revision$ + */ +public interface EnqueuePredicate +{ + /** + * Determines whether or not an event gets enqueued onto a Stage queue. + * + * @param an_event the event to enqueue + * @return true if an enqueue operation is allowed false if it is denied + */ + public boolean accept( EventObject an_event ) ; +} Added: incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/Stage.java ============================================================================== --- (empty file) +++ incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/Stage.java Tue Dec 9 23:57:51 2003 @@ -0,0 +1,87 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve" + and "Apache Software Foundation" must not be used to endorse or promote + products derived from this software without prior written + permission. For written permission, please contact apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation. For more information on the + Apache Software Foundation, please see . + +*/ +package org.apache.eve.seda ; + + +import java.util.EventObject ; + + +/** + * Simple SEDA Stage interface. + * + * @author Alex Karasulu + * @author $Author$ + * @version $Revision$ + */ +public interface Stage +{ + /** + * Gets the configuration for this Stage. + * + * @return this Stage's configuration bean + */ + StageConfig getConfig() ; + + /** + * Enqueues an event onto this stage. + * + * @param an_event the event to enqueue + */ + void enqueue( EventObject an_event ) ; + + /** + * Adds an EnqueuePredicate to control what events can and cannot be + * enqueued onto this Stage. + * + * @param a_predicate the enqueue predecate to add + */ + void addPredicate( EnqueuePredicate a_predicate ) ; +} + Added: incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageConfig.java ============================================================================== --- (empty file) +++ incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageConfig.java Tue Dec 9 23:57:51 2003 @@ -0,0 +1,93 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve" + and "Apache Software Foundation" must not be used to endorse or promote + products derived from this software without prior written + permission. For written permission, please contact apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation. For more information on the + Apache Software Foundation, please see . + +*/ +package org.apache.eve.seda ; + + +import java.util.ArrayList ; + + +/** + * The configuration required for a stage. + * + * @author Alex Karasulu + * @author $Author$ + * @version $Revision$ + */ +public interface StageConfig +{ + /** + * Gets the name of the Stage. + * + * @return the name of the stage + */ + String getName() ; + + /** + * Gets the Stage's handler. + * + * @return the Stage's handler + */ + StageHandler getHandler() ; + + /** + * Gets the set of enqueue predicates used by the Stage to throttle and + * control the enqueue operation. + * + * @return the enqueue predicates used by the Stage + */ + ArrayList getPredicates() ; + + /** + * Gets the Stage's thread pool. + * + * @return the thread pool used by the Stage + */ + StageThreadPool getThreadPool() ; +} Added: incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageHandler.java ============================================================================== --- (empty file) +++ incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageHandler.java Tue Dec 9 23:57:51 2003 @@ -0,0 +1,73 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve" + and "Apache Software Foundation" must not be used to endorse or promote + products derived from this software without prior written + permission. For written permission, please contact apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation. For more information on the + Apache Software Foundation, please see . + +*/ +package org.apache.eve.seda ; + + +import java.util.EventObject ; +import java.util.EventListener ; + + +/** + * Thread safe Event handler used by Stages. + * + * @author Alex Karasulu + * @author $Author: akarasulu $ + * @version $Revision: 1.3 $ + */ +public interface StageHandler + extends EventListener +{ + /** + * Handles an event for the Stage. + * + * @param a_event the event to process or handle. + */ + void handleEvent( EventObject a_event ) ; +} Added: incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageMonitor.java ============================================================================== --- (empty file) +++ incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageMonitor.java Tue Dec 9 23:57:51 2003 @@ -0,0 +1,147 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve" + and "Apache Software Foundation" must not be used to endorse or promote + products derived from this software without prior written + permission. For written permission, please contact apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation. For more information on the + Apache Software Foundation, please see . + +*/ +package org.apache.eve.seda ; + + +import java.util.EventObject ; + + +/** + * Interface used to monitor Stage services. + * + * @author Alex Karasulu + * @author $Author$ + * @version $Revision$ + */ +public interface StageMonitor +{ + /** + * Monitors Stage has starts. + * + * @param a_stage the started Stage + */ + void started( Stage a_stage ) ; + + /** + * Monitors Stage has stops. + * + * @param a_stage the stopped Stage + */ + void stopped( Stage a_stage ) ; + + /** + * Monitors StageDriver starts. + * + * @param a_stage the Stage whose driver started + */ + void startedDriver( Stage a_stage ) ; + + /** + * Monitor for successful enqueue operations on the stage. + * + * @param a_stage the stage enqueued on + * @param an_event the event enqueued + */ + void enqueueOccurred( Stage a_stage, EventObject an_event ) ; + + /** + * Monitor for failed enqueue operations on the stage. + * + * @param a_stage the stage where enqueue failed + * @param an_event the event enqueue failed on + */ + void enqueueRejected( Stage a_stage, EventObject an_event ) ; + + /** + * Queue lock acquired to enqueue an event. + * + * @param a_stage the Stage whose queue lock was acquired + * @param an_event the event to be enqueued + */ + void lockedQueue( Stage a_stage, EventObject an_event ) ; + + /** + * Monitor for dequeue operations. + * + * @param a_stage the Stage dequeued + * @param an_event the event that was dequeued + */ + void eventDequeued( Stage a_stage, EventObject an_event ) ; + + /** + * Monitor for successfully completing the handling of an event. + * + * @param a_stage the Stage processing the event + * @param an_event the event that was handled + */ + void eventHandled( Stage a_stage, EventObject an_event ) ; + + // ------------------------------------------------------------------------ + // failure monitors + // ------------------------------------------------------------------------ + + /** + * Monitors driver thread interruption failures. + * + * @param a_stage the stage that caused the failure + * @param a_fault the faulting exception + */ + void driverFailed( Stage a_stage, InterruptedException a_fault ) ; + + /** + * Monitors handler failures. + * + * @param a_stage the stage that caused the failure + * @param an_event the event the handler failed on + * @param a_fault the faulting exception + */ + void handlerFailed( Stage a_stage, EventObject an_event, + Throwable a_fault ) ; +} Added: incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageMonitorAdapter.java ============================================================================== --- (empty file) +++ incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageMonitorAdapter.java Tue Dec 9 23:57:51 2003 @@ -0,0 +1,150 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve" + and "Apache Software Foundation" must not be used to endorse or promote + products derived from this software without prior written + permission. For written permission, please contact apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation. For more information on the + Apache Software Foundation, please see . + +*/ +package org.apache.eve.seda; + +import java.util.EventObject; + +/** + * $todo$ doc me + * + * @author Alex Karasulu + * @author $Author$ + * @version $Revision$ + */ +public class StageMonitorAdapter implements StageMonitor +{ + /* (non-Javadoc) + * @see org.apache.eve.seda.StageMonitor#started(org.apache.eve.seda.Stage) + */ + public void started( Stage a_stage ) + { + } + + + /* (non-Javadoc) + * @see org.apache.eve.seda.StageMonitor#stopped(org.apache.eve.seda.Stage) + */ + public void stopped( Stage a_stage ) + { + } + + + /* (non-Javadoc) + * @see org.apache.eve.seda.StageMonitor#startedDriver( + * org.apache.eve.seda.Stage) + */ + public void startedDriver( Stage a_stage ) + { + } + + + /* (non-Javadoc) + * @see org.apache.eve.seda.StageMonitor#enqueueOccurred( + * org.apache.eve.seda.Stage, java.util.EventObject) + */ + public void enqueueOccurred( Stage a_stage, EventObject an_event ) + { + } + + + /* (non-Javadoc) + * @see org.apache.eve.seda.StageMonitor#enqueueRejected( + * org.apache.eve.seda.Stage, java.util.EventObject) + */ + public void enqueueRejected( Stage a_stage, EventObject an_event ) + { + } + + + /* (non-Javadoc) + * @see org.apache.eve.seda.StageMonitor#lockedQueue( + * org.apache.eve.seda.Stage, java.util.EventObject) + */ + public void lockedQueue( Stage a_stage, EventObject an_event ) + { + } + + + /* (non-Javadoc) + * @see org.apache.eve.seda.StageMonitor#eventDequeued( + * org.apache.eve.seda.Stage, java.util.EventObject) + */ + public void eventDequeued( Stage a_stage, EventObject an_event ) + { + } + + + /* (non-Javadoc) + * @see org.apache.eve.seda.StageMonitor#eventHandled( + * org.apache.eve.seda.Stage, java.util.EventObject) + */ + public void eventHandled( Stage a_stage, EventObject an_event ) + { + } + + + /* (non-Javadoc) + * @see org.apache.eve.seda.StageMonitor#driverFailed( + * org.apache.eve.seda.Stage, java.lang.InterruptedException) + */ + public void driverFailed( Stage a_stage, InterruptedException a_fault ) + { + } + + + /* (non-Javadoc) + * @see org.apache.eve.seda.StageMonitor#handlerFailed( + * org.apache.eve.seda.Stage, java.util.EventObject, java.lang.Throwable) + */ + public void handlerFailed( Stage a_stage, EventObject an_event, + Throwable a_fault) + { + } +} Added: incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageThreadPool.java ============================================================================== --- (empty file) +++ incubator/directory/ldap/trunk/eve/frontend/common/api/src/java/org/apache/eve/seda/StageThreadPool.java Tue Dec 9 23:57:51 2003 @@ -0,0 +1,69 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve" + and "Apache Software Foundation" must not be used to endorse or promote + products derived from this software without prior written + permission. For written permission, please contact apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation. For more information on the + Apache Software Foundation, please see . + +*/ +package org.apache.eve.seda ; + + +/** + * A pool of threads to be used by a Stage. + * + * @author Alex Karasulu + * @author $Author$ + * @version $Revision$ + */ +public interface StageThreadPool +{ + /** + * Allocates Thread from pool to execute a runnable and releases it on + * completion. + * + * @param a_runnable the runnable to execute + */ + void execute( Runnable a_runnable ) ; +}