List of usage examples for javax.management Notification getUserData
public Object getUserData()
From source file:org.helios.netty.jmx.ThreadPoolFactory.java
/** * {@inheritDoc}/*from w ww . j a va2 s.c om*/ * @see javax.management.NotificationFilter#isNotificationEnabled(javax.management.Notification) */ @Override public boolean isNotificationEnabled(Notification notification) { String notifType = notification.getType(); return (METRIC_NAME_NOTIFICATION.equals(notifType) && notification.getUserData() instanceof Set) || (METRIC_NOTIFICATION.equals(notifType) && notification.getUserData() instanceof JSONObject); }
From source file:org.helios.netty.jmx.ThreadPoolFactory.java
/** * {@inheritDoc}//from w w w . j ava2s . co m * @see javax.management.NotificationListener#handleNotification(javax.management.Notification, java.lang.Object) */ @SuppressWarnings("unchecked") @Override public void handleNotification(Notification notification, Object handback) { String notifType = notification.getType(); if (METRIC_NAME_NOTIFICATION.equals(notifType)) { Set<String> names = (Set<String>) notification.getUserData(); names.addAll(metricNames); } else { addMetrics((JSONObject) notification.getUserData()); } }
From source file:de.iew.spring.integration.JmxTestServiceNotificationListener.java
private String formatNotification(Notification notification) { StringBuilder sb = new StringBuilder(); sb.append("recieved notification class: ").append(notification.getType()); sb.append(", method: ").append(notification.getSource()); sb.append(", sequence: ").append(notification.getSequenceNumber()); sb.append(", timestamp: ").append(notification.getTimeStamp()); sb.append(", data: "); Object userData = notification.getUserData(); String formattedUserData;//w w w . j a v a2 s.co m if (userData == null) { formattedUserData = ""; } else if (userData instanceof String) { formattedUserData = StringUtils.arrayToCommaDelimitedString((Object[]) notification.getUserData()); } else { formattedUserData = userData.toString(); } sb.append(formattedUserData); return sb.toString(); }
From source file:de.iew.spring.integration.SpringIntegrationJmxTest.java
@Test public void testJmxSpringIntegrationWithAuditEventMessage() throws Exception { // Testfix erstellen long timestamp = System.currentTimeMillis(); Authentication authentication = newAnonymousAuthentication(); AuditEventMessage auditEventMessage = new AuditEventMessage(); auditEventMessage.setTimestamp(new Date(timestamp)); auditEventMessage.setPrincipal(authentication.getName()); auditEventMessage.setSeverity(Severity.INFO); auditEventMessage.setMessage("Foo Bar"); // Test durchfhren Map<String, Object> headers = new Hashtable<String, Object>(); GenericMessage<AuditEventMessage> message = new GenericMessage<AuditEventMessage>(auditEventMessage, headers);/* ww w. j a v a 2 s . c o m*/ this.messageChannel.send(message); // Test auswerten /// Etwas warten, bis die Notifications verschickt wurden Thread.sleep(3000); Assert.assertEquals(1, this.springIntegrationTestNotificationListener.getNotifications().size()); Notification notification = this.springIntegrationTestNotificationListener.getNotifications().get(0); Assert.assertEquals(AuditEventMessage.class.getName(), notification.getType()); Assert.assertNull(notification.getMessage()); AuditEventMessage userData = (AuditEventMessage) notification.getUserData(); Assert.assertEquals("Foo Bar", userData.getMessage()); Assert.assertEquals(Severity.INFO, userData.getSeverity()); Assert.assertEquals(new Date(timestamp), userData.getTimestamp()); }
From source file:org.apache.pig.impl.util.SpillableMemoryManager.java
@Override public void handleNotification(Notification n, Object o) { CompositeData cd = (CompositeData) n.getUserData(); MemoryNotificationInfo info = MemoryNotificationInfo.from(cd); // free the amount exceeded over the threshold and then a further half // so if threshold = heapmax/2, we will be trying to free // used - heapmax/2 + heapmax/4 long toFree = 0L; if (n.getType().equals(MemoryNotificationInfo.MEMORY_THRESHOLD_EXCEEDED)) { toFree = info.getUsage().getUsed() - memoryThresholdSize + (long) (memoryThresholdSize * 0.5); //log//from w w w .j ava2s . com String msg = "memory handler call- Usage threshold " + info.getUsage() + ", toFree = " + toFree; if (!firstUsageThreshExceededLogged) { log.info("first " + msg); firstUsageThreshExceededLogged = true; } else { log.debug(msg); } } else { // MEMORY_COLLECTION_THRESHOLD_EXCEEDED CASE toFree = info.getUsage().getUsed() - collectionThresholdSize + (long) (collectionThresholdSize * 0.5); //log String msg = "memory handler call - Collection threshold " + info.getUsage() + ", toFree = " + toFree; if (!firstCollectionThreshExceededLogged) { log.info("first " + msg); firstCollectionThreshExceededLogged = true; } else { log.debug(msg); } } if (toFree < 0) { log.debug("low memory handler returning " + "because there is nothing to free"); return; } // Use a separate spillLock to block multiple handleNotification calls synchronized (spillLock) { synchronized (spillables) { spillablesSR = new LinkedList<SpillablePtr>(); for (Iterator<WeakReference<Spillable>> i = spillables.iterator(); i.hasNext();) { Spillable s = i.next().get(); if (s == null) { i.remove(); continue; } // Create a list with spillable size for stable sorting. Refer PIG-4012 spillablesSR.add(new SpillablePtr(s, s.getMemorySize())); } log.debug("Spillables list size: " + spillablesSR.size()); Collections.sort(spillablesSR, new Comparator<SpillablePtr>() { @Override public int compare(SpillablePtr o1Ref, SpillablePtr o2Ref) { long o1Size = o1Ref.getMemorySize(); long o2Size = o2Ref.getMemorySize(); if (o1Size == o2Size) { return 0; } if (o1Size < o2Size) { return 1; } return -1; } }); // Block new bags from being registered blockRegisterOnSpill = true; } try { long estimatedFreed = 0; int numObjSpilled = 0; boolean invokeGC = false; boolean extraGCCalled = false; boolean isGroupingSpillable = false; for (Iterator<SpillablePtr> i = spillablesSR.iterator(); i.hasNext();) { SpillablePtr sPtr = i.next(); Spillable s = sPtr.get(); // Still need to check for null here, even after we removed // above, because the reference may have gone bad on us // since the last check. if (s == null) { i.remove(); continue; } long toBeFreed = sPtr.getMemorySize(); log.debug("Memorysize = " + toBeFreed + ", spillFilesizethreshold = " + spillFileSizeThreshold + ", gcactivationsize = " + gcActivationSize); // Don't keep trying if the rest of files are too small if (toBeFreed < spillFileSizeThreshold) { log.debug("spilling small files - getting out of memory handler"); break; } isGroupingSpillable = (s instanceof GroupingSpillable); // If single Spillable is bigger than the threshold, // we force GC to make sure we really need to keep this // object before paying for the expensive spill(). // Done at most once per handleNotification. // Do not invoke extraGC for GroupingSpillable. Its size will always exceed // extraGCSpillSizeThreshold and the data is always strong referenced. if (!extraGCCalled && extraGCSpillSizeThreshold != 0 && toBeFreed > extraGCSpillSizeThreshold && !isGroupingSpillable) { log.debug("Single spillable has size " + toBeFreed + "bytes. Calling extra gc()"); // this extra assignment to null is needed so that gc can free the // spillable if nothing else is pointing at it s = null; System.gc(); extraGCCalled = true; // checking again to see if this reference is still valid s = sPtr.get(); if (s == null) { i.remove(); accumulatedFreeSize = 0; invokeGC = false; continue; } } // Unblock registering of new bags temporarily as aggregation // of POPartialAgg requires new record to be loaded. blockRegisterOnSpill = !isGroupingSpillable; long numSpilled; try { numSpilled = s.spill(); } finally { blockRegisterOnSpill = true; } if (numSpilled > 0) { numObjSpilled++; estimatedFreed += toBeFreed; accumulatedFreeSize += toBeFreed; } // This should significantly reduce the number of small files // in case that we have a lot of nested bags if (accumulatedFreeSize > gcActivationSize) { invokeGC = true; } if (estimatedFreed > toFree) { log.debug("Freed enough space - getting out of memory handler"); invokeGC = true; break; } } spillablesSR = null; /* Poke the GC again to see if we successfully freed enough memory */ if (invokeGC) { System.gc(); // now that we have invoked the GC, reset accumulatedFreeSize accumulatedFreeSize = 0; } if (estimatedFreed > 0) { String msg = "Spilled an estimate of " + estimatedFreed + " bytes from " + numObjSpilled + " objects. " + info.getUsage(); ; log.info(msg); } } finally { blockRegisterOnSpill = false; } } }
From source file:net.centro.rtb.monitoringcenter.metrics.system.jvm.GarbageCollectorMetricSet.java
GarbageCollectorMetricSet() {
this.garbageCollectorMXBeans = ManagementFactory.getGarbageCollectorMXBeans();
this.minorGcTimer = new Timer();
this.majorGcTimer = new Timer();
// Determine the location of the gc log file (note that there's not support for rolling gc logs)
String gcLogFilePath = null;//from w w w. jav a2s . c om
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
List<String> inputArguments = runtimeMXBean.getInputArguments();
for (String argument : inputArguments) {
if (argument.startsWith(LOG_GC_JVM_PARAM)) {
gcLogFilePath = argument.substring(LOG_GC_JVM_PARAM.length());
break;
}
}
if (gcLogFilePath != null && !gcLogFilePath.trim().isEmpty()) {
final File gcLogFile = new File(gcLogFilePath);
if (gcLogFile.exists()) {
this.fullCollectionsCounter = new AtomicLong();
this.gcLogTailer = Tailer.create(gcLogFile, new TailerListenerAdapter() {
@Override
public void handle(String line) {
if (line != null && line.contains(FULL_GC_LOG_STRING)) {
fullCollectionsCounter.incrementAndGet();
}
}
}, GC_LOG_FILE_TAIL_DELAY_IN_MILLIS);
}
}
// Attach a listener to the GarbageCollectorMXBeans
this.gcEventListener = new NotificationListener() {
@Override
public void handleNotification(Notification notification, Object handback) {
String notificationType = notification.getType();
if (notificationType.equals(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION)) {
CompositeData compositeData = CompositeData.class.cast(notification.getUserData());
GarbageCollectionNotificationInfo gcNotificationInfo = GarbageCollectionNotificationInfo
.from(compositeData);
if (GC_NOTIFICATION_MINOR_GC_ACTION_STRING.equals(gcNotificationInfo.getGcAction())) {
minorGcTimer.update(gcNotificationInfo.getGcInfo().getDuration(), TimeUnit.MILLISECONDS);
} else if (GC_NOTIFICATION_MAJOR_GC_ACTION_STRING.equals(gcNotificationInfo.getGcAction())) {
majorGcTimer.update(gcNotificationInfo.getGcInfo().getDuration(), TimeUnit.MILLISECONDS);
}
}
}
};
for (final GarbageCollectorMXBean garbageCollectorMXBean : garbageCollectorMXBeans) {
if (NotificationEmitter.class.isInstance(garbageCollectorMXBean)) {
NotificationEmitter emitter = NotificationEmitter.class.cast(garbageCollectorMXBean);
emitter.addNotificationListener(gcEventListener, null, null);
}
}
// Set up metrics
Map<String, Metric> metricsByNames = new HashMap<>();
if (fullCollectionsCounter != null) {
this.fullCollectionsGauge = new Gauge<Long>() {
@Override
public Long getValue() {
return fullCollectionsCounter.get();
}
};
metricsByNames.put("fullCollections", fullCollectionsGauge);
}
metricsByNames.put("majorGcTimer", majorGcTimer);
metricsByNames.put("minorGcTimer", minorGcTimer);
List<GarbageCollectorStatus> garbageCollectorStatuses = new ArrayList<>();
for (final GarbageCollectorMXBean garbageCollectorMXBean : garbageCollectorMXBeans) {
final String garbageCollectorName = garbageCollectorMXBean.getName();
final String garbageCollectorNamespace = MetricNamingUtil.join("collectors",
MetricNamingUtil.sanitize(garbageCollectorName));
final Gauge<Long> collectionsGauge;
if (garbageCollectorMXBean.getCollectionCount() >= 0) {
collectionsGauge = new Gauge<Long>() {
@Override
public Long getValue() {
return garbageCollectorMXBean.getCollectionCount();
}
};
metricsByNames.put(MetricNamingUtil.join(garbageCollectorNamespace, "collections"),
collectionsGauge);
} else {
collectionsGauge = null;
}
final Gauge<Long> totalCollectionDurationInMillisGauge;
if (garbageCollectorMXBean.getCollectionTime() >= 0) {
totalCollectionDurationInMillisGauge = new Gauge<Long>() {
@Override
public Long getValue() {
return garbageCollectorMXBean.getCollectionTime();
}
};
metricsByNames.put(
MetricNamingUtil.join(garbageCollectorNamespace, "totalCollectionDurationInMillis"),
totalCollectionDurationInMillisGauge);
} else {
totalCollectionDurationInMillisGauge = null;
}
garbageCollectorStatuses.add(new GarbageCollectorStatus() {
@Override
public String getName() {
return garbageCollectorName;
}
@Override
public Gauge<Long> getCollectionsGauge() {
return collectionsGauge;
}
@Override
public Gauge<Long> getTotalCollectionDurationInMillisGauge() {
return totalCollectionDurationInMillisGauge;
}
});
}
this.garbageCollectorStatuses = garbageCollectorStatuses;
this.metricsByNames = metricsByNames;
}
From source file:org.apache.geode.admin.jmx.internal.StatisticResourceJmxImpl.java
/** * Handles notification to refresh. Reacts by refreshing the values of this SystemMember's * ConfigurationParamaters. Any other notification is ignored. Given notification is handled only * if there is any JMX client connected to the system. * <p>/*ww w . ja v a 2s .com*/ * TODO: investigate use of NotificationFilter instead of explicit check... * * @param notification the JMX notification being received * @param hb handback object is unused */ public void handleNotification(Notification notification, Object hb) { AdminDistributedSystemJmxImpl adminDSJmx = (AdminDistributedSystemJmxImpl) this.member .getDistributedSystem(); String typeStatResourceStats = RefreshNotificationType.STATISTIC_RESOURCE_STATISTICS.getType(); if (typeStatResourceStats.equals(notification.getType()) && getMBeanName().equals(notification.getUserData()) && !adminDSJmx.isRmiClientCountZero()) { try { refresh(); } catch (org.apache.geode.admin.AdminException e) { logger.warn(e.getMessage(), e); } catch (org.apache.geode.admin.OperationCancelledException e) { // underlying resource is no longer reachable by remote admin logger.warn(e.getMessage(), e); _setRefreshInterval(0); } catch (CancelException e) { // shutting down - okay to ignore } catch (java.lang.RuntimeException e) { logger.debug(e.getMessage(), e); // dead in water, print, and then ignore _setRefreshInterval(0); // zero out to avoid more exceptions } catch (VirtualMachineError err) { SystemFailure.initiateFailure(err); // If this ever returns, rethrow the error. We're poisoned // now, so don't let this thread continue. throw err; } catch (java.lang.Error e) { // Whenever you catch Error or Throwable, you must also // catch VirtualMachineError (see above). However, there is // _still_ a possibility that you are dealing with a cascading // error condition, so you also need to check to see if the JVM // is still usable: SystemFailure.checkFailure(); logger.error(e.getMessage(), e); // dead in water, print, and then ignore this.refreshInterval = 0; // zero out to avoid more exceptions } } }
From source file:com.spotify.reaper.cassandra.JmxProxy.java
/** * Handles notifications from the old repair API (forceRepairAsync) *//*from w w w . j a v a 2s . com*/ private void processOldApiNotification(Notification notification) { try { int[] data = (int[]) notification.getUserData(); // get the repair sequence number int repairNo = data[0]; // get the repair status ActiveRepairService.Status status = ActiveRepairService.Status.values()[data[1]]; // this is some text message like "Starting repair...", "Finished repair...", etc. String message = notification.getMessage(); // let the handler process the event repairStatusHandler.get().handle(repairNo, Optional.of(status), Optional.absent(), message); } catch (Exception e) { // TODO Auto-generated catch block LOG.error("Error while processing JMX notification", e); } }
From source file:com.spotify.reaper.cassandra.JmxProxy.java
/** * Handles notifications from the new repair API (repairAsync) *///from w w w .j a va 2s. c om private void processNewApiNotification(Notification notification) { Map<String, Integer> data = (Map<String, Integer>) notification.getUserData(); try { // get the repair sequence number int repairNo = Integer.parseInt(((String) notification.getSource()).split(":")[1]); // get the progress status ProgressEventType progress = ProgressEventType.values()[data.get("type")]; // this is some text message like "Starting repair...", "Finished repair...", etc. String message = notification.getMessage(); // let the handler process the event repairStatusHandler.get().handle(repairNo, Optional.absent(), Optional.of(progress), message); } catch (Exception e) { // TODO Auto-generated catch block LOG.error("Error while processing JMX notification", e); } }
From source file:org.wso2.carbon.registry.subscription.test.util.JMXClient.java
public void handleNotification(Notification ntfyObj, Object handback) { log.info("***************************************************"); log.info("* Notification received at " + new Date().toString()); log.info("* type = " + ntfyObj.getType()); log.info("* message = " + ntfyObj.getMessage()); if (ntfyObj.getMessage().contains(path)) { setSuccess(true);/*from w w w . j a v a 2 s . c o m*/ } log.info("* seqNum = " + ntfyObj.getSequenceNumber()); log.info("* source = " + ntfyObj.getSource()); log.info("* seqNum = " + Long.toString(ntfyObj.getSequenceNumber())); log.info("* timeStamp = " + new Date(ntfyObj.getTimeStamp())); log.info("* userData = " + ntfyObj.getUserData()); log.info("***************************************************"); }