This is an automated email from the ASF dual-hosted git repository. remm pushed a commit to branch 7.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/7.0.x by this push: new bef3f40 Refactor JMX remote RMI registry creation bef3f40 is described below commit bef3f40400243348d12f4abfe9b413f43897c02b Author: remm <r...@apache.org> AuthorDate: Thu Nov 14 13:42:28 2019 +0100 Refactor JMX remote RMI registry creation --- .../mbeans/JmxRemoteLifecycleListener.java | 67 ++++++++++++++++------ webapps/docs/changelog.xml | 3 + 2 files changed, 51 insertions(+), 19 deletions(-) diff --git a/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java b/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java index 3b18001..7d700a3 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; @@ -300,18 +301,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"; } @@ -332,7 +321,16 @@ 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)); @@ -340,10 +338,6 @@ public class JmxRemoteLifecycleListener implements LifecycleListener { log.error(sm.getString( "jmxRemoteLifecycleListener.createServerFailed", serverName), e); - } catch (AlreadyBoundException e) { - log.error(sm.getString( - "jmxRemoteLifecycleListener.createServerFailed", - serverName), e); } return cs; } @@ -496,4 +490,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 }; + } + } + } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 1c33ced..5b5ee4f 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -73,6 +73,9 @@ <update> <bug>63905</bug> Clean up Tomcat CSS. (michaelo) </update> + <fix> + Refactor JMX remote RMI registry creation. (remm) + </fix> </changelog> </subsection> <subsection name="Coyote"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org