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

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -