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 2016/10/21 14:55:06 UTC

svn commit: r1766034 - in /felix/trunk/configadmin/src: main/java/org/apache/felix/cm/impl/CachingPersistenceManagerProxy.java main/java/org/apache/felix/cm/impl/ConfigurationManager.java test/java/org/apache/felix/cm/impl/ConfigurationManagerTest.java

Author: cziegeler
Date: Fri Oct 21 14:55:06 2016
New Revision: 1766034

URL: http://svn.apache.org/viewvc?rev=1766034&view=rev
Log:
FELIX-5368 : ConfigurationManager ignores NotCachablePersistenceManager marker interface. Apply patch from Antonio Sanso

Modified:
    felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/CachingPersistenceManagerProxy.java
    felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java
    felix/trunk/configadmin/src/test/java/org/apache/felix/cm/impl/ConfigurationManagerTest.java

Modified: felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/CachingPersistenceManagerProxy.java
URL: http://svn.apache.org/viewvc/felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/CachingPersistenceManagerProxy.java?rev=1766034&r1=1766033&r2=1766034&view=diff
==============================================================================
--- felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/CachingPersistenceManagerProxy.java (original)
+++ felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/CachingPersistenceManagerProxy.java Fri Oct 21 14:55:06 2016
@@ -67,6 +67,10 @@ class CachingPersistenceManagerProxy imp
         this.pm = pm;
         this.cache = new Hashtable<String, CaseInsensitiveDictionary>();
     }
