我遇到了同样的问题,并建立了
Cemo’s solution.这是一个示例实现.
的context.xml
MultiAppMetadataNamingStrategy.java
public class MultiAppMetadataNamingStrategy implements ObjectNamingStrategy, InitializingBean {
private String applicationName;
public MultiAppMetadataNamingStrategy() {
}
public MultiAppMetadataNamingStrategy(String applicationName) {
this.applicationName = Preconditions.checkNotNull(applicationName, "applicationName must not be null");
}
public void setApplicationName(String applicationName) {
this.applicationName = Preconditions.checkNotNull(applicationName, "applicationName must not be null");
}
@Override
public void afterPropertiesSet() throws Exception {
if (applicationName == null) {
throw new IllegalArgumentException("Property 'applicationName' is required");
}
}
@Override
public ObjectName getObjectName(Object managedBean, String beanKey) throws MalformedObjectNameException {
Class managedClass = AopUtils.getTargetClass(managedBean);
String domain = ClassUtils.getPackageName(managedClass);
Hashtable properties = new Hashtable<>();
properties.put("type", ClassUtils.getShortName(managedClass));
properties.put("name", beanKey);
// ensure the application name is included as a property in the object name
properties.put("app", applicationName);
return ObjectNameManager.getInstance(domain, properties);
}
}
这允许设置一个mbean,如:
package com.foo;
@ManagedResource(description = "Bean description")
public class MyBean {
...
}
它将注册一个对象名为com.foo:name=myBean,type=MyBean,app=CustomAppName的mbean