【问题标题】:Hazelcast Serializable Map ClassNotFound ExceptionHazelcast 可序列化映射 ClassNotFound 异常
【发布时间】:2014-04-26 23:14:52
【问题描述】:

我正在尝试在一个简单的 Web 应用程序中实现 Hazelcast。

我正在尝试将自定义对象存储到我的 Hazelcast 地图中,并已在我的 Bid 对象类中使用必要的导入实现了 Serializable。

import java.io.Serializable;

这是一个类对象的sn-p。

public class Bid implements Serializable{

private String bidId;      
private String stock;
private int price;
private String userId;
private Date date;

这里是与教程一样的语法,用于将投标对象存储到地图中,其中 newBid 是投标对象。

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

Map<String, Bid> mapBids = instance.getMap("bids");
        mapBids.put(newBid.getUserId(), newBid);

我的 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

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

为了使 Serializable 能够工作,我必须在我的 Bid 类对象中设置任何变量吗?还是我错过了什么?

【问题讨论】:

  • 您是否在集群中的所有成员之间共享该类以及是否使用客户端;客户端和服务器之间?因为我很确定没有找到这个类。
  • 感谢您的回复!我使用运行客户端 windows 批处理文件在我的机器上本地运行我的 Hazelcast 节点,并在我的由 Tomcat 服务器托管的 Web 应用程序中实例化 Hazelcast 实例。我是否也必须以编程方式对 Hazelcast 节点进行编码才能通过我的网络应用程序启动?抱歉,我似乎找不到任何有关 Hazelcast 实施的概念性知识。
  • 不要使用批处理文件。他们只是为了玩。我通常在我的应用程序中嵌入 hazelcast 节点,例如HazelcastInstance hz = Hazelcast.newHazelcastInstance() 但是您的问题的原因是类文件并非对集群中的所有成员都可用。
  • 如何跨 Hazelcast 节点传播类文件?我在本地运行节点,所以我是否缺少帮助 Hazelcast 指向该特定类的设置?
  • 我们不提供分布式类加载器。因此,您需要将应用程序的 jar(即包含 aa.Bid 的 jar)包含到所有 JVM 正在运行的 Hazelcast 中。

标签: java map classnotfoundexception serializable hazelcast


【解决方案1】:

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

<in-memory-format>OBJECT</in-memory-format>

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

<in-memory-format>BINARY</in-memory-format>

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      public class Bid 应该和客户端一起定义在服务器端

      【讨论】:

        猜你喜欢
        • 2016-07-22
        • 2015-12-09
        • 1970-01-01
        • 1970-01-01
        • 2017-08-04
        • 2012-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多