Java 当模型对象不可序列化时,集群wicket环境中会发生什么?
我在一些模型对象的日志中看到一个NotSerializableException,我知道解决这个问题的方法是使它们可序列化,但我们也看到了关于未添加到页面的组件的MarkupException,我想知道这是否相关。我们只看到在启用集群的生产环境中出现的错误Java 当模型对象不可序列化时,集群wicket环境中会发生什么?,java,serialization,wicket,Java,Serialization,Wicket,我在一些模型对象的日志中看到一个NotSerializableException,我知道解决这个问题的方法是使它们可序列化,但我们也看到了关于未添加到页面的组件的MarkupException,我想知道这是否相关。我们只看到在启用集群的生产环境中出现的错误 所以我的问题是,当一个模型对象不可序列化时会发生什么,即使它的所有属性都是可序列化的?据我所知,如果您不将一个类声明为可序列化的,那么它将在后续操作(例如表单提交、行为、AJAX)的序列化版本中丢失。因此,当对象被反序列化时,如果无法成功地从
所以我的问题是,当一个模型对象不可序列化时会发生什么,即使它的所有属性都是可序列化的?据我所知,如果您不将一个类声明为可序列化的,那么它将在后续操作(例如表单提交、行为、AJAX)的序列化版本中丢失。因此,当对象被反序列化时,如果无法成功地从存储中重新加载子对象,则任何对象引用都可能为null 您绝对应该避免不必要地序列化对象。这包括响应AJAX请求 最佳做法规定:
- 避免将变量声明为“final”并从匿名内部类引用这些变量
- 避免在序列化对象(页面、面板或列表等)中存储过多的对象作为字段
发生了什么
和尝试时发生了什么
应该在HashMap
中。移除serializable
接口并尝试发出请求。容器无法读取和写入。当模型对象未分离(例如,未连接到任何组件)时,会出现NotSerializableException,因此您可能应该先尝试分离模型?我不知道NotSerializableException和未添加到页面的组件之间有什么关系。我所要做的就是将模型对象标记为可序列化。这已经完成了,但我想知道当这些对象不可序列化时,wicket在幕后究竟做了什么。我了解到,在使用集群时可能会遇到问题,但我想知道这些问题是什么,并且还没有找到太多答案。您必须注意,一些可序列化的对象可能被包装在代理(e.x.实体)中。这可能会导致服务器端出现一些不一致的状态(但这只是猜测)和更大的内存使用量。我想你能做的最好的事情就是检查对象为什么没有分离。有人知道这会导致不一致的状态吗?如果是这种情况,它可能会在我的案例中创建一个标记异常。模型对象是一个列表。另一个列表确定要使用的片段(1、2、3或4单元格表行)。然后迭代模型列表,并将每个单元格添加到表行中。这两个列表的长度应该相同,但如果状态混乱,其中一个单元格可能无法添加,从而导致标记异常。