gpt4 book ai didi

java - 如何禁用 Wildfly 9.0.2 尝试序列化集群应用程序中的某些类

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:42 26 4
gpt4 key购买 nike

在集群设置期间,我遇到了 WildFly/Infinispan 尝试序列化许多类的问题,这些类可以在每个实例上重新创建 - 尽管无论出于何种原因,它们似乎决定在集群中分布。

最初我认为 @Stateless 注释会产生我想要的效果,尽管它会因没有正确的构造函数而引发问题,所以我认为这不是我们正在寻找的。

在每个类的基础上禁用它或覆盖序列化方法的正确方法是什么?

最佳答案

非回答

请谨慎使用为选定类禁用序列化的方法。当在本地或某些有限的开发环境中运行时,您的应用程序可能不需要“集群”并且不需要复制 session 或有状态实体。然而,一旦部署到测试或生产中,它就可以集群化。如果您阻止了序列化,那么它将被破坏。

因此,最好的行动原因是确保类的“可序列化”,而不是强制阻止它。

序列化关闭答案

如果您坚持禁用序列化,请删除 <distributable/>来自你的 web.xml应该可以解决问题。

序列化不可序列化答案

有时,通过尝试使某些类可序列化,您会发现某些类成员的类型只是不可序列化的,您无法将类型交换为类似的东西,这会序列化。然后使用以下技巧,前提是它适用:

public class ClassForcedToBeSerializable implements Serializable {

transient private FileWriter writer; //FileWriter is not serializable!!!
private final File file;

public ClassForcedToBeSerializable(File file) throws IOException {
this.file = file;
this.writer = new FileWriter(file);
}

//FLESH AND BONES HERE

private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
if (writer == null) {
this.writer = new FileWriter(file);
}
}
}

如您所见,该类包含 FileWriter 的字段类型。我们通过标记 transient 来确保对象 -> 字节序列化。 .但是在远程 JVM 上,当从字节带回此类时,您的 FileWriter field 字段将为 null .我们通过在反序列化期间重新创建它来避免这个问题(参见 readObject() 方法)。

这个例子之所以有效,是因为 File字段携带足够的状态 FileWriter才能成功重现。

关于java - 如何禁用 Wildfly 9.0.2 尝试序列化集群应用程序中的某些类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35060907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com