diff --git a/component-manager/src/main/java/org/sakaiproject/component/impl/SpringCompMgr.java b/component-manager/src/main/java/org/sakaiproject/component/impl/SpringCompMgr.java index d2d863f..ead054a 100644 --- a/component-manager/src/main/java/org/sakaiproject/component/impl/SpringCompMgr.java +++ b/component-manager/src/main/java/org/sakaiproject/component/impl/SpringCompMgr.java @@ -34,6 +34,7 @@ import org.apache.commons.logging.LogFactory; import org.sakaiproject.component.api.ComponentManager; import org.sakaiproject.util.ComponentsLoader; import org.sakaiproject.util.SakaiApplicationContext; +import org.sakaiproject.util.SakaiComponentEvent; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.ConfigurableApplicationContext; @@ -144,6 +145,7 @@ public class SpringCompMgr implements ComponentManager { try { // get the singletons loaded m_ac.refresh(); + m_ac.publishEvent(new SakaiComponentEvent(this, SakaiComponentEvent.Type.STARTED)); } catch (Throwable t) { M_log.warn(t.getMessage(), t); } @@ -242,6 +244,9 @@ public class SpringCompMgr implements ComponentManager { */ public void close() { m_hasBeenClosed = true; + if(m_ac.isActive()) { + m_ac.publishEvent(new SakaiComponentEvent(this, SakaiComponentEvent.Type.STOPPING)); + } m_ac.close(); } diff --git a/component-manager/src/main/java/org/sakaiproject/util/SakaiComponentEvent.java b/component-manager/src/main/java/org/sakaiproject/util/SakaiComponentEvent.java new file mode 100644 index 0000000..05fcf5b --- /dev/null +++ b/component-manager/src/main/java/org/sakaiproject/util/SakaiComponentEvent.java @@ -0,0 +1,34 @@ +package org.sakaiproject.util; + +import org.springframework.context.ApplicationEvent; + +/** + * Sakai specific events. Listening to these events means you have to bind to spring. + * @author buckett + * + */ +public class SakaiComponentEvent extends ApplicationEvent { + + public static enum Type { + /** + * Event when the component manager has been started. + */ + STARTED, + /** + * Event for just before the component manager is asked to stop. + */ + STOPPING + }; + + private Type type; + + public SakaiComponentEvent(Object source, Type type) { + super(source); + this.type = type; + } + + public Type getType() { + return type; + } + +}