blob: 1812fd644bf1e3d3429d61300b35ce9fe39d0883 [file] [log] [blame]
/*
* Copyright (c) 2012, 2021 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 v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// 14/12/2012 -2.5 Gordon Yorke
package org.eclipse.persistence.testing.tests.jpa21.advanced;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.LockModeType;
import jakarta.persistence.Query;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.persistence.internal.jpa.EntityManagerImpl;
import org.eclipse.persistence.testing.framework.junit.JUnitTestCase;
import org.eclipse.persistence.testing.models.jpa21.advanced.AdvancedTableCreator;
import org.eclipse.persistence.testing.models.jpa21.advanced.Employee;
import org.eclipse.persistence.testing.models.jpa21.advanced.EmployeePopulator;
public class EntityManagerFactoryTestSuite extends JUnitTestCase {
protected boolean m_reset = false;
public EntityManagerFactoryTestSuite() {}
public EntityManagerFactoryTestSuite(String name) {
super(name);
setPuName("MulitPU-1");
}
@Override
public void setUp () {
m_reset = true;
super.setUp();
clearCache();
}
@Override
public void tearDown () {
if (m_reset) {
m_reset = false;
}
super.tearDown();
}
public static Test suite() {
TestSuite suite = new TestSuite();
suite.setName("EntityManagerFactoryTestSuite");
suite.addTest(new EntityManagerFactoryTestSuite("testSetup"));
// These tests call stored procedures that return a result set.
suite.addTest(new EntityManagerFactoryTestSuite("testAddNamedQuery"));
suite.addTest(new EntityManagerFactoryTestSuite("testGetPersistenceUnitUtilOnCloseEMF"));
return suite;
}
/**
* The setup is done as a test, both to record its failure, and to allow execution in the server.
*/
public void testSetup() {
new AdvancedTableCreator().replaceTables(getPersistenceUnitServerSession());
EmployeePopulator employeePopulator = new EmployeePopulator();
employeePopulator.buildExamples();
employeePopulator.persistExample(getPersistenceUnitServerSession());
clearCache();
}
public void testAddNamedQuery(){
EntityManager em = createEntityManager();
EntityManagerFactory factory = em.getEntityManagerFactory();
List<Object[]> names = em.createQuery("Select e.firstName, count(e.firstName) as c from Employee e group by e.firstName order by c").getResultList();
String name = (String) names.get(names.size()-1)[0];
Query query = em.createQuery("Select e from Employee e where e.firstName = :p1 order by e.id");
query.setParameter("p1", name);
assertTrue("Unable to retrieve parameter value from query", query.getParameterValue("p1").equals(name));
List<Employee> firstResult = query.getResultList();
factory.addNamedQuery("Select_Employee_by_first_name", query);
closeEntityManager(em);
em = createEntityManager();
Query namedQuery = em.createNamedQuery("Select_Employee_by_first_name");
assertFalse("Named query retains parameter values from original query", namedQuery.isBound(namedQuery.getParameter("p1")));
namedQuery.setParameter("p1", name);
List<Employee> secondResult = namedQuery.getResultList();
for (int i = firstResult.size()-1; i> -1; --i){
assertEquals("Results do not match", firstResult.get(i).getId(), secondResult.get(i).getId());
}
names = em.createQuery("Select e.lastName, count(e.lastName) as c from Employee e group by e.lastName order by c").getResultList();
name = (String) names.get(names.size()-1)[0];
query = em.createQuery("Select e from Employee e where e.lastName = :p1 order by e.id");
query.setParameter("p1", name);
firstResult = query.getResultList();
factory.addNamedQuery("Select_Employee_by_first_name", query);
closeEntityManager(em);
em = createEntityManager();
namedQuery = em.createNamedQuery("Select_Employee_by_first_name");
assertFalse("Named query retains parameter values from original query", namedQuery.isBound(namedQuery.getParameter("p1")));
namedQuery.setParameter("p1", name);
secondResult = namedQuery.getResultList();
for (int i = firstResult.size()-1; i> -1; --i){
assertEquals("Results do not match", firstResult.get(i).getId(), secondResult.get(i).getId());
}
query = em.createQuery("Select e from Employee e where e.lastName = :p1 order by e.id");
query.setMaxResults(1);
query.setFirstResult(1);
query.setLockMode(LockModeType.OPTIMISTIC_FORCE_INCREMENT);
factory.addNamedQuery("Select_Employee_by_first_name", query);
closeEntityManager(em);
em = createEntityManager();
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);
closeEntityManager(em);
em = createEntityManager();
namedQuery = em.createNamedQuery("Select_Employee_NATIVE");
assertTrue("MaxResults not retained", namedQuery.getMaxResults() == 1);
query = em.createNativeQuery("SELECT EMP_ID FROM CMP3_EMPLOYEE", Employee.class);
query.setMaxResults(1);
factory.addNamedQuery("Select_Employee_NATIVE", query);
closeEntityManager(em);
em = createEntityManager();
namedQuery = em.createNamedQuery("Select_Employee_NATIVE");
assertTrue("MaxResults not retained", namedQuery.getMaxResults() == 1);
}
public void testGetPersistenceUnitUtilOnCloseEMF(){
EntityManagerFactory emf = getEntityManagerFactory();
emf.close();
try{
emf.getPersistenceUnitUtil();
fail("IllegalStateException not thrown when calling getPersistenceUnitUtil on a closed EMF.");
} catch (IllegalStateException e){}
}
@Override
public String getPersistenceUnitName() {
return "MulitPU-1";
}
}