leosimons    02/05/12 12:52:51

  Modified:    src/xdocs book.xml features.xml getting-started.xml
                        index.xml install.xml
  Added:       src/xdocs for-developers-a-future.xml
                        for-developers-changes.xml
                        for-developers-project-structure.xml
                        for-developers-todo.xml guide-administrator.xml
                        guide-architecture.xml
                        guide-assemblers-creating-a-server-application.xml
                        guide-assemblers-what-is-a-server-application.xml
                        guide-assemblers.xml
                        guide-block-developers-creating-a-block.xml
                        
guide-block-developers-making-phoenix-compatible-comps.xml
                        guide-block-developers-what-is-a-block-listener.xml
                        guide-block-developers-what-is-a-block.xml
                        
guide-block-developers-what-is-an-application-listener.xml
                        guide-block-developers.xml guide-deployers.xml
                        guide-example-configuration.xml guide-roles.xml
                        reference-assembly-xml-specification.xml
                        reference-blockinfo-specification.xml
                        reference-config-xml-specification.xml
                        reference-environment-xml-specification.xml
  Removed:     src/xdocs administrator-guide.xml afuture.xml
                        assemblers-guide.xml assembly-xml-specification.xml
                        block-developers-guide.xml
                        blockinfo-specification.xml changes.xml
                        config-xml-specification.xml creating-a-block.xml
                        creating-a-server-application.xml
                        deployers-guide.xml
                        environment-xml-specification.xml
                        example-configuration.xml
                        making-phoenix-compatible-comps.xml
                        what-is-a-block-listener.xml what-is-a-block.xml
                        what-is-an-application-listener.xml
                        what-is-a-server-application.xml todo.xml
  Log:
  overhaul of phoenix documentation organisation as discussed previously. 
Brings material in sync with the framework documentation.
  
  Revision  Changes    Path
  1.13      +38 -36    jakarta-avalon-phoenix/src/xdocs/book.xml
  
  Index: book.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/xdocs/book.xml,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- book.xml  2 Apr 2002 18:56:21 -0000       1.12
  +++ book.xml  12 May 2002 19:52:49 -0000      1.13
  @@ -1,52 +1,54 @@
   <?xml version="1.0"?>
   
  -<book software="Phoenix" 
  -      title="Phoenix Documentation" 
  -      copyright="@year@ The Apache Software Foundation">
  +<book software="Avalon Phoenix"
  +      title="Avalon Phoenix Documentation"
  +      copyright="@year@ The Apache Software Foundation"
  +      xmlns:xlink="http://www.w3.org/1999/xlink";>
   
  -  <project label="Back to Avalon" href="@AVALON_BASE@" />
  +  <project label="Jakarta main" href="http://jakarta.apache.org/"; />
  +  <project label="Avalon main" href="@AVALON_BASE@" />
   
  -  <menu label="About">
  +  <menu label="Essentials">
       <menu-item label="Overview" href="index.html"/>
       <menu-item label="Features" href="features.html"/>
  +    <menu-item label="Getting started" href="getting-started.html"/>
       <menu-item type="external" id="downloads" label="Download" 
href="http://jakarta.apache.org/builds/jakarta-avalon/release/phoenix"/>
  -    <menu-item label="Getting Started" href="getting-started.html"/>
  -    <menu-item label="Making compatible components" 
href="making-phoenix-compatible-comps.html"/>
  -    <menu-item label="Installation" href="install.html"/>
  -    <menu-item label="A Future" href="afuture.html"/>
  -    <menu-item label="Todo" href="todo.html"/>
  -    <menu-item label="Changes" href="changes.html"/>
  -    <menu-item type="external" id="api-docs" label="API Docs" 
href="api/index.html"/>
  +    <menu-item label="Install" href="install.html"/>
     </menu>
   
  -  <menu label="Administrators Guide">
  -    <menu-item label="Overview" href="administrator-guide.html"/>
  +  <menu label="Guide">
  +    <menu-item label="Architectural Overview" 
href="guide-architecture.html"/>
  +    <menu-item label="Development Roles" href="guide-roles.html"/>
  +    <menu-item label="for Administrators" href="guide-administrator.html"/>
  +    <menu-item label="for Deployers" href="guide-deployers.html"/>
  +    <menu-item label="for Assemblers" href="guide-assemblers.html"/>
  +         <menu-item type="hidden" 
href="guide-assemblers-what-is-a-server-application.html"/>
  +         <menu-item type="hidden" 
href="guide-assemblers-creating-a-server-application.html"/>
  +    <menu-item label="for Block Developers" 
href="guide-block-developers.html" />
  +         <menu-item type="hidden" 
href="guide-block-developers-what-is-a-block.html" />
  +         <menu-item type="hidden" 
href="guide-block-developers-what-is-a-block-listener.html" />
  +         <menu-item type="hidden" 
href="guide-block-developers-what-is-an-application-listener.html" />    
  +         <menu-item type="hidden" 
href="guide-block-developers-creating-a-block.html" />
  +         <menu-item type="hidden" 
href="guide-block-developers-making-phoenix-compatible-comps.html"/>
  +    <menu-item label="Example configuration" 
href="guide-example-configuration.html" />
     </menu>
   
  -  <menu label="Deployers Guide">
  -    <menu-item label="Overview" href="deployers-guide.html"/>
  +  <menu label="Reference">
  +    <menu-item type="external" id="Api Docs" label="API Docs" 
href="api/index.html"/>
  +    <menu-item label="config.xml Specification" 
href="reference-config-xml-specification.html"/>
  +    <menu-item label="assembly.xml Specification" 
href="reference-assembly-xml-specification.html"/>
  +    <menu-item label="environment.xml Specification" 
href="reference-environment-xml-specification.html"/>
  +    <menu-item label="BlockInfo Specification" 
href="reference-blockinfo-specification.html" />
     </menu>
   
  -  <menu label="Assembler's Guide">
  -    <menu-item label="Overview" href="assemblers-guide.html"/>
  -    <menu-item label="What is a Server Application?" 
href="what-is-a-server-application.html"/>
  -    <menu-item label="Creating a Server Application" 
href="creating-a-server-application.html"/>
  -    <menu-item label="config.xml Specification" 
href="config-xml-specification.html"/>
  -    <menu-item label="assembly.xml Specification" 
href="assembly-xml-specification.html"/>
  -    <menu-item label="environment.xml Specification" 
href="environment-xml-specification.html"/>
  -  </menu>
  -
  -  <menu label="Block Developer's Guide">
  -    <menu-item label="Overview" href="block-developers-guide.html" />
  -    <menu-item label="What is a Block?" href="what-is-a-block.html" />
  -    <menu-item label="What is a Block Listener?" 
href="what-is-a-block-listener.html" />
  -    <menu-item label="What is an Application Listener?" 
href="what-is-an-application-listener.html" />    
  -    <menu-item label="BlockInfo Specification" 
href="blockinfo-specification.html" />
  -    <menu-item label="Creating a Block" href="creating-a-block.html" />
  -  </menu>
  -
  -  <menu label="All together">
  -    <menu-item label="Example configuration" 
href="example-configuration.html" />
  +  <menu label="For Developers">
  +    <menu-item label="Changes" href="for-developers-changes.html"/>
  +    <menu-item label="Todo" href="for-developers-todo.html"/>
  +    <menu-item type="external" id="coding-standards" label="Coding 
standards" href="@AVALON_BASE@/code-standards.html"/>
  +    <menu-item label="Project Structure" 
href="for-developers-project-structure.html"/>
  +    <menu-item type="external" id="cvs" label="CVS" 
href="http://jakarta.apache.org/site/cvsindex.html"/>
  +    <menu-item type="external" id="mailing-lists" label="Mailing Lists" 
href="http://jakarta.apache.org/site/mail.html"/>
  +    <menu-item label="A Future" href="for-developers-a-future.html"/>
     </menu>
   
   </book>
  
  
  
  1.4       +56 -5     jakarta-avalon-phoenix/src/xdocs/features.xml
  
  Index: features.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/xdocs/features.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- features.xml      2 Apr 2002 18:56:21 -0000       1.3
  +++ features.xml      12 May 2002 19:52:49 -0000      1.4
  @@ -5,9 +5,9 @@
   <document>
   
    <header>
  -  <title>Phoenix - Features</title>
  +  <title>Avalon Phoenix - Features</title>
     <authors>
  -    <person name="Avalon Documentation Team" 
email="[email protected]"/>
  +    <person name="Leo Simons" email="[EMAIL PROTECTED]"/>
     </authors>
    </header>
   
  @@ -15,10 +15,61 @@
   
   <s1 title="Introduction">
   
  -<p>
  -    This document will list the features of Phoenix. It is yet to be 
completed ;)
  -</p>
  +<p>This document is not complete yet...</p>
   
  +</s1>
  +
  +<s1 title="Extensible architecture">
  +     <p>Phoenix is written as an extensible micro-kernel. This allows you 
to:</p>
  +     <ul>
  +             <li>Customise behaviour quickly</li>
  +             <li>Plug in extra functionality effortlessly</li>
  +             <li>remove unneeded functionality for a small footprint</li>
  +     </ul>
  +</s1>
  +
  +<s1 title="Flexible environment">
  +     <p>Phoenix has native support for use in the following environments:</p>
  +     <ul>
  +             <li>command-line stand-alone program</li>
  +             <li>Unix daemon</li>
  +             <li>Embedded in other programs (including servlet engines)</li>
  +     </ul>
  +</s1>
  +
  +<s1 title="Integrated management">
  +     <p>Phoenix enables JMX management of your software:</p>
  +     <ul>
  +             <li>All aspects of phoenix itself are manageable, including
  +             startup/shutdown, deployment, management and logging.</li>
  +             <li>Applications running in phoenix are manageable, exposing
  +             their lifecycle (configuration, startup/shutdown, etc) and
  +             everything else you mark as manageable.</li>
  +     </ul>
  +</s1>
  +
  +<s1 title="Ease and speed up application development">
  +     <p>Phoenix is a container for (server) applications. It can host
  +     multiple applications within the same JVM, while keeping them securely
  +     isolated from each other.</p>
  +
  +     <p>Phoenix provides simple XML configuration files that allow you to
  +     rapidly assemble a customised server applications from readily available
  +     components (called blocks).</p>
  +
  +     <p>Phoenix provides the following services to hosted applications:</p>
  +     <ul>
  +             <li>Lifecycle management</li>
  +             <li>Configuration management</li>
  +             <li>Resource management</li>
  +             <li>Management exposure through JMX</li>
  +             <li>Automatic (re)deployment</li>
  +             <li>An isolated environment</li>
  +     </ul>
  +
  +     <p>Phoenix leverages the Avalon Framework, making it compatible with 
other
  +     Avalon-based projects like Excalibur and Cornerstone, enabling you to
  +     easily reuse their functionality.</p>
   </s1>
   
   </body>
  
  
  
  1.4       +42 -42    jakarta-avalon-phoenix/src/xdocs/getting-started.xml
  
  Index: getting-started.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/xdocs/getting-started.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- getting-started.xml       2 Apr 2002 18:56:21 -0000       1.3
  +++ getting-started.xml       12 May 2002 19:52:49 -0000      1.4
  @@ -3,7 +3,7 @@
   <document>
   
    <header>
  -  <title>Phoenix - Getting Started</title>
  +  <title>Avalon Phoenix - Getting Started</title>
     <authors>
      <person name="Avalon Documentation Team" 
