diff --git a/cryostat-core/src/main/java/io/cryostat/core/net/JFRConnection.java b/cryostat-core/src/main/java/io/cryostat/core/net/JFRConnection.java index 5ca17dbb..54b9907f 100644 --- a/cryostat-core/src/main/java/io/cryostat/core/net/JFRConnection.java +++ b/cryostat-core/src/main/java/io/cryostat/core/net/JFRConnection.java @@ -19,6 +19,8 @@ import javax.management.InstanceNotFoundException; import javax.management.IntrospectionException; +import javax.management.MBeanException; +import javax.management.MalformedObjectNameException; import javax.management.ReflectionException; import javax.management.remote.JMXServiceURL; @@ -56,6 +58,17 @@ public default String getJvmId() throws IDException, IOException { public JvmIdentifier getJvmIdentifier() throws IDException, IOException; + public default T invokeMBeanOperation( + String beanName, + String operation, + Object[] params, + String[] signature, + Class returnType) + throws MalformedObjectNameException, InstanceNotFoundException, MBeanException, + ReflectionException, IOException, ConnectionException { + throw new ConnectionException("Unimplemented"); + } + public MBeanMetrics getMBeanMetrics() throws ConnectionException, IOException, InstanceNotFoundException, IntrospectionException, ReflectionException; diff --git a/cryostat-core/src/main/java/io/cryostat/core/net/JFRJMXConnection.java b/cryostat-core/src/main/java/io/cryostat/core/net/JFRJMXConnection.java index 5c3e1664..b3aeebe4 100644 --- a/cryostat-core/src/main/java/io/cryostat/core/net/JFRJMXConnection.java +++ b/cryostat-core/src/main/java/io/cryostat/core/net/JFRJMXConnection.java @@ -31,6 +31,7 @@ import javax.management.IntrospectionException; import javax.management.MBeanAttributeInfo; import javax.management.MBeanException; +import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.ReflectionException; import javax.management.openmbean.CompositeData; @@ -206,6 +207,24 @@ public synchronized JvmIdentifier getJvmIdentifier() throws IDException, IOExcep } } + @Override + public T invokeMBeanOperation( + String beanName, + String operation, + Object[] params, + String[] signature, + Class returnType) + throws MalformedObjectNameException, InstanceNotFoundException, MBeanException, + ReflectionException, IOException, ConnectionException { + if (!isConnected()) { + connect(); + } + return (T) + this.rjmxConnection + .getMBeanServer() + .invoke(ObjectName.getInstance(beanName), operation, params, signature); + } + private Map parseCompositeData(CompositeData compositeData) { Map map = new HashMap<>(); for (String key : compositeData.getCompositeType().keySet()) {