diff options
Diffstat (limited to 'server/src/com/vaadin')
-rw-r--r-- | server/src/com/vaadin/server/AbstractClientConnector.java | 2 | ||||
-rw-r--r-- | server/src/com/vaadin/server/VaadinSession.java | 11 | ||||
-rw-r--r-- | server/src/com/vaadin/ui/ConnectorTracker.java | 3 |
3 files changed, 13 insertions, 3 deletions
diff --git a/server/src/com/vaadin/server/AbstractClientConnector.java b/server/src/com/vaadin/server/AbstractClientConnector.java index 4c22a96782..2fb468bd1c 100644 --- a/server/src/com/vaadin/server/AbstractClientConnector.java +++ b/server/src/com/vaadin/server/AbstractClientConnector.java @@ -146,6 +146,8 @@ public abstract class AbstractClientConnector implements ClientConnector { } protected SharedState getState() { + assert getSession() == null + || getSession().getLock().isHeldByCurrentThread() : VaadinSession.SESSION_LOCK_MESSAGE; if (null == sharedState) { sharedState = createState(); } diff --git a/server/src/com/vaadin/server/VaadinSession.java b/server/src/com/vaadin/server/VaadinSession.java index a91c011ddf..03e6420008 100644 --- a/server/src/com/vaadin/server/VaadinSession.java +++ b/server/src/com/vaadin/server/VaadinSession.java @@ -28,7 +28,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Logger; @@ -71,6 +70,8 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable { */ public static final String UI_PARAMETER = "UI"; + public static final String SESSION_LOCK_MESSAGE = "You are accessing UI state without proper synchronization!"; + private static final Method BOOTSTRAP_FRAGMENT_METHOD = ReflectTools .findMethod(BootstrapListener.class, "modifyBootstrapFragment", BootstrapFragmentResponse.class); @@ -78,7 +79,7 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable { .findMethod(BootstrapListener.class, "modifyBootstrapPage", BootstrapPageResponse.class); - private final Lock lock = new ReentrantLock(); + private final ReentrantLock lock = new ReentrantLock(); /** * An event sent to {@link #start(SessionStartEvent)} when a new Application @@ -206,6 +207,10 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable { private final Map<String, Object> attributes = new HashMap<String, Object>(); + public VaadinSession() { + // TODO Auto-generated constructor stub + } + /** * @see javax.servlet.http.HttpSessionBindingListener#valueBound(HttpSessionBindingEvent) */ @@ -1304,7 +1309,7 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable { * * @return the lock that should be used for synchronization */ - public Lock getLock() { + public ReentrantLock getLock() { return lock; } diff --git a/server/src/com/vaadin/ui/ConnectorTracker.java b/server/src/com/vaadin/ui/ConnectorTracker.java index d454df98ee..dbada63a47 100644 --- a/server/src/com/vaadin/ui/ConnectorTracker.java +++ b/server/src/com/vaadin/ui/ConnectorTracker.java @@ -29,6 +29,7 @@ import com.vaadin.server.AbstractClientConnector; import com.vaadin.server.AbstractCommunicationManager; import com.vaadin.server.ClientConnector; import com.vaadin.server.GlobalResourceHandler; +import com.vaadin.server.VaadinSession; /** * A class which takes care of book keeping of {@link ClientConnector}s for a @@ -286,6 +287,8 @@ public class ConnectorTracker implements Serializable { * The connector that should be marked clean. */ public void markDirty(ClientConnector connector) { + assert uI.getSession() == null + || uI.getSession().getLock().isHeldByCurrentThread() : VaadinSession.SESSION_LOCK_MESSAGE; if (isWritingResponse()) { throw new IllegalStateException( "A connector should not be marked as dirty while a response is being written."); |