Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Narayana JTA XA transactions doesn't work after mariadb-java-client bump to 3.5.0 as opening datasource connection results in SQLNonTransientConnectionException #44160

Open
michalvavrik opened this issue Oct 29, 2024 · 14 comments
Labels
area/agroal area/jdbc Issues related to the JDBC extensions area/narayana Transactions / Narayana kind/bug Something isn't working

Comments

@michalvavrik
Copy link
Member

Describe the bug

When #44111 got merged, my app with Narayana JTA that uses XA transactions stopped to work because connection cannot be opened for DS that has enabled XA.

Expected behavior

MariaDB works with Narayana JTA XA transactions.

Actual behavior

Connection is closed, communication with DB doesn't work when XA is enabled:

2024-10-29 13:02:37,966 WARN  [io.agr.pool] (executor-thread-1) Datasource '<default>': (conn=13) Connection is closed
2024-10-29 13:02:37,970 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (executor-thread-1) HTTP Request to /hello failed, error id: 2249c270-ed13-45b4-954d-f4fa6e6f0f84-1: java.sql.SQLException: Exception in association of connection to existing transaction
	at io.agroal.narayana.NarayanaTransactionIntegration.associate(NarayanaTransactionIntegration.java:130)
	at io.agroal.pool.ConnectionPool.getConnection(ConnectionPool.java:292)
	at io.agroal.pool.DataSource.getConnection(DataSource.java:86)
	at io.agroal.api.AgroalDataSource_sqqLi56D50iCdXmOjyjPSAxbLu0_Synthetic_ClientProxy.getConnection(Unknown Source)
	at org.acme.GreetingResource.openConnection(GreetingResource.java:31)
	at org.acme.GreetingResource.hello(GreetingResource.java:26)
	at org.acme.GreetingResource_Subclass.hello$$superforward(Unknown Source)
	at org.acme.GreetingResource_Subclass$$function$$1.apply(Unknown Source)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:136)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:107)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:38)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
	at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
	at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
	at org.acme.GreetingResource_Subclass.hello(Unknown Source)
	at org.acme.GreetingResource$quarkusrestinvoker$hello_e747664148511e1e5212d3e0f4b40d45c56ab8a1.invoke(Unknown Source)
	at org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29)
	at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:141)
	at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:627)
	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2675)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2654)
	at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1627)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1594)
	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.sql.SQLException: Unable to enlist connection to existing transaction
	at io.agroal.narayana.NarayanaTransactionIntegration.associate(NarayanaTransactionIntegration.java:121)
	... 32 more

How to Reproduce?

Steps to reproduce the behavior:

  • git clone [email protected]:michalvavrik/mariadb-narayna-jta-xa-repro.git
  • cd mariadb-narayna-jta-xa-repro

PASS: mvn clean test
FAIL: mvn clean test -Dquarkus.platform.version=999-SNAPSHOT -Dquarkus.platform.group-id=io.quarkus

Output of uname -a or ver

No response

Output of java -version

Temurin 21

Quarkus version or git rev

999-SNAPSHOT

Build tool (ie. output of mvnw --version or gradlew --version)

No response

Additional information

No response

@michalvavrik michalvavrik added area/agroal area/jdbc Issues related to the JDBC extensions area/narayana Transactions / Narayana kind/bug Something isn't working labels Oct 29, 2024
@michalvavrik
Copy link
Member Author

cc @gsmet

@michalvavrik
Copy link
Member Author

also cc @mmusgrov

@michalvavrik
Copy link
Member Author

also cc @yrodiere

@yrodiere
Copy link
Member

FAIL: mvn clean test -Dquarkus.platform.version=999-SNAPSHOT -Dquarkus.platform.group-id=io.quarkus

Note you need to enable https://s01.oss.sonatype.org/content/repositories/snapshots as a snapshot repository in your Maven settings for Maven to find the dependencies.

That said, I can reproduce as well. Full log:

