{"id":94,"date":"2007-08-28T08:19:00","date_gmt":"2007-08-28T08:19:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=94"},"modified":"2007-08-28T08:19:00","modified_gmt":"2007-08-28T08:19:00","slug":"inselupdate-jmx-mit-rmi-adaptor","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2007\/08\/inselupdate-jmx-mit-rmi-adaptor\/","title":{"rendered":"Inselupdate: JMX mit RMI-Adaptor"},"content":{"rendered":"<\/p>\n<p>F\u00fcr die Anbildung an den JMX-Server dient nicht nur die JConsole, sondern verschiedene andere Wege sind denkbar, etwa \u00fcber HTTP oder \u00fcber einen eigenen Client, der \u00fcber RMI kommuniziert.<\/p>\n<p><strong>JMXConnectorServer f\u00fcr den Server<\/strong><\/p>\n<p>Zur Ver\u00f6ffentlichung der MBeans \u00fcber RMI ist der JMXConnectorServer verantwortlich. Damit die MBeans an die RMI-Registry gebunden werden, wird eine besondere URL verwendet, die den Service genau beschreibt. Die JMXServiceURL hat den allgemeinen Aufbau:<\/p>\n<p>service:jmx:&lt;protocol&gt;:\/\/[[[&lt;host&gt;]:&lt;port&gt;]\/&lt;path&gt;]<\/p>\n<p>Vor dem Start des Programms muss die RMI-Registry f\u00fcr Anmeldungen bereit sein; da unser Programm auf dem gleichen Rechner arbeitet, starten wir den RMI-Namensdienst selbst.<\/p>\n<p>LocateRegistry.createRegistry( 1099 );<br \/>MBeanServer server = ManagementFactory.getPlatformMBeanServer();<br \/>String url = &#8222;service:jmx:rmi:\/\/\/jndi\/rmi:\/\/localhost\/maze&#8220;<br \/>JMXConnectorServer connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(<br \/>new JMXServiceURL( url ), null, server );<br \/>connectorServer.start(); <\/p>\n<p>ObjectName name = new ObjectName( &#8222;com.tutego.insel.jmx:type=Maze&#8220; );<br \/>MazeMBean maze = new Maze();<br \/>server.registerMBean( maze, name );  <\/p>\n<p>JOptionPane.showMessageDialog( null, &#8222;Ende&#8220; );<br \/>System.exit( 0 );<\/p>\n<p><strong>JConsole mit Remote-Connection<\/strong><\/p>\n<p>Mit der JConsole k\u00f6nnten wir nun Verbindung aufnehmen, in dem unter Remote Connection die URL service:jmx:rmi:\/\/\/jndi\/rmi:\/\/localhost\/maze Einsatz findet.<\/p>\n<p><strong>JMXConnector f\u00fcr den Client<\/strong><\/p>\n<p>Auf der Clientseite gibt es mit JMXConnector den Gegenspieler zum JMXConnectorServer. Das Objekt liefert uns mit getMBeanServerConnection() ein MBeanServerConnection-Objekt, was sozusagen die Repr\u00e4sentation des MBean-Servers MBeanServer auf der anderen Seite entspricht (genauso genommen gilt f\u00fcr die Schnittstellen: MBeanServer extends MBeanServerConnection). \u00dcber getAttribute() lassen sich dann zum Beispiel Properties erfragen.<\/p>\n<p>JMXServiceURL u = new JMXServiceURL( &#8222;service:jmx:rmi:\/\/\/jndi\/rmi:\/\/localhost\/maze&#8220; );<br \/>JMXConnector c = JMXConnectorFactory.connect( u );<br \/>MBeanServerConnection mbsc = c.getMBeanServerConnection();<br \/>ObjectName name = new ObjectName( &#8222;com.tutego.insel.jmx:type=Maze&#8220; );<br \/>System.out.println( mbsc.getAttribute( name, &#8222;MaxNumberOfPlayers&#8220; ) );<\/p>\n<p><strong>Schnittstelle und Klasse f\u00fcr die MBean<\/strong><\/p>\n<p>package com.tutego.insel.jmx; <\/p>\n<p>public interface MazeMBean<br \/>{<br \/>void setMaxNumberOfPlayers( int numberOfPlayers );<br \/>int getMaxNumberOfPlayers();<br \/>void dragonAlarm();<br \/>}  <\/p>\n<p>package com.tutego.insel.jmx;  <\/p>\n<p>public class Maze implements MazeMBean<br \/>{<br \/>private int numberOfPersons;  <\/p>\n<p>public void setMaxNumberOfPlayers( int numberOfPersons )<br \/>{<br \/>this.numberOfPersons = numberOfPersons;<br \/>}  <\/p>\n<p>public int getMaxNumberOfPlayers()<br \/>{<br \/>return numberOfPersons;<br \/>}  <\/p>\n<p>public void dragonAlarm()<br \/>{<br \/>System.out.println( &#8222;Heul. Huhuhuhu.&#8220; );<br \/>}<br \/>}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>F\u00fcr die Anbildung an den JMX-Server dient nicht nur die JConsole, sondern verschiedene andere Wege sind denkbar, etwa \u00fcber HTTP oder \u00fcber einen eigenen Client, der \u00fcber RMI kommuniziert. JMXConnectorServer f\u00fcr den Server Zur Ver\u00f6ffentlichung der MBeans \u00fcber RMI ist der JMXConnectorServer verantwortlich. Damit die MBeans an die RMI-Registry gebunden werden, wird eine besondere URL [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-94","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/94","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=94"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/94\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=94"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=94"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=94"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}