Sfoglia il codice sorgente

Store Vaadin session after each update

This helps clustering solutions know when the session attribute needs
to be replicated instead of having to always aggressively replicate
all attributes.

Resolves #7535
tags/8.2.0.alpha2
Artur Signell 6 anni fa
parent
commit
48e202a806

+ 4
- 0
server/src/main/java/com/vaadin/server/VaadinSession.java Vedi File

@@ -1035,6 +1035,10 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable {
+ ui.getUIId(),
e);
}
// Store session after modifications have been done so that
// Spring Session and possibly other implementations realize
// that something has changed inside the session attribute
service.storeSession(this, session);
}
}
} finally {

+ 17
- 0
server/src/test/java/com/vaadin/ui/UITest.java Vedi File

@@ -8,7 +8,9 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

import javax.servlet.ServletConfig;
import javax.servlet.http.HttpSession;

import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
@@ -20,6 +22,7 @@ import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.server.VaadinServletService;
import com.vaadin.server.VaadinSession;
import com.vaadin.server.WrappedHttpSession;
import com.vaadin.server.communication.PushConnection;
import com.vaadin.shared.communication.PushMode;
import com.vaadin.util.CurrentInstanceTest;
@@ -175,7 +178,21 @@ public class UITest {
VaadinServletService service = new VaadinServletService(servlet,
deploymentConfiguration);
MockVaadinSession session = new MockVaadinSession(service);
HttpSession mockHttpSession = EasyMock.createMock(HttpSession.class);
WrappedHttpSession mockWrappedSession = new WrappedHttpSession(
mockHttpSession) {
@Override
public Object getAttribute(String name) {
String lockAttribute = service.getServiceName() + ".lock";
if (lockAttribute.equals(name)) {
return session.getLockInstance();
} else {
return super.getAttribute(name);
}
}
};
session.lock();
session.refreshTransients(mockWrappedSession, service);
ui.setSession(session);
ui.doInit(Mockito.mock(VaadinRequest.class), 1, "foo");
session.addUI(ui);

Loading…
Annulla
Salva