summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver/src/main/java/sql/MysqlConnection.java
diff options
context:
space:
mode:
authorSimon Rettberg2015-06-10 20:22:04 +0200
committerSimon Rettberg2015-06-10 20:22:04 +0200
commitd684cd4dbdadb11a0017556e802bdf3141336f2b (patch)
treed1f863957b2c0241b036fb9c82821e7f1df50023 /dozentenmodulserver/src/main/java/sql/MysqlConnection.java
parent[server] Compiling again, still lots of stubs (diff)
downloadtutor-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.java74
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
+ }
+ }
+
+}