Я внедряю клиент 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();
Однако, похоже, это не удаляет базовый сокет.
Не могли бы вы помочь.