Bug 402381: 2 tests of EntityManagerFactoryTestSuite in jpa21/advanced failed on server
Signed-off-by: Lukas Jungmann <lukas.jungmann@oracle.com>
Reviewed-by: TomasK
diff --git a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa21/advanced/EntityManagerFactoryTestSuite.java b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa21/advanced/EntityManagerFactoryTestSuite.java
index 20f4353..78585f0 100644
--- a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa21/advanced/EntityManagerFactoryTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa21/advanced/EntityManagerFactoryTestSuite.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2017 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
@@ -121,15 +121,22 @@ public void testAddNamedQuery(){
closeEntityManager(em);
em = createEntityManager();
- namedQuery = em.createNamedQuery("Select_Employee_by_first_name");
- assertTrue("LockMode not retained", namedQuery.getLockMode().equals(LockModeType.OPTIMISTIC_FORCE_INCREMENT));
- assertTrue("MaxResults not retained", namedQuery.getMaxResults() == 1);
- assertTrue("FirstResult not retained", namedQuery.getFirstResult() == 1);
- namedQuery.setParameter("p1", names.get(names.size()-1)[0]);
- beginTransaction(em);
- assertTrue("MaxResults not applied", namedQuery.getResultList().size() == 1);
- rollbackTransaction(em);
+ try {
+ beginTransaction(em);
+ namedQuery = em.createNamedQuery("Select_Employee_by_first_name");
+ assertTrue("LockMode not retained", namedQuery.getLockMode().equals(LockModeType.OPTIMISTIC_FORCE_INCREMENT));
+ assertTrue("MaxResults not retained", namedQuery.getMaxResults() == 1);
+ assertTrue("FirstResult not retained", namedQuery.getFirstResult() == 1);
+ namedQuery.setParameter("p1", names.get(names.size() - 1)[0]);
+ assertTrue("MaxResults not applied", namedQuery.getResultList().size() == 1);
+ } finally {
+ if (isTransactionActive(em)) {
+ rollbackTransaction(em);
+ }
+ closeEntityManager(em);
+ }
+ em = createEntityManager();
query = em.createNativeQuery("SELECT EMP_ID FROM CMP3_EMPLOYEE");
query.setMaxResults(1);
factory.addNamedQuery("Select_Employee_NATIVE", query);
diff --git a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa22/advanced/EntityManagerFactoryTestSuite.java b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa22/advanced/EntityManagerFactoryTestSuite.java
index b751ef3..2be2425 100644
--- a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa22/advanced/EntityManagerFactoryTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa22/advanced/EntityManagerFactoryTestSuite.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2017 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
@@ -120,15 +120,22 @@ public void testAddNamedQuery(){
closeEntityManager(em);
em = createEntityManager();
- namedQuery = em.createNamedQuery("Select_Employee_by_first_name");
- assertTrue("LockMode not retained", namedQuery.getLockMode().equals(LockModeType.OPTIMISTIC_FORCE_INCREMENT));
- assertTrue("MaxResults not retained", namedQuery.getMaxResults() == 1);
- assertTrue("FirstResult not retained", namedQuery.getFirstResult() == 1);
- namedQuery.setParameter("p1", names.get(names.size()-1)[0]);
- beginTransaction(em);
- assertTrue("MaxResults not applied", namedQuery.getResultList().size() == 1);
- rollbackTransaction(em);
+ try {
+ beginTransaction(em);
+ namedQuery = em.createNamedQuery("Select_Employee_by_first_name");
+ assertTrue("LockMode not retained", namedQuery.getLockMode().equals(LockModeType.OPTIMISTIC_FORCE_INCREMENT));
+ assertTrue("MaxResults not retained", namedQuery.getMaxResults() == 1);
+ assertTrue("FirstResult not retained", namedQuery.getFirstResult() == 1);
+ namedQuery.setParameter("p1", names.get(names.size() - 1)[0]);
+ assertTrue("MaxResults not applied", namedQuery.getResultList().size() == 1);
+ } finally {
+ if (isTransactionActive(em)) {
+ rollbackTransaction(em);
+ }
+ closeEntityManager(em);
+ }
+ em = createEntityManager();
query = em.createNativeQuery("SELECT EMP_ID FROM CMP3_EMPLOYEE");
query.setMaxResults(1);
factory.addNamedQuery("Select_Employee_NATIVE", query);
diff --git a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/EntityManagerFactoryDelegate.java b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/EntityManagerFactoryDelegate.java
index 0d66840..d449397 100644
--- a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/EntityManagerFactoryDelegate.java
+++ b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/EntityManagerFactoryDelegate.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 1998, 2016 Oracle and/or its affiliates, IBM Corporation. All rights reserved.
+ * Copyright (c) 1998, 2017 Oracle and/or its affiliates, IBM Corporation. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
@@ -776,11 +776,12 @@ public void setCommitOrder(CommitOrderType commitOrder) {
@Override
public void addNamedQuery(String name, Query query) {
DatabaseQuery unwrapped = (DatabaseQuery) query.unwrap(DatabaseQuery.class).clone();
- if (((QueryImpl)query).lockMode != null){
- ((ObjectLevelReadQuery)unwrapped).setLockModeType(((QueryImpl)query).lockMode.name(), session);
+ QueryImpl originalQuery = query.unwrap(QueryImpl.class);
+ if (originalQuery.lockMode != null){
+ ((ObjectLevelReadQuery)unwrapped).setLockModeType(originalQuery.lockMode.name(), session);
}
if (unwrapped.isReadQuery()){
- ((ReadQuery)unwrapped).setInternalMax((((QueryImpl)query).getMaxResultsInternal()));
+ ((ReadQuery)unwrapped).setInternalMax((originalQuery.getMaxResultsInternal()));
if (query.getFirstResult() != QueryImpl.UNDEFINED){
((ReadQuery)unwrapped).setFirstResult(query.getFirstResult());
}