Author: alexdma
Date: Fri Jul 1 12:50:02 2011
New Revision: 1141923
URL: http://svn.apache.org/viewvc?rev=1141923&view=rev
Log:
STANBOL-247 :
- Session management methods are synchronized
- destroySession() on null session logs warnings instead of throwing exceptions
Modified:
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/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=1141923&r1=1141922&r2=1141923&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
Fri Jul 1 12:50:02 2011
@@ -28,8 +28,7 @@ import org.slf4j.LoggerFactory;
/**
*
- * Calls to <code>getSessionListeners()</code> return a {@link Set} of
- * listeners.
+ * Calls to <code>getSessionListeners()</code> return a {@link Set} of
listeners.
*
* TODO: implement storage (using persistence layer).
*
@@ -38,246 +37,225 @@ import org.slf4j.LoggerFactory;
*/
public class SessionManagerImpl implements SessionManager {
- private Map<IRI, Session> sessionsByID;
+ private Map<IRI,Session> sessionsByID;
- protected Set<SessionListener> listeners;
+ protected Set<SessionListener> listeners;
- protected Logger log = LoggerFactory.getLogger(getClass());
+ protected Logger log = LoggerFactory.getLogger(getClass());
- protected SessionIDGenerator idgen;
+ protected SessionIDGenerator idgen;
- protected ScopeRegistry scopeRegistry;
-
- protected ClerezzaOntologyStorage store;
-
- public SessionManagerImpl(IRI baseIri, ScopeRegistry scopeRegistry,
ClerezzaOntologyStorage store) {
- idgen = new TimestampedSessionIDGenerator(baseIri);
- listeners = new HashSet<SessionListener>();
- sessionsByID = new HashMap<IRI, Session>();
- this.scopeRegistry = scopeRegistry;
- this.store = store;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- *
eu.iksproject.kres.api.manager.session.SessionManager#addSessionListener
- * (eu.iksproject.kres.api.manager.session.SessionListener)
- */
- @Override
- public void addSessionListener(SessionListener listener) {
- listeners.add(listener);
- }
-
-
- /*
- * (non-Javadoc)
- *
- * @see
- *
eu.iksproject.kres.api.manager.session.SessionManager#clearSessionListeners
- * ()
- */
- @Override
- public void clearSessionListeners() {
- listeners.clear();
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * eu.iksproject.kres.api.manager.session.SessionManager#createSession()
- */
- @Override
- public Session createSession() {
- Set<IRI> exclude = getRegisteredSessionIDs();
- Session session = null;
- while (session == null)
- try {
- session =
createSession(idgen.createSessionID(exclude));
- } catch (DuplicateSessionIDException e) {
- exclude.add(e.getDulicateID());
- continue;
- }
- return session;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- *
eu.iksproject.kres.api.manager.session.SessionManager#createSession(org
- * .semanticweb.owlapi.model.IRI)
- */
- @Override
- public Session createSession(IRI sessionID)
- throws DuplicateSessionIDException {
- if (sessionsByID.containsKey(sessionID))
- throw new DuplicateSessionIDException(sessionID);
- Session session = new SessionImpl(sessionID);
- addSession(session);
- fireSessionCreated(session);
- return session;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * eu.iksproject.kres.api.manager.session.SessionManager#destroySession(
- * org.semanticweb.owlapi.model.IRI)
- */
- @Override
- public void destroySession(IRI sessionID) {
- try {
- Session ses = sessionsByID.get(sessionID);
- ses.close();
- if (ses instanceof SessionImpl)
- ((SessionImpl) ses).state = State.ZOMBIE;
- // Make session no longer referenceable
- removeSession(ses);
- fireSessionDestroyed(ses);
- } catch (NonReferenceableSessionException e) {
- log.warn(
- "KReS :: tried to kick a dead horse on
session "
- + sessionID
- + " which was already
in a zombie state.", e);
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * eu.iksproject.kres.api.manager.session.SessionManager#getSession(org.
- * semanticweb.owlapi.model.IRI)
- */
- @Override
- public Session getSession(IRI sessionID) {
- return sessionsByID.get(sessionID);
- }
-
- @Override
- public Set<IRI> getRegisteredSessionIDs() {
- return sessionsByID.keySet();
- }
-
- protected void fireSessionCreated(Session session) {
- SessionEvent e;
- try {
- e = new SessionEvent(session, OperationType.CREATE);
- for (SessionListener l : listeners)
- l.sessionChanged(e);
- } catch (Exception e1) {
- LoggerFactory
- .getLogger(getClass())
- .error(
- "KReS :: Exception
occurred while attempting to fire session creation event for session "
- +
session.getID(), e1);
- return;
- }
-
- }
-
- protected void fireSessionDestroyed(Session session) {
- SessionEvent e;
- try {
- e = new SessionEvent(session, OperationType.KILL);
- for (SessionListener l : listeners)
- l.sessionChanged(e);
- } catch (Exception e1) {
- LoggerFactory
- .getLogger(getClass())
- .error(
- "KReS :: Exception
occurred while attempting to fire session destruction event for session "
- +
session.getID(), e1);
- return;
- }
-
- }
-
- protected void addSession(Session session) {
- sessionsByID.put(session.getID(), session);
- }
-
- protected void removeSession(Session session) {
- IRI id = session.getID();
- Session s2 = sessionsByID.get(id);
- if (session == s2)
- sessionsByID.remove(id);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- *
eu.iksproject.kres.api.manager.session.SessionManager#getSessionListeners
- * ()
- */
- @Override
- public Collection<SessionListener> getSessionListeners() {
- return listeners;
- }
-
- /*
- * (non-Javadoc)
- *
- * TODO : optimize with indexing.
- *
- * @see
- *
eu.iksproject.kres.api.manager.session.SessionManager#getSessionSpaces
- * (org.semanticweb.owlapi.model.IRI)
- */
- @Override
- public Set<SessionOntologySpace> getSessionSpaces(IRI sessionID)
- throws NonReferenceableSessionException {
- Set<SessionOntologySpace> result = new
HashSet<SessionOntologySpace>();
- // Brute force search
- for (OntologyScope scope : scopeRegistry
- .getRegisteredScopes()) {
- SessionOntologySpace space =
scope.getSessionSpace(sessionID);
- if (space != null)
- result.add(space);
- }
- return result;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- *
eu.iksproject.kres.api.manager.session.SessionManager#removeSessionListener
- * (eu.iksproject.kres.api.manager.session.SessionListener)
- */
- @Override
- public void removeSessionListener(SessionListener listener) {
- listeners.remove(listener);
- }
-
- /*
- * (non-Javadoc)
- *
- * TODO : storage not implemented yet
- *
- * @see
- *
eu.iksproject.kres.api.manager.session.SessionManager#storeSession(org
- * .semanticweb.owlapi.model.IRI, java.io.OutputStream)
- */
- @Override
- public void storeSession(IRI sessionID, OutputStream out)
- throws NonReferenceableSessionException,
OWLOntologyStorageException {
- /*
- * For each gession space in the session save all the
ontologies contained in the space.
- */
- for (SessionOntologySpace so : getSessionSpaces(sessionID)){
- for (OWLOntology owlOntology : so.getOntologies()){
-
- store.store(owlOntology);
-
- }
- }
-
- }
+ protected ScopeRegistry scopeRegistry;
+
+ protected ClerezzaOntologyStorage store;
+
+ public SessionManagerImpl(IRI baseIri, ScopeRegistry scopeRegistry,
ClerezzaOntologyStorage store) {
+ idgen = new TimestampedSessionIDGenerator(baseIri);
+ listeners = new HashSet<SessionListener>();
+ sessionsByID = new HashMap<IRI,Session>();
+ this.scopeRegistry = scopeRegistry;
+ this.store = store;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
eu.iksproject.kres.api.manager.session.SessionManager#addSessionListener
+ * (eu.iksproject.kres.api.manager.session.SessionListener)
+ */
+ @Override
+ public void addSessionListener(SessionListener listener) {
+ listeners.add(listener);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
eu.iksproject.kres.api.manager.session.SessionManager#clearSessionListeners ()
+ */
+ @Override
+ public void clearSessionListeners() {
+ listeners.clear();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
eu.iksproject.kres.api.manager.session.SessionManager#createSession()
+ */
+ @Override
+ public Session createSession() {
+ Set<IRI> exclude = getRegisteredSessionIDs();
+ Session session = null;
+ while (session == null)
+ try {
+ session = createSession(idgen.createSessionID(exclude));
+ } catch (DuplicateSessionIDException e) {
+ exclude.add(e.getDulicateID());
+ continue;
+ }
+ return session;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
eu.iksproject.kres.api.manager.session.SessionManager#createSession(org
+ * .semanticweb.owlapi.model.IRI)
+ */
+ @Override
+ public synchronized Session createSession(IRI sessionID) throws
DuplicateSessionIDException {
+ if (sessionsByID.containsKey(sessionID)) throw new
DuplicateSessionIDException(sessionID);
+ Session session = new SessionImpl(sessionID);
+ addSession(session);
+ fireSessionCreated(session);
+ return session;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
eu.iksproject.kres.api.manager.session.SessionManager#destroySession(
+ * org.semanticweb.owlapi.model.IRI)
+ */
+ @Override
+ public synchronized void destroySession(IRI sessionID) {
+ try {
+ Session ses = sessionsByID.get(sessionID);
+ if (ses == null) log.warn(
+ "Tried to destroy nonexisting session {} . Could it have been
previously destroyed?",
+ sessionID);
+ else {
+ ses.close();
+ if (ses instanceof SessionImpl) ((SessionImpl) ses).state =
State.ZOMBIE;
+ // Make session no longer referenceable
+ removeSession(ses);
+ fireSessionDestroyed(ses);
+ }
+ } catch (NonReferenceableSessionException e) {
+ log.warn("KReS :: tried to kick a dead horse on session " +
sessionID
+ + " which was already in a zombie state.", e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
eu.iksproject.kres.api.manager.session.SessionManager#getSession(org.
+ * semanticweb.owlapi.model.IRI)
+ */
+ @Override
+ public Session getSession(IRI sessionID) {
+ return sessionsByID.get(sessionID);
+ }
+
+ @Override
+ public Set<IRI> getRegisteredSessionIDs() {
+ return sessionsByID.keySet();
+ }
+
+ protected void fireSessionCreated(Session session) {
+ SessionEvent e;
+ try {
+ e = new SessionEvent(session, OperationType.CREATE);
+ for (SessionListener l : listeners)
+ l.sessionChanged(e);
+ } catch (Exception e1) {
+ LoggerFactory.getLogger(getClass()).error(
+ "KReS :: Exception occurred while attempting to fire session
creation event for session "
+ + session.getID(), e1);
+ return;
+ }
+
+ }
+
+ protected void fireSessionDestroyed(Session session) {
+ SessionEvent e;
+ try {
+ e = new SessionEvent(session, OperationType.KILL);
+ for (SessionListener l : listeners)
+ l.sessionChanged(e);
+ } catch (Exception e1) {
+ LoggerFactory.getLogger(getClass()).error(
+ "KReS :: Exception occurred while attempting to fire session
destruction event for session "
+ + session.getID(), e1);
+ return;
+ }
+
+ }
+
+ protected synchronized void addSession(Session session) {
+ sessionsByID.put(session.getID(), session);
+ }
+
+ protected synchronized void removeSession(Session session) {
+ IRI id = session.getID();
+ Session s2 = sessionsByID.get(id);
+ if (session == s2) sessionsByID.remove(id);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
eu.iksproject.kres.api.manager.session.SessionManager#getSessionListeners ()
+ */
+ @Override
+ public Collection<SessionListener> getSessionListeners() {
+ return listeners;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * TODO : optimize with indexing.
+ *
+ * @see
eu.iksproject.kres.api.manager.session.SessionManager#getSessionSpaces
+ * (org.semanticweb.owlapi.model.IRI)
+ */
+ @Override
+ public Set<SessionOntologySpace> getSessionSpaces(IRI sessionID) throws
NonReferenceableSessionException {
+ Set<SessionOntologySpace> result = new HashSet<SessionOntologySpace>();
+ // Brute force search
+ for (OntologyScope scope : scopeRegistry.getRegisteredScopes()) {
+ SessionOntologySpace space = scope.getSessionSpace(sessionID);
+ if (space != null) result.add(space);
+ }
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
eu.iksproject.kres.api.manager.session.SessionManager#removeSessionListener
+ * (eu.iksproject.kres.api.manager.session.SessionListener)
+ */
+ @Override
+ public void removeSessionListener(SessionListener listener) {
+ listeners.remove(listener);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * TODO : storage not implemented yet
+ *
+ * @see
eu.iksproject.kres.api.manager.session.SessionManager#storeSession(org
+ * .semanticweb.owlapi.model.IRI, java.io.OutputStream)
+ */
+ @Override
+ public void storeSession(IRI sessionID, OutputStream out) throws
NonReferenceableSessionException,
+
OWLOntologyStorageException {
+ /*
+ * For each gession space in the session save all the ontologies
contained in the space.
+ */
+ for (SessionOntologySpace so : getSessionSpaces(sessionID)) {
+ for (OWLOntology owlOntology : so.getOntologies()) {
+
+ store.store(owlOntology);
+
+ }
+ }
+
+ }
}