浏览 254 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-07-19 关键字: rap session
由于RAP是服务器端的应用,在这点上与一般的WEB应用没有什么区别。所以,RAP应用也需要解决Session问题。
[1]. 传统的单件模式 public class UserSession {
private Integer number = 0;
private static UserSession instance = new UserSession();
public static getInstance() {
return instance ;
}
public Integer getNumber() {
this.number++; // 取一次值,就++
return this.number;
}
}
开着多个IE测试,你将会发现,多个IE任一调用getNumber(),那么,这个值会一直加。这说明普通的单件模式在RAP上要小心应用。 还好RAP提供了一个很简单的解决方案。就是:SessionSingletonBase. SessionSingletonBase是抽象类,需要自定义的Session类去继承它。它的子类能提供针对一个user 上下文的唯一实体,也就是在一个user context中调用getInstance(Class)将会一直得到同一个对象实体,但对于不同user的context却会得到不同的对象实体。 [1]. 定义具体的Session类 public class UserSession extends SessionSingletonBase {
private Integer number = 0; // 只是一个简单的针对单个用户的计数器
// User currentUser; 你需要的也许是这样有意义的属性
// Date loginTime;
private UserSession() { }
public static UserSession getInstance() {
return (UserSession) SessionSingletonBase.getInstance(UserSession.class);
}
public Integer getNumber() {
this.number++; // 取一次值,就++. 当然,你也可以改成一个setNumber方法。
return this.number;
}
}
请注意中间的这段代码,这就是关键.SessionSingletonBase.getInstance(UserSession.class)如果值存在就一直返回这个,如果不存在将会new一个UserSession返回。 public static UserSession getInstance() {
return (UserSession) SessionSingletonBase.getInstance(UserSession.class);
}
[2]. 自定义Session类的使用 // 拿值 UserSession.getInstance().getNumber(); 好了,你可以开多个IE去测试,看看,每个UserSession的number是否只与单个IE相关联。 ################### RAP[1]RAP环境的安装 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |

![lggege的博客: [203] lG 槛~ 迈过去! 用户头像](http://www.javaeye.com/upload/logo/user/18674/d58959b8-54ec-376e-b9f2-5d3a36beaa2f.jpg?1206674671)