email="[email protected]"/>
      <person name="Leo Simons" email="[EMAIL PROTECTED]"/>
  @@ -18,14 +18,14 @@
   <p>
       This document provides developers with simple documentation for getting
       started with Phoenix. For information about the overall structure of
  -    Avalon Framework (on which Phoenix is based), please refer to the 
  -    <link href="@AVALON_BASE@/framework/index.html">Design</link> document.
  +    Avalon Framework (on which Phoenix is based), please refer to the
  +    <link href="@AVALON_BASE@/framework/index.html">Framework 
documentation</link>.
   </p>
   
   <p>
       Instructions for downloading and installing Phoenix can be found on the
       <link href="install.html">Install</link> document.
  -</p>    
  +</p>
   
   <p>
       More detailed instructions will be added to this document in the future. 
Feel free
  @@ -36,15 +36,15 @@
   
   <s1 title="View Detailed API Documentation">
   
  -<p>    
  +<p>
       To generate a full set of detailed API documentation for Avalon, go to 
the base
  -    directory of source distribution and run the appropriate build script 
for your 
  +    directory of source distribution and run the appropriate build script 
for your
       platform with the parameter 'javadocs'.
   
       <source><![CDATA[
  -    
  +
       > build.[bat|sh] javadocs
  -    
  +
   ]]></source>
   
   </p>
  @@ -53,16 +53,16 @@
   <s1 title="Run the HelloWorld example">
   
   <p>
  -    After you have successfully built Phoenix, you can verify that it 
  -    has compiled correctly by running the HelloWorld demo Service 
Application. 
  +    After you have successfully built Phoenix, you can verify that it
  +    has compiled correctly by running the HelloWorld demo Service 
Application.
   </p>
  -<p>   
  +<p>
       Firstly you will need to get the demo-helloword.sar file and drop it into
  -    the apps directory of Phoenix.  Get it from <link 
href="TODO">TODO</link> or build 
  +    the apps directory of Phoenix.  Get it from <link 
href="TODO">TODO</link> or build
       it from its CVS - <link 
href="http://cvs.apache.org/viewcvs/jakarta-avalon-apps/demo/";>
       http://cvs.apache.org/viewcvs/jakarta-avalon-apps/demo/</link>.
   </p>
  -<p>   
  +<p>
       Then fire up phoenix with the following command:
   
       <source><![CDATA[
  @@ -86,34 +86,34 @@
   
       ]]></source>
   </p>
  -<p>   
  -    This shows that Phoenix has unpacked and launched the server application 
contained 
  -    within the demo-helloworld.sar file.  If you close and relaunch Phoenix, 
it should 
  -    restart the application.  
  +<p>
  +    This shows that Phoenix has unpacked and launched the server application 
contained
  +    within the demo-helloworld.sar file.  If you close and relaunch Phoenix, 
it should
  +    restart the application.
   </p>
   <p>
  -    As examples go this is a fairly simple one.  You should ignore the 
altrmihelloworldserver, 
  -    rmihelloworldserver and soaphelloworldserver packages as they are 
retrofitting the 
  -    helloworld demo with remote capability using three technologies.  
HelloWorld uses 
  -    connection management from the Avalon-Cornerstone project, which is good 
as it allows us to 
  +    As examples go this is a fairly simple one.  You should ignore the 
altrmihelloworldserver,
  +    rmihelloworldserver and soaphelloworldserver packages as they are 
retrofitting the
  +    helloworld demo with remote capability using three technologies.  
HelloWorld uses
  +    connection management from the Avalon-Cornerstone project, which is good 
as it allows us to
       share connection pooling across multiple servers.
   </p>
   </s1>
   <s1 title="The Phoenix Developer Kit - A different example">
   <p>
  -    This self contained kit could be considered a starter project for 
someone wanting to make a 
  -    Phoenix compatible application.  The idea is that you start with this 
skeleton including 
  -    Ant build script and then add in more and more as your se code to copy 
from elsewhere.  
  -</p>
  -<p>    
  -    This  also demonstrates that it is possible to make a server application 
that is dual mode. 
  -    Dual mode to us is the ability for the server application to run inside 
Phoenix and to 
  -    stand-alone from the command line.  It is a little bit of a sleight of 
hand as the codebase 
  +    This self contained kit could be considered a starter project for 
someone wanting to make a
  +    Phoenix compatible application.  The idea is that you start with this 
skeleton including
  +    Ant build script and then add in more and more as your se code to copy 
from elsewhere.
  +</p>
  +<p>
  +    This  also demonstrates that it is possible to make a server application 
that is dual mode.
  +    Dual mode to us is the ability for the server application to run inside 
Phoenix and to
  +    stand-alone from the command line.  It is a little bit of a sleight of 
hand as the codebase
       would be zipped into two forms - the sar file for phoenix and a jar file 
for standalone.
   </p>
   <p>
  -    The Phoenix development kit originates in Phoenix's CVS, but for 
convenience is downloadable 
  -    from <link href="TODO">TODO</link>.  When you have that file, unzip it 
and immediately launch 
  +    The Phoenix development kit originates in Phoenix's CVS, but for 
convenience is downloadable
  +    from <link href="TODO">TODO</link>.  When you have that file, unzip it 
and immediately launch
       ant to make the jars and sars.  There are four:
       <ol>
         <li>phoenix-demo.sar - the server app in Phoenix form</li>
  @@ -123,35 +123,35 @@
       </ol>
   
       The Server app in standalone mode after being tested with the client 
app(see below):
  -  
  +
       <source><![CDATA[
   java -jar phoenix-demo-server.jar
   PDK Demo listening on port 7654
   Ctrl-C to exit
   String passed = Hello!!!!!
       ]]></source>
  -    
  +
       The Server app running inside Phoenix and after being tested with the 
client app (see below):
  -    
  +
       <source><![CDATA[
   Phoenix 4.0a4
   
  -Server started on port 1234    
  +Server started on port 1234
   String passed = Hello!!!!!
       ]]></source>
  -    
  +
       The client application being used to poke the server :
  -    
  +
       <source><![CDATA[
   java -jar phoenix-demo-client.jar localhost 7654 Hello!!!!!
       ]]></source>
  -    
  +
       (Change the port to 1234 from 7654 to poke the in-Phoenix server).
  -    
  -</p>    
  +
  +</p>
   <p>
  -    Note - because of the need to make this dual mode, the PDK does not use 
Cornerstone 
  -    components.  We normally recommend that people should reuse components 
from cornerstone as 
  +    Note - because of the need to make this dual mode, the PDK does not use 
Cornerstone
  +    components.  We normally recommend that people should reuse components 
from cornerstone as
       the potential for sharing will be much higher.
   </p>
   </s1>
  
  
  
  1.7       +44 -60    jakarta-avalon-phoenix/src/xdocs/index.xml
  
  Index: index.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/xdocs/index.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- index.xml 2 Apr 2002 18:56:21 -0000       1.6
  +++ index.xml 12 May 2002 19:52:49 -0000      1.7
  @@ -4,7 +4,7 @@
   
   <document>
     <header>
  -    <title>Phoenix - Overview</title>
  +    <title>Avalon Phoenix - Overview</title>
       <authors>
         <person name="Berin Loritsch" email="[EMAIL PROTECTED]"/>
         <person name="Peter Donald" email="[EMAIL PROTECTED]"/>
  @@ -18,79 +18,63 @@
           framework. It is both an API to program to and a reference 
implementation.
           The reference implementation provides a number of facilities to 
manage the
           environment of Server Applications. Such facilities include log 
management,
  -        classloading, thread management and security. In the future it will 
  -        conditionally offer support extra facilities such as central server 
management, 
  -        server pools, and other facilities aimed at reducing the time to 
market. The API 
  +        classloading, thread management and security. In the future it will
  +        conditionally offer support extra facilities such as central server 
management,
  +        server pools, and other facilities aimed at reducing the time to 
market. The API
           defines a standard method of piecing togther server components and 
creating a server.
         </p>
       </s1>
  -    <s1 title="Multiple Server Application hosting">
  +    <s1 title="Documentation is coming">
         <p>
  -        Phoenix hosts one or more server applications at the same time in 
the same Virtual machine.
  -      </p>
  -      <figure>
  -        <title>Phoenix layer diagram</title>
  -        <graphic srccredit="Paul Hammant, 2001" 
fileref="images/phoenix-layers.jpg" format="JPEG"/>
  -      </figure>      
  -      <p>
  -        Shown above are three hosted server applications.  A mail server 
that would implement
  -        multiple listeners for incoming and outgoing services (POP3, SMTP, 
IMAP etc).  Outlook,
  -        Eudora and other mail clients would be able to connect to the 
server.  As it happens, 
  -        Apache has a project in progress called "James" that provides these 
services and Newsgroups.  
  -        Also shown is a Web server.  That would respond to HTTP/HTTPS 
requests from similar standards 
  -        based clients and be able to host it's own applications (web-apps 
and virtual websites). Lastly, 
  -        and non-existant currently at Apache is an EJB Server.  This would 
be able to host it's own 
  -        bean applications and might use the web server for it's HTTP needs.
  +        Some of the information on this site is currently a bit out of date. 
We are
  +     working hard to fix this. If you come across any incosistencies or have 
a
  +     problem, please don't hesitate to contact us through the mailing list. 
Thank
  +     you.
         </p>
       </s1>
  -    <s1 title="Packaging of a Server Application">
  -      <p>
  -        Phoenix application are distriuted in a single archive.  
  -      </p>
  -      <s2 title="Packaging in terms of blocks">
  -        <p>
  -          Phoenix hosts server applications made up of blocks.  The blocks 
may depend on libraries
  -          to function correctly.  The blocks are tied together with Assembly 
instructions and Configured
  -          externally.
  -        </p>
  -        <figure>
  -          <title>Phoenix application in block view</title>
  -          <graphic srccredit="Paul Hammant, 2001" 
fileref="images/phoenix-app-block.jpg" format="JPEG"/>
  -        </figure>
  -      </s2>      
  -      <s2 title="Packaging in terms of block jar files">
  -        <p>
  -          The server application is entirely contained withing one "sar" 
file.  Sar is "Server ARchive".
  -          Each block is a jar file.  The dependant libraries are regular 
jars (placed 
  -          within a directory "lib" insde the sar file).  The Assembly and 
configuration instructions
  -          are in xml form and contained within a "conf" directory inside the 
sar file.
  -        </p>
  -        <figure>
  -          <title>Phoenix application in block jar view</title>
  -          <graphic srccredit="Paul Hammant, 2001" 
fileref="images/phoenix-app-blockjars.jpg" format="JPEG"/>
  -        </figure>
  -      </s2>      
  -      <s2 title="FtpServer as a Phoenix application">
  +    <s1 title="Guide to Avalon Phoenix">
         <p>
  -        FtpServer (part of the Avalon/Cornerstone project) is distributed in 
sar form.  Here is a
  -        view of it's blocks.  It has no third party jars that it depends on.
  -      </p>
  -        <figure>
  -          <title>FtpServer, a real Phoenix application</title>
  -          <graphic srccredit="Paul Hammant, 2001" 
fileref="images/phoenix-app-ftpserver.jpg" format="JPEG"/>
  -        </figure>
  -      </s2>      
  +        This guide starts with an architectural overview of Phoenix. Then, 
