/** * Make this connection active. * * @return true if the pool item is valid, false if it should be removed. */ synchronized UserPoolItem toActive( Subject subject, ConnectionRequestInfo info, UserPoolItem oldPoolItem) throws ResourceException { long now = Alarm.getCurrentTime(); long maxIdleTime = _cm.getMaxIdleTime(); long maxPoolTime = _cm.getMaxPoolTime(); if (_hasConnectionError) return null; else if (0 < maxIdleTime && _poolEventTime + maxIdleTime < now) return null; else if (0 < maxPoolTime && _poolStartTime + maxPoolTime < now) return null; else if (_shareHead != null) throw new IllegalStateException(L.l("trying to activate active pool item.")); _poolEventTime = now; _isXATransaction = _xaResource != null; // disable LT-optim by default UserPoolItem userPoolItem = null; if (oldPoolItem != null) { Object uConn = oldPoolItem.getUserConnection(); if (uConn != null) _mConn.associateConnection(uConn); oldPoolItem.associatePoolItem(this); userPoolItem = oldPoolItem; } else userPoolItem = new UserPoolItem(_cm, this); if (!isValid(subject, info, userPoolItem)) return null; _subject = subject; _requestInfo = info; userPoolItem.associate(this, _mcf, subject, info); if (log.isLoggable(Level.FINE)) log.fine("allocate " + this); if (_cm.getSaveAllocationStackTrace()) _allocationStackTrace = new IllegalStateException(L.l("Connection {0} allocation stack trace", this)); return userPoolItem; }