public class PerUserPoolDataSource extends InstanceKeyDataSource
A pooling DataSource
appropriate for deployment within
J2EE environment. There are many configuration options, most of which are
defined in the parent class. This datasource uses individual pools per
user, and some properties can be set specifically for a given user, if the
deployment environment can support initialization of mapped properties.
So for example, a pool of admin or write-access Connections can be
guaranteed a certain number of connections, separate from a maximum
set for users with read-only connections.
User passwords can be changed without re-initializing the datasource.
When a getConnection(username, password)
request is processed
with a password that is different from those used to create connections in the
pool associated with username
, an attempt is made to create a
new connection using the supplied password and if this succeeds, the existing
pool is cleared and a new pool is created for connections using the new password.
Modifier and Type | Field and Description |
---|---|
private int |
defaultMaxActive |
private int |
defaultMaxIdle |
private int |
defaultMaxWait |
private java.util.Map |
managers
Map to keep track of Pools for a given user
|
(package private) java.util.Map |
perUserDefaultAutoCommit |
(package private) java.util.Map |
perUserDefaultReadOnly |
(package private) java.util.Map |
perUserDefaultTransactionIsolation |
(package private) java.util.Map |
perUserMaxActive |
(package private) java.util.Map |
perUserMaxIdle |
(package private) java.util.Map |
perUserMaxWait |
private static long |
serialVersionUID |
instanceKey, jndiEnvironment, UNKNOWN_TRANSACTIONISOLATION
Constructor and Description |
---|
PerUserPoolDataSource()
Default no-arg constructor for Serialization
|
Modifier and Type | Method and Description |
---|---|
void |
close()
Close pool(s) being maintained by this datasource.
|
protected PooledConnectionManager |
getConnectionManager(UserPassKey upkey) |
int |
getDefaultMaxActive()
The maximum number of active connections that can be allocated from
this pool at the same time, or non-positive for no limit.
|
int |
getDefaultMaxIdle()
The maximum number of active connections that can remain idle in the
pool, without extra ones being released, or negative for no limit.
|
int |
getDefaultMaxWait()
The maximum number of milliseconds that the pool will wait (when there
are no available connections) for a connection to be returned before
throwing an exception, or -1 to wait indefinitely.
|
int |
getNumActive()
Get the number of active connections in the default pool.
|
int |
getNumActive(java.lang.String username,
java.lang.String password)
Get the number of active connections in the pool for a given user.
|
int |
getNumIdle()
Get the number of idle connections in the default pool.
|
int |
getNumIdle(java.lang.String username,
java.lang.String password)
Get the number of idle connections in the pool for a given user.
|
java.util.logging.Logger |
getParentLogger() |
java.lang.Boolean |
getPerUserDefaultAutoCommit(java.lang.String key)
The keys are usernames and the value is the --.
|
java.lang.Boolean |
getPerUserDefaultReadOnly(java.lang.String username)
The keys are usernames and the value is the --.
|
java.lang.Integer |
getPerUserDefaultTransactionIsolation(java.lang.String username)
The isolation level of connections when returned from getConnection.
|
java.lang.Integer |
getPerUserMaxActive(java.lang.String username)
The maximum number of active connections that can be allocated from
this pool at the same time, or non-positive for no limit.
|
java.lang.Integer |
getPerUserMaxIdle(java.lang.String username)
The maximum number of active connections that can remain idle in the
pool, without extra ones being released, or negative for no limit.
|
java.lang.Integer |
getPerUserMaxWait(java.lang.String username)
The maximum number of milliseconds that the pool will wait (when there
are no available connections) for a connection to be returned before
throwing an exception, or -1 to wait indefinitely.
|
private org.apache.commons.pool.impl.GenericObjectPool |
getPool(PoolKey key)
Returns the object pool associated with the given PoolKey.
|
protected PooledConnectionAndInfo |
getPooledConnectionAndInfo(java.lang.String username,
java.lang.String password) |
private PoolKey |
getPoolKey(java.lang.String username,
java.lang.String password) |
javax.naming.Reference |
getReference()
Returns a
PerUserPoolDataSource Reference . |
private void |
readObject(java.io.ObjectInputStream in)
Supports Serialization interface.
|
private void |
registerPool(java.lang.String username,
java.lang.String password) |
void |
setDefaultMaxActive(int maxActive)
The maximum number of active connections that can be allocated from
this pool at the same time, or non-positive for no limit.
|
void |
setDefaultMaxIdle(int defaultMaxIdle)
The maximum number of active connections that can remain idle in the
pool, without extra ones being released, or negative for no limit.
|
void |
setDefaultMaxWait(int defaultMaxWait)
The maximum number of milliseconds that the pool will wait (when there
are no available connections) for a connection to be returned before
throwing an exception, or -1 to wait indefinitely.
|
void |
setPerUserDefaultAutoCommit(java.lang.String username,
java.lang.Boolean value)
The keys are usernames and the value is the --.
|
void |
setPerUserDefaultReadOnly(java.lang.String username,
java.lang.Boolean value)
The keys are usernames and the value is the --.
|
void |
setPerUserDefaultTransactionIsolation(java.lang.String username,
java.lang.Integer value)
The isolation level of connections when returned from getConnection.
|
void |
setPerUserMaxActive(java.lang.String username,
java.lang.Integer value)
The maximum number of active connections that can be allocated from
this pool at the same time, or non-positive for no limit.
|
void |
setPerUserMaxIdle(java.lang.String username,
java.lang.Integer value)
The maximum number of active connections that can remain idle in the
pool, without extra ones being released, or negative for no limit.
|
void |
setPerUserMaxWait(java.lang.String username,
java.lang.Integer value)
The maximum number of milliseconds that the pool will wait (when there
are no available connections) for a connection to be returned before
throwing an exception, or -1 to wait indefinitely.
|
protected void |
setupDefaults(java.sql.Connection con,
java.lang.String username) |
assertInitializationAllowed, getConnection, getConnection, getConnectionPoolDataSource, getDataSourceName, getDefaultTransactionIsolation, getDescription, getJndiEnvironment, getLoginTimeout, getLogWriter, getMinEvictableIdleTimeMillis, getNumTestsPerEvictionRun, getTestOnBorrow, getTestOnReturn, getTestWhileIdle, getTimeBetweenEvictionRunsMillis, getValidationQuery, isDefaultAutoCommit, isDefaultReadOnly, isRollbackAfterValidation, isTestOnBorrow, isTestOnReturn, isTestWhileIdle, isWrapperFor, setConnectionPoolDataSource, setDataSourceName, setDefaultAutoCommit, setDefaultReadOnly, setDefaultTransactionIsolation, setDescription, setJndiEnvironment, setLoginTimeout, setLogWriter, setMinEvictableIdleTimeMillis, setNumTestsPerEvictionRun, setRollbackAfterValidation, setTestOnBorrow, setTestOnReturn, setTestWhileIdle, setTimeBetweenEvictionRunsMillis, setValidationQuery, testCPDS, unwrap, whenExhaustedAction
private static final long serialVersionUID
private int defaultMaxActive
private int defaultMaxIdle
private int defaultMaxWait
java.util.Map perUserDefaultAutoCommit
java.util.Map perUserDefaultTransactionIsolation
java.util.Map perUserMaxActive
java.util.Map perUserMaxIdle
java.util.Map perUserMaxWait
java.util.Map perUserDefaultReadOnly
private transient java.util.Map managers
public PerUserPoolDataSource()
public void close()
close
in class InstanceKeyDataSource
public int getDefaultMaxActive()
public void setDefaultMaxActive(int maxActive)
public int getDefaultMaxIdle()
public void setDefaultMaxIdle(int defaultMaxIdle)
public int getDefaultMaxWait()
public void setDefaultMaxWait(int defaultMaxWait)
public java.lang.Boolean getPerUserDefaultAutoCommit(java.lang.String key)
public void setPerUserDefaultAutoCommit(java.lang.String username, java.lang.Boolean value)
public java.lang.Integer getPerUserDefaultTransactionIsolation(java.lang.String username)
public void setPerUserDefaultTransactionIsolation(java.lang.String username, java.lang.Integer value)
public java.lang.Integer getPerUserMaxActive(java.lang.String username)
public void setPerUserMaxActive(java.lang.String username, java.lang.Integer value)
public java.lang.Integer getPerUserMaxIdle(java.lang.String username)
public void setPerUserMaxIdle(java.lang.String username, java.lang.Integer value)
public java.lang.Integer getPerUserMaxWait(java.lang.String username)
public void setPerUserMaxWait(java.lang.String username, java.lang.Integer value)
public java.lang.Boolean getPerUserDefaultReadOnly(java.lang.String username)
public void setPerUserDefaultReadOnly(java.lang.String username, java.lang.Boolean value)
public int getNumActive()
public int getNumActive(java.lang.String username, java.lang.String password)
public int getNumIdle()
public int getNumIdle(java.lang.String username, java.lang.String password)
protected PooledConnectionAndInfo getPooledConnectionAndInfo(java.lang.String username, java.lang.String password) throws java.sql.SQLException
getPooledConnectionAndInfo
in class InstanceKeyDataSource
java.sql.SQLException
protected void setupDefaults(java.sql.Connection con, java.lang.String username) throws java.sql.SQLException
setupDefaults
in class InstanceKeyDataSource
java.sql.SQLException
protected PooledConnectionManager getConnectionManager(UserPassKey upkey)
getConnectionManager
in class InstanceKeyDataSource
public javax.naming.Reference getReference() throws javax.naming.NamingException
PerUserPoolDataSource
Reference
.getReference
in interface javax.naming.Referenceable
getReference
in class InstanceKeyDataSource
javax.naming.NamingException
- If a naming exception was encountered
while retrieving the reference.private PoolKey getPoolKey(java.lang.String username, java.lang.String password)
private void registerPool(java.lang.String username, java.lang.String password) throws javax.naming.NamingException, java.sql.SQLException
javax.naming.NamingException
java.sql.SQLException
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException
in
- a java.io.ObjectInputStream
valuejava.io.IOException
- if an error occursjava.lang.ClassNotFoundException
- if an error occursprivate org.apache.commons.pool.impl.GenericObjectPool getPool(PoolKey key)
key
- PoolKey identifying the poolpublic java.util.logging.Logger getParentLogger() throws java.sql.SQLFeatureNotSupportedException
java.sql.SQLFeatureNotSupportedException