Author: rgodfrey
Date: Wed Jun 17 23:08:58 2015
New Revision: 1686121

URL: http://svn.apache.org/r1686121
Log:
QPID-6598 : [Java Broker] Allow configuration encryption provider to be updated 
dynamically

Modified:
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java?rev=1686121&r1=1686120&r2=1686121&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
 Wed Jun 17 23:08:58 2015
@@ -1037,6 +1037,17 @@ public abstract class AbstractConfigured
     protected void setEncrypter(final ConfigurationSecretEncrypter encrypter)
     {
         _encrypter = encrypter;
+        applyToChildren(new Action<ConfiguredObject<?>>()
+        {
+            @Override
+            public void performAction(final ConfiguredObject<?> object)
+            {
+                if(object instanceof AbstractConfiguredObject)
+                {
+                    ((AbstractConfiguredObject)object).setEncrypter(encrypter);
+                }
+            }
+        });
     }
 
     protected void onResolve()
@@ -2107,6 +2118,59 @@ public abstract class AbstractConfigured
         }
     }
 
+    protected void forceUpdateAllSecureAttributes()
+    {
+        applyToChildren(new Action<ConfiguredObject<?>>()
+        {
+            @Override
+            public void performAction(final ConfiguredObject<?> object)
+            {
+                if (object instanceof AbstractConfiguredObject)
+                {
+                    ((AbstractConfiguredObject) 
object).forceUpdateAllSecureAttributes();
+                }
+            }
+        });
+        doUpdateSecureAttributes();
+    }
+
+    private void doUpdateSecureAttributes()
+    {
+        Map<String,Object> secureAttributeValues = getSecureAttributeValues();
+        if(!secureAttributeValues.isEmpty())
+        {
+            bulkChangeStart();
+            for (Map.Entry<String, Object> attribute : 
secureAttributeValues.entrySet())
+            {
+                synchronized (_changeListeners)
+                {
+                    List<ConfigurationChangeListener> copy =
+                            new ArrayList<>(_changeListeners);
+                    for (ConfigurationChangeListener listener : copy)
+                    {
+                        listener.attributeSet(this, attribute.getKey(), 
attribute.getValue(), attribute.getValue());
+                    }
+                }
+
+            }
+            bulkChangeEnd();
+        }
+    }
+
+    private Map<String,Object> getSecureAttributeValues()
+    {
+        Map<String,Object> secureAttributeValues = new HashMap<>();
+        for (Map.Entry<String, ConfiguredObjectAttribute<?, ?>> attribute : 
_attributeTypes.entrySet())
+        {
+            if (attribute.getValue().isSecure() && 
_attributes.containsKey(attribute.getKey()))
+            {
+                secureAttributeValues.put(attribute.getKey(), 
_attributes.get(attribute.getKey()));
+            }
+        }
+        return secureAttributeValues;
+    }
+
+
     private void bulkChangeStart()
     {
         synchronized (_changeListeners)

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1686121&r1=1686120&r2=1686121&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
 Wed Jun 17 23:08:58 2015
@@ -104,7 +104,8 @@ public class BrokerAdapter extends Abstr
     private boolean _statisticsReportingResetEnabled;
     @ManagedAttributeField
     private boolean _messageCompressionEnabled;
-    @ManagedAttributeField
+
+    @ManagedAttributeField(afterSet = "postEncrypterProviderSet")
     private String _confidentialConfigurationEncryptionProvider;
 
     private final boolean _virtualHostPropertiesNodeEnabled;
@@ -131,30 +132,36 @@ public class BrokerAdapter extends Abstr
         QpidServiceLoader qpidServiceLoader = new QpidServiceLoader();
         final Set<String> systemNodeCreatorTypes = 
qpidServiceLoader.getInstancesByType(SystemNodeCreator.class).keySet();
         _virtualHostPropertiesNodeEnabled = 
systemNodeCreatorTypes.contains(VirtualHostPropertiesNodeCreator.TYPE);
+        
if(attributes.containsKey(CONFIDENTIAL_CONFIGURATION_ENCRYPTION_PROVIDER))
+        {
 
+            final String encryptionProviderType = 
String.valueOf(attributes.get(CONFIDENTIAL_CONFIGURATION_ENCRYPTION_PROVIDER));
+            updateEncrypter(encryptionProviderType);
+        }
         _messagesDelivered = new StatisticsCounter("messages-delivered");
         _dataDelivered = new StatisticsCounter("bytes-delivered");
         _messagesReceived = new StatisticsCounter("messages-received");
         _dataReceived = new StatisticsCounter("bytes-received");
     }
 
-    @Override
-    protected void postResolve()
+    private void updateEncrypter(final String encryptionProviderType)
     {
-        super.postResolve();
-        if(_confidentialConfigurationEncryptionProvider != null)
+        if(encryptionProviderType != null && 
!"".equals(encryptionProviderType.trim()))
         {
-
             PluggableFactoryLoader<ConfigurationSecretEncrypterFactory> 
factoryLoader =
                     new 
PluggableFactoryLoader<>(ConfigurationSecretEncrypterFactory.class);
-            ConfigurationSecretEncrypterFactory factory = 
factoryLoader.get(_confidentialConfigurationEncryptionProvider);
-            if(factory == null)
+            ConfigurationSecretEncrypterFactory factory = 
factoryLoader.get(encryptionProviderType);
+            if (factory == null)
             {
-                throw new IllegalConfigurationException("Unknown Configuration 
Secret Encryption method " + _confidentialConfigurationEncryptionProvider);
+                throw new IllegalConfigurationException("Unknown Configuration 
Secret Encryption method "
+                                                        + 
encryptionProviderType);
             }
             setEncrypter(factory.createEncrypter(this));
         }
-
+        else
+        {
+            setEncrypter(null);
+        }
     }
 
     @Override
@@ -844,4 +851,11 @@ public class BrokerAdapter extends Abstr
     {
         return _managementModeAuthenticationProvider;
     }
+
+    @SuppressWarnings("unused")
+    private void postEncrypterProviderSet()
+    {
+        updateEncrypter(_confidentialConfigurationEncryptionProvider);
+        forceUpdateAllSecureAttributes();
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to