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/05/02 22:32:19 UTC

svn commit: r1592030 [1/3] - in /qpid/trunk/qpid/java: bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/ bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/ broker-codegen/src/main/java/org/apache/qpid/server/model/ ...

Author: rgodfrey
Date: Fri May  2 20:32:16 2014
New Revision: 1592030

URL: http://svn.apache.org/r1592030
Log:
QPID-5746 : [Java Broker] Split attribute annotations into separate annotations for derived and automated, and allow derived attributes to be persisted

Added:
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/DerivedAttribute.java
Removed:
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/PluginFactory.java
Modified:
    qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNode.java
    qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java
    qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java
    qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
    qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java
    qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java
    qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java
    qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ManagedObjectFactoryConstructor.java
    qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/plugin/PluggableProcessor.java
    qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/plugin/PluggableService.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/binding/BindingImpl.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutor.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutorImpl.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractUnresolvedObject.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectTypeRegistry.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ExternalFileBasedAuthenticationManager.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttributeField.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedContextDefault.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedStatistic.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/State.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContext.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContextImpl.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/TrustStore.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/User.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProvider.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProvider.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProviderImpl.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPortWithAuthProvider.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPort.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPort.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/LastValueQueue.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/PriorityQueue.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SortedQueue.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileKeyStore.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileKeyStoreImpl.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileTrustStore.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileTrustStoreImpl.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManager.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/ScramAuthUser.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/ScramSHA1AuthenticationManager.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManager.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/transport/TCPandSSLTransport.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/FileBasedVirtualHostNode.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/updater/CurrentThreadTaskExecutor.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/updater/TaskExecutorTest.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProviderTest.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/PortFactoryTest.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/testmodel/TestRootCategory.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/testmodel/TestRootCategoryImpl.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ScramSHA1AuthenticationManagerTest.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/VirtualHostQueueCreationTest.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java
    qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProvider.java
    qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java
    qpid/trunk/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java
    qpid/trunk/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/AbstractSpecialisedAttributeLister.java
    qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPlugin.java
    qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/store/VirtualHostMessageStoreTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java

Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNode.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNode.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNode.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNode.java Fri May  2 20:32:16 2014
@@ -20,6 +20,7 @@
  */
 package org.apache.qpid.server.virtualhostnode.berkeleydb;
 
+import org.apache.qpid.server.model.DerivedAttribute;
 import org.apache.qpid.server.model.ManagedAttribute;
 import org.apache.qpid.server.model.ManagedObject;
 import org.apache.qpid.server.model.RemoteReplicationNode;
@@ -33,19 +34,19 @@ public interface BDBHARemoteReplicationN
     String LAST_KNOWN_REPLICATION_TRANSACTION_ID = "lastKnownReplicationTransactionId";
     String JOIN_TIME = "joinTime";
 
-    @ManagedAttribute(derived = true)
+    @DerivedAttribute
     String getGroupName();
 
-    @ManagedAttribute(derived = true)
+    @DerivedAttribute
     String getAddress();
 
-    @ManagedAttribute(automate = true)
+    @ManagedAttribute(persist = false)
     String getRole();
 
-    @ManagedAttribute(derived = true)
+    @DerivedAttribute
     long getJoinTime();
 
-    @ManagedAttribute(derived = true)
+    @DerivedAttribute
     long getLastKnownReplicationTransactionId();
 
 }

Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java Fri May  2 20:32:16 2014
@@ -25,7 +25,10 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicReference;
 
+import com.sleepycat.je.rep.MasterStateException;
+import com.sleepycat.je.rep.ReplicatedEnvironment;
 import org.apache.log4j.Logger;
+
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.qpid.server.model.AbstractConfiguredObject;
 import org.apache.qpid.server.model.ConfiguredObject;
@@ -34,9 +37,6 @@ import org.apache.qpid.server.model.Mana
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade;
 
-import com.sleepycat.je.rep.MasterStateException;
-import com.sleepycat.je.rep.ReplicatedEnvironment;
-
 public class BDBHARemoteReplicationNodeImpl extends AbstractConfiguredObject<BDBHARemoteReplicationNodeImpl> implements BDBHARemoteReplicationNode<BDBHARemoteReplicationNodeImpl>
 {
     private static final Logger LOGGER = Logger.getLogger(BDBHARemoteReplicationNodeImpl.class);
@@ -125,7 +125,7 @@ public class BDBHARemoteReplicationNodeI
     }
 
     @Override
-    protected boolean setState(State currentState, State desiredState)
+    protected boolean setState(State desiredState)
     {
         if (desiredState == State.DELETED)
         {

Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java Fri May  2 20:32:16 2014
@@ -22,6 +22,7 @@ package org.apache.qpid.server.virtualho
 
 import java.util.Map;
 
+import org.apache.qpid.server.model.DerivedAttribute;
 import org.apache.qpid.server.model.ManagedAttribute;
 
 public interface BDBHAVirtualHostNode<X extends BDBHAVirtualHostNode<X>> extends BDBVirtualHostNode<X>
@@ -39,39 +40,39 @@ public interface BDBHAVirtualHostNode<X 
     public static final String LAST_KNOWN_REPLICATION_TRANSACTION_ID = "lastKnownReplicationTransactionId";
     public static final String JOIN_TIME = "joinTime";
 
-    @ManagedAttribute(automate = true, mandatory=true)
+    @ManagedAttribute(mandatory=true)
     String getGroupName();
 
-    @ManagedAttribute(automate = true, mandatory=true)
+    @ManagedAttribute(mandatory=true)
     String getAddress();
 
-    @ManagedAttribute(automate = true, mandatory=true)
+    @ManagedAttribute(mandatory=true)
     String getHelperAddress();
 
-    @ManagedAttribute(automate = true, defaultValue = "NO_SYNC,NO_SYNC,SIMPLE_MAJORITY")
+    @ManagedAttribute(defaultValue = "NO_SYNC,NO_SYNC,SIMPLE_MAJORITY")
     String getDurability();
 
-    @ManagedAttribute(automate = true, defaultValue = "true")
+    @ManagedAttribute(defaultValue = "true")
     boolean isCoalescingSync();
 
-    @ManagedAttribute(automate = true, defaultValue = "false")
+    @ManagedAttribute(defaultValue = "false")
     boolean isDesignatedPrimary();
 
-    @ManagedAttribute(automate = true, defaultValue = "1")
+    @ManagedAttribute(defaultValue = "1")
     int getPriority();
 
-    @ManagedAttribute(automate = true, defaultValue = "0")
+    @ManagedAttribute(defaultValue = "0")
     int getQuorumOverride();
 
-    @ManagedAttribute(automate = true, persist = false)
+    @ManagedAttribute(persist = false)
     String getRole();
 
-    @ManagedAttribute(automate = true)
+    @ManagedAttribute
     Map<String, String> getReplicatedEnvironmentConfiguration();
 
-    @ManagedAttribute(derived = true)
+    @DerivedAttribute
     Long getLastKnownReplicationTransactionId();
 
-    @ManagedAttribute(derived = true)
+    @DerivedAttribute
     Long getJoinTime();
 }

Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java Fri May  2 20:32:16 2014
@@ -37,9 +37,8 @@ import com.sleepycat.je.rep.ReplicatedEn
 import com.sleepycat.je.rep.ReplicationNode;
 import com.sleepycat.je.rep.StateChangeEvent;
 import com.sleepycat.je.rep.StateChangeListener;
-
 import org.apache.log4j.Logger;
-import org.apache.qpid.server.configuration.IllegalConfigurationException;
+
 import org.apache.qpid.server.logging.messages.ConfigStoreMessages;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.BrokerModel;
@@ -385,7 +384,7 @@ public class BDBHAVirtualHostNodeImpl ex
                     }
                 });
             }