2024-10-30 13:58:50,205 INFO  [org.tes.DockerClientFactory] (build-43) Testcontainers version: 1.20.3
2024-10-30 13:58:50,549 INFO  [org.tes.doc.DockerClientProviderStrategy] (build-43) Found Docker environment with Environment variables, system properties and defaults. Resolved dockerHost=unix:///run/user/110378/podman/podman.sock
2024-10-30 13:58:50,550 INFO  [org.tes.DockerClientFactory] (build-43) Docker host IP address is localhost
2024-10-30 13:58:50,630 INFO  [org.tes.DockerClientFactory] (build-43) Connected to docker: 
  Server Version: 5.2.3
  API Version: 1.41
  Operating System: fedora
  Total Memory: 63997 MB
2024-10-30 13:58:50,638 INFO  [org.tes.ima.PullPolicy] (build-43) Image pull policy will be performed by: DefaultPullPolicy()
2024-10-30 13:58:50,639 INFO  [org.tes.uti.ImageNameSubstitutor] (build-43) Image name substitution will be performed by: DefaultImageNameSubstitutor (composite of 'ConfigurationFileImageNameSubstitutor' and 'PrefixingImageNameSubstitutor')
2024-10-30 13:58:50,642 INFO  [org.tes.DockerClientFactory] (build-43) Checking the system...
2024-10-30 13:58:50,643 INFO  [org.tes.DockerClientFactory] (build-43) ✔︎ Docker server version should be at least 1.6.0
2024-10-30 13:58:50,831 INFO  [tc.doc.io/.11] (build-43) Creating container for image: docker.io/mariadb:10.11
2024-10-30 13:58:51,284 INFO  [tc.doc.io/.11] (build-43) Container docker.io/mariadb:10.11 is starting: 1bbbf3fdc0c35416fc40601a23c248102a870a72a1c56e48dc725e5fcfdf4bfd
2024-10-30 13:58:51,517 INFO  [tc.doc.io/.11] (build-43) Waiting for database connection to become available at jdbc:mariadb://localhost:39503/object-store-ds using query 'SELECT 1'
2024-10-30 13:59:00,829 INFO  [tc.doc.io/.11] (build-43) Container docker.io/mariadb:10.11 started in PT9.997531403S
2024-10-30 13:59:00,829 INFO  [tc.doc.io/.11] (build-43) Container is started (JDBC URL: jdbc:mariadb://localhost:39503/object-store-ds)
2024-10-30 13:59:00,829 INFO  [io.qua.dev.mar.dep.MariaDBDevServicesProcessor] (build-43) Dev Services for MariaDB started.
2024-10-30 13:59:00,830 INFO  [io.qua.dat.dep.dev.DevServicesDatasourceProcessor] (build-43) Dev Services for datasource object-store-ds (mariadb) started - container ID is 1bbbf3fdc0c3
2024-10-30 13:59:00,830 INFO  [tc.doc.io/.11] (build-43) Creating container for image: docker.io/mariadb:10.11
2024-10-30 13:59:01,024 INFO  [tc.doc.io/.11] (build-43) Container docker.io/mariadb:10.11 is starting: cc7427f389f254f223d010e5f4a2113c28ba73a9dae601e15edf6aa35b7cdb89
2024-10-30 13:59:01,205 INFO  [tc.doc.io/.11] (build-43) Waiting for database connection to become available at jdbc:mariadb://localhost:36451/quarkus using query 'SELECT 1'
2024-10-30 13:59:10,473 INFO  [tc.doc.io/.11] (build-43) Container docker.io/mariadb:10.11 started in PT9.642913594S
2024-10-30 13:59:10,474 INFO  [tc.doc.io/.11] (build-43) Container is started (JDBC URL: jdbc:mariadb://localhost:36451/quarkus)
2024-10-30 13:59:10,474 INFO  [io.qua.dev.mar.dep.MariaDBDevServicesProcessor] (build-43) Dev Services for MariaDB started.
2024-10-30 13:59:10,474 INFO  [io.qua.dat.dep.dev.DevServicesDatasourceProcessor] (build-43) Dev Services for default datasource (mariadb) started - container ID is cc7427f389f2
2024-10-30 13:59:10,476 INFO  [io.qua.hib.orm.dep.dev.HibernateOrmDevServicesProcessor] (build-67) Setting quarkus.hibernate-orm.database.generation=drop-and-create to initialize Dev Services managed database
2024-10-30 13:59:11,139 WARN  [io.agr.pool] (JPA Startup Thread) Datasource '<default>': (conn=4) Connection is closed
2024-10-30 13:59:11,349 WARN  [org.hib.too.sch.int.ExceptionHandlerLoggedImpl] (JPA Startup Thread) GenerationTarget encountered exception accepting command : Error executing DDL "drop table if exists MyEntity" via JDBC [(conn=5) Connection is closed]: org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "drop table if exists MyEntity" via JDBC [(conn=5) Connection is closed]
	at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:94)
	at org.hibernate.tool.schema.internal.Helper.applySqlString(Helper.java:233)
	at org.hibernate.tool.schema.internal.Helper.applySqlStrings(Helper.java:217)
	at org.hibernate.tool.schema.internal.SchemaDropperImpl.dropTables(SchemaDropperImpl.java:384)
	at org.hibernate.tool.schema.internal.SchemaDropperImpl.dropConstraintsTablesSequences(SchemaDropperImpl.java:256)
	at org.hibernate.tool.schema.internal.SchemaDropperImpl.dropFromMetadata(SchemaDropperImpl.java:218)
	at org.hibernate.tool.schema.internal.SchemaDropperImpl.performDrop(SchemaDropperImpl.java:186)
	at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:156)
	at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:116)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:238)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:144)
	at java.base/java.util.HashMap.forEach(HashMap.java:1429)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:141)
	at io.quarkus.hibernate.orm.runtime.observers.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:21)
	at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:324)
	at io.quarkus.hibernate.orm.runtime.boot.FastBootEntityManagerFactoryBuilder.build(FastBootEntityManagerFactoryBuilder.java:87)
	at io.quarkus.hibernate.orm.runtime.FastBootHibernatePersistenceProvider.createEntityManagerFactory(FastBootHibernatePersistenceProvider.java:72)
	at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80)
	at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
	at io.quarkus.hibernate.orm.runtime.JPAConfig$LazyPersistenceUnit.get(JPAConfig.java:154)
	at io.quarkus.hibernate.orm.runtime.JPAConfig$1.run(JPAConfig.java:61)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.sql.SQLNonTransientConnectionException: (conn=5) Connection is closed
	at org.mariadb.jdbc.export.ExceptionFactory.createException(ExceptionFactory.java:300)
	at org.mariadb.jdbc.export.ExceptionFactory.create(ExceptionFactory.java:378)
	at org.mariadb.jdbc.client.impl.StandardClient.checkNotClosed(StandardClient.java:1286)
	at org.mariadb.jdbc.client.impl.StandardClient.sendQuery(StandardClient.java:854)
	at org.mariadb.jdbc.client.impl.StandardClient.execute(StandardClient.java:1026)
	at org.mariadb.jdbc.Statement.executeInternal(Statement.java:1034)
	at org.mariadb.jdbc.Statement.execute(Statement.java:1163)
	at org.mariadb.jdbc.Statement.execute(Statement.java:502)
	at io.agroal.pool.wrapper.StatementWrapper.execute(StatementWrapper.java:220)
	at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:80)
	... 22 more

2024-10-30 13:59:11,350 WARN  [org.hib.too.sch.int.ExceptionHandlerLoggedImpl] (JPA Startup Thread) GenerationTarget encountered exception accepting command : Error executing DDL "drop sequence MyEntity_SEQ" via JDBC [(conn=5) Connection is closed]: org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "drop sequence MyEntity_SEQ" via JDBC [(conn=5) Connection is closed]
	at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:94)
	at org.hibernate.tool.schema.internal.Helper.applySqlString(Helper.java:233)
	at org.hibernate.tool.schema.internal.Helper.applySqlStrings(Helper.java:217)
	at org.hibernate.tool.schema.internal.SchemaDropperImpl.dropSequences(SchemaDropperImpl.java:343)
	at org.hibernate.tool.schema.internal.SchemaDropperImpl.dropConstraintsTablesSequences(SchemaDropperImpl.java:269)
	at org.hibernate.tool.schema.internal.SchemaDropperImpl.dropFromMetadata(SchemaDropperImpl.java:218)
	at org.hibernate.tool.schema.internal.SchemaDropperImpl.performDrop(SchemaDropperImpl.java:186)
	at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:156)
	at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:116)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:238)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:144)
	at java.base/java.util.HashMap.forEach(HashMap.java:1429)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:141)
	at io.quarkus.hibernate.orm.runtime.observers.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:21)
	at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:324)
	at io.quarkus.hibernate.orm.runtime.boot.FastBootEntityManagerFactoryBuilder.build(FastBootEntityManagerFactoryBuilder.java:87)
	at io.quarkus.hibernate.orm.runtime.FastBootHibernatePersistenceProvider.createEntityManagerFactory(FastBootHibernatePersistenceProvider.java:72)
	at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80)
	at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
	at io.quarkus.hibernate.orm.runtime.JPAConfig$LazyPersistenceUnit.get(JPAConfig.java:154)
	at io.quarkus.hibernate.orm.runtime.JPAConfig$1.run(JPAConfig.java:61)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.sql.SQLNonTransientConnectionException: (conn=5) Connection is closed
	at org.mariadb.jdbc.export.ExceptionFactory.createException(ExceptionFactory.java:300)
	at org.mariadb.jdbc.export.ExceptionFactory.create(ExceptionFactory.java:378)
	at org.mariadb.jdbc.client.impl.StandardClient.checkNotClosed(StandardClient.java:1286)
	at org.mariadb.jdbc.client.impl.StandardClient.sendQuery(StandardClient.java:854)
	at org.mariadb.jdbc.client.impl.StandardClient.execute(StandardClient.java:1026)
	at org.mariadb.jdbc.Statement.executeInternal(Statement.java:1034)
	at org.mariadb.jdbc.Statement.execute(Statement.java:1163)
	at org.mariadb.jdbc.Statement.execute(Statement.java:502)
	at io.agroal.pool.wrapper.StatementWrapper.execute(StatementWrapper.java:220)
	at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:80)
	... 22 more

2024-10-30 13:59:11,351 WARN  [io.agr.pool] (JPA Startup Thread) Datasource '<default>': (conn=5) Connection is closed
2024-10-30 13:59:11,354 WARN  [org.hib.too.sch.int.ExceptionHandlerLoggedImpl] (JPA Startup Thread) GenerationTarget encountered exception accepting command : Error executing DDL "create sequence MyEntity_SEQ start with 1 increment by 50 nocache" via JDBC [(conn=6) Connection is closed]: org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create sequence MyEntity_SEQ start with 1 increment by 50 nocache" via JDBC [(conn=6) Connection is closed]
	at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:94)
	at org.hibernate.tool.schema.internal.Helper.applySqlString(Helper.java:233)
	at org.hibernate.tool.schema.internal.Helper.applySqlStrings(Helper.java:217)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createSequences(SchemaCreatorImpl.java:467)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createSequencesTablesConstraints(SchemaCreatorImpl.java:331)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:239)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:172)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:142)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:118)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:250)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:144)
	at java.base/java.util.HashMap.forEach(HashMap.java:1429)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:141)
	at io.quarkus.hibernate.orm.runtime.observers.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:21)
	at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:324)
	at io.quarkus.hibernate.orm.runtime.boot.FastBootEntityManagerFactoryBuilder.build(FastBootEntityManagerFactoryBuilder.java:87)
	at io.quarkus.hibernate.orm.runtime.FastBootHibernatePersistenceProvider.createEntityManagerFactory(FastBootHibernatePersistenceProvider.java:72)
	at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80)
	at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
	at io.quarkus.hibernate.orm.runtime.JPAConfig$LazyPersistenceUnit.get(JPAConfig.java:154)
	at io.quarkus.hibernate.orm.runtime.JPAConfig$1.run(JPAConfig.java:61)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.sql.SQLNonTransientConnectionException: (conn=6) Connection is closed
	at org.mariadb.jdbc.export.ExceptionFactory.createException(ExceptionFactory.java:300)
	at org.mariadb.jdbc.export.ExceptionFactory.create(ExceptionFactory.java:378)
	at org.mariadb.jdbc.client.impl.StandardClient.checkNotClosed(StandardClient.java:1286)
	at org.mariadb.jdbc.client.impl.StandardClient.sendQuery(StandardClient.java:854)
	at org.mariadb.jdbc.client.impl.StandardClient.execute(StandardClient.java:1026)
	at org.mariadb.jdbc.Statement.executeInternal(Statement.java:1034)
	at org.mariadb.jdbc.Statement.execute(Statement.java:1163)
	at org.mariadb.jdbc.Statement.execute(Statement.java:502)
	at io.agroal.pool.wrapper.StatementWrapper.execute(StatementWrapper.java:220)
	at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:80)
	... 22 more

