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() + ")"); }
/** Initialize the connection manager. */ public Object init(ManagedConnectionFactory mcf) throws ConfigException, ResourceException { if (!_lifecycle.toInit()) return null; _mcf = mcf; if (_name == null) { int v = _idGen.incrementAndGet(); _name = mcf.getClass().getSimpleName() + "-" + v; } if (_tm == null) throw new ConfigException(L.l("the connection manager needs a transaction manager.")); _idlePool = new IdlePoolSet(_maxIdleCount); _connectionTime = MeterService.createActiveTimeMeter("Resin|Database|Connection"); _idleTime = MeterService.createActiveTimeMeter("Resin|Database|Idle"); _queryTime = MeterService.createActiveTimeMeter("Resin|Database|Query"); registerSelf(); _alarm = new WeakAlarm(this); if (!(mcf instanceof ValidatingManagedConnectionFactory)) { // never check _lastValidCheckTime = Long.MAX_VALUE / 2; } // recover any resources on startup if (_isEnableXA) { Subject subject = null; ManagedConnection mConn = mcf.createManagedConnection(subject, null); try { XAResource xa = mConn.getXAResource(); _tm.recover(xa); } catch (NotSupportedException e) { log.finer(e.toString()); } catch (Throwable e) { log.log(Level.FINER, e.toString(), e); } finally { mConn.destroy(); } } return mcf.createConnectionFactory(this); }