JMX客户端重用已打开套接字

时间:2018-06-13 09:01:18

标签: java rmi jmx

我正在实现一个JMX客户端,以便在使用JMX启用的服务器上执行某些任务。我正在多线程处理JMX客户端,并且对于每个请求,我尝试从JMXConnector获取新连接。即使我在打开一个新实例之前关闭了jmxconnector实例,它似乎也没有从先前的实例关闭套接字。 这就是我创建JMX实例的方法(我使用RMIClientSocketFactory来获取默认套接字):

JMXServiceURL jmxUrl = new JMXServiceURL(String.format(fmtUrl, host, port));
    Map<String, Object> env = new HashMap<String, Object>();
    if (userName != null) {
        String[] creds = { userName, password };
        env.put(JMXConnector.CREDENTIALS, creds);
    }
    env.put("com.sun.jndi.rmi.factory.socket", getRMIClientSocketFactory());
    jmxc = JMXConnectorFactory.connect(jmxUrl, env);

我尝试创建的RMI套接字工厂如下:

    private RMIClientSocketFactory getRMIClientSocketFactory() throws IOException {
    if (Boolean.parseBoolean(System.getProperty("ssl.enable")))
        return new SslRMIClientSocketFactory();
    else {
        return RMISocketFactory.getDefaultSocketFactory();
    }
}

获取mbeanserver连接,完成任务并接收通知后,我将其关闭如下:

ssProxy.removeNotificationListener(runner);
jmxc.removeConnectionNotificationListener(runner);
jmxc.close();

但是,这似乎并没有删除底层套接字。

请你帮忙。

0 个答案:

没有答案