blob: ef84565eb7933c1ba8aabfbb2e432fc4324008ba [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:
// 08/01/2012-2.5 Chris Delahunt
// - 371950: Metadata caching
package org.eclipse.persistence.testing.tests.jpa.advanced;
import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import jakarta.persistence.EntityManager;
import org.eclipse.persistence.config.PersistenceUnitProperties;
import org.eclipse.persistence.jpa.JpaHelper;
import org.eclipse.persistence.jpa.metadata.FileBasedProjectCache;
import org.eclipse.persistence.logging.SessionLog;
import org.eclipse.persistence.sessions.Project;
import org.eclipse.persistence.sessions.Session;
import org.eclipse.persistence.testing.tests.jpa.advanced.compositepk.AdvancedCompositePKJunitTest;
import junit.framework.TestSuite;
import junit.framework.Test;
import org.eclipse.persistence.testing.framework.junit.JUnitTestCase;
/**
* @author cdelahun
*
*/
public class MetadataCachingTestSuite extends JUnitTestCase {
String fileName = "MetadataCachingTestProject.file";
public MetadataCachingTestSuite() {
super();
}
public MetadataCachingTestSuite(String name) {
super(name);
}
public static Test suite() {
TestSuite suite = new TestSuite();
suite.setName("MetadataCachingTestSuite");
suite.addTest(new MetadataCachingTestSuite("testProjectCacheALLWithDefaultPU"));
return suite;
}
public Map getProperties() {
Map properties = new HashMap();
properties.put(PersistenceUnitProperties.DDL_GENERATION, PersistenceUnitProperties.NONE);
//this causes deployment to occur on refreshMetadata rather than wait until an em is obtained
properties.put(PersistenceUnitProperties.DEPLOY_ON_STARTUP, "true");
//property we are testing:
properties.put(PersistenceUnitProperties.PROJECT_CACHE, "java-serialization");
properties.put(PersistenceUnitProperties.PROJECT_CACHE_FILE, fileName);
return properties;
}
public void testSetup() {
boolean exists = false;
File file = new File(fileName);
//remove the file if it already exists so it can be created in testing
exists = file.exists()? !file.delete() : false;
if (exists) {
fail("the file exists and could not be removed. file: "+fileName);
}
}
public void testFileBasedProjectCacheWriting(String persistenceUnitName) {
EntityManager em = createEntityManager(persistenceUnitName);
Map properties = getProperties();
// JEE requires a transaction to keep the em open.
beginTransaction(em);
try {
JpaHelper.getEntityManagerFactory(em).refreshMetadata(properties);
} finally {
commitTransaction(em);
closeEntityManager(em);
}
File file = new File(fileName);
if (!file.exists()) {
fail("the project cache file was not created on deployment using PROJECT_CACHE 'java-serialization'");
}
}
public void testFileBasedProjectCacheReading(String persistenceUnitName) {
FileBasedProjectCache projectCache = new FileBasedProjectCache();
Session session = getServerSession(persistenceUnitName);
Project project = projectCache.retrieveProject(getProperties(), session.getDatasourcePlatform().getConversionManager().getLoader(), session.getSessionLog());
if (project == null) {
fail("Project returned from FileBasedProjectCache.retrieveProject() was null");
}
}
/*
* This test just verifies the EM can be refreshed using the cached project written out in testFileBasedProjectCacheWriting
* It must be run after testFileBasedProjectCacheWriting and testFileBasedProjectCacheReading
*/
public void testFileBasedProjectCacheLoading(String persistenceUnitName) {
EntityManager em = createEntityManager(persistenceUnitName);
beginTransaction(em);
try {
JpaHelper.getEntityManagerFactory(em).refreshMetadata(getProperties());
} finally {
commitTransaction(em);
closeEntityManager(em);
}
}
/* Test project cache in runtime on J2EE with default persistence unit*/
public void testProjectCacheALLWithDefaultPU(){
testSetup();
testFileBasedProjectCacheWriting("default");
testFileBasedProjectCacheReading("default");
testFileBasedProjectCacheLoading("default");
}
/* Test project cache in runtime on JEE with default persistence unit*/
public void testProjectCacheWithDefaultPU(){
testFileBasedProjectCacheLoading("default");
}
}