繁体   English   中英

Jmx 连接客户端

[英]Jmx connection client

我想创建一个 JMX 客户端,它可以与我的服务器一起使用。 我可以使用 jconsole 连接到我的服务器,但是我如何使用 java 代码来做到这一点。

这是我的服务器代码:

            MBeanServer mbeanServer = ManagementFactory
                .getPlatformMBeanServer();

        //giving name for service
        ObjectName objectName = new ObjectName("bean:name=logService");
        RequiredModelMBean mbean = new RequiredModelMBean();

        mbean.setManagedResource(logService, "objectReference");

        Descriptor logStringDescriptor = new DescriptorSupport(
                new String[] { "name=logString",
                        "descriptorType=attribute",
                        "getMethod=getLogString", "setMethod=setLogString" });
        
        ModelMBeanAttributeInfo logStringAttribute = new ModelMBeanAttributeInfo(
                "logString", "java.lang.String", "String to be logged",
                true, true, false, logStringDescriptor);

        ModelMBeanOperationInfo getLogStringOperation = new ModelMBeanOperationInfo(
                "Get the log string",
                LoggerService.class.getMethod("getLogString"));
        
        ModelMBeanOperationInfo setLogStringOperation = new ModelMBeanOperationInfo(
                "Set the log string", LoggerService.class.getMethod(
                        "setLogString", String.class));

        ModelMBeanInfo mbeanInfo = new ModelMBeanInfoSupport(
                "LoggerService", "Logger Service",
                new ModelMBeanAttributeInfo[] { logStringAttribute }, null,
                new ModelMBeanOperationInfo[] { getLogStringOperation,
                        setLogStringOperation }, null);

        mbean.setModelMBeanInfo(mbeanInfo);
        mbeanServer.registerMBean(mbean, objectName);

这很简单:)

            MBeanServer mbeanServer = ManagementFactory
                .getPlatformMBeanServer();


        //giving name for service
        ObjectName objectName = new ObjectName("bean:name=logService");

        String str = (String) mbeanServer.getAttribute (objectName, "logString");
        System.out.println(str);

您必须创建一个 JMX 代理,它将成为您的 MBeans 服务器的包装器,并允许通过使用特殊适配器的外部进程连接到您的应用程序。 此适配器将允许您的客户端使用特定协议(SNMP、HTTP 等)或技术 (RMI) 连接到 MBean 服务器。 您可以在此处阅读有关适配器的信息: http : //marxsoftware.blogspot.com/2008/08/remote-jmx-connectors-and-adapters.html

public static <T> T createJmxClient(Class<T> clazz, String objectName, String serviceUrl) {
    return createJmxClient(clazz, objectName, serviceUrl, null, null);
}

public static <T> T createJmxClient(Class<T> clazz, String objectName, String serviceUrl, final String user, final String pass) {
    try {
        JMXServiceURL jmxServiceUrl = new JMXServiceURL(serviceUrl);
        Map<String, ?> env = user == null ? null : new HashMap<String, Object>() {{
            put(JMXConnector.CREDENTIALS, new String[] {user, pass});
        }};
        JMXConnector jmxc = JMXConnectorFactory.connect(jmxServiceUrl, env);
        MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
        ObjectName mbeanName = new ObjectName(objectName);
        return JMX.newMBeanProxy(mbsc, mbeanName, clazz, true);
    } catch (IOException | MalformedObjectNameException e) {
        throw new RuntimeException("Can not create client for remote JMX " + serviceUrl, e);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM