Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试使Hazelcast群集与符合JCache的客户端一起工作时发生异常_Java_Hazelcast_Jcache - Fatal编程技术网

Java 尝试使Hazelcast群集与符合JCache的客户端一起工作时发生异常

Java 尝试使Hazelcast群集与符合JCache的客户端一起工作时发生异常,java,hazelcast,jcache,Java,Hazelcast,Jcache,我正试图让一个小型Hazelcast集群与简单的JCache兼容客户端协作。不幸的是,我得到了异常:java.lang.IllegalArgumentException:没有注册名为:hz:impl:cacheService的服务。 我希望你能给我一个解决这个问题的线索 我使用的Hazelcast版本3.4与3.3和3.4-EA具有相同的行为 以下是来自hazelcast-client.xml的片段: <group> <name>group1</name&g

我正试图让一个小型Hazelcast集群与简单的JCache兼容客户端协作。不幸的是,我得到了异常:java.lang.IllegalArgumentException:没有注册名为:hz:impl:cacheService的服务。 我希望你能给我一个解决这个问题的线索

我使用的Hazelcast版本3.4与3.3和3.4-EA具有相同的行为

以下是来自hazelcast-client.xml的片段:

<group>
    <name>group1</name>
</group>

<network>
    <cluster-members>
        <address>192.168.56.10:5701</address>
        <address>192.168.56.20:5701</address>
    </cluster-members>
</network>
下面是来自客户端的日志:

Dec 30, 2014 10:22:16 AM com.hazelcast.client.config.XmlClientConfigLocator
INFO: Loading 'hazelcast-client.xml' from classpath.
Dec 30, 2014 10:22:17 AM com.hazelcast.core.LifecycleService
INFO: HazelcastClient[hz.client_0_group1][3.4] is STARTING
Dec 30, 2014 10:22:17 AM com.hazelcast.core.LifecycleService
INFO: HazelcastClient[hz.client_0_group1][3.4] is STARTED
Dec 30, 2014 10:22:17 AM com.hazelcast.core.LifecycleService
INFO: HazelcastClient[hz.client_0_group1][3.4] is CLIENT_CONNECTED
Dec 30, 2014 10:22:17 AM com.hazelcast.client.spi.impl.ClusterListenerThread
INFO: 

Members [2] {
    Member [192.168.56.20]:5701
    Member [192.168.56.10]:5701
}

Exception in thread "main" javax.cache.CacheException: Error opening URI [hazelcast]
        at com.hazelcast.cache.impl.AbstractHazelcastCachingProvider.getCacheManager(AbstractHazelcastCachingProvider.java:89)
        at com.hazelcast.cache.impl.AbstractHazelcastCachingProvider.getCacheManager(AbstractHazelcastCachingProvider.java:118)
        at com.hazelcast.cache.HazelcastCachingProvider.getCacheManager(HazelcastCachingProvider.java:158)
        at com.example.JCacheSample.main(JCacheSample.java:16)
Caused by: java.lang.IllegalArgumentException: No service registered with name: hz:impl:cacheService
        at com.hazelcast.client.impl.ClientEngineImpl$ClientPacketProcessor.initService(ClientEngineImpl.java:477)
        at com.hazelcast.client.impl.ClientEngineImpl$ClientPacketProcessor.processRequest(ClientEngineImpl.java:427)
        at com.hazelcast.client.impl.ClientEngineImpl$ClientPacketProcessor.run(ClientEngineImpl.java:353)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
        at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:76)
        at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:92)
        at ------ End remote and begin local stack-trace ------.(Unknown Source)
        at com.hazelcast.client.spi.impl.ClientCallFuture.resolveResponse(ClientCallFuture.java:201)
        at com.hazelcast.client.spi.impl.ClientCallFuture.get(ClientCallFuture.java:142)
        at com.hazelcast.client.spi.impl.ClientCallFuture.get(ClientCallFuture.java:118)
        at com.hazelcast.client.spi.ProxyManager.initialize(ProxyManager.java:200)
        at com.hazelcast.client.spi.ProxyManager.getOrCreateProxy(ProxyManager.java:183)
        at com.hazelcast.client.impl.HazelcastClientInstanceImpl.getDistributedObject(HazelcastClientInstanceImpl.java:391)
        at com.hazelcast.client.impl.HazelcastClientProxy.getDistributedObject(HazelcastClientProxy.java:234)
        at com.hazelcast.client.cache.impl.HazelcastClientCacheManager.<init>(HazelcastClientCacheManager.java:62)
        at com.hazelcast.client.cache.impl.HazelcastClientCachingProvider.createHazelcastCacheManager(HazelcastClientCachingProvider.java:75)
        at com.hazelcast.client.cache.impl.HazelcastClientCachingProvider.createHazelcastCacheManager(HazelcastClientCachingProvider.java:38)
        at com.hazelcast.cache.impl.AbstractHazelcastCachingProvider.getCacheManager(AbstractHazelcastCachingProvider.java:86)
        ... 3 more

服务器端是否也激活了JCache?:


只需将cache-api-1.0.0.jar添加到Hazelcast节点的类路径。

我在OSGi上下文中收到了相同的错误消息。缓存api位于我使用“org.apache.servicemix.bundles:org.apache.servicemix.bundles.javax缓存api:1.0.0_1”的类路径上,因为另一个库中缺少导出

问题是,使用了错误的类加载器来检查JCache是否在类路径上。因此,我必须像这样初始化Hazelcast实例:

ClassLoader hazelClassLoader = hazelcastOSGiService.getOwnerBundle().adapt(BundleWiring.class).getClassLoader();
Config config = new Config();
// set the classloader that is used by hazelcast to check for JCache Classes
config.setClassLoader(hazelClassLoader);

// Create a HazelcastInstance
hazelcastInstance = hazelcastOSGiService.newHazelcastInstance(config);

您使用的hazel cast的哪个版本使用最新版本我以前在3.0开发版本中见过这个bug,我添加了关于所用版本的信息。非常感谢。实际上,只需将cache-api-1.0.0.jar添加到Hazelcast节点的类路径中。
ClassLoader hazelClassLoader = hazelcastOSGiService.getOwnerBundle().adapt(BundleWiring.class).getClassLoader();
Config config = new Config();
// set the classloader that is used by hazelcast to check for JCache Classes
config.setClassLoader(hazelClassLoader);

// Create a HazelcastInstance
hazelcastInstance = hazelcastOSGiService.newHazelcastInstance(config);