《How tomcat works》读书笔记_Session Stores

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对象保存在数据库中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值