2024-10-30 13:59:11,356 WARN  [org.hib.too.sch.int.ExceptionHandlerLoggedImpl] (JPA Startup Thread) GenerationTarget encountered exception accepting command : Error executing DDL "create table MyEntity (id bigint not null, field varchar(255), primary key (id)) engine=InnoDB" via JDBC [(conn=6) Connection is closed]: org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table MyEntity (id bigint not null, field varchar(255), primary key (id)) engine=InnoDB" via JDBC [(conn=6) Connection is closed]
	at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:94)
	at org.hibernate.tool.schema.internal.Helper.applySqlString(Helper.java:233)
	at org.hibernate.tool.schema.internal.Helper.applySqlStrings(Helper.java:217)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createTables(SchemaCreatorImpl.java:428)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createSequencesTablesConstraints(SchemaCreatorImpl.java:344)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:239)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:172)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:142)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:118)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:250)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:144)
	at java.base/java.util.HashMap.forEach(HashMap.java:1429)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:141)
	at io.quarkus.hibernate.orm.runtime.observers.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:21)
	at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:324)
	at io.quarkus.hibernate.orm.runtime.boot.FastBootEntityManagerFactoryBuilder.build(FastBootEntityManagerFactoryBuilder.java:87)
	at io.quarkus.hibernate.orm.runtime.FastBootHibernatePersistenceProvider.createEntityManagerFactory(FastBootHibernatePersistenceProvider.java:72)
	at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80)
	at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
	at io.quarkus.hibernate.orm.runtime.JPAConfig$LazyPersistenceUnit.get(JPAConfig.java:154)
	at io.quarkus.hibernate.orm.runtime.JPAConfig$1.run(JPAConfig.java:61)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.sql.SQLNonTransientConnectionException: (conn=6) Connection is closed
	at org.mariadb.jdbc.export.ExceptionFactory.createException(ExceptionFactory.java:300)
	at org.mariadb.jdbc.export.ExceptionFactory.create(ExceptionFactory.java:378)
	at org.mariadb.jdbc.client.impl.StandardClient.checkNotClosed(StandardClient.java:1286)
	at org.mariadb.jdbc.client.impl.StandardClient.sendQuery(StandardClient.java:854)
	at org.mariadb.jdbc.client.impl.StandardClient.execute(StandardClient.java:1026)
	at org.mariadb.jdbc.Statement.executeInternal(Statement.java:1034)
	at org.mariadb.jdbc.Statement.execute(Statement.java:1163)
	at org.mariadb.jdbc.Statement.execute(Statement.java:502)
	at io.agroal.pool.wrapper.StatementWrapper.execute(StatementWrapper.java:220)
	at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:80)
	... 22 more

