文档介绍:作者:运气
email: webmaster@
日期:7/4/2001 1:43:27 PM
尽管我们已经能够访问对话服务器,而且可以避免单一点故障,我们还必须为HttpSession建立一个封装对象,而SessionWrapper就是这样一个对象,而且,它还假定HttpSession的执行也是串行化的。如果它不是串行化的,可以很方便地修改封装对象将对话的信息转移到一个哈希表中并在其他成员变量中保留其他信息(ID、创作时间等信息。)。
public interface SessionWrapper extends Memory
{
/**
得到HttpSession的信息。
*/
public HttpSession getSession();
}
public class SessionWrapperImpl implements SessionWrapper
{
/**识别该对话的关键字*/
protected String _id;
/** 当前HttpSession的信息。*/
protected HttpSession _sess;
/**
建立ID,但没有建立对话的其他信息,可用于通过read寻找一个对话。
*/
public SessionWrapper(String id) {
_id = id;
}
/**
建立一个带对话的SessionWrapper。其ID与对话的ID相同。
*/
public SessionWrapper(HttpSession sess) {
_sess = sess;
_id = ();
}
/**
如果Memory对象是SessionWrapper的一个实例,当前的SessionWrapper
已经建立了与对象相同的ID,则此方法返回的值为真。
*/
public boolean equalsMemory(Memory m) {
return (m instanceof SessionWrapper
&& _id != null
&& (((SessionWrapper)m)._id));
}
/**
得到HttpSession的信息。
*/
public HttpSession getSession() {
return _sess;
}
}
SessionWrapper类执行了Memory的界面,因此,HttpSession对象的ID可以与远程对话的ID进行比较。
最后需要创建read()、write()和delete(),以对远程对话进行管理。我们向SessionManager类添加三个静态类:
/**
从在初始化时建立的Mnemosyne中得到HttpSession信息。
*/
public static HttpSession getSession(String id)
throws RemoteException
{
try {
SessionWrapper result
= (SessionWrapper)(new SessionWrapper(id),
null);
return