2024年Clojure调查问卷中分享你的看法!

欢迎!有关本站如何运作的更多信息,请参阅关于页面。

+1
Clojure
关闭

我最近将我们的应用程序从Clojure 1.10.3 升级到 1.11.0,并现在在我们通过Quartz(调度器)读取旧版本序列化的对象时遇到了反序列化问题。

这是我们遇到的错误

....
org.quartz.impl.StdScheduler.getJobDetail StdScheduler.java: 498
org.quartz.core.QuartzScheduler.getJobDetail QuartzScheduler.java: 1518
org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveJob JobStoreSupport.java: 1374
org.quartz.impl.jdbcjobstore.JobStoreSupport.executeWithoutLock JobStoreSupport.java: 3739
org.quartz.impl.jdbcjobstore.JobStoreTX.executeInLock JobStoreTX.java: 93
org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock JobStoreSupport.java: 3803
org.quartz.impl.jdbcjobstore.JobStoreSupport$9.execute JobStoreSupport.java: 1377
org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveJob JobStoreSupport.java: 1385
org.quartz.impl.jdbcjobstore.StdJDBCDelegate.selectJobDetail StdJDBCDelegate.java: 860
org.quartz.impl.jdbcjobstore.StdJDBCDelegate.getObjectFromBlob StdJDBCDelegate.java: 3201
java.io.ObjectInputStream.readObject ObjectInputStream.java: 460
...
java.io.ObjectStreamClass.initNonProxy ObjectStreamClass.java: 699
java.io.InvalidClassException: clojure.lang.Keyword; local class incompatible: stream classdesc serialVersionUID = -2105088845257724163, local class serialVersionUID = 2404715664513862299
org.quartz.JobPersistenceException: Couldn't retrieve job because the BLOB couldn't be deserialized: clojure.lang.Keyword; local class incompatible: stream classdesc serialVersionUID = -2105088845257724163, local class serialVersionUID = 2404715664513862299

我在想,问题是否是Keyword.java最近发生了变化
并且因为它没有声明它自己的serialVersionUID,所以它得到了一个新的。
为什么Keyword类没有声明它自己的serialVersionUID?我们能解决这个问题吗?

备注:已解决(Fix in 1.11.1)

1 个答案

+1
 
最佳答案

感谢 Alex 快速回应和洞察。
告知,我打算发布 1.11.1 版本,将 Keyword 和 ArraySeq 的 serialVersionUID 重新锁定到 1.10.3 版本。这可能有助于决定延迟升级路径。
听起来很棒。我们非常感激,期待新的小版本发布 :).
Clojure 1.11.1-rc1 已发布 - 请测试并反馈!
我可能只在 Slack 上回复了,但当然这也符合预期。再次感谢快速的修复!
...