hlship      2004/05/26 14:28:49

  Modified:    src/documentation/content/xdocs multithreading.xml rules.xml
                        localization.xml services.xml interceptors.xml
                        descriptor.xml site.xml case1.xml
                        configurations.xml links.ent bootstrap.xml
  Added:       framework/src/documentation/content/xdocs/hivemind
                        BuilderFactory.xml SymbolSources.xml
                        Translators.xml EagerLoad.xml ServiceModels.xml
                        ShutdownCoordinator.xml ThreadLocalStorage.xml
               framework/src/documentation/content/xdocs/hivemind/ant
                        ManifestClassPath.xml ConstructRegistry.xml
               library/src/documentation/content/xdocs/hivemind.lib
                        EJBProxyFactory.xml NameLookup.xml
                        RemoteExceptionCoordinator.xml
  Removed:     framework/xdocs ServiceModels.xml navigation.xml
                        ApplicationDefaults.xml SymbolSources.xml
                        FactoryDefaults.xml ThreadEventNotifier.xml
                        ShutdownCoordinator.xml EagerLoad.xml
                        BuilderFactory.xml ThreadLocalStorage.xml
                        ClassFactory.xml Translators.xml
                        LoggingInterceptor.xml
               library/xdocs EJBProxyFactory.xml
                        RemoteExceptionCoordinator.xml navigation.xml
                        NameLookup.xml
               framework maven.xml project.xml project.properties
               framework/src/images HiveMind-Framework-Logo.psp
               library  project.xml project.properties maven.xml
               framework/xdocs/ant ManifestClassPath.xml index.xml
                        ConstructRegistry.xml
               .        project.properties project.xml maven.xml
               framework/xdocs/images HiveMind-Framework-Logo.png
               library/src/images HiveMind-Library-Logo.psp
               library/xdocs/images HiveMind-Library-Logo.png
  Log:
  Remove the Maven build files.
  Finish converting the static content to Forrest format.
  
  Revision  Changes    Path
  1.1                  
jakarta-hivemind/framework/src/documentation/content/xdocs/hivemind/BuilderFactory.xml
  
  Index: BuilderFactory.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: BuilderFactory.xml,v 1.1 2004/05/26 21:28:48 hlship Exp $ -->
  <!-- 
     Copyright 2004 The Apache Software Foundation
  
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
        "./dtd/document-v12.dtd" [
        <!ENTITY projectroot '../'>
        <!ENTITY % common-links SYSTEM "../links.ent">
        %common-links;
        ]>
  <document>
        <header>
                <title>hivemind.BuilderFactory Service</title>
        </header>
        <body>
                <p>The <link 
href="&hivedoc;/service/hivemind.BuilderFactory.html">
                        BuilderFactory</link> service is a service 
implementation factory ... a
                        service that is used to construct other services.</p>
                <p>The general usage of the BuilderFactory is:</p>
                <source><![CDATA[
  invoke-factory (service-id=hivemind.BuilderFactory)
  {
    construct (class=... log-property=... messages-property=... 
service-id-property=... initialize-method=...)
    {
      log
      messages
      service-id
      string { ... }
      boolean { ... }
      configuration { ... }
      int { ... }
      long { ... }
      resource { ... }
      service { ... }
      
      event-listener (service-id=... event-site-name=...)
      set (property=... value=...)
      set-configuration (property=... configuration-id=...)
      set-resource (property=... path=...)
      set-service (property=... service-id=...)
    }
  }]]> </source>
                <p>The attributes of the <code>construct</code> element are 
used to specify
                        the implementation class and set common service 
properties. Nested
                        elements supply the constructor parameters and 
configure other specific
                        properties of the implementation (the 
<code>set-...</code> elements).</p>
                <section>
                        <title>construct</title>
                        <table>
                                <tr>
                                        <th>Attribute</th>
                                        <th>Required ?</th>
                                        <th>Description</th>
                                </tr>
                                <tr>
                                        <td>class</td>
                                        <td>yes</td>
                                        <td>The fully qualified name of the 
class to instantiate.</td>
                                </tr>
                                <tr>
                                        <td>initialize-method</td>
                                        <td>no</td>
                                        <td>The name of a method (public, no 
parameters) to invoke after the
                                                service is constructed, to 
allow it to perform any final
                                                initializion before being put 
into use.</td>
                                </tr>
                                <tr>
                                        <td>log-property</td>
                                        <td>no</td>
                                        <td>The name of a property which will 
be assigned a <code>
                                                
org.apache.commons.logging.Log</code> instance for the service. The
                                                Log is created from the 
complete service id (not the name of the
                                                class). If ommitted, no Log 
will be assigned.</td>
                                </tr>
                                <tr>
                                        <td>messages-property</td>
                                        <td>no</td>
                                        <td>Allows the &api.Messages; for the 
module to be assigned to a
                                                property of the instance.</td>
                                </tr>
                                <tr>
                                        <td>service-id-property</td>
                                        <td>no</td>
                                        <td>Allows the service id of the 
<em>constructed</em> service to be
                                                assigned to a property of the 
service implementation.</td>
                                </tr>
                        </table>
                        <p>The remaining elements are enclosed by the 
&lt;construct&gt; element,
                                and are used to supply constructor parameters 
and configure properties
                                of the constructed service implementation.</p>
                </section>
                <section>
                        <title>Constructor Parameter Elements</title>
                        <p>The following table summarizes the elements which 
can be used to
                                specify constructor parameters for the class to 
instantiate. These
                                elements can be mixed freely with the 
properties configuring elements.
                                It is important to know that the number, type, 
and order of the
                                constructor parameter elements determine the 
constructor that will be
                                used to instantiate the implementation.</p>
                        <table>
                                <tr>
                                        <th>Element</th>
                                        <th>Matched Parameter Type</th>
                                        <th>Passed Parameter Value</th>
                                </tr>
                                <tr>
                                        <td>log</td>
                                        <td>org.apache.commons.logging.Log</td>
                                        <td>The Log is created from the 
complete service id (not the name of
                                                the class) of the created 
service.</td>
                                </tr>
                                <tr>
                                        <td>messages</td>
                                        <td>org.apache.hivemind.Messages</td>
                                        <td>The &api.Messages; object of the 
invoking module.</td>
                                </tr>
                                <tr>
                                        <td>service-id</td>
                                        <td>java.lang.String</td>
                                        <td>The service id of the 
<em>constructed</em> service.</td>
                                </tr>
                                <tr>
                                        <td>string</td>
                                        <td>java.lang.String</td>
                                        <td>This element's content.</td>
                                </tr>
                                <tr>
                                        <td>boolean</td>
                                        <td>boolean</td>
                                        <td>This element's content. Must be 
either "true" or "false".</td>
                                </tr>
                                <tr>
                                        <td>configuration</td>
                                        <td>java.util.List</td>
                                        <td>The List of the elements of the 
configuration specified by this
                                                element's content as a 
configuration id. The id can either by a
                                                simple id for a configuration 
within the same module as the
                                                constructed service, or a 
complete id.</td>
                                </tr>
                                <tr>
                                        <td>int</td>
                                        <td>int</td>
                                        <td>This element's content parsed as an 
integer value.</td>
                                </tr>
                                <tr>
                                        <td>long</td>
                                        <td>long</td>
                                        <td>This element's content parsed as a 
long value.</td>
                                </tr>
                                <tr>
                                        <td>resource</td>
                                        <td>org.apache.hivemind.Resource</td>
                                        <td>This element's content parsed as a 
path to a &api.Resource;, which
                                                is relative to the contributing 
module's deployment descriptor. If
                                                available, a localized version 
of the Resource will be selected.</td>
                                </tr>
                                <tr>
                                        <td>service</td>
                                        <td>interface corresponding to 
specified service</td>
                                        <td>The implementation of the service 
with the id given in this
                                                element's content. The id can 
either be a simple id for a service
                                                within the same module as the 
constructed service, or a complete id.</td>
                                </tr>
                        </table>
                </section>
                <section>
                        <title>Service Property Configuring Elements</title>
                        <section>
                                <title>event-listener</title>
                                <table>
                                        <tr>
                                                <th>Attribute</th>
                                                <th>Description</th>
                                        </tr>
                                        <tr>
                                                <td>service-id</td>
                                                <td>The service which produces 
events. The service must provide, in
                                                        its service interface, 
the necessary add and remove listener
                                                        methods.</td>
                                        </tr>
                                        <tr>
                                                <td>name</td>
                                                <td>The name of an event set to 
be registered. If not specified, all
                                                        applicable event sets 
are used.</td>
                                        </tr>
                                </table>
                                <p>If the name attribute is not specified, then 
BuilderFactory will
                                        register for all applicable event sets. 
For each event set provided by
                                        the specified service, BuilderFactory 
will check to see if the service
                                        instance being constructed implements 
the corresponding listener
                                        interface ... if so, the constructed 
service instance is added as a
                                        listener. When the name attribute is 
specified, the constructed
                                        service instance is registered as a 
listener of just that single type.</p>
                                <p>Event notifications go directly to the 
constructed service instance;
                                        they don't go through any proxies or 
interceptors for the service. The
                                        service <em>instance</em> must 
implement the listener interface, the
                                        constructed service's service interface 
<em>does not</em> have to
                                        extend the listener interface. In other 
words, event notifications are
                                        "behind the scenes", not part of the 
public API of the service.</p>
                                <p>It is perfectly acceptible to include 
multiple &lt;event-listener&gt;
                                        elements for a number of different 
event producing services.</p>
                                <p>It is not enough for the event producer 
service to have an add
                                        listener method (i.e., <code>
                                        
addPropertyChangeListener(PropertyChangeListener)</code>). To be
                                        recognized as an event set, there must 
also be a corresponding remove
                                        listener method (i.e., <code>
                                        
removePropertyChangeListener(PropertyChangeListener)</code>), even
                                        though BuilderFactory does not make use 
