Интерфейсы MBean и MXBean должны быть public

В Java 8 изменены требования к области видимости интерфейсов для создания объектов MBean или MXBean. Все интерфейсы MBean и MXBean должны быть public. До Java 8 были допустимы интерфейсы не public, хотя по спецификации они должны были быть public.

Системное свойство jdk.jmx.mbeans.allowNonPublic позволяет вернуть прежнее поведение подсистемы управления, разрешающее использовать интерфейсы управления без спецификатора public. Это свойство считается переходным и может быть удалено в последующих выпусках.

Для поиска интерфейсов MBean и MXBean без спецификатора public в коде Java помечается следующее:

Поскольку окончание MBean у имени интерфейса MBean - соглашение, а не требование, все вызовы методов registerMBean и createMBean интерфейса MBeanServer тоже помечаются, чтобы подчеркнуть это отличие Java 8 при создании объектов EJB управления. Если интерфейсы объектов EJB управления не следуют вышеупомянутым соглашениям, необходимо вручную убедиться, что в них используются интерфейсы со спецификатором public.

В следующих примерах показаны интерфейсы не public, которые помечаются этим правилом.

    interface Example1MBean {}

    interface Example2MXBean {}

    @MXBean
    interface Example3Interface {}

    @MXBean(true)
    interface Example4Interface {}

В следующих примерах показаны интерфейсы, которые не помечаются этим правилом, поскольку они уже имеют спецификатор public или в их аннотации указано, что они не MXBean.

    public interface Example5MBean{}

    public interface Example6MXBean{}

    @MXBean(false)
    interface Example7MXBean {}

У этого правила есть автоматизированное исправление, которое задает видимость интерфейса для public. Скопировать пользовательская конфигурация в файл компоновки приложения, чтобы включить автоматизацию исправлений.

Вызовы MBeanServer registerMBean и МетодыcreateMBean помечаются только для выделения изменений поведения в случае, если интерфейсы не помечены.

См. документацию Java для пакета javax.management.