mirror of https://github.com/apache/openjpa.git
OPENJPA-1749: Throw exception when incompatible configuration options are set
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@980070 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d27ca8ef8a
commit
e97e42b3eb
|
@ -165,4 +165,46 @@ public class TestOverrideNonJtaDataSource extends AbstractPersistenceTestCase {
|
|||
assertTrue(e.getMessage().contains("EntityManager")); // ensure where the JNDI name came from is in message
|
||||
}
|
||||
}
|
||||
|
||||
public void testDataCache() {
|
||||
EntityManagerFactory emf = null;
|
||||
|
||||
emf = getEmf("openjpa.DataCache", "true");
|
||||
try {
|
||||
getEm(emf, "openjpa.ConnectionFactoryName", "jdbc/NotReal");
|
||||
fail("Expected an excepton when creating an EM with a bogus JNDI name");
|
||||
} catch (ArgumentException e) {
|
||||
assertTrue(e.isFatal());
|
||||
assertTrue(e.getMessage().contains("jdbc/NotReal"));
|
||||
assertTrue(e.getMessage().contains("L2 Cache"));
|
||||
}
|
||||
}
|
||||
|
||||
public void testQueryCache() {
|
||||
EntityManagerFactory emf = null;
|
||||
|
||||
emf = getEmf("openjpa.QueryCache", "true");
|
||||
try {
|
||||
getEm(emf, "openjpa.ConnectionFactoryName", "jdbc/NotReal");
|
||||
fail("Expected an excepton when creating an EM with a bogus JNDI name");
|
||||
} catch (ArgumentException e) {
|
||||
assertTrue(e.isFatal());
|
||||
assertTrue(e.getMessage().contains("jdbc/NotReal"));
|
||||
assertTrue(e.getMessage().contains("openjpa.QueryCache"));
|
||||
}
|
||||
}
|
||||
|
||||
public void testSyncMappings() {
|
||||
EntityManagerFactory emf = null;
|
||||
|
||||
emf = getEmf("openjpa.jdbc.SynchronizeMappings", "buildSchema");
|
||||
try {
|
||||
getEm(emf, "openjpa.ConnectionFactoryName", "jdbc/NotReal");
|
||||
fail("Expected an excepton when creating an EM with a bogus JNDI name");
|
||||
} catch (ArgumentException e) {
|
||||
assertTrue(e.isFatal());
|
||||
assertTrue(e.getMessage().contains("jdbc/NotReal"));
|
||||
assertTrue(e.getMessage().contains("openjpa.jdbc.SynchronizeMappings"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ import javax.persistence.RollbackException;
|
|||
|
||||
import org.apache.openjpa.persistence.ArgumentException;
|
||||
import org.apache.openjpa.persistence.test.AbstractPersistenceTestCase;
|
||||
import org.apache.openjpa.util.UserException;
|
||||
|
||||
public class TestSwitchConnection extends AbstractPersistenceTestCase {
|
||||
private String defaultJndiName = "jdbc/mocked";
|
||||
|
@ -159,4 +160,46 @@ public class TestSwitchConnection extends AbstractPersistenceTestCase {
|
|||
assertTrue(e.getMessage().contains("EntityManager")); // ensure where the JNDI name came from is in message
|
||||
}
|
||||
}
|
||||
|
||||
public void testDataCache() {
|
||||
EntityManagerFactory emf = null;
|
||||
|
||||
emf = getEmf("openjpa.DataCache", "true");
|
||||
try {
|
||||
getEm(emf, "openjpa.ConnectionFactoryName", "jdbc/NotReal");
|
||||
fail("Expected an excepton when creating an EM with a bogus JNDI name");
|
||||
} catch (ArgumentException e) {
|
||||
assertTrue(e.isFatal());
|
||||
assertTrue(e.getMessage().contains("jdbc/NotReal"));
|
||||
assertTrue(e.getMessage().contains("L2 Cache"));
|
||||
}
|
||||
}
|
||||
|
||||
public void testQueryCache() {
|
||||
EntityManagerFactory emf = null;
|
||||
|
||||
emf = getEmf("openjpa.QueryCache", "true");
|
||||
try {
|
||||
getEm(emf, "openjpa.ConnectionFactoryName", "jdbc/NotReal");
|
||||
fail("Expected an excepton when creating an EM with a bogus JNDI name");
|
||||
} catch (ArgumentException e) {
|
||||
assertTrue(e.isFatal());
|
||||
assertTrue(e.getMessage().contains("jdbc/NotReal"));
|
||||
assertTrue(e.getMessage().contains("openjpa.QueryCache"));
|
||||
}
|
||||
}
|
||||
|
||||
public void testSyncMappings() {
|
||||
EntityManagerFactory emf = null;
|
||||
|
||||
emf = getEmf("openjpa.jdbc.SynchronizeMappings", "buildSchema");
|
||||
try {
|
||||
getEm(emf, "openjpa.ConnectionFactoryName", "jdbc/NotReal");
|
||||
fail("Expected an excepton when creating an EM with a bogus JNDI name");
|
||||
} catch (ArgumentException e) {
|
||||
assertTrue(e.isFatal());
|
||||
assertTrue(e.getMessage().contains("jdbc/NotReal"));
|
||||
assertTrue(e.getMessage().contains("openjpa.jdbc.SynchronizeMappings"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,6 +48,7 @@ import org.apache.openjpa.persistence.criteria.OpenJPACriteriaBuilder;
|
|||
import org.apache.openjpa.persistence.meta.MetamodelImpl;
|
||||
import org.apache.openjpa.persistence.query.OpenJPAQueryBuilder;
|
||||
import org.apache.openjpa.persistence.query.QueryBuilderImpl;
|
||||
import org.apache.openjpa.util.UserException;
|
||||
|
||||
/**
|
||||
* Implementation of {@link EntityManagerFactory} that acts as a
|
||||
|
@ -214,8 +215,14 @@ public class EntityManagerFactoryImpl
|
|||
}
|
||||
|
||||
if (log != null && log.isTraceEnabled()) {
|
||||
log.trace("Found ConnectionFactoryName from props: " + cfName);
|
||||
if(StringUtils.isNotEmpty(cfName)) {
|
||||
log.trace("Found ConnectionFactoryName from props: " + cfName);
|
||||
}
|
||||
if(StringUtils.isNotEmpty(cf2Name)) {
|
||||
log.trace("Found ConnectionFactory2Name from props: " + cf2Name);
|
||||
}
|
||||
}
|
||||
validateCfNameProps(conf, cfName, cf2Name);
|
||||
|
||||
Broker broker = _factory.newBroker(user, pass, managed, retainMode, false, cfName, cf2Name);
|
||||
|
||||
|
@ -357,4 +364,29 @@ public class EntityManagerFactoryImpl
|
|||
return (OpenJPAPersistenceUtil.isManagedBy(this, entity) &&
|
||||
(OpenJPAPersistenceUtil.isLoaded(entity, attribute) == LoadState.LOADED));
|
||||
}
|
||||
|
||||
private void validateCfNameProps(OpenJPAConfiguration conf, String cfName, String cf2Name) {
|
||||
if (StringUtils.isNotEmpty(cfName) || StringUtils.isNotEmpty(cf2Name)) {
|
||||
if (conf.getDataCache() != "false" && conf.getDataCache() != null) {
|
||||
throw new ArgumentException(_loc.get("invalid-cfname-prop", new Object[] {
|
||||
"openjpa.DataCache (L2 Cache)",
|
||||
cfName,
|
||||
cf2Name }), null, null, true);
|
||||
|
||||
}
|
||||
if (conf.getQueryCache() != "false" && conf.getQueryCache() != null) {
|
||||
throw new ArgumentException(_loc.get("invalid-cfname-prop", new Object[] {
|
||||
"openjpa.QueryCache",
|
||||
cfName,
|
||||
cf2Name }), null, null, true);
|
||||
}
|
||||
Object syncMap = conf.toProperties(false).get("openjpa.jdbc.SynchronizeMappings");
|
||||
if(syncMap != null) {
|
||||
throw new ArgumentException(_loc.get("invalid-cfname-prop", new Object[] {
|
||||
"openjpa.jdbc.SynchronizeMappings",
|
||||
cfName,
|
||||
cf2Name }), null, null, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -240,3 +240,5 @@ override-named-query-lock-mode: Encountered a read lock level less than LockMode
|
|||
NamedQuery {0} "{1}" in class "{2}". Setting query lock level to LockModeType.READ.
|
||||
access-default: Access style for "{0}" can not be determined. The default access of level of "{1}" will be used.
|
||||
invalid-oid: An incorrect object id type was encountered. Expected "{0}" but was passed "{1}".
|
||||
invalid-cfname-prop: The "{0}" configuration option is not valid when the DataSource JNDI name(s) are provided \
|
||||
when you create an EntityManager. Found jtaDataSource: "{1}", nonJtaDataSource: "{2}".
|
||||
|
|
Loading…
Reference in New Issue