of the remove method. This is
                                        an offshoot of how the JavaBeans API 
defines event sets.</p>
                        </section>
                        <section>
                                <title>set</title>
                                <table>
                                        <tr>
                                                <th>Attribute</th>
                                                <th>Description</th>
                                        </tr>
                                        <tr>
                                                <td>property</td>
                                                <td>The name of the property to 
set.</td>
                                        </tr>
                                        <tr>
                                                <td>value</td>
                                                <td>A value to assigned to the 
property. The value will be converted
                                                        to an appropriate type 
for the property.</td>
                                        </tr>
                                </table>
                        </section>
                        <section>
                                <title>set-configuration</title>
                                <table>
                                        <tr>
                                                <th>Attribute</th>
                                                <th>Description</th>
                                        </tr>
                                        <tr>
                                                <td>property</td>
                                                <td>The name of the property to 
set.</td>
                                        </tr>
                                        <tr>
                                                <td>configuration-id</td>
                                                <td>The id of a configuration, 
either a simple id for a
                                                        configuration within 
the same module as the constructed service,
                                                        or a complete id. The 
property will be assigned a <code>List</code>
                                                        of the elements of the 
configuration.</td>
                                        </tr>
                                </table>
                        </section>
                        <section>
                                <title>set-resource</title>
                                <table>
                                        <tr>
                                                <th>Attribute</th>
                                                <th>Description</th>
                                        </tr>
                                        <tr>
                                                <td>property</td>
                                                <td>The name of the property to 
set.</td>
                                        </tr>
                                        <tr>
                                                <td>path</td>
                                                <td>The path to a 
&api.Resource;, relative to the contributing
                                                        module's deployment 
descriptor. If available, a localized version
                                                        of the Resource will be 
selected.</td>
                                        </tr>
                                </table>
                        </section>
                        <section>
                                <title>set-service</title>
                                <table>
                                        <tr>
                                                <th>Attribute</th>
                                                <th>Description</th>
                                        </tr>
                                        <tr>
                                                <td>property</td>
                                                <td>The name of the property to 
set.</td>
                                        </tr>
                                        <tr>
                                                <td>service-id</td>
                                                <td>The id of a service, either 
a simple id for a service within the
                                                        same module as the 
constructed service, or a complete id. The
                                                        property will be 
assigned the service.</td>
                                        </tr>
                                </table>
                        </section>
                </section>
        </body>
  </document>
  
  
  
  1.1                  
jakarta-hivemind/framework/src/documentation/content/xdocs/hivemind/SymbolSources.xml
  
  Index: SymbolSources.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: SymbolSources.xml,v 1.1 2004/05/26 21:28:48 hlship Exp $ -->
  <!-- 
     Copyright 2004 The Apache Software Foundation
  
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
        "./dtd/document-v12.dtd" [
        <!ENTITY projectroot '../'>
        <!ENTITY % common-links SYSTEM "../links.ent">
        %common-links;
        ]>
  <document>
        <header>
                <title>hivemind.SymbolSources Configuration</title>
        </header>
        <body>
                <p>The <link 
href="&hivedoc;/config/hivemind.SymbolSources.html">
                        SymbolSources</link> configuration is used to define 
new <link
                        href="&apiroot;/SymbolSource.html">SymbolSource</link>s 
(providers of
                        values for substitution symbols).</p>
                <p>Contributions are of the form:</p>
                <source><![CDATA[
    source (name=... before=... after=... class=... service-id=...)     
]]></source>
                <p>Sources are ordering based on the <code>name</code>, 
<code>before</code> 
                        and <code>after</code> elements. <code>before</code> 
and <code>after</code>
                        may be comma-seperated lists of other sources, may be 
the simple value 
                        <code>*</code>, or may be omitted.</p>
                <p>Only one of <code>class</code> and <code>service-id</code> 
attributes
                        should be specified. The former is the complete name of 
a class
                        (implementing the SymbolSource interface). The second 
is used to
                        contribute a service (which must also implement the 
interface).</p>
        </body>
  </document>
  
  
  
  1.1                  
jakarta-hivemind/framework/src/documentation/content/xdocs/hivemind/Translators.xml
  
  Index: Translators.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: Translators.xml,v 1.1 2004/05/26 21:28:48 hlship Exp $ -->
  <!-- 
     Copyright 2004 The Apache Software Foundation
  
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
        "./dtd/document-v12.dtd" [
        <!ENTITY projectroot '../'>
        <!ENTITY % common-links SYSTEM "../links.ent">
        %common-links;
        ]>
  <document>
        <header>
                <title>hivemind.Translators Configuration</title>
        </header>
        <body>
                <p>The <link 
href="&hivedoc;/config/hivemind.Translators.html">Translators</link>
                        configuration defines the translators that may be used 
with XML conversion
                        rules.</p>
                <p>The contribution format defines the name and class for each 
service
                        model:</p>
                <source><![CDATA[
    translator (name=... class=...)]]> </source>
                <p>An instance of the specified class will be instantiated. The 
class must
                        implement the <link 
href="&apiroot;/schema/Translator.html">Translator</link>
                        interface. It should have a no-args and/or single 
String constructor.</p>
                <p>Names of translators must be unique; it is not possible to 
override the
                        existing service model translators. A single 
translator, <code>class</code>
                        , is hard-coded into HiveMind, the others appear as 
ordinary
                        contributions.</p>
        </body>
  </document>
  
  
  
  1.1                  
jakarta-hivemind/framework/src/documentation/content/xdocs/hivemind/EagerLoad.xml
  
  Index: EagerLoad.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: EagerLoad.xml,v 1.1 2004/05/26 21:28:48 hlship Exp $ -->
  <!-- 
     Copyright 2004 The Apache Software Foundation
  
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
        "./dtd/document-v12.dtd" [
        <!ENTITY projectroot '../'>
        <!ENTITY % common-links SYSTEM "../links.ent">
        %common-links;
        ]>
  <document>
        <header>
                <title>hivemind.EagerLoad Configuration</title>
        </header>
        <body>
                <p>The <link 
href="&hivedoc;/config/hivemind.EagerLoad.html">EagerLoad</link>
                        configuration allows services to be constructed when 
the Registry is first
                        initialized. Normally, HiveMind goes to great lengths 
to ensure that
                        services are only constructed when they are first 
needed. Eager loading is
                        appropriate during development (to ensure that services 
are configured
                        properly), and some services that are event driven may 
need to be
                        instantiated early, so that they may begin receiving 
event notifications
                        even before their first service method is invoked.</p>
                <p>Care should be taken when using services with the pooled or 
threaded
                        service models to invoke cleanup the thread immediately 
after creating the
                        Registry.</p>
                <p>Contributions are as follows:</p>
                <source><![CDATA[
    load (service-id=...)]]> </source>
        </body>
  </document>
  
  
  
  1.1                  
jakarta-hivemind/framework/src/documentation/content/xdocs/hivemind/ServiceModels.xml
  
  Index: ServiceModels.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: ServiceModels.xml,v 1.1 2004/05/26 21:28:48 hlship Exp $ -->
  <!-- 
     Copyright 2004 The Apache Software Foundation
  
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
        "./dtd/document-v12.dtd" [
        <!ENTITY projectroot '../'>
        <!ENTITY % common-links SYSTEM "../links.ent">
        %common-links;
        ]>
  <document>
        <header>
                <title>hivemind.ServiceModels Configuration</title>
        </header>
        <body>
                <p>The <link 
href="&hivedoc;/config/hivemind.ServiceModels.html">
                        ServiceModels</link> configuration defines the 
available service models.
                        Service models control the lifecycle of services: when 
