View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.pool2.impl;
18  
19  import org.apache.commons.pool2.PooledObject;
20  
21  /**
22   * Provides the default implementation of {@link EvictionPolicy} used by the pools.
23   * <p>
24   * Objects will be evicted if the following conditions are met:
25   * </p>
26   * <ul>
27   * <li>The object has been idle longer than
28   *     {@link GenericObjectPool#getMinEvictableIdleDuration()} /
29   *     {@link GenericKeyedObjectPool#getMinEvictableIdleDuration()}</li>
30   * <li>There are more than {@link GenericObjectPool#getMinIdle()} /
31   *     {@link GenericKeyedObjectPoolConfig#getMinIdlePerKey()} idle objects in
32   *     the pool and the object has been idle for longer than
33   *     {@link GenericObjectPool#getSoftMinEvictableIdleDuration()} /
34   *     {@link GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()}
35   * </ul>
36   * <p>
37   * This class is immutable and thread-safe.
38   * </p>
39   *
40   * @param <T> the type of objects in the pool.
41   *
42   * @since 2.0
43   */
44  public class DefaultEvictionPolicy<T> implements EvictionPolicy<T> {
45  
46      @Override
47      public boolean evict(final EvictionConfig config, final PooledObject<T> underTest, final int idleCount) {
48          // @formatter:off
49          return config.getIdleSoftEvictDuration().compareTo(underTest.getIdleDuration()) < 0 &&
50                  config.getMinIdle() < idleCount ||
51                  config.getIdleEvictDuration().compareTo(underTest.getIdleDuration()) < 0;
52          // @formatter:on
53      }
54  }