/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/providers/trunk/jldap/src/java/edu/amc/sakai/user/MaxLifetimeLdapConnectionLivenessValidator.java $ * $Id: MaxLifetimeLdapConnectionLivenessValidator.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community 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.opensource.org/licenses/ECL-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 edu.amc.sakai.user; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.novell.ldap.LDAPConnection; /** * * @author dmccallum * */ public class MaxLifetimeLdapConnectionLivenessValidator implements LdapConnectionLivenessValidator { /** Class-specific logger */ private static Log log = LogFactory.getLog(MaxLifetimeLdapConnectionLivenessValidator.class); public static final long DEFAULT_MAX_TTL = -1L; /** * Max connection life in millis */ private long maxTtl; /** * Tests if the allowable lifetime of the given connection has already * elapsed. Edge cases: * * <ol> * <li>Non-{@link PooledLDAPConnection} - returns <code>true</code></li> * <li><code>maxTtl</code> <= 0 - returns <code>true</code></li> * <li>Connection birthdate in the future - returns <code>true</code></li> * </ol> * * */ public boolean isConnectionAlive(LDAPConnection connectionToTest) { if ( !(connectionToTest instanceof PooledLDAPConnection) ) { if (log.isDebugEnabled()) { log.debug("isConnectionAlive(): connection not of expected type [" + (connectionToTest == null ? "null" : connectionToTest.getClass().getName()) + "], returning true"); } return true; } if ( maxTtl <= 0 ) { if ( log.isDebugEnabled() ) { log.debug("isConnectionAlive(): maxTtl set to infinite [" + maxTtl + "], returning true"); } return true; } long now = System.currentTimeMillis(); long then = ((PooledLDAPConnection)connectionToTest).getBirthdate(); long elapsed = now - then; boolean isAlive = elapsed <= maxTtl; if ( log.isDebugEnabled() ) { log.debug("isConnectionAlive(): [now = " + now + "][then = " + then + "][elapsed = " + elapsed + "][max TTL = " + maxTtl + "][isAlive = " + isAlive + "]"); } return isAlive; } /** * Get the max connection lifetime, in millis. Values * less than or equals to zero are considered infinite, i.e. * no TTL. * * @return */ public long getMaxTtl() { return maxTtl; } /** * Assign the max connection lifetime, in millis. Values * less than or equal to zero are considered infinite, i.e. * no TTL. * * @param maxTtl */ public void setMaxTtl(long maxTtl) { this.maxTtl = maxTtl; } }