Archived
0

refactoring: add mc.utils.pool

This commit is contained in:
2021-05-10 02:06:49 +03:00
parent 50fc39e924
commit 3165eca0ca
6 changed files with 57 additions and 1 deletions

5
utils/build.gradle Normal file
View File

@@ -0,0 +1,5 @@
apply from: rootDir.toPath().resolve('logic.gradle').toFile()
dependencies {
implementation libs.objpool
}

2
utils/gradle.properties Normal file
View File

@@ -0,0 +1,2 @@
# suppress inspection "UnusedProperty" for whole file
module.name=utils

View File

@@ -0,0 +1,6 @@
package mc.utils.pool;
public interface Passivable {
void passivate();
}

View File

@@ -0,0 +1,18 @@
package mc.utils.pool;
import org.apache.commons.pool2.BasePooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultPooledObject;
public abstract class PassivablePooledObjectFactory<T extends Passivable> extends BasePooledObjectFactory<T> {
@Override
public PooledObject<T> wrap(T obj) {
return new DefaultPooledObject<>(obj);
}
@Override
public void passivateObject(PooledObject<T> pooledObject) {
pooledObject.getObject().passivate();
}
}

View File

@@ -0,0 +1,30 @@
package mc.utils.pool;
import lombok.RequiredArgsConstructor;
import org.apache.commons.pool2.ObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPool;
import java.util.HashMap;
import java.util.Map;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class WideClassObjectPool {
private final Map<Class, ObjectPool> mapPool = new HashMap<>();
@SuppressWarnings("unused")
public <R extends Passivable> ObjectPool<R> getPool(Class<R> clazz) {
return mapPool.computeIfAbsent(clazz, tClass -> new GenericObjectPool<R>(new WideClassFactory(clazz)));
}
@RequiredArgsConstructor
private static class WideClassFactory<R extends Passivable> extends PassivablePooledObjectFactory<R> {
private final Class<R> clazz;
@Override
public R create() throws Exception {
return clazz.getDeclaredConstructor().newInstance();
}
}
}