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>&lt;event-listener&gt;</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]

Reply via email to