| /* | |
| * Copyright (c) 2002, 2024, Oracle and/or its affiliates. All rights reserved. | |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| * | |
| * This code is free software; you can redistribute it and/or modify it | |
| * under the terms of the GNU General Public License version 2 only, as | |
| * published by the Free Software Foundation. Oracle designates this | |
| * particular file as subject to the "Classpath" exception as provided | |
| * by Oracle in the LICENSE file that accompanied this code. | |
| * | |
| * This code is distributed in the hope that it will be useful, but WITHOUT | |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| * version 2 for more details (a copy is included in the LICENSE file that | |
| * accompanied this code). | |
| * | |
| * You should have received a copy of the GNU General Public License version | |
| * 2 along with this work; if not, write to the Free Software Foundation, | |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| * | |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| * or visit www.oracle.com if you need additional information or have any | |
| * questions. | |
| */ | |
| package javax.management.remote; | |
| import java.io.Closeable; | |
| import java.io.IOException; | |
| import java.util.Map; | |
| import javax.management.ListenerNotFoundException; | |
| import javax.management.MBeanServerConnection; | |
| import javax.management.NotificationFilter; | |
| import javax.management.NotificationListener; | |
| import javax.security.auth.Subject; | |
| /** | |
| * <p>The client end of a JMX API connector. An object of this type can | |
| * be used to establish a connection to a connector server.</p> | |
| * | |
| * <p>A newly-created object of this type is unconnected. Its {@link | |
| * #connect connect} method must be called before it can be used. | |
| * However, objects created by {@link | |
| * JMXConnectorFactory#connect(JMXServiceURL, Map) | |
| * JMXConnectorFactory.connect} are already connected.</p> | |
| * | |
| * @since 1.5 | |
| */ | |
| public interface JMXConnector extends Closeable { | |
| /** | |
| * <p>Name of the attribute that specifies the credentials to send | |
| * to the connector server during connection. The value | |
| * associated with this attribute, if any, is a serializable | |
| * object of an appropriate type for the server's {@link | |
| * JMXAuthenticator}. | |
| */ | |
| public static final String CREDENTIALS = | |
| "jmx.remote.credentials"; | |
| /** | |
| * <p>Establishes the connection to the connector server. This | |
| * method is equivalent to {@link #connect(Map) | |
| * connect(null)}.</p> | |
| * | |
| * @exception IOException if the connection could not be made | |
| * because of a communication problem. | |
| * | |
| * @exception SecurityException if the connection could not be | |
| * made for security reasons. | |
| */ | |
| public void connect() throws IOException; | |
| /** | |
| * <p>Establishes the connection to the connector server.</p> | |
| * | |
| * <p>If <code>connect</code> has already been called successfully | |
| * on this object, calling it again has no effect. If, however, | |
| * {@link #close} was called after <code>connect</code>, the new | |
| * <code>connect</code> will throw an <code>IOException</code>. | |
| * | |
| * <p>Otherwise, either <code>connect</code> has never been called | |
| * on this object, or it has been called but produced an | |
| * exception. Then calling <code>connect</code> will attempt to | |
| * establish a connection to the connector server.</p> | |
| * | |
| * @param env the properties of the connection. Properties in | |
| * this map override properties in the map specified when the | |
| * <code>JMXConnector</code> was created, if any. This parameter | |
| * can be null, which is equivalent to an empty map. | |
| * | |
| * @exception IOException if the connection could not be made | |
| * because of a communication problem. | |
| * | |
| * @exception SecurityException if the connection could not be | |
| * made for security reasons. | |
| */ | |
| public void connect(Map<String,?> env) throws IOException; | |
| /** | |
| * <p>Returns an <code>MBeanServerConnection</code> object | |
| * representing a remote MBean server. For a given | |
| * <code>JMXConnector</code>, two successful calls to this method | |
| * will usually return the same <code>MBeanServerConnection</code> | |
| * object, though this is not required.</p> | |
| * | |
| * <p>For each method in the returned | |
| * <code>MBeanServerConnection</code>, calling the method causes | |
| * the corresponding method to be called in the remote MBean | |
| * server. The value returned by the MBean server method is the | |
| * value returned to the client. If the MBean server method | |
| * produces an <code>Exception</code>, the same | |
| * <code>Exception</code> is seen by the client. If the MBean | |
| * server method, or the attempt to call it, produces an | |
| * <code>Error</code>, the <code>Error</code> is wrapped in a | |
| * {@link JMXServerErrorException}, which is seen by the | |
| * client.</p> | |
| * | |
| * @return an object that implements the | |
| * <code>MBeanServerConnection</code> interface by forwarding its | |
| * methods to the remote MBean server. | |
| * | |
| * @exception IOException if a valid | |
| * <code>MBeanServerConnection</code> cannot be created, for | |
| * instance because the connection to the remote MBean server has | |
| * not yet been established (with the {@link #connect(Map) | |
| * connect} method), or it has been closed, or it has broken. | |
| */ | |
| public MBeanServerConnection getMBeanServerConnection() | |
| throws IOException; | |
| /** | |
| * <p>When {@code delegationSubject} is {@code null}, calling his method | |
| * is equivalent to calling {@link #getMBeanServerConnection()}. | |
| * | |
| * @implSpec The default implementation of this method throws | |
| * {@code UnsupportedOperationException} if {@code delegationSubject} is | |
| * non-null. Otherwise it calls {@link getMBeanServerConnection()}. | |
| * | |
| * @param delegationSubject must be {@code null}. | |
| * | |
| * @return an object that implements the <code>MBeanServerConnection</code> | |
| * interface by forwarding its methods to the remote MBean server. | |
| * | |
| * @exception IOException if a valid <code>MBeanServerConnection</code> | |
| * cannot be created, for instance because the connection to the remote | |
| * MBean server has not yet been established (with the {@link #connect(Map) | |
| * connect} method), or it has been closed, or it has broken. | |
| * | |
| * @exception UnsupportedOperationException if {@code delegationSubject} is non-null. | |
| * | |
| * @deprecated This method supported the legacy Subject Delegation feature, | |
| * which has been removed. There is no replacement. | |
| */ | |
| @Deprecated(since="21", forRemoval=true) | |
| public default MBeanServerConnection getMBeanServerConnection(Subject delegationSubject) | |
| throws IOException { | |
| if (delegationSubject != null) { | |
| throw new UnsupportedOperationException("Subject Delegation has been removed."); | |
| } | |
| return getMBeanServerConnection(); | |
| } | |
| /** | |
| * <p>Closes the client connection to its server. Any ongoing or new | |
| * request using the MBeanServerConnection returned by {@link | |
| * #getMBeanServerConnection()} will get an | |
| * <code>IOException</code>.</p> | |
| * | |
| * <p>If <code>close</code> has already been called successfully | |
| * on this object, calling it again has no effect. If | |
| * <code>close</code> has never been called, or if it was called | |
| * but produced an exception, an attempt will be made to close the | |
| * connection. This attempt can succeed, in which case | |
| * <code>close</code> will return normally, or it can generate an | |
| * exception.</p> | |
| * | |
| * <p>Closing a connection is a potentially slow operation. For | |
| * example, if the server has crashed, the close operation might | |
| * have to wait for a network protocol timeout. Callers that do | |
| * not want to block in a close operation should do it in a | |
| * separate thread.</p> | |
| * | |
| * @exception IOException if the connection cannot be closed | |
| * cleanly. If this exception is thrown, it is not known whether | |
| * the server end of the connection has been cleanly closed. | |
| */ | |
| public void close() throws IOException; | |
| /** | |
| * <p>Adds a listener to be informed of changes in connection | |
| * status. The listener will receive notifications of type {@link | |
| * JMXConnectionNotification}. An implementation can send other | |
| * types of notifications too.</p> | |
| * | |
| * <p>Any number of listeners can be added with this method. The | |
| * same listener can be added more than once with the same or | |
| * different values for the filter and handback. There is no | |
| * special treatment of a duplicate entry. For example, if a | |
| * listener is registered twice with no filter, then its | |
| * <code>handleNotification</code> method will be called twice for | |
| * each notification.</p> | |
| * | |
| * @param listener a listener to receive connection status | |
| * notifications. | |
| * @param filter a filter to select which notifications are to be | |
| * delivered to the listener, or null if all notifications are to | |
| * be delivered. | |
| * @param handback an object to be given to the listener along | |
| * with each notification. Can be null. | |
| * | |
| * @exception NullPointerException if <code>listener</code> is | |
| * null. | |
| * | |
| * @see #removeConnectionNotificationListener | |
| * @see javax.management.NotificationBroadcaster#addNotificationListener | |
| */ | |
| public void | |
| addConnectionNotificationListener(NotificationListener listener, | |
| NotificationFilter filter, | |
| Object handback); | |
| /** | |
| * <p>Removes a listener from the list to be informed of changes | |
| * in status. The listener must previously have been added. If | |
| * there is more than one matching listener, all are removed.</p> | |
| * | |
| * @param listener a listener to receive connection status | |
| * notifications. | |
| * | |
| * @exception NullPointerException if <code>listener</code> is | |
| * null. | |
| * | |
| * @exception ListenerNotFoundException if the listener is not | |
| * registered with this <code>JMXConnector</code>. | |
| * | |
| * @see #removeConnectionNotificationListener(NotificationListener, | |
| * NotificationFilter, Object) | |
| * @see #addConnectionNotificationListener | |
| * @see javax.management.NotificationEmitter#removeNotificationListener | |
| */ | |
| public void | |
| removeConnectionNotificationListener(NotificationListener listener) | |
| throws ListenerNotFoundException; | |
| /** | |
| * <p>Removes a listener from the list to be informed of changes | |
| * in status. The listener must previously have been added with | |
| * the same three parameters. If there is more than one matching | |
| * listener, only one is removed.</p> | |
| * | |
| * @param l a listener to receive connection status notifications. | |
| * @param f a filter to select which notifications are to be | |
| * delivered to the listener. Can be null. | |
| * @param handback an object to be given to the listener along | |
| * with each notification. Can be null. | |
| * | |
| * @exception ListenerNotFoundException if the listener is not | |
| * registered with this <code>JMXConnector</code>, or is not | |
| * registered with the given filter and handback. | |
| * | |
| * @see #removeConnectionNotificationListener(NotificationListener) | |
| * @see #addConnectionNotificationListener | |
| * @see javax.management.NotificationEmitter#removeNotificationListener | |
| */ | |
| public void removeConnectionNotificationListener(NotificationListener l, | |
| NotificationFilter f, | |
| Object handback) | |
| throws ListenerNotFoundException; | |
| /** | |
| * <p>Gets this connection's ID from the connector server. For a | |
| * given connector server, every connection will have a unique id | |
| * which does not change during the lifetime of the | |
| * connection.</p> | |
| * | |
| * @return the unique ID of this connection. This is the same as | |
| * the ID that the connector server includes in its {@link | |
| * JMXConnectionNotification}s. The {@link | |
| * javax.management.remote package description} describes the | |
| * conventions for connection IDs. | |
| * | |
| * @exception IOException if the connection ID cannot be obtained, | |
| * for instance because the connection is closed or broken. | |
| */ | |
| public String getConnectionId() throws IOException; | |
| } |