JMX (JSR-3) mendefinisikan API untuk management aplikasi Java yang bersifat local.
Jika dibutuhkan client yang terkoneksi ke aplikasi Java yang mendukung JMX, maka koneksi dilakukan dengan cara yang tidak standar, biasanaya menggunakan RMI atau HTTP.
JMX remote API merupakan ekstensi dari spesifikasi JMX versi 1.2
Untuk itu dibuatlah JSR-160 yang memperluas JSR-3 yaitu memberikan sebuah standar API untuk koneksi ke suatu aplikasi JMX secara remote.
JMX remoting API terdiri dari package yang harus (mandatory) diimplementasikan dan ada bagian yang tidak mandatory.
Package yang ada pada JSR-160 adalah:
javax.management.remote
javax.management.remote.generic (optional package)
javax.management.remote.jmxmp (optional package)
javax.management.remote.message (digunakan untuk wrapping object yang dikirim dari client ke server)
javax.management.remote.rmi (mandatory package)
*** Connector
Connector (JMX API connector) adalah bagian yang bertanggung jawab untuk mentransmisikan permintaan (request) client ke sebuah remote MBean server.
Connector yang mandatory pada JSR-160 adalah yang berbasis RMI (RMI/JRMP atau RMI/IIOP)
Connector yang tidak mandatory adalah yang berbasis pada:
- Java serialization (JMX Messaging Protocol/JMXMP) yang disebut Generic JMX API Connector
- TCP socket protokol lainnya (disebut User-Defined Protocols Connector)
*** Connector server
Connector server (JMX API connector server) disisipkan (attach) pada MBean Server (JMX agent) agar connector dapat berinteraksi dengannya.
Direpresentasikan dengan suatu super class: javax.management.remote.JMXConnectorServer
Connector server berasosiasi dengan MBean server dengan cara meregisterkannya pada MBean server atau memberikan MBean server pada constructornya.
Connector server perlu di-start() untuk mulai mendengarkan (listening) koneksi dari client.
Connector server berhenti ketika di-stop() atau akan di-unregister dari MBean Server
*** Pengalamatan
Alamat JMXConnectorServer menggunakan format URL.
URL tersebut digunakan JMXConnector untuk melakukan koneksi ke JMXConnectorServer
Bentuk pengalamannya seperti ini:
service:jmx:
protocol adalah jenis protokol yang digunakan misalnya rmi", "iiop", "jmxmp" atau yang lainnya
Representasi alamat connector adalah class javax.management.remote.JMXServiceURL
*** Contoh
Membuat connector server:
MBeanServer mbs = MBeanServerFactory.createMBeanServer();
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
Map environment = null;
JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, environment, mbs);
cs.start();
Membuat connector client:
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
Map environment = null;
JMXConnector connector = JMXConnectorFactory.newJMXConnector(url, environment);
connector.connect(connectionEnvironment);
// Obtain a "stub" for the remote MBeanServer
MBeanServerConnection mbsc = connector.getMBeanServerConnection();
// Call the remote MBeanServer
String domain = mbsc.getDefaultDomain()
*** Discovery dan Lookup Service
Digunakan untuk 'mengiklankan' (advertise) dan mencari JMX agent
Infrasuktur untuk discovery dan lookup Service ini bisa menggunakan yang sudah ada seperti:
- Service Location Protocol (SLP)
- Java Naming and Directory Interface (JNDI)
- Jini Network Technology
*** Referensi JMX Remote API
JavaTM Management Extensions (JMX) Remote API Overview
JavaTM Management Extensions (JMX) Remote API Tutorial
API Documentation
Semuanya bisa didownload dari pake reference implementation (RI)