blob: ab8f2487f58d676c7350e75ddfe515d507bc1833 [file] [log] [blame]
package testing.simple.sequencing;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertTrue;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.dynamic.DynamicClassLoader;
import org.eclipse.persistence.dynamic.DynamicEntity;
import org.eclipse.persistence.dynamic.DynamicHelper;
import org.eclipse.persistence.dynamic.DynamicType;
import org.eclipse.persistence.dynamic.DynamicTypeBuilder;
import org.eclipse.persistence.internal.dynamic.DynamicTypeImpl;
import org.eclipse.persistence.jpa.JpaHelper;
import org.eclipse.persistence.jpa.dynamic.JPADynamicHelper;
import org.eclipse.persistence.jpa.dynamic.JPADynamicTypeBuilder;
import org.eclipse.persistence.sequencing.TableSequence;
import org.eclipse.persistence.sessions.IdentityMapAccessor;
import org.eclipse.persistence.sessions.server.Server;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class DefaultSequencing {
private static EntityManagerFactory emf;
public static final String TABLE_NAME = "SIMPLE_TABLE_SEQ";
public static final String ENTITY_TYPE = "Simple";
@Test
public void verifyConfig() throws Exception {
Server session = JpaHelper.getServerSession(emf);
ClassDescriptor descriptor = session.getClassDescriptorForAlias(ENTITY_TYPE);
assertNotNull("No descriptor found for alias: " + ENTITY_TYPE, descriptor);
DynamicHelper helper = new DynamicHelper(session);
DynamicTypeImpl simpleType = (DynamicTypeImpl) helper.getType(ENTITY_TYPE);
assertNotNull("EntityType not found for alias: " + ENTITY_TYPE, simpleType);
assertEquals(descriptor, simpleType.getDescriptor());
}
@Test
public void createSingleInstances() {
Server session = JpaHelper.getServerSession(emf);
DynamicHelper helper = new DynamicHelper(session);
DynamicTypeImpl simpleType = (DynamicTypeImpl) helper.getType(ENTITY_TYPE);
EntityManager em = emf.createEntityManager();
DynamicEntity simpleInstance = createSimpleInstance(emf, 1);
int simpleCount = ((Number) em.createQuery("SELECT COUNT(o) FROM " + ENTITY_TYPE + " o").getSingleResult()).intValue();
assertEquals(1, simpleCount);
IdentityMapAccessor cache = session.getIdentityMapAccessor();
assertTrue(cache.containsObjectInIdentityMap(simpleInstance));
em.clear();
cache.initializeAllIdentityMaps();
DynamicEntity findResult = (DynamicEntity) em.find(simpleType.getJavaClass(), 1);
assertNotNull(findResult);
assertEquals(simpleInstance.get("id"), findResult.get("id"));
assertEquals(simpleInstance.get("value1"), findResult.get("value1"));
em.close();
}
@Test
public void createTwoInstances() {
EntityManager em = emf.createEntityManager();
DynamicHelper helper = new JPADynamicHelper(em);
DynamicTypeImpl simpleType = (DynamicTypeImpl) helper.getType(ENTITY_TYPE);
DynamicEntity simpleInstance1 = createSimpleInstance(emf, 1);
DynamicEntity simpleInstance2 = createSimpleInstance(emf, 2);
int simpleCount = ((Number) em.createQuery("SELECT COUNT(o) FROM " + ENTITY_TYPE + " o").getSingleResult()).intValue();
assertEquals(2, simpleCount);
IdentityMapAccessor cache = helper.getSession().getIdentityMapAccessor();
assertTrue(cache.containsObjectInIdentityMap(simpleInstance1));
assertTrue(cache.containsObjectInIdentityMap(simpleInstance2));
em.clear();
cache.initializeAllIdentityMaps();
DynamicEntity findResult1 = (DynamicEntity) em.find(simpleType.getJavaClass(), 1);
DynamicEntity findResult2 = (DynamicEntity) em.find(simpleType.getJavaClass(), 2);
assertNotNull(findResult1);
assertNotNull(findResult2);
assertEquals(simpleInstance1.get("id"), findResult1.get("id"));
assertEquals(simpleInstance2.get("value1"), findResult2.get("value1"));
em.close();
}
public DynamicEntity createSimpleInstance(EntityManagerFactory emf, int expectedId) {
EntityManager em = emf.createEntityManager();
DynamicHelper helper = new JPADynamicHelper(em);
DynamicType simpleEntityType = helper.getType(ENTITY_TYPE);
Assert.assertNotNull(simpleEntityType);
DynamicEntity simpleInstance = simpleEntityType.newDynamicEntity();
simpleInstance.set("value1", TABLE_NAME);
em.getTransaction().begin();
assertEquals(0, simpleInstance.get("id"));
em.persist(simpleInstance);
assertEquals(expectedId, simpleInstance.get("id"));
em.getTransaction().commit();
em.close();
return simpleInstance;
}
@BeforeClass
public static void setUp() {
emf = Persistence.createEntityManagerFactory("empty");
DynamicHelper helper = new JPADynamicHelper(emf);
DynamicClassLoader dcl = helper.getDynamicClassLoader();
Class<?> javaType = dcl.createDynamicClass("model.sequencing." + ENTITY_TYPE);
DynamicTypeBuilder typeBuilder = new JPADynamicTypeBuilder(javaType, null, TABLE_NAME);
typeBuilder.setPrimaryKeyFields("SID");
typeBuilder.addDirectMapping("id", int.class, "SID");
typeBuilder.addDirectMapping("value1", String.class, "VAL_1");
TableSequence defaultSequence = (TableSequence) helper.getSession().getLogin().getDefaultSequence();
defaultSequence.setTableName("TEST_SEQ");
typeBuilder.configureSequencing(ENTITY_TYPE + "_SEQ", "SID");
helper.addTypes(true, true, typeBuilder.getType());
}
@Before
public void clearSimpleTypeInstances() {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.createQuery("DELETE FROM " + ENTITY_TYPE).executeUpdate();
em.createNativeQuery("UPDATE TEST_SEQ SET SEQ_COUNT = 0").executeUpdate();
em.getTransaction().commit();
em.close();
JpaHelper.getServerSession(emf).getSequencingControl().initializePreallocated();
}
@AfterClass
public static void shutdown() {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.createNativeQuery("DROP TABLE " + TABLE_NAME + " CASCADE CONSTRAINTS").executeUpdate();
em.createNativeQuery("DROP TABLE TEST_SEQ CASCADE CONSTRAINTS").executeUpdate();
em.getTransaction().commit();
em.close();
emf.close();
}
}