-            host.setDesiredState(host.getState(), State.ACTIVE);
+            host.setDesiredState(State.ACTIVE);
 
         }
         catch (Exception e)
@@ -422,7 +421,7 @@ public class BDBHAVirtualHostNodeImpl ex
         VirtualHost<?,?,?> virtualHost = getVirtualHost();
         if (virtualHost!= null)
         {
-            virtualHost.setDesiredState(virtualHost.getState(), State.STOPPED);
+            virtualHost.setDesiredState(State.STOPPED);
         }
     }
 
@@ -655,13 +654,13 @@ public class BDBHAVirtualHostNodeImpl ex
         }
 
         @Override
-        public boolean setState(State currentState, State desiredState)
+        public boolean setState(State desiredState)
         {
             if (desiredState != State.STOPPED)
             {
                 throw new IllegalArgumentException("Unsupported state " + desiredState);
             }
-            return super.setState(currentState, desiredState);
+            return super.setState(desiredState);
         }
     }
 

Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java Fri May  2 20:32:16 2014
@@ -29,6 +29,6 @@ public interface BDBVirtualHostNode<X ex
 {
     public static final String ENVIRONMENT_CONFIGURATION = "environmentConfiguration";
 
-    @ManagedAttribute(mandatory=false, automate=true)
+    @ManagedAttribute(mandatory=false)
     Map<String, String> getEnvironmentConfiguration();
-}
\ No newline at end of file
+}

Modified: qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java Fri May  2 20:32:16 2014
@@ -33,6 +33,9 @@ import java.util.UUID;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
+import com.sleepycat.je.rep.ReplicatedEnvironment;
+import com.sleepycat.je.rep.ReplicationConfig;
+
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
 import org.apache.qpid.server.configuration.updater.TaskExecutorImpl;
 import org.apache.qpid.server.model.Broker;
@@ -52,9 +55,6 @@ import org.apache.qpid.server.virtualhos
 import org.apache.qpid.test.utils.QpidTestCase;
 import org.apache.qpid.util.FileUtils;
 