we identify
  +     the different roles that typically exist in daily use of phoenix. For 
each of
  +     these, we provide a basic guide. We finish with a complete example.
  +      </p>
  +        <s2 title="Target Audience">
  +          <p>
  +            This documentation is aimed towards people who:
  +            <ul>
  +           <li>wish to create applications that run within phoenix</li>
  +           <li>wish to create components (blocks) for use within phoenix</li>
  +           <li>wish to setup and administer phoenix</li>
  +              <li>are interested in the design principles of Avalon 
Phoenix</li>
  +              <li>wish to develop code that will be incorporated into Avalon 
Phoenix</li>
  +              <li>wish to reuse Avalon Phoenix concepts in their own 
application</li>
  +            </ul>
  +          </p>
  +        </s2>
  +        <s2 title="Contents">
  +          <ol>
  +            <li><link href="guide-architecture.html">Architectural 
overview</link></li>
  +            <li><link href="guide-roles.html">Development roles</link></li>
  +            <li><link href="guide-administrators.html">Administrator 
Guide</link></li>
  +            <li><link href="guide-deployers.html">Application Deployer 
Guide</link></li>
  +            <li><link href="guide-assembler.html">Server Application 
Assembler Guide</link></li>
  +            <li><link href="guide-block-developers.html">Block Developer 
Guide</link></li>
  +            <li><link href="guide-example-configuration.html">Example 
Configuration.</link></li>
  +          </ol>
  +        </s2>
  +    </s1>
  +    <s1 title="Avalon Phoenix Reference Documentation">
         <p>
  -        Notes - Phoenix does not limit the number of blocks that it allows 
in a sar file.  We have taksdefs for Apache's Ant
  -        tool for making sar files.  See the "Block Developers Guide" (left
  -        margin of this page) for more what/how/why.
  +         Besides the
  +         <link href="api/index.html">Javadocs</link>, we have the
  +         <link href="guide-architecture.html">Architectural overview</link> 
to look at.
         </p>
       </s1>
     </body>
     <footer>
       <legal>
         Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
  -      $Revision: 1.6 $ $Date: 2002/04/02 18:56:21 $
  +      $Revision: 1.7 $ $Date: 2002/05/12 19:52:49 $
       </legal>
     </footer>
   </document>
  
  
  
  1.5       +1 -1      jakarta-avalon-phoenix/src/xdocs/install.xml
  
  Index: install.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/xdocs/install.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- install.xml       18 Apr 2002 20:19:35 -0000      1.4
  +++ install.xml       12 May 2002 19:52:49 -0000      1.5
  @@ -5,7 +5,7 @@
   <document>
   
    <header>
  -  <title>Phoenix - Installation</title>
  +  <title>Avalon Phoenix - Installation</title>
     <authors>
      <person name="Avalon Documentation Team" 
email="[email protected]"/>
     </authors>
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/for-developers-a-future.xml
  
  Index: for-developers-a-future.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - A future</title>
      <authors>
        <person name="Paul Hammant" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          A long term aim of Phoenix is to provide a platform that hosts 
multiple third party applications written only in Java within a single virtual 
machine.  The Phoenix platform is currently hosted on an Operating System such 
as Unix, Windows or Mac.  It could function directly on top of a Java Operating 
System.  A CPU combined with a suitable amount of memory, a basic BIOS, a 
Kernal, a suitable JVM and runtime library, could mount Phoenix and hosted 
server applications.
        </p>      
      </s1>
      <s1 title="One step further">
        <p>
          Imagine Sun making such a box under their own name or as Cobalt, 
using low power chips from their own stable or perhaps a StrongARM. That 
machine could be rack mounted like their current X1:
        </p> 
        <figure>
          <title>Sun X1</title>
          <graphic srccredit="&copy; Sun Microsystems" 
fileref="http://www.sun.com/products-n-solutions/hw/networking/images/prodsplash/x1.jpg";
 format="JPEG"/>
        </figure> 
        <p>
          If that rackable server had 32 such CPUs, each with 128Mb of memory 
all booting Phoenix. And if the CPUs shared a single hard drive, we might have 
a machine that was tuned to CPU intensive activities. Cocoon/Tomcat, EJB 
clusters, might be load balanced by one of the CPUs running a Phoenix load 
balancer.  Alternate scenarios are for virtual site hosting.  It could be a 
"1U" render or bean farm with each internal CPU having its own TCP/IP address.
        </p>
      </s1>
      <s1 title="Is all this possible?">
        <p>
          Well there are already romable J2SE implementations that are 
available for StrongARM chips on Compaq's handheld iPAQ.  We are there already, 
but for the client side rather than the server side.
        </p>
      </s1>
    </body>
  </document>
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/for-developers-changes.xml
  
  Index: for-developers-changes.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE changes SYSTEM "dtd/changes-v10.dtd">
  
  <changes title="Avalon Phoenix - History of Changes">
    <devs>
      <person name="Federico Barbieri" email="[EMAIL PROTECTED]" id="FB"/>
      <person name="Berin Loritsch" email="[EMAIL PROTECTED]" id="BL"/>
      <person name="Peter Donald" email="[EMAIL PROTECTED]" id="PD"/>
      <person name="Paul Hammant" email="[EMAIL PROTECTED]" id="PH"/>
      <person name="Mircea Toma" email="[EMAIL PROTECTED]" id="MT"/>
    </devs>
  <release version="4.0a3" date="November 13, 2001">
    <action dev="PD" type="change">
      Add documentation describing BlockListener.
    </action>
    <action dev="PD" type="change">
      Fixed bug that allowed binary distributions to be built without
      copying xerces.jar into correct place.
    </action>
  </release>
  <release version="4.0a2" date="November 12, 2001">
    <action dev="PD" type="change">
      Update Phoenix to use the new Avalon Framework Logger interface rather 
than
      directly using LogKits Logger class. This required a backwards 
incompatible 
      change in BlockContext. The getLogger() methods now return the Logger 
interface
      rather than LogKits Logger class. If a Block implements Loggable then it 
will
      be passed LogKits Logger, this is required for backwards compatability. 
If the 
      Block implements LogEnabled it will receive the new style Logger.
    </action>
    <action dev="MT" type="add">
      Add support for undeploying and unistalling applications. Add support for 
separating
      out install phase from deployment phase and persisting information about 
      application installations.
    </action>
    <action dev="PD" type="change">
      Rework the application deployment format (ie .sar format) to be more in 
line
      with other specifications. See docs/creating-a-server-application.html in 
distribution 
      for current format description. The old format is deprecated but will 
still work.
    </action>
    <action dev="PH" type="add">
      Created the start of a Phoenix Developers Kit (PDK) that will enable 
      developers to rapidly become accustom to developing Phoenix applications.
    </action>
    <action dev="PD" type="add">
      Started to incorporate the JMX code more fully into Phoenix kernel. 
Started
      doing this by refactoring the base MBeans and testing using the RIs agent.
    </action>
    <action dev="PD" type="change">
      Separated code that validated assembly of application into separate 
      classes. The validation is now much stricter and requires that 
      Blocks conform to established patterns. The validation phase should give
      more reasonable explanations for violations. Extra validation checks 
      include verifying that services offered by a Block are actually 
interfaces,
      that there is no circular dependencies, that declared Blocks and 
BlockListeners
      actually implement Block or BlockListener interface, that the names of 
Blocks
      are valid etc.
    </action>
  </release>
  <release version="4.0a1" date="September 25, 2001">
    <action dev="BL" type="change">
      Too many things to enumerate here.  This is the first public release,
      and the code is still considered alpha.  In future releases, we will
      be much more careful to record the changes to Phoenix.
    </action>
  </release>
  <release version="3.1a2" date="Unreleased">
      <action dev="BL" type="add">
        Added stylesheet to convert Stylebook markup to DocBook markup.
      </action>
      <action dev="BL" type="change">
        Changed the documentation build process to use Cocoon to build
        the site.
      </action>
    <action dev="PD" type="remove">
      Legacy support for nested configuration elements in assembly file
      removed.
    </action>
    <action dev="PD" type="update">
      Simplified Loader and made it set ContextClassLoader before executing 
      Main method. It will also use the System property phoenix.home if set
      rather than always trying to dynamically determine home directory.
    </action>
    <action dev="PD" type="add">
      Added SingleAppEmbeddor to launch a kernel to load a single Application. 
      Patch supplied by "Eung-ju Park" ([EMAIL PROTECTED]). This is useful if 
      you need to reuse the blocks in other contexts (such as in a Servlet).
    </action>
    <action dev="PD" type="add">
      Made default SystemManager a NoopSystemManager. Patch supplied 
      by "Eung-ju Park" ([EMAIL PROTECTED]). To re-enable RMI manager a new
      command line switch "--remote-manager" was added.
    </action>
    <action dev="PD" type="update">
      Reworked SecurityManager setup. Instead of starting a security 
      Manager inside the code it has been re-architectured so that the
      SecurityManager is set on the command line. This was to avoid a number
      of issues related to creating a URLClassLoader in an unprotected context
      before setting SecurityManager. ie As AccessControllerContext was null it 
      is impossible to use ClassLoader.getResource(AsStream)(). This means that 
      defining phoenix.insecure will no longer disable the SecurityManager. The 
      replacement method is to set the native OS environment variable 
      'PHOENIX_SECURE=false'. 
    </action>
    <action dev="PD" type="update">
      Separate Parsing of CLI arguements into separate class (CLISetup).
      This is to facilitate launching Phoenix as a native daemon using
      Tomcats Services API.
    </action>
    <action dev="PD" type="add">
      Started Localizing text strings throughout Phoenix. This is done using 
      ResourceManager and Resources from Avalon/Excalibur project.
    </action>
  </release>
  
  </changes>
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/for-developers-project-structure.xml
  
  Index: for-developers-project-structure.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Project Structure</title>
      <authors>
        <person name="Leo Simons" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
        <s1 title="Introduction">
  <p>Avalon Phoenix has seen lots of refactoring to create an intuitive
  code layout. It is usually quite easy to find what you need. This document
  provides an overview of the project structure. It is still under
  construction.</p>
        </s1>
        <s1 title="Package structure">
  <source>
  org.apache.avalon.phoenix
  |
  |- components
  |  |- application
  |  |- classloader
  |  |- configuration
  |  |- deployer
  |     |- installer
  |  |- embeddor
  |  |- extensions
  |  |- kernel
  |  |- logger
  |  |- manager
  |     |- rmiadaptor
  |- frontends
  |- interfaces
  |- launcher
  |- metadata
  |- metainfo
  |- tools
     |- assembler
     |- configuration
     |- infobuilder
     |- tasks
     |- verifier
     |- xdoclet
  </source>
        </s1>
        <s1 title="CVS Directory structure">
  <source>
  jakarta-avalon
  |
  |- console : JMX-based management console
  |
  |- lib : for third party libraries
  |
  |- src
  |  |
  |  |- compat : deprecated stuff
  |  |- conf : jar manifest
  |  |- documentation : cocoon configuration
  |  |- java : java sources
  |  |- manifest : jar manifest files
  |  |- pdk : sources for PDK
  |  |- proposal : place for ideas to nurture
  |  |- schema : DTDs for XML files
  |  |- scratchpad :  place for nonsupported, unstable code
  |  |- script : shell scripts for usage in a standalone setup
  |  |- test : unit tests
  |  |- xdocs : site documentation in xml format
  |
  |- build.xml
  |- docs.xml
  |
  |- BUILDING.txt
  |- LICENSE.txt
  |- README.txt
  |- WARNING.txt
  </source>
        </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:49 $
      </legal>
    </footer>
  </document>
  
  
  
  
  1.1                  jakarta-avalon-phoenix/src/xdocs/for-developers-todo.xml
  
  Index: for-developers-todo.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
  
   <header>
    <title>Avalon Phoenix - Todo</title>
    <authors>
     <person name="Avalon Documentation Team" 
