Stores
Stors由org.apache.catalina.Store接口表示,它是一个为Manager所管理的Session提供持久化储存的组件。
package org.apache.catalina;
import java.beans.PropertyChangeListener;
import java.io.IOException;
public interface Store {
public String getInfo();
public Manager getManager();
public void setManager(Manager manager);
public int getSize() throws IOException;
public void addPropertyChangeListener(PropertyChangeListener listener);
public String[] keys() throws IOException;
public Session load(String id)throws ClassNotFoundException, IOException;
public void remove(String id) throws IOException;
public void clear() throws IOException;
pubiic void removePropertyChangeListener(PropertyChangeListener
listener);
public void save(Session session) throws IOException;
}
在这个接口中最重要的两个方法是save和load。save方法用于持久化保存指定的Session对象。load方法会根据给定的Session标识符从持久化的Session对象中返回指定的Session。
StoreBase
StoreBase是一个抽象类,它为它的两个子类(FileStore和JDBCStore)提供一些基本功能的实现。StoreBase不会实现Store接口中的save和load方法,因为这两个方法要具体关系到要把Session对象持久化到哪种存储介质中。
在Tomcat4中,StoreBase使用一个单独的线程来定期检查失效的Session并将失效的Session从活跃列表中删除。
public void run() {
// Loop until the termination semaphore is set
while (!threadDone) {
threadSleep();
processExpires();
}
}
processExpires方法遍历所有活跃的Session对象,删除那些失效的Session。
在Tomcat5中,并没有使用一个单独的线程来调用processExpires方法,而是定期的被PersistentManagerBase实例的backgroundProcess方法来调用。
FileStore
FileStore类会将Session对象保存一个File文件中。这个文件的名称为Session对象的唯一标识符和一个扩展符.session。这个文件会存放在临时工作目录里,你可以调用setDirectory方法重新设置这个存放Session文件的目录。
save方法使用java.io.ObjectOutputStream类来序列化Session对象,因此,所有存放在Session对象中的类都要实现java.lang.Serializable接口。在load方法中对Session对象再进行反序列化。
JDBCStore
JDBCStore类通过JDBC将Session对象保存在数据库中