support useLocalSessionState config, default is true

This commit is contained in:
wenshao
2013-04-15 17:07:51 +08:00
parent 7694391390
commit b1e563fa5f
3 changed files with 24 additions and 0 deletions
@@ -231,12 +231,24 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements
private Boolean useUnfairLock = null;
private boolean useLocalSessionState = true;
public DruidAbstractDataSource(boolean lockFair){
lock = new ReentrantLock(lockFair);
notEmpty = lock.newCondition();
empty = lock.newCondition();
}
public boolean isUseLocalSessionState() {
return useLocalSessionState;
}
public void setUseLocalSessionState(boolean useLocalSessionState) {
this.useLocalSessionState = useLocalSessionState;
}
public boolean isOracle() {
return isOracle;
@@ -195,18 +195,22 @@ public final class DruidConnectionHolder {
// reset default settings
if (underlyingReadOnly != defaultReadOnly) {
conn.setReadOnly(defaultReadOnly);
underlyingReadOnly = defaultReadOnly;
}
if (underlyingHoldability != defaultHoldability) {
conn.setHoldability(defaultHoldability);
underlyingHoldability = defaultHoldability;
}
if (underlyingTransactionIsolation != defaultTransactionIsolation) {
conn.setTransactionIsolation(defaultTransactionIsolation);
underlyingTransactionIsolation = defaultTransactionIsolation;
}
if (underlyingAutoCommit != defaultAutoCommit) {
conn.setAutoCommit(defaultAutoCommit);
underlyingAutoCommit = defaultAutoCommit;
}
connectionEventListeners.clear();
@@ -671,6 +671,14 @@ public class DruidPooledConnection extends PoolableWrapper implements javax.sql.
@Override
public void setAutoCommit(boolean autoCommit) throws SQLException {
checkState();
boolean useLocalSessionState = holder.getDataSource().isUseLocalSessionState();
if (useLocalSessionState) {
if (autoCommit == holder.isUnderlyingAutoCommit()) {
return;
}
}
try {
conn.setAutoCommit(autoCommit);