package com.mycompany.simplepool;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.EvictionConfig;
import org.apache.commons.pool2.impl.EvictionPolicy;
public class MyEvictionPolicy<T> implements EvictionPolicy<T> {
@Override
public boolean evict(EvictionConfig config, PooledObject<T> underTest, int idleCount) {
System.out.println("MyEvictPolicy");
if (Integer.parseInt(underTest.getObject().toString()) % 2 == 0) {
System.out.println("Delete because % 2 == 0 ---- " + underTest.getObject());
return true;
}
if ((config.getIdleSoftEvictTime() < underTest.getIdleTimeMillis() &&
config.getMinIdle() < idleCount) ||
config.getIdleEvictTime() < underTest.getIdleTimeMillis()) {
return true;
}
return false;
}
}
Имплементировал EvictionPolicy для String'а. Хочу чтобы удалялись строки содержащие четные числа.
Создаю пул:
BasePooledObjectFactory<String> poolFactory = new MyBasePooledObjectFactory();
GenericObjectPoolConfig configPool = new GenericObjectPoolConfig();
configPool.setTimeBetweenEvictionRunsMillis(10);
configPool.setMaxIdle(2);
GenericObjectPool<String> pool = new GenericObjectPool<>(poolFactory);
pool.setEvictionPolicyClassName(MyEvictionPolicy.class.getName()); // - задаю Eviction Policy
pool.setConfig(configPool);
Однако пул не вызывает мою реализацию MyEvictionPolicy.evict, когда проверяет объекты для удаления. Моя реализация вызывается только при явном вызове метода pool.evict().
Как сделать так, чтобы пул использовал именно мой MyEvictionPolicy.evict при периодических проверках?