import java.util.concurrent.ConcurrentHashMap;
import org.simantics.db.ReadGraph;
+import org.simantics.db.WriteGraph;
import org.simantics.db.common.request.ParametrizedPrimitiveRead;
import org.simantics.db.exception.DatabaseException;
import org.simantics.db.layer0.variable.NodeSupport;
if(realm != null) {
REALMS.put(key, realm);
} else {
- REALMS.remove(key);
+ StandardRealm<Node, Engine> removedRealm = REALMS.remove(key);
+ if (removedRealm != null)
+ removedRealm.close();
}
Listener<StandardRealm<Node,Engine>> listener = getOrDisposeListener(key);
if(listener != null) {
protected abstract Engine createEngine(ReadGraph graph, String id) throws DatabaseException;
protected abstract StandardRealm<Node,Engine> createRealm(Engine engine, String id);
- public void removeRealm(String id) {
+ public void removeRealm(WriteGraph graph, String id) throws DatabaseException {
modifyRealms(id, null);
+ // remove listeners from this realm
+ realmListeners.remove(id);
// if node support has been created remove it as well
- SUPPORTS.remove(id);
+ NodeSupport<Node> support = SUPPORTS.remove(id);
+ if (support != null)
+ support.dispose();
}
public Collection<String> getRealms() {