You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hivemind.apache.org by hl...@apache.org on 2005/12/07 18:08:48 UTC

svn commit: r354805 - in /jakarta/hivemind/trunk: ./ framework/src/java/org/apache/hivemind/impl/ framework/src/java/org/apache/hivemind/impl/servicemodel/ framework/src/test/org/apache/hivemind/impl/servicemodel/

Author: hlship
Date: Wed Dec  7 09:08:30 2005
New Revision: 354805

URL: http://svn.apache.org/viewcvs?rev=354805&view=rev
Log:
HIVEMIND-162: Performance bottleneck with threaded services

Modified:
    jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/ConstructableServicePoint.java
    jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/RegistryInfrastructureImpl.java
    jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/ServicePointImpl.java
    jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/AbstractServiceModelImpl.java
    jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/PooledServiceModel.java
    jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/PrimitiveServiceModel.java
    jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/SingletonServiceModel.java
    jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/ThreadedServiceModel.java
    jakarta/hivemind/trunk/framework/src/test/org/apache/hivemind/impl/servicemodel/ShutdownListenerServices.xml
    jakarta/hivemind/trunk/status.xml

Modified: jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/ConstructableServicePoint.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/ConstructableServicePoint.java?rev=354805&r1=354804&r2=354805&view=diff
==============================================================================
--- jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/ConstructableServicePoint.java (original)
+++ jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/ConstructableServicePoint.java Wed Dec  7 09:08:30 2005
@@ -16,14 +16,14 @@
 
 import java.util.List;
 
-import org.apache.hivemind.*;
-import org.apache.hivemind.internal.ServicePoint;
+import org.apache.hivemind.events.RegistryShutdownListener;
 import org.apache.hivemind.internal.ServiceImplementationConstructor;
+import org.apache.hivemind.internal.ServicePoint;
 
 /**
- * "Private" interface used by a {@link org.apache.hivemind.internal.ServiceModel}s to access
- * non-public information about a {@link org.apache.hivemind.internal.ServicePoint}, such as its
- * instance builder and interceptors.
+ * "Private" interface used by a {@link org.apache.hivemind.internal.ServiceModel}s to access non-
+ * information about a {@link org.apache.hivemind.internal.ServicePoint}, such as its instance
+ * builder and interceptors.
  * 
  * @author Howard Lewis Ship
  */
@@ -35,11 +35,11 @@
      * comes from the <service-point> itself; other modules can override this default using an
      * <implementation> element.
      */
-    public ServiceImplementationConstructor getServiceConstructor();
+    ServiceImplementationConstructor getServiceConstructor();
 
     /**
-     * Returns a list of {@link org.apache.hivemind.internal.ServiceInterceptorContribution}s, ordered
-     * according to their dependencies. May return null or an empty list.
+     * Returns a list of {@link org.apache.hivemind.internal.ServiceInterceptorContribution}s,
+     * ordered according to their dependencies. May return null or an empty list.
      * <p>
      * Note that the order is tricky! To keep any error messages while ordering the interceptors
      * understandable, they are ordered according into runtime execution order. Example: If we want
@@ -47,8 +47,8 @@
      * following in the descriptor:
      * 
      * <pre>
-     *           &lt;interceptor service-id=&quot;hivemind.LoggingInterceptor&quot; before=&quot;*&quot;/&gt;
-     *           &lt;interceptor service-id=&quot;somepackage.SecurityInterceptor&quot;/&gt;
+     *               &lt;interceptor service-id=&quot;hivemind.LoggingInterceptor&quot; before=&quot;*&quot;/&gt;
+     *               &lt;interceptor service-id=&quot;somepackage.SecurityInterceptor&quot;/&gt;
      * </pre>
      * 
      * The <code>before</code> value for the first interceptor contribution will be assigned to
@@ -65,18 +65,27 @@
      * interceptor ... but that's an issue that applies when building the interceptor stack around
      * the core service implementation.
      */
-    public List getOrderedInterceptorContributions();
+    List getOrderedInterceptorContributions();
 
     /**
      * Invoked by the ServiceModel when constuction information (the builder and interceptors) is no
      * longer needed.
      */
