crafterm    2002/07/18 03:13:40

  Modified:    fortress/src/xdocs lifecycle-extensions.xml
  Log:
  Added some changes based on feedback from Berin, thanks mate.
  
  Revision  Changes    Path
  1.2       +84 -42    
jakarta-avalon-excalibur/fortress/src/xdocs/lifecycle-extensions.xml
  
  Index: lifecycle-extensions.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/fortress/src/xdocs/lifecycle-extensions.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- lifecycle-extensions.xml  17 Jul 2002 16:30:11 -0000      1.1
  +++ lifecycle-extensions.xml  18 Jul 2002 10:13:40 -0000      1.2
  @@ -1,5 +1,7 @@
   <?xml version="1.0"?>
   
  +<!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  +
   <document>
     <header>
       <title>Writing Lifecycle Extensions</title>
  @@ -9,9 +11,15 @@
     </header>
     <body>
   
  -  <s1 title="Introduction">
  +  <s1 title="What are lifecycle extensions ?">
  +   <p>
  +    Lifecycle extensions are additional stages a component can traverse through 
during
  +    it's lifetime. Lifecycle extensions allow a Container to provide extra 
functionality
  +    to Components in addition to the standard stages defined by Avalon Framework.
  +   </p>
  +
      <p>
  -    Avalon Framework defines a set of standard interfaces often termed as 
<b>Lifecycle</b>
  +    Avalon Framework defines a set of standard interfaces often termed as Lifecycle
       metainfo which tells the ComponentManager how a particular Component should be 
treated
       during it's life.
      </p>
  @@ -25,13 +33,30 @@
      <p>
       Sometimes it's useful to extend this development paradigm from the framework 
level
       into the application domain, to create customized lifecycle extensions that are 
called
  -    upon in addition to the standard set defined by the Avalon Framework. Such 
custom lifecycle
  -    stages can further enable domain specific logic, and allows the developer to 
reuse the same
  -    development and thinking paradigm as the standard lifecycle stages.
  +    upon in addition to the standard set defined by the Avalon Framework.
  +   </p>
  +
  +   <p>
  +    Such custom lifecycle stages can further enable domain specific logic across 
many,
  +    perhaps even unrelated components, can reduce code duplication, and allows the 
developer
  +    to reuse the same development and thinking paradigm as the standard lifecycle 
stages.
  +   </p>
  +
  +   <p>
  +    For example, you might want to pass a specialized SecurityManager to some of 
your
  +    components before they are initialized, or have their internal state 
persistently cached
  +    during system shutdown and restored at during startup. You might want to pass 
user
  +    dependent decryption keys to your component, or give components the opportunity 
to
  +    recycle themselves before being disposed or returned to a pooled component 
handler.
  +   </p>
  +
  +   <p>
  +    The possibilities and number of extensions are only limited by the requirements 
of your
  +    particular application domain.
      </p>
     
      <p>
  -    This document describes how to add new lifecycle extensions to 
<strong>Fortress</strong>.
  +    This document describes how to add new lifecycle extensions using 
<strong>Fortress</strong>.
       This document assumes a knowledge of what an Avalon lifecycle is, and a basic 
understanding
       of the standard lifecycle interfaces Avalon Framework defines. References in 
this document to
       Component and ComponentManager can also be freely interpreted as Service and 
ServiceManager
  @@ -39,10 +64,10 @@
      </p>
     
      <p>
  -    <strong>Note</strong>, as at the time of writing, Fortress is the only Avalon 
container that
  +    <note>As at the time of writing, Fortress is the only Avalon container that
       supports lifecycle extensions, which means Components that use this feature 
will most likely
       only work as expected with Fortress, and not with the other Avalon containers
  -    (ExcaliburComponentManager, Phoenix, Merlin, Tweety, etc).
  +    (ExcaliburComponentManager, Phoenix, Merlin, Tweety, etc)</note>
      </p>
     
      <p>
  @@ -53,18 +78,20 @@
     
     </s1>
     
  -  <s1 title="Overview">
  +  <s1 title="How do I extend a Component's lifecycle ?">
      <p>
  -    Adding new lifecycle extensions to Fortress is straightforward. An overview of 
the process
  +    Extending a Component's lifecycle is straightforward. An overview of the process
       follows:
      </p>
     
       <ol>
  -     <li>Define a new component interface</li>
  +     <li>Define the new component interface</li>
     
        <p>
  -      Create a new interface defining the operations that should be called upon 
components
  -      that implement this interface.
  +      Create the new interface defining the operations that should be called upon 
components
  +      that implement this interface. Using the previously mentioned examples, this 
would be
  +      your <code>SecurityManageable</code>, <code>Cacheable</code>, 
<code>Decryptable</code>,
  +      <code>Recycleable</code> interfaces.
        </p>
     
        <li>Define an extension object that calls upon the methods defined in the new 
interface,
  @@ -100,15 +127,11 @@
         during the 4 phases defined later in this document.
        </p>
       </ol>
  -  
  -   <p>
  -    The rest of this document describes this process in greater detail.
  -   </p>
     </s1>
     
  -  <s1 title="Lifecycle phases">
  +  <s1 title="When can a Component's lifecycle be extended ?">
      <p>
  -    A Component's lifecycle can be broken down to the following phases:
  +    The life of any component can be broken down to the following phases:
      </p>
     
       <ol>
  @@ -122,37 +145,50 @@
     
        <p>
         When the Component is accessed via a ComponentManager/Selector
  -      (<code>lookup()/select()</code>)
  +      (<code>lookup()/select()</code>).
        </p>
     
        <li>Release</li>
     
        <p>
  -      When the Component is released via a ComponentManager/Selector 
