On Tue, 18 Dec 2001, Berin Loritsch wrote: > giacomo wrote: > > > On Tue, 11 Dec 2001, Berin Loritsch wrote: > > > > So far it seems a good way to manage events. I have to confess that I > > will have to read it again in some days as it is very abstract to me for > > now. But can you quickly explain in which part of Cocoon it will help > > (sorry, but I havn't got where you'd like to put this in the Cocoon > > system). > > > This is more for asynchronous command signals that are used to manage the > cache and other background systems. It will also be used to drive the > ActiveMonitor as well as database connection testing, removing dead weight > from the cache, regenerate XSP/Sitemap objects, etc.
I thought that is is sort of those things but wasn't sure enough. > A command queue works to allow one or two management threads to perform > all management work in Cocoon. It can also drive asyncronous initialization > events (like the beginning lifecycle for all the components). That way > all management and initialization does not affect the direct run-time of > using Components. The DataSources code will be made quicker due to the > fact that we won't have to call the "db ping" query prior to returning the > connection. Ok. > Another thing that will help is the profiler/instrumentation that we are > developing for the next version of Excalibur. This is a way that the > StatusGenerator would be able to get pool size information and max pool > sizes, etc. I've seen this on the valond list. Cool beans :) Thanks, Giacomo > > > > > > Giacomo > > > > > >>NOTE: I proposed this to Avalon team today, and it would be what feeds the > >> ActiveMonitor, PoolController events, etc. It allows a finite number > >> of threads to ensure the maintenance aspects of the pools, etc; while > >> minimizing the critical path execution times. > >> > >>I would like to propose a new scratchpad component to help with management > >>and maintenance tasks that should be performed asynchronously from the > >>main program flow. > >> > >>While I do want to base a similar approach to SEDA in Avalon, I think it > >>would be better served by defining the concept of EventQueues in Excalibur, > >>with full fledged Stages defined in CornerStone. This will change the > >>way we think about some problems, but that's a good thing. > >> > >>The full Staged Event-Driven Architecture assembles a pipeline of Stages. > >>These Stages contain one or more Sources, and one or more Sinks. Both > >>the Sources and Sinks are Queues, and consist of QueueElements. The Stage > >>is wrapped by the system to associate an EventHandler and a ThreadManager. > >> > >>In ASCII art, a single stage is something (conceptually) like this: > >> > >>+--------------------------------------------+ > >>| StageWrapper | > >>| | > >>| +--------+ +-----------+ +------------+ | > >>| | Source | | Stage | |EventHandler| | > >>| +--------+ | | +------------+ | > >>| | +-------+ | | > >>| +--------+ | | Sink | | | > >>| | Source | | +-------+ | +-------------+ | > >>| +--------+ | | |ThreadManager| | > >>| +-----------+ +-------------+ | > >>+--------------------------------------------+ > >> > >>The application is built on Stages and associated EventHandlers. For instance, > >>the EventHandler would have a reference to the Stage, and forward events to the > >>actual stage logic. The Stage's responsibility is to act on those events, and > >>send new events to the various Sinks in it's responsibility. > >> > >>With the exception of the getWrapper() method, Matt Welsh did a good job of > >>conceptualizing SEDA with Inversion of Control principles. > >> > >>The ThreadManager's responsibility is to both manage the thread creation policies, > >>but also pull the events from the Source queue, and send them to the EventHandler. > >>There are two different types of EventHandlers: regular (ThreadSafe) and >SingleThreaded. > >>We already express these differences with our interfaces, so using the specialized > >>interface is not needed. > >> > >>What I want to do for Excalibur is to take the concept of an EventQueue (Source > >>or Sink is not necessary at this time) and have it controlled by a ThreadManager > >>going to an EventHandler. > >> > >>In essence, I am proposing everything inside the StageWrapper for Excalibur > >>and the Stage and purpose-specific queues for Cornerstone. > >> > >>For Excalibur, it would provide a nice way of performing asynchronous maintenance > >>commands on all the Excalibur Components. In the absence of the event queues, > >>all the Components would be unchanging, or at the very least blocking for >management > >>events. > >> > >>This does follow IoC, and makes the perceived performance of the system faster > >>under high load. We will have to have a method of adding events to the >CommandQueue. > >> > >>The Queue hierarchy I would like to see in the end: > >> > >>EventQueue (Basic mechanics) > >>CommandQueue (Contains a queue of maintenance commands--some repeatable events, >some > >> run once) > >>Source (In Cornerstone) > >>Sink (In CornerStone) > >> > >>The Source and Sink queues should not contain repeatable events, as they are only >needed > >>for the CommandQueue. > >> > >> > >> > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, email: [EMAIL PROTECTED] > > > > . > > > > > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]