public void exchangeDelivered(Exchange exchange) {
// Check if the exchange is finished
if (exchange.getStatus() != Status.Active) {
if (exchange instanceof InternalExchange) {
InternalExchange ie = (InternalExchange) exchange;
// Decrement references to source and destination SA
unreference(ie.getSource());
unreference(ie.getDestination());
pending.remove(exchange);
}
// Check if this is a new exchange
} else if (exchange.getStatus() == Status.Active && exchange.getRole() == Role.Provider &&
exchange.getOut(false) == null && exchange.getFault(false) == null) {
if (exchange instanceof InternalExchange) {
// Increment reference to the destination SA
InternalExchange ie = (InternalExchange) exchange;
reference(ie.getDestination());
}
}
}