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()
{