From 6e9fd3626d4f37b38b884341898eb7b366068098 Mon Sep 17 00:00:00 2001 From: Sureshkumar Balakrishnannair Date: Thu, 19 Jul 2018 11:42:11 +0530 Subject: [PATCH 1/2] Bug 535998 WLS 12.2.1.2 DOES NOT PROPERLY IMPLEMENT JSR 303 ISSUE Signed-off-by: Sureshkumar Balakrishnannair --- .../internal/sessions/UnitOfWorkImpl.java | 7 +++++ .../BeanValidationJunitTest.java | 27 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/sessions/UnitOfWorkImpl.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/sessions/UnitOfWorkImpl.java index f64b37fb533..357b2df68cc 100644 --- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/sessions/UnitOfWorkImpl.java +++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/sessions/UnitOfWorkImpl.java @@ -4333,6 +4333,13 @@ public void registerNewObjectForPersist(Object newObject, Map visitedObjects) { //if object is deleted and a create is issued on the that object // then the object must be transitioned back to existing and not deleted this.undeleteObject(newObject); + }else{ + if (descriptor.getEventManager().hasAnyEventListeners()) { + DescriptorEvent event = new DescriptorEvent(newObject); + event.setEventCode(DescriptorEventManager.PreUpdateEvent); + event.setSession(this); + descriptor.getEventManager().executeEvent(event); + } } descriptor.getObjectBuilder().cascadeRegisterNewForCreate(newObject, this, visitedObjects); // After any cascade persists and assigning any sequence numbers, diff --git a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/beanvalidation/BeanValidationJunitTest.java b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/beanvalidation/BeanValidationJunitTest.java index 5c6741ddb7b..225ea56a98a 100644 --- a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/beanvalidation/BeanValidationJunitTest.java +++ b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/beanvalidation/BeanValidationJunitTest.java @@ -51,6 +51,7 @@ public static Test suite() { suite.addTest(new BeanValidationJunitTest("testRemoveWithInvalidData")); suite.addTest(new BeanValidationJunitTest("testTraversableResolverPreventsLoadingOfLazyRelationships")); suite.addTest(new BeanValidationJunitTest("testTraversableResolverPreventsTraversingRelationshipMultipleTimes")); + suite.addTest(new BeanValidationJunitTest("testPesistWithInvalidAndModifiedBeanData")); } return suite; } @@ -342,6 +343,32 @@ public void testTraversableResolverPreventsLoadingOfLazyRelationships() { assertTrue( "Lazy field should not be instantiated because of validation", !isInstantiated(employee, "projects", project) ); assertTrue( "Lazy field should not be instantiated because of validation", !isInstantiated(employee, "managedProject", project) ); } + + public void testPesistWithInvalidAndModifiedBeanData() { + + EntityManager em = createEntityManager(); + boolean gotConstraintViolations = false; + String invalidName = getFilledStringOfLength(Employee.NAME_MAX_SIZSE + 1); + String validName = getFilledStringOfLength(Employee.NAME_MAX_SIZSE - 1); + + // Persist an object with valid value + beginTransaction(em); + Employee e1 = new Employee(100, validName, validName, 1337); + em.persist(e1); + + // (b) now we demonstrate how eclipse link fails to invoke the JSR validations on entity + // when we modify the entity during the transaction with invalid value + try { + e1.setName(invalidName); + e1.setSurname(invalidName); + em.persist(e1); + }catch (ConstraintViolationException e) { + assertTrue("Transaction not marked for roll back when ConstraintViolation is thrown", getRollbackOnly(em)) ; + gotConstraintViolations =true; + } + assertTrue("Did not get Constraint Violation while persisting invalid data ", gotConstraintViolations); + } + /** * Strategy: From 11e7e9a4f34987dfcca2cdb7e0d9cb1e0c28cf73 Mon Sep 17 00:00:00 2001 From: Sureshkumar Balakrishnannair Date: Mon, 30 Jul 2018 16:20:07 +0530 Subject: [PATCH 2/2] Bug 535998 WLS 12.2.1.2 DOES NOT PROPERLY IMPLEMENT JSR 303 ISSUE Signed-off-by: Sureshkumar Balakrishnannair --- .../eclipse/persistence/internal/sessions/UnitOfWorkImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/sessions/UnitOfWorkImpl.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/sessions/UnitOfWorkImpl.java index 357b2df68cc..92b21772917 100644 --- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/sessions/UnitOfWorkImpl.java +++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/sessions/UnitOfWorkImpl.java @@ -4333,13 +4333,13 @@ public void registerNewObjectForPersist(Object newObject, Map visitedObjects) { //if object is deleted and a create is issued on the that object // then the object must be transitioned back to existing and not deleted this.undeleteObject(newObject); - }else{ + } else { if (descriptor.getEventManager().hasAnyEventListeners()) { DescriptorEvent event = new DescriptorEvent(newObject); event.setEventCode(DescriptorEventManager.PreUpdateEvent); event.setSession(this); descriptor.getEventManager().executeEvent(event); - } + } } descriptor.getObjectBuilder().cascadeRegisterNewForCreate(newObject, this, visitedObjects); // After any cascade persists and assigning any sequence numbers,