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 に接続しようとすると、次のエラーのダイアログが表示されます: "The connection to myuser@service:jmx:rmi://localhost/ jndi/rmi://localhost:17999/trm は成功しませんでした。もう一度やり直しますか?"
customAuthenticator にブレークポイントを設定しましたが、JMX に接続しようとすると、JBoss がブレークポイントで停止しません。JMXConnectorServer が JBoss によって使用されていないようです。誰でも助けることができますか?既存の 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;
}