diff --git a/Plan/common/src/main/java/com/djrapitops/plan/ShutdownHook.java b/Plan/common/src/main/java/com/djrapitops/plan/ShutdownHook.java index a6575bc2e..c5ce27c71 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/ShutdownHook.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/ShutdownHook.java @@ -78,16 +78,16 @@ public class ShutdownHook extends Thread { Map activeSessions = SessionCache.getActiveSessions(); prepareSessionsForStorage(activeSessions, System.currentTimeMillis()); saveActiveSessions(activeSessions); - } catch (IllegalStateException ignored) { - /* Database is not initialized */ } catch (DBInitException e) { errorHandler.log(L.ERROR, this.getClass(), e); + } catch (IllegalStateException ignored) { + /* Database is not initialized */ } finally { closeDatabase(dbSystem.getDatabase()); } } - private void saveActiveSessions(Map activeSessions) throws DBInitException { + private void saveActiveSessions(Map activeSessions) { Database database = dbSystem.getDatabase(); if (database.getState() == Database.State.CLOSED) { // Ensure that database is not closed when performing the transaction. diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/Database.java b/Plan/common/src/main/java/com/djrapitops/plan/db/Database.java index fe0154cb3..ae6b62b86 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/Database.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/Database.java @@ -29,7 +29,14 @@ import java.util.concurrent.Future; */ public interface Database { - void init() throws DBInitException; + /** + * Initializes the Database. + *

+ * Queries can be performed after this request has completed all required transactions for the database operations. + * + * @throws DBInitException if Database fails to initiate. + */ + void init(); void close(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/H2DB.java b/Plan/common/src/main/java/com/djrapitops/plan/db/H2DB.java index 82b43ed59..125db51ac 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/H2DB.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/H2DB.java @@ -68,7 +68,7 @@ public class H2DB extends SQLDB { } @Override - public void setupDataSource() throws DBInitException { + public void setupDataSource() { try { connection = getNewConnection(databaseFile); } catch (SQLException e) { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/MySQLDB.java b/Plan/common/src/main/java/com/djrapitops/plan/db/MySQLDB.java index 4f6ab35c1..010959e18 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/MySQLDB.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/MySQLDB.java @@ -79,7 +79,7 @@ public class MySQLDB extends SQLDB { * Setups the {@link HikariDataSource} */ @Override - public void setupDataSource() throws DBInitException { + public void setupDataSource() { try { HikariConfig hikariConfig = new HikariConfig(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/SQLDB.java b/Plan/common/src/main/java/com/djrapitops/plan/db/SQLDB.java index cd928eec4..e82ef55c9 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/SQLDB.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/SQLDB.java @@ -89,18 +89,8 @@ public abstract class SQLDB extends AbstractDatabase { this.transactionExecutorServiceProvider = () -> Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat("Plan " + getClass().getSimpleName() + "-transaction-thread-%d").build()); } - /** - * Initializes the Database. - *

- * All tables exist in the database after call to this. - * Updates Schema to latest version. - * Converts Unsaved Bukkit player files to database data. - * Cleans the database. - * - * @throws DBInitException if Database fails to initiate. - */ @Override - public void init() throws DBInitException { + public void init() { List unfinishedTransactions = closeTransactionExecutor(transactionExecutor); this.transactionExecutor = transactionExecutorServiceProvider.get(); @@ -215,7 +205,12 @@ public abstract class SQLDB extends AbstractDatabase { } } - public abstract void setupDataSource() throws DBInitException; + /** + * Set up the source for connections. + * + * @throws DBInitException If the DataSource fails to be initialized. + */ + public abstract void setupDataSource(); @Override public void close() { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/SQLiteDB.java b/Plan/common/src/main/java/com/djrapitops/plan/db/SQLiteDB.java index 70eb57280..22612ad77 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/SQLiteDB.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/SQLiteDB.java @@ -67,7 +67,7 @@ public class SQLiteDB extends SQLDB { } @Override - public void setupDataSource() throws DBInitException { + public void setupDataSource() { try { connection = getNewConnection(databaseFile); } catch (SQLException e) { diff --git a/Plan/common/src/test/java/com/djrapitops/plan/db/CommonDBTest.java b/Plan/common/src/test/java/com/djrapitops/plan/db/CommonDBTest.java index e78219923..69879d0fd 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/db/CommonDBTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/db/CommonDBTest.java @@ -16,7 +16,6 @@ */ package com.djrapitops.plan.db; -import com.djrapitops.plan.api.exceptions.database.DBInitException; import com.djrapitops.plan.data.WebUser; import com.djrapitops.plan.data.container.*; import com.djrapitops.plan.data.store.Key; @@ -154,13 +153,13 @@ public abstract class CommonDBTest { }); } - public void commitTest() throws DBInitException { + public void commitTest() { db.close(); db.init(); } @Test - public void testSaveCommandUse() throws DBInitException { + public void testSaveCommandUse() { Map expected = new HashMap<>(); expected.put("plan", 1); @@ -181,7 +180,7 @@ public abstract class CommonDBTest { } @Test - public void commandUsageSavingDoesNotCreateNewEntriesForOldCommands() throws DBInitException { + public void commandUsageSavingDoesNotCreateNewEntriesForOldCommands() { Map expected = new HashMap<>(); expected.put("plan", 1); @@ -238,7 +237,7 @@ public abstract class CommonDBTest { } @Test - public void geoInformationIsStored() throws DBInitException, NoSuchAlgorithmException { + public void geoInformationIsStored() throws NoSuchAlgorithmException { saveUserOne(); String expectedIP = "1.2.3.4"; @@ -256,7 +255,7 @@ public abstract class CommonDBTest { } @Test - public void testNicknamesTable() throws DBInitException { + public void testNicknamesTable() { saveUserOne(); Nickname expected = new Nickname("TestNickname", System.currentTimeMillis(), serverUUID); @@ -270,7 +269,7 @@ public abstract class CommonDBTest { } @Test - public void webUserIsRegistered() throws DBInitException { + public void webUserIsRegistered() { WebUser expected = new WebUser(TestConstants.PLAYER_ONE_NAME, "RandomGarbageBlah", 0); db.executeTransaction(new RegisterWebUserTransaction(expected)); commitTest(); @@ -281,20 +280,20 @@ public abstract class CommonDBTest { } @Test - public void multipleWebUsersAreFetchedAppropriately() throws DBInitException { + public void multipleWebUsersAreFetchedAppropriately() { webUserIsRegistered(); assertEquals(1, db.query(WebUserQueries.fetchAllPlanWebUsers()).size()); } @Test - public void webUserIsRemoved() throws DBInitException { + public void webUserIsRemoved() { webUserIsRegistered(); db.executeTransaction(new RemoveWebUserTransaction(TestConstants.PLAYER_ONE_NAME)); assertFalse(db.query(WebUserQueries.fetchWebUser(TestConstants.PLAYER_ONE_NAME)).isPresent()); } @Test - public void worldNamesAreStored() throws DBInitException { + public void worldNamesAreStored() { String[] expected = {"Test", "Test2", "Test3"}; saveWorlds(expected); @@ -343,7 +342,7 @@ public abstract class CommonDBTest { } @Test - public void testSessionPlaytimeSaving() throws DBInitException { + public void testSessionPlaytimeSaving() { saveTwoWorlds(); saveUserOne(); saveUserTwo(); @@ -374,7 +373,7 @@ public abstract class CommonDBTest { } @Test - public void testSessionSaving() throws DBInitException { + public void testSessionSaving() { saveUserOne(); saveUserTwo(); @@ -432,7 +431,7 @@ public abstract class CommonDBTest { } @Test - public void playerNameIsUpdatedWhenPlayerLogsIn() throws DBInitException { + public void playerNameIsUpdatedWhenPlayerLogsIn() { saveUserOne(); OptionalAssert.equals(playerUUID, db.query(UserIdentifierQueries.fetchPlayerUUIDOf(TestConstants.PLAYER_ONE_NAME))); @@ -447,7 +446,7 @@ public abstract class CommonDBTest { } @Test - public void testUsersTableKickSaving() throws DBInitException { + public void testUsersTableKickSaving() { saveUserOne(); OptionalAssert.equals(1, db.query(BaseUserQueries.fetchBaseUserOfPlayer(playerUUID)).map(BaseUser::getTimesKicked)); @@ -568,7 +567,7 @@ public abstract class CommonDBTest { } @Test - public void testSessionTableGetInfoOfServer() throws DBInitException { + public void testSessionTableGetInfoOfServer() { saveUserOne(); saveUserTwo(); @@ -606,7 +605,7 @@ public abstract class CommonDBTest { } @Test - public void testKillTableGetKillsOfServer() throws DBInitException { + public void testKillTableGetKillsOfServer() { saveUserOne(); saveUserTwo(); diff --git a/Plan/common/src/test/java/com/djrapitops/plan/db/DBPatchH2RegressionTest.java b/Plan/common/src/test/java/com/djrapitops/plan/db/DBPatchH2RegressionTest.java index 156f5e7c6..62d94764a 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/db/DBPatchH2RegressionTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/db/DBPatchH2RegressionTest.java @@ -16,7 +16,6 @@ */ package com.djrapitops.plan.db; -import com.djrapitops.plan.api.exceptions.database.DBInitException; import com.djrapitops.plan.data.store.containers.ServerContainer; import com.djrapitops.plan.data.store.keys.ServerKeys; import com.djrapitops.plan.db.access.queries.containers.ContainerFetchQueries; @@ -66,7 +65,7 @@ public class DBPatchH2RegressionTest extends DBPatchRegressionTest { private H2DB underTest; @Before - public void setUpDBWithOldSchema() throws DBInitException { + public void setUpDBWithOldSchema() { PlanConfig config = component.getPlanSystem().getConfigSystem().getConfig(); config.set(DatabaseSettings.MYSQL_USER, "user"); diff --git a/Plan/common/src/test/java/com/djrapitops/plan/db/DBPatchMySQLRegressionTest.java b/Plan/common/src/test/java/com/djrapitops/plan/db/DBPatchMySQLRegressionTest.java index 819da1b77..db7d47b70 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/db/DBPatchMySQLRegressionTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/db/DBPatchMySQLRegressionTest.java @@ -17,7 +17,6 @@ package com.djrapitops.plan.db; import com.djrapitops.plan.api.exceptions.EnableException; -import com.djrapitops.plan.api.exceptions.database.DBInitException; import com.djrapitops.plan.data.store.containers.ServerContainer; import com.djrapitops.plan.data.store.keys.ServerKeys; import com.djrapitops.plan.db.access.queries.containers.ContainerFetchQueries; @@ -78,7 +77,7 @@ public class DBPatchMySQLRegressionTest extends DBPatchRegressionTest { } @Before - public void setUpDBWithOldSchema() throws DBInitException, EnableException { + public void setUpDBWithOldSchema() throws EnableException { PlanSystem system = component.getPlanSystem(); PlanConfig config = system.getConfigSystem().getConfig(); config.set(DatabaseSettings.MYSQL_DATABASE, "Plan"); diff --git a/Plan/common/src/test/java/com/djrapitops/plan/db/DBPatchSQLiteRegressionTest.java b/Plan/common/src/test/java/com/djrapitops/plan/db/DBPatchSQLiteRegressionTest.java index 014899bd8..f3fe9ec3c 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/db/DBPatchSQLiteRegressionTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/db/DBPatchSQLiteRegressionTest.java @@ -16,7 +16,6 @@ */ package com.djrapitops.plan.db; -import com.djrapitops.plan.api.exceptions.database.DBInitException; import com.djrapitops.plan.data.store.containers.ServerContainer; import com.djrapitops.plan.data.store.keys.ServerKeys; import com.djrapitops.plan.db.access.queries.containers.ContainerFetchQueries; @@ -64,7 +63,7 @@ public class DBPatchSQLiteRegressionTest extends DBPatchRegressionTest { private SQLiteDB underTest; @Before - public void setUpDBWithOldSchema() throws DBInitException { + public void setUpDBWithOldSchema() { underTest = component.getPlanSystem().getDatabaseSystem().getSqLiteFactory() .usingFileCalled("test"); underTest.setTransactionExecutorServiceProvider(MoreExecutors::newDirectExecutorService); diff --git a/Plan/common/src/test/java/com/djrapitops/plan/db/SQLiteTest.java b/Plan/common/src/test/java/com/djrapitops/plan/db/SQLiteTest.java index 5cbb39afc..b63b0515f 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/db/SQLiteTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/db/SQLiteTest.java @@ -16,7 +16,6 @@ */ package com.djrapitops.plan.db; -import com.djrapitops.plan.api.exceptions.database.DBInitException; import com.djrapitops.plan.data.container.GeoInfo; import com.djrapitops.plan.db.access.queries.ServerAggregateQueries; import com.djrapitops.plan.db.access.queries.objects.ServerQueries; @@ -58,7 +57,7 @@ public class SQLiteTest extends CommonDBTest { } @Test - public void testServerTableBungeeSave() throws DBInitException { + public void testServerTableBungeeSave() { Optional bungeeInfo = db.query(ServerQueries.fetchProxyServerInformation()); assertFalse(bungeeInfo.isPresent()); @@ -79,7 +78,7 @@ public class SQLiteTest extends CommonDBTest { } @Test - public void testServerTableBungee() throws DBInitException { + public void testServerTableBungee() { testServerTableBungeeSave(); Map serverInformation = db.query(ServerQueries.fetchPlanServerInformation()); diff --git a/Plan/sponge/src/main/java/com/djrapitops/plan/db/SpongeMySQLDB.java b/Plan/sponge/src/main/java/com/djrapitops/plan/db/SpongeMySQLDB.java index e251b2f12..694bcd861 100644 --- a/Plan/sponge/src/main/java/com/djrapitops/plan/db/SpongeMySQLDB.java +++ b/Plan/sponge/src/main/java/com/djrapitops/plan/db/SpongeMySQLDB.java @@ -57,7 +57,7 @@ public class SpongeMySQLDB extends MySQLDB { } @Override - public void setupDataSource() throws DBInitException { + public void setupDataSource() { Optional sqlServiceProvider = Sponge.getServiceManager().provide(SqlService.class); if (!sqlServiceProvider.isPresent()) { return;