Move "handlers" field to AbstractSubscribableChannel

Move the management of subscribers to the abstract parent class where
it belongs.
This commit is contained in:
Rossen Stoyanchev
2014-01-17 11:24:28 -05:00
parent 4e933b4765
commit e2feed494b
4 changed files with 34 additions and 67 deletions

View File

@@ -19,6 +19,11 @@ package org.springframework.messaging.support;
import org.springframework.messaging.MessageHandler;
import org.springframework.messaging.SubscribableChannel;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* Abstract base class for {@link SubscribableChannel} implementations.
*
@@ -27,9 +32,20 @@ import org.springframework.messaging.SubscribableChannel;
*/
public abstract class AbstractSubscribableChannel extends AbstractMessageChannel implements SubscribableChannel {
private final Set<MessageHandler> handlers = new CopyOnWriteArraySet<MessageHandler>();
public Set<MessageHandler> getSubscribers() {
return Collections.<MessageHandler>unmodifiableSet(this.handlers);
}
public boolean hasSubscription(MessageHandler handler) {
return this.handlers.contains(handler);
}
@Override
public final boolean subscribe(MessageHandler handler) {
boolean result = subscribeInternal(handler);
public boolean subscribe(MessageHandler handler) {
boolean result = this.handlers.add(handler);
if (result) {
if (logger.isDebugEnabled()) {
logger.debug("[" + getBeanName() + "] subscribed " + handler);
@@ -39,8 +55,8 @@ public abstract class AbstractSubscribableChannel extends AbstractMessageChannel
}
@Override
public final boolean unsubscribe(MessageHandler handler) {
boolean result = unsubscribeInternal(handler);
public boolean unsubscribe(MessageHandler handler) {
boolean result = this.handlers.remove(handler);
if (result) {
if (logger.isDebugEnabled()) {
logger.debug("[" + getBeanName() + "] unsubscribed " + handler);
@@ -49,20 +65,4 @@ public abstract class AbstractSubscribableChannel extends AbstractMessageChannel
return result;
}
/**
* Whether the given {@link MessageHandler} is already subscribed.
*/
public abstract boolean hasSubscription(MessageHandler handler);
/**
* Subscribe the given {@link MessageHandler}.
*/
protected abstract boolean subscribeInternal(MessageHandler handler);
/**
* Unsubscribe the given {@link MessageHandler}.
*/
protected abstract boolean unsubscribeInternal(MessageHandler handler);
}

View File

@@ -35,8 +35,6 @@ public class ExecutorSubscribableChannel extends AbstractSubscribableChannel {
private final Executor executor;
private final Set<MessageHandler> handlers = new CopyOnWriteArraySet<MessageHandler>();
/**
* Create a new {@link ExecutorSubscribableChannel} instance where messages will be sent
@@ -61,14 +59,9 @@ public class ExecutorSubscribableChannel extends AbstractSubscribableChannel {
return this.executor;
}
@Override
public boolean hasSubscription(MessageHandler handler) {
return this.handlers.contains(handler);
}
@Override
public boolean sendInternal(final Message<?> message, long timeout) {
for (final MessageHandler handler : this.handlers) {
for (final MessageHandler handler : getSubscribers()) {
if (this.executor == null) {
handler.handleMessage(message);
}
@@ -84,14 +77,4 @@ public class ExecutorSubscribableChannel extends AbstractSubscribableChannel {
return true;
}
@Override
public boolean subscribeInternal(MessageHandler handler) {
return this.handlers.add(handler);
}
@Override
public boolean unsubscribeInternal(MessageHandler handler) {
return this.handlers.remove(handler);
}
}