+    
+    public boolean isNotCachablePersistenceManager() {
+        return pm instanceof NotCachablePersistenceManager;
+    }
 
 
     /**

Modified: felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java?rev=1766034&r1=1766033&r2=1766034&view=diff
==============================================================================
--- felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java (original)
+++ felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java Fri Oct 21 14:55:06 2016
@@ -683,7 +683,11 @@ public class ConfigurationManager implem
                 }
 
                 // ensure the service.pid and returned a cached config if available
-                ConfigurationImpl cfg = getCachedConfiguration( pid );
+                ConfigurationImpl cfg = null;
+                if (! (pmList[i].isNotCachablePersistenceManager())) 
+                {
+                    cfg = getCachedConfiguration( pid );
+                }
                 if ( cfg == null )
                 {
                     cfg = new ConfigurationImpl( this, pmList[i], config );

Modified: felix/trunk/configadmin/src/test/java/org/apache/felix/cm/impl/ConfigurationManagerTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/configadmin/src/test/java/org/apache/felix/cm/impl/ConfigurationManagerTest.java?rev=1766034&r1=1766033&r2=1766034&view=diff
==============================================================================
--- felix/trunk/configadmin/src/test/java/org/apache/felix/cm/impl/ConfigurationManagerTest.java (original)
+++ felix/trunk/configadmin/src/test/java/org/apache/felix/cm/impl/ConfigurationManagerTest.java Fri Oct 21 14:55:06 2016
@@ -28,10 +28,11 @@ import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.Map;
 import java.util.Set;
-
 import org.apache.felix.cm.MockBundleContext;
 import org.apache.felix.cm.MockLogService;
+import org.apache.felix.cm.MockNotCachablePersistenceManager;
 import org.apache.felix.cm.MockPersistenceManager;
+import org.apache.felix.cm.PersistenceManager;
 import org.mockito.Mockito;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.Constants;
@@ -41,10 +42,8 @@ import org.osgi.service.cm.Configuration
 import org.osgi.service.cm.SynchronousConfigurationListener;
 import org.osgi.service.log.LogService;
 import org.osgi.util.tracker.ServiceTracker;
-
 import junit.framework.TestCase;
 
-
 public class ConfigurationManagerTest extends TestCase
 {
 
@@ -73,6 +72,84 @@ public class ConfigurationManagerTest ex
         super.tearDown();
     }
 
+    public void test_listConfigurations_cached() throws Exception
+    {
+        String pid = "testDefaultPersistenceManager";
+        ConfigurationManager configMgr = new ConfigurationManager();
+        setServiceTrackerField( configMgr, "persistenceManagerTracker" );
+        
+        Field field = configMgr.getClass().getDeclaredField( "persistenceManagers" );
+        field.setAccessible( true );
+        CachingPersistenceManagerProxy[] persistenceManagers = new CachingPersistenceManagerProxy [1];
+        PersistenceManager pm =new MockPersistenceManager(); 
+        Dictionary dictionary = new Hashtable();
+        dictionary.put( "property1", "value1" );
+        dictionary.put( Constants.SERVICE_PID, pid );
+        pm.store( pid, dictionary );
+
+        persistenceManagers[0] = new CachingPersistenceManagerProxy(pm);
+        field.set(configMgr, persistenceManagers);
+        
+        ConfigurationImpl[] conf = configMgr.listConfigurations(new ConfigurationAdminImpl(configMgr, null), null);
+        
+        assertEquals(1, conf.length);
+        assertEquals(2, conf[0].getProperties(true).size());
+        
+        Field configurations = configMgr.getClass().getDeclaredField( "configurations" );
+        configurations.setAccessible( true );
+        HashMap<String, ConfigurationImpl> configurationsMap = new HashMap<String, ConfigurationImpl>();
+        configurationsMap.put(pid, conf[0]);
+        configurations.set(configMgr, configurationsMap);
+        
+        dictionary = new Hashtable();
+        dictionary.put( "property1", "value2" );
+        pid = "testDefaultPersistenceManager";
+        dictionary.put( Constants.SERVICE_PID, pid );
+        pm.store( pid, dictionary );
+ 
+        conf = configMgr.listConfigurations(new ConfigurationAdminImpl(configMgr, null), null);
+        assertEquals(1, conf.length);
+        assertEquals(2, conf[0].getProperties(true).size());
+    }    
+    
+    public void test_listConfigurations_notcached() throws Exception
+    {
+        String pid = "testDefaultPersistenceManager";         
+        ConfigurationManager configMgr = new ConfigurationManager();
+        setServiceTrackerField( configMgr, "persistenceManagerTracker" );
+        
+        Field field = configMgr.getClass().getDeclaredField( "persistenceManagers" );
+        field.setAccessible( true );
+        CachingPersistenceManagerProxy[] persistenceManagers = new CachingPersistenceManagerProxy[1];
+        PersistenceManager pm =new MockNotCachablePersistenceManager(); 
+        Dictionary dictionary = new Hashtable();
+        dictionary.put( "property1", "value1" );
+        dictionary.put( Constants.SERVICE_PID, pid );
+        pm.store( pid, dictionary );
+
+        persistenceManagers[0] = new CachingPersistenceManagerProxy(pm);
+        field.set(configMgr, persistenceManagers);
+        
+        ConfigurationImpl[] conf = configMgr.listConfigurations(new ConfigurationAdminImpl(configMgr, null), null);
+        
+        assertEquals(1, conf.length);
+        assertEquals(2, conf[0].getProperties(true).size());
+        
+        Field configurations = configMgr.getClass().getDeclaredField( "configurations" );
+        configurations.setAccessible( true );
+        HashMap<String, ConfigurationImpl> configurationsMap = new HashMap<String, ConfigurationImpl>();
+        configurationsMap.put(pid, conf[0]);
+        configurations.set(configMgr, configurationsMap);
+        
+        dictionary = new Hashtable();
+        pid = "testDefaultPersistenceManager";
+        dictionary.put( Constants.SERVICE_PID, pid );
+        pm.store( pid, dictionary );
+ 
+        conf = configMgr.listConfigurations(new ConfigurationAdminImpl(configMgr, null), null);
+        assertEquals(1, conf.length);
+        assertEquals(1, conf[0].getProperties(true).size());
+    }
 
     public void testLogNoLogService()
     {