113 lines
4.6 KiB
Diff
113 lines
4.6 KiB
Diff
From 1fc9f589dbdd8295cf313b2667ab041c425f99c3 Mon Sep 17 00:00:00 2001
|
|
From: remm <remm@apache.org>
|
|
Date: Thu, 14 Nov 2019 13:39:31 +0100
|
|
Subject: [PATCH] Refactor JMX remote RMI registry creation
|
|
|
|
---
|
|
.../mbeans/JmxRemoteLifecycleListener.java | 65 ++++++++++++++-----
|
|
1 file changed, 49 insertions(+), 16 deletions(-)
|
|
|
|
diff --git a/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java b/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java
|
|
index ae04294..e832935 100644
|
|
--- a/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java
|
|
+++ b/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java
|
|
@@ -25,10 +25,11 @@ import java.net.MalformedURLException;
|
|
import java.net.ServerSocket;
|
|
import java.net.Socket;
|
|
import java.net.UnknownHostException;
|
|
+import java.rmi.AccessException;
|
|
import java.rmi.AlreadyBoundException;
|
|
+import java.rmi.NotBoundException;
|
|
+import java.rmi.Remote;
|
|
import java.rmi.RemoteException;
|
|
-import java.rmi.registry.LocateRegistry;
|
|
-import java.rmi.registry.Registry;
|
|
import java.rmi.server.RMIClientSocketFactory;
|
|
import java.rmi.server.RMIServerSocketFactory;
|
|
import java.security.NoSuchAlgorithmException;
|
|
@@ -301,18 +302,6 @@ public class JmxRemoteLifecycleListener implements LifecycleListener {
|
|
RMIClientSocketFactory registryCsf, RMIServerSocketFactory registrySsf,
|
|
RMIClientSocketFactory serverCsf, RMIServerSocketFactory serverSsf) {
|
|
|
|
- // Create the RMI registry
|
|
- Registry registry;
|
|
- try {
|
|
- registry = LocateRegistry.createRegistry(
|
|
- theRmiRegistryPort, registryCsf, registrySsf);
|
|
- } catch (RemoteException e) {
|
|
- log.error(sm.getString(
|
|
- "jmxRemoteLifecycleListener.createRegistryFailed",
|
|
- serverName, Integer.toString(theRmiRegistryPort)), e);
|
|
- return null;
|
|
- }
|
|
-
|
|
if (bindAddress == null) {
|
|
bindAddress = "localhost";
|
|
}
|
|
@@ -333,11 +322,20 @@ public class JmxRemoteLifecycleListener implements LifecycleListener {
|
|
cs = new RMIConnectorServer(serviceUrl, theEnv, server,
|
|
ManagementFactory.getPlatformMBeanServer());
|
|
cs.start();
|
|
- registry.bind("jmxrmi", server.toStub());
|
|
+ Remote jmxServer = server.toStub();
|
|
+ // Create the RMI registry
|
|
+ try {
|
|
+ new JmxRegistry(theRmiRegistryPort, registryCsf, registrySsf, "jmxrmi", jmxServer);
|
|
+ } catch (RemoteException e) {
|
|
+ log.error(sm.getString(
|
|
+ "jmxRemoteLifecycleListener.createRegistryFailed",
|
|
+ serverName, Integer.toString(theRmiRegistryPort)), e);
|
|
+ return null;
|
|
+ }
|
|
log.info(sm.getString("jmxRemoteLifecycleListener.start",
|
|
Integer.toString(theRmiRegistryPort),
|
|
Integer.toString(theRmiServerPort), serverName));
|
|
- } catch (IOException | AlreadyBoundException e) {
|
|
+ } catch (IOException e) {
|
|
log.error(sm.getString(
|
|
"jmxRemoteLifecycleListener.createServerFailed",
|
|
serverName), e);
|
|
@@ -493,4 +491,39 @@ public class JmxRemoteLifecycleListener implements LifecycleListener {
|
|
return true;
|
|
}
|
|
}
|
|
+
|
|
+
|
|
+ private static class JmxRegistry extends sun.rmi.registry.RegistryImpl {
|
|
+ private static final long serialVersionUID = -3772054804656428217L;
|
|
+ private final String jmxName;
|
|
+ private final Remote jmxServer;
|
|
+ public JmxRegistry(int port, RMIClientSocketFactory csf,
|
|
+ RMIServerSocketFactory ssf, String jmxName, Remote jmxServer) throws RemoteException {
|
|
+ super(port, csf, ssf);
|
|
+ this.jmxName = jmxName;
|
|
+ this.jmxServer = jmxServer;
|
|
+ }
|
|
+ @Override
|
|
+ public Remote lookup(String name)
|
|
+ throws RemoteException, NotBoundException {
|
|
+ return (jmxName.equals(name)) ? jmxServer : null;
|
|
+ }
|
|
+ @Override
|
|
+ public void bind(String name, Remote obj)
|
|
+ throws RemoteException, AlreadyBoundException, AccessException {
|
|
+ }
|
|
+ @Override
|
|
+ public void unbind(String name)
|
|
+ throws RemoteException, NotBoundException, AccessException {
|
|
+ }
|
|
+ @Override
|
|
+ public void rebind(String name, Remote obj)
|
|
+ throws RemoteException, AccessException {
|
|
+ }
|
|
+ @Override
|
|
+ public String[] list() throws RemoteException {
|
|
+ return new String[] { jmxName };
|
|
+ }
|
|
+ }
|
|
+
|
|
}
|
|
--
|
|
2.23.0
|
|
|