一尘不染

使用JMX运行Hibernate 4.3(无spring)

hibernate

我正在使用Hibernate 4.3和Guice 1.0运行Java Webapp(wicket 6.13)

我正在尝试配置Hibernate,以便可以通过JMX框架访问运行时信息。

没有 使用spring,谁能指出我如何在hibernate 4.3上手动启用JMX。

我四处寻找JmxService,JmxServiceInitiator,JmxServiceImpl,StandardServiceRegistryImpl

我还在AvailableSettings中找到了以下设置:

"hibernate.jmx.enabled";
"hibernate.jmx.usePlatformServer";
"hibernate.jmx.agentId";
"hibernate.jmx.defaultDomain";
"hibernate.jmx.sessionFactoryName";

我已将jmx.enabled true设置添加到我的hibernate.cfg.xml文件中,但这没有任何效果。

我仍然不确定该怎么做。

任何帮助表示赞赏


阅读 295

收藏
2020-06-20

共1个答案

一尘不染

重构为hibernate状态后,似乎是一个错误。有关详细信息,请参见https://hibernate.atlassian.net/browse/HHH-6190

这是我使用的一种变通方法,利用Java动态代理来代表来自hibernate状态的统计信息接口以及默认的平台mbean服务器:

@MXBean
public interface StatisticsMXBean extends Statistics {
}

public void initStatistics(SessionFactory sessionFactory) {
    ObjectName statsName = new ObjectName("org.hibernate:type=statistics");
    MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();

    final Statistics statistics = sessionFactory.getStatistics();
    statistics.setStatisticsEnabled(true);
    Object statisticsMBean = Proxy.newProxyInstance(getClass().getClassLoader(), new Class<?>[] { StatisticsMXBean.class }, new InvocationHandler() {

            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                return method.invoke(statistics, args);
            }
        });

    mbeanServer.registerMBean(statisticsMBean, statsName);
}
2020-06-20