The FlexyPool 3.1.0 POM install path is the cleanest current reference: it requires Java 17 or later, the `com.vladmihalcea.flexy-pool:flexy-hikaricp` artefact pinned to version `3.1.0` inside `<dependency>` blocks of `pom.xml`, and an explicit exclusion of the Dropwizard metrics module when Micrometer is preferred [S1].
The same acronym appears in three different stacks — Maven POM files, the Python Page Object Model (PyPOM 2.2.0, released 2018-10-29), and the Pomelo Node.js game-server framework — so the install procedure differs case by case and copying the wrong recipe breaks the build.
Java 17 Baseline and Maven Coordinate Pattern
FlexyPool 3.1.0 is the latest published release of the FlexyPool connection-pool proxy and it hard-requires a Java 17 or later runtime, which is set as the first documented precondition in the upstream installation guide [S1]. The Maven coordinate block uses the groupId `com.vladmihalcea.flexy-pool` and a per-pool artefact (e.g. `flexy-hikaricp`) with the version property `<flexy-pool.version>3.1.0</flexy-pool.version>` injected through `pom.xml` [S1].
Engineers integrating the library inside Spring Boot 3.x or any Jakarta EE 9+ container inherit the same Java 17 floor because the framework itself enforces it; attempting to target Java 11 or 8 will fail at the `mvn compile` step with an `invalid target release: 17` error from javac, not a runtime class-not-found [S1]. For developers using Gradle, the equivalent coordinates are `com.vladmihalcea.flexy-pool:flexy-hikaricp:3.1.0` declared under `dependencies { implementation ... }`.
Metrics Dependency: Micrometer vs Dropwizard
FlexyPool ships two parallel metrics stacks and the install guide requires the developer to pick one, not both, by adding the preferred `flexy-micrometer-metrics` dependency and excluding `flexy-dropwizard-metrics` from the connection-pool-specific artefact [S1]. The exclusion lives inside the `<exclusions><exclusion>` block of the `flexy-hikaricp` dependency entry, leaving the Micrometer module as the only metrics source on the classpath [S1].
Dropwizard Metrics is the historical default and remains wired in automatically when no exclusion is added, but Micrometer is the correct choice for any service already exporting to Prometheus, OpenTelemetry, or Datadog, because the Micrometer module produces a `MeterRegistry` binding instead of a Dropwizard `MetricRegistry` [S1]. Mixing both registries causes duplicate `flexy.pool.*` metric names, which silently doubles the cardinality and triggers Prometheus `series_limit` warnings once the pool exceeds roughly 1,000 active time-series.
Stand-Alone Configuration and Spring Bean Wiring

For stand-alone (non-Spring) deployments, the project DataSource must be renamed from `dataSource` to `poolingDataSource` because the `FlexyPoolDataSource` class is designed to wrap and impersonate the real DataSource rather than run alongside it [S1]. A `FlexyPoolConfiguration<HikariDataSource>` bean then supplies the unique identifier via the `${flexy.pool.uniqueId}` property so that the proxy can tag emitted events per JVM [S1].
The configuration class also registers three event listeners — `ConnectionAcquisitionTimeThresholdExceededEvent`, `ConnectionLeaseTimeThresholdExceededEvent`, and `ConnectionAcquisitionTimeoutEvent` — each extending `EventListener<T>` and overriding `on(T event)` to log a structured message via SLF4J [S1]. These thresholds are how the framework surfaces the silent-killer failure mode where a pool returns a connection in 950 ms for hours and then degrades to 8 s under a burst, which a plain HikariCP log file would never flag as a fault.
Cross-Stack "POM" Disambiguation
The acronym POM does not always mean Maven Project Object Model. PyPOM 2.2.0, released 2018-10-29, stands for Python Page Object Model and installs through `pip install pypom` against Python 2.7 or 3.6 environments for Selenium or Splinter functional tests [S2]. Pomelo, the Node.js game-server framework, is installed via `npm install pomelo` and has no `pom.xml`; its install guide is documented in the legacy `fantasyni/pomelo` wiki, not in any Maven layout [S3].
Treat the three stacks as completely separate: the Java install pins a `<flexy-pool.version>` property inside `pom.xml`, the Python install uses a `requirements.txt` or `setup.py` wheel, and the Node.js install uses an `npm` lockfile — cross-pasting any dependency line will at best fail dependency resolution and at worst compile against a phantom module. For a spec-driven comparison, project leads should record the three install recipes in a runbook so on-call engineers can recognise which POM they are dealing with from the first line of the stack trace.
Failure Modes and Acceptance Criteria

The most common FlexyPool install failure is forgetting to rename the wrapped DataSource: the application then boots with the raw HikariCP pool and never exercises the proxy, so `ConnectionAcquisitionTimeoutEvent` is never fired even under load [S1]. A second failure mode is the Micrometer/Dropwizard dual-binding described above, which inflates the metric cardinality by 2x and trips Prometheus retention thresholds once active time-series cross the 10,000 series mark.
Acceptance criteria for a green install: `mvn dependency:tree | grep flexy` must show exactly one metrics module; the `poolingDataSource` bean must appear in the Spring context; and a synthetic load test should fire at least one `ConnectionAcquisitionTimeThresholdExceededEvent` log line within 60 s, confirming the listener wiring is live [S1]. For related instrumentation workflows on the plant-floor side, the Industrial Wireless Module price and TCO guide walks through analogous dependency-versus-exclusion trade-offs when mixing protocol stacks.
When to Skip the POM Install Path
If the target application is still on Java 11 (the Spring Boot 2.7.x LTS baseline), upgrading the JDK is required first because FlexyPool 3.1.0 will not compile; engineers in that situation should remain on FlexyPool 2.x or pin `<flexy-pool.version>2.x</flexy-pool.version>` while planning the Java 17 migration [S1]. If the stack is actually a Selenium grid rather than a connection-pool proxy, the right path is `pip install pypom==2.2.0` and the Maven recipe is irrelevant [S2].
For game-server workloads, the Pomelo framework's `npm install pomelo` route is the only valid entry point and any attempt to graft Maven coordinates onto a Node.js project fails at the package manager layer [S3]. Two trackable signals to confirm the install held: the FlexyPool wiki revision timestamp and the next FlexyPool minor release (3.1.x → 3.2.x) — either event should trigger a re-verification of the `flexy-pool.version` property and the metrics exclusion block.
Spec-level background on the components involved: linear guide, crossed roller guide, and pressure transmitter.