You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2012/04/13 11:54:54 UTC

svn commit: r1325692 - in /karaf/trunk/config: command/ command/src/main/java/org/apache/karaf/config/command/ command/src/test/java/org/apache/karaf/config/command/ core/ core/src/main/java/org/apache/karaf/config/core/ core/src/main/java/org/apache/k...

Author: cschneider
Date: Fri Apr 13 09:54:53 2012
New Revision: 1325692

URL: http://svn.apache.org/viewvc?rev=1325692&view=rev
Log:
KARAF-1360 Removing persistence code for configs as felix config admin and fileinstall now do that for us

Modified:
    karaf/trunk/config/command/pom.xml
    karaf/trunk/config/command/src/main/java/org/apache/karaf/config/command/ConfigPropertyCommandSupport.java
    karaf/trunk/config/command/src/main/java/org/apache/karaf/config/command/UpdateCommand.java
    karaf/trunk/config/command/src/test/java/org/apache/karaf/config/command/EditCommandTest.java
    karaf/trunk/config/command/src/test/java/org/apache/karaf/config/command/UpdateCommandTest.java
    karaf/trunk/config/core/pom.xml
    karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/ConfigRepository.java
    karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/impl/Config.java
    karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/impl/ConfigRepositoryImpl.java
    karaf/trunk/config/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml

Modified: karaf/trunk/config/command/pom.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/config/command/pom.xml?rev=1325692&r1=1325691&r2=1325692&view=diff
==============================================================================
--- karaf/trunk/config/command/pom.xml (original)
+++ karaf/trunk/config/command/pom.xml Fri Apr 13 09:54:53 2012
@@ -48,17 +48,6 @@
         </dependency>
 
         <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.fileinstall</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.karaf</groupId>
             <artifactId>org.apache.karaf.main</artifactId>
             <scope>provided</scope>

Modified: karaf/trunk/config/command/src/main/java/org/apache/karaf/config/command/ConfigPropertyCommandSupport.java
URL: http://svn.apache.org/viewvc/karaf/trunk/config/command/src/main/java/org/apache/karaf/config/command/ConfigPropertyCommandSupport.java?rev=1325692&r1=1325691&r2=1325692&view=diff
==============================================================================
--- karaf/trunk/config/command/src/main/java/org/apache/karaf/config/command/ConfigPropertyCommandSupport.java (original)
+++ karaf/trunk/config/command/src/main/java/org/apache/karaf/config/command/ConfigPropertyCommandSupport.java Fri Apr 13 09:54:53 2012
@@ -29,10 +29,6 @@ public abstract class ConfigPropertyComm
     @Option(name = "-p", aliases = "--pid", description = "The configuration pid", required = false, multiValued = false)
     protected String pid;
 
-    @Option(name = "-b", aliases = { "--bypass-storage" }, multiValued = false, required = false, description = "Do not store the configuration in a properties file, but feed it directly to ConfigAdmin")
-    protected boolean bypassStorage;
-
-
     @SuppressWarnings("rawtypes")
     protected Object doExecute() throws Exception {
         Dictionary props = getEditedProps();
@@ -44,7 +40,7 @@ public abstract class ConfigPropertyComm
             }
             propertyAction(props);
             if(requiresUpdate(pid)) {
-                this.configRepository.update(pid, props, bypassStorage);
+                this.configRepository.update(pid, props);
             }
         }
         return null;

