出于安全原因,我无法将我的 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;
}