package com.maxifier.guice.mbean;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
import javax.management.MBeanServer;
import java.lang.management.ManagementFactory;
public final class MBeanModule extends AbstractModule {
private final String domain;
private final MBeanServer mbeanServer;
/**
* Make module where PlatfromMBeanServer will be used
*
* @param domain mbean domain
* @return module to install
*/
public static Module platform(String domain) {
return new MBeanModule(domain, ManagementFactory.getPlatformMBeanServer());
}
/**
* Make module of MBean integration
*
* @param domain MBean domain
* @param mbeanServer MBean Server which will be used
* @return module to install
*/
public static Module server(String domain, MBeanServer mbeanServer) {
return new MBeanModule(domain, mbeanServer);
}
/**
* Make the module with NOP MBeans.
*
* @return module to install
*/
public static Module noOperations() {
return new AbstractModule() {
@Override
protected void configure() {
bind(MBeanManager.class).toInstance(MBeanManager.NO_OPERATIONS);
}
};
}
public MBeanModule(String domain, MBeanServer mbeanServer) {
this.domain = domain;
this.mbeanServer = mbeanServer;
}
@Override
protected void configure() {
MBeanManagerImpl impl = new MBeanManagerImpl(domain, mbeanServer, new CGLIBMBeanGenerator());
bind(MBeanManager.class).toInstance(impl);
MBeanTypeListener listener = new MBeanTypeListener();
requestInjection(listener);
//noinspection unchecked
bindListener(new AnnotationMatcher(MBean.class), listener);
}
}