注意:我在这里有一个相关的问题(http://stackoverflow.com/questions/6915055/are-jsf-views-shared-between-users),但它涉及到其他一些问题,所以我创建这个问题来关注一个更具体的领域。
我正在使用RichFaces(在过去的几周里,我已经对它的实现、对象分布、内存占用和类似的东西有了更好的感觉)以及JSR-168 portlet,并且遇到了可伸缩性问题。考虑到我的大多数页面(也就是视图)是与用户无关的(它们是只读的,并且在大多数情况下对用户社区是通用的),我想强制RichFaces框架创建一个跨会话共享的单一视图(逻辑视图和会话的#在web.xml中设置为1)。
换句话说,我不希望每个会话超过一个视图(很容易,通过上面提到的配置参数在web.xml中完成),但更重要的是,我不希望超过一个视图(相同的底层视图定义),甚至跨会话。
现在,要做到这一点需要什么?
我明白了。我扩展了JBoss Portlet Bridge和JSF StateHolder类(以及其他东西),并拥有一个自定义实现,它允许我跨用户会话共享JSF视图(同样,这些视图是只读的,对用户社区来说是通用的)。那些是特定于会话的,我就让它们诉诸于默认行为。这有助于将JSF对整个会话大小(就内存而言)的贡献减少一半。