|
What this is
Other links
The source code
/*
* Copyright 1999-2004 The Apache Sofware Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.tomcat.modules.session;
import org.apache.tomcat.core.BaseInterceptor;
import org.apache.tomcat.core.Context;
import org.apache.tomcat.core.ContextManager;
import org.apache.tomcat.core.Request;
import org.apache.tomcat.core.ServerSession;
import org.apache.tomcat.core.TomcatException;
import org.apache.tomcat.util.buf.TimeStamp;
import org.apache.tomcat.util.threads.Expirer;
/**
* This module handles session expiration ( independent of the
* session storage and reloading ).
*
* For scalability it uses a single thread per module ( you can
* use per/context interceptors instead of global to change that )
* It is derived from SimpleSessionStrore, refactored to keep the
* code clear.
*
* @author costin@eng.sun.com
* @author hans@gefionsoftware.com
* @author pfrieden@dChain.com
* @author Shai Fultheim [shai@brm.com]
*/
public final class SessionExpirer extends BaseInterceptor {
int manager_note;
int checkInterval = 60;
Expirer expirer=null;
public SessionExpirer() {
}
// -------------------- Configuration properties --------------------
/**
* Set the check interval (in seconds) for this Manager.
*
* @param checkInterval The new check interval
*/
public void setCheckInterval( int secs ) {
checkInterval=secs;
}
public Expirer getExpirer() {
return expirer;
}
// -------------------- Tomcat request events --------------------
// XXX use contextInit/shutdown for local modules
public void engineStart( ContextManager cm ) throws TomcatException {
expirer=new Expirer();
expirer.setCheckInterval( checkInterval );
expirer.setExpireCallback( new SessionExpireCallback(this, debug) );
expirer.start();
}
public void engineStop( ContextManager cm ) throws TomcatException {
expirer.stop();
}
public int sessionState( Request req, ServerSession session, int state ) {
TimeStamp ts=session.getTimeStamp();
if( state==ServerSession.STATE_NEW ) {
if( debug > 0 ) log("Registering new session for expiry checks");
ts.setNew(true);
ts.setValid(true);
ts.setCreationTime(System.currentTimeMillis());
Context ctx=session.getContext();
ts.setMaxInactiveInterval( ctx.getSessionTimeOut() * 60000 );
session.getTimeStamp().setParent( session );
expirer.addManagedObject( ts );
} else if( state==ServerSession.STATE_EXPIRED ) {
if( debug > 0 ) log("Removing expired session from expiry checks");
expirer.removeManagedObject( ts );
}
return state;
}
// -------------------- Internal methods --------------------
// Handle expire events
static class SessionExpireCallback implements Expirer.ExpireCallback {
SessionExpirer se;
int debug;
SessionExpireCallback( SessionExpirer se, int debug ) {
this.se=se;
this.debug=debug;
}
public void expired(TimeStamp o ) {
ServerSession sses=(ServerSession)o.getParent();
if( debug > 0 ) {
se.log( "Session expired " + sses);
}
sses.setState( ServerSession.STATE_EXPIRED );
// After expiring it, we clean up.
if( debug > 0 ) se.log( "Recycling " + sses);
sses.recycle();
sses.setState( ServerSession.STATE_INVALID );
}
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.