Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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 GridGain序列化问题_Java_Gridgain - Fatal编程技术网

Java GridGain序列化问题

Java GridGain序列化问题,java,gridgain,Java,Gridgain,我已经使用GridGain创建了一个消息传递系统来实现。我有一个MessageCenter类,它由一个GridGainGridProjection组成,我的设置如下所示 Gateway-> MessageCenter-> GridProjection 现在,当我启动网关,然后启动网格,启动另一个网关时,我会收到序列化错误,因为GridGain正在尝试序列化网关、MessageCenter及其所有依赖项,这迫使我将所有内容标记为可序列化 我不明白为什么GridGain试图序列化它的父

我已经使用
GridGain
创建了一个消息传递系统来实现。我有一个
MessageCenter
类,它由一个
GridGain
GridProjection
组成,我的设置如下所示

Gateway-> MessageCenter-> GridProjection
现在,当我启动网关,然后启动网格,启动另一个网关时,我会收到序列化错误,因为GridGain正在尝试序列化网关、MessageCenter及其所有依赖项,这迫使我将所有内容标记为可序列化


我不明白为什么
GridGain
试图序列化它的父类,而父类应该与网格无关,它们是关闭它的一种方式吗

根据提供的描述,您似乎正在向远程节点发送匿名关闭/消息


匿名类隐式捕获对封闭类的引用,从而强制GridGain对其进行序列化。这里干净的解决方案是将匿名闭包/消息移动到静态内部类。这样,您就可以完全控制要序列化的内容。

我的错。我通过切换到Hazelcast发现了问题。我有一个messenger类,它既有一个receive方法,也可以注册一个侦听器。messenger驻留在网格集群(GridGain或Hazelcast)中的队列中。这要求messenger是可序列化的,这反过来意味着任何已注册的侦听器也必须是可序列化的

我的网关具有可运行的处理程序,这些处理程序向信使注册,以处理传入的消息,从而实现反向序列化

我无法通过GridGain找到这一点,因为GridGain在新成员加入网格并尝试序列化从其队列中的对象可以访问的所有内容时会提前进行序列化,而Hazelcast则在运行时才进行序列化