您的位置:首页 > 运维架构 > Tomcat

tomcat源码阅读13

2010-04-24 04:34 267 查看
StandardManager类的doLoad()方法,该方法从session文件中读取session对象,将其放入 protected Map<String, Session> sessions = new ConcurrentHashMap<String, Session>();中:

protected void doLoad() throws ClassNotFoundException, IOException {

if (log.isDebugEnabled())

log.debug("Start: Loading persisted sessions");

// Initialize our internal data structures

sessions.clear();

// Open an input stream to the specified pathname, if any

File file = file();

if (file == null)

return;

if (log.isDebugEnabled())

log.debug(sm.getString("standardManager.loading", pathname));

FileInputStream fis = null;

ObjectInputStream ois = null;

Loader loader = null;

ClassLoader classLoader = null;

try {

fis = new FileInputStream(file.getAbsolutePath());

BufferedInputStream bis = new BufferedInputStream(fis);

if (container != null)

loader = container.getLoader();

if (loader != null)

classLoader = loader.getClassLoader();

if (classLoader != null) {

if (log.isDebugEnabled())

log.debug("Creating custom object input stream for class loader ");

ois = new CustomObjectInputStream(bis, classLoader);

} else {

if (log.isDebugEnabled())

log.debug("Creating standard object input stream");

ois = new ObjectInputStream(bis);

}

} catch (FileNotFoundException e) {

if (log.isDebugEnabled())

log.debug("No persisted data file found");

return;

} catch (IOException e) {

log.error(sm.getString("standardManager.loading.ioe", e), e);

if (ois != null) {

try {

ois.close();

} catch (IOException f) {

;

}

ois = null;

}

throw e;

}

// Load the previously unloaded active sessions

synchronized (sessions) {

try {

Integer count = (Integer) ois.readObject();

int n = count.intValue();

if (log.isDebugEnabled())

log.debug("Loading " + n + " persisted sessions");

for (int i = 0; i < n; i++) {

StandardSession session = getNewSession();

session.readObjectData(ois);

session.setManager(this);

sessions.put(session.getIdInternal(), session);

session.activate();

sessionCounter++;

}

} catch (ClassNotFoundException e) {

log.error(sm.getString("standardManager.loading.cnfe", e), e);

if (ois != null) {

try {

ois.close();

} catch (IOException f) {

;

}

ois = null;

}

throw e;

} catch (IOException e) {

log.error(sm.getString("standardManager.loading.ioe", e), e);

if (ois != null) {

try {

ois.close();

} catch (IOException f) {

;

}

ois = null;

}

throw e;

} finally {

// Close the input stream

try {

if (ois != null)

ois.close();

} catch (IOException f) {

// ignored

}

// Delete the persistent storage file

if (file != null && file.exists() )

file.delete();

}

}

if (log.isDebugEnabled())

log.debug("Finish: Loading persisted sessions");

}

获得session文件的方法:

protected File file() {

if ((pathname == null) || (pathname.length() == 0))

return (null);

File file = new File(pathname);

if (!file.isAbsolute()) {

if (container instanceof Context) {

ServletContext servletContext =

((Context) container).getServletContext();

File tempdir = (File)

servletContext.getAttribute(Globals.WORK_DIR_ATTR);

if (tempdir != null)

file = new File(tempdir, pathname);

}

}

// if (!file.isAbsolute())

// return (null);

return (file);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: