[Fix] fixed OperationsLog.updateState(String, String, LogMessageState)

This commit is contained in:
Robert von Burg 2020-07-13 13:28:53 +02:00
parent 5934ebad42
commit d28093ff92
2 changed files with 23 additions and 5 deletions

View File

@ -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<LogMessage> logMessages) {
private void updateStates(StrolchRealm realm, Collection<LogMessage> logMessages) {
try {
runAsAgent(ctx -> {
try (StrolchTransaction tx = realm.openTx(ctx.getCertificate(), getClass(), false)) {

View File

@ -133,7 +133,24 @@ public class PostgreSqlLogMessageDao implements LogMessageDao {
@Override
public void updateStates(Collection<LogMessage> 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