email="[email protected]"/>
    </authors>
   </header>
  
  <body>
  
  <s1 title="Todo">
  
  <p>
  This document describes functionality that is either missing or not finished 
  within Phoenix.
  </p>
  
  <p>
  Wish List functionality is stuff that we would like to see implemented, but is
  not critical for release. This is the area where you can take ownership of a
  part of the project and contribute back.
  </p>
  
  <p>
  Very Important Work to Complete is stuff that we feel is holding up a release 
of
  Avalon.
  </p>
  
  <p>
  If you are a new developer to Phoenix or even an existing developer, these are
  areas where you can take ownership and help complete. Please do not ask us how
  you can help, but rather specific questions about how you think that these 
items
  should be implemented. It is up to you to take initiative and provide 
solutions
  to the missing functionality described below. ;-) If your see yourself as more
  of a application (rather than infrastructure) writer, then perhaps peruse
  Cornerstone's to-do list - it's even more ambitious.
  </p>
  
  <p>
  Documentation is *always* appreciated in any form. There are two ways to 
provide
  helpful documentation. The first way is to write up HTML or straight text
  documentation and send it to one of the primary authors directly (we are also
  willing to give you CVS write access if you wish). The second way is to post
  Questions/Answers to the FAQ under the Avalon sections there.
  There is a Getting Started document named
  "getting-started.html" that could always use additional documentation, 
examples
  and clarification. You need to take the initiative and just start writing down
  your thoughts and concerns and questions and answers and then giving those 
back
  to us.
  </p>
  
  <p>
  If you need more detailed help, please join, then send mail to the mailing
  list ([email protected]) and ask your specific questions there.
  </p>
  
  </s1>
  
  <s1 title="Wish List">
  
      <s2 title="Separate and Antify Validation code">
        <p>
        Refactor block validation code. Write an Ant taks that uses this
        and validates the block jar files and another task that validates the
        assembly.xml file.
        </p>
      </s2>
      <s2 title="Log messages">
        <p>
        Refactor Log messages so that they are structured in a manner more
        suitable for administrators rather than developers.
        </p>
        <p>
        update 12/05/02: mostly done.
        </p>
      </s2>
  
      <s2 title="Generated Configurations">
        <p>
        Define and implement a smart way to generate Avalon configurations.
        Define configuration template containing default configuration,
        user configuration file to overwrite or append configurations to 
template,
        implement code to merge all servers configuration file to a single 
Avalon
        configuration file.
        </p>
      </s2>
  
      <s2 title="Time Scheduler changes">
        <p>
        Rework the DefaultTimeScheduler so that entrys are removed from heap 
when
        reset. Otherwise it could lead to excessive buildup of invalidated 
entries
        if many are reset but remain in heap.
        </p>
      </s2>
  
      <s2 title="Opening some tightly kernel-coupled services">
        <p>
        Rework kernel so that ConfigurationRepository, Logging and Management 
can
        be routed through ServerApplications.
        </p>
      </s2>
  
      <s2 title="Virtual File System / Jars within Jars">
        <p>
        Implement a simple read-only VFS so that .sar files do not need to be
        expanded.
        </p>
        <p>
        update 12/05/02: done.
        </p>
      </s2>
  
      <s2 title="Thread pooling">
        <p>
        Rework kernel so that thread boundaries are respected and secure. This 
essentially
        involves using ThreadPools to execute phases and for management.
        </p>
      </s2>
  
      <s2 title="JNDI service">
        <p>
        Determine if we need a naming service. If so provide a simple JNDI 
based naming
        service possibly built on top of cadastre.
        </p>
        <p>
        update 12/05/02: we've decided not to do so at this time.
        </p>
      </s2>
  
      <s2 title="Block Management remotely">
        <p>
        Separate out and specify the way in which different parts of system are 
managed.
        ie Compare how remote Management of Blocks could occur vs 
Deployer/Kernel/Embeddor
        management occurs.
        </p>
      </s2>
  
      <s2 title="Hot deployment">
        <p>
        A standard system for hot deploying and undeploying. This may require 
the building
        of FileMonitors that will read a file when it is changed.
        </p>
      </s2>
  
      <s2 title="Reconfiguration">
        <p><strong>This has a few facets:</strong></p>
        <p>
        A standard reconfiguration system.  This may require the building
        of FileMonitors that will read a file when it is changed.  Any
        kind of block or component that extends the Reconfigurable interface
        gets sent the new configuration.
        </p>
        <p>
        A mechanism to allow one block to be the master of another's 
configuration
        programmatically.  This would mean that whilst in use, the configuration
        could change.  It could happen invisibly or as part of human interaction
        via some UI.  The blocks woyld be granted configuration-update rights in
        assembly.xml.  Discussed on the list in late Aug, early Sept 2001.
        </p>
        <p>
        Define and implement needed stuff to allow hot and warm reconfiguration 
at
        runtime.
        </p>
  
      </s2>
  
      <s2 title="Proxy Interfaces">
        <p>
        Currently services are provided via a proxy interface. Rework kernel so 
that
        the proxy interface can be turned off via a command-line switch.
        </p>
      </s2>
  
      <s2 title="Management Console">
        <p>
        Management console/Client interface. CLI version aswell as a GUI 
version.
        </p>
        <p>
        update 12/05/02: we have a draft of concept.
        </p>
      </s2>
  
      <s2 title="Default JNDI Contexts">
        <p>
        Avalon should provide default JNDI contexts
        that Block implementers can extend and use like
        Context, EventContext, and DirectoryContext.
        </p>
      </s2>
  
      <s2 title="Java Messaging Service">
        <p>
        JMS (Java Messaging Service) for the Connection Manager. It
        will provide a standard and flexible connection service and
        messaging service. It allows for both point to point messaging
        and multicast messaging (subscriber/provider).
        </p>
      </s2>
  
      <s2 title="Server Pools">
        <p>
        Support for server pools.  Several Phoenix servers should be able
        to pool resources and act as one server regardless of VM, or
        physical machine they are on.
        </p>
      </s2>
  
      <s2 title="Block loading remotely">
        <p>
        Remote loading of Blocks. Phoenix should be able to pull a block
        at run time from a remote server, check the signature, and run it
        with proper permissions.  This would allow for the possibility of
        automatically upgrading blocks.
        </p>
      </s2>
  
      <s2 title="Remote Control">
        <p>
        Write some code to remotely control Phoenix. (This will most likely be
        rolled into JMX support).
        </p>
        <p>
        update 12/05/02: done (through jmx).
        </p>
      </s2>
  
      <s2 title="Transactions">
        <p>
        Define and implement some Transaction pattern for the Repository. Maybe 
JTA?
        </p>
      </s2>
  </s1>
  
  <s1 title="Ongoing work">
      <s2 title="Help needed!">
        <p>
        We can really use some help here! This is a top priority and all
        contributions will be welcomed.
        </p>
      </s2>
  
      <s2 title="Documentation">
        <p>
        Write all documentation.
        </p>
      </s2>
  
      <s2 title="JavaDocs">
        <p>
        Update JavaDocs for decent developer documentation.
        </p>
      </s2>
  
  </s1>
  
  <s1 title="Very Important Work to Complete">
  
      <s2 title="Java Management eXtentions">
        <p>
        JMX (Java Management eXtentions) for central management of
        Avalon. If JMX cannot be done due to licensing, we should
        make the current beginnings of central management more
        robust.
        </p>
        <p>
        update 12/05/02: we're at roughly 80% functionality. We're
        using MX4J as our default MBeanServer.
        </p>
      </s2>
  
  </s1>
  
  </body>
  </document>
  
  
  
  1.1                  jakarta-avalon-phoenix/src/xdocs/guide-administrator.xml
  
  Index: guide-administrator.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Guide - for Administrators</title>
      <authors>
        <person name="Berin Loritsch" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          Avalon is a Server Framework that provides or will provide for 
          central administration, server pooling, and quicker time to market.  
          The framework defines a standard method of piecing together server 
          components and creating a server.
        </p>
        <s2 title="Target Audience">
          <p>
            This documentation will describe the care and feeding of the Avalon
            Phoenix kernel from the point of view of the administrator.
          </p>
        </s2>
        <s2 title="Guide non-existent, but features are there">
        <p>
            We currently have no info on this whatsoever. However, this doesn't
          mean that Phoenix is not easy to administrate - the contrary is true,
          since our tight integration with JMX exposes the entire kernel at
          runtime.
          </p>
        </s2>
      </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:49 $
      </legal>
    </footer>
  </document>
  
  
  
  1.1                  jakarta-avalon-phoenix/src/xdocs/guide-architecture.xml
  
  Index: guide-architecture.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Guide - Architectural overview</title>
      <authors>
        <person name="Leo Simons" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          This document briefly describes the Phoenix server architecture.
        </p>
      </s1>
      <s1 title="Multiple Server Application hosting">
        <p>
          Phoenix hosts one or more server applications at the same time in the 
same Virtual machine.
        </p>
        <figure>
          <title>Phoenix layer diagram</title>
          <graphic srccredit="Paul Hammant, 2001" 
fileref="images/phoenix-layers.jpg" format="JPEG"/>
        </figure>
        <p>
          Shown above are three hosted server applications.  A mail server that 
would implement
          multiple listeners for incoming and outgoing services (POP3, SMTP, 
IMAP etc).  Outlook,
          Eudora and other mail clients would be able to connect to the server. 
 As it happens,
          Apache has a project in progress called "James" that provides these 
services and Newsgroups.
          Also shown is a Web server.  That would respond to HTTP/HTTPS 
requests from similar standards
          based clients and be able to host it's own applications (web-apps and 
virtual websites). Lastly,
          and non-existant currently at Apache is an EJB Server.  This would be 
able to host it's own
          bean applications and might use the web server for it's HTTP needs.
        </p>
      </s1>
      <s1 title="Packaging of a Server Application">
        <p>
          Phoenix application are distriuted in a single archive.
        </p>
        <s2 title="Packaging in terms of blocks">
          <p>
            Phoenix hosts server applications made up of blocks.  The blocks 
may depend on libraries
            to function correctly.  The blocks are tied together with Assembly 
instructions and Configured
            externally.
          </p>
          <figure>
            <title>Phoenix application in block view</title>
            <graphic srccredit="Paul Hammant, 2001" 
fileref="images/phoenix-app-block.jpg" format="JPEG"/>
          </figure>
        </s2>
        <s2 title="Packaging in terms of block jar files">
          <p>
            The server application is entirely contained withing one "sar" 
file.  Sar is "Server ARchive".
            Each block is a jar file.  The dependant libraries are regular jars 
(placed
            within a directory "lib" insde the sar file).  The Assembly and 
configuration instructions
            are in xml form and contained within a "conf" directory inside the 
