summaryrefslogtreecommitdiffstats
path: root/server/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/src')
-rw-r--r--server/src/com/vaadin/server/GAEVaadinServlet.java10
-rw-r--r--server/src/com/vaadin/server/VaadinPortletService.java26
-rw-r--r--server/src/com/vaadin/server/VaadinPortletSession.java10
-rw-r--r--server/src/com/vaadin/server/VaadinService.java123
-rw-r--r--server/src/com/vaadin/server/VaadinSession.java77
5 files changed, 175 insertions, 71 deletions
diff --git a/server/src/com/vaadin/server/GAEVaadinServlet.java b/server/src/com/vaadin/server/GAEVaadinServlet.java
index 6f5c15ebdd..2429fde746 100644
--- a/server/src/com/vaadin/server/GAEVaadinServlet.java
+++ b/server/src/com/vaadin/server/GAEVaadinServlet.java
@@ -349,9 +349,8 @@ public class GAEVaadinServlet extends VaadinServlet {
ObjectInputStream ois;
try {
ois = new ObjectInputStream(bais);
- VaadinSession applicationContext = (VaadinSession) ois
- .readObject();
- applicationContext.storeInSession(getService(),
+ VaadinSession vaadinSession = (VaadinSession) ois.readObject();
+ getService().storeSession(vaadinSession,
new WrappedHttpSession(session));
} catch (IOException e) {
getLogger().log(
@@ -396,8 +395,7 @@ public class GAEVaadinServlet extends VaadinServlet {
if (wrappedSession == null) {
return;
}
- VaadinSession serviceSession = VaadinSession.getForSession(
- getService(), wrappedSession);
+ VaadinSession serviceSession = getService().loadSession(wrappedSession);
if (serviceSession == null) {
return;
}
@@ -408,7 +406,7 @@ public class GAEVaadinServlet extends VaadinServlet {
*/
serviceSession.setAttribute(
VaadinService.PRESERVE_UNBOUND_SESSION_ATTRIBUTE, Boolean.TRUE);
- serviceSession.removeFromSession(getService());
+ getService().removeSession(serviceSession.getSession());
// Remove preservation marker
serviceSession.setAttribute(
diff --git a/server/src/com/vaadin/server/VaadinPortletService.java b/server/src/com/vaadin/server/VaadinPortletService.java
index 878b8964b6..5f22dd7d7c 100644
--- a/server/src/com/vaadin/server/VaadinPortletService.java
+++ b/server/src/com/vaadin/server/VaadinPortletService.java
@@ -28,6 +28,7 @@ import java.util.logging.Logger;
import javax.portlet.EventRequest;
import javax.portlet.PortletContext;
import javax.portlet.PortletRequest;
+import javax.portlet.PortletSession;
import javax.portlet.RenderRequest;
import com.vaadin.server.VaadinPortlet.RequestType;
@@ -344,4 +345,29 @@ public class VaadinPortletService extends VaadinService {
getLogger().finest("A user session has expired");
}
+ private WrappedPortletSession getWrappedPortletSession(
+ WrappedSession wrappedSession) {
+ return (WrappedPortletSession) wrappedSession;
+ }
+
+ @Override
+ protected void writeToHttpSession(WrappedSession wrappedSession,
+ VaadinSession session) {
+ getWrappedPortletSession(wrappedSession).setAttribute(
+ getSessionAttributeName(), session,
+ PortletSession.APPLICATION_SCOPE);
+ }
+
+ @Override
+ protected VaadinSession readFromHttpSession(WrappedSession wrappedSession) {
+ return (VaadinSession) getWrappedPortletSession(wrappedSession)
+ .getAttribute(getSessionAttributeName(),
+ PortletSession.APPLICATION_SCOPE);
+ }
+
+ @Override
+ protected void removeFromHttpSession(WrappedSession wrappedSession) {
+ getWrappedPortletSession(wrappedSession).removeAttribute(
+ getSessionAttributeName(), PortletSession.APPLICATION_SCOPE);
+ }
}
diff --git a/server/src/com/vaadin/server/VaadinPortletSession.java b/server/src/com/vaadin/server/VaadinPortletSession.java
index 512e91a82f..11c0db23a8 100644
--- a/server/src/com/vaadin/server/VaadinPortletSession.java
+++ b/server/src/com/vaadin/server/VaadinPortletSession.java
@@ -317,14 +317,4 @@ public class VaadinPortletSession extends VaadinSession {
}
}
- @Override
- public void storeInSession(VaadinService service, WrappedSession session) {
- assert hasLock(service, session);
- ((WrappedPortletSession) session).setAttribute(
- getSessionAttributeName(service), this,
- PortletSession.APPLICATION_SCOPE);
-
- refreshLock();
- }
-
}
diff --git a/server/src/com/vaadin/server/VaadinService.java b/server/src/com/vaadin/server/VaadinService.java
index bff71fedee..8a6be63dd6 100644
--- a/server/src/com/vaadin/server/VaadinService.java
+++ b/server/src/com/vaadin/server/VaadinService.java
@@ -756,7 +756,7 @@ public abstract class VaadinService implements Serializable {
VaadinSession.setCurrent(session);
- session.storeInSession(this, request.getWrappedSession());
+ storeSession(session, request.getWrappedSession());
// Initial WebBrowser data comes from the request
session.getBrowser().updateRequestDetails(request);
@@ -824,7 +824,7 @@ public abstract class VaadinService implements Serializable {
}
if (session != null) {
- vaadinSession.removeFromSession(this);
+ removeSession(session);
}
}
@@ -834,8 +834,7 @@ public abstract class VaadinService implements Serializable {
final WrappedSession session = getWrappedSession(request,
allowSessionCreation);
- VaadinSession vaadinSession = VaadinSession
- .getForSession(this, session);
+ VaadinSession vaadinSession = loadSession(session);
if (vaadinSession == null) {
return null;
@@ -987,8 +986,7 @@ public abstract class VaadinService implements Serializable {
*/
public UI findUI(VaadinRequest request) {
// getForSession asserts that the lock is held
- VaadinSession session = VaadinSession.getForSession(this,
- request.getWrappedSession());
+ VaadinSession session = loadSession(request.getWrappedSession());
// Get UI id from the request
String uiIdString = request.getParameter(UIConstants.UI_ID_PARAMETER);
@@ -1075,7 +1073,7 @@ public abstract class VaadinService implements Serializable {
service.setSessionLock(newSession,
serviceSession.getLockInstance());
- serviceSession.storeInSession(service, newSession);
+ service.storeSession(serviceSession, newSession);
serviceSession.setAttribute(PRESERVE_UNBOUND_SESSION_ATTRIBUTE,
null);
}
@@ -1159,7 +1157,7 @@ public abstract class VaadinService implements Serializable {
* already been removed from the HttpSession and we do not have
* to do it again
*/
- session.removeFromSession(this);
+ removeSession(session.getSession());
}
/*
@@ -1883,4 +1881,113 @@ public abstract class VaadinService implements Serializable {
throw e;
}
}
+
+ /**
+ * Called when the VaadinSession should be stored.
+ * <p>
+ * By default stores the VaadinSession in the underlying HTTP session.
+ *
+ * @since
+ * @param session
+ * the VaadinSession to store
+ * @param wrappedSession
+ * the underlying HTTP session
+ */
+ protected void storeSession(VaadinSession session,
+ WrappedSession wrappedSession) {
+ assert VaadinSession.hasLock(this, wrappedSession);
+ writeToHttpSession(wrappedSession, session);
+ session.refreshTransients(wrappedSession, this);
+ }
+
+ /**
+ * Performs the actual write of the VaadinSession to the underlying HTTP
+ * session after sanity checks have been performed.
+ * <p>
+ * Called by {@link #storeSession(VaadinSession, WrappedSession)}
+ *
+ * @since
+ * @param wrappedSession
+ * the underlying HTTP session
+ * @param session
+ * the VaadinSession to store
+ */
+ protected void writeToHttpSession(WrappedSession wrappedSession,
+ VaadinSession session) {
+ wrappedSession.setAttribute(getSessionAttributeName(), session);
+ }
+
+ /**
+ * Called when the VaadinSession should be loaded from the underlying HTTP
+ * session
+ *
+ * @since
+ * @param wrappedSession
+ * the underlying HTTP session
+ * @return the VaadinSession in the HTTP session or null if not found
+ */
+ protected VaadinSession loadSession(WrappedSession wrappedSession) {
+ assert VaadinSession.hasLock(this, wrappedSession);
+
+ VaadinSession vaadinSession = readFromHttpSession(wrappedSession);
+ if (vaadinSession == null) {
+ return null;
+ }
+ vaadinSession.refreshTransients(wrappedSession, this);
+ return vaadinSession;
+ }
+
+ /**
+ * Performs the actual read of the VaadinSession from the underlying HTTP
+ * session after sanity checks have been performed.
+ * <p>
+ * Called by {@link #loadSession(WrappedSession)}.
+ *
+ * @param wrappedSession
+ * the underlying HTTP session
+ * @since
+ * @return the VaadinSession or null if no session was found
+ */
+ protected VaadinSession readFromHttpSession(WrappedSession wrappedSession) {
+ return (VaadinSession) wrappedSession
+ .getAttribute(getSessionAttributeName());
+ }
+
+ /**
+ * Called when the VaadinSession should be removed from the underlying HTTP
+ * session
+ *
+ * @since
+ * @param wrappedSession
+ * the underlying HTTP session
+ */
+ public void removeSession(WrappedSession wrappedSession) {
+ assert VaadinSession.hasLock(this, wrappedSession);
+ removeFromHttpSession(wrappedSession);
+ }
+
+ /**
+ * Performs the actual removal of the VaadinSession from the underlying HTTP
+ * session after sanity checks have been performed
+ *
+ * @since
+ * @param wrappedSession
+ * the underlying HTTP session
+ */
+ protected void removeFromHttpSession(WrappedSession wrappedSession) {
+ wrappedSession.removeAttribute(getSessionAttributeName());
+
+ }
+
+ /**
+ * Returns the name used for storing the VaadinSession in the underlying
+ * HTTP session
+ *
+ * @since
+ * @return the attribute name used for storing the VaadinSession
+ */
+ protected String getSessionAttributeName() {
+ return VaadinSession.class.getName() + "." + getServiceName();
+ }
+
}
diff --git a/server/src/com/vaadin/server/VaadinSession.java b/server/src/com/vaadin/server/VaadinSession.java
index 8706cd0821..dac4f40f5a 100644
--- a/server/src/com/vaadin/server/VaadinSession.java
+++ b/server/src/com/vaadin/server/VaadinSession.java
@@ -437,24 +437,13 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable {
* The wrapped HTTP session for the user
* @return A VaadinSession instance for the service, session combination or
* null if none was found.
- * @deprecated As of 7.0. Should be moved to a separate session storage
- * class some day.
+ * @deprecated as of 7.6, call
+ * {@link VaadinService#loadSession(WrappedSession)} instead
*/
@Deprecated
public static VaadinSession getForSession(VaadinService service,
WrappedSession underlyingSession) {
- assert hasLock(service, underlyingSession);
-
- VaadinSession vaadinSession = (VaadinSession) underlyingSession
- .getAttribute(getSessionAttributeName(service));
- if (vaadinSession == null) {
- return null;
- }
-
- vaadinSession.session = underlyingSession;
- vaadinSession.service = service;
- vaadinSession.refreshLock();
- return vaadinSession;
+ return service.loadSession(underlyingSession);
}
/**
@@ -488,26 +477,12 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable {
*
* @param service
* The service this session is associated with
- * @deprecated As of 7.0. Should be moved to a separate session storage
- * class some day.
+ * @deprecated as of 7.6, call
+ * {@link VaadinService#removeSession(WrappedSession)} instead
*/
@Deprecated
public void removeFromSession(VaadinService service) {
- assert hasLock();
- session.removeAttribute(getSessionAttributeName(service));
- }
-
- /**
- * Retrieves the name of the attribute used for storing a VaadinSession for
- * the given service.
- *
- * @param service
- * The service associated with the sessio
- * @return The attribute name used for storing the session
- * @since
- */
- protected static String getSessionAttributeName(VaadinService service) {
- return VaadinSession.class.getName() + "." + service.getServiceName();
+ service.removeSession(session);
}
/**
@@ -517,30 +492,19 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable {
* The service this session is associated with
* @param session
* The HTTP session this VaadinSession should be stored in
- * @deprecated As of 7.0. Should be moved to a separate session storage
- * class some day.
+ * @deprecated as of 7.6, call
+ * {@link VaadinService#storeSession(VaadinSession, WrappedSession)}
+ * instead
*/
@Deprecated
public void storeInSession(VaadinService service, WrappedSession session) {
- assert hasLock(service, session);
- session.setAttribute(getSessionAttributeName(service), this);
-
- /*
- * GAEVaadinServlet passes newly deserialized sessions here, which means
- * that these transient fields need to be populated to avoid NPE from
- * refreshLock().
- */
- this.service = service;
- this.session = session;
- refreshLock();
+ service.storeSession(this, session);
}
/**
* Updates the transient session lock from VaadinService.
- *
- * @since
*/
- protected void refreshLock() {
+ private void refreshLock() {
assert lock == null || lock == service.getSessionLock(session) : "Cannot change the lock from one instance to another";
assert hasLock(service, session);
lock = service.getSessionLock(session);
@@ -1470,4 +1434,23 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable {
}
}
+ /**
+ * Refreshes the transient fields of the session to ensure they are up to
+ * date.
+ * <p>
+ * Called internally by the framework.
+ *
+ * @since
+ * @param wrappedSession
+ * the session this VaadinSession is stored in
+ * @param vaadinService
+ * the service associated with this VaadinSession
+ */
+ public void refreshTransients(WrappedSession wrappedSession,
+ VaadinService vaadinService) {
+ session = wrappedSession;
+ service = vaadinService;
+ refreshLock();
+ }
+
}