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());
             }