hivemind-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hls...@apache.org
Subject cvs commit: jakarta-hivemind/library/xdocs/images HiveMind-Library-Logo.png
Date Wed, 26 May 2004 21:28:49 GMT
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: hivemind-cvs-unsubscribe@jakarta.apache.org
For additional commands, e-mail: hivemind-cvs-help@jakarta.apache.org


Mime
View raw message