【发布时间】:2015-09-07 15:04:42
【问题描述】:
我正在为 Xpages 应用程序构建 managedBean。目前该 bean 已在视图范围的 faces-config 中注册,因为我需要它在每次页面加载时重新初始化(见下文)。 bean 的构造函数初始化了几个类变量,它们的值在整个类的代码中都被引用。其中一个变量是 Domino session 对象,另一个例子是当前的 document datasource:
private Session session;
private DominoDocument ds;
两者都在构造函数中初始化为
session=DominoUtils.getCurrentSession();
ds=(DominoDocument) resolveVariable(dsName);
(resolveVariable 是一个内部辅助方法;这里不需要我解释)
除了构造函数和各种辅助方法之外,同一个类中还有一些其他公共方法在按钮单击时被调用。大多数这些附加方法都使用相同的文档数据源以及当前会话对象。
发生的情况是,我的其他方法可以访问和使用全局数据源对象 (ds),但如果他们尝试访问全局会话对象,则会引发错误;在堆栈跟踪的下方,我发现似乎导致错误的原因:
NotesException: Object has been removed or recycled
现在我的代码中根本没有回收,会话对象一定会在途中丢失。
作为一种解决方法,我开始将会话对象从 SSJS 传递到每个方法中,如下所示
public void testMethod(Session s){ System.out.println("我的名字是" + s.getEffectiveUserName()); }
哪个工作正常。但是为什么bean对象总是忘记全局会话,而它可以记住所有其他对象和变量呢?
顺便说一句:我试图将我的 managedBean 绑定到会话范围,但这根本没有帮助。是的,我什至在进行更改后重新启动了整个服务器......
【问题讨论】:
标签: java session xpages managed-bean xpages-ssjs