Mercurial > hg > release > icedtea7-forest-2.1 > jdk
changeset 4902:d22aa05d0e4c
8007471: Improve MBean notifications
Summary: Improve MBean notifications
Reviewed-by: dfuchs, mchung, alanb, skoivu
author | dsamersoff |
---|---|
date | Thu, 21 Mar 2013 22:32:42 +0400 |
parents | 02cba1c3572a |
children | 0a66867d6baa |
files | src/share/classes/com/sun/jmx/remote/internal/ArrayNotificationBuffer.java src/share/classes/com/sun/jmx/remote/internal/ServerNotifForwarder.java |
diffstat | 2 files changed, 28 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/com/sun/jmx/remote/internal/ArrayNotificationBuffer.java Tue Mar 19 18:45:19 2013 +0100 +++ b/src/share/classes/com/sun/jmx/remote/internal/ArrayNotificationBuffer.java Thu Mar 21 22:32:42 2013 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -397,6 +397,20 @@ if (nextSeq < nextSequenceNumber()) { candidate = notificationAt(nextSeq); + // Skip security check if NotificationBufferFilter is not overloaded + if (!(filter instanceof ServerNotifForwarder.NotifForwarderBufferFilter)) { + try { + ServerNotifForwarder.checkMBeanPermission(this.mBeanServer, + candidate.getObjectName(),"addNotificationListener"); + } catch (InstanceNotFoundException | SecurityException e) { + if (logger.debugOn()) { + logger.debug("fetchNotifications", "candidate: " + candidate + " skipped. exception " + e); + } + ++nextSeq; + continue; + } + } + if (logger.debugOn()) { logger.debug("fetchNotifications", "candidate: " + candidate);
--- a/src/share/classes/com/sun/jmx/remote/internal/ServerNotifForwarder.java Tue Mar 19 18:45:19 2013 +0100 +++ b/src/share/classes/com/sun/jmx/remote/internal/ServerNotifForwarder.java Thu Mar 21 22:32:42 2013 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -227,8 +227,9 @@ * why we add the found notifications to a supplied List rather than * just returning a boolean. */ - private final NotificationBufferFilter bufferFilter = - new NotificationBufferFilter() { + private final NotifForwarderBufferFilter bufferFilter = new NotifForwarderBufferFilter(); + + final class NotifForwarderBufferFilter implements NotificationBufferFilter { public void apply(List<TargetedNotification> targetedNotifs, ObjectName source, Notification notif) { // We proceed in two stages here, to avoid holding the listenerMap @@ -362,9 +363,16 @@ * Explicitly check the MBeanPermission for * the current access control context. */ - public void checkMBeanPermission( + public final void checkMBeanPermission( final ObjectName name, final String actions) throws InstanceNotFoundException, SecurityException { + checkMBeanPermission(mbeanServer,name,actions); + } + + static void checkMBeanPermission( + final MBeanServer mbs, final ObjectName name, final String actions) + throws InstanceNotFoundException, SecurityException { + SecurityManager sm = System.getSecurityManager(); if (sm != null) { AccessControlContext acc = AccessController.getContext(); @@ -374,7 +382,7 @@ new PrivilegedExceptionAction<ObjectInstance>() { public ObjectInstance run() throws InstanceNotFoundException { - return mbeanServer.getObjectInstance(name); + return mbs.getObjectInstance(name); } }); } catch (PrivilegedActionException e) {