/**
* Most of the code in the Qalingo project is copyrighted Hoteia and licensed
* under the Apache License Version 2.0 (release version 0.8.0)
* http://www.apache.org/licenses/LICENSE-2.0
*
* Copyright (c) Hoteia, 2012-2014
* http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com
*
*/
package org.hoteia.qalingo.core.pool;
import java.util.concurrent.atomic.AtomicInteger;
import org.springframework.aop.target.CommonsPoolTargetSource;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedResource;
/**
*
*/
@ManagedResource
public class ManagedCommonsPoolTargetSource extends CommonsPoolTargetSource {
private AtomicInteger numWaitingCallers = new AtomicInteger();
@Override
public Object getTarget() throws Exception {
numWaitingCallers.incrementAndGet();
try {
return super.getTarget();
} finally {
numWaitingCallers.decrementAndGet();
}
}
@ManagedAttribute
public int getNumWaitingCallers() {
return numWaitingCallers.get();
}
@Override
@ManagedAttribute
public int getActiveCount() {
return super.getActiveCount();
}
@Override
@ManagedAttribute
public int getMaxSize() {
return super.getMaxSize();
}
}