Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBeat Schwarzentrub2018-12-18 09:22:18 +0000
committerBeat Schwarzentrub2018-12-18 19:01:59 +0000
commitbec0b89d6a016345e4397c45e0d0b67e015c4f1f (patch)
tree22ec9c4ea551f70336e9a65e939427c07df8841e
parent83d7666519b0df569c86bed96e7f5f647de4e253 (diff)
downloadorg.eclipse.scout.rt-features/bschwarzent/tmp_20181218.tar.gz
org.eclipse.scout.rt-features/bschwarzent/tmp_20181218.tar.xz
org.eclipse.scout.rt-features/bschwarzent/tmp_20181218.zip
-rw-r--r--org.eclipse.scout.rt.ui.html/src/main/java/org/eclipse/scout/rt/ui/html/json/JsonMessageRequestHandler.java26
1 files changed, 26 insertions, 0 deletions
diff --git a/org.eclipse.scout.rt.ui.html/src/main/java/org/eclipse/scout/rt/ui/html/json/JsonMessageRequestHandler.java b/org.eclipse.scout.rt.ui.html/src/main/java/org/eclipse/scout/rt/ui/html/json/JsonMessageRequestHandler.java
index 41616b67ee..02d6dd1a5f 100644
--- a/org.eclipse.scout.rt.ui.html/src/main/java/org/eclipse/scout/rt/ui/html/json/JsonMessageRequestHandler.java
+++ b/org.eclipse.scout.rt.ui.html/src/main/java/org/eclipse/scout/rt/ui/html/json/JsonMessageRequestHandler.java
@@ -11,6 +11,7 @@
package org.eclipse.scout.rt.ui.html.json;
import java.io.IOException;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
import javax.servlet.ServletResponse;
@@ -27,6 +28,9 @@ import org.eclipse.scout.rt.platform.config.PlatformConfigProperties.Application
import org.eclipse.scout.rt.platform.context.RunContexts;
import org.eclipse.scout.rt.platform.exception.DefaultExceptionTranslator;
import org.eclipse.scout.rt.platform.exception.PlatformError;
+import org.eclipse.scout.rt.platform.job.IFuture;
+import org.eclipse.scout.rt.platform.job.Jobs;
+import org.eclipse.scout.rt.platform.job.internal.ExecutionSemaphore;
import org.eclipse.scout.rt.platform.resource.MimeType;
import org.eclipse.scout.rt.platform.util.ObjectUtility;
import org.eclipse.scout.rt.platform.util.StringUtility;
@@ -42,6 +46,7 @@ import org.eclipse.scout.rt.ui.html.UiSession;
import org.eclipse.scout.rt.ui.html.json.JsonRequest.RequestType;
import org.eclipse.scout.rt.ui.html.logging.IUiRunContextDiagnostics;
import org.json.JSONObject;
+import org.quartz.SimpleScheduleBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
@@ -367,12 +372,33 @@ public class JsonMessageRequestHandler extends AbstractUiServletRequestHandler {
throw e;
}
sessionStore.registerUiSession(uiSession);
+ startValidationJob(uiSession);
LOG.info("Created new UI session with ID {} in {} ms [maxIdleTime={}s, httpSession.maxInactiveInterval={}s]",
uiSession.getUiSessionId(), StringUtility.formatNanos(System.nanoTime() - startNanos), m_maxUserIdleTime, req.getSession().getMaxInactiveInterval());
return uiSession;
}
+ protected void startValidationJob(final IUiSession uiSession) {
+ LOG.info("Started validation job for UI session with ID {}", uiSession.getUiSessionId());
+ Jobs.schedule(() -> {
+ int idleSeconds = (int) ((System.currentTimeMillis() - uiSession.getLastAccessedTime()) / 1000L);
+ int maxIdleSeconds = m_maxUserIdleTime;
+ LOG.info("Idle time for UI session with ID {}: {} s (maxUserIdleTime={})", uiSession.getUiSessionId(), idleSeconds, maxIdleSeconds);
+ if (idleSeconds > maxIdleSeconds) {
+ LOG.info("UI session with ID {} seems to be idle for {} seconds (maxUserIdleTime={}) -> disposing this session", uiSession.getUiSessionId(), idleSeconds, maxIdleSeconds);
+ IFuture.CURRENT.get().cancel(false);
+ uiSession.dispose();
+ }
+ }, Jobs.newInput()
+ .withRunContext(RunContexts.empty())
+ .withName("UI session validator [id={}]", uiSession.getUiSessionId())
+ .withExecutionSemaphore(BEANS.get(ExecutionSemaphore.class).withPermits(1))
+ .withExecutionTrigger(Jobs.newExecutionTrigger()
+ .withStartIn(1, TimeUnit.MINUTES)
+ .withSchedule(SimpleScheduleBuilder.repeatMinutelyForever())));
+ }
+
/**
* @return <code>true</code> if session is valid, <code>false</code> otherwise
*/

Back to the top