they are created
                        and when they are destroyed (often tied to the current 
thread's activity).</p>
                <p>The contribution format defines the name and class for each 
service
                        model:</p>
                <source><![CDATA[
    service-model (name=... class=...)]]> </source>
                <p>An instance of the specified class will be instantiated. The 
class must
                        implement the <link 
href="&apiroot;/internal/ServiceModelFactory.html">
                        ServiceModelFactory</link> interface (which creates an 
instance of the
                        actual service model for a particular service extension 
point).</p>
                <p>Names of service models must be unique; it is not possible 
to override
                        the built-in service model factories.</p>
        </body>
  </document>
  
  
  
  1.1                  
jakarta-hivemind/framework/src/documentation/content/xdocs/hivemind/ShutdownCoordinator.xml
  
  Index: ShutdownCoordinator.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: ShutdownCoordinator.xml,v 1.1 2004/05/26 21:28:48 hlship Exp $ -->
  <!-- 
     Copyright 2004 The Apache Software Foundation
  
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
        "./dtd/document-v12.dtd" [
        <!ENTITY projectroot '../'>
        <!ENTITY % common-links SYSTEM "../links.ent">
        %common-links;
        ]>
  <document>
        <header>
                <title>hivemind.ShutdownCoordinator Service</title>
        </header>
        <body>
                <p>Service implementations that need to perform any special 
shutdown logic
                        should implement the &api.RegistryShutdownListener; 
interface, and let the&hivemind.BuilderFactory;
                        register them for notifications.</p>
        </body>
  </document>
  
  
  
  1.1                  
jakarta-hivemind/framework/src/documentation/content/xdocs/hivemind/ThreadLocalStorage.xml
  
  Index: ThreadLocalStorage.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: ThreadLocalStorage.xml,v 1.1 2004/05/26 21:28:48 hlship Exp $ -->
  <!-- 
     Copyright 2004 The Apache Software Foundation
  
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
        "./dtd/document-v12.dtd" [
        <!ENTITY projectroot '../'>
        <!ENTITY % common-links SYSTEM "../links.ent">
        %common-links;
        ]>
  <document>
        <header>
                <title>hivemind.ThreadLocalStorage Service</title>
        </header>
        <body>
                <p>The <link 
href="&hivedoc;/service/hivemind.ThreadLocalStorage.html">
                        ThreadLocalStorage</link> service implements the <link
                        
href="&apiroot;/service/ThreadLocalStorage.html">ThreadLocalStorage</link>
                        interface. This service acts as a kind of Map for 
temporary data. The map
                        is local to the current thread, and is cleared at the 
end of the
                        transaction.</p>
                <p>It is your responsibility to ensure that keys are unique, 
typically by
                        prefixing them with a module id or package name.</p>
        </body>
  </document>
  
  
  
  1.1                  
jakarta-hivemind/framework/src/documentation/content/xdocs/hivemind/ant/ManifestClassPath.xml
  
  Index: ManifestClassPath.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: ManifestClassPath.xml,v 1.1 2004/05/26 21:28:48 hlship Exp $ -->
  <!-- 
     Copyright 2004 The Apache Software Foundation
  
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
        "./dtd/document-v12.dtd" [
        <!ENTITY projectroot '../../'>
        <!ENTITY % common-links SYSTEM "../../links.ent">
        %common-links;
        ]>
  <document>
        <header>
                <title>ManifestClassPath Ant Task</title>
        </header>
        <body>
                <p>Converts a classpath into a space-separated list of items 
used to set the
                        <code>Manifest Class-Path</code> attribute.</p>
                <p>This is highly useful when modules are packaged together 
inside an
                        Enterprise Application Archive (EAR). Library modules 
may be deployed
                        inside an EAR, but (in the current J2EE specs), there's 
no way for such
                        modules to be added to the classpath in the deployment 
descriptor;
                        instead, each JAR is expected to have a Manifest 
Class-Path attribute
                        identifying the exactly list of JARs that should be in 
the classpath. This
                        Task is used to generate that list.</p>
                <p>This task is implemented as <link
                        href="&apiroot;ant/ManifestClassPath.html">
                        org.apache.hivemind.ant.ManifestClassPath</link>.</p>
                <section>
                        <title>Parameters</title>
                        <table>
                                <tr>
                                        <th>Attribute</th>
                                        <th>Description</th>
                                        <th>Required</th>
                                </tr>
                                <tr>
                                        <td>property</td>
                                        <td>The name of a property to set as a 
result of executing the task.</td>
                                        <td>Yes</td>
                                </tr>
                                <tr>
                                        <td>directory</td>
                                        <td>If specified, then the directory 
attribute does two things: <ul> 
                                                <li>It acts as a filter, 
limiting the results to just those elements
                                                that are within the 
directory</li> <li>It strips off the directory
                                                as a prefix (plus the 
separator), creating results that are relative
                                                to the directory.</li> </ul> 
</td>
                                        <td>No</td>
                                </tr>
                        </table>
                </section>
                <section>
                        <title>Parameters specified as nested elements</title>
                        <section>
                                <title>classpath</title>
                                <p>A path-like structure, used to identify what 
the classpath should be.</p>
                        </section>
                </section>
                <section>
                        <title>Examples</title>
                        <p>Generate a list of JARs inside the 
<code>${target}</code> directory as
                                relative paths and use it to set the Class-Path 
manifest attribute.</p>
                        <source><![CDATA[
  <manifestclasspath directory="${target}" property="manifest.class.path">
    <classpath refid="build.class.path"/>
  </manifestclasspath>
  
  <jar . . .>
    <manifest>
      <attribute name="Class-Path" value="${manifest.class.path}"/>
      . . .
    </manifest>
  </jar>
  
  ]]> </source>
                </section>
        </body>
  </document>
  
  
  
  1.1                  
jakarta-hivemind/framework/src/documentation/content/xdocs/hivemind/ant/ConstructRegistry.xml
  
  Index: ConstructRegistry.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: ConstructRegistry.xml,v 1.1 2004/05/26 21:28:48 hlship Exp $ -->
  <!-- 
     Copyright 2004 The Apache Software Foundation
  
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
        "./dtd/document-v12.dtd" [
        <!ENTITY projectroot '../../'>
        <!ENTITY % common-links SYSTEM "../../links.ent">
        %common-links;
        ]>
  <document>
        <header>
                <title>ConstructRegistry Ant Task</title>
        </header>
        <body>
                <p>Reads some number of HiveMind module descriptors and 
assembles a single
                        registry file from them. The output registry consists 
of a &lt;registry&gt;
                        element which contains one &lt;module&gt; element for 
each module
                        descriptor read. This registry is useful for generating 
documentation.</p>
                <p>The registry XML is only updated if it does not exist, or if 
any of the
                        module deployment descriptor is newer.</p>
                <p>This task is implemented as <link
                        href="&apiroot;/ant/ConstructRegistry.html">
                        org.apache.hivemind.ant.ConstructRegistry</link>.</p>
                <section>
                        <title>Parameters</title>
                        <table>
                                <tr>
                                        <th>Attribute</th>
                                        <th>Description</th>
                                        <th>Required</th>
                                </tr>
                                <tr>
                                        <td>output</td>
                                        <td>The file to write the registry 
to.</td>
                                        <td>Yes</td>
                                </tr>
                        </table>
                </section>
                <section>
                        <title>Parameters specified as nested elements</title>
                        <section>
                                <title>descriptors</title>
                                <p>A path-like structure, used to identify 
which HiveMind module
                                        descriptors 
(<code>hivemodule.sdl</code> and <code>hivemind.xml</code>
                                        ) should be included.</p>
                                <p>Each path element should either be a module 
deployment descriptor, or
                                        be a JAR containing a deployment 
descriptor (in the <code>META-INF</code>
                                        folder).</p>
                        </section>
                </section>
                <section>
                        <title>Examples</title>
                        <p>Create <code>target/registry.xml</code> from all 
<code>hivemodule.xml</code>
                                descriptors found inside the <code>src</code> 
directory.</p>
                        <source><![CDATA[
  <constructregistry output="target/registry.xml">
    <descriptors>
      <fileset dir="src">
        <include name="**/hivemodule.xml"/>
      </fileset>
    </descriptors>
  </constructregistry>]]> </source>
                </section>
        </body>
  </document>
  
  
  
  1.2       +5 -5      
jakarta-hivemind/src/documentation/content/xdocs/multithreading.xml
  
  Index: multithreading.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/src/documentation/content/xdocs/multithreading.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- multithreading.xml        26 May 2004 16:58:43 -0000      1.1
  +++ multithreading.xml        26 May 2004 21:28:49 -0000      1.2
  @@ -38,14 +38,14 @@
                        <p>HiveMind expects that initially, work will progress 
in a single startup
                                thread. This is the early state, the 
construction state, where the
                                module deployment descriptors are located and 
parsed, and the contents
  -                             used to assemble the registry; this is the 
domain of <link
  -                             
href="&apiroot;/impl/RegistryBuilder.html">RegistryBuilder</link> .</p>
  +                             used to assemble the registry; this is the 
domain of &api.RegistryBuilder;
  +                             .</p>
                        <p>The construction activities are not thread-safe. 
This includes the
                                parser, and other code (virtually all of which 
is hidden from your
                                application).</p>
                        <p>The construction state ends when the 
<code>RegistryBuilder</code> 
  -                             returns the <link 
href="&apiroot;/Registry.html">Registry</link> from
  -                             method <code>constructRegistry()</code>. The 
registry is thread-safe.</p>
  +                             returns the &api.Registry; from method 
<code>constructRegistry()</code>.
  +                             The registry is thread-safe.</p>
                </section>
                <section>
                        <title>Runtime State</title>
  
  
  
  1.2       +5 -6      
jakarta-hivemind/src/documentation/content/xdocs/rules.xml
  
  Index: rules.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/src/documentation/content/xdocs/rules.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- rules.xml 26 May 2004 16:58:44 -0000      1.1
  +++ rules.xml 26 May 2004 21:28:49 -0000      1.2
  @@ -296,9 +296,8 @@
                                a translator in the &attribute; element (it 
also applies to element
                                content, with the 
<code>content-translator</code> attribute of the &element;
                                element).</p>
  -                     <p>A translator is an object implementing the <link
  -                             
href="&apiroot;/schema/Translator.html">Translator</link> interface. The
  -                             <code>translator</code> value specified in a 
rule may be either the
  +                     <p>A translator is an object implementing the 
&api.Translator; interface.
  +                             The <code>translator</code> value specified in 
a rule may be either the
                                complete class name of a class implementing the 
interface, or one of a
                                number of builtin values.</p>
                        <p>Translators configurations consist of a translator 
name, and an
  @@ -389,8 +388,8 @@
                                <title>resource</title>
                                <p>The resource translator is used to find a 
resource packaged with (or
                                        near) the module's deployment 
descriptor. The input value is the
  -                                     relative path to a file. The translator 
converts the input value to a 
  -                                     <link 
href="&apiroot;/Resource.html">Resource</link> for that file.</p>
  +                                     relative path to a file. The translator 
converts the input value to a &api.Resource;
  +                                     for that file.</p>
                                <p>If the file doesn't exist, then an error is 
logged. If a localization
                                        of the file exists, then the Resource 
for that localization is
                                        returned.</p>
  
  
  
  1.2       +9 -13     
jakarta-hivemind/src/documentation/content/xdocs/localization.xml
  
  Index: localization.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/src/documentation/content/xdocs/localization.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- localization.xml  26 May 2004 16:58:44 -0000      1.1
  +++ localization.xml  26 May 2004 21:28:49 -0000      1.2
  @@ -33,22 +33,20 @@
                        appending the localization code and ".properties". This 
is relevant only
                        if you load your module deployment descriptors from a 
non-standard
                        location, possibly via the &sub-module; element.</note>
  -             <p>Services can gain access to localized messages, as an 
instance of <link
  -                     href="&apiroot;/Messages.html">Messages</link>, which 
includes methods for
  -                     accessing messages and formatting messages with 
arguments.</p>
  +             <p>Services can gain access to localized messages, as an 
instance of &api.Messages;
  +                     , which includes methods for accessing messages and 
formatting messages
  +                     with arguments.</p>
                <p>In a module descriptor, within the &contribution; and 
&invoke-factory; 
                        elements, you can reference a localized message in an 
attribute or element
                        content simply by prefixing the message key with '%'. 
Examples:</p>
  -             <source>
  -                     <![CDATA[ 
  +             <source> <![CDATA[ 
   contribution (configuration-id=...)
   {
     some-item (message="%message.key") 
     { 
       "%other.message.key" 
     }
  -}]]>
  -             </source>
  +}]]> </source>
                <p>The two keys (<code>message.key</code> and 
<code>other.message.key</code>
                        ) are searched for in the <em>contributing</em> 
