{"id":1625,"date":"2016-10-04T18:06:42","date_gmt":"2016-10-04T16:06:42","guid":{"rendered":"http:\/\/blog.rabahi.net\/?page_id=1625"},"modified":"2016-10-04T18:06:42","modified_gmt":"2016-10-04T16:06:42","slug":"java-spring-jmx","status":"publish","type":"page","link":"https:\/\/blog.rabahi.net\/?page_id=1625","title":{"rendered":"Java Spring &#8211; Jmx"},"content":{"rendered":"<div id=\"toc_container\" class=\"no_bullets\"><p class=\"toc_title\">Contents<\/p><ul class=\"toc_list\"><li><a href=\"#Prerequistes\"><span class=\"toc_number toc_depth_1\">1<\/span> Prerequistes<\/a><\/li><li><a href=\"#Configuration\"><span class=\"toc_number toc_depth_1\">2<\/span> Configuration<\/a><ul><li><a href=\"#JmxConfigjava\"><span class=\"toc_number toc_depth_2\">2.1<\/span> JmxConfig.java<\/a><\/li><li><a href=\"#DiscountService\"><span class=\"toc_number toc_depth_2\">2.2<\/span> DiscountService<\/a><\/li><\/ul><\/li><li><a href=\"#Request\"><span class=\"toc_number toc_depth_1\">3<\/span> Request<\/a><ul><li><a href=\"#JConsole\"><span class=\"toc_number toc_depth_2\">3.1<\/span> JConsole<\/a><\/li><li><a href=\"#Using_API\"><span class=\"toc_number toc_depth_2\">3.2<\/span> Using API<\/a><\/li><\/ul><\/li><\/ul><\/div>\n<h1><span id=\"Prerequistes\">Prerequistes<\/span><\/h1>\n<p>Please read : <a href=\"?page_id=1549\">Java spring &#8211; quickstart<\/a><\/p>\n<h1><span id=\"Configuration\">Configuration<\/span><\/h1>\n<h2><span id=\"JmxConfigjava\">JmxConfig.java<\/span><\/h2>\n<pre lang=\"java\">\r\n@Configuration\r\n@EnableMBeanExport\r\npublic class JmxConfig {\r\n\r\n    @Bean\r\n    public DiscountService discountService() {\r\n        return new DiscountService();\r\n    }\r\n\r\n    @Bean\r\n    public MBeanServerFactoryBean mbeanServer() {\r\n        return new MBeanServerFactoryBean();\r\n    }\r\n\r\n    @Bean\r\n    public RmiRegistryFactoryBean registry() {\r\n        return new RmiRegistryFactoryBean();\r\n    }\r\n\r\n    @Bean\r\n    @DependsOn(\"registry\")\r\n    public ConnectorServerFactoryBean connectorServer() throws MalformedObjectNameException {\r\n        ConnectorServerFactoryBean connectorServerFactoryBean = new ConnectorServerFactoryBean();\r\n        connectorServerFactoryBean.setObjectName(\"connector:name=rmi\");\r\n        connectorServerFactoryBean.setServiceUrl(\"service:jmx:rmi:\/\/localhost\/jndi\/rmi:\/\/localhost:1099\/connector\");\r\n        return connectorServerFactoryBean;\r\n    }\r\n\r\n}\r\n<\/pre>\n<h2><span id=\"DiscountService\">DiscountService<\/span><\/h2>\n<pre lang=\"java\">\r\n@ManagedResource\r\npublic class DiscountService {\r\n\r\n    private AtomicInteger globalDiscount = new AtomicInteger(12);\r\n\r\n    \/**\r\n     * @return\r\n     *\/\r\n    public int calculateDiscount() {\r\n        return globalDiscount.get() * 2;\r\n    }\r\n\r\n    \/**\r\n     * @return\r\n     *\/\r\n    @ManagedOperation\r\n    public int checkGlobalDiscount() {\r\n        return globalDiscount.get();\r\n    }\r\n\r\n    \/**\r\n     * @param newDiscount\r\n     *\/\r\n    @ManagedOperation\r\n    public void modifyGlobalDiscount(int newDiscount) {\r\n        globalDiscount.set(newDiscount);\r\n    }\r\n}\r\n<\/pre>\n<h1><span id=\"Request\">Request<\/span><\/h1>\n<h2><span id=\"JConsole\">JConsole<\/span><\/h2>\n<p>You can request the jmx server using jconsole :<\/p>\n<ul>\n<li>Run the server (under tomcat)<\/li>\n<li>Open %JAVA_HOME%\/bin\/jconsole tool<\/li>\n<li>enter this url : service:jmx:rmi:\/\/localhost\/jndi\/rmi:\/\/localhost:1099\/connector<\/li>\n<\/ul>\n<h2><span id=\"Using_API\">Using API<\/span><\/h2>\n<pre lang=\"java\">\r\nprivate static final String CHECK_GLOBAL_DISCOUNT_METHOD_NAME = \"checkGlobalDiscount\";\r\nprivate static final String MODIFY_GLOBAL_DISCOUNT_METHOD_NAME = \"modifyGlobalDiscount\";\r\n\r\n\/\/ given\r\nJMXServiceURL url = new JMXServiceURL(\"service:jmx:rmi:\/\/localhost\/jndi\/rmi:\/\/localhost:1099\/connector\");\r\nJMXConnector jmxc = JMXConnectorFactory.connect(url, null);\r\n\r\nMBeanServerConnection connection  = jmxc.getMBeanServerConnection();\r\nObjectName objectName = new ObjectName(\"net.rabahi.spring.jmx:name=discountService,type=DiscountService\");\r\n\r\n\/\/ when\r\nInteger oldDiscount = (Integer) connection.invoke(objectName, CHECK_GLOBAL_DISCOUNT_METHOD_NAME, null, null);\r\nInteger newDiscount = ++oldDiscount;\r\nconnection.invoke(objectName, MODIFY_GLOBAL_DISCOUNT_METHOD_NAME, new Object[]{newDiscount}, new String[]{int.class.getName()});\r\nInteger currentDiscount = (Integer) connection.invoke(objectName, CHECK_GLOBAL_DISCOUNT_METHOD_NAME, null, null);\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Contents1 Prerequistes2 Configuration2.1 JmxConfig.java2.2 DiscountService3 Request3.1 JConsole3.2 Using API Prerequistes Please read : Java spring &#8211; quickstart Configuration JmxConfig.java @Configuration @EnableMBeanExport public class JmxConfig { @Bean public DiscountService discountService() { return new DiscountService(); } @Bean public MBeanServerFactoryBean mbeanServer() { return new MBeanServerFactoryBean(); } @Bean public RmiRegistryFactoryBean registry() { return new RmiRegistryFactoryBean(); } @Bean @DependsOn(&#8220;registry&#8221;) public [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1547,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1625","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1625"}],"version-history":[{"count":1,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1625\/revisions"}],"predecessor-version":[{"id":1626,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1625\/revisions\/1626"}],"up":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1547"}],"wp:attachment":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}