You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2022/08/25 16:24:20 UTC
[isis] 07/09: ISIS-3178: handles logout event within transaction
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 7907e9cb8c126dc36475850dc4e8045df1fcfd21
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Aug 25 17:18:51 2022 +0100
ISIS-3178: handles logout event within transaction
---
.../spiimpl/SessionSubscriberForSessionLog.java | 34 ++++++++++++++--------
1 file changed, 22 insertions(+), 12 deletions(-)
diff --git a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/spiimpl/SessionSubscriberForSessionLog.java b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/spiimpl/SessionSubscriberForSessionLog.java
index 65cf1317c0..05d45c0830 100644
--- a/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/spiimpl/SessionSubscriberForSessionLog.java
+++ b/extensions/security/sessionlog/applib/src/main/java/org/apache/isis/extensions/sessionlog/applib/spiimpl/SessionSubscriberForSessionLog.java
@@ -30,10 +30,13 @@ import javax.inject.Named;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
import org.apache.isis.applib.annotation.PriorityPrecedence;
import org.apache.isis.applib.services.clock.ClockService;
+import org.apache.isis.applib.services.iactnlayer.InteractionService;
import org.apache.isis.applib.services.session.SessionSubscriber;
+import org.apache.isis.applib.services.xactn.TransactionService;
import org.apache.isis.extensions.sessionlog.applib.IsisModuleExtSessionLogApplib;
import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntry;
import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntryRepository;
@@ -57,21 +60,28 @@ public class SessionSubscriberForSessionLog implements SessionSubscriber {
static final String LOGICAL_TYPE_NAME = IsisModuleExtSessionLogApplib.NAMESPACE + ".SessionLoggingServiceDefault";
final SessionLogEntryRepository<? extends SessionLogEntry> sessionLogEntryRepository;
+ final TransactionService transactionService;
+ final InteractionService interactionService;
final ClockService clockService;
@Override
public void log(final Type type, final String username, final Date date, final CausedBy causedBy, final UUID sessionGuid, final String httpSessionId) {
- if (type == Type.LOGIN) {
- sessionLogEntryRepository.create(username, sessionGuid, httpSessionId, causedBy, Timestamp.from(date.toInstant()));
- } else {
- val sessionLogEntryIfAny = sessionLogEntryRepository.findBySessionGuid(sessionGuid);
- sessionLogEntryIfAny
- .ifPresent(entry -> {
- entry.setLogoutTimestamp(Timestamp.from(date.toInstant()));
- entry.setCausedBy(causedBy);
- }
- );
- }
- }
+ interactionService.runAnonymous(() -> {
+ transactionService.runTransactional(Propagation.REQUIRES_NEW, () -> {
+ if (type == Type.LOGIN) {
+ sessionLogEntryRepository.create(username, sessionGuid, httpSessionId, causedBy, Timestamp.from(date.toInstant()));
+ } else {
+ val sessionLogEntryIfAny = sessionLogEntryRepository.findBySessionGuid(sessionGuid);
+ sessionLogEntryIfAny
+ .ifPresent(entry -> {
+ entry.setLogoutTimestamp(Timestamp.from(date.toInstant()));
+ entry.setCausedBy(causedBy);
+ transactionService.flushTransaction();
+ }
+ );
+ }
+ });
+ });
+ }
}