From d28093ff92078982d9a80bbad9466c8107adc11e Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Mon, 13 Jul 2020 13:28:53 +0200 Subject: [PATCH] [Fix] fixed OperationsLog.updateState(String, String, LogMessageState) --- .../handler/operationslog/OperationsLog.java | 9 +++++---- .../postgresql/PostgreSqlLogMessageDao.java | 19 ++++++++++++++++++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/li.strolch.agent/src/main/java/li/strolch/handler/operationslog/OperationsLog.java b/li.strolch.agent/src/main/java/li/strolch/handler/operationslog/OperationsLog.java index e93556450..dc0425ed9 100644 --- a/li.strolch.agent/src/main/java/li/strolch/handler/operationslog/OperationsLog.java +++ b/li.strolch.agent/src/main/java/li/strolch/handler/operationslog/OperationsLog.java @@ -1,6 +1,7 @@ package li.strolch.handler.operationslog; import static java.util.Collections.emptyList; +import static java.util.Collections.singletonList; import static li.strolch.model.Tags.AGENT; import static li.strolch.runtime.StrolchConstants.SYSTEM_USER_AGENT; @@ -113,7 +114,7 @@ public class OperationsLog extends StrolchComponent { // persist changes for non-transient realms StrolchRealm realm = getContainer().getRealm(realmName); if (!realm.getMode().isTransient()) - this.executorService.submit(() -> persist(realm, null, Collections.singletonList(message))); + this.executorService.submit(() -> persist(realm, null, singletonList(message))); } } @@ -146,7 +147,7 @@ public class OperationsLog extends StrolchComponent { StrolchRealm realm = getContainer().getRealm(realmName); if (!realm.getMode().isTransient()) { - this.executorService.submit(() -> persist(realm, logMessages)); + this.executorService.submit(() -> updateStates(realm, logMessages)); } }); } @@ -159,7 +160,7 @@ public class OperationsLog extends StrolchComponent { StrolchRealm realm = getContainer().getRealm(realmName); if (!realm.getMode().isTransient()) { - this.executorService.submit(() -> persist(realm, logMessage, emptyList())); + this.executorService.submit(() -> updateStates(realm, singletonList(logMessage))); } } } @@ -214,7 +215,7 @@ public class OperationsLog extends StrolchComponent { } } - private void persist(StrolchRealm realm, Collection logMessages) { + private void updateStates(StrolchRealm realm, Collection logMessages) { try { runAsAgent(ctx -> { try (StrolchTransaction tx = realm.openTx(ctx.getCertificate(), getClass(), false)) { diff --git a/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlLogMessageDao.java b/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlLogMessageDao.java index 8a82981e0..98891e98c 100644 --- a/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlLogMessageDao.java +++ b/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlLogMessageDao.java @@ -133,7 +133,24 @@ public class PostgreSqlLogMessageDao implements LogMessageDao { @Override public void updateStates(Collection logMessages) { - logMessages.forEach(this::updateState); + + try (PreparedStatement ps = this.tx.getConnection().prepareStatement(updateLogMessageStateSql)) { + + // update state + for (LogMessage logMessage : logMessages) { + ps.setString(1, logMessage.getState().name()); + ps.setString(2, logMessage.getId()); + ps.addBatch(); + } + + // we ignore the number of updates, as the message might have been deleted meanwhile + ps.executeUpdate(); + + } catch (SQLException e) { + throw new StrolchPersistenceException(MessageFormat + .format("Failed to update states for {0} LogMessages due to {1}", logMessages.size(), + e.getLocalizedMessage()), e); + } } @Override