-import com.sleepycat.je.rep.ReplicatedEnvironment;
-import com.sleepycat.je.rep.ReplicationConfig;
-
 public class BDBHAVirtualHostNodeTest extends QpidTestCase
 {
 
@@ -89,7 +89,7 @@ public class BDBHAVirtualHostNodeTest ex
             {
                 try
                 {
-                    node.setDesiredState(node.getState(), State.DELETED);
+                    node.setDesiredState(State.DELETED);
                 }
                 catch(Exception e)
                 {
@@ -175,7 +175,7 @@ public class BDBHAVirtualHostNodeTest ex
             {
             }
         });
-        assertEquals(State.ACTIVE, node.setDesiredState(node.getState(), State.ACTIVE));
+        assertEquals(State.ACTIVE, node.setDesiredState(State.ACTIVE));
 
         DurableConfigurationStore store = node.getConfigurationStore();
         assertNotNull(store);
@@ -200,13 +200,13 @@ public class BDBHAVirtualHostNodeTest ex
         assertEquals("Unexpected virtual host store", store, virtualHost.getMessageStore());
         assertEquals("Unexpected virtual host state", State.ACTIVE, virtualHost.getState());
 
-        State currentState = node.setDesiredState(State.ACTIVE, State.STOPPED);
+        State currentState = node.setDesiredState(State.STOPPED);
         assertEquals("Unexpected state returned after stop", State.STOPPED, currentState);
         assertEquals("Unexpected state", State.STOPPED, node.getState());
 
         assertNull("Virtual host is not destroyed", node.getVirtualHost());
 
-        currentState = node.setDesiredState(State.STOPPED, State.DELETED);
+        currentState = node.setDesiredState(State.DELETED);
         assertEquals("Unexpected state returned after delete", State.DELETED, currentState);
         assertEquals("Unexpected state", State.DELETED, node.getState());
         assertFalse("Store still exists", _bdbStorePath.exists());
@@ -228,7 +228,7 @@ public class BDBHAVirtualHostNodeTest ex
 
         BDBHAVirtualHostNode<?> node = createHaVHN(attributes);
 
-        assertEquals("Failed to activate node", State.ACTIVE, node.setDesiredState(node.getState(), State.ACTIVE));
+        assertEquals("Failed to activate node", State.ACTIVE, node.setDesiredState(State.ACTIVE));
 
         BDBMessageStore bdbMessageStore = (BDBMessageStore) node.getConfigurationStore();
         ReplicatedEnvironment environment = (ReplicatedEnvironment) bdbMessageStore.getEnvironmentFacade().getEnvironment();
@@ -265,7 +265,7 @@ public class BDBHAVirtualHostNodeTest ex
         node1Attributes.put(BDBHAVirtualHostNode.STORE_PATH, _bdbStorePath + File.separator + "1");
 
         BDBHAVirtualHostNode<?> node1 = createHaVHN(node1Attributes);
-        assertEquals("Failed to activate node", State.ACTIVE, node1.setDesiredState(node1.getState(), State.ACTIVE));
+        assertEquals("Failed to activate node", State.ACTIVE, node1.setDesiredState(State.ACTIVE));
 
         int node2PortNumber = getNextAvailable(node1PortNumber+1);
 
@@ -279,7 +279,7 @@ public class BDBHAVirtualHostNodeTest ex
         node2Attributes.put(BDBHAVirtualHostNode.STORE_PATH, _bdbStorePath + File.separator + "2");
 
         BDBHAVirtualHostNode<?> node2 = createHaVHN(node2Attributes);
-        assertEquals("Failed to activate node2", State.ACTIVE, node2.setDesiredState(node2.getState(), State.ACTIVE));
+        assertEquals("Failed to activate node2", State.ACTIVE, node2.setDesiredState(State.ACTIVE));
 
         int node3PortNumber = getNextAvailable(node2PortNumber+1);
         Map<String, Object> node3Attributes = new HashMap<String, Object>();
@@ -291,7 +291,7 @@ public class BDBHAVirtualHostNodeTest ex
         node3Attributes.put(BDBHAVirtualHostNode.HELPER_ADDRESS, helperAddress);
         node3Attributes.put(BDBHAVirtualHostNode.STORE_PATH, _bdbStorePath + File.separator + "3");
         BDBHAVirtualHostNode<?> node3 = createHaVHN(node3Attributes);
-        assertEquals("Failed to activate node3", State.ACTIVE, node3.setDesiredState(node3.getState(), State.ACTIVE));
+        assertEquals("Failed to activate node3", State.ACTIVE, node3.setDesiredState(State.ACTIVE));
 
         BDBHAVirtualHostNode<?> replica = null;
         int findReplicaCount = 0;
@@ -335,7 +335,7 @@ public class BDBHAVirtualHostNodeTest ex
         node1Attributes.put(BDBHAVirtualHostNode.STORE_PATH, _bdbStorePath + File.separator + "1");
 
         BDBHAVirtualHostNode<?> node1 = createHaVHN(node1Attributes);
-        assertEquals("Failed to activate node", State.ACTIVE, node1.setDesiredState(node1.getState(), State.ACTIVE));
+        assertEquals("Failed to activate node", State.ACTIVE, node1.setDesiredState(State.ACTIVE));
 
         final CountDownLatch remoteNodeLatch = new CountDownLatch(2);
         node1.addChangeListener(new ConfigurationChangeListener()
@@ -378,7 +378,7 @@ public class BDBHAVirtualHostNodeTest ex
         node2Attributes.put(BDBHAVirtualHostNode.STORE_PATH, _bdbStorePath + File.separator + "2");
 
         BDBHAVirtualHostNode<?> node2 = createHaVHN(node2Attributes);
-        assertEquals("Failed to activate node2", State.ACTIVE, node2.setDesiredState(node2.getState(), State.ACTIVE));
+        assertEquals("Failed to activate node2", State.ACTIVE, node2.setDesiredState(State.ACTIVE));
 
         int node3PortNumber = getNextAvailable(node2PortNumber+1);
         Map<String, Object> node3Attributes = new HashMap<String, Object>();
@@ -390,7 +390,7 @@ public class BDBHAVirtualHostNodeTest ex
         node3Attributes.put(BDBHAVirtualHostNode.HELPER_ADDRESS, helperAddress);
         node3Attributes.put(BDBHAVirtualHostNode.STORE_PATH, _bdbStorePath + File.separator + "3");
         BDBHAVirtualHostNode<?> node3 = createHaVHN(node3Attributes);
-        assertEquals("Failed to activate node3", State.ACTIVE, node3.setDesiredState(node3.getState(), State.ACTIVE));
+        assertEquals("Failed to activate node3", State.ACTIVE, node3.setDesiredState(State.ACTIVE));
 
         assertTrue("Replication nodes have not been seen during 5s", remoteNodeLatch.await(5, TimeUnit.SECONDS));
 
@@ -429,7 +429,7 @@ public class BDBHAVirtualHostNodeTest ex
         node1Attributes.put(BDBHAVirtualHostNode.STORE_PATH, _bdbStorePath + File.separator + "1");
 
         BDBHAVirtualHostNode<?> node = createHaVHN(node1Attributes);
-        assertEquals("Failed to activate node", State.ACTIVE, node.setDesiredState(node.getState(), State.ACTIVE));
+        assertEquals("Failed to activate node", State.ACTIVE, node.setDesiredState(State.ACTIVE));
 
         assertNodeRole(node, "MASTER");
 

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=1592030&r1=1592029&r2=1592030&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 Fri May  2 20:32:16 2014
@@ -87,7 +87,6 @@ public class ConfiguredObjectRegistratio
                     }
                     classNames.add(e.getSimpleName().toString());
                 }
