Index: appserver/connectors/connectors-runtime/src/main/java/com/sun/enterprise/resource/pool/UnpooledResource.java =================================================================== --- appserver/connectors/connectors-runtime/src/main/java/com/sun/enterprise/resource/pool/UnpooledResource.java (revision 48897) +++ appserver/connectors/connectors-runtime/src/main/java/com/sun/enterprise/resource/pool/UnpooledResource.java (working copy) @@ -49,6 +49,7 @@ import javax.transaction.*; import java.util.Hashtable; +import java.util.logging.Level; /** * This resource pool is created when connection pooling is switched off @@ -106,6 +107,10 @@ handle.setResourceState(state); state.setEnlisted(false); setResourceStateToBusy(handle); + if (poolLifeCycleListener != null) { + poolLifeCycleListener.connectionCreated(); + poolLifeCycleListener.incrementNumConnFree(false, steadyPoolSize); + } return handle; } _logger.info("Fail as poolSize : " + poolSize); @@ -117,12 +122,18 @@ @Override public void resourceErrorOccurred(ResourceHandle resourceHandle) throws IllegalStateException { - freeResource(resourceHandle); + if (resourceHandle.getResourceState().isBusy()) { + freeResource(resourceHandle); + } } @Override protected void freeResource(ResourceHandle resourceHandle){ decrementPoolSize(); + if (poolLifeCycleListener != null) { + poolLifeCycleListener.decrementConnectionUsed(resourceHandle.getId()); + poolLifeCycleListener.incrementNumConnFree(false, steadyPoolSize); + } deleteResource(resourceHandle); } @@ -136,4 +147,15 @@ private synchronized void decrementPoolSize(){ poolSize--; } + + @Override + public void reclaimConnection(ResourceHandle handle) { + //Instead of calling ds.removeResource(handle), call deleteResource(handle) directly + //because there is no pooled connection. + String msg = localStrings.getString("reclaim.leaked.connection", poolInfo); + _logger.log(Level.INFO, msg); + deleteResource(handle); + notifyWaitingThreads(); + } + }