]> source.dussan.org Git - vaadin-framework.git/commitdiff
Combine ApplicationContext into Application (#9402)
authorLeif Åstrand <leif@vaadin.com>
Wed, 5 Sep 2012 14:10:31 +0000 (17:10 +0300)
committerLeif Åstrand <leif@vaadin.com>
Wed, 5 Sep 2012 14:10:31 +0000 (17:10 +0300)
26 files changed:
server/src/com/vaadin/Application.java
server/src/com/vaadin/LegacyApplication.java
server/src/com/vaadin/server/AbstractCommunicationManager.java
server/src/com/vaadin/server/ApplicationContext.java [deleted file]
server/src/com/vaadin/server/CombinedRequest.java
server/src/com/vaadin/server/CommunicationManager.java
server/src/com/vaadin/server/GAEVaadinServlet.java
server/src/com/vaadin/server/LegacyVaadinPortlet.java
server/src/com/vaadin/server/LegacyVaadinServlet.java
server/src/com/vaadin/server/Page.java
server/src/com/vaadin/server/PortletApplicationContext2.java
server/src/com/vaadin/server/PortletCommunicationManager.java
server/src/com/vaadin/server/RequestTimer.java
server/src/com/vaadin/server/ServletApplicationContext.java
server/src/com/vaadin/server/VaadinPortlet.java
server/src/com/vaadin/server/VaadinServlet.java
server/src/com/vaadin/server/WrappedHttpServletRequest.java
server/src/com/vaadin/server/WrappedPortletRequest.java
server/tests/src/com/vaadin/tests/server/TestMimeTypes.java
server/tests/src/com/vaadin/tests/server/TestStreamVariableMapping.java
uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java
uitest/src/com/vaadin/tests/VerifyBrowserVersion.java
uitest/src/com/vaadin/tests/application/ApplicationCloseTest.java
uitest/src/com/vaadin/tests/components/AbstractTestCase.java
uitest/src/com/vaadin/tests/components/AbstractTestUI.java
uitest/src/com/vaadin/tests/components/AbstractTestUIProvider.java

index 2baf252a624b52f8a489e21d3606c142ce89f588..6d37fbd5aeaa93bca91cb17c2011280e1fed2443 100644 (file)
@@ -31,17 +31,19 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Properties;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javax.servlet.http.HttpSessionBindingEvent;
+import javax.servlet.http.HttpSessionBindingListener;
+
 import com.vaadin.data.util.converter.Converter;
 import com.vaadin.data.util.converter.ConverterFactory;
 import com.vaadin.data.util.converter.DefaultConverterFactory;
 import com.vaadin.event.EventRouter;
+import com.vaadin.server.AbstractCommunicationManager;
 import com.vaadin.server.AbstractErrorMessage;
 import com.vaadin.server.ApplicationConfiguration;
-import com.vaadin.server.ApplicationContext;
 import com.vaadin.server.BootstrapFragmentResponse;
 import com.vaadin.server.BootstrapListener;
 import com.vaadin.server.BootstrapPageResponse;
@@ -52,14 +54,15 @@ import com.vaadin.server.CombinedRequest;
 import com.vaadin.server.DeploymentConfiguration;
 import com.vaadin.server.GlobalResourceHandler;
 import com.vaadin.server.RequestHandler;
-import com.vaadin.server.ServletApplicationContext;
 import com.vaadin.server.Terminal;
 import com.vaadin.server.UIProvider;
 import com.vaadin.server.VaadinServlet;
 import com.vaadin.server.VariableOwner;
+import com.vaadin.server.WebBrowser;
 import com.vaadin.server.WrappedRequest;
 import com.vaadin.server.WrappedRequest.BrowserDetails;
 import com.vaadin.server.WrappedResponse;
+import com.vaadin.server.WrappedSession;
 import com.vaadin.shared.ui.ui.UIConstants;
 import com.vaadin.ui.AbstractComponent;
 import com.vaadin.ui.AbstractField;
@@ -121,7 +124,8 @@ import com.vaadin.util.ReflectTools;
  * @since 3.0
  */
 @SuppressWarnings("serial")
-public class Application implements Terminal.ErrorListener, Serializable {
+public class Application implements Terminal.ErrorListener,
+        HttpSessionBindingListener, Serializable {
 
     /**
      * The name of the parameter that is by default used in e.g. web.xml to
@@ -147,22 +151,22 @@ public class Application implements Terminal.ErrorListener, Serializable {
 
         private final ApplicationConfiguration configuration;
 
-        private final ApplicationContext context;
+        private final AbstractCommunicationManager communicationManager;
 
         /**
          * @param applicationUrl
          *            the URL the application should respond to.
          * @param configuration
          *            the application configuration for the application.
-         * @param context
-         *            the context application will be running in.
+         * @param communicationManager
+         *            the communication manager for the application.
          */
         public ApplicationStartEvent(URL applicationUrl,
                 ApplicationConfiguration configuration,
-                ApplicationContext context) {
+                AbstractCommunicationManager communicationManager) {
             this.applicationUrl = applicationUrl;
             this.configuration = configuration;
-            this.context = context;
+            this.communicationManager = communicationManager;
         }
 
         /**
@@ -187,25 +191,20 @@ public class Application implements Terminal.ErrorListener, Serializable {
         }
 
         /**
-         * Gets the context application will be running in.
+         * Gets the communication manager for this application.
          * 
-         * @return the context application will be running in.
+         * @return the communication manager for this application.
          * 
-         * @see Application#getContext()
+         * @see Application#getCommunicationManager
          */
-        public ApplicationContext getContext() {
-            return context;
+        public AbstractCommunicationManager getCommunicationManager() {
+            return communicationManager;
         }
     }
 
     private final static Logger logger = Logger.getLogger(Application.class
             .getName());
 
-    /**
-     * Application context the application is running in.
-     */
-    private ApplicationContext context;
-
     /**
      * Configuration for the application.
      */
@@ -257,6 +256,87 @@ public class Application implements Terminal.ErrorListener, Serializable {
 
     private GlobalResourceHandler globalResourceHandler;
 
+    protected WebBrowser browser = new WebBrowser();
+
+    private AbstractCommunicationManager communicationManager;
+
+    private long totalSessionTime = 0;
+
+    private long lastRequestTime = -1;
+
+    private transient WrappedSession session;
+
+    /**
+     * @see javax.servlet.http.HttpSessionBindingListener#valueBound(HttpSessionBindingEvent)
+     */
+    @Override
+    public void valueBound(HttpSessionBindingEvent arg0) {
+        // We are not interested in bindings
+    }
+
+    /**
+     * @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(HttpSessionBindingEvent)
+     */
+    @Override
+    public void valueUnbound(HttpSessionBindingEvent event) {
+        // If we are going to be unbound from the session, the session must be
+        // closing
+        close();
+    }
+
+    /**
+     * Get the web browser associated with this application context.
+     * 
+     * Because application context is related to the http session and server
+     * maintains one session per browser-instance, each context has exactly one
+     * web browser associated with it.
+     * 
+     * @return
+     */
+    public WebBrowser getBrowser() {
+        return browser;
+    }
+
+    /**
+     * @return The total time spent servicing requests in this session.
+     */
+    public long getTotalSessionTime() {
+        return totalSessionTime;
+    }
+
+    /**
+     * Sets the time spent servicing the last request in the session and updates
+     * the total time spent servicing requests in this session.
+     * 
+     * @param time
+     *            the time spent in the last request.
+     */
+    public void setLastRequestTime(long time) {
+        lastRequestTime = time;
+        totalSessionTime += time;
+    }
+
+    /**
+     * @return the time spent servicing the last request in this session.
+     */
+    public long getLastRequestTime() {
+        return lastRequestTime;
+    }
+
+    /**
+     * Gets the session to which this application context is currently
+     * associated.
+     * 
+     * @return the wrapped session for this context
+     */
+    public WrappedSession getSession() {
+        return session;
+    }
+
+    public AbstractCommunicationManager getApplicationManager() {
+        return communicationManager;
+    }
+
     /**
      * Gets the URL of the application.
      * 
@@ -291,6 +371,28 @@ public class Application implements Terminal.ErrorListener, Serializable {
         }
     }
 
+    public static Application getForSession(WrappedSession session) {
+        Object attribute = session.getAttribute(Application.class.getName());
+        if (attribute instanceof Application) {
+            Application application = (Application) attribute;
+            application.session = session;
+            return application;
+        }
+
+        return null;
+    }
+
+    public void removeFromSession() {
+        assert (getForSession(session) == this);
+
+        session.setAttribute(Application.class.getName(), null);
+    }
+
+    public void storeInSession(WrappedSession session) {
+        session.setAttribute(Application.class.getName(), this);
+        this.session = session;
+    }
+
     /**
      * Starts the application on the given URL.
      * 
@@ -316,8 +418,7 @@ public class Application implements Terminal.ErrorListener, Serializable {
     public void start(ApplicationStartEvent event) {
         applicationUrl = event.getApplicationUrl();
         configuration = event.getConfiguration();
-        context = event.getContext();
-        init();
+        communicationManager = event.getCommunicationManager();
         applicationIsRunning = true;
     }
 
@@ -325,9 +426,8 @@ public class Application implements Terminal.ErrorListener, Serializable {
      * Tests if the application is running or if it has been finished.
      * 
      * <p>
-     * Application starts running when its
-     * {@link #start(URL, Properties, ApplicationContext)} method has been
-     * called and stops when the {@link #close()} is called.
+     * Application starts running when its {@link #start(ApplicationStartEvent)}
+     * method has been called and stops when the {@link #close()} is called.
      * </p>
      * 
      * @return <code>true</code> if the application is running,
@@ -337,17 +437,6 @@ public class Application implements Terminal.ErrorListener, Serializable {
         return applicationIsRunning;
     }
 
-    /**
-     * <p>
-     * Main initializer of the application. The <code>init</code> method is
-     * called by the framework when the application is started, and it should
-     * perform whatever initialization operations the application needs.
-     * </p>
-     */
-    public void init() {
-        // Default implementation does nothing
-    }
-
     /**
      * Gets the configuration for this application
      * 
@@ -574,28 +663,6 @@ public class Application implements Terminal.ErrorListener, Serializable {
         getLogger().log(Level.SEVERE, "Terminal error:", t);
     }
 
-    /**
-     * Gets the application context.
-     * <p>
-     * The application context is the environment where the application is
-     * running in. The actual implementation class of may contains quite a lot
-     * more functionality than defined in the {@link ApplicationContext}
-     * interface.
-     * </p>
-     * <p>
-     * By default, when you are deploying your application to a servlet
-     * container, the implementation class is {@link ServletApplicationContext}
-     * - you can safely cast to this class and use the methods from there. When
-     * you are deploying your application as a portlet, context implementation
-     * is {@link PortletApplicationContext}.
-     * </p>
-     * 
-     * @return the application context.
-     */
-    public ApplicationContext getContext() {
-        return context;
-    }
-
     /**
      * Gets the application error handler.
      * 
@@ -1871,8 +1938,8 @@ public class Application implements Terminal.ErrorListener, Serializable {
      *         timeout never occurs.
      */
     protected int getUidlRequestTimeout() {
-        return configuration.isIdleUICleanupEnabled() ? getContext()
-                .getSession().getMaxInactiveInterval() : -1;
+        return configuration.isIdleUICleanupEnabled() ? getSession()
+                .getMaxInactiveInterval() : -1;
     }
 
     /**
index 5bfc466fa4c633ca71619fcfc9326298219b61de..b8841367673718cfaede5738d688270329260873 100644 (file)
@@ -26,27 +26,25 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import com.vaadin.server.AbstractUIProvider;
-import com.vaadin.server.ApplicationContext;
-import com.vaadin.server.WrappedRequest;
 import com.vaadin.server.Terminal.ErrorEvent;
 import com.vaadin.server.Terminal.ErrorListener;
+import com.vaadin.server.WrappedRequest;
 import com.vaadin.ui.UI;
-import com.vaadin.ui.UI.LegacyWindow;
 
 /**
- * A special application designed to help migrating applications from Vaadin
- * 6 to Vaadin 7. The legacy application supports setting a main window,
- * adding additional browser level windows and defining the theme for the
- * entire application.
+ * A special application designed to help migrating applications from Vaadin 6
+ * to Vaadin 7. The legacy application supports setting a main window, adding
+ * additional browser level windows and defining the theme for the entire
+ * application.
  * 
- * @deprecated This class is only intended to ease migration and should not
- *             be used for new projects.
+ * @deprecated This class is only intended to ease migration and should not be
+ *             used for new projects.
  * 
  * @since 7.0
  */
 @Deprecated
-public abstract class LegacyApplication extends AbstractUIProvider
-        implements ErrorListener {
+public abstract class LegacyApplication extends AbstractUIProvider implements
+        ErrorListener {
     /**
      * Ignore initial / and then get everything up to the next /
      */
@@ -59,16 +57,15 @@ public abstract class LegacyApplication extends AbstractUIProvider
     private Map<String, UI.LegacyWindow> legacyUINames = new HashMap<String, UI.LegacyWindow>();
 
     /**
-     * Sets the main window of this application. Setting window as a main
-     * window of this application also adds the window to this application.
+     * Sets the main window of this application. Setting window as a main window
+     * of this application also adds the window to this application.
      * 
      * @param mainWindow
      *            the UI to set as the default window
      */
     public void setMainWindow(UI.LegacyWindow mainWindow) {
         if (this.mainWindow != null) {
-            throw new IllegalStateException(
-                    "mainWindow has already been set");
+            throw new IllegalStateException("mainWindow has already been set");
         }
         if (mainWindow.getApplication() == null) {
             mainWindow.setApplication(Application.getCurrent());
@@ -102,8 +99,8 @@ public abstract class LegacyApplication extends AbstractUIProvider
     }
 
     @Override
-    public UI createInstance(Application application,
-            Class<? extends UI> type, WrappedRequest request) {
+    public UI createInstance(Application application, Class<? extends UI> type,
+            WrappedRequest request) {
         return getUIInstance(request);
     }
 
@@ -159,9 +156,9 @@ public abstract class LegacyApplication extends AbstractUIProvider
     }
 
     /**
-     * This implementation simulates the way of finding a window for a
-     * request by extracting a window name from the requested path and
-     * passes that name to {@link #getWindow(String)}.
+     * This implementation simulates the way of finding a window for a request
+     * by extracting a window name from the requested path and passes that name
+     * to {@link #getWindow(String)}.
      * <p>
      * {@inheritDoc}
      */
@@ -196,9 +193,9 @@ public abstract class LegacyApplication extends AbstractUIProvider
 
     /**
      * Gets the application's theme. The application's theme is the default
-     * theme used by all the uIs for which a theme is not explicitly
-     * defined. If the application theme is not explicitly set,
-     * <code>null</code> is returned.
+     * theme used by all the uIs for which a theme is not explicitly defined. If
+     * the application theme is not explicitly set, <code>null</code> is
+     * returned.
      * 
      * @return the name of the application's theme.
      */
@@ -208,15 +205,14 @@ public abstract class LegacyApplication extends AbstractUIProvider
 
     /**
      * <p>
-     * Gets a UI by name. Returns <code>null</code> if the application is
-     * not running or it does not contain a window corresponding to the
-     * name.
+     * Gets a UI by name. Returns <code>null</code> if the application is not
+     * running or it does not contain a window corresponding to the name.
      * </p>
      * 
      * @param name
      *            the name of the requested window
-     * @return a UI corresponding to the name, or <code>null</code> to use
-     *         the default window
+     * @return a UI corresponding to the name, or <code>null</code> to use the
+     *         default window
      */
     public UI.LegacyWindow getWindow(String name) {
         return legacyUINames.get(name);
@@ -228,9 +224,9 @@ public abstract class LegacyApplication extends AbstractUIProvider
     private int namelessUIIndex = 0;
 
     /**
-     * Adds a new browser level window to this application. Please note that
-     * UI doesn't have a name that is used in the URL - to add a named
-     * window you should instead use {@link #addWindow(UI, String)}
+     * Adds a new browser level window to this application. Please note that UI
+     * doesn't have a name that is used in the URL - to add a named window you
+     * should instead use {@link #addWindow(UI, String)}
      * 
      * @param uI
      *            the UI window to add to the application
@@ -249,21 +245,20 @@ public abstract class LegacyApplication extends AbstractUIProvider
     }
 
     /**
-     * Removes the specified window from the application. This also removes
-     * all name mappings for the window (see {@link #addWindow(UI, String)
-     * and #getWindowName(UI)}.
+     * Removes the specified window from the application. This also removes all
+     * name mappings for the window (see {@link #addWindow(UI, String) and
+     * #getWindowName(UI)}.
      * 
      * <p>
-     * Note that removing window from the application does not close the
-     * browser window - the window is only removed from the server-side.
+     * Note that removing window from the application does not close the browser
+     * window - the window is only removed from the server-side.
      * </p>
      * 
      * @param uI
      *            the UI to remove
      */
     public void removeWindow(UI.LegacyWindow uI) {
-        for (Entry<String, UI.LegacyWindow> entry : legacyUINames
-                .entrySet()) {
+        for (Entry<String, UI.LegacyWindow> entry : legacyUINames.entrySet()) {
             if (entry.getValue() == uI) {
                 legacyUINames.remove(entry.getKey());
             }
@@ -288,8 +283,8 @@ public abstract class LegacyApplication extends AbstractUIProvider
         Application.getCurrent().terminalError(event);
     }
 
-    public ApplicationContext getContext() {
-        return Application.getCurrent().getContext();
+    public Application getContext() {
+        return Application.getCurrent();
     }
 
     protected void close() {
index 3d27dd18b91d6080a4cbd93388127b9907ea4b1a..47bf652a3aed403400356a89509950c244f4487a 100644 (file)
@@ -1313,9 +1313,9 @@ public abstract class AbstractCommunicationManager implements Serializable {
      * response.
      */
     private void writePerformanceData(final PrintWriter outWriter) {
-        ApplicationContext ctx = application.getContext();
         outWriter.write(String.format(", \"timings\":[%d, %d]",
-                ctx.getTotalSessionTime(), ctx.getLastRequestTime()));
+                application.getTotalSessionTime(),
+                application.getLastRequestTime()));
     }
 
     private void legacyPaint(PaintTarget paintTarget,
diff --git a/server/src/com/vaadin/server/ApplicationContext.java b/server/src/com/vaadin/server/ApplicationContext.java
deleted file mode 100644 (file)
index 0b31748..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright 2011 Vaadin Ltd.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.vaadin.server;
-
-import java.io.Serializable;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.servlet.http.HttpSessionBindingEvent;
-import javax.servlet.http.HttpSessionBindingListener;
-
-import com.vaadin.Application;
-
-/**
- * <code>ApplicationContext</code> provides information about the running
- * context of the application. Each context is shared by all applications that
- * are open for one user. In a web-environment this corresponds to a
- * HttpSession.
- * <p>
- * Base class for web application contexts (including portlet contexts) that
- * handles the common tasks.
- * 
- * @author Vaadin Ltd.
- * @since 3.1
- */
-public abstract class ApplicationContext implements HttpSessionBindingListener,
-        Serializable {
-
-    private Application application;
-
-    protected WebBrowser browser = new WebBrowser();
-
-    private AbstractCommunicationManager communicationManager;
-
-    private long totalSessionTime = 0;
-
-    private long lastRequestTime = -1;
-
-    private transient WrappedSession session;
-
-    /**
-     * @see javax.servlet.http.HttpSessionBindingListener#valueBound(HttpSessionBindingEvent)
-     */
-    @Override
-    public void valueBound(HttpSessionBindingEvent arg0) {
-        // We are not interested in bindings
-    }
-
-    /**
-     * @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(HttpSessionBindingEvent)
-     */
-    @Override
-    public void valueUnbound(HttpSessionBindingEvent event) {
-        // If we are going to be unbound from the session, the session must be
-        // closing
-        removeApplication();
-    }
-
-    /**
-     * Get the web browser associated with this application context.
-     * 
-     * Because application context is related to the http session and server
-     * maintains one session per browser-instance, each context has exactly one
-     * web browser associated with it.
-     * 
-     * @return
-     */
-    public WebBrowser getBrowser() {
-        return browser;
-    }
-
-    /**
-     * Returns the applications in this context.
-     * 
-     * Each application context contains the application for one user.
-     * 
-     * @return The application of this context, or <code>null</code> if there is
-     *         no application
-     */
-    public Application getApplication() {
-        return application;
-    }
-
-    public void removeApplication() {
-        if (application == null) {
-            return;
-        }
-        try {
-            application.close();
-        } catch (Exception e) {
-            // This should never happen but is possible with rare
-            // configurations (e.g. robustness tests). If you have one
-            // thread doing HTTP socket write and another thread trying to
-            // remove same application here. Possible if you got e.g. session
-            // lifetime 1 min but socket write may take longer than 1 min.
-            // FIXME: Handle exception
-            getLogger().log(Level.SEVERE,
-                    "Could not close application, leaking memory.", e);
-        } finally {
-            application = null;
-            communicationManager = null;
-        }
-    }
-
-    /**
-     * @return The total time spent servicing requests in this session.
-     */
-    public long getTotalSessionTime() {
-        return totalSessionTime;
-    }
-
-    /**
-     * Sets the time spent servicing the last request in the session and updates
-     * the total time spent servicing requests in this session.
-     * 
-     * @param time
-     *            the time spent in the last request.
-     */
-    public void setLastRequestTime(long time) {
-        lastRequestTime = time;
-        totalSessionTime += time;
-    }
-
-    /**
-     * @return the time spent servicing the last request in this session.
-     */
-    public long getLastRequestTime() {
-        return lastRequestTime;
-    }
-
-    private Logger getLogger() {
-        return Logger.getLogger(ApplicationContext.class.getName());
-    }
-
-    /**
-     * Gets the session to which this application context is currently
-     * associated.
-     * 
-     * @return the wrapped session for this context
-     */
-    public WrappedSession getSession() {
-        return session;
-    }
-
-    /**
-     * Sets the session to which this application context is currently
-     * associated.
-     * 
-     * @param session
-     *            the wrapped session for this context
-     */
-    public void setSession(WrappedSession session) {
-        this.session = session;
-    }
-
-    public AbstractCommunicationManager getApplicationManager() {
-        return communicationManager;
-    }
-
-    public void setApplication(Application application,
-            AbstractCommunicationManager communicationManager) {
-        if (this.application != null) {
-            removeApplication();
-        }
-        this.application = application;
-        this.communicationManager = communicationManager;
-    }
-
-}
\ No newline at end of file
index 3432cda9426c3b48db6e5e65940983964df09ce9..9176754d93cbecaf9cf9f01a94d836946c1d7e77 100644 (file)
@@ -143,9 +143,7 @@ public class CombinedRequest implements WrappedRequest {
 
             @Override
             public WebBrowser getWebBrowser() {
-                ApplicationContext context = Application.getCurrent()
-                        .getContext();
-                return context.getBrowser();
+                return Application.getCurrent().getBrowser();
             }
         };
     }
index cc920239193ef1d9833b402afaf6492744e6fe00..beea884aaed5802ce72318464ca398535bdfaafd 100644 (file)
@@ -113,7 +113,7 @@ public class CommunicationManager extends AbstractCommunicationManager {
     protected InputStream getThemeResourceAsStream(UI uI, String themeName,
             String resource) {
         ServletApplicationContext context = (ServletApplicationContext) uI
-                .getApplication().getContext();
+                .getApplication();
         ServletContext servletContext = context.getHttpSession()
                 .getServletContext();
         return servletContext.getResourceAsStream("/"
index 642737f73b0c2d8a3c7347ce5b252fd681da5f3f..1175d6a96066c690b6cea828f0dd74e7f0b2a942 100644 (file)
@@ -47,6 +47,7 @@ import com.google.appengine.api.memcache.Expiration;
 import com.google.appengine.api.memcache.MemcacheService;
 import com.google.appengine.api.memcache.MemcacheServiceFactory;
 import com.google.apphosting.api.DeadlineExceededException;
+import com.vaadin.Application;
 
 /**
  * ApplicationServlet to be used when deploying to Google App Engine, in
@@ -241,7 +242,7 @@ public class GAEVaadinServlet extends VaadinServlet {
             }
 
             // de-serialize or create application context, store in session
-            ApplicationContext ctx = getApplicationContext(request, memcache);
+            Application ctx = getApplicationContext(request, memcache);
 
             super.service(request, response);
 
@@ -291,8 +292,8 @@ public class GAEVaadinServlet extends VaadinServlet {
         }
     }
 
-    protected ApplicationContext getApplicationContext(
-            HttpServletRequest request, MemcacheService memcache) {
+    protected Application getApplicationContext(HttpServletRequest request,
+            MemcacheService memcache) {
         HttpSession session = request.getSession();
         String id = AC_BASE + session.getId();
         byte[] serializedAC = (byte[]) memcache.get(id);
@@ -320,10 +321,9 @@ public class GAEVaadinServlet extends VaadinServlet {
             ObjectInputStream ois;
             try {
                 ois = new ObjectInputStream(bais);
-                ApplicationContext applicationContext = (ApplicationContext) ois
-                        .readObject();
-                session.setAttribute(ServletApplicationContext.class.getName(),
-                        applicationContext);
+                Application applicationContext = (Application) ois.readObject();
+                applicationContext.storeInSession(new WrappedHttpSession(
+                        session));
             } catch (IOException e) {
                 getLogger().log(
                         Level.WARNING,
index 7de38eaf94d5d5040b56182f09ebabff6a14ca1f..77a94e4d0a6774dc429a3f9b9f95000d01615a32 100644 (file)
@@ -46,9 +46,10 @@ public class LegacyVaadinPortlet extends VaadinPortlet {
     }
 
     @Override
-    protected Application createApplication(PortletRequest request)
-            throws PortletException {
-        Application application = super.createApplication(request);
+    protected PortletApplicationContext2 createApplication(
+            PortletRequest request) throws PortletException {
+        PortletApplicationContext2 application = super
+                .createApplication(request);
 
         // Must set current before running init()
         Application.setCurrent(application);
index 21419a2e3304e91a8dd36d196deed64406d0419c..aa78c401f5a7e0518b2261b73aba7c2580b9db97 100644 (file)
@@ -46,9 +46,10 @@ public class LegacyVaadinServlet extends VaadinServlet {
     }
 
     @Override
-    protected Application createApplication(HttpServletRequest request)
-            throws ServletException {
-        Application application = super.createApplication(request);
+    protected ServletApplicationContext createApplication(
+            HttpServletRequest request) throws ServletException {
+        ServletApplicationContext application = super
+                .createApplication(request);
 
         // Must set current before running init()
         Application.setCurrent(application);
index 015c6c907f91031452a2134291422b3e9ec548ac..a1c181dcb9fc82529113f904579f78594f9ec955 100644 (file)
@@ -391,7 +391,7 @@ public class Page implements Serializable {
     }
 
     public WebBrowser getWebBrowser() {
-        return uI.getApplication().getContext().getBrowser();
+        return uI.getApplication().getBrowser();
     }
 
     public void setBrowserWindowSize(int width, int height) {
index a7b6d5b40a3ff9ce68fce0feb17a3a3692e52b51..ff23d12f4ca83b22b7d51fd474a8083bfa692db9 100644 (file)
@@ -41,6 +41,7 @@ import javax.portlet.StateAwareResponse;
 import javax.servlet.http.HttpSessionBindingListener;
 import javax.xml.namespace.QName;
 
+import com.vaadin.Application;
 import com.vaadin.ui.UI;
 import com.vaadin.util.CurrentInstance;
 
@@ -53,7 +54,7 @@ import com.vaadin.util.CurrentInstance;
  * @author peholmst
  */
 @SuppressWarnings("serial")
-public class PortletApplicationContext2 extends ApplicationContext {
+public class PortletApplicationContext2 extends Application {
 
     private final Set<PortletListener> portletListeners = new LinkedHashSet<PortletListener>();
 
@@ -63,26 +64,6 @@ public class PortletApplicationContext2 extends ApplicationContext {
     private final Map<String, String> sharedParameterActionNameMap = new HashMap<String, String>();
     private final Map<String, String> sharedParameterActionValueMap = new HashMap<String, String>();
 
-    public static PortletApplicationContext2 getApplicationContext(
-            PortletSession session) {
-        Object cxattr = session.getAttribute(PortletApplicationContext2.class
-                .getName());
-        PortletApplicationContext2 cx = null;
-        // can be false also e.g. if old context comes from another
-        // classloader when using
-        // <private-session-attributes>false</private-session-attributes>
-        // and redeploying the portlet - see #7461
-        if (cxattr instanceof PortletApplicationContext2) {
-            cx = (PortletApplicationContext2) cxattr;
-        }
-        if (cx == null) {
-            cx = new PortletApplicationContext2();
-            session.setAttribute(PortletApplicationContext2.class.getName(), cx);
-        }
-        cx.setSession(new WrappedPortletSession(session));
-        return cx;
-    }
-
     public PortletSession getPortletSession() {
         WrappedSession wrappedSession = getSession();
         PortletSession session = ((WrappedPortletSession) wrappedSession)
index f7214f108cfbd6c8162ee4f09b88dc8818bf665a..ada42140c64d0bc00a9645bbd9a22f55e6bd7d83 100644 (file)
@@ -158,7 +158,7 @@ public class PortletCommunicationManager extends AbstractCommunicationManager {
     protected InputStream getThemeResourceAsStream(UI uI, String themeName,
             String resource) {
         PortletApplicationContext2 context = (PortletApplicationContext2) uI
-                .getApplication().getContext();
+                .getApplication();
         PortletContext portletContext = context.getPortletSession()
                 .getPortletContext();
         return portletContext.getResourceAsStream("/"
index 470677e3314c8b520e4cee6786de47cd2d1d5262..afff901d2f173ceaa8b147b04ff115b70518c2d5 100644 (file)
@@ -18,6 +18,7 @@ package com.vaadin.server;
 
 import java.io.Serializable;
 
+import com.vaadin.Application;
 
 /**
  * Times the handling of requests and stores the information as an attribute in
@@ -44,7 +45,7 @@ public class RequestTimer implements Serializable {
      * 
      * @param context
      */
-    public void stop(ApplicationContext context) {
+    public void stop(Application context) {
         // Measure and store the total handling time. This data can be
         // used in TestBench 3 tests.
         long time = (System.nanoTime() - requestStartTime) / 1000000;
index a1f5a816241c550369c28e381c405b7be86a37a6..0945de6cb59302e81d70ab6a8c9fa719ba2ab482 100644 (file)
@@ -23,6 +23,7 @@ import javax.servlet.http.HttpSession;
 import javax.servlet.http.HttpSessionBindingEvent;
 import javax.servlet.http.HttpSessionBindingListener;
 
+import com.vaadin.Application;
 import com.vaadin.util.CurrentInstance;
 
 /**
@@ -35,18 +36,10 @@ import com.vaadin.util.CurrentInstance;
  * @since 3.1
  */
 @SuppressWarnings("serial")
-public class ServletApplicationContext extends ApplicationContext {
+public class ServletApplicationContext extends Application {
 
     private transient boolean reinitializingSession = false;
 
-    /**
-     * Creates a new Web Application Context.
-     * 
-     */
-    protected ServletApplicationContext() {
-
-    }
-
     @Override
     public void valueUnbound(HttpSessionBindingEvent event) {
         if (!reinitializingSession) {
@@ -62,7 +55,6 @@ public class ServletApplicationContext extends ApplicationContext {
      * contents. The purpose of this is to introduce a new session key in order
      * to avoid session fixation attacks.
      */
-    @SuppressWarnings("unchecked")
     public void reinitializeSession() {
 
         HttpSession oldSession = getHttpSession();
@@ -93,7 +85,7 @@ public class ServletApplicationContext extends ApplicationContext {
         }
 
         // Update the "current session" variable
-        setSession(new WrappedHttpSession(newSession));
+        storeInSession(new WrappedHttpSession(newSession));
     }
 
     /**
@@ -106,22 +98,4 @@ public class ServletApplicationContext extends ApplicationContext {
         return ((WrappedHttpSession) session).getHttpSession();
     }
 
-    /**
-     * Gets the application context for an HttpSession.
-     * 
-     * @param session
-     *            the HTTP session.
-     * @return the application context for HttpSession.
-     */
-    static public ServletApplicationContext getApplicationContext(
-            HttpSession session) {
-        ServletApplicationContext cx = (ServletApplicationContext) session
-                .getAttribute(ServletApplicationContext.class.getName());
-        if (cx == null) {
-            cx = new ServletApplicationContext();
-            session.setAttribute(ServletApplicationContext.class.getName(), cx);
-        }
-        cx.setSession(new WrappedHttpSession(session));
-        return cx;
-    }
 }
index eae01e9369ef8e187ac6b838d1f04b948548806f..e69a635b760ff24875bc36e799cb5853bdb2294d 100644 (file)
@@ -474,8 +474,7 @@ public class VaadinPortlet extends GenericPortlet implements Constants {
                  * Get or create an application context and an application
                  * manager for the session
                  */
-                PortletApplicationContext2 applicationContext = getApplicationContext(request
-                        .getPortletSession());
+                PortletApplicationContext2 applicationContext = (PortletApplicationContext2) application;
 
                 PortletCommunicationManager applicationManager = (PortletCommunicationManager) applicationContext
                         .getApplicationManager();
@@ -494,8 +493,6 @@ public class VaadinPortlet extends GenericPortlet implements Constants {
                 applicationContext.getBrowser().updateRequestDetails(
                         wrappedRequest);
 
-                /* Start the newly created application */
-                startApplication(request, application, applicationContext);
                 applicationRunning = true;
 
                 /* Notify listeners */
@@ -596,9 +593,8 @@ public class VaadinPortlet extends GenericPortlet implements Constants {
 
                 CurrentInstance.clearAll();
 
-                PortletSession session = request.getPortletSession(false);
-                if (session != null) {
-                    requestTimer.stop(getApplicationContext(session));
+                if (application != null) {
+                    requestTimer.stop(application);
                 }
             }
         }
@@ -764,27 +760,10 @@ public class VaadinPortlet extends GenericPortlet implements Constants {
                 && (request.getParameter(URL_PARAMETER_REPAINT_ALL).equals("1"));
     }
 
-    private void startApplication(PortletRequest request,
-            Application application, PortletApplicationContext2 context)
-            throws PortletException, MalformedURLException {
-        if (!application.isRunning()) {
-            Locale locale = request.getLocale();
-            application.setLocale(locale);
-            // No application URL when running inside a portlet
-            application.start(new ApplicationStartEvent(null,
-                    getDeploymentConfiguration().getApplicationConfiguration(),
-                    context));
-            addonContext.fireApplicationStarted(application);
-        }
-    }
-
     private void endApplication(PortletRequest request,
             PortletResponse response, Application application)
             throws IOException {
-        final PortletSession session = request.getPortletSession();
-        if (session != null) {
-            getApplicationContext(session).removeApplication();
-        }
+        application.removeFromSession();
         // Do not send any redirects when running inside a portlet.
     }
 
@@ -839,10 +818,7 @@ public class VaadinPortlet extends GenericPortlet implements Constants {
         }
 
         application.close();
-        if (session != null) {
-            PortletApplicationContext2 context = getApplicationContext(session);
-            context.removeApplication();
-        }
+        application.removeFromSession();
     }
 
     private Application createAndRegisterApplication(PortletRequest request)
@@ -855,16 +831,23 @@ public class VaadinPortlet extends GenericPortlet implements Constants {
             throw new PortletException(e);
         }
 
-        final PortletApplicationContext2 context = getApplicationContext(request
-                .getPortletSession());
-        context.setApplication(newApplication, new PortletCommunicationManager(
-                newApplication));
+        newApplication.storeInSession(new WrappedPortletSession(request
+                .getPortletSession()));
+
+        Locale locale = request.getLocale();
+        newApplication.setLocale(locale);
+        // No application URL when running inside a portlet
+        newApplication.start(new ApplicationStartEvent(null,
+                getDeploymentConfiguration().getApplicationConfiguration(),
+                new PortletCommunicationManager(newApplication)));
+        addonContext.fireApplicationStarted(newApplication);
+
         return newApplication;
     }
 
-    protected Application createApplication(PortletRequest request)
-            throws PortletException {
-        Application application = new Application();
+    protected PortletApplicationContext2 createApplication(
+            PortletRequest request) throws PortletException {
+        PortletApplicationContext2 application = new PortletApplicationContext2();
 
         try {
             ServletPortletHelper.initDefaultUIProvider(application,
@@ -887,18 +870,17 @@ public class VaadinPortlet extends GenericPortlet implements Constants {
             throw new SessionExpiredException();
         }
 
-        PortletApplicationContext2 context = getApplicationContext(session);
-        Application application = context.getApplication();
+        Application application = Application
+                .getForSession(new WrappedPortletSession(session));
         if (application == null) {
             return null;
         }
-        if (application.isRunning()) {
-            return application;
+        if (!application.isRunning()) {
+            application.removeFromSession();
+            return null;
         }
-        // application found but not running
-        context.removeApplication();
 
-        return null;
+        return application;
     }
 
     private void handleServiceException(WrappedPortletRequest request,
@@ -1003,21 +985,6 @@ public class VaadinPortlet extends GenericPortlet implements Constants {
         outWriter.close();
     }
 
-    /**
-     * 
-     * Gets the application context for a PortletSession. If no context is
-     * currently stored in a session a new context is created and stored in the
-     * session.
-     * 
-     * @param portletSession
-     *            the portlet session.
-     * @return the application context for the session.
-     */
-    protected PortletApplicationContext2 getApplicationContext(
-            PortletSession portletSession) {
-        return PortletApplicationContext2.getApplicationContext(portletSession);
-    }
-
     private static final Logger getLogger() {
         return Logger.getLogger(VaadinPortlet.class.getName());
     }
index 8f333821101ed00cd063b061c7d51674d6cbdff1..eb21096c9bf6d3907a5f549ea728e8b774c09f2a 100644 (file)
@@ -318,8 +318,7 @@ public class VaadinServlet extends HttpServlet implements Constants {
              * Get or create a WebApplicationContext and an ApplicationManager
              * for the session
              */
-            ServletApplicationContext webApplicationContext = getApplicationContext(request
-                    .getSession());
+            ServletApplicationContext webApplicationContext = (ServletApplicationContext) application;
             CommunicationManager applicationManager = (CommunicationManager) webApplicationContext
                     .getApplicationManager();
 
@@ -335,8 +334,6 @@ public class VaadinServlet extends HttpServlet implements Constants {
             /* Update browser information from the request */
             webApplicationContext.getBrowser().updateRequestDetails(request);
 
-            // Start the application if it's newly created
-            startApplication(request, application, webApplicationContext);
             applicationRunning = true;
 
             /* Handle the request */
@@ -388,9 +385,8 @@ public class VaadinServlet extends HttpServlet implements Constants {
 
             CurrentInstance.clearAll();
 
-            HttpSession session = request.getSession(false);
-            if (session != null) {
-                requestTimer.stop(getApplicationContext(session));
+            if (application != null) {
+                requestTimer.stop(application);
             }
         }
     }
@@ -631,7 +627,7 @@ public class VaadinServlet extends HttpServlet implements Constants {
     }
 
     private Application createAndRegisterApplication(HttpServletRequest request)
-            throws ServletException {
+            throws ServletException, MalformedURLException {
         Application newApplication = createApplication(request);
 
         try {
@@ -640,10 +636,19 @@ public class VaadinServlet extends HttpServlet implements Constants {
             throw new ServletException(e);
         }
 
-        final ServletApplicationContext context = getApplicationContext(request
-                .getSession());
-        context.setApplication(newApplication,
-                createCommunicationManager(newApplication));
+        newApplication.storeInSession(new WrappedHttpSession(request
+                .getSession()));
+
+        final URL applicationUrl = getApplicationUrl(request);
+
+        // Initial locale comes from the request
+        Locale locale = request.getLocale();
+        newApplication.setLocale(locale);
+        newApplication.start(new ApplicationStartEvent(applicationUrl,
+                getDeploymentConfiguration().getApplicationConfiguration(),
+                createCommunicationManager(newApplication)));
+
+        addonContext.fireApplicationStarted(newApplication);
 
         return newApplication;
     }
@@ -717,9 +722,9 @@ public class VaadinServlet extends HttpServlet implements Constants {
      * @throws ServletException
      * @throws MalformedURLException
      */
-    protected Application createApplication(HttpServletRequest request)
-            throws ServletException {
-        Application newApplication = new Application();
+    protected ServletApplicationContext createApplication(
+            HttpServletRequest request) throws ServletException {
+        ServletApplicationContext newApplication = new ServletApplicationContext();
 
         try {
             ServletPortletHelper.initDefaultUIProvider(newApplication,
@@ -868,34 +873,6 @@ public class VaadinServlet extends HttpServlet implements Constants {
         log("Invalid security key received from " + request.getRemoteHost());
     }
 
-    /**
-     * Starts the application if it is not already running.
-     * 
-     * @param request
-     * @param application
-     * @param webApplicationContext
-     * @throws ServletException
-     * @throws MalformedURLException
-     */
-    private void startApplication(HttpServletRequest request,
-            Application application,
-            ServletApplicationContext webApplicationContext)
-            throws ServletException, MalformedURLException {
-
-        if (!application.isRunning()) {
-            // Create application
-            final URL applicationUrl = getApplicationUrl(request);
-
-            // Initial locale comes from the request
-            Locale locale = request.getLocale();
-            application.setLocale(locale);
-            application.start(new ApplicationStartEvent(applicationUrl,
-                    getDeploymentConfiguration().getApplicationConfiguration(),
-                    webApplicationContext));
-            addonContext.fireApplicationStarted(application);
-        }
-    }
-
     /**
      * Check if this is a request for a static resource and, if it is, serve the
      * resource to the client.
@@ -1303,24 +1280,18 @@ public class VaadinServlet extends HttpServlet implements Constants {
             throw new SessionExpiredException();
         }
 
-        ServletApplicationContext context = getApplicationContext(session);
-
-        Application sessionApplication = context.getApplication();
+        Application sessionApplication = getApplicationContext(session);
 
         if (sessionApplication == null) {
             return null;
         }
 
-        if (sessionApplication.isRunning()) {
-            // Found a running application
-            return sessionApplication;
+        if (!sessionApplication.isRunning()) {
+            sessionApplication.removeFromSession();
+            return null;
         }
-        // Application has stopped, so remove it before creating a new
-        // application
-        getApplicationContext(session).removeApplication();
 
-        // Existing application not found
-        return null;
+        return sessionApplication;
     }
 
     /**
@@ -1346,7 +1317,7 @@ public class VaadinServlet extends HttpServlet implements Constants {
 
         final HttpSession session = request.getSession();
         if (session != null) {
-            getApplicationContext(session).removeApplication();
+            application.removeFromSession();
         }
 
         response.sendRedirect(response.encodeRedirectURL(logoutUrl));
@@ -1398,29 +1369,14 @@ public class VaadinServlet extends HttpServlet implements Constants {
 
         application.close();
         if (session != null) {
-            ServletApplicationContext context = getApplicationContext(session);
-            context.removeApplication();
+            application.removeFromSession();
         }
     }
 
-    /**
-     * 
-     * Gets the application context from an HttpSession. If no context is
-     * currently stored in a session a new context is created and stored in the
-     * session.
-     * 
-     * @param session
-     *            the HTTP session.
-     * @return the application context for HttpSession.
-     */
-    protected ServletApplicationContext getApplicationContext(
-            HttpSession session) {
-        /*
-         * TODO the ApplicationContext.getApplicationContext() should be removed
-         * and logic moved here. Now overriding context type is possible, but
-         * the whole creation logic should be here. MT 1101
-         */
-        return ServletApplicationContext.getApplicationContext(session);
+    protected Application getApplicationContext(final HttpSession session) {
+        Application sessionApplication = Application
+                .getForSession(new WrappedHttpSession(session));
+        return sessionApplication;
     }
 
     public class RequestError implements Terminal.ErrorEvent, Serializable {
index 9285f92035a183979f9b79ef1bcb4a4eeaca589c..05d9b13736fdcbcdba7d1831c1e9c13245f593fa 100644 (file)
@@ -89,9 +89,7 @@ public class WrappedHttpServletRequest extends HttpServletRequestWrapper
 
             @Override
             public WebBrowser getWebBrowser() {
-                ApplicationContext context = Application.getCurrent()
-                        .getContext();
-                return context.getBrowser();
+                return Application.getCurrent().getBrowser();
             }
         };
     }
index 2d444d86caf2b72c98e9fdcf2df2c40dbb2669bf..dffbebb379063fbc0a25005d5c6516acca6a9e47 100644 (file)
@@ -152,7 +152,7 @@ public class WrappedPortletRequest implements WrappedRequest {
             @Override
             public WebBrowser getWebBrowser() {
                 PortletApplicationContext2 context = (PortletApplicationContext2) Application
-                        .getCurrent().getContext();
+                        .getCurrent();
                 return context.getBrowser();
             }
         };
index dc730f6cc4b13b18b8c5a5c766a8bcebff6d0b02..12e5b096323e99c1c40cbf770b4c27d5f0fd3d18 100644 (file)
@@ -2,21 +2,12 @@ package com.vaadin.tests.server;
 
 import junit.framework.TestCase;
 
-import com.vaadin.Application;
 import com.vaadin.server.ClassResource;
 import com.vaadin.ui.Embedded;
 
 public class TestMimeTypes extends TestCase {
 
     public void testEmbeddedPDF() {
-        Application app = new Application() {
-
-            @Override
-            public void init() {
-                // TODO Auto-generated method stub
-
-            }
-        };
         Embedded e = new Embedded("A pdf", new ClassResource("file.pddf"));
         assertEquals("Invalid mimetype", "application/octet-stream",
                 e.getMimeType());
index f3b367483adbb49ab73c0b80f2cd28e54717b3cb..775348fb5c6ada08f6da0e729a52db9a226b1f4d 100644 (file)
@@ -66,12 +66,7 @@ public class TestStreamVariableMapping extends TestCase {
     }
 
     private CommunicationManager createCommunicationManager() {
-        return new CommunicationManager(new Application() {
-            @Override
-            public void init() {
-                // TODO Auto-generated method stub
-            }
-        });
+        return new CommunicationManager(new Application());
     }
 
 }
index a9a988f29654aeb6aadd9f1b6063759314852d4d..34c1cc1fcef9457dd35f15e28de5c3efc91931b3 100644 (file)
@@ -34,6 +34,7 @@ import com.vaadin.LegacyApplication;
 import com.vaadin.server.AbstractUIProvider;
 import com.vaadin.server.ApplicationConfiguration;
 import com.vaadin.server.LegacyVaadinServlet;
+import com.vaadin.server.ServletApplicationContext;
 import com.vaadin.server.UIProvider;
 import com.vaadin.server.WrappedHttpServletRequest;
 import com.vaadin.server.WrappedRequest;
@@ -112,12 +113,12 @@ public class ApplicationRunnerServlet extends LegacyVaadinServlet {
     }
 
     @Override
-    protected Application createApplication(HttpServletRequest request)
-            throws ServletException {
+    protected ServletApplicationContext createApplication(
+            HttpServletRequest request) throws ServletException {
         try {
             final Class<?> classToRun = getClassToRun();
             if (UI.class.isAssignableFrom(classToRun)) {
-                Application application = new Application();
+                ServletApplicationContext application = new ServletApplicationContext();
                 application.addUIProvider(new AbstractUIProvider() {
 
                     @Override
@@ -130,7 +131,7 @@ public class ApplicationRunnerServlet extends LegacyVaadinServlet {
             } else if (LegacyApplication.class.isAssignableFrom(classToRun)) {
                 return super.createApplication(request);
             } else if (UIProvider.class.isAssignableFrom(classToRun)) {
-                Application application = new Application();
+                ServletApplicationContext application = new ServletApplicationContext();
                 application
                         .addUIProvider((UIProvider) classToRun.newInstance());
                 return application;
index f4cf236a24bd555e86799c2a9bfd87822ea8e580..022a343196c7dd85ad30979b102df698bf26c947 100644 (file)
@@ -1,6 +1,5 @@
 package com.vaadin.tests;
 
-import com.vaadin.server.ApplicationContext;
 import com.vaadin.server.WebBrowser;
 import com.vaadin.tests.components.TestBase;
 import com.vaadin.ui.Label;
@@ -9,8 +8,7 @@ public class VerifyBrowserVersion extends TestBase {
 
     @Override
     protected void setup() {
-        ApplicationContext context = getContext();
-        WebBrowser browser = context.getBrowser();
+        WebBrowser browser = getBrowser();
         addComponent(new Label(browser.getBrowserApplication()));
         addComponent(new Label("Touch device? "
                 + (browser.isTouchDevice() ? "YES" : "No")));
index f2fe90f4b141d7191aa81ff38285501bd0db2947..7250ba3cfb142293a391ef8dbbb84a028819192f 100644 (file)
@@ -14,9 +14,9 @@ public class ApplicationCloseTest extends TestBase {
     protected void setup() {
         Label applications = new Label("Applications in session: <br/>",
                 ContentMode.XHTML);
-        if (getContext().getApplication() != null) {
+        if (getContext() != null) {
             applications.setValue(applications.getValue() + "App: "
-                    + getContext().getApplication() + "<br/>");
+                    + getContext() + "<br/>");
         }
         applications.setValue(applications.getValue() + "<br/><br/>");
 
index 6f539af016f74541b19e89394cafa1234f957a81..5dc5fd7128835c24cfe2e698014d89113f2b508b 100644 (file)
@@ -1,7 +1,7 @@
 package com.vaadin.tests.components;
 
+import com.vaadin.Application;
 import com.vaadin.LegacyApplication;
-import com.vaadin.server.ApplicationContext;
 import com.vaadin.server.WebBrowser;
 
 public abstract class AbstractTestCase extends LegacyApplication {
@@ -11,8 +11,7 @@ public abstract class AbstractTestCase extends LegacyApplication {
     protected abstract Integer getTicketNumber();
 
     protected WebBrowser getBrowser() {
-        ApplicationContext context = getContext();
-        WebBrowser webBrowser = context.getBrowser();
+        WebBrowser webBrowser = Application.getCurrent().getBrowser();
         return webBrowser;
 
     }
index 21eda56891ddbcddf8cddc21a62fd3ef1095dfbd..92ac336df76515fa0d78f1d386815ed1a862f033 100644 (file)
@@ -1,7 +1,5 @@
 package com.vaadin.tests.components;
 
-import com.vaadin.Application;
-import com.vaadin.server.ApplicationContext;
 import com.vaadin.server.WebBrowser;
 import com.vaadin.server.WrappedRequest;
 import com.vaadin.shared.ui.label.ContentMode;
@@ -56,9 +54,7 @@ public abstract class AbstractTestUI extends UI {
     protected abstract Integer getTicketNumber();
 
     protected WebBrowser getBrowser() {
-        ApplicationContext context = Application.getCurrent().getContext();
-        ApplicationContext webContext = context;
-        return webContext.getBrowser();
+        return getApplication().getBrowser();
     }
 
 }
index 3d380c78355bb8ac48165f574eb7c7ebe13a1cee..4311cd6a0f9886bde768d41b7ed8bc2862c76e84 100644 (file)
@@ -2,7 +2,6 @@ package com.vaadin.tests.components;
 
 import com.vaadin.Application;
 import com.vaadin.server.AbstractUIProvider;
-import com.vaadin.server.ApplicationContext;
 import com.vaadin.server.WebBrowser;
 
 public abstract class AbstractTestUIProvider extends AbstractUIProvider {
@@ -11,8 +10,7 @@ public abstract class AbstractTestUIProvider extends AbstractUIProvider {
     protected abstract Integer getTicketNumber();
 
     protected WebBrowser getBrowser() {
-        ApplicationContext context = Application.getCurrent().getContext();
-        WebBrowser webBrowser = context.getBrowser();
+        WebBrowser webBrowser = Application.getCurrent().getBrowser();
         return webBrowser;
     }
 }