【发布时间】:2018-10-26 00:00:23
【问题描述】:
XPages 再次以神秘的方式运行。它显示的行为我只能通过假设应用程序范围的托管 bean 被创建两次来解释。托管 bean 包含一个用于保存会话相关数据的 Map,实际上是基于 SessionID。我使用相同的 SessionID 向 bean 询问会话数据,我得到不同的结果。控制台两次显示新的 SystemData...
这是我的 faces-config.xml 文件中的一部分:
<managed-bean>
<managed-bean-name>SystemData</managed-bean-name>
<managed-bean-class>nl.domain.SystemData</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
SystemData 类以:
public class SystemData implements Serializable {
private static Map<String, WebLog> webLogs = new HashMap<String, WebLog>();
private static final long serialVersionUID = -1L;
public SystemData() throws NotesException {
System.out.print("new SystemData");
init();
}
public static WebLog getWebLog() throws NotesException {
if (!isWebLogActive())
return null;
BaseXPage baseXPage = new BaseXPage();
Cookie sessionCookie = (Cookie) baseXPage.getCookie().get("SessionID");
if (sessionCookie == null)
return null;
String sessionId = sessionCookie.getValue();
if (!webLogs.containsKey(sessionId))
webLogs.put(sessionId, new WebLog(sessionId));
return webLogs.get(sessionId);
}
...
还有 WebLog 类:
public class WebLog implements Serializable {
private String id = null;
private Map<String, Object> logMap = null;
private Date started = null;
public WebLog(String id) throws NotesException {
// System.out.print("new WebLog");
started = new Date();
this.id = id;
}
public void open() {
if (logMap == null) {
logMap = new HashMap<String, Object>();
logMap.put("Form", "BWLog");
logMap.put("SessionStarted", started);
logMap.put("SessionID", id);
}
}
...
我在生成的日志中看到的是这样的:
日志按 SessionStarted 分类,第 1 页和第 3 页的开始日期/时间相同,但第 2 页不同。
其他信息:
- 这只是一个简单的网站,匿名,无需登录
- 第一页创建第一个 SystemData
- 单击可打开下一页,其中包含新的 SystemData
- 再次单击会打开另一个页面,其中包含创建的第一个 SystemData
- 奇怪的是,第二页总是创建一个新的 SystemData
- 据我所知没有集群
我完全感到困惑......任何解决这个问题的提示都非常受欢迎!
谢谢大家!
【问题讨论】:
-
你是如何存储地图的?
-
我会更新问题。