Author: cschneider Date: Mon Mar 12 14:32:54 2012 New Revision: 1299688 URL: http://svn.apache.org/viewvc?rev=1299688&view=rev Log: KARAF-1243 Fix for trunk
Modified: karaf/trunk/management/mbeans/config/pom.xml karaf/trunk/management/mbeans/config/src/main/resources/OSGI-INF/blueprint/config-management.xml karaf/trunk/shell/config/pom.xml karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/ConfigRepository.java karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml karaf/trunk/shell/config/src/test/java/org/apache/karaf/shell/config/EditCommandTest.java karaf/trunk/shell/config/src/test/java/org/apache/karaf/shell/config/UpdateCommandTest.java Modified: karaf/trunk/management/mbeans/config/pom.xml URL: http://svn.apache.org/viewvc/karaf/trunk/management/mbeans/config/pom.xml?rev=1299688&r1=1299687&r2=1299688&view=diff ============================================================================== --- karaf/trunk/management/mbeans/config/pom.xml (original) +++ karaf/trunk/management/mbeans/config/pom.xml Mon Mar 12 14:32:54 2012 @@ -52,6 +52,10 @@ <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.utils</artifactId> </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> <!-- Temporally depend on shell.config to reuse the ConfigRepository. Modified: karaf/trunk/management/mbeans/config/src/main/resources/OSGI-INF/blueprint/config-management.xml URL: http://svn.apache.org/viewvc/karaf/trunk/management/mbeans/config/src/main/resources/OSGI-INF/blueprint/config-management.xml?rev=1299688&r1=1299687&r2=1299688&view=diff ============================================================================== --- karaf/trunk/management/mbeans/config/src/main/resources/OSGI-INF/blueprint/config-management.xml (original) +++ karaf/trunk/management/mbeans/config/src/main/resources/OSGI-INF/blueprint/config-management.xml Mon Mar 12 14:32:54 2012 @@ -24,7 +24,10 @@ <bean id="configRepo" class="org.apache.karaf.shell.config.ConfigRepository"> <argument value="${storage}"/> <argument ref="configAdmin"/> + <argument ref="artifactInstallers"/> </bean> + + <reference-list id="artifactInstallers" interface="org.apache.felix.fileinstall.ArtifactInstaller" availability="optional" /> <reference id="configAdmin" interface="org.osgi.service.cm.ConfigurationAdmin" /> Modified: karaf/trunk/shell/config/pom.xml URL: http://svn.apache.org/viewvc/karaf/trunk/shell/config/pom.xml?rev=1299688&r1=1299687&r2=1299688&view=diff ============================================================================== --- karaf/trunk/shell/config/pom.xml (original) +++ karaf/trunk/shell/config/pom.xml Mon Mar 12 14:32:54 2012 @@ -54,6 +54,11 @@ <artifactId>org.apache.felix.utils</artifactId> <scope>provided</scope> </dependency> + + <dependency> + <groupId>org.apache.felix</groupId> + <artifactId>org.apache.felix.fileinstall</artifactId> + </dependency> <dependency> <groupId>org.apache.karaf</groupId> @@ -69,6 +74,11 @@ <dependency> <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> <artifactId>slf4j-jdk14</artifactId> <scope>test</scope> </dependency> Modified: karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/ConfigRepository.java URL: http://svn.apache.org/viewvc/karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/ConfigRepository.java?rev=1299688&r1=1299687&r2=1299688&view=diff ============================================================================== --- karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/ConfigRepository.java (original) +++ karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/ConfigRepository.java Mon Mar 12 14:32:54 2012 @@ -21,14 +21,19 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Dictionary; import java.util.Enumeration; +import java.util.List; +import org.apache.felix.fileinstall.ArtifactInstaller; import org.apache.felix.utils.properties.Properties; import org.osgi.framework.Constants; import org.osgi.framework.InvalidSyntaxException; import org.osgi.service.cm.Configuration; import org.osgi.service.cm.ConfigurationAdmin; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ConfigRepository { + private static final Logger LOG = LoggerFactory.getLogger(ConfigRepository.class); private static final String FILEINSTALL_FILE_NAME="felix.fileinstall.filename"; private static final String PID_FILTER="(service.pid=%s*)"; @@ -37,11 +42,14 @@ public class ConfigRepository { private static final String FACTORY_SEPARATOR = "-"; private ConfigurationAdmin configAdmin; - private File storage; - public ConfigRepository(File storage, ConfigurationAdmin configAdmin) { + private File storage; + private List<ArtifactInstaller> artifactInstallers; + + public ConfigRepository(File storage, ConfigurationAdmin configAdmin, List<ArtifactInstaller> artifactInstallers) { this.storage = storage; this.configAdmin = configAdmin; + this.artifactInstallers = artifactInstallers; } /** @@ -141,7 +149,27 @@ public class ConfigRepository { // save the cfg file storage.mkdirs(); p.save(); - + updateFileInstall(storageFile); + } + + /** + * Trigger felix fileinstall to update the config so there is no delay till it polls the file + * + * @param storageFile + * @throws Exception + */ + private void updateFileInstall(File storageFile) { + if (artifactInstallers != null) { + for (ArtifactInstaller installer : artifactInstallers) { + if (installer.canHandle(storageFile)) { + try { + installer.update(storageFile); + } catch (Exception e) { + LOG.warn("Error updating config " + storageFile + " in felix fileinstall" + e.getMessage(), e); + } + } + } + } } private boolean shouldPersist(Object key) { Modified: karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml URL: http://svn.apache.org/viewvc/karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml?rev=1299688&r1=1299687&r2=1299688&view=diff ============================================================================== --- karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml (original) +++ karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml Mon Mar 12 14:32:54 2012 @@ -117,9 +117,10 @@ <bean id="configRepo" class="org.apache.karaf.shell.config.ConfigRepository"> <argument value="${storage}"/> <argument ref="configAdmin"/> + <argument ref="artifactInstallers"/> </bean> - <service interface="org.apache.karaf.shell.config.ConfigRepository" ref="configRepo"/> + <reference-list id="artifactInstallers" interface="org.apache.felix.fileinstall.ArtifactInstaller" availability="optional" /> <reference id="configAdmin" interface="org.osgi.service.cm.ConfigurationAdmin" /> Modified: karaf/trunk/shell/config/src/test/java/org/apache/karaf/shell/config/EditCommandTest.java URL: http://svn.apache.org/viewvc/karaf/trunk/shell/config/src/test/java/org/apache/karaf/shell/config/EditCommandTest.java?rev=1299688&r1=1299687&r2=1299688&view=diff ============================================================================== --- karaf/trunk/shell/config/src/test/java/org/apache/karaf/shell/config/EditCommandTest.java (original) +++ karaf/trunk/shell/config/src/test/java/org/apache/karaf/shell/config/EditCommandTest.java Mon Mar 12 14:32:54 2012 @@ -52,7 +52,7 @@ public class EditCommandTest extends Tes command.setBundleContext(context); admin = createMock(ConfigurationAdmin.class); - command.setConfigRepository(new ConfigRepository(null, admin)); + command.setConfigRepository(new ConfigRepository(null, admin, null)); expect(context.getBundle(0)).andReturn(null).anyTimes(); replay(context); Modified: karaf/trunk/shell/config/src/test/java/org/apache/karaf/shell/config/UpdateCommandTest.java URL: http://svn.apache.org/viewvc/karaf/trunk/shell/config/src/test/java/org/apache/karaf/shell/config/UpdateCommandTest.java?rev=1299688&r1=1299687&r2=1299688&view=diff ============================================================================== --- karaf/trunk/shell/config/src/test/java/org/apache/karaf/shell/config/UpdateCommandTest.java (original) +++ karaf/trunk/shell/config/src/test/java/org/apache/karaf/shell/config/UpdateCommandTest.java Mon Mar 12 14:32:54 2012 @@ -51,7 +51,7 @@ public class UpdateCommandTest extends T command.setBundleContext(context); admin = createMock(ConfigurationAdmin.class); - command.setConfigRepository(new ConfigRepository(null, admin)); + command.setConfigRepository(new ConfigRepository(null, admin, null)); expect(context.getBundle(0)).andReturn(null).anyTimes(); replay(context);