diff --git a/integration-tests/jpa-postgresql-withjson/README.md b/integration-tests/jpa-postgresql-withjson/README.md
new file mode 100644
index 0000000000000..ce110096b9f0f
--- /dev/null
+++ b/integration-tests/jpa-postgresql-withjson/README.md
@@ -0,0 +1,27 @@
+# JPA example with PostgreSQL and JSON
+
+## Running the tests
+
+By default, the tests of this module are disabled.
+
+To run the tests in a standard JVM with PostgreSQL started as a Docker container, you can run the following command:
+
+```
+mvn clean install -Dtest-containers -Dstart-containers
+```
+
+Additionally, you can generate a native image and run the tests for this native image by adding `-Dnative`:
+
+```
+mvn clean install -Dtest-containers -Dstart-containers -Dnative
+```
+
+If you don't want to run PostgreSQL as a Docker container, you can start your own PostgreSQL server. It needs to listen on the default port and have a database called `hibernate_orm_test` accessible to the user `hibernate_orm_test` with the password `hibernate_orm_test`.
+
+You can then run the tests as follows (either with `-Dnative` or not):
+
+```
+mvn clean install -Dtest-containers
+```
+
+If you have specific requirements, you can define a specific connection URL with `-Dpostgres.url=jdbc:postgresql://...`.
diff --git a/integration-tests/jpa-postgresql-withjson/pom.xml b/integration-tests/jpa-postgresql-withjson/pom.xml
new file mode 100644
index 0000000000000..1f54f7afa1bab
--- /dev/null
+++ b/integration-tests/jpa-postgresql-withjson/pom.xml
@@ -0,0 +1,257 @@
+
+
+
+ quarkus-integration-tests-parent
+ io.quarkus
+ 999-SNAPSHOT
+
+ 4.0.0
+
+ quarkus-integration-test-jpa-postgresql-withjson
+ Quarkus - Integration Tests - JPA - PostgreSQL with JSON
+ Module that contains JPA related tests running with the PostgreSQL database
+
+
+ jdbc:postgresql://localhost:5431/hibernate_orm_test
+
+
+
+
+ io.quarkus
+ quarkus-hibernate-orm
+
+
+ io.quarkus
+ quarkus-jdbc-postgresql
+
+
+ io.quarkus
+ quarkus-resteasy-reactive
+
+
+ io.quarkus
+ quarkus-jackson
+
+
+
+
+ io.quarkus
+ quarkus-junit5
+ test
+
+
+ io.quarkus
+ quarkus-junit5-internal
+ test
+
+
+ io.rest-assured
+ rest-assured
+ test
+
+
+ org.assertj
+ assertj-core
+ test
+
+
+
+
+ io.quarkus
+ quarkus-hibernate-orm-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+
+
+ io.quarkus
+ quarkus-jdbc-postgresql-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+
+
+ io.quarkus
+ quarkus-resteasy-reactive-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+
+
+ io.quarkus
+ quarkus-jackson-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+
+
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
+ maven-surefire-plugin
+
+ true
+
+
+
+ maven-failsafe-plugin
+
+ true
+
+
+
+ io.quarkus
+ quarkus-maven-plugin
+
+
+
+ build
+
+
+
+
+
+
+
+
+
+ test-postgresql
+
+
+ test-containers
+
+
+
+
+
+ maven-surefire-plugin
+
+ false
+
+
+
+ maven-failsafe-plugin
+
+ false
+
+
+
+
+
+
+
+ docker-postgresql
+
+
+ start-containers
+
+
+
+
+
+ io.fabric8
+ docker-maven-plugin
+
+
+
+ ${postgres.image}
+ postgresql
+
+
+ hibernate_orm_test
+ hibernate_orm_test
+ hibernate_orm_test
+
+
+ 5431:5432
+
+
+
+
+ (?s)ready to accept connections.*ready to accept connections
+
+
+
+
+
+ true
+
+
+
+ docker-start
+ compile
+
+ stop
+ start
+
+
+
+ docker-stop
+ post-integration-test
+
+ stop
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ docker-prune
+ generate-resources
+
+ exec
+
+
+ ${docker-prune.location}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/integration-tests/jpa-postgresql/src/main/java/io/quarkus/it/jpa/postgresql/EntityWithJson.java b/integration-tests/jpa-postgresql-withjson/src/main/java/io/quarkus/it/jpa/postgresql/EntityWithJson.java
similarity index 100%
rename from integration-tests/jpa-postgresql/src/main/java/io/quarkus/it/jpa/postgresql/EntityWithJson.java
rename to integration-tests/jpa-postgresql-withjson/src/main/java/io/quarkus/it/jpa/postgresql/EntityWithJson.java
diff --git a/integration-tests/jpa-postgresql-withjson/src/main/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityTestEndpoint.java b/integration-tests/jpa-postgresql-withjson/src/main/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityTestEndpoint.java
new file mode 100644
index 0000000000000..328b81be59a1b
--- /dev/null
+++ b/integration-tests/jpa-postgresql-withjson/src/main/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityTestEndpoint.java
@@ -0,0 +1,75 @@
+package io.quarkus.it.jpa.postgresql;
+
+import java.time.LocalDate;
+import java.util.List;
+
+import jakarta.inject.Inject;
+import jakarta.persistence.EntityManager;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import io.quarkus.hibernate.orm.PersistenceUnit;
+import io.quarkus.it.jpa.postgresql.otherpu.EntityWithJsonOtherPU;
+import io.quarkus.narayana.jta.QuarkusTransaction;
+
+/**
+ * Various tests covering JPA functionality. All tests should work in both standard JVM and in native mode.
+ */
+@Path("/jpa/testfunctionality")
+@Produces(MediaType.TEXT_PLAIN)
+public class JPAFunctionalityTestEndpoint {
+
+ @Inject
+ EntityManager em;
+
+ @Inject
+ @PersistenceUnit("other")
+ EntityManager otherEm;
+
+ @GET
+ public String json() {
+ QuarkusTransaction.requiringNew().run(() -> {
+ EntityWithJson entity = new EntityWithJson(
+ new EntityWithJson.ToBeSerializedWithDateTime(LocalDate.of(2023, 7, 28)));
+ em.persist(entity);
+ });
+
+ QuarkusTransaction.requiringNew().run(() -> {
+ List entities = em
+ .createQuery("select e from EntityWithJson e", EntityWithJson.class)
+ .getResultList();
+ if (entities.isEmpty()) {
+ throw new AssertionError("No entities with json were found");
+ }
+ });
+
+ QuarkusTransaction.requiringNew().run(() -> {
+ em.createQuery("delete from EntityWithJson").executeUpdate();
+ });
+
+ Exception exception = null;
+ try {
+ QuarkusTransaction.requiringNew().run(() -> {
+ EntityWithJsonOtherPU otherPU = new EntityWithJsonOtherPU(
+ new EntityWithJsonOtherPU.ToBeSerializedWithDateTime(LocalDate.of(2023, 7, 28)));
+ otherEm.persist(otherPU);
+ });
+ } catch (Exception e) {
+ exception = e;
+ }
+
+ if (exception == null) {
+ throw new AssertionError(
+ "Default mapper cannot process date/time properties. So we were expecting transaction to fail, but it did not!");
+ }
+ if (!(exception instanceof UnsupportedOperationException)
+ || !exception.getMessage().contains("I cannot convert anything to JSON")) {
+ throw new AssertionError("flush failed for a different reason than expected.", exception);
+ }
+
+ return "OK";
+ }
+
+}
diff --git a/integration-tests/jpa-postgresql/src/main/java/io/quarkus/it/jpa/postgresql/otherpu/EntityWithJsonOtherPU.java b/integration-tests/jpa-postgresql-withjson/src/main/java/io/quarkus/it/jpa/postgresql/otherpu/EntityWithJsonOtherPU.java
similarity index 100%
rename from integration-tests/jpa-postgresql/src/main/java/io/quarkus/it/jpa/postgresql/otherpu/EntityWithJsonOtherPU.java
rename to integration-tests/jpa-postgresql-withjson/src/main/java/io/quarkus/it/jpa/postgresql/otherpu/EntityWithJsonOtherPU.java
diff --git a/integration-tests/jpa-postgresql/src/main/java/io/quarkus/it/jpa/postgresql/otherpu/JsonFormatMapper.java b/integration-tests/jpa-postgresql-withjson/src/main/java/io/quarkus/it/jpa/postgresql/otherpu/JsonFormatMapper.java
similarity index 100%
rename from integration-tests/jpa-postgresql/src/main/java/io/quarkus/it/jpa/postgresql/otherpu/JsonFormatMapper.java
rename to integration-tests/jpa-postgresql-withjson/src/main/java/io/quarkus/it/jpa/postgresql/otherpu/JsonFormatMapper.java
diff --git a/integration-tests/jpa-postgresql-withjson/src/main/resources/application.properties b/integration-tests/jpa-postgresql-withjson/src/main/resources/application.properties
new file mode 100644
index 0000000000000..90370fd628984
--- /dev/null
+++ b/integration-tests/jpa-postgresql-withjson/src/main/resources/application.properties
@@ -0,0 +1,14 @@
+quarkus.datasource.username=hibernate_orm_test
+quarkus.datasource.password=hibernate_orm_test
+quarkus.datasource.jdbc.url=${postgres.url}
+quarkus.datasource.jdbc.max-size=8
+
+quarkus.hibernate-orm.packages=io.quarkus.it.jpa.postgresql
+quarkus.hibernate-orm.database.generation=drop-and-create
+quarkus.hibernate-orm.database.generation.create-schemas=true
+# Define non-default PU so that we can configure a custom JSON format mapper. The default PU is using the default mapper.
+quarkus.hibernate-orm."other".datasource=
+quarkus.hibernate-orm."other".packages=io.quarkus.it.jpa.postgresql.otherpu
+
+#Necessary for assertions in JPAFunctionalityInGraalITCase:
+quarkus.native.enable-reports=true
\ No newline at end of file
diff --git a/integration-tests/jpa-postgresql-withjson/src/test/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityInGraalITCase.java b/integration-tests/jpa-postgresql-withjson/src/test/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityInGraalITCase.java
new file mode 100644
index 0000000000000..4f5076a3f1b12
--- /dev/null
+++ b/integration-tests/jpa-postgresql-withjson/src/test/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityInGraalITCase.java
@@ -0,0 +1,11 @@
+package io.quarkus.it.jpa.postgresql;
+
+import io.quarkus.test.junit.QuarkusIntegrationTest;
+
+/**
+ * Test various JPA operations with JSON running in native mode
+ */
+@QuarkusIntegrationTest
+public class JPAFunctionalityInGraalITCase extends JPAFunctionalityTest {
+
+}
diff --git a/integration-tests/jpa-postgresql-withjson/src/test/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityTest.java b/integration-tests/jpa-postgresql-withjson/src/test/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityTest.java
new file mode 100644
index 0000000000000..a3b753a414251
--- /dev/null
+++ b/integration-tests/jpa-postgresql-withjson/src/test/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityTest.java
@@ -0,0 +1,21 @@
+package io.quarkus.it.jpa.postgresql;
+
+import static org.hamcrest.Matchers.is;
+
+import org.junit.jupiter.api.Test;
+
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+
+/**
+ * Test various JPA operations with JSON running in Quarkus
+ */
+@QuarkusTest
+public class JPAFunctionalityTest {
+
+ @Test
+ public void json() {
+ RestAssured.when().get("/jpa/testfunctionality").then().body(is("OK"));
+ }
+
+}
diff --git a/integration-tests/jpa-postgresql/pom.xml b/integration-tests/jpa-postgresql/pom.xml
index 236e61604bbe9..dc23312144d2b 100644
--- a/integration-tests/jpa-postgresql/pom.xml
+++ b/integration-tests/jpa-postgresql/pom.xml
@@ -30,10 +30,6 @@
io.quarkus
quarkus-resteasy-reactive
-
- io.quarkus
- quarkus-jackson
-
@@ -97,19 +93,6 @@
-
- io.quarkus
- quarkus-jackson-deployment
- ${project.version}
- pom
- test
-
-
- *
- *
-
-
-
diff --git a/integration-tests/jpa-postgresql/src/main/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityTestEndpoint.java b/integration-tests/jpa-postgresql/src/main/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityTestEndpoint.java
index 6b9b3df9d6433..5e1fd9d9cecb6 100644
--- a/integration-tests/jpa-postgresql/src/main/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityTestEndpoint.java
+++ b/integration-tests/jpa-postgresql/src/main/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityTestEndpoint.java
@@ -1,6 +1,5 @@
package io.quarkus.it.jpa.postgresql;
-import java.time.LocalDate;
import java.util.List;
import java.util.UUID;
@@ -15,8 +14,6 @@
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
-import io.quarkus.hibernate.orm.PersistenceUnit;
-import io.quarkus.it.jpa.postgresql.otherpu.EntityWithJsonOtherPU;
import io.quarkus.narayana.jta.QuarkusTransaction;
/**
@@ -29,10 +26,6 @@ public class JPAFunctionalityTestEndpoint {
@Inject
EntityManager em;
- @Inject
- @PersistenceUnit("other")
- EntityManager otherEm;
-
@GET
@Path("base")
public String base() {
@@ -124,49 +117,4 @@ public String uuid() {
return "OK";
}
- @GET
- @Path("json")
- public String json() {
- QuarkusTransaction.requiringNew().run(() -> {
- EntityWithJson entity = new EntityWithJson(
- new EntityWithJson.ToBeSerializedWithDateTime(LocalDate.of(2023, 7, 28)));
- em.persist(entity);
- });
-
- QuarkusTransaction.requiringNew().run(() -> {
- List entities = em
- .createQuery("select e from EntityWithJson e", EntityWithJson.class)
- .getResultList();
- if (entities.isEmpty()) {
- throw new AssertionError("No entities with json were found");
- }
- });
-
- QuarkusTransaction.requiringNew().run(() -> {
- em.createQuery("delete from EntityWithJson").executeUpdate();
- });
-
- Exception exception = null;
- try {
- QuarkusTransaction.requiringNew().run(() -> {
- EntityWithJsonOtherPU otherPU = new EntityWithJsonOtherPU(
- new EntityWithJsonOtherPU.ToBeSerializedWithDateTime(LocalDate.of(2023, 7, 28)));
- otherEm.persist(otherPU);
- });
- } catch (Exception e) {
- exception = e;
- }
-
- if (exception == null) {
- throw new AssertionError(
- "Default mapper cannot process date/time properties. So we were expecting transaction to fail, but it did not!");
- }
- if (!(exception instanceof UnsupportedOperationException)
- || !exception.getMessage().contains("I cannot convert anything to JSON")) {
- throw new AssertionError("flush failed for a different reason than expected.", exception);
- }
-
- return "OK";
- }
-
}
diff --git a/integration-tests/jpa-postgresql/src/main/resources/application.properties b/integration-tests/jpa-postgresql/src/main/resources/application.properties
index 90370fd628984..61a3265d67803 100644
--- a/integration-tests/jpa-postgresql/src/main/resources/application.properties
+++ b/integration-tests/jpa-postgresql/src/main/resources/application.properties
@@ -6,9 +6,6 @@ quarkus.datasource.jdbc.max-size=8
quarkus.hibernate-orm.packages=io.quarkus.it.jpa.postgresql
quarkus.hibernate-orm.database.generation=drop-and-create
quarkus.hibernate-orm.database.generation.create-schemas=true
-# Define non-default PU so that we can configure a custom JSON format mapper. The default PU is using the default mapper.
-quarkus.hibernate-orm."other".datasource=
-quarkus.hibernate-orm."other".packages=io.quarkus.it.jpa.postgresql.otherpu
#Necessary for assertions in JPAFunctionalityInGraalITCase:
quarkus.native.enable-reports=true
\ No newline at end of file
diff --git a/integration-tests/jpa-postgresql/src/test/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityInGraalITCase.java b/integration-tests/jpa-postgresql/src/test/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityInGraalITCase.java
index 158945098ab53..31f5089d394f2 100644
--- a/integration-tests/jpa-postgresql/src/test/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityInGraalITCase.java
+++ b/integration-tests/jpa-postgresql/src/test/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityInGraalITCase.java
@@ -13,7 +13,7 @@
public class JPAFunctionalityInGraalITCase extends JPAFunctionalityTest {
@Test
- public void verifyJdkXmlParsersHavebeenEcludedFromNative() {
+ public void verifyJdkXmlParsersHaveBeenExcludedFromNative() {
final ClassInclusionReport report = ClassInclusionReport.load();
//The following classes should be included in this applications;
//if not, that would be a sign that this test has become too weak
diff --git a/integration-tests/jpa-postgresql/src/test/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityTest.java b/integration-tests/jpa-postgresql/src/test/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityTest.java
index 0ccf51d52d76a..862a316ca9957 100644
--- a/integration-tests/jpa-postgresql/src/test/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityTest.java
+++ b/integration-tests/jpa-postgresql/src/test/java/io/quarkus/it/jpa/postgresql/JPAFunctionalityTest.java
@@ -23,9 +23,4 @@ public void uuid() {
RestAssured.when().get("/jpa/testfunctionality/uuid").then().body(is("OK"));
}
- @Test
- public void json() {
- RestAssured.when().get("/jpa/testfunctionality/json").then().body(is("OK"));
- }
-
}
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 3e9da6012ddb9..57fa1b2085bfe 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -227,6 +227,7 @@
jpa-db2
jpa-derby
jpa-postgresql
+ jpa-postgresql-withjson
jpa-postgresql-withxml
jpa-mariadb
jpa-h2