WIP var-args

This commit is contained in:
nathan 2015-02-05 03:06:40 +01:00
parent 0202c937ce
commit c0d19fcde4
2 changed files with 114 additions and 40 deletions

View File

@ -80,12 +80,6 @@ public class MBassador extends AbstractPubSubSupport implements IMessageBus {
} }
/**
* Synchronously publish a message to all registered listeners (this includes listeners defined for super types)
* The call blocks until every messageHandler has processed the message.
*
* @param message
*/
@Override @Override
public void publish(Object message) { public void publish(Object message) {
try { try {
@ -98,15 +92,6 @@ public class MBassador extends AbstractPubSubSupport implements IMessageBus {
} }
} }
/**
* Execute the message publication asynchronously. The behavior of this method depends on the
* configured queuing strategy:
* <p/>
* If an unbound queuing strategy is used the call returns immediately.
* If a bounded queue is used the call might block until the message can be placed in the queue.
*
* @return A message publication that can be used to access information about it's state
*/
@Override @Override
public void publishAsync(Object message) { public void publishAsync(Object message) {
try { try {
@ -116,18 +101,8 @@ public class MBassador extends AbstractPubSubSupport implements IMessageBus {
} }
} }
/**
* Execute the message publication asynchronously. The behaviour of this method depends on the
* configured queuing strategy:
* <p/>
* If an unbound queuing strategy is used the call returns immediately.
* If a bounded queue is used the call will block until the message can be placed in the queue
* or the timeout is reached.
*
* @return A message publication that wraps up the publication request
*/
@Override @Override
public void publishAsync(Object message, long timeout, TimeUnit unit) { public void publishAsync(long timeout, TimeUnit unit, Object message) {
try { try {
this.pendingMessages.offer(message, timeout, unit); this.pendingMessages.offer(message, timeout, unit);
} catch (InterruptedException e) { } catch (InterruptedException e) {

View File

@ -12,7 +12,7 @@ public interface PubSubSupport {
/** /**
* Subscribe all handlers of the given listener. Any listener is only subscribed once * Subscribe all handlers of the given listener. Any listener is only subscribed once
* -> subsequent subscriptions of an already subscribed listener will be silently ignored * subsequent subscriptions of an already subscribed listener will be silently ignored
* *
* @param listener * @param listener
*/ */
@ -22,7 +22,7 @@ public interface PubSubSupport {
* Immediately remove all registered message handlers (if any) of the given listener. When this call returns all handlers * Immediately remove all registered message handlers (if any) of the given listener. When this call returns all handlers
* have effectively been removed and will not receive any messages (provided that running publications (iterators) in other threads * have effectively been removed and will not receive any messages (provided that running publications (iterators) in other threads
* have not yet obtained a reference to the listener) * have not yet obtained a reference to the listener)
* <p/> * <p>
* A call to this method passing any object that is not subscribed will not have any effect and is silently ignored. * A call to this method passing any object that is not subscribed will not have any effect and is silently ignored.
* *
* @param listener * @param listener
@ -34,30 +34,129 @@ public interface PubSubSupport {
/** /**
* Synchronously publish a message to all registered listeners. This includes listeners defined for super types of the * Synchronously publish a message to all registered listeners. This includes listeners defined for super types of the
* given message type, provided they are not configured to reject valid subtype. The call returns when all matching handlers * given message type, provided they are not configured to reject valid subtypes. The call returns when all matching handlers
* of all registered listeners have been notified (invoked) of the message. * of all registered listeners have been notified (invoked) of the message.
*
* @param message
*/ */
void publish(Object message); void publish(Object message);
// /**
// * Synchronously publish <b>TWO</b> messages to all registered listeners (that match the signature). This includes listeners
// * defined for super types of the given message type, provided they are not configured to reject valid subtypes. The call
// * returns when all matching handlers of all registered listeners have been notified (invoked) of the message.
// */
// void publish(Object message1, Object message2);
//
// /**
// * Synchronously publish <b>THREE</b> messages to all registered listeners (that match the signature). This includes listeners
// * defined for super types of the given message type, provided they are not configured to reject valid subtypes. The call
// * returns when all matching handlers of all registered listeners have been notified (invoked) of the message.
// */
// void publish(Object message1, Object message2, Object message3);
//
// /**
// * Synchronously publish <b>ARBITRARY</b> messages to all registered listeners (that match the signature). This includes listeners
// * defined for super types of the given message type, provided they are not configured to reject valid subtypes. The call
// * returns when all matching handlers of all registered listeners have been notified (invoked) of the message.
// */
// void publish(Object... messages);
/** /**
* Execute the message publication asynchronously. The behavior of this method depends on the * Publish the message asynchronously to all registered listeners (that match the signature). This includes listeners
* configured queuing strategy: * defined for super types of the given message type, provided they are not configured to reject valid subtypes. The call
* <p/> * returns when all matching handlers of all registered listeners have been notified (invoked) of the message.
* <p>
* The behavior of this method depends on the configured queuing strategy:
* <p>
* If an unbound queuing strategy is used the call returns immediately. * If an unbound queuing strategy is used the call returns immediately.
* If a bounded queue is used the call might block until the message can be placed in the queue. * If a bounded queue is used the call might block until the message can be placed in the queue.
*/ */
void publishAsync(Object message); void publishAsync(Object message);
// /**
// * Publish <b>TWO</b> messages asynchronously to all registered listeners (that match the signature). This includes listeners
// * defined for super types of the given message type, provided they are not configured to reject valid subtypes. The call
// * returns when all matching handlers of all registered listeners have been notified (invoked) of the message.
// * <p>
// * The behavior of this method depends on the configured queuing strategy:
// * <p>
// * If an unbound queuing strategy is used the call returns immediately.
// * If a bounded queue is used the call might block until the message can be placed in the queue.
// */
// void publishAsync(Object message1, Object message2);
//
// /**
// * Publish <b>THREE</b> messages asynchronously to all registered listeners (that match the signature). This includes listeners
// * defined for super types of the given message type, provided they are not configured to reject valid subtypes. The call
// * returns when all matching handlers of all registered listeners have been notified (invoked) of the message.
// * <p>
// * The behavior of this method depends on the configured queuing strategy:
// * <p>
// * If an unbound queuing strategy is used the call returns immediately.
// * If a bounded queue is used the call might block until the message can be placed in the queue.
// */
// void publishAsync(Object message1, Object message2, Object message3);
//
// /**
// * Publish <b>ARBITRARY</b> messages asynchronously to all registered listeners (that match the signature). This includes listeners
// * defined for super types of the given message type, provided they are not configured to reject valid subtypes. The call
// * returns when all matching handlers of all registered listeners have been notified (invoked) of the message.
// * <p>
// * The behavior of this method depends on the configured queuing strategy:
// * <p>
// * If an unbound queuing strategy is used the call returns immediately.
// * If a bounded queue is used the call might block until the message can be placed in the queue.
// */
// void publishAsync(Object... messages);
/** /**
* Execute the message publication asynchronously. The behavior of this method depends on the * Publish the message asynchronously to all registered listeners (that match the signature). This includes listeners
* configured queuing strategy: * defined for super types of the given message type, provided they are not configured to reject valid subtypes. The call
* <p/> * returns when all matching handlers of all registered listeners have been notified (invoked) of the message.
* <p>
* The behavior of this method depends on the configured queuing strategy:
* <p>
* If an unbound queuing strategy is used the call returns immediately. * If an unbound queuing strategy is used the call returns immediately.
* If a bounded queue is used the call will block until the message can be placed in the queue * If a bounded queue is used the call might block until the message can be placed in the queue or the timeout is reached.
* or the timeout is reached.
*/ */
void publishAsync(Object message, long timeout, TimeUnit unit); void publishAsync(long timeout, TimeUnit unit, Object message);
// /**
// * Publish <b>TWO</b> messages asynchronously to all registered listeners (that match the signature). This includes listeners
// * defined for super types of the given message type, provided they are not configured to reject valid subtypes. The call
// * returns when all matching handlers of all registered listeners have been notified (invoked) of the message.
// * <p>
// * The behavior of this method depends on the configured queuing strategy:
// * <p>
// * If an unbound queuing strategy is used the call returns immediately.
// * If a bounded queue is used the call might block until the message can be placed in the queue or the timeout is reached.
// */
// void publishAsync(long timeout, TimeUnit unit, Object message1, Object message2);
//
// /**
// * Publish <b>THREE</b> messages asynchronously to all registered listeners (that match the signature). This includes listeners
// * defined for super types of the given message type, provided they are not configured to reject valid subtypes. The call
// * returns when all matching handlers of all registered listeners have been notified (invoked) of the message.
// * <p>
// * The behavior of this method depends on the configured queuing strategy:
// * <p>
// * If an unbound queuing strategy is used the call returns immediately.
// * If a bounded queue is used the call might block until the message can be placed in the queue or the timeout is reached.
// */
// void publishAsync(long timeout, TimeUnit unit, Object message1, Object message2, Object message3);
//
// /**
// * Publish <b>ARBITRARY</b> messages asynchronously to all registered listeners (that match the signature). This includes listeners
// * defined for super types of the given message type, provided they are not configured to reject valid subtypes. The call
// * returns when all matching handlers of all registered listeners have been notified (invoked) of the message.
// * <p>
// * The behavior of this method depends on the configured queuing strategy:
// * <p>
// * If an unbound queuing strategy is used the call returns immediately.
// * If a bounded queue is used the call might block until the message can be placed in the queue or the timeout is reached.
// */
// void publishAsync(long timeout, TimeUnit unit, Object... messages);
} }