Author: kwall
Date: Sat Apr 26 22:22:10 2014
New Revision: 1590316

URL: http://svn.apache.org/r1590316
Log:
QPID-5715: [Java Broker]: Refactor VHN implementations to avoid duplicated code

Added:
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
      - copied, changed from r1590281, 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
Modified:
    
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.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/virtualhostnode/AbstractStandardVirtualHostNode.java

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=1590316&r1=1590315&r2=1590316&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
 Sat Apr 26 22:22:10 2014
@@ -21,29 +21,20 @@
 package org.apache.qpid.server.virtualhostnode.berkeleydb;
 
 import java.security.PrivilegedAction;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
 
 import javax.security.auth.Subject;
 
 import org.apache.log4j.Logger;
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.logging.EventLogger;
 import org.apache.qpid.server.logging.messages.ConfigStoreMessages;
-import org.apache.qpid.server.logging.subjects.MessageStoreLogSubject;
-import org.apache.qpid.server.model.AbstractConfiguredObject;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.BrokerModel;
 import org.apache.qpid.server.model.ConfiguredObject;
-import org.apache.qpid.server.model.ConfiguredObjectFactory;
-import org.apache.qpid.server.model.LifetimePolicy;
 import org.apache.qpid.server.model.ManagedAttributeField;
 import org.apache.qpid.server.model.ManagedObject;
 import org.apache.qpid.server.model.State;
-import org.apache.qpid.server.model.SystemContext;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.security.SecurityManager;
@@ -55,12 +46,13 @@ import org.apache.qpid.server.store.berk
 import 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade;
 import 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacadeFactory;
 import org.apache.qpid.server.virtualhost.VirtualHostState;
+import org.apache.qpid.server.virtualhostnode.AbstractVirtualHostNode;
 
 import com.sleepycat.je.rep.StateChangeEvent;
 import com.sleepycat.je.rep.StateChangeListener;
 
 @ManagedObject( category = false, type = "BDB_HA" )
