Using spring 4. I am creating a
SimpleMessageListenerContainer
from a factory method with
@Configuration @Bean
@Bean( name = "container" )
SimpleMessageListenerContainer container(){
...
...
How to expose this instance on JMX? Since @ManagedResource can only be applied on class
@Bean
public MBeanExporter exporter() {
MBeanExporter mBeanExporter = new MBeanExporter();
mBeanExporter.setBeans(
Collections.singletonMap("myDomain:type=container,name=myContainter", "container"));
return mBeanExporter;
}
That will expose all the public methods/attributes. If you wish to limit which are exposed you can use a MethodNameBasedMBeanInfoAssembler
:
@Bean
public MBeanExporter exporter() {
MBeanExporter mBeanExporter = new MBeanExporter();
mBeanExporter.setBeans(
Collections.singletonMap("myDomain:type=container,name=myContainter", "container"));
MethodNameBasedMBeanInfoAssembler assembler = new MethodNameBasedMBeanInfoAssembler();
assembler.setManagedMethods(new String[] { "start", "stop" });
mBeanExporter.setAssembler(assembler);
return mBeanExporter;
}