-    public void clearConstructorInformation();
+    void clearConstructorInformation();
 
     /**
-     * Returns the {@link ShutdownCoordinator}, used by the service model to inform proxies that
-     * the service has shutdown.
+     * Adds a shutdown listener; HiveMind uses two coordinators; the first is the
+     * hivemind.ShutdownCoordinator service, which is the coordinator used for service
+     * implementations. The second coordinator is used by the HiveMind infrastructure directly; this
+     * method adds a listener to that coordinator. Why two? It's about order of operations during
+     * registry shutdown; the hivemind.ShutdownCoordinator service's listeners are all invoked
+     * first, the the internal coordinator, to shutdown proxies and the like. This allows services
+     * to communicate during shutdown.
+     * 
+     * @param listener
+     *            the listener to be added to the infrastructure's shutdown coordinator
+     * @since 1.2
      */
 
-    public ShutdownCoordinator getShutdownCoordinator();
+    void addRegistryShutdownListener(RegistryShutdownListener listener);
 }

Modified: jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/RegistryInfrastructureImpl.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/RegistryInfrastructureImpl.java?rev=354805&r1=354804&r2=354805&view=diff
==============================================================================
--- jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/RegistryInfrastructureImpl.java (original)
+++ jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/RegistryInfrastructureImpl.java Wed Dec  7 09:08:30 2005
@@ -14,6 +14,7 @@
 
 package org.apache.hivemind.impl;
 
+import java.beans.Introspector;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -25,6 +26,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.hivemind.ErrorHandler;
+import org.apache.hivemind.HiveMind;
 import org.apache.hivemind.HiveMindMessages;
 import org.apache.hivemind.Location;
 import org.apache.hivemind.ShutdownCoordinator;
@@ -368,9 +370,9 @@
                 ShutdownCoordinator.class,
                 null);
 
-        coordinatorService.shutdown();
+         coordinatorService.shutdown();
 
-        // TODO: Shoudl this be moved earlier?
+        // TODO: Should this be moved earlier?
 
         _shutdown = true;
 
@@ -391,6 +393,11 @@
         // and reload in some servlet containers (such as Tomcat); this should clear that up.
 
         PropertyUtils.clearCache();
+        
+        synchronized (HiveMind.INTROSPECTOR_MUTEX)
+        {
+            Introspector.flushCaches();
+        }
     }
 
     /**

Modified: jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/ServicePointImpl.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/ServicePointImpl.java?rev=354805&r1=354804&r2=354805&view=diff
==============================================================================
--- jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/ServicePointImpl.java (original)
+++ jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/ServicePointImpl.java Wed Dec  7 09:08:30 2005
@@ -24,6 +24,7 @@
 import org.apache.hivemind.HiveMind;
 import org.apache.hivemind.Occurances;
 import org.apache.hivemind.ShutdownCoordinator;
+import org.apache.hivemind.events.RegistryShutdownListener;
 import org.apache.hivemind.internal.ServiceImplementationConstructor;
 import org.apache.hivemind.internal.ServiceInterceptorContribution;
 import org.apache.hivemind.internal.ServiceModel;
@@ -289,14 +290,14 @@
         return orderer.getOrderedObjects();
     }
 
-    public ShutdownCoordinator getShutdownCoordinator()
+    public void setShutdownCoordinator(ShutdownCoordinator coordinator)
     {
-        return _shutdownCoordinator;
+        _shutdownCoordinator = coordinator;
     }
 
-    public void setShutdownCoordinator(ShutdownCoordinator coordinator)
+    public void addRegistryShutdownListener(RegistryShutdownListener listener)
     {
-        _shutdownCoordinator = coordinator;
+        _shutdownCoordinator.addRegistryShutdownListener(listener);
     }
 
     /**

Modified: jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/AbstractServiceModelImpl.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/AbstractServiceModelImpl.java?rev=354805&r1=354804&r2=354805&view=diff
==============================================================================
--- jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/AbstractServiceModelImpl.java (original)
+++ jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/AbstractServiceModelImpl.java Wed Dec  7 09:08:30 2005
@@ -21,6 +21,7 @@
 import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.hivemind.HiveMind;
 import org.apache.hivemind.ShutdownCoordinator;
+import org.apache.hivemind.events.RegistryShutdownListener;
 import org.apache.hivemind.impl.ConstructableServicePoint;
 import org.apache.hivemind.impl.InterceptorStackImpl;
 import org.apache.hivemind.impl.ProxyBuilder;
@@ -128,8 +129,8 @@
 
     /**
      * Constructs the service implementation; this is invoked from
-     * {@link org.apache.hivemind.internal.ServicePoint#getService(Class)} (for singletons),
-     * or from the generated deferrable proxy (for most service models). Primarily, invokes
+     * {@link org.apache.hivemind.internal.ServicePoint#getService(Class)} (for singletons), or from
+     * the generated deferrable proxy (for most service models). Primarily, invokes
      * {@link #constructNewServiceImplementation()} from within a block that checks for recursive
      * builds.
      */
@@ -179,13 +180,26 @@
      * 
      * @since 1.1
      */
-    protected synchronized Object constructBridgeProxy(Object service)
+    protected Object constructBridgeProxy(Object service)
+    {
+        Class bridgeProxyClass = getBridgeProxyClass(service);
+
+        return ConstructorUtils.invokeConstructor(bridgeProxyClass, new Object[]
+        { service });
+    }
+
+    /**
+     * Factored out of {@link #constructBridgeProxy(Object)} to keep the synchronized block as small
+     * as possible.
+     * 
+     * @since 1.2
+     */
+    private synchronized Class getBridgeProxyClass(Object service)
     {
         if (_bridgeProxyClass == null)
             _bridgeProxyClass = constructBridgeProxyClass(service);
 
-        return ConstructorUtils.invokeConstructor(_bridgeProxyClass, new Object[]
-        { service });
+        return _bridgeProxyClass;
     }
 
     /**
@@ -212,9 +226,25 @@
         return cf.createClass();
     }
 
-    protected ShutdownCoordinator getShutdownCoordinatorService()
+    /**
+     * Invoked after creating a service implementation object; if the object implements
+     * {@link org.apache.hivemind.events.RegistryShutdownListener}, then the object is added as a
+     * listener.
+     * 
+     * @param service
+     *            the service implementation
+     * @see ShutdownCoordinator
+     * @since 1.2
+     */
+    protected void registerWithShutdownCoordinator(Object service)
     {
-        return ( ( ShutdownCoordinator )getServicePoint().getModule().getService( ShutdownCoordinator.class ) );
-    }
+        if (service instanceof RegistryShutdownListener)
+        {
+            ShutdownCoordinator coordinator = ((ShutdownCoordinator) getServicePoint().getModule()
+                    .getService(ShutdownCoordinator.class));
 
+            RegistryShutdownListener asListener = (RegistryShutdownListener) service;
+            coordinator.addRegistryShutdownListener(asListener);
+        }
+    }
 }

Modified: jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/PooledServiceModel.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/PooledServiceModel.java?rev=354805&r1=354804&r2=354805&view=diff
==============================================================================
--- jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/PooledServiceModel.java (original)
+++ jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/PooledServiceModel.java Wed Dec  7 09:08:30 2005
@@ -161,9 +161,7 @@
         RegistryShutdownListener outerProxy = ProxyUtils
                 .createOuterProxy(intercepted, servicePoint);
 
-        ShutdownCoordinator coordinator = servicePoint.getShutdownCoordinator();
-
-        coordinator.addRegistryShutdownListener(outerProxy);
+        servicePoint.addRegistryShutdownListener(outerProxy);
 
         return outerProxy;
     }
@@ -226,10 +224,9 @@
 
             if (!_serviceInterface.isInstance(core))
                 core = constructBridgeProxy(core);
-            if( core instanceof RegistryShutdownListener )
-            {
-                getShutdownCoordinatorService().addRegistryShutdownListener( ( RegistryShutdownListener )core );
-            }
+
+            registerWithShutdownCoordinator(core);
+
             return new PooledService(core);
         }
         catch (Exception ex)

