From 2adfd3e94a914c8206c9a4b1c19ff7a051edf0d8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Johannes=20Dahlstr=C3=B6m?= Date: Wed, 22 Aug 2012 14:49:22 +0300 Subject: [PATCH] Improve documentation, disable cleanup if heartbeat interval nonpositive, change default heartbeat interval from 500 to 300, some logging on client side (#9265) --- .../gwt/client/ApplicationConfiguration.java | 4 ++++ .../gwt/client/ApplicationConnection.java | 16 +++++++++---- server/src/com/vaadin/Application.java | 23 +++++++++++-------- .../terminal/DeploymentConfiguration.java | 3 ++- .../AbstractDeploymentConfiguration.java | 4 ++-- 5 files changed, 33 insertions(+), 17 deletions(-) diff --git a/client/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java b/client/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java index c3bf3f8b44..2771871653 100644 --- a/client/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java +++ b/client/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java @@ -290,6 +290,10 @@ public class ApplicationConfiguration implements EntryPoint { return rootId; } + /** + * @return The interval in seconds between heartbeat requests, or a + * non-positive number if heartbeat is disabled. + */ public int getHeartbeatInterval() { return heartbeatInterval; } diff --git a/client/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java b/client/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java index d2deb70190..cd90403139 100644 --- a/client/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java +++ b/client/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java @@ -2524,19 +2524,23 @@ public class ApplicationConnection { } /** - * Schedules a heartbeat request. + * Schedules a heartbeat request to occur after the configured heartbeat + * interval elapses if the interval is a positive number. Otherwise, does + * nothing. * * @see #sendHeartbeat() + * @see ApplicationConfiguration#getHeartbeatInterval() */ - private void scheduleHeartbeat() { - final int interval = 1000 * getConfiguration().getHeartbeatInterval(); + protected void scheduleHeartbeat() { + final int interval = getConfiguration().getHeartbeatInterval(); if (interval > 0) { + VConsole.log("Scheduling heartbeat in " + interval + " seconds"); new Timer() { @Override public void run() { sendHeartbeat(); } - }.schedule(interval); + }.schedule(interval * 1000); } } @@ -2552,7 +2556,7 @@ public class ApplicationConnection { * @see #scheduleHeartbeat() * @see com.vaadin.ui.Root#heartbeat() */ - private void sendHeartbeat() { + protected void sendHeartbeat() { final String uri = addGetParameters( translateVaadinUri(ApplicationConstants.APP_PROTOCOL_PREFIX + ApplicationConstants.HEARTBEAT_REQUEST_PATH), @@ -2568,6 +2572,7 @@ public class ApplicationConnection { int status = response.getStatusCode(); if (status == Response.SC_OK) { // TODO Permit retry in some error situations + VConsole.log("Heartbeat response OK"); scheduleHeartbeat(); } else { VConsole.error("Heartbeat request failed with status code " @@ -2585,6 +2590,7 @@ public class ApplicationConnection { rb.setCallback(callback); try { + VConsole.log("Sending heartbeat request..."); rb.send(); } catch (RequestException re) { callback.onError(null, re); diff --git a/server/src/com/vaadin/Application.java b/server/src/com/vaadin/Application.java index 62052cd3b7..d4768abfb4 100644 --- a/server/src/com/vaadin/Application.java +++ b/server/src/com/vaadin/Application.java @@ -2448,7 +2448,9 @@ public class Application implements Terminal.ErrorListener, Serializable { /** * Removes all those roots from the application whose last heartbeat * occurred more than {@link #getHeartbeatTimeout()} seconds ago. Close - * events are fired for the removed roots. + * events are fired for the removed roots. If + * getHeartbeatTimeout() returns a nonpositive number, no + * cleanup is performed. *

* Called by the framework at the end of every request. * @@ -2459,13 +2461,15 @@ public class Application implements Terminal.ErrorListener, Serializable { * @since 7.0.0 */ public void closeInactiveRoots() { - long now = System.currentTimeMillis(); - for (Iterator i = roots.values().iterator(); i.hasNext();) { - Root root = i.next(); - if (now - root.getLastHeartbeat() > 1000 * getHeartbeatTimeout()) { - i.remove(); - retainOnRefreshRoots.values().remove(root.getRootId()); - root.fireCloseEvent(); + if (getHeartbeatTimeout() > 0) { + long now = System.currentTimeMillis(); + for (Iterator i = roots.values().iterator(); i.hasNext();) { + Root root = i.next(); + if (now - root.getLastHeartbeat() > 1000 * getHeartbeatTimeout()) { + i.remove(); + retainOnRefreshRoots.values().remove(root.getRootId()); + root.fireCloseEvent(); + } } } } @@ -2478,7 +2482,8 @@ public class Application implements Terminal.ErrorListener, Serializable { * * @since 7.0.0 * - * @return The heartbeat timeout in seconds. + * @return The heartbeat timeout in seconds or a nonpositive number if + * timeout never occurs. */ public int getHeartbeatTimeout() { // Permit three missed heartbeats before closing the root diff --git a/server/src/com/vaadin/terminal/DeploymentConfiguration.java b/server/src/com/vaadin/terminal/DeploymentConfiguration.java index 550bfdb7cf..7d006812b9 100644 --- a/server/src/com/vaadin/terminal/DeploymentConfiguration.java +++ b/server/src/com/vaadin/terminal/DeploymentConfiguration.java @@ -155,7 +155,8 @@ public interface DeploymentConfiguration extends Serializable { public int getResourceCacheTime(); /** - * Returns the number of seconds between heartbeat requests of a root. + * Returns the number of seconds between heartbeat requests of a root, or a + * non-negative number if heartbeat is disabled. * * @return */ diff --git a/server/src/com/vaadin/terminal/gwt/server/AbstractDeploymentConfiguration.java b/server/src/com/vaadin/terminal/gwt/server/AbstractDeploymentConfiguration.java index 3e7f1eaf71..d2cc4a2eea 100644 --- a/server/src/com/vaadin/terminal/gwt/server/AbstractDeploymentConfiguration.java +++ b/server/src/com/vaadin/terminal/gwt/server/AbstractDeploymentConfiguration.java @@ -228,11 +228,11 @@ public abstract class AbstractDeploymentConfiguration implements try { heartbeatInterval = Integer .parseInt(getApplicationOrSystemProperty( - Constants.SERVLET_PARAMETER_HEARTBEAT_RATE, "500")); + Constants.SERVLET_PARAMETER_HEARTBEAT_RATE, "300")); } catch (NumberFormatException e) { getLogger().warning( Constants.WARNING_HEARTBEAT_INTERVAL_NOT_NUMERIC); - heartbeatInterval = 500; + heartbeatInterval = 300; } } -- 2.39.5