Author: mikedd
Date: Wed Jul 28 14:30:05 2010
New Revision: 980070
URL: http://svn.apache.org/viewvc?rev=980070&view=rev
Log:
OPENJPA-1749: Throw exception when incompatible configuration options are set
Modified:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestOverrideNonJtaDataSource.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestSwitchConnection.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties
Modified:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestOverrideNonJtaDataSource.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestOverrideNonJtaDataSource.java?rev=980070&r1=980069&r2=980070&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestOverrideNonJtaDataSource.java
(original)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestOverrideNonJtaDataSource.java
Wed Jul 28 14:30:05 2010
@@ -165,4 +165,46 @@ public class TestOverrideNonJtaDataSourc
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"));
+ }
+ }
}
Modified:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestSwitchConnection.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestSwitchConnection.java?rev=980070&r1=980069&r2=980070&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestSwitchConnection.java
(original)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestSwitchConnection.java
Wed Jul 28 14:30:05 2010
@@ -28,6 +28,7 @@ import javax.persistence.RollbackExcepti
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 extend
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"));
+ }
+ }
}
Modified:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java?rev=980070&r1=980069&r2=980070&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
(original)
+++
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
Wed Jul 28 14:30:05 2010
@@ -48,6 +48,7 @@ import org.apache.openjpa.persistence.cr
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);
+ }
+ }
+ }
}
Modified:
openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties?rev=980070&r1=980069&r2=980070&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties
(original)
+++
openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties
Wed Jul 28 14:30:05 2010
@@ -240,3 +240,5 @@ override-named-query-lock-mode: Encounte
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}".