Modified: jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/PrimitiveServiceModel.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/PrimitiveServiceModel.java?rev=354805&r1=354804&r2=354805&view=diff
==============================================================================
--- jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/PrimitiveServiceModel.java (original)
+++ jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/PrimitiveServiceModel.java Wed Dec  7 09:08:30 2005
@@ -40,17 +40,15 @@
         if (_constructedService == null)
         {
             _constructedService = constructServiceImplementation();
-            if( _constructedService instanceof RegistryShutdownListener )
-            {
-                getShutdownCoordinatorService().addRegistryShutdownListener( ( RegistryShutdownListener )_constructedService );
-            }
+
+            registerWithShutdownCoordinator(_constructedService);
         }
 
         // Note: if the service's declared interface is a class AND
         // the service has interceptors, then it will not be possible
         // to cast the result (since the returned interceptor will implement
         // the synthetic service interface).
-        
+
         return _constructedService;
     }
 

Modified: jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/SingletonServiceModel.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/SingletonServiceModel.java?rev=354805&r1=354804&r2=354805&view=diff
==============================================================================
--- jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/SingletonServiceModel.java (original)
+++ jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/SingletonServiceModel.java Wed Dec  7 09:08:30 2005
@@ -27,9 +27,9 @@
 import org.apache.hivemind.service.MethodSignature;
 
 /**
- * Subclass of {@link org.apache.hivemind.impl.servicemodel.AbstractServiceModelImpl} which
- * supports creation of a singleton service proxy (deferring the actual construction of the service
- * until absolutely necessary). This is used with the singleton service type, which is the default.
+ * Subclass of {@link org.apache.hivemind.impl.servicemodel.AbstractServiceModelImpl} which supports
+ * creation of a singleton service proxy (deferring the actual construction of the service until
+ * absolutely necessary). This is used with the singleton service type, which is the default.
  * 
  * @author Howard Lewis Ship
  */
@@ -65,12 +65,11 @@
     public synchronized Object getActualServiceImplementation()
     {
         if (_constructedService == null)
-            _constructedService = constructServiceImplementation();
-
-        if( _constructedService instanceof RegistryShutdownListener )
         {
-            getShutdownCoordinatorService().addRegistryShutdownListener( ( RegistryShutdownListener )_constructedService );
+            _constructedService = constructServiceImplementation();
+            registerWithShutdownCoordinator(_constructedService);
         }
+
         // The inner proxy needs the service to implement the service interface.
         // For bean services (not interface services) with no interceptors,
         // the implementation may be the bean provided by the factory ... which
@@ -78,7 +77,7 @@
         // So we introduce a "bridge" between the two.
 
         Class serviceInterface = getServicePoint().getServiceInterface();
-    
+
         if (!serviceInterface.isInstance(_constructedService))
             _constructedService = constructBridgeProxy(_constructedService);
 
@@ -120,8 +119,9 @@
             _innerProxy = (SingletonInnerProxy) c.newInstance(new Object[]
             { result, this });
 
-            getServicePoint().getShutdownCoordinator().addRegistryShutdownListener(
-                    (RegistryShutdownListener) result);
+            RegistryShutdownListener asListener = (RegistryShutdownListener) result;
+
+            getServicePoint().addRegistryShutdownListener(asListener);
 
             return result;
         }
@@ -153,12 +153,12 @@
 
         classFab.addField("_inner", serviceInterface);
         classFab.addField("_shutdown", boolean.class);
-        if( !RegistryShutdownListener.class.isAssignableFrom( serviceInterface ) )
+        if (!RegistryShutdownListener.class.isAssignableFrom(serviceInterface))
         {
             classFab.addInterface(RegistryShutdownListener.class);
 
             classFab.addMethod(Modifier.PUBLIC | Modifier.FINAL, new MethodSignature(void.class,
-                "registryDidShutdown", null, null), "{ _shutdown = true; }");
+                    "registryDidShutdown", null, null), "{ _shutdown = true; }");
         }
         classFab.addMethod(
                 Modifier.PUBLIC | Modifier.SYNCHRONIZED | Modifier.FINAL,

Modified: jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/ThreadedServiceModel.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/ThreadedServiceModel.java?rev=354805&r1=354804&r2=354805&view=diff
==============================================================================
--- jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/ThreadedServiceModel.java (original)
+++ jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/servicemodel/ThreadedServiceModel.java Wed Dec  7 09:08:30 2005
@@ -26,10 +26,10 @@
 import org.apache.hivemind.service.ThreadEventNotifier;
 
 /**
- * Like {@link org.apache.hivemind.impl.servicemodel.SingletonServiceModel}, this method returns a proxy
- * (implementing the service interface); unlike SingletonServiceModel, it <em>always</em> returns
- * the proxy. Invoking a service method on the proxy constructs a service implementation and binds
- * it to the current thread.
+ * Like {@link org.apache.hivemind.impl.servicemodel.SingletonServiceModel}, this method returns a
+ * proxy (implementing the service interface); unlike SingletonServiceModel, it <em>always</em>
+ * returns the proxy. Invoking a service method on the proxy constructs a service implementation and
+ * binds it to the current thread.
  * 
  * @author Howard Lewis Ship
  */
@@ -43,15 +43,15 @@
     private Object _serviceProxy;
 
     private ThreadEventNotifier _notifier;
-    
+
     /** @since 1.1 */
-    
+
     private Class _serviceInterface;
 
     public ThreadedServiceModel(ConstructableServicePoint servicePoint)
     {
         super(servicePoint);
-        
+
         _serviceInterface = servicePoint.getServiceInterface();
     }
 
@@ -138,9 +138,7 @@
         RegistryShutdownListener outerProxy = ProxyUtils
                 .createOuterProxy(intercepted, servicePoint);
 
-        ShutdownCoordinator coordinator = servicePoint.getShutdownCoordinator();
-
-        coordinator.addRegistryShutdownListener(outerProxy);
+        servicePoint.addRegistryShutdownListener(outerProxy);
 
         return outerProxy;
     }
@@ -154,12 +152,12 @@
         Object result = _activeService.get();
 
         if (result == null)
-            result = constructServiceForCurrentThread();
+            result = constructInstanceForCurrentThread();
 
         return result;
     }
 
