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 2009/09/22 16:45:26 UTC

svn commit: r817679 - in /openjpa/trunk: openjpa-kernel/src/main/java/org/apache/openjpa/conf/ openjpa-kernel/src/main/java/org/apache/openjpa/writebehind/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/writebehind/

Author: mikedd
Date: Tue Sep 22 14:45:26 2009
New Revision: 817679

URL: http://svn.apache.org/viewvc?rev=817679&view=rev
Log:
OPENJPA-1298: 
Remove WriteBehindCallbackManager which 'shared' a single callback with multiple EMFs unintentionally

Removed:
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/writebehind/WriteBehindCallbackManager.java
Modified:
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/writebehind/AbstractWriteBehindTestCase.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/writebehind/TestWriteBehindConfiguration.java

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java?rev=817679&r1=817678&r2=817679&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java Tue Sep 22 14:45:26 2009
@@ -74,7 +74,6 @@
 import org.apache.openjpa.writebehind.WriteBehindCacheManager;
 import org.apache.openjpa.writebehind.WriteBehindCacheManagerImpl;
 import org.apache.openjpa.writebehind.WriteBehindCallback;
-import org.apache.openjpa.writebehind.WriteBehindCallbackManager;
 
 /**
  * Implementation of the {@link OpenJPAConfiguration} interface.
@@ -1759,16 +1758,9 @@
         
     }
     public WriteBehindCallback getWriteBehindCallbackInstance() {
-        WriteBehindCallback callback =
-            (WriteBehindCallback) writeBehindCallbackPlugin.get();
-        
+        WriteBehindCallback callback = (WriteBehindCallback) writeBehindCallbackPlugin.get();
         if (callback == null) {
-            WriteBehindCallbackManager manager = WriteBehindCallbackManager.getInstance();
-            callback = manager.getCallback(getWriteBehindCallback());
-            if (callback == null) {
-                callback = (WriteBehindCallback) writeBehindCallbackPlugin.instantiate(WriteBehindCallback.class, this);
-                manager.putCallback(getWriteBehindCallback(), callback);
-            }
+            callback = (WriteBehindCallback) writeBehindCallbackPlugin.instantiate(WriteBehindCallback.class, this);
         }
         return callback;
     }

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/writebehind/AbstractWriteBehindTestCase.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/writebehind/AbstractWriteBehindTestCase.java?rev=817679&r1=817678&r2=817679&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/writebehind/AbstractWriteBehindTestCase.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/writebehind/AbstractWriteBehindTestCase.java Tue Sep 22 14:45:26 2009
@@ -27,7 +27,6 @@
 import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
 import org.apache.openjpa.persistence.OpenJPAEntityManagerSPI;
 import org.apache.openjpa.persistence.test.AbstractCachedEMFTestCase;
-import org.apache.openjpa.persistence.test.PersistenceTestCase;
 import org.apache.openjpa.writebehind.WriteBehindCache;
 import org.apache.openjpa.writebehind.WriteBehindCacheManager;
 import org.apache.openjpa.writebehind.WriteBehindCallback;

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/writebehind/TestWriteBehindConfiguration.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/writebehind/TestWriteBehindConfiguration.java?rev=817679&r1=817678&r2=817679&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/writebehind/TestWriteBehindConfiguration.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/writebehind/TestWriteBehindConfiguration.java Tue Sep 22 14:45:26 2009
@@ -18,12 +18,13 @@
  */
 package org.apache.openjpa.jdbc.writebehind;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
 import javax.persistence.Persistence;
-import javax.persistence.PersistenceException;
 
+import org.apache.openjpa.conf.OpenJPAConfigurationImpl;
 import org.apache.openjpa.datacache.DataCacheStoreManager;
 import org.apache.openjpa.kernel.DelegatingStoreManager;
 import org.apache.openjpa.persistence.EntityManagerImpl;
@@ -33,7 +34,6 @@
 import org.apache.openjpa.writebehind.WriteBehindCache;
 import org.apache.openjpa.writebehind.WriteBehindCacheManager;
 import org.apache.openjpa.writebehind.WriteBehindCallback;
-import org.apache.openjpa.writebehind.WriteBehindException;
 import org.apache.openjpa.writebehind.WriteBehindStoreManager;
 
 public class TestWriteBehindConfiguration extends AbstractWriteBehindTestCase {
@@ -104,6 +104,42 @@
             callback instanceof CustomWriteBehindCallback);
     }
     
+    
+    public void testWriteBehindCallbackCreatedForEachConfiguration() {
+        OpenJPAEntityManagerFactorySPI emf1 = emf;
+        ArrayList<Object> clonedProps = new ArrayList<Object>();
+        for(Object o : writeBehindProps) {
+            // quick and dirty way to alter the properties, this should prevent the cached EMF from being reused.
+            if(o.toString().equals("unsupported")) {
+                // just change the runtimeUnenhancedClasses value.
+                clonedProps.add("supported");
+            }
+            else {
+                clonedProps.add(o);
+            }
+        }
+        OpenJPAEntityManagerFactorySPI emf2 = createEMF(clonedProps.toArray()); 
+        assertNotNull("Unable to create first EntityManager ", emf1);
+        assertNotNull("Unable to create second EntityManager ", emf2);
+        assertNotSame("Test is invalid if the same EMF is used", emf1, emf2);
+
+        OpenJPAConfigurationImpl conf1 = (OpenJPAConfigurationImpl) emf1.getConfiguration();
+        OpenJPAConfigurationImpl conf2 = (OpenJPAConfigurationImpl) emf2.getConfiguration();
+
+        assertNotNull(conf1);
+        assertNotNull(conf2);
+        assertNotSame("Configuration objects for different EMFs should not be the same", conf1, conf2);
+
+        assertNotSame("Each Configuration should have its own WriteBehindCallbackPlugins",
+            conf1.writeBehindCallbackPlugin, conf2.writeBehindCallbackPlugin);
+        
+        WriteBehindCallback wbc1 = conf1.getWriteBehindCallbackInstance();
+        WriteBehindCallback wbc2 = conf2.getWriteBehindCallbackInstance();
+        assertNotNull(wbc1);
+        assertNotNull(wbc2);
+        assertNotSame("Each Configuration should have its own WriteBehindCallback", wbc1, wbc2);
+    }
+    
     public OpenJPAEntityManagerFactorySPI getCustomFactory(
         Map<String, Object> extraProps) {
         Map<String, Object> props = getPropertiesMap(getDefaultWriteBehindProperties());