<replicatedmap name="default">
<in-memory-format>BINARY</in-memory-format>
<statistics-enabled>true</statistics-enabled>
</replicatedmap>
我的客户端代码看起来是这样的(Cache只是一个没有属性的可序列化类):
public class Main {
public static final String HAZELCAST_INSTANCE_NAME = "HAZI";
public static final String REPLICATEDMAP_NAME = "REP_MAP";
public static final String MAP_NAME = "NORMAL_MAP";
public static void main(String[] args) {
init();
HazelcastInstance instance = HazelcastClient.getHazelcastClientByName(HAZELCAST_INSTANCE_NAME);
Map<String, Object> repMap = instance.getReplicatedMap(REPLICATEDMAP_NAME);
repMap.put("MyKey", new Cache());
System.err.println("Retrieve " + repMap.get("MyKey"));
Map<String, Object> normalMap = instance.getReplicatedMap(MAP_NAME);
normalMap.put("MyKey", new Cache());
System.err.println("Retrieve " + normalMap.get("MyKey"));
System.exit(1);
}
private static void init() {
ClientConfig cfg = new ClientConfig();
cfg.setInstanceName(HAZELCAST_INSTANCE_NAME);
cfg.addNearCacheConfig(defineNearCache(REPLICATEDMAP_NAME));
cfg.addNearCacheConfig(defineNearCache(MAP_NAME));
// for analysis in the hazelcast management console
cfg.getProperties().put("hazelcast.client.statistics.enabled", "true");
cfg.getProperties().put("hazelcast.client.statistics.period.seconds", "60");
cfg.getNetworkConfig().addAddress("127.0.0.1:5701");
if (HazelcastClient.newHazelcastClient(cfg) == null) {
System.err.println(" !!! ERROR in Cache Config !!!");
}
}
private static NearCacheConfig defineNearCache(String mapName) {
EvictionConfig evictionConfig = new EvictionConfig()
.setMaximumSizePolicy(EvictionConfig.MaxSizePolicy.ENTRY_COUNT)
.setSize(200);
return new NearCacheConfig()
.setName(mapName)
.setInMemoryFormat(InMemoryFormat.BINARY)
.setInvalidateOnChange(true)
.setEvictionConfig(evictionConfig);
}
}
我现在的问题是:使用这段代码,我得到了一个ClassNotFoundError,它试图将东西放到复制的映射或常规映射中,但在专用的Hazelcast服务器(成员)中,而不是在客户端。
SCHWERWIEGEND: [127.0.0.1]:5701 [dev] [3.9.2] hz._hzInstance_1_dev.event-3 caught an exception while processing task:com.hazelcast.spi.impl.eventservice.impl.LocalEventDispatcher@eeed098
com.hazelcast.nio.serialization.HazelcastSerializationException: java.lang.ClassNotFoundException: de.empic.hazelwar.model.Cache
at com.hazelcast.internal.serialization.impl.JavaDefaultSerializers$JavaSerializer.read(JavaDefaultSerializers.java:224)
at com.hazelcast.internal.serialization.impl.StreamSerializerAdapter.read(StreamSerializerAdapter.java:48)
at com.hazelcast.internal.serialization.impl.AbstractSerializationService.toObject(AbstractSerializationService.java:185)
at com.hazelcast.map.impl.DataAwareEntryEvent.getValue(DataAwareEntryEvent.java:90)
at com.hazelcast.client.impl.protocol.task.replicatedmap.AbstractReplicatedMapAddEntryListenerMessageTask.handleEvent(AbstractReplicatedMapAddEntryListenerMessageTask.java:92)
at com.hazelcast.client.impl.protocol.task.replicatedmap.AbstractReplicatedMapAddEntryListenerMessageTask.entryAdded(AbstractReplicatedMapAddEntryListenerMessageTask.java:132)
at com.hazelcast.replicatedmap.impl.ReplicatedMapEventPublishingService.dispatchEvent(ReplicatedMapEventPublishingService.java:82)
at com.hazelcast.replicatedmap.impl.ReplicatedMapService.dispatchEvent(ReplicatedMapService.java:247)
at com.hazelcast.spi.impl.eventservice.impl.LocalEventDispatcher.run(LocalEventDispatcher.java:64)
at com.hazelcast.util.executor.StripedExecutor$Worker.process(StripedExecutor.java:225)
at com.hazelcast.util.executor.StripedExecutor$Worker.run(StripedExecutor.java:208)
Caused by: java.lang.ClassNotFoundException: de.empic.hazelwar.model.Cache
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.hazelcast.nio.ClassLoaderUtil.tryLoadClass(ClassLoaderUtil.java:173)
at com.hazelcast.nio.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:147)
at com.hazelcast.nio.IOUtil$ClassLoaderAwareObjectInputStream.resolveClass(IOUtil.java:591)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1868)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
at com.hazelcast.internal.serialization.impl.JavaDefaultSerializers$JavaSerializer.read(JavaDefaultSerializers.java:219)
... 10 more
每当我从客户端配置中删除近缓存配置时,所有的工作都非常完美,当然,除了我没有近缓存。
我错过了什么?
@magicroomy,我在3.9.2和3.11上运行相同的。我可以确认:
我还创建了一个github问题:https://github.com/hazelcast/hazelcast/issues/14210
我有一个ignite服务器在复制模式下运行,许多客户机在同一个节点上,几乎启用了缓存。现在,在使用near cache和不使用near cache运行client时,我没有发现显著的性能差异。 我对近缓存的理解是,经常使用的键和值将存储在客户机本身,因此不会对服务器进行实际的Get()调用。如果我错了请指正。 可以有人共享一个工作附近的缓存配置XML。
问题内容: 我们有一个gwt-client,它从我们的服务器接收很多数据。从逻辑上讲,我想在客户端缓存数据,以免服务器收到不必要的请求。 截止到今天,我已经让我的模型来处理数据缓存,但伸缩性不是很好。这也成为一个问题,因为我们团队中的不同开发人员都开发了自己的“缓存”功能,从而使项目充满重复性。 我正在考虑如何实现一个“单入口”来处理所有缓存,而使模型对如何处理缓存一无所知。 有没有人在GWT中进
我想知道以下问题的答案: 1)如果Ignite服务器重新启动,我需要重新启动客户端(web应用程序)。是否有任何方法可以在服务器重新启动时重新连接到服务器。我知道当服务器重新启动时,它分配了一个不同的ID,因此当前现有的连接变得过时。是否有方法克服这个问题,如果是的话,哪一个版本的Ignite支持这个功能。目前我使用1.7版本 3)如果我有一个大对象要缓存,我发现序列化和反序列化在Ignite中需
问题内容: 我是Redis的新手,并试图找出一种简单的方法将Redis用作C#应用程序的本地缓存。我已经从https://github.com/MSOpenTech/redis/releases下载并运行redis服务器 我可以成功存储键值并按以下方式检索它: 我想限制Redis在我的服务器上使用的内存量,我也想让Redis在内存填满时自动清除值。我尝试了maxmemory命令,但是在redus-
问题内容: 我正在使用render_to_response快捷方式,并且不想制作特定的Response对象来添加其他标头以防止客户端缓存。 我想要一个包含以下内容的回复: 语法:无缓存 缓存控制:无缓存 缓存控制:必须重新验证 浏览器希望将所有其他巧妙的方式解释为指令以避免缓存。 是否有没有缓存的中间件或类似的东西可以用最少的代码入侵就能解决问题? 问题答案: 你可以使用cache_control
我有一个运行在一个系统上的java服务器,它从数据库加载数据并缓存到java缓存。我有其他的C++客户端,它正在运行使用相同的Java配置。两者都在不同的PC上运行。我希望对java和C++客户机都使用一个公共缓存,也就是说,如果我使用java加载缓存,然后我希望通过C++客户机查询这个缓存数据。我只是尝试这样设置组播选项。 如果两个客户机都在同一个系统上工作,它的工作是好的。但是当两者都在不同的