I przyszło mi stworzyć klienta ("Trzeba było się nie wychylać", ktoś mógłby krzyknąć).
Przeglądając różne materiały dotyczące JMX API, brakowało mi spójnego przykładu. Natchnęło mnie, aby napisać własnego. Chwila namysłu i padło na...Groovy. W końcu do tego typu zadań świetnie się nadaje.
(Gdyby nie fakt, że poszukiwanie rozwiązania trwało i musiałem sobie przypomnieć programowanie w Groovy, zacząłbym od...) Po chwili miałem działające rozwiązanie w groovysh.
import javax.management.ObjectName import javax.management.remote.JMXConnectorFactory as JmxFactory import javax.management.remote.JMXConnector as JmxConn import javax.management.remote.JMXServiceURL as JmxUrl serverUrl = 'service:jmx:rmi://localhost/jndi/rmi://localhost:1099/JMXConnector' url = new JmxUrl(serverUrl) creds = ["system", "manager"] as String[] env = ["jmx.remote.credentials":creds] jmxc = JmxFactory.connect(url, env) server = jmxc.MBeanServerConnection; for (d in server.domains) { println d } mbeanName = "geronimo:J2EEServer=geronimo,name=JVM,j2eeType=JVM" mbean = new ObjectName(mbeanName) println server.getAttribute(mbean, "kernelBootTime") jmxc.close();Trzeba jeszcze skrypcik lekko podrasować, aby użyć produkcyjnie, ale ogólny zarys już jest. Usprawnienia mile widziane.
Mam nieodparte wrażenie, że zastosowałem właściwe narzędzie do problemu. A jak Ty podszedłbyś/podeszłabyś do tematu?
p.s. Podczas rozpoczęcia konferencji warsjawa 2010 pozwoliłem sobie zrobić dygresję, taki drobny żarcik, odnośnie kobiet na sali, kiedy to na moje pytanie - już nie pamiętam jakie - padła odpowiedź damskim głosem. Natychmiast przypomniałem sobie skecz z Monty Pythona - Stoning i ledwo udało mi się utrzymać powagę. Skecz bajka! Że też zawsze musi mnie "natchnąć" w trakcie publicznych wystąpień (!)
GroovyMBean na ratunek - Po grooviowemu mozesz po prostu napisac:
OdpowiedzUsuńprintln(new GroovyMBean(serverUrl, beanName).kernelBootTime);
Wiecej tu:
http://groovy.codehaus.org/Groovy+and+JMX
Złośliwie napisze:
OdpowiedzUsuń> jconsole
zakładka MBean :)
P.S: Oczywiście z Java 6
@pedro, to żadna złośliwość biorąc pod uwagę, że Geronimo dostarcza JMX Browser :-) Tu jednak chodziło o dostęp ze skryptu, który będzie wykonywany przez inne narzędzie do monitorowania.
OdpowiedzUsuń@popaprany, niesamowite, że o tym piszesz. Nie poznajesz układu kodu i nazw importowanych klas? Jakby podobne do tego ze wskazanej stronki :-) Miałem wskazać na tę stronę, ale ostatecznie zrezygnowałem (i dobrze, bo nie wiedziałbym, że czytasz mojego bloga! :)