FELIX-1832 Instead of deactivating in case of instantiation failure just
ensure the instance is deleted and remain in the Registered state. It may
not be possible to unregister the factory service in this situation.

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@831390 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
index e305094..e2fc949 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
@@ -419,13 +419,14 @@
 
         if ( m_serviceRegistration != null )
         {
-            log( LogService.LOG_DEBUG, "unregistering the services", null );
+            log( LogService.LOG_DEBUG, "Unregistering the services", null );
 
             m_serviceRegistration.unregister();
             m_serviceRegistration = null;
         }
     }
 
+
     //**********************************************************************************************************
     public BundleComponentActivator getActivator()
     {
@@ -1120,7 +1121,19 @@
                 return dcm.getInstance();
             }
 
-            super.deactivate( dcm, ComponentConstants.DEACTIVATION_REASON_UNSPECIFIED );
+            // component could not really be created. This may be temporary
+            // so we stay in the registered state but ensure the component
+            // instance is deleted
+            try
+            {
+                dcm.deleteComponent( ComponentConstants.DEACTIVATION_REASON_UNSPECIFIED );
+            }
+            catch ( Throwable t )
+            {
+                dcm.log( LogService.LOG_DEBUG, "Cannot delete incomplete component instance. Ignoring.", t );
+            }
+
+            // no service can be returned (be prepared for more logging !!)
             return null;
         }
     }