import org.simantics.graph.diff.Diff;
import org.simantics.graph.diff.TransferableGraphDelta1;
import org.simantics.internal.Activator;
+import org.simantics.internal.TimedSessionCache;
import org.simantics.internal.startup.StartupExtensions;
import org.simantics.layer0.Layer0;
import org.simantics.operation.Layer0X;
import org.simantics.utils.datastructures.Pair;
import org.simantics.utils.logging.TimeLogger;
import org.simantics.utils.strings.EString;
+import org.simantics.utils.threads.ExecutorWorker;
+import org.simantics.utils.threads.ThreadUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** Session specific bindings */
public SimanticsBindings simanticsBindings;
- public SimanticsBindings simanticsBindings2;
public Thread mainThread;
Simantics.setSessionContext(sessionContext);
// 1. Put ResourceBinding that throws an exception to General Bindings
- simanticsBindings = new SimanticsBindings( null );
+ simanticsBindings = new SimanticsBindings();
Bindings.classBindingFactory.addFactory( simanticsBindings );
-
- // 2. Create session-specific second Binding context (Databoard) and
- // put that to Session as a service
Session session = sessionContext.getSession();
- Databoard sessionDataboard = new Databoard();
- session.registerService(Databoard.class, sessionDataboard);
- simanticsBindings2 = new SimanticsBindings( session );
- sessionDataboard.classBindingFactory.addFactory( simanticsBindings2 );
+ session.registerService(Databoard.class, Bindings.databoard);
// Register datatype bindings
Bindings.defaultBindingFactory.getRepository().put(RGB.Integer.BINDING.type(), RGB.Integer.BINDING);
}
progress.worked(10);
+ // NOP at the moment
+ TimedSessionCache.close();
+
+ progress.subTask("Thread pools");
+ ThreadUtils.shutdown();
+ ExecutorWorker.shutdown();
+ progress.worked(5);
+
running = false;
progress.subTask("Close Database Session");
- Databoard databoard = null;
if (sessionContext != null) {
Session s = sessionContext.peekSession();
if (s != null) {
- databoard = s.peekService(Databoard.class);
-
progress.subTask("Flushing Index Caches");
try {
Simantics.flushIndexCaches(progress.newChild(20), s);
Bindings.classBindingFactory.removeFactory( simanticsBindings );
simanticsBindings = null;
}
- if (databoard != null) {
- if (simanticsBindings2 != null) {
- databoard.classBindingFactory.removeFactory( simanticsBindings2 );
- simanticsBindings2 = null;
- }
- databoard.clear();
- }
// Make sure Simantics clipboard doesn't store unwanted session data references.
Simantics.setClipboard(new SimanticsClipboardImpl());
- progress.worked(30);
+ progress.worked(50);
session = null;
projectResource = null;
}
progress.worked(10);
+ progress.subTask("Clear index status");
+ try {
+ // Everything ok, clear index dirty state.
+ DatabaseIndexing.clearAllDirty();
+ } catch (IOException e) {
+ LOGGER.error("Problems encountered while refreshing database index states, see exception for details.", e);
+ }
+ progress.worked(5);
+
if (clearTemporaryFiles) {
progress.subTask("Clearing Workspace Temporary Directory");
try {