Java'da JMX desteği olan bir uygulamaya Java kodu ile bağlanılbilir. Bunun için javax.management.remote paketi kullanılır. Aşağıda bir JMX desteği olan uygulamaya connection kuran örnek görülmektedir :
import java.io.IOException;
import java.net.MalformedURLException;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class JMXClientTestApp {
public static final String JMX_URL_HEADER = "service:jmx:rmi:///jndi/rmi://";
public static final String JMX_URL_PATH = "/jmxrmi";
public static void main(String[] args)
throws MalformedURLException, IOException {
String url=JMX_URL_HEADER + "localhost:9999" + JMX_URL_PATH;
JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(url));
System.out.println("Connected..." + connector.getConnectionId());
}
}
JMX URL service:jmx:rmi:///jndi/rmi://ip:port//jmxrmi şeklinde verilmektedir. Ekranda connected yazısı görülürse başarılı bağlantı kurulmuş demektir :
connected...rmi://10.1.35.12 1
10.1.35.12, local IP'dir.
Kullanıcı ve şifre kontrolü olan bir JMX uygulamasına da Java ile erişilebilir. Kod kısmı şu şekilde olur :
public class JMXClientTestApp {
public static final String JMX_URL_HEADER = "service:jmx:rmi:///jndi/rmi://";
public static final String JMX_URL_PATH = "/jmxrmi";
public static void main(String[] args)
throws MalformedURLException, IOException {
Map<String, Object> env = new HashMap<>();
env.put(JMXConnector.CREDENTIALS, new String[] { "admin", "Admin123." });
String url=JMX_URL_HEADER + "localhost:9999" + JMX_URL_PATH;
JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(url), env);
System.out.println("Connected..." + connector.getConnectionId());
}
}
Görüldüğü gibi kullanıcı adı ve şifrenin verildiği bir Map yaratılıp connect() yöntemine aktarılmaktadır. Uygulama auth desteği ise şu şekilde eklenmiştir :
-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=E:\jmxremote.password -Dcom.sun.management.jmxremote.access.file=E:\jmxremote.access -Dcom.sun.management.jmxremote.ssl=false
Eğer uygulama SSL desteği ekli ise client çağırırken sertifika bilgisini göndermesi gerekir. Client açılırken şu paramterleleri vermelidir :
-Djavax.net.ssl.trustStore=Q:\testjmx.jks -Djavax.net.ssl.trustStorePassword=trustpassword
Bu iki parametre clietn uygulaması açılırken verilebilir. Bağlanma kodu şe şekilde olur :
public class JMXClientTestApp {
public static final String JMX_URL_HEADER = "service:jmx:rmi:///jndi/rmi://";
public static final String JMX_URL_PATH = "/jmxrmi";
public static void main(String[] args)
throws MalformedURLException, IOException {
Map<String, Object> env = new HashMap<>();
env.put(JMXConnector.CREDENTIALS, new String[] { "admin", "Admin123." });
env.put("com.sun.jndi.rmi.factory.socket", new SslRMIClientSocketFactory());
String url=JMX_URL_HEADER + "localhost:9999" + JMX_URL_PATH;
JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(url), env);
System.out.println("Connected with SSL" + connector.getConnectionId());
}
}
Map'e com.sun.jndi.rmi.factory.socket değerinin eklenmesi yeterlidir. Bu SSL ile konuşulacağını göstermektedir.