From 5dd97cacfb356ba62ff85a9a7f4b6960daa49360 Mon Sep 17 00:00:00 2001 From: Anija KA Date: Thu, 14 Nov 2024 14:23:50 +0530 Subject: [PATCH 1/9] Test for openLiberty Issue:29459 --- .../tests/web/JakartaDataRecreateServlet.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 68799131ee3a..2a71eeafe634 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -169,6 +169,52 @@ public void testOLGH28913() throws Exception { assertEquals(character.getHexadecimal(), result); } + + @Test + //Reference issue:https://github.com/OpenLiberty/open-liberty/issues/29459 + public void testInsertSegment() throws Exception { + // Sample segment ID and points + int x1 = 0, y1 = 0, x2 = 120, y2 = 209; + + // Create a new segment using the 'of' factory method + Segment segment = Segment.of(x1, y1, x2, y2); + + // Begin the transaction + tx.begin(); + + try { + // Persist the segment using EntityManager + em.persist(segment); + + // Insert into the database using a native SQL query + em.createNativeQuery("INSERT INTO Segment (id, pointA_x, pointA_y, pointB_x, pointB_y) VALUES (?, ?, ?, ?, ?)") + .setParameter(1, segment.id) // Segment ID + .setParameter(2, segment.pointA.x()) // Point A X + .setParameter(3, segment.pointA.y()) // Point A Y + .setParameter(4, segment.pointB.x()) // Point B X + .setParameter(5, segment.pointB.y()) // Point B Y + .executeUpdate(); + + // Commit the transaction + tx.commit(); + } catch (Exception e) { + // If there's any exception, rollback the transaction + tx.rollback(); + throw e; + } + + // Optionally, you can query the inserted data to verify it was inserted correctly + Segment retrievedSegment = em.find(Segment.class, segment.id); + + // Assertions to validate the data + assertEquals(segment.id, retrievedSegment.id); + assertEquals(x1, retrievedSegment.pointA.x()); + assertEquals(y1, retrievedSegment.pointA.y()); + assertEquals(x2, retrievedSegment.pointB.x()); + assertEquals(y2, retrievedSegment.pointB.y()); + } + + @Test //Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28908 public void testOLGH28908() throws Exception { From e4fafdb35baaaf75ba326d1ef6798d60d5fccb29 Mon Sep 17 00:00:00 2001 From: Anija KA Date: Thu, 14 Nov 2024 14:28:00 +0530 Subject: [PATCH 2/9] Enabling Segment entity. --- .../src/io/openliberty/jpa/data/tests/models/Segment.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Segment.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Segment.java index 3b455bddac58..943cc5d97b18 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Segment.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Segment.java @@ -12,6 +12,7 @@ import jakarta.persistence.Column; import jakarta.persistence.Embeddable; import jakarta.persistence.Embedded; +import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; @@ -22,7 +23,7 @@ * TODO: uncomment @Entity * TODO: remove constructor from Point */ -//@Entity +@Entity public class Segment { @GeneratedValue From 993dbae7410746051a6e06d244f99347a91753a8 Mon Sep 17 00:00:00 2001 From: Anija KA Date: Thu, 14 Nov 2024 14:39:20 +0530 Subject: [PATCH 3/9] Change in test method. --- .../jpa/data/tests/web/JakartaDataRecreateServlet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 2a71eeafe634..68305017e4e6 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -172,7 +172,7 @@ public void testOLGH28913() throws Exception { @Test //Reference issue:https://github.com/OpenLiberty/open-liberty/issues/29459 - public void testInsertSegment() throws Exception { + public void testOLGH29459() throws Exception { // Sample segment ID and points int x1 = 0, y1 = 0, x2 = 120, y2 = 209; From d0e48d0b31db19c87f79f62076f615851f97928e Mon Sep 17 00:00:00 2001 From: Anija KA Date: Thu, 14 Nov 2024 14:53:22 +0530 Subject: [PATCH 4/9] Change in test method. --- .../jpa/data/tests/web/JakartaDataRecreateServlet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 68305017e4e6..9d4741b0c00c 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -171,7 +171,7 @@ public void testOLGH28913() throws Exception { } @Test - //Reference issue:https://github.com/OpenLiberty/open-liberty/issues/29459 + @Ignore("Reference issue:https://github.com/OpenLiberty/open-liberty/issues/29459") public void testOLGH29459() throws Exception { // Sample segment ID and points int x1 = 0, y1 = 0, x2 = 120, y2 = 209; From 53edf3f7845441d58f23668f4528a38104342a26 Mon Sep 17 00:00:00 2001 From: Anija KA Date: Tue, 19 Nov 2024 12:31:30 +0530 Subject: [PATCH 5/9] Removing the constructor from Point. --- .../openliberty/jpa/data/tests/models/Segment.java | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Segment.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Segment.java index 943cc5d97b18..202ad4c0e708 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Segment.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Segment.java @@ -18,10 +18,6 @@ /** * Recreate from io.openliberty.data.internal_fat_jpa - * - * The problem here is with the entity itself - * TODO: uncomment @Entity - * TODO: remove constructor from Point */ @Entity public class Segment { @@ -40,14 +36,7 @@ public class Segment { @Embeddable public static record Point(int x, int y) { - /** - * Recreate - * Exception Description: The instance creation method [io.openliberty.jpa.data.tests.models.Segment$Point.<Default Constructor>], - * with no parameters, does not exist, or is not accessible. - */ - public Point() { - this(0, 0); - } + } public static Segment of(int x1, int y1, int x2, int y2) { From 32a1ad360a39876992fd6f2dbf6b6f86c87abb7c Mon Sep 17 00:00:00 2001 From: Anija KA Date: Tue, 19 Nov 2024 15:05:56 +0530 Subject: [PATCH 6/9] PR comment changes. --- .../tests/web/JakartaDataRecreateServlet.java | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 9d4741b0c00c..83823df0394b 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -171,14 +171,14 @@ public void testOLGH28913() throws Exception { } @Test - @Ignore("Reference issue:https://github.com/OpenLiberty/open-liberty/issues/29459") + // @Ignore("Reference issue:https://github.com/OpenLiberty/open-liberty/issues/29459") public void testOLGH29459() throws Exception { // Sample segment ID and points int x1 = 0, y1 = 0, x2 = 120, y2 = 209; // Create a new segment using the 'of' factory method Segment segment = Segment.of(x1, y1, x2, y2); - + // Begin the transaction tx.begin(); @@ -186,9 +186,9 @@ public void testOLGH29459() throws Exception { // Persist the segment using EntityManager em.persist(segment); - // Insert into the database using a native SQL query + // Insert into the database using a native SQL query (with incremented ID) em.createNativeQuery("INSERT INTO Segment (id, pointA_x, pointA_y, pointB_x, pointB_y) VALUES (?, ?, ?, ?, ?)") - .setParameter(1, segment.id) // Segment ID + .setParameter(1, segment.id + 1) // Incremented Segment ID (avoiding conflict) .setParameter(2, segment.pointA.x()) // Point A X .setParameter(3, segment.pointA.y()) // Point A Y .setParameter(4, segment.pointB.x()) // Point B X @@ -204,18 +204,25 @@ public void testOLGH29459() throws Exception { } // Optionally, you can query the inserted data to verify it was inserted correctly - Segment retrievedSegment = em.find(Segment.class, segment.id); - - // Assertions to validate the data - assertEquals(segment.id, retrievedSegment.id); - assertEquals(x1, retrievedSegment.pointA.x()); - assertEquals(y1, retrievedSegment.pointA.y()); - assertEquals(x2, retrievedSegment.pointB.x()); - assertEquals(y2, retrievedSegment.pointB.y()); + Segment retrievedSegment1 = em.find(Segment.class, segment.id); + Segment retrievedSegment2 = em.find(Segment.class, segment.id + 1); // Retrieve the second segment with incremented ID + + // Assertions for the first segment + assertEquals(segment.id, retrievedSegment1.id); + assertEquals(x1, retrievedSegment1.pointA.x()); + assertEquals(y1, retrievedSegment1.pointA.y()); + assertEquals(x2, retrievedSegment1.pointB.x()); + assertEquals(y2, retrievedSegment1.pointB.y()); + + // Assertions for the second segment (inserted with incremented ID) + assertEquals(Long.valueOf(segment.id + 1), Long.valueOf(retrievedSegment2.id)); + assertEquals(x1, retrievedSegment2.pointA.x()); + assertEquals(y1, retrievedSegment2.pointA.y()); + assertEquals(x2, retrievedSegment2.pointB.x()); + assertEquals(y2, retrievedSegment2.pointB.y()); } - @Test //Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28908 public void testOLGH28908() throws Exception { Person p = new Person(); From 354008e7d3767e33abc6c88158a23f9ad196ea0d Mon Sep 17 00:00:00 2001 From: Anija KA Date: Tue, 19 Nov 2024 15:06:35 +0530 Subject: [PATCH 7/9] PR comment changes --- .../jpa/data/tests/web/JakartaDataRecreateServlet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 83823df0394b..54d7d57013b9 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -171,7 +171,7 @@ public void testOLGH28913() throws Exception { } @Test - // @Ignore("Reference issue:https://github.com/OpenLiberty/open-liberty/issues/29459") + @Ignore("Reference issue:https://github.com/OpenLiberty/open-liberty/issues/29459") public void testOLGH29459() throws Exception { // Sample segment ID and points int x1 = 0, y1 = 0, x2 = 120, y2 = 209; From ad17cbe5f3926f592764eb5c4bc6420030a6079b Mon Sep 17 00:00:00 2001 From: Anija KA Date: Tue, 26 Nov 2024 11:56:40 +0530 Subject: [PATCH 8/9] Isolating persists to two try-catch blocks. --- .../tests/web/JakartaDataRecreateServlet.java | 55 +++++++++++-------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 54d7d57013b9..caa37a854894 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -173,39 +173,50 @@ public void testOLGH28913() throws Exception { @Test @Ignore("Reference issue:https://github.com/OpenLiberty/open-liberty/issues/29459") public void testOLGH29459() throws Exception { - // Sample segment ID and points int x1 = 0, y1 = 0, x2 = 120, y2 = 209; - - // Create a new segment using the 'of' factory method Segment segment = Segment.of(x1, y1, x2, y2); + List exceptions = new ArrayList<>(); + + if (tx.getStatus() != jakarta.transaction.Status.STATUS_ACTIVE) { + tx.begin(); + } - // Begin the transaction - tx.begin(); + try { + em.persist(segment); + tx.commit(); + } catch (Exception e) { + if (tx.getStatus() == jakarta.transaction.Status.STATUS_ACTIVE) { + tx.rollback(); + } + exceptions.add(e); + } - try { - // Persist the segment using EntityManager - em.persist(segment); + if (tx.getStatus() != jakarta.transaction.Status.STATUS_ACTIVE) { + tx.begin(); + } - // Insert into the database using a native SQL query (with incremented ID) + try { em.createNativeQuery("INSERT INTO Segment (id, pointA_x, pointA_y, pointB_x, pointB_y) VALUES (?, ?, ?, ?, ?)") - .setParameter(1, segment.id + 1) // Incremented Segment ID (avoiding conflict) - .setParameter(2, segment.pointA.x()) // Point A X - .setParameter(3, segment.pointA.y()) // Point A Y - .setParameter(4, segment.pointB.x()) // Point B X - .setParameter(5, segment.pointB.y()) // Point B Y + .setParameter(1, segment.id + 1) + .setParameter(2, segment.pointA.x()) + .setParameter(3, segment.pointA.y()) + .setParameter(4, segment.pointB.x()) + .setParameter(5, segment.pointB.y()) .executeUpdate(); - - // Commit the transaction tx.commit(); - } catch (Exception e) { - // If there's any exception, rollback the transaction - tx.rollback(); - throw e; + } catch (Exception e) { + if (tx.getStatus() == jakarta.transaction.Status.STATUS_ACTIVE) { + tx.rollback(); + } + exceptions.add(e); + } + + if (!exceptions.isEmpty()) { + throw exceptions.get(0); } - // Optionally, you can query the inserted data to verify it was inserted correctly Segment retrievedSegment1 = em.find(Segment.class, segment.id); - Segment retrievedSegment2 = em.find(Segment.class, segment.id + 1); // Retrieve the second segment with incremented ID + Segment retrievedSegment2 = em.find(Segment.class, segment.id + 1); // Assertions for the first segment assertEquals(segment.id, retrievedSegment1.id); From d39fd51296891b75308a78c936009c23ded3f0b1 Mon Sep 17 00:00:00 2001 From: Anija KA Date: Fri, 6 Dec 2024 16:51:46 +0530 Subject: [PATCH 9/9] Changes with PR comments. --- .../tests/web/JakartaDataRecreateServlet.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index caa37a854894..b693abdc3fbc 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -177,23 +177,22 @@ public void testOLGH29459() throws Exception { Segment segment = Segment.of(x1, y1, x2, y2); List exceptions = new ArrayList<>(); - if (tx.getStatus() != jakarta.transaction.Status.STATUS_ACTIVE) { - tx.begin(); - } + tx.begin(); try { em.persist(segment); tx.commit(); } catch (Exception e) { if (tx.getStatus() == jakarta.transaction.Status.STATUS_ACTIVE) { - tx.rollback(); + // Only rollback if it's not a RollbackException + if (!(e instanceof jakarta.transaction.RollbackException)) { + tx.rollback(); + } } exceptions.add(e); } - if (tx.getStatus() != jakarta.transaction.Status.STATUS_ACTIVE) { - tx.begin(); - } + tx.begin(); try { em.createNativeQuery("INSERT INTO Segment (id, pointA_x, pointA_y, pointB_x, pointB_y) VALUES (?, ?, ?, ?, ?)") @@ -206,7 +205,10 @@ public void testOLGH29459() throws Exception { tx.commit(); } catch (Exception e) { if (tx.getStatus() == jakarta.transaction.Status.STATUS_ACTIVE) { - tx.rollback(); + // Only rollback if it's not a RollbackException + if (!(e instanceof jakarta.transaction.RollbackException)) { + tx.rollback(); + } } exceptions.add(e); } @@ -234,6 +236,7 @@ public void testOLGH29459() throws Exception { } + @Test //Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28908 public void testOLGH28908() throws Exception { Person p = new Person();