In WebSphere Portal when coming back to Vaadin portlet the state is lost


We found in
WebSphere Portal
that when you take an action that refreshes the Portal page, like going to another Tab and coming back, the Vaadin portlet re-initializes itself. We are using
Portlet 1.0
functionality i.e. with the Vaadin Servlet.

It seemed the Application was recreated each time so after further investigation we found the following:

  • PortletApplicationContext, method getApplicationContext, gets the WebApplicationContext from the session and, even if it doesn’t change, adds it back to the session

  • this gets interpreted as an unbound / bound by WebSphere container and

  • triggers the javax.servlet.http.HttpSessionBindingListener#valueUnbound(HttpSessionBindingEvent) method on AbstractWebApplicationContext which

  • closes all applications

We fixed it by adding a flag to both getApplicationContext methods

        boolean newContext = false;

... set flag to true if context is changed ...

        if (newContext == true) {
          session.setAttribute(WebApplicationContext.class.getName(), cx,

and this solved our problem.

: why is PortletApplicationContext deprecated ? It is used by ApplicationPortlet which is not deprecated and which we subclass.