|
From: <rm...@hy...> - 2007-03-13 01:35:36
|
Author: rmorgan Date: 2007-03-12 17:35:22 -0800 (Mon, 12 Mar 2007) New Revision: 3723 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=3723 Modified: trunk/src/org/hyperic/hq/events/ext/RegisteredTriggers.java Log: Migrate RegisteredTriggers caches to ehcache. Modified: trunk/src/org/hyperic/hq/events/ext/RegisteredTriggers.java =================================================================== --- trunk/src/org/hyperic/hq/events/ext/RegisteredTriggers.java 2007-03-13 01:20:54 UTC (rev 3722) +++ trunk/src/org/hyperic/hq/events/ext/RegisteredTriggers.java 2007-03-13 01:35:22 UTC (rev 3723) @@ -37,21 +37,22 @@ import java.util.Hashtable; import java.util.Iterator; import java.util.Map; +import java.util.HashMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hyperic.hq.application.HQApp; import org.hyperic.hq.common.SystemException; import org.hyperic.hq.events.AbstractEvent; -import org.hyperic.hq.events.ActionExecuteException; -import org.hyperic.hq.events.EventTypeException; import org.hyperic.hq.events.InvalidTriggerDataException; import org.hyperic.hq.events.server.session.RegisteredTrigger; import org.hyperic.hq.events.server.session.TriggerChangeCallback; import org.hyperic.hq.events.shared.RegisteredTriggerManagerLocal; import org.hyperic.hq.events.shared.RegisteredTriggerManagerUtil; import org.hyperic.hq.events.shared.RegisteredTriggerValue; -import org.hyperic.util.collection.IntHashMap; +import net.sf.ehcache.Cache; +import net.sf.ehcache.CacheManager; +import net.sf.ehcache.Element; public class RegisteredTriggers { private final static Log log = @@ -60,18 +61,16 @@ public static final Integer KEY_ALL = new Integer(0); private static RegisteredTriggers singleton = new RegisteredTriggers(); - - /** Holds value of property initialized. */ + private boolean initialized = false; - - /** Holds value of property keyedByType. */ - private Hashtable keyedByType = new Hashtable(); - - /** Holds value of property keyedByTrigger. */ - private Hashtable keyedByTrigger = new Hashtable(); - - /** Creates a new instance of RegisteredTriggers */ + + private Cache _keyedByType; + private Cache _keyedById; + private RegisteredTriggers() { + _keyedByType = CacheManager.getInstance().getCache("TriggersByType"); + _keyedById = + CacheManager.getInstance().getCache("TriggerById"); } /** Initializes the cache. @@ -89,7 +88,7 @@ RegisteredTriggerManagerLocal rtm = RegisteredTriggerManagerUtil.getLocalHome().create(); - HashSet toRemove = new HashSet(this.keyedByTrigger.keySet()); + HashSet toRemove = new HashSet(_keyedById.getKeys()); Collection triggers = rtm.getAllTriggers(); for (Iterator i = triggers.iterator(); i.hasNext();) { @@ -146,23 +145,26 @@ Map triggers = new Hashtable(); // Look up by Event type - if (!keyedByType.containsKey(eventType)) { - if (create) - keyedByType.put(eventType, new IntHashMap()); - else + if (!_keyedByType.isKeyInCache(eventType)) { + if (create) { + Element el = new Element(eventType, new HashMap()); + _keyedByType.put(el); + } else { return triggers; + } } // Lookup by Instance - IntHashMap keyedByInstance = (IntHashMap) keyedByType.get(eventType); - if (!keyedByInstance.containsKey(instance.intValue())) { + Element el = _keyedByType.get(eventType); + HashMap keyedByInstance = (HashMap)el.getObjectValue(); + if (!keyedByInstance.containsKey(instance)) { if (create) - keyedByInstance.put(instance.intValue(), triggers); + keyedByInstance.put(instance, triggers); else return triggers; } - return (Map) keyedByInstance.get(instance.intValue()); + return (Map) keyedByInstance.get(instance); } public static Collection getInterestedTriggers(AbstractEvent event) { @@ -192,7 +194,7 @@ } public static boolean isTriggerInterested(AbstractEvent event) { - Map trigMap = null; + Map trigMap; // If the event happened more than a day ago, does anyone care? final long ONE_DAY = 86400000; @@ -217,7 +219,7 @@ } public static boolean isTriggerRegistered(Integer tid) { - return singleton.getKeyedByTrigger().containsKey(tid); + return singleton.getKeyedById().isKeyInCache(tid); } private void registerTrigger(RegisteredTriggerValue tv) @@ -254,11 +256,12 @@ } // Reverse register the trigger - if (!keyedByTrigger.containsKey(tv.getId())) { - keyedByTrigger.put(tv.getId(), new ArrayList()); + if (!_keyedById.isKeyInCache(tv.getId())) { + Element el = new Element(tv.getId(), new ArrayList()); + _keyedById.put(el); } - ArrayList triggerMaps = - (ArrayList) keyedByTrigger.get(tv.getId()); + Element el = _keyedById.get(tv.getId()); + ArrayList triggerMaps = (ArrayList) el.getObjectValue(); triggerMaps.add(triggers); } } @@ -266,7 +269,11 @@ private void unregisterTrigger(Integer tvId) { // Use the keyedByTrigger table to look up which maps to delete from - ArrayList triggerMaps = (ArrayList) keyedByTrigger.remove(tvId); + Element el = _keyedById.get(tvId); + if (el == null) // Can't unregister + return; + + ArrayList triggerMaps = (ArrayList)el.getObjectValue(); if (triggerMaps == null) // Can't unregister return; @@ -275,39 +282,31 @@ triggers.remove(tvId); } } - - /** Getter for property initialized. - * @return Value of property initialized. - * - */ + public boolean isInitialized() { return this.initialized; } - - /** Setter for property initialized. - * @param initialized New value of property initialized. - * - */ + public void setInitialized(boolean initialized) { this.initialized = initialized; } - + /** Getter for property keyedByType. * @return Value of property keyedByType. * */ - public Hashtable getKeyedByType() { - return this.keyedByType; + public Cache getKeyedByType() { + return _keyedByType; } - + /** Getter for property keyedByTrigger. * @return Value of property keyedByTrigger. * */ - public Hashtable getKeyedByTrigger() { - return this.keyedByTrigger; + public Cache getKeyedById() { + return _keyedById; } - + public class RegisteredTriggersUpdater implements TriggerChangeCallback { public void beforeTriggersDeleted(Collection triggers) { |