Class DataSource
- All Implemented Interfaces:
Wrapper, MBeanRegistration, CommonDataSource, ConnectionPoolDataSource, DataSource, ConnectionPoolMBean, PoolConfiguration
- Direct Known Subclasses:
XADataSource
ConnectionPool in order to provide a standard
interface to the user.
A JMX registration made before the pool exists publishes nothing, because there is no pool MBean to publish. Create the pool before registering the data source, or register it again after the pool has been created, to have the pool monitored.
Deregistering a published data source releases the pool MBean and the connection and interceptor MBeans published
below it, but it does not close the pool. A JMX-enabled pool that is no longer wanted must therefore be closed
before the data source is dropped: while the pool MBean is registered it holds the pool, and the connection MBeans
hold the pooled connections. Abandoning a registered pool without close(boolean) keeps the pool, its
pooled sessions and its JDBC driver class loader reachable for the life of the JVM.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected ObjectNameThe JMX ObjectName for the connection pool MBean.Fields inherited from class DataSourceProxy
pool, poolPropertiesFields inherited from interface ConnectionPoolMBean
FAILED_QUERY_NOTIFICATION, NOTIFY_ABANDON, NOTIFY_CONNECT, NOTIFY_INIT, POOL_EMPTY, SLOW_QUERY_NOTIFICATION, SUSPECT_ABANDONED_NOTIFICATION, SUSPECT_RETURNED_NOTIFICATIONFields inherited from interface PoolConfiguration
PKG_PREFIX -
Constructor Summary
ConstructorsConstructorDescriptionConstructor for reflection only.DataSource(PoolConfiguration poolProperties) Constructs a DataSource object wrapping a connection -
Method Summary
Modifier and TypeMethodDescriptionvoidclose(boolean all) Unregisters the connection pool MBean before closing the pool, so a pool under teardown does not keep reporting statistics under a live object name (and does not pin the closing pool, its credentials and its JDBC driver class loader in the MBean server).createObjectName(ObjectName original) Creates the ObjectName for the ConnectionPoolMBean object to be registeredvoidUnregisters the underlying connection pool mbean.
voidpostRegister(Boolean registrationDone) Releases the pool MBean published by this registration when the MBean server did not complete it.voidno-op
preRegister(MBeanServer server, ObjectName name) If the connection pool MBean exists, it is registered during this operation.protected ConnectionPoolPublishes the pool MBean under this data source's monitor and returns the pool whose connections must then be published, ornullwhen nothing was published.protected voidRegisters the ConnectionPoolMBean under a unique name derived from the DataSource's ObjectName.protected voidunregisterJmx(ObjectName name) Unregisters the ConnectionPoolMBean published under the given name.Methods inherited from class DataSourceProxy
checkAbandoned, checkIdle, close, closePool, createPool, getAbandonWhenPercentageFull, getActive, getBorrowedCount, getCommitOnReturn, getConnection, getConnection, getConnectionAsync, getConnectionProperties, getCreatedCount, getDataSource, getDataSourceJNDI, getDbProperties, getDefaultAutoCommit, getDefaultCatalog, getDefaultReadOnly, getDefaultTransactionIsolation, getDriverClassName, getIdle, getInitialSize, getInitSQL, getJdbcInterceptors, getJdbcInterceptorsAsArray, getLoginTimeout, getLogValidationErrors, getLogWriter, getMaxActive, getMaxAge, getMaxIdle, getMaxWait, getMinEvictableIdleTimeMillis, getMinIdle, getName, getNumActive, getNumIdle, getNumTestsPerEvictionRun, getParentLogger, getPassword, getPool, getPooledConnection, getPooledConnection, getPoolName, getPoolProperties, getPoolSize, getPropagateInterruptState, getReconnectedCount, getReleasedCount, getReleasedIdleCount, getRemoveAbandonedCount, getRemoveAbandonedTimeout, getReturnedCount, getRollbackOnReturn, getSize, getSuspectTimeout, getTimeBetweenEvictionRunsMillis, getUrl, getUseDisposableConnectionFacade, getUseLock, getUsername, getUseStatementFacade, getValidationInterval, getValidationQuery, getValidationQueryTimeout, getValidator, getValidatorClassName, getWaitCount, getXAConnection, getXAConnection, isAccessToUnderlyingConnectionAllowed, isAlternateUsernameAllowed, isDefaultAutoCommit, isDefaultReadOnly, isFairQueue, isIgnoreExceptionOnPreLoad, isJmxEnabled, isLogAbandoned, isPoolSweeperEnabled, isRemoveAbandoned, isTestOnBorrow, isTestOnConnect, isTestOnReturn, isTestWhileIdle, isUseEquals, isWrapperFor, purge, purgeOnReturn, resetStats, setAbandonWhenPercentageFull, setAccessToUnderlyingConnectionAllowed, setAlternateUsernameAllowed, setCommitOnReturn, setConnectionProperties, setDataSource, setDataSourceJNDI, setDbProperties, setDefaultAutoCommit, setDefaultCatalog, setDefaultReadOnly, setDefaultTransactionIsolation, setDriverClassName, setFairQueue, setIgnoreExceptionOnPreLoad, setInitialSize, setInitSQL, setJdbcInterceptors, setJmxEnabled, setLogAbandoned, setLoginTimeout, setLogValidationErrors, setLogWriter, setMaxActive, setMaxAge, setMaxIdle, setMaxWait, setMinEvictableIdleTimeMillis, setMinIdle, setName, setNumTestsPerEvictionRun, setPassword, setPoolProperties, setPropagateInterruptState, setRemoveAbandoned, setRemoveAbandonedTimeout, setRollbackOnReturn, setSuspectTimeout, setTestOnBorrow, setTestOnConnect, setTestOnReturn, setTestWhileIdle, setTimeBetweenEvictionRunsMillis, setUrl, setUseDisposableConnectionFacade, setUseEquals, setUseLock, setUsername, setUseStatementFacade, setValidationInterval, setValidationQuery, setValidationQueryTimeout, setValidator, setValidatorClassName, takePoolForClose, testIdle, toString, unwrapMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface CommonDataSource
createShardingKeyBuilder, getParentLoggerMethods inherited from interface ConnectionPoolDataSource
createPooledConnectionBuilder, getLoginTimeout, getLogWriter, getPooledConnection, getPooledConnection, setLoginTimeout, setLogWriterMethods inherited from interface ConnectionPoolMBean
checkAbandoned, checkIdle, getActive, getBorrowedCount, getCreatedCount, getIdle, getNumActive, getNumIdle, getReconnectedCount, getReleasedCount, getReleasedIdleCount, getRemoveAbandonedCount, getReturnedCount, getSize, getWaitCount, purge, purgeOnReturn, resetStats, testIdleMethods inherited from interface DataSource
createConnectionBuilder, getConnection, getConnection, getLoginTimeout, getLogWriter, setLoginTimeout, setLogWriterMethods inherited from interface PoolConfiguration
getAbandonWhenPercentageFull, getCommitOnReturn, getConnectionProperties, getDataSource, getDataSourceJNDI, getDbProperties, getDefaultAutoCommit, getDefaultCatalog, getDefaultReadOnly, getDefaultTransactionIsolation, getDriverClassName, getInitialSize, getInitSQL, getJdbcInterceptors, getJdbcInterceptorsAsArray, getLogValidationErrors, getMaxActive, getMaxAge, getMaxIdle, getMaxWait, getMinEvictableIdleTimeMillis, getMinIdle, getName, getNumTestsPerEvictionRun, getPassword, getPoolName, getPropagateInterruptState, getRemoveAbandonedTimeout, getRollbackOnReturn, getSuspectTimeout, getTimeBetweenEvictionRunsMillis, getUrl, getUseDisposableConnectionFacade, getUseLock, getUsername, getUseStatementFacade, getValidationInterval, getValidationQuery, getValidationQueryTimeout, getValidator, getValidatorClassName, isAccessToUnderlyingConnectionAllowed, isAlternateUsernameAllowed, isDefaultAutoCommit, isDefaultReadOnly, isFairQueue, isIgnoreExceptionOnPreLoad, isJmxEnabled, isLogAbandoned, isPoolSweeperEnabled, isRemoveAbandoned, isTestOnBorrow, isTestOnConnect, isTestOnReturn, isTestWhileIdle, isUseEquals, setAbandonWhenPercentageFull, setAccessToUnderlyingConnectionAllowed, setAlternateUsernameAllowed, setCommitOnReturn, setConnectionProperties, setDataSource, setDataSourceJNDI, setDbProperties, setDefaultAutoCommit, setDefaultCatalog, setDefaultReadOnly, setDefaultTransactionIsolation, setDriverClassName, setFairQueue, setIgnoreExceptionOnPreLoad, setInitialSize, setInitSQL, setJdbcInterceptors, setJmxEnabled, setLogAbandoned, setLogValidationErrors, setMaxActive, setMaxAge, setMaxIdle, setMaxWait, setMinEvictableIdleTimeMillis, setMinIdle, setName, setNumTestsPerEvictionRun, setPassword, setPropagateInterruptState, setRemoveAbandoned, setRemoveAbandonedTimeout, setRollbackOnReturn, setSuspectTimeout, setTestOnBorrow, setTestOnConnect, setTestOnReturn, setTestWhileIdle, setTimeBetweenEvictionRunsMillis, setUrl, setUseDisposableConnectionFacade, setUseEquals, setUseLock, setUsername, setUseStatementFacade, setValidationInterval, setValidationQuery, setValidationQueryTimeout, setValidator, setValidatorClassNameMethods inherited from interface Wrapper
isWrapperFor, unwrap
-
Field Details
-
oname
The JMX ObjectName for the connection pool MBean. Written only by a completed publish, cleared only when that MBean is released, and accessed under this data source's monitor.
-
-
Constructor Details
-
DataSource
public DataSource()Constructor for reflection only. A default set of pool properties will be created. -
DataSource
Constructs a DataSource object wrapping a connection- Parameters:
poolProperties- The pool properties
-
-
Method Details
-
close
public void close(boolean all) Unregisters the connection pool MBean before closing the pool, so a pool under teardown does not keep reporting statistics under a live object name (and does not pin the closing pool, its credentials and its JDBC driver class loader in the MBean server). Monitoring stops with this call, whichever way the close goes: withall=falsea connection that is currently borrowed keeps its database session and stays usable until its holder returns it, but it is no longer reported by the pool MBean.
Close the connection pool. If a pool creation is in flight, this method does not wait for it - the driver connects of the creation's initial pre-load can block for an unbounded, uninterruptible time against a hung database - it marks this data source closed and returns: the creation observes the closure at its publication step and closes the pool it built instead of publishing it. The same reason keeps the teardown outside the monitor: the physical disconnect of every pooled session is as unbounded against a hung database as the connect is, and it must not park the paths that need the monitor meanwhile - a later borrow's publication step, or the container's JMX lifecycle callbacks.- Overrides:
closein classDataSourceProxy- Parameters:
all- if true close all connections, otherwise only idle ones
-
postDeregister
public void postDeregister()Unregisters the underlying connection pool mbean.
- Specified by:
postDeregisterin interfaceMBeanRegistration
-
postRegister
Releases the pool MBean published by this registration when the MBean server did not complete it. A failed registration does not runpostDeregister(), so this is the only chance to undo a publish this registration made. A registration that published nothing releases nothing.
- Specified by:
postRegisterin interfaceMBeanRegistration
-
preDeregister
no-op
- Specified by:
preDeregisterin interfaceMBeanRegistration- Throws:
Exception
-
preRegister
If the connection pool MBean exists, it is registered during this operation. A second registration is refused while this data source already holds a publication.
- Specified by:
preRegisterin interfaceMBeanRegistration- Throws:
Exception
-
createObjectName
Creates the ObjectName for the ConnectionPoolMBean object to be registered- Parameters:
original- the ObjectName for the DataSource- Returns:
- the ObjectName for the ConnectionPoolMBean
- Throws:
MalformedObjectNameException- Invalid object name
-
registerJmx
protected void registerJmx()Registers the ConnectionPoolMBean under a unique name derived from the DataSource's ObjectName. A pool that has not been created, or a publish the server refused, is skipped without disturbing a handle this data source already holds. -
publishJmx
Publishes the pool MBean under this data source's monitor and returns the pool whose connections must then be published, ornullwhen nothing was published. The caller must hold this monitor; the connection sweep is the caller's to run outside it.- Returns:
- the pool whose connections need publishing, or
null
-
unregisterJmx
Unregisters the ConnectionPoolMBean published under the given name. The name is the registration handle captured by the caller, which holds this data source's monitor: the handle is checked, cleared and released as one step there, so it never reaches this method twice and a name this data source never published is never released.- Parameters:
name- the ObjectName the pool MBean was published under, ornullto release nothing
-