$Id: README 94636 2011-10-06 13:00:24Z johnnyw $ FOCUS README ============ Motivation: ---------- Middleware is often developed as a set of frameworks that can be extended and configured with alternative implementations of key components, such as different types of transport protocols e.g., TCP/IP, VME, or shared memory), event demultiplexing mechanisms e.g., reactive-, proactive-, or thread-based), request demultiplexing strategies (e.g., dynamic hashing, perfect hashing, or active demuxing), and concurrency models (e.g., thread-per-connection, thread pool, or thread-pre-request). A particular DRE application, however, may only use a small subset of the potential framework alternatives. As a result, general-purpose middleware may be overly extensible, i.e., contain unnecessary overhead for indirection and dynamic dispatching that is not needed for use cases in a particular context. A challenge is to develop middleware specialization techniques that can eliminate unnecessary overhead associated with overly extensible middleware framework implementations for certain product variants or application-specific contexts. Example and Approach: -------------------- The reactor framework in ACE allows plug and play of different reactors such as Select, TP, Devpoll etc. The TAO middleware implementation and applications that run atop TAO typically use one particular implementation of the Reactor. For example, a single-threaded application might use select_* reactors. The Reactor framework uses the bridge pattern to transparently invoke operations on the right reactors. When the concrete Reactor is known, it should be possible to specialize the framework to use the concrete reactor directly rather than use the bridge. As a part of the Feature Oriented Customizer (FOCUS) tool being ,we are trying to specialize frameworks when the concrete implementation type is known a priori. FOCUS provides an XML based transformation engine, where the specialization transformations are captured in XML file and a weaver specializes the code. To help in this transformation process, FOCUS applies markers within the source code. These markers are added as special comments. For example, //@@ REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK represents a hook where forward declarations and include files are added by the weaver. As these markers are comments therefore should not affect normal applications in *any* manner. Additionally, applications that use multiple reactor implementations not be affected/do not need any change. Currently, these specializations are targeted for TAO middleware, where applications know the target reactor a priori and want to leverage the specialization to improve performance. FOCUS Installation ------------------ . FOCUS is written using Perl and does not require any compilation. Additionally FOCUS does not depend on any external tools. Requirements ------------ . FOCUS has been tested on Perl version 5.8.0 and uses the following Perl packages: -- XML::DOM package --> Perl package for processing XML DTDs Sample Usage: ------------- FOCUS can be invoked from the command line in the following manner: cmd>$ACE_ROOT/bin/FOCUS/FOCUS.pl --reactor-spl=select-st --prefix-path=/build/arvindk/ACE_wrappers --output-prefix=/build/arvindk/spl-files More Information: ----------------- More information about FOCUS should be available from the docs directory.