java - Find JMX MBeans using Nashorn javascript jjs -
i trying change value of proxyname in catalina/connector/8009/* connector. problem have following exception when trying find mbean name.
exception in thread "main" java.lang.classcastexception: cannot cast java.lang.string javax.management.queryexp @ java.lang.invoke.methodhandleimpl.newclasscastexception(methodhandleimpl.java:361) @ java.lang.invoke.methodhandleimpl.castreference(methodhandleimpl.java:356) @ jdk.nashorn.internal.scripts.script$jmx_test_jjs.:program(jmx-test.jjs:32) @ jdk.nashorn.internal.runtime.scriptfunctiondata.invoke(scriptfunctiondata.java:636) @ jdk.nashorn.internal.runtime.scriptfunction.invoke(scriptfunction.java:229) @ jdk.nashorn.internal.runtime.scriptruntime.apply(scriptruntime.java:387) @ jdk.nashorn.tools.shell.apply(shell.java:394) @ jdk.nashorn.tools.shell.runscripts(shell.java:323) @ jdk.nashorn.tools.shell.run(shell.java:169) @ jdk.nashorn.tools.shell.main(shell.java:133) @ jdk.nashorn.tools.shell.main(shell.java:112)
the script is:
#! /usr/java/jdk1.8.0_25/bin/jjs var host="jmxremotehost" var port=7091 var serviceurl = "service:jmx:rmi:///jndi/rmi://" + host + ":" + port + "/jmxrmi" var url = new javax.management.remote.jmxserviceurl(serviceurl); var stringarraytype = java.type("java.lang.string[]") var credentials = new stringarraytype(2) credentials[0]="jmxuser" credentials[1]="jmxpassword" var hashmaptype = java.type("java.util.hashmap") var environment = new hashmaptype() environment.put("jmx.remote.credentials",credentials) var connector = javax.management.remote.jmxconnectorfactory.connect(url,environment) var mbeanserverconnection=connector.getmbeanserverconnection() var objectnametype = java.type("javax.management.objectname") objectname = new objectnametype('catalina:type=connector,port=8009,*') print(mbeanserverconnection.querynames(objectname, "proxyname"), null)
the problem not know how send java null
or else valid 2nd parameter in querynames() method of mbeanserverconnection interface. see: http://docs.oracle.com/javase/7/docs/api/javax/management/mbeanserverconnection.html#querymbeans%28javax.management.objectname,%20javax.management.queryexp%29
just using null works me:
print(mbeanserverconnection.querynames(objectname, null), null)
i trimmed down script bit, , used platform mbeanserver save time:
#! /usr/lib/jvm/jdk1.8.0_45/bin/jjs var mbeanserverconnection=java.lang.management.managementfactory.getplatformmbeanserver(); var objectnametype = java.type("javax.management.objectname") objectname = new objectnametype('*:*') print(mbeanserverconnection.querynames(objectname, null), null)
the output was:
[java.lang:type=memorypool,name=metaspace, java.lang:type=memorypool,name=ps old gen, java.lang:type=garbagecollector,name=ps scavenge, java.lang:type=memorypool,name=ps eden space, jmimplementation:type=mbeanserverdelegate, java.lang:type=runtime, java.lang:type=threading, java.lang:type=operatingsystem, java.lang:type=memorypool,name=code cache, java.nio:type=bufferpool,name=direct, java.lang:type=compilation, java.lang:type=memorymanager,name=codecachemanager, java.lang:type=memorypool,name=compressed class space, java.lang:type=memory, java.nio:type=bufferpool,name=mapped, java.util.logging:type=logging, java.lang:type=memorypool,name=ps survivor space, java.lang:type=classloading, java.lang:type=memorymanager,name=metaspace manager, com.sun.management:type=diagnosticcommand, java.lang:type=garbagecollector,name=ps marksweep, com.sun.management:type=hotspotdiagnostic]
slightly newer java version, don't think that's @ issue.
update
tried remote connection hbase server , ran pattern search more similar test:
#! /usr/lib/jvm/jdk1.8.0_45/bin/jjs var host="njwmintx" var port=10101 var serviceurl = "service:jmx:rmi:///jndi/rmi://" + host + ":" + port + "/jmxrmi" var url = new javax.management.remote.jmxserviceurl(serviceurl); var connector = javax.management.remote.jmxconnectorfactory.connect(url) var mbeanserverconnection=connector.getmbeanserverconnection() var objectnametype = java.type("javax.management.objectname") objectname = new objectnametype('hadoop:service=hbase,name=regionserver,*') print(mbeanserverconnection.querynames(objectname, null), null)
output was:
[hadoop:service=hbase,name=regionserver,sub=server, hadoop:service=hbase,name=regionserver,sub=regions, hadoop:service=hbase,name=regionserver,sub=replication, hadoop:service=hbase,name=regionserver,sub=wal]
Comments
Post a Comment