From 13279eb61c90a751837101eabdd533b2a368c39c Mon Sep 17 00:00:00 2001 From: Zach Iverson Date: Mon, 11 Jul 2011 15:29:40 -0400 Subject: [PATCH] Divide MySQL and H2 stuff up --- .../xauth/datamanager/DataManager.java | 28 ++++++++---- .../com/cypherx/xauth/datamanager/H2.java | 44 +++++++++++++++++++ .../com/cypherx/xauth/datamanager/MySQL.java | 40 +++++++++++++++++ src/main/java/com/cypherx/xauth/xAuth.java | 6 ++- 4 files changed, 108 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/cypherx/xauth/datamanager/H2.java create mode 100644 src/main/java/com/cypherx/xauth/datamanager/MySQL.java diff --git a/src/main/java/com/cypherx/xauth/datamanager/DataManager.java b/src/main/java/com/cypherx/xauth/datamanager/DataManager.java index a62777c..e861ca8 100644 --- a/src/main/java/com/cypherx/xauth/datamanager/DataManager.java +++ b/src/main/java/com/cypherx/xauth/datamanager/DataManager.java @@ -1,7 +1,7 @@ package com.cypherx.xauth.datamanager; import java.sql.Connection; -import java.sql.DriverManager; +//import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -17,14 +17,14 @@ import com.cypherx.xauth.Session; import com.cypherx.xauth.StrikeBan; import com.cypherx.xauth.TeleLocation; import com.cypherx.xauth.Util; -import com.cypherx.xauth.xAuth; +//import com.cypherx.xauth.xAuth; import com.cypherx.xauth.xAuthLog; import com.cypherx.xauth.xAuthPlayer; import com.cypherx.xauth.xAuthSettings; -public class DataManager { - private Connection connection = null; - private Statement stmt = null; +public abstract class DataManager { + protected Connection connection = null; + protected Statement stmt = null; private PreparedStatement prepStmt = null; private ResultSet rs = null; @@ -33,9 +33,18 @@ public class DataManager { public DataManager() { connect(); + + if (isConnected()) { + try { + stmt = connection.createStatement(); + } catch (SQLException e) {} + } } - private void connect() { + public abstract void connect(); + public abstract void deleteExpiredSessions(); + + /*private void connect() { if (xAuthSettings.datasource.equals("mysql")) connectMySQL(); else @@ -71,13 +80,14 @@ public class DataManager { } catch (SQLException e) { xAuthLog.severe("Could not connect to H2 database!", e); } - } + }*/ public void runStartupTasks() { createTables(); loadTeleLocations(); + deleteExpiredSessions(); - String sql; + /*String sql; if (xAuthSettings.datasource.equals("mysql")) { sql = "DELETE FROM `" + xAuthSettings.tblSession + "`" + @@ -95,7 +105,7 @@ public class DataManager { stmt.executeUpdate(sql); } catch (SQLException e) { xAuthLog.severe("Could not delete expired settings!", e); - } + }*/ } public void createTables() { diff --git a/src/main/java/com/cypherx/xauth/datamanager/H2.java b/src/main/java/com/cypherx/xauth/datamanager/H2.java new file mode 100644 index 0000000..632a792 --- /dev/null +++ b/src/main/java/com/cypherx/xauth/datamanager/H2.java @@ -0,0 +1,44 @@ +package com.cypherx.xauth.datamanager; + +import java.sql.DriverManager; +import java.sql.SQLException; + +import com.cypherx.xauth.xAuth; +import com.cypherx.xauth.xAuthLog; +import com.cypherx.xauth.xAuthSettings; + +public class H2 extends DataManager { + public H2() { + super(); + } + + public void connect() { + if (!xAuthSettings.datasource.equals("default")) + System.out.println("[" + xAuth.desc.getName() + "] Unknown datasource '" + xAuthSettings.datasource + "' - Using default (H2)"); + + try { + Class.forName("org.h2.Driver"); + connection = DriverManager.getConnection("jdbc:h2:" + xAuth.dataFolder.toString() + + System.getProperty("file.separator") + "xAuth;IGNORECASE=TRUE", "sa", ""); + xAuthLog.info("Connection to H2 database established!"); + } catch (ClassNotFoundException e) { + xAuthLog.severe("Missing H2 library!", e); + } catch (SQLException e) { + xAuthLog.severe("Could not connect to H2 database!", e); + } + } + + public void deleteExpiredSessions() { + if (!isConnected()) + connect(); + + try { + stmt.executeUpdate( + "DELETE FROM `" + xAuthSettings.tblSession + "`" + + "WHERE NOW() > DATEADD('SECOND', " + xAuthSettings.sessionLength + ", `logintime`)" + ); + } catch (SQLException e) { + xAuthLog.severe("Could not delete expired settings!", e); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/cypherx/xauth/datamanager/MySQL.java b/src/main/java/com/cypherx/xauth/datamanager/MySQL.java new file mode 100644 index 0000000..bd53593 --- /dev/null +++ b/src/main/java/com/cypherx/xauth/datamanager/MySQL.java @@ -0,0 +1,40 @@ +package com.cypherx.xauth.datamanager; + +import java.sql.DriverManager; +import java.sql.SQLException; + +import com.cypherx.xauth.xAuthLog; +import com.cypherx.xauth.xAuthSettings; + +public class MySQL extends DataManager { + public MySQL() { + super(); + } + + public void connect() { + try { + Class.forName("com.mysql.jdbc.Driver"); + connection = DriverManager.getConnection("jdbc:mysql://" + xAuthSettings.mysqlHost + ":" + xAuthSettings.mysqlPort + "/" + + xAuthSettings.mysqlDb + "?zeroDateTimeBehavior=convertToNull", xAuthSettings.mysqlUser, xAuthSettings.mysqlPass); + xAuthLog.info("Connection to MySQL server established!"); + } catch (ClassNotFoundException e) { + xAuthLog.severe("Missing MySQL library!", e); + } catch (SQLException e) { + xAuthLog.severe("Could not connect to MySQL server!", e); + } + } + + public void deleteExpiredSessions() { + if (!isConnected()) + connect(); + + try { + stmt.executeUpdate( + "DELETE FROM `" + xAuthSettings.tblSession + "`" + + "WHERE NOW() > ADDDATE(`logintime`, INTERVAL " + xAuthSettings.sessionLength + " SECOND)" + ); + } catch (SQLException e) { + xAuthLog.severe("Could not delete expired settings!", e); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/cypherx/xauth/xAuth.java b/src/main/java/com/cypherx/xauth/xAuth.java index b402599..d653ca4 100644 --- a/src/main/java/com/cypherx/xauth/xAuth.java +++ b/src/main/java/com/cypherx/xauth/xAuth.java @@ -61,7 +61,11 @@ public class xAuth extends JavaPlugin { xAuthPermissions.setup(this); xAuthHelp.setup(this); - dataManager = new DataManager(); + if (xAuthSettings.datasource.equals("mysql")) + dataManager = new MySQL(); + else + dataManager = new H2(); + if (!dataManager.isConnected()) { xAuthLog.severe("Disabling - No connection to database"); getServer().getPluginManager().disablePlugin(this);