Why providing h2 in the image? I know a common trick I do use is to set the
classpath in my entry point to something like
"myjar1.jar:myjar2.jar:.....:/opt/app/extensions/custom/*" - with jib I
do <extraClasspath>/opt/app/extensions/custom/*</extraClasspath>.
This enables to mount the JDBC driver in this custom folder and get it
working OOTB, with helm it is just a matter of mounting either an OCI image
with just the driver in this folder or using an init container to copy it
using an empty dir/ephemeral volume as pivot folder.
The good thing about that is:  no default driver required but open to any
so no related CVE (h2 got several by the past which would be a negative
aspect for prod when using pg for ex).

Romain Manni-Bucau
@rmannibucau <https://x.com/rmannibucau> | .NET Blog
<https://dotnetbirdie.github.io/> | Blog <https://rmannibucau.github.io/> | Old
Blog <http://rmannibucau.wordpress.com> | Github
<https://github.com/rmannibucau> | LinkedIn
<https://www.linkedin.com/in/rmannibucau> | Book
<https://www.packtpub.com/en-us/product/java-ee-8-high-performance-9781788473064>
Javaccino founder (Java/.NET service - contact via linkedin)


Le ven. 19 juin 2026 à 17:18, Dmitri Bourlatchkov <[email protected]> a
écrit :

> Hi All,
>
> Focusing on the technical capabilities of PR [4812], I think it provides a
> valuable enhancement and we should merge it.
>
> I do not see any adverse effects of this PR on existing functionality, but
> it certainly opens new use cases like H2 inside pre-built docker images and
> MySQL (potentially).
>
> [4812] https://github.com/apache/polaris/pull/4812
>
> Cheers,
> Dmitri.
>
> On Fri, Jun 19, 2026 at 4:59 AM Alexandre Dutra <[email protected]> wrote:
>
> > Hi all,
> >
> > Although the conversation has shifted toward multi-datasource support,
> > the primary focus in this thread remains [4812]: the ability to
> > activate a datasource at runtime, even in single-source scenarios.
> >
> > I want to emphasize that this functionality is essential independently
> > of the multi-datasource debate. For example, it is required to provide
> > out-of-the-box support for JDBC + H2 within Polaris images, and also
> > to provide support for more databases (e.g. MySQL).
> >
> > Thanks,
> > Alex
> >
> > [4812]: https://github.com/apache/polaris/pull/4812
> >
> > On Thu, Jun 18, 2026 at 9:28 PM Dmitri Bourlatchkov <[email protected]>
> > wrote:
> > >
> > > Hi Romain,
> > >
> > > Thanks for the info!
> > >
> > > Metrics requests generally read from the MetaStore but write only in
> the
> > > Metrics datasource.
> > >
> > > The latest thinking about Events is to isolate them from the initial
> > > request via the Quarkus Event Bus (async delivery), IIRC.
> > >
> > > The new Idempotency feature [3] might be the first case where we
> (could)
> > do
> > > writes into multiple datasources. However, the way it is designed does
> > not
> > > assume or require coordination of changes / commits between the
> MetaStore
> > > and the Idempotency data store, AFAIK.
> > >
> > > In general, this is a very interesting topic. It has implications for
> our
> > > (MetaStore) Persistence interface contracts too. IIRC, previous [1]
> > > discussions generally settled on the idea that each Persistence API
> call
> > > forms one atomic (and durable) change. Yet, I do not think we have
> > > completely ironed out all wrinkles [2] there. The tricky aspect is that
> > > Persistence may be backed by a non-transactional database. Currently we
> > > have JDBC and MongoDB, which could be said to be transactional, still
> the
> > > NoSQL Persistence in Polaris is built without assuming Tx capabilities,
> > so
> > > it will also work on non-transactional databases.
> > >
> > > This is just for context :)
> > >
> > > [1] https://lists.apache.org/thread/fh6t3mgzdb5ft0dt5q7qxm1pj1x5po75
> > >
> > > [2] https://lists.apache.org/thread/rf5orxs815zs4h64p4rwp03q3pbgxb5r
> > >
> > > [3] https://lists.apache.org/thread/ksf5b5y3jt8dmft5kgblbwms8dhs4fn9
> > >
> > > Cheers,
> > > Dmitri.
> > >
> > > On Thu, Jun 18, 2026 at 3:03 PM Romain Manni-Bucau <
> > [email protected]>
> > > wrote:
> > >
> > > > Hi Dmitri,
> > > >
> > > > Assuming you put metadata and metrics/events (maybe metrics but these
> > ones
> > > > where not under my radar) in different databases to leverage
> different
> > > > tuning and aggregation level but still have exactly once guarantee.
> > > > I assume at some point there are or will be some writes in the same
> > request
> > > > (stat updates, meta refresh/audit etc).
> > > >
> > > > While a single request/background task is guaranteed to be single
> > > > datasource backed there is no real topic if it is what you have in
> > mind.
> > > >
> > > > Romain Manni-Bucau
> > > > @rmannibucau <https://x.com/rmannibucau> | .NET Blog
> > > > <https://dotnetbirdie.github.io/> | Blog <
> > https://rmannibucau.github.io/>
> > > > | Old
> > > > Blog <http://rmannibucau.wordpress.com> | Github
> > > > <https://github.com/rmannibucau> | LinkedIn
> > > > <https://www.linkedin.com/in/rmannibucau> | Book
> > > > <
> > > >
> >
> https://www.packtpub.com/en-us/product/java-ee-8-high-performance-9781788473064
> > > > >
> > > > Javaccino founder (Java/.NET service - contact via linkedin)
> > > >
> > > >
> > > > Le jeu. 18 juin 2026 à 19:58, Dmitri Bourlatchkov <[email protected]>
> a
> > > > écrit :
> > > >
> > > > > Hi Romain,
> > > > >
> > > > > In what cases / API calls do you envision XA to be used in Polaris?
> > > > >
> > > > > I'm asking just for my education, as I do not see how / where it
> > could be
> > > > > relevant ATM.
> > > > >
> > > > > Thanks,
> > > > > Dmitri.
> > > > >
> > > > > On Thu, Jun 18, 2026 at 1:11 PM Romain Manni-Bucau <
> > > > [email protected]>
> > > > > wrote:
> > > > >
> > > > > > Ok, good it was already thought.
> > > > > >
> > > > > > Think worse case an user can set the 3 same or enable XA using
> > agroal
> > > > > > capabilities ([1])
> > > > > >
> > > > > > Thanks
> > > > > >
> > > > > > [1]
> > > > > >
> > > > > >
> > > > >
> > > >
> >
> https://quarkus.io/guides/datasource#quarkus-agroal_quarkus-datasource-jdbc-transactions
> > > > > >
> > > > > > Romain Manni-Bucau
> > > > > > @rmannibucau <https://x.com/rmannibucau> | .NET Blog
> > > > > > <https://dotnetbirdie.github.io/> | Blog <
> > > > https://rmannibucau.github.io/
> > > > > >
> > > > > > | Old
> > > > > > Blog <http://rmannibucau.wordpress.com> | Github
> > > > > > <https://github.com/rmannibucau> | LinkedIn
> > > > > > <https://www.linkedin.com/in/rmannibucau> | Book
> > > > > > <
> > > > > >
> > > > >
> > > >
> >
> https://www.packtpub.com/en-us/product/java-ee-8-high-performance-9781788473064
> > > > > > >
> > > > > > Javaccino founder (Java/.NET service - contact via linkedin)
> > > > > >
> > > > > >
> > > > > > Le jeu. 18 juin 2026 à 18:17, Alexandre Dutra <[email protected]
> >
> > a
> > > > > écrit
> > > > > > :
> > > > > >
> > > > > > > Hi Romain,
> > > > > > >
> > > > > > > You raise good points.
> > > > > > >
> > > > > > > Datasource multitenancy in Quarkus would have helped a lot
> during
> > > > this
> > > > > > > old discussion: [1] where we eventually decided to go with one
> > > > > > > datasource for N realms, out of better choices by then. But
> that
> > ship
> > > > > > > has sailed.
> > > > > > >
> > > > > > > And good question about XA:  the proposal in [3960] does not
> > include
> > > > > > > any transactional coordination between datasources, afaict, and
> > the
> > > > > > > outbox pattern doesn't fit anymore in the design we picked for
> > events
> > > > > > > (and probably for metrics). This pattern was considered
> initially
> > > > > > > iirc, as it would have allowed exactly-once semantics for
> > events; but
> > > > > > > in the end, we went with separate tables updated independently
> > (~=
> > > > > > > at-most-once semantics).
> > > > > > >
> > > > > > > Thanks,
> > > > > > > Alex
> > > > > > >
> > > > > > > [1]:
> > > > https://lists.apache.org/thread/kvt3gd29hyxlhnwxr9b674s555jlvjjs
> > > > > > > [3960]: https://github.com/apache/polaris/pull/3960
> > > > > > >
> > > > > > > On Thu, Jun 18, 2026 at 8:38 AM Romain Manni-Bucau
> > > > > > > <[email protected]> wrote:
> > > > > > > >
> > > > > > > > Hi Alexandre,
> > > > > > > >
> > > > > > > > Can be worth shiming in the quarkus thread about it:
> > > > > > > > https://github.com/quarkusio/quarkus/issues/11861 before
> > merging a
> > > > > new
> > > > > > > way
> > > > > > > > to do it (even if it delays from a few weeks the feature) I
> > think.
> > > > > > > >
> > > > > > > > Technically one thing the 1 database -> N databases (not
> > speaking
> > > > > about
> > > > > > > > tenants where there is no challenge but meta+metrics+events)
> > brings
> > > > > the
> > > > > > > > transactional challenge, do you go XA with this shift or do
> you
> > > > plan
> > > > > > some
> > > > > > > > recovery (kind of outbox pattern with some challenges)?
> > > > > > > >
> > > > > > > > Romain Manni-Bucau
> > > > > > > > @rmannibucau <https://x.com/rmannibucau> | .NET Blog
> > > > > > > > <https://dotnetbirdie.github.io/> | Blog <
> > > > > > https://rmannibucau.github.io/>
> > > > > > > | Old
> > > > > > > > Blog <http://rmannibucau.wordpress.com> | Github
> > > > > > > > <https://github.com/rmannibucau> | LinkedIn
> > > > > > > > <https://www.linkedin.com/in/rmannibucau> | Book
> > > > > > > > <
> > > > > > >
> > > > > >
> > > > >
> > > >
> >
> https://www.packtpub.com/en-us/product/java-ee-8-high-performance-9781788473064
> > > > > > > >
> > > > > > > > Javaccino founder (Java/.NET service - contact via linkedin)
> > > > > > > >
> > > > > > > >
> > > > > > > > Le mer. 17 juin 2026 à 21:37, Alexandre Dutra <
> > [email protected]>
> > > > a
> > > > > > > écrit :
> > > > > > > >
> > > > > > > > > Hi all,
> > > > > > > > >
> > > > > > > > > I'd like to elaborate on the "pluggable persistence"
> concept
> > > > > defined
> > > > > > > > > my previous message, and how it might evolve in the future:
> > > > > > > > >
> > > > > > > > > The proposal from PR [3960] originally suggested three
> > distinct
> > > > > > "store
> > > > > > > > > types": metastore, metrics, and events. Although that PR
> was
> > > > closed
> > > > > > > > > because of inactivity, the concept remains relevant. If we
> > decide
> > > > > to
> > > > > > > > > support multiple datasources for each store type, I
> envision
> > the
> > > > > > > > > following approach:
> > > > > > > > >
> > > > > > > > > Polaris would provide datasource definitions for every
> > > > combination
> > > > > of
> > > > > > > > > store type and JDBC driver (such as "postgresql-metastore"
> or
> > > > > > > > > "h2-metrics"). The current "enabler property" would be
> > replaced
> > > > by
> > > > > a
> > > > > > > > > map of properties keyed by the store type. For instance:
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> >
> polaris.persistence.relational.jdbc.metastore.datasource=postgresql-metastore
> > > > > > > > >
> > > > > > >
> > > > >
> > polaris.persistence.relational.jdbc.metrics.datasource=postgresql-metrics
> > > > > > > > >
> > > > > >
> > polaris.persistence.relational.jdbc.events.datasource=postgresql-events
> > > > > > > > >
> > > > > > > > > In this configuration, three separate PostgreSQL
> datasources
> > > > would
> > > > > be
> > > > > > > > > enabled, each managing its own connection pool and
> settings.
> > > > > > > > >
> > > > > > > > > Alternatively, if a user wants to use a single datasource
> > for all
> > > > > > > > > data, they could simply map every store type to the same
> name
> > > > > (e.g.,
> > > > > > > > > "postgresql-metastore"). This would result in only one
> active
> > > > > > > > > datasource and a single connection pool for the metastore,
> > > > metrics,
> > > > > > > > > and events.
> > > > > > > > >
> > > > > > > > > It is still open for debate whether the default setup
> should
> > > > > > > > > prioritize a single shared datasource or separate ones for
> > each
> > > > > store
> > > > > > > > > type.
> > > > > > > > >
> > > > > > > > > While this is primarily speculative at this point, since
> the
> > > > > feature
> > > > > > > > > hasn't been finalized, it demonstrates that we have a
> viable
> > path
> > > > > > > > > forward should we choose to implement this architecture.
> > > > > > > > >
> > > > > > > > > Thanks,
> > > > > > > > > Alex
> > > > > > > > >
> > > > > > > > > [3960]: https://github.com/apache/polaris/pull/3960
> > > > > > > > >
> > > > > > > > > On Wed, Jun 17, 2026 at 9:26 PM Alexandre Dutra <
> > > > [email protected]
> > > > > >
> > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > Hi all,
> > > > > > > > > >
> > > > > > > > > > I have recently submitted a PR [4812] that introduces
> > support
> > > > for
> > > > > > > > > > multiple datasources with possibility of runtime
> > activation.
> > > > > > > > > >
> > > > > > > > > > I would like to open a discussion regarding the intent
> > behind
> > > > > this
> > > > > > > > > > proposal and the advantages it offers.
> > > > > > > > > >
> > > > > > > > > > While Quarkus is a powerful platform, it presents certain
> > > > > > challenges,
> > > > > > > > > > particularly with JDBC datasources. Currently, the
> > datasource
> > > > > type
> > > > > > > > > > must be defined at build time using the "db-kind"
> property.
> > > > This
> > > > > > > makes
> > > > > > > > > > managing multiple datasources difficult, especially for
> > > > Polaris,
> > > > > > > where
> > > > > > > > > > users should ideally be able to select the appropriate
> > > > datasource
> > > > > > > (and
> > > > > > > > > > driver) based on their specific requirements.
> > > > > > > > > >
> > > > > > > > > > The core of this proposal relies on a key fact: while
> > "db-kind"
> > > > > is
> > > > > > > > > > fixed at build time, the "active" property can be toggled
> > at
> > > > > > runtime.
> > > > > > > > > > Combined with named datasources, this property becomes
> the
> > > > > missing
> > > > > > > > > > lever to achieve runtime datasource activation.
> > > > > > > > > >
> > > > > > > > > > Under this change, Polaris must include predefined named
> > > > > > datasources
> > > > > > > > > > for every supported driver. Users simply choose which
> ones
> > to
> > > > > > > activate
> > > > > > > > > > at runtime using an enabler property:
> > > > > > > > > > "polaris.persistence.relational.jdbc.datasource", which
> > > > > identifies
> > > > > > > the
> > > > > > > > > > named datasource for activation. (Worth noting: an
> inactive
> > > > > > > datasource
> > > > > > > > > > does not consume any resources at runtime.)
> > > > > > > > > >
> > > > > > > > > > As a result, the server will now include the H2 driver by
> > > > > default,
> > > > > > as
> > > > > > > > > > it is a prerequisite for selecting an H2 datasource at
> > runtime.
> > > > > We
> > > > > > > > > > will need to follow a similar approach for any other JDBC
> > > > drivers
> > > > > > we
> > > > > > > > > > intend to support in the future.
> > > > > > > > > >
> > > > > > > > > > This architectural shift is necessary for several
> reasons:
> > > > > > > > > >
> > > > > > > > > > 1. Flexible defaults: It allows us to use JDBC + H2 as
> the
> > > > > default
> > > > > > > for
> > > > > > > > > > server images (see these related discussions for details:
> > [1]
> > > > > [2])
> > > > > > > > > > while enabling users to switch to PostgreSQL or other
> > drivers
> > > > > *via
> > > > > > > > > > configuration alone*, thus eliminating the need to
> rebuild
> > > > > Polaris
> > > > > > > > > > entirely.
> > > > > > > > > >
> > > > > > > > > > 2. Pluggable persistence: It enables the persistence
> layer
> > to
> > > > > > connect
> > > > > > > > > > to multiple datasources simultaneously. For instance, one
> > could
> > > > > > use a
> > > > > > > > > > specific datasource for main persistence and another for
> > > > metrics
> > > > > –
> > > > > > a
> > > > > > > > > > concept previously discussed in [3960] that lacked an
> easy
> > > > > > > > > > implementation path in my opinion.
> > > > > > > > > >
> > > > > > > > > > I look forward to hearing your thoughts on this proposal.
> > > > > > > > > >
> > > > > > > > > > Thanks,
> > > > > > > > > > Alex
> > > > > > > > > >
> > > > > > > > > > [4812]: https://github.com/apache/polaris/pull/4812
> > > > > > > > > > [3960]: https://github.com/apache/polaris/pull/3960
> > > > > > > > > >
> > > > > > > > > > [1]:
> > > > > > >
> https://lists.apache.org/thread/yw8l026g2smdk7gdg7k61tdcvdwcncqw
> > > > > > > > > > [2]:
> > > > > > >
> https://lists.apache.org/thread/nzoljc1ohnsq4f5o28dh4opqkqw3p09h
> > > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> >
>

Reply via email to