From d684cd4dbdadb11a0017556e802bdf3141336f2b Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 10 Jun 2015 20:22:04 +0200 Subject: [server] db stuff, new interface, ... --- .../src/main/java/sql/MysqlConnection.java | 74 ++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 dozentenmodulserver/src/main/java/sql/MysqlConnection.java (limited to 'dozentenmodulserver/src/main/java/sql/MysqlConnection.java') 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 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 + } + } + +} -- cgit v1.2.3-55-g7522