Les interfaces MBean et MXBean doivent être publiques

Il existe dans Java 8 un changement de comportement concernant les exigences de visibilité pour les interfaces utilisées pour la création des beans MBean ou MXBean. Toutes les interfaces MBean et MXBean doivent être publiques. Avant Java 8, les interfaces non publiques étaient autorisées, bien que la spécification exigeait que les interfaces soient publiques.

Si vous indiquez la propriété système jdk.jmx.mbeans.allowNonPublic, le sous-système de gestion utilise alors l'ancien comportement, autorisant les interfaces de gestion non publiques. Cette propriété est considérée comme provisoire et peut être retirée dans les versions suivantes.

Pour détecter les interfaces MBean et MXBean non publiques, les situations suivantes sont marquées dans le code Java :

Etant donné que le nom d'interface MBean se termine par MBean est une convention et non une exigence, tout appel des méthodes MBeanServer registerMBean ou createMBean est également marqué afin de mettre en évidence cette différence Java 8 lorsque vous créez des beans de gestion. Si les interfaces de bean de gestion ne suivent pas les conventions précédemment répertoriées, vérifiez manuellement qu'elles utilisent les interfaces public.

Les exemples suivants présentent des interfaces non publiques marquées par cette règle.

    interface Example1MBean {}

    interface Example2MXBean {}

    @MXBean
    interface Example3Interface {}

    @MXBean(true)
    interface Example4Interface {}

Les exemples suivants présentent les interfaces qui sont pas marquées par cette règle car elles sont déjà publiques ou qu'elles sont annotées comme n'étant pas un bean MXBean.

    public interface Example5MBean{}

    public interface Example6MXBean{}

    @MXBean(false)
    interface Example7MXBean {}

Cette règle comporte un correctif automatisé qui définit la visibilité de l'interface sur public. Copiez la configuration personnalisée vers votre fichier de génération d'application pour activer l'automatisation des correctifs.

Les appels aux méthodes MBeanServer registerMBean et createMBean sont marqués uniquement pour mettre en évidence le changement de comportement au cas où vos interfaces ne seraient pas marquées.

Pour plus d'informations, voir la documentation Java Package javax.management.