这个问题可能与非常具体的 Domino 版本有关(见下文),因此我从一些技术细节开始:
有问题的服务器是虚拟化的 Windows 2008 R2 64 位计算机。多米诺骨牌发布是
IBM Domino (r) 服务器(64 位)(适用于 Windows/64 的版本 9.0.1FP4 HF70)
已安装最新的 JVM 安全补丁(9.0.1.4,日期 20150724)。
我可能是错的,但我觉得问题是在我们安装最新补丁后开始的(FP4 HF70 and JVM):
在 Xpage 上,我有一个非常简单的“刷新”类型按钮,仅触发某个页面的部分刷新xp:panel
(id="pnMainContainer"
)围绕着我页面的大部分。在其他组件中,内部有一个选项卡式面板pnMainContainer
。设置为在加载页面时使用三个选项卡中的第一个打开。
假设我打开了第三个选项卡,通常如果我单击“刷新”按钮,选项卡 #3 会保持打开状态,并且其内容会按预期刷新。
然而,有时,在我将页面打开几分钟后(不能真正说多久,也许大约半小时),刷新显然会返回到其初始状态,显示第一个选项卡而不是原来的选项卡之前打开,并清空之前填写的所有可编辑字段。
发生这种情况时,我会在控制台上看到以下警告:
HTTP JVM:警告:CLFAD####W:状态数据不适用于 /myPage
因为在缓存中没有找到控制树。
我知道这里有这篇文章:Xpages文件改变文件模式?,虽然我不在我的应用程序中使用 Xagents,但我尝试设置我的页面viewState
财产给nostate
。这显然无助于解决问题。
另一个可能有用的细节是,相关页面使用了绑定到 viewScope 的 ManagedBean。
有什么想法可能导致这种情况,而且 - 此外 - 如何改变这种行为?
2015年9月10日更新:按照下面 @Paul 的建议,我昨晚将应用程序的会话超时设置为 120 分钟(xsp.session.timeout=120
)。今天早上我再次尝试:加载有问题的页面,然后让它在那里停留大约。 45分钟。之后点击我的部分刷新按钮。结果:页面重新加载到其初始状态,服务器控制台显示与昨天相同的警告。
为了完整起见,这是我的应用程序 xsp.properties 目前的全部内容:
xsp.error.page.default=true
xsp.library.depends=com.ibm.xsp.extlib.library
xsp.resources.aggregate=true
xsp.theme=oneuiv3.0.2
xsp.session.timeout=120
xsp.application.timeout=120
xsp.persistence.mode=basic
那里可能有什么东西会导致这种行为吗?
Some more details:
做了更多测试并发现了以下详细信息:
- 使用上面提到的 xsp.properties,只要我让页面坐在那里,缓存似乎会稳定很长一段时间
- 一旦我在页面或相关代码(SSJS 库、托管 bean 或页面本身)中进行任何类型的调整,就需要重建缓存,因为页面状态丢失(即使几秒钟后)。 Designer 中是否打开“自动构建”并不重要
- 尝试设置页面持久性
xsp.persistence.mode=basic
to xsp.persistence.mode=file
。当我打开选项卡 #3 时,这会导致“java.io.NotSerializedException”,该选项卡利用在 viewScope 级别注册的 ManagedBean 的内部属性
- 在同一服务器上构建一个非常简单的应用程序,只有几个部分刷新按钮:结果是该测试应用程序中的页面永远不会丢失页面状态
只要缓存仅在我更新设计时丢失,我并不关心。但我担心,如果许多用户开始访问这些页面,情况可能会升级。
我还能做些什么来提高性能吗?