module's messages.</p>
                <p>HiveMind gracefully recovers from undefined messages. If a 
message is not
  @@ -62,11 +60,9 @@
                        two files defer to the more specific file.</p>
                <section>
                        <title>Setting the locale</title>
  -                     <p>When a <link 
href="&apiroot;/Registry.html">Registry</link> is created
  -                             by the <link 
href="&apiroot;/impl/RegistryBuilder.html">RegistryBuilder</link>
  -                             , a locale is specified. This is the locale for 
the Registry and, by
  -                             extension, for all Modules in the registry. The 
locale may not be
  -                             changed.</p>
  +                     <p>When a &api.Registry; is created by the 
&api.RegistryBuilder;, a locale
  +                             is specified. This is the locale for the 
Registry and, by extension, for
  +                             all Modules in the registry. The locale may not 
be changed.</p>
                </section>
        </body>
   </document>
  
  
  
  1.3       +18 -12    
jakarta-hivemind/src/documentation/content/xdocs/services.xml
  
  Index: services.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/src/documentation/content/xdocs/services.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- services.xml      26 May 2004 19:34:15 -0000      1.2
  +++ services.xml      26 May 2004 21:28:49 -0000      1.3
  @@ -110,10 +110,9 @@
                                        includes a class attribute, the Java 
class to instantiate.</p>
                                <p>An implementation factory is represented by 
a &invoke-factory; 
                                        element. It includes a service-id 
attribute, the id of a service
  -                                     implementation factory service (which 
implements the <link
  -                                     
href="&apiroot;/ServiceImplementationFactory.html">
  -                                     ServiceImplementationFactory</link> 
interface). The most common
  -                                     example is the 
&hivemind.BuilderFactory; service.</p>
  +                                     implementation factory service (which 
implements the &api.ServiceImplementationFactory;
  +                                     interface). The most common example is 
the &hivemind.BuilderFactory; 
  +                                     service.</p>
                        </section>
                        <section>
                                <title>Implementation Factories</title>
  @@ -137,9 +136,8 @@
                                <title>Interceptor Contributions</title>
                                <p>An interceptor contribution is represented 
by an &interceptor; 
                                        element. The service-id attribute 
identifies a service interceptor
  -                                     factory service: a service that 
implements the <link
  -                                     
href="&apiroot;/ServiceInterceptorFactory.html">
  -                                     ServiceInterceptorFactory</link> 
interface.</p>
  +                                     factory service: a service that 
implements the &api.ServiceInterceptorFactory;
  +                                     interface.</p>
                                <p>An interceptor factory knows how to create 
an object that implements
                                        an arbitrary interface (the interface 
being defined by the service
                                        extension point), adding new 
functionality. For example, the &hivemind.LoggingInterceptor;
  @@ -328,8 +326,7 @@
                                reuse with the same or a different thread.</p>
                        <p>As with the threaded model, all of this binding and 
unbinding is hidden
                                behind a dynamically fabricated proxy class.</p>
  -                     <p>Core service implementations may implemente the <link
  -                             
href="&apiroot;/RegistryShutdownListener.html">RegistryShutdownListener</link>
  +                     <p>Core service implementations may implement the 
&api.RegistryShutdownListener;
                                interface to receive a callback for final 
cleanups (as with the
                                singleton and deferred service models).</p>
                        <p>In addition, a service may implement the <link
  @@ -344,8 +341,7 @@
                                instantiated. In many cases, the service needs 
to know when it has been
                                created (to perform any final initializations) 
or when the Registry has
                                been shut down.</p>
  -                     <p>A core service implementation may also implement the 
<link
  -                             
href="&apiroot;/RegistryShutdownListener.html">RegistryShutdownListener</link>
  +                     <p>A core service implementation may also implement the 
&api.RegistryShutdownListener;
                                interface. When a Registry is <link
                                
href="&apiroot;/Registry.html#shutdown()">shutdown</link>, the <code>
                                registryDidShutdown()</code> method is invoked 