sar file.
          </p>
          <figure>
            <title>Phoenix application in block jar view</title>
            <graphic srccredit="Paul Hammant, 2001" 
fileref="images/phoenix-app-blockjars.jpg" format="JPEG"/>
          </figure>
        </s2>
        <s2 title="FtpServer as a Phoenix application">
        <p>
          FtpServer (part of the Avalon/Cornerstone project) is distributed in 
sar form.  Here is a
          view of it's blocks.  It has no third party jars that it depends on.
        </p>
          <figure>
            <title>FtpServer, a real Phoenix application</title>
            <graphic srccredit="Paul Hammant, 2001" 
fileref="images/phoenix-app-ftpserver.jpg" format="JPEG"/>
          </figure>
        </s2>
        <p>
          Notes - Phoenix does not limit the number of blocks that it allows in 
a sar file.  We have taksdefs for Apache's Ant
          tool for making sar files.  See the "Block Developers Guide" (left
          margin of this page) for more what/how/why.
        </p>
      </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:49 $
      </legal>
    </footer>
  </document>
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/guide-assemblers-creating-a-server-application.xml
  
  Index: guide-assemblers-creating-a-server-application.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Guide - Creating a Server Application</title>
      <authors>
        <person id="PD" name="Peter Donald" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          This document will describe the process for assembling your first 
Server
          Application. There is a number of steps in creating a Server 
Application. 
          These are;
        </p>
        <ol>
          <li>Select the blocks you wish to assemble.</li>
          <li>Write the config.xml file.</li>
          <li>Write the assembly.xml file.</li>
          <li>Write the environment.xml file.</li>
          <li>Package the component and related resources into a sar file.</li>
        </ol>
      </s1>
      <s1 title="Select the Blocks to Assemble">
        <p>
          As a assembler it is your responsibility to select the particular 
Blocks
          required to build your application. You may aquire the Blocks from a 
number
          of sources depending on your resources. You may use the core Blocks 
supplied
          with Phoenix, contract someone to build the component or download the 
Block
          from an online repository.          
        </p>
      </s1>
      <s1 title="Write the config.xml file">
        <p>
          Configuration data for blocks is stored in the config.xml file.
          For more detail on the format of config.xml see the 
          <link 
href="reference-config-xml-specification.html">specification</link>.
        </p>
      </s1>
      <s1 title="Write the assembly.xml file">
        <p>
          The next stage is to write the assembly.xml file. The assembly.xml 
specifies 
          the instances of Blocks that are part of the Server Application. Each 
          Block has a name. Each block may also have dependencies that need to 
be 
          satisfied and this can be done via the 'provide' sub-elements. The
          provide element maps block instances from the Server Application 
namespace
          to the Block role namespace specified in BlockInfo files. For more 
detail 
          on the format of assembly.xml see the <link 
href="reference-assembly-xml-specification.html">
          specification</link>.
        </p>
      </s1>
      <s1 title="Write the environment.xml file">
        <p>
          The next stage is to write the environment.xml file. The 
environment.xml is used to
          configure the code-based security policy, log management and thread 
pooling.
          For more detail on the format of environment.xml see the 
          <link 
href="reference-environment-xml-specification.html">specification</link>.
        </p>
      </s1>
      <s1 title="Create the sar file">
        <p>
          The sar file format is the standard distribution format of Phoenix 
Server
          Applications. It is a standard Jar file with a specific directory 
layout. 
          The config.xml, environment.xml and assembly.xml file must be stored 
in 
          <code>SAR-INF/</code> directory of the archive. All jar files, 
including
          both those that contain blocks and those that contain support classes
          should be stored in the <code>SAR-INF/lib/</code> directory.
        </p>
      </s1>
       <s1 title="Guide Contents">
         <ol>
          <li><link 
href="guide-assemblers-what-is-a-server-application.html">What is a Server 
Application?</link></li>
          <li>How do I create a Server Application?</li>
          <li><link href="reference-config-xml-specification.html">config.xml 
specification</link></li>
        <li><link href="reference-assembly-xml-specification.html">assembly.xml 
specification</link></li>
          <li><link 
href="reference-environment-xml-specification.html">environment.xml 
specification</link></li>
         </ol>
        </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:49 $
      </legal>
    </footer>
  </document>
  
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/guide-assemblers-what-is-a-server-application.xml
  
  Index: guide-assemblers-what-is-a-server-application.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Guide - What is a Server Application?</title>
      <authors>
        <person id="PD" name="Peter Donald" email="[EMAIL PROTECTED]"/>
        <person id="BL" name="Berin Loritsch" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          In Phoenix, a Server Application is a set of Blocks that act in 
concert
          to provide a unified user service. Example Server Applications 
include a Mail 
          Server, File Server, Web Server etc. The Server Application is a high 
level 
          component that contains a set of Block components.
        </p>
        <p>
          A Server Application requires a number of components other than 
Blocks to 
          be complete. A Server Application requires configuration files to 
define 
          Server Application wide settings (threading, security, logging), to 
define
          how blocks are wired together, and to define configuration data for 
the 
          Block instances. A Block can also require other resources that are 
          application specific.
        </p>
      </s1>
       <s1 title="Guide Contents">
         <ol>
          <li>What is a Server Application?</li>
          <li><link 
href="guide-assemblers-creating-a-server-application.html">How do I create a 
Server Application?</link></li>
          <li><link href="reference-config-xml-specification.html">config.xml 
specification</link></li>
        <li><link href="reference-assembly-xml-specification.html">assembly.xml 
specification</link></li>
          <li><link 
href="reference-environment-xml-specification.html">environment.xml 
specification</link></li>
         </ol>
        </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:49 $
      </legal>
    </footer>
  </document>
  
  
  
  
  1.1                  jakarta-avalon-phoenix/src/xdocs/guide-assemblers.xml
  
  Index: guide-assemblers.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Guide - for Server Assemblers</title>
      <authors>
        <person name="Avalon Documentation Team" 
email="[email protected]"/>
      </authors>
    </header>
    <body>
      <s1 title="Who Should Read This Book?">
        <p>
          The Server Assemblers Guide is written for assemblers who want to 
assemble a
          Server Application for Phoenix. It is assumed that you are familiar 
with
          the basic concepts of the Phoenix framework.
        </p>
        <p>
          This book concentrates on assembly, and as such requires no knowledge 
of
          java programming. It does however assume you are familiar with server
          fundamentals, basic security measures, and performance tuning.
        </p>
      </s1>
      <s1 title="Organization">
        <p>
          The information is organized into sections detailing a specifc aspect 
of
          assembling ServerApplications.
        </p>
         </s1>
       <s1 title="Contents">
         <ol>
           <li><link 
href="guide-assemblers-what-is-a-server-application.html">What is a Server 
Application?</link></li>
          <li><link 
href="guide-assemblers-creating-a-server-application.html">How do I create a 
Server Application?</link></li>
          <li><link href="reference-config-xml-specification.html">config.xml 
specification</link></li>
        <li><link href="reference-assembly-xml-specification.html">assembly.xml 
specification</link></li>
          <li><link 
href="reference-environment-xml-specification.html">environment.xml 
specification</link></li>
         </ol>
        </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:49 $
      </legal>
    </footer>
  </document>
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/guide-block-developers-creating-a-block.xml
  
  Index: guide-block-developers-creating-a-block.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Guide - Creating a Block</title>
      <authors>
        <person id="PD" name="Peter Donald" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          This document will describe the process for creating your first 
block. There 
          are essentially three steps that must be completed before your block 
is ready 
          for assembling.
        </p>
        <ol>
          <li>Write the Block component.</li>
          <li>Write the BlockInfo meta-info description file.</li>
          <li>Package the component and related resources into a block jar 
file.</li>
        </ol>
      </s1>
      <s1 title="Writing the Block component">
        <p>
          Writing the Block is the main task you will be called to do. It 
follows all
          the rules of writing a standard Avalon component. Block writers must 
also 
          extend the <code>org.apache.phoenix.Block</code> interface. 
        </p>
        <p>
          If a block implements the Composer interface it will be passed an 
instance
          of <code>org.apache.phoenix.BlockContext</code> which is an extended 
version
          of <code>org.apache.avalon.Context</code>. Other than this minor 
change the 
          Block's container (the Phoenix Kernel) supports all the Avalon 
lifecycle 
          methods or will in the near future (at the moment suspend/resume is 
not yet 
          supported).
        </p>
        <p>
          The block can implement an instance of 
<code>org.apache.phoenix.Service</code>
          if it wishes to export a service to external blocks. It is also 
possible to 
          aquire services from other blocks in the <code>compose()</code> 
method.
        </p>
      </s1>
      <s1 title="Write the BlockInfo">
        <p>
          You must create this file to indicate which services this Block 
depends upon 
          and those services which it offers. It is more fully documented in 
the 
          <link href="reference-blockinfo-specification.html">BlockInfo 
Specification</link> document.
        </p>
      </s1>
      <s1 title="Create the jar package">
        <p>
          The final step is packaging up the implementation files, BlockInfos 
and other
          resources into a jar file. The jar file is a standard jar file with 
special manifest 
          entries. For each Block that is included in the jar, a new manifest 
attribute
          must be added, namely &quot;Avalon-Block: true&quot;. An example 
manifest file is 
          displayed below.
        </p>
        <source>
  Manifest-Version: 1.0
  Created-By: Apache Avalon Project
  
  Name: com/biz/cornerstone/blocks/MyBlock.class
  Avalon-Block: true
        </source>
      </s1>
       <s1 title="Guide Contents">
         <ol>
          <li><link href="guide-block-developers-what-is-a-block.html">What is 
a block?</link></li>
          <li><link 
href="guide-block-developers-what-is-a-block-listener.html">What is a block 
listener?</link></li>
          <li><link 
href="guide-block-developers-what-is-an-application-listener.html">What is an 
application listener?</link></li>
          <li>How do I create a block?</li>
          <li><link 
href="guide-block-developers-making-phoenix-compatible-comps.html">How do I 
make my components phoenix-compatible?</link></li>
          <li><link href="reference-blockinfo-specification.html">BlockInfo 
specification</link></li>
         </ol>
        </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:49 $
      </legal>
    </footer>
  </document>
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/guide-block-developers-making-phoenix-compatible-comps.xml
  
  Index: guide-block-developers-making-phoenix-compatible-comps.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Guide - Making components that are Phoenix 
compatible</title>
      <authors>
        <person name="Paul Hammant" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
        Quite often reusable components are made elsewhere.  Apache has a 
number 
        of places where this activity is going on.  While we get it right most 
of
        the time, some components developer elsewhere are harder to use in 
Phoenix
        </p>
      </s1>
      <s1 title="Things to remember">
        <p>
          There are a number of common sense things to remember when making or 
          adapting a Java component to be reusable in Phoenix as block.
        </p>
        <s2 title="Beanification">      
          <p>
            <ul>
              <li>Have a public empty constructor for your main class</li>
              <li>Have setters for its configuration.</li>
              <li>Do not assume that the File is where dependancies are - 
people may reuse this in jars, applets etc.</li>
              <li>Divorce your main method (if appl) from your main class - 
Phoenix does not call main methods.</li>            
              <li>Consider that the setup and initialization of the bean does 
not happen in the 
                  constructor - as a convenience to the user, have an 
initialize() method</li>            
              <li>If the comp has start/stop functinality consider having 
