diff options
| author | Simon Rettberg | 2015-06-10 20:22:04 +0200 |
|---|---|---|
| committer | Simon Rettberg | 2015-06-10 20:22:04 +0200 |
| commit | d684cd4dbdadb11a0017556e802bdf3141336f2b (patch) | |
| tree | d1f863957b2c0241b036fb9c82821e7f1df50023 /dozentenmodulserver/src/main/java/sql/MysqlConnection.java | |
| parent | [server] Compiling again, still lots of stubs (diff) | |
| download | tutor-module-d684cd4dbdadb11a0017556e802bdf3141336f2b.tar.gz tutor-module-d684cd4dbdadb11a0017556e802bdf3141336f2b.tar.xz tutor-module-d684cd4dbdadb11a0017556e802bdf3141336f2b.zip | |
[server] db stuff, new interface, ...
Diffstat (limited to 'dozentenmodulserver/src/main/java/sql/MysqlConnection.java')
| -rw-r--r-- | dozentenmodulserver/src/main/java/sql/MysqlConnection.java | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/dozentenmodulserver/src/main/java/sql/MysqlConnection.java b/dozentenmodulserver/src/main/java/sql/MysqlConnection.java new file mode 100644 index 00000000..dbbddfe1 --- /dev/null +++ b/dozentenmodulserver/src/main/java/sql/MysqlConnection.java @@ -0,0 +1,74 @@ +package sql; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; + +public class MysqlConnection implements AutoCloseable { + + private static final Logger LOGGER = Logger.getLogger(MysqlConnection.class); + + private static final int CONNECTION_TIMEOUT_MS = 5 * 60 * 1000; + + private final long deadline = System.currentTimeMillis() + CONNECTION_TIMEOUT_MS; + + private final Connection rawConnection; + + private boolean hasPendingQueries = false; + + private List<MysqlStatement> openStatements = new ArrayList<>(); + + MysqlConnection(Connection rawConnection) { + this.rawConnection = rawConnection; + } + + public MysqlStatement prepareStatement(String sql) throws SQLException { + hasPendingQueries = true; + MysqlStatement statement = new MysqlStatement(rawConnection, sql); + openStatements.add(statement); + return statement; + } + + public void commit() throws SQLException { + rawConnection.commit(); + hasPendingQueries = false; + } + + public void rollback() throws SQLException { + rawConnection.rollback(); + hasPendingQueries = false; + } + + boolean isValid() { + return System.currentTimeMillis() < deadline; + } + + @Override + public void close() { + if (hasPendingQueries) { + LOGGER.warn("Mysql connection had uncommited queries on .close()"); + try { + rawConnection.rollback(); + } catch (SQLException e) { + LOGGER.warn("Rolling back uncommited queries failed!", e); + } + for (MysqlStatement statement : openStatements) { + statement.close(); + } + openStatements.clear(); + } + SQL.returnConnection(this); + } + + void release() { + try { + rawConnection.close(); + } catch (SQLException e) { + // Nothing meaningful to do + } + } + +} |
