|
|
1
2
从堆栈跟踪可以看出直接原因。 pdx序列化流包含一个类型id,该id是对gemfire集群维护的类型元数据存储库的引用。在这种情况下,对象的序列化数据包含的typeid不在集群的元数据存储库中。 所以问题变成了,“什么序列化了那个对象,为什么它使用了一个无效的类型id?” 我以前见过这种情况的唯一方式是当集群完全重新启动并且pdx元数据消失时,这可能是因为它不是持久的,也可能是因为它被删除了(例如,通过清除定位器工作目录)。 gemfire客户端缓存类型与其类型id之间的映射。这允许它们快速序列化对象,而无需不断从服务器上查找类型id。客户机连接可以在群集重新启动时保持。当客户端重新连接时,它不会刷新缓存的信息,并继续使用其缓存的类型ID写入对象。 因此,失去集群重启的pdx元数据和未重启的客户端(如应用程序)的组合。服务器)是我以前见过这种情况的唯一方式。这符合你的设想吗? 如果是这样,避免这种情况的最佳方法之一是持久化pdx元数据,而不删除它。 |