如何将注册JMXConfigurator注册到WebSphere自定义MBeanServer?

时间:2016-09-03 04:26:05

标签: websphere logback jmx

我试图将<jmxConfigurator/>放在logback配置文件中。我能够将jconsole连接到本地JVM运行单元测试并与logback mbean进行交互。但是,当我将Web应用程序部署到远程Websphere应用程序服务器并将jconsole连接到该远程JVM时,我无法在MBeans面板中看到logback mbean。

作为比较,Web应用程序使用spring boot构建,默认情况下也会注册一些MBean。我可以在两种情况下看到弹簧启动的MBean。

我进一步调查了一下,发现logback始终从ManagementFactory.getPlatformMBeanServer()获取MBeanServer实例,而spring在Websphere / Weblogic环境中使用不同的方法。

在Websphere环境中,为远程连接公开的MBeanServer实例似乎不是默认的PlatformMBeanServer。

所以问题是,如何将logback mbean注册到WebSphere自定义MBeanServer,而不是默认的PlatformMBeanServer?

WebSphere自定义MBeanServer受到青睐,因为它可以更好地与安全性和群集功能集成。

1 个答案:

答案 0 :(得分:0)

这是我的解决方法,扩展了JMXConfigurator

仅供记录,没有文件支持此类扩展,我没有使用多个网络应用程序对其进行测试。

此类继承了JMXConfigurator的大多数行为,但它将从Spring注入的MBeanServer注册/取消注册。

@ManagedResource(objectName = AnnotatedJMXConfigurator.NAME, description = "Logback Configuration Management Bean")
@Component
public class AnnotatedJMXConfigurator extends JMXConfigurator {

    public static final String NAME = "xxx.ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator";

    private static final LoggerContext CONTEXT = (LoggerContext) LoggerFactory.getILoggerFactory();

    private static final ObjectName OBJECT_NAME;

    static {
        try {
            OBJECT_NAME = new ObjectName(NAME);
        } catch (MalformedObjectNameException e) {
            throw new RuntimeException(e.getMessage(), e);
        }
    }

    @Autowired
    public AnnotatedJMXConfigurator(MBeanServer mbs) {
        super(CONTEXT, mbs, OBJECT_NAME);
    }
}