2013-02-28 69 views
0

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

回答

1

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


是您的自定义代码是@Persist的SelectModel?如果是这样,你可以@改写基础集合,并在UI中每次构建SelectModel。你应该记住,HTTPSession的使用应该保持在最低限度,特别是在集群环境中。 HTTPSession的使用不能很好地扩展。 你真的需要在会话中坚持列表吗?你可以在会话中存储一个用户标识(或其他过滤参数),并在每次从服务需要时查找列表?如果您稍后发现查找代价昂贵,则可以查看服务级别的缓存。

你应该阅读: http://tapestry.apache.org/performance-and-clustering.html


不要@Persist或@SessionState SelectModel。这是一个坏主意。正如兰斯所说,如果你真的需要坚持它,坚持一个List来创建SelectModel,而不是SelectModel本身。


相关问题