From cdc884c34f5d7f22624d4e85a8bb61fd50560e5e Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Tue, 03 Nov 2026 10:44:13 +0000
Subject: [PATCH] [#1261] Close JMX RMI connector sockets on shutdown (#1264)
---
opendj-server-legacy/src/main/java/org/opends/server/protocols/jmx/RmiConnector.java | 17 +++++++++++++++--
1 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/protocols/jmx/RmiConnector.java b/opendj-server-legacy/src/main/java/org/opends/server/protocols/jmx/RmiConnector.java
index 626f94d..d7e0a9b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/protocols/jmx/RmiConnector.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/protocols/jmx/RmiConnector.java
@@ -20,6 +20,7 @@
import static org.opends.messages.ProtocolMessages.*;
import static org.opends.server.util.StaticUtils.*;
+import java.io.Closeable;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
@@ -165,6 +166,9 @@
*/
private OpendsRmiServerSocketFactory rmiSsf;
+ /** The socket factory owned by the RMI connector, separate from the registry's. */
+ private Closeable connectorSocketFactory;
+
/**
* The RMI protocol version used by this connector.
*/
@@ -371,8 +375,10 @@
SSLSocketFactory ssf = ctx.getSocketFactory();
// set the Server socket factory in the JMX map
- rmiServerSockeyFactory = new DirectoryRMIServerSocketFactory(
+ DirectoryRMIServerSocketFactory factory = new DirectoryRMIServerSocketFactory(
ssf, false, jmxConnectionHandler.getListenAddress());
+ connectorSocketFactory = factory;
+ rmiServerSockeyFactory = factory;
env.put(
"jmx.remote.rmi.server.socket.factory",
rmiServerSockeyFactory);
@@ -393,8 +399,10 @@
{
logger.trace("UNSECURE CONNECTION");
}
- rmiServerSockeyFactory = new OpendsRmiServerSocketFactory(
+ OpendsRmiServerSocketFactory factory = new OpendsRmiServerSocketFactory(
jmxConnectionHandler.getListenAddress());
+ connectorSocketFactory = factory;
+ rmiServerSockeyFactory = factory;
}
// specify the rmi JMX authenticator to be used
@@ -553,6 +561,11 @@
jmxRmiConnectorNoClientCertificate = null;
jmxRmiConnectorClientCertificate = null;
+ // RMI keeps anonymous-port listeners open even after the last object is unexported.
+ // Close our socket explicitly, also when stop() failed or the registry is being kept.
+ close(connectorSocketFactory);
+ connectorSocketFactory = null;
+
// Unregister connectors and stop them.
try
{
--
Gitblit v1.10.0