protected synchronized AbstractProxy getAvailableProxy(String owner) { if (this.proxy.acquireLock(owner)) { return proxy; } else { Iterator iter = this.alternateProxies.iterator(); while (iter.hasNext()) { AbstractProxy alternateProxy = (AbstractProxy) iter.next(); if (alternateProxy.acquireLock(owner)) { return alternateProxy; } } if (this.alternateProxies.size() == maxProxies) { Logger.defaultLogger() .error( "Maximum number of proxies (" + maxProxies + ") reached - Unable to create another proxy", "getAvailableProxy"); Logger.defaultLogger().info("Main Proxy : " + this.proxy.getOwnerId()); Iterator piter = this.alternateProxies.iterator(); while (piter.hasNext()) { AbstractProxy px = (AbstractProxy) piter.next(); Logger.defaultLogger().info("Alternate Proxy : " + px.getOwnerId()); } return null; } else { Logger.defaultLogger() .info( "Creating a new proxy on " + this.proxy.toString() + " : " + +(this.alternateProxies.size() + 1) + " th."); AbstractProxy newProxy = this.proxy.cloneProxy(); newProxy.acquireLock(owner); this.alternateProxies.add(newProxy); return newProxy; } } }