on all services (and many
  @@ -418,6 +414,16 @@
                                                may not be desirable in a 
servlet or Tapestry application, as some
                                                state from a client may be left 
inside the services, and a different
                                                client may be associated with 
the thread in later executions.</p>
  +                             </li>
  +                             <li>
  +                                     <strong>What if I want my service to be 
created early, not just when
  +                                             needed?</strong>
  +                                     <p>Contribute your service into the 
&hivemind.EagerLoad; 
  +                                             configuration; this will force 
HiveMind to instantiate the service
  +                                             on startup. This is often used 
when developing an application, so
  +                                             that configuration errors are 
caught early; it may also be useful
  +                                             when a service should be 
instantiated to listen for events from some
  +                                             other service.</p>
                                </li>
                        </ul>
                </section>
  
  
  
  1.3       +8 -11     
jakarta-hivemind/src/documentation/content/xdocs/interceptors.xml
  
  Index: interceptors.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/src/documentation/content/xdocs/interceptors.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- interceptors.xml  26 May 2004 19:34:15 -0000      1.2
  +++ interceptors.xml  26 May 2004 21:28:49 -0000      1.3
  @@ -50,16 +50,13 @@
                        <note>The use of Javassist is not mandated but is 
generally easy and is
                                more efficient at runtime. It is possible to 
accomplish the same thing
                                using JDK proxies.</note>
  -                     <p>Interceptor factories are HiveMind services which 
implement the <link
  -                             href="&apiroot;/ServiceInterceptorFactory.html">
  -                             ServiceInterceptorFactory</link> interface. 
This interface has a single
  -                             method, <code>createInterceptor()</code>, which 
is passed:</p>
  +                     <p>Interceptor factories are HiveMind services which 
implement the &api.ServiceInterceptorFactory;
  +                             interface. This interface has a single method, 
<code>createInterceptor()</code>
  +                             , which is passed:</p>
                        <ul>
  -                             <li>The <link 
href="&apiroot;/InterceptorStack.html">InterceptorStack</link>
  -                                     (an object used to manage the process 
of creating interceptors for a
  -                                     service)</li>
  -                             <li>The <link 
href="&apiroot;/Module.html">Module</link> which invoked
  -                                     the interceptor factory</li>
  +                             <li>The &api.InterceptorStack; (an object used 
to manage the process of
  +                                     creating interceptors for a 
service)</li>
  +                             <li>The &api.Module; which invoked the 
interceptor factory</li>
                                <li>A list of parameters</li>
                        </ul>
                        <p>Like service implementation factories, interceptor 
factories may take
  @@ -199,7 +196,7 @@
                                <title>Creating the infrastructure</title>
                                <p>The method 
<code>createInfrastructure()</code> is used to add fields
                                        and constructors to the interceptor 
class.</p>
  -        <source><![CDATA[
  +                             <source><![CDATA[
   protected void createInfrastructure(InterceptorStack stack, ClassFab 
classFab)
   {
     Class topClass = stack.peek().getClass();
  
  
  
  1.2       +5 -10     
jakarta-hivemind/src/documentation/content/xdocs/descriptor.xml
  
  Index: descriptor.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/src/documentation/content/xdocs/descriptor.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- descriptor.xml    26 May 2004 16:58:43 -0000      1.1
  +++ descriptor.xml    26 May 2004 21:28:49 -0000      1.2
  @@ -112,8 +112,7 @@
                                        <td>Used to reference a &schema; (in 
the same module, or a different
                                                one) that defines the format of 
contributions into the configuration
                                                point. This may be omitted, in 
which case the extension point will
  -                                             contain a list of <link 
href="&apiroot;/Element.html">Element</link>
  -                                             .</td>
  +                                             contain a list of &api.Element; 
.</td>
                                </tr>
                        </table>
                        <p>Contains: &description;, &schema; </p>
  @@ -277,8 +276,7 @@
                        <title>interceptor</title>
                        <p>&_interceptor; contributes an interceptor factory to 
a service
                                extension point. An interceptor factory is a 
service which implements
  -                             the <link 
href="&apiroot;/ServiceInterceptorFactory.html">
  -                             ServiceInterceptorFactory</link> interface.</p>
  +                             the &api.ServiceInterceptorFactory; 
interface.</p>
                        <p>When the service is constructed, each invoked 
interceptor factory will
                                fabricate an interceptor class to provide 
additional functionality for
                                the service.</p>
  @@ -494,11 +492,8 @@
                                        <td>no</td>
                                        <td>Used to reference a &schema; (in 
the same module, or a different
                                                one) that defines parameters 
used by the service. This is used when
  -                                             the service being defined is a 
<link
  -                                             
href="&apiroot;/ServiceImplementationFactory.html">
  -                                             
ServiceImplementationFactory</link> or a <link
  -                                             
href="&apiroot;/ServiceInterceptorFactory.html">
  -                                             
ServiceInterceptorFactory</link>.</td>
  +                                             the service being defined is a 
&api.ServiceImplementationFactory; or
  +                                             a 
&api.ServiceInterceptorFactory;.</td>
                                </tr>
                        </table>
                        <p>Contains: &create-instance;, &description;, 
&interceptor;, &invoke-factory;
  
  
  
  1.3       +37 -4     jakarta-hivemind/src/documentation/content/xdocs/site.xml
  
  Index: site.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/src/documentation/content/xdocs/site.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- site.xml  26 May 2004 16:58:43 -0000      1.2
  +++ site.xml  26 May 2004 21:28:49 -0000      1.3
  @@ -22,18 +22,51 @@
                        <override label="Overriding Services" 
href="override.html"/>
                </tutorials>
        </project>
  +     
        <hivemind label="Module: hivemind" href="hivemind/">
  +             
                <services label="Services">
  -                     <hivemind.LoggingInterceptor 
label="hivemind.LoggingInterceptor"
  +             
  +                     <hivemind.BuilderFactory label="BuilderFactory" 
href="BuilderFactory.html"/>
  +                     <hivemind.LoggingInterceptor label="LoggingInterceptor"
                                href="LoggingInterceptor.html"/>
  +                     <hivemind.ShutdownCoordinator 
label="ShutdownCoordinator" href="ShutdownCoordinator.html"/>
  +                     <hivemind.ThreadLocalStorage label="ThreadLocalStorage" 
href="ThreadLocalStorage.html"/>
  +             
                </services>
  +             
                <configs label="Configurations">
  -                     <hivemind.ApplicationDefaults 
label="hivemind.ApplicationDefaults"
  +                     
  +                     <hivemind.ApplicationDefaults 
label="ApplicationDefaults"
                                href="ApplicationDefaults.html"/>
  -                     <hivemind.FactoryDefaults 
label="hivemind.FactoryDefaults"
  +                     <hivemind.EagerLoad label="EagerLoad" 
href="EagerLoad.html"/>
  +                     <hivemind.FactoryDefaults label="FactoryDefaults"
                                href="FactoryDefaults.html"/>
  +                     <hivemind.ServiceModels label="ServiceModels" 
href="ServiceModels.html"/>
  +                     <hivemind.SymbolSources label="SymbolSources" 
href="SymbolSources.html"/>
  +                     <hivemind.Translators label="Translators" 
href="Translators.html"/>
  +                     
                </configs>
  +             
  +             <anttasks label="Ant Tasks">
  +             
  +                     <ConstructRegistry label="ConstructRegistry" 
href="ant/ConstructRegistry.html"/>
  +                     <ManifestClassPath label="ManifestClassPath" 
href="ant/ManifestClassPath.html"/>
  +             
  +             </anttasks>
        </hivemind>
  +     
  +     <hivemind.lib label="Module: hivemind.lib" href="hivemind.lib/">
  +     
  +             <services label="Services">
  +             
  +                     <hivemind.lib.EJBProxyFactory label="EJBProxyFactory" 
href="EJBProxyFactory.html"/>
  +                     <hivemind.lib.NameLookup label="NameLookup" 
href="NameLookup.html"/>
  +                     <hivemind.lib.RemoteExceptionCoordinator 
label="RemoteExceptionCoordinator" href="RemoteExceptionCoordinator.html"/>
  +             </services>     
  +             
  +     </hivemind.lib>
  +     
        <complete-site label="Complete Site">
                <complete-html label="HTML" href="site.html"/>
        </complete-site>
  
  
  
  1.4       +182 -183  
jakarta-hivemind/src/documentation/content/xdocs/case1.xml
  
  Index: case1.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/src/documentation/content/xdocs/case1.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- case1.xml 26 May 2004 19:34:15 -0000      1.3
  +++ case1.xml 26 May 2004 21:28:49 -0000      1.4
  @@ -16,65 +16,65 @@
      limitations under the License.
   -->
   <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
  -  "./dtd/document-v12.dtd" [
  -  <!ENTITY % common-links SYSTEM "links.ent">
  -  %common-links;
  -  ]>
  +     "./dtd/document-v12.dtd" [
  +     <!ENTITY % common-links SYSTEM "links.ent">
  +     %common-links;
  +     ]>
   <document>
  -  <header>
  -    <title>Case Study #1: Application Startup / Shutdown</title>
  -  </header>
  -  <body>
  -    <note>This case study is based on work done for my prior employer, who 
has
  -      not (yet) given approval to mention the project by name. The package 
names
  -      and module ids have been changed, and some minor changes and
  -      simplifications have been made. The actual name of the product has been
  -      disguised as <em>Panorama</em>.</note>
  -    <p>The Panorama product is a fairly large J2EE web application deployed 
into
  -      BEA WebLogic. Panorama consists of well over six thousand classes, 
divided
  -      into a large number of tools and services. Panorama has been a 
production
  -      project for several years, long before HiveMind was available. 
HiveMind's
  -      introduction into Panorama (on something of a trial basis) was to 
cleanup
  -      the startup and shutdown process for the application.</p>
  -    <p>Panorama runs inside BEA WebLogic as an enterprise application; 
however,
  -      it is still logically a number of subsystems, many of which require 
some
  -      form of startup or shutdown logic. For example, the Panorama Help 
service
  -      caches help data stored in the database; the Panorama Mail tool sets up
  -      periodic database cleanup jobs. All told, there are over 40 startup 
tasks,
  -      and a handful of shutdown tasks.</p>
  -    <p>Prior to HiveMind, a single EJB was the focus of all this startup and
  -      shutdown activity. A small WebLogic startup class would invoke the EJB,
  -      and the EJB implementation would invoke static methods on many other
  -      classes (some of which would lookup other EJBs and invoke methods on
  -      them). This approach had grown quite unwieldy, especially in light of
  -      efforts to improve and modularize the Panorama build process. HiveMind 
was
  -      brought in to rationalize this aspect of Panorama, with the goal being 
to
  -      make the fewest possible changes to existing code.</p>
  -    <p>An important aspect of startup and shutdown is the order of 
operations;
  -      there are dependencies between different tasks that must be honored in
  -      terms of which task is executed first.</p>
  -    <section>
  -      <title>Overview</title>
  -      <p>The appropriate place to build the registry for an EAR is from the 
web
  -        application; it has the widest view of available classes; the web
  -        application classloader has visibility to the web application and its
  -        libraries, all the EJBs deployed in the application, and the system
  -        classloader.</p>
  -      <p>The overall approach is to provide HiveMind module deployment
  -        descriptors for the various tools and services of Panorama; each 
module
  -        contributes tasks to a Startup or Shutdown configuration point.</p>
  -      <p>A WebLogic shutdown class is still used and the original EJB still
  -        exists to allow an orderly shutdown. Ultimately, this is required 
due to
  -        class loader issues; the EJB will have visibility to the HiveMind
  -        library, but the startup class may not.</p>
  -    </section>
  -    <section>
  -      <title>Module panorama.framework.startup</title>
  -      <p>The <code>panorama.framework.startup</code> ("initialization and
  -        shutdown") module contains the services and configuration points for
  -        startup and shutdown. It also contains Java classes corresponding to
  -        task contributions.</p>
  -      <source><![CDATA[
  +     <header>
  +             <title>Case Study #1: Application Startup / Shutdown</title>
  +     </header>
  +     <body>
  +             <note>This case study is based on work done for my prior 
employer, who has
  +                     not (yet) given approval to mention the project by 
name. The package names
  +                     and module ids have been changed, and some minor 
changes and
  +                     simplifications have been made. The actual name of the 
product has been
  +                     disguised as <em>Panorama</em>.</note>
  +             <p>The Panorama product is a fairly large J2EE web application 
deployed into
  +                     BEA WebLogic. Panorama consists of well over six 
thousand classes, divided
  +                     into a large number of tools and services. Panorama has 
been a production
  +                     project for several years, long before HiveMind was 
available. HiveMind's
  +                     introduction into Panorama (on something of a trial 
basis) was to cleanup
  +                     the startup and shutdown process for the 
application.</p>
  +             <p>Panorama runs inside BEA WebLogic as an enterprise 
application; however,
  +                     it is still logically a number of subsystems, many of 
which require some
  +                     form of startup or shutdown logic. For example, the 
Panorama Help service
  +                     caches help data stored in the database; the Panorama 
Mail tool sets up
  +                     periodic database cleanup jobs. All told, there are 
over 40 startup tasks,
  +                     and a handful of shutdown tasks.</p>
  +             <p>Prior to HiveMind, a single EJB was the focus of all this 
startup and
  +                     shutdown activity. A small WebLogic startup class would 
invoke the EJB,
  +                     and the EJB implementation would invoke static methods 
on many other
  +                     classes (some of which would lookup other EJBs and 
invoke methods on
  +                     them). This approach had grown quite unwieldy, 
especially in light of
  +                     efforts to improve and modularize the Panorama build 
process. HiveMind was
  +                     brought in to rationalize this aspect of Panorama, with 
the goal being to
  +                     make the fewest possible changes to existing code.</p>
  +             <p>An important aspect of startup and shutdown is the order of 
operations;
  +                     there are dependencies between different tasks that 
must be honored in
  +                     terms of which task is executed first.</p>
  +             <section>
  +                     <title>Overview</title>
  +                     <p>The appropriate place to build the registry for an 
EAR is from the web
  +                             application; it has the widest view of 
available classes; the web
  +                             application classloader has visibility to the 
web application and its
  +                             libraries, all the EJBs deployed in the 
application, and the system
  +                             classloader.</p>
  +                     <p>The overall approach is to provide HiveMind module 
deployment
  +                             descriptors for the various tools and services 
of Panorama; each module
  +                             contributes tasks to a Startup or Shutdown 
configuration point.</p>
  +                     <p>A WebLogic shutdown class is still used and the 
original EJB still
  +                             exists to allow an orderly shutdown. 
Ultimately, this is required due to
  +                             class loader issues; the EJB will have 
visibility to the HiveMind
  +                             library, but the startup class may not.</p>
  +             </section>
  +             <section>
  +                     <title>Module panorama.framework.startup</title>
  +                     <p>The <code>panorama.framework.startup</code> 
("initialization and
  +                             shutdown") module contains the services and 
configuration points for
  +                             startup and shutdown. It also contains Java 
classes corresponding to
  +                             task contributions.</p>
  +                     <source><![CDATA[
   module (id=panorama.framework.startup version="1.0.0")
   {
     description { "Module for startup and shutdown code within Panorama." }
  @@ -198,36 +198,36 @@
     }
         
   }]]> </source>
  -      <p>Notes:</p>
  -      <ul>
  -        <li>Extension points, configurations, schemas and services can be
  -          specified in any order.</li>
  -        <li>We use the simplest possible interface for the Startup and 
Shutdown
  -          services: <code>java.lang.Runnable</code>.</li>
  -      </ul>
  -      <section>
  -        <title>Startup configuration point</title>
  -        <p>The Startup configuration point and the Startup service are 
closely
  -          bound together; the former contains contributions from all sorts of
  -          modules. The service uses those contributions and executes tasks 
based
  -          on them.</p>
  -        <p>The schema for the Startup configuration point allows a <code>&lt;
  -          task&gt;</code> to be contributed. A task always has an 
<code>order</code>
  -          attribute (used to sort all the contributed elements into an 
execution
  -          order) and a <code>title</code> attribute (used in output).</p>
  -        <p>The task to execute is specified in one of three ways:</p>
  -        <ul>
  -          <li>As a Java class implementing the <code>
  -            com.panorama.framework.startup.service.Executable</code> 
interface
  -            (using the <code>class</code> attribute)</li>
  -          <li>As a HiveMind service, implementing the service (using the 
<code>
  -            service-id</code> attribute)</li>
  -          <li>As a public static method of a class (using the enclosed 
<code>&lt;
  -            invoke-static&gt;</code> element)</li>
  -        </ul>
  -        <p>The <code>Executable</code> interface is similar to the <code>
  -          java.lang.Runnable</code> interface:</p>
  -        <source><![CDATA[
  +                     <p>Notes:</p>
  +                     <ul>
  +                             <li>Extension points, configurations, schemas 
and services can be
  +                                     specified in any order.</li>
  +                             <li>We use the simplest possible interface for 
the Startup and Shutdown
  +                                     services: 
<code>java.lang.Runnable</code>.</li>
  +                     </ul>
  +                     <section>
  +                             <title>Startup configuration point</title>
  +                             <p>The Startup configuration point and the 
Startup service are closely
  +                                     bound together; the former contains 
contributions from all sorts of
  +                                     modules. The service uses those 
contributions and executes tasks based
  +                                     on them.</p>
  +                             <p>The schema for the Startup configuration 
point allows a <code>&lt; 
  +                                     task&gt;</code> to be contributed. A 
task always has an <code>order</code>
  +                                     attribute (used to sort all the 
contributed elements into an execution
  +                                     order) and a <code>title</code> 
attribute (used in output).</p>
  +                             <p>The task to execute is specified in one of 
three ways:</p>
  +                             <ul>
  +                                     <li>As a Java class implementing the 
<code>
  +                                             
com.panorama.framework.startup.service.Executable</code> interface
  +                                             (using the <code>class</code> 
attribute)</li>
  +                                     <li>As a HiveMind service, implementing 
the service (using the <code>
  +                                             service-id</code> 
attribute)</li>
  +                                     <li>As a public static method of a 
class (using the enclosed <code>&lt;
  +                                             invoke-static&gt;</code> 
element)</li>
  +                             </ul>
  +                             <p>The <code>Executable</code> interface is 
similar to the <code>
  +                                     java.lang.Runnable</code> interface:</p>
  +                             <source><![CDATA[
   package com.panorama.framework.startup.service;
   
   /**
  @@ -242,18 +242,18 @@
      */
     public void execute() throws Exception;
   }]]> </source>
  -        <p>Adding <code>throws Exception</code> to the method signature 
allows
  -          the caller to be responsible for exception reporting, which 
simplifies
  -          the task implementations. Shortly, we'll see how the application's
  -          master servlet invokes the Startup service.</p>
  -        <p>The Shutdown configuration point and service are effectively 
clones
  -          of the Startup configuration point and schema.</p>
  -      </section>
  -      <section>
  -        <title>Task class</title>
  -        <p>The Task class is used to hold the information collected by the
  -          Startup configuration point.</p>
  -        <source><![CDATA[
  +                             <p>Adding <code>throws Exception</code> to the 
method signature allows
  +                                     the caller to be responsible for 
exception reporting, which simplifies
  +                                     the task implementations. Shortly, 
we'll see how the application's
  +                                     master servlet invokes the Startup 
service.</p>
  +                             <p>The Shutdown configuration point and service 
are effectively clones
  +                                     of the Startup configuration point and 
schema.</p>
  +                     </section>
  +                     <section>
  +                             <title>Task class</title>
  +                             <p>The Task class is used to hold the 
information collected by the
  +                                     Startup configuration point.</p>
  +                             <source><![CDATA[
   package com.panorama.framework.startup.service;
   
   import org.apache.hivemind.Orderable;
  @@ -290,18 +290,17 @@
     
     public void setExecutable(Executable executable) { _executable = 
executable; }
   }]]></source>
  -        <p>Task implements <code>Executable</code>, simply delegating to its 
  -          <code>executable</code> property. In addition, it implements <link
  -          href="&apiroot;/Orderable.html">Orderable</link>, which simply 
defines
  -          the <code>order</code> property (but simplifies sorting of the
  -          elements).</p>
  -      </section>
  -      <section>
  -        <title>Startup service</title>
  -        <p>The Startup and Shutdown services are very similar: similar enough
  -          that a single class, properly configured, can be the service
  -          implementation for either service.</p>
  -        <source><![CDATA[
  +                             <p>Task implements <code>Executable</code>, 
simply delegating to its 
  +                                     <code>executable</code> property. In 
addition, it implements
  +                                     Orderable, which simply defines the 
<code>order</code> property (but
  +                                     simplifies sorting of the elements).</p>
  +                     </section>
  +                     <section>
  +                             <title>Startup service</title>
  +                             <p>The Startup and Shutdown services are very 
similar: similar enough
  +                                     that a single class, properly 
configured, can be the service
  +                                     implementation for either service.</p>
  +                             <source><![CDATA[
   package com.panorama.framework.startup.service;
   
   import java.util.List;
  @@ -413,23 +412,23 @@
     }
   
   }]]> </source>
  -        <p>HiveMind has a static convienience method, 
<code>sortOrderables()</code>
  -          , used to sort a list of Orderable objects into order, which is 
used
  -          here. Remember that the contributions to the Startup (and Shutdown)
  -          configuration points are made from multiple modules and there's no 
way
  -          to predict in what order those contributions will show up in the 
  -          <code>tasks</code> property, which is why explicit sorting is
  -          necessary.</p>
  -        <p>At one time, there was a discussion about using a thread pool to
  -          allow execution of some of the tasks in parallel. That's a 
premature
  -          optimization: even with over forty startup tasks, startup still 
only
  -          takes about forty seconds.</p>
  -      </section>
  -      <section>
  -        <title>StaticTask class</title>
  -        <p>The StaticTask class allows an arbitrary public static method of a
  -          class to be treated like an <code>Executable</code>.</p>
  -        <source><![CDATA[
  +                             <p>HiveMind has a static convienience method, 
<code>sortOrderables()</code>
  +                                     , used to sort a list of Orderable 
objects into order, which is used
  +                                     here. Remember that the contributions 
to the Startup (and Shutdown)
  +                                     configuration points are made from 
multiple modules and there's no way
  +                                     to predict in what order those 
contributions will show up in the 
  +                                     <code>tasks</code> property, which is 
why explicit sorting is
  +                                     necessary.</p>
  +                             <p>At one time, there was a discussion about 
using a thread pool to
  +                                     allow execution of some of the tasks in 
parallel. That's a premature
  +                                     optimization: even with over forty 
startup tasks, startup still only
  +                                     takes about forty seconds.</p>
  +                     </section>
  +                     <section>
  +                             <title>StaticTask class</title>
  +                             <p>The StaticTask class allows an arbitrary 
public static method of a
  +                                     class to be treated like an 
<code>Executable</code>.</p>
  +                             <source><![CDATA[
   package com.panorama.framework.startup.service;
   
   import java.lang.reflect.InvocationTargetException;
  @@ -509,18 +508,18 @@
     }
   
   }]]> </source>
  -        <p>The class implements <link 
href="&apiroot;/Locatable.html">Locatable</link>
  -          , which is used in method <code>isNull()</code> when reporting 
errors;
  -          the location will be the location of the &lt;invoke-static&gt; 
element
  -          the StaticTask instance was created from.</p>
  -      </section>
  -    </section>
  -    <section>
  -      <title>Other Modules</title>
  -      <p>Other modules, in their HiveMind module deployment descriptors, make
  -        contributions into the Startup and Shutdown configuration points of 
the 
  -        <code>panorama.framework.startup</code> module. For example:</p>
  -      <source><![CDATA[
  +                             <p>The class implements <link 
href="&apiroot;/Locatable.html">Locatable</link>
  +                                     , which is used in method 
<code>isNull()</code> when reporting errors;
  +                                     the location will be the location of 
the &lt;invoke-static&gt; element
  +                                     the StaticTask instance was created 
from.</p>
  +                     </section>
  +             </section>
  +             <section>
  +                     <title>Other Modules</title>
  +                     <p>Other modules, in their HiveMind module deployment 
descriptors, make
  +                             contributions into the Startup and Shutdown 
configuration points of the 
  +                             <code>panorama.framework.startup</code> module. 
For example:</p>
  +                     <source><![CDATA[
   module (id=panorama.coreservice.mail version="1.0.0")
   {
     contribution (configuration-id=panorama.framework.startup.Startup)
  @@ -528,10 +527,10 @@
       task (title=Mail order=2600 
class=com.panorama.coreservice.mail.startup.MailStartup)
     }
   }]]> </source>
  -      <p>Here, the Mail service contributes an instance of class <code>
  -        MailStartup</code>. Other modules take advantage of the &lt;
  -        invoke-static&gt; element:</p>
  -      <source><![CDATA[
  +                     <p>Here, the Mail service contributes an instance of 
class <code>
  +                             MailStartup</code>. Other modules take 
advantage of the &lt; 
  +                             invoke-static&gt; element:</p>
  +                     <source><![CDATA[
   module (id=panorama.coreservice.garbagecollection version="1.0.0")
   {
     contribution (configuration-id=panorama.framework.startup.Startup)
  @@ -542,13 +541,13 @@
       }
     }
   }]]> </source>
  -    </section>
  -    <section>
  -      <title>Application Startup</title>
  -      <p>The master servlet for the web application is responsible for
  -        constructing the registry and storing it so that other code may 
access
  -        it.</p>
  -      <source><![CDATA[
  +             </section>
  +             <section>
  +                     <title>Application Startup</title>
  +                     <p>The master servlet for the web application is 
responsible for
  +                             constructing the registry and storing it so 
that other code may access
  +                             it.</p>
  +                     <source><![CDATA[
   public void init() throws ServletException
   {
     LOG.info("*** Bootstrapping HiveMind Registry ***");
  @@ -586,14 +585,14 @@
     }
   }
   ]]></source>
  -      <p>After building the registry, the servlet uses the Startup service to
  -        indirectly execute all the startup tasks.</p>
  -    </section>
  -    <section>
  -      <title>Handling Shutdown</title>
  -      <p>We take advantage of a WebLogic extension to know when the 
application
  -        server is being shut down.</p>
  -      <source><![CDATA[
  +                     <p>After building the registry, the servlet uses the 
Startup service to
  +                             indirectly execute all the startup tasks.</p>
  +             </section>
  +             <section>
  +                     <title>Handling Shutdown</title>
  +                     <p>We take advantage of a WebLogic extension to know 
when the application
  +                             server is being shut down.</p>
  +                     <source><![CDATA[
   package com.panorama.framework.startup;
   
   import javax.naming.InitialContext;
  @@ -633,8 +632,8 @@
       }
   
   }]]> </source>
  -      <p>The implementation of the initshut EJB is similarily 
straight-forward:</p>
  -      <source><![CDATA[
  +                     <p>The implementation of the initshut EJB is similarily 
straight-forward:</p>
  +                     <source><![CDATA[
   package com.panorama.framework.startup.ejb;
   
   import java.rmi.RemoteException;
  @@ -688,24 +687,24 @@
       LOG.info("**** Panorama shutdown complete ****");
     }
   }]]> </source>
  -    </section>
  -    <section>
  -      <title>Summary</title>
  -      <p>This case study has shown how easy it is to leverage HiveMind for a
  -        complex task. A monolithic EJB was broken down into tiny, agile
  -        contributions to a configuration point. The startup and shutdown 
logic
  -        is kept close to the contributing modules, in those modules' HiveMind
  -        deployment descriptors. Contributions are in expressive, easily 
readable
  -        XML.</p>
  -      <p>A single class is used to implement multiple, similar services, 
just by
  -        configuring it as needed. Links between different aspects of the 
system
  -        (such as the servlet initialization code and the Startup service) are
  -        kept simple and agile.</p>
  -      <p>The small amount of code necessary to orchestrate all this is fully
  -        tested in a unit test suite.</p>
  -      <p>The end result: an agile, easily extended system. HiveMind has 
provided
  -        the tools and environment to support an elegant, data-driven solution
  -        ... replacing the old, code-heavy EJB implementation.</p>
  -    </section>
  -  </body>
  +             </section>
  +             <section>
  +                     <title>Summary</title>
  +                     <p>This case study has shown how easy it is to leverage 
HiveMind for a
  +                             complex task. A monolithic EJB was broken down 
into tiny, agile
  +                             contributions to a configuration point. The 
startup and shutdown logic
  +                             is kept close to the contributing modules, in 
those modules' HiveMind
  +                             deployment descriptors. Contributions are in 
expressive, easily readable
  +                             XML.</p>
  +                     <p>A single class is used to implement multiple, 
similar services, just by
  +                             configuring it as needed. Links between 
different aspects of the system
  +                             (such as the servlet initialization code and 
the Startup service) are
  +                             kept simple and agile.</p>
  +                     <p>The small amount of code necessary to orchestrate 
all this is fully
  +                             tested in a unit test suite.</p>
  +                     <p>The end result: an agile, easily extended system. 
HiveMind has provided
  +                             the tools and environment to support an 
elegant, data-driven solution
  +                             ... replacing the old, code-heavy EJB 
implementation.</p>
  +             </section>
  +     </body>
   </document>
  
  
  
  1.3       +8 -10     
jakarta-hivemind/src/documentation/content/xdocs/configurations.xml
  
  Index: configurations.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/src/documentation/content/xdocs/configurations.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- configurations.xml        26 May 2004 19:34:15 -0000      1.2
  +++ configurations.xml        26 May 2004 21:28:49 -0000      1.3
  @@ -117,11 +117,10 @@
                                <p>In addition, it is common for multiple 
configuration points to share
                                        the exact same schema. By assigning an 
id attribute to a &_schema; 
                                        element, you may reference the same 
schema for multiple configuration
  -                                     points. For example, the 
&hivemind.FactoryDefaults; and
  -                                     &hivemind.ApplicationDefaults; 
configuration points use the same schema.
  -                                     The hivemind module deployment 
descriptor accomplishes this by
  -                                     defining a schema for one configuration 
point, then referencing it
  -                                     from another:</p>
  +                                     points. For example, the 
&hivemind.FactoryDefaults; and &hivemind.ApplicationDefaults;
  +                                     configuration points use the same 
schema. The hivemind module
  +                                     deployment descriptor accomplishes this 
by defining a schema for one
  +                                     configuration point, then referencing 
it from another:</p>
                                <source><![CDATA[
                                        
   schema (id=Defaults)
  @@ -263,10 +262,9 @@
                                                inside HiveMind, which uses the 
schema and rules to validate and
                                                convert the XML contributions 
into Java objects.</p>
                                        <p>You can omit the schema, in which 
case the elements are left as XML
  -                                             (instances of <link 
href="&apiroot;/Element.html">Element</link>)
  -                                             and your code is responsible 
for walking the elements and attributes
  -                                             ... but why bother? Far easier 
to let HiveMind do the conversions
  -                                             and validations.</p>
  +                                             (instances of &api.Element; and 
your code is responsible for walking
  +                                             the elements and attributes ... 
but why bother? Far easier to let
  +                                             HiveMind do the conversions and 
validations.</p>
                                </li>
                                <li>
                                        <strong>How do I know if the element 
list is a proxy or not?</strong>
  
  
  
  1.3       +27 -5     
jakarta-hivemind/src/documentation/content/xdocs/links.ent
  
  Index: links.ent
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/src/documentation/content/xdocs/links.ent,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- links.ent 26 May 2004 16:58:44 -0000      1.2
  +++ links.ent 26 May 2004 21:28:49 -0000      1.3
  @@ -20,6 +20,23 @@
   <!ENTITY apiroot '&projectroot;hivemind/apidocs/org/apache/hivemind'>
   <!ENTITY hivedoc '&projectroot;hivedocs'>
   
  +<!ENTITY api.ClassResolver '<link 
href="&apiroot;/ClassResolver.html"><code>ClassResolver</code></link>'>
  +<!ENTITY api.Element '<link 
href="&apiroot;/Element.html"><code>Element</code></link>'>
  +<!ENTITY api.InterceptorStack '<link 
href="&apiroot;/InterceptorStack.html"><code>InterceptorStack</code></link>'>
  +<!ENTITY api.Messages '<link 
href="&apiroot;/Messages.html"><code>Messages</code></link>'>
  +<!ENTITY api.Module '<link 
href="&apiroot;/Module.html"><code>Module</code></link>'>
  +<!ENTITY api.Registry '<link 
href="&apiroot;/Registry.html"><code>Registry</code></link>'>
  +<!ENTITY api.RegistryBuilder '<link 
href="&apiroot;/impl/RegistryBuilder.html"><code>RegistryBuilder</code></link>'>
  +<!ENTITY api.RegistryShutdownListener '<link 
href="&apiroot;/event/RegistryShutdownListener.html"><code>RegistryShutdownListener</code></link>'>
  +<!ENTITY api.Resource '<link 
href="&apiroot;/Resource.html"><code>Resource</code></link>'>
  +<!ENTITY api.ServiceImplementationFactory '<link 
href="&apiroot;/ServiceImplementationFactory.html"><code>ServiceImplementationFactory</code></link>'>
  +<!ENTITY api.ServiceInterceptorFactory '<link 
href="&apiroot;/ServiceInterceptorFactory.html"><code>ServiceInterceptorFactory</code></link>'>
  +<!ENTITY api.Translator '<link 
href="&apiroot;/schema/Translator.html"><code>Translator</code></link>'>
  +
  +<!ENTITY api.NameLookup '<link 
href="&apiroot;/lib/NameLookup.html"><code>NameLookup</code></link>'>
  +<!ENTITY api.RemoteExceptionCoordinator '<link 
href="&apiroot;/lib/RemoteExceptionCoordinator.html"><code>RemoteExceptionCoordinator</code></link>'>
  +<!ENTITY api.RemoteExceptionListener '<link 
href="&apiroot;/lib/RemoteExceptionListener.html"><code>RemoteExceptionListener</code></link>'>
  +
   <!-- Note, these links CAN NOT currently be converted to site:descriptor#foo 
because Forrest 0.5.1 doesn't
        understand the use of the '#' as an anchor. -->
   
  @@ -107,11 +124,16 @@
   <!-- Entities for common services and configurations. -->
   
   <!ENTITY hivemind.ApplicationDefaults '<link 
href="site:hivemind.ApplicationDefaults"><code>hivemind.ApplicationDefaults</code></link>'>
  -<!ENTITY hivemind.BuilderFactory '<code>hivemind.BuilderFactory</code>'>
  +<!ENTITY hivemind.BuilderFactory '<link 
href="site:hivemind.BuilderFactory"><code>hivemind.BuilderFactory</code></link>'>
  +<!ENTITY hivemind.EagerLoad '<link 
href="site:hivemind.EagerLoad"><code>hivemind.EagerLoad</code></link>'>
   <!ENTITY hivemind.FactoryDefaults '<link 
href="site:hivemind.FactoryDefaults"><code>hivemind.FactoryDefaults</code></link>'>
   <!ENTITY hivemind.LoggingInterceptor '<link 
href="site:hivemind.LoggingInterceptor"><code>hivemind.LoggingInterceptor</code></link>'>
   <!ENTITY hivemind.ServiceModels '<code>hivemind.ServiceModels</code>'>
  -<!ENTITY hivemind.SymbolSources '<code>hivemind.SymbolSources</code>'>
  +<!ENTITY hivemind.SymbolSources '<link 
href="site:hivemind.SymbolSources"><code>hivemind.SymbolSources</code></link>'>
   <!ENTITY hivemind.ThreadEventNotifier 
'<code>hivemind.ThreadEventNotifier</code>'>
  -<!ENTITY hivemind.ThreadLocalStorage 
'<code>hivemind.ThreadLocalStorage</code>'>
  -<!ENTITY hivemind.Translators '<code>hivemind.Translators</code>'>
  \ No newline at end of file
  +<!ENTITY hivemind.ThreadLocalStorage '<link 
href="site:hivemind.ThreadLocalStorage"><code>hivemind.ThreadLocalStorage</code></link>'>
  +<!ENTITY hivemind.Translators '<link 
href="site:hivemind.Translators"><code>hivemind.Translators</code></link>'>
  +
  +<!ENTITY hivemind.lib.EJBProxyFactory '<link 
href="site:hivemind.lib.EJBProxyFactory"><code>hivemind.lib.EJBProxyFactory</code></link>'>
  +<!ENTITY hivemind.lib.NameLookup '<link 
href="site:hivemind.lib.NameLookup"><code>hivemind.lib.NameLookup</code></link>'>
  +<!ENTITY hivemind.lib.RemoteExceptionCoordinator '<link 
href="site:hivemind.lib.RemoteExceptionCoordinator">hivemind.lib.RemoteExceptionCoordinator</code></link>'>
  \ No newline at end of file
  
  
  
  1.4       +8 -11     
jakarta-hivemind/src/documentation/content/xdocs/bootstrap.xml
  
  Index: bootstrap.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/src/documentation/content/xdocs/bootstrap.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- bootstrap.xml     26 May 2004 19:34:15 -0000      1.3
  +++ bootstrap.xml     26 May 2004 21:28:49 -0000      1.4
  @@ -28,10 +28,9 @@
                <p>Before you can access the configuration points and services 
defined in
                        your many module deployment descriptors, you need a 
registry; here we'll
                        describe how to construct the registry.</p>
  -             <p>The key class here is <link 
href="&apiroot;/impl/RegistryBuilder.html">
  -                     RegistryBuilder</link>, which contains code for 
locating and parsing the
  -                     module deployment descriptors and constructing a 
registry from the
  -                     combined data.</p>
  +             <p>The key class here is &api.RegistryBuilder;, which contains 
code for
  +                     locating and parsing the module deployment descriptors 
and constructing a
  +                     registry from the combined data.</p>
                <p>Let's examine how all this comes together. The layout of the 
project is
                        shown below.</p>
                <figure src="images/AdderExample-ProjectLayout.png" 
alt="[Project Layout]"/>
  @@ -111,10 +110,9 @@
   }]]> </source>
                        <p>Building the registry requires four steps:</p>
                        <ul>
  -                             <li>Create a <link 
href="&apiroot;/ClassResolver.html">ClassResolver</link>
  -                                     instance. DefaultClassResolver uses the 
thread's context class loader.</li>
  -                             <li>Create a <link 
href="&apiroot;/impl/RegistryBuilder.html">
  -                                     RegistryBuilder</link> instance.</li>
  +                             <li>Create a &api.ClassResolver; instance. 
DefaultClassResolver uses the
  +                                     thread's context class loader.</li>
  +                             <li>Create a &api.RegistryBuilder; 
instance.</li>
                                <li>Invoke <code>processModules()</code> to 
find and parse all HiveMind
                                        module deployment descriptors visible 
on the classpath (as <code>
                                        META-INF/hivemodule.sdl</code> or 
<code>META-INF/hivemodule.xml</code>
  @@ -124,8 +122,7 @@
                                        additional deployment descriptors 
stored in unusual locations.</li>
                                <li>Invoke <code>constructRegistry()</code> to 
integrate and validate
                                        all the information in all of the 
HiveMind module deployment
  -                                     descriptors and produce a <link 
href="&apiroot;/Registry.html">
  -                                     Registry</link> from it.</li>
  +                                     descriptors and produce a 
&api.Registry; from it.</li>
                        </ul>
                        <p>Alternately, the static method <link
                                
href="&apiroot;/impl/RegistryBuilder.html#constructDefaultRegistry()">
  
  
  
  1.1                  
jakarta-hivemind/library/src/documentation/content/xdocs/hivemind.lib/EJBProxyFactory.xml
  
  Index: EJBProxyFactory.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: EJBProxyFactory.xml,v 1.1 2004/05/26 21:28:49 hlship Exp $ -->
  <!-- 
     Copyright 2004 The Apache Software Foundation
  
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
        "./dtd/document-v12.dtd" [
        <!ENTITY projectroot '../'>
        <!ENTITY % common-links SYSTEM "../links.ent">
        %common-links;
        ]>
  <document>
        <header>
                <title>hivemind.lib.EJBProxyFactory Service</title>
        </header>
        <body>
                <p>The <link 
href="&hivedoc;/service/hivemind.lib.EJBProxyFactory.html">
                        EJBProxyFactory</link> service is used to construct a 
HiveMind service
                        that delegates to an EJB stateless session bean. The 
EJB's remote
                        interface is the service interface. When the first 
service method is
                        invoked, the fabricated proxy will perform a JNDI 
lookup (using the <link
                        href="site:hivemind.lib.NameLookup">NameLookup</link> 
service), and
                        invokes <code>create()</code> on the returned home 
interface.</p>
                <p>The single service instance will be shared by all 
threads.</p>
                <p>The general usage is as follows:</p>
                <source><![CDATA[
    invoke-factory (service-id=hivemind.lib.EJBProxy)
    {
      parameters (home-interface=... jndi-name=... name-lookup-service=...)
    }]]> </source>
                <p>The <code>home-interface</code> attribute is the complete 
class name for
                        the home interface, and is required.</p>
                <p>The <code>jndi-name</code> attribute is the name of the 
EJB's home
                        interface, also required.</p>
                <p>The <code>name-lookup-service-id</code> attribute is 
optional and rarely
                        used; it is an alternate service implementing the 
&api.NameLookup; 
                        interface to be used for JNDI lookups.</p>
        </body>
  </document>
  
  
  
  1.1                  
jakarta-hivemind/library/src/documentation/content/xdocs/hivemind.lib/NameLookup.xml
  
  Index: NameLookup.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: NameLookup.xml,v 1.1 2004/05/26 21:28:49 hlship Exp $ -->
  <!-- 
     Copyright 2004 The Apache Software Foundation
  
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
        "./dtd/document-v12.dtd" [
        <!ENTITY projectroot '../'>
        <!ENTITY % common-links SYSTEM "../links.ent">
        %common-links;
        ]>
  <document>
        <header>
      <title>hivemind.lib.NameLookup Service</title>
      </header>
  
    <body>
        
    
  <p>
  The <link 
href="&hivedoc;/service/hivemind.lib.NameLookup.html">NameLookup</link>
  service is a thin wrapper around JNDI lookup.  It is used by
  the <link href="site:hivemind.lib.EJBProxyFactory">EJBProxyFactory</link> 
service to locate
  EJBs.
  </p>
  
  <p>
  The implementation makes use of three symbols (all of whose values default to 
null):</p>
  <ul>
  <li>java.naming.factory.initial</li>  
  <li>java.naming.factory.url</li>
  <li>java.naming.provider.url</li>
  </ul>
  
  
  <p>
  By supplying overrides of these values, it is possible to configure how the 
NameLookup service
  generates the InitialContext used for performing the JNDI lookup.
  </p>
  
        
    </body>
  </document>
  
  
  
  1.1                  
jakarta-hivemind/library/src/documentation/content/xdocs/hivemind.lib/RemoteExceptionCoordinator.xml
  
  Index: RemoteExceptionCoordinator.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- $Id: RemoteExceptionCoordinator.xml,v 1.1 2004/05/26 21:28:49 hlship Exp 
$ -->
  <!-- 
     Copyright 2004 The Apache Software Foundation
  
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
        "./dtd/document-v12.dtd" [
        <!ENTITY projectroot '../'>
        <!ENTITY % common-links SYSTEM "../links.ent">
        %common-links;
        ]>
  <document>
        <header>
                <title>hivemind.lib.RemoteExceptionCoordinator Service</title>
        </header>
        <body>
                <p>The <link
                        
href="&hivedoc;/service/hivemind.lib.RemoteExceptionCoordinator.html">
                        RemoteExceptionCoordinator</link> is used to propogate 
notifications of
                        remote exceptions throughout the HiveMind repository. 
When any individual
                        service encounters a remote exception, it notifies all 
listeners, who
                        release all remote object proxies.</p>
                <p>The service interface, &api.RemoteExceptionCoordinator;, 
allows objects
                        that implement the &api.RemoteExceptionListener; 
interface to be
                        registered for notification, and includes a method for 
firing
                        notifications.</p>
        </body>
  </document>
  
  
  

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

Reply via email to