From 2c2e7a91c87667110016865922648c9220e92cff Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer <paul-christian.volkmer@mni.thm.de> Date: Mon, 10 Sep 2012 14:18:41 +0200 Subject: [PATCH] Task #3842: Check if session key is allready present in CouchDB This method uses transaction level READ_COMMITTED. --- .../java/de/thm/arsnova/services/ISessionService.java | 1 + .../java/de/thm/arsnova/services/SessionService.java | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java index 9f3bb394..2d6cf3bb 100644 --- a/src/main/java/de/thm/arsnova/services/ISessionService.java +++ b/src/main/java/de/thm/arsnova/services/ISessionService.java @@ -27,5 +27,6 @@ public interface ISessionService { public Session getSession(String keyword); public Feedback getFeedback(String keyword); public boolean postFeedback(String keyword, int value); + public boolean sessionKeyAvailable(String keyword); } \ No newline at end of file diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java index 23969d71..68daacad 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -31,6 +31,8 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.User; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; import com.fourspaces.couchdb.Database; import com.fourspaces.couchdb.Document; @@ -160,6 +162,15 @@ public class SessionService implements ISessionService { return true; } + @Override + @Transactional(isolation=Isolation.READ_COMMITTED) + public boolean sessionKeyAvailable(String keyword) { + View view = new View("session/by_keyword"); + ViewResults results = database.view(view); + + return ! results.containsKey(keyword); + } + private String getSessionId(String keyword) { View view = new View("session/by_keyword"); view.setKey(URLEncoder.encode("\"" + keyword + "\"")); -- GitLab