blob: bdb7a7b71424dc4adfceb5e478185f5acee28ba5 [file] [log] [blame]
/*
* Copyright (c) 2017, 2020 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:
// 10/24/2017-3.0 Tomas Kraus
// - 526419: Modify EclipseLink to reflect changes in JTA 1.1.
package org.eclipse.persistence.testing.tests.jpa22.jta;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.PersistenceContext;
import org.eclipse.persistence.internal.sessions.AbstractSession;
import org.eclipse.persistence.logging.AbstractSessionLog;
import org.eclipse.persistence.logging.SessionLog;
import org.eclipse.persistence.testing.framework.junit.JUnitTestCase;
import org.eclipse.persistence.testing.models.jpa22.jta.Animal;
import org.eclipse.persistence.testing.models.jpa22.jta.AnimalCheck;
import org.eclipse.persistence.testing.models.jpa22.jta.AnimalDAO;
import org.eclipse.persistence.testing.models.jpa22.jta.AnimalDAOUpdate;
import org.eclipse.persistence.testing.models.jpa22.jta.AnimalEvent;
import org.eclipse.persistence.transaction.JTA11TransactionController;
import junit.framework.Test;
import junit.framework.TestSuite;
/**
* Test transaction controller extensions for JTA 1.1.
* Test suite is activated only for server side tests.
*/
public class JTA11TransactionControllerTest extends JUnitTestCase {
/** AnimalDAO JNDI name. */
static final String ANIMAL_DAO_JNDI = "java:global/eclipselink-jpa22-model/eclipselink-jpa22-model_ejb/AnimalDAO";
/** AnimalDAOUpdate JNDI name. */
static final String ANIMAL_DAO_UPDATE_JNDI = "java:global/eclipselink-jpa22-model/eclipselink-jpa22-model_ejb/AnimalDAOUpdate";
/** AnimalCheck JNDI name. */
static final String ANIMAL_CHECK_JNDI = "java:global/eclipselink-jpa22-model/eclipselink-jpa22-model_ejb/AnimalCheck";
/**
* Creates jUnit test suite for this test class.
*
* @return jUnit test suite for this test class
*/
public static Test suite() {
TestSuite suite = new TestSuite();
suite.setName("JTA11TransactionControllerTest");
suite.addTest(new JTA11TransactionControllerTest("testCreateAndUpdateEntity"));
return suite;
}
/**
* Creates an instance of transaction controller extensions for JTA 1.1 test.
*/
public JTA11TransactionControllerTest() {
super();
}
/**
* Creates an instance of transaction controller extensions for JTA 1.1 test.
*
* @param name jUnit test name
*/
public JTA11TransactionControllerTest(final String name) {
super(name);
}
/**
* Test create and update entity using {@code JTA11TransactionController}.
* Check that cached and persisted values are correct.
*/
public void testCreateAndUpdateEntity() throws Exception {
if (!isJTA11) {
return;
}
AbstractSessionLog.getLog().log(SessionLog.INFO, "Running test: {0}", new String[] { "JTA11TransactionControllerTest.testCreateAndUpdateEntity" }, false);
AnimalDAO animalDAO = lookupEJB(AnimalDAO.class, ANIMAL_DAO_JNDI);
if (animalDAO == null) {
fail("Could not lookup AnimalDAO Stateful EJB");
}
Animal animal = animalDAO.createAnimal(1, "Toby", null);
AnimalDAOUpdate animalDAOUpdate = lookupEJB(AnimalDAOUpdate.class, ANIMAL_DAO_UPDATE_JNDI);
if (animalDAO == null) {
fail("Could not lookup AnimalDAOUpdate Stateful EJB");
}
AnimalCheck check = lookupEJB(AnimalCheck.class, ANIMAL_CHECK_JNDI);
if (animalDAO == null) {
fail("Could not lookup AnimalCheck Singleton EJB");
}
// Update EJB does the check before transaction commit so we expect "Toby" to be there
Animal animal2 = animalDAOUpdate.updateAnimal(1, "Buster", check);
String preRefreshName1 = check.getPreRefreshName();
String postRefreshName1 = check.getPostRefreshName();
assertEquals("Toby", preRefreshName1);
assertEquals("Toby", postRefreshName1);
// Calling check after exiting from EJB (after transaction commit) so we expect "Buster" to be there
check.onEvent(AnimalEvent.update(animal, animal2));
String preRefreshName2 = check.getPreRefreshName();
String postRefreshName2 = check.getPostRefreshName();
assertEquals("Buster", preRefreshName2);
assertEquals("Buster", postRefreshName2);
}
}