You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by cu...@apache.org on 2010/02/18 00:00:51 UTC

svn commit: r911213 - in /openjpa/trunk: openjpa-kernel/src/main/java/org/apache/openjpa/event/LifecycleEventManager.java openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/event/TestLifecycleEventManager.java

Author: curtisr7
Date: Wed Feb 17 23:00:50 2010
New Revision: 911213

URL: http://svn.apache.org/viewvc?rev=911213&view=rev
Log:
OPENJPA-1517: Reduce synchronization in LifecycleEventManager. 

Modified:
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/LifecycleEventManager.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/event/TestLifecycleEventManager.java

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/LifecycleEventManager.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/LifecycleEventManager.java?rev=911213&r1=911212&r2=911213&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/LifecycleEventManager.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/LifecycleEventManager.java Wed Feb 17 23:00:50 2010
@@ -233,7 +233,7 @@
      * Return true if any listeners are registered for the given source and
      * event type.
      */
-    private synchronized boolean hasListeners(Object source,
+    private boolean hasListeners(Object source,
         ClassMetaData meta, int type) {
         if (meta.getLifecycleMetaData().getIgnoreSystemListeners())
             return false;

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/event/TestLifecycleEventManager.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/event/TestLifecycleEventManager.java?rev=911213&r1=911212&r2=911213&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/event/TestLifecycleEventManager.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/event/TestLifecycleEventManager.java Wed Feb 17 23:00:50 2010
@@ -19,12 +19,10 @@
 package org.apache.openjpa.persistence.event;
 
 
-import java.lang.Thread.UncaughtExceptionHandler;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
+import org.apache.openjpa.persistence.event.common.apps.RuntimeTest1;
+import org.apache.openjpa.persistence.event.common.apps.RuntimeTest2;
+import org.apache.openjpa.persistence.event.common.apps.RuntimeTest4;
+import org.apache.openjpa.persistence.common.utils.AbstractTestCase;
 import org.apache.openjpa.event.LifecycleEvent;
 import org.apache.openjpa.event.LifecycleEventManager;
 import org.apache.openjpa.event.LoadListener;
@@ -32,10 +30,7 @@
 import org.apache.openjpa.meta.ClassMetaData;
 import org.apache.openjpa.meta.MetaDataRepository;
 import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
-import org.apache.openjpa.persistence.common.utils.AbstractTestCase;
-import org.apache.openjpa.persistence.event.common.apps.RuntimeTest1;
-import org.apache.openjpa.persistence.event.common.apps.RuntimeTest2;
-import org.apache.openjpa.persistence.event.common.apps.RuntimeTest4;
+import org.apache.openjpa.persistence.OpenJPAPersistence;
 
 /**
  * <p>Test the {@link LifecycleEventManager}.</p>
@@ -43,14 +38,18 @@
  * @author Abe White
  */
 public class TestLifecycleEventManager
-    extends AbstractTestCase implements UncaughtExceptionHandler{
+    extends AbstractTestCase {
 
     public TestLifecycleEventManager(String s) {
         super(s, "eventcactusapp");
     }
 
-    public void atestAllClassListener() {
-        MetaDataRepository repos = getMDR();
+    public void testAllClassListener() {
+        MetaDataRepository repos =
+            ((OpenJPAEntityManagerFactorySPI) OpenJPAPersistence.cast(
+                OpenJPAPersistence.createEntityManagerFactory("TestConv2", "")))
+                .
+                    getConfiguration().getMetaDataRepositoryInstance();
         ClassMetaData meta = repos.getMetaData(RuntimeTest2.class, null, true);
         LifecycleEventManager mgr = new LifecycleEventManager();
         RuntimeTest2 pc = new RuntimeTest2();
@@ -119,8 +118,12 @@
         assertEquals(2, listener.store);
     }
 
-    public void atestBaseClassListener() {
-        MetaDataRepository repos = getMDR();
+    public void testBaseClassListener() {
+        MetaDataRepository repos =
+            ((OpenJPAEntityManagerFactorySPI) OpenJPAPersistence.cast(
+                OpenJPAPersistence.createEntityManagerFactory("TestConv2", "")))
+                .
+                    getConfiguration().getMetaDataRepositoryInstance();
         ClassMetaData meta = repos.getMetaData(RuntimeTest2.class, null, true);
 
         LifecycleEventManager mgr = new LifecycleEventManager();
@@ -191,62 +194,6 @@
         assertEquals(3, listener.load);
         assertEquals(1, listener.store);
     }
-    
-    public void testMultiThreaded() throws Exception{
-
-        for(int z = 0; z < 1000; z++){
-            
-            final LifecycleEventManager mgr = new LifecycleEventManager();
-            final List<Listener> listeners = new ArrayList<Listener>();
-            final ClassMetaData meta = getMDR().getMetaData(RuntimeTest2.class, null, true);
-            final RuntimeTest2 pc = new RuntimeTest2();
-            
-            for(int i = 0 ; i<10000;i++){
-                Listener l = new Listener();
-                mgr.addListener(l, null);
-                listeners.add(l);
-            }
-            
-            Thread removerThread = new Thread(){
-                public void run() {
-                    for(Listener l : listeners){
-                        mgr.removeListener(l);
-                    }
-                }
-            };
-            Thread hasLoadListenersThread = new Thread(){
-                @Override
-                public void run() {
-                    for(Listener l : listeners){
-                        if(mgr.hasLoadListeners(pc, meta) == false){
-                            System.out.println("false!");       
-                        }
-                     
-                    }
-                }
-            };
-            removerThread.setUncaughtExceptionHandler(this);
-            hasLoadListenersThread.setUncaughtExceptionHandler(this);
-            
-            hasLoadListenersThread.start();
-            removerThread.start();
-            
-            removerThread.join();
-            hasLoadListenersThread.join();
-            
-            Throwable t = exceptions.get(hasLoadListenersThread);
-            assertNull(t);
-        }
-    }
-    Map<Thread, Throwable> exceptions = new HashMap<Thread, Throwable>();
-    public void uncaughtException(Thread thread, Throwable throwable) {
-        exceptions.put(thread, throwable);
-        
-    }
-
-    private MetaDataRepository getMDR() {
-        return ((OpenJPAEntityManagerFactorySPI)getEmf()).getConfiguration().getMetaDataRepositoryInstance();
-    }
 
     private static class Listener
         implements LoadListener, StoreListener {