X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.r.scl%2Fsrc%2Forg%2Fsimantics%2Fr%2Fscl%2FRSessionManager.java;h=86c6f9676f36714af117893480045d5aa9948d5c;hb=1fdc8ebae4c0d112bcb2533103d9c15c3f3966cc;hp=8f1a92dc20c2fb8cb12f4269e02a2c4a58fcc9b7;hpb=ec263e9c9a791a178c8af80cfe99bb7561c1b3e3;p=simantics%2Fr.git diff --git a/org.simantics.r.scl/src/org/simantics/r/scl/RSessionManager.java b/org.simantics.r.scl/src/org/simantics/r/scl/RSessionManager.java index 8f1a92d..86c6f96 100644 --- a/org.simantics.r.scl/src/org/simantics/r/scl/RSessionManager.java +++ b/org.simantics.r.scl/src/org/simantics/r/scl/RSessionManager.java @@ -16,11 +16,15 @@ import java.util.concurrent.ConcurrentHashMap; import org.rosuda.REngine.Rserve.RConnection; import org.rosuda.REngine.Rserve.RserveException; +import org.simantics.db.layer0.variable.NodeSupport; import org.simantics.scl.runtime.function.Function; public class RSessionManager { static ConcurrentHashMap CONNECTIONS = new ConcurrentHashMap(); + + static ConcurrentHashMap> SUPPORTS = + new ConcurrentHashMap>(); public static RSession getSession(String id) { // CONNECTIONS is ConcurrentHashMap so no synchronization is needed here @@ -65,4 +69,16 @@ public class RSessionManager { return managedConnection; } } + + public static NodeSupport getOrCreateNodeSupport(String id) { + synchronized(SUPPORTS) { + NodeSupport result = SUPPORTS.get(id); + if(result == null) { + RSession session = getSession(id); + result = new NodeSupport(session.getNodeManager()); + SUPPORTS.put(id, result); + } + return result; + } + } }