import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
// TODO does it make sense to accept that?
appPid = "<unknown>";
}
- if (log.isDebugEnabled())
- log.info("Argeo Suite App " + appPid + " started");
-
Objects.requireNonNull(contentRepository, "Content repository must be provided");
Objects.requireNonNull(appUserState, "App user state must be provided");
-
- long janitorPeriod = 12 * 60 * 60 * 1000;// 12h
+
+ long janitorPeriod = 60 * 60 * 1000;// 1h
janitorTimer.schedule(new TimerTask() {
@Override
public void run() {
- refs: for (WeakReference<SwtAppUi> uiRef : managedUis.values()) {
- SwtAppUi ui = uiRef.get();
- if (ui == null)
- continue refs;
- ui.disposeIfTimedout();
+ try {
+ Iterator<Map.Entry<String, WeakReference<SwtAppUi>>> uiRefs = managedUis.entrySet().iterator();
+ refs: while (uiRefs.hasNext()) {
+ Map.Entry<String, WeakReference<SwtAppUi>> entry = uiRefs.next();
+ String uiUuid = entry.getKey();
+ WeakReference<SwtAppUi> uiRef = entry.getValue();
+ SwtAppUi ui = uiRef.get();
+ if (ui == null) {
+ if (log.isTraceEnabled())
+ log.warn("Unreferenced UI " + uiUuid + " in " + appPid + ", removing it");
+ uiRefs.remove();
+ continue refs;
+ }
+ if (!ui.isDisposed() && !ui.getDisplay().isDisposed()) {
+ if (ui.isTimedOut()) {
+ if (log.isTraceEnabled())
+ log.trace("Killing timed-out UI " + uiUuid + " in " + appPid);
+ UiContext.killDisplay(ui.getDisplay());
+ }
+ } else {
+ if (log.isTraceEnabled())
+ log.warn("Disposed UI " + uiUuid + " still in " + appPid + ", removing it");
+ uiRefs.remove();
+ }
+ }
+ if (log.isTraceEnabled())
+ log.trace(managedUis.size() + " UIs being managed by app " + appPid);
+ } catch (Exception e) {
+ e.printStackTrace();
}
- if (log.isDebugEnabled())
- log.debug(managedUis.size() + " UIs being managed by app " + appPid);
}
}, janitorPeriod, janitorPeriod);
+ if (log.isDebugEnabled())
+ log.info("Argeo Suite App " + appPid + " started");
}
public void stop(Map<String, Object> properties) {
CmsSwtUtils.registerCmsTheme(uiParent.getShell(), theme);
SwtAppUi argeoSuiteUi = new SwtAppUi(uiParent, SWT.INHERIT_DEFAULT);
// TODO make timeout configurable
- argeoSuiteUi.setUiTimeout(12 * 60 * 60 * 1000);// 12 hours
+ argeoSuiteUi.setUiTimeout(6 * 60 * 60 * 1000);// 6 hours
String uid = cmsView.getUid();
argeoSuiteUi.addDisposeListener(new CleanUpUi(uid));
managedUis.put(uid, new WeakReference<>(argeoSuiteUi));