0

我正在使用 Tapestry 5.3.3 对应用程序进行集群。集群是通过将 HttpSession 复制到集群中的所有节点来完成的。通过序列化 HttpSession 进行复制。当容器尝试序列化会话时,会抛出 NotSerializableException,因为 org.apache.tapestry5.internal.SelectModelImpl 不可序列化。Tapestry 通过 ClusteredSessionImpl 类将这个类添加到会话中。因此,Tapestry 确实希望通过将相关信息保存到会话来实现集群友好。有关如何解决此异常的任何想法?

4

1 回答 1

1

Tapestry 用户邮件列表提供了一些很好的建议。显然,应避免将 SelectModel 持久化到会话中。这里有几个回应——


您的自定义代码是 @Persist 的 SelectModel 吗?如果是这样,您可以改为 @Persist 底层 Collection 并每次在 UI 中构建 SelectModel。您应该记住,HTTPSession 的使用应该保持在最低限度,尤其是在集群环境中。HTTPSession 的使用不能很好地扩展。你真的需要在会话中保留一个列表吗?您能否改为在会话中存储用户 ID(或其他过滤器参数)并在每次需要服务时查找列表?如果您稍后发现查找成本很高,您可以查看服务级别的缓存。

您应该阅读以下内容: http: //tapestry.apache.org/performance-and-clustering.html


不要@Persist 或@SessionState SelectModel。这是个坏主意。正如 Lance 所说,如果您真的需要以某种方式持久化它,请持久化一个用于创建 SelectModel 的 List,而不是 SelectModel 本身。


于 2013-03-01T15:16:04.087 回答