jmx-dev Call for review, Bug ID 6514985

Jean-Francois Denise - Sun Microsystems Jean-Francois.Denise at Sun.COM
Wed May 23 02:22:10 PDT 2007


Rethinking at this fix, the access to the ServiceLoader iterator inside 
a privileged block is useless (and used to be useless).
ServiceLoader javadoc is quite vague on this but ServiceLoader code is 
clear.

After discussing with Eamonn, I confidently removed the grant block.

You can check the updated webrev on : 
http://amos.france.sun.com/jmgt/user/jfdenise/workspaces/jdk7_jmx_master.ws/webrev/index.html 

(Not reviewed by community, not adding diff).

JF.

Eamonn McManus wrote:
> This fix looks good to me.
>
> Éamonn McManus   JMX Spec Lead   http://weblogs.java.net/blog/emcmanus/
>
>
>
> Jean-Francois Denise - Sun Microsystems wrote:
>> Proposal to fix 6514985 : JMX should use java.util.ServiceLoader to 
>> lookup service providers
>>
>> Swan access webrev
>> ==================
>>
>> http://amos.france.sun.com/jmgt/user/jfdenise/workspaces/jdk7_jmx_master.ws/webrev/index.html 
>>
>>
>> Diff
>> ====
>>
>> diff javax/management/remote/JMXConnectorFactory.java
>> /jmgt/master/jmx/jdk7_jmx_master.ws/src/share/classes/javax/management/remote//JMXConnectorFactory.java 
>>
>> 34d33
>> < import java.util.ServiceLoader;
>> 40a40
>>> import com.sun.jmx.remote.util.Service;
>> 42d41
>> <
>> 422,429c421,428
>> <     static <T> Iterator<T> getProviderIterator(final ServiceLoader<T>
>> loader) {
>> <         PrivilegedAction<Iterator<T>>
>> <                 action = new PrivilegedAction<Iterator<T>>() {
>> <             public Iterator<T> run() {
>> <                 return loader.iterator();
>> <             }
>> <         };
>> <         return AccessController.doPrivileged(action);
>> ---
>>>     static Iterator getProviderIterator(final Class providerClass,
>>>                                         final ClassLoader loader) {
>>>         PrivilegedAction action = new PrivilegedAction() {
>>>                 public Object run() {
>>>                     return Service.providers(providerClass, loader);
>>>                 }
>>>             };
>>>         return (Iterator) AccessController.doPrivileged(action);
>> 436,441c435,438
>> <
>> <         ServiceLoader<JMXConnectorProvider> serviceLoader =
>> <                 ServiceLoader.load(JMXConnectorProvider.class,
>> <                 loader);
>> <         Iterator<JMXConnectorProvider> providers =
>> <                 getProviderIterator(serviceLoader);
>> ---
>>>
>>>         Iterator providers = 
>> getProviderIterator(JMXConnectorProvider.class,
>>>                                                  loader);
>>>         JMXConnectorProvider provider = null;
>> 444c441,442
>> <         while(providers.hasNext()) {
>> ---
>>>         while (providers.hasNext()) {
>>>             provider = (JMXConnectorProvider) providers.next();
>> 446c444
>> <                 connection = providers.next().newJMXConnector(url, 
>> map);
>> ---
>>>                 connection = provider.newJMXConnector(url, map);
>> diff javax/management/remote/JMXConnectorServerFactory.java
>> /jmgt/master/jmx/jdk7_jmx_master.ws/src/share/classes/javax/management/remote//JMXConnectorServerFactory.java 
>>
>> 38d37
>> < import java.util.ServiceLoader;
>> 214,219c213,215
>> <         ServiceLoader<JMXConnectorServerProvider> serviceLoader =
>> <                 ServiceLoader.load(JMXConnectorServerProvider.class,
>> <                 loader);
>> <         Iterator<JMXConnectorServerProvider> providers =
>> <                 
>> JMXConnectorFactory.getProviderIterator(serviceLoader);
>> <
>> ---
>>>         Iterator providers = JMXConnectorFactory.getProviderIterator(
>>>             JMXConnectorServerProvider.class, loader);
>>>         JMXConnectorServerProvider provider = null;
>> 222a219
>>>             provider = (JMXConnectorServerProvider) providers.next();
>> 224c221
>> <                 connection =
>> providers.next().newJMXConnectorServer(url, map, mbs);
>> ---
>>>                 connection = provider.newJMXConnectorServer(url, map, 
>> mbs);
>>
>> Only in
>> /jmgt/master/jmx/jdk7_jmx_master.ws/src/share/classes/com/sun/jmx/remote/util/: 
>>
>> Service.java
>> Only in deleted_files//src/share: classes
>>
>>
>


-- 
Jean-Francois Denise  JMX team
Interested in netbeans ==> http://blogs.sun.com/roller/page/jmxnetbeans




More information about the jmx-dev mailing list