簡體   English   中英

帶有未配置XML的spring的JMX,基於100%注釋?

[英]JMX with spring without XML configuration, 100% annotation based?

我在具有XML配置的Spring應用程序中使用JMX:

<bean id="jmxExporter" class="org.springframework.jmx.export.MBeanExporter">
        <property name="beans">
            <map>
                <entry key="bean:name=bean1" value-ref="bean1"/>
                <entry key="bean:name=bean2" value-ref="bean2"/>
                <entry key="bean:name=bean3" value-ref="bean3"/>
            </map>
        </property>
        <property name="notificationListenerMappings">
          <map>
             <entry key="*">
                <bean class="com.test.listener"/>
             </entry>
         </map>
        </property>
    </bean>

    <bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
        <property name="port" value="1099" />
    </bean>

    <bean id="serverConnector"
        class="org.springframework.jmx.support.ConnectorServerFactoryBean">
        <property name="objectName" value="connector:name=rmi" />
        <property name="serviceUrl"
            value="service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jmxrmi" />
    </bean>

我從各種文檔中了解到,例如可以使用@EnableMBeanExport@ManagedResource為bean注釋而不是此XML配置。

但是我懷疑ConnectorServerFactoryBean如何配置這些注釋。 還是有任何注釋可用於配置RMIconnectorServerFactoryBean

我還需要知道如何注釋, notificationListenerMappings配置?

PS:我的代碼適用於XML配置下的發布者和偵聽器。 我計划完全基於注釋移動它,因為我不想干擾PROD中已經存在的XML配置。

已編輯

找到以下代碼:計划嘗試:

@Bean
public RmiRegistryFactoryBean registry() {
    return new RmiRegistryFactoryBean();
}

@Bean
@DependsOn("registry")
public ConnectorServerFactoryBean connectorServer() throws MalformedObjectNameException {
    ConnectorServerFactoryBean connectorServerFactoryBean = new ConnectorServerFactoryBean();
    connectorServerFactoryBean.setObjectName("connector:name=rmi");
    connectorServerFactoryBean.setServiceUrl("service:jmx:rmi://localhost/jndi/rmi://localhost:1099/connector");
    return connectorServerFactoryBean;
}

編輯2:我正在采用上述方法,並且能夠配置MBean並能夠發布通知。 但不幸的是,我仍然無法通過Annotation配置NotificationListener。

我嘗試添加以下內容:

     @Bean
     @DependsOn("registry")
     public ConnectorServerFactoryBean connectorServer() throws MalformedObjectNameException {
         ConnectorServerFactoryBean connectorServerFactoryBean = new ConnectorServerFactoryBean();
         connectorServerFactoryBean.setObjectName("connector:name=rmi");
         connectorServerFactoryBean.setServiceUrl("service:jmx:rmi://localhost/jndi/rmi://localhost:1099/connector");
         //TestListener is my NotificationListener class
         ObjectName objectName = new ObjectName("bean:name=bean1");
             connectorServerFactoryBean.getServer().addNotificationListener(objectName,
                             new TestListener(), null,null);
         return connectorServerFactoryBean;
     }

我正在獲取instanceNotFoundException,指出未找到bean:name=bean1 但是我已經配置一樣, @ManagedResource(objectName="bean:name=bean1")在我的bean1

任何幫助請我缺少什么?

@EnableMBeanExport具有server屬性,該屬性引用服務器對象的Bean名稱。

例如,請參見使用此服務器屬性的該組件的測試: https : //github.com/spring-projects/spring-framework/blob/master/spring-context/src/test/java/org/springframework/jmx /export/annotation/EnableMBeanExportConfigurationTests.java

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM