@@ -3,11 +3,12 @@ | |||
<modelVersion>4.0.0</modelVersion> | |||
<parent> | |||
<groupId>com.vaadin</groupId> | |||
<artifactId>vaadin-root</artifactId> | |||
<version>7.7-SNAPSHOT</version> | |||
<artifactId>vaadin-parent</artifactId> | |||
<version>1.1.0</version> | |||
</parent> | |||
<groupId>com.vaadin</groupId> | |||
<artifactId>vaadin-bom</artifactId> | |||
<version>7.7-SNAPSHOT</version> | |||
<packaging>pom</packaging> | |||
<name>Vaadin Framework (Bill of Materials)</name> | |||
<description>Vaadin Framework (Bill of Materials)</description> |
@@ -68,16 +68,6 @@ | |||
</developer> | |||
</developers> | |||
<repositories> | |||
<repository> | |||
<id>vaadin-snapshots</id> | |||
<url>https://oss.sonatype.org/content/repositories/vaadin-snapshots/</url> | |||
<releases> | |||
<enabled>false</enabled> | |||
</releases> | |||
<snapshots> | |||
<enabled>true</enabled> | |||
</snapshots> | |||
</repository> | |||
<repository> | |||
<id>vaadin-releases</id> | |||
<url>https://oss.sonatype.org/content/repositories/vaadin-releases/</url> | |||
@@ -85,7 +75,7 @@ | |||
<enabled>true</enabled> | |||
</releases> | |||
<snapshots> | |||
<enabled>false</enabled> | |||
<enabled>true</enabled> | |||
</snapshots> | |||
</repository> | |||
</repositories> |
@@ -1078,8 +1078,13 @@ public abstract class VaadinService implements Serializable { | |||
if (value instanceof VaadinSession) { | |||
// set flag to avoid cleanup | |||
VaadinSession serviceSession = (VaadinSession) value; | |||
serviceSession.setAttribute(PRESERVE_UNBOUND_SESSION_ATTRIBUTE, | |||
Boolean.TRUE); | |||
serviceSession.lock(); | |||
try { | |||
serviceSession.setAttribute( | |||
PRESERVE_UNBOUND_SESSION_ATTRIBUTE, Boolean.TRUE); | |||
} finally { | |||
serviceSession.unlock(); | |||
} | |||
} | |||
attrs.put(name, value); | |||
} | |||
@@ -1105,8 +1110,13 @@ public abstract class VaadinService implements Serializable { | |||
serviceSession.getLockInstance()); | |||
service.storeSession(serviceSession, newSession); | |||
serviceSession.setAttribute(PRESERVE_UNBOUND_SESSION_ATTRIBUTE, | |||
null); | |||
serviceSession.lock(); | |||
try { | |||
serviceSession.setAttribute( | |||
PRESERVE_UNBOUND_SESSION_ATTRIBUTE, null); | |||
} finally { | |||
serviceSession.unlock(); | |||
} | |||
} | |||
} | |||
@@ -354,6 +354,12 @@ | |||
params += '&v-wn=' + encodeURIComponent(window.name); | |||
} | |||
// This parameter is used in multiplatform-runtime as a key for | |||
// storing the MPR UI content in the session | |||
if (window.mprUiId) { | |||
params += '&v-mui=' + encodeURIComponent(window.mprUiId); | |||
} | |||
// Detect touch device support | |||
var supportsTouch = false; | |||
try { |
@@ -7,9 +7,15 @@ import javax.servlet.ServletConfig; | |||
import javax.servlet.ServletException; | |||
import javax.servlet.http.HttpSessionBindingEvent; | |||
import java.util.Collections; | |||
import org.easymock.EasyMock; | |||
import org.junit.Assert; | |||
import org.junit.Test; | |||
import org.mockito.Mockito; | |||
import org.mockito.invocation.InvocationOnMock; | |||
import org.mockito.stubbing.Answer; | |||
/** | |||
* | |||
@@ -125,4 +131,47 @@ public class VaadinServiceTest { | |||
assertThat(notification, containsString("\"url\":null")); | |||
} | |||
@Test | |||
public void reinitializeSession_setVaadinSessionAttriuteWithLock() { | |||
final VaadinRequest request = Mockito.mock(VaadinRequest.class); | |||
VaadinSession vaadinSession = Mockito.mock(VaadinSession.class); | |||
final VaadinSession newVaadinSession = Mockito.mock(VaadinSession.class); | |||
WrappedSession session = mockSession(request, vaadinSession, "foo"); | |||
Mockito.doAnswer(new Answer() { | |||
@Override | |||
public Object answer(InvocationOnMock invocation) { | |||
mockSession(request, newVaadinSession, "bar"); | |||
return null; | |||
} | |||
}).when(session).invalidate(); | |||
VaadinService.reinitializeSession(request); | |||
Mockito.verify(vaadinSession, Mockito.times(2)).lock(); | |||
Mockito.verify(vaadinSession).setAttribute( | |||
VaadinService.PRESERVE_UNBOUND_SESSION_ATTRIBUTE, Boolean.TRUE); | |||
Mockito.verify(vaadinSession).setAttribute( | |||
VaadinService.PRESERVE_UNBOUND_SESSION_ATTRIBUTE, null); | |||
Mockito.verify(vaadinSession, Mockito.times(2)).unlock(); | |||
} | |||
private WrappedSession mockSession(VaadinRequest request, | |||
VaadinSession vaadinSession, String attributeName) { | |||
WrappedSession session = Mockito.mock(WrappedSession.class); | |||
Mockito.when(request.getWrappedSession()).thenReturn(session); | |||
Mockito.when(session.getAttributeNames()) | |||
.thenReturn(Collections.singleton(attributeName)); | |||
Mockito.when(session.getAttribute(attributeName)) | |||
.thenReturn(vaadinSession); | |||
VaadinService service = Mockito.mock(VaadinService.class); | |||
Mockito.when(vaadinSession.getService()).thenReturn(service); | |||
return session; | |||
} | |||
} |
@@ -27,13 +27,6 @@ | |||
<repository> | |||
<id>vaadin-prereleases</id> | |||
<url>http://maven.vaadin.com/vaadin-prereleases</url> | |||
</repository> | |||
<repository> | |||
<id>vaadin-snapshots</id> | |||
<url>http://oss.sonatype.org/content/repositories/vaadin-snapshots</url> | |||
<releases> | |||
<enabled>false</enabled> | |||
</releases> | |||
<snapshots> | |||
<enabled>true</enabled> | |||
</snapshots> | |||
@@ -44,13 +37,6 @@ | |||
<pluginRepository> | |||
<id>vaadin-prereleases</id> | |||
<url>http://maven.vaadin.com/vaadin-prereleases</url> | |||
</pluginRepository> | |||
<pluginRepository> | |||
<id>vaadin-snapshots</id> | |||
<url>http://oss.sonatype.org/content/repositories/vaadin-snapshots</url> | |||
<releases> | |||
<enabled>false</enabled> | |||
</releases> | |||
<snapshots> | |||
<enabled>true</enabled> | |||
</snapshots> |
@@ -27,6 +27,13 @@ | |||
<id>vaadin-addons</id> | |||
<url>http://maven.vaadin.com/vaadin-addons</url> | |||
</repository> | |||
<repository> | |||
<id>vaadin-prereleases</id> | |||
<url>http://maven.vaadin.com/vaadin-prereleases</url> | |||
<snapshots> | |||
<enabled>true</enabled> | |||
</snapshots> | |||
</repository> | |||
<repository> | |||
<id>vaadin-snapshots</id> | |||
<url>http://oss.sonatype.org/content/repositories/vaadin-snapshots</url> |