用于JBoss 7的额外MBeanServer和JMXConnectorServer

时间:2014-08-27 08:13:44

标签: jboss jboss7.x jmx spring-jmx

出于安全原因,我无法将MBean添加到现有JBoss 7平台MBeanServer。所以我使用customAuthenticator创建自己的mBeanServer和JMXConnectorServer。

以下是我对新MBeanServer和JMXConnectorServer的Spring Bean定义。当我在Jetty中运行我的应用程序时,此代码有效。我能够通过URL服务连接:jmx:rmi:// localhost / jndi / rmi:// localhost:17999 / sample在jconsole中,它只显示我期望的自定义​​MBean。

但是相同的代码在JBoss 7中不起作用。当我部署到JBoss并尝试使用相同的JMX URL连接时,它会给出一个包含此错误的对话框:"与myuser @ service的连接:jmx: rmi:// localhost / jndi / rmi:// localhost:17999 / trm没有成功。你想再试一次吗?"

我在customAuthenticator中设置了一个断点,当我尝试连接JMX时,JBoss并没有停在我的断点处。看来我的JMXConnectorServer没有被JBoss使用。有人可以帮忙吗?请注意,我无法更改现有的JBoss MBeanServer或JMX Connector Server配置,因为它们用于其他目的。

提前致谢。

@Bean
public Object rmiRegistry() throws Exception {
            RmiRegistryFactoryBean factory = new RmiRegistryFactoryBean();
            factory.setPort(17999);
            factory.afterPropertiesSet();
            return factory.getObject();
}

@Bean
@DependsOn("rmiRegistry")
public MBeanServer mBeanServer() {
    MBeanServerFactoryBean factory = new MBeanServerFactoryBean();
    factory.afterPropertiesSet();
    return factory.getObject();
}

@Bean
@DependsOn("rmiRegistry")
public JMXConnectorServer jmxConnectorServer() throws IOException, JMException {
    ConnectorServerFactoryBean factory = new ConnectorServerFactoryBean();
    factory.setServer(mBeanServer());
    factory.setServiceUrl("service:jmx:rmi://localhost/jndi/rmi://localhost:17999/sample");
    factory.setRegistrationPolicy(RegistrationPolicy.FAIL_ON_EXISTING);
    Map<String, Object> props = new HashMap<>();
    props.put(JMXConnectorServer.AUTHENTICATOR, customAuthenticator);
    factory.setEnvironmentMap(props);
    factory.afterPropertiesSet();

    return factory.getObject();
}

@Bean
@DependsOn("rmiRegistry")
public AnnotationMBeanExporter annotationMBeanExporter() {
    AnnotationMBeanExporter result = null;
    result = new AnnotationMBeanExporter();
    result.setServer(mBeanServer());
    return result;
}

1 个答案:

答案 0 :(得分:0)

我怀疑JBoss环境正在影响JMX Connector服务器的配置方式。我会尝试采取额外的步骤来指定服务侦听端口(例如17998),而不是通过使用此JMXServiceURL将其保留为短暂的:

service:jmx:rmi://localhost:17998/jndi/rmi://localhost:17999/sample