В Java 8 изменены требования к области видимости интерфейсов для создания объектов MBean или MXBean. Все интерфейсы MBean и MXBean должны быть public. До Java 8 были допустимы интерфейсы не public, хотя по спецификации они должны были быть public.
Системное свойство jdk.jmx.mbeans.allowNonPublic позволяет вернуть прежнее поведение
подсистемы управления, разрешающее использовать интерфейсы управления без спецификатора public.
Это свойство считается переходным и может быть удалено в последующих выпусках.
Для поиска интерфейсов MBean и MXBean без спецификатора public в коде Java помечается следующее:
@MXBean@MXBean(true)MXBeanMBean
Поскольку окончание 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 в интерфейс.
Для вызовов методов registerMBean и createMBean интерфейса MBeanServer
быстрого исправления нет, поскольку они помечаются только для того, чтобы подчеркнуть изменение
поведения на тот случай, если интерфейсы не были помечены.
См. документацию Java для пакета javax.management.