-public class BDBHAVirtualHostNodeImpl extends 
AbstractConfiguredObject<BDBHAVirtualHostNodeImpl> implements 
BDBHAVirtualHostNode<BDBHAVirtualHostNodeImpl>
+public class BDBHAVirtualHostNodeImpl extends 
AbstractVirtualHostNode<BDBHAVirtualHostNodeImpl> implements 
BDBHAVirtualHostNode<BDBHAVirtualHostNodeImpl>
 {
     private static final Logger LOGGER = 
Logger.getLogger(BDBHAVirtualHostNodeImpl.class);
 
@@ -97,27 +89,9 @@ public class BDBHAVirtualHostNodeImpl ex
     @ManagedAttributeField
     private Map<String, String> _replicatedEnvironmentConfiguration;
 
-    //TODO: remove this field
-    @ManagedAttributeField
-    private boolean _messageStoreProvider;
-
-    private final AtomicReference<State> _state = new 
AtomicReference<State>(State.INITIALISING);
-    private final Broker<?> _broker;
-    private final ConfiguredObjectFactory _objectFactory;
-    private final EventLogger _eventLogger;
-
-    private MessageStoreLogSubject _configurationStoreLogSubject;
-    private BDBMessageStore _durableConfigurationStore;
-
-    @SuppressWarnings("rawtypes")
-    protected BDBHAVirtualHostNodeImpl(Broker<?> broker, Map<String, Object> 
attributes, TaskExecutor taskExecutor)
-    {
-        super(Collections.<Class<? extends 
ConfiguredObject>,ConfiguredObject<?>>singletonMap(Broker.class, broker), 
attributes, taskExecutor);
-        _broker = broker;
-        _objectFactory = 
_broker.getParent(SystemContext.class).getObjectFactory();
-        SystemContext systemContext = _broker.getParent(SystemContext.class);
-        _eventLogger = systemContext.getEventLogger();
-
+    public BDBHAVirtualHostNodeImpl(Broker<?> broker, Map<String, Object> 
attributes, TaskExecutor taskExecutor)
+    {
+        super(broker, attributes, taskExecutor);
     }
 
     @Override
@@ -139,44 +113,6 @@ public class BDBHAVirtualHostNodeImpl ex
     }
 
     @Override
-    public VirtualHost<?,?,?> getVirtualHost()
-    {
-        @SuppressWarnings("rawtypes")
-        Collection<VirtualHost> children = getChildren(VirtualHost.class);
-        if (children.size() == 0)
-        {
-            return null;
-        }
-        else if (children.size() == 1)
-        {
-            return children.iterator().next();
-        }
-        else
-        {
-            throw new IllegalStateException(this + " has an unexpected number 
of virtualhost children, size " + children.size());
-        }
-    }
-
-
-    @Override
-    public DurableConfigurationStore getConfigurationStore()
-    {
-        return _durableConfigurationStore;
-    }
-
-    @Override
-    public State getState()
-    {
-        return _state.get();
-    }
-
-    @Override
-    public LifetimePolicy getLifetimePolicy()
-    {
-        return LifetimePolicy.PERMANENT;
-    }
-
-    @Override
     public String getGroupName()
     {
         return _groupName;
@@ -231,76 +167,10 @@ public class BDBHAVirtualHostNodeImpl ex
     }
 
     @Override
-    protected boolean setState(State currentState, State desiredState)
-    {
-        State  state = getState();
-
-        if (desiredState == State.DELETED)
-        {
-            if (state == State.ACTIVE)
-            {
-                setDesiredState(state, State.STOPPED);
-            }
-            if (state == State.INITIALISING || state == State.STOPPED || state 
== State.ERRORED)
-            {
-                if( _state.compareAndSet(state, State.DELETED))
-                {
-                    delete();
-                    return true;
-                }
-            }
-            else
-            {
-                throw new IllegalStateException("Cannot delete virtual host 
node in " + state + " state");
-            }
-        }
-        else if (desiredState == State.ACTIVE)
-        {
-            if ((state == State.INITIALISING || state == State.STOPPED) && 
_state.compareAndSet(state, State.ACTIVE))
-            {
-                try
-                {
-                    activate();
-                }
-                catch(RuntimeException e)
-                {
-                    _state.compareAndSet(State.ACTIVE, State.ERRORED);
-                    if (_broker.isManagementMode())
-                    {
-                        LOGGER.warn("Failed to make " + this + " active.", e);
-                    }
-                    else
-                    {
-                        throw e;
-                    }
-                }
-                return true;
-            }
-            else
-            {
-                throw new IllegalStateException("Cannot activate virtual host 
node in " + state + " state");
-            }
-        }
-        else if (desiredState == State.STOPPED)
-        {
-            if (_state.compareAndSet(state, State.STOPPED))
-            {
-                stop();
-                return true;
-            }
-            else
-            {
-                throw new IllegalStateException("Cannot stop virtual host node 
in " + state + " state");
-            }
-        }
-        return false;
-    }
-
-    @Override
     public String toString()
     {
-        return "BDBHAVirtualHostNodeImpl [name=" + getName() + ", storePath=" 
+ _storePath + ", groupName=" + _groupName + ", address=" + _address
-                + ", state=" + _state.get() + "]";
+        return "BDBHAVirtualHostNodeImpl [id=" + getId() + ", name=" + 
getName() + ", storePath=" + _storePath + ", groupName=" + _groupName + ", 
address=" + _address
+                + ", state=" + getState() + "]";
     }
 
     @SuppressWarnings({ "rawtypes", "unchecked" })
@@ -310,7 +180,7 @@ public class BDBHAVirtualHostNodeImpl ex
     {
         if(childClass == VirtualHost.class)
         {
-            if 
("MASTER".equals(((ReplicatedEnvironmentFacade)_durableConfigurationStore.getEnvironmentFacade()).getNodeState()))
+            if 
("MASTER".equals(((ReplicatedEnvironmentFacade)getConfigurationStore().getEnvironmentFacade()).getNodeState()))
             {
                 BDBHAVirtualHostFactory virtualHostFactory = new 
BDBHAVirtualHostFactory();
                 return (C) virtualHostFactory.create(getObjectFactory(), 
attributes,this);
@@ -325,69 +195,35 @@ public class BDBHAVirtualHostNodeImpl ex
         return super.addChild(childClass, attributes, otherParents);
     }
 
-    private void activate()
+    @Override
+    public BDBMessageStore getConfigurationStore()
     {
-        if (LOGGER.isDebugEnabled())
-        {
-            LOGGER.debug("Activating virtualhost node " + this);
-        }
-
-        _durableConfigurationStore = new BDBMessageStore(new 
ReplicatedEnvironmentFacadeFactory());
-        _configurationStoreLogSubject = new MessageStoreLogSubject(getName(), 
BDBMessageStore.class.getSimpleName());
-
-        Map<String, Object> attributes = buildAttributesForStore();
-
-        _durableConfigurationStore.openConfigurationStore(this, attributes);
-
-        _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.CREATED());
-        _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.STORE_LOCATION(getStorePath()));
-
-
-        ReplicatedEnvironmentFacade environmentFacade = 
(ReplicatedEnvironmentFacade) _durableConfigurationStore.getEnvironmentFacade();
-        environmentFacade.setStateChangeListener(new 
BDBHAMessageStoreStateChangeListener());
+        return (BDBMessageStore) super.getConfigurationStore();
     }
 
-    private void stop()
+    protected DurableConfigurationStore createConfigurationStore()
     {
-        destroyVirtualHostIfExist();
-        _durableConfigurationStore.closeConfigurationStore();
-        _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.CLOSE());
+        return new BDBMessageStore(new ReplicatedEnvironmentFacadeFactory());
     }
 
-    private void delete()
+    @Override
+    protected void activate()
     {
-        VirtualHost<?, ?, ?> virtualHost = getVirtualHost();
-        if (virtualHost != null)
+        if (LOGGER.isDebugEnabled())
         {
-            virtualHost.setDesiredState(virtualHost.getState(), State.DELETED);
+            LOGGER.debug("Activating virtualhost node " + this);
         }
 
-        //TODO: this needs to be called from parent
-        deleted();
+        Map<String, Object> attributes = buildAttributesForStore();
 
-        _durableConfigurationStore.onDelete();
+        getConfigurationStore().openConfigurationStore(this, attributes);
 
-    }
+        getEventLogger().message(getConfigurationStoreLogSubject(), 
ConfigStoreMessages.CREATED());
+        getEventLogger().message(getConfigurationStoreLogSubject(), 
ConfigStoreMessages.STORE_LOCATION(getStorePath()));
 
-    private Map<String, Object> buildAttributesForStore()
-    {
-        final Map<String, Object> attributes = new HashMap<String, Object>();
-        Subject.doAs(SecurityManager.getSubjectWithAddedSystemRights(), new 
PrivilegedAction<Object>()
-        {
-            @Override
-            public Object run()
-            {
-                for (String attributeName : getAttributeNames())
-                {
-                    Object value = getAttribute(attributeName);
-                    attributes.put(attributeName, value);
-                }
-                return null;
-            }
-        });
 
-        attributes.put(IS_MESSAGE_STORE_PROVIDER, true);
-        return attributes;
+        ReplicatedEnvironmentFacade environmentFacade = 
(ReplicatedEnvironmentFacade) getConfigurationStore().getEnvironmentFacade();
+        environmentFacade.setStateChangeListener(new 
BDBHAMessageStoreStateChangeListener());
     }
 
     private void onMaster()
@@ -395,12 +231,12 @@ public class BDBHAVirtualHostNodeImpl ex
         try
         {
             destroyVirtualHostIfExist();
-            
_durableConfigurationStore.getEnvironmentFacade().getEnvironment().flushLog(true);
+            
getConfigurationStore().getEnvironmentFacade().getEnvironment().flushLog(true);
 
-            _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.RECOVERY_START());
-            VirtualHostStoreUpgraderAndRecoverer upgraderAndRecoverer = new 
VirtualHostStoreUpgraderAndRecoverer(this, _objectFactory);
-            upgraderAndRecoverer.perform(_durableConfigurationStore);
-            _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.RECOVERY_COMPLETE());
+            getEventLogger().message(getConfigurationStoreLogSubject(), 
ConfigStoreMessages.RECOVERY_START());
+            VirtualHostStoreUpgraderAndRecoverer upgraderAndRecoverer = new 
VirtualHostStoreUpgraderAndRecoverer(this);
+            upgraderAndRecoverer.perform(getConfigurationStore());
+            getEventLogger().message(getConfigurationStoreLogSubject(), 
ConfigStoreMessages.RECOVERY_COMPLETE());
 
             VirtualHost<?,?,?>  host = getVirtualHost();
 

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java?rev=1590316&r1=1590315&r2=1590316&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java
 Sat Apr 26 22:22:10 2014
@@ -30,7 +30,6 @@ import java.util.UUID;
 
 import org.apache.qpid.server.filter.FilterSupport;
 import org.apache.qpid.server.model.Binding;
-import org.apache.qpid.server.model.ConfiguredObjectFactory;
 import org.apache.qpid.server.model.Exchange;
 import org.apache.qpid.server.model.Queue;
 import org.apache.qpid.server.model.UUIDGenerator;
@@ -54,7 +53,7 @@ public class VirtualHostStoreUpgraderAnd
 
     private final Map<String, UUID> _defaultExchangeIds;
 
-    public VirtualHostStoreUpgraderAndRecoverer(VirtualHostNode<?> 
virtualHostNode, ConfiguredObjectFactory objectFactory)
+    public VirtualHostStoreUpgraderAndRecoverer(VirtualHostNode<?> 
virtualHostNode)
     {
         _virtualHostNode = virtualHostNode;
         register(new Upgrader_0_0_to_0_1());

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1590316&r1=1590315&r2=1590316&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
 Sat Apr 26 22:22:10 2014
@@ -72,6 +72,7 @@ import org.apache.qpid.server.security.S
 import org.apache.qpid.server.security.access.Operation;
 import org.apache.qpid.server.stats.StatisticsCounter;
 import org.apache.qpid.server.store.ConfiguredObjectRecord;
+import org.apache.qpid.server.store.ConfiguredObjectRecordImpl;
 import org.apache.qpid.server.store.DurableConfigurationStore;
 import org.apache.qpid.server.store.Event;
 import org.apache.qpid.server.store.EventListener;
@@ -1401,10 +1402,11 @@ public abstract class AbstractVirtualHos
                     }
                     catch (Exception e)
                     {
-                        _logger.warn("Exception occurred on store deletion", 
e);
+                        _logger.warn("Exception occurred on message store 
deletion", e);
                     }
                 }
                 setAttribute(VirtualHost.STATE, getState(), State.DELETED);
+                getDurableConfigurationStore().remove(asObjectRecord());
                 deleted();
             }
 
@@ -1561,7 +1563,8 @@ public abstract class AbstractVirtualHos
     protected void onCreate()
     {
         super.onCreate();
-        getDurableConfigurationStore().create(asObjectRecord());
+        ConfiguredObjectRecord record = asObjectRecord();
+        getDurableConfigurationStore().create(new 
ConfiguredObjectRecordImpl(record.getId(), record.getType(), 
record.getAttributes()));
     }
 
     protected void activate()

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java?rev=1590316&r1=1590315&r2=1590316&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
 Sat Apr 26 22:22:10 2014
@@ -21,62 +21,36 @@
 package org.apache.qpid.server.virtualhostnode;
 
 import java.io.File;
-import java.security.AccessControlException;
 import java.security.PrivilegedAction;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicReference;
 
 import javax.security.auth.Subject;
 
 import org.apache.log4j.Logger;
-
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.logging.EventLogger;
 import org.apache.qpid.server.logging.messages.ConfigStoreMessages;
-import org.apache.qpid.server.logging.subjects.MessageStoreLogSubject;
-import org.apache.qpid.server.model.AbstractConfiguredObject;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.BrokerModel;
 import org.apache.qpid.server.model.ConfiguredObject;
-import org.apache.qpid.server.model.LifetimePolicy;
-import org.apache.qpid.server.model.ManagedAttributeField;
 import org.apache.qpid.server.model.State;
-import org.apache.qpid.server.model.SystemContext;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.plugin.DurableConfigurationStoreFactory;
 import org.apache.qpid.server.security.SecurityManager;
-import org.apache.qpid.server.security.access.Operation;
 import org.apache.qpid.server.store.DurableConfigurationStore;
 import org.apache.qpid.server.store.MessageStore;
 import org.apache.qpid.server.store.VirtualHostStoreUpgraderAndRecoverer;
 import org.apache.qpid.server.virtualhost.StandardVirtualHost;
 
-public abstract class AbstractStandardVirtualHostNode<X extends 
AbstractStandardVirtualHostNode<X>> extends AbstractConfiguredObject<X>
+public abstract class AbstractStandardVirtualHostNode<X extends 
AbstractStandardVirtualHostNode<X>> extends AbstractVirtualHostNode<X>
                 implements VirtualHostNode<X>
 {
     private static final Logger LOGGER = 
Logger.getLogger(AbstractStandardVirtualHostNode.class);
 
-    private final Broker<?> _broker;
-    private final AtomicReference<State> _state = new 
AtomicReference<State>(State.INITIALISING);
-    private final EventLogger _eventLogger;
-
-    @ManagedAttributeField
-    private boolean _messageStoreProvider;
-
-    private MessageStoreLogSubject _configurationStoreLogSubject;
-    private DurableConfigurationStore _durableConfigurationStore;
-
-    @SuppressWarnings("rawtypes")
     public AbstractStandardVirtualHostNode(Broker<?> parent, Map<String, 
Object> attributes, TaskExecutor taskExecutor)
     {
-        super(parentsMap(parent), attributes, taskExecutor);
-        _broker = parent;
-        SystemContext systemContext = _broker.getParent(SystemContext.class);
-        _eventLogger = systemContext.getEventLogger();
+        super(parent, attributes, taskExecutor);
     }
 
     @Override
@@ -89,27 +63,6 @@ public abstract class AbstractStandardVi
         
durableConfigurationStoreFactory.validateConfigurationStoreSettings(storeSettings);
     }
 
-    @Override
-    public void onOpen()
-    {
-        super.onOpen();
-        DurableConfigurationStoreFactory durableConfigurationStoreFactory = 
getDurableConfigurationStoreFactory();
-        _durableConfigurationStore = 
durableConfigurationStoreFactory.createDurableConfigurationStore();
-        _configurationStoreLogSubject = new MessageStoreLogSubject(getName(), 
_durableConfigurationStore.getClass().getSimpleName());
-
-    }
-
-    protected abstract DurableConfigurationStoreFactory 
getDurableConfigurationStoreFactory();
-
-    protected Map<String, Object> getDefaultMessageStoreSettings()
-    {
-        // TODO perhaps look for the MS with the default annotation and 
associated default.
-        Map<String, Object> settings = new HashMap<String, Object>();
-        settings.put(MessageStore.STORE_TYPE, "DERBY");
-        settings.put(MessageStore.STORE_PATH, "${qpid.work_dir}" + 
File.separator + "derbystore" + File.separator + getName());
-        return settings;
-    }
-
     @SuppressWarnings({ "rawtypes", "unchecked" })
     @Override
     protected <C extends ConfiguredObject> C addChild(Class<C> childClass, 
Map<String, Object> attributes,
@@ -122,130 +75,18 @@ public abstract class AbstractStandardVi
         return super.addChild(childClass, attributes, otherParents);
     }
 
-
-
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    @Override
-    public <T extends ConfiguredObject> T getParent(Class<T> clazz)
-    {
-        if (clazz == Broker.class)
-        {
-            return (T) _broker;
-        }
-        return super.getParent(clazz);
-    }
-
-
-    @Override
-    public State getState()
-    {
-        return _state.get();
-    }
-
-    @Override
-    public LifetimePolicy getLifetimePolicy()
-    {
-        return LifetimePolicy.PERMANENT;
-    }
-
     @Override
-    protected boolean setState(State currentState, State desiredState)
+    protected DurableConfigurationStore createConfigurationStore()
     {
-        State state = _state.get();
-        if (desiredState == State.DELETED)
-        {
-            if (state == State.ACTIVE || state == State.INITIALISING)
-            {
-                state = setDesiredState(currentState, State.STOPPED);
-            }
-
-            if (state == State.STOPPED || state == State.ERRORED)
-            {
-                if( _state.compareAndSet(state, State.DELETED))
-                {
-                    delete();
-                    return true;
-                }
-            }
-            else
-            {
-                throw new IllegalStateException("Cannot delete virtual host 
node in " + state + " state");
-            }
-        }
-        else if (desiredState == State.ACTIVE)
-        {
-            if ((state == State.INITIALISING || state == State.STOPPED) && 
_state.compareAndSet(state, State.ACTIVE))
-            {
-                try
-                {
-                    activate();
-                }
-                catch(RuntimeException e)
-                {
-                    _state.compareAndSet(State.ACTIVE, State.ERRORED);
-                    if (_broker.isManagementMode())
-                    {
-                        LOGGER.warn("Failed to make " + this + " active.", e);
-                    }
-                    else
-                    {
-                        throw e;
-                    }
-                }
-                return true;
-            }
-            else
-            {
-                throw new IllegalStateException("Cannot activate virtual host 
node in " + state + " state");
-            }
-        }
-        else if (desiredState == State.STOPPED)
-        {
-            if (_state.compareAndSet(state, State.STOPPED))
-            {
-                stop();
-                return true;
-            }
-            else
-            {
-                throw new IllegalStateException("Cannot stop virtual host node 
in " + state + " state");
-            }
-        }
-        return false;
-    }
-
-
-    @Override
-    public boolean isMessageStoreProvider()
-    {
-        return _messageStoreProvider;
+        DurableConfigurationStoreFactory durableConfigurationStoreFactory = 
getDurableConfigurationStoreFactory();
+        DurableConfigurationStore store = 
durableConfigurationStoreFactory.createDurableConfigurationStore();
+        return store;
     }
 
-    @Override
-    public VirtualHost<?,?,?> getVirtualHost()
-    {
-        Collection<VirtualHost> children = getChildren(VirtualHost.class);
-        if (children.size() == 0)
-        {
-            return null;
-        }
-        else if (children.size() == 1)
-        {
-            return children.iterator().next();
-        }
-        else
-        {
-            throw new IllegalStateException(this + " has an unexpected number 
of virtualhost children, size " + children.size());
-        }
-    }
+    protected abstract DurableConfigurationStoreFactory 
getDurableConfigurationStoreFactory();
 
     @Override
-    public DurableConfigurationStore getConfigurationStore()
-    {
-        return _durableConfigurationStore;
-    }
-
-    private void activate()
+    protected void activate()
     {
         if (LOGGER.isDebugEnabled())
         {
@@ -254,23 +95,23 @@ public abstract class AbstractStandardVi
 
         Map<String, Object> attributes = buildAttributesForStore();
 
-        _durableConfigurationStore.openConfigurationStore(this, attributes);
+        getConfigurationStore().openConfigurationStore(this, attributes);
 
-        _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.CREATED());
+        getEventLogger().message(getConfigurationStoreLogSubject(), 
ConfigStoreMessages.CREATED());
 
         if (this instanceof FileBasedVirtualHostNode)
         {
             @SuppressWarnings("rawtypes")
             FileBasedVirtualHostNode fileBasedVirtualHostNode = 
(FileBasedVirtualHostNode) this;
-            _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.STORE_LOCATION(fileBasedVirtualHostNode.getStorePath()));
+            getEventLogger().message(getConfigurationStoreLogSubject(), 
ConfigStoreMessages.STORE_LOCATION(fileBasedVirtualHostNode.getStorePath()));
         }
 
-        _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.RECOVERY_START());
+        getEventLogger().message(getConfigurationStoreLogSubject(), 
ConfigStoreMessages.RECOVERY_START());
 
-        VirtualHostStoreUpgraderAndRecoverer upgrader = new 
VirtualHostStoreUpgraderAndRecoverer(this, getObjectFactory());
-        upgrader.perform(_durableConfigurationStore);
+        VirtualHostStoreUpgraderAndRecoverer upgrader = new 
VirtualHostStoreUpgraderAndRecoverer(this);
+        upgrader.perform(getConfigurationStore());
 
-        _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.RECOVERY_COMPLETE());
+        getEventLogger().message(getConfigurationStoreLogSubject(), 
ConfigStoreMessages.RECOVERY_COMPLETE());
 
         VirtualHost<?,?,?>  host = getVirtualHost();
 
@@ -307,75 +148,21 @@ public abstract class AbstractStandardVi
         host.setDesiredState(host.getState(), State.ACTIVE);
     }
 
-    private Map<String, Object> buildAttributesForStore()
-    {
-        final Map<String, Object> attributes = new HashMap<String, Object>();
-        Subject.doAs(SecurityManager.getSubjectWithAddedSystemRights(), new 
PrivilegedAction<Object>()
-        {
-            @Override
-            public Object run()
-            {
-                for (String attributeName : getAttributeNames())
-                {
-                    Object value = getAttribute(attributeName);
-                    attributes.put(attributeName, value);
-                }
-                return null;
-            }
-        });
-
-        return attributes;
-    }
-
-    private void delete()
-    {
-        VirtualHost<?, ?, ?> virtualHost = getVirtualHost();
-        if (virtualHost != null)
-        {
-            virtualHost.setDesiredState(virtualHost.getState(), State.DELETED);
-        }
-        //TODO: this needs to be called from parent
-        deleted();
-
-        // TODO Split onDelete into deleteMessageStore/deleteConfigStore
-        if (_durableConfigurationStore instanceof MessageStore)
-        {
-            ((MessageStore)_durableConfigurationStore).onDelete();
-        }
-
-    }
-
-    private void stop()
-    {
-        VirtualHost<?, ?, ?> virtualHost = getVirtualHost();
-        if (virtualHost != null)
-        {
-            virtualHost.setDesiredState(virtualHost.getState(), State.STOPPED);
-        }
-        _durableConfigurationStore.closeConfigurationStore();
-
-        _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.CLOSE());
-    }
-
     @Override
-    protected void authoriseSetDesiredState(State currentState, State 
desiredState) throws AccessControlException
+    public String toString()
     {
-        if(desiredState == State.DELETED)
-        {
-            if 
(!_broker.getSecurityManager().authoriseConfiguringBroker(getName(), 
VirtualHostNode.class, Operation.DELETE))
-            {
-                throw new AccessControlException("Deletion of virtual host 
node is denied");
-            }
-        }
+        return this.getClass().getSimpleName() +  "[id=" + getId() + ", name=" 
+ getName() + ", state=" + getState() + "]";
     }
 
-    @Override
-    protected void authoriseSetAttributes(ConfiguredObject<?> modified, 
Set<String> attributes) throws AccessControlException
+    // protected for unit testing purposes
+    protected Map<String, Object> getDefaultMessageStoreSettings()
     {
-        if 
(!_broker.getSecurityManager().authoriseConfiguringBroker(getName(), 
VirtualHostNode.class, Operation.UPDATE))
-        {
-            throw new AccessControlException("Setting of virtual host node 
attributes is denied");
-        }
+        // TODO perhaps look for the MS with the default annotation and 
associated default.
+        Map<String, Object> settings = new HashMap<String, Object>();
+        settings.put(MessageStore.STORE_TYPE, "DERBY");
+        settings.put(MessageStore.STORE_PATH, "${qpid.work_dir}" + 
File.separator + "derbystore" + File.separator + getName());
+        return settings;
     }
 
+
 }

Copied: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
 (from r1590281, 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java)
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java?p2=qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java&p1=qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java&r1=1590281&r2=1590316&rev=1590316&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
 Sat Apr 26 22:22:10 2014
@@ -20,10 +20,10 @@
  */
 package org.apache.qpid.server.virtualhostnode;
 
-import java.io.File;
 import java.security.AccessControlException;
 import java.security.PrivilegedAction;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
@@ -32,14 +32,12 @@ import java.util.concurrent.atomic.Atomi
 import javax.security.auth.Subject;
 
 import org.apache.log4j.Logger;
-
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
 import org.apache.qpid.server.logging.EventLogger;
 import org.apache.qpid.server.logging.messages.ConfigStoreMessages;
 import org.apache.qpid.server.logging.subjects.MessageStoreLogSubject;
 import org.apache.qpid.server.model.AbstractConfiguredObject;
 import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.BrokerModel;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.LifetimePolicy;
 import org.apache.qpid.server.model.ManagedAttributeField;
@@ -47,95 +45,46 @@ import org.apache.qpid.server.model.Stat
 import org.apache.qpid.server.model.SystemContext;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.model.VirtualHostNode;
-import org.apache.qpid.server.plugin.DurableConfigurationStoreFactory;
 import org.apache.qpid.server.security.SecurityManager;
 import org.apache.qpid.server.security.access.Operation;
 import org.apache.qpid.server.store.DurableConfigurationStore;
 import org.apache.qpid.server.store.MessageStore;
-import org.apache.qpid.server.store.VirtualHostStoreUpgraderAndRecoverer;
-import org.apache.qpid.server.virtualhost.StandardVirtualHost;
 
-public abstract class AbstractStandardVirtualHostNode<X extends 
AbstractStandardVirtualHostNode<X>> extends AbstractConfiguredObject<X>
-                implements VirtualHostNode<X>
+public abstract class AbstractVirtualHostNode<X extends 
AbstractVirtualHostNode<X>> extends AbstractConfiguredObject<X> implements 
VirtualHostNode<X>
 {
-    private static final Logger LOGGER = 
Logger.getLogger(AbstractStandardVirtualHostNode.class);
+
+    private static final Logger LOGGER = 
Logger.getLogger(AbstractVirtualHostNode.class);
 
     private final Broker<?> _broker;
     private final AtomicReference<State> _state = new 
AtomicReference<State>(State.INITIALISING);
     private final EventLogger _eventLogger;
 
-    @ManagedAttributeField
-    private boolean _messageStoreProvider;
+    private DurableConfigurationStore _durableConfigurationStore;
 
     private MessageStoreLogSubject _configurationStoreLogSubject;
-    private DurableConfigurationStore _durableConfigurationStore;
 
-    @SuppressWarnings("rawtypes")
-    public AbstractStandardVirtualHostNode(Broker<?> parent, Map<String, 
Object> attributes, TaskExecutor taskExecutor)
+    @ManagedAttributeField
+    private boolean _messageStoreProvider;
+
+    public AbstractVirtualHostNode(Broker<?> parent, Map<String, Object> 
attributes, TaskExecutor taskExecutor)
     {
-        super(parentsMap(parent), attributes, taskExecutor);
+        super(Collections.<Class<? extends 
ConfiguredObject>,ConfiguredObject<?>>singletonMap(Broker.class, parent),
+              attributes, taskExecutor);
         _broker = parent;
-        SystemContext systemContext = _broker.getParent(SystemContext.class);
+        SystemContext<?> systemContext = 
_broker.getParent(SystemContext.class);
         _eventLogger = systemContext.getEventLogger();
     }
 
-    @Override
-    public void validate()
-    {
-        super.validate();
-        DurableConfigurationStoreFactory durableConfigurationStoreFactory = 
getDurableConfigurationStoreFactory();
-        Map<String, Object> storeSettings = new HashMap<String, 
Object>(getActualAttributes());
-        storeSettings.put(DurableConfigurationStore.STORE_TYPE, 
durableConfigurationStoreFactory.getType());
-        
durableConfigurationStoreFactory.validateConfigurationStoreSettings(storeSettings);
-    }
 
     @Override
     public void onOpen()
     {
         super.onOpen();
-        DurableConfigurationStoreFactory durableConfigurationStoreFactory = 
getDurableConfigurationStoreFactory();
-        _durableConfigurationStore = 
durableConfigurationStoreFactory.createDurableConfigurationStore();
+        _durableConfigurationStore = createConfigurationStore();
         _configurationStoreLogSubject = new MessageStoreLogSubject(getName(), 
_durableConfigurationStore.getClass().getSimpleName());
 
     }
 
-    protected abstract DurableConfigurationStoreFactory 
getDurableConfigurationStoreFactory();
-
-    protected Map<String, Object> getDefaultMessageStoreSettings()
-    {
-        // TODO perhaps look for the MS with the default annotation and 
associated default.
-        Map<String, Object> settings = new HashMap<String, Object>();
-        settings.put(MessageStore.STORE_TYPE, "DERBY");
-        settings.put(MessageStore.STORE_PATH, "${qpid.work_dir}" + 
File.separator + "derbystore" + File.separator + getName());
-        return settings;
-    }
-
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    @Override
-    protected <C extends ConfiguredObject> C addChild(Class<C> childClass, 
Map<String, Object> attributes,
-            ConfiguredObject... otherParents)
-    {
-        if(childClass == VirtualHost.class)
-        {
-            return (C) getObjectFactory().create(VirtualHost.class, 
attributes, this);
-        }
-        return super.addChild(childClass, attributes, otherParents);
-    }
-
-
-
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    @Override
-    public <T extends ConfiguredObject> T getParent(Class<T> clazz)
-    {
-        if (clazz == Broker.class)
-        {
-            return (T) _broker;
-        }
-        return super.getParent(clazz);
-    }
-
-
     @Override
     public State getState()
     {
@@ -214,7 +163,6 @@ public abstract class AbstractStandardVi
         return false;
     }
 
-
     @Override
     public boolean isMessageStoreProvider()
     {
@@ -245,69 +193,27 @@ public abstract class AbstractStandardVi
         return _durableConfigurationStore;
     }
 
-    private void activate()
+    protected Broker<?> getBroker()
     {
-        if (LOGGER.isDebugEnabled())
-        {
-            LOGGER.debug("Activating virtualhost node " + this);
-        }
-
-        Map<String, Object> attributes = buildAttributesForStore();
-
-        _durableConfigurationStore.openConfigurationStore(this, attributes);
-
-        _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.CREATED());
-
-        if (this instanceof FileBasedVirtualHostNode)
-        {
-            @SuppressWarnings("rawtypes")
-            FileBasedVirtualHostNode fileBasedVirtualHostNode = 
(FileBasedVirtualHostNode) this;
-            _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.STORE_LOCATION(fileBasedVirtualHostNode.getStorePath()));
-        }
-
-        _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.RECOVERY_START());
-
-        VirtualHostStoreUpgraderAndRecoverer upgrader = new 
VirtualHostStoreUpgraderAndRecoverer(this, getObjectFactory());
-        upgrader.perform(_durableConfigurationStore);
-
-        _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.RECOVERY_COMPLETE());
+        return _broker;
+    }
 
