Interfejsy MBean i MXBean muszą być publiczne

W środowisku Java 8 wprowadzono zmianę w wymaganiach dotyczących widoczności interfejsów używanych do tworzenia komponentów MBean lub MXBean. Wszystkie interfejsy MBean i MXBean muszą być publiczne. W wersjach wcześniejszych niż Java 8 dozwolone były interfejsy niepubliczne, mimo że specyfikacja wskazywała, aby były publiczne.

Ustawienie właściwości systemowej jdk.jmx.mbeans.allowNonPublic przywraca stare działanie podsystemu zarządzania, umożliwiając stosowanie niepublicznych interfejsów zarządzania. Ta właściwość jest uważana za przejściową i może ona zostać usunięta w kolejnych wersjach.

W celu wykrycia niepublicznych interfejsów MBean i MXBean w kodzie Java oznaczane są następujące miejsca:

Ponieważ kończenie nazwy interfejsu komponentu MBean łańcuchem MBean jest jedynie konwencją, a nie wymaganiem, wszystkie wywołania metod MBeanServer registerMBean lub createMBean są również oznaczane w celu podkreślenia tej różnicy w środowisku Java 8 podczas tworzenia komponentów bean zarządzania. Jeśli w interfejsach używanych komponentów bean zarządzania nie jest stosowana wyżej wymieniona konwencja, należy ręcznie sprawdzić, czy używane są interfejsy public.

W poniższych przykładach przedstawiono interfejsy niepubliczne, które są oznaczane przez tę regułę.

    interface Example1MBean {}

    interface Example2MXBean {}

    @MXBean
    interface Example3Interface {}

    @MXBean(true)
    interface Example4Interface {}

Poniższe przykłady przedstawiają interfejsy, które nie są oznaczane przez tę regułę, ponieważ są one już publiczne lub ich adnotacja wskazuje, że nie są komponentami MXBean.

    public interface Example5MBean{}

    public interface Example6MXBean{}

    @MXBean(false)
    interface Example7MXBean {}

Ta reguła zawiera zautomatyzowaną poprawkę, która ustawia widoczność interfejsu na wartość public. Skopiuj konfigurację niestandardową do pliku budowania aplikacji, aby włączyć automatyzację poprawek.

Wywołania metod MBeanServer registerMBean i createMBean są oznaczane tylko w celu podkreślenia zmiany zachowania w przypadku, gdy interfejsy nie są oznaczane.

Więcej informacji na ten temat zawiera dokumentacja języka Java: Pakiet javax.management.