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
<construct> 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 <event-listener>
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 <registry>
element which contains one <module> 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><
- task></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><
- invoke-static></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><
+ task></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><
+ invoke-static></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 <invoke-static>
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 <invoke-static> 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 <
- invoke-static> element:</p>
- <source><![CDATA[
+ <p>Here, the Mail service contributes an instance of
class <code>
+ MailStartup</code>. Other modules take
advantage of the <
+ invoke-static> 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]