Lot*_*ler 3 java session managed-bean xpages xpages-ssjs
我正在为Xpages应用程序构建managedBean.目前,bean在视图范围的faces-config中注册,因为我需要它在每个页面加载时重新初始化(见下文).bean的构造函数初始化了几个类变量,这些变量的值在整个类的代码中被引用.其中一个变量是Domino session对象,另一个例子是当前的document datasource:
private Session session;
private DominoDocument ds;
Run Code Online (Sandbox Code Playgroud)
两者都在构造函数中初始化为
session=DominoUtils.getCurrentSession();
ds=(DominoDocument) resolveVariable(dsName);
Run Code Online (Sandbox Code Playgroud)
(resolveVariable是一个内部帮助方法;不要认为我需要在这里解释一下)
除了构造函数和各种帮助器方法之外,在同一个类中还有一些其他公共方法在按钮单击时调用.大多数这些附加方法都使用相同的文档数据源以及当前的会话对象.
发生的事情是我的其他方法可以访问和使用全局数据源对象(ds)但是如果它们试图访问全局会话对象则会引发错误; 进一步向下堆栈跟踪我发现似乎导致错误:
NotesException: Object has been removed or recycled
Run Code Online (Sandbox Code Playgroud)
我的代码现在根本没有回收,会话对象必须在途中丢失.
作为一种解决方法,我开始将会话对象从SSJS传递到每个方法中
public void testMethod(Session s){System.out.println("my name is"+ s.getEffectiveUserName()); }
哪个工作正常.但是为什么bean对象会记住所有其他对象和变量而忘记全局会话?
BTW:我试图将我的managedBean绑定到会话范围,但这根本没有帮助.是的,我甚至在做出改变之后重启了整个服务器......
来自运行时的所有Domino对象都在每个请求结束时被回收.如果你想访问它们中的任何一个,你应该在需要时从环境中重新获取它们,而不是在你的意思中存储引用(你可以使用transientrefs,但你不会获得太多).因此,快速解决方法是使用该DominoUtils.getCurrentSession()调用替换类中会话的每次使用.
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |