You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2014/08/18 02:32:45 UTC

svn commit: r1618531 - in /qpid/trunk/qpid/java: broker-codegen/src/main/java/org/apache/qpid/server/model/ broker-core/src/main/java/org/apache/qpid/server/ broker-core/src/main/java/org/apache/qpid/server/model/ broker-core/src/main/java/org/apache/q...

Author: rgodfrey
Date: Mon Aug 18 00:32:44 2014
New Revision: 1618531

URL: http://svn.apache.org/r1618531
Log:
QPID-6011 : [Java Broker] provide a mechanism for disabling plugins and implementation types

Added:
    qpid/trunk/qpid/java/broker-core/src/main/resources/system.properties
Modified:
    qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/BrokerOptions.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFactoryImpl.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/PluggableFactoryLoader.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/QpidServiceLoader.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MessageConverterRegistry.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactory.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageMetaDataTypeRegistry.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/PluginClassProviderAction.java
    qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java

Modified: qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java?rev=1618531&r1=1618530&r2=1618531&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java (original)
+++ qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java Mon Aug 18 00:32:44 2014
@@ -26,16 +26,21 @@ import java.io.PrintWriter;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 import javax.annotation.processing.AbstractProcessor;
 import javax.annotation.processing.RoundEnvironment;
 import javax.lang.model.SourceVersion;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ExecutableElement;
 import javax.lang.model.element.PackageElement;
 import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.TypeMirror;
 import javax.lang.model.util.Elements;
 import javax.tools.Diagnostic;
 import javax.tools.JavaFileObject;
@@ -49,6 +54,9 @@ public class ConfiguredObjectRegistratio
 
     private Map<String, Set<String>> _managedObjectClasses = new HashMap<>();
 
+    private Map<String, String> _typeMap = new HashMap<>();
+    private Map<String, String> _categoryMap = new HashMap<>();
+
     @Override
     public SourceVersion getSupportedSourceVersion()
     {
@@ -78,14 +86,31 @@ public class ConfiguredObjectRegistratio
                 {
                     PackageElement packageElement = elementUtils.getPackageOf(e);
                     String packageName = packageElement.getQualifiedName().toString();
-
+                    String className = e.getSimpleName().toString();
+                    for(AnnotationMirror a : e.getAnnotationMirrors())
+                    {
+                        if(a.getAnnotationType().asElement().equals(annotationElement))
+                        {
+                            for(Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : a.getElementValues().entrySet())
+                            {
+                                if(entry.getKey().getSimpleName().toString().equals("type"))
+                                {
+                                    _typeMap.put(packageName + "." + className, (String) entry.getValue().getValue());
+                                    processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "looking for " + packageName + "." + className);
+                                    _categoryMap.put(packageName + "." + className, getCategory((TypeElement)e));
+                                    break;
+                                }
+                            }
+                            break;
+                        }
+                    }
                     Set<String> classNames = _managedObjectClasses.get(packageName);
                     if (classNames == null)
                     {
                         classNames = new HashSet<>();
                         _managedObjectClasses.put(packageName, classNames);
                     }
-                    classNames.add(e.getSimpleName().toString());
+                    classNames.add(className);
                 }
             }
             for (Map.Entry<String, Set<String>> entry : _managedObjectClasses.entrySet())
@@ -93,6 +118,8 @@ public class ConfiguredObjectRegistratio
                 generateRegistrationFile(entry.getKey(), entry.getValue());
             }
             _managedObjectClasses.clear();
+            _typeMap.clear();
+            _categoryMap.clear();
         }
         catch (Exception e)
         {
@@ -102,6 +129,63 @@ public class ConfiguredObjectRegistratio
         return false;
     }
 
+    private String getCategory(final TypeElement e)
+    {
+        Elements elementUtils = processingEnv.getElementUtils();
+        TypeElement annotationElement = elementUtils.getTypeElement(MANAGED_OBJECT_CANONICAL_NAME);
+        String category = null;
+        List<? extends AnnotationMirror> annotationMirrors = e.getAnnotationMirrors();
+        if(annotationMirrors != null)
+        {
+            for (AnnotationMirror a : annotationMirrors)
+            {
+                if (a.getAnnotationType().asElement().equals(annotationElement))
+                {
+                    category = e.getSimpleName().toString().toLowerCase();
+
+                    for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : a.getElementValues()
+                            .entrySet())
+                    {
+                        if (entry.getKey().getSimpleName().toString().equals("category"))
+                        {
+                            if (!Boolean.TRUE.equals(entry.getValue().getValue()))
+                            {
+                                category = null;
+                            }
+
+                            break;
+                        }
+                    }
+                    break;
+                }
+            }
+        }
+
+        if (category == null)
+        {
+            for (TypeMirror interfaceMirror : e.getInterfaces())
+            {
+                category = getCategory((TypeElement) processingEnv.getTypeUtils().asElement(interfaceMirror));
+                if (category != null)
+                {
+                    break;
+                }
+            }
+        }
+
+        if (category == null && e.getSuperclass() != null)
+        {
+            TypeElement parent = (TypeElement) processingEnv.getTypeUtils().asElement(e.getSuperclass());
+            if(parent != null)
+            {
+                category = getCategory(parent);
+            }
+        }
+
+        return category;
+
+    }
+
     private void generateRegistrationFile(final String packageName, final Set<String> classNames)
     {
         final String className = "ConfiguredObjectRegistrationImpl";
@@ -144,7 +228,21 @@ public class ConfiguredObjectRegistratio
             pw.println("        Set<Class<? extends ConfiguredObject>> implementations = new HashSet<>();");
             for(String implementationName : classNames)
             {
-                pw.println("        implementations.add("+implementationName+".class);");
+                String qualifiedImplementationName = packageName + "." + implementationName;
+                if(_typeMap.get(qualifiedImplementationName) != null && _categoryMap.get(qualifiedImplementationName) != null)
+                {
+                    pw.println("        if(!Boolean.getBoolean(\"qpid.type.disabled:"
+                               +_categoryMap.get(qualifiedImplementationName)
+                               +"."+_typeMap.get(qualifiedImplementationName)+"\"))");
+                    pw.println("        {");
+                    pw.println("             implementations.add("+implementationName+".class);");
+                    pw.println("        }");
+
+                }
+                else
+                {
+                    pw.println("        implementations.add(" + implementationName + ".class);");
+                }
             }
             pw.println("        _implementations = Collections.unmodifiableSet(implementations);");
             pw.println("    }");

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/BrokerOptions.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/BrokerOptions.java?rev=1618531&r1=1618530&r2=1618531&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/BrokerOptions.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/BrokerOptions.java Mon Aug 18 00:32:44 2014
@@ -54,6 +54,7 @@ public class BrokerOptions
     public static final String DEFAULT_LOG_CONFIG_FILE = "etc/log4j.xml";
     public static final String DEFAULT_INITIAL_CONFIG_LOCATION =
         BrokerOptions.class.getClassLoader().getResource(DEFAULT_INITIAL_CONFIG_NAME).toExternalForm();
+
     public static final String MANAGEMENT_MODE_USER_NAME = "mm_admin";
     private static final int MANAGEMENT_MODE_PASSWORD_LENGTH = 10;
 
@@ -76,6 +77,7 @@ public class BrokerOptions
     private boolean _skipLoggingConfiguration;
     private boolean _overwriteConfigurationStore;
     private Map<String, String> _configProperties = new HashMap<String,String>();
+    private String _initialSystemProperties;
 
     public Map<String, Object> convertToSystemAttributes()
     {
@@ -369,4 +371,5 @@ public class BrokerOptions
 
         return _configProperties.get(QPID_HOME_DIR);
     }
+
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java?rev=1618531&r1=1618530&r2=1618531&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java Mon Aug 18 00:32:44 2014
@@ -105,7 +105,7 @@ public final class BrokerModel extends M
         addRelationship(Session.class, Publisher.class);
 
         _objectFactory = new ConfiguredObjectFactoryImpl(this);
-        _typeRegistry = new ConfiguredObjectTypeRegistry((new QpidServiceLoader<ConfiguredObjectRegistration>()).instancesOf(ConfiguredObjectRegistration.class), getSupportedCategories());
+        _typeRegistry = new ConfiguredObjectTypeRegistry((new QpidServiceLoader()).instancesOf(ConfiguredObjectRegistration.class), getSupportedCategories());
     }
 
     public final ConfiguredObjectTypeRegistry getTypeRegistry()

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFactoryImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFactoryImpl.java?rev=1618531&r1=1618530&r2=1618531&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFactoryImpl.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFactoryImpl.java Mon Aug 18 00:32:44 2014
@@ -44,8 +44,8 @@ public class ConfiguredObjectFactoryImpl
     public ConfiguredObjectFactoryImpl(Model model)
     {
         _model = model;
-        QpidServiceLoader<ConfiguredObjectTypeFactory> serviceLoader =
-                new QpidServiceLoader<ConfiguredObjectTypeFactory>();
+        QpidServiceLoader serviceLoader =
+                new QpidServiceLoader();
         Iterable<ConfiguredObjectTypeFactory> allFactories =
                 serviceLoader.instancesOf(ConfiguredObjectTypeFactory.class);
         for (ConfiguredObjectTypeFactory factory : allFactories)

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java?rev=1618531&r1=1618530&r2=1618531&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java Mon Aug 18 00:32:44 2014
@@ -151,8 +151,7 @@ public class AmqpPortImpl extends Abstra
 
             TransportProvider transportProvider = null;
             final HashSet<Transport> transportSet = new HashSet<Transport>(transports);
-            for (TransportProviderFactory tpf : (new QpidServiceLoader<TransportProviderFactory>()).instancesOf(
-                    TransportProviderFactory.class))
+            for (TransportProviderFactory tpf : (new QpidServiceLoader()).instancesOf(TransportProviderFactory.class))
             {
                 if (tpf.getSupportedTransports().contains(transports))
                 {
@@ -284,7 +283,7 @@ public class AmqpPortImpl extends Abstra
     public static Set<Protocol> getInstalledProtocols()
     {
         Set<Protocol> protocols = new HashSet<>();
-        for(ProtocolEngineCreator installedEngine : (new QpidServiceLoader<ProtocolEngineCreator>()).instancesOf(ProtocolEngineCreator.class))
+        for(ProtocolEngineCreator installedEngine : (new QpidServiceLoader()).instancesOf(ProtocolEngineCreator.class))
         {
             protocols.add(installedEngine.getVersion());
         }
@@ -343,7 +342,7 @@ public class AmqpPortImpl extends Abstra
     {
         Set<Set<Transport>> combinations = new HashSet<>();
 
-        for(TransportProviderFactory providerFactory : (new QpidServiceLoader<TransportProviderFactory>()).instancesOf(TransportProviderFactory.class))
+        for(TransportProviderFactory providerFactory : (new QpidServiceLoader()).instancesOf(TransportProviderFactory.class))
         {
             combinations.addAll(providerFactory.getSupportedTransports());
         }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java?rev=1618531&r1=1618530&r2=1618531&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java Mon Aug 18 00:32:44 2014
@@ -21,14 +21,9 @@
 package org.apache.qpid.server.plugin;
 
 import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.store.jdbc.ConnectionProvider;
 
 public interface JDBCConnectionProviderFactory extends Pluggable
@@ -48,7 +43,7 @@ public interface JDBCConnectionProviderF
 
         public static JDBCConnectionProviderFactory get(String type)
         {
-            QpidServiceLoader<JDBCConnectionProviderFactory> qpidServiceLoader = new QpidServiceLoader<JDBCConnectionProviderFactory>();
+            QpidServiceLoader qpidServiceLoader = new QpidServiceLoader();
             Iterable<JDBCConnectionProviderFactory> factories = qpidServiceLoader.atLeastOneInstanceOf(JDBCConnectionProviderFactory.class);
             for(JDBCConnectionProviderFactory factory : factories)
             {

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/PluggableFactoryLoader.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/PluggableFactoryLoader.java?rev=1618531&r1=1618530&r2=1618531&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/PluggableFactoryLoader.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/PluggableFactoryLoader.java Mon Aug 18 00:32:44 2014
@@ -33,7 +33,7 @@ public class PluggableFactoryLoader<T ex
     public PluggableFactoryLoader(Class<T> factoryClass)
     {
         Map<String, T> fm = new HashMap<String, T>();
-        QpidServiceLoader<T> qpidServiceLoader = new QpidServiceLoader<T>();
+        QpidServiceLoader qpidServiceLoader = new QpidServiceLoader();
         Iterable<T> factories = qpidServiceLoader.atLeastOneInstanceOf(factoryClass);
         for (T factory : factories)
         {

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/QpidServiceLoader.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/QpidServiceLoader.java?rev=1618531&r1=1618530&r2=1618531&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/QpidServiceLoader.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/QpidServiceLoader.java Mon Aug 18 00:32:44 2014
@@ -24,16 +24,17 @@ import java.util.List;
 import java.util.ServiceLoader;
 
 import org.apache.log4j.Logger;
+
 import org.apache.qpid.server.util.ServerScopedRuntimeException;
 
 /**
  * Simple facade over a {@link ServiceLoader} to instantiate all configured implementations of an interface.
  */
-public class QpidServiceLoader<C extends Pluggable>
+public class QpidServiceLoader
 {
     private static final Logger _logger = Logger.getLogger(QpidServiceLoader.class);
 
-    public Iterable<C> instancesOf(Class<C> clazz)
+    public <C extends Pluggable> Iterable<C> instancesOf(Class<C> clazz)
     {
         return instancesOf(clazz, false);
     }
@@ -41,12 +42,12 @@ public class QpidServiceLoader<C extends
     /**
      * @throws RuntimeException if at least one implementation is not found.
      */
-    public Iterable<C> atLeastOneInstanceOf(Class<C> clazz)
+    public <C extends Pluggable> Iterable<C> atLeastOneInstanceOf(Class<C> clazz)
     {
         return instancesOf(clazz, true);
     }
 
-    private Iterable<C> instancesOf(Class<C> clazz, boolean atLeastOne)
+    private <C extends Pluggable> Iterable<C> instancesOf(Class<C> clazz, boolean atLeastOne)
     {
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         Iterator<C> serviceLoaderIterator = ServiceLoader.load(clazz, classLoader).iterator();
@@ -55,7 +56,11 @@ public class QpidServiceLoader<C extends
         List<C> serviceImplementations = new ArrayList<C>();
         while(serviceLoaderIterator.hasNext())
         {
-            serviceImplementations.add(serviceLoaderIterator.next());
+            C next = serviceLoaderIterator.next();
+            if(!isDisabled(next))
+            {
+                serviceImplementations.add(next);
+            }
         }
 
         if(atLeastOne && serviceImplementations.isEmpty())
@@ -70,4 +75,16 @@ public class QpidServiceLoader<C extends
 
         return serviceImplementations;
     }
+
+    private <C extends Pluggable> boolean isDisabled(final C next)
+    {
+        return Boolean.getBoolean("qpid.plugin.disabled:"+next.getClass().getName())
+                || (next instanceof ConfiguredObjectTypeFactory && isDisabledConfiguredType((ConfiguredObjectTypeFactory<?>) next));
+    }
+
+    private boolean isDisabledConfiguredType(final ConfiguredObjectTypeFactory<?> typeFactory)
+    {
+        return Boolean.getBoolean("qpid.type.disabled:" + typeFactory.getCategoryClass().getSimpleName().toLowerCase()
+                                  + "." + typeFactory.getType());
+    }
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MessageConverterRegistry.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MessageConverterRegistry.java?rev=1618531&r1=1618530&r2=1618531&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MessageConverterRegistry.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MessageConverterRegistry.java Mon Aug 18 00:32:44 2014
@@ -35,7 +35,7 @@ public class MessageConverterRegistry
     static
     {
 
-        for(MessageConverter<? extends ServerMessage, ? extends ServerMessage> converter : (new QpidServiceLoader<MessageConverter>()).instancesOf(MessageConverter.class))
+        for(MessageConverter<? extends ServerMessage, ? extends ServerMessage> converter : (new QpidServiceLoader()).instancesOf(MessageConverter.class))
         {
             Map<Class<? extends ServerMessage>, MessageConverter> map = _converters.get(converter.getInputClass());
             if(map == null)

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactory.java?rev=1618531&r1=1618530&r2=1618531&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactory.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactory.java Mon Aug 18 00:32:44 2014
@@ -72,7 +72,7 @@ public class MultiVersionProtocolEngineF
         _supported = supportedVersions;
         _defaultSupportedReply = defaultSupportedReply;
         final List<ProtocolEngineCreator> creators = new ArrayList<ProtocolEngineCreator>();
-        for(ProtocolEngineCreator c : new QpidServiceLoader<ProtocolEngineCreator>().instancesOf(ProtocolEngineCreator.class))
+        for(ProtocolEngineCreator c : new QpidServiceLoader().instancesOf(ProtocolEngineCreator.class))
         {
             creators.add(c);
         }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageMetaDataTypeRegistry.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageMetaDataTypeRegistry.java?rev=1618531&r1=1618530&r2=1618531&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageMetaDataTypeRegistry.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageMetaDataTypeRegistry.java Mon Aug 18 00:32:44 2014
@@ -32,7 +32,7 @@ public class MessageMetaDataTypeRegistry
         int maxOrdinal = -1;
 
         Iterable<MessageMetaDataType> messageMetaDataTypes =
-                new QpidServiceLoader<MessageMetaDataType>().atLeastOneInstanceOf(MessageMetaDataType.class);
+                new QpidServiceLoader().atLeastOneInstanceOf(MessageMetaDataType.class);
 
         for(MessageMetaDataType type : messageMetaDataTypes)
         {
@@ -42,7 +42,7 @@ public class MessageMetaDataTypeRegistry
             }
         }
         values = new MessageMetaDataType[maxOrdinal+1];
-        for(MessageMetaDataType type : new QpidServiceLoader<MessageMetaDataType>().instancesOf(MessageMetaDataType.class))
+        for(MessageMetaDataType type : new QpidServiceLoader().instancesOf(MessageMetaDataType.class))
         {
             if(values[type.ordinal()] != null)
             {

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1618531&r1=1618530&r2=1618531&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java Mon Aug 18 00:32:44 2014
@@ -272,7 +272,7 @@ public abstract class AbstractVirtualHos
 
     private void registerSystemNodes()
     {
-        QpidServiceLoader<SystemNodeCreator> qpidServiceLoader = new QpidServiceLoader<SystemNodeCreator>();
+        QpidServiceLoader qpidServiceLoader = new QpidServiceLoader();
         Iterable<SystemNodeCreator> factories = qpidServiceLoader.instancesOf(SystemNodeCreator.class);
         for(SystemNodeCreator creator : factories)
         {

Added: qpid/trunk/qpid/java/broker-core/src/main/resources/system.properties
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/resources/system.properties?rev=1618531&view=auto
==============================================================================
    (empty)

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/PluginClassProviderAction.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/PluginClassProviderAction.java?rev=1618531&r1=1618530&r2=1618531&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/PluginClassProviderAction.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/PluginClassProviderAction.java Mon Aug 18 00:32:44 2014
@@ -19,12 +19,11 @@ package org.apache.qpid.server.managemen
  *
  */
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.plugin.Pluggable;
 import org.apache.qpid.server.plugin.QpidServiceLoader;
@@ -43,7 +42,7 @@ public class PluginClassProviderAction i
         try
         {
             String className = (String) request.get("plugin");
-            QpidServiceLoader<Pluggable> serviceLoader = new QpidServiceLoader<Pluggable>();
+            QpidServiceLoader serviceLoader = new QpidServiceLoader();
             final Class<Pluggable> clazz = (Class<Pluggable>) Class.forName("org.apache.qpid.server.plugin."+className);
             List<String> values = new ArrayList<String>();
             for(Pluggable instance : serviceLoader.instancesOf(clazz))

Modified: qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java?rev=1618531&r1=1618530&r2=1618531&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java Mon Aug 18 00:32:44 2014
@@ -90,7 +90,7 @@ public class JMXManagementPluginImpl
         _changeListener = new ChangeListener();
         _pluginMBeanProvider = new PluginMBeansProvider();
         _mBeanProviders = new HashSet<MBeanProvider>();
-        QpidServiceLoader<MBeanProvider> qpidServiceLoader = new QpidServiceLoader<MBeanProvider>();
+        QpidServiceLoader qpidServiceLoader = new QpidServiceLoader();
         for (MBeanProvider provider : qpidServiceLoader.instancesOf(MBeanProvider.class))
         {
             _mBeanProviders.add(provider);

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=1618531&r1=1618530&r2=1618531&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 Aug 18 00:32:44 2014
@@ -25,6 +25,9 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.HashSet;
+import java.util.Properties;
+import java.util.Set;
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.HelpFormatter;
@@ -94,6 +97,9 @@ public class Main
     private static final Option OPTION_MM_PASSWORD = OptionBuilder.withArgName("password").hasArg()
             .withDescription("Set the password for the management mode user " + BrokerOptions.MANAGEMENT_MODE_USER_NAME).withLongOpt("management-mode-password").create("mmpass");
 
+    private static final Option OPTION_INITIAL_SYSTEM_PROPERTIES = OptionBuilder.withArgName("path").hasArg()
+            .withDescription("set the location of initial properties file to set otherwise unset system properties").withLongOpt("system-properties-file").create("props");
+
     private static final Options OPTIONS = new Options();
 
     static
@@ -114,6 +120,7 @@ public class Main
         OPTIONS.addOption(OPTION_MM_HTTP_PORT);
         OPTIONS.addOption(OPTION_MM_PASSWORD);
         OPTIONS.addOption(OPTION_CONFIGURATION_PROPERTY);
+        OPTIONS.addOption(OPTION_INITIAL_SYSTEM_PROPERTIES);
     }
 
     protected CommandLine _commandLine;
@@ -168,7 +175,11 @@ public class Main
 
     protected void execute() throws Exception
     {
+        String initialProperties = _commandLine.getOptionValue(OPTION_INITIAL_SYSTEM_PROPERTIES.getOpt());
+        populateSystemPropertiesFromDefaults(initialProperties);
+
         BrokerOptions options = new BrokerOptions();
+
         String initialConfigLocation = _commandLine.getOptionValue(OPTION_INITIAL_CONFIGURATION_PATH.getOpt());
         if (initialConfigLocation != null)
         {
@@ -304,6 +315,28 @@ public class Main
         }
     }
 
+    private void populateSystemPropertiesFromDefaults(final String initialProperties) throws IOException
+    {
+        URL initialPropertiesLocation;
+        if(initialProperties == null)
+        {
+            initialPropertiesLocation = getClass().getClassLoader().getResource("system.properties");
+        }
+        else
+        {
+            initialPropertiesLocation = (new File(initialProperties)).toURI().toURL();
+        }
+
+        Properties props = new Properties();
+        props.load(initialPropertiesLocation.openStream());
+        Set<String> propertyNames = new HashSet<>(props.stringPropertyNames());
+        propertyNames.removeAll(System.getProperties().stringPropertyNames());
+        for(String propName : propertyNames)
+        {
+            System.setProperty(propName, props.getProperty(propName));
+        }
+    }
+
     private void copyInitialConfigFile(final BrokerOptions options, final File destinationFile)
     {
         String initialConfigLocation = options.getInitialConfigurationLocation();



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