2024-10-30 13:59:11,373 WARN  [io.agr.pool] (JPA Startup Thread) Datasource '<default>': (conn=6) Connection is closed
2024-10-30 13:59:11,431 INFO  [io.quarkus] (main) repro 1.0.0-SNAPSHOT on JVM (powered by Quarkus 999-SNAPSHOT) started in 21.939s. Listening on: http://localhost:8081
2024-10-30 13:59:11,431 INFO  [io.quarkus] (main) Profile test activated. 
2024-10-30 13:59:11,431 INFO  [io.quarkus] (main) Installed features: [agroal, cdi, hibernate-orm, jdbc-mariadb, narayana-jta, rest, smallrye-context-propagation, vertx]
2024-10-30 13:59:11,922 WARN  [com.arj.ats.jta] (executor-thread-1) ARJUNA016061: TransactionImple.enlistResource - XAResource.start returned: XAException.XAER_RMFAIL for < formatId=131077, gtrid_length=38, bqual_length=36, tx_uid=0:ffffc0a8012f:9a93:67222d9f:7, node_name=quarkus-qe, branch_uid=0:ffffc0a8012f:9a93:67222d9f:9, subordinatenodename=null, eis_name=0 >: javax.transaction.xa.XAException: Error trying to start xa transaction: (conn=7) Connection is closed
	at io.agroal.narayana.XAExceptionUtils.xaException(XAExceptionUtils.java:20)
	at io.agroal.narayana.XAExceptionUtils.xaException(XAExceptionUtils.java:8)
	at io.agroal.narayana.BaseXAResource.start(BaseXAResource.java:159)
	at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:648)
	at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:408)
	at io.agroal.narayana.NarayanaTransactionIntegration.associate(NarayanaTransactionIntegration.java:120)
	at io.agroal.pool.ConnectionPool.getConnection(ConnectionPool.java:292)
	at io.agroal.pool.DataSource.getConnection(DataSource.java:86)
	at io.agroal.api.AgroalDataSource_sqqLi56D50iCdXmOjyjPSAxbLu0_Synthetic_ClientProxy.getConnection(Unknown Source)
	at org.acme.GreetingResource.openConnection(GreetingResource.java:31)
	at org.acme.GreetingResource.hello(GreetingResource.java:26)
	at org.acme.GreetingResource_Subclass.hello$$superforward(Unknown Source)
	at org.acme.GreetingResource_Subclass$$function$$1.apply(Unknown Source)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:136)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:107)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:38)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
	at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
	at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
	at org.acme.GreetingResource_Subclass.hello(Unknown Source)
	at org.acme.GreetingResource$quarkusrestinvoker$hello_e747664148511e1e5212d3e0f4b40d45c56ab8a1.invoke(Unknown Source)
	at org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29)
	at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:141)
	at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:627)
	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2675)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2654)
	at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1627)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1594)
	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.sql.SQLNonTransientConnectionException: (conn=7) Connection is closed
	at org.mariadb.jdbc.export.ExceptionFactory.createException(ExceptionFactory.java:300)
	at org.mariadb.jdbc.export.ExceptionFactory.create(ExceptionFactory.java:378)
	at org.mariadb.jdbc.client.impl.StandardClient.checkNotClosed(StandardClient.java:1286)
	at org.mariadb.jdbc.client.impl.StandardClient.sendQuery(StandardClient.java:854)
	at org.mariadb.jdbc.client.impl.StandardClient.execute(StandardClient.java:1026)
	at org.mariadb.jdbc.client.impl.StandardClient.execute(StandardClient.java:884)
	at org.mariadb.jdbc.Connection.setAutoCommit(Connection.java:217)
	at io.agroal.pool.ConnectionHandler.transactionStart(ConnectionHandler.java:322)
	at io.agroal.narayana.BaseXAResource.start(BaseXAResource.java:152)
	... 35 more

2024-10-30 13:59:11,923 WARN  [com.arj.ats.jta] (executor-thread-1) ARJUNA016138: Failed to enlist XA resource io.agroal.narayana.BaseXAResource@7cd7d197: javax.transaction.xa.XAException: Error trying to start xa transaction: (conn=7) Connection is closed
	at io.agroal.narayana.XAExceptionUtils.xaException(XAExceptionUtils.java:20)
	at io.agroal.narayana.XAExceptionUtils.xaException(XAExceptionUtils.java:8)
	at io.agroal.narayana.BaseXAResource.start(BaseXAResource.java:159)
	at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:648)
	at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:408)
	at io.agroal.narayana.NarayanaTransactionIntegration.associate(NarayanaTransactionIntegration.java:120)
	at io.agroal.pool.ConnectionPool.getConnection(ConnectionPool.java:292)
	at io.agroal.pool.DataSource.getConnection(DataSource.java:86)
	at io.agroal.api.AgroalDataSource_sqqLi56D50iCdXmOjyjPSAxbLu0_Synthetic_ClientProxy.getConnection(Unknown Source)
	at org.acme.GreetingResource.openConnection(GreetingResource.java:31)
	at org.acme.GreetingResource.hello(GreetingResource.java:26)
	at org.acme.GreetingResource_Subclass.hello$$superforward(Unknown Source)
	at org.acme.GreetingResource_Subclass$$function$$1.apply(Unknown Source)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:136)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:107)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:38)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
	at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
	at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
	at org.acme.GreetingResource_Subclass.hello(Unknown Source)
	at org.acme.GreetingResource$quarkusrestinvoker$hello_e747664148511e1e5212d3e0f4b40d45c56ab8a1.invoke(Unknown Source)
	at org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29)
	at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:141)
	at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:627)
	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2675)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2654)
	at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1627)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1594)
	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.sql.SQLNonTransientConnectionException: (conn=7) Connection is closed
	at org.mariadb.jdbc.export.ExceptionFactory.createException(ExceptionFactory.java:300)
	at org.mariadb.jdbc.export.ExceptionFactory.create(ExceptionFactory.java:378)
	at org.mariadb.jdbc.client.impl.StandardClient.checkNotClosed(StandardClient.java:1286)
	at org.mariadb.jdbc.client.impl.StandardClient.sendQuery(StandardClient.java:854)
	at org.mariadb.jdbc.client.impl.StandardClient.execute(StandardClient.java:1026)
	at org.mariadb.jdbc.client.impl.StandardClient.execute(StandardClient.java:884)
	at org.mariadb.jdbc.Connection.setAutoCommit(Connection.java:217)
	at io.agroal.pool.ConnectionHandler.transactionStart(ConnectionHandler.java:322)
	at io.agroal.narayana.BaseXAResource.start(BaseXAResource.java:152)
	... 35 more

2024-10-30 13:59:11,923 WARN  [io.agr.pool] (executor-thread-1) Datasource '<default>': (conn=7) Connection is closed
2024-10-30 13:59:11,926 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (executor-thread-1) HTTP Request to /hello failed, error id: 21af7673-2686-466f-b356-1bf63ca75a12-1: java.sql.SQLException: Exception in association of connection to existing transaction
	at io.agroal.narayana.NarayanaTransactionIntegration.associate(NarayanaTransactionIntegration.java:130)
	at io.agroal.pool.ConnectionPool.getConnection(ConnectionPool.java:292)
	at io.agroal.pool.DataSource.getConnection(DataSource.java:86)
	at io.agroal.api.AgroalDataSource_sqqLi56D50iCdXmOjyjPSAxbLu0_Synthetic_ClientProxy.getConnection(Unknown Source)
	at org.acme.GreetingResource.openConnection(GreetingResource.java:31)
	at org.acme.GreetingResource.hello(GreetingResource.java:26)
	at org.acme.GreetingResource_Subclass.hello$$superforward(Unknown Source)
	at org.acme.GreetingResource_Subclass$$function$$1.apply(Unknown Source)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:136)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:107)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:38)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
	at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
	at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
	at org.acme.GreetingResource_Subclass.hello(Unknown Source)
	at org.acme.GreetingResource$quarkusrestinvoker$hello_e747664148511e1e5212d3e0f4b40d45c56ab8a1.invoke(Unknown Source)
	at org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29)
	at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:141)
	at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:627)
	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2675)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2654)
	at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1627)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1594)
	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.sql.SQLException: Unable to enlist connection to existing transaction
	at io.agroal.narayana.NarayanaTransactionIntegration.associate(NarayanaTransactionIntegration.java:121)
	... 32 more

