我有一个web应用程序,它有超过40 Mbean。我使用了Spring Framework。
我做得很好,效果也很好。但我有40个姆贝安,所以我想概括一下。
@Component
@ManagedResource(objectName="ProjectCache:name=XMBean", log=true, logFile="jmx.log")
public class XMBean extends AbstractCacheMBean<String, XCO, XCache> {
@ManagedOperation(description ="ProjectCache XCO key")
@Override
public List<String> showAllKeys(){
return super.getKey();
}
@ManagedOperation(description ="ProjectCache XCO")
public List<String> showAllElements(){
return super.findAll();
}
@Override
public XCache getCache() {
return getFacadeCache().getXCache();
}
@ManagedOperation(description ="ProjectCache XCO by key)
@Override
public String ShowbyKey(String key) {
return super.findbyKey(key);
}
}
现在我有相同的方式类YMbean,AMBean等等。
我在应用程序mbean.xml中配置了Spring。
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/beans"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee.xsd">
<!-- this bean must not be lazily initialized if the exporting is to happen -->
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
<property name="server" ref="mbeanServer"/>
<property name="assembler" ref="assembler" />
<property name="namingStrategy" ref="namingStrategy" />
</bean>
<bean id="jmxAttributeSource" class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" />
<!-- will create management interface using annotation metadata -->
<bean id="assembler" class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
<property name="attributeSource" ref="jmxAttributeSource" />
</bean>
<!-- will pick up the ObjectName from the annotation -->
<bean id="namingStrategy" class="org.springframework.jmx.export.naming.MetadataNamingStrategy">
<property name="attributeSource" ref="jmxAttributeSource" />
</bean>
<bean id="xMBean"
class="in.projet.business.mbean.XMBean">
<property name="memoryCache" ref="repository" />
</bean>
同样,我将预处理YMbeanClass,并在xml中初始化。
我应该做什么,不需要修改XML无论我创建了多少个类,都不需要更新XML。
所有姆贝恩的财产都是一样的,我将要使用。欢迎所有想法或意见。
感谢
删除所有配置,并使用名称空间替换,并且只替换一次。此外,您的MBean是@Components
,因此您可以简单地扫描它们。这只会给您留下以下几行xml
<context:component-scan base-package="in.projet.business.mbean" />
<context:mbean-export/>
或者,如果您想保留当前的配置而不是名称空间,请至少用以下内容替换它,并删除所有其他bean。这允许在应用程序上下文中自动检测MBean(这基本上与<context:mbean-export />
相同
有关更多信息,我强烈建议参考指南中的JMX章节。