繁体   English   中英

每次我在 JSF 项目中进行更改时,都需要更新 serialVersionUID

[英]serialVersionUID needs to be updated everytime I make changes in my JSF project

这很烦人,每次我在我的托管bean中进行更改时,我都需要生成一个新的串行版本id,以便在我的项目中进行更改,这很不方便,我以为我的服务器有问题所以我重新启动了我的apache 几次,现在我发现应该删除serialversion id 然后一遍又一遍地生成,我这个 JSF 是如何工作的?

编辑:现在每次我对代码进行更改时都会变得很糟糕,我将删除 serialversion id,生成一个新的,然后再次生成,否则如果不应用更改,非常糟糕

编辑:现在我的项目运行正常,对我的问题的简单回答是,我没有生成serialVersionID并且总是清理项目。 有时 IDE 没有检测到其他类的变化,所以你需要清理并重新启动服务器。

好吧, serialVersionUID的目的是处理 class 中的更改,当序列化和反序列化 object 的类的代码不同时,这些更改将(或可能)导致问题。 有几种方法:

  1. 不要使用serialVersionUID字段。 JVM 将根据正在序列化和反序列化的 class 的版本动态生成 UID。 如果 UID 不匹配,您将收到异常。

  2. 使用serialVersionUID字段并且不要更新它。 这有点危险。 如果您进行了不兼容的更改,您可能会遇到异常,因为序列化 class 中的表示描述符与反序列化程序的预期不匹配。 但你可能不会,这才是真正的问题。 (传输的数据可能有错误的含义!)

    如果您确定class 在序列化和反序列化时的版本将始终相同,这是安全的。 但是您可以保证的场景/用例非常不寻常。

  3. 仅当您进行 class 更改并评估为可能导致版本兼容性问题时,才使用serialVersionUID字段并重新生成它。 风险在于您弄错了,并且在需要时不重新生成。 这将导致与上述 2. 相同的问题。

  4. 每当您更改 class 时,使用serialVersionUID字段并重新生成它。

  5. 不要使用 object 序列化。 请改用 XML 或 JSON。 (使用模式......如果您想要一定程度的接口兼容性检查。)


但最重要的是,您实际上无法避免分布式系统中服务之间传递的表示的兼容性问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM