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));
         }
     }
 }

Reply via email to