start() and stop() methods.</li>  
              <li>Try to avoid Singleton concepts.  There could be multiple 
blocks in one sar using differnt (by design) instances of your bean</li>
            </ul>
          </p>
        </s2>              
        <s2 title="Inversion of Control Pattern">
           The IoC pattern is described <link 
href="http://jakarta.apache.org/avalon/framework/inversion-of-control.html";>
           here</link>.  This means for Phoenix avoiding static concepts 
including loggers.
        </s2>
        <s2 title="Sepearation of interface and implementation">
          <p>
           The separation of interface/impl pattern is described <link 
href="http://jakarta.apache.org/avalon/framework/separation-of-interface-and-implementation.html";>here</link>.
  
           For Phoenix is means we can (if done completely) mount the 
implementation jar in place where hosted client compoennts (beans, servlets 
etc) can use the API, bit not see the implementation.  We can also reimplement 
or wrap
           bits of the implementation.  For example we could write a pluggable 
implementation that could, for a certain API
           journal some methods, but still delegate to the real impl.  Which 
pluggable impl is used by Phoenix when it
           boots is determined in assembly.xml of course.
          </p>
        </s2>
        <s2 title="Opening up the API">
          <p>
           Given that you have divided into interface and impl, there are 
probably plenty of methods you
           can put method in the interface you never though might be used.  For 
example if you are making JDBC
           compliant relational database, and it is a bean, you could easily 
think that the only use would be
           clients via JDBC over sockets.  Well, given that Phoenix can now 
mount the RDBMS block, it might want
           to be reused by other blocks that other people have developed inside 
the the same SAR file.  In that case
           have beanlike methods of ...
          <ol>
            <li>Database createDatabase(String name)</li>
            <li>Database cloneDatabase(String name)</li>
          </ol>
          .. might be useful.  Just because you can only see a ServerSocket 
interface does not mean that others do.
          </p>
        </s2>
      </s1>
      <s1 title="Example compatible comp">
      <p>
        Below are an interface and implemmentation that are suitably separated, 
are beanlike and is in accordance
        with the IoC pattern...
  <source>
  package examplecomp;
  public interface WebServer {
      void mountWar(String contextName, URL pathToWar);
      void unMountWar(String contextName);
  }
  
  package examplecomp.server;
  public class MyWebServer implements WebServer {
  
      public MyWebServer() {
          // whatever.
      }
      public void setPort(int port) {
          // this is one configuration item.
      }
      public void initialize() {
          // whatever.
      }
      public void start() {
          // whatever.
      }
      public void stop() {
          // whatever.
      }
      public void mountWar(String contextName, URL pathToWar) {
          // whatever.
      }
      public void unMountWar(String contextName) {
          // whatever.
      }
  }
  </source>
        For standalone mode, it might be launched like so:
  <source>
  package examplecomp.main;
  public class WebServerMain {
      public static void main(String[] args) throws Exception {
          MyWebServer ws = new WebServer();
          ws.setPort(Integer.parseInt(args[0]));
          ws.initialize();
          ws.start();
          ws.mountWar(args[1], new File(args[2]).toURL());
      }
  }
  </source>
        When we are trying to run this in phoeinix we might have this wrapper:
  <source>
  package examplecomp.block;
  public class WebServerBlock extends AbstractLoggable implements Block, 
WebServer, Startable, Configurable, Initializable {
      private int mPort;
      private WebServer mWebServer;
  
      public WebServerBlock() {
          mWebServer = new MyWebServer();
      }
  
      public void configure(final Configuration configuration) throws 
ConfigurationException {
          mPort = configuration.getChild("port").getValueAsInteger( 9001 );
      }
  
      public void initialize() throws Exception {
          mWebServer.setPort(mPort);
          mWebServer.initialize();
      }
  
      public final void start() throws Exception {
          mWebServer.start();
      }
  
      public void stop() throws Exception {
        mWebServer.stop();
      }
  
      public void mountWar(String contextName, String pathToWar) {
          mWebServer.mountWar(contextName, pathToWar);
      }
  
      public void unMountWar(String contextName) {
          mWebServer.unMountWar(contextName);
      }
  }
  </source>
        This basically shows the impl wrapped and taking its configuration from 
the config.xml
        that phonix prefers from configuration.  The the developer wanted they 
could ignore
        that place of configuration and use their own config files.  If the 
WebServer block were
        being reused by another Phoenix block (say an EJB server), it might be 
like so:
  <source>
  package somebeanserver;
  public class EJBBlock extends AbstractLoggable implements Block, Composable {
  
      private WebServer mWebServer;
  
      public void compose(final ComponentManager compMgr) throws 
ComponentException {
          mWebServer = compMgr.lookup("WebServer");
      }
  
      public void mountEar(String contextName, String pathToEar) {
          String[] warContextNames = getWarContexts(pathToEar);
          URL[] wars = getWarFiles(pathToEar);
          for (int i = 0; i &lt; wars.length; i++) {
              mWebServer.mountWar(warContextNames[i], wars[i]);
          }
      }
  
      public void unMountEar(String contextName) {
          // whatever
      }
  }
  </source>
      </p>
      </s1>
      <s1 title="Misconceptions">
        <p>
          The following are worth stating:
          <ul>
            <li>You do not have to implement any Avalon interfaces to be 
reusable (wrap strategy) inside Avalon.</li>
            <li>Being Phoenix compatible is just as useful for whole servers as 
it is for small components.</li>
            <li>Being Phoenix compatible can be for tools that are intended for 
client-side as well as server use.</li>
          </ul>
        </p>
      </s1>
       <s1 title="Guide Contents">
         <ol>
          <li><link href="guide-block-developers-what-is-a-block.html">What is 
a block?</link></li>
          <li><link 
href="guide-block-developers-what-is-a-block-listener.html">What is a block 
listener?</link></li>
          <li><link 
href="guide-block-developers-what-is-an-application-listener.html">What is an 
application listener?</link></li>
          <li><link href="guide-block-developers-creating-a-block.html">How do 
I create a block?</link></li>
          <li>How do I make my components phoenix-compatible?</li>
          <li><link href="reference-blockinfo-specification.html">BlockInfo 
specification</link></li>
         </ol>
        </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:49 $
      </legal>
    </footer>
  </document>
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/guide-block-developers-what-is-a-block-listener.xml
  
  Index: guide-block-developers-what-is-a-block-listener.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Guide - What is a Block Listener?</title>
      <authors>
        <person id="PD" name="Peter Donald" email="[EMAIL PROTECTED]"/>
        <person id="PH" name="Paul Hammant" email="[EMAIL PROTECTED]"/>      
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          A Phoenix Application consists of Blocks. Blocks can depend on the 
          services of other Blocks. However there is circumstances in which
          relationships between Blocks other than dependency relationships 
          should exist in an application.
        </p>
        <p>
          For example, you may have a Block that is capable of exporting
          other Blocks as SOAP services. The Blocks that wish to be exported 
          as SOAP services may need to export a service interface that extends
          SOAPClient. 
        </p>
      </s1>
      <s1 title="What is a Block Listener?">
        <p>
          A BlockListener is a component that is created before any Blocks are 
          created in an Application. It receives notification after each Block
          is created and setup for Application. The listener also receives 
          notification when a Block is about to be shutdown.
        </p>
        <p>        
          The relationship discussed above (between SOAPServer and SOAPClients)
          could be modelled as dependencies but that would mean that each 
application 
          would need to modify the SOAPServer so that it depended on a 
particular 
          number of SOAPClients that was specific to application. A better 
approach 
          to modelling these relationships would be to use a BlockListener to 
"wire" 
          together the SOAPClient services in Blocks to the SOAPServer service. 
As 
          soon as any Block is detected that implements a SOAPClient service it 
could
          be registered with the SOAPServer.
        </p>
      </s1>
      <s1 title="How to make a block listener">
        <p>
          Like normal blocks, a block listener can be <em>LogEnabled</em> and 
take 
          configuration via <em>Configurable</em>.  The special feature is that 
it 
          must implement <em>BlockListener</em> and the four methods that are a
          consequence of that.  Those methods illustrate blocks being added and 
          removed etc and come with a <em>BlockEvent</em> argument.  The 
following 
          section in assembly.xml causes instantiation of the block listener:
        </p>
        <source>
          &lt;listener class="pkg.MyBlockListener" name="a-suitable-name" /&gt; 
     
        </source>
      </s1>
       <s1 title="Guide Contents">
         <ol>
          <li><link href="guide-block-developers-what-is-a-block.html">What is 
a block?</link></li>
          <li>What is a block listener?</li>
          <li><link 
href="guide-block-developers-what-is-an-application-listener.html">What is an 
application listener?</link></li>
          <li><link href="guide-block-developers-creating-a-block.html">How do 
I create a block?</link></li>
          <li><link 
href="guide-block-developers-making-phoenix-compatible-comps.html">How do I 
make my components phoenix-compatible?</link></li>
          <li><link href="reference-blockinfo-specification.html">BlockInfo 
specification</link></li>
         </ol>
        </s1>
  </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:49 $
      </legal>
    </footer>
  </document>
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/guide-block-developers-what-is-a-block.xml
  
  Index: guide-block-developers-what-is-a-block.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Guide - What is a Block?</title>
      <authors>
        <person id="FB" name="Federico Barbieri" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>In Avalon Phoenix, there are three component layers:</p>
          <ul>
            <li>Blocks</li>
            <li>Components</li>
            <li>Classes</li>
          </ul>
        <p>
          They represent ever narrowing views of a component based architecture.
          The best analogy is that of hardware.  In the PC world, a Block would
          be like a PCI card, a Motherboard, a Case, or a Hard Drive.  A 
Component
          would be like the chips on the cards.  And classes would be like the
          individual transistors on the chip.  Granted, the actual economies
          of scale in this analogy don't hold to software (a component will
          not have millions of classes).
        </p>
      </s1>
      <s1 title="What is a Block?">
        <p>
          A Block is a Component on a larger scale. It is usually the
          implementation of a Service. Examples of Blocks are
          "Persistent Object Store", "Connection Pools", "XML Database",
          "Authenticator" and so on.
        </p>
      </s1>
       <s1 title="Guide Contents">
         <ol>
          <li>What is a block?</li>
          <li><link 
href="guide-block-developers-what-is-a-block-listener.html">What is a block 
listener?</link></li>
          <li><link 
href="guide-block-developers-what-is-an-application-listener.html">What is an 
application listener?</link></li>
          <li><link href="guide-block-developers-creating-a-block.html">How do 
I create a block?</link></li>
          <li><link 
href="guide-block-developers-making-phoenix-compatible-comps.html">How do I 
make my components phoenix-compatible?</link></li>
          <li><link href="reference-blockinfo-specification.html">BlockInfo 
