/**
  * Return availability of this resource
  *
  * @see org.rhq.core.pluginapi.inventory.ResourceComponent#getAvailability()
  */
 @Override
 public AvailabilityType getAvailability() {
   boolean trace = log.isTraceEnabled();
   EmsConnection conn = getConnection();
   try {
     conn.refresh();
     EmsBean bean = queryCacheBean();
     if (bean != null && bean.getAttribute("CacheStatus").getValue().equals("RUNNING")) {
       bean.refreshAttributes();
       if (trace)
         log.trace(
             "Cache "
                 + cacheName
                 + " within "
                 + cacheManagerName
                 + " cache manager is running and attributes could be refreshed, so it's up.");
       return AvailabilityType.UP;
     }
     if (trace)
       log.trace(
           "Cache status for "
               + cacheName
               + " within "
               + cacheManagerName
               + " cache manager is anything other than running, so it's down.");
     return AvailabilityType.DOWN;
   } catch (Exception e) {
     if (trace)
       log.trace("There was an exception checking availability, so cache status is down.", e);
     return AvailabilityType.DOWN;
   }
 }
 /**
  * Gather measurement data
  *
  * @see
  *     org.rhq.core.pluginapi.measurement.MeasurementFacet#getValues(org.rhq.core.domain.measurement.MeasurementReport,
  *     java.util.Set)
  */
 @Override
 public void getValues(MeasurementReport report, Set<MeasurementScheduleRequest> metrics) {
   boolean trace = log.isTraceEnabled();
   if (trace) log.trace("Get values metrics");
   for (MeasurementScheduleRequest req : metrics) {
     if (trace) log.trace("Inspect metric " + req);
     String metric = req.getName();
     try {
       EmsBean bean = queryComponentBean(metric);
       if (bean != null) {
         if (trace) log.trace("Retrieved mbean with name " + bean.getBeanName());
         bean.refreshAttributes();
         String attName = metric.substring(metric.indexOf(".") + 1);
         EmsAttribute att = bean.getAttribute(attName);
         // Attribute values are of various data types
         if (att != null) {
           Object o = att.getValue();
           Class<?> attrType = att.getTypeClass();
           DataType type = req.getDataType();
           if (type == DataType.MEASUREMENT) {
             if (o != null) {
               MeasurementDataNumeric res = constructNumericMeasure(attrType, o, req);
               if (res != null) report.addData(res);
             } else {
               if (log.isDebugEnabled())
                 log.debug("Metric (" + req.getName() + ") has null value, do not add to report");
             }
           } else if (type == DataType.TRAIT) {
             String value = (String) o;
             if (trace) log.trace("Metric (" + req.getName() + ") is trait with value " + value);
             MeasurementDataTrait res = new MeasurementDataTrait(req, value);
             report.addData(res);
           }
         } else {
           if (log.isWarnEnabled()) {
             log.warn("Attribute " + attName + " not found");
           }
         }
       }
     } catch (Exception e) {
       if (log.isWarnEnabled()) {
         log.warn("getValues failed for " + metric, e);
       }
     }
   }
 }