日期:2014-05-20  浏览次数:20793 次

有没有Spring框架下JMX的例子?
小弟想学习下在Spring下编写JMX程序,请大虾给提供个实例吧,简单点好,谢谢!

------解决方案--------------------
www.google.com
www.baidu.com
------解决方案--------------------
首先,创建ManagedBeanImpl.java:
public class ManagedBeanImpl implements ManagedBean {
public ManagedBeanImpl() {} 
private String someProperty;
public void setSomeProperty(String someProperty) {
this.someProperty = someProperty;
}
  
public String getSomeProperty() {
return someProperty;
}
public String doSomething() {
return "Here's some property: "+someProperty;
}
}
ManagedBeanImpl类是一个普通的JavaBean,只是实现了拥有doSomething方法的ManagedBean接口,并不是真正的JMX Mbean。
接下来在Spring配置文件中声明它:
<bean id="managedBean" class="com.habuma.jmx.ManagedBeanImpl">
<property name="someProperty">
<value>Howdy</value>
</property>
</bean>
到目前为此,没有什么特别的发生,只是常规的Spring Bean声明。
但下面我们要声明JMX的Adapter了:
<bean id="jmxAdapter"
class="org.springframework.jmx.JmxMBeanAdapter"
depends-on="jmxServer">
<property name="beans">
<map>
<entry key="foobar:Name=myBean">
<ref bean="managedBean"/>
</entry>
</map>
</property>
</bean>
JmxMBeanAdapter有一个java.util.Map作为属性,内有一系列bean的引用,JmxMBeanAdapter将它们的属性和方法暴露出来,自动地作为MBean被管理的属性和方法。每一个entry的key值用于创建MBean的ObjectName。你可能注意到了depends-on配置,过一会在解释。
如果你的应用运行在实现了JMX的运行环境中,到这里配置就算完成了。但如果是单独运行的话,你还需要启动自己的MBeanServer,配置如下:
<bean id="jmxServer" class="org.springframework.jmx.factory.MBeanServerFactoryBean">
<property name="defaultDomain">
<value>foobar</value>
</property>
</bean>
接下来你需要Sun的jmxri.jar来运行这个例子。
现在解释声明"jmxAdapter"时的depends-on配置参数。如果你运行一个独立的应用(即运行环境中没有实现JMX),这个配置参数告诉Spring,在创建"jmxServer"后才能创建"jmxAdapter"实例。这点很重要,因为JmxMBeanAdapter需要MBeanServer来注册它的MBean。
到目前为此我们做了些有趣的工作,但更有趣的是,我们把"managedBean"注册成一个MBean。要实现这一点,你需要把Sun的jmxri.jar放在类路径下,这样你可以使用其中的HtmlAdaptorServer。为了让HtmlAdaptorServer使用更简单,我创建了下面的Factory Bean:
package com.habuma.jmx;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import com.sun.jdmk.comm.HtmlAdaptorServer;
public class HtmlAdapterFactoryBean 
implements FactoryBean, InitializingBean {
HtmlAdaptorServer htmlAdapter;
public Object getObject() throws Exception {
return htmlAdapter;
}
public Class getObjectType() {
return HtmlAdaptorServer.class;
}
public boolean isSingleton() {
return true;
 }
public void afterPropertiesSet() throws Exception {
htmlAdapter = new HtmlAdaptorServer();
htmlAdapter.setPort(port);
ObjectName objectName = new ObjectName(name);
mBeanServer.registerMBean(htmlAdapter, objectName);
htmlAdapter.start();
}
private int port = 9092;
public void setPort(int port) {
this.port = port;
}
private String name = "HtmlAdaptor:name=HtmlAdaptor";
public void setName(String name) {
this.name = name;
}
private MBeanServer mBeanServer;
public void setMBeanServer(MBeanServer mBeanServer) {
this.mBeanServer = mBeanServer;
}
}
这个Factory Bean替你干了些累活,它设置并启动了HtmlAdaptorServer。要使用它,在Spring配置文件中声明:
<bean id="htmlAdapter" class="com.habuma.jmx.HtmlAdapterFactoryBean">