public ManagedPoolItem(ConnectionPool cm, ManagedConnectionFactory mcf, ManagedConnection conn) { _cm = cm; _id = _cm.generateId(); _mcf = mcf; _mConn = conn; _poolStartTime = Alarm.getCurrentTime(); _poolEventTime = Alarm.getCurrentTime(); _connectionStartTime = cm.getConnectionTimeProbe().start(); // Gets the resource object from the driver try { if (cm.isXATransaction()) { XAResource xaResource = conn.getXAResource(); try { _defaultTransactionTimeout = xaResource.getTransactionTimeout(); } catch (Throwable e) { log.log(Level.FINE, e.toString(), e); } _xaResource = xaResource; } } catch (NotSupportedException e) { _cm.setXATransaction(false); log.log(Level.FINER, e.toString(), e); } catch (Exception e) { log.log(Level.FINE, e.toString(), e); } if (_xaResource == null) _isXATransaction = false; // Gets the local transaction from the driver try { if (_cm.isLocalTransaction()) _localTransaction = conn.getLocalTransaction(); } catch (NotSupportedException e) { _cm.setLocalTransaction(false); log.log(Level.FINER, e.toString(), e); } catch (Exception e) { log.log(Level.FINER, e.toString(), e); } _mConn.addConnectionEventListener(this); if (log.isLoggable(Level.FINE)) log.fine( "create: " + this + "(active:" + _cm.getConnectionActiveCount() + ", total:" + _cm.getConnectionCount() + ")"); }
/** Closes the connection. */ void destroy() { ManagedConnection mConn = _mConn; _mConn = null; UserTransactionImpl transaction = _transaction; _transaction = null; if (mConn == null) return; _cm.removeItem(this, mConn); UserPoolItem userItem = _shareHead; if (log.isLoggable(Level.FINE)) log.fine("connection pool destroy " + this); try { while (userItem != null) { UserPoolItem next = userItem.getShareNext(); userItem.close(); userItem = next; } if (transaction != null) transaction.delistPoolItem(this, XAResource.TMFAIL); } catch (Throwable e) { log.log(Level.FINE, e.toString(), e); } try { mConn.destroy(); } catch (Exception e) { log.log(Level.FINE, e.toString(), e); } finally { _cm.getConnectionTimeProbe().end(_connectionStartTime); } }