JMX-клиент повторно использует уже открытый сокет - PullRequest
0 голосов
/ 13 июня 2018

Я внедряю клиент 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();

Однако, похоже, это не удаляет базовый сокет.

Не могли бы вы помочь.

...