You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by al...@apache.org on 2012/07/23 19:03:11 UTC

svn commit: r1364712 - in /incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session: SessionImpl.java SessionManagerImpl.java

Author: alexdma
Date: Mon Jul 23 17:03:11 2012
New Revision: 1364712

URL: http://svn.apache.org/viewvc?rev=1364712&view=rev
Log:
Fixed: sessions were not keeping track of attached scopes that were deleted. Made SessionManagerImpl a listener that react to unregistration/deactivation events (STANBOL-571) (TODO make attachments restorable when a scope is re-activated).

Modified:
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionImpl.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionManagerImpl.java

Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionImpl.java?rev=1364712&r1=1364711&r2=1364712&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionImpl.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionImpl.java Mon Jul 23 17:03:11 2012
@@ -105,6 +105,7 @@ public class SessionImpl extends Abstrac
 
     @Override
     public void detachScope(String scopeId) {
+        if (!attachedScopes.contains(scopeId)) return;
         attachedScopes.remove(scopeId);
         fireScopeDetached(scopeId);
     }

Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionManagerImpl.java?rev=1364712&r1=1364711&r2=1364712&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionManagerImpl.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionManagerImpl.java Mon Jul 23 17:03:11 2012
@@ -31,11 +31,14 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
+import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
 import org.apache.stanbol.ontologymanager.ontonet.api.OfflineConfiguration;
 import org.apache.stanbol.ontologymanager.ontonet.api.OntologyNetworkConfiguration;
 import org.apache.stanbol.ontologymanager.ontonet.api.collector.OntologyCollectorListener;
 import org.apache.stanbol.ontologymanager.ontonet.api.io.GraphSource;
 import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyProvider;
+import org.apache.stanbol.ontologymanager.ontonet.api.scope.OntologyScope;
+import org.apache.stanbol.ontologymanager.ontonet.api.scope.ScopeEventListener;
 import org.apache.stanbol.ontologymanager.ontonet.api.session.DuplicateSessionIDException;
 import org.apache.stanbol.ontologymanager.ontonet.api.session.NonReferenceableSessionException;
 import org.apache.stanbol.ontologymanager.ontonet.api.session.Session;
@@ -63,7 +66,7 @@ import org.slf4j.LoggerFactory;
  */
 @Component(immediate = true, metatype = true)
 @Service(SessionManager.class)
-public class SessionManagerImpl implements SessionManager {
+public class SessionManagerImpl implements SessionManager, ScopeEventListener {
 
     public static final String _ID_DEFAULT = "session";
     public static final int _MAX_ACTIVE_SESSIONS_DEFAULT = -1;
@@ -88,6 +91,9 @@ public class SessionManagerImpl implemen
     private int maxSessions;
 
     @Reference
+    private ONManager onManager;
+
+    @Reference
     private OfflineConfiguration offline;
 
     @Reference
@@ -119,8 +125,23 @@ public class SessionManagerImpl implemen
     public SessionManagerImpl(OntologyProvider<?> ontologyProvider,
                               OfflineConfiguration offline,
                               Dictionary<String,Object> configuration) {
+        this(ontologyProvider, null, offline, configuration);
+    }
+
+    /**
+     * To be invoked by non-OSGi environments.
+     * 
+     * @param the
+     *            ontology provider that will store and provide ontologies for this session manager.
+     * @param configuration
+     */
+    public SessionManagerImpl(OntologyProvider<?> ontologyProvider,
+                              ONManager onManager,
+                              OfflineConfiguration offline,
+                              Dictionary<String,Object> configuration) {
         this();
         this.ontologyProvider = ontologyProvider;
+        this.onManager = onManager;
         this.offline = offline;
         try {
             activate(configuration);
@@ -184,6 +205,8 @@ public class SessionManagerImpl implemen
         if (ontologyProvider instanceof SessionListener) this
                 .addSessionListener((SessionListener) ontologyProvider);
 
+        if (onManager != null) onManager.addScopeRegistrationListener(this);
+
         // Rebuild sessions
         rebuildSessions();
 
@@ -419,4 +442,25 @@ public class SessionManagerImpl implemen
                 "Not necessary. Session content is always stored by default in the current implementation.");
     }
 
+    @Override
+    public void scopeActivated(OntologyScope scope) {}
+
+    @Override
+    public void scopeCreated(OntologyScope scope) {}
+
+    @Override
+    public void scopeDeactivated(OntologyScope scope) {
+        for (String sid : getRegisteredSessionIDs())
+            getSession(sid).detachScope(scope.getID());
+    }
+
+    @Override
+    public void scopeUnregistered(OntologyScope scope) {
+        for (String sid : getRegisteredSessionIDs())
+            getSession(sid).detachScope(scope.getID());
+    }
+
+    @Override
+    public void scopeRegistered(OntologyScope scope) {}
+
 }