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]