0

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

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

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

我在我的 customAuthenticator 中设置了一个断点,当我尝试连接 JMX 时,JBoss 不会在我的断点处停止。JBoss 似乎没有使用我的 JMXConnectorServer。任何人都可以帮忙吗?请注意,我无法更改现有的 JBoss MBeanServer 或 JMX 连接器服务器配置,因为它们用于其他目的。

提前致谢。

@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;
}
4

1 回答 1

0

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

service:jmx:rmi://localhost:17998/jndi/rmi://localhost:17999/sample
于 2014-09-08T20:26:00.467 回答