hlship 2004/05/17 14:14:23
Modified: framework/src/java/org/apache/hivemind
HiveMindMessages.properties PoolManageable.java
framework/src/java/org/apache/hivemind/methodmatch
MethodMatcher.java
framework/src/java/org/apache/hivemind/impl
RegistryBuilder.java ProxyUtils.java
ConfigurationPointImpl.java
ConstructableServiceExtensionPoint.java
ElementsProxyList.java
ServiceExtensionPointImpl.java RegistryImpl.java
framework/xdocs navigation.xml BuilderFactory.xml
framework/src/test/hivemind/test/services TestShutdown.java
TestServices.java TestBuilderFactory.java
Shutdown.xml
framework/src/test/hivemind/test/services/impl
RegistryShutdownStringHolderImpl.java
RunnableImpl.java
framework/src/java/org/apache/hivemind/impl/servicemodel
PrimitiveServiceModel.java
SingletonServiceModel.java
AbstractServiceModelImpl.java
PooledServiceModel.java ThreadedServiceModel.java
framework/src/test/hivemind/test/util
TestShutdownCoordinator.java
framework/src/java/org/apache/hivemind/service/impl
DefaultsSymbolSource.java BuilderFactory.java
BuilderParameter.java
framework/src/descriptor/META-INF hivemodule.sdl
xdocs services.xml
Added: framework/src/java/org/apache/hivemind
ShutdownCoordinator.java
framework/src/java/org/apache/hivemind/impl
ShutdownCoordinatorImpl.java
framework/xdocs ShutdownCoordinator.xml
framework/src/test/hivemind/test/services
InitializeMethodFailure.sdl
framework/src/test/hivemind/test/services/impl
MockRunnable.java
framework/src/java/org/apache/hivemind/service
ServiceMessages.java
framework/src/java/org/apache/hivemind/events
RegistryShutdownListener.java
Removed: framework/src/java/org/apache/hivemind Initializable.java
RegistryShutdownListener.java
framework/src/java/org/apache/hivemind/impl
ShutdownCoordinator.java
framework/src/test/hivemind/test/services
CheckInitializeService.java Initialize.xml
framework/src/test/hivemind/test/services/impl
CheckInitializeServiceImpl.java
Log:
Split ShutdownCoordinator into an interface and an implementation.
Remove Initializable interface.
Extend BuilderFactory to support an initialize-method attribute.
Move RegistryShutdownListener interface into the org.apache.hivemind.events
package.
Revision Changes Path
1.12 +3 -1
jakarta-hivemind/framework/src/java/org/apache/hivemind/HiveMindMessages.properties
Index: HiveMindMessages.properties
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/HiveMindMessages.properties,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- HiveMindMessages.properties 17 May 2004 19:44:09 -0000 1.11
+++ HiveMindMessages.properties 17 May 2004 21:14:21 -0000 1.12
@@ -178,6 +178,8 @@
# service.impl package
+service.unable-to-initialize-service=Unable to initialize service {0} (by
invoking method {1} on {2}, at {3}): {4}
+
RemoteExceptionCoordinator.method-while-locked=RemoteExceptionCoordinator
method {0} was invoked during a notification.
NameLookup.unable-to-lookup=Unable to lookup ''{0}'' in JNDI context {1}.
1.2 +14 -15
jakarta-hivemind/framework/src/java/org/apache/hivemind/PoolManageable.java
Index: PoolManageable.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/PoolManageable.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- PoolManageable.java 26 Feb 2004 23:07:56 -0000 1.1
+++ PoolManageable.java 17 May 2004 21:14:22 -0000 1.2
@@ -24,18 +24,17 @@
public interface PoolManageable
{
- /**
- * Invoked just after a service is either created, or just after it is
removed
- * from the service pool and bound to a new thread. This will also be
invoked
- * after [EMAIL PROTECTED] Initializable#initializeService()}.
- */
- public void activateService();
-
- /**
- * Invoked when a service is unbound from a thread, just before being
returned to
- * the service pool. It is <em>not</em> guaranteed that this will be
invoked
- * when the Registry is shutdown.
- */
-
- public void passivateService();
+ /**
+ * Invoked just after a service is either created, or just after it is
removed
+ * from the service pool and bound to a new thread.
+ */
+ public void activateService();
+
+ /**
+ * Invoked when a service is unbound from a thread, just before being
returned to
+ * the service pool. It is <em>not</em> guaranteed that this will be
invoked
+ * when the Registry is shutdown.
+ */
+
+ public void passivateService();
}
1.1
jakarta-hivemind/framework/src/java/org/apache/hivemind/ShutdownCoordinator.java
Index: ShutdownCoordinator.java
===================================================================
// 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.
package org.apache.hivemind;
import org.apache.hivemind.events.RegistryShutdownListener;
/**
* The coordinator is used by other services to determine when the registry
was shutdown.
*
* @author Howard Lewis Ship
* @version $Id: ShutdownCoordinator.java,v 1.1 2004/05/17 21:14:22 hlship
Exp $
*/
public interface ShutdownCoordinator
{
public abstract void addRegistryShutdownListener(RegistryShutdownListener
s);
public abstract void
removeRegistryShutdownListener(RegistryShutdownListener s);
public abstract void shutdown();
}
1.2 +2 -2
jakarta-hivemind/framework/src/java/org/apache/hivemind/methodmatch/MethodMatcher.java
Index: MethodMatcher.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/methodmatch/MethodMatcher.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MethodMatcher.java 17 May 2004 16:57:46 -0000 1.1
+++ MethodMatcher.java 17 May 2004 21:14:22 -0000 1.2
@@ -53,7 +53,7 @@
* <ul>
* <li><code>perform()</code> -- method with no parameters
* <li><code>perform(2)</code> -- method with two parameters
- * <li><code>perform(java.util.List, int) - method taking a List and an int
parameter
+ * <li><code>perform(java.util.List, int)</code> - method taking a List and
an int parameter
* </ul>
*
* @author Howard Lewis Ship
1.7 +3 -2
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/RegistryBuilder.java
Index: RegistryBuilder.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/RegistryBuilder.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- RegistryBuilder.java 13 May 2004 11:04:42 -0000 1.6
+++ RegistryBuilder.java 17 May 2004 21:14:22 -0000 1.7
@@ -27,6 +27,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hivemind.*;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.ClassResolver;
import org.apache.hivemind.HiveMind;
@@ -147,7 +148,7 @@
* Shutdown coordinator shared by all objects.
*/
- private ShutdownCoordinator _shutdownCoordinator = new
ShutdownCoordinator();
+ private ShutdownCoordinator _shutdownCoordinator = new
ShutdownCoordinatorImpl();
/**
* RegistryAssembly used by the module descriptor parser(s).
1.4 +3 -2
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/ProxyUtils.java
Index: ProxyUtils.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/ProxyUtils.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ProxyUtils.java 13 May 2004 11:04:42 -0000 1.3
+++ ProxyUtils.java 17 May 2004 21:14:22 -0000 1.4
@@ -17,8 +17,9 @@
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
+import org.apache.hivemind.*;
import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.RegistryShutdownListener;
+import org.apache.hivemind.events.RegistryShutdownListener;
import org.apache.hivemind.internal.ServiceExtensionPoint;
import org.apache.hivemind.internal.ServiceModel;
import org.apache.hivemind.service.BodyBuilder;
1.3 +2 -1
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/ConfigurationPointImpl.java
Index: ConfigurationPointImpl.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/ConfigurationPointImpl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ConfigurationPointImpl.java 13 May 2004 11:04:42 -0000 1.2
+++ ConfigurationPointImpl.java 17 May 2004 21:14:22 -0000 1.3
@@ -20,6 +20,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hivemind.*;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.Occurances;
import org.apache.hivemind.internal.ConfigurationPoint;
1.4 +2 -1
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/ConstructableServiceExtensionPoint.java
Index: ConstructableServiceExtensionPoint.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/ConstructableServiceExtensionPoint.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ConstructableServiceExtensionPoint.java 13 May 2004 11:04:42 -0000
1.3
+++ ConstructableServiceExtensionPoint.java 17 May 2004 21:14:22 -0000
1.4
@@ -16,6 +16,7 @@
import java.util.List;
+import org.apache.hivemind.*;
import org.apache.hivemind.internal.ServiceExtensionPoint;
import org.apache.hivemind.internal.ServiceImplementationConstructor;
1.2 +2 -2
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/ElementsProxyList.java
Index: ElementsProxyList.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/ElementsProxyList.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ElementsProxyList.java 26 Feb 2004 23:07:40 -0000 1.1
+++ ElementsProxyList.java 17 May 2004 21:14:22 -0000 1.2
@@ -18,7 +18,7 @@
import java.util.List;
import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.RegistryShutdownListener;
+import org.apache.hivemind.events.RegistryShutdownListener;
/**
* The List implementation visible to the client code. It defers
1.4 +2 -1
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/ServiceExtensionPointImpl.java
Index: ServiceExtensionPointImpl.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/ServiceExtensionPointImpl.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ServiceExtensionPointImpl.java 13 May 2004 11:04:42 -0000 1.3
+++ ServiceExtensionPointImpl.java 17 May 2004 21:14:22 -0000 1.4
@@ -20,6 +20,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hivemind.*;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.ClassResolver;
import org.apache.hivemind.HiveMind;
1.5 +12 -1
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/RegistryImpl.java
Index: RegistryImpl.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/RegistryImpl.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- RegistryImpl.java 17 May 2004 19:44:10 -0000 1.4
+++ RegistryImpl.java 17 May 2004 21:14:22 -0000 1.5
@@ -23,6 +23,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hivemind.*;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.HiveMind;
import org.apache.hivemind.Location;
@@ -360,6 +361,16 @@
*/
public void shutdown()
{
+ // Allow service implementations and such to shutdown.
+
+ ShutdownCoordinator coordinatorService =
+ (ShutdownCoordinator) getService("hivemind.ShutdownCoordinator",
+ ShutdownCoordinator.class);
+
+ coordinatorService.shutdown();
+
+ // Shutdown infrastructure items, such as proxies.
+
_shutdownCoordinator.shutdown();
_modules = null;
1.1
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/ShutdownCoordinatorImpl.java
Index: ShutdownCoordinatorImpl.java
===================================================================
// 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.
package org.apache.hivemind.impl;
import java.util.Iterator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hivemind.*;
import org.apache.hivemind.HiveMind;
import org.apache.hivemind.events.RegistryShutdownListener;
import org.apache.hivemind.util.EventListenerList;
/**
* Manages a list of objects that implement the
* [EMAIL PROTECTED] org.apache.hivemind.RegistryShutdownListener} interface.
*
* @author Howard Lewis Ship
* @version $Id: ShutdownCoordinatorImpl.java,v 1.1 2004/05/17 21:14:22
hlship Exp $
*/
public final class ShutdownCoordinatorImpl implements ShutdownCoordinator
{
private final Log _log;
public ShutdownCoordinatorImpl()
{
this(LogFactory.getLog(ShutdownCoordinatorImpl.class));
}
public ShutdownCoordinatorImpl(Log log)
{
_log = log;
}
private EventListenerList _listenerList;
public synchronized void
addRegistryShutdownListener(RegistryShutdownListener s)
{
if (_listenerList == null)
_listenerList = new EventListenerList();
_listenerList.addListener(s);
}
public synchronized void
removeRegistryShutdownListener(RegistryShutdownListener s)
{
if (_listenerList != null)
_listenerList.removeListener(s);
}
public void shutdown()
{
if (_listenerList == null)
return;
Iterator i = _listenerList.getListeners();
_listenerList = null;
while (i.hasNext())
{
RegistryShutdownListener s = (RegistryShutdownListener) i.next();
shutdown(s);
}
_listenerList = null;
}
private void shutdown(RegistryShutdownListener s)
{
try
{
s.registryDidShutdown();
}
catch (RuntimeException ex)
{
_log.error(HiveMind.format("ShutdownCoordinator.failure", s,
ex.getMessage()), ex);
}
}
}
1.9 +2 -1 jakarta-hivemind/framework/xdocs/navigation.xml
Index: navigation.xml
===================================================================
RCS file: /home/cvs/jakarta-hivemind/framework/xdocs/navigation.xml,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- navigation.xml 17 May 2004 16:57:46 -0000 1.8
+++ navigation.xml 17 May 2004 21:14:22 -0000 1.9
@@ -33,6 +33,7 @@
<item name="BuilderFactory" href="/BuilderFactory.html"/>
<item name="ClassFactory" href="/ClassFactory.html"/>
<item name="LoggingInterceptor" href="/LoggingInterceptor.html"/>
+ <item name="ShutdownCoordinator" href="/ShutdownCoordinator.html"/>
<item name="ThreadEventNotifier" href="/ThreadEventNotifier.html"/>
<item name="ThreadLocalStorage" href="/ThreadLocalStorage.html"/>
</menu>
1.10 +9 -2 jakarta-hivemind/framework/xdocs/BuilderFactory.xml
Index: BuilderFactory.xml
===================================================================
RCS file: /home/cvs/jakarta-hivemind/framework/xdocs/BuilderFactory.xml,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- BuilderFactory.xml 17 May 2004 16:57:46 -0000 1.9
+++ BuilderFactory.xml 17 May 2004 21:14:22 -0000 1.10
@@ -41,7 +41,7 @@
<source>
invoke-factory (service-id=hivemind.BuilderFactory)
{
- construct (class=... log-property=... messages-property=...
service-id-property=...)
+ construct (class=... log-property=... messages-property=...
service-id-property=... initialize-method=...)
{
log
messages
@@ -80,6 +80,13 @@
</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>
1.1 jakarta-hivemind/framework/xdocs/ShutdownCoordinator.xml
Index: ShutdownCoordinator.xml
===================================================================
<?xml version="1.0"?>
<!-- $Id: ShutdownCoordinator.xml,v 1.1 2004/05/17 21:14:22 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 [
<!ENTITY projectroot '../'>
<!ENTITY % common-links SYSTEM "../../common/links.xml">
%common-links;
]>
<document>
<properties>
<title>hivemind.ShutdownCoordinator Service</title>
<author email="[EMAIL PROTECTED]">Howard M. Lewis Ship</author>
</properties>
<body>
<section name="hivemind.ShutdownCoordinator">
<p>
Service implementations that need to perform any special shutdown logic
should implement the
<a
href="&apiroot;/events/RegistryShutdownListener.html">RegistryShutdownListener</a>
interface, and let the
<a href="BuilderFactory.html">BuilderFactory</a> register them for
notifications.
</p>
</section>
</body>
</document>
1.6 +4 -2
jakarta-hivemind/framework/src/test/hivemind/test/services/TestShutdown.java
Index: TestShutdown.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/test/hivemind/test/services/TestShutdown.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- TestShutdown.java 13 May 2004 11:04:47 -0000 1.5
+++ TestShutdown.java 17 May 2004 21:14:22 -0000 1.6
@@ -69,9 +69,11 @@
try
{
r.shutdown();
+ unreachable();
}
- catch (NullPointerException ex)
+ catch (ApplicationRuntimeException ex)
{
+ assertExceptionSubstring(ex, "The HiveMind Registry has been
shutdown.");
}
}
1.13 +5 -17
jakarta-hivemind/framework/src/test/hivemind/test/services/TestServices.java
Index: TestServices.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/test/hivemind/test/services/TestServices.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- TestServices.java 17 May 2004 16:57:47 -0000 1.12
+++ TestServices.java 17 May 2004 21:14:22 -0000 1.13
@@ -111,18 +111,6 @@
}
- public void testInitialize() throws Exception
- {
- Registry r = buildFrameworkRegistry("Initialize.xml");
-
- CheckInitializeService c =
- (CheckInitializeService) r.getService(
- "hivemind.test.services.CheckInitialize",
- CheckInitializeService.class);
-
- assertEquals(true, c.didInitialize());
- }
-
public void testLogging() throws Exception
{
interceptLogging("hivemind.test.services.Demo");
@@ -161,9 +149,9 @@
}
- /**
- * Test the filters; where we include "no*" but exclude "always*".
- */
+ /**
+ * Test the filters; where we include "no*" but exclude "always*".
+ */
public void testLoggingMethodFilters() throws Exception
{
interceptLogging("hivemind.test.services.Demo");
@@ -291,7 +279,7 @@
{
Registry r = buildFrameworkRegistry("BuilderAccessFailure.xml");
- interceptLogging("hivemind.BuilderFactory");
+ interceptLogging("hivemind.test.services.BuilderAccessFailure");
BuilderAccess s =
(BuilderAccess) r.getService(
1.2 +18 -1
jakarta-hivemind/framework/src/test/hivemind/test/services/TestBuilderFactory.java
Index: TestBuilderFactory.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/test/hivemind/test/services/TestBuilderFactory.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TestBuilderFactory.java 29 Feb 2004 20:57:09 -0000 1.1
+++ TestBuilderFactory.java 17 May 2004 21:14:22 -0000 1.2
@@ -34,4 +34,21 @@
assertEquals(99, s.add(1, 1));
}
+
+ public void testInitializeMethodFailure() throws Exception
+ {
+ Registry r = buildFrameworkRegistry("InitializeMethodFailure.sdl");
+
+ Runnable s = (Runnable)
r.getService("hivemind.test.services.Runnable", Runnable.class);
+
+ interceptLogging("hivemind.test.services.Runnable");
+
+ s.run();
+
+ assertLoggedMessagePattern(
+ "Unable to initialize service
hivemind\\.test\\.services\\.Runnable "
+ + "\\(by invoking method doesNotExist on "
+ + "hivemind\\.test\\.services\\.impl\\.MockRunnable, at
.*?\\):");
+
+ }
}
1.4 +4 -2
jakarta-hivemind/framework/src/test/hivemind/test/services/Shutdown.xml
Index: Shutdown.xml
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/test/hivemind/test/services/Shutdown.xml,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Shutdown.xml 7 Apr 2004 20:03:09 -0000 1.3
+++ Shutdown.xml 17 May 2004 21:14:22 -0000 1.4
@@ -22,6 +22,7 @@
<invoke-factory service-id="hivemind.BuilderFactory"
model="primitive">
<construct class="hivemind.test.services.impl.RunnableImpl"
log-property="log">
<set property="type" value="Primitive"/>
+ <event-listener
service-id="hivemind.ShutdownCoordinator"/>
</construct>
</invoke-factory>
</service-point>
@@ -29,7 +30,8 @@
<service-point id="Singleton" interface="java.lang.Runnable">
<invoke-factory service-id="hivemind.BuilderFactory">
<construct class="hivemind.test.services.impl.RunnableImpl"
log-property="log">
- <set property="type" value="Singleton"/>
+ <set property="type" value="Singleton"/>
+ <event-listener
service-id="hivemind.ShutdownCoordinator"/>
</construct>
</invoke-factory>
</service-point>
1.1
jakarta-hivemind/framework/src/test/hivemind/test/services/InitializeMethodFailure.sdl
Index: InitializeMethodFailure.sdl
===================================================================
module (id=hivemind.test.services version="1.0.0")
{
service-point (id=Runnable interface=java.lang.Runnable)
{
invoke-factory (service-id=hivemind.BuilderFactory)
{
construct (class=hivemind.test.services.impl.MockRunnable
initialize-method=doesNotExist)
}
}
}
1.4 +2 -2
jakarta-hivemind/framework/src/test/hivemind/test/services/impl/RegistryShutdownStringHolderImpl.java
Index: RegistryShutdownStringHolderImpl.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/test/hivemind/test/services/impl/RegistryShutdownStringHolderImpl.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- RegistryShutdownStringHolderImpl.java 26 Feb 2004 23:07:35 -0000
1.3
+++ RegistryShutdownStringHolderImpl.java 17 May 2004 21:14:22 -0000
1.4
@@ -16,7 +16,7 @@
import hivemind.test.services.TestThreadedModel;
-import org.apache.hivemind.RegistryShutdownListener;
+import org.apache.hivemind.events.RegistryShutdownListener;
/**
* Used to check that the threaded model does <em>not</em>
1.5 +2 -2
jakarta-hivemind/framework/src/test/hivemind/test/services/impl/RunnableImpl.java
Index: RunnableImpl.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/test/hivemind/test/services/impl/RunnableImpl.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- RunnableImpl.java 26 Feb 2004 23:07:35 -0000 1.4
+++ RunnableImpl.java 17 May 2004 21:14:22 -0000 1.5
@@ -15,7 +15,7 @@
package hivemind.test.services.impl;
import org.apache.commons.logging.Log;
-import org.apache.hivemind.RegistryShutdownListener;
+import org.apache.hivemind.events.RegistryShutdownListener;
/**
1.1
jakarta-hivemind/framework/src/test/hivemind/test/services/impl/MockRunnable.java
Index: MockRunnable.java
===================================================================
// 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.
package hivemind.test.services.impl;
/**
* Used by [EMAIL PROTECTED] hivemind.test.services.TestBuilderFactory}.
*
* @author Howard Lewis Ship
* @version $Id: MockRunnable.java,v 1.1 2004/05/17 21:14:22 hlship Exp $
*/
public class MockRunnable implements Runnable
{
public void run()
{
}
}
1.2 +1 -14
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/servicemodel/PrimitiveServiceModel.java
Index: PrimitiveServiceModel.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/servicemodel/PrimitiveServiceModel.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- PrimitiveServiceModel.java 13 May 2004 11:04:45 -0000 1.1
+++ PrimitiveServiceModel.java 17 May 2004 21:14:22 -0000 1.2
@@ -43,17 +43,4 @@
return _constructedService;
}
-
- /**
- * Overrides the super implementation to see if the
- * core service implementation implements
- * [EMAIL PROTECTED] org.apache.hivemind.RegistryShutdownListener}.
- */
- protected void initializeCoreServiceImplementation(Object core)
- {
- super.initializeCoreServiceImplementation(core);
-
- registerForShutdownNotification(core);
- }
-
}
1.2 +2 -14
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/servicemodel/SingletonServiceModel.java
Index: SingletonServiceModel.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/servicemodel/SingletonServiceModel.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SingletonServiceModel.java 13 May 2004 11:04:45 -0000 1.1
+++ SingletonServiceModel.java 17 May 2004 21:14:22 -0000 1.2
@@ -18,7 +18,7 @@
import java.lang.reflect.Modifier;
import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.RegistryShutdownListener;
+import org.apache.hivemind.events.RegistryShutdownListener;
import org.apache.hivemind.impl.ConstructableServiceExtensionPoint;
import org.apache.hivemind.impl.ProxyBuilder;
import org.apache.hivemind.internal.ServiceExtensionPoint;
@@ -68,18 +68,6 @@
_constructedService = constructServiceImplementation();
return _constructedService;
- }
-
- /**
- * Overrides the super implementation to see if the
- * core service implementation implements [EMAIL PROTECTED]
RegistryShutdownListener}.
- */
-
- protected void initializeCoreServiceImplementation(Object core)
- {
- super.initializeCoreServiceImplementation(core);
-
- registerForShutdownNotification(core);
}
/**
1.2 +3 -20
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/servicemodel/AbstractServiceModelImpl.java
Index: AbstractServiceModelImpl.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/servicemodel/AbstractServiceModelImpl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AbstractServiceModelImpl.java 13 May 2004 11:04:45 -0000 1.1
+++ AbstractServiceModelImpl.java 17 May 2004 21:14:22 -0000 1.2
@@ -20,8 +20,7 @@
import org.apache.commons.logging.LogFactory;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Initializable;
-import org.apache.hivemind.RegistryShutdownListener;
+import org.apache.hivemind.events.RegistryShutdownListener;
import org.apache.hivemind.impl.ConstructableServiceExtensionPoint;
import org.apache.hivemind.impl.ImplMessages;
import org.apache.hivemind.impl.InterceptorStackImpl;
@@ -121,25 +120,11 @@
}
/**
- * Invoked after the service has been constructed to utilize
- * the [EMAIL PROTECTED] Initializable} call back interface, if the
- * core implementation implements it.
- */
- protected void initializeCoreServiceImplementation(Object core)
- {
- if (core instanceof Initializable)
- {
- Initializable initializeCore = (Initializable) core;
- initializeCore.initializeService();
- }
- }
-
- /**
* Registers a core service implemntation with
* the [EMAIL PROTECTED] ShutdownCoordinator} if it implements
* [EMAIL PROTECTED] RegistryShutdownListener}.
*/
- protected void registerForShutdownNotification(Object core)
+ protected void l(Object core)
{
if (core instanceof RegistryShutdownListener)
_servicePoint.getShutdownCoordinator().addRegistryShutdownListener(
@@ -178,8 +163,6 @@
Object core = constructCoreServiceImplementation();
Object intercepted = addInterceptors(core);
-
- initializeCoreServiceImplementation(core);
return intercepted;
}
1.2 +1 -5
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/servicemodel/PooledServiceModel.java
Index: PooledServiceModel.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/servicemodel/PooledServiceModel.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- PooledServiceModel.java 13 May 2004 11:04:45 -0000 1.1
+++ PooledServiceModel.java 17 May 2004 21:14:22 -0000 1.2
@@ -190,10 +190,6 @@
Object core = constructCoreServiceImplementation();
Object intercepted = addInterceptors(core);
- initializeCoreServiceImplementation(core);
-
- registerForShutdownNotification(core);
-
return new PooledService(intercepted, core);
}
catch (Exception ex)
1.2 +2 -4
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/servicemodel/ThreadedServiceModel.java
Index: ThreadedServiceModel.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/servicemodel/ThreadedServiceModel.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ThreadedServiceModel.java 13 May 2004 11:04:45 -0000 1.1
+++ ThreadedServiceModel.java 17 May 2004 21:14:22 -0000 1.2
@@ -18,7 +18,7 @@
import org.apache.hivemind.Discardable;
import org.apache.hivemind.HiveMind;
import org.apache.hivemind.Registry;
-import org.apache.hivemind.RegistryShutdownListener;
+import org.apache.hivemind.events.RegistryShutdownListener;
import org.apache.hivemind.impl.ConstructableServiceExtensionPoint;
import org.apache.hivemind.impl.ProxyUtils;
import org.apache.hivemind.service.ThreadCleanupListener;
@@ -144,8 +144,6 @@
{
Object core = constructCoreServiceImplementation();
Object result = addInterceptors(core);
-
- initializeCoreServiceImplementation(core);
if (core instanceof RegistryShutdownListener)
_log.error(
1.4 +26 -6
jakarta-hivemind/framework/src/test/hivemind/test/util/TestShutdownCoordinator.java
Index: TestShutdownCoordinator.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/test/hivemind/test/util/TestShutdownCoordinator.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TestShutdownCoordinator.java 26 Feb 2004 23:08:04 -0000 1.3
+++ TestShutdownCoordinator.java 17 May 2004 21:14:22 -0000 1.4
@@ -15,8 +15,11 @@
package hivemind.test.util;
import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.RegistryShutdownListener;
-import org.apache.hivemind.impl.ShutdownCoordinator;
+import org.apache.hivemind.Registry;
+import org.apache.hivemind.ShutdownCoordinator;
+import org.apache.hivemind.events.RegistryShutdownListener;
+import org.apache.hivemind.impl.RegistryBuilder;
+import org.apache.hivemind.impl.ShutdownCoordinatorImpl;
import hivemind.test.FrameworkTestCase;
@@ -46,7 +49,7 @@
public void testShutdownCoordinator()
{
- ShutdownCoordinator c = new ShutdownCoordinator();
+ ShutdownCoordinator c = new ShutdownCoordinatorImpl();
Fixture f = new Fixture();
@@ -61,9 +64,27 @@
c.shutdown();
}
+ public void testShutdownCoordinatorService()
+ {
+ Registry r = RegistryBuilder.constructDefaultRegistry();
+
+ ShutdownCoordinator c =
+ (ShutdownCoordinator) r.getService(
+ "hivemind.ShutdownCoordinator",
+ ShutdownCoordinator.class);
+
+ Fixture f = new Fixture();
+
+ c.addRegistryShutdownListener(f);
+
+ c.shutdown();
+
+ assertEquals(true, f.isShutdown());
+ }
+
public void testShutdownFailure() throws Exception
{
- ShutdownCoordinator c = new ShutdownCoordinator();
+ ShutdownCoordinator c = new ShutdownCoordinatorImpl();
c.addRegistryShutdownListener(new RegistryShutdownListener()
{
@@ -78,7 +99,6 @@
c.shutdown();
assertLoggedMessagePattern("Unable to shutdown .*: I'm just not in
the mood\\.");
-
}
}
1.1
jakarta-hivemind/framework/src/java/org/apache/hivemind/service/ServiceMessages.java
Index: ServiceMessages.java
===================================================================
// 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.
package org.apache.hivemind.service;
import org.apache.hivemind.HiveMind;
import org.apache.hivemind.Location;
/**
* Messages for the service and service.impl packages.
*
* @author Howard Lewis Ship
* @version $Id: ServiceMessages.java,v 1.1 2004/05/17 21:14:22 hlship Exp $
*/
public class ServiceMessages
{
public static String unableToInitializeService(
String serviceId,
String methodName,
Class serviceClass,
Location location,
Throwable ex)
{
return HiveMind.format(
"service.unable-to-initialize-service",
new Object[] {
serviceId,
methodName,
serviceClass.getName(),
location,
ex.getMessage()});
}
}
1.2 +2 -3
jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/DefaultsSymbolSource.java
Index: DefaultsSymbolSource.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/DefaultsSymbolSource.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DefaultsSymbolSource.java 26 Feb 2004 23:07:45 -0000 1.1
+++ DefaultsSymbolSource.java 17 May 2004 21:14:22 -0000 1.2
@@ -20,7 +20,6 @@
import org.apache.commons.logging.Log;
import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Initializable;
import org.apache.hivemind.Location;
import org.apache.hivemind.SymbolSource;
import org.apache.hivemind.impl.BaseLocatable;
@@ -32,7 +31,7 @@
* @author Howard Lewis Ship
* @version $Id$
*/
-public class DefaultsSymbolSource extends BaseLocatable implements
SymbolSource, Initializable
+public class DefaultsSymbolSource extends BaseLocatable implements
SymbolSource
{
private Log _log;
private List _defaults;
1.5 +42 -14
jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/BuilderFactory.java
Index: BuilderFactory.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/BuilderFactory.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- BuilderFactory.java 13 May 2004 11:04:46 -0000 1.4
+++ BuilderFactory.java 17 May 2004 21:14:22 -0000 1.5
@@ -14,15 +14,18 @@
package org.apache.hivemind.service.impl;
+import java.lang.reflect.Method;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.ClassResolver;
import org.apache.hivemind.HiveMind;
import org.apache.hivemind.ServiceImplementationFactory;
import org.apache.hivemind.internal.Module;
import org.apache.hivemind.service.EventLinker;
+import org.apache.hivemind.service.ServiceMessages;
import org.apache.hivemind.util.ConstructorUtils;
import org.apache.hivemind.util.PropertyUtils;
@@ -31,14 +34,6 @@
* that can instantiate an object and then configure its properties.
*
* <p>
- * This service exists to allow a service to be fully configured without
- * the implementation having to implement [EMAIL PROTECTED]
org.apache.hivemind.Initializable},
- * which allows for a more IoC (Inversion of Control) feel. A service
- * implements <code>Initializable</code> typically to access
- * its module's messages, or its own extension point id, but BuilderFactory
- * is capable of providing the service with this information.
- *
- * <p>
* Some thought has been given to using bytecode generation to create
properties
* for messages, extension point id, and so forth. This is being avoided
because it
* undermines the ability to test service implemenations as POJOs, outside
the
@@ -55,8 +50,6 @@
{
private static final String POINT_ID = "hivemind.BuilderFactory";
- private static final Log LOG = LogFactory.getLog(POINT_ID);
-
private EventLinker _eventLinker = new EventLinkerImpl();
public Object createCoreServiceImplementation(
@@ -67,14 +60,18 @@
{
HiveMind.checkFactoryParameterCount(POINT_ID, parameters, 1);
+ Log log = LogFactory.getLog(serviceId);
+
BuilderParameter parameter = (BuilderParameter) parameters.get(0);
Object result = instantiateCoreServiceInstance(serviceId,
invokingModule, parameter);
- setProperties(serviceId, invokingModule, parameter, result);
+ setProperties(serviceId, invokingModule, parameter, result, log);
registerForEvents(parameter, result);
+ invokeInitializer(parameter, result, serviceId, log);
+
return result;
}
@@ -100,7 +97,8 @@
String serviceId,
Module invokingModule,
BuilderParameter parameter,
- Object target)
+ Object target,
+ Log log)
{
List properties = parameter.getProperties();
int count = properties.size();
@@ -128,7 +126,7 @@
}
catch (Exception ex)
{
- LOG.error(ex.getMessage());
+ log.error(ex.getMessage());
}
}
}
@@ -171,5 +169,35 @@
}
return result;
+ }
+
+ private void invokeInitializer(
+ BuilderParameter parameters,
+ Object service,
+ String serviceId,
+ Log log)
+ {
+ String methodName = parameters.getInitializeMethod();
+
+ if (HiveMind.isBlank(methodName))
+ return;
+
+ try
+ {
+ Class serviceClass = service.getClass();
+ Method m = serviceClass.getMethod(methodName, null);
+
+ m.invoke(service, null);
+ }
+ catch (Exception ex)
+ {
+ log.error(
+ ServiceMessages.unableToInitializeService(
+ serviceId,
+ methodName,
+ service.getClass(),
+ parameters.getLocation(),
+ ex));
+ }
}
}
1.3 +12 -1
jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/BuilderParameter.java
Index: BuilderParameter.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/BuilderParameter.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- BuilderParameter.java 28 Feb 2004 00:34:38 -0000 1.2
+++ BuilderParameter.java 17 May 2004 21:14:22 -0000 1.3
@@ -31,6 +31,7 @@
private List _properties = new ArrayList();
private List _parameters = new ArrayList();
private List _events = new ArrayList();
+ private String _initializeMethod;
public String getClassName()
{
@@ -70,6 +71,16 @@
public List getEventRegistrations()
{
return _events;
+ }
+
+ public String getInitializeMethod()
+ {
+ return _initializeMethod;
+ }
+
+ public void setInitializeMethod(String string)
+ {
+ _initializeMethod = string;
}
}
1.1
jakarta-hivemind/framework/src/java/org/apache/hivemind/events/RegistryShutdownListener.java
Index: RegistryShutdownListener.java
===================================================================
// 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.
package org.apache.hivemind.events;
import java.util.EventListener;
/**
* Lifecycle interface that may be implemented by objects
* that need to know when the [EMAIL PROTECTED] org.apache.hivemind.Registry}
* has shutdown. Typically, this is implemented by core service
implementations
* (as well as many proxies created by HiveMind).
*
* <p>
* A core service implementation that implements this interface will
* automatically be registered for notifications (exception: not if the
service
* uses the threaded service model).
*
* <p>Using this notification is
* preferrable to implementing a <code>finalize()</code> since it will be
invoked
* at a known time.
*
* <p>
* The order in which listeners will be invoked is
* not well known. In the future, some form of dependency system may
* be instituted.
*
*
* @author Howard Lewis Ship
* @version $Id: RegistryShutdownListener.java,v 1.1 2004/05/17 21:14:22
hlship Exp $
*/
public interface RegistryShutdownListener extends EventListener
{
/**
* Invoked when a service is being shutdown, and should release any
external resources.
* A service should <em>not</em> attempt to use any resources or
configurations, doing
* so may result in a runtime exception.
*/
public void registryDidShutdown();
}
1.5 +36 -12
jakarta-hivemind/framework/src/descriptor/META-INF/hivemodule.sdl
Index: hivemodule.sdl
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/descriptor/META-INF/hivemodule.sdl,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- hivemodule.sdl 17 May 2004 19:44:09 -0000 1.4
+++ hivemodule.sdl 17 May 2004 21:14:22 -0000 1.5
@@ -95,35 +95,36 @@
description { <<Extension point for setting "factory defaults"
for symbol values.>> }
}
- configuration-point (id=ApplicationDefaults schema-id=Defaults)
- {
- description
- {
- "Extension point for setting application defaults;
these defaults will override "
- "factory defaults specified in the FactoryDefaults
configuration point."
- }
- }
-
service-point (id=FactoryDefaultsSymbolSource
interface=org.apache.hivemind.SymbolSource)
{
description { "SymbolSource implementation driven by the
FactoryDefaults configuration point." }
invoke-factory (service-id=BuilderFactory)
{
- construct
(class=org.apache.hivemind.service.impl.DefaultsSymbolSource log-property=log)
+ construct
(class=org.apache.hivemind.service.impl.DefaultsSymbolSource log-property=log
initialize-method=initializeService)
{
set-configuration (configuration-id=FactoryDefaults
property=defaults)
+ event-listener (service-id=ShutdownCoordinator)
}
}
}
+ configuration-point (id=ApplicationDefaults schema-id=Defaults)
+ {
+ description
+ {
+ "Extension point for setting application defaults;
these defaults will override "
+ "factory defaults specified in the FactoryDefaults
configuration point."
+ }
+ }
+
service-point (id=ApplicationDefaultsSymbolSource
interface=org.apache.hivemind.SymbolSource)
{
description { "SymbolSource implementation driven by the
ApplicationDefaults configuration point." }
invoke-factory (service-id=BuilderFactory)
{
- construct
(class=org.apache.hivemind.service.impl.DefaultsSymbolSource log-property=log)
+ construct
(class=org.apache.hivemind.service.impl.DefaultsSymbolSource log-property=log
initialize-method=initializeService)
{
set-configuration
(configuration-id=ApplicationDefaults property=defaults)
}
@@ -239,10 +240,20 @@
description { "The name of a property
to assign the configuration point id of the service to." }
}
+ attribute (name=initialize-method)
+ {
+ description
+ {
+ "The name of a public instance
method (taking no parameters) to be invoked after "
+ "the service is constructed."
+ }
+ }
+
rules
{
create-object
(class=org.apache.hivemind.service.impl.BuilderParameter)
read-attribute (property=className
attribute=class)
+ read-attribute
(property=initializeMethod attribute=initialize-method)
invoke-parent (method=addElement)
create-object
(class=org.apache.hivemind.service.impl.BuilderMessagesFacet)
@@ -642,5 +653,18 @@
translator (name=long
class=org.apache.hivemind.schema.rules.LongTranslator)
translator (name=double
class=org.apache.hivemind.schema.rules.DoubleTranslator)
translator (name=smart
class=org.apache.hivemind.schema.rules.SmartTranslator)
+ }
+
+ service-point (id=ShutdownCoordinator
interface=org.apache.hivemind.ShutdownCoordinator)
+ {
+ description { "A source of event notifications for when the Registry
is shutdown." }
+
+ invoke-factory (service-id=BuilderFactory)
+ {
+ construct
(class=org.apache.hivemind.impl.ShutdownCoordinatorImpl)
+ {
+ log
+ }
+ }
}
}
1.38 +6 -20 jakarta-hivemind/xdocs/services.xml
Index: services.xml
===================================================================
RCS file: /home/cvs/jakarta-hivemind/xdocs/services.xml,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- services.xml 17 May 2004 16:57:47 -0000 1.37
+++ services.xml 17 May 2004 21:14:23 -0000 1.38
@@ -146,7 +146,7 @@
interface).
The most common example is the
- <a
href="jakarta-hivemind/BuilderFactory.html">hivemind.BuilderFactory</a>
+ <a
href="hivemind/BuilderFactory.html">hivemind.BuilderFactory</a>
service.
</p>
@@ -178,7 +178,7 @@
<p>
The most common service factory is
- <a
href="&hivedoc;/service/hivemind.BuilderFactory.html">hivemind.BuilderFactory</a>.
+ <a
href="hivemind/BuilderFactory.html">hivemind.BuilderFactory</a>.
It is used to construct a service and then set
properties of the service implementation object.
</p>
@@ -482,14 +482,6 @@
has been created (to perform any final initializations) or when the Registry
has been shut down.
</p>
-<p>
-The
- <a href="&apiroot;/Initializable.html">Initializable</a>
- interface may be implemented by the core service implementation.
- The <code>initializeService()</code> method is invoked after the
service implementation is fully constructed, including
- any interceptors, and after all properties of the core service instance
have been configured
- (including properties which are themselves other services). The
interface is optional.
- </p>
<p>
A core service implementation may also implement the
@@ -524,7 +516,7 @@
<p>
It is fairly common that some services will produce events and other
services will consume events.
The use of the
- <a
href="jakarta-hivemind/BuilderFactory.html">hivemind.BuilderFactory</a>
+ <a
href="hivemind/BuilderFactory.html">hivemind.BuilderFactory</a>
to construct a service simplifies this, using the
<code><event-listener></code> element. The BuilderFactory can register
a
core service implementation as a <em>listener</em> of events produced by some
@@ -572,14 +564,8 @@
core service implementations constructor (for
instance, if
the initializations are based on properties set
after the service implementation object
is instantiated), then
- your class should implement the
-
- <a
href="&apiroot;/Initializable.html">Initializable</a>
- interface (in addition to the service
interface).
- This interface defines a callback that occurs
only after
- the core service has been constructed and
configured, and the interceptor stack
- (if any)
- has been assembled.
+ your class should use the
<a
href="hivemind/BuilderFactory.html">hivemind.BuilderFactory</a> to
+ invoke an initializer method.
</p>
</li>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]