You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2013/04/15 12:41:45 UTC

svn commit: r1467932 - in /qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server: ./ configuration/store/

Author: robbie
Date: Mon Apr 15 10:41:44 2013
New Revision: 1467932

URL: http://svn.apache.org/r1467932
Log:
QPID-4742: add option to create a copy of the initial config file, either at a specified location or as initial-config.json in the current directory

Added:
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreUtil.java
Modified:
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/BrokerOptions.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/BrokerOptions.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/BrokerOptions.java?rev=1467932&r1=1467931&r2=1467932&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/BrokerOptions.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/BrokerOptions.java Mon Apr 15 10:41:44 2013
@@ -24,11 +24,11 @@ import java.io.File;
 
 import org.apache.qpid.server.configuration.BrokerProperties;
 import org.apache.qpid.server.configuration.ConfigurationEntryStore;
-import org.apache.qpid.server.configuration.store.JsonConfigurationEntryStore;
 import org.apache.qpid.server.configuration.store.MemoryConfigurationEntryStore;
 
 public class BrokerOptions
 {
+    public static final String DEFAULT_INITIAL_CONFIG_NAME = "initial-config.json";
     public static final String DEFAULT_STORE_TYPE = "json";
     public static final String DEFAULT_CONFIG_NAME_PREFIX = "config";
     public static final String DEFAULT_LOG_CONFIG_FILE = "etc/log4j.xml";

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java?rev=1467932&r1=1467931&r2=1467932&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java Mon Apr 15 10:41:44 2013
@@ -20,6 +20,8 @@
  */
 package org.apache.qpid.server;
 
+import java.io.File;
+
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
@@ -30,6 +32,7 @@ import org.apache.commons.cli.PosixParse
 import org.apache.log4j.Logger;
 import org.apache.qpid.common.QpidProperties;
 import org.apache.qpid.framing.ProtocolVersion;
+import org.apache.qpid.server.configuration.store.ConfigurationEntryStoreUtil;
 
 /**
  * Main entry point for AMQPD.
@@ -53,6 +56,10 @@ public class Main
     private static final Option OPTION_OVERWRITE_CONFIGURATION_STORE = OptionBuilder.withDescription("overwrite the broker configuration store with the current initial configuration")
             .withLongOpt("overwrite-store").create("os");
 
+    private static final Option OPTION_CREATE_INITIAL_CONFIG = OptionBuilder.withArgName("path").hasOptionalArg().withDescription("create a copy of the initial config file, either to an" +
+            " optionally specified file path, or as " + BrokerOptions.DEFAULT_INITIAL_CONFIG_NAME + " in the current directory")
+            .withLongOpt("create-initial-config").create("cic");
+
     private static final Option OPTION_LOG_CONFIG_FILE =
             OptionBuilder.withArgName("file").hasArg()
                     .withDescription("use the specified log4j xml configuration file. By "
@@ -64,7 +71,7 @@ public class Main
                     .withDescription("monitor the log file configuration file for changes. Units are seconds. "
                                      + "Zero means do not check for changes.").withLongOpt("logwatch").create("w");
 
-    private static final Option OPTION_MANAGEMENT_MODE = OptionBuilder.withDescription("start broker in a management mode")
+    private static final Option OPTION_MANAGEMENT_MODE = OptionBuilder.withDescription("start broker in management mode, disabling the AMQP ports")
             .withLongOpt("management-mode").create("mm");
     private static final Option OPTION_MM_QUIESCE_VHOST = OptionBuilder.withDescription("make virtualhosts stay in the quiesced state during management mode.")
             .withLongOpt("management-mode-quiesce-virtualhosts").create("mmqv");
@@ -84,6 +91,7 @@ public class Main
         OPTIONS.addOption(OPTION_CONFIGURATION_STORE_PATH);
         OPTIONS.addOption(OPTION_CONFIGURATION_STORE_TYPE);
         OPTIONS.addOption(OPTION_OVERWRITE_CONFIGURATION_STORE);
+        OPTIONS.addOption(OPTION_CREATE_INITIAL_CONFIG);
         OPTIONS.addOption(OPTION_LOG_CONFIG_FILE);
         OPTIONS.addOption(OPTION_LOG_WATCH);
         OPTIONS.addOption(OPTION_INITIAL_CONFIGURATION_PATH);
@@ -146,11 +154,38 @@ public class Main
 
     protected void execute() throws Exception
     {
+        BrokerOptions options = new BrokerOptions();
+        String initialConfigLocation = _commandLine.getOptionValue(OPTION_INITIAL_CONFIGURATION_PATH.getOpt());
+        if (initialConfigLocation != null)
+        {
+            options.setInitialConfigurationLocation(initialConfigLocation);
+        }
+
+        //process the remaining options
         if (_commandLine.hasOption(OPTION_HELP.getOpt()))
         {
             final HelpFormatter formatter = new HelpFormatter();
             formatter.printHelp("Qpid", OPTIONS, true);
         }
+        else if (_commandLine.hasOption(OPTION_CREATE_INITIAL_CONFIG.getOpt()))
+        {
+            File destinationFile = null;
+
+            String destinationOption = _commandLine.getOptionValue(OPTION_CREATE_INITIAL_CONFIG.getOpt());
+            if (destinationOption != null)
+            {
+                destinationFile = new File(destinationOption);
+            }
+            else
+            {
+                destinationFile = new File(System.getProperty("user.dir"), BrokerOptions.DEFAULT_INITIAL_CONFIG_NAME);
+            }
+
+            ConfigurationEntryStoreUtil util = new ConfigurationEntryStoreUtil();
+            util.copyInitialConfigFile(options.getInitialConfigurationLocation(), destinationFile);
+
+            System.out.println("Initial config written to: " + destinationFile.getAbsolutePath());
+        }
         else if (_commandLine.hasOption(OPTION_VERSION.getOpt()))
         {
             final StringBuilder protocol = new StringBuilder("AMQP version(s) [major.minor]: ");
@@ -172,12 +207,12 @@ public class Main
         }
         else
         {
-            BrokerOptions options = new BrokerOptions();
             String configurationStore = _commandLine.getOptionValue(OPTION_CONFIGURATION_STORE_PATH.getOpt());
             if (configurationStore != null)
             {
                 options.setConfigurationStoreLocation(configurationStore);
             }
+
             String configurationStoreType = _commandLine.getOptionValue(OPTION_CONFIGURATION_STORE_TYPE.getOpt());
             if (configurationStoreType != null)
             {
@@ -196,12 +231,6 @@ public class Main
                 options.setLogConfigFile(logConfig);
             }
 
-            String initialConfigLocation = _commandLine.getOptionValue(OPTION_INITIAL_CONFIGURATION_PATH.getOpt());
-            if (initialConfigLocation != null)
-            {
-                options.setInitialConfigurationLocation(initialConfigLocation);
-            }
-
             boolean overwriteConfigurationStore = _commandLine.hasOption(OPTION_OVERWRITE_CONFIGURATION_STORE.getOpt());
             options.setOverwriteConfigurationStore(overwriteConfigurationStore);
 

Added: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreUtil.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreUtil.java?rev=1467932&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreUtil.java (added)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreUtil.java Mon Apr 15 10:41:44 2013
@@ -0,0 +1,91 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.configuration.store;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.qpid.server.configuration.IllegalConfigurationException;
+import org.apache.qpid.util.FileUtils;
+
+public class ConfigurationEntryStoreUtil
+{
+    public void copyInitialConfigFile(String initialConfigLocation, File destinationFile)
+    {
+        URL initialStoreURL = toURL(initialConfigLocation);
+        InputStream in =  null;
+        try
+        {
+            in = initialStoreURL.openStream();
+            FileUtils.copy(in, destinationFile);
+        }
+        catch (IOException e)
+        {
+            throw new IllegalConfigurationException("Cannot create file " + destinationFile + " by copying initial config from " + initialConfigLocation , e);
+        }
+        finally
+        {
+            if (in != null)
+            {
+                try
+                {
+                    in.close();
+                }
+                catch (IOException e)
+                {
+                    throw new IllegalConfigurationException("Cannot close initial config input stream: " + initialConfigLocation , e);
+                }
+            }
+        }
+    }
+
+    public URL toURL(String location)
+    {
+        URL url = null;
+        try
+        {
+            url = new URL(location);
+        }
+        catch (MalformedURLException e)
+        {
+            File locationFile = new File(location);
+            url = fileToURL(locationFile);
+        }
+        return url;
+    }
+
+    protected URL fileToURL(File storeFile)
+    {
+        URL storeURL = null;
+        try
+        {
+            storeURL = storeFile.toURI().toURL();
+        }
+        catch (MalformedURLException e)
+        {
+            throw new IllegalConfigurationException("Cannot create URL for file " + storeFile, e);
+        }
+        return storeURL;
+    }
+}

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java?rev=1467932&r1=1467931&r2=1467932&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java Mon Apr 15 10:41:44 2013
@@ -1,9 +1,6 @@
 package org.apache.qpid.server.configuration.store;
 
 import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
@@ -11,7 +8,6 @@ import java.util.UUID;
 import org.apache.qpid.server.configuration.ConfigurationEntry;
 import org.apache.qpid.server.configuration.ConfigurationEntryStore;
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
-import org.apache.qpid.util.FileUtils;
 
 public class JsonConfigurationEntryStore extends MemoryConfigurationEntryStore
 {
@@ -46,7 +42,7 @@ public class JsonConfigurationEntryStore
         {
            initialiseStore(_storeFile, initialStore);
         }
-        load(fileToURL(_storeFile));
+        load(getConfigurationEntryStoreUtil().fileToURL(_storeFile));
         if(isGeneratedObjectIdDuringLoad())
         {
             saveAsTree(_storeFile);
@@ -91,7 +87,6 @@ public class JsonConfigurationEntryStore
         return "JsonConfigurationEntryStore [_storeFile=" + _storeFile + ", _rootId=" + getRootEntry().getId() + "]";
     }
 
-
     private void initialiseStore(File storeFile, ConfigurationEntryStore initialStore)
     {
         createFileIfNotExist(storeFile);
@@ -103,7 +98,7 @@ public class JsonConfigurationEntryStore
         {
             if (initialStore instanceof MemoryConfigurationEntryStore && initialStore.getStoreLocation() != null)
             {
-                copyInitialStoreFile(initialStore.getStoreLocation(), storeFile);
+                getConfigurationEntryStoreUtil().copyInitialConfigFile(initialStore.getStoreLocation(), storeFile);
             }
             else
             {
@@ -115,33 +110,4 @@ public class JsonConfigurationEntryStore
         }
     }
 
-    private void copyInitialStoreFile(String initialStoreLocation, File storeFile)
-    {
-        URL initialStoreURL = toURL(initialStoreLocation);
-        InputStream in =  null;
-        try
-        {
-            in = initialStoreURL.openStream();
-            FileUtils.copy(in, storeFile);
-        }
-        catch (IOException e)
-        {
-            throw new IllegalConfigurationException("Cannot create store file " + storeFile + " by copying initial store from " + initialStoreLocation , e);
-        }
-        finally
-        {
-            if (in != null)
-            {
-                try
-                {
-                    in.close();
-                }
-                catch (IOException e)
-                {
-                    throw new IllegalConfigurationException("Cannot close initial store input stream: " + initialStoreLocation , e);
-                }
-            }
-        }
-    }
-
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java?rev=1467932&r1=1467931&r2=1467932&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java Mon Apr 15 10:41:44 2013
@@ -26,7 +26,6 @@ import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -71,6 +70,7 @@ public class MemoryConfigurationEntrySto
     private final ObjectMapper _objectMapper;
     private final Map<UUID, ConfigurationEntry> _entries;
     private final Map<String, Class<? extends ConfiguredObject>> _relationshipClasses;
+    private final ConfigurationEntryStoreUtil _util = new ConfigurationEntryStoreUtil();
 
     private String _storeLocation;
     private UUID _rootId;
@@ -119,7 +119,7 @@ public class MemoryConfigurationEntrySto
         else
         {
             _storeLocation = initialStoreLocation;
-            load(toURL(_storeLocation));
+            load(_util.toURL(_storeLocation));
         }
     }
 
@@ -289,21 +289,6 @@ public class MemoryConfigurationEntrySto
         }
     }
 
-    protected URL toURL(String location)
-    {
-        URL url = null;
-        try
-        {
-            url = new URL(location);
-        }
-        catch (MalformedURLException e)
-        {
-            File locationFile = new File(location);
-            url = fileToURL(locationFile);
-        }
-        return url;
-    }
-
     protected void createFileIfNotExist(File file)
     {
         File parent = file.getParentFile();
@@ -349,20 +334,6 @@ public class MemoryConfigurationEntrySto
         }
     }
 
-    protected URL fileToURL(File storeFile)
-    {
-        URL storeURL = null;
-        try
-        {
-            storeURL = storeFile.toURI().toURL();
-        }
-        catch (MalformedURLException e)
-        {
-            throw new IllegalConfigurationException("Cannot create URL for file " + storeFile, e);
-        }
-        return storeURL;
-    }
-
     private void loadFromJson(String json)
     {
         ByteArrayInputStream bais = null;
@@ -691,4 +662,9 @@ public class MemoryConfigurationEntrySto
     {
         return _generatedObjectIdDuringLoad;
     }
+
+    protected ConfigurationEntryStoreUtil getConfigurationEntryStoreUtil()
+    {
+        return _util;
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org