You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by mi...@apache.org on 2010/07/28 22:32:42 UTC

svn commit: r980199 - in /openjpa/branches/2.0.x: openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/update/ openjpa-persistence/src/main/java/org/apach...

Author: mikedd
Date: Wed Jul 28 20:32:42 2010
New Revision: 980199

URL: http://svn.apache.org/viewvc?rev=980199&view=rev
Log:
OPENJPA-1749: Throw exception when incompatible configuration options are set

Modified:
    openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestOverrideNonJtaDataSource.java
    openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestSwitchConnection.java
    openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/update/TestTimestampVersion.java
    openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
    openjpa/branches/2.0.x/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties

Modified: openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestOverrideNonJtaDataSource.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestOverrideNonJtaDataSource.java?rev=980199&r1=980198&r2=980199&view=diff
==============================================================================
--- openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestOverrideNonJtaDataSource.java (original)
+++ openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestOverrideNonJtaDataSource.java Wed Jul 28 20:32:42 2010
@@ -165,5 +165,47 @@ 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/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestSwitchConnection.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestSwitchConnection.java?rev=980199&r1=980198&r2=980199&view=diff
==============================================================================
--- openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestSwitchConnection.java (original)
+++ openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/conf/TestSwitchConnection.java Wed Jul 28 20:32:42 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/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/update/TestTimestampVersion.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/update/TestTimestampVersion.java?rev=980199&r1=980198&r2=980199&view=diff
==============================================================================
--- openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/update/TestTimestampVersion.java (original)
+++ openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/update/TestTimestampVersion.java Wed Jul 28 20:32:42 2010
@@ -89,6 +89,4 @@ public class TestTimestampVersion extend
         int newVersion = pc.getVersion();
         assertEquals(newVersion, oldVersion+1);
     }
-
-	
 }

Modified: openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java?rev=980199&r1=980198&r2=980199&view=diff
==============================================================================
--- openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java (original)
+++ openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java Wed Jul 28 20:32:42 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/branches/2.0.x/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties?rev=980199&r1=980198&r2=980199&view=diff
==============================================================================
--- openjpa/branches/2.0.x/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties (original)
+++ openjpa/branches/2.0.x/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties Wed Jul 28 20:32:42 2010
@@ -232,3 +232,5 @@ cache-retrieve-override: The setting of 
 null-detach: Can not detach null entity
 override-named-query-lock-mode: Encountered a read lock level less than LockModeType.READ when processing the \
 NamedQuery {0} "{1}" in class "{2}". Setting query lock level to LockModeType.READ.
+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}".