* @author Vaadin Ltd
*/
public class MockVaadinSession extends VaadinSession {
+ /*
+ * Used to make sure there's at least one reference to the mock session
+ * while it's locked. This is used to prevent the session from being eaten
+ * by GC in tests where @Before creates a session and sets it as the current
+ * instance without keeping any direct reference to it. This pattern has a
+ * chance of leaking memory if the session is not unlocked in the right way,
+ * but it should be acceptable for testing use.
+ */
+ private static final ThreadLocal<MockVaadinSession> referenceKeeper = new ThreadLocal<MockVaadinSession>();
public MockVaadinSession(VaadinService service) {
super(service);
return lock;
}
+ @Override
+ public void lock() {
+ super.lock();
+ referenceKeeper.set(this);
+ }
+
+ @Override
+ public void unlock() {
+ super.unlock();
+ referenceKeeper.remove();
+ }
+
private int closeCount;
private ReentrantLock lock = new ReentrantLock();