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:58:47 UTC

svn commit: r1792349 - /felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java

Author: cziegeler
Date: Sun Apr 23 09:58:47 2017
New Revision: 1792349

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

Modified:
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java?rev=1792349&r1=1792348&r2=1792349&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java Sun Apr 23 09:58:47 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()