specification</link></li>
         </ol>
        </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:49 $
      </legal>
    </footer>
  </document>
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/guide-block-developers-what-is-an-application-listener.xml
  
  Index: guide-block-developers-what-is-an-application-listener.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Guide - What is an Application Listener?</title>
      <authors>
        <person id="PH" name="Paul Hammant" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          This is very similar to <em>BlockListener</em> in that it is notified
          during lifecycle of blocks and application.  In Java terms the
          <em>ApplicationListener</em> interface extends <em>BlockListener</em>
          so it is always informd of both types of events
        </p>
      </s1>
      <s1 title="Events notified">
        <p>
          ApplicationListener components are created before any Blocks are
          created in an Application. They receive notifications before and
          after the Applictaion is started and stopped.
        </p>
      </s1>
      <s1 title="How to make a block listener">
        <p>
          Like normal blocks, an application listener can be <em>LogEnabled</em>
          and take configuration via <em>Configurable</em>.  The special feature
          is that it must implement <em>ApplicationListener</em> and implement
          the four methods that are a consequence of that (as well as four from
          <em>BlockListener</em>).  The following section in assembly.xml causes
          instantiation of the application listener.  It is exactly the same as
          that for <em>BlockListener</em>:
        </p>
        <source>
          &lt;listener class="pkg.MyApplicationListener" name="a-suitable-name" 
/&gt;
        </source>
      </s1>
       <s1 title="Guide Contents">
         <ol>
          <li><link href="guide-block-developers-what-is-a-block.html">What is 
a block?</link></li>
          <li><link 
href="guide-block-developers-what-is-a-block-listener.html">What is a block 
listener?</link></li>
          <li>What is an application listener?</li>
          <li><link href="guide-block-developers-creating-a-block.html">How do 
I create a block?</link></li>
          <li><link 
href="guide-block-developers-making-phoenix-compatible-comps.html">How do I 
make my components phoenix-compatible?</link></li>
          <li><link href="reference-blockinfo-specification.html">BlockInfo 
specification</link></li>
         </ol>
        </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:49 $
      </legal>
    </footer>
  </document>
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/guide-block-developers.xml
  
  Index: guide-block-developers.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Guide - for Block Developers</title>
      <authors>
        <person name="Berin Loritsch" email="[EMAIL PROTECTED]"/>
      </authors>
      <abstract>
        The Block Developer's Guide (BDG) is written to bring an overview
          of how to create and deploy a Block. The Block is the component that
        is hosted in the Phoenix micro-kernel.
      </abstract>
    </header>
    <body>
      <s1 title="Who Should Read This Book?"> 
        <p>The BDG is written for developers who want to create
                  blocks for Phoenix. It is assumed that you are familiar with 
Java, XML, Avalon 
            patterns and server side security issues. This book provides an 
overview of 
            the underlying technology, Java classes and interfaces, component 
model, and
            behavior of server Blocks within Phoenix.</p>
                <p>While this book concentrates on server fundamentals, it 
should not
                  be construed as a &ldquo;dummy's&rdquo; book. Server side 
programming
                  is complex because of the performance and security issues you 
must
                  balance.</p>
                <p>You should be well versed in the Java language and have some
                  practical experience developing server solutions. If you need 
a stronger
                  background on server side programming, I suggest finding a 
good book on the
                  subject (any suggestions?).</p> 
         </s1> 
       <s1 title="Organization">
        <p>
         Here is how the information is presented. The first few chapters are
         foundational material, and describe the basic concepts you can use in 
your
         own blocks. The later chapters specify in detail the formal 
requirements of
         Block implementations.
        </p>
         </s1>
       <s1 title="Contents">
         <ol>
          <li><link href="guide-block-developers-what-is-a-block.html">What is 
a block?</link></li>
          <li><link 
href="guide-block-developers-what-is-a-block-listener.html">What is a block 
listener?</link></li>
          <li><link 
href="guide-block-developers-what-is-an-application-listener.html">What is an 
application listener?</link></li>
          <li><link href="guide-block-developers-creating-a-block.html">How do 
I create a block?</link></li>
          <li><link 
href="guide-block-developers-making-phoenix-compatible-comps.html">How do I 
make my components phoenix-compatible?</link></li>
          <li><link href="reference-blockinfo-specification.html">BlockInfo 
specification</link></li>
         </ol>
        </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:50 $
      </legal>
    </footer>
  </document>
  
  
  
  1.1                  jakarta-avalon-phoenix/src/xdocs/guide-deployers.xml
  
  Index: guide-deployers.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Guide - for Deployers</title>
      <authors>
        <person name="Peter Donald" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          Currently deploying a server application under Phoenix is simply a 
matter 
          of dropping the .sar file into the appropriate directory 
(<code>apps/</code>)
          and restarting Phoenix. In the future there will be more advanced 
methods 
          of deploying and undeploying Server Applications without restarting 
Phoenix.
        </p>
        <s2 title="Target Audience">
          <p>
            This documentation describes the methods through which you can 
deploy 
            Server Applications under the Phoenix kernel. It will be expanded 
