In
this post, I am going to explain how to expose a resource for remote
management.
It
is very simple, run the main application using below arguments.
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
For
the sake of simplicity, I am not considered security aspects like encryption
and authentication here.
Find
the below working application.
CRUDStatistics.java
package com.sample.model; public class CRUDStatistics { private int readCount = 0; private int writeCount = 0; public int getReadCount() { return readCount; } public void setReadCount(int readCount) { this.readCount = readCount; } public int getWriteCount() { return writeCount; } public void setWriteCount(int writeCount) { this.writeCount = writeCount; } }
SystemStatisticsMXBean.java
package com.sample.mbeans; import com.sample.model.CRUDStatistics; public interface SystemStatisticsMXBean { public void setReadCount(int readCount); public void setWriteCount(int writeCount); public CRUDStatistics getAppStats(); }
SystemStatistics.java
StatsAgent.java
Application.java
package com.sample.mbeans; import com.sample.model.CRUDStatistics; public class SystemStatistics implements SystemStatisticsMXBean { private CRUDStatistics appStats = new CRUDStatistics(); @Override public void setReadCount(int readCount) { appStats.setReadCount(readCount); } @Override public void setWriteCount(int writeCount) { appStats.setWriteCount(writeCount); } @Override public CRUDStatistics getAppStats() { return appStats; } }
StatsAgent.java
package com.sample.agents; import java.io.IOException; import java.lang.management.ManagementFactory; import javax.management.InstanceAlreadyExistsException; import javax.management.MBeanRegistrationException; import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; import com.sample.mbeans.SystemStatistics; public class StatsAgent { private MBeanServer mbs; private SystemStatistics mbean; public StatsAgent() throws MalformedObjectNameException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException, IOException { ObjectName name = new ObjectName("com.sample.mbeans:type=SystemStatisticsMBean"); mbean = new SystemStatistics(); mbs = ManagementFactory.getPlatformMBeanServer(); mbs.registerMBean(mbean, name); } }
Application.java
package com.sample.app; import com.sample.agents.StatsAgent; public class Application { public static void main(String[] args) throws Exception { new StatsAgent(); System.out.println("Waiting forever..."); Thread.sleep(Long.MAX_VALUE); } }
Run Application.java, by passing below arguments.
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
If
you are running in Eclipse, follow below steps to pass above arguments.
Right
click on Application.java.
Run
As -> Run Configurations…
In
VM arguments: filed, add below arguments.
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
Click
on Run button.
Open
command prompt (or) terminal and execute jconsole command.
Select
‘Remote Process:’ and enter the url as localhost:9999 and click on Connect
button.
If
you see below kind of window, click on ‘Insecure connection’ button.
For
the left panel, navigate to AppStats. In the right side of the window, double
click on Value field.
You
can see readCount, writeCount values as 0.
Select
the attribute ReadCount, enter the value as 50 and press Enter.
Come
to ‘AppStats’ again, you can able to see ReadCount value as 50.
That’s
it.. you are done….:)
No comments:
Post a Comment