Дополнительный 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
Другие вопросы по тегам