+ 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 = 60 * 60 * 1000;// 1h
+ janitorTimer.schedule(new TimerTask() {
+
+ @Override
+ public void run() {
+ Iterator<WeakReference<SwtAppUi>> uiRefs = managedUis.values().iterator();
+ refs: while (uiRefs.hasNext()) {
+ WeakReference<SwtAppUi> uiRef = uiRefs.next();
+ SwtAppUi ui = uiRef.get();
+ if (ui == null) {
+ if (log.isTraceEnabled())
+ log.warn("Unreferenced UI in " + appPid + ", removing it");
+ uiRefs.remove();
+ continue refs;
+ }
+ if (!ui.isDisposed() && !ui.getDisplay().isDisposed()) {
+ ui.getDisplay().asyncExec(() -> ui.disposeIfTimedout());
+ }
+ }
+ if (log.isTraceEnabled())
+ log.trace(managedUis.size() + " UIs being managed by app " + appPid);
+ }
+ }, janitorPeriod, janitorPeriod);