Author: angelo.vandersijpt at luminis.eu
Date: Thu Oct 14 16:59:38 2010
New Revision: 168
Log:
AMDATU-103 Refactored CassandraConfigurationService to be a ManagedService.
Also, used the File API for file operations.
Modified:
trunk/platform-bundles/cassandra-application/src/main/java/org/amdatu/platform/cassandra/application/CassandraConfigurationService.java
trunk/platform-bundles/cassandra-application/src/main/java/org/amdatu/platform/cassandra/application/osgi/Activator.java
trunk/platform-bundles/cassandra-application/src/main/java/org/amdatu/platform/cassandra/application/service/CassandraConfigurationServiceImpl.java
Modified:
trunk/platform-bundles/cassandra-application/src/main/java/org/amdatu/platform/cassandra/application/CassandraConfigurationService.java
==============================================================================
---
trunk/platform-bundles/cassandra-application/src/main/java/org/amdatu/platform/cassandra/application/CassandraConfigurationService.java
(original)
+++
trunk/platform-bundles/cassandra-application/src/main/java/org/amdatu/platform/cassandra/application/CassandraConfigurationService.java
Thu Oct 14 16:59:38 2010
@@ -30,4 +30,15 @@
* The filename of the log4j properties file used by Cassandra.
*/
public static final String LOG4J_CONF_TARGET = "log4j.properties";
+
+ /**
+ * The service's configuration PID
+ */
+ public static final String PID =
"org.amdatu.platform.cassandra.application";
+
+ /**
+ * Configuration key for the working directory to use for Cassandra
+ */
+ public static final String CONFIG_WORKDIR = "workdir";
+
}
Modified:
trunk/platform-bundles/cassandra-application/src/main/java/org/amdatu/platform/cassandra/application/osgi/Activator.java
==============================================================================
---
trunk/platform-bundles/cassandra-application/src/main/java/org/amdatu/platform/cassandra/application/osgi/Activator.java
(original)
+++
trunk/platform-bundles/cassandra-application/src/main/java/org/amdatu/platform/cassandra/application/osgi/Activator.java
Thu Oct 14 16:59:38 2010
@@ -45,7 +45,7 @@
.setInterface(CassandraConfigurationService.class.getName(),
null)
.add(createServiceDependency().setService(LogService.class).setRequired(true))
.add(createServiceDependency().setService(ConfigTemplateManager.class).setRequired(true))
-
.add(createServiceDependency().setService(ConfigurationAdmin.class).setRequired(true)));
+
.add(createConfigurationDependency().setPid(CassandraConfigurationServiceImpl.PID)));
// Register the Cassandra daemon service
manager.add(
Modified:
trunk/platform-bundles/cassandra-application/src/main/java/org/amdatu/platform/cassandra/application/service/CassandraConfigurationServiceImpl.java
==============================================================================
---
trunk/platform-bundles/cassandra-application/src/main/java/org/amdatu/platform/cassandra/application/service/CassandraConfigurationServiceImpl.java
(original)
+++
trunk/platform-bundles/cassandra-application/src/main/java/org/amdatu/platform/cassandra/application/service/CassandraConfigurationServiceImpl.java
Thu Oct 14 16:59:38 2010
@@ -19,6 +19,7 @@
import java.io.File;
import java.io.IOException;
import java.net.URL;
+import java.util.Dictionary;
import org.amdatu.platform.cassandra.application.CassandraConfigurationService;
import org.amdatu.platform.configtemplatemanager.ConfigTemplateManager;
@@ -27,16 +28,16 @@
import org.osgi.framework.BundleContext;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedService;
import org.osgi.service.log.LogService;
/**
* This class provides utility methods to prepare Cassandra configuration
before starting it.
* @author ivol
*/
-public class CassandraConfigurationServiceImpl implements
CassandraConfigurationService {
+public class CassandraConfigurationServiceImpl implements
CassandraConfigurationService, ManagedService {
// Statics
- private static final String CONFIG_PID =
"org.amdatu.platform.cassandra.application";
- private static final String CONFIG_WORKDIR = "workdir";
private static final String STORAGE_CONF_SOURCE = "conf/storage-conf.xml";
private static final String LOG4J_CONF_SOURCE = "conf/log4j.properties";
@@ -47,7 +48,7 @@
private volatile ConfigurationAdmin m_configurationAdmin;
// Private members
- private String m_workDir;
+ private File m_workDir;
/**
* The init() method is invoked by the Felix dependency manager. It allows
us to initialize our service. In this
@@ -56,13 +57,10 @@
public void init() {
m_logService.log(LogService.LOG_DEBUG, "Preparing Cassandra
configuration");
- // Initialize work directory
- initializeWorkdir();
-
// Initialize storage configuration
- // Load the URL of the sotrage-conf.xml and write it file using the
config template
+ // Load the URL of the storage-conf.xml and write it file using the
config template
// manager, which automatically replaces configuration entries in that
file
- File storageConfigFile = new File(m_workDir + File.separator +
CassandraConfigurationService.STORAGE_CONF_XML);
+ File storageConfigFile = new File(m_workDir,
CassandraConfigurationService.STORAGE_CONF_XML);
Bundle bundle = m_bundleContext.getBundle();
URL url = bundle.getResource(STORAGE_CONF_SOURCE);
try {
@@ -70,13 +68,14 @@
// Only write this file if it does not yet exist
m_configTemplateManager.writeConfiguration(url,
storageConfigFile);
}
+ // Cassandra uses this system property to find its storage
location.
System.setProperty("storage-config",
storageConfigFile.getParent());
} catch (IOException e) {
m_logService.log(LogService.LOG_ERROR, "Could not replace
configuration entries in storage-conf.xml", e);
}
// Initialize log4j
- File log4jPropertiesFile = new File(m_workDir + File.separator +
CassandraConfigurationService.LOG4J_CONF_TARGET);
+ File log4jPropertiesFile = new File(m_workDir,
CassandraConfigurationService.LOG4J_CONF_TARGET);
url = bundle.getResource(LOG4J_CONF_SOURCE);
try {
m_configTemplateManager.writeConfiguration(url,
log4jPropertiesFile);
@@ -89,17 +88,13 @@
m_logService.log(LogService.LOG_DEBUG, "Cassandra configuration
preparation completed");
}
- private void initializeWorkdir() {
- try {
- // Initialize the work directory
- String workBaseDir = System.getProperty("user.dir") +
File.separator + "work";
- Configuration config =
m_configurationAdmin.getConfiguration(CONFIG_PID);
- if (config != null) {
- String workDir =
config.getProperties().get(CONFIG_WORKDIR).toString();
- m_workDir = workBaseDir + File.separator + workDir;
+ public void updated(Dictionary dictionary) throws ConfigurationException {
+ if (dictionary != null) {
+ if (dictionary.get(CONFIG_WORKDIR) == null) {
+ throw new ConfigurationException("Missing configuration key",
CONFIG_WORKDIR);
}
- } catch (IOException e) {
- m_logService.log(LogService.LOG_ERROR, "Could not initialize
Cassandra work directory", e);
+ File workBaseDir = new File(System.getProperty("user.dir"),
"work");
+ m_workDir = new File(workBaseDir, (String)
dictionary.get(CONFIG_WORKDIR));
}
}
}