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"/>