Modified: karaf/trunk/config/command/src/main/java/org/apache/karaf/config/command/UpdateCommand.java
URL: http://svn.apache.org/viewvc/karaf/trunk/config/command/src/main/java/org/apache/karaf/config/command/UpdateCommand.java?rev=1325692&r1=1325691&r2=1325692&view=diff
==============================================================================
--- karaf/trunk/config/command/src/main/java/org/apache/karaf/config/command/UpdateCommand.java (original)
+++ karaf/trunk/config/command/src/main/java/org/apache/karaf/config/command/UpdateCommand.java Fri Apr 13 09:54:53 2012
@@ -19,14 +19,10 @@ package org.apache.karaf.config.command;
 import java.util.Dictionary;
 
 import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
 
 @Command(scope = "config", name = "update", description = "Saves and propagates changes from the configuration being edited.")
 public class UpdateCommand extends ConfigCommandSupport {
 
-    @Option(name = "-b", aliases = { "--bypass-storage" }, multiValued = false, required = false, description = "Do not store the configuration in a properties file, but feed it directly to ConfigAdmin")
-    protected boolean bypassStorage;
-
     @SuppressWarnings("rawtypes")
     protected Object doExecute() throws Exception {
         Dictionary props = getEditedProps();
@@ -36,7 +32,7 @@ public class UpdateCommand extends Confi
         }
 
         String pid = (String) this.session.get(PROPERTY_CONFIG_PID);
-        this.configRepository.update(pid, props, bypassStorage);
+        this.configRepository.update(pid, props);
         this.session.put(PROPERTY_CONFIG_PID, null);
         this.session.put(PROPERTY_CONFIG_PROPS, null);
         return null;

Modified: karaf/trunk/config/command/src/test/java/org/apache/karaf/config/command/EditCommandTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/config/command/src/test/java/org/apache/karaf/config/command/EditCommandTest.java?rev=1325692&r1=1325691&r2=1325692&view=diff
==============================================================================
--- karaf/trunk/config/command/src/test/java/org/apache/karaf/config/command/EditCommandTest.java (original)
+++ karaf/trunk/config/command/src/test/java/org/apache/karaf/config/command/EditCommandTest.java Fri Apr 13 09:54:53 2012
@@ -55,7 +55,7 @@ public class EditCommandTest extends Tes
         command.setBundleContext(context);
         
         admin = createMock(ConfigurationAdmin.class);
-        command.setConfigRepository(new ConfigRepositoryImpl(null, admin, null));
+        command.setConfigRepository(new ConfigRepositoryImpl(admin));
         expect(context.getBundle(0)).andReturn(null).anyTimes();
 
         replay(context);

Modified: karaf/trunk/config/command/src/test/java/org/apache/karaf/config/command/UpdateCommandTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/config/command/src/test/java/org/apache/karaf/config/command/UpdateCommandTest.java?rev=1325692&r1=1325691&r2=1325692&view=diff
==============================================================================
--- karaf/trunk/config/command/src/test/java/org/apache/karaf/config/command/UpdateCommandTest.java (original)
+++ karaf/trunk/config/command/src/test/java/org/apache/karaf/config/command/UpdateCommandTest.java Fri Apr 13 09:54:53 2012
@@ -52,7 +52,7 @@ public class UpdateCommandTest extends T
         command.setBundleContext(context);
 
         admin = createMock(ConfigurationAdmin.class);
-        command.setConfigRepository(new ConfigRepositoryImpl(null, admin, null));
+        command.setConfigRepository(new ConfigRepositoryImpl(admin));
         expect(context.getBundle(0)).andReturn(null).anyTimes();
 
         replay(context);

Modified: karaf/trunk/config/core/pom.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/config/core/pom.xml?rev=1325692&r1=1325691&r2=1325692&view=diff
==============================================================================
--- karaf/trunk/config/core/pom.xml (original)
+++ karaf/trunk/config/core/pom.xml Fri Apr 13 09:54:53 2012
@@ -38,18 +38,6 @@
     </properties>
 
     <dependencies>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <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.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
@@ -95,9 +83,10 @@
                 <artifactId>maven-bundle-plugin</artifactId>
                 <configuration>
                     <instructions>
-                        <Export-Package>org.apache.karaf.config.core</Export-Package>
+                        <Export-Package>
+                            org.apache.karaf.config.core
+                        </Export-Package>
                         <Private-Package>
-                            org.apache.felix.utils.properties,
                             org.apache.karaf.config.core.impl
                         </Private-Package>
                     </instructions>

Modified: karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/ConfigRepository.java
URL: http://svn.apache.org/viewvc/karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/ConfigRepository.java?rev=1325692&r1=1325691&r2=1325692&view=diff
==============================================================================
--- karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/ConfigRepository.java (original)
+++ karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/ConfigRepository.java Fri Apr 13 09:54:53 2012
@@ -28,16 +28,6 @@ public interface ConfigRepository {
      * Saves config to storage or ConfigurationAdmin.
      * @param pid
      * @param props
-     * @param bypassStorage
-     * @throws IOException
-     */
-    @SuppressWarnings("rawtypes")
-    void update(String pid, Dictionary props, boolean bypassStorage) throws IOException;
-
-    /**
-     * Saves config to storage or ConfigurationAdmin.
-     * @param pid
-     * @param props
      * @throws IOException
      */
     @SuppressWarnings("rawtypes")

Modified: karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/impl/Config.java
URL: http://svn.apache.org/viewvc/karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/impl/Config.java?rev=1325692&r1=1325691&r2=1325692&view=diff
==============================================================================
--- karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/impl/Config.java (original)
+++ karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/impl/Config.java Fri Apr 13 09:54:53 2012
@@ -109,7 +109,7 @@ public class Config extends StandardMBea
     public void deleteProperty(String pid, String key) throws Exception {
         Dictionary dictionary = getConfigProperties(pid);
         dictionary.remove(key);
-        configRepo.update(pid, dictionary, false);
+        configRepo.update(pid, dictionary);
     }
 
     @SuppressWarnings({"rawtypes", "unchecked"})
@@ -123,14 +123,14 @@ public class Config extends StandardMBea
         } else {
             throw new IllegalStateException("Current value is not a String");
         }
-        configRepo.update(pid, dictionary, false);
+        configRepo.update(pid, dictionary);
     }
 
     @SuppressWarnings({"rawtypes", "unchecked"})
     public void setProperty(String pid, String key, String value) throws Exception {
         Dictionary dictionary = getConfigProperties(pid);
         dictionary.put(key, value);
-        configRepo.update(pid, dictionary, false);
+        configRepo.update(pid, dictionary);
     }
 
     public void setConfigRepo(ConfigRepository configRepo) {

Modified: karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/impl/ConfigRepositoryImpl.java
URL: http://svn.apache.org/viewvc/karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/impl/ConfigRepositoryImpl.java?rev=1325692&r1=1325691&r2=1325692&view=diff
==============================================================================
--- karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/impl/ConfigRepositoryImpl.java (original)
+++ karaf/trunk/config/core/src/main/java/org/apache/karaf/config/core/impl/ConfigRepositoryImpl.java Fri Apr 13 09:54:53 2012
@@ -18,70 +18,21 @@ package org.apache.karaf.config.core.imp
 
 import java.io.File;
 import java.io.IOException;
-import java.net.URI;
-import java.net.URL;
-import java.util.ArrayList;
 import java.util.Dictionary;
-import java.util.Enumeration;
 import java.util.Hashtable;
-import java.util.List;
 
-import org.apache.felix.fileinstall.ArtifactInstaller;
-import org.apache.felix.utils.properties.Properties;
 import org.apache.karaf.config.core.ConfigRepository;
-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 ConfigRepositoryImpl implements ConfigRepository {
-    private static final Logger LOG = LoggerFactory.getLogger(ConfigRepositoryImpl.class);
-    private static final String FILEINSTALL_FILE_NAME="felix.fileinstall.filename";
-
-    private static final String PID_FILTER="(service.pid=%s*)";
-    private static final String FILE_PREFIX="file:";
-    private static final String CONFIG_SUFFIX=".cfg";
-    private static final String FACTORY_SEPARATOR = "-";
-
     private ConfigurationAdmin configAdmin;
     
     private File storage;
-    private List<ArtifactInstaller> artifactInstallers;
 
-    public ConfigRepositoryImpl(File storage, ConfigurationAdmin configAdmin, List<ArtifactInstaller> artifactInstallers) {
-        this.storage = storage;
+    public ConfigRepositoryImpl(ConfigurationAdmin configAdmin) {
         this.configAdmin = configAdmin;
-        this.artifactInstallers = artifactInstallers;
-    }
-    
-    /**
-     * <p>
-     * Returns the Configuration object of the given (felix fileinstall) file name.
-     * </p>
-     * @param fileName
-     * @return
-     */
-    @SuppressWarnings("rawtypes")
-    public Configuration findConfigurationByFileName(String fileName) throws IOException, InvalidSyntaxException {
-        if (fileName != null && fileName.contains(FACTORY_SEPARATOR)) {
-            String factoryPid = fileName.substring(0, fileName.lastIndexOf(FACTORY_SEPARATOR));
-            String absoluteFileName = FILE_PREFIX +storage.getAbsolutePath() + File.separator + fileName + CONFIG_SUFFIX;
-            Configuration[] configurations = this.configAdmin.listConfigurations(String.format(PID_FILTER, factoryPid));
-            if (configurations != null) {
-                for (Configuration configuration : configurations) {
-                    Dictionary dictionary = configuration.getProperties();
-                    if (dictionary != null) {
-                        String fileInstallFileName = (String) dictionary.get(FILEINSTALL_FILE_NAME);
-                        if (absoluteFileName.equals(fileInstallFileName)) {
-                            return configuration;
-                        }
-                    }
-                }
-            }
-        }
-        return null;
     }
 
     /* (non-Javadoc)
@@ -89,107 +40,7 @@ public class ConfigRepositoryImpl implem
      */
     @Override
     @SuppressWarnings("rawtypes")
-    public void update(String pid, Dictionary props, boolean bypassStorage) throws IOException {
-        if (!bypassStorage && storage != null) {
-            persistConfiguration(pid, props);
-        } else {
-            updateConfiguration(pid, props);
-        }
-    }
-    
-    /* (non-Javadoc)
-     * @see org.apache.karaf.shell.config.impl.ConfigRepository#update(java.lang.String, java.util.Dictionary)
-     */
-    @Override
-    @SuppressWarnings("rawtypes")
     public void update(String pid, Dictionary props) throws IOException {
-        update(pid, props, false);
-    }
-
-    /**
-     * Persists configuration to storage.
-     * @param pid
-     * @param props
-     * @throws IOException
-     */
-    @SuppressWarnings("rawtypes")
-    private void persistConfiguration(String pid, Dictionary props) throws IOException {
-        File storageFile = new File(storage, pid + ".cfg");
-        Configuration cfg = this.configAdmin.getConfiguration(pid, null);
-        if (cfg != null && cfg.getProperties() != null) {
-            Object val = cfg.getProperties().get(FILEINSTALL_FILE_NAME);
-            try {
-                if (val instanceof URL) {
-                    storageFile = new File(((URL) val).toURI());
-                }
-                if (val instanceof URI) {
-                    storageFile = new File((URI) val);
-                }
-                if (val instanceof String) {
-                    storageFile = new File(new URL((String) val).toURI());
-                }
-            } catch (Exception e) {
-                throw new IOException(e);
-            }
-        }
-        Properties p = new Properties(storageFile);
-        for (Enumeration keys = props.keys(); keys.hasMoreElements();) {
-            Object key = keys.nextElement();
-            if (shouldPersist(key)) {
-                p.put((String) key, (String) props.get(key));
-            }
-        }
-        // remove "removed" properties from the file
-        ArrayList<String> propertiesToRemove = new ArrayList<String>();
-        for (Object key : p.keySet()) {
-            if (props.get(key) == null
-                    && shouldPersist(key)) {
-                propertiesToRemove.add(key.toString());
-            }
-        }
-        for (String key : propertiesToRemove) {
-            p.remove(key);
-        }
-        // 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) {
-        return !Constants.SERVICE_PID.equals(key)
-                && !ConfigurationAdmin.SERVICE_FACTORYPID.equals(key)
-                && !FILEINSTALL_FILE_NAME.equals(key);
-    }
-
-    /**
-     * Updates the configuration to the {@link ConfigurationAdmin} service.
-     * @param pid
-     * @param props
-     * @throws IOException
-     */
-    @SuppressWarnings("rawtypes")
-    public void updateConfiguration(String pid, Dictionary props) throws IOException {
         Configuration cfg = this.configAdmin.getConfiguration(pid, null);
         if (cfg.getProperties() == null) {
             PidParts pidParts = parsePid(pid);

Modified: karaf/trunk/config/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/config/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml?rev=1325692&r1=1325691&r2=1325692&view=diff
==============================================================================
--- karaf/trunk/config/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml (original)
+++ karaf/trunk/config/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml Fri Apr 13 09:54:53 2012
@@ -24,20 +24,10 @@
 
     <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]" />
 
-    <cm:property-placeholder persistent-id="org.apache.karaf.config">
-        <cm:default-properties>
-            <cm:property name="storage" value="$[karaf.base]/etc/"/>
-        </cm:default-properties>
-    </cm:property-placeholder>
-
     <bean id="configRepo" class="org.apache.karaf.config.core.impl.ConfigRepositoryImpl">
-        <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"  />
 
     <service interface="org.apache.karaf.config.core.ConfigRepository" ref="configRepo"/>