Saya mencoba menggunakan jmxwrapper kelas / proyek

Untuk proyek saat ini untuk satu set kelas JMX semuanya bekerja dengan tenang pada Jconsole atau VisualVM

Untuk salah satu dari mereka saya mencoba beradaptasi atau bekerja dengan JMXWrapper:

public interface MainJmxMBean {

    boolean showIfMainIsRunning();

    void stopMain();

}

तथा

@JMXBean(description="Administrates the Main app", sorted=true)
class MainJmx implements MainJmxMBean {

    private boolean isMainRunning;

    MainJmx() {
        isMainRunning =true;
    }


    @Override
    @JMXBeanOperation(name="Show If Main Is Running",
                      description="Shows if the Main app is running or not",
                      sortValue="1")
    public boolean showIfMainIsRunning() {
        return isMainRunning;
    }


    @Override
    @JMXBeanOperation(description="Stops the Main app", sortValue="2")
    public void stopMain() {
        isMainRunning = false;
    }

}

Catatan: Kelas yang ditunjukkan di atas berfungsi dengan baik tanpa anotasi. Sekarang dianotasi untuk meningkatkan informasi dan penggunaannya di Jconsole / VisualVM

और अंत में

private void registerMBeanWithJMXBeanWrapper(ObjectJmxMBean objectJmxMBean) {

    try {
        //System.out.printf("%s %n", objectJmxMBean.toString());
        ObjectName objectName = new ObjectName(objectJmxMBean.getName());
        server.registerMBean(new JMXBeanWrapper(objectJmxMBean.getObject()), objectName);
    }
    catch(MalformedObjectNameException |
          InstanceAlreadyExistsException |
          MBeanRegistrationException |
          NotCompliantMBeanException |
          IntrospectionException e) {
        System.err.printf("[CanonicalName] %s - ERROR: %s %n", e.getClass().getCanonicalName(), e.getMessage());
    }

}

Bagian penting dari di atas adalah: new JMXBeanWrapper(objectJmxMBean.getObject())

Sampai di sini saya melakukan semua instruksi sesuai dengan dokumentasi JMXBeanWrapper dibagikan di tautan di bagian atas posting ini dan bahkan dari posting penulis:

Ketika saya menjalankan aplikasi utama, melalui Jconsole atau VisualVM saya dapat melihat anotasi yang diterapkan dan bekerja bagaimana diharapkan, oleh karena itu sampai di sini tujuannya telah selesai.

enter image description here

enter image description here

masalah: Masalahnya adalah ketika saya mengklik untuk salah satu dari mereka muncul:

enter image description here

पूर्ण त्रुटि संदेश है:

Problem invoking stopMain: 
java.lang.IllegalAccessException 
Class com.udojava.jmx.wrapper.JMXBeanWrapper can not access a member of class 
com.manuel.jordan.jmx.admin.MainJmx with modifiers "public"

tampaknya kesalahan dilemparkan langsung oleh jconsole atau visualvm, karena sesuai dengan jmxbeanwrapper.java kode sumber, tidak ada pernyataan throw new IllegalAccessException dengan bagian dari pesan itu { {X1}}

Catatan & amp; Pengamatan: Menurut proyek yang dibagikan di GitHub, itu diuji dengan JDK 6 dan saya menggunakan / bekerja dengan JDK 8.

Apa yang bisa salah atau hilang dalam konfigurasi?

0
Manuel Jordan 9 अक्टूबर 2020, 00:39

1 उत्तर

सबसे बढ़िया उत्तर

समाधान निम्नलिखित है:

इससे संपादित करें:

@JMXBean(description="Administrates the Main app", sorted=true)
class MainJmx implements MainJmxMBean {

    private boolean isMainRunning;

    MainJmx() {
        isMainRunning =true;
    }

सेवा

@JMXBean(description="Administrates the Main app", sorted=true)
public class MainJmx implements MainJmxMBean {

    private boolean isMainRunning;

    MainJmx() {
        isMainRunning =true;
    }

Kesimpulan: JMXWrapper Membutuhkan bahwa kelas beranotasi dengan @JMXBean harus public.

Bagaimana Anda dapat melihat konstruktor dapat tetap menjadi package default

0
Manuel Jordan 9 अक्टूबर 2020, 16:25