hlship 2003/08/23 20:28:30
Modified: hivemind/src/java/org/apache/commons/hivemind/parse
ServiceDescriptor.java DescriptorParser.java
hivemind/src/java/org/apache/commons/hivemind
HiveMindMessages.properties
hivemind/xdocs descriptor.xml extension-points.xml
services.xml
hivemind/src/test/hivemind/test/parse
TestDescriptorParser.java
hivemind/src/java/org/apache/commons/hivemind/impl
ServiceExtensionPointImpl.java RegistryBuilder.java
hivemind/src/xsl hivemind.xsl
Log:
Remove the required attribute from the <service> element; all services are now
required.
Revision Changes Path
1.10 +1 -13
jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/parse/ServiceDescriptor.java
Index: ServiceDescriptor.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/parse/ServiceDescriptor.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ServiceDescriptor.java 23 Aug 2003 22:46:03 -0000 1.9
+++ ServiceDescriptor.java 24 Aug 2003 03:28:29 -0000 1.10
@@ -72,7 +72,6 @@
{
private String _id;
private String _interfaceClassName;
- private boolean _required = true;
private Schema _parametersSchema;
private ServiceModel _model = ServiceModel.DEFERRED;
@@ -86,11 +85,6 @@
return _interfaceClassName;
}
- public boolean isRequired()
- {
- return _required;
- }
-
public void setId(String string)
{
_id = string;
@@ -101,16 +95,10 @@
_interfaceClassName = string;
}
- public void setRequired(boolean b)
- {
- _required = b;
- }
-
protected void extendDescription(ToStringBuilder builder)
{
builder.append("id", _id);
builder.append("interfaceClassName", _interfaceClassName);
- builder.append("required", _required);
builder.append("model", _model);
builder.append("parametersSchema", _parametersSchema);
}
1.28 +1 -3
jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/parse/DescriptorParser.java
Index: DescriptorParser.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/parse/DescriptorParser.java,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- DescriptorParser.java 23 Aug 2003 22:46:03 -0000 1.27
+++ DescriptorParser.java 24 Aug 2003 03:28:29 -0000 1.28
@@ -211,7 +211,6 @@
static {
SERVICE_ATTRIBUTES.put("id", Boolean.TRUE);
SERVICE_ATTRIBUTES.put("interface", Boolean.TRUE);
- SERVICE_ATTRIBUTES.put("required", Boolean.FALSE);
SERVICE_ATTRIBUTES.put("model", Boolean.FALSE);
}
@@ -895,7 +894,6 @@
sd.setId(getAttribute("id"));
sd.setInterfaceClassName(getAttribute("interface"));
- sd.setRequired(getBooleanAttribute("required", true));
ServiceModel model = (ServiceModel) getEnumAttribute("model",
MODEL_MAP);
1.25 +2 -3
jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/HiveMindMessages.properties
Index: HiveMindMessages.properties
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/HiveMindMessages.properties,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- HiveMindMessages.properties 21 Aug 2003 20:07:47 -0000 1.24
+++ HiveMindMessages.properties 24 Aug 2003 03:28:29 -0000 1.25
@@ -28,7 +28,6 @@
ExtensionPointImpl.element-is-null=Module {0} has contributed a null element to
configuration extension point {1} (at {2}). The contribution has been ignored.
ExtensionPointImpl.recursive-configuration=A recursive call to construct
configuration {0} has occured. This indicates a cycle between one or more
configurations or services.
-ServiceExtensionPoint.request-for-missing-service=Unable to provide required
service {0} because no module contributed a factory.
ServiceExtensionPoint.unable-to-construct-service=Unable to construct service {0}:
{1}
ServiceExtensionPoint.factory-returned-null=Instance factory for service {0}
returned null.
ServiceExtensionPoint.factory-wrong-interface=Instance factory for service {0}
returned {1} which does not implement the {2} interface declared by the extension
point.
@@ -57,7 +56,7 @@
RegistryBuilder.duplicate-module-id=Module {0} is duplicated! Definition in {2}
has been ignored in favor of existing definition from {1}.
RegistryBuilder.unknown-service-extension-point=Module {0} contributes to unknown
service extension point {1} (at {2}). The contribution has been ignored.
RegistryBuilder.duplicate-factory=Module {0} has contributed a instance builder to
service extension point {1}, which conflicts with an existing contribution by module
{2}. The duplicate contribution has been ignored.
-RegistryBuilder.missing-service=No module has contributed a factory for service
extension point {0}.
+RegistryBuilder.missing-service=No module has contributed a service constructor for
service extension point {0}.
RegistryBuilder.unknown-configuration-extension-point=Module {0} has contributed to
unknown configuration extension point {1} (at {2}). The contribution has been ignored.
RegistryBuilder.wrong-number-of-contributions=Configuration extension point {0}
contains {1,choice,0#no contributions|1#one contribution|1<{1,number,integer}
contributions} but expects {2} contribution.
RegistryBuilder.one-or-more=at least one
1.22 +2 -9 jakarta-commons-sandbox/hivemind/xdocs/descriptor.xml
Index: descriptor.xml
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/xdocs/descriptor.xml,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- descriptor.xml 23 Aug 2003 22:46:03 -0000 1.21
+++ descriptor.xml 24 Aug 2003 03:28:29 -0000 1.22
@@ -402,14 +402,7 @@
<td>The fully qualified name of the Java
interface supplied by this
service extension point.</td>
</tr>
- <tr>
- <td>required</td>
- <td>boolean</td>
- <td>no</td>
- <td>If true (the default), then a factory
contribution must be made to
- the extension point. If false, then
the service provided by the
- extension point is optional.</td>
- </tr>
+
<tr>
<td>model</td>
<td><code>deferred | singleton |
threaded</code></td>
1.6 +4 -2 jakarta-commons-sandbox/hivemind/xdocs/extension-points.xml
Index: extension-points.xml
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/xdocs/extension-points.xml,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- extension-points.xml 20 Aug 2003 20:40:45 -0000 1.5
+++ extension-points.xml 24 Aug 2003 03:28:30 -0000 1.6
@@ -249,8 +249,10 @@
<li><strong>Are the any default implementations of SymbolSource?</strong>
<p>
- There is now an extension point for setting "factory defaults":
+ There is now an extension point for setting factory defaults:
<a
href="base-registry/hivemind.html#extension-point:hivemind.FactoryDefaults">hivemind.FactoryDefaults</a>.
+ A second extension point, for application defaults, overrides the factory
defaults:
+ <a
href="base-registry/hivemind.html#extension-point:hivemind.ApplicationDefaults">hivemind.ApplicationDefaults</a>.
</p>
<p>
1.19 +41 -24 jakarta-commons-sandbox/hivemind/xdocs/services.xml
Index: services.xml
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/xdocs/services.xml,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- services.xml 23 Aug 2003 22:46:03 -0000 1.18
+++ services.xml 24 Aug 2003 03:28:30 -0000 1.19
@@ -15,9 +15,10 @@
interface. You supply the interface (in a module). You
supply the core
implementation of the interface (in the same module,
or in a different
module). At runtime, HiveMind puts it all together.</p>
- <p>HiveMind uses two service models: singleton and pooled. In
the singleton model,
- each service will ultimately be just a single object
instance. In the pooled model,
- there may be many instances simulataneously.</p>
+ <p>HiveMind uses three service models: singleton, deferred and
threaded. In the singleton and
+ deferred models,
+ each service will ultimately be just a single object
instance. In the threaded model,
+ there may be many instances simultaneously, one for
each thread.</p>
</section>
<section name="Defining Services">
<p>A service definition begins with a Java interface. Any
interface will
@@ -28,8 +29,7 @@
<p>Each &_service;
establishes an
- id for the service, defines the interface for the
service, and indicates
- whether the service is optional or required (required
is the default).
+ id for the service and defines the interface for the
service.
An example is provided later in this document.</p>
<p>
@@ -57,7 +57,7 @@
Contributions take three forms:
<ul>
- <li>Implementation
constructors:
+ <li>Service constructors:
<ul>
<li>&create-instance; to instantiate an instance of a Java class</li>
<li>&invoke-factory; to have another service create the implementation</li>
@@ -68,10 +68,10 @@
</p>
- <subsection name="Implementation Constructors">
- <p>An implementation constructor is used to
instantiate a Java class as the
+ <subsection name="Service Constructors">
+ <p>An service constructor is used to instantiate a
Java class as the
core implementation instance for the service.
</p>
- <p>There are two forms of implementation constructors:
+ <p>There are two forms of service constructors:
instance creators and
implementation factories.</p>
<p>An instance creator is represented by a
&create-instance; element. It
@@ -141,8 +141,6 @@
whatever interface is defined by the service
extension point it will
create an instance for.</p>
- <p>Interceptor factories can be implemented using
dynamic proxies (a
- feature introduced in JDK 1.3), or by dynamic
bytecode enhancement.</p>
<p>A service extension point may have any number of
interceptor
contributions. If the order in which
interceptors are applied is
@@ -265,6 +263,21 @@
knows nor cares about this.</p>
</section>
+ <section name="Singleton Service Model">
+
+ <p>
+ The simplest service model is the singleton service model; in this
model
+ the service is constructed on first reference. This is appropriate for
+ services such as service factories and interceptor factories, and for
+ several of the basic services provided in the
+ <a href="base-registry/hivemind.html">hivemind module</a>.
+ </p>
+
+
+
+ </section>
+
+
<section name="Deferred Service Model">
<p>
@@ -277,7 +290,7 @@
</p>
<p>
- To resolve this, HiveMind defers the actual creation of services by
default This
+ To resolve this, HiveMind defers the actual creation of services by
default. This
is controled by the <code>model</code> attribute of the &service;
element; the default model
is <b>deferred</b>.
</p>
@@ -321,7 +334,7 @@
<p>
The service implementation is discarded when notified to cleanup; this is
controlled by the
<a
href="base-registry/hivemind.html#service:hivemind.ThreadEventNotifier">hivemind.ThreadEventNotifier</a>
service.
-If your application has any threaded service, you are responsible for invoking the
<code>fireThreadCleanup()</code>
+If your application has any threaded services, you are responsible for invoking the
<code>fireThreadCleanup()</code>
method of the service.
</p>
@@ -329,7 +342,7 @@
For example, a servlet application may want to add the following:
</p>
-<code>
+<source>
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException
{
@@ -343,7 +356,13 @@
}
}
-</code>
+</source>
+
+<p>
+You'll, of course, have to fill in the details, such as the implementation of
+<code>getThreadEventNotifier()</code>. Presumably, your servlet constructs
+a HiveMind registry from its <code>init()</code> method.
+</p>
</section>
@@ -361,14 +380,12 @@
<li>
<strong>What if no module provides a core
implementation of the
service?</strong>
- <p>If the service is optional, then
getService() will return null. For
- optional services, you are required to
check for null.</p>
- <p>For required services, HiveMind checks for
an implementation constructor
- when the registry itself is assembled.
If a required service extension
- point has no implementation
constructor, an error is logged (identifying the
- extension point id). In addition,
getService() will throw an
- ApplicationRuntimeException. So, if a
service is required, you don't
- have to check for null.</p>
+
+ <p>HiveMind checks for a service constructor
+ when the registry itself is assembled.
If a service extension
+ point has no service constructor, an
error is logged (identifying the
+ extension point id). In addition,
<code>getService()</code> will throw an
+ ApplicationRuntimeException.</p>
</li>
<li>
1.22 +1 -2
jakarta-commons-sandbox/hivemind/src/test/hivemind/test/parse/TestDescriptorParser.java
Index: TestDescriptorParser.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/hivemind/src/test/hivemind/test/parse/TestDescriptorParser.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- TestDescriptorParser.java 21 Aug 2003 20:07:47 -0000 1.21
+++ TestDescriptorParser.java 24 Aug 2003 03:28:30 -0000 1.22
@@ -205,7 +205,6 @@
assertEquals("MyService1", sd.getId());
assertEquals("package.MyService", sd.getInterfaceClassName());
- assertEquals(true, sd.isRequired());
CreateInstanceDescriptor cid = (CreateInstanceDescriptor)
sd.getInstanceBuilder();
assertEquals("package.impl.MyServiceImpl", cid.getInstanceClassName());
1.12 +1 -28
jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/impl/ServiceExtensionPointImpl.java
Index: ServiceExtensionPointImpl.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/impl/ServiceExtensionPointImpl.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- ServiceExtensionPointImpl.java 23 Aug 2003 22:46:03 -0000 1.11
+++ ServiceExtensionPointImpl.java 24 Aug 2003 03:28:30 -0000 1.12
@@ -88,7 +88,6 @@
private Class _serviceInterface;
private ServiceImplementationConstructor _serviceConstructor;
private List _interceptorContributions;
- private boolean _required;
private boolean _building;
private Schema _parametersSchema;
private Object _constructedService;
@@ -97,7 +96,6 @@
protected void extendDescription(ToStringBuilder builder)
{
builder.append("serviceInterfaceName", _serviceInterfaceName);
- builder.append("required", _required);
builder.append("factoryContribution", _serviceConstructor);
builder.append("interceptorContributions", _interceptorContributions);
builder.append("parametersSchema", _parametersSchema);
@@ -163,16 +161,6 @@
_serviceInterfaceName = string;
}
- public boolean isRequired()
- {
- return _required;
- }
-
- public void setRequired(boolean b)
- {
- _required = b;
- }
-
public synchronized void
addInterceptorContribution(ServiceInterceptorContribution contribution)
{
if (_interceptorContributions == null)
@@ -236,21 +224,6 @@
*/
protected Object constructNewServiceImplementation()
{
- if (_serviceConstructor == null)
- {
- // If the service is required but there's no factory, then throw
- // an exception. The calling code probably doesn't check for null
(since
- // the service is required), so better an ARE here than an NPE there.
-
- if (_required)
- throw new ApplicationRuntimeException(
- HiveMind.format(
- "ServiceExtensionPoint.request-for-missing-service",
- getExtensionPointId()));
-
- return null;
- }
-
try
{
Class serviceType = getServiceInterface();
1.25 +5 -15
jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/impl/RegistryBuilder.java
Index: RegistryBuilder.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/impl/RegistryBuilder.java,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- RegistryBuilder.java 23 Aug 2003 22:46:03 -0000 1.24
+++ RegistryBuilder.java 24 Aug 2003 03:28:30 -0000 1.25
@@ -138,12 +138,6 @@
private Map _servicePoints = new HashMap();
/**
- * List of [EMAIL PROTECTED] ServiceExtensionPointImpl} of just the required
points.
- */
-
- private List _requiredServices = new ArrayList();
-
- /**
* Map of [EMAIL PROTECTED] ExtensionPointImpl} keyed on fully qualified id.
*/
@@ -347,7 +341,6 @@
point.setExtensionPointId(pointId);
point.setLocation(sd.getLocation());
point.setModule(module);
- point.setRequired(sd.isRequired());
point.setServiceInterfaceName(sd.getInterfaceClassName());
point.setParametersSchema(sd.getParametersSchema());
@@ -359,9 +352,6 @@
_servicePoints.put(pointId, point);
- if (point.isRequired())
- _requiredServices.add(point);
-
addInternalServiceContributions(module, pointId, sd);
}
}
@@ -655,14 +645,14 @@
}
/**
- * Checks that each required service has at factory contribution.
+ * Checks that each service has at service constructor.
*/
private void checkForMissingServices()
{
- int count = _requiredServices.size();
- for (int i = 0; i < count; i++)
+ Iterator i = _servicePoints.values().iterator();
+ while (i.hasNext())
{
- ServiceExtensionPointImpl point = (ServiceExtensionPointImpl)
_requiredServices.get(i);
+ ServiceExtensionPointImpl point = (ServiceExtensionPointImpl) i.next();
if (point.getServiceConstructor() != null)
continue;
1.17 +1 -8 jakarta-commons-sandbox/hivemind/src/xsl/hivemind.xsl
Index: hivemind.xsl
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/xsl/hivemind.xsl,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- hivemind.xsl 23 Aug 2003 22:46:04 -0000 1.16
+++ hivemind.xsl 24 Aug 2003 03:28:30 -0000 1.17
@@ -377,13 +377,6 @@
</td>
</tr>
<tr>
- <th>Required</th>
- <td>
- <xsl:if
test="not(@required)">true</xsl:if>
- <xsl:value-of select="@required"/>
- </td>
- </tr>
- <tr>
<th>Service Model</th>
<td>
<xsl:if
test="not(@model)">singleton</xsl:if>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]