2016-02-05 84 views
0

我使用JMX在Spring應用程序和XML配置:帶有Spring配置的JMX,基於100%註解?

<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> 

我從喜歡的,而不是這個XML配置,我們可以用@EnableMBeanExport標註它的各種文件理解和@ManagedResource的豆類。

,但我懷疑是如何ConnectorServerFactoryBean得到這些註釋進行配置。還是有任何註釋可用於配置RMIconnectorServerFactoryBean

此外,我需要知道如何註釋,配置notificationListenerMappings

P.S: 我的代碼工作下的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沒有找到。但我在bean1上配置了像@ManagedResource(objectName="bean:name=bean1")

對我缺少什麼任何幫助嗎?

回答

0

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

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

+0

謝謝@熱雷米B.威爾說,「服務器」真正地在我的問題無論在serviceConnector豆配置配置? – DecKno

+0

理論上是的。它尋找一個MBeanServer實例 –

+0

確定後,在您提供的鏈接,MBean服務器,如何春季知道哪些類有方法通過JMX打電話?在課堂上有「@ ManagedResource」和「@ ManagedOperation」就夠了嗎? –