@yrodiere
Copy link
Member

yrodiere commented Oct 30, 2024

Just... every single connection is failing, even the ones for Hibernate's schema initialization, which I don't think run in transactions.

TestContainers' SELECT 1 queries appear to succeed, but then I guess TC is not using XA.

This will definitely need investigation; if we're in a rush I'd recommend reverting #44111, but I think that's in 3.17 only, and the release is still a few weeks away.

On a related note @gsmet , I think we talked about the risk/effort balance of not having dedicated tests for XA, especially considering they would require their own module to not interfere with non-XA tests in the case of native compilation... looks like the time has come to add these modules?

@marcosgopen
Copy link
Contributor

Thank you @michalvavrik for opening this issue. I wonder if there is a document with Quarkus and DBs supported versions, is there one.
BTW it appears that the new version of mariadb-java-client is affecting the agroal connection. @barreiro have you already tested agroal against mariadb-java-client 3.5.0 version?

@barreiro
Copy link
Contributor

barreiro commented Dec 9, 2024

@marcosgopen no, we don't test Agroal with specific drivers.

From a quick glance at the driver changes from 3.4.1 to 3.5.0 the changes that are most likely to cause issues are the updates on truststore. @michalvavrik can you please verify the TLS settings used ??

@rsvoboda
Copy link
Member

rsvoboda commented Dec 9, 2024

Reproducer from https://github.com/michalvavrik/mariadb-narayna-jta-xa-repro is using mysql database started trough devservice, there is no customization and no trust store edits.

The app is simple, just getting connection for the datasource - https://github.com/michalvavrik/mariadb-narayna-jta-xa-repro/blob/master/src/main/java/org/acme/GreetingResource.java#L17

@barreiro pls look into the reproducer app and comment added by Yoann #44160 (comment)

@rsvoboda
Copy link
Member

rsvoboda commented Dec 9, 2024

mariadb-corporation/mariadb-connector-j@1ce5982 is the commit introducing the change in MariaDB driver

Discovered through bisecting mariadb-corporation/mariadb-connector-j@3.4.1...3.5.0 and running the sample app

@marcosgopen
Copy link
Contributor

@barreiro I think instead that the actual change that caused this issue is XA Pool datasource ensuring close when using XAConnection.close() . They also needed to update the test for it (mariadb-corporation/mariadb-connector-j@a81f0e3#diff-072b4c89a5cf666e9ec822fcb4dcab96035b832ff50c5f7ff59f8e6a0c4958faL199)
Do you think that it might be the reason for this?

@gsmet
Copy link
Member

gsmet commented Dec 10, 2024

On a related note @gsmet , I think we talked about the risk/effort balance of not having dedicated tests for XA, especially considering they would require their own module to not interfere with non-XA tests in the case of native compilation... looks like the time has come to add these modules?

Yes, I suppose so.

@barreiro don't hesitate to ping the Narayana team if some help from them is needed.

@gsmet
Copy link
Member

gsmet commented Dec 10, 2024

Let's revert for now until someone complains about us using an old version: #45034 .

But I think we need to isolate the issue and either find a solution on our side in Agroal or Narayana or open a proper issue for the MariaDB JDBC driver.

@yrodiere
Copy link
Member

FWIW we're discussing this with Luis and the Hibernate team: https://hibernate.zulipchat.com/#narrow/channel/132094-hibernate-orm-dev/topic/MariaDB.20XAConnection.20and.20Connection.23close

So far it seems the solution will be opening an issue for the MariaDB JDBC Driver.

@barreiro
Copy link
Contributor

Created upstream issue CONJ-1218

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/agroal area/jdbc Issues related to the JDBC extensions area/narayana Transactions / Narayana kind/bug Something isn't working
Projects
None yet
Development

No branches or pull requests

6 participants