package org.mobicents.slee.container.profile; import javax.slee.SLEEException; import org.apache.commons.pool.ObjectPool; import org.apache.log4j.Logger; /** * Wrapper for apache commons objectpool, allows better logging and future exposure of jmx stats. * * @author martins * */ public class ProfileObjectPool { private static final Logger logger = Logger.getLogger(ProfileObjectPool.class); private final ObjectPool pool; public ProfileObjectPool(ObjectPool pool) { this.pool = pool; } public ProfileObject borrowObject() throws SLEEException { ProfileObject obj = null; try { obj = (ProfileObject) pool.borrowObject(); } catch (Throwable e) { throw new SLEEException(e.getMessage(),e); } if (logger.isDebugEnabled()) { logger.debug("borrowed object "+obj + " from " + this); } return obj; } public void returnObject(ProfileObject profileObject) { if (profileObject.getState() == ProfileObjectState.POOLED) { try { pool.returnObject(profileObject); } catch (Exception e) { throw new SLEEException(e.getMessage(),e); } if (logger.isDebugEnabled()) { logger.debug("returned object "+profileObject + " to " + this); } } else { invalidateObject(profileObject); } } @Override public String toString() { return "Profile Object Pool : active objects = "+this.pool.getNumActive() + ", idle objects "+this.pool.getNumIdle(); } public void close() throws Exception { if (logger.isDebugEnabled()) { logger.debug("close() " + this); } pool.close(); } public void invalidateObject(ProfileObject obj) { try { pool.invalidateObject(obj); } catch (Exception e) { throw new SLEEException(e.getMessage(),e); } if (logger.isDebugEnabled()) { logger.debug("invalidated object "+obj + " to " + this); } } }