-    private synchronized Object constructServiceForCurrentThread()
+    private Object constructInstanceForCurrentThread()
     {
         try
         {
@@ -176,7 +174,7 @@
 
             if (!_serviceInterface.isInstance(core))
                 core = constructBridgeProxy(core);
-            
+
             _activeService.set(core);
 
             return core;

Modified: jakarta/hivemind/trunk/framework/src/test/org/apache/hivemind/impl/servicemodel/ShutdownListenerServices.xml
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/framework/src/test/org/apache/hivemind/impl/servicemodel/ShutdownListenerServices.xml?rev=354805&r1=354804&r2=354805&view=diff
==============================================================================
--- jakarta/hivemind/trunk/framework/src/test/org/apache/hivemind/impl/servicemodel/ShutdownListenerServices.xml (original)
+++ jakarta/hivemind/trunk/framework/src/test/org/apache/hivemind/impl/servicemodel/ShutdownListenerServices.xml Wed Dec  7 09:08:30 2005
@@ -15,56 +15,56 @@
    limitations under the License.
 -->
 
-<module id="hivemind.lib.test" version="1.0.0">
+<module id="hivemind.lib.test" version="1.0.0" package="org.apache.hivemind.impl.servicemodel">
   
-  <service-point id="singletonManualSimple" interface="org.apache.hivemind.impl.servicemodel.Simple">
+  <service-point id="singletonManualSimple" interface="Simple">
     <invoke-factory model="singleton">
-      <construct class="org.apache.hivemind.impl.servicemodel.SimpleImpl" />
+      <construct class="SimpleImpl" />
     </invoke-factory>
   </service-point>
-  <service-point id="primitiveManualSimple" interface="org.apache.hivemind.impl.servicemodel.Simple">
+  <service-point id="primitiveManualSimple" interface="Simple">
     <invoke-factory model="primitive">
-      <construct class="org.apache.hivemind.impl.servicemodel.SimpleImpl" />
+      <construct class="SimpleImpl" />
     </invoke-factory>
   </service-point>
-  <service-point id="pooledManualSimple" interface="org.apache.hivemind.impl.servicemodel.Simple">
+  <service-point id="pooledManualSimple" interface="Simple">
     <invoke-factory model="pooled">
-      <construct class="org.apache.hivemind.impl.servicemodel.SimpleImpl" />
+      <construct class="SimpleImpl" />
     </invoke-factory>
   </service-point>
-  <service-point id="singletonAutoSimple" interface="org.apache.hivemind.impl.servicemodel.Simple">
+  <service-point id="singletonAutoSimple" interface="Simple">
     <invoke-factory model="singleton">
-      <construct class="org.apache.hivemind.impl.servicemodel.SimpleImpl" autowire-services="false"/>
+      <construct class="SimpleImpl" autowire-services="false"/>
     </invoke-factory>
   </service-point>
-  <service-point id="primitiveAutoSimple" interface="org.apache.hivemind.impl.servicemodel.Simple">
+  <service-point id="primitiveAutoSimple" interface="Simple">
     <invoke-factory model="primitive">
-      <construct class="org.apache.hivemind.impl.servicemodel.SimpleImpl" autowire-services="false"/>
+      <construct class="SimpleImpl" autowire-services="false"/>
     </invoke-factory>
   </service-point>
-  <service-point id="pooledAutoSimple" interface="org.apache.hivemind.impl.servicemodel.Simple">
+  <service-point id="pooledAutoSimple" interface="Simple">
     <invoke-factory model="pooled">
-      <construct class="org.apache.hivemind.impl.servicemodel.SimpleImpl" autowire-services="false"/>
+      <construct class="SimpleImpl" autowire-services="false"/>
     </invoke-factory>
   </service-point>
-  <service-point id="registryShutdownBeanSingleton" interface="org.apache.hivemind.impl.servicemodel.RegistryShutdownBean">
+  <service-point id="registryShutdownBeanSingleton" interface="RegistryShutdownBean">
     <invoke-factory>
-      <construct class="org.apache.hivemind.impl.servicemodel.RegistryShutdownBean" />
+      <construct class="RegistryShutdownBean" />
     </invoke-factory>
   </service-point>
-  <service-point id="registryShutdownBeanPooled" interface="org.apache.hivemind.impl.servicemodel.RegistryShutdownBean">
+  <service-point id="registryShutdownBeanPooled" interface="RegistryShutdownBean">
     <invoke-factory model="pooled">
-      <construct class="org.apache.hivemind.impl.servicemodel.RegistryShutdownBean" />
+      <construct class="RegistryShutdownBean" />
     </invoke-factory>
   </service-point>
-  <service-point id="registryShutdownBeanPrimitive" interface="org.apache.hivemind.impl.servicemodel.RegistryShutdownBean">
+  <service-point id="registryShutdownBeanPrimitive" interface="RegistryShutdownBean">
     <invoke-factory model="primitive">
-      <construct class="org.apache.hivemind.impl.servicemodel.RegistryShutdownBean" />
+      <construct class="RegistryShutdownBean" />
     </invoke-factory>
   </service-point>
-  <service-point id="registryShutdownBeanThreaded" interface="org.apache.hivemind.impl.servicemodel.RegistryShutdownBean">
+  <service-point id="registryShutdownBeanThreaded" interface="RegistryShutdownBean">
     <invoke-factory model="threaded">
-      <construct class="org.apache.hivemind.impl.servicemodel.RegistryShutdownBean" />
+      <construct class="RegistryShutdownBean" />
     </invoke-factory>
   </service-point>
 </module>

Modified: jakarta/hivemind/trunk/status.xml
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/status.xml?rev=354805&r1=354804&r2=354805&view=diff
==============================================================================
--- jakarta/hivemind/trunk/status.xml (original)
+++ jakarta/hivemind/trunk/status.xml Wed Dec  7 09:08:30 2005
@@ -31,6 +31,7 @@
   </todo>
   <changes>
     <release version="1.2-alpha-1" date="unreleased">
+      <action type="fix" dev="HLS" fixes-bug="HIVEMIND-162">Performance bottleneck with threaded services</action>
     </release>
     <release version="1.1" date="unreleased">
       <action type="update" dev="HLS">Change project web site navigation</action>



---------------------------------------------------------------------
To unsubscribe, e-mail: hivemind-cvs-unsubscribe@jakarta.apache.org
For additional commands, e-mail: hivemind-cvs-help@jakarta.apache.org