-        VirtualHost<?,?,?>  host = getVirtualHost();
+    protected EventLogger getEventLogger()
+    {
+        return _eventLogger;
+    }
 
-        if (host == null)
-        {
-            if (LOGGER.isDebugEnabled())
-            {
-                LOGGER.debug("Creating new virtualhost with name : " +  
getName());
-            }
-            Map<String, Object> hostAttributes = new HashMap<String, Object>();
-            hostAttributes.put(VirtualHost.MODEL_VERSION, 
BrokerModel.MODEL_VERSION);
-            hostAttributes.put(VirtualHost.NAME, getName());
-            hostAttributes.put(VirtualHost.TYPE, StandardVirtualHost.TYPE);
-            if (!isMessageStoreProvider())
-            {
-                hostAttributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, 
getDefaultMessageStoreSettings());
-            }
-            host = createChild(VirtualHost.class, hostAttributes);
-        }
-        else
-        {
-            final VirtualHost<?,?,?> recoveredHost = host;
-            Subject.doAs(SecurityManager.getSubjectWithAddedSystemRights(), 
new PrivilegedAction<Object>()
-            {
-                @Override
-                public Object run()
-                {
-                    recoveredHost.open();
-                    return null;
-                }
-            });
-        }
+    protected DurableConfigurationStore getDurableConfigurationStore()
+    {
+        return _durableConfigurationStore;
+    }
 
