From 8c037fc1a3eda05d7d8264f3f589d8aca7569270 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 30 Sep 2019 15:38:00 -0700 Subject: [PATCH] Shifted GSON conversion to main thread to avoid concurrent modification https://github.com/BentoBoxWorld/BentoBox/issues/968 --- .../bentobox/bentobox/database/sql/SQLDatabaseHandler.java | 7 +++---- .../database/sql/sqlite/SQLiteDatabaseHandler.java | 6 +++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/database/sql/SQLDatabaseHandler.java b/src/main/java/world/bentobox/bentobox/database/sql/SQLDatabaseHandler.java index 180cba593..8efb6f85d 100644 --- a/src/main/java/world/bentobox/bentobox/database/sql/SQLDatabaseHandler.java +++ b/src/main/java/world/bentobox/bentobox/database/sql/SQLDatabaseHandler.java @@ -155,17 +155,16 @@ public class SQLDatabaseHandler extends AbstractJSONDatabaseHandler { return; } // Async - processQueue.add(() -> store(instance, sqlConfig.getSaveObjectSQL())); + processQueue.add(() -> store(instance.getClass().getName(), getGson().toJson(instance), sqlConfig.getSaveObjectSQL())); } - private void store(T instance, String sb) { - String toStore = getGson().toJson(instance); + private void store(String name, String toStore, String sb) { try (PreparedStatement preparedStatement = connection.prepareStatement(sb)) { preparedStatement.setString(1, toStore); preparedStatement.setString(2, toStore); preparedStatement.execute(); } catch (SQLException e) { - plugin.logError("Could not save object " + instance.getClass().getName() + " " + e.getMessage()); + plugin.logError("Could not save object " + name + " " + e.getMessage()); } } diff --git a/src/main/java/world/bentobox/bentobox/database/sql/sqlite/SQLiteDatabaseHandler.java b/src/main/java/world/bentobox/bentobox/database/sql/sqlite/SQLiteDatabaseHandler.java index cf8063e76..efa3a3ac5 100644 --- a/src/main/java/world/bentobox/bentobox/database/sql/sqlite/SQLiteDatabaseHandler.java +++ b/src/main/java/world/bentobox/bentobox/database/sql/sqlite/SQLiteDatabaseHandler.java @@ -49,9 +49,9 @@ public class SQLiteDatabaseHandler extends SQLDatabaseHandler { plugin.logError("This class is not a DataObject: " + instance.getClass().getName()); return; } - processQueue.add(() -> { - Gson gson = getGson(); - String toStore = gson.toJson(instance); + Gson gson = getGson(); + String toStore = gson.toJson(instance); + processQueue.add(() -> { try (PreparedStatement preparedStatement = getConnection().prepareStatement(getSqlConfig().getSaveObjectSQL())) { preparedStatement.setString(1, toStore); preparedStatement.setString(2, ((DataObject)instance).getUniqueId());