出于安全原因,我无法将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;
}
答案 0 :(得分:0)
我怀疑JBoss环境正在影响JMX Connector服务器的配置方式。我会尝试采取额外的步骤来指定服务侦听端口(例如17998),而不是通过使用此JMXServiceURL将其保留为短暂的:
service:jmx:rmi://localhost:17998/jndi/rmi://localhost:17999/sample