You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by hl...@apache.org on 2003/10/02 20:42:06 UTC
cvs commit: jakarta-commons-sandbox/hivemind/xdocs services.xml
hlship 2003/10/02 11:42:06
Modified: hivemind/framework/src/test/hivemind/test/services/impl
RunnableImpl.java
hivemind/framework/src/test/hivemind/test/services
TestThreadedModel.java
hivemind/framework/src/java/org/apache/commons/hivemind/impl
AbstractServiceModelImpl.java
ThreadedServiceModel.java
hivemind/framework/src/java/org/apache/commons/hivemind
HiveMindMessages.properties
hivemind/xdocs services.xml
Added: hivemind/framework/src/test/hivemind/test/services/impl
RegistryShutdownStringHolderImpl.java
DiscardableStringHolderImpl.java
hivemind/framework/src/test/hivemind/test/services
ThreadedRegistryShutdown.xml
ThreadedDiscardable.xml
hivemind/framework/src/java/org/apache/commons/hivemind
Discardable.java
Log:
Add Discardable interface, used by the threaded service model.
Revision Changes Path
1.2 +58 -1 jakarta-commons-sandbox/hivemind/framework/src/test/hivemind/test/services/impl/RunnableImpl.java
Index: RunnableImpl.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/framework/src/test/hivemind/test/services/impl/RunnableImpl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- RunnableImpl.java 1 Oct 2003 20:43:21 -0000 1.1
+++ RunnableImpl.java 2 Oct 2003 18:42:06 -0000 1.2
@@ -1,3 +1,60 @@
+/*
+ * ====================================================================
+ *
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if
+ * any, must include the following acknowlegement:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowlegement may appear in the software itself,
+ * if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "The Jakarta Project", "Commons", and "Apache Software
+ * Foundation" must not be used to endorse or promote products derived
+ * from this software without prior written permission. For written
+ * permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ * nor may "Apache" appear in their names without prior written
+ * permission of the Apache Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
package hivemind.test.services.impl;
import org.apache.commons.hivemind.RegistryShutdownListener;
1.1 jakarta-commons-sandbox/hivemind/framework/src/test/hivemind/test/services/impl/RegistryShutdownStringHolderImpl.java
Index: RegistryShutdownStringHolderImpl.java
===================================================================
/*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package hivemind.test.services.impl;
import hivemind.test.services.TestThreadedModel;
import org.apache.commons.hivemind.RegistryShutdownListener;
/**
* Used to check that the threaded model does <em>not</em>
* invoke the registryDidShutdown() method.
*
* @author Howard Lewis Ship
* @version $Id: RegistryShutdownStringHolderImpl.java,v 1.1 2003/10/02 18:42:06 hlship Exp $
*/
public class RegistryShutdownStringHolderImpl
extends StringHolderImpl
implements RegistryShutdownListener
{
public void registryDidShutdown()
{
TestThreadedModel._didShutdown = true;
}
}
1.1 jakarta-commons-sandbox/hivemind/framework/src/test/hivemind/test/services/impl/DiscardableStringHolderImpl.java
Index: DiscardableStringHolderImpl.java
===================================================================
/*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package hivemind.test.services.impl;
import org.apache.commons.hivemind.Discardable;
import org.apache.commons.logging.Log;
/**
* Used to test that the threaded service model invokes this method
* as a service instance is discarded.
*
* @author Howard Lewis Ship
* @version $Id: DiscardableStringHolderImpl.java,v 1.1 2003/10/02 18:42:06 hlship Exp $
*/
public class DiscardableStringHolderImpl extends StringHolderImpl implements Discardable
{
private Log _log;
public void threadDidDiscardService()
{
_log.info("threadDidDiscardService() has been invoked.");
}
public void setLog(Log log)
{
_log = log;
}
}
1.4 +50 -0 jakarta-commons-sandbox/hivemind/framework/src/test/hivemind/test/services/TestThreadedModel.java
Index: TestThreadedModel.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/framework/src/test/hivemind/test/services/TestThreadedModel.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TestThreadedModel.java 22 Sep 2003 20:06:00 -0000 1.3
+++ TestThreadedModel.java 2 Oct 2003 18:42:06 -0000 1.4
@@ -184,4 +184,54 @@
"END getValue() [fred]" });
}
+ // Set by RegistryShutdownStringHolderImpl to true (except it doesn't,
+ // because the registryDidShutdown() method doesn't get invoked.
+
+ public static boolean _didShutdown = false;
+
+ protected void tearDown()
+ {
+ _didShutdown = false;
+ }
+
+ public void testIgnoreRegistyShutdownListener() throws Exception
+ {
+ Registry r = buildFrameworkRegistry("ThreadedRegistryShutdown.xml");
+
+ StringHolder h =
+ (StringHolder) r.getService(
+ "hivemind.test.services.ThreadedRegistryShutdown",
+ StringHolder.class);
+
+ interceptLogging();
+
+ h.setValue("foo");
+
+ assertLoggedMessage("Core implementation of service hivemind.test.services.ThreadedRegistryShutdown implements the RegistryCleanupListener interface, which is not supported by the threaded service model.");
+
+ r.shutdown();
+
+ assertEquals(false, _didShutdown);
+ }
+
+ public void testDiscardable() throws Exception
+ {
+ Registry r = buildFrameworkRegistry("ThreadedDiscardable.xml");
+
+ StringHolder h =
+ (StringHolder) r.getService(
+ "hivemind.test.services.ThreadedDiscardable",
+ StringHolder.class);
+
+ h.setValue("bar");
+
+ ThreadEventNotifier n = (ThreadEventNotifier)r.getService("hivemind.ThreadEventNotifier",
+ ThreadEventNotifier.class);
+
+ interceptLogging("hivemind");
+
+ n.fireThreadCleanup();
+
+ assertLoggedMessage("threadDidDiscardService() has been invoked.");
+ }
}
1.1 jakarta-commons-sandbox/hivemind/framework/src/test/hivemind/test/services/ThreadedRegistryShutdown.xml
Index: ThreadedRegistryShutdown.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: ThreadedRegistryShutdown.xml,v 1.1 2003/10/02 18:42:06 hlship Exp $ -->
<module
id="hivemind.test.services"
version="1.0.0">
<service-point id="ThreadedRegistryShutdown" interface="hivemind.test.services.StringHolder" model="threaded">
<create-instance class="hivemind.test.services.impl.RegistryShutdownStringHolderImpl"/>
</service-point>
</module>
1.1 jakarta-commons-sandbox/hivemind/framework/src/test/hivemind/test/services/ThreadedDiscardable.xml
Index: ThreadedDiscardable.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: ThreadedDiscardable.xml,v 1.1 2003/10/02 18:42:06 hlship Exp $ -->
<module
id="hivemind.test.services"
version="1.0.0">
<service-point id="ThreadedDiscardable" interface="hivemind.test.services.StringHolder" model="threaded">
<invoke-factory service-id="hivemind.BuilderFactory">
<construct class="hivemind.test.services.impl.DiscardableStringHolderImpl"
log-property="log"/>
</invoke-factory>
</service-point>
</module>
1.3 +4 -5 jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/commons/hivemind/impl/AbstractServiceModelImpl.java
Index: AbstractServiceModelImpl.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/commons/hivemind/impl/AbstractServiceModelImpl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- AbstractServiceModelImpl.java 1 Oct 2003 20:43:21 -0000 1.2
+++ AbstractServiceModelImpl.java 2 Oct 2003 18:42:06 -0000 1.3
@@ -132,6 +132,10 @@
*/
protected Object constructCoreServiceImplementation()
{
+ if (LOG.isDebugEnabled())
+ LOG.debug(
+ "Constructing core instance for service " + _servicePoint.getExtensionPointId());
+
Class serviceType = _servicePoint.getServiceInterface();
ServiceImplementationConstructor constructor = _servicePoint.getServiceConstructor();
Object result = constructor.constructCoreServiceImplementation();
@@ -212,11 +216,6 @@
{
try
{
- if (LOG.isDebugEnabled())
- LOG.debug(
- "Constructing core instance for service "
- + _servicePoint.getExtensionPointId());
-
Object core = constructCoreServiceImplementation();
Object intercepted = addInterceptors(core);
1.4 +61 -16 jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/commons/hivemind/impl/ThreadedServiceModel.java
Index: ThreadedServiceModel.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/commons/hivemind/impl/ThreadedServiceModel.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ThreadedServiceModel.java 1 Oct 2003 20:43:21 -0000 1.3
+++ ThreadedServiceModel.java 2 Oct 2003 18:42:06 -0000 1.4
@@ -61,12 +61,16 @@
import java.lang.reflect.Modifier;
import org.apache.commons.hivemind.ApplicationRuntimeException;
+import org.apache.commons.hivemind.Discardable;
+import org.apache.commons.hivemind.HiveMind;
import org.apache.commons.hivemind.Registry;
import org.apache.commons.hivemind.RegistryShutdownListener;
import org.apache.commons.hivemind.service.BodyBuilder;
import org.apache.commons.hivemind.service.ClassFab;
import org.apache.commons.hivemind.service.ThreadCleanupListener;
import org.apache.commons.hivemind.service.ThreadEventNotifier;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
* Like
@@ -81,6 +85,8 @@
*/
public final class ThreadedServiceModel extends AbstractServiceModelImpl
{
+ private static final Log LOG = LogFactory.getLog(ThreadedServiceModel.class);
+
/**
* Name of a method in the deferred proxy that is used to obtain
* the constructed service.
@@ -98,11 +104,30 @@
class CleanupListener implements ThreadCleanupListener
{
+ // The core, wrapped by any interceptors
+ private Object _service;
+ // The core itself
+ private Object _core;
+
+ CleanupListener(Object service, Object core)
+ {
+ _service = service;
+ _core = core;
+ }
+
public void threadDidCleanup()
{
+ // Orhpan this object
_notifier.removeThreadCleanupListener(this);
discardActiveService();
+
+ if (_core instanceof Discardable)
+ {
+ Discardable d = (Discardable) _core;
+
+ d.threadDidDiscardService();
+ }
}
}
@@ -258,25 +283,45 @@
private Object constructServiceForCurrentThread()
{
- // Note: don't call constructServiceImplementation since that discards the
- // service instance constructor and interceptor contributions; we need
- // to be able to build new instances of the service again and again.
-
- Object result = constructNewServiceImplementation();
- if (_notifier == null)
+ try
{
- Registry registry = getServicePoint().getModule().getRegistry();
- _notifier =
- (ThreadEventNotifier) registry.getService(
- "hivemind.ThreadEventNotifier",
- ThreadEventNotifier.class);
- }
+ Object core = constructCoreServiceImplementation();
+ Object result = addInterceptors(core);
- _notifier.addThreadCleanupListener(new CleanupListener());
- _activeService.set(result);
+ initializeCoreServiceImplementation(core, result);
- return result;
+ if (core instanceof RegistryShutdownListener)
+ LOG.error(
+ HiveMind.format(
+ "ThreadedServiceModel.registry-cleanup-ignored",
+ getServicePoint().getExtensionPointId()));
+
+ if (_notifier == null)
+ {
+ Registry registry = getServicePoint().getModule().getRegistry();
+
+ _notifier =
+ (ThreadEventNotifier) registry.getService(
+ "hivemind.ThreadEventNotifier",
+ ThreadEventNotifier.class);
+ }
+
+ _notifier.addThreadCleanupListener(new CleanupListener(result, core));
+
+ _activeService.set(result);
+
+ return result;
+ }
+ catch (Exception ex)
+ {
+ throw new ApplicationRuntimeException(
+ HiveMind.format(
+ "ServiceExtensionPoint.unable-to-construct-service",
+ getServicePoint().getExtensionPointId(),
+ ex.getMessage()),
+ ex);
+ }
}
private void discardActiveService()
1.5 +3 -1 jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/commons/hivemind/HiveMindMessages.properties
Index: HiveMindMessages.properties
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/commons/hivemind/HiveMindMessages.properties,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- HiveMindMessages.properties 1 Oct 2003 20:43:23 -0000 1.4
+++ HiveMindMessages.properties 2 Oct 2003 18:42:06 -0000 1.5
@@ -79,6 +79,8 @@
ShutdownCoordinator.failure=Unable to shutdown {0}: {1}
+ThreadedServiceModel.registry-cleanup-ignored=Core implementation of service {0} implements the RegistryCleanupListener interface, which is not supported by the threaded service model.
+
# javassist package
AbstractServiceExtensionPoint.error-instantiating-interceptor=Service interceptor factory {0} failed to create {1} interceptor for service {2} as class {3}: {4}
1.1 jakarta-commons-sandbox/hivemind/framework/src/java/org/apache/commons/hivemind/Discardable.java
Index: Discardable.java
===================================================================
/*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.commons.hivemind;
/**
* Implemented by a core service implementationsthat require notification when they are
* discarded. This interface is only used by the
* {@link org.apache.commons.hivemind.impl.ThreadedServiceModel threaded service model},
* which creates a service for a short period, then discards it when notified
* by the {@link org.apache.commons.hivemind.service.ThreadEventNotifier}.
*
* <p>
* The service instance will be discarded regardless; this interface allows
* the core service implementation to know immediately when this happens,
* so that it can release any acquired resources.
*
* @author Howard Lewis Ship
* @version $Id: Discardable.java,v 1.1 2003/10/02 18:42:06 hlship Exp $
*/
public interface Discardable
{
/**
* Invoked when a service is being discarded.
*/
public void threadDidDiscardService();
}
1.28 +15 -7 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.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- services.xml 1 Oct 2003 20:43:21 -0000 1.27
+++ services.xml 2 Oct 2003 18:42:06 -0000 1.28
@@ -340,20 +340,26 @@
<section name="Threaded Service Model">
<p>
-In general, singleton services should be sufficient. In some cases,
+In general, singleton services (using the deferred service model) should be sufficient. In some cases,
the service may need to keep some specific state. State and multithreading don't mix, so the
-<b>threaded</b> service model constructs, as needed, a service implementation
-for the current thread. Once constructed, the service implementation stays bound to the thread until it is discarded.
+<b>threaded</b> service model constructs, as needed, a service instance
+for the current thread. Once constructed, the service instance stays bound to the thread until it is discarded.
</p>
<p>
-The service implementation is discarded when notified to cleanup; this is controlled by the
+The service instance is discarded when notified to cleanup; this is controlled by the
<a href="&hivemind-registry;#service:hivemind.ThreadEventNotifier">hivemind.ThreadEventNotifier</a> service.
If your application has any threaded services, you are responsible for invoking the <code>fireThreadCleanup()</code>
method of the service.
</p>
<p>
+A core implementation may implement the
+<a href="&apiroot;/Discardable.html">Discardable</a> interface. If so, it will receive
+a notification when the service instance is discarded.
+</p>
+
+<p>
For example, a servlet application may want to add the following:
</p>
@@ -410,9 +416,11 @@
</p>
<p>
-<b>Note:</b> the threaded service model does <b>not</b> registry services for Registry shutdown notification.
+The threaded service model does <b>not</b> registry services for Registry shutdown notification.
It doesn't matter if the core service implementation implements the RegistryShutdownListener
-interface or not.
+interface or not. Instead, the core service implementation may implement the
+<a href="&apiroot;/Discardable.html">Discardable</a> interface,
+to be informed when a service bound to a thread is discarded.
</p>
<p>
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org