2017-10-12 151 views
1

我是Infinispan的新用户。我想通过我的Java代码获取缓存的统计信息。通过Google搜索,我发现了一些方法,但没有任何结果可以成为我的解决方案。请看看代码,请让我知道我失踪的地方。从Java获取Infinispan JMX统计信息

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.access$100(Unknown Source) 
    at java.util.ServiceLoader$LazyIterator.next(Unknown Source) 
    at java.util.ServiceLoader$1.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> 

不限帮助将不胜感激

回答

1

您需要启用统计从配置tionBuilder对象。它们默认是禁用的。

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

当你调用config.jmxStatistics().enabled();这会告诉你,如果统计功能与否,但不会更改配置。

+0

这是工作..! –