From: <rm...@hy...> - 2007-10-23 16:49:00
|
Author: rmorgan Date: 2007-10-23 09:48:57 -0700 (Tue, 23 Oct 2007) New Revision: 6384 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=6384 Modified: branches/HQ_3_1/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementManagerEJBImpl.java branches/HQ_3_1/src/org/hyperic/hq/measurement/server/session/MeasurementEnabler.java Log: Backport Trav's fixes to the metric enabler to ensure everything occurs in the same txn. (r6324) [merge from trunk] Modified: branches/HQ_3_1/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementManagerEJBImpl.java =================================================================== --- branches/HQ_3_1/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementManagerEJBImpl.java 2007-10-23 15:39:39 UTC (rev 6383) +++ branches/HQ_3_1/src/org/hyperic/hq/measurement/server/session/DerivedMeasurementManagerEJBImpl.java 2007-10-23 16:48:57 UTC (rev 6384) @@ -48,12 +48,17 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hyperic.hq.appdef.server.session.ConfigManagerEJBImpl; +import org.hyperic.hq.appdef.server.session.ResourceCreatedZevent; +import org.hyperic.hq.appdef.server.session.ResourceRefreshZevent; +import org.hyperic.hq.appdef.server.session.ResourceZevent; import org.hyperic.hq.appdef.shared.AppdefEntityID; import org.hyperic.hq.appdef.shared.AppdefEntityNotFoundException; import org.hyperic.hq.appdef.shared.AppdefEntityValue; import org.hyperic.hq.appdef.shared.ConfigFetchException; import org.hyperic.hq.appdef.shared.ConfigManagerLocal; import org.hyperic.hq.appdef.shared.InvalidConfigException; +import org.hyperic.hq.authz.server.session.AuthzSubjectManagerEJBImpl; +import org.hyperic.hq.authz.shared.AuthzSubjectManagerLocal; import org.hyperic.hq.authz.shared.AuthzSubjectValue; import org.hyperic.hq.authz.shared.PermissionException; import org.hyperic.hq.common.SystemException; @@ -349,11 +354,50 @@ } /** + * Handle events from the {@link MeasurementEnabler}. This method + * is required to place the operation within a transaction (and session) + * * @ejb:interface-method */ - public List createMeasurements(AuthzSubjectValue subject, - AppdefEntityID id, Integer[] templates, - long[] intervals, ConfigResponse props) + public void handleCreateRefreshEvents(List events) { + ConfigManagerLocal cm = ConfigManagerEJBImpl.getOne(); + AuthzSubjectManagerLocal aman = AuthzSubjectManagerEJBImpl.getOne(); + + for (Iterator i=events.iterator(); i.hasNext(); ) { + ResourceZevent z = (ResourceZevent)i.next(); + AuthzSubjectValue subject = z.getAuthzSubjectValue(); + AppdefEntityID id = z.getAppdefEntityID(); + boolean isCreate, isRefresh; + + isCreate = z instanceof ResourceCreatedZevent; + isRefresh = z instanceof ResourceRefreshZevent; + + try { + // Handle reschedules for when agents are updated. + if (isRefresh) { + log.info("Refreshing metric schedule for [" + id + "]"); + reschedule(id); + continue; + } + + // For either create or update events, schedule the default + // metrics + if (getEnabledMetricsCount(subject, id) == 0) { + log.info("Enabling default metrics for [" + id + "]"); + enableDefaultMetrics(subject, id); + } + } catch(Exception e) { + log.warn("Unable to enable default metrics", e); + } + } + } + + /** + * @ejb:interface-method + */ + public List createMeasurements(AuthzSubjectValue subject, AppdefEntityID id, + Integer[] templates, long[] intervals, + ConfigResponse props) throws PermissionException, MeasurementCreateException, TemplateNotFoundException { Modified: branches/HQ_3_1/src/org/hyperic/hq/measurement/server/session/MeasurementEnabler.java =================================================================== --- branches/HQ_3_1/src/org/hyperic/hq/measurement/server/session/MeasurementEnabler.java 2007-10-23 15:39:39 UTC (rev 6383) +++ branches/HQ_3_1/src/org/hyperic/hq/measurement/server/session/MeasurementEnabler.java 2007-10-23 16:48:57 UTC (rev 6384) @@ -25,56 +25,14 @@ package org.hyperic.hq.measurement.server.session; -import java.util.Iterator; import java.util.List; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.hyperic.hq.appdef.server.session.ResourceUpdatedZevent; -import org.hyperic.hq.appdef.server.session.ResourceZevent; -import org.hyperic.hq.appdef.server.session.ResourceRefreshZevent; -import org.hyperic.hq.appdef.server.session.ResourceCreatedZevent; -import org.hyperic.hq.appdef.shared.AppdefEntityID; -import org.hyperic.hq.authz.shared.AuthzSubjectValue; -import org.hyperic.hq.measurement.shared.DerivedMeasurementManagerLocal; import org.hyperic.hq.zevents.ZeventListener; class MeasurementEnabler implements ZeventListener { - private static Log _log = LogFactory.getLog(MeasurementEnabler.class); - - public void processEvents(List events) { - DerivedMeasurementManagerLocal dm = - DerivedMeasurementManagerEJBImpl.getOne(); - - for (Iterator i=events.iterator(); i.hasNext(); ) { - ResourceZevent z = (ResourceZevent)i.next(); - AuthzSubjectValue subject = z.getAuthzSubjectValue(); - AppdefEntityID id = z.getAppdefEntityID(); - boolean isCreate, isUpdate, isRefresh; - - isCreate = z instanceof ResourceCreatedZevent; - isUpdate = z instanceof ResourceUpdatedZevent; - isRefresh = z instanceof ResourceRefreshZevent; - - try { - // Handle reschedules for when agents are updated. - if (isRefresh) { - _log.info("Refreshing metric schedule for [" + id + "]"); - dm.reschedule(id); - continue; - } - - // For either create or update events, schedule the default - // metrics - if (dm.getEnabledMetricsCount(subject, id) == 0) { - _log.info("Enabling default metrics for [" + id + "]"); - dm.enableDefaultMetrics(subject, id); - } - } catch(Exception e) { - _log.warn("Unable to enable default metrics", e); - } - } + public void processEvents(List e) { + DerivedMeasurementManagerEJBImpl.getOne().handleCreateRefreshEvents(e); } } |