Класс MBeanServerInvocationHandler
- Все реализуемые интерфейсы:
InvocationHandler
public class MBeanServerInvocationHandler extends Object implements InvocationHandler
InvocationHandler, который перенаправляет методы интерфейса управления MBean через MBean-сервер к MBean.
При наличии MBeanServerConnection, ObjectName MBean в этом MBean-сервере и Java-интерфейса Intf, описывающего интерфейс управления MBean с использованием шаблонов стандартного 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, это означает, что метод должен присутствовать в интерфейсе стандартного MBean или MXBean. В противном случае эти методы ведут себя следующим образом:
- toString() возвращает строковое представление прокси
- hashCode() возвращает хеш-код прокси, при этом два равных прокси имеют одинаковый хеш-код
- equals(Object) возвращает true тогда и только тогда, когда аргумент Object принадлежит тому же классу прокси, что и данный прокси, и у него есть MBeanServerInvocationHandler с теми же MBeanServerConnection и ObjectName; если один из
MBeanServerInvocationHandlers был создан с аргументомClass, то другой должен быть создан с тем жеClass, чтобыequalsвернул true.
- Начиная с версии:
- 1.5
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
MBeanServerInvocationHandler |
Обработчик вызовов, перенаправляющий методы через MBean-сервер к стандартному MBean. |
MBeanServerInvocationHandler |
Обработчик вызовов, который может перенаправлять методы через MBean-сервер к стандартному 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 имеет значение false, и два элемента, если оно имеет значение true. Первый элемент interfaces — interfaceClass, а второй, если он присутствует, — NotificationEmitter.class.
- Параметры типа:
T— позволяет компилятору определить, что, например, если параметрinterfaceClassимеет типMyMBean.class, то возвращаемый тип —MyMBean.- Параметры:
-
connection— MBean-сервер, которому будут перенаправляться вызовы. -
objectName— имя MBean вconnection, которому будут перенаправляться вызовы. -
interfaceClass— интерфейс управления, предоставляемый MBean и реализуемый также возвращаемым прокси. -
notificationBroadcaster— добавляет к возвращаемому прокси реализациюNotificationEmitter, перенаправляя его методы черезconnection. ВызовNotificationBroadcaster.addNotificationListener(NotificationListener, NotificationFilter, 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, 2025, 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/25/docs/api/java.management/javax/management/MBeanServerInvocationHandler.html