You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2010/11/30 19:08:03 UTC
svn commit: r1040664 - in /felix/trunk/fileinstall/src:
main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java
Author: gnodet
Date: Tue Nov 30 18:08:03 2010
New Revision: 1040664
URL: http://svn.apache.org/viewvc?rev=1040664&view=rev
Log:
[FELIX-2698] File Install Circular Configuration Update Loop
Modified:
felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java
Modified: felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
URL: http://svn.apache.org/viewvc/felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java?rev=1040664&r1=1040663&r2=1040664&view=diff
==============================================================================
--- felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java (original)
+++ felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java Tue Nov 30 18:08:03 2010
@@ -21,6 +21,7 @@ package org.apache.felix.fileinstall.int
import org.apache.felix.cm.file.ConfigurationHandler;
import org.apache.felix.fileinstall.ArtifactInstaller;
import org.apache.felix.fileinstall.internal.Util.Logger;
+import org.apache.felix.utils.collections.DictionaryAsMap;
import org.apache.felix.utils.properties.InterpolationHelper;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
@@ -116,7 +117,9 @@ public class ConfigInstaller implements
for( Enumeration e = dict.keys(); e.hasMoreElements(); )
{
String key = e.nextElement().toString();
- if( !Constants.SERVICE_PID.equals(key) && !DirectoryWatcher.FILENAME.equals(key) )
+ if( !Constants.SERVICE_PID.equals(key)
+ && !ConfigurationAdmin.SERVICE_FACTORYPID.equals(key)
+ && !DirectoryWatcher.FILENAME.equals(key) )
{
String val = dict.get( key ).toString();
props.put( key, val );
@@ -195,14 +198,27 @@ public class ConfigInstaller implements
}
String pid[] = parsePid(f.getName());
- ht.put(DirectoryWatcher.FILENAME, f.getAbsolutePath());
Configuration config = getConfiguration(f.getAbsolutePath(), pid[0], pid[1]);
- if (config.getBundleLocation() != null)
+
+ Hashtable old = new Hashtable(new DictionaryAsMap(config.getProperties()));
+ old.remove( DirectoryWatcher.FILENAME );
+ old.remove( Constants.SERVICE_PID );
+ old.remove( ConfigurationAdmin.SERVICE_FACTORYPID );
+
+ if( !ht.equals( old ) )
+ {
+ ht.put(DirectoryWatcher.FILENAME, f.getAbsolutePath());
+ if (config.getBundleLocation() != null)
+ {
+ config.setBundleLocation(null);
+ }
+ config.update(ht);
+ return true;
+ }
+ else
{
- config.setBundleLocation(null);
+ return false;
}
- config.update(ht);
- return true;
}
/**
Modified: felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java?rev=1040664&r1=1040663&r2=1040664&view=diff
==============================================================================
--- felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java (original)
+++ felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java Tue Nov 30 18:08:03 2010
@@ -170,6 +170,8 @@ public class ConfigInstallerTest extends
{
mockConfiguration.getBundleLocation();
mockConfigurationControl.setReturnValue( null );
+ mockConfiguration.getProperties();
+ mockConfigurationControl.setReturnValue( new Hashtable() );
mockConfiguration.update( new Hashtable() );
mockConfigurationControl.setMatcher( new ArgumentsMatcher()
{