/** * Sends an MBeanServerNotifications with the specified type for the * MBean with the specified ObjectName */ private void sendNotification(String NotifType, ObjectName name) { // ------------------------------ // ------------------------------ // --------------------- // Create notification // --------------------- MBeanServerNotification notif = new MBeanServerNotification( NotifType,MBeanServerDelegate.DELEGATE_NAME,0,name); if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) { MBEANSERVER_LOGGER.logp(Level.FINER, DefaultMBeanServerInterceptor.class.getName(), "sendNotification", NotifType + " " + name); } delegate.sendNotification(notif); }
private void createdNotification(MBeanServerNotification n) { final String shouldEqual = MBeanServerNotification.REGISTRATION_NOTIFICATION; if (!n.getType().equals(shouldEqual)) { logger.warning("createNotification", "bad type: " + n.getType()); return; } ObjectName name = n.getMBeanName(); if (logger.debugOn()) logger.debug("createdNotification", "for: " + name); synchronized (this) { if (createdDuringQuery != null) { createdDuringQuery.add(name); return; } } if (isInstanceOf(mBeanServer, name, broadcasterClass)) { addBufferListener(name); if (isDisposed()) removeBufferListener(name); } }
/** * Sends an MBeanServerNotifications with the specified type for the * MBean with the specified ObjectName */ private void sendNotification(String NotifType, ObjectName name) { // ------------------------------ // ------------------------------ // --------------------- // Create notification // --------------------- MBeanServerNotification notif = new MBeanServerNotification( NotifType,MBeanServerDelegate.DELEGATE_NAME,0,name); if (MBEANSERVER_LOGGER.isLoggable(Level.TRACE)) { MBEANSERVER_LOGGER.log(Level.TRACE, NotifType + " " + name); } delegate.sendNotification(notif); }
/** * Handles creation and deletion of new "worker" threads. * * @param notification the notification * @param object the object */ @Override public synchronized void handleNotification(Notification notification, Object object) { if (notification instanceof MBeanServerNotification && notification.getType().equals(MBeanServerNotification.REGISTRATION_NOTIFICATION) || notification.getType().equals(MBeanServerNotification.UNREGISTRATION_NOTIFICATION)) { ObjectName objectName = ((MBeanServerNotification) notification).getMBeanName(); if ("RequestProcessor".equals(objectName.getKeyProperty("type"))) { ThreadPoolObjectName threadPoolObjectName = findPool(objectName.getKeyProperty("worker")); if (threadPoolObjectName != null) { if (notification.getType().equals(MBeanServerNotification.REGISTRATION_NOTIFICATION)) { threadPoolObjectName.getRequestProcessorNames().add(objectName); } else { threadPoolObjectName.getRequestProcessorNames().remove(objectName); } } } } }
private void snoopOnUnregister(NotificationResult nr) { Set<IdAndFilter> delegateSet = listenerMap.get(MBeanServerDelegate.DELEGATE_NAME); if (delegateSet == null || delegateSet.isEmpty()) { return; } for (TargetedNotification tn : nr.getTargetedNotifications()) { Integer id = tn.getListenerID(); for (IdAndFilter idaf : delegateSet) { if (idaf.id == id) { // This is a notification from the MBeanServerDelegate. Notification n = tn.getNotification(); if (n instanceof MBeanServerNotification && n.getType().equals(MBeanServerNotification.UNREGISTRATION_NOTIFICATION)) { MBeanServerNotification mbsn = (MBeanServerNotification) n; ObjectName gone = mbsn.getMBeanName(); synchronized (listenerMap) { listenerMap.remove(gone); } } } } } }
@Override public void handleNotification(Notification notification, Object handback) { MBeanServerNotification mbs = (MBeanServerNotification) notification; if (MBeanServerNotification.REGISTRATION_NOTIFICATION.equals(mbs.getType())) { // System.out.println("Adding mbean " + mbs.getMBeanName()); _logger.info("Adding mbean " + mbs.getMBeanName()); if (mbs.getMBeanName().getDomain().equalsIgnoreCase(_domain)) { addMBean(mbs.getMBeanName()); } } else if (MBeanServerNotification.UNREGISTRATION_NOTIFICATION.equals(mbs.getType())) { // System.out.println("Removing mbean " + mbs.getMBeanName()); _logger.info("Removing mbean " + mbs.getMBeanName()); if (mbs.getMBeanName().getDomain().equalsIgnoreCase(_domain)) { removeMBean(mbs.getMBeanName()); } } }
private void handleNotificationInAwtEventThread(final Notification notif, final Object paramObject) { if (StatusLoggerAdminMBean.NOTIF_TYPE_MESSAGE.equals(notif.getType())) { if (!(paramObject instanceof ObjectName)) { handle("Invalid notification object type", new ClassCastException(paramObject.getClass().getName())); return; } final ObjectName param = (ObjectName) paramObject; final JTextArea text = statusLogTextAreaMap.get(param); if (text != null) { text.append(notif.getMessage() + '\n'); } return; } if (notif instanceof MBeanServerNotification) { final MBeanServerNotification mbsn = (MBeanServerNotification) notif; final ObjectName mbeanName = mbsn.getMBeanName(); if (MBeanServerNotification.REGISTRATION_NOTIFICATION.equals(notif.getType())) { onMBeanRegistered(mbeanName); } else if (MBeanServerNotification.UNREGISTRATION_NOTIFICATION.equals(notif.getType())) { onMBeanUnregistered(mbeanName); } } }
private void addMBeanServerDelegateListener() { _MBeanServerDelegateNotificationListener = new MBeanServerDelegateNotificationListener(); NotificationFilterSupport filter = new NotificationFilterSupport(); filter.enableType(MBeanServerNotification.REGISTRATION_NOTIFICATION); filter.enableType(MBeanServerNotification.UNREGISTRATION_NOTIFICATION); try { _MBeanServerConnection.addNotificationListener(MBeanServerDelegate.DELEGATE_NAME, _MBeanServerDelegateNotificationListener, filter, null); } catch (Exception e) { } }
@Override public void handleNotification(Notification notification, Object handback) { if (notification instanceof MBeanServerNotification) { MBeanServerNotification mbeanNotification = (MBeanServerNotification) notification; String notificationType = mbeanNotification.getType(); ObjectName objectName = mbeanNotification.getMBeanName(); if (notificationType.equals(MBeanServerNotification.REGISTRATION_NOTIFICATION)) { fireMBeanRegistered(objectName); } else if (notificationType.equals(MBeanServerNotification.UNREGISTRATION_NOTIFICATION)) { fireMBeanUnregistered(objectName); } } }
/** * Adds a MBean in the repository, * sends MBeanServerNotification.REGISTRATION_NOTIFICATION, * returns ResourceContext for special resources such as ClassLoaders * or JMXNamespaces. For regular MBean this method returns * ResourceContext.NONE. * @return a ResourceContext for special resources such as ClassLoaders * or JMXNamespaces. */ private ResourceContext registerWithRepository( final Object resource, final DynamicMBean object, final ObjectName logicalName) throws InstanceAlreadyExistsException, MBeanRegistrationException { // Creates a registration context, if needed. // final ResourceContext context = makeResourceContextFor(resource, logicalName); repository.addMBean(object, logicalName, context); // May throw InstanceAlreadyExistsException // --------------------- // Send create event // --------------------- if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) { MBEANSERVER_LOGGER.logp(Level.FINER, DefaultMBeanServerInterceptor.class.getName(), "addObject", "Send create notification of object " + logicalName.getCanonicalName()); } sendNotification( MBeanServerNotification.REGISTRATION_NOTIFICATION, logicalName); return context; }
/** * Removes a MBean in the repository, * sends MBeanServerNotification.UNREGISTRATION_NOTIFICATION, * returns ResourceContext for special resources such as ClassLoaders * or JMXNamespaces, or null. For regular MBean this method returns * ResourceContext.NONE. * * @return a ResourceContext for special resources such as ClassLoaders * or JMXNamespaces. */ private ResourceContext unregisterFromRepository( final Object resource, final DynamicMBean object, final ObjectName logicalName) throws InstanceNotFoundException { // Creates a registration context, if needed. // final ResourceContext context = makeResourceContextFor(resource, logicalName); repository.remove(logicalName, context); // --------------------- // Send deletion event // --------------------- if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) { MBEANSERVER_LOGGER.logp(Level.FINER, DefaultMBeanServerInterceptor.class.getName(), "unregisterMBean", "Send delete notification of object " + logicalName.getCanonicalName()); } sendNotification(MBeanServerNotification.UNREGISTRATION_NOTIFICATION, logicalName); return context; }
private void snoopOnUnregister(NotificationResult nr) { List<IdAndFilter> copy = null; synchronized (listenerMap) { Set<IdAndFilter> delegateSet = listenerMap.get(MBeanServerDelegate.DELEGATE_NAME); if (delegateSet == null || delegateSet.isEmpty()) { return; } copy = new ArrayList<>(delegateSet); } for (TargetedNotification tn : nr.getTargetedNotifications()) { Integer id = tn.getListenerID(); for (IdAndFilter idaf : copy) { if (idaf.id == id) { // This is a notification from the MBeanServerDelegate. Notification n = tn.getNotification(); if (n instanceof MBeanServerNotification && n.getType().equals(MBeanServerNotification.UNREGISTRATION_NOTIFICATION)) { MBeanServerNotification mbsn = (MBeanServerNotification) n; ObjectName gone = mbsn.getMBeanName(); synchronized (listenerMap) { listenerMap.remove(gone); } } } } } }
/** * Creates a filter selecting all MBeanServerNotification notifications for * all ObjectNames. */ public MBeanServerNotificationFilter() { super(); RELATION_LOGGER.entering(MBeanServerNotificationFilter.class.getName(), "MBeanServerNotificationFilter"); enableType(MBeanServerNotification.REGISTRATION_NOTIFICATION); enableType(MBeanServerNotification.UNREGISTRATION_NOTIFICATION); RELATION_LOGGER.exiting(MBeanServerNotificationFilter.class.getName(), "MBeanServerNotificationFilter"); return; }
protected Integer addListenerForMBeanRemovedNotif() throws IOException, InstanceNotFoundException { NotificationFilterSupport clientFilter = new NotificationFilterSupport(); clientFilter.enableType( MBeanServerNotification.UNREGISTRATION_NOTIFICATION); MarshalledObject<NotificationFilter> sFilter = new MarshalledObject<NotificationFilter>(clientFilter); Integer[] listenerIDs; final ObjectName[] names = new ObjectName[] {MBeanServerDelegate.DELEGATE_NAME}; final MarshalledObject<NotificationFilter>[] filters = Util.cast(new MarshalledObject<?>[] {sFilter}); final Subject[] subjects = new Subject[] {null}; try { listenerIDs = connection.addNotificationListeners(names, filters, subjects); } catch (IOException ioe) { communicatorAdmin.gotIOException(ioe); listenerIDs = connection.addNotificationListeners(names, filters, subjects); } return listenerIDs[0]; }