Parcourir la source

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 il y a 6 ans
Parent
révision
48e202a806

+ 4
- 0
server/src/main/java/com/vaadin/server/VaadinSession.java Voir le fichier

@@ -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 Voir le fichier

@@ -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);

Chargement…
Annuler
Enregistrer