我在一些模型对象的日志中看到 NotSerializedException,我知道解决此问题的方法是使它们可序列化,但我们还看到有关组件未添加到页面的 MarkupExceptions,并且我'我想知道这是否相关。我们仅在生产中看到启用集群的错误。
所以我的问题是,当模型对象不可序列化时,即使它的所有属性都可序列化,会发生什么?
最佳答案
据我所知,如果您不将类声明为可序列化,那么后续操作(例如表单提交、行为、AJAX)的序列化版本中将会丢失该类。因此,当对象被反序列化时,如果子对象无法成功地从存储中重新加载,则任何对象引用都可能为 null。
您绝对应该避免不必要的序列化对象。这包括响应 AJAX 请求。
最佳实践规定:
仅存储所需的最少序列化对象
- 避免将变量声明为“final”并从匿名内部类引用这些变量
- 避免将太多对象存储为序列化对象(页面、面板或列表等)中的字段
为每个请求加载对象 - 特别是模型对象,应在处理每个请求时从数据存储库加载这些对象
在构造函数外部加载数据对象
对所有数据使用模型,并为简单起见尝试镜像 Wicket 结构(例如,使用CompoundPropertyModel,其中根据使用的 wicket:id 使用反射从模型对象加载字段)
里>对加载的任何大型物体使用可拆卸模型
避免过多使用匿名内部类 - 使用适当的事件处理程序,以便您的代码更易于阅读和维护。
我已经在复杂的 Wicket 应用程序上工作了一段时间,我可以告诉您,您希望避免由于过度使用序列化/反序列化而出现重复的对象 - 调试和修复可能是一场噩梦。
阅读这些内容以获取更多信息/建议:
http://letsgetdugg.com/2009/04/19/wicket-anti-patterns-avoiding-session-bloat/ https://cwiki.apache.org/confluence/display/WICKET/Best+Practices+and+Gotchas
关于java - 当模型对象不可序列化时,在集群 wicket 环境中会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19250475/