Hazelcast Serializable Map ClassNotFound异常

use*_*089 5 java map serializable classnotfoundexception hazelcast

我试图在一个简单的Web应用程序中实现Hazelcast.

我正在尝试将自定义对象存储到我的Hazelcast地图中,并在我的出价对象类中实现了Serializable以及必要的导入.

import java.io.Serializable;
Run Code Online (Sandbox Code Playgroud)

这是类对象的片段.

public class Bid implements Serializable{

private String bidId;      
private String stock;
private int price;
private String userId;
private Date date;
Run Code Online (Sandbox Code Playgroud)

以下是将Bid对象存储到Map中的语法,其中newBid是Bid对象.

Config cfg = new Config();
    HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);    

Map<String, Bid> mapBids = instance.getMap("bids");
        mapBids.put(newBid.getUserId(), newBid);
Run Code Online (Sandbox Code Playgroud)

我的Hazelcast节点已启动并正在运行,但当我查询出价图时,出现以下错误.

com.hazelcast.nio.serialization.HazelcastSerializationException: java.lang.Class
NotFoundException: aa.Bid
        at com.hazelcast.nio.serialization.DefaultSerializers$ObjectSerializer.r
ead(DefaultSerializers.java:190)
        at com.hazelcast.nio.serialization.StreamSerializerAdapter.read(StreamSe
rializerAdapter.java:59)
        at com.hazelcast.nio.serialization.SerializationServiceImpl.toObject(Ser
ializationServiceImpl.java:221)
        at com.hazelcast.spi.impl.NodeEngineImpl.toObject(NodeEngineImpl.java:15
6)
        at com.hazelcast.map.MapService.toObject(MapService.java:773)
        at com.hazelcast.map.proxy.MapProxyImpl.entrySet(MapProxyImpl.java:502)
        at com.hazelcast.examples.TestApp.handleMapEntries(TestApp.java:882)
        at com.hazelcast.examples.TestApp.handleCommand(TestApp.java:371)
        at com.hazelcast.examples.TestApp.start(TestApp.java:187)
        at com.hazelcast.examples.TestApp.main(TestApp.java:1641)

Caused by: java.lang.ClassNotFoundException: aa.Bid
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at com.hazelcast.nio.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:109)
        at com.hazelcast.nio.IOUtil$1.resolveClass(IOUtil.java:89)
        at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
        at java.io.ObjectInputStream.readClassDesc(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at com.hazelcast.nio.serialization.DefaultSerializers$ObjectSerializer.r
ead(DefaultSerializers.java:185)
        ... 9 more
Run Code Online (Sandbox Code Playgroud)

对象类与我的Web应用程序位于同一文件夹中,具有必要的导入语法,但它没有读取它.我已经将CLASSPATH添加到我的Hazelcast jar文件中.

是否有任何变量我必须在我的Bid类对象中设置Transient才能使Serializable工作?或者我错过了什么?

Joh*_*n W 5

当我尝试将“MyClass”的实例放入相关的 iMap 时,我在使用远程两节点集群时遇到了同样的问题。我正抓狂地想,我需要分发包含“MyClass”的 jar,但意识到问题是 hazelcast.xml 文件中的定义指定了 OBJECT 的内存格式...

<in-memory-format>OBJECT</in-memory-format>
Run Code Online (Sandbox Code Playgroud)

我将此值更改为 BINARY,一切都开始工作。

<in-memory-format>BINARY</in-memory-format>
Run Code Online (Sandbox Code Playgroud)

注意。我现在在集群中有许多不同的映射,其中一些被定义为 OBJECT,一些被定义为 BINARY。

我希望这对那里的人有帮助!


She*_*nal 3

如果您在本地运行代码,问题是存在不具有相同类的 Hazelcast 节点。在控制台中检查并确认以下内容:

会员 [1] {
  会员 [10.17.54.16]:5701 这个
}

如果有更多 hazelcast 实例正在运行,请关闭或关闭它们,然后运行应用程序。