@Override
public void publish(String senderAddress, String subject, PublishScope scope, Object args) {
if (!noDbTxn()){
String errMsg = "NO EVENT PUBLISH CAN BE WRAPPED WITHIN DB TRANSACTION!";
s_logger.error(errMsg, new CloudRuntimeException(errMsg));
}
if (_gate.enter(true)) {
if (s_logger.isTraceEnabled()) {
s_logger.trace("Enter gate in message bus publish");
}
try {
List<SubscriptionNode> chainFromTop = new ArrayList<SubscriptionNode>();
SubscriptionNode current = locate(subject, chainFromTop, false);
if (current != null)
current.notifySubscribers(senderAddress, subject, args);
Collections.reverse(chainFromTop);
for (SubscriptionNode node : chainFromTop)
node.notifySubscribers(senderAddress, subject, args);
} finally {
_gate.leave();
}
}
}