| // |
| // ======================================================================== |
| // Copyright (c) 1995-2015 Mort Bay Consulting Pty. Ltd. |
| // ------------------------------------------------------------------------ |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // and Apache License v2.0 which accompanies this distribution. |
| // |
| // The Eclipse Public License is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // The Apache License v2.0 is available at |
| // http://www.opensource.org/licenses/apache2.0.php |
| // |
| // You may elect to redistribute this code under either of these licenses. |
| // ======================================================================== |
| // |
| |
| package org.eclipse.jetty.deploy; |
| |
| import java.io.IOException; |
| import java.lang.management.ManagementFactory; |
| |
| import javax.management.MBeanServer; |
| import javax.management.MBeanServerConnection; |
| import javax.management.remote.JMXConnector; |
| import javax.management.remote.JMXConnectorFactory; |
| import javax.management.remote.JMXConnectorServer; |
| import javax.management.remote.JMXConnectorServerFactory; |
| import javax.management.remote.JMXServiceURL; |
| |
| import org.eclipse.jetty.toolchain.test.IO; |
| |
| /** |
| * JmxServiceConnection |
| * |
| * Provides ability to create a connection to either an external |
| * JMX server, or a loopback connection to the internal one. |
| */ |
| public class JmxServiceConnection |
| { |
| private String serviceUrl; |
| private MBeanServer server; |
| private JMXConnectorServer connectorServer; |
| private JMXConnector serverConnector; |
| private MBeanServerConnection serviceConnection; |
| |
| /** |
| * Construct a loopback connection to an internal server |
| */ |
| public JmxServiceConnection() |
| { |
| this(null); |
| } |
| |
| /** |
| * Construct a connection to specified server |
| * |
| * @param url |
| * URL of JMX server |
| */ |
| public JmxServiceConnection(String url) |
| { |
| serviceUrl = url; |
| } |
| |
| /** |
| * Retrieve an external URL for the JMX server |
| * |
| * @return service URL |
| */ |
| public String getServiceUrl() |
| { |
| return serviceUrl; |
| } |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * Retrieve a connection to MBean server |
| * |
| * @return connection to MBean server |
| */ |
| public MBeanServerConnection getConnection() |
| { |
| return serviceConnection; |
| } |
| |
| public void connect() throws IOException |
| { |
| if (serviceConnection == null) |
| { |
| if (serviceUrl == null) |
| { |
| openLoopbackConnection(); |
| } |
| else |
| { |
| openServerConnection(serviceUrl); |
| } |
| } |
| } |
| |
| /** |
| * Open a loopback connection to local JMX server |
| * |
| * @throws IOException |
| */ |
| private void openLoopbackConnection() throws IOException |
| { |
| server = ManagementFactory.getPlatformMBeanServer(); |
| |
| JMXServiceURL serviceUrl = new JMXServiceURL("service:jmx:rmi://"); |
| connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(serviceUrl,null,server); |
| connectorServer.start(); |
| |
| this.serviceUrl = connectorServer.getAddress().toString(); |
| |
| serverConnector = JMXConnectorFactory.connect(connectorServer.getAddress()); |
| serviceConnection = serverConnector.getMBeanServerConnection(); |
| } |
| |
| /** |
| * Open a connection to remote JMX server |
| * |
| * @param url |
| * @throws IOException |
| */ |
| private void openServerConnection(String url) throws IOException |
| { |
| serviceUrl = url; |
| serverConnector = JMXConnectorFactory.connect(new JMXServiceURL(serviceUrl)); |
| serviceConnection = serverConnector.getMBeanServerConnection(); |
| } |
| |
| /** |
| * Close the connections |
| */ |
| public void disconnect() |
| { |
| IO.close(serverConnector); |
| |
| if (connectorServer != null) |
| { |
| try |
| { |
| connectorServer.stop(); |
| } |
| catch (Exception ignore) |
| { |
| /* ignore */ |
| } |
| } |
| } |
| } |