as 
            the system becomes more complete.
          </p>
        </s2>
      </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:50 $
      </legal>
    </footer>
  </document>
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/guide-example-configuration.xml
  
  Index: guide-example-configuration.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Guide - Example Configuration</title>
      <authors>
        <person name="Stephen McConnell" email="[EMAIL PROTECTED]"/>
        <person name="Gerhard Froehlich" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>This page contains a real production example of a block
        assembly and block .xinfo description based an extract from
        a B2B Enterprise Integration and Collaboration Platform developed by
        <a href="http://www.osm.net";>OSM</a></p>.
        <p>This example was originally a Mailing List response to a
        some user questions!</p>
        <p>The orginal post was written by Stephen McConnell from OSM.</p>
      </s1>
      <s1 title="The example">
        <p>First we start with a manifest file in a jar the contains
        a block.  The manifest contains the declaration of the path
        to the block implementation.  This path is also used to
        resolve the .xinfo file.  In this case the <code>.xinfo</code>
        description will be located under
        <code>org/apache/acme/hub/gateway/pki/PKIProcessServer.xinfo</code></p>
        <source><![CDATA[
  
  Manifest-Version: 1.0
  Created-By: ACME Corporation
  
  Name: org/apache/acme/hub/gateway/pki/PKIProcessServer.class
  Avalon-Block: true
  
        ]]>
        </source>
        <p>The <code>.xinfo</code> file contains a description of a
        reasonably simple block that serves as a factory for business
        processes that handle PKI certification requests:</p>
        <source><![CDATA[
  <?xml version="1.0"?>
  
  <blockinfo>
  <block>
      <version>1.0</version>
    </block>
  
    <services>
        <!--
        This block could be declaring several services that it supports.
        Unlike a Java interface, the service includes a version tag. So
        it's possible for a block to have several services with possibly
        different versions. If there are multiple services then just
        declare them with multiple service entries here. Phoenix will make
        sure that the class with the same name as the .xinfo file
        implements these interfaces (if it doesn't then Phoenix will
        terminate).
        -->
        <service name="org.apache.acme.hub.gateway.FactoryService" 
version="1.0" />
    </services>
  
    <!--
    So far, we have the definition of a class that supports possibly
    multiple version interfaces. But things get much more interesting, when
    we think about the services that this block requires in order to function
    properly. That's partly handled by the dependencies element and partly by
    the assembly.xml file (which I'll explain later). In the following
    dependency example there are seven "service" dependencies (i.e. 7 versioned
    interface dependencies that must be fulfilled for this block to function.
    -->
    
    <dependencies>
        <!--
        Each dependency contains a declaration of a role name and a service 
        interface and a version that can fulfil that role. The dependency 
        does not say anything about where that service implementation should
        come from (that's the job the assembly.xml file). The role element 
        is simply the label used in the implementation of your block configure 
        method that distinguishes a particular instance of the service.
        -->
        <dependency>
            <role>GATEWAY</role>
            <service name="org.apache.acme.hub.gateway.GatewayContext" 
version="1.0"/>
        </dependency>
  
        <!--
        This dependency declaration simply states that in order to function,
        this block requires a <service/> (in this case a wrapper to a CORBA
        ORB version 2.4) and that the block implementation will lookup this
        service using the "ORB" keyword.
        -->
        <dependency>
            <role>ORB</role>
            <service name="org.apache.acme.hub.gateway.ORBService" 
version="2.4"/>
        </dependency>
  
        <!--
        This dependency declares a requirement for a PSS (Persistent State
        Service) Storage Home.
        -->
        <dependency>
            <role>PSS</role>
            <service 
name="org.apache.acme.hub.gateway.ProcessorStorageHomeService" version="1.0"/>
        </dependency>
  
        <!--
        This dependency enables the block to establish a call-back to the
        block supplying the service. This block uses the Registry interface
        to publish a business process description to a higher level manager.
        -->
        <dependency>
            <role>REGISTRY</role>
            <service name="org.apache.acme.hub.gateway.Registry" version="1.0"/>
        </dependency>
  
        <!-- etc. -->
        <dependency>
            <role>DOMAIN</role>
            <service name="org.apache.acme.hub.gateway.DomainService" 
version="1.0"/>
        </dependency>
        <dependency>
            <role>RANDOM</role>
            <service name="org.apache.acme.hub.gateway.RandomService" 
version="1.0"/>
        </dependency>
        <dependency>
            <role>CLOCK</role>
            <service name="org.apache.acme.service.time.TimeService" 
version="1.0"/>
        </dependency>
  
    </dependencies>
  
  </blockinfo>
  
        ]]>
        </source>
        <p>Next is the block declaration (an extract from an 
<code>assembly.xml</code>
        file). This enables the declaration of WHERE the services are coming 
from. 
        I.e. you may have a system with many blocks and even the potential for 
matching
        services available from more that one block. The class attribute 
provides the 
        link to the <code>.xinfo</code> file and the implementation class. The 
name 
        is used a key within the <code>assembly.xml</code> file when wiring 
things together. 
        E.g. the provide element references a block by its name - and declares 
that the 
        named block will serve as the provider of the service. The role 
attribute matches 
        the role element in the <code>.xinfo</code> dependency declaration.</p> 
     
        The name attribute also serves a the key to lookup a configuration 
element in 
        the application configuration.xml file.
        <source><![CDATA[
  <?xml version="1.0"?>
  
  <assembly>
  
    <!-- other assembly information here -->
  
    <!-- Certification Request Processor Factory -->
    <block class="org.apache.acme.pki.process.CertificationRequestServer" 
name="certification" >
      <provide name="gateway" role="GATEWAY"/>
      <provide name="gateway" role="ORB"/>
      <provide name="gateway" role="PSS"/>
      <provide name="gateway" role="DOMAIN"/>
      <provide name="gateway" role="RANDOM"/>
      <provide name="pki" role="REGISTRY"/>
      <provide name="time" role="CLOCK"/>
    </block>
  
    <!-- more assembly information here -->
  
  </assembly>
        ]]>
        </source>
      <s1/>
  
      <s1 title="Why this seperation?"/>
      <ul>
        <li>It forces structure and separation</li>
        <li>It provides a way of managing possibly multiple versions of the 
            same interface in a single environment</li>
        <li>It enables explicit declaration of the source of service 
provision</li>
      </ul>
    
      <p>For example you can have multiple blocks providing a TimeService. 
      One of those blocks uses an external time reference while the others 
      use a local time reference. The local time block
      declare dependencies on the external source time block and is periodically
      synchronised. In this example all of the TimeService services are exposing
      the same interface, same version (i.e. same service), but the decision as 
to
      which service is the provider to another can  be explicitly controlled.
      While the time example is perhaps trivial, there are significant policy
      security implications related to service provider selection.</p>
      </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:50 $
      </legal>
    </footer>
  </document>
  
  
  
  
  1.1                  jakarta-avalon-phoenix/src/xdocs/guide-roles.xml
  
  Index: guide-roles.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Reference - Development Roles</title>
      <authors>
        <person name="Leo Simons" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          In phoenix-based development, we identify several roles. Each of 
these has its own
        guide. If you plan to aid in the development of phoenix itself, or if 
you are
        responsible for all these aspects, you should read all the guides. 
Otherwise, you
        should be able to learn everything you need to know from the guide that 
fits your
        role.
        </p>
      </s1>
      <s1 title="The Administrator">
        <p>The administrator is responsible for getting phoenix to run and for 
keeping it
        running. He typically controls the startup and shutdown of the 
standalone server
        or daemon, and uses a management console to keep the server in top 
condition.</p>
  
        <p><link href="guide-administrator.html">Administrator's 
Guide</link></p>
      </s1>
      <s1 title="The Deployer">
        <p>The deployer manages (un/re)deployment of the applications hosted 
withing phoenix,
        typically through a management console. In real life, this is often the 
same person
         as the adminstrator.</p>
  
        <p><link href="guide-deployer.html">Deployer's Guide</link></p>
      </s1>
      <s1 title="The Assembler">
        <p>The assembler takes pre-written blocks and glues these together to 
create a
         server application. Assemblers usually work closely with block 
developers.</p>
  
        <p><link href="guide-assemblers.html">Assembler Guide</link></p>
      </s1>
      <s1 title="The Block Developer">
        <p>The block developer creates reusable components (called blocks) that 
can be
         wired together to form a server applications.</p>
  
        <p><link href="guide-block-developers.html">Block Developers 
Guide</link></p>
      </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:50 $
      </legal>
    </footer>
  </document>
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/reference-assembly-xml-specification.xml
  
  Index: reference-assembly-xml-specification.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Reference - Specification of assembly.xml </title>
      <authors>
        <person id="PD" name="Peter Donald" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          The purpose of the <code>assembly.xml</code> file is to define how 
the Server
          Application is assembled from it's component Blocks. This requires 
naming each
          block, specifying the implementation class for each block and wiring 
together
          blocks. The wiring is done via provides elements. Each provide 
element maps a
          block instance to a role of a dependency specified in the BlockInfo 
file. See 
          below for a sample assembly.xml file.
        </p>
        <p>
          The <code>assembly.xml</code> can also specify 
<code>BlockListener</code>
          objects that will be created for application. The listeners need a 
name and
          a classname.
        </p>
        <p>
          In previous versions of Phoenix, configuration data was also stored 
in the 
          assembly file. This is no longer the case (It is now stored in 
config.xml).
        </p>
      </s1>
      <s1 title="Sample assembly.xml file">
        <source><![CDATA[
  <?xml version="1.0"?>
  
  <assembly>
  
      <block-listener name="myListener" 
             class="com.biz.cornerstone.listeners.MyListener">
      </block-listener>
  
      <block name="myAuthorizer" 
             class="com.biz.cornerstone.blocks.MyAuthorizer">
      </block>
  
      <block name="myBlock" 
             class="com.biz.cornerstone.blocks.MyBlock">
        <provide name="myAuthorizer" 
                 role="com.biz.cornerstone.services.Authorizer"/>
      </block>
  
  </assembly>]]>
  
        </source>
      </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:50 $
      </legal>
    </footer>
  </document>
  
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/reference-blockinfo-specification.xml
  
  Index: reference-blockinfo-specification.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Reference - The BlockInfo Specification</title>
      <version>3.0</version>
      <authors>
        <person id="PD" name="Peter Donald" email="[EMAIL PROTECTED]"/>
      </authors>
      <abstract>
        Specifies the format of BlockInfo files and the reasons for particular 
aspects.
      </abstract>
    </header>
    <body>
      <s1 title="Block Metadata">
        <p>
          The meta-data about each block is stored in a BlockInfo file. The info
          includes details on what version the block is, what 
<code>Service</code>s
          it depends upon and which <code>Service</code>s it can offer to other 
Blocks.
          In the future the info will also store such data as the schema for 
configuring
          the block.
        </p>
  
        <p>
          The BlockInfo file has the same name as the Block except with the 
extention 
          <code>.xinfo</code>. Thus if you were looking up the meta info for a 
block named 
          <code>com.biz.cornerstone.blocks.MyBlock</code> you would look up the 
resource
          <code>com/biz/cornerstone/blocks/MyBlock.xinfo</code> in the same 
block jar file that
          the block was packaged in. The BlockInfo file is a simple XML format. 
An
          example of such a file follows.
        </p>
  
        <source>
  <![CDATA[
  <?xml version="1.0"?>
  
  <blockinfo>
  
    <block>
      <version>1.2.3</version>
    </block>
  
    <services>
      <service name="com.biz.cornerstone.services.MyService" 
               version="2.1.3" />
    </services>
  
    <dependencies>
      <dependency>
        <role>com.biz.cornerstone.services.Authorizer</role>
        <service name="com.biz.cornerstone.service.Authorizer" 
                 version="1.0"/>
      </dependency>
      <dependency>
        <!-- note that role is not specified and defaults
             to name of service -->
        <service name="com.biz.cornerstone.service.RoleMapper" 
                 version="1.0"/>
      </dependency>
    </dependencies>
  
  </blockinfo>
  
  ]]>
        </source>
        <p>
          You will notice that the information in the BlockInfo file is 
separated into 
          three main sections; <code>block</code>, <code>services</code> and
          <code>dependencies</code>. 
        </p>
        <s2 title="BlockInfo 'block' Section"> 
          <p>The block section specifies the version of class. In the future 
this 
          section will also specify the configuration schema if the block is 
          <code>Configurable</code>.</p>
        </s2>
        <s2 title="BlockInfo 'services' Section">
          <p>The services section documents the services that this block can 
offer other
          Blocks. The service instances indicate an interface and a version. 
The interface
          MUST extend <code>org.apache.phoenix.Service</code>. This section is 
optional
          and a Block can choose to not offer any services.</p>
        </s2>
        <s2 title="BlockInfo 'dependencies' Section">
          <p>The services section documents the services that this block 
requires to operate.
          Required services are placed in the Blocks ComponentManager under the 
name
          specified by the <code>role</code> element of dependency. As is 
documented in the 
          <link 
href="@FRAMEWORK_BASE@/guide-cop-in-avalon.html">components</link> section, the
          concept of Role is more than just a behavioural contract. A 
<code>Service</code> is
          a behavioural contract and thus the necessity to support the role 
element. In most
          cases however the role element and the name attribute of the service 
will be
          identical. In these cases it is sufficient to just specify service 
element and role
          will default to name of service.</p>
        </s2>
      </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:50 $
      </legal>
    </footer>
  </document>
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/reference-config-xml-specification.xml
  
  Index: reference-config-xml-specification.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Reference - Specification of config.xml </title>
      <authors>
        <person id="PD" name="Peter Donald" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          The purpose of the <code>config.xml</code> file is to provide 
configuration data
          to each of the blocks that require configuration data. The format of 
the 
          configuration data is block-specific, thus refer to documentation of 
Block
          for relevant details. Each element below the root element has a name 
coresponding
          to the name of a block specified in assembly.xml file. The contents 
of this
          element is the configuration data for the block.
        </p>
      </s1>
      <s1 title="Sample config.xml file">
        <source><![CDATA[
  <?xml version="1.0"?>
  
  <config>
  
      <myAuthorizer>
        &lt;!-- ...configuration data here... --&gt;
      </myAuthorizer>
  
      <myBlock>
        <param1>param1-value</param1>
        <an-integer>2</an-integer>
        ...
      </myBlock>
  
  </config>]]>
  
        </source>
      </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:50 $
      </legal>
    </footer>
  </document>
  
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/xdocs/reference-environment-xml-specification.xml
  
  Index: reference-environment-xml-specification.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Avalon Phoenix - Reference - Specification of 
environment.xml</title>
      <authors>
        <person id="PD" name="Peter Donald" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          The purpose of the <code>environment.xml</code> file is to configure 
environmental
          or Server Application wide settings. Currently this means being able 
to set the
          security policy and configure logging settings. A sample 
<code>environment.xml</code>
          follows. Previously thread pool settings were also configured in this
          section but this has been deprecated. Note that previously the 
information stored in
          <code>environment.xml</code> was stored in a file named 
<code>server.xml</code>.
        </p>
      </s1>
      <s1 title="Sample environment.xml file">
        <source><![CDATA[
  <?xml version="1.0"?>
  
  <environment>
  
      <logs>
        <category name="" target="default" priority="DEBUG" />
        <category name="myAuthorizer" target="myAuthorizer-target"
                  priority="DEBUG" />
  
        <log-target name="default"
                    location="/logs/default.log" />
        <log-target name="myAuthorizer-target"
                    location="/logs/authorizer.log" />
      </logs>
  
      <policy>
        <keystore name="foo-keystore"
                  location="sar:/conf/keystore"
                  type="JKS" />
  
        <grant code-base="file:${app.home}${/}some-dir${/}*"
                key-store="foo-keystore" >
          <permission class="java.io.FilePermission"
                      target="${/}tmp${/}*"
                      action="read,write" />
        </grant>
  
        <grant signed-by="Bob"
               code-base="file:${app.home}${/}SAR-INF${/}lib${/}*"
               key-store="foo-keystore" >
          <permission class="java.io.FilePermission"
                      target="${/}tmp${/}*"
                      action="read,write" />
        </grant>
      </policy>
  
  </environment>]]>
  
        </source>
        <p>
          The format of the policy section should be largely self evident if 
the assembler
          has experience with standard policy files. It should be noted that if 
no
          policy section is given then the Server Application runs at full 
permissions.
          The evaluation of properties occurs in a similar manner to standard
          policy file property expansion. There are a number of extra 
properties that
          will be evaluated. These include; <code>app.home</code> and 
<code>app.name</code>.
        </p>
        <p>
          One special thing to not is that the user can use URLs of the form,
          "sar:/SAR-INF/lib/*". This will apply the permissions to the jars
          contained in the .SAR file. Note that these urls must start with
          "sar:/" and must use the "/" character as file separator, regardless
          of current operating system.
        </p>
        <p>
          The logs section can currently have two types of elements; 
<em>log-target</em>s
          which represent destinations for logging and <em>category</em>s. 
There must be a
          log-target with the name "default". Categories are hierarchial in 
nature, have a
          priority and are associated with one or more log-targets. See the 
logging
          documentation for a further description of this section.
        </p>
        <p>
          There is another type of log configuration. It is more configurable.
          Specify version attribute with logs elements. See javadoc of
          org.apache.avalon.excalibur.logger package for detailed description.
          Below is example configuration.
          <source><![CDATA[
  <logger version="1.1">
  <factories>
    <factory type="file"
             
class="org.apache.avalon.excalibur.logger.factory.FileTargetFactory"/>
  </factories>
  
  <categories>
    <category name="" log-level="INFO">
      <log-target id-ref="default"/>
    </category>
  </categories>
  
  <targets>
    <file id="default">
      <filename>${app.home}/logs/default-</filename>
      <append>true</append>
      <rotation type="unique" pattern="yyyyMMdd" suffix=".log">
        <date>yyyyMMdd</date>
      </rotation>
    </file>
  </targets>
  </logger>
  ]]></source>
        </p>
      </s1>
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/05/12 19:52:50 $
      </legal>
    </footer>
  </document>
  
  
  
  

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

Reply via email to