From ed81dee58a14c516b4f333623d99e7a7d9e592ea Mon Sep 17 00:00:00 2001 From: Venkata Kishore <61379748+venkata-kishore@users.noreply.github.com> Date: Tue, 14 Jan 2025 10:03:20 +0530 Subject: [PATCH] minor config update so pool name is available. (#5) Updated to use automatic module name Co-authored-by: venkata kishore --- pom.xml | 29 +++++++++++++++++-- .../bonfire/oss/sop/SimpleObjectPool.java | 4 +-- .../oss/sop/SimpleObjectPoolConfig.java | 24 +++++++++++++-- 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index e6d4d7b..ba7ac42 100644 --- a/pom.xml +++ b/pom.xml @@ -7,16 +7,17 @@ today.bonfire.oss bonfire-oss-parent - 1.1.5 + 1.1.8 simple-object-pool - 2.2.0 + 2.3.0 jar 21 UTF-8 + bonfire.oss.sop ${project.groupId}:${project.artifactId} @@ -70,6 +71,30 @@ + + maven-jar-plugin + + + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + ${module.name} + + + + + + org.apache.felix + maven-bundle-plugin + + + bundle-manifest + process-classes + + manifest + + + + diff --git a/src/main/java/today/bonfire/oss/sop/SimpleObjectPool.java b/src/main/java/today/bonfire/oss/sop/SimpleObjectPool.java index a32978e..8ce46ab 100644 --- a/src/main/java/today/bonfire/oss/sop/SimpleObjectPool.java +++ b/src/main/java/today/bonfire/oss/sop/SimpleObjectPool.java @@ -41,7 +41,7 @@ public class SimpleObjectPool implements AutoCloseable { private final Condition retryCreationWait; private final AtomicLong objectCreateCount = new AtomicLong(0); private final AtomicInteger currentPoolSize = new AtomicInteger(0); - private final AtomicLong timesBorrowed = new AtomicLong(0); + private final AtomicLong timesBorrowed = new AtomicLong(0); public SimpleObjectPool(SimpleObjectPoolConfig config, PooledObjectFactory factory) { this.config = config; @@ -52,7 +52,7 @@ public SimpleObjectPool(SimpleObjectPoolConfig config, PooledObjectFactory fa scheduler.scheduleAtFixedRate(this::evictionRun, config.durationBetweenEvictionsRuns(), config.durationBetweenEvictionsRuns(), TimeUnit.MILLISECONDS); scheduler.scheduleAtFixedRate(this::abandonCheckRun, config.durationBetweenAbandonCheckRuns(), config.durationBetweenAbandonCheckRuns(), TimeUnit.MILLISECONDS); - log.info("Object pool created with maxPoolSize: {}, minPoolSize: {}", config.maxPoolSize(), config.minPoolSize()); + log.info("Pool - {} created with maxPoolSize: {}, minPoolSize: {}", config.poolName(), config.maxPoolSize(), config.minPoolSize()); if (config.minPoolSize() > 0) { for (int i = 0; i < config.minPoolSize(); i++) { idleObjects.add(createObject()); diff --git a/src/main/java/today/bonfire/oss/sop/SimpleObjectPoolConfig.java b/src/main/java/today/bonfire/oss/sop/SimpleObjectPoolConfig.java index 98148e6..cae24de 100644 --- a/src/main/java/today/bonfire/oss/sop/SimpleObjectPoolConfig.java +++ b/src/main/java/today/bonfire/oss/sop/SimpleObjectPoolConfig.java @@ -3,6 +3,7 @@ import lombok.Getter; import lombok.experimental.Accessors; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.time.Duration; @@ -18,7 +19,10 @@ @Getter @Accessors(fluent = true) public class SimpleObjectPoolConfig { - private static final Logger log = org.slf4j.LoggerFactory.getLogger(SimpleObjectPoolConfig.class); + private static final Logger log = LoggerFactory.getLogger(SimpleObjectPoolConfig.class); + + + private final String poolName; /** * Returns the maximum number of objects that the pool can hold. @@ -150,6 +154,7 @@ protected SimpleObjectPoolConfig(Builder builder) { this.maxRetries = builder.maxRetries; this.retryCreationDelay = builder.retryCreationDelay.toNanos(); this.waitingForObjectTimeout = builder.waitingForObjectTimeout.toNanos(); + poolName = builder.poolName; } public static Builder builder() { @@ -193,6 +198,7 @@ public enum EvictionPolicy { * It allows for a flexible and readable configuration setup. */ public static class Builder { + private String poolName; private int maxPoolSize = 8; private int minPoolSize = 0; private boolean fairness = false; @@ -210,6 +216,20 @@ public static class Builder { private Duration retryCreationDelay = Duration.ZERO; private Duration waitingForObjectTimeout = Duration.ofSeconds(10); + + /** + * Sets the name of the pool. + *

+ * The name is used for logging and debugging purposes. + * + * @param poolName The name of the pool. + * @return This {@code Builder} instance. + */ + public Builder poolName(String poolName) { + this.poolName = poolName; + return this; + } + /** * Sets the maximum number of objects that the pool can hold. * @@ -348,7 +368,7 @@ public Builder objEvictionTimeout(Duration objEvictionTimeout) { * many cases take some time compared to simple tests. *
* If set to 0 then no factory validation will be done.
- * If set to null or not set then the factory validation will be limited to {@link SimpleObjectPoolConfig#maxPoolSize()} + * If set to null or not set then the factory validation will be limited to {@link SimpleObjectPoolConfig#maxPoolSize} * * @param numValidationsPerEvictionRun The number of objects to test per eviction run. * @return This {@code Builder} instance.