From 45c6bf0a78fc0bb3ae6cce67cf38d5dcc8186325 Mon Sep 17 00:00:00 2001 From: DNx5 Date: Sun, 6 Dec 2015 06:08:52 +0700 Subject: [PATCH 1/4] Removed DatabaseCalls class. * this class only contains wrapper of selected datasource type which every method included a code to run the task inside a new Thread. But this class doesn't help improving performance, because it's still running the task synchronously. --- src/main/java/fr/xephi/authme/AuthMe.java | 31 +- .../authme/datasource/DatabaseCalls.java | 513 ------------------ 2 files changed, 21 insertions(+), 523 deletions(-) delete mode 100644 src/main/java/fr/xephi/authme/datasource/DatabaseCalls.java diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index 655a1f33b..2f6bf18f1 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -13,10 +13,20 @@ import fr.xephi.authme.command.CommandHandler; import fr.xephi.authme.command.CommandInitializer; import fr.xephi.authme.converter.Converter; import fr.xephi.authme.converter.ForceFlatToSqlite; -import fr.xephi.authme.datasource.*; +import fr.xephi.authme.datasource.CacheDataSource; +import fr.xephi.authme.datasource.DataSource; +import fr.xephi.authme.datasource.FlatFile; +import fr.xephi.authme.datasource.MySQL; +import fr.xephi.authme.datasource.SQLite; import fr.xephi.authme.hooks.BungeeCordMessage; import fr.xephi.authme.hooks.EssSpawn; -import fr.xephi.authme.listener.*; +import fr.xephi.authme.listener.AuthMeBlockListener; +import fr.xephi.authme.listener.AuthMeEntityListener; +import fr.xephi.authme.listener.AuthMeInventoryPacketAdapter; +import fr.xephi.authme.listener.AuthMePlayerListener; +import fr.xephi.authme.listener.AuthMePlayerListener16; +import fr.xephi.authme.listener.AuthMePlayerListener18; +import fr.xephi.authme.listener.AuthMeServerListener; import fr.xephi.authme.modules.ModuleManager; import fr.xephi.authme.output.ConsoleFilter; import fr.xephi.authme.output.Log4JFilter; @@ -25,7 +35,9 @@ import fr.xephi.authme.output.Messages; import fr.xephi.authme.permission.PermissionsManager; import fr.xephi.authme.permission.PlayerPermission; import fr.xephi.authme.process.Management; -import fr.xephi.authme.settings.*; +import fr.xephi.authme.settings.OtherAccounts; +import fr.xephi.authme.settings.Settings; +import fr.xephi.authme.settings.Spawn; import fr.xephi.authme.util.GeoLiteAPI; import fr.xephi.authme.util.StringUtils; import fr.xephi.authme.util.Utils; @@ -579,20 +591,19 @@ public class AuthMe extends JavaPlugin { if (isSQLite) { server.getScheduler().runTaskAsynchronously(this, new Runnable() { - @Override public void run() { int accounts = database.getAccountsRegistered(); - if (accounts >= 4000) - ConsoleLogger.showError("YOU'RE USING THE SQLITE DATABASE WITH " + accounts + "+ ACCOUNTS, FOR BETTER PERFORMANCES, PLEASE UPGRADE TO MYSQL!!"); + if (accounts >= 4000) { + ConsoleLogger.showError("YOU'RE USING THE SQLITE DATABASE WITH " + + accounts + "+ ACCOUNTS, FOR BETTER PERFORMANCES, PLEASE UPGRADE TO MYSQL!!"); + } } }); } if (Settings.isCachingEnabled) { database = new CacheDataSource(this, database); - } else { - database = new DatabaseCalls(database); } if (Settings.getDataSource == DataSource.DataSourceType.FILE) { @@ -920,14 +931,14 @@ public class AuthMe extends JavaPlugin { String realIP = player.getAddress().getAddress().getHostAddress(); String sUrl = "http://monitor-1.verygames.net/api/?action=ipclean-real-ip&out=raw&ip=%IP%&port=%PORT%"; sUrl = sUrl.replace("%IP%", player.getAddress().getAddress().getHostAddress()) - .replace("%PORT%", "" + player.getAddress().getPort()); + .replace("%PORT%", "" + player.getAddress().getPort()); try { URL url = new URL(sUrl); URLConnection urlCon = url.openConnection(); try (BufferedReader in = new BufferedReader(new InputStreamReader(urlCon.getInputStream()))) { String inputLine = in.readLine(); if (!StringUtils.isEmpty(inputLine) && !inputLine.equalsIgnoreCase("error") - && !inputLine.contains("error")) { + && !inputLine.contains("error")) { realIP = inputLine; } } catch (IOException e) { diff --git a/src/main/java/fr/xephi/authme/datasource/DatabaseCalls.java b/src/main/java/fr/xephi/authme/datasource/DatabaseCalls.java deleted file mode 100644 index ebd133e07..000000000 --- a/src/main/java/fr/xephi/authme/datasource/DatabaseCalls.java +++ /dev/null @@ -1,513 +0,0 @@ -package fr.xephi.authme.datasource; - -import fr.xephi.authme.cache.auth.PlayerAuth; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -/** - */ -public class DatabaseCalls implements DataSource { - - private final ExecutorService exec; - private final DataSource database; - - /** - * Constructor for DatabaseCalls. - * - * @param database DataSource - */ - public DatabaseCalls(DataSource database) { - this.database = database; - this.exec = Executors.newCachedThreadPool(); - } - - /** - * Method isAuthAvailable. - * - * @param user String - * - * @return boolean * @see fr.xephi.authme.datasource.DataSource#isAuthAvailable(String) - */ - @Override - public synchronized boolean isAuthAvailable(final String user) { - try { - return exec.submit(new Callable() { - public Boolean call() throws Exception { - return database.isAuthAvailable(user); - } - }).get(); - } catch (Exception e) { - return false; - } - } - - /** - * Method getAuth. - * - * @param user String - * - * @return PlayerAuth * @see fr.xephi.authme.datasource.DataSource#getAuth(String) - */ - @Override - public synchronized PlayerAuth getAuth(final String user) { - try { - return exec.submit(new Callable() { - public PlayerAuth call() throws Exception { - return database.getAuth(user); - } - }).get(); - } catch (Exception e) { - return null; - } - } - - /** - * Method saveAuth. - * - * @param auth PlayerAuth - * - * @return boolean * @see fr.xephi.authme.datasource.DataSource#saveAuth(PlayerAuth) - */ - @Override - public synchronized boolean saveAuth(final PlayerAuth auth) { - try { - return exec.submit(new Callable() { - public Boolean call() throws Exception { - return database.saveAuth(auth); - } - }).get(); - } catch (Exception e) { - return false; - } - } - - /** - * Method updateSession. - * - * @param auth PlayerAuth - * - * @return boolean * @see fr.xephi.authme.datasource.DataSource#updateSession(PlayerAuth) - */ - @Override - public synchronized boolean updateSession(final PlayerAuth auth) { - try { - return exec.submit(new Callable() { - public Boolean call() throws Exception { - return database.updateSession(auth); - } - }).get(); - } catch (Exception e) { - return false; - } - } - - /** - * Method updatePassword. - * - * @param auth PlayerAuth - * - * @return boolean * @see fr.xephi.authme.datasource.DataSource#updatePassword(PlayerAuth) - */ - @Override - public synchronized boolean updatePassword(final PlayerAuth auth) { - try { - return exec.submit(new Callable() { - public Boolean call() throws Exception { - return database.updatePassword(auth); - } - }).get(); - } catch (Exception e) { - return false; - } - } - - /** - * Method purgeDatabase. - * - * @param until long - * - * @return int * @see fr.xephi.authme.datasource.DataSource#purgeDatabase(long) - */ - @Override - public synchronized int purgeDatabase(final long until) { - try { - return exec.submit(new Callable() { - public Integer call() throws Exception { - return database.purgeDatabase(until); - } - }).get(); - } catch (Exception e) { - return -1; - } - } - - /** - * Method autoPurgeDatabase. - * - * @param until long - * - * @return List * @see fr.xephi.authme.datasource.DataSource#autoPurgeDatabase(long) - */ - @Override - public synchronized List autoPurgeDatabase(final long until) { - try { - return exec.submit(new Callable>() { - public List call() throws Exception { - return database.autoPurgeDatabase(until); - } - }).get(); - } catch (Exception e) { - return new ArrayList<>(); - } - } - - /** - * Method removeAuth. - * - * @param user String - * - * @return boolean * @see fr.xephi.authme.datasource.DataSource#removeAuth(String) - */ - @Override - public synchronized boolean removeAuth(final String user) { - try { - return exec.submit(new Callable() { - public Boolean call() throws Exception { - return database.removeAuth(user); - } - }).get(); - } catch (Exception e) { - return false; - } - } - - /** - * Method updateQuitLoc. - * - * @param auth PlayerAuth - * - * @return boolean * @see fr.xephi.authme.datasource.DataSource#updateQuitLoc(PlayerAuth) - */ - @Override - public synchronized boolean updateQuitLoc(final PlayerAuth auth) { - try { - return exec.submit(new Callable() { - public Boolean call() throws Exception { - return database.updateQuitLoc(auth); - } - }).get(); - } catch (Exception e) { - return false; - } - } - - /** - * Method getIps. - * - * @param ip String - * - * @return int * @see fr.xephi.authme.datasource.DataSource#getIps(String) - */ - @Override - public synchronized int getIps(final String ip) { - try { - return exec.submit(new Callable() { - - public Integer call() throws Exception { - return database.getIps(ip); - } - }).get(); - } catch (Exception e) { - return -1; - } - } - - /** - * Method getAllAuthsByName. - * - * @param auth PlayerAuth - * - * @return List * @see fr.xephi.authme.datasource.DataSource#getAllAuthsByName(PlayerAuth) - */ - @Override - public synchronized List getAllAuthsByName(final PlayerAuth auth) { - try { - return exec.submit(new Callable>() { - public List call() throws Exception { - return database.getAllAuthsByName(auth); - } - }).get(); - } catch (Exception e) { - return new ArrayList<>(); - } - } - - /** - * Method getAllAuthsByIp. - * - * @param ip String - * - * @return List * @see fr.xephi.authme.datasource.DataSource#getAllAuthsByIp(String) - */ - @Override - public synchronized List getAllAuthsByIp(final String ip) { - try { - return exec.submit(new Callable>() { - public List call() throws Exception { - return database.getAllAuthsByIp(ip); - } - }).get(); - } catch (Exception e) { - return new ArrayList<>(); - } - } - - /** - * Method getAllAuthsByEmail. - * - * @param email String - * - * @return List * @see fr.xephi.authme.datasource.DataSource#getAllAuthsByEmail(String) - */ - @Override - public synchronized List getAllAuthsByEmail(final String email) { - try { - return exec.submit(new Callable>() { - public List call() throws Exception { - return database.getAllAuthsByEmail(email); - } - }).get(); - } catch (Exception e) { - return new ArrayList<>(); - } - } - - /** - * Method updateEmail. - * - * @param auth PlayerAuth - * - * @return boolean * @see fr.xephi.authme.datasource.DataSource#updateEmail(PlayerAuth) - */ - @Override - public synchronized boolean updateEmail(final PlayerAuth auth) { - try { - return exec.submit(new Callable() { - public Boolean call() throws Exception { - return database.updateEmail(auth); - } - }).get(); - } catch (Exception e) { - return false; - } - } - - /** - * Method updateSalt. - * - * @param auth PlayerAuth - * - * @return boolean * @see fr.xephi.authme.datasource.DataSource#updateSalt(PlayerAuth) - */ - @Override - public synchronized boolean updateSalt(final PlayerAuth auth) { - try { - return exec.submit(new Callable() { - public Boolean call() throws Exception { - return database.updateSalt(auth); - } - }).get(); - } catch (Exception e) { - return false; - } - } - - /** - * Method close. - * - * @see fr.xephi.authme.datasource.DataSource#close() - */ - @Override - public synchronized void close() { - exec.shutdown(); - database.close(); - } - - /** - * Method reload. - * - * @see fr.xephi.authme.datasource.DataSource#reload() - */ - @Override - public synchronized void reload() { - database.reload(); - } - - /** - * Method purgeBanned. - * - * @param banned List - * - * @see fr.xephi.authme.datasource.DataSource#purgeBanned(List) - */ - @Override - public synchronized void purgeBanned(final List banned) { - new Thread(new Runnable() { - public synchronized void run() { - database.purgeBanned(banned); - } - }).start(); - } - - /** - * Method getType. - * - * @return DataSourceType * @see fr.xephi.authme.datasource.DataSource#getType() - */ - @Override - public synchronized DataSourceType getType() { - return database.getType(); - } - - /** - * Method isLogged. - * - * @param user String - * - * @return boolean * @see fr.xephi.authme.datasource.DataSource#isLogged(String) - */ - @Override - public synchronized boolean isLogged(final String user) { - try { - return exec.submit(new Callable() { - public Boolean call() throws Exception { - return database.isLogged(user); - } - }).get(); - } catch (Exception e) { - return false; - } - } - - /** - * Method setLogged. - * - * @param user String - * - * @see fr.xephi.authme.datasource.DataSource#setLogged(String) - */ - @Override - public synchronized void setLogged(final String user) { - exec.execute(new Runnable() { - public synchronized void run() { - database.setLogged(user); - } - }); - } - - /** - * Method setUnlogged. - * - * @param user String - * - * @see fr.xephi.authme.datasource.DataSource#setUnlogged(String) - */ - @Override - public synchronized void setUnlogged(final String user) { - exec.execute(new Runnable() { - public synchronized void run() { - database.setUnlogged(user); - } - }); - } - - /** - * Method purgeLogged. - * - * @see fr.xephi.authme.datasource.DataSource#purgeLogged() - */ - @Override - public synchronized void purgeLogged() { - exec.execute(new Runnable() { - public synchronized void run() { - database.purgeLogged(); - } - }); - } - - /** - * Method getAccountsRegistered. - * - * @return int * @see fr.xephi.authme.datasource.DataSource#getAccountsRegistered() - */ - @Override - public synchronized int getAccountsRegistered() { - try { - return exec.submit(new Callable() { - public Integer call() throws Exception { - return database.getAccountsRegistered(); - } - }).get(); - } catch (Exception e) { - return -1; - } - } - - /** - * Method updateName. - * - * @param oldOne String - * @param newOne String - * - * @see fr.xephi.authme.datasource.DataSource#updateName(String, String) - */ - @Override - public synchronized void updateName(final String oldOne, final String newOne) { - exec.execute(new Runnable() { - public synchronized void run() { - database.updateName(oldOne, newOne); - } - }); - } - - /** - * Method getAllAuths. - * - * @return List * @see fr.xephi.authme.datasource.DataSource#getAllAuths() - */ - @Override - public synchronized List getAllAuths() { - try { - return exec.submit(new Callable>() { - public List call() throws Exception { - return database.getAllAuths(); - } - }).get(); - } catch (Exception e) { - return new ArrayList<>(); - } - } - - /** - * Method getLoggedPlayers. - * - * @return List * @see fr.xephi.authme.datasource.DataSource#getLoggedPlayers() - */ - @Override - public List getLoggedPlayers() { - try { - return exec.submit(new Callable>() { - public List call() throws Exception { - return database.getLoggedPlayers(); - } - }).get(); - } catch (Exception e) { - return new ArrayList<>(); - } - } - -} From 1f001f2225a3e84bcafc70d8e962bdbcc038f439 Mon Sep 17 00:00:00 2001 From: DNx5 Date: Sun, 6 Dec 2015 06:10:16 +0700 Subject: [PATCH 2/4] Removed max mysql connections options from config. --- .../fr/xephi/authme/settings/Settings.java | 83 ++++++++++--------- src/main/resources/config.yml | 2 - 2 files changed, 42 insertions(+), 43 deletions(-) diff --git a/src/main/java/fr/xephi/authme/settings/Settings.java b/src/main/java/fr/xephi/authme/settings/Settings.java index f35af4440..a61705866 100644 --- a/src/main/java/fr/xephi/authme/settings/Settings.java +++ b/src/main/java/fr/xephi/authme/settings/Settings.java @@ -1,5 +1,7 @@ package fr.xephi.authme.settings; +import com.google.common.base.Charsets; +import com.google.common.io.Files; import fr.xephi.authme.AuthMe; import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.datasource.DataSource; @@ -8,10 +10,14 @@ import fr.xephi.authme.security.HashAlgorithm; import fr.xephi.authme.util.Wrapper; import org.bukkit.configuration.file.YamlConfiguration; -import com.google.common.base.Charsets; -import com.google.common.io.Files; - -import java.io.*; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; @@ -94,7 +100,7 @@ public final class Settings { getMailPort, maxLoginTry, captchaLength, saltLength, getmaxRegPerEmail, bCryptLog2Rounds, getPhpbbGroup, antiBotSensibility, antiBotDuration, delayRecall, getMaxLoginPerIp, - getMaxJoinPerIp, getMySQLMaxConnections; + getMaxJoinPerIp; protected static YamlConfiguration configFile; private static AuthMe plugin; private static Settings instance; @@ -170,7 +176,6 @@ public final class Settings { isCachingEnabled = configFile.getBoolean("DataSource.caching", true); getMySQLHost = configFile.getString("DataSource.mySQLHost", "127.0.0.1"); getMySQLPort = configFile.getString("DataSource.mySQLPort", "3306"); - getMySQLMaxConnections = configFile.getInt("DataSource.mySQLMaxConections", 25); getMySQLUsername = configFile.getString("DataSource.mySQLUsername", "authme"); getMySQLPassword = configFile.getString("DataSource.mySQLPassword", "12345"); getMySQLDatabase = configFile.getString("DataSource.mySQLDatabase", "authme"); @@ -301,39 +306,36 @@ public final class Settings { } private static String loadEmailText() { - if (!EMAIL_FILE.exists()) - saveDefaultEmailText(); - StringBuilder str = new StringBuilder(); - try { - BufferedReader in = new BufferedReader(new FileReader(EMAIL_FILE)); - String s; - while ((s = in.readLine()) != null) - str.append(s); - in.close(); - } catch(IOException e) - { - } - return str.toString(); - } + if (!EMAIL_FILE.exists()) + saveDefaultEmailText(); + StringBuilder str = new StringBuilder(); + try { + BufferedReader in = new BufferedReader(new FileReader(EMAIL_FILE)); + String s; + while ((s = in.readLine()) != null) + str.append(s); + in.close(); + } catch (IOException ignored) { + } + return str.toString(); + } - private static void saveDefaultEmailText() { - InputStream file = plugin.getResource("email.html"); - StringBuilder str = new StringBuilder(); - try { - BufferedReader in = new BufferedReader(new InputStreamReader(file, Charset.forName("utf-8"))); - String s; - while ((s = in.readLine()) != null) - str.append(s); - in.close(); - Files.touch(EMAIL_FILE); - Files.write(str.toString(), EMAIL_FILE, Charsets.UTF_8); - } - catch(Exception e) - { - } - } + private static void saveDefaultEmailText() { + InputStream file = plugin.getResource("email.html"); + StringBuilder str = new StringBuilder(); + try { + BufferedReader in = new BufferedReader(new InputStreamReader(file, Charset.forName("utf-8"))); + String s; + while ((s = in.readLine()) != null) + str.append(s); + in.close(); + Files.touch(EMAIL_FILE); + Files.write(str.toString(), EMAIL_FILE, Charsets.UTF_8); + } catch (Exception ignored) { + } + } - public static void setValue(String key, Object value) { + public static void setValue(String key, Object value) { instance.set(key, value); save(); } @@ -713,10 +715,9 @@ public final class Settings { changes = true; } - if (contains("Email.mailText")) - { - set("Email.mailText", null); - ConsoleLogger.showError("Remove Email.mailText from config, we now use the email.html file"); + if (contains("Email.mailText")) { + set("Email.mailText", null); + ConsoleLogger.showError("Remove Email.mailText from config, we now use the email.html file"); } if (changes) { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index fd73b7733..fb8d64239 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -8,8 +8,6 @@ DataSource: mySQLHost: 127.0.0.1 # Database Port mySQLPort: '3306' - # MySql Max Connections - mySQLMaxConections: 8 # Username about Database Connection Infos mySQLUsername: authme # Password about Database Connection Infos From c196f45854049bd5601cf4fe4b9ed2dc3e742a07 Mon Sep 17 00:00:00 2001 From: DNx5 Date: Sun, 6 Dec 2015 06:12:45 +0700 Subject: [PATCH 3/4] Change getAccountsRegistered method to use normal Statement. - Log the stacktrace if something weird happens. --- .../fr/xephi/authme/datasource/MySQL.java | 68 ++++++++++++------- 1 file changed, 45 insertions(+), 23 deletions(-) diff --git a/src/main/java/fr/xephi/authme/datasource/MySQL.java b/src/main/java/fr/xephi/authme/datasource/MySQL.java index 69c10e824..93a2d3456 100644 --- a/src/main/java/fr/xephi/authme/datasource/MySQL.java +++ b/src/main/java/fr/xephi/authme/datasource/MySQL.java @@ -259,8 +259,9 @@ public class MySQL implements DataSource { pst.setString(1, user.toLowerCase()); ResultSet rs = pst.executeQuery(); return rs.next(); - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return false; } @@ -312,8 +313,9 @@ public class MySQL implements DataSource { pAuth.setHash(new String(bytes)); } } - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); return null; } return pAuth; @@ -521,8 +523,9 @@ public class MySQL implements DataSource { pst.close(); } return true; - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return false; } @@ -574,8 +577,9 @@ public class MySQL implements DataSource { pst.close(); } return true; - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return false; } @@ -602,7 +606,7 @@ public class MySQL implements DataSource { pst.executeUpdate(); pst.close(); return true; - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); } return false; @@ -625,8 +629,9 @@ public class MySQL implements DataSource { PreparedStatement pst = con.prepareStatement(sql); pst.setLong(1, until); result = pst.executeUpdate(); - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return result; } @@ -653,8 +658,9 @@ public class MySQL implements DataSource { sql = "DELETE FROM " + tableName + " WHERE " + columnLastLogin + "<" + until; st.executeUpdate(sql); st.close(); - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return list; } @@ -693,8 +699,9 @@ public class MySQL implements DataSource { pst.setString(1, user); pst.executeUpdate(); return true; - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return false; } @@ -723,8 +730,9 @@ public class MySQL implements DataSource { pst.executeUpdate(); pst.close(); return true; - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return false; } @@ -751,8 +759,9 @@ public class MySQL implements DataSource { } rs.close(); pst.close(); - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return countIp; } @@ -776,7 +785,7 @@ public class MySQL implements DataSource { pst.executeUpdate(); pst.close(); return true; - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); ConsoleLogger.writeStackTrace(ex); } @@ -805,8 +814,9 @@ public class MySQL implements DataSource { pst.executeUpdate(); pst.close(); return true; - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return false; } @@ -820,9 +830,10 @@ public class MySQL implements DataSource { public void reload() { try { reloadArguments(); - } catch (Exception e) { - ConsoleLogger.showError(e.getMessage()); + } catch (Exception ex) { + ConsoleLogger.showError(ex.getMessage()); ConsoleLogger.showError("Can't reconnect to MySQL database... Please check your MySQL configuration!"); + ConsoleLogger.writeStackTrace(ex); AuthMe.getInstance().stopOrUnload(); } } @@ -861,8 +872,9 @@ public class MySQL implements DataSource { } rs.close(); pst.close(); - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return result; } @@ -889,8 +901,9 @@ public class MySQL implements DataSource { } rs.close(); pst.close(); - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return result; } @@ -938,8 +951,9 @@ public class MySQL implements DataSource { pst.executeUpdate(); } pst.close(); - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } } @@ -969,8 +983,9 @@ public class MySQL implements DataSource { pst.setString(1, user); ResultSet rs = pst.executeQuery(); isLogged = rs.next() && (rs.getInt(columnLogged) == 1); - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return isLogged; } @@ -991,8 +1006,9 @@ public class MySQL implements DataSource { pst.setString(2, user.toLowerCase()); pst.executeUpdate(); pst.close(); - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } } @@ -1012,8 +1028,9 @@ public class MySQL implements DataSource { pst.setString(2, user.toLowerCase()); pst.executeUpdate(); pst.close(); - } catch (Exception ex) { + } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } } @@ -1033,6 +1050,7 @@ public class MySQL implements DataSource { pst.close(); } catch (Exception ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } } @@ -1047,15 +1065,16 @@ public class MySQL implements DataSource { public int getAccountsRegistered() { int result = 0; try (Connection con = getConnection()) { - PreparedStatement pst = con.prepareStatement("SELECT COUNT(*) FROM " + tableName + ";"); - ResultSet rs = pst.executeQuery(); + Statement st = con.createStatement(); + ResultSet rs = st.executeQuery("SELECT COUNT(*) FROM " + tableName); if (rs.next()) { result = rs.getInt(1); } rs.close(); - pst.close(); + st.close(); } catch (Exception ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return result; } @@ -1078,6 +1097,7 @@ public class MySQL implements DataSource { pst.executeUpdate(); } catch (Exception ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } } @@ -1131,6 +1151,7 @@ public class MySQL implements DataSource { st.close(); } catch (Exception ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return auths; } @@ -1182,6 +1203,7 @@ public class MySQL implements DataSource { } } catch (Exception ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); } return auths; } From 7ba54123dbe66568f30d815faa83afc0ac4557e0 Mon Sep 17 00:00:00 2001 From: DNx5 Date: Sun, 6 Dec 2015 06:14:30 +0700 Subject: [PATCH 4/4] Update PlayerAuth builder class. --- .../xephi/authme/cache/auth/PlayerAuth.java | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/main/java/fr/xephi/authme/cache/auth/PlayerAuth.java b/src/main/java/fr/xephi/authme/cache/auth/PlayerAuth.java index 27ce38d84..32c4f7fdc 100644 --- a/src/main/java/fr/xephi/authme/cache/auth/PlayerAuth.java +++ b/src/main/java/fr/xephi/authme/cache/auth/PlayerAuth.java @@ -3,6 +3,11 @@ package fr.xephi.authme.cache.auth; import fr.xephi.authme.security.HashAlgorithm; import fr.xephi.authme.settings.Settings; +import static com.google.common.base.Objects.firstNonNull; +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Strings.nullToEmpty; + + /** */ public class PlayerAuth { @@ -461,7 +466,7 @@ public class PlayerAuth { * @return String */ public String serialize() { - StringBuilder str = new StringBuilder(); + StringBuffer str = new StringBuffer(); char d = ';'; str.append(this.nickname).append(d); str.append(this.realName).append(d); @@ -503,34 +508,35 @@ public class PlayerAuth { public static final class Builder { private String name; - private String realName = "Player"; - private String hash = ""; - private String salt = ""; - private String ip = "127.0.0.1"; - private String world = "world"; + private String realName; + private String hash; + private String salt; + private String ip; + private String world; + private String email; + private int groupId = -1; private double x = 0.0f; private double y = 0.0f; private double z = 0.0f; private long lastLogin = System.currentTimeMillis(); - private int groupId = -1; - private String email = "your@email.com"; public PlayerAuth build() { return new PlayerAuth( - name, - hash, - salt, + checkNotNull(name).toLowerCase(), + nullToEmpty(hash), + nullToEmpty(salt), groupId, - ip, + firstNonNull(ip, "127.0.0.1"), lastLogin, - x, y, z, world, - email, - realName + x, y, z, + firstNonNull(world, "world"), + firstNonNull(email, "your@email.com"), + firstNonNull(realName, "Player") ); } public Builder name(String name) { - this.name = name.toLowerCase(); + this.name = name; return this; }