(<code>release()</code>)
  +      When the Component is released via a ComponentManager/Selector 
(<code>release()</code>).
        </p>
     
        <li>Destruction</li>
     
        <p>
  -      When the Component is decomissioned, ready for garbage collection.
  +      When the Component is decommissioned, ready for garbage collection.
        </p>
     
       </ol>
     
      <p>
  -    A Component will go through it's Creation and Destruction phase only once. Since
  +    <note>A Component will go through it's Creation and Destruction phase only 
once. Since
       <code>ComponentHandler</code> classes can implement different handling 
strategies
       (Poolable, ThreadSafe, etc), the access and release phases of a component can be
  -    done multiple times.
  +    done multiple times.</note>
      </p>
     
      <p>
       Lifecycle extensions can be added to any of the above defined phases. This 
allows
       you to choose when your particular extension will be executed.
      </p>
  +
  +   <p>
  +    For example, thread or user dependent extensions would be added at the access 
and release
  +    levels (ie. when the component is retrieved and returned to the 
ComponentManager) as they
  +    depend on runtime data not available until they are actually used.
  +   </p>
  +
  +   <p>
  +    More static, or global extensions would be added at the creation or destruction 
level, since
  +    they do not depend on any external data that change during runtime, nor are 
they particular
  +    to any one context of use.
  +   </p>
  +
     </s1>
     
  -  <s1 title="Interfaces and Classes">
  +  <s1 title="Which interfaces and classes do I need to use ?">
     
      <p>
       Support for lifecycle extensions in Fortress is done using the following 
classes/interfaces.
  @@ -160,10 +196,14 @@
     
     <s2 title="The Component Extension Interface">
      <p>
  -    The component extension interface is what the developer writes. It defines the 
new
  -    interface that components will implement to receive additional functionality. 
There is no
  -    particular base interface the developer needs to extend, and the interface can 
be kept
  -    separate from the Container itself.
  +    This interface specifies the business particular extension components will be 
tested for.
  +    It defines the new interface that components will implement to receive 
additional
  +    functionality.
  +   </p>
  +
  +   <p>
  +    There is no particular base interface the developer needs to extend, and the 
interface
  +    can be kept separate from the Container itself.
      </p>
     </s2>
     
  @@ -192,7 +232,7 @@
      <p>
       The container <code>Context</code> is passed as a parameter to provide access 
to any
       miscellaneous objects that might be needed during extension code (to make use 
of this feature
  -    the container's Context will need to be prefilled with references and passed to 
the
  +    the container Context will need to be initialized with references and passed to 
the
       <code>ContextBuilder</code> during Fortress' startup sequence).
      </p>
     
  @@ -222,7 +262,7 @@
        
            /**
             * Destroy, called when the given component is being
  -          * decomissioned.
  +          * decommissioned.
             *
             * @param component a Component instance
             * @param context a Context instance
  @@ -274,7 +314,7 @@
      </p>
     
      <p>
  -    The LifecycleExtensionManager class API is too big to list here, instead have a 
look at
  +    The LifecycleExtensionManager class API is too big to list here, instead please 
look at
       the following <link 
href="http://jakarta.apache.org/avalon/excalibur/fortress/api/org/apache/excalibur/fortress/lifecycle/LifecycleExtensionManager.html";>link</link>.
 It essentially defines
       4 methods for executing extension objects at the various phases of a 
component's lifecycle,
       and several methods for registering extension objects with the manager.
  @@ -337,10 +377,10 @@
       </ol>
     
      <p>
  -    <strong>Note</strong>, components created via Fortress' ComponentHandler 
classes directly
  +    <note>, components created via Fortress' ComponentHandler classes directly
       will bypass the logic for <code>access</code> and <code>release</code> 
extensions. This is
       because the code performing this logic is located in the 
ComponentManager/Selector classes
  -    (independent from all handlers).
  +    (independent from all handlers).</note>
      </p>
     
     </s2>
  @@ -423,8 +463,8 @@
      </source>
      
      <p>
  -    <strong>Note</strong>, an extension class may run components through any given 
number of
  -    extensions, and are not limited to just one.
  +    <note>An extension class may run components through any given number of
  +    extensions, and are not limited to just one.</note>
      </p>
     
     </s2>
  @@ -489,7 +529,7 @@
          public void secure( final SecurityManager manager )
              throws SecurityException
          {
  -           getLogger().debug( "Received SecurityManager instance: " + manager );
  +           getLogger().info( "Received SecurityManager instance: " + manager );
      
              final String[] files = { "/tmp", "/vmlinuz", "/usr/lib/libc.a" };
      
  @@ -513,11 +553,13 @@
      <p>
       As you can see, it's a straightforward process to implement a new extension.
      </p>
  -  
  +
  +  </s1>
  +
  +  <s1 title="Need more information ?">  
      <p>
  -    That's it for the documentation so far, if you have any particular questions, 
comments,
  -    please send an email to the avalon developer's mailing
  -    <link href="mailto:[EMAIL PROTECTED]";>list</link>.
  +    If you have any particular questions, comments, etc, please send an email to 
the Avalon
  +    developer mailing <link href="mailto:[EMAIL PROTECTED]";>list</link>.
      </p>
     </s1>
     
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to