0

私の設定XML:appconfig.xml

<beans xmlns="...">

   <context:mbean-server/>
   <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
        <property name="beans">
            <map>
                <entry key="bean:name=notificationSender" value-ref="notificationSenderImpl"></entry>
                <entry key="bean:name=notificationListener" value-ref="notificationListenerImpl"></entry>
            </map>
        </property>
    <property name="notificationListenerMappings">
                    <map>
                <entry key="notificationListenerImpl" value-ref="notificationListenerImpl"></entry>
            </map>              
        </property>

        <property name="server" ref="mbeanServer"/>    
    </bean>
    <bean id="notificationSender" class="com....NotificationSenderImpl"/>
    <bean id="notificationListener" class="com....NotificationListenerImpl"/>

私のコード:Test.java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:appconfig.xml")
public class Test {
    @Autowired
    private ConfigurableApplicationContext context;

    @Test
    public void testFlow() {
        NotificationSender sender = (NotificationSender) context.getBean("notificationSender");     
                sender.send();
    }

    @After
    public void tearDown(){
        context.close();
    }

}

クラスNotificationSenderImpl.java

public class NotificationSenderImpl implements NotificationPublisherAware{

       private NotificationPublisher notificationPublisher; 

    public void setNotificationPublisher(NotificationPublisher notificationPublisher) {
        // TODO Auto-generated method stub
        this.notificationPublisher = notificationPublisher;     
    }

    public void send(){
        notificationPublisher.sendNotification(new Notification("simple", this, 0L));
    }
}

とリスナー...クラスNotificationListenerImpl

public class NotificationListenerImpl implements NotificationListener{

    public void handleNotification(Notification notification, Object handback) {

        // TODO Auto-generated method stub
        System.out.println("Notification received");
    }

}

通知は送信されていますが、受信されていません。ポインタはありますか?

4

1 に答える 1

1

この問題が解決したかどうかはわかりませんが、お役に立てれば幸いです。私は最近 spring/JMX で遊んでいて、まだ新しいですが、いくつかの洞察を共有できれば幸いです。

リスナーをエクスポートする MBean として宣言する必要はないと思います。通知を発行する Bean だけです。次に、notificationListenerMappings のキーは、リスナーの Bean 自体への参照ではなく、MBean の ObjectName であることを意図していると思います。言い換えると..

<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
    <property name="beans">
        <map>
            <entry key="bean:name=notificationSender" value-ref="notificationSenderImpl"></entry>
        </map>
    </property>
    <property name="notificationListenerMappings">
        <map>
            <entry key="bean:name=notificationSender" value-ref="notificationListenerImpl"></entry>
        </map>              
    </property>
    <property name="server" ref="mbeanServer"/>    
</bean>

リスナー マッピング キーにワイルド カードを使用することもできます。これは、アノテーションで宣言されたすべての MBean から通知を取得する、独自の MBeanExporter の例です。

<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
    .
    .
    .
    <property name="notificationListenerMappings">
        <map>
            <entry key="*">
                <bean class="com.poc.jmx.domain.NotificationBroadcastListener" />
            </entry>
        </map>
    </property>
</bean>

それが役立つことを願っています。

于 2013-02-13T15:13:57.720 に答える