aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/src/main/java/com/vaadin/server/VaadinPortletService.java38
-rw-r--r--server/src/main/java/com/vaadin/server/VaadinService.java4
-rw-r--r--server/src/test/java/com/vaadin/server/VaadinPortletServiceTest.java6
3 files changed, 44 insertions, 4 deletions
diff --git a/server/src/main/java/com/vaadin/server/VaadinPortletService.java b/server/src/main/java/com/vaadin/server/VaadinPortletService.java
index 1b804ad18c..0b2d28acc6 100644
--- a/server/src/main/java/com/vaadin/server/VaadinPortletService.java
+++ b/server/src/main/java/com/vaadin/server/VaadinPortletService.java
@@ -22,6 +22,8 @@ import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.List;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -366,4 +368,40 @@ public class VaadinPortletService extends VaadinService {
getWrappedPortletSession(wrappedSession).removeAttribute(
getSessionAttributeName(), PortletSession.APPLICATION_SCOPE);
}
+
+ @Override
+ protected void setSessionLock(WrappedSession wrappedSession, Lock lock) {
+ if (wrappedSession == null) {
+ throw new IllegalArgumentException(
+ "Can't set a lock for a null session");
+ }
+ Object currentSessionLock = getWrappedPortletSession(wrappedSession)
+ .getAttribute(getLockAttributeName(),
+ PortletSession.APPLICATION_SCOPE);
+ assert (currentSessionLock == null
+ || currentSessionLock == lock) : "Changing the lock for a session is not allowed";
+
+ getWrappedPortletSession(wrappedSession).setAttribute(
+ getLockAttributeName(), lock,
+ PortletSession.APPLICATION_SCOPE);
+ }
+
+ @Override
+ protected Lock getSessionLock(WrappedSession wrappedSession) {
+ Object lock = getWrappedPortletSession(wrappedSession)
+ .getAttribute(getLockAttributeName(),
+ PortletSession.APPLICATION_SCOPE);
+
+ if (lock instanceof ReentrantLock) {
+ return (ReentrantLock) lock;
+ }
+
+ if (lock == null) {
+ return null;
+ }
+
+ throw new RuntimeException(
+ "Something else than a ReentrantLock was stored in the "
+ + getLockAttributeName() + " in the session");
+ }
}
diff --git a/server/src/main/java/com/vaadin/server/VaadinService.java b/server/src/main/java/com/vaadin/server/VaadinService.java
index 1e67db708b..9503db113f 100644
--- a/server/src/main/java/com/vaadin/server/VaadinService.java
+++ b/server/src/main/java/com/vaadin/server/VaadinService.java
@@ -622,7 +622,7 @@ public abstract class VaadinService implements Serializable {
* @param lock
* The lock object
*/
- private void setSessionLock(WrappedSession wrappedSession, Lock lock) {
+ protected void setSessionLock(WrappedSession wrappedSession, Lock lock) {
if (wrappedSession == null) {
throw new IllegalArgumentException(
"Can't set a lock for a null session");
@@ -640,7 +640,7 @@ public abstract class VaadinService implements Serializable {
*
* @return The attribute name for the lock
*/
- private String getLockAttributeName() {
+ protected String getLockAttributeName() {
return getServiceName() + ".lock";
}
diff --git a/server/src/test/java/com/vaadin/server/VaadinPortletServiceTest.java b/server/src/test/java/com/vaadin/server/VaadinPortletServiceTest.java
index 2d7da64d20..2280e7d4f5 100644
--- a/server/src/test/java/com/vaadin/server/VaadinPortletServiceTest.java
+++ b/server/src/test/java/com/vaadin/server/VaadinPortletServiceTest.java
@@ -9,6 +9,8 @@ import static org.mockito.Mockito.when;
import java.util.concurrent.locks.ReentrantLock;
+import javax.portlet.PortletSession;
+
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
@@ -185,9 +187,9 @@ public class VaadinPortletServiceTest {
ReentrantLock mockLock = Mockito.mock(ReentrantLock.class);
when(mockLock.isHeldByCurrentThread()).thenReturn(true);
- WrappedSession emptyWrappedSession = Mockito
+ WrappedPortletSession emptyWrappedSession = Mockito
.mock(WrappedPortletSession.class);
- when(emptyWrappedSession.getAttribute("null.lock"))
+ when(emptyWrappedSession.getAttribute("null.lock",PortletSession.APPLICATION_SCOPE))
.thenReturn(mockLock);
VaadinRequest requestWithUIIDSet = Mockito
.mock(VaadinRequest.class);