You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2012/12/06 11:29:41 UTC

svn commit: r1417796 - in /qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src: main/java/org/apache/qpid/server/configuration/startup/ main/java/org/apache/qpid/server/configuration/store/ main/java/org/apache/qpid/server/model/ main/java/...

Author: orudyy
Date: Thu Dec  6 10:29:38 2012
New Revision: 1417796

URL: http://svn.apache.org/viewvc?rev=1417796&view=rev
Log:
QPID-4390: Add KeyStore and TrustStore configured objects

Added:
    qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/KeyStoreRecoverer.java
    qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/TrustStoreRecoverer.java
    qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/KeyStore.java
    qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/TrustStore.java
    qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractKeyStoreAdapter.java
    qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/KeyStoreAdapter.java
    qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/TrustStoreAdapter.java
    qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/KeyStoreRecovererTest.java
    qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/TrustStoreRecovererTest.java
Modified:
    qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/DefaultRecovererProvider.java
    qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/XMLConfigurationEntryStore.java
    qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java
    qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
    qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/DefaultRecovererProvider.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/DefaultRecovererProvider.java?rev=1417796&r1=1417795&r2=1417796&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/DefaultRecovererProvider.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/DefaultRecovererProvider.java Thu Dec  6 10:29:38 2012
@@ -25,8 +25,10 @@ import org.apache.qpid.server.configurat
 import org.apache.qpid.server.model.AuthenticationProvider;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.GroupProvider;
+import org.apache.qpid.server.model.KeyStore;
 import org.apache.qpid.server.model.Plugin;
 import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.TrustStore;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.model.adapter.AuthenticationProviderFactory;
 import org.apache.qpid.server.model.adapter.PortFactory;
@@ -78,6 +80,14 @@ public class DefaultRecovererProvider im
         {
             return new GroupProviderRecoverer(_groupManagerServiceLoader);
         }
+        else if(KeyStore.class.getSimpleName().equals(type))
+        {
+            return new KeyStoreRecoverer();
+        }
+        else if(TrustStore.class.getSimpleName().equals(type))
+        {
+            return new TrustStoreRecoverer();
+        }
         else if(Plugin.class.getSimpleName().equals(type))
         {
             return new PluginRecoverer(_pluginFactoryServiceLoader);

Added: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/KeyStoreRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/KeyStoreRecoverer.java?rev=1417796&view=auto
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/KeyStoreRecoverer.java (added)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/KeyStoreRecoverer.java Thu Dec  6 10:29:38 2012
@@ -0,0 +1,37 @@
+/*
+ *
+ * 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.startup;
+
+import org.apache.qpid.server.configuration.ConfigurationEntry;
+import org.apache.qpid.server.configuration.RecovererProvider;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.KeyStore;
+import org.apache.qpid.server.model.adapter.KeyStoreAdapter;
+
+public class KeyStoreRecoverer extends AbstractBrokerChildRecoverer<KeyStore>
+{
+    @Override
+    KeyStore createBrokerChild(RecovererProvider recovererProvider, ConfigurationEntry entry, Broker broker)
+    {
+        return new KeyStoreAdapter(entry.getId(), broker, entry.getAttributes());
+    }
+
+}

Added: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/TrustStoreRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/TrustStoreRecoverer.java?rev=1417796&view=auto
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/TrustStoreRecoverer.java (added)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/TrustStoreRecoverer.java Thu Dec  6 10:29:38 2012
@@ -0,0 +1,37 @@
+/*
+ *
+ * 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.startup;
+
+import org.apache.qpid.server.configuration.ConfigurationEntry;
+import org.apache.qpid.server.configuration.RecovererProvider;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.TrustStore;
+import org.apache.qpid.server.model.adapter.TrustStoreAdapter;
+
+public class TrustStoreRecoverer extends AbstractBrokerChildRecoverer<TrustStore>
+{
+    @Override
+    TrustStore createBrokerChild(RecovererProvider recovererProvider, ConfigurationEntry entry, Broker broker)
+    {
+        return new TrustStoreAdapter(entry.getId(), broker, entry.getAttributes());
+    }
+
+}

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/XMLConfigurationEntryStore.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/XMLConfigurationEntryStore.java?rev=1417796&r1=1417795&r2=1417796&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/XMLConfigurationEntryStore.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/XMLConfigurationEntryStore.java Thu Dec  6 10:29:38 2012
@@ -46,10 +46,12 @@ import org.apache.qpid.server.configurat
 import org.apache.qpid.server.model.AuthenticationProvider;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.GroupProvider;
+import org.apache.qpid.server.model.KeyStore;
 import org.apache.qpid.server.model.Plugin;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.Protocol;
 import org.apache.qpid.server.model.Transport;
+import org.apache.qpid.server.model.TrustStore;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
 import org.apache.qpid.server.plugin.PluginFactory;
@@ -96,6 +98,8 @@ public class XMLConfigurationEntryStore 
 
         updateManagementPorts(_serverConfiguration, options);
 
+        createKeyStoreConfig(config, _rootChildren);
+        createTrustStoreConfig(config, _rootChildren);
         createGroupProviderConfig(_configuration, _rootChildren);
         createAuthenticationProviderConfig(_configuration, _rootChildren);
         createAmqpPortConfig(_serverConfiguration, _rootChildren, options);
@@ -138,6 +142,38 @@ public class XMLConfigurationEntryStore 
         return rootEntry;
     }
 
+
+    private void createTrustStoreConfig(ServerConfiguration config, Map<UUID, ConfigurationEntry> rootChildren)
+    {
+        if (config.getEnableSSL() && config.getConnectorTrustStorePath() != null)
+        {
+            Map<String, Object> attributes = new HashMap<String, Object>();
+            attributes.put(TrustStore.NAME, "connectorTrustStore");
+            attributes.put(TrustStore.PATH, config.getConnectorTrustStorePath());
+            attributes.put(TrustStore.PASSWORD, config.getConnectorTrustStorePassword());
+            attributes.put(TrustStore.TYPE, config.getConnectorTrustStoreType());
+            attributes.put(TrustStore.KEY_MANAGER_FACTORY_ALGORITHM, config.getConnectorTrustManagerFactoryAlgorithm());
+            ConfigurationEntry entry = new ConfigurationEntry(UUID.randomUUID(), TrustStore.class.getSimpleName(), attributes, null, this);
+            rootChildren.put(entry.getId(), entry);
+        }
+    }
+
+    private void createKeyStoreConfig(ServerConfiguration config, Map<UUID, ConfigurationEntry> rootChildren)
+    {
+        if (config.getEnableSSL())
+        {
+            Map<String, Object> attributes = new HashMap<String, Object>();
+            attributes.put(KeyStore.NAME, "connectorKeytStore");
+            attributes.put(KeyStore.PATH, config.getConnectorKeyStorePath());
+            attributes.put(KeyStore.PASSWORD, config.getConnectorKeyStorePassword());
+            attributes.put(KeyStore.TYPE, config.getConnectorKeyStoreType());
+            attributes.put(KeyStore.KEY_MANAGER_FACTORY_ALGORITHM, config.getConnectorKeyManagerFactoryAlgorithm());
+            attributes.put(KeyStore.CERTIFICATE_ALIAS, config.getCertAlias());
+            ConfigurationEntry entry = new ConfigurationEntry(UUID.randomUUID(), KeyStore.class.getSimpleName(), attributes, null, this);
+            rootChildren.put(entry.getId(), entry);
+        }
+    }
+
     private static final Map<String, String> authenticationManagerMap = new HashMap<String, String>();
     static
     {

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1417796&r1=1417795&r2=1417796&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java Thu Dec  6 10:29:38 2012
@@ -145,4 +145,7 @@ public interface Broker extends Configur
      */
     SubjectCreator getSubjectCreator(SocketAddress localAddress);
 
+    Collection<KeyStore> getKeyStores();
+
+    Collection<TrustStore> getTrustStores();
 }

Added: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/KeyStore.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/KeyStore.java?rev=1417796&view=auto
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/KeyStore.java (added)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/KeyStore.java Thu Dec  6 10:29:38 2012
@@ -0,0 +1,50 @@
+/*
+ *
+ * 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.model;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+
+public interface KeyStore extends TrustStore
+{
+
+    String CERTIFICATE_ALIAS = "certificateAlias";
+
+    public static final Collection<String> AVAILABLE_ATTRIBUTES =
+            Collections.unmodifiableList(
+                Arrays.asList(
+                              ID,
+                              NAME,
+                              STATE,
+                              DURABLE,
+                              LIFETIME_POLICY,
+                              TIME_TO_LIVE,
+                              CREATED,
+                              UPDATED,
+                              PATH,
+                              PASSWORD,
+                              TYPE,
+                              KEY_MANAGER_FACTORY_ALGORITHM,
+                              CERTIFICATE_ALIAS
+                              ));
+
+}

Added: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/TrustStore.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/TrustStore.java?rev=1417796&view=auto
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/TrustStore.java (added)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/TrustStore.java Thu Dec  6 10:29:38 2012
@@ -0,0 +1,59 @@
+/*
+ *
+ * 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.model;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+
+public interface TrustStore extends ConfiguredObject
+{
+    String ID = "id";
+    String NAME = "name";
+    String DURABLE = "durable";
+    String LIFETIME_POLICY = "lifetimePolicy";
+    String STATE = "state";
+    String TIME_TO_LIVE = "timeToLive";
+    String CREATED = "created";
+    String UPDATED = "updated";
+
+    String PATH = "path";
+    String PASSWORD = "password";
+    String TYPE = "type";
+    String KEY_MANAGER_FACTORY_ALGORITHM = "keyManagerFactoryAlgorithm";
+
+    public static final Collection<String> AVAILABLE_ATTRIBUTES =
+            Collections.unmodifiableList(
+                Arrays.asList(
+                              ID,
+                              NAME,
+                              STATE,
+                              DURABLE,
+                              LIFETIME_POLICY,
+                              TIME_TO_LIVE,
+                              CREATED,
+                              UPDATED,
+                              PATH,
+                              PASSWORD,
+                              TYPE,
+                              KEY_MANAGER_FACTORY_ALGORITHM
+                              ));
+}

Added: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractKeyStoreAdapter.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractKeyStoreAdapter.java?rev=1417796&view=auto
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractKeyStoreAdapter.java (added)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractKeyStoreAdapter.java Thu Dec  6 10:29:38 2012
@@ -0,0 +1,190 @@
+/*
+ *
+ * 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.model.adapter;
+
+import java.security.AccessControlException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.net.ssl.KeyManagerFactory;
+
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.KeyStore;
+import org.apache.qpid.server.model.LifetimePolicy;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.Statistics;
+import org.apache.qpid.server.util.MapValueConverter;
+
+public abstract class AbstractKeyStoreAdapter extends AbstractAdapter
+{
+    protected final String _name;
+    protected final String _path;
+    protected final String _password;
+    protected final String _type;
+    protected final String _keyManagerFactoryAlgorithm;
+
+    protected AbstractKeyStoreAdapter(UUID id, Broker broker, Map<String, Object> attributes, String defaultName)
+    {
+        super(id);
+        addParent(Broker.class, broker);
+        _name = MapValueConverter.getStringAttribute(KeyStore.NAME, attributes, defaultName);
+        _path = MapValueConverter.getStringAttribute(KeyStore.PATH, attributes);
+        _password = MapValueConverter.getStringAttribute(KeyStore.PASSWORD, attributes);
+        _type =  MapValueConverter.getStringAttribute(KeyStore.TYPE, attributes, java.security.KeyStore.getDefaultType());
+        _keyManagerFactoryAlgorithm = MapValueConverter.getStringAttribute(KeyStore.KEY_MANAGER_FACTORY_ALGORITHM, attributes, KeyManagerFactory.getDefaultAlgorithm());
+    }
+
+    @Override
+    public String getName()
+    {
+        return _name;
+    }
+
+    @Override
+    public String setName(String currentName, String desiredName) throws IllegalStateException, AccessControlException
+    {
+        throw new IllegalStateException();
+    }
+
+    @Override
+    public State getActualState()
+    {
+        return State.ACTIVE;
+    }
+
+    @Override
+    public boolean isDurable()
+    {
+        return true;
+    }
+
+    @Override
+    public void setDurable(boolean durable) throws IllegalStateException, AccessControlException, IllegalArgumentException
+    {
+        throw new IllegalStateException();
+    }
+
+    @Override
+    public LifetimePolicy getLifetimePolicy()
+    {
+        return LifetimePolicy.PERMANENT;
+    }
+
+    @Override
+    public LifetimePolicy setLifetimePolicy(LifetimePolicy expected, LifetimePolicy desired) throws IllegalStateException, AccessControlException,
+            IllegalArgumentException
+    {
+        throw new IllegalStateException();
+    }
+
+    @Override
+    public long getTimeToLive()
+    {
+        return 0;
+    }
+
+    @Override
+    public long setTimeToLive(long expected, long desired) throws IllegalStateException, AccessControlException, IllegalArgumentException
+    {
+        throw new IllegalStateException();
+    }
+
+    @Override
+    public Statistics getStatistics()
+    {
+        return NoStatistics.getInstance();
+    }
+
+    @Override
+    public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz)
+    {
+        return Collections.emptySet();
+    }
+
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Object getAttribute(String name)
+    {
+        if(KeyStore.ID.equals(name))
+        {
+            return getId();
+        }
+        else if(KeyStore.NAME.equals(name))
+        {
+            return getName();
+        }
+        else if(KeyStore.STATE.equals(name))
+        {
+            return getActualState();
+        }
+        else if(KeyStore.DURABLE.equals(name))
+        {
+            return isDurable();
+        }
+        else if(KeyStore.LIFETIME_POLICY.equals(name))
+        {
+            return getLifetimePolicy();
+        }
+        else if(KeyStore.TIME_TO_LIVE.equals(name))
+        {
+            return getTimeToLive();
+        }
+        else if(KeyStore.CREATED.equals(name))
+        {
+
+        }
+        else if(KeyStore.UPDATED.equals(name))
+        {
+
+        }
+        else if(KeyStore.PATH.equals(name))
+        {
+            return _path;
+        }
+        else if(KeyStore.PASSWORD.equals(name))
+        {
+            return _password;
+        }
+        else if(KeyStore.TYPE.equals(name))
+        {
+            return _type;
+        }
+        else if(KeyStore.KEY_MANAGER_FACTORY_ALGORITHM.equals(name))
+        {
+            return _keyManagerFactoryAlgorithm;
+        }
+        return super.getAttribute(name);
+    }
+
+    @Override
+    protected boolean setState(State currentState, State desiredState)
+    {
+        return false;
+    }
+}

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1417796&r1=1417795&r2=1417796&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java Thu Dec  6 10:29:38 2012
@@ -48,10 +48,12 @@ import org.apache.qpid.server.model.Brok
 import org.apache.qpid.server.model.ConfigurationChangeListener;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.GroupProvider;
+import org.apache.qpid.server.model.KeyStore;
 import org.apache.qpid.server.model.LifetimePolicy;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.model.Statistics;
+import org.apache.qpid.server.model.TrustStore;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.registry.IApplicationRegistry;
 import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
@@ -73,6 +75,8 @@ public class BrokerAdapter extends Abstr
     private final Map<String, AuthenticationProvider> _authenticationProviders = new HashMap<String, AuthenticationProvider>();
     private final Map<String, GroupProvider> _groupProviders = new HashMap<String, GroupProvider>();
     private final Map<UUID, ConfiguredObject> _plugins = new HashMap<UUID, ConfiguredObject>();
+    private final Map<UUID, KeyStore> _keyStores = new HashMap<UUID, KeyStore>();
+    private final Map<UUID, TrustStore> _trustStores = new HashMap<UUID, TrustStore>();
 
     private final AuthenticationProviderFactory _authenticationProviderFactory;
     private AuthenticationProvider _defaultAuthenticationProvider;
@@ -293,6 +297,14 @@ public class BrokerAdapter extends Abstr
         {
             return (Collection<C>) getGroupProviders();
         }
+        else if(clazz == KeyStore.class)
+        {
+            return (Collection<C>) getKeyStores();
+        }
+        else if(clazz == TrustStore.class)
+        {
+            return (Collection<C>) getTrustStores();
+        }
         else if(clazz == ConfiguredObject.class)
         {
             return (Collection<C>) getPlugins();
@@ -392,6 +404,42 @@ public class BrokerAdapter extends Abstr
         throw new UnsupportedOperationException("Not implemented yet!");
     }
 
+    public void addKeyStore(KeyStore keyStore)
+    {
+        synchronized (_keyStores)
+        {
+            if(_keyStores.containsKey(keyStore.getId()))
+            {
+                throw new IllegalConfigurationException("Cannot add KeyStore because one with id " + keyStore.getId() + " already exists");
+            }
+            _keyStores.put(keyStore.getId(), keyStore);
+        }
+        keyStore.addChangeListener(this);
+    }
+
+    private boolean deleteKeyStore(KeyStore object)
+    {
+        throw new UnsupportedOperationException("Not implemented yet!");
+    }
+
+    public void addTrustStore(TrustStore trustStore)
+    {
+        synchronized (_trustStores)
+        {
+            if(_trustStores.containsKey(trustStore.getId()))
+            {
+                throw new IllegalConfigurationException("Cannot add TrustStore because one with id " + trustStore.getId() + " already exists");
+            }
+            _trustStores.put(trustStore.getId(), trustStore);
+        }
+        trustStore.addChangeListener(this);
+    }
+
+    private boolean deleteTrustStore(TrustStore object)
+    {
+        throw new UnsupportedOperationException("Not implemented yet!");
+    }
+
     @Override
     public Collection<String> getAttributeNames()
     {
@@ -642,6 +690,14 @@ public class BrokerAdapter extends Abstr
             {
                 childDeleted = deleteGroupProvider((GroupProvider)object);
             }
+            else if(object instanceof KeyStore)
+            {
+                childDeleted = deleteKeyStore((KeyStore)object);
+            }
+            else if(object instanceof TrustStore)
+            {
+                childDeleted = deleteTrustStore((TrustStore)object);
+            }
             if(childDeleted)
             {
                 childRemoved(object);
@@ -701,6 +757,14 @@ public class BrokerAdapter extends Abstr
         {
             addGroupProvider((GroupProvider)object);
         }
+        else if(object instanceof KeyStore)
+        {
+            addKeyStore((KeyStore)object);
+        }
+        else if(object instanceof TrustStore)
+        {
+            addTrustStore((TrustStore)object);
+        }
         else
         {
             addPlugin(object);
@@ -747,4 +811,23 @@ public class BrokerAdapter extends Abstr
         }
         return provider.getSubjectCreator();
     }
+
+    @Override
+    public Collection<KeyStore> getKeyStores()
+    {
+        synchronized(_trustStores)
+        {
+            return Collections.unmodifiableCollection(_keyStores.values());
+        }
+    }
+
+    @Override
+    public Collection<TrustStore> getTrustStores()
+    {
+        synchronized(_trustStores)
+        {
+            return Collections.unmodifiableCollection(_trustStores.values());
+        }
+    }
+
 }

Added: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/KeyStoreAdapter.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/KeyStoreAdapter.java?rev=1417796&view=auto
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/KeyStoreAdapter.java (added)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/KeyStoreAdapter.java Thu Dec  6 10:29:38 2012
@@ -0,0 +1,57 @@
+/*
+ *
+ * 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.model.adapter;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.KeyStore;
+import org.apache.qpid.server.util.MapValueConverter;
+
+public class KeyStoreAdapter extends AbstractKeyStoreAdapter implements KeyStore
+{
+    private final String _certificateAlias;
+
+    public KeyStoreAdapter(UUID id, Broker broker, Map<String, Object> attributes)
+    {
+        super(id, broker, attributes, KeyStore.class.getSimpleName());
+        _certificateAlias = MapValueConverter.getStringAttribute(CERTIFICATE_ALIAS, attributes, null);
+    }
+
+    @Override
+    public Object getAttribute(String name)
+    {
+        if(CERTIFICATE_ALIAS.equals(name))
+        {
+            return _certificateAlias;
+        }
+        return super.getAttribute(name);
+    }
+
+    @Override
+    public Collection<String> getAttributeNames()
+    {
+        return AVAILABLE_ATTRIBUTES;
+    }
+
+}

Added: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/TrustStoreAdapter.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/TrustStoreAdapter.java?rev=1417796&view=auto
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/TrustStoreAdapter.java (added)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/TrustStoreAdapter.java Thu Dec  6 10:29:38 2012
@@ -0,0 +1,43 @@
+/*
+ *
+ * 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.model.adapter;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.TrustStore;
+
+public class TrustStoreAdapter extends AbstractKeyStoreAdapter implements TrustStore
+{
+    public TrustStoreAdapter(UUID id, Broker broker, Map<String, Object> attributes)
+    {
+        super(id, broker, attributes, TrustStore.class.getSimpleName());
+    }
+
+    @Override
+    public Collection<String> getAttributeNames()
+    {
+        return AVAILABLE_ATTRIBUTES;
+    }
+
+}

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java?rev=1417796&r1=1417795&r2=1417796&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java Thu Dec  6 10:29:38 2012
@@ -43,8 +43,10 @@ import org.apache.qpid.server.model.Auth
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.GroupProvider;
+import org.apache.qpid.server.model.KeyStore;
 import org.apache.qpid.server.model.Plugin;
 import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.TrustStore;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.model.adapter.AuthenticationProviderFactory;
 import org.apache.qpid.server.model.adapter.PortFactory;
@@ -314,6 +316,38 @@ public class BrokerRecovererTest extends
         assertEquals(Collections.singleton(plugin), new HashSet<ConfiguredObject>(broker.getChildren(ConfiguredObject.class)));
     }
 
+    public void testCreateBrokerWithKeyStores()
+    {
+        ConfigurationEntry pluginEntry = mock(ConfigurationEntry.class);
+        KeyStore keyStore = mock(KeyStore.class);
+        _brokerEntryChildren.put(KeyStore.class.getSimpleName(), Arrays.asList(pluginEntry));
+
+        RecovererProvider recovererProvider = createRecoveryProvider(new ConfigurationEntry[]{pluginEntry, _authenticationProviderEntry1},
+                                                                     new ConfiguredObject[]{keyStore, _authenticationProvider1});
+
+        Broker broker = _brokerRecoverer.create(recovererProvider, _brokerEntry);
+
+        assertNotNull(broker);
+        assertEquals(_brokerId, broker.getId());
+        assertEquals(Collections.singleton(keyStore), new HashSet<ConfiguredObject>(broker.getChildren(KeyStore.class)));
+    }
+
+    public void testCreateBrokerWithTrustStores()
+    {
+        ConfigurationEntry pluginEntry = mock(ConfigurationEntry.class);
+        TrustStore trustStore = mock(TrustStore.class);
+        _brokerEntryChildren.put(TrustStore.class.getSimpleName(), Arrays.asList(pluginEntry));
+
+        RecovererProvider recovererProvider = createRecoveryProvider(new ConfigurationEntry[]{pluginEntry, _authenticationProviderEntry1},
+                                                                     new ConfiguredObject[]{trustStore, _authenticationProvider1});
+
+        Broker broker = _brokerRecoverer.create(recovererProvider, _brokerEntry);
+
+        assertNotNull(broker);
+        assertEquals(_brokerId, broker.getId());
+        assertEquals(Collections.singleton(trustStore), new HashSet<ConfiguredObject>(broker.getChildren(TrustStore.class)));
+    }
+
     private  RecovererProvider createRecoveryProvider(final ConfigurationEntry[] entries, final ConfiguredObject[] objectsToRecoverer)
     {
         RecovererProvider recovererProvider = new RecovererProvider()

Added: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/KeyStoreRecovererTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/KeyStoreRecovererTest.java?rev=1417796&view=auto
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/KeyStoreRecovererTest.java (added)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/KeyStoreRecovererTest.java Thu Dec  6 10:29:38 2012
@@ -0,0 +1,92 @@
+/*
+ *
+ * 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.startup;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpid.server.configuration.ConfigurationEntry;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.KeyStore;
+
+import junit.framework.TestCase;
+
+public class KeyStoreRecovererTest extends TestCase
+{
+
+    public void testCreateWithAllAttributesProvided()
+    {
+        Map<String, Object> attributes = new HashMap<String, Object>();
+        attributes.put(KeyStore.NAME, getName());
+        attributes.put(KeyStore.PATH, "/path/to/KeyStore");
+        attributes.put(KeyStore.PASSWORD, "my-secret-password");
+        attributes.put(KeyStore.TYPE, "NON-JKS");
+        attributes.put(KeyStore.KEY_MANAGER_FACTORY_ALGORITHM, "NON-STANDARD");
+        attributes.put(KeyStore.CERTIFICATE_ALIAS, "my-cert-alias");
+
+        UUID id = UUID.randomUUID();
+        Broker broker = mock(Broker.class);
+        ConfigurationEntry entry = mock(ConfigurationEntry.class);
+        when(entry.getAttributes()).thenReturn(attributes);
+        when(entry.getId()).thenReturn(id);
+
+        KeyStoreRecoverer recovever = new KeyStoreRecoverer();
+
+        KeyStore KeyStore = recovever.create(null, entry, broker);
+        assertNotNull("Key store configured object is not created", KeyStore);
+        assertEquals(id, KeyStore.getId());
+
+        for (Map.Entry<String, Object> attribute : attributes.entrySet())
+        {
+            Object attributeValue = KeyStore.getAttribute(attribute.getKey());
+            assertEquals("Unexpected value of attribute '" + attribute.getKey() + "'", attribute.getValue(), attributeValue);
+        }
+    }
+
+    public void testCreateWithMissedRequiredAttributes()
+    {
+        Map<String, Object> attributes = new HashMap<String, Object>();
+        attributes.put(KeyStore.PATH, "/path/to/KeyStore");
+
+        UUID id = UUID.randomUUID();
+        Broker broker = mock(Broker.class);
+        ConfigurationEntry entry = mock(ConfigurationEntry.class);
+        when(entry.getAttributes()).thenReturn(attributes);
+        when(entry.getId()).thenReturn(id);
+
+        KeyStoreRecoverer recovever = new KeyStoreRecoverer();
+
+        try
+        {
+            recovever.create(null, entry, broker);
+            fail("Cannot create key store without a path");
+        }
+        catch(IllegalArgumentException e)
+        {
+            // pass
+        }
+    }
+
+}

Added: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/TrustStoreRecovererTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/TrustStoreRecovererTest.java?rev=1417796&view=auto
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/TrustStoreRecovererTest.java (added)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/TrustStoreRecovererTest.java Thu Dec  6 10:29:38 2012
@@ -0,0 +1,89 @@
+/*
+ *
+ * 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.startup;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpid.server.configuration.ConfigurationEntry;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.TrustStore;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class TrustStoreRecovererTest extends QpidTestCase
+{
+    public void testCreateWithAllAttributesProvided()
+    {
+        Map<String, Object> attributes = new HashMap<String, Object>();
+        attributes.put(TrustStore.NAME, getName());
+        attributes.put(TrustStore.PATH, "/path/to/truststore");
+        attributes.put(TrustStore.PASSWORD, "my-secret-password");
+        attributes.put(TrustStore.TYPE, "NON-JKS");
+        attributes.put(TrustStore.KEY_MANAGER_FACTORY_ALGORITHM, "NON-STANDARD");
+
+        UUID id = UUID.randomUUID();
+        Broker broker = mock(Broker.class);
+        ConfigurationEntry entry = mock(ConfigurationEntry.class);
+        when(entry.getAttributes()).thenReturn(attributes);
+        when(entry.getId()).thenReturn(id);
+
+        TrustStoreRecoverer recovever = new TrustStoreRecoverer();
+
+        TrustStore trustStore = recovever.create(null, entry, broker);
+        assertNotNull("Trust store configured object is not created", trustStore);
+        assertEquals(id, trustStore.getId());
+
+        for (Map.Entry<String, Object> attribute : attributes.entrySet())
+        {
+            Object attributeValue = trustStore.getAttribute(attribute.getKey());
+            assertEquals("Unexpected value of attribute '" + attribute.getKey() + "'", attribute.getValue(), attributeValue);
+        }
+    }
+
+    public void testCreateWithMissedRequiredAttributes()
+    {
+        Map<String, Object> attributes = new HashMap<String, Object>();
+        attributes.put(TrustStore.PATH, "/path/to/truststore");
+
+        UUID id = UUID.randomUUID();
+        Broker broker = mock(Broker.class);
+        ConfigurationEntry entry = mock(ConfigurationEntry.class);
+        when(entry.getAttributes()).thenReturn(attributes);
+        when(entry.getId()).thenReturn(id);
+
+        TrustStoreRecoverer recovever = new TrustStoreRecoverer();
+
+        try
+        {
+            recovever.create(null, entry, broker);
+            fail("Cannot create trustore without a path");
+        }
+        catch(IllegalArgumentException e)
+        {
+            // pass
+        }
+    }
+
+}



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