]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/LifecycleSupportImpl.java
Merge branch 'feature/funcwrite'
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / LifecycleSupportImpl.java
index 1d84e228c490e55f2693e8bd7716a1446a597c64..5ab9529a21a2e2ed5684731550f4e0bc93a2cd17 100644 (file)
-package fi.vtt.simantics.procore.internal;\r
-\r
-import java.util.concurrent.CopyOnWriteArrayList;\r
-\r
-import org.simantics.db.SessionManager;\r
-import org.simantics.db.SessionReference;\r
-import org.simantics.db.common.TransactionPolicyRelease;\r
-import org.simantics.db.common.utils.Logger;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.exception.InternalException;\r
-import org.simantics.db.exception.TimeoutException;\r
-import org.simantics.db.impl.query.QueryProcessor;\r
-import org.simantics.db.service.LifecycleSupport;\r
-import org.simantics.db.service.TransactionPolicySupport;\r
-\r
-public class LifecycleSupportImpl implements LifecycleSupport {\r
-\r
-    final private SessionImplSocket session;\r
-    final private CopyOnWriteArrayList<LifecycleListener> listeners = new CopyOnWriteArrayList<LifecycleListener>();\r
-\r
-    LifecycleSupportImpl(SessionImplSocket session) {\r
-        this.session = session;\r
-    }\r
-\r
-    @Override\r
-    public long getId() {\r
-        return session.graphSession.getSessionId();\r
-    }\r
-\r
-    @Override\r
-    public boolean isClosing() {\r
-        return session.state.isClosing();\r
-    }\r
-\r
-    @Override\r
-    public boolean isClosed() {\r
-        return session.state.isClosed();\r
-    }\r
-\r
-    @Override\r
-    final public SessionReference getSessionReference() {\r
-        if (session.graphSession == null)\r
-            return null;\r
-        return session.graphSession.getSessionReference();\r
-    }\r
-\r
-    @Override\r
-    final public SessionManager getSessionManager() {\r
-        return session.sessionManagerImpl;\r
-    }\r
-\r
-    @Override\r
-    public void ping() throws DatabaseException {\r
-        session.graphSession.execute("");\r
-    }\r
-\r
-    @Override\r
-    public void close()\r
-    throws DatabaseException {\r
-        GraphSession graphSession = session.graphSession;\r
-        try {\r
-            this.close(0, false);\r
-        } catch (TimeoutException e) {\r
-            this.close(-1, true);\r
-        } finally {\r
-            if (null != graphSession)\r
-                try {\r
-                    // Graph session expects start and stop.\r
-                    // If we miss stop then server will not know that we disconnected deliberately.\r
-                    graphSession.stop();\r
-                } catch (InternalException e) {\r
-                    Logger.defaultLogError("GraphSession.stop failed.", e);\r
-                }\r
-        }\r
-    }\r
-    @Override\r
-    final public void close(long timeout, boolean force)\r
-    throws DatabaseException {\r
-        session.registerService(TransactionPolicySupport.class, new TransactionPolicyRelease());\r
-        State.WaitStatus status = session.state.waitClosing(timeout);\r
-        switch (status) {\r
-            case IsClosed:\r
-            case IsClosing:\r
-                return;\r
-            case Timeout:\r
-                if (!force)\r
-                    throw new TimeoutException("Close timeout, use force!");\r
-                // Intentionally dropping to next case.\r
-            case CanBeClosed:\r
-                try {\r
-                    QueryProcessor prosessor = session.getQueryProvider2();\r
-                    if (prosessor!=null) prosessor.dispose();\r
-                    session.virtualGraphServerSupport.disposeVirtualGraphs();\r
-                    session.removeTemporaryData();\r
-                    // Release the session from the manager.\r
-                    session.graphSession.close();\r
-                    session.serviceLocator.dispose(); // This will close local sessions created when registering services.\r
-                } finally {\r
-                    session.state.close();\r
-                    session.clusterTable.dispose(); session.clusterTable = null;\r
-                    session.sessionManagerImpl.shutdown(session, null);\r
-                    session.sessionManagerImpl = null;\r
-                    session.user = null;\r
-                    session.graphSession = null;\r
-                }\r
-                break;\r
-            default:\r
-                throw new DatabaseException();\r
-        }\r
-    }\r
-\r
-    @Override\r
-    public void addListener(LifecycleListener listener) {\r
-        listeners.add(listener);\r
-    }\r
-\r
-    @Override\r
-    public void removeListener(LifecycleListener listener) {\r
-        listeners.remove(listener);\r
-    }\r
-\r
-    void fireListeners(LifecycleState newState) {\r
-        for(LifecycleListener listener : listeners) listener.stateChanged(newState);\r
-    }\r
-\r
-}\r
+package fi.vtt.simantics.procore.internal;
+
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.simantics.db.SessionManager;
+import org.simantics.db.SessionReference;
+import org.simantics.db.common.TransactionPolicyRelease;
+import org.simantics.db.common.utils.Logger;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.exception.InternalException;
+import org.simantics.db.exception.TimeoutException;
+import org.simantics.db.impl.query.QueryProcessor;
+import org.simantics.db.service.LifecycleSupport;
+import org.simantics.db.service.TransactionPolicySupport;
+
+public class LifecycleSupportImpl implements LifecycleSupport {
+
+    final private SessionImplSocket session;
+    final private CopyOnWriteArrayList<LifecycleListener> listeners = new CopyOnWriteArrayList<LifecycleListener>();
+
+    LifecycleSupportImpl(SessionImplSocket session) {
+        this.session = session;
+    }
+
+    @Override
+    public long getId() {
+        return session.graphSession.getSessionId();
+    }
+
+    @Override
+    public boolean isClosing() {
+        return session.state.isClosing();
+    }
+
+    @Override
+    public boolean isClosed() {
+        return session.state.isClosed();
+    }
+
+    @Override
+    final public SessionReference getSessionReference() {
+        if (session.graphSession == null)
+            return null;
+        return session.graphSession.getSessionReference();
+    }
+
+    @Override
+    final public SessionManager getSessionManager() {
+        return session.sessionManagerImpl;
+    }
+
+    @Override
+    public void ping() throws DatabaseException {
+        session.graphSession.execute("");
+    }
+
+    @Override
+    public void close()
+    throws DatabaseException {
+        GraphSession graphSession = session.graphSession;
+        try {
+            this.close(0, false);
+        } catch (TimeoutException e) {
+            this.close(-1, true);
+        } finally {
+            if (null != graphSession)
+                try {
+                    // Graph session expects start and stop.
+                    // If we miss stop then server will not know that we disconnected deliberately.
+                    graphSession.stop();
+                } catch (InternalException e) {
+                    Logger.defaultLogError("GraphSession.stop failed.", e);
+                }
+        }
+    }
+    @Override
+    final public void close(long timeout, boolean force)
+    throws DatabaseException {
+        session.registerService(TransactionPolicySupport.class, new TransactionPolicyRelease());
+        State.WaitStatus status = session.state.waitClosing(timeout);
+        switch (status) {
+            case IsClosed:
+            case IsClosing:
+                return;
+            case Timeout:
+                if (!force)
+                    throw new TimeoutException("Close timeout, use force!");
+                // Intentionally dropping to next case.
+            case CanBeClosed:
+                try {
+                    QueryProcessor prosessor = session.getQueryProvider2();
+                    if (prosessor!=null) prosessor.dispose();
+                    session.virtualGraphServerSupport.disposeVirtualGraphs();
+                    session.removeTemporaryData();
+                    // Release the session from the manager.
+                    session.graphSession.close();
+                    session.serviceLocator.dispose(); // This will close local sessions created when registering services.
+                } finally {
+                    session.state.close();
+                    session.clusterTable.dispose(); session.clusterTable = null;
+                    session.sessionManagerImpl.shutdown(session, null);
+                    session.sessionManagerImpl = null;
+                    session.user = null;
+                    session.graphSession = null;
+                }
+                break;
+            default:
+                throw new DatabaseException();
+        }
+    }
+
+    @Override
+    public void addListener(LifecycleListener listener) {
+        listeners.add(listener);
+    }
+
+    @Override
+    public void removeListener(LifecycleListener listener) {
+        listeners.remove(listener);
+    }
+
+    void fireListeners(LifecycleState newState) {
+        for(LifecycleListener listener : listeners) listener.stateChanged(newState);
+    }
+
+}