2016-02-05 49 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”就够了吗? –