-                processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, e.getSimpleName());
             }
             for (Map.Entry<String, Set<String>> entry : _managedObjectClasses.entrySet())
             {

Modified: qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ManagedObjectFactoryConstructor.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ManagedObjectFactoryConstructor.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ManagedObjectFactoryConstructor.java (original)
+++ qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ManagedObjectFactoryConstructor.java Fri May  2 20:32:16 2014
@@ -20,11 +20,13 @@
  */
 package org.apache.qpid.server.model;
 
+import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 @Retention(RetentionPolicy.SOURCE)
-
+@Target(ElementType.CONSTRUCTOR)
 public @interface ManagedObjectFactoryConstructor
 {
 }

Modified: qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/plugin/PluggableProcessor.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/plugin/PluggableProcessor.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/plugin/PluggableProcessor.java (original)
+++ qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/plugin/PluggableProcessor.java Fri May  2 20:32:16 2014
@@ -142,7 +142,7 @@ public class PluggableProcessor extends 
                     .printMessage(Diagnostic.Kind.NOTE, "Generating service file for " + serviceName);
 
             String relativeName = "META-INF/services/" + serviceName;
-
+            loadExistingServicesFile(filer, serviceName);
             try
             {
                 FileObject serviceFile = filer.createResource(StandardLocation.CLASS_OUTPUT, "", relativeName);

Modified: qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/plugin/PluggableService.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/plugin/PluggableService.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/plugin/PluggableService.java (original)
+++ qpid/trunk/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/plugin/PluggableService.java Fri May  2 20:32:16 2014
@@ -19,10 +19,13 @@ package org.apache.qpid.server.plugin;/*
  *
  */
 
+import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 @Retention(RetentionPolicy.SOURCE)
+@Target(ElementType.TYPE)
 public @interface PluggableService
 {
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/binding/BindingImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/binding/BindingImpl.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/binding/BindingImpl.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/binding/BindingImpl.java Fri May  2 20:32:16 2014
@@ -190,7 +190,7 @@ public class BindingImpl
         return result;
     }
 
-    protected boolean setState(final State currentState, final State desiredState)
+    protected boolean setState(final State desiredState)
     {
         if(desiredState == State.DELETED)
         {

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutor.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutor.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutor.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutor.java Fri May  2 20:32:16 2014
@@ -22,11 +22,9 @@ package org.apache.qpid.server.configura
 
 import java.util.concurrent.CancellationException;
 
-import org.apache.qpid.server.model.State;
-
 public interface TaskExecutor
 {
-    State getState();
+    boolean isRunning();
 
     void start();
 

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutorImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutorImpl.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutorImpl.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutorImpl.java Fri May  2 20:32:16 2014
@@ -32,12 +32,12 @@ import java.util.concurrent.Future;
 import java.util.concurrent.RunnableFuture;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.security.auth.Subject;
 
 import org.apache.log4j.Logger;
-import org.apache.qpid.server.model.State;
+
 import org.apache.qpid.server.util.ServerScopedRuntimeException;
 
 public class TaskExecutorImpl implements TaskExecutor
@@ -46,25 +46,20 @@ public class TaskExecutorImpl implements
     private static final Logger LOGGER = Logger.getLogger(TaskExecutorImpl.class);
 
     private volatile Thread _taskThread;
-    private final AtomicReference<State> _state;
+    private final AtomicBoolean _running = new AtomicBoolean();
     private volatile ExecutorService _executor;
 
 
-    public TaskExecutorImpl()
-    {
-        _state = new AtomicReference<State>(State.INITIALISING);
-    }
-
     @Override
-    public State getState()
+    public boolean isRunning()
     {
-        return _state.get();
+        return _running.get();
     }
 
     @Override
     public void start()
     {
-        if (_state.compareAndSet(State.INITIALISING, State.ACTIVE))
+        if (_running.compareAndSet(false, true))
         {
             LOGGER.debug("Starting task executor");
             _executor = Executors.newFixedThreadPool(1, new ThreadFactory()
@@ -83,7 +78,7 @@ public class TaskExecutorImpl implements
     @Override
     public void stopImmediately()
     {
-        if (_state.compareAndSet(State.ACTIVE, State.STOPPED))
+        if (_running.compareAndSet(true,false))
         {
             ExecutorService executor = _executor;
             if (executor != null)
@@ -108,7 +103,7 @@ public class TaskExecutorImpl implements
     @Override
     public void stop()
     {
-        if (_state.compareAndSet(State.ACTIVE, State.STOPPED))
+        if (_running.compareAndSet(true,false))
         {
             ExecutorService executor = _executor;
             if (executor != null)
@@ -288,7 +283,7 @@ public class TaskExecutorImpl implements
 
     private void checkState()
     {
-        if (_state.get() != State.ACTIVE)
+        if (!_running.get())
         {
             throw new IllegalStateException("Task executor is not in ACTIVE state");
         }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java Fri May  2 20:32:16 2014
@@ -136,9 +136,9 @@ public abstract class AbstractExchange<T
     }
 
     @Override
-    public void validate()
+    public void onValidate()
     {
-        super.validate();
+        super.onValidate();
 
         if(!_virtualHost.getSecurityManager().isSystemProcess())
         {
@@ -732,7 +732,7 @@ public abstract class AbstractExchange<T
                                              final Map<String, Object> oldArguments);
 
     @Override
-    protected boolean setState(final State currentState, final State desiredState)
+    protected boolean setState(final State desiredState)
     {
         if(desiredState == State.DELETED)
         {

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java Fri May  2 20:32:16 2014
@@ -148,6 +148,9 @@ public abstract class AbstractConfigured
 
     private final OwnAttributeResolver _attributeResolver = new OwnAttributeResolver(this);
 
+    @ManagedAttributeField
+    private State _desiredState;
+
     protected static Map<Class<? extends ConfiguredObject>, ConfiguredObject<?>> parentsMap(ConfiguredObject<?>... parents)
     {
         final Map<Class<? extends ConfiguredObject>, ConfiguredObject<?>> parentsMap =
@@ -237,7 +240,10 @@ public abstract class AbstractConfigured
         }
 
         Object durableObj = attributes.get(DURABLE);
-        _durable = AttributeValueConverter.BOOLEAN_CONVERTER.convert(durableObj == null ? _attributeTypes.get(DURABLE).getAnnotation().defaultValue() : durableObj, this);
+        _durable = AttributeValueConverter.BOOLEAN_CONVERTER.convert(durableObj == null
+                                                                             ? ((ConfiguredAutomatedAttribute) (_attributeTypes
+                .get(DURABLE))).defaultValue()
+                                                                             : durableObj, this);
 
         for (String name : getAttributeNames())
         {
@@ -265,11 +271,18 @@ public abstract class AbstractConfigured
         }
         for(ConfiguredObjectAttribute<?,?> attr : _attributeTypes.values())
         {
-            if(attr.getAnnotation().mandatory() && !(_attributes.containsKey(attr.getName())
-                                                     || !"".equals(attr.getAnnotation().defaultValue())))
+            if(attr.isAutomated())
             {
-                deleted();
-                throw new IllegalArgumentException("Mandatory attribute " + attr.getName() + " not supplied for instance of " + getClass().getName());
+                ConfiguredAutomatedAttribute<?,?> autoAttr = (ConfiguredAutomatedAttribute<?,?>)attr;
+                if (autoAttr.isMandatory() && !(_attributes.containsKey(attr.getName())
+                                            || !"".equals(autoAttr.defaultValue())))
+                {
+                    deleted();
+                    throw new IllegalArgumentException("Mandatory attribute "
+                                                       + attr.getName()
+                                                       + " not supplied for instance of "
+                                                       + getClass().getName());
+                }
             }
         }
     }
@@ -333,10 +346,10 @@ public abstract class AbstractConfigured
     {
         try
         {
-            final ConfiguredObjectAttribute attribute = _attributeTypes.get(name);
-            if(value == null && !"".equals(attribute.getAnnotation().defaultValue()))
+            final ConfiguredAutomatedAttribute attribute = (ConfiguredAutomatedAttribute) _attributeTypes.get(name);
+            if(value == null && !"".equals(attribute.defaultValue()))
             {
-                value = attribute.getAnnotation().defaultValue();
+                value = attribute.defaultValue();
             }
             ConfiguredObjectTypeRegistry.AutomatedField field = _automatedFields.get(name);
 
@@ -436,7 +449,7 @@ public abstract class AbstractConfigured
                     }
                 }
             });
-            validate();
+            onValidate();
         }
     }
 
@@ -444,7 +457,7 @@ public abstract class AbstractConfigured
     {
         if(skipCheck || !_open.get())
         {
-            resolve();
+            onResolve();
             applyToChildren(new Action<ConfiguredObject<?>>()
             {
                 @Override
@@ -493,25 +506,25 @@ public abstract class AbstractConfigured
         }
     }
 
-    public void validate()
+    public void onValidate()
     {
     }
 
-    protected void resolve()
+    protected void onResolve()
     {
         for (ConfiguredObjectAttribute<?, ?> attr : _attributeTypes.values())
         {
             String attrName = attr.getName();
-            ManagedAttribute attrAnnotation = attr.getAnnotation();
-            if (attrAnnotation.automate())
+            if (attr.isAutomated())
             {
+                ConfiguredAutomatedAttribute<?,?> autoAttr = (ConfiguredAutomatedAttribute<?,?>)attr;
                 if (_attributes.containsKey(attrName))
                 {
                     automatedSetValue(attrName, _attributes.get(attrName));
                 }
-                else if (!"".equals(attrAnnotation.defaultValue()))
+                else if (!"".equals(autoAttr.defaultValue()))
                 {
-                    automatedSetValue(attrName, attrAnnotation.defaultValue());
+                    automatedSetValue(attrName, autoAttr.defaultValue());
                 }
 
             }
@@ -566,11 +579,11 @@ public abstract class AbstractConfigured
 
     public State getDesiredState()
     {
-        return null;  //TODO
+        return _desiredState;
     }
 
     @Override
-    public final State setDesiredState(final State currentState, final State desiredState)
+    public final State setDesiredState(final State desiredState)
             throws IllegalStateTransitionException, AccessControlException
     {
 
@@ -580,10 +593,11 @@ public abstract class AbstractConfigured
                             @Override
                             public State execute()
                             {
-                                authoriseSetDesiredState(currentState, desiredState);
-                                if (setState(currentState, desiredState))
+                                State state = getState();
+                                authoriseSetDesiredState(desiredState);
+                                if (setState(desiredState))
                                 {
-                                    notifyStateChanged(currentState, desiredState);
+                                    notifyStateChanged(state, desiredState);
                                     return desiredState;
                                 }
                                 else
@@ -597,7 +611,7 @@ public abstract class AbstractConfigured
     /**
      * @return true when the state has been successfully updated to desiredState or false otherwise
      */
-    protected abstract boolean setState(State currentState, State desiredState);
+    protected abstract boolean setState(State desiredState);
 
     protected void notifyStateChanged(final State currentState, final State desiredState)
     {
@@ -689,10 +703,10 @@ public abstract class AbstractConfigured
     public Object getAttribute(String name)
     {
         ConfiguredObjectAttribute<X,?> attr = (ConfiguredObjectAttribute<X, ?>) _attributeTypes.get(name);
-        if(attr != null && (attr.getAnnotation().automate() || attr.getAnnotation().derived()))
+        if(attr != null && (attr.isAutomated() || attr.isDerived()))
         {
             Object value = attr.getValue((X)this);
-            if(value != null && attr.getAnnotation().secure() &&
+            if(value != null && attr.isSecure() &&
                !SecurityManager.isSystemProcess())
             {
                 return SECURE_VALUES.get(value.getClass());
@@ -702,11 +716,15 @@ public abstract class AbstractConfigured
                 return value;
             }
         }
-        else
+        else if(attr != null)
         {
             Object value = getActualAttribute(name);
             return value;
         }
+        else
+        {
+            throw new IllegalArgumentException("Unknown attribute: '" + name + "'");
+        }
     }
 
     @Override
@@ -732,20 +750,9 @@ public abstract class AbstractConfigured
 
     private Object getActualAttribute(final String name)
     {
-        if(CREATED_BY.equals(name))
-        {
-            return getCreatedBy();
-        }
-        else if(CREATED_TIME.equals(name))
-        {
-            return getCreatedTime();
-        }
-        else
+        synchronized (_attributes)
         {
-            synchronized (_attributes)
-            {
-                return _attributes.get(name);
-            }
+            return _attributes.get(name);
         }
     }
 
@@ -784,7 +791,7 @@ public abstract class AbstractConfigured
                 //TODO: don't put nulls
                 _attributes.put(name, desired);
                 ConfiguredObjectAttribute<?,?> attr = _attributeTypes.get(name);
-                if(attr != null && attr.getAnnotation().automate())
+                if(attr != null && attr.isAutomated())
                 {
                     automatedSetValue(name, desired);
                 }
@@ -846,25 +853,29 @@ public abstract class AbstractConfigured
                     @Override
                     public Map<String, Object> run()
                     {
-                        Map<String,Object> actualAttributes = new HashMap<String, Object>(getActualAttributes());
-                        Iterator<Map.Entry<String,Object>> attributeIterator = actualAttributes.entrySet().iterator();
-
-                        while(attributeIterator.hasNext())
+                        Map<String,Object> attributes = new HashMap<String, Object>();
+                        Map<String,Object> actualAttributes = getActualAttributes();
+                        for(ConfiguredObjectAttribute<?,?> attr : _attributeTypes.values())
                         {
-                            Map.Entry<String, Object> entry = attributeIterator.next();
-                            ConfiguredObjectAttribute<?, ?> attributeDefinition =
-                                    _attributeTypes.get(entry.getKey());
-                            if(attributeDefinition != null && !attributeDefinition.getAnnotation().persist())
-                            {
-                                attributeIterator.remove();
-                            }
-                            else if(entry.getValue() instanceof ConfiguredObject)
+                            if(attr.isPersisted())
                             {
-                                entry.setValue(((ConfiguredObject)entry.getValue()).getId());
+                                if(attr.isDerived())
+                                {
+                                    attributes.put(attr.getName(), getAttribute(attr.getName()));
+                                }
+                                else if(actualAttributes.containsKey(attr.getName()))
+                                {
+                                    Object value = actualAttributes.get(attr.getName());
+                                    if(value instanceof ConfiguredObject)
+                                    {
+                                        value = ((ConfiguredObject)value).getId();
+                                    }
+                                    attributes.put(attr.getName(), value);
+                                }
                             }
                         }
-                        actualAttributes.remove(ID);
-                        return actualAttributes;
+                        attributes.remove(ID);
+                        return attributes;
                     }
                 });
             }
@@ -1070,7 +1081,7 @@ public abstract class AbstractConfigured
                                                             new AttributeGettingHandler(attributes));
     }
 
-    protected void authoriseSetDesiredState(State currentState, State desiredState) throws AccessControlException
+    protected void authoriseSetDesiredState(State desiredState) throws AccessControlException
     {
         // allowed by default
     }
@@ -1337,11 +1348,11 @@ public abstract class AbstractConfigured
 
         protected Object getValue(final ConfiguredObjectAttribute attribute)
         {
-            ManagedAttribute annotation = attribute.getAnnotation();
-            if(annotation.automate())
+            if(attribute.isAutomated())
             {
+                ConfiguredAutomatedAttribute autoAttr = (ConfiguredAutomatedAttribute)attribute;
                 Object value = _attributes.get(attribute.getName());
-                return attribute.convert(value == null && !"".equals(annotation.defaultValue()) ? annotation.defaultValue() : value , AbstractConfiguredObject.this);
+                return attribute.convert(value == null && !"".equals(autoAttr.defaultValue()) ? autoAttr.defaultValue() : value , AbstractConfiguredObject.this);
             }
             else
             {

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractUnresolvedObject.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractUnresolvedObject.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractUnresolvedObject.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractUnresolvedObject.java Fri May  2 20:32:16 2014
@@ -53,42 +53,47 @@ public abstract class AbstractUnresolved
                 ConfiguredObjectTypeRegistry.getAttributes(clazz);
         for(ConfiguredObjectAttribute<? super C, ?> attribute : attributes)
         {
-            final Class<?> attributeType = attribute.getType();
-            if(ConfiguredObject.class.isAssignableFrom(attributeType))
+            if(attribute.isPersisted())
             {
-                addUnresolvedObject((Class<? extends ConfiguredObject>) attributeType, attribute.getName(), attribute.getAnnotation().mandatory());
-            }
-            else if(Collection.class.isAssignableFrom(attributeType))
-            {
-                Type returnType = attribute.getGetter().getGenericReturnType();
-                Class<? extends ConfiguredObject> attrClass = getMemberType(returnType);
-                if(attrClass != null)
+                final Class<?> attributeType = attribute.getType();
+                if (ConfiguredObject.class.isAssignableFrom(attributeType))
+                {
+                    addUnresolvedObject((Class<? extends ConfiguredObject>) attributeType,
+                                        attribute.getName(),
+                                        attribute.isAutomated() && ((ConfiguredAutomatedAttribute<? super C,?>)attribute).isMandatory());
+                }
+                else if (Collection.class.isAssignableFrom(attributeType))
                 {
-                    Object attrValue = _record.getAttributes().get(attribute.getName());
-                    if(attrValue != null)
+                    Type returnType = attribute.getGetter().getGenericReturnType();
+                    Class<? extends ConfiguredObject> attrClass = getMemberType(returnType);
+                    if (attrClass != null)
                     {
-                        if (attrValue instanceof Collection)
+                        Object attrValue = _record.getAttributes().get(attribute.getName());
+                        if (attrValue != null)
                         {
-                            for (Object val : (Collection) attrValue)
+                            if (attrValue instanceof Collection)
                             {
-                                addUnresolvedObject(attrClass, attribute.getName(), val);
+                                for (Object val : (Collection) attrValue)
+                                {
+                                    addUnresolvedObject(attrClass, attribute.getName(), val);
+                                }
                             }
-                        }
-                        else if(attrValue instanceof Object[])
-                        {
-                            for (Object val : (Object[]) attrValue)
+                            else if (attrValue instanceof Object[])
                             {
-                                addUnresolvedObject(attrClass, attribute.getName(), val);
+                                for (Object val : (Object[]) attrValue)
+                                {
+                                    addUnresolvedObject(attrClass, attribute.getName(), val);
+                                }
+                            }
+                            else
+                            {
+                                addUnresolvedObject(attrClass, attribute.getName(), attrValue);
                             }
-                        }
-                        else
-                        {
-                            addUnresolvedObject(attrClass, attribute.getName(), attrValue);
                         }
                     }
-                }
 
 
+                }
             }
         }
     }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java Fri May  2 20:32:16 2014
@@ -32,14 +32,14 @@ public interface Binding<X extends Bindi
     public String EXCHANGE = "exchange";
 
     // TODO - this is a hack
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     Queue<?> getQueue();
 
     // TODO - this is a hack
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     Exchange<?> getExchange();
 
-    @ManagedAttribute( automate = true )
+    @ManagedAttribute
     Map<String,Object> getArguments();
 
     @ManagedStatistic

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java Fri May  2 20:32:16 2014
@@ -74,52 +74,52 @@ public interface Broker<X extends Broker
     @ManagedContextDefault(name = QPID_JMX_PORT)
     public static final String DEFAULT_JMX_PORT_NUMBER  = "9099";
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     String getBuildVersion();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     String getOperatingSystem();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     String getPlatform();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     String getProcessPid();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     String getProductVersion();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     Collection<String> getSupportedVirtualHostStoreTypes();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     Collection<String> getSupportedAuthenticationProviders();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     Collection<String> getSupportedPreferencesProviderTypes();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     Collection<String> getSupportedVirtualHostTypes();
 
-    @ManagedAttribute( automate = true )
+    @ManagedAttribute
     String getDefaultVirtualHost();
 
-    @ManagedAttribute( automate = true, defaultValue = "256" )
+    @ManagedAttribute( defaultValue = "256" )
     int getConnection_sessionCountLimit();
 
-    @ManagedAttribute( automate = true, defaultValue = "0")
+    @ManagedAttribute( defaultValue = "0")
     int getConnection_heartBeatDelay();
 
-    @ManagedAttribute( automate = true, defaultValue = "true" )
+    @ManagedAttribute( defaultValue = "true" )
     boolean getConnection_closeWhenNoRoute();
 
-    @ManagedAttribute( automate = true, defaultValue = "0" )
+    @ManagedAttribute( defaultValue = "0" )
     int getStatisticsReportingPeriod();
 
-    @ManagedAttribute( automate = true, defaultValue = "false")
+    @ManagedAttribute( defaultValue = "false")
     boolean getStatisticsReportingResetEnabled();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute( persist = true )
     String getModelVersion();
 
     @ManagedStatistic

Added: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java?rev=1592030&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java (added)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java Fri May  2 20:32:16 2014
@@ -0,0 +1,72 @@
+/*
+ *
+ * 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.lang.reflect.Method;
+
+public class ConfiguredAutomatedAttribute<C extends ConfiguredObject, T>  extends ConfiguredObjectAttribute<C,T>
+{
+    private final ManagedAttribute _annotation;
+
+    ConfiguredAutomatedAttribute(final Class<C> clazz,
+                                 final Method getter,
+                                 final ManagedAttribute annotation)
+    {
+        super(clazz, getter);
+        _annotation = annotation;
+    }
+
+    public boolean isAutomated()
+    {
+        return true;
+    }
+
+    public boolean isDerived()
+    {
+        return false;
+    }
+
+    public String defaultValue()
+    {
+        return _annotation.defaultValue();
+    }
+
+    public boolean isSecure()
+    {
+        return _annotation.secure();
+    }
+
+    public boolean isMandatory()
+    {
+        return _annotation.mandatory();
+    }
+
+    public boolean isPersisted()
+    {
+        return _annotation.persist();
+    }
+
+    public String getDescription()
+    {
+        return _annotation.description();
+    }
+
+}

Added: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java?rev=1592030&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java (added)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java Fri May  2 20:32:16 2014
@@ -0,0 +1,62 @@
+/*
+ *
+ * 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.lang.reflect.Method;
+
+public class ConfiguredDerivedAttribute<C extends ConfiguredObject, T>  extends ConfiguredObjectAttribute<C,T>
+{
+    private final DerivedAttribute _annotation;
+
+    ConfiguredDerivedAttribute(final Class<C> clazz,
+                               final Method getter,
+                               final DerivedAttribute annotation)
+    {
+        super(clazz, getter);
+        _annotation = annotation;
+    }
+
+    public boolean isAutomated()
+    {
+        return false;
+    }
+
+    public boolean isDerived()
+    {
+        return true;
+    }
+
+    public boolean isSecure()
+    {
+        return _annotation.secure();
+    }
+
+    public boolean isPersisted()
+    {
+        return _annotation.persist();
+    }
+
+    public String getDescription()
+    {
+        return _annotation.description();
+    }
+
+}

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java Fri May  2 20:32:16 2014
@@ -45,6 +45,7 @@ public interface ConfiguredObject<X exte
     String LAST_UPDATED_BY = "lastUpdatedBy";
     String LAST_UPDATED_TIME = "lastUpdatedTime";
     String STATE = "state";
+    String DESIRED_STATE = "desiredState";
     String CREATED_BY = "createdBy";
     String CREATED_TIME = "createdTime";
 
@@ -54,7 +55,7 @@ public interface ConfiguredObject<X exte
      *
      * @return the objects id
      */
-    @ManagedAttribute( automate = true, mandatory = true )
+    @ManagedAttribute( mandatory = true )
     UUID getId();
 
     /**
@@ -62,31 +63,31 @@ public interface ConfiguredObject<X exte
      *
      * @return the name of the object
      */
-    @ManagedAttribute( automate = true, mandatory = true)
+    @ManagedAttribute( mandatory = true)
     String getName();
 
 
-    @ManagedAttribute( automate = true )
+    @ManagedAttribute
     String getDescription();
 
-    @ManagedAttribute( automate = true )
+    @ManagedAttribute
     String getType();
 
-    @ManagedAttribute(automate = true)
+    @ManagedAttribute
     Map<String, String> getContext();
 
     <T> T getContextValue(Class<T> clazz, String propertyName);
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute( persist = true )
     String getLastUpdatedBy();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute( persist = true )
     long getLastUpdatedTime();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute( persist = true )
     String getCreatedBy();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute( persist = true )
     long getCreatedTime();
 
 
@@ -99,6 +100,7 @@ public interface ConfiguredObject<X exte
      *
      * @return the desired state of the object
      */
+    @ManagedAttribute
     State getDesiredState();
 
     /**
@@ -107,13 +109,12 @@ public interface ConfiguredObject<X exte
      * Request a change to the current state. The caller must pass in the state it believe the object to be in, if
      * this differs from the current desired state when the object evaluates the request, then no state change will occur.
      *
-     * @param currentState the state the caller believes the object to be in
      * @param desiredState the state the caller wishes the object to attain
      * @return the new current state
      * @throws IllegalStateTransitionException  the requested state transition is invalid
      * @throws AccessControlException the current context does not have sufficient permissions to change the state
      */
-    State setDesiredState(State currentState, State desiredState) throws IllegalStateTransitionException,
+    State setDesiredState(State desiredState) throws IllegalStateTransitionException,
                                                                          AccessControlException;
 
     /**
@@ -125,7 +126,7 @@ public interface ConfiguredObject<X exte
      *
      * @return the actual state of the object
      */
-    @ManagedAttribute( state = true )
+    @DerivedAttribute
     State getState();
 
 
@@ -159,7 +160,7 @@ public interface ConfiguredObject<X exte
      *
      * @return the durability
      */
-    @ManagedAttribute( automate = true, defaultValue = "true" )
+    @ManagedAttribute( defaultValue = "true" )
     boolean isDurable();
 
     /**
@@ -167,7 +168,7 @@ public interface ConfiguredObject<X exte
      *
      * @return the lifetime policy
      */
-    @ManagedAttribute( automate = true, defaultValue = "PERMANENT" )
+    @ManagedAttribute( defaultValue = "PERMANENT" )
     LifetimePolicy getLifetimePolicy();
 
     /**
@@ -254,8 +255,6 @@ public interface ConfiguredObject<X exte
 
     void open();
 
-    void validate();
-
     TaskExecutor getTaskExecutor();
 
     ConfiguredObjectFactory getObjectFactory();

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java Fri May  2 20:32:16 2014
@@ -22,27 +22,29 @@ package org.apache.qpid.server.model;
 
 import java.lang.reflect.Method;
 
-public final class ConfiguredObjectAttribute<C extends ConfiguredObject, T> extends ConfiguredObjectAttributeOrStatistic<C,T>
+public abstract class ConfiguredObjectAttribute<C extends ConfiguredObject, T> extends ConfiguredObjectAttributeOrStatistic<C,T>
 {
 
-    private final ManagedAttribute _annotation;
 
     ConfiguredObjectAttribute(Class<C> clazz,
-                              final Method getter,
-                              final ManagedAttribute annotation)
+                              final Method getter)
     {
         super(getter);
         if(getter.getParameterTypes().length != 0)
         {
             throw new IllegalArgumentException("ManagedAttribute annotation should only be added to no-arg getters");
         }
-        _annotation = annotation;
     }
 
-    public ManagedAttribute getAnnotation()
-    {
-        return _annotation;
-    }
+    public abstract boolean isAutomated();
+
+    public abstract boolean isDerived();
+
+    public abstract boolean isSecure();
+
+    public abstract boolean isPersisted();
+
+    public abstract String getDescription();
 
     public T convert(final Object value, C object)
     {

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectTypeRegistry.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectTypeRegistry.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectTypeRegistry.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectTypeRegistry.java Fri May  2 20:32:16 2014
@@ -390,41 +390,53 @@ public class ConfiguredObjectTypeRegistr
 
             for(Method m : clazz.getDeclaredMethods())
             {
-                ManagedAttribute annotation = m.getAnnotation(ManagedAttribute.class);
-                if(annotation != null)
+
+                if(m.isAnnotationPresent(ManagedAttribute.class))
                 {
-                    if(!(annotation.automate() || annotation.derived() || annotation.state()))
+                    ManagedAttribute annotation = m.getAnnotation(ManagedAttribute.class);
+
+                    if(!clazz.isInterface() || !ConfiguredObject.class.isAssignableFrom(clazz))
+                    {
+                        throw new ServerScopedRuntimeException("Can only define ManagedAttributes on interfaces which extend " + ConfiguredObject.class.getSimpleName() + ". " + clazz.getSimpleName() + " does not meet these criteria.");
+                    }
+
+                    ConfiguredObjectAttribute<?,?> attribute = new ConfiguredAutomatedAttribute<>(clazz, m, annotation);
+                    if(attributeSet.contains(attribute))
                     {
-                        throw new ServerScopedRuntimeException("ManagedAttributes must be either automated or derived. " + m.getName() + " on "  + clazz.getSimpleName() + " does not meet this criterion.");
+                        attributeSet.remove(attribute);
                     }
+                    attributeSet.add(attribute);
+                }
+                else if(m.isAnnotationPresent(DerivedAttribute.class))
+                {
+                    DerivedAttribute annotation = m.getAnnotation(DerivedAttribute.class);
+
                     if(!clazz.isInterface() || !ConfiguredObject.class.isAssignableFrom(clazz))
                     {
                         throw new ServerScopedRuntimeException("Can only define ManagedAttributes on interfaces which extend " + ConfiguredObject.class.getSimpleName() + ". " + clazz.getSimpleName() + " does not meet these criteria.");
                     }
 
-                    ConfiguredObjectAttribute<?,?> attribute = new ConfiguredObjectAttribute(clazz, m, annotation);
+                    ConfiguredObjectAttribute<?,?> attribute = new ConfiguredDerivedAttribute<>(clazz, m, annotation);
                     if(attributeSet.contains(attribute))
                     {
                         attributeSet.remove(attribute);
                     }
                     attributeSet.add(attribute);
+
                 }
-                else
+                else if(m.isAnnotationPresent(ManagedStatistic.class))
                 {
                     ManagedStatistic statAnnotation = m.getAnnotation(ManagedStatistic.class);
-                    if(statAnnotation != null)
+                    if(!clazz.isInterface() || !ConfiguredObject.class.isAssignableFrom(clazz))
                     {
-                        if(!clazz.isInterface() || !ConfiguredObject.class.isAssignableFrom(clazz))
-                        {
-                            throw new ServerScopedRuntimeException("Can only define ManagedStatistics on interfaces which extend " + ConfiguredObject.class.getSimpleName() + ". " + clazz.getSimpleName() + " does not meet these criteria.");
-                        }
-                        ConfiguredObjectStatistic statistic = new ConfiguredObjectStatistic(clazz, m);
-                        if(statisticSet.contains(statistic))
-                        {
-                            statisticSet.remove(statistic);
-                        }
-                        statisticSet.add(statistic);
+                        throw new ServerScopedRuntimeException("Can only define ManagedStatistics on interfaces which extend " + ConfiguredObject.class.getSimpleName() + ". " + clazz.getSimpleName() + " does not meet these criteria.");
                     }
+                    ConfiguredObjectStatistic statistic = new ConfiguredObjectStatistic(clazz, m);
+                    if(statisticSet.contains(statistic))
+                    {
+                        statisticSet.remove(statistic);
+                    }
+                        statisticSet.add(statistic);
                 }
             }
 
@@ -436,7 +448,7 @@ public class ConfiguredObjectTypeRegistr
             for(ConfiguredObjectAttribute<?,?> attr : attrCol)
             {
                 attrMap.put(attr.getName(), attr);
-                if(attr.getAnnotation().automate())
+                if(attr.isAutomated())
                 {
                     fieldMap.put(attr.getName(), findField(attr, clazz));
                 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java Fri May  2 20:32:16 2014
@@ -43,37 +43,37 @@ public interface Connection<X extends Co
     String TRANSPORT = "transport";
     String PORT = "port";
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     String getClientId();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     String getClientVersion();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     boolean isIncoming();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     String getLocalAddress();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     String getPrincipal();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     String getRemoteAddress();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     String getRemoteProcessName();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     String getRemoteProcessPid();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     long getSessionCountLimit();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     Transport getTransport();
 
-    @ManagedAttribute( derived = true )
+    @DerivedAttribute
     Port getPort();
 
     @ManagedStatistic

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java Fri May  2 20:32:16 2014
@@ -29,19 +29,19 @@ public interface Consumer<X extends Cons
     public String SELECTOR = "selector";
     public String SETTLEMENT_MODE = "settlementMode";
 
-    @ManagedAttribute( automate = true )
+    @ManagedAttribute
     String getDistributionMode();
 
-    @ManagedAttribute( automate = true )
+    @ManagedAttribute
     String getSettlementMode();
 
-    @ManagedAttribute( automate = true )
+    @ManagedAttribute
     boolean isExclusive();
 
-    @ManagedAttribute( automate = true )
+    @ManagedAttribute
     boolean isNoLocal();
 
-    @ManagedAttribute( automate = true )
+    @ManagedAttribute
     String getSelector();
 
     @ManagedStatistic

Added: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/DerivedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/DerivedAttribute.java?rev=1592030&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/DerivedAttribute.java (added)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/DerivedAttribute.java Fri May  2 20:32:16 2014
@@ -0,0 +1,35 @@
+package org.apache.qpid.server.model;/*
+ *
+ * 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.
+ *
+ */
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface DerivedAttribute
+{
+    boolean secure() default false;
+    boolean persist() default false;
+    String description() default "";
+
+}

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java Fri May  2 20:32:16 2014
@@ -32,7 +32,7 @@ public interface Exchange<X extends Exch
 
     // Attributes
 
-    @ManagedAttribute(automate = true)
+    @ManagedAttribute
     Exchange<?> getAlternateExchange();
 
     //children

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ExternalFileBasedAuthenticationManager.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ExternalFileBasedAuthenticationManager.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ExternalFileBasedAuthenticationManager.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ExternalFileBasedAuthenticationManager.java Fri May  2 20:32:16 2014
@@ -24,6 +24,6 @@ public interface ExternalFileBasedAuthen
 {
     String PATH = "path";
 
-    @ManagedAttribute( automate = true , mandatory = true, description = "File location")
+    @ManagedAttribute( mandatory = true, description = "File location")
     public String getPath();
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java Fri May  2 20:32:16 2014
@@ -20,17 +20,16 @@
  */
 package org.apache.qpid.server.model;
 
+import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 @Retention(RetentionPolicy.RUNTIME)
-
+@Target(ElementType.METHOD)
 public @interface ManagedAttribute
 {
     boolean secure() default false;
-    boolean derived() default false;
-    boolean automate() default false;
-    boolean state() default false;
     boolean mandatory() default false;
     boolean persist() default true;
     String defaultValue() default "";

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttributeField.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttributeField.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttributeField.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttributeField.java Fri May  2 20:32:16 2014
@@ -21,10 +21,13 @@
 
 package org.apache.qpid.server.model;
 
+import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 @Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
 public @interface ManagedAttributeField
 {
     String beforeSet() default "";

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedContextDefault.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedContextDefault.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedContextDefault.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedContextDefault.java Fri May  2 20:32:16 2014
@@ -19,10 +19,13 @@ package org.apache.qpid.server.model;/*
  *
  */
 
+import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 @Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
 public @interface ManagedContextDefault
 {
     String name();

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java?rev=1592030&r1=1592029&r2=1592030&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java Fri May  2 20:32:16 2014
@@ -20,11 +20,13 @@
  */
 package org.apache.qpid.server.model;
 
+import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 @Retention(RetentionPolicy.RUNTIME)
-
+@Target(ElementType.TYPE)
 public @interface ManagedObject
 {
     boolean category() default true;



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