Announcement Announcement Module
Collapse
No announcement yet.
jmx config in multiple context file Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • jmx config in multiple context file

    Hi:
    I'm writing a test for my fault management code and want to add a notification listener in my test. I have my regular applicationContext.xml and a testContext.xml. In applicationContext.xml I'm using the <context:*> tags to declare my mbean server and exporter. My MBeans are annotated. In my testContext.xml I want to add a listener. So I declared another AnnotationMBeanExporter and set the server property to ref the mbean server from applicationContext.xml. Here are two files

    Code:
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        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">
    
        <context:mbean-server id="mbeanServer" />
        <context:component-scan base-package="my.package" />
        <context:mbean-export server="mbeanServer" registration="replaceExisting" />
    
        <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="ignoreResourceNotFound" value="true" />
            <property name="locations">
                <list>
                    <value>classpath:fm.properties</value>
                </list>
            </property>
        </bean>
    
    </beans>
    Code:
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        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">
    
        <bean class="org.springframework.jmx.export.annotation.AnnotationMBeanExporter">
            <property name="server" ref="mbeanServer" />
            <property name="registrationBehaviorName" value="REGISTRATION_IGNORE_EXISTING" />
            <property name="notificationListenerMappings">
                <map>
                    <entry key="*">
                        <bean class="my.package.CountingNotificationListener" />
                    </entry>
                </map>
            </property>
        </bean>
    
    </beans>
    This didn't work. However, I was able to successfully add the listener in my test using the following code.
    Code:
        @Autowired
        // applicationContext.xml mbeanExporter
        private MBeanExporter mBeanExporter;
        @Autowired
        private CountingNotificationListener listener;
    
        @Before
        public void init()
        {
            Map<String, NotificationListener> listeners = new HashMap<String, NotificationListener>();
            listeners.put("*", listener);
            mBeanExporter.setNotificationListenerMappings(listeners);
            mBeanExporter.afterPropertiesSet();
        }
    Is it possible to do this through configuration, without code? If so, what am I missing? I thought that if two mbean exporters used the mbean server then listeners could be on either mbean exporter.

    Thanks in advance.
Working...
X