You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2017/04/23 09:57:00 UTC

svn commit: r1792348 - in /felix/trunk/scr: changelog.txt src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java

Author: cziegeler
Date: Sun Apr 23 09:56:59 2017
New Revision: 1792348

URL: http://svn.apache.org/viewvc?rev=1792348&view=rev
Log:
FELIX-5613 : SCR bundle fails to start without Config Admin

Modified:
    felix/trunk/scr/changelog.txt
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java

Modified: felix/trunk/scr/changelog.txt
URL: http://svn.apache.org/viewvc/felix/trunk/scr/changelog.txt?rev=1792348&r1=1792347&r2=1792348&view=diff
==============================================================================
--- felix/trunk/scr/changelog.txt (original)
+++ felix/trunk/scr/changelog.txt Sun Apr 23 09:56:59 2017
@@ -5,6 +5,7 @@ Changes from 2.0.8 to 2.0.10
 ** Bug
     * [FELIX-5572] Reference target filter fails when using field strategy for multiple cardinality reference with multiple component instances
     * [FELIX-5615] Global lock in BaseMethod.NotResolved::resolve method can cause deadlock
+    * [FELIX-5613] SCR bundle fails to start without Config Admin
 
 
 Changes from 2.0.6 to 2.0.8

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java?rev=1792348&r1=1792347&r2=1792348&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java Sun Apr 23 09:56:59 2017
@@ -40,13 +40,11 @@ import org.osgi.framework.ServiceRegistr
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 import org.osgi.service.cm.ConfigurationEvent;
-import org.osgi.service.cm.ConfigurationException;
 import org.osgi.service.cm.ConfigurationListener;
 import org.osgi.service.cm.ConfigurationPermission;
-import org.osgi.service.cm.ManagedService;
 import org.osgi.service.log.LogService;
 
-public abstract class RegionConfigurationSupport implements ConfigurationListener
+public abstract class RegionConfigurationSupport
 {
 
     private final SimpleLogger logger;
@@ -79,8 +77,19 @@ public abstract class RegionConfiguratio
         Dictionary<String, Object> props = new Hashtable<String, Object>();
         props.put( Constants.SERVICE_DESCRIPTION, "Declarative Services Configuration Support Listener" );
         props.put( Constants.SERVICE_VENDOR, "The Apache Software Foundation" );
-        this.m_registration = caBundleContext.registerService( ConfigurationListener.class, this, props );
 
+        // If RegionConfigurationSupport *directly* implements ConfigurationListener then we get NoClassDefFoundError
+        // when SCR is started without a wiring to an exporter of Config Admin API. This construction allows the
+        // class loading exception to be caught and confined.
+        ConfigurationListener serviceDelegator = new ConfigurationListener() 
+        {
+            @Override
+            public void configurationEvent(ConfigurationEvent event) 
+            {
+                RegionConfigurationSupport.this.configurationEvent(event);
+            }
+        };
+        this.m_registration = caBundleContext.registerService(ConfigurationListener.class, serviceDelegator, props );
     }
 
     public Long getBundleId()