-        host.setDesiredState(host.getState(), State.ACTIVE);
+    protected MessageStoreLogSubject getConfigurationStoreLogSubject()
+    {
+        return _configurationStoreLogSubject;
     }
 
-    private Map<String, Object> buildAttributesForStore()
+    protected Map<String, Object> buildAttributesForStore()
     {
         final Map<String, Object> attributes = new HashMap<String, Object>();
         Subject.doAs(SecurityManager.getSubjectWithAddedSystemRights(), new 
PrivilegedAction<Object>()
@@ -327,34 +233,32 @@ public abstract class AbstractStandardVi
         return attributes;
     }
 
-    private void delete()
+    protected void delete()
     {
         VirtualHost<?, ?, ?> virtualHost = getVirtualHost();
         if (virtualHost != null)
         {
             virtualHost.setDesiredState(virtualHost.getState(), State.DELETED);
         }
-        //TODO: this needs to be called from parent
+
         deleted();
 
-        // TODO Split onDelete into deleteMessageStore/deleteConfigStore
-        if (_durableConfigurationStore instanceof MessageStore)
+        if (getConfigurationStore() instanceof MessageStore)
         {
-            ((MessageStore)_durableConfigurationStore).onDelete();
+            ((MessageStore)getConfigurationStore()).onDelete();
         }
-
     }
 
-    private void stop()
+    protected void stop()
     {
         VirtualHost<?, ?, ?> virtualHost = getVirtualHost();
         if (virtualHost != null)
         {
             virtualHost.setDesiredState(virtualHost.getState(), State.STOPPED);
         }
-        _durableConfigurationStore.closeConfigurationStore();
+        getConfigurationStore().closeConfigurationStore();
 
-        _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.CLOSE());
+        getEventLogger().message(getConfigurationStoreLogSubject(), 
ConfigStoreMessages.CLOSE());
     }
 
     @Override
@@ -378,4 +282,8 @@ public abstract class AbstractStandardVi
         }
     }
 
-}
+    protected abstract DurableConfigurationStore createConfigurationStore();
+
+    protected abstract void activate();
+
+}
\ No newline at end of file



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

Reply via email to