Класс MBeanServerInvocationHandler
- Все реализованные интерфейсы:
InvocationHandler
public class MBeanServerInvocationHandler extends Object implements InvocationHandler
InvocationHandler, который перенаправляет методы интерфейса управления MBean через сервер MBean к самому MBean.
Используя подключение к MBeanServerConnection, ObjectName MBean на этом сервере MBean, и Java-интерфейс Intf, описывающий интерфейс управления MBean с использованием шаблонов для Standard MBean или MXBean, этот класс можно использовать для создания прокси для MBean. Прокси реализует интерфейс Intf таким образом, что все его методы перенаправляются через сервер MBean к MBean.
Если подключение InvocationHandler предназначено для MXBean, то параметры метода преобразуются из типа, объявленного в интерфейсе MXBean, в соответствующий сопоставленный тип, а возвращаемое значение преобразуется из сопоставленного типа в объявленный тип. Например, с методом
public List<String> reverse(List<String> list);
и с учётом того, что сопоставленный тип для List<String> является
String[], вызов proxy.reverse(someList) преобразует someList из List<String> в String[], вызывает операцию MBean reverse, а затем преобразует возвращённое значение String[] в List<String>.
Метод Object.toString(), Object.hashCode() или Object.equals(Object), когда вызывается на прокси с использованием этого обработчика вызовов, перенаправляется на сервер MBean как метод на проксируемом MBean только в том случае, если он появляется в одном из интерфейсов прокси. Для прокси, созданного с помощью JMX.newMBeanProxy или JMX.newMXBeanProxy, это означает, что метод должен присутствовать в интерфейсе Standard MBean или MXBean. В противном случае эти методы ведут себя следующим образом:
- toString() возвращает строковое представление прокси
- hashCode() возвращает хэш-код для прокси таким образом, что два равных прокси имеют одинаковый хэш-код
- equals(Object) возвращает true только в том случае, если объект-аргумент имеет тот же класс прокси, что и этот прокси, с MBeanServerInvocationHandler, имеющим то же MBeanServerConnection и ObjectName; если один из
MBeanServerInvocationHandlerбыл создан с аргументомClass, то другой должен быть создан с тем жеClassдляequalsбыть равным true.
- С:
- 1.5
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
MBeanServerInvocationHandler |
Обработчик вызовов, который перенаправляет методы через сервер MBean к Standard MBean. |
MBeanServerInvocationHandler |
Обработчик вызовов, который может перенаправлять методы через сервер MBean к Standard MBean или MXBean. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
MBeanServerConnection |
getMBeanServerConnection() |
Подключение к серверу MBean, через которое методы прокси, использующего этот обработчик, перенаправляются. |
ObjectName |
getObjectName() |
Имя MBean на сервере MBean, к которому перенаправляются методы. |
Object |
invoke |
Обрабатывает вызов метода на экземпляре прокси и возвращает результат. |
boolean |
isMXBean() |
Если true, то прокси предназначен для MXBean, и применяются соответствующие сопоставления к параметрам метода и возвращаемым значениям. |
static <T> T |
newProxyInstance |
Возвращает прокси, реализующий данный интерфейс, перенаправляя его методы через указанный сервер MBean к указанному MBean. |
Подробное описание конструкторов
MBeanServerInvocationHandler
public MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName)
Обработчик вызовов, перенаправляющий методы через сервер MBean к стандартному MBean. Этот конструктор можно использовать вместо JMX.newMBeanProxy, например, если требуется указать другой ClassLoader для Proxy.newProxyInstance.
Этот конструктор не подходит для MXBean. Используйте MBeanServerInvocationHandler(MBeanServerConnection, ObjectName, boolean). Этот конструктор эквивалентен new MBeanServerInvocationHandler(connection,
objectName, false).
- Параметры:
-
connection- подключение к серверу MBean, через которое будут перенаправляться все методы прокси, использующего этот обработчик. -
objectName- имя MBean на сервере MBean, к которому будут перенаправляться методы.
MBeanServerInvocationHandler
public MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName, boolean isMXBean)
Обработчик вызовов, который может перенаправлять методы через сервер MBean к стандартному MBean или MXBean. Этот конструктор можно использовать вместо JMX.newMXBeanProxy, например, если требуется указать другой ClassLoader для Proxy.newProxyInstance.
- Параметры:
-
connection- подключение к серверу MBean, через которое будут перенаправляться все методы прокси, использующего этот обработчик. -
objectName- имя MBean на сервере MBean, к которому будут перенаправляться методы. -
isMXBean- если true, прокси создаётся дляMXBean, и применяются соответствующие преобразования к параметрам и возвращаемым значениям методов. - С:
- 1.6
Подробное описание методов
getMBeanServerConnection
public MBeanServerConnection getMBeanServerConnection()
Подключение к серверу MBean, через которое методы прокси, использующего этот обработчик, перенаправляются.
- Возвращает:
- подключение к серверу MBean.
- С:
- 1.6
getObjectName
public ObjectName getObjectName()
Имя MBean на сервере MBean, к которому перенаправляются методы.
- Возвращает:
- имя объекта.
- С:
- 1.6
isMXBean
public boolean isMXBean()
Если true, прокси создаётся для MXBean, и применяются соответствующие преобразования к параметрам и возвращаемым значениям методов.
- Возвращает:
- является ли прокси прокси для MXBean.
- С:
- 1.6
newProxyInstance
public static <T> T newProxyInstance(MBeanServerConnection connection, ObjectName objectName, Class<T> interfaceClass, boolean notificationBroadcaster)
Возвращает прокси, реализующий заданный интерфейс, перенаправляя его методы через указанный сервер MBean к указанному MBean. Начиная с 1.6, методы JMX.newMBeanProxy(MBeanServerConnection, ObjectName, Class) и JMX.newMBeanProxy(MBeanServerConnection, ObjectName, Class, boolean) предпочтительнее.
Этот метод эквивалентен Proxy.newProxyInstance(interfaceClass.getClassLoader(),
interfaces, handler). Здесь handler — результат new
MBeanServerInvocationHandler(connection, objectName), а interfaces — массив, содержащий один элемент, если notificationBroadcaster ложно, и два, если истинно. Первый элемент interfaces — interfaceClass, а второй, если присутствует, — NotificationEmitter.class.
- Тип параметров:
-
T— позволяет компилятору знать, что если параметрinterfaceClass—MyMBean.class, то возвращаемый тип —MyMBean. - Параметры:
-
connection— сервер MBean для перенаправления. -
objectName— имя MBean наconnectionдля перенаправления. -
interfaceClass— интерфейс управления, который экспортирует MBean и который также будет реализован созданным прокси. -
notificationBroadcaster— сделать возвращаемый прокси реализующимNotificationEmitter, перенаправляя его методы черезconnection. ВызовNotificationBroadcaster.addNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)на прокси приведет к вызовуMBeanServerConnection.addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object), и аналогично для других методовNotificationBroadcasterиNotificationEmitter. - Возвращает:
- новый экземпляр прокси.
- См. также:
invoke
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
InvocationHandler- Определено в:
-
invokeв интерфейсеInvocationHandler - Параметры:
-
proxy- экземпляр прокси, на котором был вызван метод -
method-Methodэкземпляр, соответствующий методу интерфейса, вызванному на экземпляре прокси. Класс объявления объектаMethodбудет интерфейсом, в котором метод был объявлен, который может быть суперинтерфейсом интерфейса прокси, который прокси-класс унаследовал метод. -
args- массив объектов, содержащий значения аргументов, переданных в вызов метода на экземпляре прокси, илиnull, если метод интерфейса не принимает аргументов. Аргументы примитивных типов обернуты в экземпляры соответствующего обертывающего класса примитивного типа, например,java.lang.Integerилиjava.lang.Boolean. - Возвращает:
- значение для возврата из вызова метода на экземпляре прокси. Если тип возврата объявленного метода интерфейса является примитивным типом, то возвращаемое значение этого метода должно быть экземпляром соответствующего обертывающего класса примитивного типа; в противном случае, это должно быть тип, приводимый к объявленному типу возврата. Если значение, возвращаемое этим методом, является
null, а тип возврата метода интерфейса является примитивным, то вызов метода на экземпляре прокси выброситNullPointerException. Если возвращаемое этим методом значение не совместимо с объявленным типом возврата метода интерфейса, как описано выше, вызов метода на экземпляре прокси выброситClassCastException. - Выбрасывает:
-
Throwable- исключение для выброса при вызове метода на экземпляре прокси. Тип исключения должен быть приводим к любому из типов исключений, объявленных в разделеthrowsметода интерфейса, или к типам исключенийjava.lang.RuntimeExceptionилиjava.lang.Error. Если этот метод выбрасывает проверочное исключение, которое не приводится к одному из типов исключений, объявленных в разделеthrowsметода интерфейса, тоUndeclaredThrowableException, содержащий выброшенное исключение, будет выброшен при вызове метода на экземпляре прокси. - См. также:
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.management/javax/management/MBeanServerInvocationHandler.html