Biscuit128 Biscuit128 -4 years ago 107
Java Question

Java - Help Needed Creating MBean

I am trying to make a class implement an MBean Interface so i can interrogate the properties at runtime. The class I am trying to interrogate is as follows

public class ProfileCache implements ProfileCacheInterfaceMBean{

private Logger logger = Logger.getLogger(ProfileCache.class);
private ConcurrentMap<String, Profile> cache;


public ProfileCache(ConcurrentMap<String, Profile> cache){
this.cache = cache;
}

/**
* Update the cache entry for a given user id
* @param userid the user id to update for
* @param profile the new profile to store
* @return true if the cache update
*/
public boolean updateCache(String userid, Profile profile) {
if (cache == null || cache.size() == 0) {
throw new RuntimeException("Unable to update the cache");
}
if (cache.containsKey(userid)) {
if (profile != null) {
cache.put(userid, profile);
logger.info("Updated the cache for user: "
+ userid + " profile: " + profile);
return true;
}
}
return false;
}

@Override
public ConcurrentMap<String, Profile> getCache() {
if(cache == null){
cache = new ConcurrentHashMap<String, Profile>();
}
return cache;
}


}


The interface looks like this

import com.vimba.profile.Profile;

public interface ProfileCacheInterfaceMBean {

ConcurrentMap<String, Profile> getCache();

}


And i start the MBean like this

cacheImpl = new ProfileCache(factory.createCacheFromDB());
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName profileCache = new ObjectName("org.javalobby.tnt.jmx:type=ProfileCacheInterfaceMBean");
mbs.registerMBean(cacheImpl, profileCache);


However i keep getting the below exception and I am not sure what I need to change

javax.management.NotCompliantMBeanException: MBean class com.vimba.cache.ProfileCache does not implement DynamicMBean, and neither follows the Standard MBean conventions (javax.management.NotCompliantMBeanException: Class com.vimba.cache.ProfileCache is not a JMX compliant Standard MBean) nor the MXBean conventions (javax.management.NotCompliantMBeanException: com.vimba.cache.ProfileCache: Class com.vimba.cache.ProfileCache is not a JMX compliant MXBean)


I think potentially its because it returns a Map? Please could someone help?

Thanks

Answer Source

I agree, TJ is trolling for rep.......

In the all the examples I've seen for MBean implementations, I've never seen a class define a method that was not defined in the inteface. E.g., ProfileCache has method updateCache, but ProfileCacheInterfaceMBean does not. Try removing the updateCache method from ProfileCache and see if it will work.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download