Дополнительный MBeanServer и JMXConnectorServer для JBoss 7
Есть причины безопасности, по которым я не могу добавить свои MBean-компоненты к существующей платформе MBeanServer JBoss 7. Поэтому я создаю свой собственный mBeanServer и JMXConnectorServer с customAuthenticator
,
Вот мое определение Spring Bean для новых MBeanServer и JMXConnectorServer. Этот код работает, когда я запускаю свое приложение в Jetty. Мне удалось подключиться через службу URL:jmx:rmi://localhost/jndi/rmi://localhost:17999/sample в jconsole, и он показывает только пользовательские MBean-компоненты, чего я и ожидаю.
Но тот же код не работает в JBoss 7. Когда я внедряю в JBoss и пытаюсь соединиться с тем же URL JMX, он выдает диалог с такой ошибкой: "Соединение с myuser@service:jmx:rmi://localhost/jndi/rmi://localhost:17999/trm не удалось. Хотите попробовать еще раз?"
Я помещаю точку останова в свой customAuthenticator, и JBoss не останавливается на моей точке останова, когда я пытаюсь подключить JMX. Кажется, мой 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 ответ
Я подозреваю, что среда JBoss влияет на то, как настроен сервер JMX Connector. Я бы попытался сделать дополнительный шаг, указав порт прослушивания службы (например, 17998), вместо того, чтобы оставить его как эфемерный, используя этот JMXServiceURL:
service:jmx:rmi://localhost:17998/jndi/rmi://localhost:17999/sample