blob: 42838ef67fff61935d391720086cd410518e5ed9 [file] [log] [blame]
/*
* TestOpenJPAEntityManagerFactoryImpl.java
*
* Created on October 13, 2006, 10:54 AM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.openjpa.persistence.kernel;
import java.util.Map;
import org.apache.openjpa.persistence.kernel.common.apps.RuntimeTest1;
import org.apache.openjpa.persistence.kernel.common.apps.RuntimeTest4;
import org.apache.openjpa.conf.OpenJPAConfiguration;
import org.apache.openjpa.conf.OpenJPAConfigurationImpl;
import org.apache.openjpa.event.LifecycleEvent;
import org.apache.openjpa.event.LoadListener;
import org.apache.openjpa.kernel.AbstractBrokerFactory;
import org.apache.openjpa.kernel.BrokerImpl;
import org.apache.openjpa.kernel.StoreManager;
import org.apache.openjpa.lib.conf.ConfigurationProvider;
import org.apache.openjpa.meta.MetaDataRepository;
import org.apache.openjpa.persistence.JPAFacadeHelper;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactory;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
import org.apache.openjpa.persistence.OpenJPAPersistence;
public class TestPersistenceManagerFactoryImpl extends BaseKernelTest {
private OpenJPAConfiguration _conf = null;
/**
* Creates a new instance of TestOpenJPAEntityManagerFactoryImpl
*/
public TestPersistenceManagerFactoryImpl() {
}
public TestPersistenceManagerFactoryImpl(String test) {
super(test);
}
public void setUp() {
_conf = new OpenJPAConfigurationImpl();
_conf.setConnection2UserName("user");
_conf.setConnection2Password("pass");
_conf.setConnection2URL("url");
}
/**
* Test that configuration is frozen after retrieving a factory.
*
* This test case is for kodo persistencemanagerfactories and not openjpaentitymanagers.
* therefore its been commented out.
* FIX ME: aokeke
*/
/* public void testConfigurationFreeze()
{
OpenJPAEntityManagerFactory pmf = getOpenJPAEntityManagerFactory(_conf.toProperties(false));
assertEquals("user", pmf.getConfiguration().getConnection2UserName());
assertEquals("url", pmf.getConfiguration().getConnection2URL());
try
{
pmf.getConfiguration().setConnection2URL("url2");
fail("Allowed configuration change.");
}
catch (Exception e)
{
}
}*/
/**
* Test that persistence manager factories are being pooled.
*
* This test case is for kodo persistencemanagerfactories. It doesnt apply to
* openjpaentitymanagerfactories therefore it will be commented out.
* FIX ME: aokeke
*/
/*public void testFactoryPooling() {
Properties props = new Properties();
props.putAll(_conf.toProperties(false));
OpenJPAEntityManagerFactory pmf1 = getOpenJPAEntityManagerFactory(props);
props = new Properties();
props.putAll(_conf.toProperties(false));
OpenJPAEntityManagerFactory pmf2 = getOpenJPAEntityManagerFactory(props);
props = new Properties();
props.putAll(_conf.toProperties(false));
OpenJPAEntityManagerFactory pmf3 = getOpenJPAEntityManagerFactory(props);
_conf.setConnectionURL("url2");
props = new Properties();
props.putAll(_conf.toProperties(false));
OpenJPAEntityManagerFactory pmf4 = getOpenJPAEntityManagerFactory
(_conf.toProperties(false));
props = new Properties();
props.putAll(_conf.toProperties(false));
OpenJPAEntityManagerFactory pmf5 = getOpenJPAEntityManagerFactory(_conf.toProperties(false));
assertTrue(JPAFacadeHelper.toBrokerFactory(pmf1) == JPAFacadeHelper.toBrokerFactory(pmf2));
assertTrue(JPAFacadeHelper.toBrokerFactory(pmf1) == JPAFacadeHelper.toBrokerFactory(pmf3));
assertTrue(JPAFacadeHelper.toBrokerFactory(pmf1) != JPAFacadeHelper.toBrokerFactory(pmf4));
assertTrue(JPAFacadeHelper.toBrokerFactory(pmf4) == JPAFacadeHelper.toBrokerFactory(pmf5));
}*/
/**
* Tests that lifecycle listeners are transferred from factory to
* persistence managers.
*/
public void testFactoryLifecycleListeners() {
OpenJPAEntityManagerFactory pmf =
(OpenJPAEntityManagerFactory) getEmf();
OpenJPAEntityManagerFactorySPI pmfSPI =
((OpenJPAEntityManagerFactorySPI) OpenJPAPersistence.cast(pmf));
//FIXME jthomas
LoadListener listener = new LoadListener() {
public void afterLoad(LifecycleEvent ev) {
}
public void afterRefresh(LifecycleEvent ev) {
}
};
pmfSPI
.addLifecycleListener(listener, new Class[]{ RuntimeTest4.class });
try {
BrokerImpl broker = (BrokerImpl) JPAFacadeHelper.toBroker
(pmf.createEntityManager());
MetaDataRepository repos = broker.getConfiguration().
getMetaDataRepositoryInstance();
assertTrue("no listeners defined added to Runtimetest4",
broker.getLifecycleEventManager().hasLoadListeners(
new RuntimeTest4("foo"),
repos.getMetaData(RuntimeTest4.class, null, true)));
assertFalse("there should be listeners def for runtimetest1",
broker.getLifecycleEventManager().hasLoadListeners
(new RuntimeTest1(), repos.getMetaData
(RuntimeTest1.class, null, true)));
broker.close();
} finally {
pmfSPI.removeLifecycleListener(listener);
}
}
/**
* Tests that pooling is maintained on deserialization.
* This test case is for kodo persistencemanagerfactories. It doesnt apply to
* openjpaentitymanagerfactories therefore it will be commented out.
*/
/*
public void testFactorySerialization()
throws Exception {
OpenJPAEntityManagerFactory pmf1 = getOpenJPAEntityManagerFactory(_conf.toProperties(false));
Object pmf2 = roundtrip(pmf1, true);
assertEquals(pmf1, pmf2);
assertTrue(JPAFacadeHelper.toBrokerFactory(pmf1) ==
JPAFacadeHelper.toBrokerFactory((OpenJPAEntityManagerFactory) pmf2));
}
*/
/**
* Tests that the <code>Platform</code> property is set by the
* concrete PMF implementation.
*/
public void testPlatform() {
OpenJPAEntityManagerFactory pmf =
(OpenJPAEntityManagerFactory) getEmf();
assertNotNull(pmf.getProperties().getProperty("Platform"));
}
protected OpenJPAEntityManagerFactory getEmf(Map props) {
props.put("openjpa.BrokerFactory", BrokerFactoryTest.class.getName());
return (OpenJPAEntityManagerFactory) super.getEmf(props);
}
public static class BrokerFactoryTest extends AbstractBrokerFactory {
// standard brokerfactory getter implemented by subclasses
public static synchronized BrokerFactoryTest getInstance(
ConfigurationProvider cp) {
Object key = toPoolKey(cp.getProperties());
BrokerFactoryTest factory =
(BrokerFactoryTest) getPooledFactoryForKey(key);
if (factory != null)
return factory;
factory = newInstance(cp);
pool(key, factory);
return factory;
}
// standard brokerfactory getter implemented by subclasses
public static BrokerFactoryTest newInstance(ConfigurationProvider cp) {
OpenJPAConfigurationImpl conf = new OpenJPAConfigurationImpl();
cp.setInto(conf);
return new BrokerFactoryTest(conf);
}
protected BrokerFactoryTest(OpenJPAConfiguration conf) {
super(conf);
}
protected StoreManager newStoreManager() {
return null;
}
}
}