* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
-
import javax.sql.DataSource;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger log = LoggerFactory.getLogger(CachedDataSourceWrap.class);
private ThreadLocal<ConnectionWrap> con = new ThreadLocal<>();
+ private ThreadLocal<Boolean> autoCommit = new ThreadLocal<>();
private DataSource dataSource;
public Connection getConnection() throws SQLException {
if (con.get() == null) {
Connection c = dataSource.getConnection();
+
ConnectionWrap cc = new ConnectionWrap(c);
con.set(cc);
+ autoCommit.set(c.getAutoCommit());
+ c.setAutoCommit(false);
+
log.info("Got new DB connection: " + c);
- } else
+ } else {
log.info("Using thread DB connection: " + con.get().getCon());
+ }
return con.get();
}
public Connection getConnection(String username, String password) throws SQLException {
if (con.get() == null) {
Connection c = dataSource.getConnection(username, password);
+
ConnectionWrap cc = new ConnectionWrap(c);
con.set(cc);
+ autoCommit.set(c.getAutoCommit());
+ c.setAutoCommit(false);
+
log.info("Got new DB connection: " + c);
- } else
+ } else {
log.info("Using thread DB connection: " + con.get().getCon());
+ }
return con.get();
}
public void releaseConnection() {
if (con.get() != null) {
try {
+ con.get().setAutoCommit(autoCommit.get());
con.get().realClose();
log.info("DB Connection released: " + con.get().getCon());
}
}
+ public void commit() {
+ if (con.get() != null) {
+ try {
+ con.get().commit();
+
+ log.info("DB Connection committed: " + con.get().getCon());
+ } catch (Exception e) {
+ log.warn("Failed to commit DB connection", e);
+ }
+ }
+ }
+
+ public void rollback() {
+ if (con.get() != null) {
+ try {
+ con.get().rollback();
+
+ log.info("DB Connection rolled back: " + con.get().getCon());
+ } catch (Exception e) {
+ log.warn("Failed to roll back DB connection", e);
+ }
+ }
+ }
+
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}