从 Java 获取 Infinispan JMX 统计信息

Get Infinispan JMX Statistics from Java

我是 Infinispan 的新手。我正在尝试通过我的 Java 代码获取缓存统计信息。通过谷歌搜索,我找到了一些方法,但对我来说没有任何解决方案。请查看代码,请让我知道我遗漏的地方。

import java.io.IOException;

import org.infinispan.Cache;
import org.infinispan.configuration.cache.Configuration;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.configuration.global.GlobalConfiguration;
import org.infinispan.configuration.global.GlobalConfigurationBuilder;
import org.infinispan.manager.DefaultCacheManager;

public class InfinispanCacheStats {

    public static void main(String[] args) throws InterruptedException, IOException {
        GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
                  .globalJmxStatistics()
                  .enable()
                   .build();

        Configuration config = new ConfigurationBuilder()
                   .expiration().wakeUpInterval(5000l).lifespan(1000l).maxIdle(500l)
                   .build();
        config.jmxStatistics().enabled();

        DefaultCacheManager m = new DefaultCacheManager(globalConfig, config, true);
//      DefaultCacheManager m = new DefaultCacheManager("D:\infinispan.xml");
        Cache<Integer, String> cache = m.getCache();
        cache.start();
        System.out.println(m.getCache().getAdvancedCache().getStats().getStores());
    }
}

我还尝试配置 infinispan.xml 文件并将其提供给 DefaultCacheManager(),但它会产生以下异常

Exception in thread "main" java.util.ServiceConfigurationError: org.infinispan.lifecycle.ModuleLifecycle: Provider org.infinispan.query.impl.LifecycleManager could not be instantiated
    at java.util.ServiceLoader.fail(Unknown Source)
    at java.util.ServiceLoader.access0(Unknown Source)
    at java.util.ServiceLoader$LazyIterator.next(Unknown Source)
    at java.util.ServiceLoader.next(Unknown Source)
    at org.infinispan.commons.util.ServiceFinder.addServices(ServiceFinder.java:60)
    at org.infinispan.commons.util.ServiceFinder.load(ServiceFinder.java:42)
    at org.infinispan.util.ModuleProperties.resolveModuleLifecycles(ModuleProperties.java:41)
    at org.infinispan.factories.GlobalComponentRegistry.<init>(GlobalComponentRegistry.java:94)
    at org.infinispan.manager.DefaultCacheManager.<init>(DefaultCacheManager.java:292)
    at org.infinispan.manager.DefaultCacheManager.<init>(DefaultCacheManager.java:271)
    at org.infinispan.manager.DefaultCacheManager.<init>(DefaultCacheManager.java:244)
    at org.infinispan.manager.DefaultCacheManager.<init>(DefaultCacheManager.java:231)
    at com.practice.asrl.infinispan.InfinispanCacheStats.main(InfinispanCacheStats.java:26)
Caused by: java.lang.ExceptionInInitializerError
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    ... 11 more
Caused by: java.lang.IllegalArgumentException: Logger implementation class org.infinispan.query.logging.Log_$logger has no matching constructor
    at org.jboss.logging.Logger.getMessageLogger(Logger.java:2256)
    at org.jboss.logging.Logger.getMessageLogger(Logger.java:2214)
    at org.infinispan.util.logging.LogFactory.getLog(LogFactory.java:21)
    at org.infinispan.query.impl.LifecycleManager.<clinit>(LifecycleManager.java:82)
    ... 16 more

infinispan.xml 的内容:

<infinispan>
<cache-container statistics="true"/>
</infinispan>

任何帮助将不胜感激

您需要从 ConfigurationBuilder 对象启用统计信息。默认情况下它们是禁用的。

Configuration config = new ConfigurationBuilder()
.expiration().wakeUpInterval(5000l).lifespan(1000l).maxIdle(500l)
            .jmxStatistics().enable()
            .build();

当您调用 config.jmxStatistics().enabled(); 时,这会告诉您是否启用了统计信息,但这不会更改配置。