From: <rm...@hy...> - 2009-12-02 01:49:57
|
Author: rmorgan Date: 2009-12-01 17:49:42 -0800 (Tue, 01 Dec 2009) New Revision: 14020 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=14020 Modified: branches/HQ_4_2_0_PATCH/src/org/hyperic/hq/appdef/server/session/ConfigManagerEJBImpl.java Log: On configuration updates to resources make sure update events are sent out for all children to ensure metric properties are up-to-date. [HHQ-3559] [merge from 4_2] Modified: branches/HQ_4_2_0_PATCH/src/org/hyperic/hq/appdef/server/session/ConfigManagerEJBImpl.java =================================================================== --- branches/HQ_4_2_0_PATCH/src/org/hyperic/hq/appdef/server/session/ConfigManagerEJBImpl.java 2009-12-02 01:45:22 UTC (rev 14019) +++ branches/HQ_4_2_0_PATCH/src/org/hyperic/hq/appdef/server/session/ConfigManagerEJBImpl.java 2009-12-02 01:49:42 UTC (rev 14020) @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; +import java.util.List; import javax.ejb.CreateException; import javax.ejb.FinderException; @@ -560,12 +561,37 @@ } if (wasUpdated) { - // XXX: Need to cascade and send events for each resource that may - // have been affected by this config update. if (sendConfigEvent) { - ResourceUpdatedZevent event = - new ResourceUpdatedZevent(subject, appdefID); - ZeventManager.getInstance().enqueueEventAfterCommit(event); + List events = new ArrayList(); + events.add(new ResourceUpdatedZevent(subject, appdefID)); + + if (appdefID.isPlatform()) { + try { + Platform p = getPlatformManagerLocal().findPlatformById(appdefID.getId()); + for (Iterator i = p.getServers().iterator(); i.hasNext() ;) { + Server s = (Server)i.next(); + events.add(new ResourceUpdatedZevent(subject, s.getEntityId())); + for (Iterator it = s.getServices().iterator(); it.hasNext();) { + Service svc = (Service)i.next(); + events.add(new ResourceUpdatedZevent(subject, svc.getEntityId())); + } + } + } catch (org.hyperic.hq.appdef.shared.PlatformNotFoundException e) { + log.warn("Error sending config event for: " + appdefID, e); + } + } else if (appdefID.isServer()) { + try { + Server s = getServerManagerLocal().findServerById(appdefID.getId()); + for (Iterator i = s.getServices().iterator(); i.hasNext();) { + Service svc = (Service)i.next(); + events.add(new ResourceUpdatedZevent(subject, svc.getEntityId())); + } + } catch (org.hyperic.hq.appdef.shared.ServerNotFoundException e) { + log.warn("Error sending config event for: " + appdefID, e); + } + } + + ZeventManager.getInstance().enqueueEventsAfterCommit(events); } return appdefID; |