001: package com.sun.portal.netlet.eproxy;
002:
003: /*
004: * Keep the User Session alive until there is some Netlet traffic
005: *
006: * @ see com.sun.portal.netlet.eproxy.NetletGroup
007: * @ see com.iplanet.sso.*;
008: *
009: * @ created 31-08-2001
010: * @ author Rajesh T
011: */
012:
013: import java.util.logging.Level;
014: import java.util.logging.Logger;
015:
016: import com.iplanet.sso.SSOException;
017: import com.iplanet.sso.SSOToken;
018: import com.iplanet.sso.SSOTokenManager;
019: import com.sun.portal.log.common.PortalLogger;
020:
021: public class SessionKeepAlive implements Runnable {
022:
023: private long activateTime = 0; // Time in milliseconds
024:
025: private boolean status = true;
026:
027: private NetletGroupManager manager = null;
028:
029: private long maxIdleTime = 0;
030:
031: private final long interval = 100; // divident of MaxIdle time for
032:
033: // Checking.
034:
035: private static Logger logger = PortalLogger
036: .getLogger(SessionKeepAlive.class);
037:
038: public SessionKeepAlive(NetletGroupManager ng, long idleTime) {
039: maxIdleTime = idleTime;
040: manager = ng;
041: init();
042: }
043:
044: /*
045: * sets the sleep time to maxIdleTime/interval seconds
046: */
047: private void init() {
048: maxIdleTime = maxIdleTime * 60000;
049: activateTime = (long) maxIdleTime / interval;
050: }
051:
052: /*
053: * Gets the last Netlet activity time and checks whether the session is
054: * alive If there is some netlet traffic activated the user session before
055: * max idle time is reached.
056: */
057:
058: public void run() {
059: long calculatedTime = 0;
060: String ssoTokenIDs[];
061: String ssoTokenID;
062: NetletGroup userNetletTraffic = null;
063: long checkTime = (2 * activateTime) + 5;
064:
065: SSOTokenManager ssoTokenManager = null;
066: try {
067: ssoTokenManager = SSOTokenManager.getInstance();
068: } catch (SSOException se) {
069: // logger.severe("SessionKeepAlive: Unable to get SSOTokenManager
070: // instance -> " + se);
071: logger.log(Level.SEVERE, "PSSRNTLT_CSPNEPROX111", se);
072: status = false;
073: }
074:
075: while (status) {
076:
077: try {
078: ssoTokenIDs = NetletGroupManager
079: .getRegisteredSessions();
080: for (int i = 0; i < ssoTokenIDs.length; i++) {
081: ssoTokenID = ssoTokenIDs[i];
082: if ((ssoTokenID != null)
083: && (ssoTokenID.trim().length() != 0)) {
084: userNetletTraffic = NetletGroupManager
085: .getNetletGroup(ssoTokenID);
086: /*
087: * @ modified by bshankar@sun.com for bug 4680712 -
088: * Netlet should not not continue after Max session
089: * time.
090: */
091: if ((System.currentTimeMillis() - userNetletTraffic
092: .getUserLoginTime()) >= userNetletTraffic
093: .getMaxSessionTime()) {
094: NetletGroupManager.unregister(ssoTokenID);
095: continue;
096: }
097: calculatedTime = System.currentTimeMillis()
098: - userNetletTraffic
099: .getLastActivityTime();
100: // fix for bug #6252410
101: // if (calculatedTime < checkTime) {
102: if (calculatedTime < maxIdleTime) {
103: if (userNetletTraffic.needToExtend()) {
104: SSOToken token = null;
105: try {
106: token = ssoTokenManager
107: .createSSOToken(ssoTokenID);
108: } catch (SSOException ssoe) {
109: token = null;
110: }
111: if (token == null
112: || !ssoTokenManager
113: .isValidToken(token)) {
114: if (!userNetletTraffic
115: .getNetletRunUponLogout()) {
116: NetletGroupManager
117: .unregister(ssoTokenID);
118: }
119: }
120: }
121: }
122: // else if (calculatedTime < maxIdleTime) {
123: // }
124: else {
125: NetletGroupManager.unregister(ssoTokenID);
126: }
127: } else {
128: NetletGroupManager.unregister(ssoTokenID);
129: }
130: }
131: Thread.sleep(activateTime);
132:
133: } catch (InterruptedException ie) {
134: // logger.severe("SessionKeepAlive: Caught interrrupted
135: // exception -> " + ie);
136: logger.log(Level.SEVERE, "PSSRNTLT_CSPNEPROX112", ie);
137: status = false;
138: }
139: }
140: }
141: }
|